diff -durpN glibc-2.1.1/BUGS glibc-2.1.2/BUGS --- glibc-2.1.1/BUGS Mon Apr 19 17:58:10 1999 +++ glibc-2.1.2/BUGS Mon Sep 6 12:31:20 1999 @@ -1,7 +1,7 @@ List of known bugs (certainly very incomplete) ---------------------------------------------- -Time-stamp: <1999-04-19T17:58:10-0700 drepper> +Time-stamp: <1999-07-06T15:38:22-0700 drepper> This following list contains those bugs which I'm aware of. Please make sure that bugs you report are not listed here. If you can fix one diff -durpN glibc-2.1.1/ChangeLog glibc-2.1.2/ChangeLog --- glibc-2.1.1/ChangeLog Mon May 24 18:17:59 1999 +++ glibc-2.1.2/ChangeLog Mon Sep 6 14:19:12 1999 @@ -1,3 +1,1360 @@ +1999-09-06 Ulrich Drepper + + * sysdeps/unix/sysv/linux/alpha/Dist: Add sys/user.h. + +1999-09-06 Andreas Jaeger + + * math/libm-test.c (j0_test): Add some deltas for m68k. + (jn_test): Likewise. + +1999-09-06 Ulrich Drepper + + * iconvdata/iso-2022-jp.c: When translating to ISO-2022-JP* write + escape sequences out even if the character itself does not fit + into the buffer. + + * iconvdata/jis0201.h (ucs4_to_jisx0201): Correct mapping for U005C. + +1999-08-30 H.J. Lu + + * db2/common/db_region.c (__db_rdetach): Unmap the region if necessary. + +1999-09-05 Roland McGrath + + * hurd/hurdprio.c (_hurd_priority_which_map): If WHO is zero default + it to getpid () for PRIO_PROCESS, geteuid () for PRIO_USER. + +1999-09-03 Andreas Schwab + + * sysdeps/unix/sysv/linux/syscalls.list: Rename strong name for + fork from __syscall_fork to __libc_fork. + * posix/Versions: Add __libc_fork and __vfork to version + GLIBC_2.1.2. + +1999-08-30 Andreas Jaeger + + * io/ftwtest-sh: Set LC_ALL and LANG to fix locale + dependencies in sort. + +1999-09-01 H.J. Lu + + * sysdeps/unix/sysv/linux/alpha/sys/user.h: New file. + + * sysdeps/unix/sysv/linux/alpha/sys/procfs.h: Include + instead of . + +1999-08-31 Scott Bambrough + + * sysdeps/unix/sysv/linux/arm/bits/armsigctx.h: Enclose header in an + #ifdef statement to prevent it from being included twice. + * sysdeps/unix/sysv/linux/arm/sigcontextinfo.h: + #include . + +1999-08-30 Ulrich Drepper + + * sysdeps/i386/Makefile [csu]: Define CFLAGS-initfini.s to force + compiling for i386 to avoid i686-like GOT pointer computation. + +1999-08-28 H.J. Lu + + * nscd/nscd_getgr_r.c (nscd_getgr_r): Don't count the alloca'ed + memory for buffer. + +1999-08-28 Ulrich Drepper + + * malloc/malloc.c (ptmalloc_init): Don't use variables to set + thresholds for SUID binaries. [PR libc/1277] + +1999-08-28 Andreas Jaeger + + * manual/install.texi (Running make install): Give examples for + timezone and locale installation. + +1999-08-28 Zack Weinberg + + * glibcbug.in: Get CCVERSION from autoconf substitution. + * configure.in: Calculate and substitute CCVERSION. + +1999-08-27 Ulrich Drepper + + * sysdeps/unix/sysv/linux/netpacket/packet.h: Update from 2.3.15 + kernel. + * inet/netinet/in.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/socket.h: Likewise. + * sysdeps/unix/sysv/linux/bits/socket.h: Likewise. + +1999-08-25 Ulrich Drepper + + * sysdeps/i386/fpu/bits/mathinline.h (__finite): Mark constant as + unsigned to avoid warning. [PR libc/1271]. + +1999-07-25 Jakub Jelinek + + * sysdeps/unix/sysv/linux/sparc/bits/types.h: Define always __qaddr_t. + __ino64_t should be 32bit unsigned type on sparc32. + Define __off64_t to __quad_t instead of __int64_t. + Make __pic_pid_t unsigned on sparc32. + +1999-08-25 Ulrich Drepper + + * misc/search.h: Avoid namespace pollution. + + * db2/Makefile: Link db_dump185 against libdb1. + +1999-08-25 Mark Kettenis + + * sysdeps/unix/sysv/linux/ptsname.c: Add checks to make sure we're + really dealing with a master pseudo terminal, and really returning + the name of the associated slave pseudo terminal by checking the + device number. + +1999-08-23 Mark Kettenis + + * hurd/hurdsig.c (_hurd_internal_post_signal): Add missing else. + +1999-08-24 Ulrich Drepper + + * libio/iofopncook.c: Update for changed cookie definitions in + libio.h. Patch by Joel Klecker. + +1999-08-24 Andreas Jaeger + + * sysdeps/unix/sysv/linux/net/if_arp.h: Add new constants from + Linux 2.3.15. + +1999-08-24 Ulrich Drepper + + * sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: Add execve + syscall. + +1999-08-23 Andreas Schwab + + * sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h: Define + SIGCONTEXT_EXTRA_ARGS. + * sysdeps/unix/sysv/linux/i386/sigcontextinfo.h: Likewise. + * sysdeps/generic/sigcontextinfo.h: Likewise. + * sysdeps/mach/hurd/i386/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/arm/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h: Likewise. + +1999-08-23 Andreas Schwab + + * posix/regex.c (re_match_2_internal): Correct check for charset + after exactn in loop. + +1999-08-22 Ulrich Drepper + + * sysdeps/unix/sysv/linux/powerpc/syscalls.list: Add execve syscall. + Patch by Joel Klecker. + + * libio/libio.h: Define documented cookie types. + +1999-08-22 Mark Kettenis + + * hurd/new-fd.c (_hurd_new_fd): Initialize fcntl flags. + * hurd/port2fd.c (_hurd_port2fd): Reset the fcntl flags when + installing PORT in the descriptor cell. + +1999-08-19 Ulrich Drepper + + * sysdeps/unix/sysv/linux/execve.c: Add weak alias execve. + + * sysdeps/posix/getcwd.c: Correct comment saying < 0 is ok for size + type. [PR libc/1269] + + * posix/execvp.c: Allocate array name of correct size. + + * sysdeps/unix/sysv/linux/sys/sendfile.h: Don't allow use with + _FILE_OFFSET_BITS=64. + +1999-08-20 Andreas Jaeger + + * sysdeps/unix/sysv/linux/getdirentries.c: Copy over missing patches + from mainline. + + * elf/rtld.c (_dl_start): Add missing declaration of cnt. + +1999-08-20 Andreas Jaeger + + * dirent/dirent.h: Fix typo in last change. + +1999-08-19 Roland McGrath + + * sysdeps/mach/hurd/i386/intr-msg.h (INTR_MSG_TRAP): Mark OPTION and + TIMEOUT as outputs of the asm to indicate that the signal thread + might mutate them. + * hurd/intr-msg.c (_hurd_intr_rpc_mach_msg): Short circuit to plain + mach_msg if only sending or only receiving (i.e., not an RPC). When + making an RPC that might get interrupted, save OPTION and the portion + of the message buffer that gets clobbered by an EINTR reply message, + and properly restore them before attempting to retry the request + message send. + +1999-08-19 Ulrich Drepper + + * sysdeps/unix/sysv/linux/execve.c: New file. This version terminates + all threads [PR libc/1223]. + + * elf/rtld.c (_dl_start): Initialize bootstrap_map.l_info to zero. + [PR libc/1165]. + + * dirent/dirent.h: Redirect getdirentries to getdirentries64 if + compiled with _FILE_OFFSET_BITS=64. + +1999-08-19 Ulrich Drepper + + * sysdeps/generic/setenv.c (__add_to_environ): Initialize ep + after we have the lock. + + * sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h: New file. + Patch by Richard Henderson. + +1999-08-18 Ulrich Drepper + + * sysdeps/generic/setenv.c: Avoid warning about uninitialized variable. + + * dirent/dirent.h: Define ino_t and ino64_t if not done already. + (seekdir): Fix type of second parameter. + * sysdeps/generic/seekdir.c: Likewise. + * sysdeps/mach/hurd/seekdir.c: Likewise. + * sysdeps/unix/seekdir.c: Likewise. + +1999-08-17 Ulrich Drepper + + * dirent/dirent.h (telldir): Change return type to long int. + * sysdeps/generic/telldir.c: Likewise. + * sysdeps/mach/hurd/telldir.c: Likewise. + * sysdeps/unix/telldir.c: Likewise. + * sysdeps/unix/bsd/telldir.c: Likewise. Fix locking problem. + +1999-08-18 Andreas Jaeger + + * manual/install.texi (Configuring and compiling): Clarify ix86 + situation. + +1999-08-17 Ulrich Drepper + + * timezone/tst-timezone.c (tests): Update America/Sao_Paulo test + case for new tzdata. + + * sysdeps/libm-ieee754/s_erf.c: Correct type in performance increase + rewrite. Patch by Alan Stern . + + * timezone/private.h: Update from tzcode1999e. + * timezone/zic.c: Likewise. + + * timezone/africa: Update from tzdata1999e. + * timezone/antarctica: Likewise. + * timezone/asia: Likewise. + * timezone/australasia: Likewise. + * timezone/europe: Likewise. + * timezone/leapseconds: Likewise. + * timezone/northamerica: Likewise. + * timezone/southamerica: Likewise. + + * stdio-common/vfprintf.c (process_arg): Correct last patch and + write correct number of bytes in case of %ls with precision. + +1999-08-16 Ulrich Drepper + + * nscd/nscd.init: Test for kernel version and make LSB compliant. + Patch by Christian Gafton. + + * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Define O_DSYNC and + O_RSYNC. Patch by Christian Gafton. + + * stdio-common/vfprintf.c (process_arg): Correct %ls handling wrt + to precision. + +1999-08-15 Ulrich Drepper + + * wcsmbs/wcsnlen.c: Correct decrement maxlen. + +1999-07-20 Geoff Keating + + * math/libm-test.c: Tweak deltas for a clean run on ppc. + +1999-08-15 Ulrich Drepper + + * iconv/gconv_builtin.h: Add ISO registry alias for UTF8. + +1999-08-15 Andreas Jaeger + + * manual/job.texi (Process Group Functions): Document getpgid, + getsid. + +1999-08-15 Ulrich Drepper + + * sysdeps/unix/sysv/linux/aio_sigqueue.c: Take extra parameter and + initialize si_pid from it. + * sysdeps/generic/aio_sigqueue.c (__aio_sigqueue): Take extra + parameter. + * rt/aio_misc.c (__aio_enqueue_request): Initialize caller_pid. + * rt/aio_misc.h (struct waitlist): Add caller_pid element. + (struct requestlist): Likewise. + Adjust prototypes of __aio_notify_only and __aio_sigqueue. + * rt/notify.c (__aio_notify_only): Take extra parameter. Pass it + to __aio_sigqueue. + (__aio_notify): Pass caller PID to __aio_notify_only. + * rt/aio_suspend.c: Initialize caller_pid. + * rt/lio_listio.c: Likewise. + * rt/lio_listio64.c: Likewise. + + * rt/lio_listio.c: If nothing has to be done free mutex before + signalling. + * rt/lio_listio64.c: Likewise. + +1999-08-10 H.J. Lu + + * resolv/nss_dns/dns-host.c (getanswer_r): Cleanup out-of- + buffer handling. + +1999-08-15 Ulrich Drepper + + * intl/locale.alias: Add catalan. + +1999-08-14 Andreas Jaeger + + * manual/install.texi (Configuring and compiling): Mention + CFLAGS. + +1999-08-15 Ulrich Drepper + + * po/pt_BR.po: New file. + +1999-08-13 Andreas Jaeger + + * math/libm-test.c (yn_test): Adjust deltas for i386. + (ccosh_test): Likewise. + (jn_test): Likewise. + +1999-08-13 Andreas Jaeger + + * configure.in: install-sh lives now in scripts subdir. + PR libc/1255 (bug 4). + +11999-08-13 Ulrich Drepper + + * stdio-common/vfscanf.c: Don't recognize hexadecimal floats without + exponent. + +1999-08-13 Ulrich Drepper + + * po/fr.po: Update. + +1999-08-09 Scott Bambrough + + * elf/elf.h: Added definition of ELFOSABI_ARM. + * elf/dl-load.c (_dl_map_object_from_fd): Use VALID_ELF_HEADER, + VALID_ELF_OSABI, VALID_ELF_ABIVERSION to decide whether an + object's header and ABI values are acceptable. + (VALID_ELF_HEADER): New macro; provide default definition. + (VALID_ELF_OSABI): New macro; provide default definition. + (VALID_ELF_ABIVERSION): New macro; provide default definition. + * sysdeps/arm/dl-machine.h Define ARM specific versions of + VALID_ELF_HEADER, VALID_ELF_OSABI, VALID_ELF_ABIVERSION. + +1999-08-08 Ulrich Drepper + + * sysdeps/ieee754/ieee754.h: Handle platforms with special + __FLOAT_WORD_ORDER. Patch by Joel Klecker . + + * string/bits/string2.h: Mark void* operations as extensions. + * sysdeps/i386/i486/bits/string.h: Likewise. + +1999-08-06 Ulrich Drepper + + * resolv/res_send.c (res_send): Recompute timeout for poll for + each jump to `wait'. + + * inet/netinet/in.h (IN6ADDR_ANY_INIT): Add correct number of + braces to avoid warnings. + (IN6ADDR_LOOPBACK_INIT): Likewise. + + * sysdeps/unix/sysv/linux/bits/socket.h: Fix typo (MSG_TRUNC -> + MSG_DONTWAIT). + +1999-08-06 H.J. Lu + + * malloc/malloc.c: Initialize __libc_pagesize early. + +1999-08-06 Ulrich Drepper + + * resolv/res_send.c (res_send): Don't test file descriptor for + range, we use poll now. [PR libc/1240] + +1999-08-05 Thorsten Kukuk + + * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (O_RSYNC, O_DSYNC): + Define. + +1999-08-04 Ulrich Drepper + + * rt/aio_read.c: Fix return value. + * rt/aio_read64.c: Likewise. + Reported by Christian Gafton. + + * rt/aio_write.c: Fix return value. + * rt/aio_write64.c: Likewise. + * rt/aio_fsync.c: Likewise. + + * rt/aio_misc.c: Set errno at correct place. + + * rt/aio_fsync.c: Test OP parameter for correct values. + +1999-08-04 Andreas Schwab + + * sysdeps/unix/sysv/linux/alpha/getsysstats.c (GET_NPROCS_PARSER): + Initialize result to one. + (GET_NPROCS_CONF_PARSER): Likewise. + +1999-08-02 Thorsten Kukuk + + * nis/nis_callback.c: Fix port problem on big-endian machines. + * sunrpc/clnt_udp.c: Cast to uint32_t pointer, not short. RPC + fields are always 32 bit. + Patches from Paul Mackerras + + * nis/nss_nis/nis-service.c: Remove htons, port is always in + network-byte-order. + * nis/nss_nisplus/nisplus-service.c: Rename number to port. + +1999-08-01 Ulrich Drepper + + * dlfcn/dlerror.c: Make code thread-safe. + +1999-07-31 Roland McGrath + + * hurd/intr-msg.c (_hurd_intr_rpc_mach_msg): Fix msgt_size member + initializer in CHECK: a bit size, not the type code repeated! + +1999-07-31 H.J. Lu + + * string/bits/string2.h (__strcpy_small): Fix a typo. + +1999-07-31 Ulrich Drepper + + * sysdeps/i386/fpu/e_pow.S: Use addl %esp instead of pop. + * sysdeps/i386/fpu/e_powf.S: Likewise. + * sysdeps/i386/fpu/e_powl.S: Likewise. [PR libc/1213]. + + * sysdeps/generic/e_lgammal_r.c: Set *signgam to zero. + * sysdeps/generic/e_gammal_r.c: Likewise. [PR libc/1212]. + +1999-07-30 Andreas Schwab + + * sysdeps/unix/sysv/linux/getsysstats.c (GET_NPROCS_PARSER): New + definition. + (__get_nprocs): Use it. + (__get_nprocs_conf): Define as separate function if + GET_NPROCS_CONF_PARSER is defined. + * sysdeps/unix/sysv/linux/alpha/getsysstats.c: New file. + + * include/sys/sysinfo.h: New file. + * sysdeps/generic/sys/sysinfo.h: Remove declaration of internal + interface. + * sysdeps/unix/sysv/linux/sys/sysinfo.h: Likewise. + +1999-07-30 Andreas Schwab + + * Makerules: Put sysd-versions and Versions.all on + postclean-generated instead of common-generated. + +1999-07-29 Andreas Jaeger + + * manual/time.texi (Basic CPU Time): Note that clock_t can wrap + around and CLOCKS_PER_SEC is 1e6. + +1999-07-29 Andreas Schwab + + * misc/efgcvt.c (NDIGIT_MAX): Provide precomputed constants for + all floating point formats supported by gcc. Error out for + unhandled precisions. + * misc/efgcvt_r.c (NDIGIT_MAX): Likewise. + * misc/qefgcvt.c (NDIGIT_MAX): Likewise. + * misc/qefgcvt_r.c (NDIGIT_MAX): Likewise. + +1999-07-29 Ulrich Drepper + + * sysdeps/generic/setenv.c: Move setenv code in new function + __add_to_environ. Add new parameter specifying already + constructed string for the environment. + (setenv): Call __add_to_environ with new parameter set to NULL. + (unsetenv): Really test all elements for duplicated name. Missed those + cases where the two are following each other. + * sysdeps/generic/putenv.c: Use __add_to_environ instead of setenv. + * include/stdlib.h: Add prototype of __add_to_environ. + * stdlib/tst-environ.c: New file. + * stdlib/Makefile (tests): Add tst-environ. + + * sysdeps/i386/bits/string.h (__memset_cc): Fix typo in last patch. + + * nis/nss_nis/nis-initgroups.c (_nss_nis_initgroups): Correct size + argument in realloc call. + * nis/nss_compat/compat-initgroups.c (_nss_compat_initgroups): + Likewise. + Reported by Danny Braniss . + +1999-07-28 Ulrich Drepper + + * misc/efgcvt.c: Use IEEE 854 formula to compute the number of digits + to print. + * misc/efgcvt_r.c: Likewise. + * misc/qefgcvt.c: Likewise. + * misc/qefgcvt_r.c: Likewise. + +1999-07-27 Andreas Jaeger + + * manual/math.texi (FP Function Optimization): Mention drawbacks. + +1999-07-28 Ulrich Drepper + + * stdlib/mblen.c: Use static state. + Reported by Bruno Haible . + + * stdlib/mbtowc.c: Reset state for s == NULL. + * stdlib/wctomb.c: Likewise. + Reported by Bruno Haible . + + * stdlib/mbstowcs.c: Do not use global state. + Reported by Bruno Haible . + +1999-07-27 Mark Kettenis + + * sysdeps/mach/hurd/i386/init-first.c (init): Move the inline + assembler code to switch stacks and call init1 outside this + function. Inside `init' the code was optimized away by gcc + 2.95 since it was "clearly" unreachable. + * sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler): + Do something similar for the trampoline code. + +1999-07-27 Mark Kettenis + + * sysdeps/mach/hurd/Makefile [stdio-common]: Set inhibit-siglist. + (The code this disables is entirely gone in the main branch, + so this change does not need to be propagated from the 2.1 branch.) + +1999-07-27 Ulrich Drepper + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Only return information + for the hinted protocol. + +1999-07-26 Andreas Jaeger + + * README.template (configurations): The crypt add-on has a new + ftp site. + * manual/install.texi (Installation): Likewise. + +1999-07-26 Ulrich Drepper + + * stdlib/wcstombs.c: Do not use global state. + Reported by Bruno Haible . + + * wcsmbs/wctob.c: Avoid sign extension when returning character. + Reported by Bruno Haible . + + * wcsmbs/wcsrtombs.c (__wcsrtombs): When computing maximum number + of wide characters to convert do it right and don't overestimate + by multiplying with MB_CUR_MAX. + Reported by Bruno Haible . + +1999-07-25 Ulrich Drepper + + * libio/iofclose.c (_IO_new_fclose): Only fall back on + _IO_old_fclose if doing versioning. + + * libio/iofclose.c (_IO_new_fclose): Detect new streams and handle + them appropriately. + * libio/oldiofclose.c (_IO_old_fclose): Likewise. + + * misc/mntent_r.c: Allow spaces and tabs in entry names by + encoding these characters. + * misc/tst-mntent.c: Add test case for addmntent and getmntent. + + * string/bits/string2.h: Fix aliasing problems. + * sysdeps/i386/i486/bits/string.h: Likewise. + * sysdeps/i386/bits/string.h: Likewise. + +1999-07-25 Andreas Jaeger + + * localedata/tst-rpmatch.sh: Use "&" instead of "§" to avoid a bug + in bash 2.03. + +1999-07-25 Ulrich Drepper + + * iconvdata/euc-kr.c (euckr_from_ucs4): Set cp[0] to '\0' in case + of an error. Patch by Changwoo Ryu . + +1999-07-24 Ulrich Drepper + + * iconvdata/ksc5601.h (ksc5601_to_ucs4): Avoid invalid memory + accesses. + + * resolv/res_send.c: Add locks for res_send and res_close use. + +1999-07-26 Roland McGrath + + * hurd/hurdprio.c (_hurd_priority_which_map): Initialize PIDS. + Fix from Marcus Brinkmann . + +1999-07-21 Andreas Schwab + + * libio/fileops.c (_IO_new_file_underflow): Set error indicator + when reading from write-only stream. + * libio/oldfileops.c (_IO_old_file_underflow): Likewise. + +1999-07-20 Mark Kettenis + + * sysdeps/mach/_strerror.c: Include . + +1999-07-19 Roland McGrath + + * hurd/hurdsig.c (_hurd_internal_post_signal): If a + hurd_signal_preemptor matches but its `preemptor' field is null, use + its `handler' field directly. This is to comply with behavior + documented in . + +1999-07-19 Andreas Schwab + + * iconvdata/Makefile (distribute): Don't distribute CVS + directory. + * sysdeps/generic/Dist: Add siglist.h. + * sysdeps/mach/hurd/Dist: Add siglist.h. + +1999-07-18 Ulrich Drepper + + * sysdeps/unix/sysv/linux/sparc/Dist: Add ldd-rewrite.sed. + +1999-07-17 Ulrich Drepper + + * sysdeps/unix/sysv/linux/arm/Versions: Undo last change. + +1999-07-14 Andreas Schwab + + * Makerules (common-generated): Don't prepend $(common-objpfx). + +1999-07-12 Andreas Schwab + + * elf/rtld.c (dl_main): When putting back the interpreter object + handle the case where a missing object might occur in the list of + objects but not in the search list when in trace mode. + +1999-07-15 Ulrich Drepper + + * stdio-common/bug1.c: Include to get prototype for free. + + * malloc/mallo.c: Add missing chunk of patch from 1999-07-04. + + * stdio-common/bug1.c: Avoid memory leak. + + * sysdeps/libm-i387/e_pow.S: Use addl instead of pop/pop to keep + program deterministic. + * sysdeps/libm-i387/e_powf.S: Likewise. + * sysdeps/libm-i387/e_powl.S: Likewise. + +1999-07-15 Philip Blundell + + * sysdeps/unix/sysv/linux/arm/Versions (_inb, _inw, _inl, _outb, + _outw, _outl): Added to GLIBC_2.1.2. + +1999-07-15 Ulrich Drepper + + * posix/unistd.h: Use __PMT for exit. + +1999-07-13 Andreas Schwab + + * elf/dl-runtime.c (fixup, profile_fixup): Call alloca to prevent + inlining. Fixes PR libc/1198. + +1999-07-14 Ulrich Drepper + + * time/strptime.c (get_number): Handle number parsing more + consistent with strftime. Only parse a given number of digits. + (get_alt_number): Fix implementation. Was broken. + (strptime_internal): Add third parameter to get_number and + get_alt_number calls. + +1999-07-12 Ulrich Drepper + + * sysdeps/posix/getaddrinfo.c (gaih_inet): For non-passive + connections without a hostname set address to localhost address. + +1999-07-11 H.J. Lu + + * nscd/grpcache.c: Add prefix "__" to get[a-z]*_r () to get + nscd's own strong version of the get[a-z]*_r function. + * nscd/hstcache.c: Likewise. + * nscd/pwdcache.c: Likewise. + +1999-07-12 Ulrich Drepper + + * configure.in: Recognize 2.95 as gcc version number. + Patch by Joel Klecker . + +1999-07-11 Roland McGrath + + * sysdeps/mach/hurd/brk.c (static_data_start): New variable. + (_hurd_set_brk, init_brk): Use that instead of &__data_start. + Initialize it from &__data_start if defined, or else &_end. + +1999-07-09 Ulrich Drepper + + * sysdeps/i386/bits/string.h (__memcpy_c): Help some stupid old + compilers. + (__memset_cc): Likewise. + + * sysdeps/generic/libc-start.c: For SUID binaries check whether + the standard file descriptors are open. + Reported by Chris Evans . + + * sysdeps/unix/sysv/linux/syscalls.list: Remove mmap64 alias for mmap. + * sysdeps/unix/sysv/linux/mmap64.c: Test whether mapped area is in + range of mmap. If not fail. + Patches by Daniel Jacobowitz . + +1999-07-09 Ulrich Drepper + + * stdio-common/vfprintf.c (buffered_vfprintf): Add locking. + +1999-07-09 H.J. Lu + + * Versions.def (GLIBC_2.1.2): Added. + + * nss/getXXent_r.c: Make the new ABI GLIBC_2.1.2 and keep the + old one as GLIBC_2.0. + * nss/getXXbyYY_r.c: Likewise. + + * grp/Versions (getgrent_r, getgrgid_r, getgrnam_r): Added to + GLIBC_2.1.2. + * inet/Versions (getaliasbyname_r, getaliasent_r, + gethostbyaddr_r, gethostbyname2_r, gethostbyname_r, + gethostent_r, getnetbyaddr_r, getnetbyname_r, getnetent_r, + getnetgrent_r, getprotobyname_r, getprotobynumber_r, + getprotoent_r, getrpcbyname_r, getrpcbynumber_r, getrpcent_r, + getservbyname_r): Likewise. + * pwd/Versions (getpwent_r, getpwuid_r): Likewise. + * shadow/Versions (getspent_r, getspnam_r): Likewise. + +1999-07-09 Ulrich Drepper + + * elf/rtld.c: Split _dl_start in two pieces to prevent GOT usage + before the relocation happened. + Patch by Franz Sirl . + +1999-06-13 Geoff Keating + + * sysdeps/powerpc/atomicity.h (exchange_and_add): Remove `volatile'; + add `memory' clobber; optimise for constant `val'. + (atomic_add): Likewise. + (test_and_set): Remove `volatile'; add `memory' clobber; be more + like the original `test_and_set'. + (compare_and_swap): Remove `volatile'; add `memory' clobber; + optimise for constant `oldval'. + (always_swap): Remove `volatile'; add `memory' clobber. + +1999-07-08 Andreas Schwab + + * libio/iofopncook.c (fopencookie): Set _fileno to -2. + + * libio/libioP.h (_IO_file_is_open): Only check for -1, not all + negative numbers. + + * libio/fileops.c (_IO_new_file_close_it): Set _fileno to -1, not + EOF. + * libio/oldfileops.c (_IO_old_file_close_it): Likewise. + +1999-07-08 Andreas Schwab + + * libio/fileno.c: Return -1 instead of EOF and set errno if the + stream is not a real file stream. + +1999-07-08 Andreas Schwab + + * manual/charset.texi: Fix typos. + +1999-07-07 Ulrich Drepper + + * sysdeps/generic/setenv.c: Describe problem. + + * malloc/malloc.c (request2size): Also set errno if failing. + + * malloc/malloc.c (request2size): Take care of overflow in + addition. + + * sysdeps/posix/getcwd.c: Correct last patch. Handle getcwd + (NULL, != 0) correctly. + + * sysdeps/posix/getcwd.c: When resizing buffer make sure new size + is large enough. + +1999-07-07 Andreas Schwab + + * sysdeps/unix/sysv/linux/getpt.c: Check that /dev/pts is mounted. + (_PATH_DEVPTS, DEVPTS_SUPER_MAGIC): New definitions. + (_PATH_DEVPTMX): Use _PATH_DEV. + +1999-07-02 Tim Waugh + + * posix/wordexp-test.c: Revert bogus 'unset IFS' change. It + doesn't belong in the tests, but in the wordexp implementation. + + * posix/wordexp.c (exec_comm): Unset IFS so that subshells don't + split fields. + +1999-07-06 Ulrich Drepper + + * sysdeps/unix/sysv/linux/alpha/ioperm.c: Update for some more + motherboards. + Patch by Jay Estabrook. + + * sysdeps/unix/sysv/linux/configure.in: Don't test for libc4 in + ldd for SPARC. + * /sysdeps/unix/sysv/linux/sparc/ldd-rewrite.sed: New file. + Patch by Cristian Gafton. + +1999-07-02 Cristian Gafton + + * sysdeps/unix/sysv/linux/bits/socket.h (__cmsg_nxthdr): "return 0" + instead of "return NULL" to make C++ happy. + +1999-07-04 Mark Kettenis + + * libio/iofdopen.c (_IO_new_fdopen): Set EINVAL if MODE is not + allowed by the file access mode of the open file. + +1999-07-04 Wolfram Gloger + + * malloc/malloc.c (request2size): Check for overflow and return + NULL whenever it is encountered. + +1999-07-01 Cristian Gafton + + * time/strptime.c (strptime): Initialize the tm struct first to avoid + returning bogus results on incomplete data. + (strptime_internal): day_of_the_week() requres bith tm_mon and + tm_mday to be initializaed. + Computer them first if they are not given. + (strptime_internal): (have_mon, have_mday): New variables. + +1999-07-01 Andreas Jaeger + + * inet/rcmd.c (__icheckhost): Fix typo in last patch. + +1999-07-01 Andreas Jaeger + + * wcsmbs/wcschr.c (wcschr): Fix last patch: Add missing semicolon. + * wcsmbs/wcsrchr.c (wcsrchr): Likewise. + +1999-07-01 Andreas Jaeger + + * posix/wordexp.c (parse_tilde): Handle failing call to + get.*_r functions correctly for non-existing entry. + * sysdeps/posix/cuserid.c (cuserid): Likewise. + * sysdeps/posix/getaddrinfo.c (gaih_inet_serv): Likewise. + +1999-06-30 Ulrich Drepper + + * sysdeps/unix/sysv/linux/gethostid.c: Handle failing call to + getxxbyYY_r functions correctly for non-existing entry. + * sunrpc/getrpcport.c: Likewise. + * sunrpc/clnt_simp.c: Likewise. + * inet/rexec.c: Likewise. + * sunrpc/clnt_gen.c: Likewise. + * inet/rcmd.c: Likewise. + * sysdeps/generic/glob.c: Likewise. + +1999-06-28 Andreas Jaeger + + * inet/rcmd.c (__icheckhost): Test for gethostbyname_r result + correctly. + +1999-06-25 Andreas Jaeger + + * manual/arith.texi (System V Number Conversion): Fix the + description which confused pointer and value to pointer. + Reported by Andries.Brouwer@cwi.nl. + +1999-06-28 Andreas Jaeger + + * pwd/getpw.c (__getpw): Check for NULL result pointer. + +1999-06-29 Andreas Jaeger + + * manual/users.texi (Lookup User): Document POSIX return + semantics for getpwuid_r and getgrgid_r. + + * manual/socket.texi (Host Names): Document that the result + pointer is null in case of error or host not found and fix a + typo. Give a small example. + +1999-06-30 Ulrich Drepper + + * pwd/getpw.c: Add warning since no buffer size is given and + therefore no overrun tests are possible. + +1999-06-30 Andreas Jaeger + + * pwd/pwd.h: Add getpw prototype declaration. + +1999-06-30 Ulrich Drepper + + * wcsmbs/wcsrchr.c: Fix handling of L'\0' parameter. + * wcsmbs/wcschr.c: Likewise. + +1999-06-28 Ulrich Drepper + + * sysdeps/unix/sysv/linux/gethostid.c: Test for gethostbyname_r + function correctly. + + * sunrpc/getrpcport.c: Test for gethostbyname_r function + correctly. + + * sunrpc/clnt_simp.c: Test for gethostbyname_r function correctly. + + * sunrpc/clnt_gen.c: Test for gethostbyname_r and getprotobyname_r + functions correctly. + + * inet/rexec.c (rexec): Test for gethostbyname_r result correctly. + + * inet/rcmd.c: Test for gethostbyname_r result correctly. Optimize + file reading a bit. + + * sysdeps/generic/glob.c: Test for getpwnam_r result correctly. + +1999-06-28 Ulrich Drepper + + * sysdeps/libm-ieee754/e_gamma_r.c: Initialize *signgamp for NaN + returns. + * sysdeps/libm-ieee754/e_gammaf_r.c: Likewise. + * sysdeps/libm-ieee754/e_gammal_r.c: Likewise. + Reported by John Reiser [PR libc/1185]. + +1999-06-28 Andreas Jaeger + + * manual/string.texi (Copying and Concatenation): Mention that + strndup is a GNU extension. + +1999-06-28 Andreas Jaeger + + * pwd/getpw.c (__getpw): Fix check for error return. + +1999-06-25 Andreas Schwab + + * elf/dl-deps.c (_dl_map_object_deps): When looking for the next + occurence of the aux object start with the current list entry, not + the new one. Adjust tail pointer in the unique list. Explain how + the meaning of the variables changes. + +1999-06-25 Ulrich Drepper + + * string/bits/string2.h (strnlen): Remove extra prototype. + +1999-06-25 Roland McGrath + + * hurd/hurd.h, hurd/hurd/fd.h, hurd/hurd/port.h, hurd/hurd/signal.h, + hurd/hurd/threadvar.h, hurd/hurd/userlink.h: Instead of + _EXTERN_INLINE, use a macro specific to each file, + _HURD_FD_H_EXTERN_INLINE and the like. + * hurd/Makefile (inline-headers): New variable. + (routines): Remove hurdinline. Add $(inlines). + (inlines): New variable. + ($(inlines:%=$(objpfx)%.c)): New static pattern rule to generate them. + (generated): Append those here. + * hurd/hurdinline.c: File removed. + + * sysdeps/generic/glob64.c: Include for NULL. + + * mach/Versions (libc: GLIBC_2.0): Add __mig_strncpy. + +1999-06-24 Ulrich Drepper + + * misc/tst-efgcvt.c (ecvt_tests): Test 92.0 with ndigits == 16. + +1999-06-24 Thorsten Kukuk + + * nscd/grpcache.c: Add "notfound" data to cache, not iov pointer. + * nscd/pwdcache.c: Likewise. + * nscd/hstcache.c: Likewise. + +1999-06-23 Ulrich Drepper + + * manual/arith.texi: Document restriction of ndigit parameter of + ecvt and friends. + * misc/efgcvt.c: Define NDIGIT_MAX. + (gcvt): Limit precision in sprintf call to NDIGIT_MAX. + Do not dynamically allocate the static buffers. They are small enough. + * misc/efgcvt_r.c: Define NDIGIT_MAX. + (fcvt_r): Limit precision in snprintf call to NDIGIT_MAX. + * misc/qefgcvt.c: Define NDIGIT_MAX. + * misc/qefgcvt_r.c: Likewise. + * misc/tst-efgcvt.c (special): Add test for large ndigit parameter. + +1999-06-23 Ulrich Drepper + + * stdio/fputc.c: Don't define alias if fputc is defined as a + macro. + * stdio/putc.c: Define weak alias here since it is not done + anymore in fputc.c. + +1999-06-22 Geoff Keating + + * sysdeps/powerpc/strcmp.S: Don't return a zero result if the high + bits of two words differ. + +1999-06-18 Thorsten Kukuk + + * sysdeps/alpha/atomicity.h: Correct counting of subsections. + +1999-06-20 Andreas Jaeger + + * libio/oldiopopen.c (_IO_old_proc_open): Apply change from + 1999-03-29 to iopopen also here. + Reported by Richard Braakman . + +1999-06-18 Ulrich Drepper + + * sunrpc/xdr_sizeof.c (x_inline): Cleanup pointer assignments. + +1999-06-16 Roland McGrath + + * sysdeps/unix/sysv/linux/siglist.c: Moved to ... + * sysdeps/gnu/siglist.c: ... here. + Use instead of "siglist.h", to ensure sysdeps-search. + Use instead of to determine PTR_SIZE_STR. + * sysdeps/gnu/siglist.h: New file, contents from linux version. + Add entry for SIGLOST protected by #ifdef. + * sysdeps/unix/sysv/linux/siglist.h: Just #include that file, + and define OLD_SIGLIST_SIZE_STR. + * sysdeps/mach/hurd/siglist.h: New file, likewise. + +1999-06-18 H.J. Lu + + * localedata/Makefile (charmaps): Exclude SCCS. + (locales): Likewise. + (repertoiremaps): Likewise. + +1999-06-18 Ulrich Drepper + + * sysdeps/generic/bsd-_setjmp.c: Include setjmp.h. + * sysdeps/generic/bsd-setjmp.c: Likewise. + +1999-06-17 Andreas Jaeger + + * sysdeps/unix/sysv/linux/bits/ioctl-types.h: Add missing line + disciplines. + +1999-06-17 Ulrich Drepper + + * nss/getXXbyYY_r.c: Return error code not -1. + * nss/getXXent_r.c: Likewise. + * nss/getXXbyYY.c: Expect return alue to be ERANGE if buffer is too + small. + * nscd/nscd_getgr_r.c: Return -1 in case nscd is not available and + value > 0 for error. + * nscd/nscd_gethst_r.c: Likewise. + * nscd/nscd_getpw_r.c: Likewise. + +1999-06-16 Andreas Jaeger + + * sysdeps/unix/sysv/linux/netax25/ax25.h (AX25_PIDINCL): Added. + +1999-06-14 Andreas Schwab + + * sysdeps/unix/sysv/linux/sys/sysmacros.h [!__GNUC__]: Use correct + word order. + * sysdeps/unix/sysv/linux/alpha/sys/sysmacros.h: New file. + * sysdeps/unix/sysv/linux/sparc/sys/sysmacros.h: New file. + +1999-06-17 Ulrich Drepper + + * sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c: Don't fail + always when oact is NULL. + Patch by Christian Meder . + +1999-06-17 Andreas Jaeger + + * math/libm-test.c (jn_test): Adjust delta. + +1999-06-17 Andreas Jaeger + + * elf/dl-load.c (_dl_init_paths): Add one more element to aelem + to not write beyond allocated memory. + Reported by John Reiser , closes PR libc/1167. + +1999-06-17 Ulrich Drepper + + * malloc/mtrace.c: Keep lock while printing output lines. + Patch by carsten.zimmermann@mediaways.net [PR libc/1166]. + +1999-06-15 H.J. Lu + + * Make-dist (sysdep_dirs): Exclude SCCS. + * MakeTAGS (sysdep_dirs): Likewise. + +1999-06-15 Ulrich Drepper + + * posix/regex.c (re_error_msgid): Remove extra commas. + +1999-06-14 Geoff Keating + + * stdlib/strtol.c: It is not generally true that if + (unsigned)a*(unsigned)b overflows, then the result is + less than 'a'. + +1999-06-13 Andreas Jaeger + + * sysdeps/i386/fpu/bits/mathinline.h: Disable signbit* inline + functions for gcc <= 2.7.x. + +1999-06-13 Ulrich Drepper + + * sysdeps/i386/fpu/bits/mathinline.h: Add __extension__ to signbit + definitions to calm down gcc. + +1999-06-13 Roland McGrath + + * hurd/hurdsock.c (_hurd_socket_server): Fix fencepost error in last + change. + +1999-06-12 Mark Kettenis + + * Makeconfig (static-start-installed-name): Set to + $(start-installed-name) if not defined. + (+link-static): Use $(static-start-installed-name) instead of + $(start-installed-name). + * sysdeps/mach/hurd/i386/Makefile (static-start-installed-name): + Set to crt0.o. + +1999-06-12 Mark Kettenis + + * sysdeps/mach/hurd/fork.c (__fork): Make use of `insert_type' when + inserting a send right into the child instead of unconditionally + copying the send right. + +1999-06-13 Andreas Jaeger + + * sysdeps/unix/sysv/linux/bits/socket.h: Add some missing + MSG_* flags from Linux 2.2.9. + +1999-06-12 Ulrich Drepper + + * locale/lc-time.c: Add free_mem function to free if necessary + statically allocated memory. + +1999-06-10 Jakub Jelinek + + * sysdeps/libm-ieee754/s_truncl.c: Subtract exponent + bias from the raw exponent. + +1999-06-11 Ulrich Drepper + + * inet/arpa/tftp.h: Move attribute declaration in right position. + +1999-06-11 Ulrich Drepper + + * resolv/nss_dns/dns-host.c (getanswer_r): Correctly track usage + of user-provided buffer. + +1999-06-10 Ulrich Drepper + + * stdio-common/printf-parse.h (parse_one_spec): Add support for a + and A format. + + * shadow/fgetspent_r.c (__fgetspent_r): Set errno to ENOENT for + returning after last entry. + * pwd/fgetpwent_r.c (__fgetpwent_r): Likewise. + +1999-06-09 Ulrich Drepper + + * pwd/fgetpwent_r.c: Set errno in the correct way. + * shadow/fgetspent_r.c: Likewise. + * pwd/fgetpwent.c: Handle long lines correctly. Little + optimizations. Free static buffer when debugging memory handling. + * shadow/fgetspent.c: Likewise. + + * grp/fgetgrent.c: Little optimization in loop. + +1999-06-09 Jakub Jelinek + + * stdlib/longlong.h: gas changed sethi handling when without + %hi(). Fix assembly. + +1999-06-08 Ulrich Drepper + + * misc/daemon.c: Call fork. + + * grp/fgetgrent.c (buffer): Make file local variable. + (free_mem): New function. Call for malloc debugging. + +1999-06-08 Ulrich Drepper + + * ctype/ctype.h: Protect __tobody code by __extension__. + +1999-06-13 Andreas Jaeger + + * sysdeps/unix/sysv/linux/if_index.c: Replace SIOG* with SIOCG*. + +1999-06-07 Ulrich Drepper + + * sysdeps/unix/sysv/linux/sys/sysmacros.h (makedev): Handle signed + parameters. + +1999-06-06 Ulrich Drepper + + * sysdeps/unix/sysv/linux/i386/sigaction.c: Correct restorer + function handling. + + * sysdeps/unix/sysv/linux/i386/sigaction.c (SA_RESTORER): New #define. + +1999-06-06 Andi Kleen + + * sysdeps/unix/sysv/linux/i386/sigaction.c (__sigaction): Set + SA_RESTORER flag. + +1999-06-05 Philip Blundell + + * sysdeps/arm/dl-machine.h (elf_machine_load_address): Fix + problems with GOT addressing. + +1999-06-02 Jakub Jelinek + + * stdlib/longlong.h: Define UDIV_TIME on sparc64. + +1999-06-01 Andreas Jaeger + + * sysdeps/unix/sysv/linux/net/if_arp.h (ARPHRD_DDCMP): Add it + (from Linux 2.3.4). + +1999-05-30 Andreas Jaeger + + * manual/stdio.texi: Fix some typos. + +1999-05-29 Andreas Jaeger + + * manual/stdio.texi (Formatted Output Functions): Mention + semantics of snprintf in glibc 2.0. + Reported by Ben Pfaff . + +1999-05-27 Andreas Schwab + + * malloc/malloc.h: Properly handle future GCC versions. + +1999-05-25 Ulrich Drepper + + * sysdeps/posix/getcwd.c (__getcwd): Fix potential memory leaks. + +1999-06-11 Mark Kettenis + + * hurd/hurdsock.c (max_domain): Initialize to `-1'. + (_hurd_socket_server): Fix off-by-one error in setting `max_domain'. + +1999-06-07 Ulrich Drepper + + * grp/fgetgrent.c (fgetgrent): Remember position of stream before + reading and reset in case the buffer was too small. + + * grp/fgetgrent_r.c (__fgetgrent_r): Set errno to ENOENT in case + of EOF. + +1999-06-07 Roland McGrath + + * db2/os/os_oflags.c (__db_oflags): Fix checking of O_ACCMODE bits to + be POSIX compliant. Prior definition was broken for Hurd. + Reported by Mark Kettenis . + +1999-06-05 Andreas Schwab + + * sysdeps/generic/printf_fphex.c (__printf_fphex): Don't ignore + the precision if the mantissa is zero. + +1999-06-05 Andreas Schwab + + * manual/lang.texi (Floating Point Parameters): GCC already + supports long double for a long time. + +1999-06-07 Ulrich Drepper + + * math/libm-test.c: Update from mainline branch. + +1999-06-06 Ulrich Drepper + + * malloc/malloc.c: Introduce local variable __libc_getpagesize to + avoid multiple calls to getpagesize() which might be a syscall. + +1999-06-06 Andreas Jaeger + + * manual/install.texi (Running make install): Correct typo in + dynamic linker invocation. + +1999-06-05 Wolfram Gloger + + * malloc/malloc.c (check_action): Change into bitmap so that both + diagnostic and abort can be requested by setting it to 3. + (mALLOC_SET_STATe): Disable malloc checking if necessary. + +1999-06-03 Andreas Jaeger + + * Makerules: Set LC_ALL explicitly to archieve correct sorting of + map files. Closes PR libc/1147. + +1999-06-02 Andreas Jaeger + + * sysdeps/libm-ieee754/e_j0.c (__ieee754_y0): Fix array indices. + Patch by mhagger@dera.gov.uk [PR libc/1145]. + + * math/libm-test.c (y1_test): New tests. + (y0_test): Likewise. + (j1_test): Likewise. + (j0_test): Likewise. + (main): Added new tests. + +1999-06-02 David S. Miller + + * nscd/nscd_gethst_r.c (nscd_gethst_r): Align the h_addr_list + pointers properly. + +1999-05-27 Andreas Jaeger + + * manual/socket.texi (Host Names): Remove statement that h_errno + needs to be declared since this isn't true anymore. + Closes PR libc/1138. + +1999-05-26 Jakub Jelinek + + * stdlib/longlong.h (add_ssaaaa, sub_ddmmss, umul_ppmm): + Optimized sparc64 routines. + +1999-05-25 Ulrich Drepper + + * version.h (VERSION): Bump to 2.1.2. + +1999-05-24 Jakub Jelinek + + * sysdeps/sparc/bits/wordsize.h: New file. + * sysdeps/sparc/bits/fenv.h: New file. + * sysdeps/sparc/fpu_control.h: New file. + * sysdeps/sparc/gmp-mparam.h: New file. + + * sysdeps/sparc/sparc32/fpu/bits/fenv.h: Remove. + * sysdeps/sparc/sparc32/fpu/fpu_control.h: Remove. + * sysdeps/sparc/sparc64/bits/wordsize.h: Remove. + * sysdeps/sparc/sparc64/fpu/bits/fenv.h: Remove. + * sysdeps/sparc/sparc64/fpu/fpu_control.h: Remove. + * sysdeps/sparc/sparc64/gmp-mparam.h: Remove. + + * sysdeps/unix/sysv/linux/sparc/bits/setjmp.h: New file. + * sysdeps/unix/sysv/linux/sparc/bits/types.h: New file. + * sysdeps/unix/sysv/linux/sparc/bits/statfs.h: New file. + * sysdeps/unix/sysv/linux/sparc/sys/ucontext.h: New file. + + * sysdeps/unix/sysv/linux/sparc/sparc32/sys/ucontext.h: Remove. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/setjmp.h: Remove. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/types.h: Remove. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/statfs.h: Remove. + * sysdeps/unix/sysv/linux/sparc/sparc64/sys/ucontext.h: Remove. + 1999-05-24 Ulrich Drepper * login/openpty.c (openpty): Make sure pty does not because @@ -47,7 +1404,7 @@ * configure.in: Recognize and allow gcc 2.95. -1999-05-19 Jakub Jelinek +1999-05-19 Jakub Jelinek * sysdeps/generic/bits/elfclass.h: Version common to wordsize-32 and wordsize-64. @@ -80,7 +1437,7 @@ * sysdeps/wordsize-32/inttypes.h: Remove. * sysdeps/wordsize-32/bits/wordsize.h: New file. -1999-05-19 Jakub Jelinek +1999-05-19 Jakub Jelinek * sysdeps/sparc/sparc64/memcpy.S (__align_cpy_4, __align_cpy_8, __align_cpy_16): New functions. @@ -90,7 +1447,7 @@ * sysdeps/sparc/sparc64/Versions: New file. * sysdeps/sparc/Versions: Remove. -1999-05-19 Jakub Jelinek +1999-05-19 Jakub Jelinek * sysdeps/unix/sysv/linux/configure.in: On sparc64-*-linux*, set slibdir to /lib64 if prefix diff -durpN glibc-2.1.1/FAQ glibc-2.1.2/FAQ --- glibc-2.1.1/FAQ Mon May 24 08:58:54 1999 +++ glibc-2.1.2/FAQ Mon Sep 6 12:31:23 1999 @@ -41,6 +41,9 @@ please let me know. 1.15. What's the problem with configure --enable-omitfp? 1.16. I get failures during `make check'. What should I do? 1.17. What is symbol versioning good for? Do I need it? +1.18. How can I compile on my fast ix86 machine a working libc for my slow + i386? After installing libc, programs abort with "Illegal + Instruction". 2. Installation and configuration issues @@ -231,6 +234,12 @@ EGCS and gcc 2.8.1 shows this: Make up your own decision. +GNU CC versions 2.95 and above are derived from egcs, and they may do even +better. + +Please note that gcc 2.95 and 2.95.1 cannot compile glibc on Alpha due to +problems in the complex float support. + 1.3. When I try to compile glibc I get only error messages. What's wrong? @@ -264,16 +273,8 @@ them. 1.5. Which compiler should I use for powerpc? -{GK} You want to use egcs 1.1 or later (together with the right versions -of all the other tools, of course). - -In fact, egcs 1.1 has a bug that causes linuxthreads to be -miscompiled, resulting in segmentation faults when using condition -variables. There is a temporary patch at: - - - -Later versions of egcs may fix this problem. +{GK} You want to use at least gcc 2.95 (together with the right versions +of all the other tools, of course). See also question question 2.8. 1.6. Which tools should I use for ARM? @@ -295,7 +296,9 @@ Binutils 2.9.1.0.16 or later is also req `message catalog' files containing translated versions of system messages. See ftp://ftp.gnu.org/pub/gnu or better any mirror site. (We distribute compiled message catalogs, but they may not be - updated in patches.) + updated in patches.) Please note that the required minimal version + (0.10.35) of gettext is alpha software and available from + ftp://alpha.gnu.org/gnu . * Some files are built with special tools. E.g., files ending in .gperf need a `gperf' program. The GNU version (now available in a separate @@ -328,6 +331,9 @@ Binutils 2.9.1.0.16 or later is also req reports 22h48m on Atari TT030 (Motorola 68030 @ 32 Mhz, 34 Mb memory) + A full build of the PowerPC library took 1h on a PowerPC 750@400Mhz w/ + 64MB of RAM, and about 9h on a 601@60Mhz w/ 72Mb. + If you have some more measurements let me know. @@ -401,6 +407,11 @@ files, provide support for additional ar else. The existing makefiles do most of the work; only some few stub rules must be written to get everything running. +Most add-ons are tightly coupled to a specific GNU libc version. Please +check that the add-ons work with the GNU libc. For example the crypt and +linuxthreads add-ons have the same numbering scheme as the libc and will in +general only work with the corresponding libc. + 1.12. My XXX kernel emulates a floating-point coprocessor for me. Should I enable --with-fp? @@ -512,6 +523,23 @@ compatibility - forever! The binary com against the previous version of the GNU libc (version 2.0) but also against all future versions. + +1.18. How can I compile on my fast ix86 machine a working libc for my slow + i386? After installing libc, programs abort with "Illegal + Instruction". + +{AJ} glibc and gcc might generate some instructions on your machine that +aren't available on i386. You've got to tell glibc that you're configuring +for i386 with adding i386 as your machine, for example: + + ../configure --prefix=/usr i386-pc-linux-gnu + +And you need to tell gcc to only generate i386 code, just add `-mcpu=i386' +(just -m386 doesn't work) to your CFLAGS. + +{UD} This applies not only to the i386. Compiling on a i686 for any older +model will also fail if the above methods are not used. + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@ -618,8 +646,8 @@ functions together with glibc. The functions are available, as an add-on (see question 1.11). People in the US may get it from the same place they got GNU libc from. People outside the -US should get the code from ftp.funet.fi [128.214.248.6] in the directory -pub/gnu/funet, or another archive site outside the USA. The README explains +US should get the code from ftp.gwdg.de [134.76.11.100] in the directory +pub/linux/glibc, or another archive site outside the USA. The README explains how to install the sources. If you already have the crypt code on your system the reason for the failure @@ -632,7 +660,7 @@ US. the libc.so which comes with glibc all I get is a core dump. {UD} On Linux, gcc sets the dynamic linker to /lib/ld-linux.so.1 unless the -user specifies a -dynamic-linker argument. This is the name of the libc5 +user specifies a --dynamic-linker argument. This is the name of the libc5 dynamic linker, which does not work with glibc. For casual use of GNU libc you can just specify to the linker @@ -761,6 +789,24 @@ libraries from doing it. newer since we have explicitly add references to the functions causing the problem. But you nevertheless should use EGCS for other reasons (see question 1.2). + +{GK} On some Linux distributions for PowerPC, you can see this when you have +built gcc or egcs from the Web sources (gcc versions 2.95 or earlier), then +re-built glibc. This happens because in these versions of gcc, exception +handling is implemented using an older method; the people making the +distributions are a little ahead of their time. + +A quick solution to this is to find the libgcc.a file that came with the +distribution (it would have been installed under /usr/lib/gcc-lib), do +`ar x libgcc.a frame.o' to get the frame.o file out, and add a line saying +`LDLIBS-c.so += frame.o' to the file `configparms' in the directory you're +building in. You can check you've got the right `frame.o' file by running +`nm frame.o' and checking that it has the symbols defined that you're +missing. + +This will let you build glibc with the C compiler. The C++ compiler +will still be binary incompatible with any C++ shared libraries that +you got with your distribution. 2.9. How can I compile gcc 2.7.2.1 from the gcc source code using diff -durpN glibc-2.1.1/FAQ.in glibc-2.1.2/FAQ.in --- glibc-2.1.1/FAQ.in Mon May 24 08:58:54 1999 +++ glibc-2.1.2/FAQ.in Mon Sep 6 12:31:23 1999 @@ -73,6 +73,12 @@ EGCS and gcc 2.8.1 shows this: Make up your own decision. +GNU CC versions 2.95 and above are derived from egcs, and they may do even +better. + +Please note that gcc 2.95 and 2.95.1 cannot compile glibc on Alpha due to +problems in the complex float support. + ?? When I try to compile glibc I get only error messages. What's wrong? @@ -103,16 +109,8 @@ them. ??powerpc Which compiler should I use for powerpc? -{GK} You want to use egcs 1.1 or later (together with the right versions -of all the other tools, of course). - -In fact, egcs 1.1 has a bug that causes linuxthreads to be -miscompiled, resulting in segmentation faults when using condition -variables. There is a temporary patch at: - - - -Later versions of egcs may fix this problem. +{GK} You want to use at least gcc 2.95 (together with the right versions +of all the other tools, of course). See also question ?excpt. ??arm Which tools should I use for ARM? @@ -132,7 +130,9 @@ Binutils 2.9.1.0.16 or later is also req `message catalog' files containing translated versions of system messages. See ftp://ftp.gnu.org/pub/gnu or better any mirror site. (We distribute compiled message catalogs, but they may not be - updated in patches.) + updated in patches.) Please note that the required minimal version + (0.10.35) of gettext is alpha software and available from + ftp://alpha.gnu.org/gnu . * Some files are built with special tools. E.g., files ending in .gperf need a `gperf' program. The GNU version (now available in a separate @@ -165,6 +165,9 @@ Binutils 2.9.1.0.16 or later is also req reports 22h48m on Atari TT030 (Motorola 68030 @ 32 Mhz, 34 Mb memory) + A full build of the PowerPC library took 1h on a PowerPC 750@400Mhz w/ + 64MB of RAM, and about 9h on a 601@60Mhz w/ 72Mb. + If you have some more measurements let me know. ?? What version of the Linux kernel headers should be used? @@ -234,6 +237,11 @@ files, provide support for additional ar else. The existing makefiles do most of the work; only some few stub rules must be written to get everything running. +Most add-ons are tightly coupled to a specific GNU libc version. Please +check that the add-ons work with the GNU libc. For example the crypt and +linuxthreads add-ons have the same numbering scheme as the libc and will in +general only work with the corresponding libc. + ?? My XXX kernel emulates a floating-point coprocessor for me. Should I enable --with-fp? @@ -340,6 +348,23 @@ against the previous version of the GNU all future versions. +?? How can I compile on my fast ix86 machine a working libc for my slow + i386? After installing libc, programs abort with "Illegal + Instruction". + +{AJ} glibc and gcc might generate some instructions on your machine that +aren't available on i386. You've got to tell glibc that you're configuring +for i386 with adding i386 as your machine, for example: + + ../configure --prefix=/usr i386-pc-linux-gnu + +And you need to tell gcc to only generate i386 code, just add `-mcpu=i386' +(just -m386 doesn't work) to your CFLAGS. + +{UD} This applies not only to the i386. Compiling on a i686 for any older +model will also fail if the above methods are not used. + + ? Installation and configuration issues ?? Can I replace the libc on my Linux system with GNU libc? @@ -439,8 +464,8 @@ functions together with glibc. The functions are available, as an add-on (see ?addon). People in the US may get it from the same place they got GNU libc from. People outside the -US should get the code from ftp.funet.fi [128.214.248.6] in the directory -pub/gnu/funet, or another archive site outside the USA. The README explains +US should get the code from ftp.gwdg.de [134.76.11.100] in the directory +pub/linux/glibc, or another archive site outside the USA. The README explains how to install the sources. If you already have the crypt code on your system the reason for the failure @@ -452,7 +477,7 @@ US. the libc.so which comes with glibc all I get is a core dump. {UD} On Linux, gcc sets the dynamic linker to /lib/ld-linux.so.1 unless the -user specifies a -dynamic-linker argument. This is the name of the libc5 +user specifies a --dynamic-linker argument. This is the name of the libc5 dynamic linker, which does not work with glibc. For casual use of GNU libc you can just specify to the linker @@ -549,7 +574,7 @@ not a symlink to libc.so.6. It should l GROUP ( libc.so.6 libc_nonshared.a ) -?? When I run an executable on one system which I compiled on +??excpt When I run an executable on one system which I compiled on another, I get dynamic linker errors. Both systems have the same version of glibc installed. What's wrong? @@ -579,6 +604,24 @@ libraries from doing it. newer since we have explicitly add references to the functions causing the problem. But you nevertheless should use EGCS for other reasons (see ?binsize). + +{GK} On some Linux distributions for PowerPC, you can see this when you have +built gcc or egcs from the Web sources (gcc versions 2.95 or earlier), then +re-built glibc. This happens because in these versions of gcc, exception +handling is implemented using an older method; the people making the +distributions are a little ahead of their time. + +A quick solution to this is to find the libgcc.a file that came with the +distribution (it would have been installed under /usr/lib/gcc-lib), do +`ar x libgcc.a frame.o' to get the frame.o file out, and add a line saying +`LDLIBS-c.so += frame.o' to the file `configparms' in the directory you're +building in. You can check you've got the right `frame.o' file by running +`nm frame.o' and checking that it has the symbols defined that you're +missing. + +This will let you build glibc with the C compiler. The C++ compiler +will still be binary incompatible with any C++ shared libraries that +you got with your distribution. ?? How can I compile gcc 2.7.2.1 from the gcc source code using glibc 2.x? diff -durpN glibc-2.1.1/INSTALL glibc-2.1.2/INSTALL --- glibc-2.1.1/INSTALL Wed Mar 17 13:02:50 1999 +++ glibc-2.1.2/INSTALL Sun Sep 5 14:54:59 1999 @@ -20,9 +20,10 @@ change in the future. Get it from the s bundle; the file is `glibc-linuxthreads-VERSION.tar.gz'. Support for the `crypt' function is distributed separately because of United States export restrictions. If you are outside the US or Canada, you must get -`crypt' support from a site outside the US, such as `ftp.ifi.uio.no'. -(Most non-US mirrors of `ftp.gnu.org' will have it too.) The file you -need is `glibc-crypt-VERSION.tar.gz'. +`crypt' support from a site outside the US, such as `ftp.gwdg.de'. +`ftp.gwdg.de' has the crypt distribution in `pub/linux/glibc'. (Most +non-US mirrors of `ftp.gnu.org' will have it too.) The file you need +is `glibc-crypt-VERSION.tar.gz'. You will need recent versions of several GNU tools: definitely GCC and GNU Make, and possibly others. *Note Tools for Compilation::, @@ -41,6 +42,10 @@ at the top level of the source tree. In $ ../glibc-2.1.0/configure ARGS... + Please note that even if you're building in a separate build +directory, the compiliation needs to modify a few files in the source +directory, especially some files in the manual subdirectory. + `configure' takes many options, but you can get away with knowing only two: `--prefix' and `--enable-add-ons'. The `--prefix' option tells configure where you want glibc installed. This defaults to @@ -82,7 +87,7 @@ will be used, and CFLAGS sets optimizati given with no list, it enables all the add-on packages it finds. If you do not wish to use some add-on package that you have present in your source tree, give this option a list of the - add-ons that you _do_ want used, like this: + add-ons that you *do* want used, like this: `--enable-add-ons=crypt,linuxthreads' `--with-binutils=DIRECTORY' @@ -98,10 +103,6 @@ will be used, and CFLAGS sets optimizati Use this option if your computer lacks hardware floating-point support and your operating system does not emulate an FPU. -`--disable-static' - Don't build static libraries. Static libraries aren't that useful - these days, but we recommend you build them in case you need them. - `--disable-shared' Don't build shared libraries even if we could. Not all systems support shared libraries; you need ELF support and (currently) the @@ -142,10 +143,10 @@ will be used, and CFLAGS sets optimizati compile but use what you say instead of guessing what your system is. This is most useful to change the CPU submodel. For example, if configure guesses your machine as `i586-pc-linux-gnu' but you - want to compile a library optimized for 386es, give - `--host=i386-pc-linux-gnu' or just `--host=i386-linux'. (A - library compiled for a Pentium (`i586') will still work on a 386, - but it may be slower.) + want to compile a library for 386es, give + `--host=i386-pc-linux-gnu' or just `--host=i386-linux' and add the + appropriate compiler flags (`-mcpu=i386' will do the trick) to + CFLAGS. If you give just `--build', configure will get confused. @@ -168,7 +169,11 @@ Instead, edit the generated `Makefile' a # PARALLELMFLAGS = -j 4 You can change the `4' to some other number as appropriate for your -system. +system. Instead of changing the `Makefile', you could give this option +directly to `make' and call it as, e.g. `make PARALLELMFLAGS=-j4'. If +you're building in the source directory, you've got to use the latter +approach since in this case no new `Makefile' is generated which you +can change. To build and run some test programs which exercise some of the library facilities, type `make check'. This should complete @@ -202,10 +207,10 @@ or you will end up with a mixture of hea and you won't be able to compile anything. You may also need to reconfigure GCC to work with the new library. The easiest way to do that is to figure out the compiler switches to make it work again -(`-Wl,-dynamic-linker=/lib/ld-linux.so.2' should work on Linux systems) -and use them to recompile gcc. You can also edit the specs file -(`/usr/lib/gcc-lib/TARGET/VERSION/specs'), but that is a bit of a black -art. +(`-Wl,--dynamic-linker=/lib/ld-linux.so.2' should work on Linux +systems) and use them to recompile gcc. You can also edit the specs +file (`/usr/lib/gcc-lib/TARGET/VERSION/specs'), but that is a bit of a +black art. You can install glibc somewhere other than where you configured it to go by setting the `install_root' variable on the command line for @@ -230,6 +235,23 @@ privileges.) If you are using a 2.1 or this program; otherwise you do. The source for `pt_chown' is in `login/programs/pt_chown.c'. + After installation you might want to configure the timezone and +locale installation of your system. The GNU C library comes with a +locale database which gets configured with `localedef'. For example, to +set up a German locale with name `de_DE', simply issue the command +`localedef -i de_DE -f ISO-8859-1 de_DE'. To configure all locales +that are supported by glibc, you can issue from your build directory the +command `make localedata/install-locales'. + + To configure the locally used timezone, you can either set the `TZ' +environment variable. The script `tzselect' helps you to select the +right value. As an example for Germany, tzselect would tell you to use +`TZ='Europe/Berlin''. For a system wide installation (the given paths +are for an installation with `--prefix=/usr'), link the timezone file +which is in `/usr/share/zoneinfo' to the file `/etc/localtime'. For +Germany, you might execute `ln -s /usr/share/zoneinfo/Europe/Berlin +/etc/localtime'. + Recommended Tools for Compilation ================================= @@ -299,14 +321,14 @@ build the GNU C library: Perl is not required, but it is used if present to test the installation. We may decide to use it elsewhere in the future. - If you change any of the `configure.in' files you will also need * GNU `autoconf' 2.12 or higher and if you change any of the message translation files you will need - * GNU `gettext' 0.10.35 or later + * GNU `gettext' 0.10.35 or later (version 0.10.35 is a alpha release + and available via ftp from alpha.gnu.org/gnu) You may also need these packages if you upgrade your source tree using patches, although we try to avoid this. @@ -361,11 +383,14 @@ If you are interested in doing a port, p maintainers by sending electronic mail to . Each case of `iX86' can be `i386', `i486', `i586', or `i686'. All -of those configurations produce a library that can run on any of these -processors. The library will be optimized for the specified processor, -but will not use instructions not available on all of them. If you -want the library to use instructions only available on newer -processors, give GCC the appropriate `-m' switches via CFLAGS. +of those configurations produce a library that can run on this +processor and newer processors. The GCC compiler by default generates +code that's optimized for the machine it's configured for and will use +the instructions available on that machine. For example if your GCC is +configured for `i686', gcc will optimize for `i686' and might issue +some `i686' specific instructions. To generate code for other models, +you have to configure for that model and give GCC the appropriate +`-march=' and `-mcpu=' compiler switches via CFLAGS. Specific advice for Linux systems ================================= @@ -402,7 +427,7 @@ installed there. library on your system against the new library for the sake of new code, but keep the old libraries around for old binaries to use. This is complicated and difficult. Consult the Glibc2 HOWTO at - for details. +`http://www.imaxx.net/~thrytis/glibc' for details. You cannot use `nscd' with 2.0 kernels, due to bugs in the kernel-side thread support. `nscd' happens to hit these bugs @@ -417,6 +442,13 @@ errors and omissions in this manual. If fixed. If you don't, no one will ever know about them and they will remain unfixed for all eternity, if not longer. + It is a good idea to check first that the problem was not reported +before. Bugs are documented in two places: The file `BUGS' describes a +number of well known bugs and the bug tracking system has a WWW +interface at `http://www-gnats.gnu.org:8080/cgi-bin/wwwgnats.pl'. The +WWW interface gives you access to open and closed reports. The closed +reports normally include a patch or a hint on solving the problem. + To report a bug, first you must find it. Hopefully, this will be the hard part. Once you've found a bug, make sure it's really a bug. A good way to do this is to see if the GNU C library behaves the same way @@ -441,9 +473,9 @@ you haven't installed it, will be in you test case, the results you got, the results you expected, and what you think the problem might be (if you've thought of anything). `glibcbug' will insert the configuration information we need to see, and ship the -report off to . Don't send a message there -directly; it is fed to a program that expects mail to be formatted in a -particular way. Use the script. +report off to . Don't send a message there directly; it +is fed to a program that expects mail to be formatted in a particular +way. Use the script. If you are not sure how a function should behave, and this manual doesn't tell you, that's a bug in the manual. Report that too! If the diff -durpN glibc-2.1.1/Make-dist glibc-2.1.2/Make-dist --- glibc-2.1.1/Make-dist Thu Jan 14 13:10:47 1999 +++ glibc-2.1.2/Make-dist Wed Jun 16 10:29:33 1999 @@ -35,7 +35,8 @@ foo:=$(shell echo 'foobar=$(filter %.c % ifndef sysdep_dirs # Find all sysdep directories. export sysdep_dirs := $(shell find $(..)sysdeps -type d ! -name bits \ - ! -name CVS ! -name RCS -print) + ! -name CVS ! -name RCS \ + ! -name SCCS -print) else # Defined by the parent. sysdep_dirs := $(addprefix $(..),$(sysdep_dirs)) diff -durpN glibc-2.1.1/MakeTAGS glibc-2.1.2/MakeTAGS --- glibc-2.1.1/MakeTAGS Tue May 12 09:36:09 1998 +++ glibc-2.1.2/MakeTAGS Wed Jun 16 10:29:24 1999 @@ -46,7 +46,8 @@ ifndef sysdep_dirs sysdep_dirs := $(shell find $(..)sysdeps \ $(wildcard \ $(patsubst %,$(..)%/sysdeps,$(add-ons))) \ - -type d ! -name RCS ! -name CVS -print) + -type d ! -name RCS ! -name CVS \ + ! -name SCCS -print) endif # Find all sysdep dirs there are, but putting the ones diff -durpN glibc-2.1.1/Makeconfig glibc-2.1.2/Makeconfig --- glibc-2.1.1/Makeconfig Mon Mar 29 16:14:19 1999 +++ glibc-2.1.2/Makeconfig Mon Jun 28 12:23:08 1999 @@ -364,7 +364,11 @@ else # some additional bizarre files. start-installed-name = crt1.o endif - +# On systems that do not need a special startfile for statically linked +# binaries, simply set it to the normal name. +ifndef static-start-installed-name +static-start-installed-name = $(start-installed-name) +endif # Command for linking programs with the C library. ifndef +link @@ -382,7 +386,7 @@ endif ifndef +link-static +link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \ $(sysdep-LDFLAGS) $(LDFLAGS) \ - $(addprefix $(csu-objpfx),$(start-installed-name)) \ + $(addprefix $(csu-objpfx),$(static-start-installed-name)) \ $(+preinit) $(+prector) \ $(filter-out $(addprefix $(csu-objpfx),start.o \ $(start-installed-name))\ diff -durpN glibc-2.1.1/Makerules glibc-2.1.2/Makerules --- glibc-2.1.1/Makerules Mon Mar 29 16:14:21 1999 +++ glibc-2.1.2/Makerules Sun Aug 1 15:12:23 1999 @@ -269,7 +269,8 @@ ifdef sysd-dirs-done ifeq ($(versioning),yes) -include $(common-objpfx)sysd-versions $(addprefix $(common-objpfx),$(version-maps)): $(common-objpfx)sysd-versions -common-generated += $(version-maps) sysd-versions $(common-objpfx)Versions.all +common-generated += $(version-maps) +postclean-generated += sysd-versions Versions.all ifndef avoid-generated ifneq ($(sysd-versions-subdirs),$(all-subdirs) $(config-sysdirs)) @@ -286,7 +287,7 @@ $(common-objpfx)sysd-versions: $(common- $(wildcard $(sysdirs:%=%/Versions)) \ $(sysd-versions-force) { echo 'sysd-versions-subdirs = $(all-subdirs) $(config-sysdirs)' ; \ - $(AWK) -v buildroot=$(common-objpfx) -v defsfile=$< \ + LC_ALL=C $(AWK) -v buildroot=$(common-objpfx) -v defsfile=$< \ -v move_if_change='$(move-if-change)' \ -f $(filter-out $< $(sysd-versions-force),$^); \ } > $@T diff -durpN glibc-2.1.1/NEWS glibc-2.1.2/NEWS --- glibc-2.1.1/NEWS Wed May 19 10:14:15 1999 +++ glibc-2.1.2/NEWS Sun Jun 13 15:19:52 1999 @@ -7,6 +7,10 @@ Please send GNU C library bug reports us . Questions and suggestions should be send to . +Version 2.1.2 + +* bug fixes + Version 2.1.1 * New ISO C 9x function _Exit, imaxabs, and imaxdiv are added. diff -durpN glibc-2.1.1/NOTES glibc-2.1.2/NOTES --- glibc-2.1.1/NOTES Sat Oct 11 20:04:11 1997 +++ glibc-2.1.2/NOTES Fri Aug 20 12:32:21 1999 @@ -18,18 +18,57 @@ comments. You could also use the `-D' o if you make the source files indicate their own meaning in a self-contained way. + This system exists to allow the library to conform to multiple +standards. Although the different standards are often described as +supersets of each other, they are usually incompatible because larger +standards require functions with names that smaller ones reserve to the +user program. This is not mere pedantry -- it has been a problem in +practice. For instance, some non-GNU programs define functions named +`getline' that have nothing to do with this library's `getline'. They +would not be compilable if all features were enabled indescriminantly. + + This should not be used to verify that a program conforms to a +limited standard. It is insufficent for this purpose, as it will not +protect you from including header files outside the standard, or +relying on semantics undefined within the standard. + - Macro: _POSIX_SOURCE If you define this macro, then the functionality from the POSIX.1 standard (IEEE Standard 1003.1) is available, as well as all of the ISO C facilities. + The state of `_POSIX_SOURCE' is irrelevant if you define the macro + `_POSIX_C_SOURCE' to a positive integer. + - Macro: _POSIX_C_SOURCE - If you define this macro with a value of `1', then the - functionality from the POSIX.1 standard (IEEE Standard 1003.1) is - made available. If you define this macro with a value of `2', - then both the functionality from the POSIX.1 standard and the - functionality from the POSIX.2 standard (IEEE Standard 1003.2) are - made available. This is in addition to the ISO C facilities. + Define this macro to a positive integer to control which POSIX + functionality is made available. The greater the value of this + macro, the more functionality is made available. + + If you define this macro to a value greater than or equal to `1', + then the functionality from the 1990 edition of the POSIX.1 + standard (IEEE Standard 1003.1-1990) is made available. + + If you define this macro to a value greater than or equal to `2', + then the functionality from the 1992 edition of the POSIX.2 + standard (IEEE Standard 1003.2-1992) is made available. + + If you define this macro to a value greater than or equal to + `199309L', then the functionality from the 1993 edition of the + POSIX.1b standard (IEEE Standard 1003.1b-1993) is made available. + + Greater values for `_POSIX_C_SOURCE' will enable future extensions. + The POSIX standards process will define these values as necessary, + and the GNU C Library should support them some time after they + become standardized. The 1996 edition of POSIX.1 (ISO/IEC 9945-1: + 1996) states that if you define `_POSIX_C_SOURCE' to a value + greater than or equal to `199506L', then the functionality from + the 1996 edition is made available. + + The Single Unix Specification specify that setting this macro to + the value `199506L' selects all the values specified by the POSIX + standards plus those of the Single Unix Specification, i.e., is the + same as if `_XOPEN_SOURCE' is set to `500' (see below). - Macro: _BSD_SOURCE If you define this macro, functionality derived from 4.3 BSD Unix @@ -72,12 +111,12 @@ self-contained way. If the macro `_XOPEN_SOURCE' has the value 500 this includes all functionality described so far plus some new definitions from the - Single Unix specification, version 2. + Single Unix Specification, version 2. - Macro: _LARGEFILE_SOURCE If this macro is defined some extra functions are available which rectify a few shortcomings in all previous standards. More - concreten the functions `fseeko' and `ftello' are available. + concrete the functions `fseeko' and `ftello' are available. Without these functions the difference between the ISO C interface (`fseek', `ftell') and the low-level POSIX interface (`lseek') would lead to problems. @@ -85,7 +124,7 @@ self-contained way. This macro was introduced as part of the Large File Support extension (LFS). - - Variable: Macro _LARGEFILE64_SOURCE + - Macro: _LARGEFILE64_SOURCE If you define this macro an additional set of function gets available which enables to use on 32 bit systems to use files of sizes beyond the usual limit of 2GB. This interface is not @@ -103,7 +142,7 @@ self-contained way. extension (LFS). It is a transition interface for the time 64 bit offsets are not generally used (see `_FILE_OFFSET_BITS'. - - Variable: _FILE_OFFSET_BITS + - Macro: _FILE_OFFSET_BITS This macro lets decide which file system interface shall be used, one replacing the other. While `_LARGEFILE64_SOURCE' makes the 64 bit interface available as an additional interface diff -durpN glibc-2.1.1/README glibc-2.1.2/README --- glibc-2.1.1/README Tue Mar 9 20:57:58 1999 +++ glibc-2.1.2/README Wed Jul 28 13:58:41 1999 @@ -1,4 +1,4 @@ -This directory contains the version 2.1.1 release of the GNU C Library. +This directory contains the version 2.1.2 release of the GNU C Library. Many bugs have been fixed since the last release. Some bugs surely remain. @@ -53,14 +53,14 @@ provides the Unix `crypt' function, plus Because of the United States export restriction on DES implementations, we are distributing this code separately from the rest of the C library. There is an extra distribution tar file just -for crypt; it is called `glibc-crypt-2.1.1.tar.gz'. You can just +for crypt; it is called `glibc-crypt-2.1.2.tar.gz'. You can just unpack the crypt distribution along with the rest of the C library and build; you can also build the library without getting crypt. Users outside the USA can get the crypt distribution via anonymous FTP from -ftp.funet.fi [128.214.248.6] in the directory pub/gnu/funet, or +ftp.gwdg.de [134.76.11.100] in the directory pub/linux/glibc, or another archive site outside the USA. Archive maintainers are encouraged to copy this distribution to their archives outside the -USA. Please get it from ftp.funet.fi; transferring this distribution +USA. Please get it from ftp.gwdg.de; transferring this distribution from ftp.gnu.org (or any other site in the USA) to a site outside the USA is in violation of US export laws. diff -durpN glibc-2.1.1/Versions.def glibc-2.1.2/Versions.def --- glibc-2.1.1/Versions.def Thu May 6 11:14:11 1999 +++ glibc-2.1.2/Versions.def Fri Jul 9 20:40:40 1999 @@ -5,6 +5,7 @@ libc { GLIBC_2.0 GLIBC_2.1 GLIBC_2.0 GLIBC_2.1.1 GLIBC_2.1 + GLIBC_2.1.2 GLIBC_2.1.1 } libcrypt { GLIBC_2.0 diff -durpN glibc-2.1.1/configure glibc-2.1.2/configure --- glibc-2.1.1/configure Thu May 20 14:56:44 1999 +++ glibc-2.1.2/configure Mon Aug 30 12:35:59 1999 @@ -1179,9 +1179,9 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCR test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -if test "$INSTALL" = "${srcdir}/install-sh -c"; then +if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then # The makefiles need to use a different form to find it in $srcdir. - INSTALL='\$(..)./install-sh -c' + INSTALL='\$(..)./scripts/install-sh -c' fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 echo "configure:1188: checking whether ln -s works" >&5 @@ -1273,7 +1273,7 @@ echo "configure:1273: checking version o ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustp-]*[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - egcs-2.9[1-9].*|egcs-2.90.2[789]|egcs-2.90.[3-9][0-9]|*gcc-2.9[1-9].*|pgcc-2.90.2[789]|pgcc-2.90.[3-9][0-9]|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|cygnus-2.9[1-9].*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]) + egcs-2.9[1-9].*|egcs-2.90.2[789]|egcs-2.90.[3-9][0-9]|*gcc-2.9[1-9].*|pgcc-2.90.2[789]|pgcc-2.90.[3-9][0-9]|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|cygnus-2.9[1-9].*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; @@ -1459,9 +1459,13 @@ test -n "$aux_missing" && echo "configur *** some features will be disabled. *** Check the INSTALL file for required versions." 1>&2 +# glibcbug.in wants to know the compiler version. +CCVERSION=`$CC -v 2>&1 | sed -n 's/gcc version //p'` + + echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1465: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:1469: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1475,12 +1479,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 1479 "configure" +#line 1483 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:1484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -1511,7 +1515,7 @@ else cross_linkable=yes fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:1515: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:1519: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_cross'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1523,7 +1527,7 @@ echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:1527: checking whether we are using GNU C" >&5 +echo "configure:1531: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1532,7 +1536,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1536: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1540: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -1545,7 +1549,7 @@ if test $ac_cv_prog_gcc != yes; then fi echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1549: checking build system type" >&5 +echo "configure:1553: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1568,7 +1572,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1572: checking for $ac_word" >&5 +echo "configure:1576: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1600,7 +1604,7 @@ done fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1604: checking how to run the C preprocessor" >&5 +echo "configure:1608: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1615,13 +1619,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1625: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1632,13 +1636,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1642: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1646: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1649,13 +1653,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1659: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1663: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -1698,7 +1702,7 @@ if test $RANLIB = ranlib; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1702: checking for $ac_word" >&5 +echo "configure:1706: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1730,7 +1734,7 @@ if test -n "$ac_tool_prefix"; then # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1734: checking for $ac_word" >&5 +echo "configure:1738: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1767,7 +1771,7 @@ fi # Determine whether we are using GNU binutils. echo $ac_n "checking whether $AS is GNU as""... $ac_c" 1>&6 -echo "configure:1771: checking whether $AS is GNU as" >&5 +echo "configure:1775: checking whether $AS is GNU as" >&5 if eval "test \"`echo '$''{'libc_cv_prog_as_gnu'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1786,7 +1790,7 @@ rm -f a.out gnu_as=$libc_cv_prog_as_gnu echo $ac_n "checking whether $LD is GNU ld""... $ac_c" 1>&6 -echo "configure:1790: checking whether $LD is GNU ld" >&5 +echo "configure:1794: checking whether $LD is GNU ld" >&5 if eval "test \"`echo '$''{'libc_cv_prog_ld_gnu'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1806,7 +1810,7 @@ gnu_ld=$libc_cv_prog_ld_gnu # Extract the first word of "${ac_tool_prefix}mig", so it can be a program name with args. set dummy ${ac_tool_prefix}mig; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1810: checking for $ac_word" >&5 +echo "configure:1814: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MIG'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1847,7 +1851,7 @@ fi # check if ranlib is necessary echo $ac_n "checking whether ranlib is necessary""... $ac_c" 1>&6 -echo "configure:1851: checking whether ranlib is necessary" >&5 +echo "configure:1855: checking whether ranlib is necessary" >&5 if eval "test \"`echo '$''{'libc_cv_ranlib_necessary'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1881,7 +1885,7 @@ fi # - two terminals occur directly after each other # - the path contains an element with a dot in it echo $ac_n "checking LD_LIBRARY_PATH variable""... $ac_c" 1>&6 -echo "configure:1885: checking LD_LIBRARY_PATH variable" >&5 +echo "configure:1889: checking LD_LIBRARY_PATH variable" >&5 case ${LD_LIBRARY_PATH} in [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* ) ld_library_path_setting="contains current directory" @@ -1901,7 +1905,7 @@ fi # Extract the first word of "bash", so it can be a program name with args. set dummy bash; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1905: checking for $ac_word" >&5 +echo "configure:1909: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1947,7 +1951,7 @@ if test "$BASH" = no; then # Extract the first word of "ksh", so it can be a program name with args. set dummy ksh; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1951: checking for $ac_word" >&5 +echo "configure:1955: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1997,7 +2001,7 @@ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2001: checking for $ac_word" >&5 +echo "configure:2005: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2029,7 +2033,7 @@ done # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2033: checking for $ac_word" >&5 +echo "configure:2037: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_PERL'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2066,7 +2070,7 @@ fi # Extract the first word of "install-info", so it can be a program name with args. set dummy install-info; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2070: checking for $ac_word" >&5 +echo "configure:2074: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_INSTALL_INFO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2102,7 +2106,7 @@ fi if test "$INSTALL_INFO" != "no"; then echo $ac_n "checking for old Debian install-info""... $ac_c" 1>&6 -echo "configure:2106: checking for old Debian install-info" >&5 +echo "configure:2110: checking for old Debian install-info" >&5 if eval "test \"`echo '$''{'libc_cv_old_debian_install_info'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2135,7 +2139,7 @@ fi echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6 -echo "configure:2139: checking for signed size_t type" >&5 +echo "configure:2143: checking for signed size_t type" >&5 if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2159,12 +2163,12 @@ EOF fi echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6 -echo "configure:2163: checking for libc-friendly stddef.h" >&5 +echo "configure:2167: checking for libc-friendly stddef.h" >&5 if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_friendly_stddef=yes else @@ -2198,7 +2202,7 @@ override stddef.h = # The installed &6 -echo "configure:2202: checking whether we need to use -P to assemble .S files" >&5 +echo "configure:2206: checking whether we need to use -P to assemble .S files" >&5 if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2221,7 +2225,7 @@ asm-CPPFLAGS = -P # The assembler can't fi echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6 -echo "configure:2225: checking for assembler global-symbol directive" >&5 +echo "configure:2229: checking for assembler global-symbol directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2251,7 +2255,7 @@ EOF fi echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6 -echo "configure:2255: checking for .set assembler directive" >&5 +echo "configure:2259: checking for .set assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2285,7 +2289,7 @@ EOF fi echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6 -echo "configure:2289: checking for .symver assembler directive" >&5 +echo "configure:2293: checking for .symver assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2304,7 +2308,7 @@ fi echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6 echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6 -echo "configure:2308: checking for ld --version-script" >&5 +echo "configure:2312: checking for ld --version-script" >&5 if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2327,7 +2331,7 @@ EOF if { ac_try='${CC-cc} $CFLAGS -shared -o conftest.so conftest.o -nostartfiles -nostdlib -Wl,--version-script,conftest.map - 1>&5'; { (eval echo configure:2331: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; + 1>&5'; { (eval echo configure:2335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_ld_version_script_option=yes else @@ -2365,7 +2369,7 @@ if test $VERSIONING = no; then fi if test $elf = yes; then echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6 -echo "configure:2369: checking for .previous assembler directive" >&5 +echo "configure:2373: checking for .previous assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2373,7 +2377,7 @@ else .section foo_section .previous EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2377: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2381: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_previous_directive=yes else libc_cv_asm_previous_directive=no @@ -2389,7 +2393,7 @@ EOF else echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6 -echo "configure:2393: checking for .popsection assembler directive" >&5 +echo "configure:2397: checking for .popsection assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2397,7 +2401,7 @@ else .pushsection foo_section .popsection EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2401: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2405: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_popsection_directive=yes else libc_cv_asm_popsection_directive=no @@ -2417,12 +2421,12 @@ fi if test $elf != yes; then echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6 -echo "configure:2421: checking for .init and .fini sections" >&5 +echo "configure:2425: checking for .init and .fini sections" >&5 if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_have_initfini=yes else @@ -2459,19 +2463,19 @@ if test $elf = yes; then else if test $ac_cv_prog_cc_works = yes; then echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 -echo "configure:2463: checking for _ prefix on C symbol names" >&5 +echo "configure:2467: checking for _ prefix on C symbol names" >&5 if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* libc_cv_asm_underscores=yes else @@ -2486,17 +2490,17 @@ fi echo "$ac_t""$libc_cv_asm_underscores" 1>&6 else echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6 -echo "configure:2490: checking for _ prefix on C symbol names" >&5 +echo "configure:2494: checking for _ prefix on C symbol names" >&5 if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2504: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then if grep _underscore_test conftest* >/dev/null; then rm -f conftest* libc_cv_asm_underscores=yes @@ -2528,7 +2532,7 @@ if test $elf = yes; then fi echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6 -echo "configure:2532: checking for assembler .weak directive" >&5 +echo "configure:2536: checking for assembler .weak directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2551,7 +2555,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive if test $libc_cv_asm_weak_directive = no; then echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6 -echo "configure:2555: checking for assembler .weakext directive" >&5 +echo "configure:2559: checking for assembler .weakext directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2589,7 +2593,7 @@ EOF fi echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6 -echo "configure:2593: checking for ld --no-whole-archive" >&5 +echo "configure:2597: checking for ld --no-whole-archive" >&5 if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2600,7 +2604,7 @@ __throw () {} EOF if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles -Wl,--no-whole-archive - -o conftest conftest.c 1>&5'; { (eval echo configure:2604: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c 1>&5'; { (eval echo configure:2608: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_ld_no_whole_archive=yes else libc_cv_ld_no_whole_archive=no @@ -2614,7 +2618,7 @@ if test $libc_cv_ld_no_whole_archive = y fi echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6 -echo "configure:2618: checking for gcc -fexceptions" >&5 +echo "configure:2622: checking for gcc -fexceptions" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_exceptions'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2625,7 +2629,7 @@ __throw () {} EOF if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles -fexceptions - -o conftest conftest.c 1>&5'; { (eval echo configure:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c 1>&5'; { (eval echo configure:2633: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_exceptions=yes else libc_cv_gcc_exceptions=no @@ -2640,14 +2644,14 @@ fi if test "$base_machine" = alpha ; then echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6 -echo "configure:2644: checking for function ..ng prefix" >&5 +echo "configure:2648: checking for function ..ng prefix" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_alpha_ng_prefix'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <<\EOF foo () { } EOF -if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:2651: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; +if { ac_try='${CC-cc} -S conftest.c -o - | fgrep "\$foo..ng" > /dev/null'; { (eval echo configure:2655: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_alpha_ng_prefix=yes else @@ -2674,19 +2678,19 @@ if test "$host_cpu" = powerpc ; then # Check for a bug present in at least versions 2.8.x of GCC # and versions 1.0.x of EGCS. echo $ac_n "checking whether clobbering cr0 causes problems""... $ac_c" 1>&6 -echo "configure:2678: checking whether clobbering cr0 causes problems" >&5 +echo "configure:2682: checking whether clobbering cr0 causes problems" >&5 if eval "test \"`echo '$''{'libc_cv_c_asmcr0_bug'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2694: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_c_asmcr0_bug='no' else @@ -2708,12 +2712,12 @@ fi fi echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6 -echo "configure:2712: checking for DWARF2 unwind info support" >&5 +echo "configure:2716: checking for DWARF2 unwind info support" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_dwarf2_unwind_info'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2748: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_dwarf2_unwind_info=static else libc_cv_gcc_dwarf2_unwind_info=no @@ -2748,7 +2752,7 @@ fi if test $libc_cv_gcc_dwarf2_unwind_info = no; then if { ac_try='${CC-cc} $CFLAGS -DCHECK__register_frame -nostdlib -nostartfiles - -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2752: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2756: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_dwarf2_unwind_info=yes else libc_cv_gcc_dwarf2_unwind_info=no @@ -2778,12 +2782,12 @@ EOF esac echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6 -echo "configure:2782: checking for __builtin_expect" >&5 +echo "configure:2786: checking for __builtin_expect" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_builtin_expect'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c -lgcc >&5'; { (eval echo configure:2799: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_builtin_expect=yes else libc_cv_gcc_builtin_expect=no @@ -2852,7 +2856,7 @@ if test "$uname" = "sysdeps/generic"; th fi echo $ac_n "checking OS release for uname""... $ac_c" 1>&6 -echo "configure:2856: checking OS release for uname" >&5 +echo "configure:2860: checking OS release for uname" >&5 if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2874,7 +2878,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>& uname_release="$libc_cv_uname_release" echo $ac_n "checking OS version for uname""... $ac_c" 1>&6 -echo "configure:2878: checking OS version for uname" >&5 +echo "configure:2882: checking OS version for uname" >&5 if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2896,7 +2900,7 @@ else fi echo $ac_n "checking stdio selection""... $ac_c" 1>&6 -echo "configure:2900: checking stdio selection" >&5 +echo "configure:2904: checking stdio selection" >&5 case $stdio in libio) cat >> confdefs.h <<\EOF @@ -2910,7 +2914,7 @@ echo "$ac_t""$stdio" 1>&6 # Test for old glibc 2.0.x headers so that they can be removed properly # Search only in includedir. echo $ac_n "checking for old glibc 2.0.x headers""... $ac_c" 1>&6 -echo "configure:2914: checking for old glibc 2.0.x headers" >&5 +echo "configure:2918: checking for old glibc 2.0.x headers" >&5 if eval test -f "${includedir}/elfclass.h" -a -f "${includedir}/fcntlbits.h" then old_glibc_headers=yes @@ -2964,7 +2968,7 @@ if test $shared = default; then fi echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6 -echo "configure:2968: checking whether -fPIC is default" >&5 +echo "configure:2972: checking whether -fPIC is default" >&5 if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3164,6 +3168,7 @@ s%@CC@%$CC%g s%@MAKE@%$MAKE%g s%@MSGFMT@%$MSGFMT%g s%@MAKEINFO@%$MAKEINFO%g +s%@CCVERSION@%$CCVERSION%g s%@cross_linkable@%$cross_linkable%g s%@BUILD_CC@%$BUILD_CC%g s%@cross_compiling@%$cross_compiling%g diff -durpN glibc-2.1.1/configure.in glibc-2.1.2/configure.in --- glibc-2.1.1/configure.in Thu May 20 14:56:00 1999 +++ glibc-2.1.2/configure.in Mon Aug 30 12:16:04 1999 @@ -435,9 +435,9 @@ AC_MSG_RESULT($default_sysnames) ### Locate tools. AC_PROG_INSTALL -if test "$INSTALL" = "${srcdir}/install-sh -c"; then +if test "$INSTALL" = "${srcdir}/scripts/install-sh -c"; then # The makefiles need to use a different form to find it in $srcdir. - INSTALL='\$(..)./install-sh -c' + INSTALL='\$(..)./scripts/install-sh -c' fi AC_PROG_LN_S @@ -445,7 +445,7 @@ AC_PROG_LN_S AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v, [version \([egcygnustp-]*[0-9.]*\)], - [egcs-2.9[1-9].*|egcs-2.90.2[789]|egcs-2.90.[3-9][0-9]|*gcc-2.9[1-9].*|pgcc-2.90.2[789]|pgcc-2.90.[3-9][0-9]|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|cygnus-2.9[1-9].*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]], + [egcs-2.9[1-9].*|egcs-2.90.2[789]|egcs-2.90.[3-9][0-9]|*gcc-2.9[1-9].*|pgcc-2.90.2[789]|pgcc-2.90.[3-9][0-9]|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|cygnus-2.9[1-9].*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]], critic_missing=t) AC_CHECK_PROG_VER(MAKE, make gmake, --version, [version \([0-9][0-9.]*\), by], @@ -468,6 +468,10 @@ test -n "$aux_missing" && AC_MSG_WARN([ *** An auxiliary program is missing or too old; *** some features will be disabled. *** Check the INSTALL file for required versions.]) + +# glibcbug.in wants to know the compiler version. +CCVERSION=`$CC -v 2>&1 | sed -n 's/gcc version //p'` +AC_SUBST(CCVERSION) AC_PROG_CC_LOCAL AC_CANONICAL_BUILD diff -durpN glibc-2.1.1/ctype/ctype.h glibc-2.1.2/ctype/ctype.h --- glibc-2.1.1/ctype/ctype.h Mon May 24 16:19:41 1999 +++ glibc-2.1.2/ctype/ctype.h Sun Jun 13 09:20:47 1999 @@ -165,20 +165,21 @@ toupper (int __c) __THROW #if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus # define __tobody(c, f, a) \ - ({ int __res; \ - if (sizeof (c) > 1) \ - { \ - if (__builtin_constant_p (c)) \ - { \ - int __c = (c); \ - __res = __c < -128 || __c > 255 ? __c : a[__c]; \ - } \ - else \ - __res = f (c); \ - } \ - else \ - __res = a[(int) (c)]; \ - __res; }) + (__extension__ \ + ({ int __res; \ + if (sizeof (c) > 1) \ + { \ + if (__builtin_constant_p (c)) \ + { \ + int __c = (c); \ + __res = __c < -128 || __c > 255 ? __c : a[__c]; \ + } \ + else \ + __res = f (c); \ + } \ + else \ + __res = a[(int) (c)]; \ + __res; })) # define tolower(c) __tobody (c, tolower, __ctype_tolower) # define toupper(c) __tobody (c, toupper, __ctype_toupper) diff -durpN glibc-2.1.1/db2/Makefile glibc-2.1.2/db2/Makefile --- glibc-2.1.1/db2/Makefile Tue Feb 16 12:19:21 1999 +++ glibc-2.1.2/db2/Makefile Wed Aug 25 12:42:48 1999 @@ -86,7 +86,7 @@ $(objpfx)db_load: $(objpfx)getlong.o ifeq ($(build-shared),yes) $(objpfx)makedb: $(objpfx)libdb.so$(libdb.so-version) -$(objpfx)db_dump185: $(objpfx)libdb.so$(libdb.so-version) +$(objpfx)db_dump185: $(common-objpfx)db/libdb1.so$(libdb1.so-version) $(objpfx)db_archive: $(objpfx)libdb.so$(libdb.so-version) $(objpfx)db_checkpoint: $(objpfx)libdb.so$(libdb.so-version) $(objpfx)db_deadlock: $(objpfx)libdb.so$(libdb.so-version) @@ -97,7 +97,7 @@ $(objpfx)db_recover: $(objpfx)libdb.so$( $(objpfx)db_stat: $(objpfx)libdb.so$(libdb.so-version) else $(objpfx)makedb: $(objpfx)libdb.a -$(objpfx)db_dump185: $(objpfx)libdb.a +$(objpfx)db_dump185: $(common-objpfx)db/libdb1.a $(objpfx)db_archive: $(objpfx)libdb.a $(objpfx)db_checkpoint: $(objpfx)libdb.a $(objpfx)db_deadlock: $(objpfx)libdb.a diff -durpN glibc-2.1.1/db2/common/db_region.c glibc-2.1.2/db2/common/db_region.c --- glibc-2.1.1/db2/common/db_region.c Mon Sep 7 10:49:03 1998 +++ glibc-2.1.2/db2/common/db_region.c Mon Sep 6 12:31:34 1999 @@ -507,8 +507,18 @@ __db_rdetach(infop) * If the region was removed when it was created, no further action * is required. */ - if (F_ISSET(infop, REGION_REMOVED)) + if (F_ISSET(infop, REGION_REMOVED)) { + if (F_ISSET(infop, REGION_PRIVATE) + && !F_ISSET(infop, REGION_MALLOC)) + /* + * If it is private and not malloced, the + * region is still mapped in. We need to + * discard our mapping of the region. + */ + ret = __db_unmapregion(infop); goto done; + } + /* * If the region was created in memory returned by malloc, the only * action required is freeing the memory. diff -durpN glibc-2.1.1/db2/os/os_oflags.c glibc-2.1.2/db2/os/os_oflags.c --- glibc-2.1.1/db2/os/os_oflags.c Tue Jun 9 12:49:39 1998 +++ glibc-2.1.2/db2/os/os_oflags.c Mon Jun 7 20:19:53 1999 @@ -33,16 +33,21 @@ __db_oflags(oflags) u_int32_t dbflags; /* - * XXX - * Convert POSIX 1003.1 open(2) flags to DB flags. Not an exact - * science as most POSIX implementations don't have a flag value - * for O_RDONLY, it's simply the lack of a write flag. + * Convert POSIX 1003.1 open(2) flags to DB flags. */ dbflags = 0; + switch (oflags & O_ACCMODE) { + case O_RDONLY: + dbflags |= DB_RDONLY; + break; + case O_WRONLY: + case O_RDWR: + break; + default: /* Bogus flags value from user. */ + /* XXX no way to return error from here */ + } if (oflags & O_CREAT) dbflags |= DB_CREATE; - if (!(oflags & (O_RDWR | O_WRONLY)) || oflags & O_RDONLY) - dbflags |= DB_RDONLY; if (oflags & O_TRUNC) dbflags |= DB_TRUNCATE; return (dbflags); diff -durpN glibc-2.1.1/dirent/dirent.h glibc-2.1.2/dirent/dirent.h --- glibc-2.1.1/dirent/dirent.h Fri Dec 4 16:34:00 1998 +++ glibc-2.1.2/dirent/dirent.h Fri Aug 20 10:34:36 1999 @@ -171,10 +171,10 @@ extern void rewinddir __P ((DIR *__dirp) # include /* Seek to position POS on DIRP. */ -extern void seekdir __P ((DIR *__dirp, __off_t __pos)); +extern void seekdir __P ((DIR *__dirp, long int __pos)); /* Return the current position of DIRP. */ -extern __off_t telldir __P ((DIR *__dirp)); +extern long int telldir __P ((DIR *__dirp)); #endif #if defined __USE_BSD || defined __USE_MISC @@ -272,10 +272,28 @@ extern int versionsort64 __P ((__const _ Reading starts at offset *BASEP, and *BASEP is updated with the new position after reading. Returns the number of bytes read; zero when at end of directory; or -1 for errors. */ + +# ifndef __USE_FILE_OFFSET64 extern __ssize_t getdirentries __P ((int __fd, char *__restrict __buf, size_t __nbytes, __off_t *__restrict __basep)); +# else +# ifdef __REDIRECT +extern __ssize_t __REDIRECT (getdirentries, + __P ((int __fd, char *__restrict __buf, + size_t __nbytes, + __off_t *__restrict __basep)), + getdirentries64); +# else +# define getdirentries getdirentries64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern __ssize_t getdirentries64 __P ((int __fd, char *__restrict __buf, + size_t __nbytes, + __off64_t *__restrict __basep)); +# endif #endif /* Use BSD or misc. */ diff -durpN glibc-2.1.1/elf/dl-deps.c glibc-2.1.2/elf/dl-deps.c --- glibc-2.1.1/elf/dl-deps.c Thu May 6 11:14:26 1999 +++ glibc-2.1.2/elf/dl-deps.c Sat Jun 26 18:19:52 1999 @@ -304,7 +304,10 @@ _dl_map_object_deps (struct link_map *ma /* Allocate new entry. This always has to be done. */ newp = alloca (sizeof (struct list)); - /* Copy the content of the current entry over. */ + /* We want to insert the new map before the current one, + but we have no back links. So we copy the contents of + the current entry over. Note that ORIG and NEWP now + have switched their meanings. */ orig->dup = memcpy (newp, orig, sizeof (*newp)); /* Initialize new entry. */ @@ -333,7 +336,7 @@ _dl_map_object_deps (struct link_map *ma _dl_map_object. */ --args.aux->l_opencount; - for (late = orig; late->unique; late = late->unique) + for (late = newp; late->unique; late = late->unique) if (late->unique->map == args.aux) break; @@ -344,10 +347,13 @@ _dl_map_object_deps (struct link_map *ma move it to this earlier position. */ orig->unique = newp; - /* Now remove the later entry from the unique list. */ + /* Now remove the later entry from the unique list + and adjust the tail pointer. */ + if (utail == late->unique) + utail = late; late->unique = late->unique->unique; - /* We must move the earlier in the chain. */ + /* We must move the object earlier in the chain. */ if (args.aux->l_prev) args.aux->l_prev->l_next = args.aux->l_next; if (args.aux->l_next) diff -durpN glibc-2.1.1/elf/dl-load.c glibc-2.1.2/elf/dl-load.c --- glibc-2.1.1/elf/dl-load.c Fri May 7 11:05:49 1999 +++ glibc-2.1.2/elf/dl-load.c Mon Aug 9 22:13:22 1999 @@ -513,7 +513,7 @@ _dl_init_paths (const char *llp) /* First set up the rest of the default search directory entries. */ aelem = rtld_search_dirs = (struct r_search_path_elem **) - malloc ((sizeof (system_dirs_len) / sizeof (system_dirs_len[0])) + malloc ((sizeof (system_dirs_len) / sizeof (system_dirs_len[0]) + 1) * sizeof (struct r_search_path_elem *)); if (rtld_search_dirs == NULL) _dl_signal_error (ENOMEM, NULL, "cannot create search path array"); @@ -655,6 +655,11 @@ _dl_map_object_from_fd (const char *name /* This is the expected ELF header. */ #define ELF32_CLASS ELFCLASS32 #define ELF64_CLASS ELFCLASS64 +#if !defined VALID_ELF_HEADER +# define VALID_ELF_HEADER(hdr,exp,size) (memcmp(hdr,exp,size) == 0) +# define VALID_ELF_OSABI(osabi) (osabi == ELFOSABI_SYSV) +# define VALID_ELF_ABIVERSION(ver) (ver == 0) +#endif static const unsigned char expected[EI_PAD] = { [EI_MAG0] = ELFMAG0, @@ -721,7 +726,7 @@ _dl_map_object_from_fd (const char *name header = (void *) readbuf; /* Check the header for basic validity. */ - if (memcmp (header->e_ident, expected, EI_PAD) != 0) + if (!VALID_ELF_HEADER(header->e_ident, expected, EI_PAD)) { /* Something is wrong. */ if (*(Elf32_Word *) &header->e_ident != @@ -746,10 +751,10 @@ _dl_map_object_from_fd (const char *name LOSE (0, "ELF file version ident not " STRING(EV_CURRENT)); /* XXX We should be able so set system specific versions which are allowed here. */ - if (header->e_ident[EI_OSABI] != ELFOSABI_SYSV) - LOSE (0, "ELF file OS ABI not " STRING(ELFOSABI_SYSV)); - if (header->e_ident[EI_ABIVERSION] != 0) - LOSE (0, "ELF file ABI version not 0"); + if (!VALID_ELF_OSABI(header->e_ident[EI_OSABI])) + LOSE (0, "ELF file OS ABI invalid."); + if (!VALID_ELF_ABIVERSION(header->e_ident[EI_ABIVERSION])) + LOSE (0, "ELF file ABI version invalid."); LOSE (0, "internal error"); } diff -durpN glibc-2.1.1/elf/dl-runtime.c glibc-2.1.2/elf/dl-runtime.c --- glibc-2.1.1/elf/dl-runtime.c Mon Feb 22 09:25:29 1999 +++ glibc-2.1.2/elf/dl-runtime.c Thu Jul 15 11:32:41 1999 @@ -57,6 +57,12 @@ fixup ( void *const rel_addr = (void *)(l->l_addr + reloc->r_offset); ElfW(Addr) value; + /* The use of `alloca' here looks ridiculous but it helps. The goal is + to prevent the function from being inlined and thus optimized out. + There is no official way to do this so we use this trick. gcc never + inlines functions which use `alloca'. */ + alloca (sizeof (int)); + /* Sanity check that we're really looking at a PLT relocation. */ assert (ELFW(R_TYPE)(reloc->r_info) == ELF_MACHINE_JMP_SLOT); @@ -109,6 +115,12 @@ profile_fixup ( void (*mcount_fct) (ElfW(Addr), ElfW(Addr)) = _dl_mcount; ElfW(Addr) *resultp; ElfW(Addr) value; + + /* The use of `alloca' here looks ridiculous but it helps. The goal is + to prevent the function from being inlined, and thus optimized out. + There is no official way to do this so we use this trick. gcc never + inlines functions which use `alloca'. */ + alloca (sizeof (int)); /* This is the address in the array where we store the result of previous relocations. */ diff -durpN glibc-2.1.1/elf/dlerror.c glibc-2.1.2/elf/dlerror.c --- glibc-2.1.1/elf/dlerror.c Thu Apr 23 17:21:14 1998 +++ glibc-2.1.2/elf/dlerror.c Sun Aug 1 14:55:05 1999 @@ -29,6 +29,7 @@ struct dl_action_result { int errcode; + int returned; char *errstring; }; static struct dl_action_result last_result; @@ -46,38 +47,40 @@ static void free_key_mem (void *mem); char * dlerror (void) { - static char *buf; + char *buf; struct dl_action_result *result; - if (buf) - { - free (buf); - buf = NULL; - } - /* Get error string. */ result = (struct dl_action_result *) __libc_getspecific (key); if (result == NULL) result = &last_result; - if (! result->errstring) - return NULL; - - if (result->errcode == 0) - buf = result->errstring; + if (result->returned != 0) + { + /* We can now free the string. */ + if (result->errstring != NULL) + { + free (result->errstring); + result->errstring = NULL; + } + buf = NULL; + } else { - if (__asprintf (&buf, "%s: %s", - result->errstring, strerror (result->errcode)) == -1) - buf = NULL; + buf = result->errstring; + if (result->errcode != 0 + && __asprintf (&buf, "%s: %s", + result->errstring, strerror (result->errcode)) != -1) + { + /* We don't need the error string anymore. */ + free (result->errstring); + result->errstring = buf; + } - /* We don't need the error string anymore. */ - free (result->errstring); + /* Mark the error as returned. */ + result->returned = 1; } - /* Reset the error indicator. */ - result->errstring = NULL; - return buf; } @@ -120,6 +123,9 @@ _dlerror_run (void (*operate) (void *), free (result->errstring); result->errcode = _dl_catch_error (&result->errstring, operate, args); + + /* If no error we mark that no error string is available. */ + result->returned = result->errstring == NULL; return result->errstring != NULL; } diff -durpN glibc-2.1.1/elf/elf.h glibc-2.1.2/elf/elf.h --- glibc-2.1.1/elf/elf.h Mon Apr 12 10:55:16 1999 +++ glibc-2.1.2/elf/elf.h Mon Aug 9 22:13:22 1999 @@ -140,6 +140,7 @@ typedef struct #define EI_OSABI 7 /* OS ABI identification */ #define ELFOSABI_SYSV 0 /* UNIX System V ABI */ #define ELFOSABI_HPUX 1 /* HP-UX */ +#define ELFOSABI_ARM 97 /* ARM */ #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ #define EI_ABIVERSION 8 /* ABI version */ diff -durpN glibc-2.1.1/elf/rtld.c glibc-2.1.2/elf/rtld.c --- glibc-2.1.1/elf/rtld.c Tue May 11 12:07:33 1999 +++ glibc-2.1.2/elf/rtld.c Fri Aug 20 10:34:38 1999 @@ -129,6 +129,9 @@ static hp_timing_t relocate_time; static hp_timing_t load_time; extern unsigned long int _dl_num_relocations; /* in dl-lookup.c */ +static ElfW(Addr) _dl_start_final (void *arg, struct link_map *bootstrap_map_p, + hp_timing_t start_time); + #ifdef RTLD_START RTLD_START #else @@ -140,7 +143,7 @@ _dl_start (void *arg) { struct link_map bootstrap_map; hp_timing_t start_time; - ElfW(Addr) start_addr; + size_t cnt; /* This #define produces dynamic linking inline functions for bootstrap relocation instead of general-purpose relocation. */ @@ -152,6 +155,14 @@ _dl_start (void *arg) if (HP_TIMING_INLINE && HP_TIMING_AVAIL) HP_TIMING_NOW (start_time); + /* Partly clean the `bootstrap_map' structure up. Don't use `memset' + since it might nor be built in or inlined and we cannot make function + calls at this point. */ + for (cnt = 0; + cnt < sizeof (bootstrap_map.l_info) / sizeof (bootstrap_map.l_info[0]); + ++cnt) + bootstrap_map.l_info[cnt] = 0; + /* Figure out the run-time load address of the dynamic linker itself. */ bootstrap_map.l_addr = elf_machine_load_address (); @@ -175,7 +186,22 @@ _dl_start (void *arg) /* Now life is sane; we can call functions and access global data. Set up to use the operating system facilities, and find out from the operating system's program loader where to find the program - header table in core. */ + header table in core. Put the rest of _dl_start into a separate + function, that way the compiler cannot put accesses to the GOT + before ELF_DYNAMIC_RELOCATE. */ + return _dl_start_final (arg, &bootstrap_map, start_time); +} + + +static ElfW(Addr) +_dl_start_final (void *arg, struct link_map *bootstrap_map_p, + hp_timing_t start_time) +{ + /* The use of `alloca' here looks ridiculous but it helps. The goal + is to avoid the function from being inlined. There is no official + way to do this so we use this trick. gcc never inlines functions + which use `alloca'. */ + ElfW(Addr) *start_addr = alloca (sizeof (ElfW(Addr))); if (HP_TIMING_AVAIL) { @@ -188,10 +214,10 @@ _dl_start (void *arg) } /* Transfer data about ourselves to the permanent link_map structure. */ - _dl_rtld_map.l_addr = bootstrap_map.l_addr; - _dl_rtld_map.l_ld = bootstrap_map.l_ld; + _dl_rtld_map.l_addr = bootstrap_map_p->l_addr; + _dl_rtld_map.l_ld = bootstrap_map_p->l_ld; _dl_rtld_map.l_opencount = 1; - memcpy (_dl_rtld_map.l_info, bootstrap_map.l_info, + memcpy (_dl_rtld_map.l_info, bootstrap_map_p->l_info, sizeof _dl_rtld_map.l_info); _dl_setup_hash (&_dl_rtld_map); @@ -203,7 +229,7 @@ _dl_start (void *arg) file access. It will call `dl_main' (below) to do all the real work of the dynamic linker, and then unwind our frame and run the user entry point on the same stack we entered on. */ - start_addr = _dl_sysdep_start (arg, &dl_main); + *start_addr = _dl_sysdep_start (arg, &dl_main); if (HP_TIMING_AVAIL) { @@ -219,7 +245,7 @@ _dl_start (void *arg) if (_dl_debug_statistics) print_statistics (); - return start_addr; + return *start_addr; } /* Now life is peachy; we can do all normal operations. @@ -781,9 +807,18 @@ of this helper program; chances are you while (_dl_loaded->l_searchlist.r_list[i] != &_dl_rtld_map) ++i; _dl_rtld_map.l_prev = _dl_loaded->l_searchlist.r_list[i - 1]; - _dl_rtld_map.l_next = (i + 1 < _dl_loaded->l_searchlist.r_nlist - ? _dl_loaded->l_searchlist.r_list[i + 1] - : NULL); + if (__builtin_expect (mode, normal) == normal) + _dl_rtld_map.l_next = (i + 1 < _dl_loaded->l_searchlist.r_nlist + ? _dl_loaded->l_searchlist.r_list[i + 1] + : NULL); + else + /* In trace mode there might be an invisible object (which we + could not find) after the previous one in the search list. + In this case it doesn't matter much where we put the + interpreter object, so we just initialize the list pointer so + that the assertion below holds. */ + _dl_rtld_map.l_next = _dl_rtld_map.l_prev->l_next; + assert (_dl_rtld_map.l_prev->l_next == _dl_rtld_map.l_next); _dl_rtld_map.l_prev->l_next = &_dl_rtld_map; if (_dl_rtld_map.l_next) diff -durpN glibc-2.1.1/glibcbug.in glibc-2.1.2/glibcbug.in --- glibc-2.1.1/glibcbug.in Thu May 13 10:17:59 1999 +++ glibc-2.1.2/glibcbug.in Mon Aug 30 12:16:08 1999 @@ -10,6 +10,7 @@ RELEASE="@RELEASE@" ADDONS="@subdirs@" HOST="@host@" CC='@CC@' +CCVERSION='@CCVERSION@' CFLAGS="@CFLAGS@" SYSINCLUDES="@SYSINCLUDES@" VERSIONING="@VERSIONING@" @@ -109,7 +110,6 @@ SYSTEM=`( [ -f /bin/uname ] && /bin/unam ( [ -f /usr/bin/uname ] && /usr/bin/uname -a ) || echo ""` ARCH=`[ -f /bin/arch ] && /bin/arch` MACHINE=`[ -f /bin/machine ] && /bin/machine` -CCVERSION=`$CC -v 2>&1 | sed -n 's/gcc version //p'` case $HOST in *linux*) KHDRS=`(echo '#include ' diff -durpN glibc-2.1.1/grp/Versions glibc-2.1.2/grp/Versions --- glibc-2.1.1/grp/Versions Sat Aug 8 13:30:53 1998 +++ glibc-2.1.2/grp/Versions Fri Jul 9 20:40:40 1999 @@ -20,4 +20,8 @@ libc { # p* putgrent; } + GLIBC_2.1.2 { + # g* + getgrent_r; getgrgid_r; getgrnam_r; + } } diff -durpN glibc-2.1.1/grp/fgetgrent.c glibc-2.1.2/grp/fgetgrent.c --- glibc-2.1.1/grp/fgetgrent.c Fri Jun 20 18:14:45 1997 +++ glibc-2.1.2/grp/fgetgrent.c Sun Jun 13 09:20:47 1999 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1996, 1997, 1999 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 @@ -19,22 +19,28 @@ #include #include #include +#include #include /* We need to protect the dynamic buffer handling. */ __libc_lock_define_initialized (static, lock); +static char *buffer; + /* Read one entry from the given stream. */ struct group * fgetgrent (FILE *stream) { - static char *buffer; static size_t buffer_size; static struct group resbuf; + fpos_t pos; struct group *result; int save; + if (fgetpos (stream, &pos) != 0) + return NULL; + /* Get lock. */ __libc_lock_lock (lock); @@ -61,6 +67,13 @@ fgetgrent (FILE *stream) __set_errno (save); } buffer = new_buf; + + /* Reset the stream. */ + if (fsetpos (stream, &pos) != 0) + { + buffer = NULL; + break; + } } if (buffer == NULL) @@ -73,3 +86,14 @@ fgetgrent (FILE *stream) return result; } + + +/* Free all resources if necessary. */ +static void __attribute__ ((unused)) +free_mem (void) +{ + if (buffer != NULL) + free (buffer); +} + +text_set_element (__libc_subfreeres, free_mem); diff -durpN glibc-2.1.1/grp/fgetgrent_r.c glibc-2.1.2/grp/fgetgrent_r.c --- glibc-2.1.1/grp/fgetgrent_r.c Thu Jul 16 10:29:49 1998 +++ glibc-2.1.2/grp/fgetgrent_r.c Mon Jun 7 20:18:14 1999 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1996, 1997, 1998, 1999 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 @@ -74,13 +74,15 @@ __fgetgrent_r (FILE *stream, struct grou { funlockfile (stream); *result = NULL; + __set_errno (ENOENT); return errno; } if (p == NULL || buffer[buflen - 1] != '\xff') { funlockfile (stream); *result = NULL; - return errno = ERANGE; + __set_errno (ERANGE); + return errno; } /* Skip leading blanks. */ diff -durpN glibc-2.1.1/hurd/Makefile glibc-2.1.2/hurd/Makefile --- glibc-2.1.1/hurd/Makefile Fri Mar 5 14:37:09 1999 +++ glibc-2.1.2/hurd/Makefile Mon Jun 28 12:23:27 1999 @@ -28,6 +28,9 @@ headers = hurd.h $(interface-headers) \ $(addprefix hurd/,fd.h id.h port.h signal.h sigpreempt.h ioctl.h\ userlink.h resource.h threadvar.h lookup.h) +inline-headers = hurd.h $(addprefix hurd/,fd.h signal.h \ + userlink.h threadvar.h port.h) + # The RPC interfaces go in a separate library. interface-library := libhurduser user-interfaces := $(addprefix hurd/,\ @@ -54,13 +57,14 @@ routines = hurdstartup hurdinit \ fopenport \ vpprintf \ ports-get ports-set hurdports hurdmsg \ - $(sig) $(dtable) hurdinline port-cleanup report-wait + $(sig) $(dtable) $(inlines) port-cleanup report-wait sig = hurdsig hurdfault siginfo hurd-raise preempt-sig \ trampoline longjmp-ts catch-exc exc2signal hurdkill sigunwind \ thread-self thread-cancel intr-msg catch-signal dtable = dtable port2fd new-fd alloc-fd intern-fd \ getdport openport \ fd-close fd-read fd-write hurdioctl ctty-input ctty-output +inlines = $(inline-headers:%.h=%-inlines) distribute = hurdstartup.h hurdfault.h hurdhost.h \ faultexc.defs intr-rpc.defs intr-rpc.h intr-msg.h Notes @@ -74,6 +78,15 @@ routines += compat-20 endif shared-only-routines = compat-20 + +# For each of the $(inline-headers), generate a trivial source +# file that will #include it to define its inline functions as real functions. +$(inlines:%=$(objpfx)%.c): $(objpfx)%-inlines.c: %.h + (h="`echo $(subst /,_,$*) | tr '[a-z]' '[A-Z]'`"; \ + echo "#define _$${h}_H_EXTERN_INLINE /* Define real function. */"; \ + echo '#include "$<"') > $@-new + mv -f $@-new $@ +generated += $(inlines:=.c) include ../mach/Machrules include ../Rules diff -durpN glibc-2.1.1/hurd/hurd/fd.h glibc-2.1.2/hurd/hurd/fd.h --- glibc-2.1.1/hurd/hurd/fd.h Mon Dec 7 11:00:59 1998 +++ glibc-2.1.2/hurd/hurd/fd.h Mon Jun 28 12:23:31 1999 @@ -1,5 +1,5 @@ /* File descriptors. - Copyright (C) 1993,94,95,96,97,98 Free Software Foundation, Inc. + Copyright (C) 1993,94,95,96,97,98, 99 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 @@ -49,15 +49,15 @@ extern struct mutex _hurd_dtable_lock; / #include #include -#ifndef _EXTERN_INLINE -#define _EXTERN_INLINE extern __inline +#ifndef _HURD_FD_H_EXTERN_INLINE +#define _HURD_FD_H_EXTERN_INLINE extern __inline #endif /* Returns the descriptor cell for FD. If FD is invalid or unused, return NULL. The cell is unlocked; when ready to use it, lock it and check for it being unused. */ -_EXTERN_INLINE struct hurd_fd * +_HURD_FD_H_EXTERN_INLINE struct hurd_fd * _hurd_fd_get (int fd) { struct hurd_fd *descriptor; @@ -134,7 +134,7 @@ _hurd_fd_get (int fd) /* Check if ERR should generate a signal. Returns the signal to take, or zero if none. */ -_EXTERN_INLINE error_t +_HURD_FD_H_EXTERN_INLINE error_t _hurd_fd_error_signal (error_t err) { switch (err) @@ -155,7 +155,7 @@ _hurd_fd_error_signal (error_t err) always use this function to handle errors from RPCs made on file descriptor ports. Some errors are translated into signals. */ -_EXTERN_INLINE error_t +_HURD_FD_H_EXTERN_INLINE error_t _hurd_fd_error (int fd, error_t err) { int signo = _hurd_fd_error_signal (err); @@ -171,7 +171,7 @@ _hurd_fd_error (int fd, error_t err) /* Handle error code ERR from an RPC on file descriptor FD's port. Set `errno' to the appropriate error code, and always return -1. */ -_EXTERN_INLINE int +_HURD_FD_H_EXTERN_INLINE int __hurd_dfail (int fd, error_t err) { errno = _hurd_fd_error (fd, err); diff -durpN glibc-2.1.1/hurd/hurd/port.h glibc-2.1.2/hurd/hurd/port.h --- glibc-2.1.1/hurd/hurd/port.h Fri Feb 14 20:27:16 1997 +++ glibc-2.1.2/hurd/hurd/port.h Mon Jun 28 12:23:32 1999 @@ -1,5 +1,5 @@ /* Lightweight user references for ports. - Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc. + Copyright (C) 1993, 1994, 1995, 1997, 1999 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 @@ -54,14 +54,14 @@ struct hurd_port __result; }) -#ifndef _EXTERN_INLINE -#define _EXTERN_INLINE extern __inline +#ifndef _HURD_PORT_H_EXTERN_INLINE +#define _HURD_PORT_H_EXTERN_INLINE extern __inline #endif /* Initialize *PORT to INIT. */ -_EXTERN_INLINE void +_HURD_PORT_H_EXTERN_INLINE void _hurd_port_init (struct hurd_port *port, mach_port_t init) { __spin_lock_init (&port->lock); @@ -76,7 +76,7 @@ extern void _hurd_port_cleanup (void *, /* Get a reference to *PORT, which is locked. Pass return value and LINK to _hurd_port_free when done. */ -_EXTERN_INLINE mach_port_t +_HURD_PORT_H_EXTERN_INLINE mach_port_t _hurd_port_locked_get (struct hurd_port *port, struct hurd_userlink *link) { @@ -94,7 +94,7 @@ _hurd_port_locked_get (struct hurd_port /* Same, but locks PORT first. */ -_EXTERN_INLINE mach_port_t +_HURD_PORT_H_EXTERN_INLINE mach_port_t _hurd_port_get (struct hurd_port *port, struct hurd_userlink *link) { @@ -109,7 +109,7 @@ _hurd_port_get (struct hurd_port *port, /* Free a reference gotten with `USED_PORT = _hurd_port_get (PORT, LINK);' */ -_EXTERN_INLINE void +_HURD_PORT_H_EXTERN_INLINE void _hurd_port_free (struct hurd_port *port, struct hurd_userlink *link, mach_port_t used_port) @@ -133,7 +133,7 @@ _hurd_port_free (struct hurd_port *port, /* Set *PORT's port to NEWPORT. NEWPORT's reference is consumed by PORT->port. PORT->lock is locked. */ -_EXTERN_INLINE void +_HURD_PORT_H_EXTERN_INLINE void _hurd_port_locked_set (struct hurd_port *port, mach_port_t newport) { mach_port_t old; @@ -146,7 +146,7 @@ _hurd_port_locked_set (struct hurd_port /* Same, but locks PORT first. */ -_EXTERN_INLINE void +_HURD_PORT_H_EXTERN_INLINE void _hurd_port_set (struct hurd_port *port, mach_port_t newport) { HURD_CRITICAL_BEGIN; diff -durpN glibc-2.1.1/hurd/hurd/signal.h glibc-2.1.2/hurd/hurd/signal.h --- glibc-2.1.1/hurd/hurd/signal.h Thu Nov 12 17:49:53 1998 +++ glibc-2.1.2/hurd/hurd/signal.h Mon Jun 28 12:23:33 1999 @@ -1,5 +1,5 @@ /* Implementing POSIX.1 signals under the Hurd. - Copyright (C) 1993, 94, 95, 96, 98 Free Software Foundation, Inc. + Copyright (C) 1993, 94, 95, 96, 98, 99 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 @@ -124,7 +124,11 @@ extern struct hurd_sigstate *_hurd_self_ by different threads. */ __attribute__ ((__const__)); -_EXTERN_INLINE struct hurd_sigstate * +#ifndef _HURD_SIGNAL_H_EXTERN_INLINE +#define _HURD_SIGNAL_H_EXTERN_INLINE extern __inline +#endif + +_HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate * _hurd_self_sigstate (void) { struct hurd_sigstate **location = @@ -159,7 +163,7 @@ extern int _hurd_core_limit; interrupted lest the signal handler try to take the same lock and deadlock result. */ -_EXTERN_INLINE void * +_HURD_SIGNAL_H_EXTERN_INLINE void * _hurd_critical_section_lock (void) { struct hurd_sigstate **location = @@ -185,7 +189,7 @@ _hurd_critical_section_lock (void) return ss; } -_EXTERN_INLINE void +_HURD_SIGNAL_H_EXTERN_INLINE void _hurd_critical_section_unlock (void *our_lock) { if (our_lock == NULL) diff -durpN glibc-2.1.1/hurd/hurd/threadvar.h glibc-2.1.2/hurd/hurd/threadvar.h --- glibc-2.1.1/hurd/hurd/threadvar.h Mon Oct 19 08:17:12 1998 +++ glibc-2.1.2/hurd/hurd/threadvar.h Mon Jun 28 12:23:34 1999 @@ -1,5 +1,5 @@ /* Internal per-thread variables for the Hurd. - Copyright (C) 1994, 95, 97, 98 Free Software Foundation, Inc. + Copyright (C) 1994, 95, 97, 98, 99 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 @@ -66,14 +66,14 @@ enum __hurd_threadvar_index }; -#ifndef _EXTERN_INLINE -#define _EXTERN_INLINE extern __inline +#ifndef _HURD_THREADVAR_H_EXTERN_INLINE +#define _HURD_THREADVAR_H_EXTERN_INLINE extern __inline #endif /* Return the location of the value for the per-thread variable with index INDEX used by the thread whose stack pointer is SP. */ -_EXTERN_INLINE unsigned long int * +_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int * __hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index, void *__sp) { @@ -97,7 +97,7 @@ __hurd_threadvar_location (enum __hurd_t the same stack frame by different threads. */ __attribute__ ((__const__)); -_EXTERN_INLINE unsigned long int * +_HURD_THREADVAR_H_EXTERN_INLINE unsigned long int * __hurd_threadvar_location (enum __hurd_threadvar_index __index) { return __hurd_threadvar_location_from_sp (__index, @@ -106,7 +106,7 @@ __hurd_threadvar_location (enum __hurd_t /* Return the current thread's location for `errno'. The syntax of this function allows redeclarations like `int errno'. */ -_EXTERN_INLINE int * +_HURD_THREADVAR_H_EXTERN_INLINE int * __hurd_errno_location (void) { return (int *) __hurd_threadvar_location (_HURD_THREADVAR_ERRNO); diff -durpN glibc-2.1.1/hurd/hurd/userlink.h glibc-2.1.2/hurd/hurd/userlink.h --- glibc-2.1.1/hurd/hurd/userlink.h Fri Feb 14 20:27:18 1997 +++ glibc-2.1.2/hurd/hurd/userlink.h Mon Jun 28 12:23:35 1999 @@ -1,5 +1,5 @@ /* Support for chains recording users of a resource; `struct hurd_userlink'. - Copyright (C) 1994, 1995, 1997 Free Software Foundation, Inc. + Copyright (C) 1994, 1995, 1997, 1999 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 @@ -70,14 +70,14 @@ struct hurd_userlink }; -#ifndef _EXTERN_INLINE -#define _EXTERN_INLINE extern __inline +#ifndef _HURD_USERLINK_H_EXTERN_INLINE +#define _HURD_USERLINK_H_EXTERN_INLINE extern __inline #endif /* Attach LINK to the chain of users at *CHAINP. */ -_EXTERN_INLINE void +_HURD_USERLINK_H_EXTERN_INLINE void _hurd_userlink_link (struct hurd_userlink **chainp, struct hurd_userlink *link) { @@ -102,7 +102,7 @@ _hurd_userlink_link (struct hurd_userlin /* Detach LINK from its chain. Returns nonzero iff this was the last user of the resource and it should be deallocated. */ -_EXTERN_INLINE int +_HURD_USERLINK_H_EXTERN_INLINE int _hurd_userlink_unlink (struct hurd_userlink *link) { /* We should deallocate the resource used if this chain has been detached @@ -132,7 +132,7 @@ _hurd_userlink_unlink (struct hurd_userl value is zero, someone is still using the resource and they will deallocate it when they are finished. */ -_EXTERN_INLINE int +_HURD_USERLINK_H_EXTERN_INLINE int _hurd_userlink_clear (struct hurd_userlink **chainp) { if (*chainp == NULL) diff -durpN glibc-2.1.1/hurd/hurd.h glibc-2.1.2/hurd/hurd.h --- glibc-2.1.1/hurd/hurd.h Fri Mar 5 14:37:13 1999 +++ glibc-2.1.2/hurd/hurd.h Sun Jul 18 16:26:28 1999 @@ -43,7 +43,11 @@ #include -_EXTERN_INLINE int +#ifndef _HURD_H_EXTERN_INLINE +#define _HURD_H_EXTERN_INLINE extern __inline +#endif + +_HURD_H_EXTERN_INLINE int __hurd_fail (error_t err) { switch (err) diff -durpN glibc-2.1.1/hurd/hurdinline.c glibc-2.1.2/hurd/hurdinline.c --- glibc-2.1.1/hurd/hurdinline.c Tue Sep 3 07:06:08 1996 +++ glibc-2.1.2/hurd/hurdinline.c Wed Dec 31 16:00:00 1969 @@ -1,13 +0,0 @@ -/* Include these first to avoid defining their inline functions. */ -#include -#include - -#undef _EXTERN_INLINE -#define _EXTERN_INLINE /* Define the real function. */ - -#include "hurd.h" -#include "hurd/fd.h" -#include "hurd/signal.h" -#include "hurd/userlink.h" -#include "hurd/threadvar.h" -#include "hurd/port.h" diff -durpN glibc-2.1.1/hurd/hurdprio.c glibc-2.1.2/hurd/hurdprio.c --- glibc-2.1.1/hurd/hurdprio.c Fri Feb 14 20:26:54 1997 +++ glibc-2.1.2/hurd/hurdprio.c Mon Sep 6 12:31:45 1999 @@ -1,5 +1,5 @@ /* Support code for dealing with priorities in the Hurd. - Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1994,95,96,97,99 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 @@ -19,6 +19,7 @@ #include #include +#include error_t _hurd_priority_which_map (enum __priority_which which, int who, @@ -26,7 +27,7 @@ _hurd_priority_which_map (enum __priorit int pi_flags) { mach_msg_type_number_t npids = 64, i; - pid_t pidbuf[npids], *pids; + pid_t pidbuf[npids], *pids = pidbuf; error_t err; struct procinfo *pip; int pibuf[sizeof *pip + 5 * sizeof (pip->threadinfos[0])], *pi = pibuf; @@ -36,7 +37,7 @@ _hurd_priority_which_map (enum __priorit { case PRIO_PROCESS: npids = 1; - pids[0] = who; + pids[0] = who ?: getpid (); /* XXX function could special-case self? */ err = 0; break; @@ -45,6 +46,8 @@ _hurd_priority_which_map (enum __priorit break; case PRIO_USER: + if (who == 0) + who = geteuid (); err = __USEPORT (PROC, __proc_getallpids (port, &pids, &npids)); break; diff -durpN glibc-2.1.1/hurd/hurdsig.c glibc-2.1.2/hurd/hurdsig.c --- glibc-2.1.1/hurd/hurdsig.c Thu Nov 12 17:49:51 1998 +++ glibc-2.1.2/hurd/hurdsig.c Tue Aug 24 14:55:25 1999 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,93,94,95,96,97,98,99 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 @@ -448,7 +448,6 @@ _hurd_internal_post_signal (struct hurd_ error_t err; struct machine_thread_all_state thread_state; enum { stop, ignore, core, term, handle } act; - struct hurd_signal_preemptor *pe; sighandler_t handler; sigset_t pending; int ss_suspended; @@ -549,27 +548,45 @@ _hurd_internal_post_signal (struct hurd_ /* Check for a preempted signal. Preempted signals can arrive during critical sections. */ + { + inline sighandler_t try_preemptor (struct hurd_signal_preemptor *pe) + { /* PE cannot be null. */ + do + { + if (HURD_PREEMPT_SIGNAL_P (pe, signo, detail->code)) + { + if (pe->preemptor) + { + sighandler_t handler = (*pe->preemptor) (pe, ss, + &signo, detail); + if (handler != SIG_ERR) + return handler; + } + else + return pe->handler; + } + pe = pe->next; + } while (pe != 0); + return SIG_ERR; + } - handler = SIG_ERR; - for (pe = ss->preemptors; pe && handler == SIG_ERR; pe = pe->next) - if (HURD_PREEMPT_SIGNAL_P (pe, signo, detail->code)) - handler = (*pe->preemptor) (pe, ss, &signo, detail); + handler = ss->preemptors ? try_preemptor (ss->preemptors) : SIG_ERR; - if (handler == SIG_ERR && (__sigmask (signo) & _hurdsig_preempted_set)) - { - __mutex_lock (&_hurd_siglock); - for (pe = _hurdsig_preemptors; pe && handler == SIG_ERR; pe = pe->next) - if (HURD_PREEMPT_SIGNAL_P (pe, signo, detail->code)) - handler = (*pe->preemptor) (pe, ss, &signo, detail); - __mutex_unlock (&_hurd_siglock); - } + /* If no thread-specific preemptor, check for a global one. */ + if (handler == SIG_ERR && (__sigmask (signo) & _hurdsig_preempted_set)) + { + __mutex_lock (&_hurd_siglock); + handler = try_preemptor (_hurdsig_preemptors); + __mutex_unlock (&_hurd_siglock); + } + } ss_suspended = 0; if (handler == SIG_IGN) /* Ignore the signal altogether. */ act = ignore; - if (handler != SIG_ERR) + else if (handler != SIG_ERR) /* Run the preemption-provided handler. */ act = handle; else diff -durpN glibc-2.1.1/hurd/hurdsock.c glibc-2.1.2/hurd/hurdsock.c --- glibc-2.1.1/hurd/hurdsock.c Fri Feb 14 20:26:55 1997 +++ glibc-2.1.2/hurd/hurdsock.c Mon Jun 28 12:23:29 1999 @@ -1,5 +1,5 @@ /* _hurd_socket_server - Find the server for a socket domain. - Copyright (C) 1991, 92, 93, 94, 95, 97 Free Software Foundation, Inc. + Copyright (C) 1991,92,93,94,95,97,99 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 @@ -30,7 +30,7 @@ static struct mutex lock; static file_t *servers; -static int max_domain; +static int max_domain = -1; /* Return a port to the socket server for DOMAIN. Socket servers translate nodes in the directory _SERVERS_SOCKET @@ -56,8 +56,9 @@ _hurd_socket_server (int domain, int dea file_t *new = realloc (servers, (domain + 1) * sizeof (file_t)); if (new != NULL) { - while (max_domain <= domain) - new[max_domain++] = MACH_PORT_NULL; + do + new[++max_domain] = MACH_PORT_NULL; + while (max_domain < domain); servers = new; } else diff -durpN glibc-2.1.1/hurd/intr-msg.c glibc-2.1.2/hurd/intr-msg.c --- glibc-2.1.1/hurd/intr-msg.c Mon Oct 19 08:17:11 1998 +++ glibc-2.1.2/hurd/intr-msg.c Fri Aug 20 10:34:42 1999 @@ -1,5 +1,5 @@ /* Replacement for mach_msg used in interruptible Hurd RPCs. - Copyright (C) 95, 96, 97, 98 Free Software Foundation, Inc. + Copyright (C) 95, 96, 97, 98, 99 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 @@ -21,6 +21,7 @@ #include #include #include +#include #include "intr-msg.h" @@ -36,39 +37,75 @@ _hurd_intr_rpc_mach_msg (mach_msg_header { error_t err; struct hurd_sigstate *ss; - int user_timeout; + const mach_msg_option_t user_option = option; + const mach_msg_timeout_t user_timeout = timeout; - if (_hurd_msgport_thread == MACH_PORT_NULL) + struct clobber { int i[2]; }; + union msg + { + mach_msg_header_t header; + mig_reply_header_t reply; + struct { - /* The signal thread is not set up yet, so we cannot do the - normal signal magic. Do a simple uninterruptible RPC instead. */ - return __mach_msg (msg, option, send_size, rcv_size, rcv_name, + mach_msg_header_t header; + int type; + int code; + } check; + struct + { + mach_msg_header_t header; + struct clobber data; + } request; + }; + union msg *const m = (void *) msg; + mach_msg_bits_t msgh_bits; + mach_port_t remote_port; + mach_msg_id_t msgid; + struct clobber save_data; + + if ((option & (MACH_SEND_MSG|MACH_RCV_MSG)) != (MACH_SEND_MSG|MACH_RCV_MSG) + || _hurd_msgport_thread == MACH_PORT_NULL) + { + /* Either this is not an RPC (i.e., only a send or only a receive), + so it can't be interruptible; or, the signal thread is not set up + yet, so we cannot do the normal signal magic. Do a normal, + uninterruptible mach_msg call instead. */ + return __mach_msg (&m->header, option, send_size, rcv_size, rcv_name, timeout, notify); } ss = _hurd_self_sigstate (); - /* Notice now if the user requested a timeout. OPTION may have the bit - added by interruption semantics, and we must distinguish. */ - user_timeout = option & MACH_RCV_TIMEOUT; + /* Save state that gets clobbered by an EINTR reply message. + We will need to restore it if we want to retry the RPC. */ + msgh_bits = m->header.msgh_bits; + remote_port = m->header.msgh_remote_port; + msgid = m->header.msgh_id; + assert (rcv_size >= sizeof m->request); + save_data = m->request.data; /* Tell the signal thread that we are doing an interruptible RPC on this port. If we get a signal and should return EINTR, the signal thread will set this variable to MACH_PORT_NULL. The RPC might return EINTR when some other thread gets a signal, in which case we want to restart our call. */ - ss->intr_port = msg->msgh_remote_port; + ss->intr_port = m->header.msgh_remote_port; - /* A signal may arrive here, after intr_port is set, but before - the mach_msg system call. The signal handler might do an - interruptible RPC, and clobber intr_port; then it would not be - set properly when we actually did send the RPC, and a later - signal wouldn't interrupt that RPC. So, - _hurd_setup_sighandler saves intr_port in the sigcontext, and - sigreturn restores it. */ + /* A signal may arrive here, after intr_port is set, but before the + mach_msg system call. The signal handler might do an interruptible + RPC, and clobber intr_port; then it would not be set properly when we + actually did send the RPC, and a later signal wouldn't interrupt that + RPC. So, _hurd_setup_sighandler saves intr_port in the sigcontext, + and sigreturn restores it. */ message: + /* XXX + At all points here (once SS->intr_port is set), the signal thread + thinks we are "about to enter the syscall", and might mutate our + return-value register. This is bogus. + */ + if (ss->cancel) { /* We have been cancelled. Don't do an RPC at all. */ @@ -77,13 +114,14 @@ _hurd_intr_rpc_mach_msg (mach_msg_header return EINTR; } + /* Note that the signal trampoline code might modify our OPTION! */ err = INTR_MSG_TRAP (msg, option, send_size, rcv_size, rcv_name, timeout, notify); switch (err) { case MACH_RCV_TIMED_OUT: - if (user_timeout) + if (user_option & MACH_RCV_TIMEOUT) /* The real user RPC timed out. */ break; else @@ -92,18 +130,34 @@ _hurd_intr_rpc_mach_msg (mach_msg_header goto interrupted; case MACH_SEND_INTERRUPTED: /* RPC didn't get out. */ - case EINTR: /* Server not cooperating with interrupt. */ + if (!(option & MACH_SEND_MSG)) + { + /* Oh yes, it did! Since we were not doing a message send, + this return code cannot have come from the kernel! + Instead, it was the signal thread mutating our state to tell + us not to enter this RPC. However, we are already in the receive! + Since the signal thread thought we weren't in the RPC yet, + it didn't do an interrupt_operation. + XXX */ + goto retry_receive; + } + /* FALLTHROUGH */ + + case EINTR: + /* Either the process was stopped and continued, + or the server doesn't support interrupt_operation. */ if (ss->intr_port != MACH_PORT_NULL) /* If this signal was for us and it should interrupt calls, the signal thread will have cleared SS->intr_port. Since it's not cleared, the signal was for another thread, or SA_RESTART is set. Restart the interrupted call. */ { - restart: - if (rcv_name != MACH_PORT_NULL) - /* Make sure we have a valid reply port. The one we were using - may have been destroyed by interruption. */ - msg->msgh_local_port = rcv_name = __mig_get_reply_port (); + /* Make sure we have a valid reply port. The one we were using + may have been destroyed by interruption. */ + m->header.msgh_local_port = rcv_name = __mig_get_reply_port (); + m->header.msgh_bits = msgh_bits; + option = user_option; + timeout = user_timeout; goto message; } /* FALLTHROUGH */ @@ -122,52 +176,74 @@ _hurd_intr_rpc_mach_msg (mach_msg_header case MACH_RCV_INTERRUPTED: /* RPC sent; no reply. */ option &= ~MACH_SEND_MSG; /* Don't send again. */ + retry_receive: if (ss->intr_port == MACH_PORT_NULL) { /* This signal or cancellation was for us. We need to wait for the reply, but not hang forever. */ option |= MACH_RCV_TIMEOUT; /* Never decrease the user's timeout. */ - if (!user_timeout || timeout > _hurd_interrupted_rpc_timeout) + if (!(user_option & MACH_RCV_TIMEOUT) + || timeout > _hurd_interrupted_rpc_timeout) timeout = _hurd_interrupted_rpc_timeout; } + else + { + option = user_option; + timeout = user_timeout; + } goto message; /* Retry the receive. */ case MACH_MSG_SUCCESS: - if (option & MACH_RCV_MSG) + { + /* We got a reply. Was it EINTR? */ + const union { - /* We got a reply. Was it EINTR? */ - mig_reply_header_t *const reply = (void *) msg; - const union - { - mach_msg_type_t t; - int i; - } check = - { t: { - MACH_MSG_TYPE_INTEGER_T, - MACH_MSG_TYPE_INTEGER_T, - 1, - TRUE, - FALSE, - FALSE, - 0 - } }; - if (msg->msgh_size == sizeof *reply && - !(msg->msgh_bits & MACH_MSGH_BITS_COMPLEX) && - *(int *) &reply->RetCodeType == check.i && - reply->RetCode == EINTR) - { - /* It is indeed EINTR. Is the interrupt for us? */ - if (ss->intr_port != MACH_PORT_NULL) + mach_msg_type_t t; + int i; + } check = + { t: { MACH_MSG_TYPE_INTEGER_T, sizeof (integer_t) * 8, + 1, TRUE, FALSE, FALSE, 0 } }; + + if (m->reply.RetCode == EINTR && + m->header.msgh_size == sizeof m->reply && + m->check.type == check.i && + !(m->header.msgh_bits & MACH_MSGH_BITS_COMPLEX)) + { + /* It is indeed EINTR. Is the interrupt for us? */ + if (ss->intr_port != MACH_PORT_NULL) + { /* Nope; repeat the RPC. XXX Resources moved? */ - goto restart; - else - /* The EINTR return indicates cancellation, so clear the - flag. */ - ss->cancel = 0; - } - } + + assert (m->header.msgh_id == msgid + 100); + + /* We know we have a valid reply port, because we just + received the EINTR reply on it. Restore it and the + other fields in the message header needed for send, + since the header now reflects receipt of the reply. */ + m->header.msgh_local_port = rcv_name; + m->header.msgh_remote_port = remote_port; + m->header.msgh_id = msgid; + m->header.msgh_bits = msgh_bits; + /* Restore the two words clobbered by the reply data. */ + m->request.data = save_data; + + /* Restore the original mach_msg options. + OPTION may have had MACH_RCV_TIMEOUT added, + and/or MACH_SEND_MSG removed. */ + option = user_option; + timeout = user_timeout; + + /* Now we are ready to repeat the original message send. */ + goto message; + } + else + /* The EINTR return indicates cancellation, + so clear the flag. */ + ss->cancel = 0; + } + } break; default: /* Quiet -Wswitch-enum. */ diff -durpN glibc-2.1.1/hurd/new-fd.c glibc-2.1.2/hurd/new-fd.c --- glibc-2.1.1/hurd/new-fd.c Fri Feb 14 20:27:01 1997 +++ glibc-2.1.2/hurd/new-fd.c Tue Aug 24 14:55:28 1999 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1997, 1999 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 @@ -33,6 +33,9 @@ _hurd_new_fd (io_t port, io_t ctty) /* Initialize the port cells. */ _hurd_port_init (&d->port, port); _hurd_port_init (&d->ctty, ctty); + + /* And the fcntl flags. */ + d->flags = 0; } return d; diff -durpN glibc-2.1.1/hurd/port2fd.c glibc-2.1.2/hurd/port2fd.c --- glibc-2.1.1/hurd/port2fd.c Fri Feb 14 20:27:03 1997 +++ glibc-2.1.2/hurd/port2fd.c Tue Aug 24 14:55:30 1999 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1997, 1999 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 @@ -67,6 +67,7 @@ _hurd_port2fd (struct hurd_fd *d, io_t p mach_port_t old = _hurd_userlink_clear (&d->port.users) ? d->port.port : MACH_PORT_NULL; d->port.port = port; + d->flags = 0; if (old != MACH_PORT_NULL) __mach_port_deallocate (__mach_task_self (), old); } diff -durpN glibc-2.1.1/iconv/gconv_builtin.h glibc-2.1.2/iconv/gconv_builtin.h --- glibc-2.1.1/iconv/gconv_builtin.h Sun Apr 25 11:06:00 1999 +++ glibc-2.1.2/iconv/gconv_builtin.h Sun Aug 15 15:53:18 1999 @@ -39,6 +39,7 @@ BUILTIN_TRANSFORMATION (NULL, "ISO-10646 BUILTIN_ALIAS ("UTF8//", "ISO-10646/UTF8/") BUILTIN_ALIAS ("UTF-8//", "ISO-10646/UTF8/") +BUILTIN_ALIAS ("ISO-IR-193//", "ISO-10646/UTF8/") BUILTIN_ALIAS ("OSF05010001//", "ISO-10646/UTF8/") BUILTIN_TRANSFORMATION (NULL, "INTERNAL", 8, diff -durpN glibc-2.1.1/iconvdata/Makefile glibc-2.1.2/iconvdata/Makefile --- glibc-2.1.1/iconvdata/Makefile Mon Apr 19 09:04:21 1999 +++ glibc-2.1.2/iconvdata/Makefile Tue Jul 27 20:49:48 1999 @@ -81,8 +81,8 @@ LDFLAGS-libCNS.so = -Wl,-soname,$(@F) distribute := gconv-modules extra-module.mk gap.awk gaptab.awk \ gen-8bit.sh gen-8bit-gap.sh gen-8bit-gap-1.sh \ - TESTS $(wildcard testdata/*) run-iconv-test.sh \ - 8bit-generic.c 8bit-gap.c \ + TESTS $(filter-out testdata/CVS%,$(wildcard testdata/*)) \ + run-iconv-test.sh 8bit-generic.c 8bit-gap.c \ ansi_x3.110.c asmo_449.c baltic.c big5.c cp737.c cp737.h \ cp775.c cp775.h ibm874.c cns11643.c cns11643.h \ cns11643l1.c cns11643l1.h cp1250.c cp1251.c cp1252.c cp1253.c \ diff -durpN glibc-2.1.1/iconvdata/euc-kr.c glibc-2.1.2/iconvdata/euc-kr.c --- glibc-2.1.1/iconvdata/euc-kr.c Thu Dec 31 10:00:09 1998 +++ glibc-2.1.2/iconvdata/euc-kr.c Wed Jul 28 13:43:44 1999 @@ -1,5 +1,5 @@ /* Mapping tables for EUC-KR handling. - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jungshik Shin and Ulrich Drepper , 1998. @@ -33,6 +33,8 @@ euckr_from_ucs4 (uint32_t ch, unsigned c cp[0] |= 0x80; cp[1] |= 0x80; } + else + cp[0] = '\0'; } /* XXX Think about 0x5c ; '\'. */ else diff -durpN glibc-2.1.1/iconvdata/iso-2022-jp.c glibc-2.1.2/iconvdata/iso-2022-jp.c --- glibc-2.1.1/iconvdata/iso-2022-jp.c Wed Mar 17 13:03:56 1999 +++ glibc-2.1.2/iconvdata/iso-2022-jp.c Mon Sep 6 12:31:48 1999 @@ -470,6 +470,11 @@ gconv_end (struct gconv_step *data) if (var == iso2022jp2 && ch == 0x0a) \ set2 = UNSPECIFIED_set; \ } \ + /* ISO-2022-JP recommends to encode the newline character always in \ + ASCII since this allows a context-free interpretation of the \ + characters at the beginning of the next line. Otherwise it would \ + have to be known whether the last line ended using ASCII or \ + JIS X 0201. */ \ else if (set == JISX0201_Roman_set) \ { \ unsigned char buf[2]; \ @@ -574,16 +579,21 @@ gconv_end (struct gconv_step *data) { \ /* We must encode using ASCII. First write out the \ escape sequence. */ \ - if (NEED_LENGTH_TEST && outptr + 4 > outend) \ + if (NEED_LENGTH_TEST && outptr + 3 > outend) \ { \ result = GCONV_FULL_OUTPUT; \ break; \ } \ - \ *outptr++ = ESC; \ *outptr++ = '('; \ *outptr++ = 'B'; \ set = ASCII_set; \ + \ + if (NEED_LENGTH_TEST && outptr + 1 > outend) \ + { \ + result = GCONV_FULL_OUTPUT; \ + break; \ + } \ *outptr++ = ch; \ \ /* At the beginning of a line, G2 designation is cleared. */ \ @@ -603,16 +613,21 @@ gconv_end (struct gconv_step *data) if (written != UNKNOWN_10646_CHAR && buf[0] < 0x80) \ { \ /* We use JIS X 0201. */ \ - if (NEED_LENGTH_TEST && outptr + 4 > outend) \ + if (NEED_LENGTH_TEST && outptr + 3 > outend) \ { \ result = GCONV_FULL_OUTPUT; \ break; \ } \ - \ *outptr++ = ESC; \ *outptr++ = '('; \ *outptr++ = 'J'; \ set = JISX0201_Roman_set; \ + \ + if (NEED_LENGTH_TEST && outptr + 1 > outend) \ + { \ + result = GCONV_FULL_OUTPUT; \ + break; \ + } \ *outptr++ = buf[0]; \ } \ else \ @@ -621,16 +636,21 @@ gconv_end (struct gconv_step *data) if (written != UNKNOWN_10646_CHAR) \ { \ /* We use JIS X 0208. */ \ - if (NEED_LENGTH_TEST && outptr + 5 > outend) \ + if (NEED_LENGTH_TEST && outptr + 3 > outend) \ { \ result = GCONV_FULL_OUTPUT; \ break; \ } \ - \ *outptr++ = ESC; \ *outptr++ = '$'; \ *outptr++ = 'B'; \ set = JISX0208_1983_set; \ + \ + if (NEED_LENGTH_TEST && outptr + 2 > outend) \ + { \ + result = GCONV_FULL_OUTPUT; \ + break; \ + } \ *outptr++ = buf[0]; \ *outptr++ = buf[1]; \ } \ @@ -646,7 +666,7 @@ gconv_end (struct gconv_step *data) if (written != UNKNOWN_10646_CHAR) \ { \ /* We use JIS X 0212. */ \ - if (NEED_LENGTH_TEST && outptr + 6 > outend) \ + if (NEED_LENGTH_TEST && outptr + 4 > outend) \ { \ result = GCONV_FULL_OUTPUT; \ break; \ @@ -656,6 +676,12 @@ gconv_end (struct gconv_step *data) *outptr++ = '('; \ *outptr++ = 'D'; \ set = JISX0212_set; \ + \ + if (NEED_LENGTH_TEST && outptr + 2 > outend) \ + { \ + result = GCONV_FULL_OUTPUT; \ + break; \ + } \ *outptr++ = buf[0]; \ *outptr++ = buf[1]; \ } \ @@ -665,31 +691,41 @@ gconv_end (struct gconv_step *data) if (written != UNKNOWN_10646_CHAR && buf[0] >= 0x80) \ { \ /* We use JIS X 0201. */ \ - if (NEED_LENGTH_TEST && outptr + 4 > outend) \ + if (NEED_LENGTH_TEST && outptr + 3 > outend) \ { \ result = GCONV_FULL_OUTPUT; \ break; \ } \ - \ *outptr++ = ESC; \ *outptr++ = '('; \ *outptr++ = 'I'; \ set = JISX0201_Kana_set; \ + \ + if (NEED_LENGTH_TEST && outptr + 1 > outend) \ + { \ + result = GCONV_FULL_OUTPUT; \ + break; \ + } \ *outptr++ = buf[0] - 0x80; \ } \ else if (ch != 0xa5 && ch >= 0x80 && ch <= 0xff) \ { \ /* ISO 8859-1 upper half. */ \ - if (NEED_LENGTH_TEST && outptr + 6 > outend) \ + if (NEED_LENGTH_TEST && outptr + 3 > outend) \ { \ result = GCONV_FULL_OUTPUT; \ break; \ } \ - \ *outptr++ = ESC; \ *outptr++ = '.'; \ *outptr++ = 'A'; \ set2 = ISO88591_set; \ + \ + if (NEED_LENGTH_TEST && outptr + 3 > outend) \ + { \ + result = GCONV_FULL_OUTPUT; \ + break; \ + } \ *outptr++ = ESC; \ *outptr++ = 'N'; \ *outptr++ = ch; \ @@ -700,16 +736,21 @@ gconv_end (struct gconv_step *data) if (written != UNKNOWN_10646_CHAR) \ { \ /* We use GB 2312. */ \ - if (NEED_LENGTH_TEST && outptr + 5 > outend) \ + if (NEED_LENGTH_TEST && outptr + 3 > outend) \ { \ result = GCONV_FULL_OUTPUT; \ break; \ } \ - \ *outptr++ = ESC; \ *outptr++ = '$'; \ *outptr++ = 'A'; \ set = GB2312_set; \ + \ + if (NEED_LENGTH_TEST && outptr + 2 > outend) \ + { \ + result = GCONV_FULL_OUTPUT; \ + break; \ + } \ *outptr++ = buf[0]; \ *outptr++ = buf[1]; \ } \ @@ -720,7 +761,7 @@ gconv_end (struct gconv_step *data) { \ /* We use KSC 5601. */ \ if (NEED_LENGTH_TEST \ - && outptr + 6 > outend) \ + && outptr + 4 > outend) \ { \ result = GCONV_FULL_OUTPUT; \ break; \ @@ -730,6 +771,13 @@ gconv_end (struct gconv_step *data) *outptr++ = '('; \ *outptr++ = 'C'; \ set = KSC5601_set; \ + \ + if (NEED_LENGTH_TEST \ + && outptr + 2 > outend) \ + { \ + result = GCONV_FULL_OUTPUT; \ + break; \ + } \ *outptr++ = buf[0]; \ *outptr++ = buf[1]; \ } \ @@ -750,7 +798,7 @@ gconv_end (struct gconv_step *data) { \ /* We use ISO 8859-7 greek. */ \ if (NEED_LENGTH_TEST \ - && outptr + 6 > outend) \ + && outptr + 3 > outend) \ { \ result = GCONV_FULL_OUTPUT; \ break; \ @@ -759,6 +807,13 @@ gconv_end (struct gconv_step *data) *outptr++ = '.'; \ *outptr++ = 'F'; \ set2 = ISO88597_set; \ + \ + if (NEED_LENGTH_TEST \ + && outptr + 3 > outend) \ + { \ + result = GCONV_FULL_OUTPUT; \ + break; \ + } \ *outptr++ = ESC; \ *outptr++ = 'N'; \ *outptr++ = gch; \ diff -durpN glibc-2.1.1/iconvdata/jis0201.h glibc-2.1.2/iconvdata/jis0201.h --- glibc-2.1.1/iconvdata/jis0201.h Tue Dec 8 09:30:24 1998 +++ glibc-2.1.2/iconvdata/jis0201.h Mon Sep 6 12:31:48 1999 @@ -1,5 +1,5 @@ /* Access functions for JISX0201 conversion. - Copyright (C) 1997, 1998 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -46,7 +46,7 @@ ucs4_to_jisx0201 (uint32_t wch, char *s) ch = '\x5c'; else if (wch == 0x203e) ch = '\x7e'; - else if (wch < 0x7e) + else if (wch < 0x7e && wch != 0x5c) ch = wch; else if (wch >= 0xff61 && wch <= 0xff9f) ch = wch - 0xfec0; diff -durpN glibc-2.1.1/iconvdata/ksc5601.h glibc-2.1.2/iconvdata/ksc5601.h --- glibc-2.1.1/iconvdata/ksc5601.h Mon Jun 15 17:25:01 1998 +++ glibc-2.1.2/iconvdata/ksc5601.h Wed Jul 28 13:41:44 1999 @@ -1,5 +1,5 @@ /* Access functions for KS C 5601-1992 based encoding conversion. - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 1999 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 @@ -46,7 +46,7 @@ extern const struct map __ksc5601_hanja_ static inline uint32_t ksc5601_to_ucs4 (const unsigned char **s, size_t avail, unsigned char offset) { - unsigned char ch = *(*s); + unsigned char ch = **s; unsigned char ch2; int idx; @@ -68,17 +68,19 @@ ksc5601_to_ucs4 (const unsigned char **s /* 1410 = 15 * 94 , 3760 = 40 * 94 Hangul in KS C 5601 : row 16 - row 40 */ - (*s) += 2; + *s += 2; - if (idx >= 1410 && idx < 3760) + if (idx >= 1410 && idx < 1410 + KSC5601_HANGUL) return (__ksc5601_hangul_to_ucs[idx - 1410] ?: ((*s) -= 2, UNKNOWN_10646_CHAR)); else if (idx >= 3854) /* Hanja : row 42 - row 93 : 3854 = 94 * (42-1) */ return (__ksc5601_hanja_to_ucs[idx - 3854] ?: ((*s) -= 2, UNKNOWN_10646_CHAR)); - else + else if (idx <= 1114) return __ksc5601_sym_to_ucs[idx] ?: ((*s) -= 2, UNKNOWN_10646_CHAR); + + return UNKNOWN_10646_CHAR; } static inline size_t diff -durpN glibc-2.1.1/include/stdlib.h glibc-2.1.2/include/stdlib.h --- glibc-2.1.1/include/stdlib.h Mon Sep 14 10:30:19 1998 +++ glibc-2.1.2/include/stdlib.h Sun Aug 1 15:07:46 1999 @@ -46,6 +46,9 @@ extern char *__canonicalize_file_name __ extern char *__realpath __P ((__const char *__name, char *__resolved)); extern int __ptsname_r __P ((int __fd, char *__buf, size_t __buflen)); extern int __getpt __P ((void)); + +extern int __add_to_environ (const char *name, const char *value, + const char *combines, int replace); #endif #undef __Need_M_And_C diff -durpN glibc-2.1.1/include/sys/sysinfo.h glibc-2.1.2/include/sys/sysinfo.h --- glibc-2.1.1/include/sys/sysinfo.h Wed Dec 31 16:00:00 1969 +++ glibc-2.1.2/include/sys/sysinfo.h Sun Aug 1 15:14:11 1999 @@ -0,0 +1,18 @@ +#ifndef _SYS_SYSINFO_H +#include_next + +/* Now we define the internal interface. */ + +/* Return number of configured processors. */ +extern int __get_nprocs_conf __P ((void)); + +/* Return number of available processors. */ +extern int __get_nprocs __P ((void)); + +/* Return number of physical pages of memory in the system. */ +extern int __get_phys_pages __P ((void)); + +/* Return number of available physical pages of memory in the system. */ +extern int __get_avphys_pages __P ((void)); + +#endif /* sys/sysinfo.h */ diff -durpN glibc-2.1.1/inet/Versions glibc-2.1.2/inet/Versions --- glibc-2.1.1/inet/Versions Wed Dec 2 11:40:17 1998 +++ glibc-2.1.2/inet/Versions Fri Jul 9 20:40:40 1999 @@ -54,4 +54,12 @@ libc { # i* if_freenameindex; if_indextoname; if_nameindex; if_nametoindex; } + GLIBC_2.1.2 { + # g* + getaliasbyname_r; getaliasent_r; gethostbyaddr_r; gethostbyname2_r; + gethostbyname_r; gethostent_r; getnetbyaddr_r; getnetbyname_r; + getnetent_r; getnetgrent_r; getprotobyname_r; getprotobynumber_r; + getprotoent_r; getrpcbyname_r; getrpcbynumber_r; getrpcent_r; + getservbyname_r; + } } diff -durpN glibc-2.1.1/inet/arpa/tftp.h glibc-2.1.2/inet/arpa/tftp.h --- glibc-2.1.1/inet/arpa/tftp.h Mon May 17 17:22:52 1999 +++ glibc-2.1.2/inet/arpa/tftp.h Sun Jun 13 09:20:47 1999 @@ -56,7 +56,7 @@ struct tftphdr { unsigned short tu_block; /* block # */ short tu_code; /* error code */ char tu_stuff[1]; /* request packet stuff */ - } th_u __attribute__ ((__packed__)); + } __attribute__ ((__packed__)) th_u; char th_data[1]; /* data or error string */ } __attribute__ ((__packed__)); diff -durpN glibc-2.1.1/inet/netinet/in.h glibc-2.1.2/inet/netinet/in.h --- glibc-2.1.1/inet/netinet/in.h Tue May 11 11:57:04 1999 +++ glibc-2.1.2/inet/netinet/in.h Fri Aug 27 17:25:48 1999 @@ -56,6 +56,7 @@ enum IPPROTO_MTP = 92, /* Multicast Transport Protocol. */ IPPROTO_ENCAP = 98, /* Encapsulation Header. */ IPPROTO_PIM = 103, /* Protocol Independent Multicast. */ + IPPROTO_COMP = 108, /* Compression Header Protocol. */ IPPROTO_RAW = 255, /* Raw IP packets. */ IPPROTO_MAX }; @@ -177,8 +178,8 @@ struct in6_addr extern const struct in6_addr in6addr_any; /* :: */ extern const struct in6_addr in6addr_loopback; /* ::1 */ -#define IN6ADDR_ANY_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } -#define IN6ADDR_LOOPBACK_INIT { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } +#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } +#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } #define INET_ADDRSTRLEN 16 #define INET6_ADDRSTRLEN 46 diff -durpN glibc-2.1.1/inet/rcmd.c glibc-2.1.2/inet/rcmd.c --- glibc-2.1.1/inet/rcmd.c Mon Jan 25 09:29:15 1999 +++ glibc-2.1.2/inet/rcmd.c Fri Jul 2 11:11:40 1999 @@ -53,6 +53,7 @@ static char sccsid[] = "@(#)rcmd.c 8.3 ( #include #include #include +#include int __ivaliduser __P ((FILE *, u_int32_t, const char *, const char *)); @@ -83,7 +84,8 @@ rcmd(ahost, rport, locuser, remuser, cmd hstbuflen = 1024; tmphstbuf = __alloca (hstbuflen); while (__gethostbyname_r (*ahost, &hostbuf, tmphstbuf, hstbuflen, - &hp, &herr) < 0) + &hp, &herr) != 0 + || hp == NULL) if (herr != NETDB_INTERNAL || errno != ERANGE) { __set_h_errno (herr); @@ -273,7 +275,8 @@ ruserok(rhost, superuser, ruser, luser) buffer = __alloca (buflen); while (__gethostbyname_r (rhost, &hostbuf, buffer, buflen, &hp, &herr) - < 0) + != 0 + || hp == NULL) if (herr != NETDB_INTERNAL || errno != ERANGE) return -1; else @@ -373,7 +376,8 @@ iruserok2 (raddr, superuser, ruser, luse char *buffer = __alloca (buflen); uid_t uid; - if (__getpwnam_r (luser, &pwdbuf, buffer, buflen, &pwd)) + if (__getpwnam_r (luser, &pwdbuf, buffer, buflen, &pwd) != 0 + || pwd == NULL) return -1; dirlen = strlen (pwd->pw_dir); @@ -472,7 +476,7 @@ __icheckhost (raddr, lhost, rhost) buffer = __alloca (buflen); save_errno = errno; while (__gethostbyname_r (lhost, &hostbuf, buffer, buflen, &hp, &herr) - < 0) + != 0) if (herr != NETDB_INTERNAL || errno != ERANGE) return (0); else { @@ -566,10 +570,10 @@ __ivaliduser2(hostf, raddr, luser, ruser /* Skip lines that are too long. */ if (strchr (p, '\n') == NULL) { - int ch = getc (hostf); + int ch = getc_unlocked (hostf); while (ch != '\n' && ch != EOF) - ch = getc (hostf); + ch = getc_unlocked (hostf); continue; } diff -durpN glibc-2.1.1/inet/rexec.c glibc-2.1.2/inet/rexec.c --- glibc-2.1.1/inet/rexec.c Wed Jul 15 22:45:29 1998 +++ glibc-2.1.2/inet/rexec.c Fri Jul 2 11:11:40 1999 @@ -68,7 +68,8 @@ rexec(ahost, rport, name, pass, cmd, fd2 hstbuflen = 1024; hsttmpbuf = __alloca (hstbuflen); while (__gethostbyname_r (*ahost, &hostbuf, hsttmpbuf, hstbuflen, - &hp, &herr) < 0) + &hp, &herr) != 0 + || hp == NULL) if (herr != NETDB_INTERNAL || errno != ERANGE) { __set_h_errno (herr); diff -durpN glibc-2.1.1/intl/locale.alias glibc-2.1.2/intl/locale.alias --- glibc-2.1.1/intl/locale.alias Mon Mar 15 10:06:49 1999 +++ glibc-2.1.2/intl/locale.alias Sun Aug 15 13:20:12 1999 @@ -26,6 +26,7 @@ # it with the rest of us. Send it using the `glibcbug' script to # bugs@gnu.org. +catalan ca_ES.ISO-8859-1 croatian hr_HR.ISO-8859-2 czech cs_CZ.ISO-8859-2 danish da_DK.ISO-8859-1 diff -durpN glibc-2.1.1/io/ftwtest-sh glibc-2.1.2/io/ftwtest-sh --- glibc-2.1.1/io/ftwtest-sh Wed May 13 16:09:55 1998 +++ glibc-2.1.2/io/ftwtest-sh Mon Sep 6 12:31:59 1999 @@ -16,6 +16,12 @@ if test `id | sed "s/uid=\([0-9]*\).*/\1 exit 0 fi +# Since we use `sort' we must make sure to use the same locale everywhere. +LC_ALL=C +export LC_ALL +LANG=C +export LANG + # First create our scenario: tmp=`echo ${TMPDIR:-/tmp} | sed 's|\(.\)/*$|\1|'` tmpdir=$tmp/ftwtest.d diff -durpN glibc-2.1.1/libio/fileno.c glibc-2.1.2/libio/fileno.c --- glibc-2.1.1/libio/fileno.c Tue Aug 19 20:40:00 1997 +++ glibc-2.1.2/libio/fileno.c Thu Jul 8 11:55:28 1999 @@ -32,8 +32,11 @@ fileno (fp) { CHECK_FILE (fp, EOF); - if (!(fp->_flags & _IO_IS_FILEBUF)) - return EOF; + if (!(fp->_flags & _IO_IS_FILEBUF) || _IO_fileno (fp) < 0) + { + __set_errno (EBADF); + return -1; + } return _IO_fileno (fp); } diff -durpN glibc-2.1.1/libio/fileops.c glibc-2.1.2/libio/fileops.c --- glibc-2.1.1/libio/fileops.c Wed Nov 4 22:40:23 1998 +++ glibc-2.1.2/libio/fileops.c Tue Aug 24 16:12:36 1999 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU IO Library. Written by Per Bothner . @@ -142,7 +142,7 @@ _IO_new_file_close_it (fp) _IO_un_link (fp); fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS; - fp->_fileno = EOF; + fp->_fileno = -1; fp->_offset = _IO_pos_BAD; return close_status ? close_status : write_status; @@ -348,6 +348,7 @@ _IO_new_file_underflow (fp) if (fp->_flags & _IO_NO_READS) { + fp->_flags |= _IO_ERR_SEEN; __set_errno (EBADF); return EOF; } diff -durpN glibc-2.1.1/libio/iofclose.c glibc-2.1.2/libio/iofclose.c --- glibc-2.1.1/libio/iofclose.c Fri Sep 18 13:58:01 1998 +++ glibc-2.1.2/libio/iofclose.c Tue Jul 27 21:00:20 1999 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -35,6 +35,14 @@ _IO_new_fclose (fp) int status; CHECK_FILE(fp, EOF); + +#if defined PIC && DO_VERSIONING + /* We desperately try to help programs which are using streams in a + strange way and mix old and new functions. Detect old streams + here. */ + if (fp->_vtable_offset != 0) + return _IO_old_fclose (fp); +#endif _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); _IO_flockfile (fp); diff -durpN glibc-2.1.1/libio/iofdopen.c glibc-2.1.2/libio/iofdopen.c --- glibc-2.1.1/libio/iofdopen.c Sat Aug 8 13:47:48 1998 +++ glibc-2.1.2/libio/iofdopen.c Tue Jul 6 15:40:28 1999 @@ -76,10 +76,15 @@ _IO_new_fdopen (fd, mode) #ifndef O_ACCMODE #define O_ACCMODE (O_RDONLY|O_WRONLY|O_RDWR) #endif - if (fd_flags == -1 - || ((fd_flags & O_ACCMODE) == O_RDONLY && !(read_write & _IO_NO_WRITES)) - || ((fd_flags & O_ACCMODE) == O_WRONLY && !(read_write & _IO_NO_READS))) + if (fd_flags == -1) return NULL; + + if (((fd_flags & O_ACCMODE) == O_RDONLY && !(read_write & _IO_NO_WRITES)) + || ((fd_flags & O_ACCMODE) == O_WRONLY && !(read_write & _IO_NO_READS))) + { + MAYBE_SET_EINVAL; + return NULL; + } /* The May 93 draft of P1003.4/D14.1 (redesignated as 1003.1b) [System Application Program Interface (API) Amendment 1: diff -durpN glibc-2.1.1/libio/iofopncook.c glibc-2.1.2/libio/iofopncook.c --- glibc-2.1.1/libio/iofopncook.c Wed Apr 28 09:57:31 1999 +++ glibc-2.1.2/libio/iofopncook.c Tue Aug 24 16:04:28 1999 @@ -46,10 +46,10 @@ _IO_cookie_read (fp, buf, size) { struct _IO_cookie_file *cfile = (struct _IO_cookie_file *) fp; - if (cfile->io_functions.read == NULL) + if (cfile->__io_functions.read == NULL) return -1; - return cfile->io_functions.read (cfile->cookie, buf, size); + return cfile->__io_functions.read (cfile->__cookie, buf, size); } static _IO_ssize_t @@ -60,10 +60,10 @@ _IO_cookie_write (fp, buf, size) { struct _IO_cookie_file *cfile = (struct _IO_cookie_file *) fp; - if (cfile->io_functions.write == NULL) + if (cfile->__io_functions.write == NULL) return -1; - return cfile->io_functions.write (cfile->cookie, buf, size); + return cfile->__io_functions.write (cfile->__cookie, buf, size); } static _IO_fpos64_t @@ -75,13 +75,13 @@ _IO_cookie_seek (fp, offset, dir) struct _IO_cookie_file *cfile = (struct _IO_cookie_file *) fp; _IO_fpos64_t pos; - if (cfile->io_functions.seek == NULL) + if (cfile->__io_functions.seek == NULL) return _IO_pos_BAD; pos = _IO_pos_0; _IO_pos_adjust (pos, offset); - return cfile->io_functions.seek (cfile->cookie, pos, dir); + return cfile->__io_functions.seek (cfile->__cookie, pos, dir); } static int @@ -90,10 +90,10 @@ _IO_cookie_close (fp) { struct _IO_cookie_file *cfile = (struct _IO_cookie_file *) fp; - if (cfile->io_functions.close == NULL) + if (cfile->__io_functions.close == NULL) return 0; - return cfile->io_functions.close (cfile->cookie); + return cfile->__io_functions.close (cfile->__cookie); } @@ -157,19 +157,24 @@ fopencookie (cookie, mode, io_functions) if (new_f == NULL) return NULL; #ifdef _IO_MTSAFE_IO - new_f->cfile.file._lock = &new_f->lock; + new_f->cfile.__file._lock = &new_f->lock; #endif - _IO_init (&new_f->cfile.file, 0); - _IO_JUMPS (&new_f->cfile.file) = &_IO_cookie_jumps; - new_f->cfile.cookie = cookie; - new_f->cfile.io_functions = io_functions; + _IO_init (&new_f->cfile.__file, 0); + _IO_JUMPS (&new_f->cfile.__file) = &_IO_cookie_jumps; + new_f->cfile.__cookie = cookie; + new_f->cfile.__io_functions = io_functions; - _IO_file_init(&new_f->cfile.file); + _IO_file_init(&new_f->cfile.__file); - new_f->cfile.file._IO_file_flags = - _IO_mask_flags (&new_f->cfile.file, read_write, + new_f->cfile.__file._IO_file_flags = + _IO_mask_flags (&new_f->cfile.__file, read_write, _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING); - return &new_f->cfile.file; + /* We use a negative number different from -1 for _fileno to mark that + this special stream is not associated with a real file, but still has + to be treated as such. */ + new_f->cfile.__file._fileno = -2; + + return &new_f->cfile.__file; } diff -durpN glibc-2.1.1/libio/libio.h glibc-2.1.2/libio/libio.h --- glibc-2.1.1/libio/libio.h Fri Dec 4 16:54:06 1998 +++ glibc-2.1.2/libio/libio.h Tue Aug 24 14:57:32 1999 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 93, 94, 95, 97, 98 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,93,94,95,97,98,99 Free Software Foundation, Inc. This file is part of the GNU IO Library. Written by Per Bothner . @@ -255,23 +255,58 @@ extern _IO_FILE *_IO_stderr; #endif +/* Functions to do I/O and file management for a stream. */ + +/* Read NBYTES bytes from COOKIE into a buffer pointed to by BUF. + Return number of bytes read. */ +typedef __ssize_t __io_read_fn __PMT ((__ptr_t __cookie, char *__buf, + size_t __nbytes)); + +/* Write N bytes pointed to by BUF to COOKIE. Write all N bytes + unless there is an error. Return number of bytes written, or -1 if + there is an error without writing anything. If the file has been + opened for append (__mode.__append set), then set the file pointer + to the end of the file and then do the write; if not, just write at + the current file pointer. */ +typedef __ssize_t __io_write_fn __PMT ((__ptr_t __cookie, __const char *__buf, + size_t __n)); + +/* Move COOKIE's file position to *POS bytes from the + beginning of the file (if W is SEEK_SET), + the current position (if W is SEEK_CUR), + or the end of the file (if W is SEEK_END). + Set *POS to the new file position. + Returns zero if successful, nonzero if not. */ +typedef int __io_seek_fn __PMT ((__ptr_t __cookie, _IO_off_t __pos, int __w)); + +/* Close COOKIE. */ +typedef int __io_close_fn __PMT ((__ptr_t __cookie)); + + #ifdef _GNU_SOURCE -/* Define the user-visible type, with user-friendly member names. */ +/* User-visible names for the above. */ +typedef __io_read_fn cookie_read_function_t; +typedef __io_write_fn cookie_write_function_t; +typedef __io_seek_fn cookie_seek_function_t; +typedef __io_close_fn cookie_close_function_t; + +/* The structure with the cookie function pointers. */ typedef struct { - _IO_ssize_t (*read) __PMT ((struct _IO_FILE *, void *, _IO_ssize_t)); - _IO_ssize_t (*write) __PMT ((struct _IO_FILE *, const void *, _IO_ssize_t)); - _IO_fpos_t (*seek) __PMT ((struct _IO_FILE *, _IO_off_t, int)); - int (*close) __PMT ((struct _IO_FILE *)); + __io_read_fn *read; /* Read bytes. */ + __io_write_fn *write; /* Write bytes. */ + __io_seek_fn *seek; /* Seek/tell file position. */ + __io_close_fn *close; /* Close file. */ } _IO_cookie_io_functions_t; +typedef _IO_cookie_io_functions_t cookie_io_functions_t; /* Special file type for fopencookie function. */ struct _IO_cookie_file { - struct _IO_FILE file; - const void *vtable; - void *cookie; - _IO_cookie_io_functions_t io_functions; + struct _IO_FILE __file; + const void *__vtable; + void *__cookie; + _IO_cookie_io_functions_t __io_functions; }; #endif diff -durpN glibc-2.1.1/libio/libioP.h glibc-2.1.2/libio/libioP.h --- glibc-2.1.1/libio/libioP.h Mon Nov 23 07:22:21 1998 +++ glibc-2.1.2/libio/libioP.h Tue Aug 24 16:12:03 1999 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1997, 1998, 1999 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -375,7 +375,7 @@ extern int _IO_file_stat __P ((_IO_FILE extern int _IO_file_close __P ((_IO_FILE *)); extern int _IO_file_underflow __P ((_IO_FILE *)); extern int _IO_file_overflow __P ((_IO_FILE *, int)); -#define _IO_file_is_open(__fp) ((__fp)->_fileno >= 0) +#define _IO_file_is_open(__fp) ((__fp)->_fileno != -1) extern void _IO_file_init __P ((_IO_FILE *)); extern _IO_FILE* _IO_file_attach __P ((_IO_FILE *, int)); extern _IO_FILE* _IO_file_open __P ((_IO_FILE *, const char *, int, int, diff -durpN glibc-2.1.1/libio/oldfileops.c glibc-2.1.2/libio/oldfileops.c --- glibc-2.1.1/libio/oldfileops.c Mon Mar 29 16:15:37 1999 +++ glibc-2.1.2/libio/oldfileops.c Tue Aug 24 16:13:05 1999 @@ -149,7 +149,7 @@ _IO_old_file_close_it (fp) _IO_un_link (fp); fp->_flags = _IO_MAGIC|CLOSED_FILEBUF_FLAGS; - fp->_fileno = EOF; + fp->_fileno = -1; fp->_old_offset = _IO_pos_BAD; return close_status ? close_status : write_status; @@ -314,6 +314,7 @@ _IO_old_file_underflow (fp) if (fp->_flags & _IO_NO_READS) { + fp->_flags |= _IO_ERR_SEEN; __set_errno (EBADF); return EOF; } diff -durpN glibc-2.1.1/libio/oldiofclose.c glibc-2.1.2/libio/oldiofclose.c --- glibc-2.1.1/libio/oldiofclose.c Mon Mar 29 16:15:38 1999 +++ glibc-2.1.2/libio/oldiofclose.c Tue Jul 27 21:00:10 1999 @@ -37,6 +37,12 @@ _IO_old_fclose (fp) CHECK_FILE(fp, EOF); + /* We desperately try to help programs which are using streams in a + strange way and mix old and new functions. Detect new streams + here. */ + if (fp->_vtable_offset == 0) + return _IO_new_fclose (fp); + _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); _IO_flockfile (fp); if (fp->_IO_file_flags & _IO_IS_FILEBUF) diff -durpN glibc-2.1.1/libio/oldiopopen.c glibc-2.1.2/libio/oldiopopen.c --- glibc-2.1.1/libio/oldiopopen.c Thu Apr 29 09:57:24 1999 +++ glibc-2.1.2/libio/oldiopopen.c Tue Jun 22 10:06:23 1999 @@ -140,6 +140,8 @@ _IO_old_proc_open (fp, command, mode) if (child_pid == 0) { int child_std_end = mode[0] == 'r' ? 1 : 0; + struct _IO_proc_file *p; + _IO_close (parent_end); if (child_end != child_std_end) { @@ -149,11 +151,8 @@ _IO_old_proc_open (fp, command, mode) /* POSIX.2: "popen() shall ensure that any streams from previous popen() calls that remain open in the parent process are closed in the new child process." */ - while (old_proc_file_chain) - { - _IO_close (_IO_fileno ((_IO_FILE *) old_proc_file_chain)); - old_proc_file_chain = old_proc_file_chain->next; - } + for (p = old_proc_file_chain; p; p = p->next) + _IO_close (_IO_fileno ((_IO_FILE *) p)); _IO_execl ("/bin/sh", "sh", "-c", command, (char *) 0); _IO__exit (127); diff -durpN glibc-2.1.1/locale/lc-time.c glibc-2.1.2/locale/lc-time.c --- glibc-2.1.1/locale/lc-time.c Fri Jun 20 18:23:14 1997 +++ glibc-2.1.2/locale/lc-time.c Sun Jun 13 09:20:47 1999 @@ -1,5 +1,5 @@ /* Define current locale data for LC_TIME category. - Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1997, 1999 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 @@ -174,3 +174,16 @@ _nl_get_alt_digit (unsigned int number) return result; } + + +/* Free all resources if necessary. */ +static void __attribute__ ((unused)) +free_mem (void) +{ + if (eras != NULL) + free (eras); + if (alt_digits != NULL) + free (alt_digits); +} + +text_set_element (__libc_subfreeres, free_mem); diff -durpN glibc-2.1.1/localedata/ChangeLog glibc-2.1.2/localedata/ChangeLog --- glibc-2.1.1/localedata/ChangeLog Wed May 19 10:16:49 1999 +++ glibc-2.1.2/localedata/ChangeLog Mon Sep 6 12:32:13 1999 @@ -1,3 +1,71 @@ +1999-09-01 Thorsten Kukuk + + * localedata/locales/en_DK: Fix typos + +1999-08-31 Ulrich Drepper + + * locales/en_DK: Add Euro symbol to collation and characterization + tables. Patch by Geoff Keating. + + * charmaps/ISO-8859-15: Remove duplicate . + +1999-08-15 Ulrich Drepper + + * charmaps/UTF8: Generated from the charDB. + +1999-08-13 Andreas Schwab + + * locales/cs_CZ: Remove entry, add entry. + * locales/da_DK: Likewise. + * locales/de_DE: Likewise. + * locales/el_GR: Likewise. + * locales/en_CA: Likewise. + * locales/en_DK: Likewise. + * locales/en_DK.com: Likewise. + * locales/es_AR: Likewise. + * locales/es_BO: Likewise. + * locales/es_CL: Likewise. + * locales/es_CO: Likewise. + * locales/es_DO: Likewise. + * locales/es_EC: Likewise. + * locales/es_ES: Likewise. + * locales/es_GT: Likewise. + * locales/es_HN: Likewise. + * locales/es_MX: Likewise. + * locales/es_PA: Likewise. + * locales/es_PE: Likewise. + * locales/es_PY: Likewise. + * locales/es_SV: Likewise. + * locales/es_US: Likewise. + * locales/es_UY: Likewise. + * locales/es_VE: Likewise. + * locales/et_EE: Likewise. + * locales/fi_FI: Likewise. + * locales/hr_HR: Likewise. + * locales/hu_HU: Likewise. + * locales/is_IS: Likewise. + * locales/lt_LT: Likewise. + * locales/lv_LV: Likewise. + * locales/no_NO: Likewise. + * locales/pl_PL: Likewise. + * locales/ro_RO: Likewise. + * locales/ru_RU: Likewise. + * locales/ru_UA: Likewise. + * locales/sl_SI: Likewise. + * locales/sr_YU: Likewise. + * locales/sv_SE: Likewise. + * locales/tr_TR: Likewise. + * locales/uk_UA: Likewise. + + * charmaps/ISO_10646: Fix typo. + +1999-08-15 Ulrich Drepper + + * locales/ca_ES: New file. + Contributed by Joan Carles Soler . + + * SUPPORTED: Add ca_ES. + 1999-05-18 Ulrich Drepper * Makefile (LOCALEDEF): Add I18NPATH definition to find the diff -durpN glibc-2.1.1/localedata/Makefile glibc-2.1.2/localedata/Makefile --- glibc-2.1.1/localedata/Makefile Wed May 19 10:16:51 1999 +++ glibc-2.1.2/localedata/Makefile Fri Jun 18 19:05:36 1999 @@ -23,16 +23,16 @@ subdir := localedata all: # Make this the default target; it will be defined in Rules. # List with all available character set descriptions. -charmaps := $(filter-out $(addprefix charmaps/, CVS RCS %~), \ +charmaps := $(filter-out $(addprefix charmaps/, CVS RCS SCCS %~), \ $(wildcard charmaps/[A-I]*) \ $(wildcard charmaps/[J-Z]*)) # List with all available character set descriptions. -locales := $(filter-out $(addprefix locales/, CVS RCS %~), \ +locales := $(filter-out $(addprefix locales/, CVS RCS SCCS %~), \ $(wildcard locales/*)) # List of repertoire maps. -repertoiremaps := $(filter-out $(addprefix repertoiremaps/, CVS RCS %~), \ +repertoiremaps := $(filter-out $(addprefix repertoiremaps/, CVS RCS SCCS %~), \ $(wildcard repertoiremaps/*)) test-srcs := collate-test xfrm-test tst-fmon tst-rpmatch diff -durpN glibc-2.1.1/localedata/SUPPORTED glibc-2.1.2/localedata/SUPPORTED --- glibc-2.1.1/localedata/SUPPORTED Thu Apr 29 14:57:42 1999 +++ glibc-2.1.2/localedata/SUPPORTED Sun Aug 15 14:28:32 1999 @@ -1,6 +1,7 @@ # This file names the currently supported and somewhat tested locales. # If you have any additions please use the glibcbug script to send an # appropriate message. +ca_ES ISO-8859-1 cs_CZ ISO-8859-2 da_DK ISO-8859-1 de_AT ISO-8859-1 diff -durpN glibc-2.1.1/localedata/charmaps/ISO-8859-15 glibc-2.1.2/localedata/charmaps/ISO-8859-15 --- glibc-2.1.1/localedata/charmaps/ISO-8859-15 Sat Dec 12 16:34:55 1998 +++ glibc-2.1.2/localedata/charmaps/ISO-8859-15 Tue Aug 31 11:37:23 1999 @@ -266,7 +266,6 @@ CHARMAP /xA7 SECTION SIGN /xA8 LATIN SMALL LETTER S WITH CARON /xA9 COPYRIGHT SIGN - /xA9 COPYRIGHT SIGN <-a> /xAA FEMININE ORDINAL INDICATOR <<<> /xAB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK /xAC NOT SIGN diff -durpN glibc-2.1.1/localedata/charmaps/ISO_10646 glibc-2.1.2/localedata/charmaps/ISO_10646 --- glibc-2.1.1/localedata/charmaps/ISO_10646 Tue Mar 4 16:35:18 1997 +++ glibc-2.1.2/localedata/charmaps/ISO_10646 Sun Aug 15 15:52:47 1999 @@ -27,7 +27,7 @@ CHARMAP /x00/x13 DEVICE CONTROL THREE (DC3) /x00/x14 DEVICE CONTROL FOUR (DC4) /x00/x15 NEGATIVE ACKNOWLEDGE (NAK) - /x00/x16 SYNCRONOUS IDLE (SYN) + /x00/x16 SYNCHRONOUS IDLE (SYN) /x00/x17 END OF TRANSMISSION BLOCK (ETB) /x00/x18 CANCEL (CAN) /x00/x1A SUBSTITUTE (SUB) diff -durpN glibc-2.1.1/localedata/charmaps/UTF8 glibc-2.1.2/localedata/charmaps/UTF8 --- glibc-2.1.1/localedata/charmaps/UTF8 Wed Apr 28 09:50:41 1999 +++ glibc-2.1.2/localedata/charmaps/UTF8 Sun Aug 15 15:52:53 1999 @@ -1,1950 +1,2389 @@ - UTF-8 - % - / - 1 - 6 -% version: 1.0 -% repertoiremap: mnemonic.ds + UTF-8 + % + / + 1 + 6 +% automatically generated from the charDB % alias ISO-10646/UTF-8 CHARMAP - /x00 NULL (NUL) - /x00 NULL (NUL) - /x01 START OF HEADING (SOH) - /x01 START OF HEADING (SOH) - /x02 START OF TEXT (STX) - /x02 START OF TEXT (STX) - /x03 END OF TEXT (ETX) - /x03 END OF TEXT (ETX) - /x04 END OF TRANSMISSION (EOT) - /x04 END OF TRANSMISSION (EOT) - /x05 ENQUIRY (ENQ) - /x05 ENQUIRY (ENQ) - /x06 ACKNOWLEDGE (ACK) - /x06 ACKNOWLEDGE (ACK) - /x07 BELL (BEL) - /x07 BELL (BEL) - /x07 BELL (BEL) - /x08 BACKSPACE (BS) - /x08 BACKSPACE (BS) - /x09 CHARACTER TABULATION (HT) - /x09 CHARACTER TABULATION (HT) - /x0a LINE FEED (LF) - /x0a LINE FEED (LF) - /x0b LINE TABULATION (VT) - /x0b LINE TABULATION (VT) - /x0c FORM FEED (FF) - /x0c FORM FEED (FF) - /x0d CARRIAGE RETURN (CR) - /x0d CARRIAGE RETURN (CR) - /x0e SHIFT OUT (SO) - /x0f SHIFT IN (SI) - /x10 DATALINK ESCAPE (DLE) -
/x10 DATALINK ESCAPE (DLE) - /x11 DEVICE CONTROL ONE (DC1) - /x11 DEVICE CONTROL ONE (DC1) - /x12 DEVICE CONTROL TWO (DC2) - /x12 DEVICE CONTROL TWO (DC2) - /x13 DEVICE CONTROL THREE (DC3) - /x13 DEVICE CONTROL THREE (DC3) - /x14 DEVICE CONTROL FOUR (DC4) - /x14 DEVICE CONTROL FOUR (DC4) - /x15 NEGATIVE ACKNOWLEDGE (NAK) - /x15 NEGATIVE ACKNOWLEDGE (NAK) - /x16 SYNCHRONOUS IDLE (SYN) - /x16 SYNCHRONOUS IDLE (SYN) - /x17 END OF TRANSMISSION BLOCK (ETB) - /x17 END OF TRANSMISSION BLOCK (ETB) - /x18 CANCEL (CAN) - /x18 CANCEL (CAN) - /x19 END OF MEDIUM (EM) - /x1a SUBSTITUTE (SUB) - /x1a SUBSTITUTE (SUB) - /x1b ESCAPE (ESC) - /x1b ESCAPE (ESC) - /x1c FILE SEPARATOR (IS4) - /x1c FILE SEPARATOR (IS4) - /x1d GROUP SEPARATOR (IS3) - /x1d GROUP SEPARATOR (IS3) - /x1d GROUP SEPARATOR (IS3) - /x1e RECORD SEPARATOR (IS2) - /x1e RECORD SEPARATOR (IS2) - /x1f UNIT SEPARATOR (IS1) - /x1f UNIT SEPARATOR (IS1) - /x20 SPACE - /x20 SPACE - /x21 EXCLAMATION MARK - /x21 EXCLAMATION MARK - /x22 QUOTATION MARK -<"> /x22 QUOTATION MARK - /x23 NUMBER SIGN - /x23 NUMBER SIGN - /x24 DOLLAR SIGN - /x24 DOLLAR SIGN - /x25 PERCENT SIGN -<%> /x25 PERCENT SIGN - /x26 AMPERSAND -<&> /x26 AMPERSAND - /x27 APOSTROPHE -<'> /x27 APOSTROPHE - /x28 LEFT PARENTHESIS -<(> /x28 LEFT PARENTHESIS - /x29 RIGHT PARENTHESIS -<)> /x29 RIGHT PARENTHESIS - /x2a ASTERISK -<*> /x2a ASTERISK - /x2b PLUS SIGN -<+> /x2b PLUS SIGN - /x2c COMMA -<,> /x2c COMMA - /x2d HYPHEN-MINUS -<-> /x2d HYPHEN-MINUS - /x2d HYPHEN-MINUS - /x2e FULL STOP - /x2e FULL STOP -<.> /x2e FULL STOP - /x2f SOLIDUS - /x2f SOLIDUS - /x2f SOLIDUS - /x30 DIGIT ZERO -<0> /x30 DIGIT ZERO - /x31 DIGIT ONE -<1> /x31 DIGIT ONE - /x32 DIGIT TWO -<2> /x32 DIGIT TWO - /x33 DIGIT THREE -<3> /x33 DIGIT THREE - /x34 DIGIT FOUR -<4> /x34 DIGIT FOUR - /x35 DIGIT FIVE -<5> /x35 DIGIT FIVE - /x36 DIGIT SIX -<6> /x36 DIGIT SIX - /x37 DIGIT SEVEN -<7> /x37 DIGIT SEVEN - /x38 DIGIT EIGHT -<8> /x38 DIGIT EIGHT - /x39 DIGIT NINE -<9> /x39 DIGIT NINE - /x3a COLON -<:> /x3a COLON - /x3b SEMICOLON -<;> /x3b SEMICOLON - /x3c LESS-THAN SIGN -<<> /x3c LESS-THAN SIGN - /x3d EQUALS SIGN -<=> /x3d EQUALS SIGN - /x3e GREATER-THAN SIGN -> /x3e GREATER-THAN SIGN - /x3f QUESTION MARK - /x3f QUESTION MARK - /x40 COMMERCIAL AT - /x40 COMMERCIAL AT - /x41 LATIN CAPITAL LETTER A - /x42 LATIN CAPITAL LETTER B - /x43 LATIN CAPITAL LETTER C - /x44 LATIN CAPITAL LETTER D - /x45 LATIN CAPITAL LETTER E - /x46 LATIN CAPITAL LETTER F - /x47 LATIN CAPITAL LETTER G - /x48 LATIN CAPITAL LETTER H - /x49 LATIN CAPITAL LETTER I - /x4a LATIN CAPITAL LETTER J - /x4b LATIN CAPITAL LETTER K - /x4c LATIN CAPITAL LETTER L - /x4d LATIN CAPITAL LETTER M - /x4e LATIN CAPITAL LETTER N - /x4f LATIN CAPITAL LETTER O -

/x70 LATIN SMALL LETTER P - /x71 LATIN SMALL LETTER Q - /x72 LATIN SMALL LETTER R - /x73 LATIN SMALL LETTER S - /x74 LATIN SMALL LETTER T - /x75 LATIN SMALL LETTER U - /x76 LATIN SMALL LETTER V - /x77 LATIN SMALL LETTER W - /x78 LATIN SMALL LETTER X - /x79 LATIN SMALL LETTER Y - /x7a LATIN SMALL LETTER Z - /x7b LEFT CURLY BRACKET - /x7b LEFT CURLY BRACKET -<(!> /x7b LEFT CURLY BRACKET - /x7c VERTICAL LINE - /x7c VERTICAL LINE - /x7d RIGHT CURLY BRACKET - /x7d RIGHT CURLY BRACKET - /x7d RIGHT CURLY BRACKET - /x7e TILDE -<'?> /x7e TILDE - /x7f DELETE (DEL) - /xc2/x80 PADDING CHARACTER (PAD) - /xc2/x81 HIGH OCTET PRESET (HOP) - /xc2/x82 BREAK PERMITTED HERE (BPH) - /xc2/x83 NO BREAK HERE (NBH) - /xc2/x84 INDEX (IND) - /xc2/x85 NEXT LINE (NEL) - /xc2/x86 START OF SELECTED AREA (SSA) - /xc2/x87 END OF SELECTED AREA (ESA) - /xc2/x88 CHARACTER TABULATION SET (HTS) - /xc2/x89 CHARACTER TABULATION WITH JUSTIFICATION (HTJ) - /xc2/x8a LINE TABULATION SET (VTS) - /xc2/x8b PARTIAL LINE FORWARD (PLD) - /xc2/x8c PARTIAL LINE BACKWARD (PLU) - /xc2/x8d REVERSE LINE FEED (RI) - /xc2/x8e SINGLE-SHIFT TWO (SS2) - /xc2/x8f SINGLE-SHIFT THREE (SS3) - /xc2/x90 DEVICE CONTROL STRING (DCS) - /xc2/x91 PRIVATE USE ONE (PU1) - /xc2/x92 PRIVATE USE TWO (PU2) - /xc2/x93 SET TRANSMIT STATE (STS) - /xc2/x94 CANCEL CHARACTER (CCH) - /xc2/x95 MESSAGE WAITING (MW) - /xc2/x96 START OF GUARDED AREA (SPA) - /xc2/x97 END OF GUARDED AREA (EPA) - /xc2/x98 START OF STRING (SOS) - /xc2/x99 SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI) - /xc2/x9a SINGLE CHARACTER INTRODUCER (SCI) - /xc2/x9b CONTROL SEQUENCE INTRODUCER (CSI) - /xc2/x9c STRING TERMINATOR (ST) - /xc2/x9d OPERATING SYSTEM COMMAND (OSC) - /xc2/x9e PRIVACY MESSAGE (PM) - /xc2/x9f APPLICATION PROGRAM COMMAND (APC) - /xc2/xa0 NO-BREAK SPACE - /xc2/xa1 INVERTED EXCLAMATION MARK - /xc2/xa2 CENT SIGN - /xc2/xa3 POUND SIGN - /xc2/xa4 CURRENCY SIGN - /xc2/xa5 YEN SIGN - /xc2/xa6 BROKEN BAR - /xc2/xa7 SECTION SIGN -<':> /xc2/xa8 DIAERESIS - /xc2/xa9 COPYRIGHT SIGN -<-a> /xc2/xaa FEMININE ORDINAL INDICATOR -<<<> /xc2/xab LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - /xc2/xac NOT SIGN -<--> /xc2/xad SOFT HYPHEN - /xc2/xae REGISTERED SIGN -<'m> /xc2/xaf MACRON - /xc2/xb0 DEGREE SIGN -<+-> /xc2/xb1 PLUS-MINUS SIGN -<2S> /xc2/xb2 SUPERSCRIPT TWO -<3S> /xc2/xb3 SUPERSCRIPT THREE -<''> /xc2/xb4 ACUTE ACCENT - /xc2/xb5 MICRO SIGN - /xc2/xb6 PILCROW SIGN -<.M> /xc2/xb7 MIDDLE DOT -<',> /xc2/xb8 CEDILLA -<1S> /xc2/xb9 SUPERSCRIPT ONE -<-o> /xc2/xba MASCULINE ORDINAL INDICATOR -/>> /xc2/xbb RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -<14> /xc2/xbc VULGAR FRACTION ONE QUARTER -<12> /xc2/xbd VULGAR FRACTION ONE HALF -<34> /xc2/xbe VULGAR FRACTION THREE QUARTERS - /xc2/xbf INVERTED QUESTION MARK - /xc3/x80 LATIN CAPITAL LETTER A WITH GRAVE - /xc3/x81 LATIN CAPITAL LETTER A WITH ACUTE -> /xc3/x82 LATIN CAPITAL LETTER A WITH CIRCUMFLEX - /xc3/x83 LATIN CAPITAL LETTER A WITH TILDE - /xc3/x84 LATIN CAPITAL LETTER A WITH DIAERESIS - /xc3/x85 LATIN CAPITAL LETTER A WITH RING ABOVE - /xc3/x86 LATIN CAPITAL LETTER AE - /xc3/x87 LATIN CAPITAL LETTER C WITH CEDILLA - /xc3/x88 LATIN CAPITAL LETTER E WITH GRAVE - /xc3/x89 LATIN CAPITAL LETTER E WITH ACUTE -> /xc3/x8a LATIN CAPITAL LETTER E WITH CIRCUMFLEX - /xc3/x8b LATIN CAPITAL LETTER E WITH DIAERESIS - /xc3/x8c LATIN CAPITAL LETTER I WITH GRAVE - /xc3/x8d LATIN CAPITAL LETTER I WITH ACUTE -> /xc3/x8e LATIN CAPITAL LETTER I WITH CIRCUMFLEX - /xc3/x8f LATIN CAPITAL LETTER I WITH DIAERESIS - /xc3/x90 LATIN CAPITAL LETTER ETH (Icelandic) - /xc3/x91 LATIN CAPITAL LETTER N WITH TILDE - /xc3/x92 LATIN CAPITAL LETTER O WITH GRAVE - /xc3/x93 LATIN CAPITAL LETTER O WITH ACUTE -> /xc3/x94 LATIN CAPITAL LETTER O WITH CIRCUMFLEX - /xc3/x95 LATIN CAPITAL LETTER O WITH TILDE - /xc3/x96 LATIN CAPITAL LETTER O WITH DIAERESIS -<*X> /xc3/x97 MULTIPLICATION SIGN - /xc3/x98 LATIN CAPITAL LETTER O WITH STROKE - /xc3/x99 LATIN CAPITAL LETTER U WITH GRAVE - /xc3/x9a LATIN CAPITAL LETTER U WITH ACUTE -> /xc3/x9b LATIN CAPITAL LETTER U WITH CIRCUMFLEX - /xc3/x9c LATIN CAPITAL LETTER U WITH DIAERESIS - /xc3/x9d LATIN CAPITAL LETTER Y WITH ACUTE - /xc3/x9e LATIN CAPITAL LETTER THORN (Icelandic) - /xc3/x9f LATIN SMALL LETTER SHARP S (German) - /xc3/xa0 LATIN SMALL LETTER A WITH GRAVE - /xc3/xa1 LATIN SMALL LETTER A WITH ACUTE -> /xc3/xa2 LATIN SMALL LETTER A WITH CIRCUMFLEX - /xc3/xa3 LATIN SMALL LETTER A WITH TILDE - /xc3/xa4 LATIN SMALL LETTER A WITH DIAERESIS - /xc3/xa5 LATIN SMALL LETTER A WITH RING ABOVE - /xc3/xa6 LATIN SMALL LETTER AE - /xc3/xa7 LATIN SMALL LETTER C WITH CEDILLA - /xc3/xa8 LATIN SMALL LETTER E WITH GRAVE - /xc3/xa9 LATIN SMALL LETTER E WITH ACUTE -> /xc3/xaa LATIN SMALL LETTER E WITH CIRCUMFLEX - /xc3/xab LATIN SMALL LETTER E WITH DIAERESIS - /xc3/xac LATIN SMALL LETTER I WITH GRAVE - /xc3/xad LATIN SMALL LETTER I WITH ACUTE -> /xc3/xae LATIN SMALL LETTER I WITH CIRCUMFLEX - /xc3/xaf LATIN SMALL LETTER I WITH DIAERESIS - /xc3/xb0 LATIN SMALL LETTER ETH (Icelandic) - /xc3/xb1 LATIN SMALL LETTER N WITH TILDE - /xc3/xb2 LATIN SMALL LETTER O WITH GRAVE - /xc3/xb3 LATIN SMALL LETTER O WITH ACUTE -> /xc3/xb4 LATIN SMALL LETTER O WITH CIRCUMFLEX - /xc3/xb5 LATIN SMALL LETTER O WITH TILDE - /xc3/xb6 LATIN SMALL LETTER O WITH DIAERESIS -<-:> /xc3/xb7 DIVISION SIGN - /xc3/xb8 LATIN SMALL LETTER O WITH STROKE - /xc3/xb9 LATIN SMALL LETTER U WITH GRAVE - /xc3/xba LATIN SMALL LETTER U WITH ACUTE -> /xc3/xbb LATIN SMALL LETTER U WITH CIRCUMFLEX - /xc3/xbc LATIN SMALL LETTER U WITH DIAERESIS - /xc3/xbd LATIN SMALL LETTER Y WITH ACUTE - /xc3/xbe LATIN SMALL LETTER THORN (Icelandic) - /xc3/xbf LATIN SMALL LETTER Y WITH DIAERESIS - /xc4/x80 LATIN CAPITAL LETTER A WITH MACRON - /xc4/x81 LATIN SMALL LETTER A WITH MACRON - /xc4/x82 LATIN CAPITAL LETTER A WITH BREVE - /xc4/x83 LATIN SMALL LETTER A WITH BREVE - /xc4/x84 LATIN CAPITAL LETTER A WITH OGONEK - /xc4/x85 LATIN SMALL LETTER A WITH OGONEK - /xc4/x86 LATIN CAPITAL LETTER C WITH ACUTE - /xc4/x87 LATIN SMALL LETTER C WITH ACUTE -> /xc4/x88 LATIN CAPITAL LETTER C WITH CIRCUMFLEX -> /xc4/x89 LATIN SMALL LETTER C WITH CIRCUMFLEX - /xc4/x8a LATIN CAPITAL LETTER C WITH DOT ABOVE - /xc4/x8b LATIN SMALL LETTER C WITH DOT ABOVE - /xc4/x8c LATIN CAPITAL LETTER C WITH CARON - /xc4/x8d LATIN SMALL LETTER C WITH CARON - /xc4/x8e LATIN CAPITAL LETTER D WITH CARON - /xc4/x8f LATIN SMALL LETTER D WITH CARON - /xc4/x90 LATIN CAPITAL LETTER D WITH STROKE - /xc4/x91 LATIN SMALL LETTER D WITH STROKE - /xc4/x92 LATIN CAPITAL LETTER E WITH MACRON - /xc4/x93 LATIN SMALL LETTER E WITH MACRON - /xc4/x94 LATIN CAPITAL LETTER E WITH BREVE - /xc4/x95 LATIN SMALL LETTER E WITH BREVE - /xc4/x96 LATIN CAPITAL LETTER E WITH DOT ABOVE - /xc4/x97 LATIN SMALL LETTER E WITH DOT ABOVE - /xc4/x98 LATIN CAPITAL LETTER E WITH OGONEK - /xc4/x99 LATIN SMALL LETTER E WITH OGONEK - /xc4/x9a LATIN CAPITAL LETTER E WITH CARON - /xc4/x9b LATIN SMALL LETTER E WITH CARON -> /xc4/x9c LATIN CAPITAL LETTER G WITH CIRCUMFLEX -> /xc4/x9d LATIN SMALL LETTER G WITH CIRCUMFLEX - /xc4/x9e LATIN CAPITAL LETTER G WITH BREVE - /xc4/x9f LATIN SMALL LETTER G WITH BREVE - /xc4/xa0 LATIN CAPITAL LETTER G WITH DOT ABOVE - /xc4/xa1 LATIN SMALL LETTER G WITH DOT ABOVE - /xc4/xa2 LATIN CAPITAL LETTER G WITH CEDILLA - /xc4/xa3 LATIN SMALL LETTER G WITH CEDILLA -> /xc4/xa4 LATIN CAPITAL LETTER H WITH CIRCUMFLEX -> /xc4/xa5 LATIN SMALL LETTER H WITH CIRCUMFLEX - /xc4/xa6 LATIN CAPITAL LETTER H WITH STROKE - /xc4/xa7 LATIN SMALL LETTER H WITH STROKE - /xc4/xa8 LATIN CAPITAL LETTER I WITH TILDE - /xc4/xa9 LATIN SMALL LETTER I WITH TILDE - /xc4/xaa LATIN CAPITAL LETTER I WITH MACRON - /xc4/xab LATIN SMALL LETTER I WITH MACRON - /xc4/xac LATIN CAPITAL LETTER I WITH BREVE - /xc4/xad LATIN SMALL LETTER I WITH BREVE - /xc4/xae LATIN CAPITAL LETTER I WITH OGONEK - /xc4/xaf LATIN SMALL LETTER I WITH OGONEK - /xc4/xb0 LATIN CAPITAL LETTER I WITH DOT ABOVE - /xc4/xb1 LATIN SMALL LETTER DOTLESS I - /xc4/xb2 LATIN CAPITAL LIGATURE IJ - /xc4/xb3 LATIN SMALL LIGATURE IJ -> /xc4/xb4 LATIN CAPITAL LETTER J WITH CIRCUMFLEX -> /xc4/xb5 LATIN SMALL LETTER J WITH CIRCUMFLEX - /xc4/xb6 LATIN CAPITAL LETTER K WITH CEDILLA - /xc4/xb7 LATIN SMALL LETTER K WITH CEDILLA - /xc4/xb8 LATIN SMALL LETTER KRA (Greenlandic) - /xc4/xb9 LATIN CAPITAL LETTER L WITH ACUTE - /xc4/xba LATIN SMALL LETTER L WITH ACUTE - /xc4/xbb LATIN CAPITAL LETTER L WITH CEDILLA - /xc4/xbc LATIN SMALL LETTER L WITH CEDILLA - /xc4/xbd LATIN CAPITAL LETTER L WITH CARON - /xc4/xbe LATIN SMALL LETTER L WITH CARON - /xc4/xbf LATIN CAPITAL LETTER L WITH MIDDLE DOT - /xc5/x80 LATIN SMALL LETTER L WITH MIDDLE DOT - /xc5/x81 LATIN CAPITAL LETTER L WITH STROKE - /xc5/x82 LATIN SMALL LETTER L WITH STROKE - /xc5/x83 LATIN CAPITAL LETTER N WITH ACUTE - /xc5/x84 LATIN SMALL LETTER N WITH ACUTE - /xc5/x85 LATIN CAPITAL LETTER N WITH CEDILLA - /xc5/x86 LATIN SMALL LETTER N WITH CEDILLA - /xc5/x87 LATIN CAPITAL LETTER N WITH CARON - /xc5/x88 LATIN SMALL LETTER N WITH CARON -<'n> /xc5/x89 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE - /xc5/x8a LATIN CAPITAL LETTER ENG (Sami) - /xc5/x8b LATIN SMALL LETTER ENG (Sami) - /xc5/x8c LATIN CAPITAL LETTER O WITH MACRON - /xc5/x8d LATIN SMALL LETTER O WITH MACRON - /xc5/x8e LATIN CAPITAL LETTER O WITH BREVE - /xc5/x8f LATIN SMALL LETTER O WITH BREVE - /xc5/x90 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - /xc5/x91 LATIN SMALL LETTER O WITH DOUBLE ACUTE - /xc5/x92 LATIN CAPITAL LIGATURE OE - /xc5/x93 LATIN SMALL LIGATURE OE - /xc5/x94 LATIN CAPITAL LETTER R WITH ACUTE - /xc5/x95 LATIN SMALL LETTER R WITH ACUTE - /xc5/x96 LATIN CAPITAL LETTER R WITH CEDILLA - /xc5/x97 LATIN SMALL LETTER R WITH CEDILLA - /xc5/x98 LATIN CAPITAL LETTER R WITH CARON - /xc5/x99 LATIN SMALL LETTER R WITH CARON - /xc5/x9a LATIN CAPITAL LETTER S WITH ACUTE - /xc5/x9b LATIN SMALL LETTER S WITH ACUTE -> /xc5/x9c LATIN CAPITAL LETTER S WITH CIRCUMFLEX -> /xc5/x9d LATIN SMALL LETTER S WITH CIRCUMFLEX - /xc5/x9e LATIN CAPITAL LETTER S WITH CEDILLA - /xc5/x9f LATIN SMALL LETTER S WITH CEDILLA - /xc5/xa0 LATIN CAPITAL LETTER S WITH CARON - /xc5/xa1 LATIN SMALL LETTER S WITH CARON - /xc5/xa2 LATIN CAPITAL LETTER T WITH CEDILLA - /xc5/xa3 LATIN SMALL LETTER T WITH CEDILLA - /xc5/xa4 LATIN CAPITAL LETTER T WITH CARON - /xc5/xa5 LATIN SMALL LETTER T WITH CARON - /xc5/xa6 LATIN CAPITAL LETTER T WITH STROKE - /xc5/xa7 LATIN SMALL LETTER T WITH STROKE - /xc5/xa8 LATIN CAPITAL LETTER U WITH TILDE - /xc5/xa9 LATIN SMALL LETTER U WITH TILDE - /xc5/xaa LATIN CAPITAL LETTER U WITH MACRON - /xc5/xab LATIN SMALL LETTER U WITH MACRON - /xc5/xac LATIN CAPITAL LETTER U WITH BREVE - /xc5/xad LATIN SMALL LETTER U WITH BREVE - /xc5/xae LATIN CAPITAL LETTER U WITH RING ABOVE - /xc5/xaf LATIN SMALL LETTER U WITH RING ABOVE - /xc5/xb0 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - /xc5/xb1 LATIN SMALL LETTER U WITH DOUBLE ACUTE - /xc5/xb2 LATIN CAPITAL LETTER U WITH OGONEK - /xc5/xb3 LATIN SMALL LETTER U WITH OGONEK -> /xc5/xb4 LATIN CAPITAL LETTER W WITH CIRCUMFLEX -> /xc5/xb5 LATIN SMALL LETTER W WITH CIRCUMFLEX -> /xc5/xb6 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -> /xc5/xb7 LATIN SMALL LETTER Y WITH CIRCUMFLEX - /xc5/xb8 LATIN CAPITAL LETTER Y WITH DIAERESIS - /xc5/xb9 LATIN CAPITAL LETTER Z WITH ACUTE - /xc5/xba LATIN SMALL LETTER Z WITH ACUTE - /xc5/xbb LATIN CAPITAL LETTER Z WITH DOT ABOVE - /xc5/xbc LATIN SMALL LETTER Z WITH DOT ABOVE - /xc5/xbd LATIN CAPITAL LETTER Z WITH CARON - /xc5/xbe LATIN SMALL LETTER Z WITH CARON - /xc5/xbf LATIN SMALL LETTER LONG S - /xc6/x87 LATIN CAPITAL LETTER C WITH HOOK - /xc6/x88 LATIN SMALL LETTER C WITH HOOK - /xc6/x91 LATIN CAPITAL LETTER F WITH HOOK - /xc6/x92 LATIN SMALL LETTER F WITH HOOK - /xc6/x98 LATIN CAPITAL LETTER K WITH HOOK - /xc6/x99 LATIN SMALL LETTER K WITH HOOK - /xc6/xa0 LATIN CAPITAL LETTER O WITH HORN - /xc6/xa1 LATIN SMALL LETTER O WITH HORN - /xc6/xa2 LATIN CAPITAL LETTER OI - /xc6/xa3 LATIN SMALL LETTER OI - /xc6/xa6 LATIN LETTER YR - /xc6/xaf LATIN CAPITAL LETTER U WITH HORN - /xc6/xb0 LATIN SMALL LETTER U WITH HORN - /xc6/xb5 LATIN CAPITAL LETTER Z WITH STROKE - /xc6/xb6 LATIN SMALL LETTER Z WITH STROKE - /xc6/xb7 LATIN CAPITAL LETTER EZH - /xc7/x8d LATIN CAPITAL LETTER A WITH CARON - /xc7/x8e LATIN SMALL LETTER A WITH CARON - /xc7/x8f LATIN CAPITAL LETTER I WITH CARON - /xc7/x90 LATIN SMALL LETTER I WITH CARON - /xc7/x91 LATIN CAPITAL LETTER O WITH CARON - /xc7/x92 LATIN SMALL LETTER O WITH CARON - /xc7/x93 LATIN CAPITAL LETTER U WITH CARON - /xc7/x94 LATIN SMALL LETTER U WITH CARON - /xc7/x95 LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON - /xc7/x96 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON - /xc7/x97 LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE - /xc7/x98 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE - /xc7/x99 LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON - /xc7/x9a LATIN SMALL LETTER U WITH DIAERESIS AND CARON - /xc7/x9b LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE - /xc7/x9c LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE - /xc7/x9e LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON - /xc7/x9f LATIN SMALL LETTER A WITH DIAERESIS AND MACRON - /xc7/xa0 LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON - /xc7/xa1 LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON - /xc7/xa2 LATIN CAPITAL LETTER AE WITH MACRON - /xc7/xa3 LATIN SMALL LETTER AE WITH MACRON - /xc7/xa4 LATIN CAPITAL LETTER G WITH STROKE - /xc7/xa5 LATIN SMALL LETTER G WITH STROKE - /xc7/xa6 LATIN CAPITAL LETTER G WITH CARON - /xc7/xa7 LATIN SMALL LETTER G WITH CARON - /xc7/xa8 LATIN CAPITAL LETTER K WITH CARON - /xc7/xa9 LATIN SMALL LETTER K WITH CARON - /xc7/xaa LATIN CAPITAL LETTER O WITH OGONEK - /xc7/xab LATIN SMALL LETTER O WITH OGONEK - /xc7/xac LATIN CAPITAL LETTER O WITH OGONEK AND MACRON - /xc7/xad LATIN SMALL LETTER O WITH OGONEK AND MACRON - /xc7/xae LATIN CAPITAL LETTER EZH WITH CARON - /xc7/xaf LATIN SMALL LETTER EZH WITH CARON - /xc7/xb4 LATIN CAPITAL LETTER G WITH ACUTE - /xc7/xb5 LATIN SMALL LETTER G WITH ACUTE - /xc7/xba LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE - /xc7/xbb LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE - /xc7/xbc LATIN CAPITAL LETTER AE WITH ACUTE - /xc7/xbd LATIN SMALL LETTER AE WITH ACUTE - /xc7/xbe LATIN CAPITAL LETTER O WITH STROKE AND ACUTE - /xc7/xbf LATIN SMALL LETTER O WITH STROKE AND ACUTE - /xc8/x80 LATIN CAPITAL LETTER A WITH DOUBLE GRAVE - /xc8/x81 LATIN SMALL LETTER A WITH DOUBLE GRAVE - /xc8/x82 LATIN CAPITAL LETTER A WITH INVERTED BREVE - /xc8/x83 LATIN SMALL LETTER A WITH INVERTED BREVE - /xc8/x84 LATIN CAPITAL LETTER E WITH DOUBLE GRAVE - /xc8/x85 LATIN SMALL LETTER E WITH DOUBLE GRAVE - /xc8/x86 LATIN CAPITAL LETTER E WITH INVERTED BREVE - /xc8/x87 LATIN SMALL LETTER E WITH INVERTED BREVE - /xc8/x88 LATIN CAPITAL LETTER I WITH DOUBLE GRAVE - /xc8/x89 LATIN SMALL LETTER I WITH DOUBLE GRAVE - /xc8/x8a LATIN CAPITAL LETTER I WITH INVERTED BREVE - /xc8/x8b LATIN SMALL LETTER I WITH INVERTED BREVE - /xc8/x8c LATIN CAPITAL LETTER O WITH DOUBLE GRAVE - /xc8/x8d LATIN SMALL LETTER O WITH DOUBLE GRAVE - /xc8/x8e LATIN CAPITAL LETTER O WITH INVERTED BREVE - /xc8/x8f LATIN SMALL LETTER O WITH INVERTED BREVE - /xc8/x90 LATIN CAPITAL LETTER R WITH DOUBLE GRAVE - /xc8/x91 LATIN SMALL LETTER R WITH DOUBLE GRAVE - /xc8/x92 LATIN CAPITAL LETTER R WITH INVERTED BREVE - /xc8/x93 LATIN SMALL LETTER R WITH INVERTED BREVE - /xc8/x94 LATIN CAPITAL LETTER U WITH DOUBLE GRAVE - /xc8/x95 LATIN SMALL LETTER U WITH DOUBLE GRAVE - /xc8/x96 LATIN CAPITAL LETTER U WITH INVERTED BREVE - /xc8/x97 LATIN SMALL LETTER U WITH INVERTED BREVE - /xca/x92 LATIN SMALL LETTER EZH -<;S> /xca/xbb MODIFIER LETTER TURNED COMMA -<1/>> /xcb/x86 MODIFIER LETTER CIRCUMFLEX ACCENT -<'<> /xcb/x87 CARON (Mandarin Chinese third tone) -<1!> /xcb/x8b MODIFIER LETTER GRAVE ACCENT -<'(> /xcb/x98 BREVE -<'.> /xcb/x99 DOT ABOVE (Mandarin Chinese light tone) -<'0> /xcb/x9a RING ABOVE -<';> /xcb/x9b OGONEK -<1?> /xcb/x9c SMALL TILDE -<'"> /xcb/x9d DOUBLE ACUTE ACCENT -<'G> /xcd/xb4 GREEK NUMERAL SIGN (Dexia keraia) -<,G> /xcd/xb5 GREEK LOWER NUMERAL SIGN (Aristeri keraia) - /xcd/xba GREEK YPOGEGRAMMENI - /xcd/xbe GREEK QUESTION MARK (Erotimatiko) -<'*> /xce/x84 GREEK TONOS -<'%> /xce/x85 GREEK DIALYTIKA TONOS - /xce/x86 GREEK CAPITAL LETTER ALPHA WITH TONOS -<.*> /xce/x87 GREEK ANO TELEIA - /xce/x88 GREEK CAPITAL LETTER EPSILON WITH TONOS - /xce/x89 GREEK CAPITAL LETTER ETA WITH TONOS - /xce/x8a GREEK CAPITAL LETTER IOTA WITH TONOS - /xce/x8c GREEK CAPITAL LETTER OMICRON WITH TONOS - /xce/x8e GREEK CAPITAL LETTER UPSILON WITH TONOS - /xce/x8f GREEK CAPITAL LETTER OMEGA WITH TONOS - /xce/x90 GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - /xce/x91 GREEK CAPITAL LETTER ALPHA - /xce/x92 GREEK CAPITAL LETTER BETA - /xce/x93 GREEK CAPITAL LETTER GAMMA - /xce/x94 GREEK CAPITAL LETTER DELTA - /xce/x95 GREEK CAPITAL LETTER EPSILON - /xce/x96 GREEK CAPITAL LETTER ZETA - /xce/x97 GREEK CAPITAL LETTER ETA - /xce/x98 GREEK CAPITAL LETTER THETA - /xce/x99 GREEK CAPITAL LETTER IOTA - /xce/x9a GREEK CAPITAL LETTER KAPPA - /xce/x9b GREEK CAPITAL LETTER LAMDA - /xce/x9c GREEK CAPITAL LETTER MU - /xce/x9d GREEK CAPITAL LETTER NU - /xce/x9e GREEK CAPITAL LETTER XI - /xce/x9f GREEK CAPITAL LETTER OMICRON - /xce/xa0 GREEK CAPITAL LETTER PI - /xce/xa1 GREEK CAPITAL LETTER RHO - /xce/xa3 GREEK CAPITAL LETTER SIGMA - /xce/xa4 GREEK CAPITAL LETTER TAU - /xce/xa5 GREEK CAPITAL LETTER UPSILON - /xce/xa6 GREEK CAPITAL LETTER PHI - /xce/xa7 GREEK CAPITAL LETTER CHI - /xce/xa8 GREEK CAPITAL LETTER PSI - /xce/xa9 GREEK CAPITAL LETTER OMEGA - /xce/xaa GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - /xce/xab GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - /xce/xac GREEK SMALL LETTER ALPHA WITH TONOS - /xce/xad GREEK SMALL LETTER EPSILON WITH TONOS - /xce/xae GREEK SMALL LETTER ETA WITH TONOS - /xce/xaf GREEK SMALL LETTER IOTA WITH TONOS - /xce/xb0 GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - /xce/xb1 GREEK SMALL LETTER ALPHA - /xce/xb2 GREEK SMALL LETTER BETA - /xce/xb3 GREEK SMALL LETTER GAMMA - /xce/xb4 GREEK SMALL LETTER DELTA - /xce/xb5 GREEK SMALL LETTER EPSILON - /xce/xb6 GREEK SMALL LETTER ZETA - /xce/xb7 GREEK SMALL LETTER ETA - /xce/xb8 GREEK SMALL LETTER THETA - /xce/xb9 GREEK SMALL LETTER IOTA - /xce/xba GREEK SMALL LETTER KAPPA - /xce/xbb GREEK SMALL LETTER LAMDA - /xce/xbc GREEK SMALL LETTER MU - /xce/xbd GREEK SMALL LETTER NU - /xce/xbe GREEK SMALL LETTER XI - /xce/xbf GREEK SMALL LETTER OMICRON - /xcf/x80 GREEK SMALL LETTER PI - /xcf/x81 GREEK SMALL LETTER RHO -<*s> /xcf/x82 GREEK SMALL LETTER FINAL SIGMA - /xcf/x83 GREEK SMALL LETTER SIGMA - /xcf/x84 GREEK SMALL LETTER TAU - /xcf/x85 GREEK SMALL LETTER UPSILON - /xcf/x86 GREEK SMALL LETTER PHI - /xcf/x87 GREEK SMALL LETTER CHI - /xcf/x88 GREEK SMALL LETTER PSI - /xcf/x89 GREEK SMALL LETTER OMEGA - /xcf/x8a GREEK SMALL LETTER IOTA WITH DIALYTIKA - /xcf/x8b GREEK SMALL LETTER UPSILON WITH DIALYTIKA - /xcf/x8c GREEK SMALL LETTER OMICRON WITH TONOS - /xcf/x8d GREEK SMALL LETTER UPSILON WITH TONOS - /xcf/x8e GREEK SMALL LETTER OMEGA WITH TONOS - /xcf/x90 GREEK BETA SYMBOL - /xd0/x81 CYRILLIC CAPITAL LETTER IO - /xd0/x82 CYRILLIC CAPITAL LETTER DJE (Serbocroatian) - /xd0/x83 CYRILLIC CAPITAL LETTER GJE - /xd0/x84 CYRILLIC CAPITAL LETTER UKRAINIAN IE - /xd0/x85 CYRILLIC CAPITAL LETTER DZE - /xd0/x86 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - /xd0/x87 CYRILLIC CAPITAL LETTER YI (Ukrainian) - /xd0/x88 CYRILLIC CAPITAL LETTER JE - /xd0/x89 CYRILLIC CAPITAL LETTER LJE - /xd0/x8a CYRILLIC CAPITAL LETTER NJE - /xd0/x8b CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) - /xd0/x8c CYRILLIC CAPITAL LETTER KJE - /xd0/x8e CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) - /xd0/x8f CYRILLIC CAPITAL LETTER DZHE - /xd0/x90 CYRILLIC CAPITAL LETTER A - /xd0/x91 CYRILLIC CAPITAL LETTER BE - /xd0/x92 CYRILLIC CAPITAL LETTER VE - /xd0/x93 CYRILLIC CAPITAL LETTER GHE - /xd0/x94 CYRILLIC CAPITAL LETTER DE - /xd0/x95 CYRILLIC CAPITAL LETTER IE - /xd0/x96 CYRILLIC CAPITAL LETTER ZHE - /xd0/x97 CYRILLIC CAPITAL LETTER ZE - /xd0/x98 CYRILLIC CAPITAL LETTER I - /xd0/x99 CYRILLIC CAPITAL LETTER SHORT I - /xd0/x9a CYRILLIC CAPITAL LETTER KA - /xd0/x9b CYRILLIC CAPITAL LETTER EL - /xd0/x9c CYRILLIC CAPITAL LETTER EM - /xd0/x9d CYRILLIC CAPITAL LETTER EN - /xd0/x9e CYRILLIC CAPITAL LETTER O - /xd0/x9f CYRILLIC CAPITAL LETTER PE - /xd0/xa0 CYRILLIC CAPITAL LETTER ER - /xd0/xa1 CYRILLIC CAPITAL LETTER ES - /xd0/xa2 CYRILLIC CAPITAL LETTER TE - /xd0/xa3 CYRILLIC CAPITAL LETTER U - /xd0/xa4 CYRILLIC CAPITAL LETTER EF - /xd0/xa5 CYRILLIC CAPITAL LETTER HA - /xd0/xa6 CYRILLIC CAPITAL LETTER TSE - /xd0/xa7 CYRILLIC CAPITAL LETTER CHE - /xd0/xa8 CYRILLIC CAPITAL LETTER SHA - /xd0/xa9 CYRILLIC CAPITAL LETTER SHCHA -<="> /xd0/xaa CYRILLIC CAPITAL LETTER HARD SIGN - /xd0/xab CYRILLIC CAPITAL LETTER YERU -<%"> /xd0/xac CYRILLIC CAPITAL LETTER SOFT SIGN - /xd0/xad CYRILLIC CAPITAL LETTER E - /xd0/xae CYRILLIC CAPITAL LETTER YU - /xd0/xaf CYRILLIC CAPITAL LETTER YA - /xd0/xb0 CYRILLIC SMALL LETTER A - /xd0/xb1 CYRILLIC SMALL LETTER BE - /xd0/xb2 CYRILLIC SMALL LETTER VE - /xd0/xb3 CYRILLIC SMALL LETTER GHE - /xd0/xb4 CYRILLIC SMALL LETTER DE - /xd0/xb5 CYRILLIC SMALL LETTER IE - /xd0/xb6 CYRILLIC SMALL LETTER ZHE - /xd0/xb7 CYRILLIC SMALL LETTER ZE - /xd0/xb8 CYRILLIC SMALL LETTER I - /xd0/xb9 CYRILLIC SMALL LETTER SHORT I - /xd0/xba CYRILLIC SMALL LETTER KA - /xd0/xbb CYRILLIC SMALL LETTER EL - /xd0/xbc CYRILLIC SMALL LETTER EM - /xd0/xbd CYRILLIC SMALL LETTER EN - /xd0/xbe CYRILLIC SMALL LETTER O - /xd0/xbf CYRILLIC SMALL LETTER PE - /xd1/x80 CYRILLIC SMALL LETTER ER - /xd1/x81 CYRILLIC SMALL LETTER ES - /xd1/x82 CYRILLIC SMALL LETTER TE - /xd1/x83 CYRILLIC SMALL LETTER U - /xd1/x84 CYRILLIC SMALL LETTER EF - /xd1/x85 CYRILLIC SMALL LETTER HA - /xd1/x86 CYRILLIC SMALL LETTER TSE - /xd1/x87 CYRILLIC SMALL LETTER CHE - /xd1/x88 CYRILLIC SMALL LETTER SHA - /xd1/x89 CYRILLIC SMALL LETTER SHCHA -<='> /xd1/x8a CYRILLIC SMALL LETTER HARD SIGN - /xd1/x8b CYRILLIC SMALL LETTER YERU -<%'> /xd1/x8c CYRILLIC SMALL LETTER SOFT SIGN - /xd1/x8d CYRILLIC SMALL LETTER E - /xd1/x8e CYRILLIC SMALL LETTER YU - /xd1/x8f CYRILLIC SMALL LETTER YA - /xd1/x91 CYRILLIC SMALL LETTER IO - /xd1/x92 CYRILLIC SMALL LETTER DJE (Serbocroatian) - /xd1/x93 CYRILLIC SMALL LETTER GJE - /xd1/x94 CYRILLIC SMALL LETTER UKRAINIAN IE - /xd1/x95 CYRILLIC SMALL LETTER DZE - /xd1/x96 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - /xd1/x97 CYRILLIC SMALL LETTER YI (Ukrainian) - /xd1/x98 CYRILLIC SMALL LETTER JE - /xd1/x99 CYRILLIC SMALL LETTER LJE - /xd1/x9a CYRILLIC SMALL LETTER NJE - /xd1/x9b CYRILLIC SMALL LETTER TSHE (Serbocroatian) - /xd1/x9c CYRILLIC SMALL LETTER KJE - /xd1/x9e CYRILLIC SMALL LETTER SHORT U (Byelorussian) - /xd1/x9f CYRILLIC SMALL LETTER DZHE - /xd1/xa2 CYRILLIC CAPITAL LETTER YAT - /xd1/xa3 CYRILLIC SMALL LETTER YAT - /xd1/xaa CYRILLIC CAPITAL LETTER BIG YUS - /xd1/xab CYRILLIC SMALL LETTER BIG YUS - /xd1/xb2 CYRILLIC CAPITAL LETTER FITA - /xd1/xb3 CYRILLIC SMALL LETTER FITA - /xd1/xb4 CYRILLIC CAPITAL LETTER IZHITSA - /xd1/xb5 CYRILLIC SMALL LETTER IZHITSA - /xd2/x80 CYRILLIC CAPITAL LETTER KOPPA - /xd2/x81 CYRILLIC SMALL LETTER KOPPA - /xd2/x90 CYRILLIC CAPITAL LETTER GHE WITH UPTURN - /xd2/x91 CYRILLIC SMALL LETTER GHE WITH UPTURN - /xd7/x90 HEBREW LETTER ALEF - /xd7/x91 HEBREW LETTER BET - /xd7/x92 HEBREW LETTER GIMEL - /xd7/x93 HEBREW LETTER DALET - /xd7/x94 HEBREW LETTER HE - /xd7/x95 HEBREW LETTER VAV - /xd7/x96 HEBREW LETTER ZAYIN - /xd7/x97 HEBREW LETTER HET - /xd7/x98 HEBREW LETTER TET - /xd7/x99 HEBREW LETTER YOD - /xd7/x9a HEBREW LETTER FINAL KAF - /xd7/x9b HEBREW LETTER KAF - /xd7/x9c HEBREW LETTER LAMED - /xd7/x9d HEBREW LETTER FINAL MEM - /xd7/x9e HEBREW LETTER MEM - /xd7/x9f HEBREW LETTER FINAL NUN - /xd7/xa0 HEBREW LETTER NUN - /xd7/xa1 HEBREW LETTER SAMEKH - /xd7/xa2 HEBREW LETTER AYIN - /xd7/xa3 HEBREW LETTER FINAL PE - /xd7/xa4 HEBREW LETTER PE - /xd7/xa5 HEBREW LETTER FINAL TSADI - /xd7/xa6 HEBREW LETTER TSADI - /xd7/xa7 HEBREW LETTER QOF - /xd7/xa8 HEBREW LETTER RESH - /xd7/xa9 HEBREW LETTER SHIN - /xd7/xaa HEBREW LETTER TAV -<,+> /xd8/x8c ARABIC COMMA -<;+> /xd8/x9b ARABIC SEMICOLON - /xd8/x9f ARABIC QUESTION MARK - /xd8/xa1 ARABIC LETTER HAMZA - /xd8/xa2 ARABIC LETTER ALEF WITH MADDA ABOVE - /xd8/xa3 ARABIC LETTER ALEF WITH HAMZA ABOVE - /xd8/xa4 ARABIC LETTER WAW WITH HAMZA ABOVE - /xd8/xa5 ARABIC LETTER ALEF WITH HAMZA BELOW - /xd8/xa6 ARABIC LETTER YEH WITH HAMZA ABOVE - /xd8/xa7 ARABIC LETTER ALEF - /xd8/xa8 ARABIC LETTER BEH - /xd8/xa9 ARABIC LETTER TEH MARBUTA - /xd8/xaa ARABIC LETTER TEH - /xd8/xab ARABIC LETTER THEH - /xd8/xac ARABIC LETTER JEEM - /xd8/xad ARABIC LETTER HAH - /xd8/xae ARABIC LETTER KHAH - /xd8/xaf ARABIC LETTER DAL - /xd8/xb0 ARABIC LETTER THAL - /xd8/xb1 ARABIC LETTER REH - /xd8/xb2 ARABIC LETTER ZAIN - /xd8/xb3 ARABIC LETTER SEEN - /xd8/xb4 ARABIC LETTER SHEEN - /xd8/xb5 ARABIC LETTER SAD -

/xd8/xb6 ARABIC LETTER DAD - /xd8/xb7 ARABIC LETTER TAH - /xd8/xb8 ARABIC LETTER ZAH - /xd8/xb9 ARABIC LETTER AIN - /xd8/xba ARABIC LETTER GHAIN -<++> /xd9/x80 ARABIC TATWEEL - /xd9/x81 ARABIC LETTER FEH - /xd9/x82 ARABIC LETTER QAF - /xd9/x83 ARABIC LETTER KAF - /xd9/x84 ARABIC LETTER LAM - /xd9/x85 ARABIC LETTER MEEM - /xd9/x86 ARABIC LETTER NOON - /xd9/x87 ARABIC LETTER HEH - /xd9/x88 ARABIC LETTER WAW - /xd9/x89 ARABIC LETTER ALEF MAKSURA - /xd9/x8a ARABIC LETTER YEH -<:+> /xd9/x8b ARABIC FATHATAN -<"+> /xd9/x8c ARABIC DAMMATAN -<=+> /xd9/x8d ARABIC KASRATAN - /xd9/x8e ARABIC FATHA -<'+> /xd9/x8f ARABIC DAMMA -<1+> /xd9/x90 ARABIC KASRA -<3+> /xd9/x91 ARABIC SHADDA -<0+> /xd9/x92 ARABIC SUKUN -<0a> /xd9/xa0 ARABIC-INDIC DIGIT ZERO -<1a> /xd9/xa1 ARABIC-INDIC DIGIT ONE -<2a> /xd9/xa2 ARABIC-INDIC DIGIT TWO -<3a> /xd9/xa3 ARABIC-INDIC DIGIT THREE -<4a> /xd9/xa4 ARABIC-INDIC DIGIT FOUR -<5a> /xd9/xa5 ARABIC-INDIC DIGIT FIVE -<6a> /xd9/xa6 ARABIC-INDIC DIGIT SIX -<7a> /xd9/xa7 ARABIC-INDIC DIGIT SEVEN -<8a> /xd9/xa8 ARABIC-INDIC DIGIT EIGHT -<9a> /xd9/xa9 ARABIC-INDIC DIGIT NINE - /xd9/xb0 ARABIC LETTER SUPERSCRIPT ALEF - /xd9/xbe ARABIC LETTER PEH - /xda/x81 ARABIC LETTER HAH WITH HAMZA ABOVE - /xda/x86 ARABIC LETTER TCHEH - /xda/x98 ARABIC LETTER JEH - /xda/xa4 ARABIC LETTER VEH - /xda/xaf ARABIC LETTER GAF - /xe1/xb8/x80 LATIN CAPITAL LETTER A WITH RING BELOW - /xe1/xb8/x81 LATIN SMALL LETTER A WITH RING BELOW - /xe1/xb8/x82 LATIN CAPITAL LETTER B WITH DOT ABOVE - /xe1/xb8/x83 LATIN SMALL LETTER B WITH DOT ABOVE - /xe1/xb8/x84 LATIN CAPITAL LETTER B WITH DOT BELOW - /xe1/xb8/x85 LATIN SMALL LETTER B WITH DOT BELOW - /xe1/xb8/x86 LATIN CAPITAL LETTER B WITH LINE BELOW - /xe1/xb8/x87 LATIN SMALL LETTER B WITH LINE BELOW - /xe1/xb8/x88 LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE - /xe1/xb8/x89 LATIN SMALL LETTER C WITH CEDILLA AND ACUTE - /xe1/xb8/x8a LATIN CAPITAL LETTER D WITH DOT ABOVE - /xe1/xb8/x8b LATIN SMALL LETTER D WITH DOT ABOVE - /xe1/xb8/x8c LATIN CAPITAL LETTER D WITH DOT BELOW - /xe1/xb8/x8d LATIN SMALL LETTER D WITH DOT BELOW - /xe1/xb8/x8e LATIN CAPITAL LETTER D WITH LINE BELOW - /xe1/xb8/x8f LATIN SMALL LETTER D WITH LINE BELOW - /xe1/xb8/x90 LATIN CAPITAL LETTER D WITH CEDILLA - /xe1/xb8/x91 LATIN SMALL LETTER D WITH CEDILLA -> /xe1/xb8/x92 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW -> /xe1/xb8/x93 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW - /xe1/xb8/x94 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE - /xe1/xb8/x95 LATIN SMALL LETTER E WITH MACRON AND GRAVE - /xe1/xb8/x96 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE - /xe1/xb8/x97 LATIN SMALL LETTER E WITH MACRON AND ACUTE -> /xe1/xb8/x98 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW -> /xe1/xb8/x99 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW - /xe1/xb8/x9a LATIN CAPITAL LETTER E WITH TILDE BELOW - /xe1/xb8/x9b LATIN SMALL LETTER E WITH TILDE BELOW - /xe1/xb8/x9c LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE - /xe1/xb8/x9d LATIN SMALL LETTER E WITH CEDILLA AND BREVE - /xe1/xb8/x9e LATIN CAPITAL LETTER F WITH DOT ABOVE - /xe1/xb8/x9f LATIN SMALL LETTER F WITH DOT ABOVE - /xe1/xb8/xa0 LATIN CAPITAL LETTER G WITH MACRON - /xe1/xb8/xa1 LATIN SMALL LETTER G WITH MACRON - /xe1/xb8/xa2 LATIN CAPITAL LETTER H WITH DOT ABOVE - /xe1/xb8/xa3 LATIN SMALL LETTER H WITH DOT ABOVE - /xe1/xb8/xa4 LATIN CAPITAL LETTER H WITH DOT BELOW - /xe1/xb8/xa5 LATIN SMALL LETTER H WITH DOT BELOW - /xe1/xb8/xa6 LATIN CAPITAL LETTER H WITH DIAERESIS - /xe1/xb8/xa7 LATIN SMALL LETTER H WITH DIAERESIS - /xe1/xb8/xa8 LATIN CAPITAL LETTER H WITH CEDILLA - /xe1/xb8/xa9 LATIN SMALL LETTER H WITH CEDILLA - /xe1/xb8/xaa LATIN CAPITAL LETTER H WITH BREVE BELOW - /xe1/xb8/xab LATIN SMALL LETTER H WITH BREVE BELOW - /xe1/xb8/xac LATIN CAPITAL LETTER I WITH TILDE BELOW - /xe1/xb8/xad LATIN SMALL LETTER I WITH TILDE BELOW - /xe1/xb8/xae LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE - /xe1/xb8/xaf LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE - /xe1/xb8/xb0 LATIN CAPITAL LETTER K WITH ACUTE - /xe1/xb8/xb1 LATIN SMALL LETTER K WITH ACUTE - /xe1/xb8/xb2 LATIN CAPITAL LETTER K WITH DOT BELOW - /xe1/xb8/xb3 LATIN SMALL LETTER K WITH DOT BELOW - /xe1/xb8/xb4 LATIN CAPITAL LETTER K WITH LINE BELOW - /xe1/xb8/xb5 LATIN SMALL LETTER K WITH LINE BELOW - /xe1/xb8/xb6 LATIN CAPITAL LETTER L WITH DOT BELOW - /xe1/xb8/xb7 LATIN SMALL LETTER L WITH DOT BELOW - /xe1/xb8/xb8 LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON - /xe1/xb8/xb9 LATIN SMALL LETTER L WITH DOT BELOW AND MACRON - /xe1/xb8/xba LATIN CAPITAL LETTER L WITH LINE BELOW - /xe1/xb8/xbb LATIN SMALL LETTER L WITH LINE BELOW -> /xe1/xb8/xbc LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW -> /xe1/xb8/xbd LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW - /xe1/xb8/xbe LATIN CAPITAL LETTER M WITH ACUTE - /xe1/xb8/xbf LATIN SMALL LETTER M WITH ACUTE - /xe1/xb9/x80 LATIN CAPITAL LETTER M WITH DOT ABOVE - /xe1/xb9/x81 LATIN SMALL LETTER M WITH DOT ABOVE - /xe1/xb9/x82 LATIN CAPITAL LETTER M WITH DOT BELOW - /xe1/xb9/x83 LATIN SMALL LETTER M WITH DOT BELOW - /xe1/xb9/x84 LATIN CAPITAL LETTER N WITH DOT ABOVE - /xe1/xb9/x85 LATIN SMALL LETTER N WITH DOT ABOVE - /xe1/xb9/x86 LATIN CAPITAL LETTER N WITH DOT BELOW - /xe1/xb9/x87 LATIN SMALL LETTER N WITH DOT BELOW - /xe1/xb9/x88 LATIN CAPITAL LETTER N WITH LINE BELOW - /xe1/xb9/x89 LATIN SMALL LETTER N WITH LINE BELOW -> /xe1/xb9/x8a LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW -> /xe1/xb9/x8b LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW - /xe1/xb9/x8c LATIN CAPITAL LETTER O WITH TILDE AND ACUTE - /xe1/xb9/x8d LATIN SMALL LETTER O WITH TILDE AND ACUTE - /xe1/xb9/x8e LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS - /xe1/xb9/x8f LATIN SMALL LETTER O WITH TILDE AND DIAERESIS - /xe1/xb9/x90 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE - /xe1/xb9/x91 LATIN SMALL LETTER O WITH MACRON AND GRAVE - /xe1/xb9/x92 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE - /xe1/xb9/x93 LATIN SMALL LETTER O WITH MACRON AND ACUTE - /xe1/xb9/x94 LATIN CAPITAL LETTER P WITH ACUTE - /xe1/xb9/x95 LATIN SMALL LETTER P WITH ACUTE - /xe1/xb9/x96 LATIN CAPITAL LETTER P WITH DOT ABOVE - /xe1/xb9/x97 LATIN SMALL LETTER P WITH DOT ABOVE - /xe1/xb9/x98 LATIN CAPITAL LETTER R WITH DOT ABOVE - /xe1/xb9/x99 LATIN SMALL LETTER R WITH DOT ABOVE - /xe1/xb9/x9a LATIN CAPITAL LETTER R WITH DOT BELOW - /xe1/xb9/x9b LATIN SMALL LETTER R WITH DOT BELOW - /xe1/xb9/x9c LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON - /xe1/xb9/x9d LATIN SMALL LETTER R WITH DOT BELOW AND MACRON - /xe1/xb9/x9e LATIN CAPITAL LETTER R WITH LINE BELOW - /xe1/xb9/x9f LATIN SMALL LETTER R WITH LINE BELOW - /xe1/xb9/xa0 LATIN CAPITAL LETTER S WITH DOT ABOVE - /xe1/xb9/xa1 LATIN SMALL LETTER S WITH DOT ABOVE - /xe1/xb9/xa2 LATIN CAPITAL LETTER S WITH DOT BELOW - /xe1/xb9/xa3 LATIN SMALL LETTER S WITH DOT BELOW - /xe1/xb9/xa4 LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE - /xe1/xb9/xa5 LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE - /xe1/xb9/xa6 LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE - /xe1/xb9/xa7 LATIN SMALL LETTER S WITH CARON AND DOT ABOVE - /xe1/xb9/xa8 LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE - /xe1/xb9/xa9 LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE - /xe1/xb9/xaa LATIN CAPITAL LETTER T WITH DOT ABOVE - /xe1/xb9/xab LATIN SMALL LETTER T WITH DOT ABOVE - /xe1/xb9/xac LATIN CAPITAL LETTER T WITH DOT BELOW - /xe1/xb9/xad LATIN SMALL LETTER T WITH DOT BELOW - /xe1/xb9/xae LATIN CAPITAL LETTER T WITH LINE BELOW - /xe1/xb9/xaf LATIN SMALL LETTER T WITH LINE BELOW -> /xe1/xb9/xb0 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW -> /xe1/xb9/xb1 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW - /xe1/xb9/xb2 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW - /xe1/xb9/xb3 LATIN SMALL LETTER U WITH DIAERESIS BELOW - /xe1/xb9/xb4 LATIN CAPITAL LETTER U WITH TILDE BELOW - /xe1/xb9/xb5 LATIN SMALL LETTER U WITH TILDE BELOW -> /xe1/xb9/xb6 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW -> /xe1/xb9/xb7 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW - /xe1/xb9/xb8 LATIN CAPITAL LETTER U WITH TILDE AND ACUTE - /xe1/xb9/xb9 LATIN SMALL LETTER U WITH TILDE AND ACUTE - /xe1/xb9/xba LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS - /xe1/xb9/xbb LATIN SMALL LETTER U WITH MACRON AND DIAERESIS - /xe1/xb9/xbc LATIN CAPITAL LETTER V WITH TILDE - /xe1/xb9/xbd LATIN SMALL LETTER V WITH TILDE - /xe1/xb9/xbe LATIN CAPITAL LETTER V WITH DOT BELOW - /xe1/xb9/xbf LATIN SMALL LETTER V WITH DOT BELOW - /xe1/xba/x80 LATIN CAPITAL LETTER W WITH GRAVE - /xe1/xba/x81 LATIN SMALL LETTER W WITH GRAVE - /xe1/xba/x82 LATIN CAPITAL LETTER W WITH ACUTE - /xe1/xba/x83 LATIN SMALL LETTER W WITH ACUTE - /xe1/xba/x84 LATIN CAPITAL LETTER W WITH DIAERESIS - /xe1/xba/x85 LATIN SMALL LETTER W WITH DIAERESIS - /xe1/xba/x86 LATIN CAPITAL LETTER W WITH DOT ABOVE - /xe1/xba/x87 LATIN SMALL LETTER W WITH DOT ABOVE - /xe1/xba/x88 LATIN CAPITAL LETTER W WITH DOT BELOW - /xe1/xba/x89 LATIN SMALL LETTER W WITH DOT BELOW - /xe1/xba/x8a LATIN CAPITAL LETTER X WITH DOT ABOVE - /xe1/xba/x8b LATIN SMALL LETTER X WITH DOT ABOVE - /xe1/xba/x8c LATIN CAPITAL LETTER X WITH DIAERESIS - /xe1/xba/x8d LATIN SMALL LETTER X WITH DIAERESIS - /xe1/xba/x8e LATIN CAPITAL LETTER Y WITH DOT ABOVE - /xe1/xba/x8f LATIN SMALL LETTER Y WITH DOT ABOVE -> /xe1/xba/x90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX -> /xe1/xba/x91 LATIN SMALL LETTER Z WITH CIRCUMFLEX - /xe1/xba/x92 LATIN CAPITAL LETTER Z WITH DOT BELOW - /xe1/xba/x93 LATIN SMALL LETTER Z WITH DOT BELOW - /xe1/xba/x94 LATIN CAPITAL LETTER Z WITH LINE BELOW - /xe1/xba/x95 LATIN SMALL LETTER Z WITH LINE BELOW - /xe1/xba/xa0 LATIN CAPITAL LETTER A WITH DOT BELOW - /xe1/xba/xa1 LATIN SMALL LETTER A WITH DOT BELOW - /xe1/xba/xa2 LATIN CAPITAL LETTER A WITH HOOK ABOVE - /xe1/xba/xa3 LATIN SMALL LETTER A WITH HOOK ABOVE -'> /xe1/xba/xa4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -'> /xe1/xba/xa5 LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -!> /xe1/xba/xa6 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -!> /xe1/xba/xa7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -2> /xe1/xba/xa8 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -2> /xe1/xba/xa9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -?> /xe1/xba/xaa LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -?> /xe1/xba/xab LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE --.> /xe1/xba/xac LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW --.> /xe1/xba/xad LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW - /xe1/xba/xae LATIN CAPITAL LETTER A WITH BREVE AND ACUTE - /xe1/xba/xaf LATIN SMALL LETTER A WITH BREVE AND ACUTE - /xe1/xba/xb0 LATIN CAPITAL LETTER A WITH BREVE AND GRAVE - /xe1/xba/xb1 LATIN SMALL LETTER A WITH BREVE AND GRAVE - /xe1/xba/xb2 LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE - /xe1/xba/xb3 LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE - /xe1/xba/xb4 LATIN CAPITAL LETTER A WITH BREVE AND TILDE - /xe1/xba/xb5 LATIN SMALL LETTER A WITH BREVE AND TILDE - /xe1/xba/xb6 LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW - /xe1/xba/xb7 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW - /xe1/xba/xb8 LATIN CAPITAL LETTER E WITH DOT BELOW - /xe1/xba/xb9 LATIN SMALL LETTER E WITH DOT BELOW - /xe1/xba/xba LATIN CAPITAL LETTER E WITH HOOK ABOVE - /xe1/xba/xbb LATIN SMALL LETTER E WITH HOOK ABOVE - /xe1/xba/xbc LATIN CAPITAL LETTER E WITH TILDE - /xe1/xba/xbd LATIN SMALL LETTER E WITH TILDE -'> /xe1/xba/xbe LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -'> /xe1/xba/xbf LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -!> /xe1/xbb/x80 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -!> /xe1/xbb/x81 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -2> /xe1/xbb/x82 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -2> /xe1/xbb/x83 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -?> /xe1/xbb/x84 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -?> /xe1/xbb/x85 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE --.> /xe1/xbb/x86 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW --.> /xe1/xbb/x87 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW - /xe1/xbb/x88 LATIN CAPITAL LETTER I WITH HOOK ABOVE - /xe1/xbb/x89 LATIN SMALL LETTER I WITH HOOK ABOVE - /xe1/xbb/x8a LATIN CAPITAL LETTER I WITH DOT BELOW - /xe1/xbb/x8b LATIN SMALL LETTER I WITH DOT BELOW - /xe1/xbb/x8c LATIN CAPITAL LETTER O WITH DOT BELOW - /xe1/xbb/x8d LATIN SMALL LETTER O WITH DOT BELOW - /xe1/xbb/x8e LATIN CAPITAL LETTER O WITH HOOK ABOVE - /xe1/xbb/x8f LATIN SMALL LETTER O WITH HOOK ABOVE -'> /xe1/xbb/x90 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -'> /xe1/xbb/x91 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -!> /xe1/xbb/x92 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -!> /xe1/xbb/x93 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -2> /xe1/xbb/x94 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -2> /xe1/xbb/x95 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -?> /xe1/xbb/x96 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -?> /xe1/xbb/x97 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE --.> /xe1/xbb/x98 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW --.> /xe1/xbb/x99 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW - /xe1/xbb/x9a LATIN CAPITAL LETTER O WITH HORN AND ACUTE - /xe1/xbb/x9b LATIN SMALL LETTER O WITH HORN AND ACUTE - /xe1/xbb/x9c LATIN CAPITAL LETTER O WITH HORN AND GRAVE - /xe1/xbb/x9d LATIN SMALL LETTER O WITH HORN AND GRAVE - /xe1/xbb/x9e LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE - /xe1/xbb/x9f LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE - /xe1/xbb/xa0 LATIN CAPITAL LETTER O WITH HORN AND TILDE - /xe1/xbb/xa1 LATIN SMALL LETTER O WITH HORN AND TILDE - /xe1/xbb/xa2 LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW - /xe1/xbb/xa3 LATIN SMALL LETTER O WITH HORN AND DOT BELOW - /xe1/xbb/xa4 LATIN CAPITAL LETTER U WITH DOT BELOW - /xe1/xbb/xa5 LATIN SMALL LETTER U WITH DOT BELOW - /xe1/xbb/xa6 LATIN CAPITAL LETTER U WITH HOOK ABOVE - /xe1/xbb/xa7 LATIN SMALL LETTER U WITH HOOK ABOVE - /xe1/xbb/xa8 LATIN CAPITAL LETTER U WITH HORN AND ACUTE - /xe1/xbb/xa9 LATIN SMALL LETTER U WITH HORN AND ACUTE - /xe1/xbb/xaa LATIN CAPITAL LETTER U WITH HORN AND GRAVE - /xe1/xbb/xab LATIN SMALL LETTER U WITH HORN AND GRAVE - /xe1/xbb/xac LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE - /xe1/xbb/xad LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE - /xe1/xbb/xae LATIN CAPITAL LETTER U WITH HORN AND TILDE - /xe1/xbb/xaf LATIN SMALL LETTER U WITH HORN AND TILDE - /xe1/xbb/xb0 LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW - /xe1/xbb/xb1 LATIN SMALL LETTER U WITH HORN AND DOT BELOW - /xe1/xbb/xb2 LATIN CAPITAL LETTER Y WITH GRAVE - /xe1/xbb/xb3 LATIN SMALL LETTER Y WITH GRAVE - /xe1/xbb/xb4 LATIN CAPITAL LETTER Y WITH DOT BELOW - /xe1/xbb/xb5 LATIN SMALL LETTER Y WITH DOT BELOW - /xe1/xbb/xb6 LATIN CAPITAL LETTER Y WITH HOOK ABOVE - /xe1/xbb/xb7 LATIN SMALL LETTER Y WITH HOOK ABOVE - /xe1/xbb/xb8 LATIN CAPITAL LETTER Y WITH TILDE - /xe1/xbb/xb9 LATIN SMALL LETTER Y WITH TILDE -<,,> /xe1/xbe/xbf GREEK PSILI - /xe1/xbf/x80 GREEK PERISPOMENI - /xe1/xbf/x81 GREEK DIALYTIKA AND PERISPOMENI -<,!> /xe1/xbf/x8d GREEK PSILI AND VARIA -<,'> /xe1/xbf/x8e GREEK PSILI AND OXIA - /xe1/xbf/x8f GREEK PSILI AND PERISPOMENI -<;!> /xe1/xbf/x9d GREEK DASIA AND VARIA -<;'> /xe1/xbf/x9e GREEK DASIA AND OXIA - /xe1/xbf/x9f GREEK DASIA AND PERISPOMENI - /xe1/xbf/xad GREEK DIALYTIKA AND VARIA - /xe1/xbf/xaf GREEK VARIA -<;;> /xe1/xbf/xbe GREEK DASIA -<1N> /xe2/x80/x82 EN SPACE -<1M> /xe2/x80/x83 EM SPACE -<3M> /xe2/x80/x84 THREE-PER-EM SPACE -<4M> /xe2/x80/x85 FOUR-PER-EM SPACE -<6M> /xe2/x80/x86 SIX-PER-EM SPACE - /xe2/x80/x8e LEFT-TO-RIGHT MARK - /xe2/x80/x8f RIGHT-TO-LEFT MARK -<1T> /xe2/x80/x89 THIN SPACE -<1H> /xe2/x80/x8a HAIR SPACE -<-1> /xe2/x80/x90 HYPHEN -<-N> /xe2/x80/x93 EN DASH -<-M> /xe2/x80/x94 EM DASH -<-3> /xe2/x80/x95 HORIZONTAL BAR - /xe2/x80/x96 DOUBLE VERTICAL LINE -<=2> /xe2/x80/x97 DOUBLE LOW LINE -<'6> /xe2/x80/x98 LEFT SINGLE QUOTATION MARK -<'9> /xe2/x80/x99 RIGHT SINGLE QUOTATION MARK -<.9> /xe2/x80/x9a SINGLE LOW-9 QUOTATION MARK -<9'> /xe2/x80/x9b SINGLE HIGH-REVERSED-9 QUOTATION MARK -<"6> /xe2/x80/x9c LEFT DOUBLE QUOTATION MARK -<"9> /xe2/x80/x9d RIGHT DOUBLE QUOTATION MARK -<:9> /xe2/x80/x9e DOUBLE LOW-9 QUOTATION MARK -<9"> /xe2/x80/x9f DOUBLE HIGH-REVERSED-9 QUOTATION MARK - /xe2/x80/xa0 DAGGER - /xe2/x80/xa1 DOUBLE DAGGER - /xe2/x80/xa2 BULLET -<..> /xe2/x80/xa5 TWO DOT LEADER -<.3> /xe2/x80/xa6 HORIZONTAL ELLIPSIS -<%0> /xe2/x80/xb0 PER MILLE SIGN -<1'> /xe2/x80/xb2 PRIME -<2'> /xe2/x80/xb3 DOUBLE PRIME -<3'> /xe2/x80/xb4 TRIPLE PRIME -<1"> /xe2/x80/xb5 REVERSED PRIME -<2"> /xe2/x80/xb6 REVERSED DOUBLE PRIME -<3"> /xe2/x80/xb7 REVERSED TRIPLE PRIME - /xe2/x80/xb8 CARET -<<1> /xe2/x80/xb9 SINGLE LEFT-POINTING ANGLE QUOTATION MARK -1> /xe2/x80/xba SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -<:X> /xe2/x80/xbb REFERENCE MARK - /xe2/x80/xbc DOUBLE EXCLAMATION MARK -<'-> /xe2/x80/xbe OVERLINE -<0S> /xe2/x81/xb0 SUPERSCRIPT ZERO -<4S> /xe2/x81/xb4 SUPERSCRIPT FOUR -<5S> /xe2/x81/xb5 SUPERSCRIPT FIVE -<6S> /xe2/x81/xb6 SUPERSCRIPT SIX -<7S> /xe2/x81/xb7 SUPERSCRIPT SEVEN -<8S> /xe2/x81/xb8 SUPERSCRIPT EIGHT -<9S> /xe2/x81/xb9 SUPERSCRIPT NINE -<+S> /xe2/x81/xba SUPERSCRIPT PLUS SIGN -<-S> /xe2/x81/xbb SUPERSCRIPT MINUS -<=S> /xe2/x81/xbc SUPERSCRIPT EQUALS SIGN -<(S> /xe2/x81/xbd SUPERSCRIPT LEFT PARENTHESIS -<)S> /xe2/x81/xbe SUPERSCRIPT RIGHT PARENTHESIS - /xe2/x81/xbf SUPERSCRIPT LATIN SMALL LETTER N -<0s> /xe2/x82/x80 SUBSCRIPT ZERO -<1s> /xe2/x82/x81 SUBSCRIPT ONE -<2s> /xe2/x82/x82 SUBSCRIPT TWO -<3s> /xe2/x82/x83 SUBSCRIPT THREE -<4s> /xe2/x82/x84 SUBSCRIPT FOUR -<5s> /xe2/x82/x85 SUBSCRIPT FIVE -<6s> /xe2/x82/x86 SUBSCRIPT SIX -<7s> /xe2/x82/x87 SUBSCRIPT SEVEN -<8s> /xe2/x82/x88 SUBSCRIPT EIGHT -<9s> /xe2/x82/x89 SUBSCRIPT NINE -<+s> /xe2/x82/x8a SUBSCRIPT PLUS SIGN -<-s> /xe2/x82/x8b SUBSCRIPT MINUS -<=s> /xe2/x82/x8c SUBSCRIPT EQUALS SIGN -<(s> /xe2/x82/x8d SUBSCRIPT LEFT PARENTHESIS -<)s> /xe2/x82/x8e SUBSCRIPT RIGHT PARENTHESIS - /xe2/x82/xa3 FRENCH FRANC SIGN -
  • /xe2/x82/xa4 LIRA SIGN - /xe2/x82/xa7 PESETA SIGN - /xe2/x82/xa9 WON SIGN - /xe2/x84/x83 DEGREE CELSIUS - /xe2/x84/x85 CARE OF - /xe2/x84/x89 DEGREE FAHRENHEIT - /xe2/x84/x96 NUMERO SIGN - /xe2/x84/x97 SOUND RECORDING COPYRIGHT - /xe2/x84/x9e PRESCRIPTION TAKE - /xe2/x84/xa0 SERVICE MARK - /xe2/x84/xa2 TRADE MARK SIGN - /xe2/x84/xa6 OHM SIGN - /xe2/x84/xab ANGSTROM SIGN -<13> /xe2/x85/x93 VULGAR FRACTION ONE THIRD -<23> /xe2/x85/x94 VULGAR FRACTION TWO THIRDS -<15> /xe2/x85/x95 VULGAR FRACTION ONE FIFTH -<25> /xe2/x85/x96 VULGAR FRACTION TWO FIFTHS -<35> /xe2/x85/x97 VULGAR FRACTION THREE FIFTHS -<45> /xe2/x85/x98 VULGAR FRACTION FOUR FIFTHS -<16> /xe2/x85/x99 VULGAR FRACTION ONE SIXTH -<56> /xe2/x85/x9a VULGAR FRACTION FIVE SIXTHS -<18> /xe2/x85/x9b VULGAR FRACTION ONE EIGHTH -<38> /xe2/x85/x9c VULGAR FRACTION THREE EIGHTHS -<58> /xe2/x85/x9d VULGAR FRACTION FIVE EIGHTHS -<78> /xe2/x85/x9e VULGAR FRACTION SEVEN EIGHTHS -<1R> /xe2/x85/xa0 ROMAN NUMERAL ONE -<2R> /xe2/x85/xa1 ROMAN NUMERAL TWO -<3R> /xe2/x85/xa2 ROMAN NUMERAL THREE -<4R> /xe2/x85/xa3 ROMAN NUMERAL FOUR -<5R> /xe2/x85/xa4 ROMAN NUMERAL FIVE -<6R> /xe2/x85/xa5 ROMAN NUMERAL SIX -<7R> /xe2/x85/xa6 ROMAN NUMERAL SEVEN -<8R> /xe2/x85/xa7 ROMAN NUMERAL EIGHT -<9R> /xe2/x85/xa8 ROMAN NUMERAL NINE - /xe2/x85/xa9 ROMAN NUMERAL TEN -
    /xe2/x85/xaa ROMAN NUMERAL ELEVEN - /xe2/x85/xab ROMAN NUMERAL TWELVE -<50R> /xe2/x85/xac ROMAN NUMERAL FIFTY -<100R> /xe2/x85/xad ROMAN NUMERAL ONE HUNDRED -<500R> /xe2/x85/xae ROMAN NUMERAL FIVE HUNDRED -<1000R> /xe2/x85/xaf ROMAN NUMERAL ONE THOUSAND -<1r> /xe2/x85/xb0 SMALL ROMAN NUMERAL ONE -<2r> /xe2/x85/xb1 SMALL ROMAN NUMERAL TWO -<3r> /xe2/x85/xb2 SMALL ROMAN NUMERAL THREE -<4r> /xe2/x85/xb3 SMALL ROMAN NUMERAL FOUR -<5r> /xe2/x85/xb4 SMALL ROMAN NUMERAL FIVE -<6r> /xe2/x85/xb5 SMALL ROMAN NUMERAL SIX -<7r> /xe2/x85/xb6 SMALL ROMAN NUMERAL SEVEN -<8r> /xe2/x85/xb7 SMALL ROMAN NUMERAL EIGHT -<9r> /xe2/x85/xb8 SMALL ROMAN NUMERAL NINE - /xe2/x85/xb9 SMALL ROMAN NUMERAL TEN -
    /xe2/x85/xba SMALL ROMAN NUMERAL ELEVEN - /xe2/x85/xbb SMALL ROMAN NUMERAL TWELVE -<50r> /xe2/x85/xbc SMALL ROMAN NUMERAL FIFTY -<100r> /xe2/x85/xbd SMALL ROMAN NUMERAL ONE HUNDRED -<500r> /xe2/x85/xbe SMALL ROMAN NUMERAL FIVE HUNDRED -<1000r> /xe2/x85/xbf SMALL ROMAN NUMERAL ONE THOUSAND -<1000RCD> /xe2/x86/x80 ROMAN NUMERAL ONE THOUSAND C D -<5000R> /xe2/x86/x81 ROMAN NUMERAL FIVE THOUSAND -<10000R> /xe2/x86/x82 ROMAN NUMERAL TEN THOUSAND -<<-> /xe2/x86/x90 LEFTWARDS ARROW -<-!> /xe2/x86/x91 UPWARDS ARROW -<-/>> /xe2/x86/x92 RIGHTWARDS ARROW -<-v> /xe2/x86/x93 DOWNWARDS ARROW -<> /xe2/x86/x94 LEFT RIGHT ARROW - /xe2/x86/x95 UP DOWN ARROW -< /xe2/x86/x96 NORTH WEST ARROW -> /xe2/x86/x97 NORTH EAST ARROW -> /xe2/x86/x98 SOUTH EAST ARROW -< /xe2/x86/x99 SOUTH WEST ARROW - /xe2/x86/xa8 UP DOWN ARROW WITH BASE -V> /xe2/x87/x80 RIGHTWARDS HARPOON WITH BARB UPWARDS -<<=> /xe2/x87/x90 LEFTWARDS DOUBLE ARROW -<=/>> /xe2/x87/x92 RIGHTWARDS DOUBLE ARROW -<==> /xe2/x87/x94 LEFT RIGHT DOUBLE ARROW - /xe2/x88/x80 FOR ALL - /xe2/x88/x82 PARTIAL DIFFERENTIAL - /xe2/x88/x83 THERE EXISTS - /xe2/x88/x85 EMPTY SET - /xe2/x88/x86 INCREMENT - /xe2/x88/x87 NABLA -<(-> /xe2/x88/x88 ELEMENT OF -<-)> /xe2/x88/x8b CONTAINS AS MEMBER -<*P> /xe2/x88/x8f N-ARY PRODUCT -<+Z> /xe2/x88/x91 N-ARY SUMMATION -<-2> /xe2/x88/x92 MINUS SIGN -<-+> /xe2/x88/x93 MINUS-OR-PLUS SIGN -<.+> /xe2/x88/x94 DOT PLUS - /xe2/x88/x95 DIVISION SLASH -<*-> /xe2/x88/x97 ASTERISK OPERATOR - /xe2/x88/x98 RING OPERATOR - /xe2/x88/x99 BULLET OPERATOR - /xe2/x88/x9a SQUARE ROOT -<0(> /xe2/x88/x9d PROPORTIONAL TO -<00> /xe2/x88/x9e INFINITY -<-L> /xe2/x88/x9f RIGHT ANGLE -<-V> /xe2/x88/xa0 ANGLE - /xe2/x88/xa5 PARALLEL TO - /xe2/x88/xa7 LOGICAL AND - /xe2/x88/xa8 LOGICAL OR -<(U> /xe2/x88/xa9 INTERSECTION -<)U> /xe2/x88/xaa UNION - /xe2/x88/xab INTEGRAL - /xe2/x88/xac DOUBLE INTEGRAL - /xe2/x88/xae CONTOUR INTEGRAL -<.:> /xe2/x88/xb4 THEREFORE -<:.> /xe2/x88/xb5 BECAUSE -<:R> /xe2/x88/xb6 RATIO -<::> /xe2/x88/xb7 PROPORTION - /xe2/x88/xbc TILDE OPERATOR - /xe2/x88/xbe INVERTED LAZY S - /xe2/x89/x83 ASYMPTOTICALLY EQUAL TO - /xe2/x89/x85 APPROXIMATELY EQUAL TO - /xe2/x89/x88 ALMOST EQUAL TO -<=?> /xe2/x89/x8c ALL EQUAL TO - /xe2/x89/x93 IMAGE OF OR APPROXIMATELY EQUAL TO - /xe2/x89/xa0 NOT EQUAL TO -<=3> /xe2/x89/xa1 IDENTICAL TO -<=<> /xe2/x89/xa4 LESS-THAN OR EQUAL TO -=> /xe2/x89/xa5 GREATER-THAN OR EQUAL TO -<<*> /xe2/x89/xaa MUCH LESS-THAN -<*/>> /xe2/x89/xab MUCH GREATER-THAN - /xe2/x89/xae NOT LESS-THAN -> /xe2/x89/xaf NOT GREATER-THAN -<(C> /xe2/x8a/x82 SUBSET OF -<)C> /xe2/x8a/x83 SUPERSET OF -<(_> /xe2/x8a/x86 SUBSET OF OR EQUAL TO -<)_> /xe2/x8a/x87 SUPERSET OF OR EQUAL TO -<0.> /xe2/x8a/x99 CIRCLED DOT OPERATOR -<02> /xe2/x8a/x9a CIRCLED RING OPERATOR -<-T> /xe2/x8a/xa5 UP TACK -<.P> /xe2/x8b/x85 DOT OPERATOR -<:3> /xe2/x8b/xae VERTICAL ELLIPSIS - /xe2/x8c/x82 HOUSE -<<7> /xe2/x8c/x88 LEFT CEILING -7> /xe2/x8c/x89 RIGHT CEILING -<7<> /xe2/x8c/x8a LEFT FLOOR -<7/>> /xe2/x8c/x8b RIGHT FLOOR - /xe2/x8c/x90 REVERSED NOT SIGN -<(A> /xe2/x8c/x92 ARC - /xe2/x8c/x95 TELEPHONE RECORDER - /xe2/x8c/xa0 TOP HALF INTEGRAL - /xe2/x8c/xa1 BOTTOM HALF INTEGRAL -< /xe2/x8c/xa9 LEFT-POINTING ANGLE BRACKET -> /xe2/x8c/xaa RIGHT-POINTING ANGLE BRACKET - /xe2/x90/xa3 OPEN BOX -<1h> /xe2/x91/x80 OCR HOOK -<3h> /xe2/x91/x81 OCR CHAIR -<2h> /xe2/x91/x82 OCR FORK -<4h> /xe2/x91/x83 OCR INVERTED FORK -<1j> /xe2/x91/x86 OCR BRANCH BANK IDENTIFICATION -<2j> /xe2/x91/x87 OCR AMOUNT OF CHECK -<3j> /xe2/x91/x88 OCR DASH -<4j> /xe2/x91/x89 OCR CUSTOMER ACCOUNT NUMBER -<1-o> /xe2/x91/xa0 CIRCLED DIGIT ONE -<2-o> /xe2/x91/xa1 CIRCLED DIGIT TWO -<3-o> /xe2/x91/xa2 CIRCLED DIGIT THREE -<4-o> /xe2/x91/xa3 CIRCLED DIGIT FOUR -<5-o> /xe2/x91/xa4 CIRCLED DIGIT FIVE -<6-o> /xe2/x91/xa5 CIRCLED DIGIT SIX -<7-o> /xe2/x91/xa6 CIRCLED DIGIT SEVEN -<8-o> /xe2/x91/xa7 CIRCLED DIGIT EIGHT -<9-o> /xe2/x91/xa8 CIRCLED DIGIT NINE -<10-o> /xe2/x91/xa9 CIRCLED NUMBER TEN -<11-o> /xe2/x91/xaa CIRCLED NUMBER ELEVEN -<12-o> /xe2/x91/xab CIRCLED NUMBER TWELVE -<13-o> /xe2/x91/xac CIRCLED NUMBER THIRTEEN -<14-o> /xe2/x91/xad CIRCLED NUMBER FOURTEEN -<15-o> /xe2/x91/xae CIRCLED NUMBER FIFTEEN -<16-o> /xe2/x91/xaf CIRCLED NUMBER SIXTEEN -<17-o> /xe2/x91/xb0 CIRCLED NUMBER SEVENTEEN -<18-o> /xe2/x91/xb1 CIRCLED NUMBER EIGHTEEN -<19-o> /xe2/x91/xb2 CIRCLED NUMBER NINETEEN -<20-o> /xe2/x91/xb3 CIRCLED NUMBER TWENTY -<(1)> /xe2/x91/xb4 PARENTHESIZED DIGIT ONE -<(2)> /xe2/x91/xb5 PARENTHESIZED DIGIT TWO -<(3)> /xe2/x91/xb6 PARENTHESIZED DIGIT THREE -<(4)> /xe2/x91/xb7 PARENTHESIZED DIGIT FOUR -<(5)> /xe2/x91/xb8 PARENTHESIZED DIGIT FIVE -<(6)> /xe2/x91/xb9 PARENTHESIZED DIGIT SIX -<(7)> /xe2/x91/xba PARENTHESIZED DIGIT SEVEN -<(8)> /xe2/x91/xbb PARENTHESIZED DIGIT EIGHT -<(9)> /xe2/x91/xbc PARENTHESIZED DIGIT NINE -<(10)> /xe2/x91/xbd PARENTHESIZED NUMBER TEN -<(11)> /xe2/x91/xbe PARENTHESIZED NUMBER ELEVEN -<(12)> /xe2/x91/xbf PARENTHESIZED NUMBER TWELVE -<(13)> /xe2/x92/x80 PARENTHESIZED NUMBER THIRTEEN -<(14)> /xe2/x92/x81 PARENTHESIZED NUMBER FOURTEEN -<(15)> /xe2/x92/x82 PARENTHESIZED NUMBER FIFTEEN -<(16)> /xe2/x92/x83 PARENTHESIZED NUMBER SIXTEEN -<(17)> /xe2/x92/x84 PARENTHESIZED NUMBER SEVENTEEN -<(18)> /xe2/x92/x85 PARENTHESIZED NUMBER EIGHTEEN -<(19)> /xe2/x92/x86 PARENTHESIZED NUMBER NINETEEN -<(20)> /xe2/x92/x87 PARENTHESIZED NUMBER TWENTY -<1.> /xe2/x92/x88 DIGIT ONE FULL STOP -<2.> /xe2/x92/x89 DIGIT TWO FULL STOP -<3.> /xe2/x92/x8a DIGIT THREE FULL STOP -<4.> /xe2/x92/x8b DIGIT FOUR FULL STOP -<5.> /xe2/x92/x8c DIGIT FIVE FULL STOP -<6.> /xe2/x92/x8d DIGIT SIX FULL STOP -<7.> /xe2/x92/x8e DIGIT SEVEN FULL STOP -<8.> /xe2/x92/x8f DIGIT EIGHT FULL STOP -<9.> /xe2/x92/x90 DIGIT NINE FULL STOP -<10.> /xe2/x92/x91 NUMBER TEN FULL STOP -<11.> /xe2/x92/x92 NUMBER ELEVEN FULL STOP -<12.> /xe2/x92/x93 NUMBER TWELVE FULL STOP -<13.> /xe2/x92/x94 NUMBER THIRTEEN FULL STOP -<14.> /xe2/x92/x95 NUMBER FOURTEEN FULL STOP -<15.> /xe2/x92/x96 NUMBER FIFTEEN FULL STOP -<16.> /xe2/x92/x97 NUMBER SIXTEEN FULL STOP -<17.> /xe2/x92/x98 NUMBER SEVENTEEN FULL STOP -<18.> /xe2/x92/x99 NUMBER EIGHTEEN FULL STOP -<19.> /xe2/x92/x9a NUMBER NINETEEN FULL STOP -<20.> /xe2/x92/x9b NUMBER TWENTY FULL STOP -<(a)> /xe2/x92/x9c PARENTHESIZED LATIN SMALL LETTER A -<(b)> /xe2/x92/x9d PARENTHESIZED LATIN SMALL LETTER B -<(c)> /xe2/x92/x9e PARENTHESIZED LATIN SMALL LETTER C -<(d)> /xe2/x92/x9f PARENTHESIZED LATIN SMALL LETTER D -<(e)> /xe2/x92/xa0 PARENTHESIZED LATIN SMALL LETTER E -<(f)> /xe2/x92/xa1 PARENTHESIZED LATIN SMALL LETTER F -<(g)> /xe2/x92/xa2 PARENTHESIZED LATIN SMALL LETTER G -<(h)> /xe2/x92/xa3 PARENTHESIZED LATIN SMALL LETTER H -<(i)> /xe2/x92/xa4 PARENTHESIZED LATIN SMALL LETTER I -<(j)> /xe2/x92/xa5 PARENTHESIZED LATIN SMALL LETTER J -<(k)> /xe2/x92/xa6 PARENTHESIZED LATIN SMALL LETTER K -<(l)> /xe2/x92/xa7 PARENTHESIZED LATIN SMALL LETTER L -<(m)> /xe2/x92/xa8 PARENTHESIZED LATIN SMALL LETTER M -<(n)> /xe2/x92/xa9 PARENTHESIZED LATIN SMALL LETTER N -<(o)> /xe2/x92/xaa PARENTHESIZED LATIN SMALL LETTER O -<(p)> /xe2/x92/xab PARENTHESIZED LATIN SMALL LETTER P -<(q)> /xe2/x92/xac PARENTHESIZED LATIN SMALL LETTER Q -<(r)> /xe2/x92/xad PARENTHESIZED LATIN SMALL LETTER R -<(s)> /xe2/x92/xae PARENTHESIZED LATIN SMALL LETTER S -<(t)> /xe2/x92/xaf PARENTHESIZED LATIN SMALL LETTER T -<(u)> /xe2/x92/xb0 PARENTHESIZED LATIN SMALL LETTER U -<(v)> /xe2/x92/xb1 PARENTHESIZED LATIN SMALL LETTER V -<(w)> /xe2/x92/xb2 PARENTHESIZED LATIN SMALL LETTER W -<(x)> /xe2/x92/xb3 PARENTHESIZED LATIN SMALL LETTER X -<(y)> /xe2/x92/xb4 PARENTHESIZED LATIN SMALL LETTER Y -<(z)> /xe2/x92/xb5 PARENTHESIZED LATIN SMALL LETTER Z - /xe2/x92/xb6 CIRCLED LATIN CAPITAL LETTER A - /xe2/x92/xb7 CIRCLED LATIN CAPITAL LETTER B - /xe2/x92/xb8 CIRCLED LATIN CAPITAL LETTER C - /xe2/x92/xb9 CIRCLED LATIN CAPITAL LETTER D - /xe2/x92/xba CIRCLED LATIN CAPITAL LETTER E - /xe2/x92/xbb CIRCLED LATIN CAPITAL LETTER F - /xe2/x92/xbc CIRCLED LATIN CAPITAL LETTER G - /xe2/x92/xbd CIRCLED LATIN CAPITAL LETTER H - /xe2/x92/xbe CIRCLED LATIN CAPITAL LETTER I - /xe2/x92/xbf CIRCLED LATIN CAPITAL LETTER J - /xe2/x93/x80 CIRCLED LATIN CAPITAL LETTER K - /xe2/x93/x81 CIRCLED LATIN CAPITAL LETTER L - /xe2/x93/x82 CIRCLED LATIN CAPITAL LETTER M - /xe2/x93/x83 CIRCLED LATIN CAPITAL LETTER N - /xe2/x93/x84 CIRCLED LATIN CAPITAL LETTER O - /xe2/x93/x85 CIRCLED LATIN CAPITAL LETTER P - /xe2/x93/x86 CIRCLED LATIN CAPITAL LETTER Q - /xe2/x93/x87 CIRCLED LATIN CAPITAL LETTER R - /xe2/x93/x88 CIRCLED LATIN CAPITAL LETTER S - /xe2/x93/x89 CIRCLED LATIN CAPITAL LETTER T - /xe2/x93/x8a CIRCLED LATIN CAPITAL LETTER U - /xe2/x93/x8b CIRCLED LATIN CAPITAL LETTER V - /xe2/x93/x8c CIRCLED LATIN CAPITAL LETTER W - /xe2/x93/x8d CIRCLED LATIN CAPITAL LETTER X - /xe2/x93/x8e CIRCLED LATIN CAPITAL LETTER Y - /xe2/x93/x8f CIRCLED LATIN CAPITAL LETTER Z - /xe2/x93/x90 CIRCLED LATIN SMALL LETTER A - /xe2/x93/x91 CIRCLED LATIN SMALL LETTER B - /xe2/x93/x92 CIRCLED LATIN SMALL LETTER C - /xe2/x93/x93 CIRCLED LATIN SMALL LETTER D - /xe2/x93/x94 CIRCLED LATIN SMALL LETTER E - /xe2/x93/x95 CIRCLED LATIN SMALL LETTER F - /xe2/x93/x96 CIRCLED LATIN SMALL LETTER G - /xe2/x93/x97 CIRCLED LATIN SMALL LETTER H - /xe2/x93/x98 CIRCLED LATIN SMALL LETTER I - /xe2/x93/x99 CIRCLED LATIN SMALL LETTER J - /xe2/x93/x9a CIRCLED LATIN SMALL LETTER K - /xe2/x93/x9b CIRCLED LATIN SMALL LETTER L - /xe2/x93/x9c CIRCLED LATIN SMALL LETTER M - /xe2/x93/x9d CIRCLED LATIN SMALL LETTER N - /xe2/x93/x9e CIRCLED LATIN SMALL LETTER O - /xe2/x93/x9f CIRCLED LATIN SMALL LETTER P - /xe2/x93/xa0 CIRCLED LATIN SMALL LETTER Q - /xe2/x93/xa1 CIRCLED LATIN SMALL LETTER R - /xe2/x93/xa2 CIRCLED LATIN SMALL LETTER S - /xe2/x93/xa3 CIRCLED LATIN SMALL LETTER T - /xe2/x93/xa4 CIRCLED LATIN SMALL LETTER U - /xe2/x93/xa5 CIRCLED LATIN SMALL LETTER V - /xe2/x93/xa6 CIRCLED LATIN SMALL LETTER W - /xe2/x93/xa7 CIRCLED LATIN SMALL LETTER X - /xe2/x93/xa8 CIRCLED LATIN SMALL LETTER Y - /xe2/x93/xa9 CIRCLED LATIN SMALL LETTER Z -<0-o> /xe2/x93/xaa CIRCLED DIGIT ZERO - /xe2/x94/x80 BOX DRAWINGS LIGHT HORIZONTAL - /xe2/x94/x81 BOX DRAWINGS HEAVY HORIZONTAL - /xe2/x94/x82 BOX DRAWINGS LIGHT VERTICAL - /xe2/x94/x83 BOX DRAWINGS HEAVY VERTICAL -<3-> /xe2/x94/x84 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL -<3_> /xe2/x94/x85 BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL -<3!> /xe2/x94/x86 BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL -<3//> /xe2/x94/x87 BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL -<4-> /xe2/x94/x88 BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL -<4_> /xe2/x94/x89 BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL -<4!> /xe2/x94/x8a BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL -<4//> /xe2/x94/x8b BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL - /xe2/x94/x8c BOX DRAWINGS LIGHT DOWN AND RIGHT - /xe2/x94/x8d BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY - /xe2/x94/x8e BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT - /xe2/x94/x8f BOX DRAWINGS HEAVY DOWN AND RIGHT -
    /xe2/x94/x90 BOX DRAWINGS LIGHT DOWN AND LEFT -
    /xe2/x94/x91 BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY -
    /xe2/x94/x92 BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT - /xe2/x94/x93 BOX DRAWINGS HEAVY DOWN AND LEFT - /xe2/x94/x94 BOX DRAWINGS LIGHT UP AND RIGHT - /xe2/x94/x95 BOX DRAWINGS UP LIGHT AND RIGHT HEAVY - /xe2/x94/x96 BOX DRAWINGS UP HEAVY AND RIGHT LIGHT - /xe2/x94/x97 BOX DRAWINGS HEAVY UP AND RIGHT -
  • /x50 LATIN CAPITAL LETTER P - /x51 LATIN CAPITAL LETTER Q - /x52 LATIN CAPITAL LETTER R - /x53 LATIN CAPITAL LETTER S - /x54 LATIN CAPITAL LETTER T - /x55 LATIN CAPITAL LETTER U - /x56 LATIN CAPITAL LETTER V - /x57 LATIN CAPITAL LETTER W - /x58 LATIN CAPITAL LETTER X - /x59 LATIN CAPITAL LETTER Y - /x5a LATIN CAPITAL LETTER Z - /x5b LEFT SQUARE BRACKET -<<(> /x5b LEFT SQUARE BRACKET - /x5c REVERSE SOLIDUS - /x5c REVERSE SOLIDUS - /x5c REVERSE SOLIDUS - /x5d RIGHT SQUARE BRACKET -<)/>> /x5d RIGHT SQUARE BRACKET - /x5e CIRCUMFLEX ACCENT - /x5e CIRCUMFLEX ACCENT -<'/>> /x5e CIRCUMFLEX ACCENT - /x5f LOW LINE - /x5f LOW LINE -<_> /x5f LOW LINE - /x60 GRAVE ACCENT -<'!> /x60 GRAVE ACCENT - /x61 LATIN SMALL LETTER A - /x62 LATIN SMALL LETTER B - /x63 LATIN SMALL LETTER C - /x64 LATIN SMALL LETTER D - /x65 LATIN SMALL LETTER E - /x66 LATIN SMALL LETTER F - /x67 LATIN SMALL LETTER G - /x68 LATIN SMALL LETTER H - /x69 LATIN SMALL LETTER I - /x6a LATIN SMALL LETTER J - /x6b LATIN SMALL LETTER K - /x6c LATIN SMALL LETTER L - /x6d LATIN SMALL LETTER M - /x6e LATIN SMALL LETTER N - /x6f LATIN SMALL LETTER O -