diff -durpNa glibc-2.2.2/ChangeLog glibc-2.2.3/ChangeLog --- glibc-2.2.2/ChangeLog Thu Feb 15 14:35:29 2001 +++ glibc-2.2.3/ChangeLog Thu Apr 26 20:07:01 2001 @@ -1,3 +1,3459 @@ +2001-04-26 Ulrich Drepper + + * sysdeps/unix/sysv/linux/ia64/syscalls.list: Add getunwind. + + * string/strcoll.c: Fix two memory allocation problems. + * string/Makefile (tests): Add bug-strcoll1. + * string/bug-strcoll1.c: New file. + + * malloc/mcheck.c (mcheck): Call malloc once before setting the + hooks to allow the internal check hooks to be set up if necessary. + + * nis/nss-nis.h: Move yperr2nss_tab definition into separate file + and rename to __yperr2nss_tab. Change YPERR_COUNT into variable + __yperr2nss_count. + * nis/nss-nis.c: New file. + * nis/nss-nisplus.h: Move niserr2nss_tab definition into separate file + and rename to __niserr2nss_tab. Change NISERR_COUNT into variable + __niserr2nss_count. + * nis/nss-nisplus.c: New file. + * nis/Makefile (libnss_compat-routines): Add nss-nis. + (libnss_nis-routines): Likewise. + (libnss_nisplus-routines): Add nss-nisplus. + + * nis/nss_nisplus/nisplus-alias.c: Remove unnecessary initializations. + * nis/nss_nisplus/nisplus-ethers.c: Likewise. + * nis/nss_nisplus/nisplus-grp.c: Likewise. + * nis/nss_nisplus/nisplus-hosts.c: Likewise. + * nis/nss_nisplus/nisplus-network.c: Likewise. + * nis/nss_nisplus/nisplus-proto.c: Likewise. + * nis/nss_nisplus/nisplus-pwd.c: Likewise. + * nis/nss_nisplus/nisplus-rpc.c: Likewise. + * nis/nss_nisplus/nisplus-service.c: Likewise. + * nis/nss_nisplus/nisplus-spwd.c: Likewise. + * nis/nss_nis/nis-alias.c: Likewise. + * nis/nss_nis/nis-ethers.c: Likewise. + * nis/nss_nis/nis-grp.c: Likewise. + * nis/nss_nis/nis-network.c: Likewise. + * nis/nss_nis/nis-proto.c: Likewise. + * nis/nss_nis/nis-pwd.c: Likewise. + * nis/nss_nis/nis-spwd.c: Likewise. + * nis/nss_compat/compat-grp.c: Likewise. + * nis/nss_compat/compat-initgroups.c: Likewise. + * nis/nss_compat/compat-pwd.c: Likewise. + * nis/nss_compat/compat-spwd.c: Likewise. + + * sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c: Some more + optimizations. Patch by Jakub Jelinek . + +2001-04-26 Andreas Jaeger + + * po/zh_TW.po: Update. + Patch by Tung-Han Hsieh . + +2001-04-25 Ulrich Drepper + + * malloc/malloc.c: Allow MALLOC_ALIGNMENT to be defined on the + compiler command line. + * sysdeps/hppa/Makefile: Add -DMALLOC_ALIGNMENT=16 to compiler + command line for malloc.c. + +2001-04-25 Jakub Jelinek + + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/time.h: Move to... + * sysdeps/unix/sysv/linux/sparc/bits/time.h: ...here. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/bits/time.h: Remove. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/socket.h: Move to... + * sysdeps/unix/sysv/linux/sparc/bits/socket.h: ...here. Adjust + struct msghdr for __WORDSIZE == 32. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/statvfs.h: Move to... + * sysdeps/unix/sysv/linux/sparc/bits/statvfs.h: ...here. Adjust + for __WORDSIZE == 32. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h: Remove. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/get_clockfreq.c: New + file. + * sysdeps/unix/sysv/linux/sparc/sparc64/longjmp.S (__libc_siglongjmp): + Rename from longjmp, make longjmp weak alias to it. + +2001-04-24 David S. Miller + + * sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c: New file. + +2001-04-25 Matthew Wilcox + + * sysdeps/hppa/stackinfo.h: New file. + * sysdeps/unix/sysv/linux/hppa/getdents64.c: New file. + * sysdeps/unix/sysv/linux/hppa/mmap64.c: New file. + * sysdeps/unix/sysv/linux/hppa/bits/resource.h: New file. + * sysdeps/unix/sysv/linux/kernel-features.h: Add descriptions + of PA kernel features. + +2001-04-25 Ulrich Drepper + + * locale/programs/localedef.c (main): Always set a file name for + the initial locale. + * locale/programs/locfile.c (locfile_read): filename is allowed to + be NULL. + +2001-04-12 Paul Bame + + * sysdeps/hppa/fpu/fclrexcpt.c: Clear the exception flags, not the + enable flags. + +2001-04-24 Ulrich Drepper + + * sysdeps/generic/bits/environments.h (_POSIX_V6_LPBIG_OFFBIG, + _XBS5_LPBIG_OFFBIG): Define to -1. + Fix typos. + + * sysdeps/generic/bits/confname.h: Add _CS_V6_WIDTH_RESTRICTED_ENVS. + * posix/confstr.c: Handle _CS_V6_WIDTH_RESTRICTED_ENVS. + * posix/getconf.c: Handle _POSIX_V6_WIDTH_RESTRICTED_ENVS. + * posix/tst-getconf.sh: Add _POSIX_V6_WIDTH_RESTRICTED_ENVS. + + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/Implies: New file. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/bits/time.h: Removed. + +2001-03-21 Alan Modra + + * sysdeps/hppa/dl-machine.h (RTLD_START): Set up dp with DT_PLTGOT + value from application so that constructors in non-PIC libs work. + +2000-12-13 Jes Sorensen + + * sysdeps/hppa/dl-machine.h (RTLD_START): _dl_init now returns a + function pointer, hence load the jump address and gp from the + function pointer before jumping. + +2001-04-24 Andreas Jaeger + + * sysdeps/generic/send.c (__send): Return ssize_t. + * sysdeps/mach/hurd/send.c (__send): Likewise. + * sysdeps/mach/hurd/recv.c (recv): Likewise. + * sysdeps/mach/hurd/sendto.c (sendto): Likewise. + * sysdeps/generic/sendto.c (sendto): Likewise. + * sysdeps/generic/recvmsg.c (recvmsg): Likewise. + * sysdeps/mach/hurd/recvfrom.c (recvfrom): Likewise. + * sysdeps/generic/recvfrom.c (recvfrom): Likewise. + * sysdeps/generic/sendmsg.c (sendmsg): Likewise. + + * socket/sys/socket.h: send* and recv* return ssize_t. + + * include/sys/socket.h: send returns ssize_t. + + * sysdeps/i386/fpu_control.h: Fix comments. + +2001-04-24 Ulrich Drepper + + * sysdeps/ia64/Dist: Add hp-timing.c. + * sysdeps/unix/sysv/linux/sparc/sparc64/Dist: Add ucontext_i.h. + * posix/Makefile (distribute): Add tst-getconf.sh. + * po/Makefile (distribute): Add $(BROKEN_LINGUAS:=.po). + +2001-04-23 Ulrich Drepper + + * sysdeps/ia64/Makefile [subdir=csu] (sysdep_routines): Add hp-timing. + * sysdeps/ia64/Versions: Add _dl_cpuclock_offset for ld in 2.2.3. + * sysdeps/ia64/hp-timing.c: New file. + * sysdeps/ia64/hp-timing.h: New file. + * sysdeps/unix/sysv/linux/ia64/bits/time.h: Add definitions for + CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID. + + * sysdeps/generic/clock_getcpuclockid.c: Make function generic, test + using #ifdef whether the clock is available. + * sysdeps/unix/i386/clock_getcpuclockid.c: Not needed anymore. + + * sysdeps/generic/dl-sysdep.c: Initialize _dl_cpuclock_offset to move + it into data section. + + * sysdeps/unix/i386/i586/clock_getres.c: Removed. + * sysdeps/unix/i386/i586/clock_gettime.c: Removed. + * sysdeps/unix/i386/i586/clock_nanosleep.c: Removed. + * sysdeps/unix/i386/i586/clock_settime.c: Removed. + * sysdeps/unix/i386/i586/cpuclock-init.h: Removed. + * sysdeps/generic/cpuclock-init.h: Removed. + * sysdeps/unix/i386/i686/Implies: Removed. + * sysdeps/unix/i386/i686/tempname.c: Removed. + * sysdeps/i386/i686/Versions: New file. + * sysdeps/unix/i386/i586/Versions: Removed. + + * sysdeps/posix/clock_getres.c: If HP_TIMING_AVAIL is nonzero handle + CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID. + * sysdeps/unix/clock_gettime.c: Likewise. + * sysdeps/unix/clock_nanosleep.c: Likewise. + * sysdeps/unix/clock_settime.c: Likewise. + * sysdeps/posix/tempname.c: Is HP_TIMING_AVAIL is nonzero define + RANDOM_BITS use CPU clock. + + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/bits/time.h: New file. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9b/bits/time.h: New file. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/time.h: New file. + * sysdeps/sparc/Versions: New file. + + * elf/dl-support.c: Don't use cpuclock-init.h definitions, use + hp-timing.h definitions. + * sysdeps/generic/dl-sysdep.c: Likewise. + + * include/libc-internal.h: Include hp-timing.h. Use hp_timing_t in + __get_clockfreq prototype. + + * sysdeps/unix/sysv/linux/i386/get_clockfreq.c (__get_clockfreq): + Use hp_timing_t type. + * sysdeps/generic/get_clockfreq.c (__get_clockfreq): Likewise. + + * sysdeps/unix/sysv/linux/ia64/get_clockfreq.c: New file. + + * sysdeps/posix/pathconf.c (__pathconf): For _PC_ASYNC_IO test + whether named file is a regular file or a block device. + * sysdeps/posix/fpathconf.c (__fpathconf): Likewise. + +2001-04-23 Andreas Jaeger + + * nscd/nscd.h: Add noreturn attribute for start_threads. + +2001-04-22 Ulrich Drepper + + * posix/getconf.c: Fix names of XBS5 LFS test variables. + Add missing configuration variables from XPG6. + * posix/tst-getconf.c: New file. + * posix/Makefile (generated): Add tst-getconf.out. + (tests): Add ($objpfx)tst-getconf.out. + Add rule to run tst-getconf.sh. + * sysdeps/generic/bits/confname.h: Add missing _PC_ and _SC_ values + from XPG6. + * sysdeps/posix/fpathconf.c: Add handling of _PC_ALLOC_SIZE_MIN and + _PC_SYMLINK_MAX. + * sysdeps/posix/pathconf.c: Likewise. + * sysdeps/posix/sysconf.c: Correct spelling of _SC_MULTI_PROCESS + and _SC_SYMLOOP_MAX. + +2001-04-22 Philip Blundell + + * sysdeps/arm/fpu/feenablxcpt.c: New file. + * sysdeps/arm/fpu/fedisablxcpt.c: New file. + * sysdeps/arm/fpu/fegetexcpt.c: New file. + +2001-04-22 Philip Blundell + + * sysdeps/unix/sysv/linux/arm/sys/user.h (struct user_fpregs): + Renamed from struct user_fp. + (struct user_regs): New. + (struct user): Use struct user_regs rather than struct pt_regs to + avoid dependency on asm/ptrace.h. Use struct user_fpregs in place + of struct user_fp and struct user_fp_struct. + * sysdeps/unix/sysv/linux/arm/sys/ucontext.h: Include sys/procfs.h + not sys/elf.h. + +2001-04-22 Philip Blundell + + * sysdeps/unix/sysv/linux/arm/sys/elf.h: Move contents to + sys/procfs.h, and tell the user to include that file instead. + * sysdeps/unix/sysv/linux/arm/sys/procfs.h: Remove old cruft + surrounded with #if 0. + (elf_greg_t, ELF_NGREG, elf_gregset_t, elf_fpregset_t): Moved here + from sys/elf.h. + (prgregset_t, prfpregset_t): Define in terms of elf_gregset_t and + elf_fpregset_t respectively. + +2001-04-22 Philip Blundell + + * sysdeps/unix/sysv/linux/arm/register-dump.h: Also print the + address that faulted. + +2001-04-21 Ulrich Drepper + + * sysdeps/generic/bits/confname.h: Add _SC_V6_* and _CS_POSIX_V6_* + values. + * sysdeps/generic/bits/environments.h: Define _POSIX_V6_* values. + * posix/confstr.c: Handle _CS_POSIX_V6_* values. + * posix/getconf.c: Handle _CS_POSIX_V6_* and _SC_V6_* values. + * sysdeps/posix/sysconf.c: Handle _SC_V6_* values. + + * sysdeps/powerpc/fpu/libm-test-ulps: Add deltas for atan2f. + * sysdeps/s390/fpu/libm-test-ulps: Likewise. + * sysdeps/sh/sh4/fpu/libm-test-ulps: Likewise. + * sysdeps/mips/fpu/libm-test-ulps: Likewise. + +2001-04-21 Franz Sirl + + * sysdeps/unix/sysv/linux/powerpc/mmap64.c: Correct check for invalid + offset. + +2001-04-21 Ulrich Drepper + + * posix/getopt.h: Treat __cplusplus like __STDC__. + +2001-04-20 John S. Marvin + + * sysdeps/unix/sysv/linux/hppa/clone.S: Fix clone system call + entry point stub. + +2001-04-20 Richard Hirst + + * elf/elf.h: Corrected R_PARISC_DIR14R (should be 6, not 5), + and added R_PARISC_DPREL21L and R_PARISC_DPREL14R for modutils. + + * sysdeps/unix/sysv/linux/hppa/syscalls.list: Removed ptrace + entry so the ptrace.c wrapper is used. + +2001-04-20 Alan Modra + + * sysdeps/hppa/dl-lookupcfg.h (_dl_function_address): Prototype. + (DL_FUNCTION_ADDRESS): Define. + (DL_DT_INIT_ADDRESS): Define. + (DL_DT_FINI_ADDRESS): Define. + * sysdeps/hppa/Versions: Add _dl_function_address. + * sysdeps/hppa/dl-machine.h (ELF_MACHINE_START_ADDRESS): Define. + * sysdeps/hppa/dl-symaddr.c (_dl_start_address): Rename to + _dl_function_address. + +2001-04-21 Andreas Jaeger + + * rt/aio_misc.c (handle_fildes_io): Add noreturn attribute. + * resolv/gai_misc.c (handle_requests): Likewise. + * malloc/obstack.c (print_and_abort): Likewise. + * malloc/mcheck.c (mabort): Likewise. + + * sysdeps/unix/i386/i586/clock_settime.c: Include + "libc-internal.h" for __get_clockfreq declaration. + +2001-04-21 Ulrich Drepper + + * elf/dl-support.c: Include cpuclock-init.h. Use CPUCLOCK_VARDEF and + CPUCLOCK_INIT if defined. + * sysdeps/generic/dl-sysdep.c: Likewise. + * sysdeps/generic/cpuclock-init.h: New file. + * sysdeps/unix/i386/i586/cpuclock-init.h: New file. + * sysdeps/unix/i386/i586/Versions: New file. + * sysdeps/unix/i386/i586/clock_settime.c: New file. + * sysdeps/unix/i386/i586/clock_gettime.c: Handle thread CPU clock + separately by calling __pthread_clock_gettime if this function is + available. Subtract offset from tsc value before computing time value. + +2001-04-20 Ulrich Drepper + + * iconv/iconv_prog.c (print_known_names): If printing goes not to + a tty print in a more machine-friendly way. + + * sysdeps/ieee754/ldbl-128/e_asinl.c: New file. + Contributed by Stephen L Moshier . + +2001-04-20 Andreas Jaeger + + * intl/Makefile (tests): Reorder conditions, tst-gettext needs msgfmt. + +2001-04-20 Andreas Schwab + + * sysdeps/m68k/fpu/libm-test-ulps: Update. + +2001-04-19 Alan Modra + + * Makerules (libc_pic.os): Add $(LDFLAGS-c_pic.os). + * sysdeps/hppa/Makefile (LDFLAGS-c_pic.os): Define. + (CFLAGS-.os): Remove. + + * sysdeps/unix/sysv/linux/hppa/sysdep.h (CALL_MCOUNT): Update comment. + + * sysdeps/unix/sysv/linux/hppa/sys/ucontext.h (NGREG, NFPREG, + gregset): Correct for new kernel definitions. + +2001-04-19 Alan Modra + + * sysdeps/hppa/elf/initfini.c: Change dlt reg save to r3 and + generate unwind info by hand. + +2001-04-19 Ulrich Drepper + + * sysdeps/unix/sysv/linux/powerpc/mmap64.c (__mmap64): Optimize a bit. + + * configure.in: Correct regular expression for msgfmt. + Patch by Bruno Haible . + +2001-04-19 Andreas Jaeger + + * po/el.po: Add comment explaining what's broken. + + * po/Makefile (BROKEN_LINGUAS): New. + (ALL_LINGUAS): Don't add broken languages. + +2001-04-19 Roland McGrath + + * sysdeps/mach/hurd/mlock.c: New file. + * sysdeps/mach/hurd/munlock.c: New file. + * sysdeps/mach/hurd/bits/posix_opt.h (_POSIX_MEMLOCK_RANGE): Define it. + + * misc/Makefile (routines): Add mlock munlock mlockall munlockall. + * sysdeps/generic/mlock.c: New file. + * sysdeps/generic/munlock.c: New file. + * sysdeps/generic/mlockall.c: New file. + * sysdeps/generic/munlockall.c: New file. + * sysdeps/generic/bits/mman.h (MCL_CURRENT, MCL_FUTURE): New macros. + * sysdeps/unix/sysv/linux/syscalls.list (mlock, munlock, + mlockall, munlockall): Change caller field to - from EXTRA. + Don't use __ names; not used (and not declared in include/sys/mman.h). + + * hurd/privports.c (__get_privileged_ports): Renamed with __. + Use __ names for calls we make. + (get_privileged_ports): Add alias. + * hurd/hurd.h: Declare it with the __ name. + * sysdeps/mach/hurd/reboot.c (reboot): Use __get_privileged_ports. + * sysdeps/mach/hurd/adjtime.c (__adjtime): Likewise. + * sysdeps/mach/hurd/settimeofday.c (__settimeofday): Likewise. + + * hurd/hurdsig.c (write_corefile): Check RLIMIT_CORE limit and do + nothing if it's zero. + +2001-04-19 Matthew Wilcox + + * sysdeps/unix/sysv/linux/hppa/sysdep.h (INLINE_SYSCALL): + Change to return a signed result for compatibility with other + architectures, and correctness. + +2001-04-19 Ulrich Drepper + + * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_32BITUIDS): + HPPA always had them. Patch by Matthew Wilcox . + +2001-04-19 Andreas Jaeger + + * configure.in: Require gettext 0.10.36 or newer. + + * manual/install.texi (Tools for Compilation): Mention gettext 0.10.36. + + * po/zh_TW.po: Remove extraneous backslashes. + + * sysdeps/ieee754/dbl-64/e_sqrt.c (__ieee754_sqrt): Remove unused + variables b and n. + +2001-04-18 Jakub Jelinek + + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Update. + * sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c: New file. + * sysdeps/unix/sysv/linux/sparc/sparc64/swapcontext.c: New file. + * sysdeps/unix/sysv/linux/sparc/sparc64/setcontext.S (__setcontext): + Copy first word of uc_sigmask into __uc_sigmask. + * sysdeps/unix/sysv/linux/sparc/sparc64/getcontext.S (__getcontext): + Save uc_link around trap. Copy __uc_sigmask into first word of + uc_sigmask, clear the rest. Make sure setcontext to the created + context doesn't do this though. + * sysdeps/unix/sysv/linux/sparc/sparc64/ucontext_i.h: New file. + * sysdeps/unix/sysv/linux/sparc/sys/ucontext.h (ucontext_t): Add + uc_stack and uc_sigmask, rename old uc_sigmask to __uc_sigmask in the + 64bit version, make uc_sigmask __sigset_t in the 32bit version. + +2001-04-19 Andreas Jaeger + + * sysdeps/unix/sysv/linux/hppa/umount.c: Fix typos in last patch. + + * rt/Makefile (otherlibs): Added for static NSS. + + * glibcbug.in (BUGGLIBC): Send to new alias. + +2001-04-02 Andreas Schwab + + * Makerules (build-module): Make sure exit codes get checked + properly and remove unnecessary slashes. + +2001-04-17 Ulrich Drepper + + * sysdeps/unix/sysv/linux/i386/get_clockfreq.c (__get_clockfreq): + Handle kernels which report only three digits after the decimal point. + Reported by Van Okamura . + + * sysdeps/alpha/fpu/libm-test-ulps: Adjust error values for atan2f. + +2001-04-17 David S. Miller + + * sysdeps/sparc/sparc32/fpu/libm-test-ulps: Update for new atan2 tests. + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Likewise. + +2001-04-17 Jakub Jelinek + + * sysdeps/ieee754/ldbl-128/e_logl.c (__ieee754_logl): Make sure + desired exceptions are raised for exceptional values. + * math/libm-test.inc (acosh_test, atan_test, atan2_test, cacos_test, + cacosh_test, casin_test, casinh_test, catan_test, catanh_test, + clog_test, log_test, log1p_test, tan_test): Increase precision of + expected values to satisfy ldbl-128. + * sysdeps/alpha/fpu/libm-test-ulps: Adjust accordingly. + * sysdeps/arm/libm-test-ulps: Likewise. + * sysdeps/i386/fpu/libm-test-ulps: Likewise. + * sysdeps/ia64/fpu/libm-test-ulps: Likewise. + * sysdeps/m68k/fpu/libm-test-ulps: Likewise. + * sysdeps/mips/fpu/libm-test-ulps: Likewise. + * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. + * sysdeps/s390/fpu/libm-test-ulps: Likewise. + * sysdeps/sh/sh4/fpu/libm-test-ulps: Likewise. + * sysdeps/sparc/sparc32/fpu/libm-test-ulps: Likewise. + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Likewise. + +2001-04-17 Andreas Jaeger + + * configure.in: Move test for critical programs up. + +2001-04-16 Stephen L Moshier + + * sysdeps/ieee754/flt-32/e_asinf.c (pio2_hi, pio2_lo, pio4_hi): + Correct the values. (pSx, qSx): Replace by shorter approximation. + Use f suffix on float constants. + +2001-04-16 Ulrich Drepper + + * sysdeps/ieee754/ldbl-128/k_tanl.c: New file. + Contributed by Stephen L Moshier . + + * string/string.h: Replace const in attribute list with __const__. + +2001-04-16 Roland McGrath + + * grp/initgroups.c (initgroups) [NGROUPS_MAX != 0]: Always use sysconf + instead of the constant NGROUPS_MAX. That way, the limit can be + raised in the kernel configuration without having to recompile libc. + + * sysdeps/posix/euidaccess.c: Don't #include or try to + define NGROUPS_MAX; we don't use it here. + +2001-04-16 Andreas Jaeger + + * math/libm-test.inc (atan2_test): Add more testcases. + + * iconv/gconv_db.c: Include gconv_charset.h for + __gconv_lookup_alias prototype. + +2001-04-13 Ulrich Drepper + + * sysdeps/ieee754/ldbl-128/s_atanl.c: New file. + Contributed by Stephen L Moshier . + +2001-04-13 Jes Sorensen + + * intl/tst-codeset.c: Include string.h to get prototype for strcmp(). + +2001-04-13 Jes Sorensen + + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Add __pad0 to + explicitly pad struct siginfo instead of relying on compiler padding. + +2001-04-12 Ulrich Drepper + + * sysdeps/ia64/Dist: Add elf/entry.h. + + * iconvdata/Makefile (distribute): Add TESTS2. + +2001-04-13 Jakub Jelinek + + * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_load_address): + Calculate load address differently. + +2001-04-12 Bruno Haible + + * iconvdata/TESTS2: New file. + * iconvdata/run-iconv-test.sh: Also run tests from TESTS2. + * iconvdata/testdata/alfabeta..UTF-8: New file. + * iconvdata/testdata/alfabeta..UTF-16.BE: New file. + * iconvdata/testdata/alfabeta..UTF-16.LE: New file. + * iconvdata/testdata/alfabeta..UTF-32.BE: New file. + * iconvdata/testdata/alfabeta..UTF-32.LE: New file. + +2001-04-11 Bruno Haible + + * iconvdata/utf-32.c: New file. + * iconvdata/gconv-modules: Add entries for UTF-32, UTF-32LE, UTF-32BE. + * iconvdata/Makefile (modules): Add UTF-32. + (distribute): Add utf-32.c. + +2001-04-11 Bruno Haible + + * iconvdata/utf-16.c (PREPARE_LOOP): Initialize 'swap' after possibly + changing it in the state. After incrementing 'inptr', store it back. + * iconvdata/unicode.c (PREPARE_LOOP): After incrementing 'inptr', + store it back. + +2001-04-11 Bruno Haible + + * iconvdata/utf-16.c (gconv_init): Use MAX_NEEDED_FROM, not + MIN_NEEDED_FROM. + +2001-04-11 David Mosberger + + * sysdeps/ia64/htonl.S: Drop superfluous "alloc". + * sysdeps/ia64/htons.S: Likewise. + + * sysdeps/ia64/memset.S: Add unwind directives. + * sysdeps/ia64/strncpy.S: Likewise. + * sysdeps/ia64/strcat.S: Likewise. + + * sysdeps/ia64/memccpy.S: Add unwind directives. Drop superfluous + restore of ar.pfs. + * sysdeps/ia64/strchr.S: Likewise. + * sysdeps/ia64/memmove.S: Likewise. + * sysdeps/ia64/memcpy.S: Likewise. + * sysdeps/ia64/memcmp.S: Likewise. + * sysdeps/ia64/memchr.S: Likewise. + * sysdeps/ia64/strcmp.S: Likewise. + * sysdeps/ia64/strlen.S: Likewise. + * sysdeps/ia64/strcpy.S: Likewise. + * sysdeps/ia64/strncmp.S: Likewise. + +2001-04-11 Jakub Jelinek + + * wcsmbs/wchar.h (fgetwc, getwc, getwchar, fputwc, putwc, putwchar, + fgetws, fputws, ungetwc, getwc_unlocked, getwchar_unlocked, + fgetwc_unlocked, fputwc_unlocked, putwc_unlocked, putwchar_unlocked, + fgetws_unlocked, fputws_unlocked, wcsftime): Add __THROW. + +2001-04-11 Andreas Jaeger + + * sysdeps/mips/elf/start.S [__ASSEMBLY__]: Define it. + +2001-04-11 Andreas Schwab + + * sysdeps/m68k/fpu/libm-test-ulps: Adjusted. + +2001-04-11 Ulrich Drepper + + * sysdeps/arm/stackinfo.h: New file. + +2001-04-08 Thorsten Kukuk + + * sunrpc/rpc_main.c: If we compile RPC thread safe, allow + rpcgen to generate thread safe code. + +2001-04-10 Andreas Jaeger + + * math/test-fenv.c (initial_tests): Protect FE_TONEAREST declaration. + +2001-04-10 Ulrich Drepper + + * elf/dl-minimal.c (__assert_fail): Change error string. It's + most of the time no bug in ld.so. + (__assert_perror_fail): Likewise. + +2001-04-11 Hans-Peter Nilsson + + * sysdeps/generic/bits/fenv.h (fexcept_t): Change default type + from struct to unsigned int. + +2001-04-10 Franz Sirl + + * elf/elf.h (AT_DCACHEBSIZE, AT_ICACHEBSIZE, AT_UCACHEBSIZE, + AT_IGNOREPPC): New defines. + * sysdeps/generic/dl-sysdep.c (_dl_show_auxv): Print them. + * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_STD_AUXV): + Define for newer powerpc kernels. + * sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c: Use the standard + DL_FIND_ARG_COMPONENTS if __ASSUME_STD_AUXV is defined. + +2000-4-10 kaz Kojima + + * sysdeps/sh/stackinfo.h: New file. + +2001-04-10 Ulrich Drepper + + * locale/tst-C-locale.c (run_test): Add tests for locale objects. + * locale/newlocale.c (__newlocale): Correct setting __ctype_b, + __ctype_tolower, and __ctype_toupper elements. + + * ctype/ctype_l.c: Fix definitions of __tolower_l and __toupper_l. + Reported by Konstantin Osipov . + + * sysdeps/i386/fpu/libm-test-ulps: Add deltas for tgamma to help + the lousy AMD FPU. + +2001-04-10 Franz Sirl + + * sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h: New file. + * sysdeps/unix/sysv/linux/powerpc/Dist: Add sys/ptrace.h. + * sysdeps/unix/sysv/linux/powerpc/sys/ucontext.h: Delete wrong stuff. + * sysdeps/unix/sysv/linux/powerpc/sys/procfs.h: Correct typedefs. + +2001-04-10 Ulrich Drepper + + * elf/dl-deps.c (_dl_map_object_deps): Provide complete error + message. Based on a patch by HJ Lu. + +2001-04-10 Andreas Schwab + + * math/libm-test.inc (csinh_test): Don't require the invalid + exception for csinh (x + iNaN), but make it optional. + +2001-04-09 David Mosberger + + * sysdeps/ia64/elf/start.S (_start): Add unwind directives. + + * sysdeps/generic/entry.h [!__ASSEMBLY__]: Declare _start. + * sysdeps/ia64/elf/entry.h: New file. + * sysdeps/unix/sysv/linux/mips/entry.h [!__ASSEMBLY__]: Declare + __start. + * elf/rtld.c: Don't declare ENTRY_POINT. Use ENTRY_POINT instead + of &ENTRY_POINT. + * sysdeps/generic/dl-sysdep.c: Likewise. + * sysdeps/mach/hurd/dl-sysdep.c: Likewise. + * sysdeps/ia64/elf/start.S: Save base address of register backing + store in __libc_ia64_register_backing_store_base. + +2001-04-10 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S: Fix return + value of getcontext. + * sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S: Fix return + value of setcontext. + * sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/s390/swapcontext.c: Skip setcontext + call by changing the saved context. + +2001-04-10 Ulrich Drepper + + * sysdeps/alpha/stackinfo.h: New file. + * sysdeps/ia64/stackinfo.h: New file. + +2001-04-10 Andreas Schwab + + * sysdeps/m68k/fpu/e_pow.c: Correct handling of some exceptional + values. + * sysdeps/m68k/fpu/e_scalb.c: Likewise. + +2001-04-09 Ulrich Drepper + + * sysdeps/sparc/sparc32/sparcv9/Dist: Add hp-timing.c. + * sysdeps/sparc/sparc64/Dist: Add hp-timing.c. + + * libio/Makefile (distribute): Add fd_to_filename.h. + +2001-04-05 David S. Miller + + Add hp-timing support for sparcv9/sparc64 targets. + * sysdeps/sparc/sparc32/sparcv9/hp-timing.c: New file + * sysdeps/sparc/sparc32/sparcv9/hp-timing.h: New file + * sysdeps/sparc/sparc64/hp-timing.c: New file + * sysdeps/sparc/sparc64/hp-timing.h: New file + * sysdeps/sparc/sparc32/sparcv9/Makefile: Build hp-timing. + * sysdeps/sparc/sparc64/Makefile: Likewise. + +2001-04-09 Jakub Jelinek + + * sysdeps/generic/fd_to_filename.h: New file. + * sysdeps/unix/sysv/linux/fd_to_filename.h: New file. + * libio/freopen.c (freopen): If FILENAME is NULL, try to get + filename from the open file descriptor. + * libio/freopen64.c (freopen64): Likewise. + +2001-04-09 Bruno Haible + + * misc/error.c (error): fflush stdout also if + error_print_progname != NULL. + (error_at_line): Likewise. + +2001-04-07 Bruno Haible + + * intl/gettextP.h (struct loaded_domain): Add codeset_cntr field. + (struct binding): Add codeset_cntr field. + (_nl_load_domain): Add domainbinding argument. + (_nl_init_domain_conv, _nl_free_domain_conv): New declarations. + (_nl_find_msg): New declaration, moved here from loadinfo.h. + * intl/loadinfo.h (struct loaded_l10nfile): Remove domainbinding field. + (_nl_make_l10nflist): Remove domainbinding argument. + (_nl_find_msg): Move declaration to gettextP.h. + * intl/bindtextdom.c (set_binding_values): Initialize ->codeset_cntr + to 0. Increment it when ->codeset is changed. + * intl/dcigettext.c (DCIGETTEXT): Pass binding to _nl_find_msg. + (_nl_find_msg): Add domainbinding argument. Reinitialize the converter + if domainbinding->codeset_cntr has been incremented. + * intl/finddomain.c (_nl_find_domain): Don't pass domainbinding to + _nl_make_l10nflist(). Pass it to _nl_load_domain() instead. + * intl/l10nflist.c (_nl_make_l10nflist): Remove domainbinding argument. + * intl/loadmsgcat.c (_nl_init_domain_conv): New function, extracted + from _nl_load_domain. Append //TRANSLIT also when using libiconv. + (_nl_free_domain_conv): New function, extracted from _nl_unload_domain. + (_nl_load_domain): Add domainbinding argument. Call + _nl_init_domain_conv. + (_nl_unload_domain): Call _nl_free_domain_conv. + * intl/Makefile (distribute): Add tst-codeset.sh, tstcodeset.po. + (test-srcs): Add tst-codeset. + (tests): Depend on tst-codeset.out. + (tst-codeset.out): New rule. + (CFLAGS-tst-codeset.c): New variable. + * intl/tst-codeset.sh: New file. + * intl/tstcodeset.po: New file. + * intl/tst-codeset.c: New file. + * locale/findlocale.c (_nl_find_locale): Update _nl_make_l10nflist + calls. + +2001-04-07 Roland McGrath + + * mach/msgserver.c (__mach_msg_server_timeout): Add an assert. + +2001-03-31 Roland McGrath + + * sysdeps/mach/hurd/fork.c: Skip NEWPROC just like NEWTASK when + copying send rights into child. When we hit our name for our proc + port, just copy NEWPROC directly instead of repeating proc_task2proc + to install the child's port. + +2001-04-08 Roland McGrath + + * Makeconfig ($(common-objpfx)soversions.i): Grok entries with DEFAULT + in second column, to provide default values for third column. + * shlib-versions: Add comments about using DEFAULT in second column. + (s390x-.*-linux.*): Replace individual entries with a DEFAULT entry. + (cris-.*-linux.*): Likewise. + +2001-04-09 Ulrich Drepper + + * Makefile (distribute): Add scripts/documented.sh. + * scripts/documented.sh: New file. + +2001-04-08 Hans-Peter Nilsson + + * sysdeps/unix/sysv/linux/cris/Dist: New file. + * sysdeps/unix/sysv/linux/cris/Makefile: New file. + * sysdeps/unix/sysv/linux/cris/_G_config.h: New file. + * sysdeps/unix/sysv/linux/cris/bits/fcntl.h: New file. + * sysdeps/unix/sysv/linux/cris/bits/mman.h: New file. + * sysdeps/unix/sysv/linux/cris/bits/resource.h: New file. + * sysdeps/unix/sysv/linux/cris/brk.c: New file. + * sysdeps/unix/sysv/linux/cris/chown.c: New file. + * sysdeps/unix/sysv/linux/cris/clone.S: New file. + * sysdeps/unix/sysv/linux/cris/fchown.c: New file. + * sysdeps/unix/sysv/linux/cris/fcntl.c: New file. + * sysdeps/unix/sysv/linux/cris/fxstat.c: New file. + * sysdeps/unix/sysv/linux/cris/getegid.c: New file. + * sysdeps/unix/sysv/linux/cris/geteuid.c: New file. + * sysdeps/unix/sysv/linux/cris/getgid.c: New file. + * sysdeps/unix/sysv/linux/cris/getgroups.c: New file. + * sysdeps/unix/sysv/linux/cris/getresgid.c: New file. + * sysdeps/unix/sysv/linux/cris/getresuid.c: New file. + * sysdeps/unix/sysv/linux/cris/getrlimit.c: New file. + * sysdeps/unix/sysv/linux/cris/getrlimit64.c: New file. + * sysdeps/unix/sysv/linux/cris/getuid.c: New file. + * sysdeps/unix/sysv/linux/cris/lchown.c: New file. + * sysdeps/unix/sysv/linux/cris/lockf64.c: New file. + * sysdeps/unix/sysv/linux/cris/lxstat.c: New file. + * sysdeps/unix/sysv/linux/cris/mmap.S: New file. + * sysdeps/unix/sysv/linux/cris/mmap64.S: New file. + * sysdeps/unix/sysv/linux/cris/msgctl.c: New file. + * sysdeps/unix/sysv/linux/cris/profil-counter.h: New file. + * sysdeps/unix/sysv/linux/cris/register-dump.h: New file. + * sysdeps/unix/sysv/linux/cris/semctl.c: New file. + * sysdeps/unix/sysv/linux/cris/setegid.c: New file. + * sysdeps/unix/sysv/linux/cris/seteuid.c: New file. + * sysdeps/unix/sysv/linux/cris/setfsgid.c: New file. + * sysdeps/unix/sysv/linux/cris/setfsuid.c: New file. + * sysdeps/unix/sysv/linux/cris/setgid.c: New file. + * sysdeps/unix/sysv/linux/cris/setgroups.c: New file. + * sysdeps/unix/sysv/linux/cris/setregid.c: New file. + * sysdeps/unix/sysv/linux/cris/setresgid.c: New file. + * sysdeps/unix/sysv/linux/cris/setresuid.c: New file. + * sysdeps/unix/sysv/linux/cris/setreuid.c: New file. + * sysdeps/unix/sysv/linux/cris/setrlimit.c: New file. + * sysdeps/unix/sysv/linux/cris/setuid.c: New file. + * sysdeps/unix/sysv/linux/cris/shmctl.c: New file. + * sysdeps/unix/sysv/linux/cris/socket.S: New file. + * sysdeps/unix/sysv/linux/cris/sys/ucontext.h: New file. + * sysdeps/unix/sysv/linux/cris/syscall.S: New file. + * sysdeps/unix/sysv/linux/cris/sysdep.S: New file. + * sysdeps/unix/sysv/linux/cris/sysdep.h: New file. + * sysdeps/unix/sysv/linux/cris/vfork.S: New file. + * sysdeps/unix/sysv/linux/cris/xstat.c: New file. + +2001-04-08 Hans-Peter Nilsson + + * sysdeps/cris/Dist: New file. + * sysdeps/cris/Implies: New file. + * sysdeps/cris/Makefile: New file. + * sysdeps/cris/__longjmp.S: New file. + * sysdeps/cris/_mcount.S: New file. + * sysdeps/cris/bits/endian.h: New file. + * sysdeps/cris/bits/setjmp.h: New file. + * sysdeps/cris/bits/string.h: New file. + * sysdeps/cris/dl-machine.h: New file. + * sysdeps/cris/elf/start.S: New file. + * sysdeps/cris/machine-gmon.h: New file. + * sysdeps/cris/memcopy.h: New file. + * sysdeps/cris/memusage.h: New file. + * sysdeps/cris/setjmp.S: New file. + * sysdeps/cris/sysdep.h: New file. + * sysdeps/cris/wordcopy.c: New file. + +2001-04-08 Hans-Peter Nilsson + + * elf/elf.h: Add new relocations for CRIS. + +2001-04-08 Hans-Peter Nilsson + + * shlib-versions: Add cases for Linux on CRIS. + +2001-04-08 Hans-Peter Nilsson + + * configure.in (ASM_LINE_SEP tests): Handle CRIS assembly, with + ';' for comments and '@' for line separator. + +2001-04-08 Hans-Peter Nilsson + + * sysdeps/unix/sysv/linux/hppa/sysdep.h (INLINE_SYSCALL): Fix + typo; s/==/=/ for assignment. + +2001-04-08 Hans-Peter Nilsson + + * malloc/Makefile: Correct comment; mtrace is Perl, not AWK. + +2001-04-08 Hans-Peter Nilsson + + * iconv/gconv_simple.c (internal_ucs4_loop_unaligned): Check for + empty input before checking full output. + +2001-04-08 Hans-Peter Nilsson + + * iconv/gconv.c (__gconv): Don't derefer parameter cd before + checking if == -1L. + +2001-04-08 Ulrich Drepper + + * inet/rexec.c (rexec_af): Avoid calling perror with errno being set. + +2001-04-07 Stephen L Moshier + + * sysdeps/ieee754/ldbl-128/e_logl.c: Correct infinity and NaN + return values. + +2001-04-07 Ulrich Drepper + + * stdlib/tst-setcontext.c (main): Add a test for setcontext. + + * sysdeps/unix/sysv/linux/i386/getcontext.S: New file. + * sysdeps/unix/sysv/linux/i386/setcontext.S: New file. + * sysdeps/unix/sysv/linux/i386/makecontext.S: New file. + * sysdeps/unix/sysv/linux/i386/swapcontext.S: New file. + * sysdeps/unix/sysv/linux/i386/ucontext_i.h: New file. + * sysdeps/unix/sysv/linux/i386/Dist: Add ucontext_i.h. + +2001-04-07 Andreas Jaeger + + * sysdeps/ieee754/ldbl-96/e_j1l.c (__ieee754_y1l): Use sincos + instead of separate sin and cos. + (__ieee754_j1l): Likewise. + +2001-04-06 Ulrich Drepper + + * sysdeps/ia64/abort-instr.h: New file. Code by David Mosberger. + + * sysdeps/ia64/atomicity.h: New file. Copied from libstdc++. + + * sysdeps/i386/i486/atomicity.h: Clean up the asms. + + * sysdeps/generic/e_scalb.c: Don't use FE_INVALID unless it's + available. + * sysdeps/generic/e_scalbf.c: Likewise. + * sysdeps/generic/e_scalbl.c: Likewise. + Patch by Mark Hatle . + +2001-04-05 David S. Miller + + * sysdeps/sparc/abort-instr.h: New file. + +2001-04-05 Matt Wilson + + * sysdeps/unix/sysv/linux/alpha/getsysstats.c (GET_NPROCS_PARSER): + added code to parse new 2.4 format. + (GET_NPROCS_CONF_PARSER): Likewise. + +2001-04-05 David S. Miller + + * scripts/config.sub: Recognize sparcv9b like sparcv9. + * configure.in: Add sparcv9b. + * sysdeps/sparc/sparc32/sparcv9b/Implies: New file + * sysdeps/sparc/sparc32/sparcv9b/memcpy.S: New file + * sysdeps/sparc/sparc64/sparcv9b/memcpy.S: New file + +2001-04-06 David Mosberger + + * stdlib/tst-setcontext.c: Move st2[] to global scope. + (f2): Verify that stack pointer is inside st2[]. + + * sysdeps/unix/sysv/linux/ia64/getcontext.S: It helps to save r12. + * sysdeps/unix/sysv/linux/ia64/setcontext.S: It helps to restore r12. + +2001-04-06 Ulrich Drepper + + * timezone/antarctica: Update from tzdata2001b. + * timezone/asia: Likewise. + * timezone/australasia: Likewise. + * timezone/europe: Likewise. + * timezone/northamerica: Likewise. + + * iconv/iconv_open.c: Move strip and upstr definitions... + * iconv/gconv_charset.h: ...here. New file. + * iconv/gconv_db.c (once): Move to file level. + (do_lookup_alias): Split out from __gconv_find_transform. + (__gconv_find_transform): Call do_lookup_alias. + (__gconv_loopup_alias): New function. + * locale/langinfo.h: Define _NL_*_CODESET values for all categories + but LC_CTYPE. + * locale/categories.def: Add entries for new _NL_*_CODESET values. + * locale/C-ctype.c: Use _nl_C_codeset to initialize CODESET entry. + * locale/C-address.c: Initialize _NL_*_CODESET element. + * locale/C-collate.c: Likewise. + * locale/C-identification.c: Likewise. + * locale/C-measurement.c: Likewise. + * locale/C-messages.c: Likewise. + * locale/C-monetary.c: Likewise. + * locale/C-name.c: Likewise. + * locale/C-numeric.c: Likewise. + * locale/C-paper.c: Likewise. + * locale/C-telephone.c: Likewise. + * locale/C-time.c: Likewise. + * locale/localeinfo.h: Declare _nl_C_codeset. + * locale/C_name.c: Define _nl_C_codeset. + * locale/findlocale.c: Before accepting locale check that the used + charset does not conflict with what the locale name said. + * locale/programs/ld-address.c: Emit codeset information. + * locale/programs/ld-collate.c: Likewise. + * locale/programs/ld-identification.c: Likewise. + * locale/programs/ld-measurement.c: Likewise. + * locale/programs/ld-messages.c: Likewise. + * locale/programs/ld-monetary.c: Likewise. + * locale/programs/ld-name.c: Likewise. + * locale/programs/ld-numeric.c: Likewise. + * locale/programs/ld-paper.c: Likewise. + * locale/programs/ld-telephone.c: Likewise. + * locale/programs/ld-time.c: Likewise. + + * localedata/tests-mbwc/tst_funcs.h (TST_HEAD_LOCALE): It is an error + if the locale data couldn't be found. + + * string/Makefile: Define tst-strxfrm-ENV. + + * ysdeps/unix/sysv/linux/ia64/getcontext.S: Fix comment. + +2001-04-06 Andreas Jaeger + + * include/sys/profil.h: New file. + + * dlfcn/modatexit.c: Add prototypes to silence GCC. + * dlfcn/modcxaatexit.c: Likewise. + * elf/globalmod1.c: Likewise. + +2001-04-05 David S. Miller + + * elf/elf.h (HWCAP_SPARC_ULTRA3): Define it. + * sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h: Add it to + capability flags table and HWCAP_IMPORTANT, increase + _DL_HWCAP_COUNT to 6. + * sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h: Likewise. + +2001-04-04 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/makecontext.c (__makecontext): Fix + initialization of stack_end (bug reported by Zheng Gengbin + ). + +2001-04-05 Ulrich Drepper + + * sysdeps/i386/fpu/libm-test-ulps: Relax errors for asinl. + +2001-04-05 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/s390-64/bits/socket.h: New file. + +2001-04-05 Ulrich Drepper + + * sysdeps/ieee754/ldbl-96/e_asinl.c: Correct handling of +-Inf. + * sysdeps/i386/fpu/e_asinl.S: Removed. Too inaccurate. + + * login/tst-utmp.c: Make file usable again in tst-utmpx.c. + +2001-04-04 Ulrich Drepper + + * sysdeps/unix/sysv/aix/dl-libc.c: Don't use the ELF version, + define simple replacements here. Patch by Michael Keezer. + + * sysdeps/ieee754/ldbl-128/e_logl.c: New file. + * sysdeps/ieee754/ldbl-96/e_asinl.c: New file. + Contributed by Stephen L Moshier . + + * posix/fnmatch_loop.c: Undefine NEW_PATTERN when it is not used + anymore. + +2001-04-01 Andreas Jaeger + + * sysdeps/generic/s_nextafter.c (NO_LONG_DOUBLE): Add nexttowardl + alias. + + * sysdeps/generic/s_fma.c (NO_LONG_DOUBLE): Add fmal alias. + +2001-04-04 Ulrich Drepper + + * sysdeps/unix/sysv/linux/s390/s390-64/Dist: Add ucontext_i.h. + * sysdeps/unix/sysv/linux/s390/s390-32/Dist: Likewise. + +2001-04-04 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/s390-32/getcontext.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-32/makecontext.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-32/setcontext.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-32/ucontext_i.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/getcontext.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/makecontext.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/setcontext.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/ucontext_i.h: New file. + * sysdeps/unix/sysv/linux/s390/swapcontext.c: New file. + +2001-04-04 Andreas Jaeger + + * sysdeps/powerpc/dl-machine.h (ELF_MACHINE_NO_REL): Move to right + place. + +2001-04-04 Ulrich Drepper + + * sunrpc/rpc_scan.c (symbols): Add entry for HYPER. + * sunrpc/rpc_scan.h (enum tok_kind): Add TOK_HYPER. + * sunrpc/rpc_parse.c (get_type): Handle TOK_HYPER. + (unsigned_dec): Likewise. + Patch by atai@jezebel.dreamhost.com. + + * nis/nss_nis/nis-service.c (_nss_nis_getservbyname_r): Pass + pointer to int as last parameter of yp_match. + Patch by kanazawa@flab.fujitsu.co.jp. + +2001-04-03 Ulrich Drepper + + * resolv/netdb.h (gai_strerror): Make return value const. + * sysdeps/generic/gai_strerror.c (gai_strerror): Likewise. + * sysdeps/posix/gai_strerror.c (gai_strerror): Likewise. + Add strings for new error values. + +2001-03-29 Michael Keezer + + * posix/tst-gnuglob.c: Added ifdef _DIRENT_HAVE_D_TYPE. + * login/tst-utmp.c: Handle case where ut_tv is not available but + ut_time is. + * sysdeps/unix/sysv/aix/utmpx.h: New file. + * sysdeps/unix/sysv/aix/bits/utmpx.h: Added + _HAVE_UT_TYPE/PID/ID/TV/HOST defines. + * sysdeps/unix/sysv/aix/libc-start.c: Removed temp code and made stub. + * sysdeps/unix/sysv/aix/gettimeofday.c: New file added routines + to access RTCU timer reg. + * sysdeps/unix/sysv/aix/Makefile: Remove /usr/lib/crt0.o + added dl-libc, dl-open,dl-sym, dl-close to misc. + * sysdeps/unix/sysv/aix/start.c: New file. Start code. + * sysdeps/unix/sysv/aix/dlldr.h: New file. AIX __loadx defines. + * sysdeps/unix/sysv/aix/dl-close.c: New file. AIX dl-close. + * sysdeps/unix/sysv/aix/dl-open.c: New file. AIX dl-open. + * sysdeps/unix/sysv/aix/dl-sym.c: New file. AIX dl-sym. + * sysdeps/unix/sysv/aix/dl-libc.c: New file. libc_dl-xxx support. + * sysdeps/generic/strtoll.c: Added SHLIB_COMPAT(libc,GLIBC_2_0, + GLIBC_2_2). + * sysdeps/generic/strtoull.c: Likewise. + * sysdeps/powerpc/ppc-mcount.S: Added nop after bl instruction. + * sysdeps/unix/sysv/aix/powerpc/memset.c: New file to include + sysdeps/generic/memset.c. + * sysdeps/unix/sysv/aix/getpeername.c: Define __getpeername. + +2001-04-03 Ulrich Drepper + + * iconv/Makefile (CFLAGS-charmap.c): Add -DNEED_NULL_POINTER. + * locale/programs/charmap.c: Define null_pointer if + NEED_NULL_POINTER is defined. + + * misc/dirname.c (dirname): Handle multiple slashes correctly. + +2001-04-03 Martin Schwidefsky + + * sysdeps/s390/s390-64/initfini.c: Fix __gmon_start__ GOT access. + +2001-04-03 Martin Schwidefsky + + * sysdeps/s390/s390-32/bcopy.S: Optimize for speed. + * sysdeps/s390/s390-64/bcopy.S: Likewise. + * sysdeps/s390/s390-32/mempcy.S: Likewise. + * sysdeps/s390/s390-64/memcpy.S: Likewise. + +2001-04-02 Bruno Haible + + * manual/message.texi (Advanced gettext functions): More specific + syntax in the plural formula examples. + +2001-04-02 Franz Sirl + + * sysdeps/powerpc/atomicity.h: Silence warnings. + * sysdeps/powerpc/dl-machine.h: Likewise. + * sysdeps/powerpc/register-dump.h: Likewise. + * sysdeps/powerpc/fpu/s_lrint.c: Likewise. + +2001-04-02 Andreas Jaeger + + * misc/tst-dirname.c (main): Add more tests, derived from a bug + report by Michael Kerrisk . + +2001-04-01 Andreas Jaeger + + * debug/xtrace.sh (pcprofileso): Use SLIBDIR since libpcprofile.so + is installed there. + * malloc/memusage.sh (memusageso): Likewise for libmemusage.so. + +2001-04-01 H.J. Lu + + * posix/annexc.c (macrofile): Renamed from TMPFILE and set to + tmpnam (NULL). + * stdlib/isomac.c (macrofile): Likewise. + +2001-03-30 Thorsten Kukuk + + * inet/rcmd.c: Allow AF_UNSPEC as parameter. + * nis/ypclnt.c (yp_all): Print error message only at last try, + check for protocoll error only if we don't have a network error. + +2001-04-02 Andreas Schwab + + * resolv/res_data.c (res_isourserver): Fix cast. + +2001-04-02 Andreas Jaeger + + * sysdeps/unix/sysv/linux/hppa/umount.c: Add prototype for + __umount2. + + * sysdeps/i386/dl-machine.h (RTLD_START): Don't use multi-line + strings. + (ELF_MACHINE_RUNTIME_TRAMPOLINE): Likewise. + + * sysdeps/ieee754/dbl-64/uroot.h: Add missing braces arount + initializers. + * sysdeps/ieee754/dbl-64/e_sqrt.c (__ieee754_sqrt): Likewise. + + * elf/rtld.c (print_statistics)[!HP_TIMING_NONAVAIL]: Avoid + warning about unused variable. + + * string/string.h (strndupa): Add cast for C++ conformance. + (strdupa): Likewise. + Fixes PR libc/2173, reported by tbrowder@home.com. + +2001-03-30 Roland McGrath + + * sysdeps/mach/hurd/Makefile ($(link-rpcuserlibs)): Don't append + options after $(build-module), which is no longer a single command. + (LDFLAGS-link-rpcuserlibs): New variable to hold those options. + (LDFLAGS-libmachuser-link.so, LDFLAGS-libhurduser-link.so): New + variables using it. Reported by Mark Kettenis . + +2001-03-11 Roland McGrath + + * elf/rtld.c (dl_main): Add cast to quiet warning. + * elf/dl-load.c (_dl_map_object_from_fd): Likewise. + * iconv/gconv_conf.c (__gconv_get_path): Likewise. + (__gconv_read_conf): Likewise. + * iconv/gconv_db.c (gen_steps): Likewise. + (__gconv_find_transform): Likewise. + * locale/programs/charmap-dir.c (fopen_uncompressed): Likewise. + (fopen_uncompressed): Use const in second argument's type. + +2001-03-11 Roland McGrath + + * sysdeps/mach/hurd/dl-sysdep.c (__writev): New function. + + * mach/mach_error.h: Fix ancient #endif syntax. + * hurd/hurdmalloc.c: Likewise. + + * sysdeps/generic/atomicity.h (exchange_and_add, atomic_add, + compare_and_swap): Add volatile qualifier to first arg, to bring + these prototypes in line with all the other implementations. + Add a #warning to remind the builder that these are not atomic. + +2001-03-04 Roland McGrath + + * hurd/vpprintf.c (vpprintf) [USE_IN_LIBIO]: Use innermore first + member of TEMP_F so its type is _IO_FILE * as expected. + + * hurd/fopenport.c (seekio): Conditionalize type of POS argument + on [USE_IN_LIBIO]. Check the value for overflow, since for libio + it might exceed off_t's range. + +2001-02-25 Roland McGrath + + * sysdeps/mach/hurd/sysd-stdio.c (__stdio_reopen): Use prototype. + * sysdeps/unix/bsd/getpt.c (__posix_openpt): Likewise. + + * sysdeps/mach/hurd/i386/intr-msg.h (SYSCALL_EXAMINE): Make this a + macro instead of an inline function, + (MSG_EXAMINE): Likewise. + + * hurd/hurd/ioctl.h (_HURD_HANDLE_IOCTLS_1): Remove extraneous ##. + + * hurd/get-host.c: Include for decls of built-ins. + * hurd/hurdchdir.c: Likewise. + * sysdeps/mach/hurd/i386/sigreturn.c: Likweise. + * sysdeps/mach/hurd/opendir.c: Likewise. + + * mach/mach_init.c: Include for _exit decl. + + * mach/errsystems.awk: Give output file a trailing newline. + + * mach/Machrules (MIG): Prepend CC='${CC}' to the mig command, so that + the script will use our compiler for the cpp stage. + + With --enable-all-warnings we get a whole bunch of warnings, + and these are just a few fixes; there are more needed to silence it. + * mach/mach/mig_support.h (__mig_strncpy, mig_strncpy): Add extern + decls before extern inline defns to quiet gcc warning. + * hurd/hurd/threadvar.h (__hurd_threadvar_location_from_sp): Likewise. + * sysdeps/mach/i386/machine-sp.h (__thread_stack_pointer): Likewise. + +2001-03-31 Andreas Jaeger + + * sysdeps/unix/sysv/linux/net/if_arp.h (ARPHRD_RAWHDLC): Added. + (ARPHRD_HDLC): Define as alias for ARPHRD_CISCO. + (ARPHRD_CISCO): New. + Changes from Linux 2.4.3. + +2001-03-30 Isamu Hasegawa + + * posix/regex.c: Avoid an access violation if malloc failes. + +2001-03-30 Andreas Jaeger + + * sysdeps/alpha/ldiv.S (ldiv): Add alias for imaxdiv. + +2001-03-29 Ulrich Drepper + + * posix/regex.c: Remove unnecessary ifs. + + * math/bits/mathcalls.h: Remove infnan declaration. + +2001-03-29 H.J. Lu + + * include/endian.h: Define BIG_ENDI, LITTLE_ENDI, HIGH_HALF, + and LOW_HALF only if _LIBC is defined and _ISOMAC is not defined. + * stdlib/isomac.c (fmt): Define _LIBC and _ISOMAC. + . +2001-03-29 Isamu Hasegawa + + * posix/regex.c: Fix typo and add a sentinel. + +2001-03-29 Ulrich Drepper + + * sysdeps/unix/sysv/linux/shm_open.c: Open new file always with + O_NOFOLLOW. Suggested by Christoph Roland. + +2001-03-27 Martin Schwidefsky + + * sysdeps/s390/bits/string.h: New unified 31/64 bit string.h. + * sysdeps/s390/s390-32/bits/string.h: Remove. + * sysdeps/s390/s390-64/bits/string.h: Remove. + * sysdeps/s390/s390-32/strcmp.S: New file. + * sysdeps/s390/s390-64/strcmp.S: New file. + +2001-03-27 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: Fix typo. + * sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h: Likewise. + +2001-03-27 Ulrich Drepper + + * version.h (VERSION): Bump to 2.2.3. + + * stdlib/isomac.c (fmt): Don't define _LIBC. + * include/endian.h: Define BIG_ENDI, LITTLE_ENDI, HIGH_HALF, and + LOW_HALF only if _LIBC is defined. + + * sysdeps/i386/fpu/libm-test-ulps: Slight adjustment of yn() error. + + * posix/fnmatch_loop.c (FCT): Handle !() after * special like @() + and +(). + * posix/tst-fnmatch.input: Add test cases for matching empty strings. + + * sysdeps/ieee754/dbl-64/endian.h: Removed. Move definitions... + * include/endian.h: ...to here. + +2001-03-27 kaz Kojima + + * sysdeps/sh/sys/ucontext.h (NFREG): Rename to NFPREG. + * sysdeps/unix/sysv/linux/sh/sys/ucontext.h (NFREG): Likewise. + +2001-03-27 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/ldconfig.h: Fix typo. + +2001-03-26 Ulrich Drepper + + * sysdeps/ia64/fpu/Dist: Add new files to distribute. + * sysdeps/unix/sysv/linux/s390/s390-64/Dist: Likewise. + * sysdeps/unix/sysv/linux/ia64/Dist: Likewise. + + * gmon/Makefile (headers): Add sys/profil.h. + +2001-03-18 Andreas Jaeger + + * manual/install.texi (Tools for Compilation): Advise to use GCC + 2.95.3. + (Supported Configurations): Mention s390x. + +2001-03-26 Ben Collins + + * sysdeps/unix/sysv/linux/mips/bits/mman.h: Add MAP_* and MADV_* + defines to match other architectures. + +2001-03-26 Ulrich Drepper + + * libio/Makefile (tests): Add tst-ext. + * libio/tst-ext.c: New file. + + * libio/iosetvbuf.c (_IO_setvbuf): Clear line buffer flag for _IONBF. + +2001-03-25 Ulrich Drepper + + Add changes which were in this form in the original patch by + Eric Norum . + * include/rpc/rpc.h: Remove svc_fdset, rpc_createerr, svc_pollfd, and + svc_max_pollfd. + * sunrpc/rpc/rpc.h: Declare __rpc_thread_svc_fdset, + __rpc_thread_createerr, __rpc_thread_svc_pollfd, and + __rpc_thread_svc_max_pollfd. + Define svc_fdset, get_rpc_createerr, svc_pollfd, and + svc_max_pollfd. + * sunrpc/rpc_thread.c: Handle first thread special, it uses the + global variables. + Define __rpc_thread_svc_fdset, __rpc_thread_createerr, + __rpc_thread_svc_pollfd, and __rpc_thread_svc_max_pollfd. + * sunrpc/Versions [libc] (GLIBC_2.2.3): Export __rpc_thread_svc_fdset, + __rpc_thread_createerr, __rpc_thread_svc_pollfd, and + __rpc_thread_svc_max_pollfd. + * sunrpc/clnt_gen.c: Replace use of rpc_createerr by call to + get_rpc_createerr. + * sunrpc/clnt_perr.c: Likewise. + * sunrpc/clnt_simp.c: Likewise. + * sunrpc/clnt_tcp.c: Likewise. + * sunrpc/clnt_udp.c: Likewise. + * sunrpc/clnt_unix.c: Likewise. + * sunrpc/pm_getport.c: Likewise. + + * sysdeps/unix/sysv/linux/i386/getgroups.c (__getgroups): getgroups32 + syscall checks for negative n so don't test here as well. + +2001-03-23 Jes Sorensen + + * sysdeps/unix/sysv/linux/ia64/sysdep.h (ENTRY): Moved to ... + * sysdeps/ia64/sysdep.h: ...here. + + * sysdeps/ia64/sysdep.h (LOCAL_ENTRY): Define. + * sysdeps/ia64/sysdep.h (LOCAL_LEAF): Define. + + * sysdeps/ia64/_mcount.S (_mcount_ret_helper): Use LOCAL_LEAF() to + declare instead of LEAF(). Suggestion from David Mosberger. + +2001-03-21 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/sysdep.h (CALL_MCOUNT): Add unwind + directives. + (PSEUDO): Drop .psr and .lsb directives. + + * sysdeps/unix/sysv/linux/ia64/setjmp.S: Ditto. Add unwind + directives. + * sysdeps/unix/sysv/linux/ia64/sysdep.S: Ditto. + + * sysdeps/ia64/elf/start.S: Misc cleanup: remove .psr and .lsb + directives etc. + * sysdeps/unix/sysv/linux/ia64/brk.S: Ditto. + * sysdeps/unix/sysv/linux/ia64/__longjmp.S: Ditto. + * sysdeps/ia64/_mcount.S: Remove .psr and .lsb directives (no + longer needed). Add unwind directives. + + * sysdeps/ia64/sysdep.h: Define ASM_UNW_PRLG_RP, ASM_UNW_PRLG_PFS, + ASM_UNW_PRLG_PSP, ASM_UNW_PRLG_PR, and ASM_UNW_PRLG_GRSAVE. + +2001-03-21 Paul Eggert + + * posix/regex.h (RE_INVALID_INTERVAL_ORD): New macro. + (RE_SYNTAX_POSIX_EGREP): Use it. + * posix/regex.c (regex_compile): Implement it. + +2001-03-21 Paul Eggert + + * posix/regex.c (GET_UNSIGNED_NUMBER): Check for overflow. + Rewrite to avoid duplicate code. + +2001-03-21 H.J. Lu + + * elf/Makefile (tests): Don't depend on $(objpfx)tst-pathopt.out + for cross-compiling. + ($(objpfx)tst-pathopt.out): Undo the last change. + +2001-03-24 Mark Kettenis + + * sysdeps/mach/hurd/i386/bits/sigcontext.h (sc_sp, sc_fp, sc_pc, + sc_ps): Define as aliases for sc_uesp, sc_ebl, sc_eip and sc_efl. + + * sysdeps/mach/hurd/i386/init-first.c: Include . + (_dl_argv): Declare. + (init) [SHARED]: Readjust _dl_argv if we switched to a new stack. + +2001-03-22 Andreas Jaeger + + * iconvdata/Makefile (generated): Add iconv-test.xxx. + + * posix/Makefile (generated): Add bug-regex2.mtrace and + bug-regex2-mem. + +2001-03-21 Ulrich Drepper + + * csu/version.c (__gnu_get_libc_release): Add prototype. + (__gnu_get_libc_version): Likewise. + * include/gnu/libc-version.h: Remove prototypes for not exported + functions. + +2001-03-21 Jes Sorensen + + * sysdeps/unix/sysv/linux/ia64/makecontext.c: Include libintl.h + for internationalized printfs to work. + +2001-03-09 Bruno Haible + + * intl/dcigettext.c (transmem_block_t): Change to unsigned char, to + avoid compiler warning. + (_nl_find_msg): Add casts to avoid compiler warnings. + +2001-03-21 Ulrich Drepper + + * gmon/Makefile (routines): Add sprofil. + (tests): Add tst-sprofil. + (noprof): Add sprofil. + * gmon/Versions [libc] (GLIBC_2.2.3): Add sprofil. + +2001-03-20 David Mosberger + + * sysdeps/generic/sprofil.c: New file. + * sysdeps/posix/sprofil.c: New file. + * gmon/tst-sprofil.c: New file. + * gmon/sys/profil.h: New file. + +2001-03-20 Andreas Schwab + + * include/unistd.h: Adjust prototype of __gethostname. + +2001-03-20 Jakub Jelinek + + * sysdeps/sparc/stackinfo.h: New file. + +2001-03-21 Andreas Jaeger + + * elf/global.c (main): Use proper prototype. + +2001-03-20 Ulrich Drepper + + * sunrpc/Makefile (routines): Add rpc_thread. + (CPPFLAGS): Add -D_RPC_THREAD_SAFE. + * sunrpc/rpc_thread.c: New file. + * sunrpc/Versions [libc] (GLIBC_2.2.3): Export __rpc_thread_destroy. + * sunrpc/auth_none.c: Don't use global variables. Access state in + thread-local storage. + * sunrpc/clnt_perr.c: Likewise. + * sunrpc/clnt_raw.c: Likewise. + * sunrpc/clnt_simp.c: Likewise. + * sunrpc/key_call.c: Likewise. + * sunrpc/rpc_common.c: Likewise. + * sunrpc/svc.c: Likewise. + * sunrpc/svc_raw.c: Likewise. + * sunrpc/svc_simple.c: Likewise. + * sunrpc/svcauth_des.c: Likewise. + * hurd/hurd/threadvar.h (enum __hurd_threadvar_index): Add + _HURD_THREADVAR_RPC_VARS. + * sysdeps/generic/bits/libc-tsd.h: Mention _LIBC_TSD_KEY_RPC_VARS. + * include/rpc/rpc.h: Define data structures for internal thread-local + "global" variables. + Based on patches by Eric Norum . + + * elf/dl-load.c: Various little optimizations. + + * sysdeps/unix/sysv/linux/pathconf.c (__pathconf): Return + LINUX_LINK_MAX only if the statfs function is not implemented for + the filesystem. + + * sysdeps/unix/sysv/linux/fpathconf.c (__fpathconf): Return + LINUX_LINK_MAX only if the fstatfs function is not implemented for + the filesystem. + +2001-03-19 Ulrich Drepper + + * elf/dl-dst.h (DL_DST_COUNT): Add __builtin_expect. + + * elf/dl-load.c (_dl_dst_count): Make DST recognition more robust. + (_dl_dst_substitute): Likewise. + +2001-03-17 Bruno Haible + + * intl/loadmsgcat.c (_nl_load_domain) [!_LIBC]: Use fstat, not fstat64. + +2001-03-17 Bruno Haible + + * intl/gettextP.h (struct expression): Add operators lnot, less_than, + greater_than, less_or_equal, greater_or_equal. Replace args2/args3 + union by a 'nargs' counter and an 'args[]' array. + * intl/plural.y: Don't include stdarg.h. + (new_exp): Take an array of arguments instead of varargs. + (new_exp_0, new_exp_1, new_exp_2, new_exp_3): New functions. + ('?' ':'): Make right-associative. + (EQUOP2): New token, replaces '=' and '!'. + (CMPOP2): New token. + (ADDOP2): New token, replaces '+' and '-'. + (MULOP2): New token, replaces '*', '/' and '%'. + ('!'): New token. + (exp): Add rules for CMPOP2 and '!'. Don't call YYABORT. + (start): Call YYABORT here. + (FREE_EXPRESSION): Update. + (yylex): Don't skip "\\n". Recognize comparison and '!' operators. + Update for new token symbols. + * intl/loadmsgcat.c (plvar, plone, germanic_plural, + init_germanic_plural): Update. + * intl/dcigettext.c (_nl_find_msg): Optimize for space. + (plural_eval): Recognize comparison and '!' operators. Optimize for + space. + +2001-03-10 Bruno Haible + + * intl/loadmsgcat.c (_nl_load_domain): locale_charset() doesn't return + NULL any more. + +2001-01-05 Bruno Haible + + * intl/loadmsgcat.c: Include headers needed for alloca(). + (freea): New macro. + (_nl_load_domain): Add fallback code for platforms lacking alloca. + * intl/localealias.c: (ADD_BLOCK, FREE_BLOCK): Remove macros. + (freea): New macro. + (read_alias_file): Simplify fallback code for platforms lacking + alloca. + +2001-01-07 Bruno Haible + + * intl/gettextP.h (__gettextdebug): Remove declaration. + (__gettext_free_exp, __gettextparse): Convert prototype to K&R C + syntax. + (gettext_free_exp__, gettextparse__): New non-libc declarations. + * intl/plural.y [!_LIBC]: Define gettextparse__, gettext_free_exp__, + not __gettextparse, __gettext_free_exp. + * intl/loadmsgcat.c [!_LIBC]: Use gettextparse__, not __gettextparse. + +2001-02-24 Bruno Haible + + * intl/dcigettext.c: Update comment about HAVE_LOCALE_NULL. + +2001-01-05 Bruno Haible + + * intl/loadmsgcat.c (_nl_load_domain): Add fallback code for platforms + lacking strtoul, like SunOS4. + +2001-01-05 Bruno Haible + + * intl/l10nflist.c (_nl_normalize_codeset): Use tolower, not _tolower. + +2001-01-05 Bruno Haible + + * intl/bindtextdom.c (set_binding_values): Convert prototype to K&R C + syntax. + * intl/dcigettext.c (transcmp): Convert to K&R C syntax. + * intl/explodename.c (_nl_find_language): Convert to K&R C syntax. + * intl/plural.y (__gettext_free_exp, yylex, yyerror): Convert to K&R C + syntax. + +2001-01-07 Bruno Haible + + * intl/gettextP.h (gettext__, dgettext__, dcgettext__, textdomain__, + bindtextdomain__, bind_textdomain_codeset__): New declarations, from + old libgettext.h. + * intl/bindtextdom.c: Include libgnuintl.h instead of libgettext.h. + * intl/dcgettext.c: Likewise. + * intl/dcigettext.c: Likewise. + * intl/dcngettext.c: Likewise. + * intl/dngettext.c: Likewise. + * intl/finddomain.c: Likewise. + * intl/ngettext.c: Likewise. + * intl/textdomain.c: Likewise. + * intl/dgettext.c: Include libgnuintl.h instead of libgettext.h. + Include gettextP.h. + * intl/gettext.c: Likewise. Don't include locale.h. + +2001-03-17 Bruno Haible + + * intl/gettextP.h (ZERO): New macro. + (struct binding): Always use ZERO. + * intl/bindtextdom.c (offsetof): Provide fallback for platforms that + lack it, like SunOS4. + (set_binding_values): Use offsetof, not sizeof. + * intl/dcigettext.c (offsetof): Provide fallback for platforms that + lack it, like SunOS4. + (ZERO): Remove macro. + (struct transmem_list): Use ZERO. + (DCIGETTEXT): Use offsetof, not sizeof. + +2001-03-17 Bruno Haible + + * intl/gettextP.h: Include . Include gettext.h, for + nls_uint32. + * intl/bindtextdom.c: Don't include gettext.h. + * intl/dcgettext.c: Likewise. + * intl/dcigettext.c: Likewise. + * intl/dcngettext.c: Likewise. + * intl/dngettext.c: Likewise. + * intl/finddomain.c: Likewise. + * intl/localealias.c: Likewise. + * intl/ngettext.c: Likewise. + * intl/plural.y: Likewise. + * intl/textdomain.c: Likewise. + +2001-03-17 Bruno Haible + + * intl/gettext.h: Don't include . + +2001-03-17 Bruno Haible + + * intl/Makefile (CPPFLAGS): Set LOCALEDIR instead of GNULOCALEDIR. + * intl/dcigettext.c (_nl_default_dirname): Initialize with LOCALEDIR. + +2001-03-19 Ulrich Drepper + + * sysdeps/unix/i386/i686/tempname.c: New file. + + * sysdeps/posix/tempname.c (__gen_tempname): If RANDOM_BITS is + defined use this macro to get some bits of randomness instead of + the usual gettimeofday or time calls. + +2001-03-16 Paul Eggert + + * sysdeps/posix/tempname.c (uint64_t): Define to uintmax_t if + not defined, and if UINT64_MAX is not defined. + +2001-03-19 Ulrich Drepper + + * elf/cache.c: Mark and have translated a few more messages. + +2001-03-19 Martin Schwidefsky + + * elf/cache.c: Add case for FLAG_S390_LIB64. + * sysdeps/generic/ldconfig.h: Add define for FLAG_S390_LIB64. + * sysdeps/unix/sysv/linux/s390/ldconfig.h: New file. + * sysdeps/unix/sysv/linux/s390/readelflib.c: New file. + +2001-03-19 Ulrich Drepper + + * string/Makefile (tests): Add tst-strxfrm. + * string/tst-strxfrm.c: New file. Based on a test case by Paul Eggert. + * string/Depend: New file. + +2001-03-19 Paul Eggert + + * string/strxfrm.c (strxfrm): strxfrm should return 0, not 1, + when given the empty string in nontrivial locales. + +2001-03-17 H.J. Lu + + * manual/Makefile (install): Use $(INSTALL_DATA) instead of + cp to install `dir'. + +2001-03-19 Andreas Schwab + + * Makerules (build-shlib): Make sure exit codes get checked + properly. + +2001-03-18 Ulrich Drepper + + * Makerules (build-shlib): Remove unnecessary slashes introduced in + last change. + + * configure.in: Test for -Bgroup option of linker. + * config.make.in: Define have-Bgroup. + + * conform/data/unistd.h-data: Require gethostname. + * posix/unistd.h: Make gethostname prototype available for + __USE_XOPEN2K. + + * crypt/Makefile: When generating DSO link with libc_nonshared.a. + * debug/Makefile: Likewise. + * dlfcn/Makefile: Likewise. + * hesiod/Makefile: Likewise. + * iconvdata/extra-module.mk: Likewise. + * locale/Makefile: Likewise. + * login/Makefile: Likewise. + * math/Makefile: Likewise. + * nis/Makefile: Likewise. + * nss/Makefile: Likewise. + * resolv/Makefile: Likewise. + * rt/Makefile: Likewise. + +2001-03-17 Ulrich Drepper + + * inet/Makefile (tests): Remove left-over comment. + + * posix/unistd.h (gethostname): Change type of second parameter + back to size_t as per upcoming XPG6. + * sysdeps/unix/sysv/aix/gethostname.c: Change type of second + parameter back to size_t as per upcoming XPG6. + * sysdeps/unix/sysv/sysv4/gethostname.c: Likewise. + * sysdeps/unix/sysv/gethostname.c: Likewise. + * sysdeps/mach/hurd/gethostname.c: Likewise. + * sysdeps/generic/gethostname.c: Likewise. + +2001-03-16 Ulrich Drepper + + * sysdeps/ieee754/ldbl-96/e_gammal_r.c (__ieee754_gammal_r): + Handle NaN here. + + * sysdeps/unix/sysv/linux/ia64/makecontext.c (__makecontext): + Internationalize. + +2001-02-06 Jakub Jelinek + + * elf/dl-load.c (_dl_map_object): Don't test l_opencount when + looking for name matches. + +2001-02-26 Jakub Jelinek + + * sysdeps/generic/sigcontextinfo.h (CALL_SIGHANDLER): Define. + * 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/i386/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/m68k/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/s390/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/sh/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/sigcontextinfo.h: Likewise. + +2001-03-16 Ulrich Drepper + + * sysdeps/ieee754/ldbl-96/s_erfl.c: New file. + Contributed by Stephen L. Moshier . + + * sysdeps/i386/fpu/libm-test-ulps: Adjust for addition of erfl and + erfcl. + * sysdeps/ia64/fpu/libm-test-ulps: Likewise. + +2001-03-16 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h (struct sigcontext): + Drop hack that was needed for 2.1.1 kernel headers. + + * sysdeps/unix/sysv/linux/ia64/ucontext_i.h: New file. + + * sysdeps/unix/sysv/linux/ia64/sys/ucontext.h: Rewrite to make it + overlay with kernel's "struct sigcontext". + + * sysdeps/unix/sysv/linux/ia64/Makefile (sysdep_headers): Add + sys/rse.h for "misc" subdir. + (sysdep_routines): Add __start_context for "stdlib" subdir. + + * sysdeps/unix/sysv/linux/ia64/sys/rse.h: New file (based on + kernel file of the same name). + + * stdlib/Makefile (tests): Add tst-setcontext. + * stdlib/tst-setcontext.c: New file (based on a sample program by + Uli Drepper). + + * sysdeps/unix/sysv/linux/ia64/setcontext.S: New file. + * sysdeps/unix/sysv/linux/ia64/getcontext.S: New file. + * sysdeps/unix/sysv/linux/ia64/__start_context.S: New file. + * sysdeps/unix/sysv/linux/ia64/makecontext.c: New file. + * sysdeps/unix/sysv/linux/ia64/swapcontext.c: New file. + + * sysdeps/unix/sysv/linux/ia64/__longjmp.S (__longjmp): Use extr.u + instead of shift & and. + +2001-03-16 Martin Schwidefsky + + * sysdeps/s390/s390-64/bits/huge_val.h: Move to... + * sysdeps/s390/bits/huge_val.h: ...here. + * sysdeps/s390/s390-32/bit/huge_val.h: Remove. + * sysdeps/s390/s390-64/ffs.c: Move to... + * sysdeps/s390/ffs.c: ...here. + * sysdeps/s390/s390-32/ffs.c: Remove. + +2001-03-16 Jakub Jelinek + + * elf/ldconfig.c (search_dir): Remove bogus diagnostic, instead + update osversion from more recent library. + +2001-03-13 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/Dist: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/Dist: ...here. + * sysdeps/unix/sysv/linux/s390/Makefile: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/Makefile: ...here. + * sysdeps/unix/sysv/linux/s390/Versions: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/Versions: ...here. + * sysdeps/unix/sysv/linux/s390/alphasort64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/alphasort64.c: ...here. + * sysdeps/unix/sysv/linux/s390/bits/fcntl.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/bits/fcntl.h: ...here. + * sysdeps/unix/sysv/linux/s390/bits/mman.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/bits/mman.h: ...here. + * sysdeps/unix/sysv/linux/s390/bits/resource.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/bits/resource.h: ...here. + * sysdeps/unix/sysv/linux/s390/bits/stat.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/bits/stat.h: ...here. + * sysdeps/unix/sysv/linux/s390/chown.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/chown.c: ...here. + * sysdeps/unix/sysv/linux/s390/clone.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/clone.S: ...here. + * sysdeps/unix/sysv/linux/s390/fchown.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/fchown.c: ...here. + * sysdeps/unix/sysv/linux/s390/fcntl.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/fcntl.c: ...here. + * sysdeps/unix/sysv/linux/s390/fxstat.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/fxstat.c: ...here. + * sysdeps/unix/sysv/linux/s390/getdents64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getdents64.c: ...here. + * sysdeps/unix/sysv/linux/s390/getegid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getegid.c: ...here. + * sysdeps/unix/sysv/linux/s390/geteuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/geteuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/getgid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getgid.c: ...here. + * sysdeps/unix/sysv/linux/s390/getgroups.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getgroups.c: ...here. + * sysdeps/unix/sysv/linux/s390/getresgid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getresgid.c: ...here. + * sysdeps/unix/sysv/linux/s390/getresuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getresuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/getrlimit.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getrlimit.c: ...here. + * sysdeps/unix/sysv/linux/s390/getrlimit64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getrlimit64.c: ...here. + * sysdeps/unix/sysv/linux/s390/getuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/getuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/lchown.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/lchown.c: ...here. + * sysdeps/unix/sysv/linux/s390/lockf64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/lockf64.c: ...here. + * sysdeps/unix/sysv/linux/s390/lxstat.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/lxstat.c: ...here. + * sysdeps/unix/sysv/linux/s390/mmap.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/mmap.S: ...here. + * sysdeps/unix/sysv/linux/s390/mmap64.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S: ...here. + * sysdeps/unix/sysv/linux/s390/msgctl.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/msgctl.c: ...here. + * sysdeps/unix/sysv/linux/s390/oldgetrlimit64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/oldgetrlimit64.c: ...here. + * sysdeps/unix/sysv/linux/s390/readdir64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c: ...here. + * sysdeps/unix/sysv/linux/s390/readdir64_r.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c: ...here. + * sysdeps/unix/sysv/linux/s390/register-dump.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/register-dump.h: ...here. + * sysdeps/unix/sysv/linux/s390/scandir64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/scandir64.c: ...here. + * sysdeps/unix/sysv/linux/s390/semctl.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/semctl.c: ...here. + * sysdeps/unix/sysv/linux/s390/setegid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setegid.c: ...here. + * sysdeps/unix/sysv/linux/s390/seteuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/seteuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setfsgid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setfsgid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setfsuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setfsuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setgid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setgid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setgroups.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setgroups.c: ...here. + * sysdeps/unix/sysv/linux/s390/setregid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setregid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setresgid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setresgid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setresuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setresuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setreuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setreuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/setrlimit.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setrlimit.c: ...here. + * sysdeps/unix/sysv/linux/s390/setuid.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/setuid.c: ...here. + * sysdeps/unix/sysv/linux/s390/shmctl.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/shmctl.c: ...here. + * sysdeps/unix/sysv/linux/s390/socket.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/socket.S: ...here. + * sysdeps/unix/sysv/linux/s390/sys/procfs.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/sys/procfs.h: ...here. + * sysdeps/unix/sysv/linux/s390/sys/ucontext.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/sys/ucontext.h: ...here. + * sysdeps/unix/sysv/linux/s390/syscall.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/syscall.S: ...here. + * sysdeps/unix/sysv/linux/s390/syscalls.list: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/syscalls.list: ...here. + * sysdeps/unix/sysv/linux/s390/sysdep.S: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S: ...here. + * sysdeps/unix/sysv/linux/s390/sysdep.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: ...here. + * sysdeps/unix/sysv/linux/s390/versionsort64.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/versionsort64.c: ...here. + * sysdeps/unix/sysv/linux/s390/xstat.c: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/xstat.c: ...here. + +2001-03-13 Martin Schwidefsky + + * sysdeps/unix/sysv/linux/s390/s390-64/Dist: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/Makefile: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/elfclass.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/fcntl.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/ipc.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/mman.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/msq.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/resource.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/sem.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/shm.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/sigaction.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/siginfo.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/sigstack.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/stat.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/bits/types.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/clone.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/fstatfs64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/ftruncate64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/fxstat.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/fxstat64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/getdents.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/getdents64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/getrlimit64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/glob.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/glob64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/kernel_stat.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/lxstat.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/lxstat64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/mmap.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/mmap64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/pread64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/pwrite64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/readdir.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/readdir64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/readdir64_r.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/readdir_r.c : New file. + * sysdeps/unix/sysv/linux/s390/s390-64/register-dump.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/setrlimit64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sigaction.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sigpending.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sigprocmask.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sigsuspend.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/socket.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/statfs64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sys/procfs.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sys/ucontext.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/syscall.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/truncate64.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/xstat.c: New file. + * sysdeps/unix/sysv/linux/s390/s390-64/xstat64.c: New file. + +2001-03-13 Martin Schwidefsky + + * sysdeps/s390/Dist: Move to... + * sysdeps/s390/390-32/Dist: ...here. + * sysdeps/s390/Implies: Move to... + * sysdeps/s390/s390-32/Implies: ...here. + * sysdeps/s390/Makefile: Move to... + * sysdeps/s390/s390-32/Makefile: ...here. + * sysdeps/s390/Versions: Move to... + * sysdeps/s390-32/s390/Versions: ...here. + * sysdeps/s390/add_n.S: Move to... + * sysdeps/s390/s390-32/add_n.S: ...here. + * sysdeps/s390/addmul_1.S: Move to... + * sysdeps/s390/s390-32/addmul_1.S: ...here. + * sysdeps/s390/atomicity.h: Move to... + * sysdeps/s390/s390-32/atomicity.h: ...here. + * sysdeps/s390/backtrace.c: Move to... + * sysdeps/s390/s390-32/backtrace.c: ...here. + * sysdeps/s390/bcopy.S: Move to... + * sysdeps/s390/s390-32/bcopy.S: ...here. + * sysdeps/s390/bits/byteswap.h: Move to... + * sysdeps/s390/s390-32/bits/byteswap.h: ...here. + * sysdeps/s390/bits/huge_val.h: Move to... + * sysdeps/s390/s390-32/bits/huge_val.h: ...here. + * sysdeps/s390/bsd-_setjmp.S: Move to... + * sysdeps/s390/s390-32/bsd-_setjmp.S: ...here. + * sysdeps/s390/bsd-setjmp.S: Move to... + * sysdeps/s390/s390-32/bsd-setjmp.S: ...here. + * sysdeps/s390/bzero.S: Move to... + * sysdeps/s390/s390-32/bzero.S: ...here. + * sysdeps/s390/elf/bsd-_setjmp.S: Move to... + * sysdeps/s390/s390-32/elf/bsd-_setjmp.S: ...here. + * sysdeps/s390/elf/bsd-setjmp.S: Move to... + * sysdeps/s390/s390-32/elf/bsd-setjmp.S: ...here. + * sysdeps/s390/elf/start.S: Move to... + * sysdeps/s390/s390-32/elf/start.S: ...here. + * sysdeps/s390/ffs.c: Move to... + * sysdeps/s390/s390-32/ffs.c: ...here. + * sysdeps/s390/memchr.S: Move to... + * sysdeps/s390/s390-32/memchr.S: ...here. + * sysdeps/s390/memcpy.S: Move to... + * sysdeps/s390/s390-32/memcpy.S: ...here. + * sysdeps/s390/memset.S: Move to... + * sysdeps/s390/s390-32/memset.S: ...here. + * sysdeps/s390/mul_1.S: Move to... + * sysdeps/s390/s390-32/mul_1.S: ...here. + * sysdeps/s390/s390-mcount.S: Move to... + * sysdeps/s390/s390-32/s390-mcount.S: ...here. + * sysdeps/s390/strcpy.S: Move to... + * sysdeps/s390/s390-32/strcpy.S: ...here. + * sysdeps/s390/strncpy.S: Move to... + * sysdeps/s390/s390-32/strncpy.S: ...here. + * sysdeps/s390/sub_n.S: Move to... + * sysdeps/s390/s390-32/sub_n.S: ...here. + +2001-03-13 Martin Schwidefsky + + * sysdeps/s390/s390-64/Dist: New file. + * sysdeps/s390/s390-64/Implies: New file. + * sysdeps/s390/s390-64/Makefile: New file. + * sysdeps/s390/s390-64/__longjmp.c: New file. + * sysdeps/s390/s390-64/add_n.S: New file. + * sysdeps/s390/s390-64/atomicity.h: New file. + * sysdeps/s390/s390-64/backtrace.c: New file. + * sysdeps/s390/s390-64/bcopy.S: New file. + * sysdeps/s390/s390-64/bits/byteswap.h: New file. + * sysdeps/s390/s390-64/bits/huge_val.h: New file. + * sysdeps/s390/s390-64/bits/setjmp.h: New file. + * sysdeps/s390/s390-64/bits/string.h: New file. + * sysdeps/s390/s390-64/bsd-_setjmp.S: New file. + * sysdeps/s390/s390-64/bsd-setjmp.S: New file. + * sysdeps/s390/s390-64/bzero.S: New file. + * sysdeps/s390/s390-64/dl-machine.h: New file. + * sysdeps/s390/s390-64/elf/bsd-_setjmp.S: New file. + * sysdeps/s390/s390-64/elf/bsd-setjmp.S: New file. + * sysdeps/s390/s390-64/elf/setjmp.S: New file. + * sysdeps/s390/s390-64/elf/start.S: New file. + * sysdeps/s390/s390-64/ffs.c: New file. + * sysdeps/s390/s390-64/initfini.c: New file. + * sysdeps/s390/s390-64/memchr.S: New file. + * sysdeps/s390/s390-64/memcpy.S: New file. + * sysdeps/s390/s390-64/memset.S: New file. + * sysdeps/s390/s390-64/s390x-mcount.S: New file. + * sysdeps/s390/s390-64/setjmp.S: New file. + * sysdeps/s390/s390-64/strcpy.S: New file. + * sysdeps/s390/s390-64/strncpy.S: New file. + * sysdeps/s390/s390-64/sub_n.S: New file. + * sysdeps/s390/s390-64/sysdep.h: New file. + +2001-03-13 Martin Schwidefsky + + * scripts/config.guess: Add support for Linux on 64 bit S/390. + * scripts/config.sub: Likewise. + +2001-03-13 Martin Schwidefsky + + * configure.in: Add support for 64 bit S/390. + + * elf/elf.h: Add new relocations for 64 bit S/390. + + * shlib-versions: Add rules for Linux on 64 bit S/390. + +2001-03-13 Martin Schwidefsky + + * sysdeps/s390/__longjmp.c: Move to... + * sysdeps/s390/s390-32/__longjmp.c: ...here. Add code + to load the floating point registers that should be saved + according to the ABI. + + * sysdeps/s390/bits/setjmp.h: Move to... + * sysdeps/s390/s390-32/bits/setjmp.h: ...here. Avoid + the use of long long in the __jmp_buf type definition. + + * sysdeps/s390/bits/string.h: Move to... + * sysdeps/s390/s390-32/bits/string.h: ...here. Add several missing + #ifndef _FORCE_INLINES. + + * sysdeps/s390/dl-machine.h: Move to... + * sysdeps/s390/s390-32/dl-machine.h: ...here. Add a check for the + executables EI_CLASS in elf_machine_matches_host. + + * sysdeps/s390/elf/setjmp.S: Move to... + * sysdeps/s390/s390-32/elf/setjmp.S: ...here. Replace + branches to globally defined symbol __sigsetjmp by branches to + a local label (this avoids the generation of a R_390_PC16DBL + relocation in -fpic code). + + * sysdeps/s390/gmp-mparam.h: Use defines from to + calculate BITS_PER_MP_LIMB, BYTES_PER_MP_LIMB and BITS_PER_LONGINT. + + * sysdeps/s390/initfini.c: Move to... + * sysdeps/s390/s390-32/initfini.c: ...here. Replace ALIGN with + ".align 4,0x07". + + * sysdeps/s390/setjmp.S: Move to... + * sysdeps/s390/s390-32/setjmp.S: ...here. Add code to store the + floating point registers that should be saved according to the ABI. + + * sysdeps/s390/sys/ucontext.h: Remove since it is unused. + + * sysdeps/unix/sysv/linux/s390/sysdep.h: Move to... + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: ...here. Include + sysdeps/s390/s390-32/sysdep.h instead of sysdeps/s390/sysdep.h. + +2001-03-13 Martin Schwidefsky + + * configure.in: Change machine=s390 to machine=s390/s390-32. + + * elf/elf.h: Correct comment for R_390_PLT16DBL. + +2001-03-12 Jakub Jelinek + + * csu/Makefile (abi-tag.h): Define OS and version separately, allow + version to be overriden from config.h. + * csu/abi-note.S: Use OS and version separately, include config.h. + * elf/dl-load.c (_dl_osversion): New. + (_dl_map_object_from_fd): Kill some warnings. + (open_verify): Check .note.ABI-tag of the library if present. + * elf/Makefile (CPPFLAGS-dl-load.c): Add -I$(csu-objpfx). + * elf/cache.c (struct cache_entry): Add osversion. + (print_entry): Print osversion. + (print_cache): Pass osversion to it. + (compare): Sort according to osversion. + (save_cache): Set osversion. + (add_to_cache): Add osversion argument. + * sysdeps/generic/ldconfig.h (add_to_cache, process_file, + process_elf_file): Add osversion argument. + * elf/readlib.c (process_file): Likewise. + * sysdeps/generic/readelflib.c (process_elf_file): Likewise. + * sysdeps/unix/sysv/linux/ia64/readelflib.c (process_elf_file, + process_elf32_file, process_elf64_file): Likewise. + * sysdeps/unix/sysv/linux/i386/readelflib.c (process_elf_file, + process_elf32_file, process_elf64_file): Likewise. + * sysdeps/unix/sysv/linux/sparc/readelflib.c (process_elf_file, + process_elf32_file, process_elf64_file): Likewise. + * elf/ldconfig.c (manual_link): Pass it. + (search_dir): Issue diagnostic if two libs with the same soname in + the same directory have different .note.ABI-tag. Record osversion in + dlib_entry and use it from there. + (struct lib_entry): Remove. + (struct dlib_entry): Add osversion. + * sysdeps/generic/dl-cache.c (_dl_load_cache_lookup): Check + osversion. + * sysdeps/generic/dl-cache.h (struct file_entry_new): Replace __unused + field with osversion. + * sysdeps/generic/ldsodefs.h (_dl_osversion): Declare. + * sysdeps/unix/sysv/linux/init-first.c: Include ldsodefs.h. + * sysdeps/unix/sysv/linux/dl-osinfo.h (DL_SYSDEP_OSCHECK): Save kernel + version in _dl_osversion. + * sysdeps/unix/sysv/linux/configure.in: Define __ABI_TAG_VERSION. + * Makerules (build-shlib-helper, build-module-helper): New. + (build-shlib, build-module-helper): Make sure .note.ABI-tag comes + early. + * config.h.in (__ABI_TAG_VERSION): Add. + * elf/dl-minimal.c (__strtoul_internal): Set endptr on return. + * sysdeps/unix/sysv/linux/i386/dl-librecon.h (EXTRA_LD_ENVVARS): + Handle LD_ASSUME_KERNEL. + * sysdeps/unix/sysv/linux/dl-librecon.h: New. + +2001-03-15 Ulrich Drepper + + * timezone/antarctica: Update from tzdata2001a. + * timezone/asia: Likewise. + * timezone/australasia: Likewise. + * timezone/backward: Likewise. + * timezone/etcetera: Likewise. + * timezone/europe: Likewise. + * timezone/leapseconds: Likewise. + * timezone/northamerica: Likewise. + * timezone/southamerica: Likewise. + * timezone/systemv: Likewise. + * timezone/yearistype: Likewise. + * timezone/zone.tab: Likewise. + * timezone/tzdump.c: Update from tzcode2001a. + +2001-03-15 H.J. Lu + + * intl/Makefile: Fix a typo. + +2001-03-14 David Mosberger + + * gmon/gmon.c (write_call_graph): Avoid unaligned accesses when + writing arc structures. + +2001-03-15 H.J. Lu + + * elf/Makefile ($(objpfx)tst-pathopt.out): Protected against + cross-compiling. + +2001-03-13 Andreas Schwab + + * posix/PTESTS2C.sed: Replace literal CRs by `\r'. + +2001-03-15 Ulrich Drepper + + * sysdeps/unix/sysv/linux/cmsg_nxthdr.c (__cmsg_nxthdr): Fix test + for control message fitting into message data. + Patch by James Antill . + + * posix/tst-fnmatch.input: Add test case for FNM_PERIOD handling with + FNM_EXTMATCH. + + * posix/fnmatch_loop.c: Optimize handling of ?() and @(). + * posix/fnmatch.c: Define STRLEN and STRCAT appropriately. + + * posix/Versions [libc] (GLIBC_2.2.3): Add fnmatch. + * posix/fnmatch.c: Define with new default version GLIBC_2.2.3 to + avoid running binaries with libc versions without FNM_EXTMATCH support. + + * include/wchar.h: Add prototype for __wcscat. + * wcsmbs/wcscat.c: Define __wcscat and make wcscat weak alias. + + * posix/fnmatch.h (FNM_EXTMATCH): Define. + * posix/fnmatch.c (NO_LEADING_PERIOD): Define. + (posixly_correct): Move global variable here. + (INT, EXT, END): Name new functions defined in fnmatch_loop.c. + (fnmatch): Pretty printing. + * posix/fnmatch_loop.c: Add code to handle FNM_EXTMATCH. + * posix/tst-fnmatch.c: Recognize EXTMATCH flag. + * posix/tst-fnmatch.input: Add tests for extended matching. + + * posix/testfnm.c: Add test for patterns with multiple ** before /. + * posix/fnmatch_loop.c: Fix problem with the test above. + +2001-03-14 Ulrich Drepper + + * sysdeps/ieee754/dbl-64/e_sqrt.c (__ieee754_sqrt): Remove + reference to usqrt. + + * resolv/res_data.c (fp_nquery): Call __res_ninit not __res_init. + +2001-03-12 Andreas Jaeger + + * sysdeps/unix/sysv/linux/i386/readelflib.c (process_elf_file): + Use EM_X86_64 instead of EM_X8664. + +2001-03-12 Ulrich Drepper + + * sysdeps/ieee754/dbl-64/upow.h: Define nZERO and nINF. + + * sysdeps/ieee754/dbl-64/e_remainder.c: Fix handling of boundary + conditions. + + * sysdeps/ieee754/dbl-64/e_pow.c: Fix handling of boundary + conditions. + + * sysdeps/ieee754/dbl-64/s_sin.c (__sin): Handle Inf and NaN + correctly. + (__cos): Likewise. + + * sysdeps/ieee754/dbl-64/e_asin.c (__ieee754_asin): Handle NaN + correctly. + (__ieee754_acos): Likewise. + +2001-03-12 Andreas Jaeger + + * sysdeps/unix/sysv/linux/s390/sysdep.h (_LINUX_S390_SYSDEP_H): + Fix typo. Patch by Martin Schwidefsky . + + * sysdeps/s390/bits/string.h: Protect __STRING_INLINE against + redefinition. + +2001-03-11 Roland McGrath + + * sysdeps/mach/hurd/configure.in: Add a sanity check on $prefix. + +2001-03-11 Ulrich Drepper + + * sysdeps/ieee754/dbl-64/endian.h: Define also one of BIG_ENDI and + LITTLE_ENDI. + + * sysdeps/ieee754/dbl-64/MathLib.h (Init_Lib): Use void as + parameter list. + + Last-bit accurate math library implementation by IBM Haifa. + Contributed by Abraham Ziv , Moshe Olshansky + , Ealan Henis , and + Anna Reitman . + * math/Makefile (dbl-only-routines): New variable. + (libm-routines): Add $(dbl-only-routines). + * sysdeps/ieee754/dbl-64/e_acos.c: Empty, definition is in e_asin.c. + * sysdeps/ieee754/dbl-64/e_asin.c: Replaced with accurate asin + implementation. + * sysdeps/ieee754/dbl-64/e_atan2.c: Replaced with accurate atan2 + implementation. + * sysdeps/ieee754/dbl-64/e_exp.c: Replaced with accurate exp + implementation. + * sysdeps/ieee754/dbl-64/e_lgamma_r.c: Don't use __kernel_sin and + __kernel_cos. + * sysdeps/ieee754/dbl-64/e_log.c: Replaced with accurate log + implementation. + * sysdeps/ieee754/dbl-64/e_remainder.c: Replaced with accurate + remainder implementation. + * sysdeps/ieee754/dbl-64/e_pow.c: Replaced with accurate pow + implementation. + * sysdeps/ieee754/dbl-64/e_sqrt.c: Replaced with accurate sqrt + implementation. + * sysdeps/ieee754/dbl-64/k_cos.c: Empty, definition is in s_sin.c. + * sysdeps/ieee754/dbl-64/k_sin.c: Empty, definition is in s_sin.c. + * sysdeps/ieee754/dbl-64/s_atan.c: Replaced with accurate atan + implementation. + * sysdeps/ieee754/dbl-64/s_cos.c: Empty, definition is in s_sin.c. + * sysdeps/ieee754/dbl-64/s_sin.c: Replaced with accurate sin/cos + implementation. + * sysdeps/ieee754/dbl-64/s_sincos.c: Rewritten to not use __kernel_sin + and __kernel_cos. + * sysdeps/ieee754/dbl-64/s_tan.c: Replaced with accurate tan + implementation. + * sysdeps/ieee754/dbl-64/Dist: Add new non-code files. + * sysdeps/ieee754/dbl-64/MathLib.h: New file. + * sysdeps/ieee754/dbl-64/asincos.tbl: New file. + * sysdeps/ieee754/dbl-64/atnat.h: New file. + * sysdeps/ieee754/dbl-64/atnat2.h: New file. + * sysdeps/ieee754/dbl-64/branred.c: New file. + * sysdeps/ieee754/dbl-64/branred.h: New file. + * sysdeps/ieee754/dbl-64/dla.h: New file. + * sysdeps/ieee754/dbl-64/doasin.c: New file. + * sysdeps/ieee754/dbl-64/doasin.h: New file. + * sysdeps/ieee754/dbl-64/dosincos.c: New file. + * sysdeps/ieee754/dbl-64/dosincos.h: New file. + * sysdeps/ieee754/dbl-64/endian.h: New file. + * sysdeps/ieee754/dbl-64/halfulp.c: New file. + * sysdeps/ieee754/dbl-64/mpa.c: New file. + * sysdeps/ieee754/dbl-64/mpa.h: New file. + * sysdeps/ieee754/dbl-64/mpa2.h: New file. + * sysdeps/ieee754/dbl-64/mpatan.c: New file. + * sysdeps/ieee754/dbl-64/mpatan.h: New file. + * sysdeps/ieee754/dbl-64/mpatan2.c: New file. + * sysdeps/ieee754/dbl-64/mpexp.c: New file. + * sysdeps/ieee754/dbl-64/mpexp.h: New file. + * sysdeps/ieee754/dbl-64/mplog.c: New file. + * sysdeps/ieee754/dbl-64/mplog.h: New file. + * sysdeps/ieee754/dbl-64/mpsqrt.c: New file. + * sysdeps/ieee754/dbl-64/mpsqrt.h: New file. + * sysdeps/ieee754/dbl-64/mptan.c: New file. + * sysdeps/ieee754/dbl-64/mydefs.h: New file. + * sysdeps/ieee754/dbl-64/powtwo.tbl: New file. + * sysdeps/ieee754/dbl-64/root.tbl: New file. + * sysdeps/ieee754/dbl-64/sincos.tbl: New file. + * sysdeps/ieee754/dbl-64/sincos32.c: New file. + * sysdeps/ieee754/dbl-64/sincos32.h: New file. + * sysdeps/ieee754/dbl-64/slowexp.c: New file. + * sysdeps/ieee754/dbl-64/slowpow.c: New file. + * sysdeps/ieee754/dbl-64/uasncs.h: New file. + * sysdeps/ieee754/dbl-64/uatan.tbl: New file. + * sysdeps/ieee754/dbl-64/uexp.h: New file. + * sysdeps/ieee754/dbl-64/uexp.tbl: New file. + * sysdeps/ieee754/dbl-64/ulog.h: New file. + * sysdeps/ieee754/dbl-64/ulog.tbl: New file. + * sysdeps/ieee754/dbl-64/upow.h: New file. + * sysdeps/ieee754/dbl-64/upow.tbl: New file. + * sysdeps/ieee754/dbl-64/urem.h: New file. + * sysdeps/ieee754/dbl-64/uroot.h: New file. + * sysdeps/ieee754/dbl-64/usncs.h: New file. + * sysdeps/ieee754/dbl-64/utan.h: New file. + * sysdeps/ieee754/dbl-64/utan.tbl: New file. + * sysdeps/i386/fpu/branred.c: New file. + * sysdeps/i386/fpu/doasin.c: New file. + * sysdeps/i386/fpu/dosincos.c: New file. + * sysdeps/i386/fpu/halfulp.c: New file. + * sysdeps/i386/fpu/mpa.c: New file. + * sysdeps/i386/fpu/mpatan.c: New file. + * sysdeps/i386/fpu/mpatan2.c: New file. + * sysdeps/i386/fpu/mpexp.c: New file. + * sysdeps/i386/fpu/mplog.c: New file. + * sysdeps/i386/fpu/mpsqrt.c: New file. + * sysdeps/i386/fpu/mptan.c: New file. + * sysdeps/i386/fpu/sincos32.c: New file. + * sysdeps/i386/fpu/slowexp.c: New file. + * sysdeps/i386/fpu/slowpow.c: New file. + * sysdeps/ia64/fpu/branred.c: New file. + * sysdeps/ia64/fpu/doasin.c: New file. + * sysdeps/ia64/fpu/dosincos.c: New file. + * sysdeps/ia64/fpu/halfulp.c: New file. + * sysdeps/ia64/fpu/mpa.c: New file. + * sysdeps/ia64/fpu/mpatan.c: New file. + * sysdeps/ia64/fpu/mpatan2.c: New file. + * sysdeps/ia64/fpu/mpexp.c: New file. + * sysdeps/ia64/fpu/mplog.c: New file. + * sysdeps/ia64/fpu/mpsqrt.c: New file. + * sysdeps/ia64/fpu/mptan.c: New file. + * sysdeps/ia64/fpu/sincos32.c: New file. + * sysdeps/ia64/fpu/slowexp.c: New file. + * sysdeps/ia64/fpu/slowpow.c: New file. + * sysdeps/m68k/fpu/branred.c: New file. + * sysdeps/m68k/fpu/doasin.c: New file. + * sysdeps/m68k/fpu/dosincos.c: New file. + * sysdeps/m68k/fpu/halfulp.c: New file. + * sysdeps/m68k/fpu/mpa.c: New file. + * sysdeps/m68k/fpu/mpatan.c: New file. + * sysdeps/m68k/fpu/mpatan2.c: New file. + * sysdeps/m68k/fpu/mpexp.c: New file. + * sysdeps/m68k/fpu/mplog.c: New file. + * sysdeps/m68k/fpu/mpsqrt.c: New file. + * sysdeps/m68k/fpu/mptan.c: New file. + * sysdeps/m68k/fpu/sincos32.c: New file. + * sysdeps/m68k/fpu/slowexp.c: New file. + * sysdeps/m68k/fpu/slowpow.c: New file. + + * iconvdata/gconv-modules: Add a number of alias, mostly for IBM + codepages. + +2001-03-11 Andreas Jaeger + + * elf/elf.h (EM_*): Synch with official list. + +2001-03-07 David Mosberger + + * sysdeps/ia64/bits/fenv.h (FE_NONIEEE_ENV): New macro. + +2001-03-07 Jes Sorensen + + * sysdeps/unix/sysv/linux/ia64/ioperm.c (_ioperm): Remove unused + variables addr & len. + +2001-02-22 Jes Sorensen + + * sysdeps/ia64/fpu/feenablxcpt.c (feenableexcept): Remove + punctuation in asm constraint. + +2001-03-07 Mark Kettenis + + * resolv/netdb.h [__USE_GNU]: Define __need_timespec and include + to get definition of `struct timespec'. + +2001-03-08 Jakub Jelinek + + * elf/rtld.c (dl_main): If tracing, warn about undefined symbols if + LD_WARN=1, not if LD_WARN is unset. + +2001-03-07 Andreas Schwab + + * elf/ldconfig.h: Moved to ... + * sysdeps/generic/ldconfig.h: ... here. + * sysdeps/unix/sysv/linux/i386/ldconfig.h: New file. + * sysdeps/unix/sysv/linux/m68k/ldconfig.h: New file. + * sysdeps/unix/sysv/linux/ia64/ldconfig.h: New file. + * elf/readlib.c (interpreters, known_libs): Use + SYSDEP_KNOWN_INTERPRETER_NAMES and SYSDEP_KNOWN_LIBRARY_NAMES + instead of hard coding old names. + +2001-03-09 Ulrich Drepper + + * catgets/Makefile (generated): Add test-gencat.h. + (sample.SJIS.cat): Also generate header. + * catgets/sample.SJIS: Add new set and message, both with symbolic + names. + * catgets/test-gencat.sh: Also compare generated header with what + we expect. + +2001-03-07 Jakub Jelinek + + * catgets/gencat.c (read_input_file): Preserve properly symbolic + names. + +2001-03-06 Andreas Jaeger + + * sysdeps/s390/dl-machine.h (elf_machine_relplt): Removed, it's not + needed. + (elf_machine_pltrel_p): Likewise. + * sysdeps/powerpc/dl-machine.h: Likewise. + * sysdeps/generic/dl-machine.h (elf_machine_pltrel_p): Likewise. + +2001-03-09 Ulrich Drepper + + * sysdeps/unix/sysv/linux/arm/Dist: Add dl-procinfo.c and + dl-procinfo.h. + +2001-03-05 Philip Blundell + + * sysdeps/unix/sysv/linux/arm/dl-procinfo.c: New file. + * sysdeps/unix/sysv/linux/arm/dl-procinfo.h: New file. + * sysdeps/unix/sysv/linux/arm/Makefile [subdir=elf] + (sysdep-dl-routines, sysdep_routines, sysdep-rtld-routines): Add + dl-procinfo. + +2001-03-09 Ulrich Drepper + + * dlfcn/tstatexit.c (main): Don't perform the test if __dso_handle + is not available. + * dlfcn/tstcxaatexit.c (main): Likewise. + +2001-03-10 Andreas Jaeger + + * sysdeps/i386/fpu/libm-test-ulps: Revert last patch. + +2001-03-09 Andreas Jaeger + + * sysdeps/s390/dl-machine.h (elf_machine_matches_host): Handle + both new and old EM_S390 values. + (EM_S390_OLD): New constant. + + * elf/elf.h (EM_S390): Use official value. + +2001-03-09 Ulrich Drepper + + * conform/data/sys/socket.h-data: Allow SO* symbols. + +2001-03-07 Andreas Schwab + + * sysdeps/ia64/fpu/Makefile: Modify sysdep_routines instead of + routines, and sysdep-CPPFLAGS instead of CPPFLAGS. + +2001-03-07 Andreas Jaeger + + * resolv/Makefile (routines): Only build gai_sigqueue when threads + are available. + +2001-03-07 Jakub Jelinek + + * elf/ldconfig.c (_dl_sysdep_message): Remove. + * sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h: Include + ldsodefs.h. + * sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h: Likewise. + + * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Use + _dl_error_printf instead of _dl_sysdep_error. + * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/dl-procinfo.h (_dl_procinfo): + Use _dl_printf instead of _dl_sysdep_message. + * sysdeps/unix/sysv/linux/sparc/sparc64/dl-procinfo.h (_dl_procinfo): + Likewise. + +2001-03-06 Ben Collins + + * manual/arith.texi (Integers): Fix documentation of fast and + least integer typedefs. + +2001-03-06 Jakub Jelinek + + * resolv/Depend: New file. + * resolv/Makefile (extra-libs, tests): Build libanl and ga_test only + when libpthread is built. + +2001-03-06 Andreas Jaeger + + * sysdeps/i386/fpu/libm-test-ulps: Add some deltas. + + * sysdeps/sh/dl-machine.h (elf_machine_rela): Add missing comma. + Patch by kaz Kojima . + +2001-03-05 Ulrich Drepper + + * stdlib/Versions: Remove __new_exitfn again. Not needed. + +2001-03-05 Andreas Jaeger + + * stdlib/msort.c (qsort): Don't use alloca in a function call. + +2001-03-05 Ulrich Drepper + + * sysdeps/unix/sysv/linux/bits/stat.h (__S_TYPEISMQ, __S_TYPEISSEM, + __S_TYPEISSHM): Rewrite to enforce correct use the macros. They still + always return zero. + * sysdeps/unix/sysv/linux/alpha/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/s390/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/m68k/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/stat.h: Likewise. + +2001-03-04 Andreas Jaeger + + * stdlib/longlong.h: Don't use multi-line strings. + * iconvdata/tst-loading.c: Likewise. + + * csu/Makefile ($(objpfx)version-info.h): Don't use multi-line + string. + +2001-03-04 Ulrich Drepper + + * sysdeps/ia64/fpu/libm-test-ulps: Adjust for addition of lgammal. + + * rt/lio_listio.c: Add a few asserts. + + * elf/global.c: New file. + * elf/globalmod1.c: New file. + * elf/Makefile: Add rules to build and run global. + + * sysdeps/unix/sysv/linux/alpha/bits/siginfo.h: Define SI_ASYNCNL. + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h: Likewise. + + * sysdeps/ieee754/ldbl-96/e_lgammal_r.c: New file. + Contributed by Stephen L. Moshier . + + * sysdeps/ieee754/ldbl-96/e_gammal_r.c: Fix handling of boundary cases. + + * sysdeps/ieee754/dbl-64/e_gamma_r.c: Always initialize sign variable. + * sysdeps/ieee754/flt-32/e_gammaf_r.c: Likewise. + + * sysdeps/i386/fpu/libm-test-ulps: Adjust after addition of lgammal. + + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Fix typo in last change. + +2001-03-04 Andreas Jaeger + + * resolv/tst-aton.c: Add testcase for IP with four periods. + + * resolv/inet_addr.c: Don't recognize an IP with four periods. + Patch by Andre' Breiler . + +2001-02-27 Philip Blundell + + * elf/elf.h: Add new ARM definitions from latest (B-01) + specification. Correct naming of EF_ARM_ALIGN8 et al. + +2001-03-04 Ulrich Drepper + + * stdio-common/tst-printf.sh: Remove bashisms. + Patch by Matthew Clarke . + +2001-03-03 Ulrich Drepper + + * Versions.def: Add libanl definition. + * shlib-versions: Add entry for libanl. + * resolv/Makefile (distribute): Add gai_misc.h and ga_test.c. + (routines): Add gai_sigqueue. + (extra-libs): Add libanl. + (libanl-routines): New variable. + Add rules to build libanl and ga_test. + * resolv/Versions [libc] (GLIBC_2.2.3): Add __gai_sigqueue. + [libanl]: New library. + * resolv/netdb.h: Add definitions for libanl. + * resolv/getaddrinfo_a.c: New file. + * resolv/gai_cancel.c: New file. + * resolv/gai_error.c: New file. + * resolv/gai_misc.c: New file. + * resolv/gai_misc.h: New file. + * resolv/gai_notify.c: New file. + * resolv/gai_suspend.c: New file. + * resolv/ga_test.c: New file. + * sysdeps/generic/gai_sigqueue.c: New file. + * sysdeps/unix/sysv/linux/gai_sigqueue.c: New file. + * sysdeps/generic/bits/siginfo.h: Allow __need_sigevent_t being defined + and provide only that definition. + * sysdeps/unix/sysv/linux/alpha/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/siginfo.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/bits/siginfo.h: Likewise. + + * rt/aio_misc.c: Fix typos in comments. + * rt/lio_listio.c: Pretty printing. Little optimization in request + list handling. + + * elf/rtld.c: Remove commented out code. + + * sysdeps/unix/sysv/linux/linux_fsinfo.h (SHMFS_SUPER_MAGIC): + Update for real 2.4 kernels. + +2001-03-01 Ulrich Drepper + + * elf/dl-load.c: Pretty printing. + + * elf/dl-object.c (_dl_new_object): Don't add the loader's scope + twice. + +2001-02-28 Ulrich Drepper + + * sysdeps/alpha/dl-machine.h (elf_machine_rela): Don't handle + relocations which are not in ld.so if RTLD_BOOTSTRAP is defined. + + * sysdeps/powerpc/dl-machine.c (__process_machine_rela): Fix typo. + + * elf/dl-misc.c (_dl_debug_vdprintf): Fix typo visible on 64-bit + machines. + + * sysdeps/unix/sysv/linux/powerpc/sysdep.h (C_TEXT): Define. + +2001-02-27 Ulrich Drepper + + * sysdeps/powerpc/elf/libc-start.c: Use new output functions and + _dl_debug_mask. + + * elf/Versions [ld]: Don't export _dl_debug_message anymore. Export + _dl_debug_printf. + * elf/dl-misc.c: Remove definition of _dl_sysdep_output and + _dl_debug_message. Define _dl_debug_vdprintf, _dl_debug_printf, + _dl_debug_printf_c, and _dl_printf. + * sysdeps/generic/ldsodefs.h: Don't declare _dl_sysdep_output, + _dl_debug_message, _dl_sysdep_message, _dl_sysdep_error, and + _dl_sysdep_fatal. Declare _dl_debug_printf, _dl_debug_printf_c, + _dl_printf, _dl_error_printf, and _dl_fatal_printf. + * elf/dl-close.c: Replace use of old output functions with the new + ones. + * elf/dl-deps.c: Likewise. + * elf/dl-error.c: Likewise. + * elf/dl-fini.c: Likewise. + * elf/dl-init.c: Likewise. + * elf/dl-load.c: Likewise. + * elf/dl-lookup.c: Likewise. + * elf/dl-minimal.c: Likewise. + * elf/dl-open.c: Likewise. + * elf/dl-profile.c: Likewise. + * elf/dl-reloc.c: Likewise. + * elf/dl-version.c: Likewise. + * elf/do-lookup.h: Likewise. + * elf/rtld.c: Likewise. + * sysdeps/generic/dl-cache.c: Likewise. + * sysdeps/generic/dl-sysdep.c: Likewise. + * sysdeps/generic/libc-start.c: Likewise. + * sysdeps/i386/dl-machine.h: Likewise. + * sysdeps/arm/dl-machine.h: Likewise. + * sysdeps/hppa/dl-machine.h: Likewise. + * sysdeps/m68k/dl-machine.h: Likewise. + * sysdeps/powerpc/dl-machine.h: Likewise. + * sysdeps/s390/dl-machine.h: Likewise. + * sysdeps/sh/dl-machine.h: Likewise. + * sysdeps/unix/sysv/linux/dl-osinfo.h: Likewise. + * sysdeps/unix/sysv/linux/i386/dl-librecon.h: Likewise. + * sysdeps/unix/sysv/linux/i386/dl-procinfo.h: Likewise. + + * sysdeps/generic/ldsodefs.h: Remove _dl_secure declaration. + + * dlfcn/Makefile: Don't run tstatexit test unless .hidden is + supported by assembler. + + * sysdeps/generic/ldsodefs.h: Remove commented-out variable + declaractions. + + * elf/rtld.c: Little optimizations in handling _dl_lazy. + + * elf/cache.c (save_cache): Portability changes. + * elf/dl-profile.c (_dl_start_profile): Likewise. + + * elf/sln.c: Cleanups. Remove arbitrary limits. + + * elf/dl-close.c: Replace _dl_debug_* variables with _dl_debug_mask. + * elf/dl-deps.c: Likewise. + * elf/dl-fini.c: Likewise. + * elf/dl-init.c: Likewise. + * elf/dl-load.c: Likewise. + * elf/dl-lookup.c: Likewise. + * elf/dl-open.c: Likewise. + * elf/dl-reloc.c: Likewise. + * elf/dl-support.c: Likewise. + * elf/dl-version.c: Likewise. + * elf/do-lookup.h: Likewise. + * elf/rtld.c: Likewise. + * sysdeps/generic/dl-cache.c: Likewise. + * sysdeps/generic/ldsodefs.h: Likewise. + * sysdeps/generic/libc-start.c: Likewise. + * elf/Versions: Don't export _dl_debug_impcalls and _dl_debug_files. + Export _dl_debug_mask. + * Versions.def: Define GLIBC_2.2.3 for ld. + +2001-02-26 Greg McGary + + * sysdeps/unix/make-syscalls.sh (ptr): Handle `V' keyletter. + +2001-02-26 Paul Eggert + + Modify mkstemp.c and tempname.c so that they can be used by + GNU applications on non-glibc platforms. + + * misc/mkstemp.c (__GT_FILE): Define to zero if not defined. + + * sysdeps/posix/tempname.c: Include if HAVE_CONFIG_H. + Include , , only if + STDC_HEADERS || _LIBC. + Include only if HAVE_FCNTL_H || _LIBC. + Include only if HAVE_UNISTD_H || _LIBC. + Include only if HAVE_SYS_TIME_H || _LIBC. + (__set_errno): Define this macro if doesn't. + (P_tmpdir, TMP_MAX, __GT_FILE, __GT_BIGFILE, __GT_DIR, __GT_NOCREATE): + Define these macros if doesn't. + (S_ISDIR, S_IRUSR, S_IWUSR, S_IXUSR): + Define these macros if doesn't. + Ignore S_ISDIR if STAT_MACROS_BROKEN. + (stat64, __getpid, __gettimeofday, __mkdir, __open, __open64, + lxstat64, __xstat64): Define if not _LIBC. + (struct_stat64): New macro. + (direxists, __gen_tempname): Use it, to avoid a + portability problem with Solaris 8. + (__secure_getenv): Define if ! (HAVE___SECURE_GETENV || _LIBC). + (__gen_tempname): Invoke gettimeofday only if + HAVE_GETTIMEOFDAY || _LIBC; otherwise, fall back on plain "time". + Use portable macros like S_IRUSR | S_IWUSR rather than nonportable + octal values like 0600. + +2001-02-26 Ulrich Drepper + + * sysdeps/ieee754/ldbl-96/e_jnl.c: New file. + Contributed by Stephen L. Moshier . + + * sysdeps/i386/fpu/libm-test-ulps: Update for jnl and ynl introduction. + * sysdeps/ia64/fpu/libm-test-ulps: Likewise. + + * posix/wordexp-test.c (testit): Remove warnings. + + * dlfcn/Makefile (distribute): Add modatexit.c and modcxaatexit.c. + (tests): Add tstatexit and tstcxaatexit. + (module-names): Add modatexit and modcxaatexit. + Add rules to build and run tstatexit and tstcxaatexit. + * dlfcn/modatexit.c: New file. + * dlfcn/modcxaatexit.c: New file. + * dlfcn/tstatexit.c: New file. + * dlfcn/tstcxaatexit.c: New file. + + * io/Makefile: Pass -DHAVE_DOT_HIDDEN to stat and mknod functions if + .hidden is available. + * io/stat.c: If .hidden is available use it to avoid exporting + functions. + * io/fstat.c: Likewise. + * io/lstat.c: Likewise. + * io/stat64.c: Likewise. + * io/fstat64.c: Likewise. + * io/lstat64.c: Likewise. + * sysdeps/generic/mknod.c: Likewise. + + * malloc/mtrace.c: Use __cxa_atexit and not atexit. + * sysdeps/generic/bb_init_func.c: Likewise. + * sysdeps/generic/libc-start.c: Likewise. + + * stdlib/atexit.c (__new_exitfn): Move to cxa_atexit.c. + (atexit): Implement using __cxa_atexit. + Use .hidden if availble to avoid exporting atexit. + * stdlib/cxa_atexit.c (__new_exitfn): Moved to here from atexit.c. + * stdlib/Versions: Export __new_exitfn for GLIBC_2.2.3. + * stdlib/Makefile (routines): Add old_atexit. + (static-only-routines): Add atexit. + Pass -DHAVE_DOT_HIDDEN for atexit.c if .hidden is available. + * stdlib/old_atexit.c: New file. + + * intl/Makefile: Remove bogus endif. + +2001-02-26 Andreas Jaeger + + * iconvdata/Makefile (tests): Fix typo in last patch. + + * intl/Makefile (tests): Run mtrace-tst-gettext only when perl is + available. + Reported by Achim Gottinger . + +2001-02-25 Andreas Jaeger + + * intl/Makefile (plural.c): Reorder rules so that they work if + BISON doesn't exist. + +2001-02-25 Ulrich Drepper + + * intl/locale.alias: Don't use nb_NO but define aliases for it. + +2001-02-23 Ulrich Drepper + + * sysdeps/i386/strtok.S: Continue to return NULL after the first + time this happened. + +2001-02-23 Andreas Jaeger + + * string/tester.c (test_strtok_r): Add testcase. + (test_strtok_r): Always initialize cp for proper checking. + + * sysdeps/generic/strtok.c (strtok): Handle case of first strtok + returning NULL correctly. + Patch by Fumitoshi UKAI . + * sysdeps/generic/strtok_r.c (__strtok_r): Likewise. + +2001-02-23 Ulrich Drepper + + * sysdeps/unix/sysv/aix/bits/types.h: Define __need_NULL before + including . + * sysdeps/unix/sysv/aix/write.c: Define alias __libc_write. + * include/libc-symbols.h (weak_alias): Don't use .weak if + HAVE_ASM_GLOBAL_DOT_NAME is defined. + Patches by Michael Keezer . + + * sysdeps/generic/ftime.c: Don't include at all. + Patch by Michael Keezer . + + * sysdeps/unix/sysv/aix/Dist: Remove restf.S and savef.S. + * sysdeps/unix/sysv/aix/Makefile [$(subdir) == misc] + (sysdep_routines): Remove restf.S and savef.S. + * sysdeps/unix/sysv/aix/restf.S. Removed. + * sysdeps/unix/sysv/aix/savef.S. Removed. + * sysdeps/powerpc/fprrest.S: Use C_TEXT to define label. Also define + alternative names used on some platforms. + * sysdeps/powerpc/fprsave.S: Likewise. + * sysdeps/powerpc/gprrest0.S: Likewise. + * sysdeps/powerpc/gprrest1.S: Likewise. + * sysdeps/powerpc/gprsave0.S: Likewise. + * sysdeps/powerpc/gprsave1.S: Likewise. + Patch by Michael Keezer . + +2001-02-22 Ulrich Drepper + + * sysdeps/i386/elf/start.S (_fp_hw): Actually define label. + +2001-02-22 Andreas Jaeger + + * string/tst-strtok.c (main): Fix error messages. + +2001-02-22 Andreas Jaeger + + * math/Makefile: Remove omit-long-double-fcts. + +2001-02-18 Maciej W. Rozycki + + * sysdeps/mips/bsd-_setjmp.S (_setjmp): Reorder instructions to + avoid problems on MIPS I. + * sysdeps/mips/bsd-setjmp.S (setjmp): Likewise. + + * sysdeps/mips/dl-machine.h (RTLD_START): Remove duplicate ".set + noreorder". + +2001-02-21 Ulrich Drepper + + * posix/fnmatch_loop.c: Handle ranges outside glibc correctly. + + * sysdeps/generic/ftime.c: Include . + + * configure.in: Don't check for libgd if user passed --without-gd. + Patch by Achim Gottinger . + + * sysdeps/i386/i686/strtok.S: Continue to return NULL after the + first time this happened. + * string/Makefile (tests): Add tst-strtok. + +2001-02-21 Andreas Jaeger + + * string/tst-strtok.c: New testcase, reported by + Andrew Church . + +2001-02-20 Ulrich Drepper + + * libio/iofwide.c: Remove fwide alias. + +2001-02-20 Andreas Jaeger + + * iconvdata/Makefile (tests): Only run mtrace-tst-loading if perl + is available. + Reported by Achim Gottinger . + +2001-02-19 Ulrich Drepper + + * iconv/tst-iconv1.c (main): Remove debugging code. + + * sysdeps/ieee754/flt-32/e_powf.c: Handle x == +-1 correctly. + * sysdeps/ieee754/dbl-64/e_pow.c: Likewise. + + * sysdeps/generic/e_scalb.c: Set invalid exception for invalid + parameters. + * sysdeps/generic/e_scalbf.c: Likewise. + * sysdeps/generic/e_scalbl.c: Likewise. + + * sysdeps/ia64/fpu/Makefile (libm-sysdep-routines): Add libm_error, + libm_frexp4, libm_frexp4f, libm_frexp4l, and all the functions also + in libc. + (routines): Replace libm_error with libc_libm_error. + * sysdeps/ia64/fpu/Dist: Add libc_libm_error.c. + * sysdeps/ia64/fpu/libc_libm_error.c: New file. + +2001-02-18 Mark Kettenis + + * malloc/mtrace.c [USE_IN_LIBIO]: Define fopen as _IO_fopen64. + (mtrace): Revert 2001-02-13 patch: use fopen instead of fopen64. + +2001-02-17 H.J. Lu + + * sysdeps/unix/sysv/linux/ia64/clone2.S: Use clone2 and don't use + scratch registers across the system call. + +2001-02-19 Andreas Jaeger + + * malloc/Makefile (tests): Run mtrace only when perl is available. + Reported by Achim Gottinger . + +2001-02-19 Ulrich Drepper + + * sysdeps/ieee754/ldbl-96/e_j1l.c: New file. + Contributed by Stephen L. Moshier . + + * sysdeps/i386/fpu/libm-test-ulps: Adjust error values for j1 and y1. + * sysdeps/ia64/fpu/libm-test-ulps: Adjust error values for y1. + * math/libm-test.inc (j1_test): Mark constants as long double. + (jn_test): Likewise. + (y1_test): Likewise. + (yn_test): Likewise. + + * libio/iogetline.c: Move return until after last statement. + + * localedata/show-ucs-data.c: Don't show < > for better readability. + + * sysdeps/ia64/fpu/Dist: New file. + * sysdeps/ia64/fpu/Makefile: New file. + * sysdeps/ia64/fpu/Versions: New file. + * sysdeps/ia64/fpu/e_acos.S: New file. + * sysdeps/ia64/fpu/e_acosf.S: New file. + * sysdeps/ia64/fpu/e_acosl.S: New file. + * sysdeps/ia64/fpu/e_asin.S: New file. + * sysdeps/ia64/fpu/e_asinf.S: New file. + * sysdeps/ia64/fpu/e_asinl.S: New file. + * sysdeps/ia64/fpu/e_atan2.S: New file. + * sysdeps/ia64/fpu/e_atan2f.S: New file. + * sysdeps/ia64/fpu/e_atan2l.c: New file. + * sysdeps/ia64/fpu/e_cosh.S: New file. + * sysdeps/ia64/fpu/e_coshf.S: New file. + * sysdeps/ia64/fpu/e_coshl.S: New file. + * sysdeps/ia64/fpu/e_exp.S: New file. + * sysdeps/ia64/fpu/e_expf.S: New file. + * sysdeps/ia64/fpu/e_expl.c: New file. + * sysdeps/ia64/fpu/e_fmod.S: New file. + * sysdeps/ia64/fpu/e_fmodf.S: New file. + * sysdeps/ia64/fpu/e_fmodl.S: New file. + * sysdeps/ia64/fpu/e_hypot.S: New file. + * sysdeps/ia64/fpu/e_hypotf.S: New file. + * sysdeps/ia64/fpu/e_hypotl.S: New file. + * sysdeps/ia64/fpu/e_log.S: New file. + * sysdeps/ia64/fpu/e_log10.c: New file. + * sysdeps/ia64/fpu/e_log10f.c: New file. + * sysdeps/ia64/fpu/e_log10l.c: New file. + * sysdeps/ia64/fpu/e_logf.S: New file. + * sysdeps/ia64/fpu/e_logl.c: New file. + * sysdeps/ia64/fpu/e_pow.S: New file. + * sysdeps/ia64/fpu/e_powf.S: New file. + * sysdeps/ia64/fpu/e_powl.S: New file. + * sysdeps/ia64/fpu/e_rem_pio2.c: New file. + * sysdeps/ia64/fpu/e_rem_pio2f.c: New file. + * sysdeps/ia64/fpu/e_remainder.S: New file. + * sysdeps/ia64/fpu/e_remainderf.S: New file. + * sysdeps/ia64/fpu/e_remainderl.S: New file. + * sysdeps/ia64/fpu/e_scalb.S: New file. + * sysdeps/ia64/fpu/e_scalbf.S: New file. + * sysdeps/ia64/fpu/e_scalbl.S: New file. + * sysdeps/ia64/fpu/e_sinh.S: New file. + * sysdeps/ia64/fpu/e_sinhf.S: New file. + * sysdeps/ia64/fpu/e_sinhl.S: New file. + * sysdeps/ia64/fpu/e_sqrt.S: New file. + * sysdeps/ia64/fpu/e_sqrtf.S: New file. + * sysdeps/ia64/fpu/e_sqrtl.S: New file. + * sysdeps/ia64/fpu/k_rem_pio2.c: New file. + * sysdeps/ia64/fpu/k_rem_pio2f.c: New file. + * sysdeps/ia64/fpu/k_rem_pio2l.c: New file. + * sysdeps/ia64/fpu/libm_atan2_reg.S: New file. + * sysdeps/ia64/fpu/libm_error.c: New file. + * sysdeps/ia64/fpu/libm_frexp4.S: New file. + * sysdeps/ia64/fpu/libm_frexp4f.S: New file. + * sysdeps/ia64/fpu/libm_frexp4l.S: New file. + * sysdeps/ia64/fpu/libm_reduce.S: New file. + * sysdeps/ia64/fpu/libm_support.h: New file. + * sysdeps/ia64/fpu/libm_tan.S: New file. + * sysdeps/ia64/fpu/s_atan.S: New file. + * sysdeps/ia64/fpu/s_atanf.S: New file. + * sysdeps/ia64/fpu/s_atanl.S: New file. + * sysdeps/ia64/fpu/s_cbrt.S: New file. + * sysdeps/ia64/fpu/s_cbrtf.S: New file. + * sysdeps/ia64/fpu/s_cbrtl.S: New file. + * sysdeps/ia64/fpu/s_ceil.S: New file. + * sysdeps/ia64/fpu/s_ceilf.S: New file. + * sysdeps/ia64/fpu/s_ceill.S: New file. + * sysdeps/ia64/fpu/s_cos.S: New file. + * sysdeps/ia64/fpu/s_cosf.S: New file. + * sysdeps/ia64/fpu/s_cosl.S: New file. + * sysdeps/ia64/fpu/s_expm1.S: New file. + * sysdeps/ia64/fpu/s_expm1f.S: New file. + * sysdeps/ia64/fpu/s_expm1l.S: New file. + * sysdeps/ia64/fpu/s_floor.S: New file. + * sysdeps/ia64/fpu/s_floorf.S: New file. + * sysdeps/ia64/fpu/s_floorl.S: New file. + * sysdeps/ia64/fpu/s_frexp.c: New file. + * sysdeps/ia64/fpu/s_frexpf.c: New file. + * sysdeps/ia64/fpu/s_frexpl.c: New file. + * sysdeps/ia64/fpu/s_ilogb.S: New file. + * sysdeps/ia64/fpu/s_ilogbf.S: New file. + * sysdeps/ia64/fpu/s_ilogbl.S: New file. + * sysdeps/ia64/fpu/s_ldexp.S: New file. + * sysdeps/ia64/fpu/s_ldexpf.S: New file. + * sysdeps/ia64/fpu/s_ldexpl.S: New file. + * sysdeps/ia64/fpu/s_log1p.S: New file. + * sysdeps/ia64/fpu/s_log1pf.S: New file. + * sysdeps/ia64/fpu/s_log1pl.S: New file. + * sysdeps/ia64/fpu/s_logb.S: New file. + * sysdeps/ia64/fpu/s_logbf.S: New file. + * sysdeps/ia64/fpu/s_logbl.S: New file. + * sysdeps/ia64/fpu/s_matherrf.c: New file. + * sysdeps/ia64/fpu/s_matherrl.c: New file. + * sysdeps/ia64/fpu/s_modf.S: New file. + * sysdeps/ia64/fpu/s_modff.S: New file. + * sysdeps/ia64/fpu/s_modfl.S: New file. + * sysdeps/ia64/fpu/s_nearbyint.S: New file. + * sysdeps/ia64/fpu/s_nearbyintf.S: New file. + * sysdeps/ia64/fpu/s_nearbyintl.S: New file. + * sysdeps/ia64/fpu/s_rint.S: New file. + * sysdeps/ia64/fpu/s_rintf.S: New file. + * sysdeps/ia64/fpu/s_rintl.S: New file. + * sysdeps/ia64/fpu/s_round.S: New file. + * sysdeps/ia64/fpu/s_roundf.S: New file. + * sysdeps/ia64/fpu/s_roundl.S: New file. + * sysdeps/ia64/fpu/s_scalbn.S: New file. + * sysdeps/ia64/fpu/s_scalbnf.S: New file. + * sysdeps/ia64/fpu/s_scalbnl.S: New file. + * sysdeps/ia64/fpu/s_significand.S: New file. + * sysdeps/ia64/fpu/s_significandf.S: New file. + * sysdeps/ia64/fpu/s_significandl.S: New file. + * sysdeps/ia64/fpu/s_sin.c: New file. + * sysdeps/ia64/fpu/s_sincos.c: New file. + * sysdeps/ia64/fpu/s_sincosf.c: New file. + * sysdeps/ia64/fpu/s_sincosl.c: New file. + * sysdeps/ia64/fpu/s_sinf.c: New file. + * sysdeps/ia64/fpu/s_sinl.c: New file. + * sysdeps/ia64/fpu/s_tan.S: New file. + * sysdeps/ia64/fpu/s_tanf.S: New file. + * sysdeps/ia64/fpu/s_tanl.S: New file. + * sysdeps/ia64/fpu/s_trunc.S: New file. + * sysdeps/ia64/fpu/s_truncf.S: New file. + * sysdeps/ia64/fpu/s_truncl.S: New file. + * sysdeps/ia64/fpu/w_acos.c: New file. + * sysdeps/ia64/fpu/w_acosf.c: New file. + * sysdeps/ia64/fpu/w_acosl.c: New file. + * sysdeps/ia64/fpu/w_asin.c: New file. + * sysdeps/ia64/fpu/w_asinf.c: New file. + * sysdeps/ia64/fpu/w_asinl.c: New file. + * sysdeps/ia64/fpu/w_atan2.c: New file. + * sysdeps/ia64/fpu/w_atan2f.c: New file. + * sysdeps/ia64/fpu/w_atan2l.c: New file. + * sysdeps/ia64/fpu/w_cosh.c: New file. + * sysdeps/ia64/fpu/w_coshf.c: New file. + * sysdeps/ia64/fpu/w_coshl.c: New file. + * sysdeps/ia64/fpu/w_exp.c: New file. + * sysdeps/ia64/fpu/w_expf.c: New file. + * sysdeps/ia64/fpu/w_fmod.c: New file. + * sysdeps/ia64/fpu/w_fmodf.c: New file. + * sysdeps/ia64/fpu/w_fmodl.c: New file. + * sysdeps/ia64/fpu/w_hypot.c: New file. + * sysdeps/ia64/fpu/w_hypotf.c: New file. + * sysdeps/ia64/fpu/w_hypotl.c: New file. + * sysdeps/ia64/fpu/w_log.c: New file. + * sysdeps/ia64/fpu/w_log10.c: New file. + * sysdeps/ia64/fpu/w_log10f.c: New file. + * sysdeps/ia64/fpu/w_log10l.c: New file. + * sysdeps/ia64/fpu/w_logf.c: New file. + * sysdeps/ia64/fpu/w_logl.c: New file. + * sysdeps/ia64/fpu/w_pow.c: New file. + * sysdeps/ia64/fpu/w_powf.c: New file. + * sysdeps/ia64/fpu/w_powl.c: New file. + * sysdeps/ia64/fpu/w_remainder.c: New file. + * sysdeps/ia64/fpu/w_remainderf.c: New file. + * sysdeps/ia64/fpu/w_remainderl.c: New file. + * sysdeps/ia64/fpu/w_scalb.c: New file. + * sysdeps/ia64/fpu/w_scalbf.c: New file. + * sysdeps/ia64/fpu/w_scalbl.c: New file. + * sysdeps/ia64/fpu/w_sqrt.c: New file. + * sysdeps/ia64/fpu/w_sqrtf.c: New file. + * sysdeps/ia64/fpu/w_sqrtl.c: New file. + * sysdeps/ia64/fpu/libm-test-ulps: Adjust for long double + implementation. + * sysdeps/ia64/fpu/bits/mathdef.h: Correct float_t and double_t types. + Change FP_ILOGBNAN for new implementation. + * Verions.def: Add 2.2.3 versions. + +2001-02-18 Ulrich Drepper + + * math/libm-test.inc (scalb_test): Require invalid exception being + raised for invalid parameters. + * sysdeps/i386/fpu/e_scalb.S: Raise invalid exception if necessary. + * sysdeps/i386/fpu/e_scalbf.S: Likewise. + * sysdeps/i386/fpu/e_scalbl.S: Likewise. + +2001-02-18 Mark Kettenis + + * sysdeps/mach/getsysstats.c (__get_phys_pages): Change return + value to long int. + (__get_avphys_pages): Likewise. + +2001-02-18 Ulrich Drepper + + * math/libm-test.inc (pow_test): Correct expected results for x == +-1. + * sysdeps/i386/fpu/e_pow.S: Handle x == +-1 correctly. + * sysdeps/i386/fpu/e_powf.S: Likewise. + * sysdeps/i386/fpu/e_powl.S: Likewise. + + * sysdeps/i386/fpu/bits/mathinline.h: Remove pow inline code. + +2001-02-17 Ulrich Drepper + + * math/Makefile (libm-calls): It's e_exp2 not s_exp2. + + * sysdeps/generic/s_exp2l.c: Renamed to... + * sysdeps/generic/e_exp2l.c: ...this. New file. + * sysdeps/i386/fpu/s_exp2.S: Renamed to... + * sysdeps/i386/fpu/e_exp2.S: ...this. New file. + * sysdeps/i386/fpu/s_exp2f.S: Renamed to... + * sysdeps/i386/fpu/e_exp2f.S: ...this. New file. + * sysdeps/i386/fpu/s_exp2l.S: Renamed to... + * sysdeps/i386/fpu/e_exp2l.S: ...this. New file. + * sysdeps/ieee754/flt-32/s_exp2f.c: Renamed to... + * sysdeps/ieee754/flt-32/e_exp2f.c: ...this. New file. + * sysdeps/ieee754/dbl-64/s_exp2.c: Renamed to... + * sysdeps/ieee754/dbl-64/e_exp2.c: ...this. New file. + * sysdeps/m68k/fpu/s_exp2.c: Renamed to... + * sysdeps/m68k/fpu/e_exp2.c: ...this. New file. + * sysdeps/m68k/fpu/s_exp2f.c: Renamed to... + * sysdeps/m68k/fpu/e_exp2f.c: ...this. New file. + * sysdeps/m68k/fpu/s_exp2l.c: Renamed to... + * sysdeps/m68k/fpu/e_exp2l.c: ...this. New file. + +2001-02-17 Andreas Jaeger + + * configure.in: Allow gcc 3. + +2001-02-16 Ulrich Drepper + + * math/w_acos.c: Move to ... + * sysdeps/generic/w_acos.c: ...here. New file. + * math/w_acosf.c: Move to ... + * sysdeps/generic/w_acosf.c: ...here. New file. + * math/w_acosh.c: Move to ... + * sysdeps/generic/w_acosh.c: ...here. New file. + * math/w_acoshf.c: Move to ... + * sysdeps/generic/w_acoshf.c: ...here. New file. + * math/w_acoshl.c: Move to ... + * sysdeps/generic/w_acoshl.c: ...here. New file. + * math/w_acosl.c: Move to ... + * sysdeps/generic/w_acosl.c: ...here. New file. + * math/w_asin.c: Move to ... + * sysdeps/generic/w_asin.c: ...here. New file. + * math/w_asinf.c: Move to ... + * sysdeps/generic/w_asinf.c: ...here. New file. + * math/w_asinl.c: Move to ... + * sysdeps/generic/w_asinl.c: ...here. New file. + * math/w_atan2.c: Move to ... + * sysdeps/generic/w_atan2.c: ...here. New file. + * math/w_atan2f.c: Move to ... + * sysdeps/generic/w_atan2f.c: ...here. New file. + * math/w_atan2l.c: Move to ... + * sysdeps/generic/w_atan2l.c: ...here. New file. + * math/w_atanh.c: Move to ... + * sysdeps/generic/w_atanh.c: ...here. New file. + * math/w_atanhf.c: Move to ... + * sysdeps/generic/w_atanhf.c: ...here. New file. + * math/w_atanhl.c: Move to ... + * sysdeps/generic/w_atanhl.c: ...here. New file. + * math/w_cosh.c: Move to ... + * sysdeps/generic/w_cosh.c: ...here. New file. + * math/w_coshf.c: Move to ... + * sysdeps/generic/w_coshf.c: ...here. New file. + * math/w_coshl.c: Move to ... + * sysdeps/generic/w_coshl.c: ...here. New file. + * math/w_drem.c: Move to ... + * sysdeps/generic/w_drem.c: ...here. New file. + * math/w_dremf.c: Move to ... + * sysdeps/generic/w_dremf.c: ...here. New file. + * math/w_dreml.c: Move to ... + * sysdeps/generic/w_dreml.c: ...here. New file. + * math/w_exp10.c: Move to ... + * sysdeps/generic/w_exp10.c: ...here. New file. + * math/w_exp10f.c: Move to ... + * sysdeps/generic/w_exp10f.c: ...here. New file. + * math/w_exp10l.c: Move to ... + * sysdeps/generic/w_exp10l.c: ...here. New file. + * math/w_exp2.c: Move to ... + * sysdeps/generic/w_exp2.c: ...here. New file. + * math/w_exp2f.c: Move to ... + * sysdeps/generic/w_exp2f.c: ...here. New file. + * math/w_exp2l.c: Move to ... + * sysdeps/generic/w_exp2l.c: ...here. New file. + * math/w_fmod.c: Move to ... + * sysdeps/generic/w_fmod.c: ...here. New file. + * math/w_fmodf.c: Move to ... + * sysdeps/generic/w_fmodf.c: ...here. New file. + * math/w_fmodl.c: Move to ... + * sysdeps/generic/w_fmodl.c: ...here. New file. + * math/w_hypot.c: Move to ... + * sysdeps/generic/w_hypot.c: ...here. New file. + * math/w_hypotf.c: Move to ... + * sysdeps/generic/w_hypotf.c: ...here. New file. + * math/w_hypotl.c: Move to ... + * sysdeps/generic/w_hypotl.c: ...here. New file. + * math/w_j0.c: Move to ... + * sysdeps/generic/w_j0.c: ...here. New file. + * math/w_j0f.c: Move to ... + * sysdeps/generic/w_j0f.c: ...here. New file. + * math/w_j0l.c: Move to ... + * sysdeps/generic/w_j0l.c: ...here. New file. + * math/w_j1.c: Move to ... + * sysdeps/generic/w_j1.c: ...here. New file. + * math/w_j1f.c: Move to ... + * sysdeps/generic/w_j1f.c: ...here. New file. + * math/w_j1l.c: Move to ... + * sysdeps/generic/w_j1l.c: ...here. New file. + * math/w_jn.c: Move to ... + * sysdeps/generic/w_jn.c: ...here. New file. + * math/w_jnf.c: Move to ... + * sysdeps/generic/w_jnf.c: ...here. New file. + * math/w_jnl.c: Move to ... + * sysdeps/generic/w_jnl.c: ...here. New file. + * math/w_lgamma.c: Move to ... + * sysdeps/generic/w_lgamma.c: ...here. New file. + * math/w_lgammaf.c: Move to ... + * sysdeps/generic/w_lgammaf.c: ...here. New file. + * math/w_lgammaf_r.c: Move to ... + * sysdeps/generic/w_lgammaf_r.c: ...here. New file. + * math/w_lgammal.c: Move to ... + * sysdeps/generic/w_lgammal.c: ...here. New file. + * math/w_lgammal_r.c: Move to ... + * sysdeps/generic/w_lgammal_r.c: ...here. New file. + * math/w_lgamma_r.c: Move to ... + * sysdeps/generic/w_lgamma_r.c: ...here. New file. + * math/w_log10.c: Move to ... + * sysdeps/generic/w_log10.c: ...here. New file. + * math/w_log10f.c: Move to ... + * sysdeps/generic/w_log10f.c: ...here. New file. + * math/w_log10l.c: Move to ... + * sysdeps/generic/w_log10l.c: ...here. New file. + * math/w_log.c: Move to ... + * sysdeps/generic/w_log.c: ...here. New file. + * math/w_logf.c: Move to ... + * sysdeps/generic/w_logf.c: ...here. New file. + * math/w_logl.c: Move to ... + * sysdeps/generic/w_logl.c: ...here. New file. + * math/w_pow.c: Move to ... + * sysdeps/generic/w_pow.c: ...here. New file. + * math/w_powf.c: Move to ... + * sysdeps/generic/w_powf.c: ...here. New file. + * math/w_powl.c: Move to ... + * sysdeps/generic/w_powl.c: ...here. New file. + * math/w_remainder.c: Move to ... + * sysdeps/generic/w_remainder.c: ...here. New file. + * math/w_remainderf.c: Move to ... + * sysdeps/generic/w_remainderf.c: ...here. New file. + * math/w_remainderl.c: Move to ... + * sysdeps/generic/w_remainderl.c: ...here. New file. + * math/w_scalb.c: Move to ... + * sysdeps/generic/w_scalb.c: ...here. New file. + * math/w_scalbf.c: Move to ... + * sysdeps/generic/w_scalbf.c: ...here. New file. + * math/w_scalbl.c: Move to ... + * sysdeps/generic/w_scalbl.c: ...here. New file. + * math/w_sinh.c: Move to ... + * sysdeps/generic/w_sinh.c: ...here. New file. + * math/w_sinhf.c: Move to ... + * sysdeps/generic/w_sinhf.c: ...here. New file. + * math/w_sinhl.c: Move to ... + * sysdeps/generic/w_sinhl.c: ...here. New file. + * math/w_sqrtl.c: Move to ... + * sysdeps/generic/w_sqrtl.c: ...here. New file. + * math/w_tgamma.c: Move to ... + * sysdeps/generic/w_tgamma.c: ...here. New file. + * math/w_tgammaf.c: Move to ... + * sysdeps/generic/w_tgammaf.c: ...here. New file. + * math/w_tgammal.c: Move to ... + * sysdeps/generic/w_tgammal.c: ...here. New file. + + * locale/programs/ld-address.c (address_finish): Add 'S' to allow + formats for postal_fmt. + +2001-02-16 Jakub Jelinek + + * sysdeps/unix/sysv/linux/alpha/syscalls.list (ftruncate): Add + __ftruncate64 alias. + * sysdeps/unix/sysv/linux/sparc/sparc64/syscalls.list (ftruncate): + Likewise. + +2001-02-15 David Mosberger + + * sysdeps/unix/sysv/linux/ia64/__longjmp.S (__longjmp): No need to + do "loadrs". Writing to bspstore already takes care of + invalidating the "clean" partition. + +2001-02-16 Andreas Schwab + + * sysdeps/m68k/fpu/s_nextafterl.c: New file. + * sysdeps/m68k/fpu/s_fpclassifyl.c: New file. + 2001-02-15 Jakub Jelinek * posix/regex.c (init_syntax_once): Add prototype. diff -durpNa glibc-2.2.2/FAQ glibc-2.2.3/FAQ --- glibc-2.2.2/FAQ Thu Feb 15 14:34:52 2001 +++ glibc-2.2.3/FAQ Thu Apr 26 21:37:52 2001 @@ -163,6 +163,7 @@ please let me know. when I try to use it, it always returns -1 and sets errno to ENOSYS. 3.22. My program segfaults when I call fclose() on the FILE* returned from setmntent(). Is this a glibc bug? +3.23. I get "undefined reference to `atexit'" 4. Miscellaneous @@ -183,6 +184,8 @@ please let me know. 4.8. The conversion table for character set XX does not match with what I expect. 4.9. How can I find out which version of glibc I am using in the moment? +4.10. Context switching with setcontext() does not work from within + signal handlers. ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ @@ -211,6 +214,8 @@ in the future, are: mips*-*-linux-gnu Linux-2.x on MIPS ia64-*-linux-gnu Linux-2.x on ia64 s390-*-linux-gnu Linux-2.x on IBM S/390 + s390x-*-linux-gnu Linux-2.x on IBM S/390 64-bit + cris-*-linux-gnu Linux-2.4+ on CRIS Ports to other Linux platforms are in development, and may in fact work already, but no one has sent us success reports for them. Currently no @@ -273,7 +278,7 @@ them. 1.5. Which compiler should I use for powerpc? {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. +of all the other tools, of course). See also question 2.8. 1.6. Which tools should I use for ARM? @@ -295,9 +300,7 @@ Binutils 2.10.1 or later is also require `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.) Please note that the required minimal version - (0.10.35) of gettext is alpha software and available from - ftp://alpha.gnu.org/gnu . + updated in patches.) * 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 @@ -929,7 +932,7 @@ necessary conversion and calls to create `db-Makefile' in the subdirectory `nss' and you can call it with `make -f db-Makefile'. Please note that not all services are capable of using a database. Currently passwd, group, ethers, protocol, rpc, services shadow -and netgroup are implemented. See also question question 2.31. +and netgroup are implemented. See also question 2.31. 2.17. I have /usr/include/net and /usr/include/scsi as symlinks @@ -1248,9 +1251,9 @@ http://clisp.cons.org/~haible/gccinclude 2.35. When recompiling GCC, I get compilation errors in libio. -{BH} You are trying to recompile gcc 2.95.2? Use gcc 2.95.2.1 instead. +{BH} You are trying to recompile gcc 2.95.2? Use gcc 2.95.3 instead. This version is needed because the fpos_t type and a few libio internals -have changed in glibc 2.2, and gcc 2.95.2.1 contains a corresponding patch. +have changed in glibc 2.2, and gcc 2.95.3 contains a corresponding patch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@ -1682,6 +1685,17 @@ In the case of setmntent(), it may appea won't always work. Unfortunately, for compatibility reasons, we can't change the return type of setmntent() to something other than FILE *. + +3.23. I get "undefined reference to `atexit'" + +{UD} This means that your installation is somehow broken. The situation is +the same as for 'stat', 'fstat', etc (see question 2.7). Investigate why the +linker does not pick up libc_nonshared.a. + +If a similar message is issued at runtime this means that the application or +DSO is not linked against libc. This can cause problems since 'atexit' is +not exported anymore. + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @@ -1840,12 +1854,56 @@ int main (void) { puts (gnu_get_libc_ver This interface can also obviously be used to perform tests at runtime if this should be necessary. + +4.10. Context switching with setcontext() does not work from within + signal handlers. + +{DMT} The Linux implementations (IA-64, S390 so far) of setcontext() +supports synchronous context switches only. There are several reasons for +this: + + o UNIX provides no other (portable) way of effecting a synchronous + context switch (also known as co-routine switch). Some versions + support this via setjmp()/longjmp() but this does not work + universally. + + o As defined by the UNIX '98 standard, the only way setcontext() + could trigger an asychronous context switch is if this function + were invoked on the ucontext_t pointer passed as the third argument + to a signal handler. But according to draft 5, XPG6, XBD 2.4.3, + setcontext() is not among the set of routines that may be called + from a signal handler. + + o If setcontext() were to be used for asynchronous context switches, + all kinds of synchronization and re-entrancy issues could arise and + these problems have already been solved by real multi-threading + libraries (e.g., POSIX threads or Linux threads). + + o Synchronous context switching can be implemented entirely in + user-level and less state needs to be saved/restored than for an + asynchronous context switch. It is therefore useful to distinguish + between the two types of context switches. Indeed, some + application vendors are known to use setcontext() to implement + co-routines on top of normal (heavier-weight) pre-emptable threads. + +It should be noted that if someone was dead-bent on using setcontext() +on the third arg of a signal handler, then IA-64 Linux could support +this via a special version of sigaction() which arranges that all +signal handlers start executing in a shim function which takes care of +saving the preserved registers before calling the real signal handler +and restoring them afterwards. In other words, we could provide a +compatibility layer which would support setcontext() for asynchronous +context switches. However, given the arguments above, I don't think +that makes sense. setcontext() provides a decent co-routine interface +and we should just discourage any asynchronous use (which just calls +for trouble at any rate). + ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Answers were given by: -{UD} Ulrich Drepper, -{DMT} David Mosberger-Tang, +{UD} Ulrich Drepper, +{DMT} David Mosberger-Tang, {RM} Roland McGrath, {AJ} Andreas Jaeger, {EY} Eric Youngdale, @@ -1853,10 +1911,10 @@ Answers were given by: {MK} Mark Kettenis, {ZW} Zack Weinberg, {TK} Thorsten Kukuk, -{GK} Geoffrey Keating, +{GK} Geoffrey Keating, {HJ} H.J. Lu, {CG} Cristian Gafton, -{AO} Alexandre Oliva, +{AO} Alexandre Oliva, {BH} Bruno Haible, Local Variables: diff -durpNa glibc-2.2.2/FAQ.in glibc-2.2.3/FAQ.in --- glibc-2.2.2/FAQ.in Thu Feb 15 14:08:24 2001 +++ glibc-2.2.3/FAQ.in Wed Apr 25 14:50:52 2001 @@ -38,6 +38,8 @@ in the future, are: mips*-*-linux-gnu Linux-2.x on MIPS ia64-*-linux-gnu Linux-2.x on ia64 s390-*-linux-gnu Linux-2.x on IBM S/390 + s390x-*-linux-gnu Linux-2.x on IBM S/390 64-bit + cris-*-linux-gnu Linux-2.4+ on CRIS Ports to other Linux platforms are in development, and may in fact work already, but no one has sent us success reports for them. Currently no @@ -96,7 +98,7 @@ them. ??powerpc Which compiler should I use for powerpc? {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. +of all the other tools, of course). See also ?excpt. ??arm Which tools should I use for ARM? @@ -116,9 +118,7 @@ Binutils 2.10.1 or later is also require `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.) Please note that the required minimal version - (0.10.35) of gettext is alpha software and available from - ftp://alpha.gnu.org/gnu . + updated in patches.) * 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 @@ -564,7 +564,7 @@ exactly what to use. Version 2.7.2.3 does and future versions of GCC will automatically provide the correct specs. -?? Looking through the shared libc file I haven't found the +??nonsh Looking through the shared libc file I haven't found the functions `stat', `lstat', `fstat', and `mknod' and while linking on my Linux system I get error messages. How is this supposed to work? @@ -723,7 +723,7 @@ necessary conversion and calls to create `db-Makefile' in the subdirectory `nss' and you can call it with `make -f db-Makefile'. Please note that not all services are capable of using a database. Currently passwd, group, ethers, protocol, rpc, services shadow -and netgroup are implemented. See also question ?nssdb. +and netgroup are implemented. See also ?nssdb. ?? I have /usr/include/net and /usr/include/scsi as symlinks into my Linux source tree. Is that wrong? @@ -1023,9 +1023,9 @@ http://clisp.cons.org/~haible/gccinclude ?? When recompiling GCC, I get compilation errors in libio. -{BH} You are trying to recompile gcc 2.95.2? Use gcc 2.95.2.1 instead. +{BH} You are trying to recompile gcc 2.95.2? Use gcc 2.95.3 instead. This version is needed because the fpos_t type and a few libio internals -have changed in glibc 2.2, and gcc 2.95.2.1 contains a corresponding patch. +have changed in glibc 2.2, and gcc 2.95.3 contains a corresponding patch. ? Source and binary incompatibilities, and what to do about them @@ -1437,6 +1437,16 @@ In the case of setmntent(), it may appea won't always work. Unfortunately, for compatibility reasons, we can't change the return type of setmntent() to something other than FILE *. +?? I get "undefined reference to `atexit'" + +{UD} This means that your installation is somehow broken. The situation is +the same as for 'stat', 'fstat', etc (see ?nonsh). Investigate why the +linker does not pick up libc_nonshared.a. + +If a similar message is issued at runtime this means that the application or +DSO is not linked against libc. This can cause problems since 'atexit' is +not exported anymore. + ? Miscellaneous @@ -1585,10 +1595,54 @@ int main (void) { puts (gnu_get_libc_ver This interface can also obviously be used to perform tests at runtime if this should be necessary. +?? Context switching with setcontext() does not work from within + signal handlers. + +{DMT} The Linux implementations (IA-64, S390 so far) of setcontext() +supports synchronous context switches only. There are several reasons for +this: + + o UNIX provides no other (portable) way of effecting a synchronous + context switch (also known as co-routine switch). Some versions + support this via setjmp()/longjmp() but this does not work + universally. + + o As defined by the UNIX '98 standard, the only way setcontext() + could trigger an asychronous context switch is if this function + were invoked on the ucontext_t pointer passed as the third argument + to a signal handler. But according to draft 5, XPG6, XBD 2.4.3, + setcontext() is not among the set of routines that may be called + from a signal handler. + + o If setcontext() were to be used for asynchronous context switches, + all kinds of synchronization and re-entrancy issues could arise and + these problems have already been solved by real multi-threading + libraries (e.g., POSIX threads or Linux threads). + + o Synchronous context switching can be implemented entirely in + user-level and less state needs to be saved/restored than for an + asynchronous context switch. It is therefore useful to distinguish + between the two types of context switches. Indeed, some + application vendors are known to use setcontext() to implement + co-routines on top of normal (heavier-weight) pre-emptable threads. + +It should be noted that if someone was dead-bent on using setcontext() +on the third arg of a signal handler, then IA-64 Linux could support +this via a special version of sigaction() which arranges that all +signal handlers start executing in a shim function which takes care of +saving the preserved registers before calling the real signal handler +and restoring them afterwards. In other words, we could provide a +compatibility layer which would support setcontext() for asynchronous +context switches. However, given the arguments above, I don't think +that makes sense. setcontext() provides a decent co-routine interface +and we should just discourage any asynchronous use (which just calls +for trouble at any rate). + + Answers were given by: -{UD} Ulrich Drepper, -{DMT} David Mosberger-Tang, +{UD} Ulrich Drepper, +{DMT} David Mosberger-Tang, {RM} Roland McGrath, {AJ} Andreas Jaeger, {EY} Eric Youngdale, @@ -1596,10 +1650,10 @@ Answers were given by: {MK} Mark Kettenis, {ZW} Zack Weinberg, {TK} Thorsten Kukuk, -{GK} Geoffrey Keating, +{GK} Geoffrey Keating, {HJ} H.J. Lu, {CG} Cristian Gafton, -{AO} Alexandre Oliva, +{AO} Alexandre Oliva, {BH} Bruno Haible, Local Variables: diff -durpNa glibc-2.2.2/INSTALL glibc-2.2.3/INSTALL --- glibc-2.2.2/INSTALL Thu Feb 15 14:08:24 2001 +++ glibc-2.2.3/INSTALL Wed Apr 25 14:50:52 2001 @@ -303,7 +303,7 @@ build the GNU C library: The GNU C library can only be compiled with the GNU C compiler family. As of the 2.2 release, GCC 2.95.2 or higher is required. - As of this writing, GCC 2.95.2 is the compiler we advise to use. + As of this writing, GCC 2.95.3 is the compiler we advise to use. You can use whatever compiler you like to compile programs that use GNU libc, but be aware that both GCC 2.7 and 2.8 have bugs in @@ -362,8 +362,7 @@ If you change any of the `configure.in' and if you change any of the message translation files you will need - * GNU `gettext' 0.10.35 or later (version 0.10.35 is a alpha release - and available via ftp from alpha.gnu.org/gnu) + * GNU `gettext' 0.10.36 or later You may also need these packages if you upgrade your source tree using patches, although we try to avoid this. @@ -376,6 +375,7 @@ following patterns: alpha*-*-linux arm-*-linux + cris-*-linux hppa-*-linux iX86-*-gnu iX86-*-linux @@ -384,6 +384,7 @@ following patterns: mips*-*-linux powerpc-*-linux s390-*-linux + s390x-*-linux sparc-*-linux sparc64-*-linux diff -durpNa glibc-2.2.2/Makeconfig glibc-2.2.3/Makeconfig --- glibc-2.2.2/Makeconfig Sat Jan 6 20:35:10 2001 +++ glibc-2.2.3/Makeconfig Tue Apr 17 08:17:07 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1991-1999,2000 Free Software Foundation, Inc. +# Copyright (C) 1991-2000, 2001 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 @@ -725,11 +725,15 @@ $(common-objpfx)soversions.i: $(..)shlib test -n "$$version" && \ test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \ : "$$conf"` != 0 || continue; \ - lib=`echo $$version | sed 's/=.*$$//'`; \ - if eval test -z "\$${versioned_$${lib}}"; then \ - eval versioned_$${lib}=yes; \ - number=`echo $$version | sed "s/^.*=//"`; \ - echo $$lib $$number $$setname; \ + if test "x$$version" = xDEFAULT; then \ + default_setname="$$setname"; \ + else \ + lib=`echo $$version | sed 's/=.*$$//'`; \ + if eval test -z "\$${versioned_$${lib}}"; then \ + eval versioned_$${lib}=yes; \ + number=`echo $$version | sed "s/^.*=//"`; \ + echo $$lib $$number $${setname:-$${default_setname}}; \ + fi; \ fi; \ done > $@T; exit 0 mv -f $@T $@ diff -durpNa glibc-2.2.2/Makefile glibc-2.2.3/Makefile --- glibc-2.2.2/Makefile Fri Feb 9 11:52:46 2001 +++ glibc-2.2.3/Makefile Mon Apr 9 20:03:22 2001 @@ -267,7 +267,7 @@ distribute := README README.libm INSTAL mkinstalldirs move-if-change install-sh \ test-installation.pl gen-FAQ.pl versions.awk\ gen-sorted.awk abi-versions.awk \ - firstversions.awk) + firstversions.awk documented.sh) distribute := $(strip $(distribute)) generated := $(generated) stubs.h diff -durpNa glibc-2.2.2/Makerules glibc-2.2.3/Makerules --- glibc-2.2.2/Makerules Fri Feb 9 10:03:56 2001 +++ glibc-2.2.3/Makerules Wed Apr 25 14:50:52 2001 @@ -413,29 +413,75 @@ endif lib%.so: lib%_pic.a $(+preinit) $(+postinit) $(+interp) $(build-shlib) -define build-shlib -$(LINK.o) -shared -Wl,-O1 -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \ +define build-shlib-helper +$(LINK.o) -shared -Wl,-O1 $(sysdep-LDFLAGS) $(config-LDFLAGS) \ $(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \ $(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \ -Wl,-soname=lib$(libprefix)$(@F:lib%.so=%).so$($(@F)-version) \ $(LDFLAGS.so) $(LDFLAGS-$(@F:lib%.so=%).so) \ - -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \ - -Wl,--whole-archive \ + -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) +endef + +ifeq (yes,$(elf)) +# binutils only position loadable notes into the first page for binaries, +# not for shared objects +define build-shlib +$(build-shlib-helper) \ + -o $@.new $(csu-objpfx)abi-note.o -Wl,--verbose \ + $(LDLIBS-$(@F:lib%.so=%).so) 2>&1 | \ + sed -e '/^=========/,/^=========/!d;/^=========/d' \ + -e 's/^.*\.hash[ ]*:.*$$/ .note.ABI-tag : { *(.note.ABI-tag) } &/' \ + > $@.lds +rm -f $@.new +$(build-shlib-helper) -o $@ -T $@.lds \ + -Wl,--whole-archive $(csu-objpfx)abi-note.o \ + $(filter-out $(map-file) $(+preinit) $(+postinit),$^) \ + $(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so) +rm -f $@.lds +endef +else +define build-shlib +$(build-shlib-helper) \ + -o $@ -Wl,--whole-archive \ $(filter-out $(map-file) $(+preinit) $(+postinit),$^) \ $(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so) endef +endif + +define build-module-helper +$(LINK.o) -shared $(sysdep-LDFLAGS) $(config-LDFLAGS) \ + -B$(csu-objpfx) $(load-map-file) \ + $(LDFLAGS.so) $(LDFLAGS-$(@F:%.so=%).so) \ + -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) +endef # This macro is similar to build-shlib but it does not define a soname # and it does not depend on the destination name to start with `lib'. +ifeq (yes,$(elf)) +# binutils only position loadable notes into the first page for binaries, +# not for shared objects define build-module -$(LINK.o) -shared -o $@ $(sysdep-LDFLAGS) $(config-LDFLAGS) \ - -B$(csu-objpfx) $(load-map-file) \ - $(LDFLAGS.so) $(LDFLAGS-$(@F:%.so=%).so) \ - -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \ - -Wl,--whole-archive \ +$(build-module-helper) \ + -o $@.new $(csu-objpfx)abi-note.o -Wl,--verbose \ + $(LDLIBS-$(@F:lib%.so=%).so) 2>&1 | \ + sed -e '/^=========/,/^=========/!d;/^=========/d' \ + -e 's/^.*\.hash[ ]*:.*$$/ .note.ABI-tag : { *(.note.ABI-tag) } &/' \ + > $@.lds +rm -f $@.new +$(build-module-helper) -o $@ -T $@.lds \ + -Wl,--whole-archive $(csu-objpfx)abi-note.o \ + $(filter-out $(map-file) $(+preinit) $(+postinit),$^) \ + $(no-whole-archive) $(LDLIBS-$(@F:lib%.so=%).so) +rm -f $@.lds +endef +else +define build-module +$(build-module-helper) \ + -o $@ -Wl,--whole-archive \ $(filter-out $(map-file) $(+preinit) $(+postinit),$^) \ $(no-whole-archive) $(LDLIBS-$(@F:%.so=%).so) endef +endif # Don't try to use -lc when making libc.so itself. # Also omits crti.o and crtn.o, which we do not want @@ -454,7 +500,7 @@ LDFLAGS-c.so += -u __register_frame # between libc.so and ld.so, which can make it impossible to upgrade. $(common-objpfx)libc_pic.os: $(common-objpfx)libc_pic.a $(LINK.o) -nostdlib -nostartfiles -r -o $@ \ - -Wl,-d -Wl,--whole-archive $^ + $(LDFLAGS-c_pic.os) -Wl,-d -Wl,--whole-archive $^ # Use our own special initializer and finalizer files for libc.so. $(common-objpfx)libc.so: $(elfobjdir)/soinit.os \ $(common-objpfx)libc_pic.os \ diff -durpNa glibc-2.2.2/NEWS glibc-2.2.3/NEWS --- glibc-2.2.2/NEWS Thu Feb 15 14:08:24 2001 +++ glibc-2.2.3/NEWS Wed Apr 25 14:50:52 2001 @@ -1,11 +1,47 @@ -GNU C Library NEWS -- history of user-visible changes. 2001-2-9 - -Copyright (C) 1992-1999, 2000, 2001 Free Software Foundation, Inc. +GNU C Library NEWS -- history of user-visible changes. 2001-4-20 +Copyright (C) 1992-2000, 2001 Free Software Foundation, Inc. See the end for copying conditions. Please send GNU C library bug reports using the `glibcbug' script to . Questions and suggestions should be send to . + +Version 2.2.3 + +* Intel's IA-64 math library is largely integrated. It provides fast and + accurate implementatations for most basic and standard math functions + in float, double, and long double format. + +* Stephen Moshier implemented j0, j1, jn, y0, y1, yn, lgamma, erf, erfc, + and asin for the 96-bit long double format and asin, log, tan for the + 128-bit long double format. + +* The beginning of a last-bit accurate math library by IBM Haifa were added. + The basic double functions exist today. Contributed by Abraham Ziv + , Moshe Olshansky , Ealan Henis + , and Anna Reitman . + +* An asynchronous name lookup library was added. The interface is designed + after POSIX AIO. The proposal was circulated beforehand to get comments. + No negative ones came in. Implemented by Ulrich Drepper. + +* Port to S390/64bit contributed by Martin Schwidefsky + . + +* David Mosberger implemented the setcontext family + of functions for Linux/IA-64. + +* The RPC code is now thread safe. Threads can now use the same service + of different services at the same time. Patch by Eric Norum + with some help by Ulrich Drepper. + +* Martin Schwidefsky implemented the setcontext + family of functions for Linux/S390. + +* Ulrich Drepper implemented the setcontext family + of functions for Linux/x86. + +* Port to Linux/CRIS contributed by Axis Communications. Version 2.2.2 diff -durpNa glibc-2.2.2/PROJECTS glibc-2.2.3/PROJECTS --- glibc-2.2.2/PROJECTS Thu Feb 15 14:08:24 2001 +++ glibc-2.2.3/PROJECTS Mon Mar 26 20:52:47 2001 @@ -37,8 +37,7 @@ contact . for the current status (of course better use a mirror of ftp.gnu.org). -[ 6] Write `long double' versions of the math functions. This should be - done in collaboration with the NetBSD and FreeBSD people. +[ 6] Write `long double' versions of the math functions. The libm is in fact fdlibm (not the same as in Linux libc 5). @@ -124,6 +123,9 @@ contact . [19] A user-level STREAMS implementation should be available if the kernel does not provide the support. +*** This is a much lower priority job now that STREAMS are optional in + XPG. + [20] More conversion modules for iconv(3). Existing modules should be extended to do things like transliteration if this is wanted. @@ -140,9 +142,12 @@ contact . - the nscd creates the hash tables and the information it stores in it in a mmap()ed region. This means no pointers must be used, only offsets. + OR + if POSIX shared memory is available use a named shared memory + region to put the data in - each program using NSS functionality tries to open the file with the data. - - by checking some timestamp (which the nscd renew frequently) + - by checking some timestamp (which the nscd renews frequently) the programs can test whether the file is still valid - if the file is valid look through the nscd and locate the appropriate hash table for the database and lookup the data. @@ -152,7 +157,7 @@ contact . [22] It should be possible to have the information gconv-modules in - a simple database which is faster to access. Using libdb is probably + a simple cache which is faster to access. Using libdb is probably overkill and loading it would probably be slower than reading the plain text file. But a file format with a simple hash table and some data it points to should be fine. Probably it should be @@ -163,7 +168,7 @@ contact . && stat ("gconv-modules.db", &std) == 0 && stp.st_mtime < std.st_mtime) { - ... use the database ... + ... use the cache ... { else { @@ -194,3 +199,9 @@ contact . [26] ...done + + +[27] We need a second test suite with tests which cannot run during a normal + `make check' run. This test suite can require root priviledges and + can test things like DNS (i.e., require network access), + user-interaction, networking in general, and probably many other things. diff -durpNa glibc-2.2.2/README glibc-2.2.3/README --- glibc-2.2.2/README Fri Feb 9 11:10:02 2001 +++ glibc-2.2.3/README Wed Apr 25 16:16:36 2001 @@ -1,4 +1,4 @@ -This directory contains the version 2.2.2 release of the GNU C Library. +This directory contains the version 2.2.3 release of the GNU C Library. Many bugs have been fixed since the last release. Some bugs surely remain. @@ -11,13 +11,16 @@ configurations: alpha*-*-linux-gnu Linux-2.x on DEC Alpha powerpc-*-linux-gnu Linux and MkLinux on PowerPC systems sparc-*-linux-gnu Linux-2.x on SPARC - sparc64-*-linux-gnu Linux-2.x on UltraSPARC + sparc64-*-linux-gnu Linux-2.x on UltraSPARC 64-bit arm-*-none ARM standalone systems arm-*-linux Linux-2.x on ARM arm-*-linuxaout Linux-2.x on ARM using a.out binaries mips*-*-linux-gnu Linux-2.x on MIPS ia64-*-linux-gnu Linux-2.x on ia64 s390-*-linux-gnu Linux-2.x on IBM S/390 + s390x-*-linux-gnu Linux-2.x on IBM S/390 64-bit + sh-*-linux-gnu Linux-2.x on Super Hitachi + cris-*-linux-gnu Linux-2.4+ on CRIS Former releases of this library (version 1.09.1 and perhaps earlier versions) used to run on the following configurations: diff -durpNa glibc-2.2.2/Versions.def glibc-2.2.3/Versions.def --- glibc-2.2.2/Versions.def Tue Jan 23 14:07:15 2001 +++ glibc-2.2.3/Versions.def Mon Mar 26 20:52:47 2001 @@ -11,6 +11,7 @@ libc { GLIBC_2.2 GLIBC_2.2.1 GLIBC_2.2.2 + GLIBC_2.2.3 %ifdef USE_IN_LIBIO HURD_CTHREADS_0.3 %endif @@ -31,6 +32,7 @@ libm { GLIBC_2.0 GLIBC_2.1 GLIBC_2.2 + GLIBC_2.2.3 } libnsl { GLIBC_2.0 @@ -88,7 +90,11 @@ ld { GLIBC_2.1.1 GLIBC_2.2 GLIBC_2.2.1 + GLIBC_2.2.3 } libthread_db { GLIBC_2.1.3 +} +libanl { + GLIBC_2.2.3 } diff -durpNa glibc-2.2.2/catgets/Makefile glibc-2.2.3/catgets/Makefile --- glibc-2.2.2/catgets/Makefile Sat Jan 6 20:35:10 2001 +++ glibc-2.2.3/catgets/Makefile Mon Mar 26 20:52:47 2001 @@ -45,7 +45,7 @@ $(objpfx)gencat: $(gencat-modules:%=$(ob catgets-CPPFLAGS := -DNLSPATH='"$(msgcatdir)/%L/%N:$(msgcatdir)/%L/LC_MESSAGES/%N:$(msgcatdir)/%l/%N:$(msgcatdir)/%l/LC_MESSAGES/%N:"' \ -DHAVE_CONFIG_H -generated = de.msg test1.cat test1.h sample.SJIS.cat +generated = de.msg test1.cat test1.h sample.SJIS.cat test-gencat.h generated-dirs = de tst-catgets-ENV = NLSPATH="$(objpfx)%l/%N.cat" LANG=de @@ -74,5 +74,5 @@ $(objpfx)test-gencat.out: test-gencat.sh $(objpfx)sample.SJIS.cat: sample.SJIS $(objpfx)gencat GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \ - $(built-program-cmd) < $(word 1,$^) > $@ + $(built-program-cmd) -H $(objpfx)test-gencat.h < $(word 1,$^) > $@ endif diff -durpNa glibc-2.2.2/catgets/gencat.c glibc-2.2.3/catgets/gencat.c --- glibc-2.2.2/catgets/gencat.c Sat Jan 6 20:35:10 2001 +++ glibc-2.2.3/catgets/gencat.c Mon Mar 26 20:52:47 2001 @@ -649,6 +649,7 @@ duplicated message identifier")); size_t outlen; struct message_list *newp; size_t line_len = strlen (line) + 1; + size_t ident_len = 0; /* We need the conversion. */ if (cd_towc == (iconv_t) -1 @@ -699,6 +700,9 @@ invalid character: message ignored")); normalize_line (fname, start_line, cd_towc, wbuf, current->quote_char, escape_char); + if (ident) + ident_len = line - this_line; + /* Now the string is free of escape sequences. Convert it back into a multibyte character string. First free the memory allocated for the original string. */ @@ -714,7 +718,8 @@ invalid character: message ignored")); outlen = obstack_room (¤t->mem_pool); obstack_blank (¤t->mem_pool, outlen); this_line = (char *) obstack_base (¤t->mem_pool); - outbuf = this_line; + outbuf = this_line + ident_len; + outlen -= ident_len; /* Flush the state. */ iconv (cd_tomb, NULL, NULL, NULL, NULL); @@ -734,9 +739,9 @@ invalid character: message ignored")); newp = (struct message_list *) xmalloc (sizeof (*newp)); newp->number = message_number; - newp->message = line; + newp->message = line + ident_len; /* Remember symbolic name; is NULL if no is given. */ - newp->symbol = ident; + newp->symbol = ident ? line : NULL; /* Remember where we found the character. */ newp->fname = fname; newp->line = start_line; diff -durpNa glibc-2.2.2/catgets/sample.SJIS glibc-2.2.3/catgets/sample.SJIS --- glibc-2.2.2/catgets/sample.SJIS Tue Nov 28 05:55:03 2000 +++ glibc-2.2.3/catgets/sample.SJIS Mon Mar 26 20:52:47 2001 @@ -8,3 +8,5 @@ $set 1 3 sample3:—\’è•\: 4 sample4:TEST\tTAB: 5 sample5:‹@”\\t\Ží—Þ: +$set Another +FOO "message foo" diff -durpNa glibc-2.2.2/catgets/test-gencat.sh glibc-2.2.3/catgets/test-gencat.sh --- glibc-2.2.2/catgets/test-gencat.sh Tue Nov 28 05:55:43 2000 +++ glibc-2.2.3/catgets/test-gencat.sh Mon Mar 26 20:52:47 2001 @@ -1,6 +1,6 @@ #! /bin/sh # Test escape character handling in gencat. -# Copyright (C) 2000 Free Software Foundation, Inc. +# Copyright (C) 2000, 2001 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 @@ -36,5 +36,12 @@ sample3:—\’è•\: sample4:TEST TAB: sample5:‹@”\ \Ží—Þ: EOF +res=$? -exit $? +cat <&6 -echo "configure:1044: checking sysdep dirs" >&5 +echo "configure:1050: checking sysdep dirs" >&5 # Make sco3.2v4 become sco3.2.4 and sunos4.1.1_U1 become sunos4.1.1.U1. os="`echo $os | sed 's/\([0-9A-Z]\)[v_]\([0-9A-Z]\)/\1.\2/g'`" @@ -1246,7 +1252,7 @@ echo "$ac_t""$default_sysnames" 1>&6 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1250: checking for a BSD compatible install" >&5 +echo "configure:1256: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1303,7 +1309,7 @@ if test "$INSTALL" = "${srcdir}/scripts/ INSTALL='\$(..)./scripts/install-sh -c' fi echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 -echo "configure:1307: checking whether ln -s works" >&5 +echo "configure:1313: checking whether ln -s works" >&5 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1332,7 +1338,7 @@ fi # Extract the first word of "pwd", so it can be a program name with args. set dummy pwd; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1336: checking for $ac_word" >&5 +echo "configure:1342: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_PWD_P'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1371,7 +1377,7 @@ fi # These programs are version sensitive. echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1375: checking build system type" >&5 +echo "configure:1381: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1399,7 +1405,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:1403: checking for $ac_word" >&5 +echo "configure:1409: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1433,11 +1439,11 @@ if test -z "$CC"; then else # Found it, now check the version. echo $ac_n "checking version of $CC""... $ac_c" 1>&6 -echo "configure:1437: checking version of $CC" >&5 +echo "configure:1443: checking version of $CC" >&5 ac_prog_version=`$CC -v 2>&1 | sed -n 's/^.*version \([egcygnustpi-]*[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - *gcc-2.9[5-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]|sgicc-*) + *gcc-2.9[5-9].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|3.[0-9]*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; @@ -1453,7 +1459,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:1457: checking for $ac_word" >&5 +echo "configure:1463: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MAKE'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1487,7 +1493,7 @@ if test -z "$MAKE"; then else # Found it, now check the version. echo $ac_n "checking version of $MAKE""... $ac_c" 1>&6 -echo "configure:1491: checking version of $MAKE" >&5 +echo "configure:1497: checking version of $MAKE" >&5 ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -1503,12 +1509,20 @@ if test $ac_verc_fail = yes; then fi + +if test -n "$critic_missing"; then +{ echo "configure: error: +*** Some critical program is missing or too old. +*** Check the INSTALL file for required versions." 1>&2; exit 1; } +fi + + for ac_prog in gnumsgfmt gmsgfmt msgfmt 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:1512: checking for $ac_word" >&5 +echo "configure:1526: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MSGFMT'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1542,11 +1556,11 @@ if test -z "$MSGFMT"; then else # Found it, now check the version. echo $ac_n "checking version of $MSGFMT""... $ac_c" 1>&6 -echo "configure:1546: checking version of $MSGFMT" >&5 +echo "configure:1560: checking version of $MSGFMT" >&5 ac_prog_version=`$MSGFMT --version 2>&1 | sed -n 's/^.*GNU gettext.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; - 0.[1-9][0-9].* | [1-9].*) + 0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; @@ -1562,7 +1576,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:1566: checking for $ac_word" >&5 +echo "configure:1580: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_MAKEINFO'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1596,7 +1610,7 @@ if test -z "$MAKEINFO"; then else # Found it, now check the version. echo $ac_n "checking version of $MAKEINFO""... $ac_c" 1>&6 -echo "configure:1600: checking version of $MAKEINFO" >&5 +echo "configure:1614: checking version of $MAKEINFO" >&5 ac_prog_version=`$MAKEINFO --version 2>&1 | sed -n 's/^.*GNU texinfo.* \([0-9][0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -1616,7 +1630,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:1620: checking for $ac_word" >&5 +echo "configure:1634: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_SED'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1650,7 +1664,7 @@ if test -z "$SED"; then else # Found it, now check the version. echo $ac_n "checking version of $SED""... $ac_c" 1>&6 -echo "configure:1654: checking version of $SED" >&5 +echo "configure:1668: checking version of $SED" >&5 ac_prog_version=`$SED --version 2>&1 | sed -n 's/^.*GNU sed version \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; @@ -1668,7 +1682,7 @@ fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:1672: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:1686: 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 @@ -1682,12 +1696,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 1686 "configure" +#line 1700 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1705: \"$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 @@ -1718,7 +1732,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:1722: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:1736: 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 @@ -1730,7 +1744,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:1734: checking whether we are using GNU C" >&5 +echo "configure:1748: 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 @@ -1739,7 +1753,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1743: \"$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:1757: \"$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 @@ -1752,7 +1766,7 @@ if test $ac_cv_prog_gcc != yes; then fi echo $ac_n "checking build system type""... $ac_c" 1>&6 -echo "configure:1756: checking build system type" >&5 +echo "configure:1770: checking build system type" >&5 build_alias=$build case "$build_alias" in @@ -1775,7 +1789,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:1779: checking for $ac_word" >&5 +echo "configure:1793: 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 @@ -1807,7 +1821,7 @@ done fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:1811: checking how to run the C preprocessor" >&5 +echo "configure:1825: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -1822,13 +1836,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:1832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1846: \"$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 : @@ -1839,13 +1853,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:1849: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1863: \"$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 : @@ -1856,13 +1870,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:1866: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1880: \"$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 : @@ -1905,7 +1919,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:1909: checking for $ac_word" >&5 +echo "configure:1923: 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 @@ -1937,7 +1951,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:1941: checking for $ac_word" >&5 +echo "configure:1955: 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 @@ -1974,7 +1988,7 @@ fi # Determine whether we are using GNU binutils. echo $ac_n "checking whether $AS is GNU as""... $ac_c" 1>&6 -echo "configure:1978: checking whether $AS is GNU as" >&5 +echo "configure:1992: 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 @@ -1993,7 +2007,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:1997: checking whether $LD is GNU ld" >&5 +echo "configure:2011: 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 @@ -2013,7 +2027,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:2017: checking for $ac_word" >&5 +echo "configure:2031: 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 @@ -2050,12 +2064,6 @@ fi # [GNU assembler.* \([0-9]*\.[0-9.]*\(-ia64-[0-9]*\)*\)], # [2.10.[1-9]* | 2.1[1-9]* | 2.9-ia64-*], AS=: critic_missing=t) -if test -n "$critic_missing"; then -{ echo "configure: error: -*** Some critical program is missing or too old. -*** Check the INSTALL file for required versions." 1>&2; exit 1; } -fi - test -n "$aux_missing" && echo "configure: warning: *** An auxiliary program is missing or too old; *** some features will be disabled. @@ -2076,7 +2084,7 @@ fi # check if ranlib is necessary echo $ac_n "checking whether ranlib is necessary""... $ac_c" 1>&6 -echo "configure:2080: checking whether ranlib is necessary" >&5 +echo "configure:2088: 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 @@ -2110,7 +2118,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:2114: checking LD_LIBRARY_PATH variable" >&5 +echo "configure:2122: checking LD_LIBRARY_PATH variable" >&5 case ${LD_LIBRARY_PATH} in [:\;]* | *[:\;] | *[:\;][:\;]* | *[:\;]. | .[:\;]*| . | *[:\;].[:\;]* ) ld_library_path_setting="contains current directory" @@ -2130,7 +2138,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:2134: checking for $ac_word" >&5 +echo "configure:2142: 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 @@ -2176,7 +2184,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:2180: checking for $ac_word" >&5 +echo "configure:2188: 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 @@ -2226,7 +2234,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:2230: checking for $ac_word" >&5 +echo "configure:2238: 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 @@ -2258,7 +2266,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:2262: checking for $ac_word" >&5 +echo "configure:2270: 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 @@ -2298,7 +2306,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:2302: checking for $ac_word" >&5 +echo "configure:2310: 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 @@ -2333,7 +2341,7 @@ fi if test "$INSTALL_INFO" != "no"; then echo $ac_n "checking for old Debian install-info""... $ac_c" 1>&6 -echo "configure:2337: checking for old Debian install-info" >&5 +echo "configure:2345: 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 @@ -2368,7 +2376,7 @@ fi # Extract the first word of "bison", so it can be a program name with args. set dummy bison; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:2372: checking for $ac_word" >&5 +echo "configure:2380: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_BISON'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2403,7 +2411,7 @@ fi echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6 -echo "configure:2407: checking for signed size_t type" >&5 +echo "configure:2415: 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 @@ -2427,12 +2435,12 @@ EOF fi echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6 -echo "configure:2431: checking for libc-friendly stddef.h" >&5 +echo "configure:2439: 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:2459: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_friendly_stddef=yes else @@ -2466,7 +2474,7 @@ override stddef.h = # The installed &6 -echo "configure:2470: checking whether we need to use -P to assemble .S files" >&5 +echo "configure:2478: 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 @@ -2489,7 +2497,7 @@ asm-CPPFLAGS = -P # The assembler can't fi echo $ac_n "checking whether .text pseudo-op must be used""... $ac_c" 1>&6 -echo "configure:2493: checking whether .text pseudo-op must be used" >&5 +echo "configure:2501: checking whether .text pseudo-op must be used" >&5 if eval "test \"`echo '$''{'libc_cv_dot_text'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2510,7 +2518,7 @@ else fi echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6 -echo "configure:2514: checking for assembler global-symbol directive" >&5 +echo "configure:2522: 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 @@ -2540,7 +2548,7 @@ EOF fi echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6 -echo "configure:2544: checking for .set assembler directive" >&5 +echo "configure:2552: 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 @@ -2583,7 +2591,7 @@ EOF esac echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6 -echo "configure:2587: checking for .symver assembler directive" >&5 +echo "configure:2595: 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 @@ -2602,7 +2610,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:2606: checking for ld --version-script" >&5 +echo "configure:2614: 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 @@ -2625,7 +2633,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:2629: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; + 1>&5'; { (eval echo configure:2637: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_ld_version_script_option=yes else @@ -2664,7 +2672,7 @@ if test $shared != no && test $VERSIONIN fi if test $elf = yes; then echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6 -echo "configure:2668: checking for .previous assembler directive" >&5 +echo "configure:2676: 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 @@ -2672,7 +2680,7 @@ else .section foo_section .previous EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2676: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2684: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_previous_directive=yes else libc_cv_asm_previous_directive=no @@ -2688,7 +2696,7 @@ EOF else echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6 -echo "configure:2692: checking for .popsection assembler directive" >&5 +echo "configure:2700: 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 @@ -2696,7 +2704,7 @@ else .pushsection foo_section .popsection EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2700: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2708: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_popsection_directive=yes else libc_cv_asm_popsection_directive=no @@ -2713,7 +2721,7 @@ EOF fi fi echo $ac_n "checking for .protected and .hidden assembler directive""... $ac_c" 1>&6 -echo "configure:2717: checking for .protected and .hidden assembler directive" >&5 +echo "configure:2725: checking for .protected and .hidden assembler directive" >&5 if eval "test \"`echo '$''{'libc_cv_asm_protected_directive'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2723,7 +2731,7 @@ foo: .hidden bar bar: EOF - if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2727: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:2735: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_protected_directive=yes else libc_cv_asm_protected_directive=no @@ -2735,14 +2743,14 @@ echo "$ac_t""$libc_cv_asm_protected_dire echo $ac_n "checking for -z nodelete option""... $ac_c" 1>&6 -echo "configure:2739: checking for -z nodelete option" >&5 +echo "configure:2747: checking for -z nodelete option" >&5 if eval "test \"`echo '$''{'libc_cv_z_nodelete'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } + if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodelete 1>&5'; { (eval echo configure:2754: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } then libc_cv_z_nodelete=yes else @@ -2755,14 +2763,14 @@ echo "$ac_t""$libc_cv_z_nodelete" 1>&6 echo $ac_n "checking for -z nodlopen option""... $ac_c" 1>&6 -echo "configure:2759: checking for -z nodlopen option" >&5 +echo "configure:2767: checking for -z nodlopen option" >&5 if eval "test \"`echo '$''{'libc_cv_z_nodlopen'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } + if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,nodlopen 1>&5'; { (eval echo configure:2774: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } then libc_cv_z_nodlopen=yes else @@ -2775,14 +2783,14 @@ echo "$ac_t""$libc_cv_z_nodlopen" 1>&6 echo $ac_n "checking for -z initfirst option""... $ac_c" 1>&6 -echo "configure:2779: checking for -z initfirst option" >&5 +echo "configure:2787: checking for -z initfirst option" >&5 if eval "test \"`echo '$''{'libc_cv_z_initfirst'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } + if { ac_try='${CC-cc} -shared -o conftest.so conftest.c -Wl,--enable-new-dtags,-z,initfirst 1>&5'; { (eval echo configure:2794: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } then libc_cv_z_initfirst=yes else @@ -2793,16 +2801,36 @@ fi echo "$ac_t""$libc_cv_z_initfirst" 1>&6 + + echo $ac_n "checking for -Bgroup option""... $ac_c" 1>&6 +echo "configure:2807: checking for -Bgroup option" >&5 +if eval "test \"`echo '$''{'libc_cv_Bgroup'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } + then + libc_cv_Bgroup=yes + else + libc_cv_Bgroup=no + fi + rm -f conftest* +fi + +echo "$ac_t""$libc_cv_Bgroup" 1>&6 + fi if test $elf != yes; then echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6 -echo "configure:2801: checking for .init and .fini sections" >&5 +echo "configure:2829: 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:2843: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_have_initfini=yes else @@ -2834,7 +2862,7 @@ fi if test $elf = yes -a $gnu_ld = yes; then echo $ac_n "checking whether cc puts quotes around section names""... $ac_c" 1>&6 -echo "configure:2838: checking whether cc puts quotes around section names" >&5 +echo "configure:2866: checking whether cc puts quotes around section names" >&5 if eval "test \"`echo '$''{'libc_cv_have_section_quotes'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -2871,19 +2899,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:2875: checking for _ prefix on C symbol names" >&5 +echo "configure:2903: 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:2915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* libc_cv_asm_underscores=yes else @@ -2898,17 +2926,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:2902: checking for _ prefix on C symbol names" >&5 +echo "configure:2930: 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:2940: \"$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 @@ -2940,7 +2968,7 @@ if test $elf = yes; then fi echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6 -echo "configure:2944: checking for assembler .weak directive" >&5 +echo "configure:2972: 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 @@ -2963,7 +2991,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:2967: checking for assembler .weakext directive" >&5 +echo "configure:2995: 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 @@ -3001,16 +3029,23 @@ EOF fi case "${host_cpu}-${host_os}" in + cris*) + libc_cv_asm_line_sep='@' + cat >> confdefs.h <&6 -echo "configure:3007: checking for assembler line separator" >&5 +echo "configure:3042: checking for assembler line separator" >&5 if eval "test \"`echo '$''{'libc_cv_asm_line_sep'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.s <&5; (eval $ac_try) 2>&5; }; }; then + if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:3049: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_asm_line_sep='!' else if test -z "$enable_hacker_mode"; then @@ -3032,7 +3067,7 @@ EOF esac echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6 -echo "configure:3036: checking for ld --no-whole-archive" >&5 +echo "configure:3071: 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 @@ -3043,7 +3078,7 @@ __throw () {} EOF if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles -Wl,--no-whole-archive - -o conftest conftest.c 1>&5'; { (eval echo configure:3047: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c 1>&5'; { (eval echo configure:3082: \"$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 @@ -3057,7 +3092,7 @@ if test $libc_cv_ld_no_whole_archive = y fi echo $ac_n "checking for gcc -fexceptions""... $ac_c" 1>&6 -echo "configure:3061: checking for gcc -fexceptions" >&5 +echo "configure:3096: 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 @@ -3068,7 +3103,7 @@ __throw () {} EOF if { ac_try='${CC-cc} $CFLAGS -nostdlib -nostartfiles -fexceptions - -o conftest conftest.c 1>&5'; { (eval echo configure:3072: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c 1>&5'; { (eval echo configure:3107: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_exceptions=yes else libc_cv_gcc_exceptions=no @@ -3083,14 +3118,14 @@ fi if test "$base_machine" = alpha ; then echo $ac_n "checking for function ..ng prefix""... $ac_c" 1>&6 -echo "configure:3087: checking for function ..ng prefix" >&5 +echo "configure:3122: 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:3094: \"$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:3129: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_alpha_ng_prefix=yes else @@ -3117,19 +3152,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:3121: checking whether clobbering cr0 causes problems" >&5 +echo "configure:3156: 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:3168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libc_cv_c_asmcr0_bug='no' else @@ -3151,12 +3186,12 @@ fi fi echo $ac_n "checking for DWARF2 unwind info support""... $ac_c" 1>&6 -echo "configure:3155: checking for DWARF2 unwind info support" >&5 +echo "configure:3190: 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:3222: \"$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 @@ -3191,7 +3226,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:3195: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then + -o conftest conftest.c -lgcc >&5'; { (eval echo configure:3230: \"$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 @@ -3221,12 +3256,12 @@ EOF esac echo $ac_n "checking for __builtin_expect""... $ac_c" 1>&6 -echo "configure:3225: checking for __builtin_expect" >&5 +echo "configure:3260: 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:3273: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_builtin_expect=yes else libc_cv_gcc_builtin_expect=no @@ -3251,12 +3286,12 @@ EOF fi echo $ac_n "checking for local label subtraction""... $ac_c" 1>&6 -echo "configure:3255: checking for local label subtraction" >&5 +echo "configure:3290: checking for local label subtraction" >&5 if eval "test \"`echo '$''{'libc_cv_gcc_subtract_local_labels'+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:3308: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then libc_cv_gcc_subtract_local_labels=yes else libc_cv_gcc_subtract_local_labels=no @@ -3286,22 +3321,23 @@ EOF fi echo $ac_n "checking for libgd""... $ac_c" 1>&6 -echo "configure:3290: checking for libgd" >&5 -old_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $libgd_include" -old_LDFLAGS="$LDFLAGS" -LDFLAGS="$LDFLAGS $libgd_ldflags" -old_LIBS="$LIBS" -LIBS="$LIBS -lgd -lpng -lz -lm" -cat > conftest.$ac_ext <&5 +if test "$with_gd" != "no"; then + old_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $libgd_include" + old_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $libgd_ldflags" + old_LIBS="$LIBS" + LIBS="$LIBS -lgd -lpng -lz -lm" + cat > conftest.$ac_ext < int main() { gdImagePng (0, 0) ; return 0; } EOF -if { (eval echo configure:3305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:3341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* LIBGD=yes else @@ -3311,14 +3347,17 @@ else LIBGD=no fi rm -f conftest* -CFLAGS="$old_CFLAGS" -LDFLAGS="$old_LDFLAGS" -LIBS="$old_LIBS" + CFLAGS="$old_CFLAGS" + LDFLAGS="$old_LDFLAGS" + LIBS="$old_LIBS" +else + LIBGD=no +fi echo "$ac_t""$LIBGD" 1>&6 echo $ac_n "checking size of long double""... $ac_c" 1>&6 -echo "configure:3322: checking size of long double" >&5 +echo "configure:3361: checking size of long double" >&5 if eval "test \"`echo '$''{'ac_cv_sizeof_long_double'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3326,7 +3365,7 @@ else ac_cv_sizeof_long_double=0 else cat > conftest.$ac_ext < main() @@ -3337,7 +3376,7 @@ main() exit(0); } EOF -if { (eval echo configure:3341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:3380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_sizeof_long_double=`cat conftestval` else @@ -3405,7 +3444,7 @@ if test "$uname" = "sysdeps/generic"; th fi echo $ac_n "checking OS release for uname""... $ac_c" 1>&6 -echo "configure:3409: checking OS release for uname" >&5 +echo "configure:3448: 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 @@ -3427,7 +3466,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:3431: checking OS version for uname" >&5 +echo "configure:3470: 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 @@ -3449,7 +3488,7 @@ else fi echo $ac_n "checking stdio selection""... $ac_c" 1>&6 -echo "configure:3453: checking stdio selection" >&5 +echo "configure:3492: checking stdio selection" >&5 case $stdio in libio) cat >> confdefs.h <<\EOF @@ -3463,7 +3502,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:3467: checking for old glibc 2.0.x headers" >&5 +echo "configure:3506: 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 @@ -3518,7 +3557,7 @@ if test $shared = default; then fi echo $ac_n "checking whether -fPIC is default""... $ac_c" 1>&6 -echo "configure:3522: checking whether -fPIC is default" >&5 +echo "configure:3561: checking whether -fPIC is default" >&5 if eval "test \"`echo '$''{'pic_default'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -3745,6 +3784,7 @@ s%@libc_cv_asm_protected_directive@%$lib s%@libc_cv_z_nodelete@%$libc_cv_z_nodelete%g s%@libc_cv_z_nodlopen@%$libc_cv_z_nodlopen%g s%@libc_cv_z_initfirst@%$libc_cv_z_initfirst%g +s%@libc_cv_Bgroup@%$libc_cv_Bgroup%g s%@libc_cv_have_initfini@%$libc_cv_have_initfini%g s%@no_whole_archive@%$no_whole_archive%g s%@exceptions@%$exceptions%g diff -durpNa glibc-2.2.2/configure.in glibc-2.2.3/configure.in --- glibc-2.2.2/configure.in Fri Feb 9 10:36:07 2001 +++ glibc-2.2.3/configure.in Wed Apr 25 14:50:58 2001 @@ -309,6 +309,8 @@ mips*) base_machine=mips IP22) machine=mips/mips3 ;; *) machine=mips/$machine ;; esac ;; +s390) base_machine=s390 machine=s390/s390-32 ;; +s390x) base_machine=s390 machine=s390/s390-64 ;; sh3*) base_machine=sh machine=sh/sh3 ;; sh4*) base_machine=sh machine=sh/sh4 ;; sparc | sparcv[67]) @@ -317,8 +319,12 @@ sparcv8 | supersparc | hypersparc) base_machine=sparc machine=sparc/sparc32/sparcv8 ;; sparcv8plus | sparcv8plusa | sparcv9) base_machine=sparc machine=sparc/sparc32/sparcv9 ;; +sparcv8plusb | sparcv9b) + base_machine=sparc machine=sparc/sparc32/sparcv9b ;; sparc64 | ultrasparc) base_machine=sparc machine=sparc/sparc64 ;; +sparc64b | ultrasparc3) + base_machine=sparc machine=sparc/sparc64/sparcv9b ;; thumb*) base_machine=thumb machine=arm/thumb/$machine ;; esac changequote([,])dnl @@ -552,15 +558,23 @@ fi AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl AC_CHECK_PROG_VER(CC, ${ac_tool_prefix}gcc ${ac_tool_prefix}cc, -v, [version \([egcygnustpi-]*[0-9.]*\)], - [*gcc-2.9[5-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]|sgicc-*], + [*gcc-2.9[5-9].*|*2.8.[1-9]*|*2.9|*2.9.[0-9]*|2.9[5-9]*|3.[0-9]*|cygnus-2.9[1-9]*|gcc-2.9[5-9]|gcc-2.1[0-9][0-9]|sgicc-*], critic_missing=t) AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version, [GNU Make[^0-9]*\([0-9][0-9.]*\)], [3.79* | 3.[89]*], critic_missing=t) + +if test -n "$critic_missing"; then +AC_MSG_ERROR([ +*** Some critical program is missing or too old. +*** Check the INSTALL file for required versions.]) +fi + + AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version, [GNU gettext.* \([0-9]*\.[0-9.]*\)], - [0.[1-9][0-9].* | [1-9].*], MSGFMT=: aux_missing=t) + [0.10.3[6-9]* | 0.10.[4-9][0-9]* | 0.1[1-9]* | 0.[2-9][0-9]* | [1-9].*], MSGFMT=: aux_missing=t) AC_CHECK_PROG_VER(MAKEINFO, makeinfo, --version, [GNU texinfo.* \([0-9][0-9.]*\)], [4.*], MAKEINFO=: aux_missing=t) @@ -585,12 +599,6 @@ AC_CHECK_TOOL(MIG, mig) # [GNU assembler.* \([0-9]*\.[0-9.]*\(-ia64-[0-9]*\)*\)], # [2.10.[1-9]* | 2.1[1-9]* | 2.9-ia64-*], AS=: critic_missing=t) -if test -n "$critic_missing"; then -AC_MSG_ERROR([ -*** Some critical program is missing or too old. -*** Check the INSTALL file for required versions.]) -fi - test -n "$aux_missing" && AC_MSG_WARN([ *** An auxiliary program is missing or too old; *** some features will be disabled. @@ -990,6 +998,20 @@ EOF fi rm -f conftest*]) AC_SUBST(libc_cv_z_initfirst) + + AC_CACHE_CHECK(for -Bgroup option, + libc_cv_Bgroup, [dnl + cat > conftest.c <&AC_FD_CC]) + then + libc_cv_Bgroup=yes + else + libc_cv_Bgroup=no + fi + rm -f conftest*]) + AC_SUBST(libc_cv_Bgroup) fi if test $elf != yes; then @@ -1121,8 +1143,13 @@ elif test $libc_cv_asm_weakext_directive fi dnl The standard hppa assembler uses `;' to start comments and `!' -dnl as a line separator. +dnl as a line separator. CRIS uses `;' to start comments and `@' for +dnl line separator. case "${host_cpu}-${host_os}" in + cris*) + libc_cv_asm_line_sep='@' + AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep) + ;; hppa*linux*) AC_CACHE_CHECK(for assembler line separator, libc_cv_asm_line_sep, [dnl @@ -1324,16 +1351,20 @@ fi dnl Check whether we have the gd library available. AC_MSG_CHECKING(for libgd) -old_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $libgd_include" -old_LDFLAGS="$LDFLAGS" -LDFLAGS="$LDFLAGS $libgd_ldflags" -old_LIBS="$LIBS" -LIBS="$LIBS -lgd -lpng -lz -lm" -AC_TRY_LINK([#include ], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no) -CFLAGS="$old_CFLAGS" -LDFLAGS="$old_LDFLAGS" -LIBS="$old_LIBS" +if test "$with_gd" != "no"; then + old_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $libgd_include" + old_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $libgd_ldflags" + old_LIBS="$LIBS" + LIBS="$LIBS -lgd -lpng -lz -lm" + AC_TRY_LINK([#include ], [gdImagePng (0, 0)], LIBGD=yes, LIBGD=no) + CFLAGS="$old_CFLAGS" + LDFLAGS="$old_LDFLAGS" + LIBS="$old_LIBS" +else + LIBGD=no +fi AC_MSG_RESULT($LIBGD) AC_SUBST(LIBGD) diff -durpNa glibc-2.2.2/conform/data/sys/socket.h-data glibc-2.2.3/conform/data/sys/socket.h-data --- glibc-2.2.2/conform/data/sys/socket.h-data Fri Feb 9 10:04:01 2001 +++ glibc-2.2.3/conform/data/sys/socket.h-data Mon Mar 26 20:52:47 2001 @@ -116,4 +116,5 @@ allow ifra_* allow msg_* allow cmsg_* allow l_* +allow SO* #endif diff -durpNa glibc-2.2.2/conform/data/unistd.h-data glibc-2.2.3/conform/data/unistd.h-data --- glibc-2.2.2/conform/data/unistd.h-data Fri Feb 9 10:04:00 2001 +++ glibc-2.2.3/conform/data/unistd.h-data Mon Mar 26 20:52:47 2001 @@ -313,6 +313,7 @@ function uid_t geteuid (void) function gid_t getgid (void) function int getgroups (int, gid_t[]) function long gethostid (void) +function int gethostname (char*, size_t) function {char*} getlogin (void) function int getlogin_r (char*, size_t) function int getopt (int, char*const[], const char*) diff -durpNa glibc-2.2.2/crypt/Makefile glibc-2.2.3/crypt/Makefile --- glibc-2.2.2/crypt/Makefile Thu Aug 31 14:44:55 2000 +++ glibc-2.2.3/crypt/Makefile Mon Mar 26 20:52:47 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1996, 2000 Free Software Foundation, Inc. +# Copyright (C) 1996, 2000, 2001 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 @@ -57,4 +57,4 @@ endif # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)libcrypt.so: $(common-objpfx)libc.so +$(objpfx)libcrypt.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/csu/Makefile glibc-2.2.3/csu/Makefile --- glibc-2.2.2/csu/Makefile Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/csu/Makefile Mon Mar 26 20:52:47 2001 @@ -1,6 +1,6 @@ # Makefile for csu code for GNU C library. -# Copyright (C) 1995,1996,1997,1998,1999,2000 Free Software Foundation, Inc. +# Copyright (C) 1995,1996,1997,1998,1999,2000,2001 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 @@ -10,7 +10,7 @@ # The GNU C Library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # You should have received a copy of the GNU Library General Public @@ -20,7 +20,7 @@ # This directory contains the C startup code (that which calls main). This # consists of the startfile, built from start.c and installed as crt0.o -# (traditionally) or crt1.o (for ELF). In ELF we also install crti.o and +# (traditionally) or crt1.o (for ELF). In ELF we also install crti.o and # crtn.o, special "initializer" and "finalizer" files used in the link # to make the .init and .fini sections work right; both these files are # built (in an arcane manner) from initfini.c. @@ -94,7 +94,7 @@ $(objpfx)initfini.s: initfini.c $(compile.c) -S $(CFLAGS-initfini.s) -finhibit-size-directive \ $(patsubst -f%,-fno-%,$(exceptions)) -o $@ -# We only have one kind of startup code files. Static binaries and +# We only have one kind of startup code files. Static binaries and # shared libraries are build using the PIC version. $(objpfx)crti.S: $(objpfx)initfini.s sed -n -e '1,/@HEADER_ENDS/p' \ @@ -167,13 +167,18 @@ $(addprefix $(objpfx),$(filter-out $(sta $(objpfx)abi-tag.h: $(..)abi-tags $(make-target-directory) rm -f $@.new - sed -e 's/#.*$$//' -e '/^[ ]*$$/d' $< | \ - while read conf tag; do \ + sed -e 's/#.*$$//' -e '/^[ ]*$$/d' $< | \ + while read conf tagos tagver; do \ test `expr '$(config-machine)-$(config-vendor)-$(config-os)' \ : "$$conf"` != 0 || continue; \ - echo "$$tag" | \ - sed -e 's/[^0-9xXa-fA-F]/ /g' -e 's/ *$$//' \ - -e 's/ /,/g' -e 's/^ */#define ABI_TAG /' > $@.new; \ + ( echo "$$tagos" | \ + sed -e 's/[^0-9xXa-fA-F ]//' \ + -e 's/^/#define __ABI_TAG_OS /'; \ + echo "#ifndef __ABI_TAG_VERSION"; \ + echo "$$tagver" | \ + sed -e 's/[^0-9xXa-fA-F]/ /g' -e 's/ *$$//' \ + -e 's/ /,/g' -e 's/^/# define __ABI_TAG_VERSION /'; \ + echo "#endif" ) > $@.new; \ done if test -r $@.new; then mv -f $@.new $@; \ else echo >&2 'This configuration not matched in $<'; exit 1; fi @@ -199,13 +204,13 @@ $(objpfx)version-info.h: $(common-objpfx os=Linux; \ fi; \ echo "\"Compiled on a $$os $$version system" \ - "on `date +%Y-%m-%d`.\\n\"" ;; \ + "on `date +%Y-%m-%d`.\\n\"" ;; \ *) ;; \ esac; \ files="$(all-Banner-files)"; \ if test -n "$$files"; then \ - echo "\"Available extensions:"; \ - sed -e '/^#/d' -e 's/^[[:space:]]*/ /' $$files; \ - echo "\""; \ + echo "\"Available extensions:\\n\""; \ + sed -e '/^#/d' -e 's/^[[:space:]]*/ /' \ + -e 's/\(^.*$$\)/\"\1\\n\"/' $$files; \ fi) > $@T mv -f $@T $@ diff -durpNa glibc-2.2.2/csu/abi-note.S glibc-2.2.3/csu/abi-note.S --- glibc-2.2.2/csu/abi-note.S Fri Dec 1 11:55:01 2000 +++ glibc-2.2.3/csu/abi-note.S Mon Mar 26 20:52:47 2001 @@ -1,5 +1,5 @@ /* Special .init and .fini section support. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it @@ -54,6 +54,7 @@ offset length contents identify the earliest release of that OS that supports this ABI. See abi-tags (top level) for details. */ +#include #include /* OS-specific ABI tag value */ /* The linker (GNU ld 2.8 and later) recognizes an allocated section whose @@ -67,5 +68,6 @@ offset length contents .long 1 /* note type */ 0: .asciz "GNU" /* vendor name */ 1: .align 4 -2: .long ABI_TAG /* note data: the ABI tag */ +2: .long __ABI_TAG_OS /* note data: the ABI tag */ + .long __ABI_TAG_VERSION 3: .align 4 /* pad out section */ diff -durpNa glibc-2.2.2/csu/version.c glibc-2.2.3/csu/version.c --- glibc-2.2.2/csu/version.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/csu/version.c Mon Mar 26 20:52:47 2001 @@ -44,6 +44,7 @@ __libc_print_version (void) __write (STDOUT_FILENO, banner, sizeof banner - 1); } +extern const char *__gnu_get_libc_release (void); const char * __gnu_get_libc_release (void) { @@ -51,6 +52,7 @@ __gnu_get_libc_release (void) } weak_alias (__gnu_get_libc_release, gnu_get_libc_release) +extern const char *__gnu_get_libc_version (void); const char * __gnu_get_libc_version (void) { diff -durpNa glibc-2.2.2/ctype/ctype_l.c glibc-2.2.3/ctype/ctype_l.c --- glibc-2.2.2/ctype/ctype_l.c Fri Feb 14 20:26:11 1997 +++ glibc-2.2.3/ctype/ctype_l.c Thu Apr 12 14:02:00 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1992, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1997, 2001 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 @@ -39,11 +39,11 @@ func (__isxdigit_l, _ISxdigit) int (__tolower_l) (int c, __locale_t l) { - return __tolower_l (c, l); + return l->__ctype_tolower[c]; } int (__toupper_l) (int c, __locale_t l) { - return __toupper_l (c, l); + return l->__ctype_toupper[c]; } diff -durpNa glibc-2.2.2/debug/Makefile glibc-2.2.3/debug/Makefile --- glibc-2.2.2/debug/Makefile Fri Jul 7 10:57:25 2000 +++ glibc-2.2.3/debug/Makefile Mon Mar 26 20:52:48 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +# Copyright (C) 1998, 1999, 2000, 2001 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 @@ -71,5 +71,9 @@ $(objpfx)xtrace: xtrace.sh # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)libSegFault.so: $(common-objpfx)libc.so $(common-objpfx)elf/ld.so -$(objpfx)libpcprofile.so: $(common-objpfx)libc.so $(common-objpfx)elf/ld.so +$(objpfx)libSegFault.so: $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a \ + $(common-objpfx)elf/ld.so +$(objpfx)libpcprofile.so: $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a \ + $(common-objpfx)elf/ld.so diff -durpNa glibc-2.2.2/debug/xtrace.sh glibc-2.2.3/debug/xtrace.sh --- glibc-2.2.2/debug/xtrace.sh Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/debug/xtrace.sh Sat Apr 7 14:02:33 2001 @@ -18,7 +18,7 @@ # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. -pcprofileso=@LIBDIR@/libpcprofile.so +pcprofileso=@SLIBDIR@/libpcprofile.so pcprofiledump=@BINDIR@/pcprofiledump # Print usage message. diff -durpNa glibc-2.2.2/dlfcn/Makefile glibc-2.2.3/dlfcn/Makefile --- glibc-2.2.2/dlfcn/Makefile Sat Jan 6 23:38:07 2001 +++ glibc-2.2.3/dlfcn/Makefile Mon Mar 26 20:52:49 2001 @@ -21,7 +21,8 @@ headers := bits/dlfcn.h dlfcn.h extra-libs := libdl libdl-routines := dlopen dlclose dlsym dlvsym dlerror dladdr eval distribute := dlopenold.c glreflib1.c glreflib2.c failtestmod.c eval.c \ - defaultmod1.c defaultmod2.c errmsg1mod.c + defaultmod1.c defaultmod2.c errmsg1mod.c modatexit.c \ + modcxaatexit.c extra-libs-others := libdl @@ -34,10 +35,13 @@ endif libdl-shared-only-routines += eval ifeq (yes,$(build-shared)) -tests = glrefmain failtest tst-dladdr default errmsg1 +tests = glrefmain failtest tst-dladdr default errmsg1 tstcxaatexit +ifeq (yes,$(have-protected)) +tests += tstatexit +endif endif modules-names = glreflib1 glreflib2 failtestmod defaultmod1 defaultmod2 \ - errmsg1mod + errmsg1mod modatexit modcxaatexit extra-objs += $(modules-names:=.os) eval.os generated := $(modules-names:=.so) @@ -67,3 +71,16 @@ $(objpfx)defaultmod2.so: $(libdl) $(objpfx)errmsg1: $(libdl) $(objpfx)errmsg1.out: $(objpfx)errmsg1 $(objpfx)errmsg1mod.so + +$(objpfx)tstatexit: $(libdl) +$(objpfx)tstatexit.out: $(objpfx)tstatexit $(objpfx)modatexit.so + +$(objpfx)tstcxaatexit: $(libdl) +$(objpfx)tstcxaatexit.out: $(objpfx)tstcxaatexit $(objpfx)modcxaatexit.so + +$(objpfx)modatexit.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a + +# Depend on libc.so so a DT_NEEDED is generated in the shared objects. +# This ensures they will load libc.so for needed symbols if loaded by +# a statically-linked program that hasn't already loaded it. +$(objpfx)libdl.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/dlfcn/modatexit.c glibc-2.2.3/dlfcn/modatexit.c --- glibc-2.2.2/dlfcn/modatexit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/dlfcn/modatexit.c Sat Apr 7 14:02:33 2001 @@ -0,0 +1,44 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include + +int global; +int *ip; + +extern void dummy (void); +extern void foo (void *p); + +void +dummy (void) +{ + printf ("This is %s\n", __FUNCTION__); + *ip = global = 1; +} + + +void +foo (void *p) +{ + extern void *__dso_handle __attribute__ ((__weak__)); + printf ("This is %s\n", __FUNCTION__); + atexit (dummy); + if (&__dso_handle) puts ("have dso handle"); else puts ("no dso handle"); + ip = p; +} diff -durpNa glibc-2.2.2/dlfcn/modcxaatexit.c glibc-2.2.3/dlfcn/modcxaatexit.c --- glibc-2.2.2/dlfcn/modcxaatexit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/dlfcn/modcxaatexit.c Sat Apr 7 14:02:33 2001 @@ -0,0 +1,41 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include + +extern void fluffy (void *p); +extern void bar (void *p); + +int global; + +void +fluffy (void *p) +{ + printf ("This is %s\n", __FUNCTION__); + *(int *) p = global = 1; +} + + +void +bar (void *p) +{ + extern void *__dso_handle; + printf ("This is %s\n", __FUNCTION__); + __cxa_atexit (fluffy, p, __dso_handle); +} diff -durpNa glibc-2.2.2/dlfcn/tstatexit.c glibc-2.2.3/dlfcn/tstatexit.c --- glibc-2.2.2/dlfcn/tstatexit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/dlfcn/tstatexit.c Fri Mar 9 22:32:33 2001 @@ -0,0 +1,71 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include + + +extern void *__dso_handle __attribute__ ((__weak__)); + +int +main (void) +{ + const char fname[] = "modatexit.so"; + void *h; + void (*fp) (void *); + int v = 0; + + if (&__dso_handle == NULL) + { + puts ("__dso_handle not available, cannot perform the test"); + exit (0); + } + + h = dlopen (fname, RTLD_NOW); + if (h == NULL) + { + printf ("cannot open \"%s\": %s\n", fname, dlerror ()); + exit (1); + } + + fp = dlsym (h, "foo"); + if (fp == NULL) + { + printf ("cannot find \"foo\": %s\n", dlerror ()); + exit (1); + } + + fp (&v); + + if (dlclose (h) != 0) + { + printf ("cannot close \"%s\": %s\n", fname, dlerror ()); + exit (1); + } + + if (v != 1) + { + puts ("module unload didn't change `v'"); + exit (1); + } + + puts ("finishing now"); + + return 0; +} diff -durpNa glibc-2.2.2/dlfcn/tstcxaatexit.c glibc-2.2.3/dlfcn/tstcxaatexit.c --- glibc-2.2.2/dlfcn/tstcxaatexit.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/dlfcn/tstcxaatexit.c Fri Mar 9 22:31:25 2001 @@ -0,0 +1,70 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include + +extern void *__dso_handle __attribute__ ((__weak__)); + +int +main (void) +{ + const char fname[] = "modcxaatexit.so"; + void *h; + void (*fp) (void *); + int v = 0; + + if (&__dso_handle == NULL) + { + puts ("__dso_handle not available, cannot perform the test"); + exit (0); + } + + h = dlopen (fname, RTLD_LAZY); + if (h == NULL) + { + printf ("cannot open \"%s\": %s\n", fname, dlerror ()); + exit (1); + } + + fp = dlsym (h, "bar"); + if (fp == NULL) + { + printf ("cannot find \"bar\": %s\n", dlerror ()); + exit (1); + } + + fp (&v); + + if (dlclose (h) != 0) + { + printf ("cannot close \"%s\": %s\n", fname, dlerror ()); + exit (1); + } + + if (v != 1) + { + puts ("module unload didn't change `v'"); + exit (1); + } + + puts ("finishing now"); + + return 0; +} diff -durpNa glibc-2.2.2/elf/Makefile glibc-2.2.3/elf/Makefile --- glibc-2.2.2/elf/Makefile Thu Feb 15 14:08:25 2001 +++ glibc-2.2.3/elf/Makefile Mon Mar 26 20:52:49 2001 @@ -57,7 +57,7 @@ distribute := $(rtld-routines:=.c) dynam neededobj1.c neededobj2.c neededobj3.c neededobj4.c \ neededobj5.c neededobj6.c firstobj.c \ unload2mod.c unload2dep.c ltglobmod1.c ltglobmod2.c \ - testobj.h vismod.h + testobj.h vismod.h globalmod1.c include ../Makeconfig @@ -101,7 +101,7 @@ tests = loadtest restest1 preloadtest lo constload1 order $(tests-vis-$(have-protected)) noload filter unload \ reldep reldep2 reldep3 next $(tests-nodelete-$(have-z-nodelete)) \ $(tests-nodlopen-$(have-z-nodlopen)) neededtest neededtest2 \ - neededtest3 neededtest4 unload2 lateglobal initfirst + neededtest3 neededtest4 unload2 lateglobal initfirst global test-srcs = tst-pathopt tests-vis-yes = vismain tests-nodelete-yes = nodelete @@ -114,7 +114,7 @@ modules-names = testobj1 testobj2 testob $(modules-nodlopen-$(have-z-nodlopen)) filtmod1 filtmod2 \ reldepmod1 reldepmod2 reldepmod3 reldepmod4 nextmod1 nextmod2 \ neededobj1 neededobj2 neededobj3 neededobj4 \ - neededobj5 neededobj6 firstobj \ + neededobj5 neededobj6 firstobj globalmod1 \ unload2mod unload2dep ltglobmod1 ltglobmod2 pathoptobj modules-vis-yes = vismod1 vismod2 vismod3 modules-nodelete-yes = nodelmod1 nodelmod2 nodelmod3 nodelmod4 @@ -188,7 +188,7 @@ $(objpfx)trusted-dirs.st: Makefile $(..) | $(AWK) -f gen-trusted-dirs.awk > ${@:st=T}; $(move-if-change) ${@:st=T} ${@:st=h} touch $@ -CPPFLAGS-dl-load.c = -I$(objpfx). +CPPFLAGS-dl-load.c = -I$(objpfx). -I$(csu-objpfx). ifeq (yes,$(build-shared)) $(inst_slibdir)/$(rtld-version-installed-name): $(objpfx)ld.so $(+force) @@ -246,8 +246,10 @@ test-modules = $(addprefix $(objpfx),$(a generated += $(addsuffix .so,$(strip $(modules-names))) ifeq (yes,$(build-shared)) +ifeq ($(cross-compiling),no) tests: $(objpfx)tst-pathopt.out endif +endif $(objpfx)testobj1.so: $(libdl) $(objpfx)testobj1_1.so: $(objpfx)testobj1.so $(libdl) @@ -271,6 +273,7 @@ $(objpfx)neededobj6.so: $(objpfx)neededo $(objpfx)unload2mod.so: $(objpfx)unload2dep.so $(objpfx)ltglobmod2.so: $(libdl) $(objpfx)firstobj.so: $(shared-thread-library) +$(objpfx)globalmod1.so: $(libdl) # filtmod1.so has a special rule $(filter-out $(objpfx)filtmod1.so, $(test-modules)): $(objpfx)%.so: $(objpfx)%.os @@ -394,3 +397,6 @@ $(objpfx)tst-pathopt.out: tst-pathopt.sh $(objpfx)initfirst: $(libdl) $(objpfx)initfirst.out: $(objpfx)firstobj.so + +$(objpfx)global: $(objpfx)globalmod1.so +$(objpfx)global.out: $(objpfx)reldepmod1.so diff -durpNa glibc-2.2.2/elf/Versions glibc-2.2.3/elf/Versions --- glibc-2.2.2/elf/Versions Thu Nov 2 16:50:07 2000 +++ glibc-2.2.3/elf/Versions Mon Mar 26 20:52:49 2001 @@ -19,7 +19,7 @@ libc { ld { GLIBC_2.0 { # global variables - _dl_debug_impcalls; _dl_debug_fd; + _dl_debug_fd; # Those are in the dynamic linker, but used by libc.so. __libc_enable_secure; _dl_catch_error; _dl_check_all_versions; @@ -30,7 +30,6 @@ ld { _dl_sysdep_start; _r_debug; _dl_global_scope; _dl_lookup_symbol_skip; _dl_lookup_versioned_symbol; _dl_lookup_versioned_symbol_skip; - _dl_debug_message; # Function from libc.so which must be shared with libc. calloc; free; malloc; realloc; @@ -52,8 +51,6 @@ ld { _dl_dst_count; _dl_dst_substitute; } GLIBC_2.2 { - _dl_debug_files; - _dl_init; _dl_load_lock; _dl_argv; _dl_nloaded; _dl_check_map_versions; # this is defined in ld.so and overridden by libc @@ -62,5 +59,8 @@ ld { # variables used elsewhere _dl_out_of_memory; _dl_all_dirs; _dl_init_all_dirs; _dl_clktck; _dl_pagesize; + } + GLIBC_2.2.3 { + _dl_debug_mask; _dl_debug_printf; } } diff -durpNa glibc-2.2.2/elf/cache.c glibc-2.2.3/elf/cache.c --- glibc-2.2.2/elf/cache.c Fri Feb 9 10:04:04 2001 +++ glibc-2.2.3/elf/cache.c Mon Mar 26 20:52:49 2001 @@ -39,6 +39,7 @@ struct cache_entry char *lib; /* Library name. */ char *path; /* Path to find library. */ int flags; /* Flags to indicate kind of library. */ + unsigned int osversion; /* Required OS version. */ uint64_t hwcap; /* Important hardware capabilities. */ int bits_hwcap; /* Number of bits set in hwcap. */ struct cache_entry *next; /* Next entry in list. */ @@ -52,7 +53,8 @@ static const char *flag_descr[] = /* Print a single entry. */ static void -print_entry (const char *lib, int flag, uint64_t hwcap, const char *key) +print_entry (const char *lib, int flag, unsigned int osversion, + uint64_t hwcap, const char *key) { printf ("\t%s (", lib); switch (flag & FLAG_TYPE_MASK) @@ -61,10 +63,10 @@ print_entry (const char *lib, int flag, case FLAG_ELF: case FLAG_ELF_LIBC5: case FLAG_ELF_LIBC6: - fputs (flag_descr [flag & FLAG_TYPE_MASK], stdout); + fputs (flag_descr[flag & FLAG_TYPE_MASK], stdout); break; default: - fputs ("unknown", stdout); + fputs (_("unknown"), stdout); break; } switch (flag & FLAG_REQUIRED_MASK) @@ -77,6 +79,10 @@ print_entry (const char *lib, int flag, case FLAG_IA64_LIB64: fputs (",IA-64", stdout); #endif +#if defined __s390__ || defined __s390x__ + case FLAG_S390_LIB64: + fputs(",64bit", stdout); +#endif case 0: break; default: @@ -85,6 +91,23 @@ print_entry (const char *lib, int flag, } if (hwcap != 0) printf (", hwcap: 0x%" PRIx64, hwcap); + if (osversion != 0) + { + static const char *const abi_tag_os[] = + { + [0] = "Linux", + [1] = "Hurd", + [2] = "Solaris", + [3] = N_("Unknown OS") + }; + unsigned int os = osversion >> 24; + + printf (_(", OS ABI: %s %d.%d.%d"), + _(abi_tag_os[os > 3 ? 3 : os]), + (osversion >> 16) & 0xff, + (osversion >> 8) & 0xff, + osversion & 0xff); + } printf (") => %s\n", key); } @@ -139,7 +162,8 @@ print_cache (const char *cache_name) else { size_t offset = ALIGN_CACHE (sizeof (struct cache_file) - + cache->nlibs * sizeof (struct file_entry)); + + (cache->nlibs + * sizeof (struct file_entry))); /* This is where the strings start. */ cache_data = (const char *) &cache->libs[cache->nlibs]; @@ -150,9 +174,10 @@ print_cache (const char *cache_name) cache_new = (struct cache_file_new *) ((void *)cache + offset); - if (!memcmp (cache_new->magic, CACHEMAGIC_NEW, sizeof CACHEMAGIC_NEW - 1) - && !memcmp (cache_new->version, CACHE_VERSION, - sizeof CACHE_VERSION - 1)) + if (memcmp (cache_new->magic, CACHEMAGIC_NEW, + sizeof CACHEMAGIC_NEW - 1) == 0 + && memcmp (cache_new->version, CACHE_VERSION, + sizeof CACHE_VERSION - 1) == 0) { cache_data = (const char *) cache_new; format = 1; @@ -167,17 +192,19 @@ print_cache (const char *cache_name) /* Print everything. */ for (i = 0; i < cache->nlibs; i++) print_entry (cache_data + cache->libs[i].key, - cache->libs[i].flags, 0, + cache->libs[i].flags, 0, 0, cache_data + cache->libs[i].value); } else if (format == 1) { - printf (_("%d libs found in cache `%s'\n"), cache_new->nlibs, cache_name); + printf (_("%d libs found in cache `%s'\n"), + cache_new->nlibs, cache_name); /* Print everything. */ for (i = 0; i < cache_new->nlibs; i++) print_entry (cache_data + cache_new->libs[i].key, cache_new->libs[i].flags, + cache_new->libs[i].osversion, cache_new->libs[i].hwcap, cache_data + cache_new->libs[i].value); } @@ -217,6 +244,10 @@ int compare (const struct cache_entry *e return 1; else if (e2->hwcap < e1->hwcap) return -1; + if (e2->osversion > e1->osversion) + return 1; + if (e2->osversion < e1->osversion) + return -1; } return res; } @@ -280,12 +311,15 @@ save_cache (const char *cache_name) /* And the list of all entries in the new format. */ file_entries_new_size = sizeof (struct cache_file_new) + cache_entry_count * sizeof (struct file_entry_new); - file_entries_new = (struct cache_file_new *) xmalloc (file_entries_new_size); + file_entries_new = + (struct cache_file_new *) xmalloc (file_entries_new_size); /* Fill in the header. */ memset (file_entries_new, 0, sizeof (struct cache_file_new)); - memcpy (file_entries_new->magic, CACHEMAGIC_NEW, sizeof CACHEMAGIC_NEW - 1); - memcpy (file_entries_new->version, CACHE_VERSION, sizeof CACHE_VERSION - 1); + memcpy (file_entries_new->magic, CACHEMAGIC_NEW, + sizeof CACHEMAGIC_NEW - 1); + memcpy (file_entries_new->version, CACHE_VERSION, + sizeof CACHE_VERSION - 1); file_entries_new->nlibs = cache_entry_count; file_entries_new->len_strings = total_strlen; @@ -319,9 +353,9 @@ save_cache (const char *cache_name) always begins at the beginning of the the new cache struct. */ file_entries_new->libs[idx_new].flags = entry->flags; + file_entries_new->libs[idx_new].osversion = entry->osversion; file_entries_new->libs[idx_new].hwcap = entry->hwcap; file_entries_new->libs[idx_new].key = str_offset; - file_entries_new->libs[idx_new].__unused = 0; } len = strlen (entry->lib); str = stpcpy (str, entry->lib); @@ -354,7 +388,8 @@ save_cache (const char *cache_name) temp_name); /* Create file. */ - fd = open (temp_name, O_CREAT|O_WRONLY|O_TRUNC|O_NOFOLLOW, 0644); + fd = open (temp_name, O_CREAT|O_WRONLY|O_TRUNC|O_NOFOLLOW, + S_IROTH|S_IRGRP|S_IRUSR|S_IWUSR); if (fd < 0) error (EXIT_FAILURE, errno, _("Can't create temporary cache file %s"), temp_name); @@ -362,7 +397,8 @@ save_cache (const char *cache_name) /* Write contents. */ if (opt_format != 2) { - if (write (fd, file_entries, file_entries_size) != (ssize_t)file_entries_size) + if (write (fd, file_entries, file_entries_size) + != (ssize_t)file_entries_size) error (EXIT_FAILURE, errno, _("Writing of cache data failed")); } if (opt_format != 0) @@ -370,7 +406,7 @@ save_cache (const char *cache_name) /* Align cache. */ if (opt_format != 2) { - char zero [pad]; + char zero[pad]; if (write (fd, zero, pad) != (ssize_t)pad) error (EXIT_FAILURE, errno, _("Writing of cache data failed")); } @@ -385,9 +421,10 @@ save_cache (const char *cache_name) close (fd); /* Make sure user can always read cache file */ - if (chmod (temp_name, 0644)) + if (chmod (temp_name, S_IROTH|S_IRGRP|S_IRUSR|S_IWUSR)) error (EXIT_FAILURE, errno, - _("Changing access rights of %s to 0644 failed"), temp_name); + _("Changing access rights of %s to %#o failed"), temp_name, + S_IROTH|S_IRGRP|S_IRUSR|S_IWUSR); /* Move temporary to its final location. */ if (rename (temp_name, cache_name)) @@ -412,7 +449,7 @@ save_cache (const char *cache_name) /* Add one library to the cache. */ void add_to_cache (const char *path, const char *lib, int flags, - uint64_t hwcap) + unsigned int osversion, uint64_t hwcap) { struct cache_entry *new_entry, *ptr, *prev; char *full_path; @@ -428,6 +465,7 @@ add_to_cache (const char *path, const ch new_entry->lib = xstrdup (lib); new_entry->path = full_path; new_entry->flags = flags; + new_entry->osversion = osversion; new_entry->hwcap = hwcap; new_entry->bits_hwcap = 0; diff -durpNa glibc-2.2.2/elf/dl-close.c glibc-2.2.3/elf/dl-close.c --- glibc-2.2.2/elf/dl-close.c Sat Jan 13 10:48:47 2001 +++ glibc-2.2.3/elf/dl-close.c Mon Mar 26 20:52:49 2001 @@ -27,8 +27,6 @@ #include #include -#include - /* Type of the constructor functions. */ typedef void (*fini_t) (void); @@ -69,17 +67,15 @@ _dl_close (void *_map) if (map->l_opencount > 1 || map->l_type != lt_loaded) { /* There are still references to this object. Do nothing more. */ - if (__builtin_expect (_dl_debug_files, 0)) + if (//__builtin_expect (_dl_debug_files, 0)) + __builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) { char buf[20]; buf[sizeof buf - 1] = '\0'; - _dl_debug_message (1, "\nclosing file=", map->l_name, - "; opencount == ", - _itoa_word (map->l_opencount, - buf + sizeof buf - 1, 10, 0), - "\n", NULL); + _dl_debug_printf ("\nclosing file=%s; opencount == %u\n", + map->l_name, map->l_opencount); } /* One decrement the object itself, not the dependencies. */ @@ -133,9 +129,8 @@ _dl_close (void *_map) && imap->l_init_called) { /* When debugging print a message first. */ - if (__builtin_expect (_dl_debug_impcalls, 0)) - _dl_debug_message (1, "\ncalling fini: ", imap->l_name, - "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ncalling fini: %s\n\n", imap->l_name); /* Call its termination function. */ if (imap->l_info[DT_FINI_ARRAY] != NULL) diff -durpNa glibc-2.2.2/elf/dl-deps.c glibc-2.2.3/elf/dl-deps.c --- glibc-2.2.2/elf/dl-deps.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/elf/dl-deps.c Thu Apr 12 14:02:01 2001 @@ -1,5 +1,5 @@ /* Load the dependencies of a mapped object. - Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996,1997,1998,1999,2000,2001 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 @@ -120,10 +120,10 @@ empty dynamics string token substitution else \ { \ /* This is for DT_AUXILIARY. */ \ - if (__builtin_expect (_dl_debug_libs, 0)) \ - _dl_debug_message (1, "cannot load auxiliary `", __str, \ - "' because of empty dynamic string" \ - " token substitution\n", NULL); \ + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) \ + _dl_debug_printf ("cannot load auxiliary `%s' because of" \ + "empty dynamic string token " \ + "substitution\n", __str); \ continue; \ } \ } \ @@ -145,6 +145,7 @@ _dl_map_object_deps (struct link_map *ma const char *name; int errno_saved; int errno_reason; + const char *errstring; auto inline void preload (struct link_map *map); @@ -198,6 +199,7 @@ _dl_map_object_deps (struct link_map *ma alloca means we cannot use recursive function calls. */ errno_saved = errno; errno_reason = 0; + errstring = NULL; errno = 0; name = NULL; for (runp = known; runp; ) @@ -236,7 +238,6 @@ _dl_map_object_deps (struct link_map *ma /* Allocate new entry. */ struct list *newp; const char *objname; - const char *errstring; /* Recognize DSTs. */ name = expand_dst (l, strtab + d->d_un.d_val, 0); @@ -281,7 +282,6 @@ _dl_map_object_deps (struct link_map *ma else if (d->d_tag == DT_AUXILIARY || d->d_tag == DT_FILTER) { const char *objname; - const char *errstring; struct list *newp; /* Recognize DSTs. */ @@ -293,12 +293,11 @@ _dl_map_object_deps (struct link_map *ma if (d->d_tag == DT_AUXILIARY) { /* Say that we are about to load an auxiliary library. */ - if (__builtin_expect (_dl_debug_libs, 0)) - _dl_debug_message (1, "load auxiliary object=", - name, " requested by file=", - l->l_name[0] - ? l->l_name : _dl_argv[0], - "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf ("load auxiliary object=%s" + " requested by file=%s\n", name, + l->l_name[0] + ? l->l_name : _dl_argv[0]); /* We must be prepared that the addressed shared object is not available. */ @@ -308,6 +307,7 @@ _dl_map_object_deps (struct link_map *ma assert (errstring != NULL); if (errstring != _dl_out_of_memory) free ((char *) errstring); + errstring = NULL; /* Simply ignore this error and continue the work. */ continue; @@ -316,12 +316,11 @@ _dl_map_object_deps (struct link_map *ma else { /* Say that we are about to load an auxiliary library. */ - if (__builtin_expect (_dl_debug_libs, 0)) - _dl_debug_message (1, "load filtered object=", name, - " requested by file=", - l->l_name[0] - ? l->l_name : _dl_argv[0], - "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf ("load filtered object=%s" + " requested by file=%s\n", name, + l->l_name[0] + ? l->l_name : _dl_argv[0]); /* For filter objects the dependency must be available. */ if (_dl_catch_error (&objname, &errstring, openaux, &args)) @@ -583,5 +582,5 @@ out: if (errno_reason) _dl_signal_error (errno_reason == -1 ? 0 : errno_reason, - name ?: "", N_("cannot load shared object file")); + errstring ?: "", N_("cannot load shared object file")); } diff -durpNa glibc-2.2.2/elf/dl-dst.h glibc-2.2.3/elf/dl-dst.h --- glibc-2.2.2/elf/dl-dst.h Wed Jun 23 14:50:46 1999 +++ glibc-2.2.3/elf/dl-dst.h Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Handling of dynamic sring tokens. - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2001 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 @@ -24,7 +24,7 @@ size_t __cnt = 0; \ const char *__sf = strchr (name, '$'); \ \ - if (__sf != NULL) \ + if (__builtin_expect (__sf != NULL, 0)) \ __cnt = _dl_dst_count (__sf, is_path); \ \ __cnt; }) diff -durpNa glibc-2.2.2/elf/dl-error.c glibc-2.2.3/elf/dl-error.c --- glibc-2.2.2/elf/dl-error.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/elf/dl-error.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Error handling for runtime dynamic linker. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -97,13 +97,14 @@ _dl_signal_error (int errcode, const cha { /* Lossage while resolving the program's own symbols is always fatal. */ char buffer[1024]; - _dl_sysdep_fatal (_dl_argv[0] ?: "", - ": error while loading shared libraries: ", + _dl_fatal_printf ("\ +%s: error while loading shared libraries: %s%s%s%s%s\n", + _dl_argv[0] ?: "", objname ?: "", objname && *objname ? ": " : "", errstring, errcode ? ": " : "", (errcode ? __strerror_r (errcode, buffer, sizeof buffer) - : ""), "\n", NULL); + : "")); } } @@ -143,7 +144,7 @@ _dl_catch_error (const char **objname, c old = tsd_getspecific (); errcode = setjmp (c.env); - if (errcode == 0) + if (__builtin_expect (errcode, 0) == 0) { tsd_setspecific (&c); (*operate) (args); diff -durpNa glibc-2.2.2/elf/dl-fini.c glibc-2.2.3/elf/dl-fini.c --- glibc-2.2.2/elf/dl-fini.c Thu Nov 16 11:12:01 2000 +++ glibc-2.2.3/elf/dl-fini.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Call the termination functions of loaded shared objects. - Copyright (C) 1995,96,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,98,99,2000,2001 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 @@ -146,10 +146,9 @@ _dl_fini (void) continue; /* When debugging print a message first. */ - if (__builtin_expect (_dl_debug_impcalls, 0)) - _dl_debug_message (1, "\ncalling fini: ", - l->l_name[0] ? l->l_name : _dl_argv[0], - "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ncalling fini: %s\n\n", + l->l_name[0] ? l->l_name : _dl_argv[0]); /* First see whether an array is given. */ if (l->l_info[DT_FINI_ARRAY] != NULL) diff -durpNa glibc-2.2.2/elf/dl-init.c glibc-2.2.3/elf/dl-init.c --- glibc-2.2.2/elf/dl-init.c Fri Feb 9 10:04:04 2001 +++ glibc-2.2.3/elf/dl-init.c Mon Mar 26 20:52:49 2001 @@ -53,9 +53,9 @@ call_init (struct link_map *l, int argc, return; /* Print a debug message if wanted. */ - if (__builtin_expect (_dl_debug_impcalls, 0)) - _dl_debug_message (1, "\ncalling init: ", - l->l_name[0] ? l->l_name : _dl_argv[0], "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ncalling init: %s\n\n", + l->l_name[0] ? l->l_name : _dl_argv[0]); /* Now run the local constructors. There are two forms of them: - the one named by DT_INIT @@ -108,10 +108,10 @@ _dl_init (struct link_map *main_map, int ElfW(Addr) *addrs; unsigned int cnt; - if (__builtin_expect (_dl_debug_impcalls, 0)) - _dl_debug_message (1, "\ncalling preinit: ", - main_map->l_name[0] - ? main_map->l_name : _dl_argv[0], "\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_IMPCALLS, 0)) + _dl_debug_printf ("\ncalling preinit: %s\n\n", + main_map->l_name[0] + ? main_map->l_name : _dl_argv[0]); addrs = (ElfW(Addr) *) (main_map->l_info[DT_PREINIT_ARRAY]->d_un.d_ptr + main_map->l_addr); diff -durpNa glibc-2.2.2/elf/dl-load.c glibc-2.2.3/elf/dl-load.c --- glibc-2.2.2/elf/dl-load.c Fri Feb 9 10:04:04 2001 +++ glibc-2.2.3/elf/dl-load.c Mon Mar 26 20:52:49 2001 @@ -30,7 +30,8 @@ #include #include #include "dynamic-link.h" -#include +#include +#include #include @@ -112,6 +113,8 @@ struct filebuf size_t _dl_pagesize; +unsigned int _dl_osversion; + int _dl_clktck; extern const char *_dl_platform; @@ -177,26 +180,28 @@ _dl_dst_count (const char *name, int is_ { size_t len = 1; - /* $ORIGIN is not expanded for SUID/GUID programs. + /* $ORIGIN is not expanded for SUID/GUID programs and it must + always appear first in path. - Note that it is no bug that the strings in the first two `strncmp' - calls are longer than the sequence which is actually tested. */ - if ((((strncmp (&name[1], "ORIGIN}", 6) == 0 - && (!__libc_enable_secure - || ((name[7] == '\0' || (is_path && name[7] == ':')) - && (name == start || (is_path && name[-1] == ':')))) - && (len = 7) != 0) - || (strncmp (&name[1], "PLATFORM}", 8) == 0 && (len = 9) != 0)) - && (name[len] == '\0' || name[len] == '/' - || (is_path && name[len] == ':'))) - || (name[1] == '{' - && ((strncmp (&name[2], "ORIGIN}", 7) == 0 - && (!__libc_enable_secure - || ((name[9] == '\0' || (is_path && name[9] == ':')) - && (name == start || (is_path && name[-1] == ':')))) - && (len = 9) != 0) - || (strncmp (&name[2], "PLATFORM}", 9) == 0 - && (len = 11) != 0)))) + Note that it is no bug that the string in the second and + fourth `strncmp' call is longer than the sequence which is + actually tested. */ + if (((strncmp (&name[1], "{ORIGIN}", 8) == 0 && (len = 9) != 0) + || (strncmp (&name[1], "{ORIGIN}" + 1, 6) == 0 + && (name[7] == '\0' || name[7] == '/' + || (is_path && name[7] == ':')) + && (len = 7) != 0))) + { + if (__builtin_expect (!__libc_enable_secure, 1) + && (name == start || (is_path && name[-1] == ':'))) + ++cnt; + } + else if ((strncmp (&name[1], "{PLATFORM}", 10) == 0 + && (len = 11) != 0) + || (strncmp (&name[1], "{PLATFORM}" + 1, 8) == 0 + && (name[9] == '\0' || name[9] == '/' + || (is_path && name[9] == ':')) + && (len = 9) != 0)) ++cnt; name = strchr (name + len, '$'); @@ -222,57 +227,56 @@ _dl_dst_substitute (struct link_map *l, do { - if (*name == '$') + if (__builtin_expect (*name, 'a') == '$') { - const char *repl; - size_t len; + const char *repl = NULL; + size_t len = 1; - /* Note that it is no bug that the strings in the first two `strncmp' - calls are longer than the sequence which is actually tested. */ - if ((((strncmp (&name[1], "ORIGIN}", 6) == 0 && (len = 7) != 0) - || (strncmp (&name[1], "PLATFORM}", 8) == 0 && (len = 9) != 0)) - && (name[len] == '\0' || name[len] == '/' - || (is_path && name[len] == ':'))) - || (name[1] == '{' - && ((strncmp (&name[2], "ORIGIN}", 7) == 0 && (len = 9) != 0) - || (strncmp (&name[2], "PLATFORM}", 9) == 0 - && (len = 11) != 0)))) + /* Note that it is no bug that the string in the second and + fourth `strncmp' call is longer than the sequence which + is actually tested. */ + if (((strncmp (&name[1], "{ORIGIN}", 8) == 0 && (len = 9) != 0) + || (strncmp (&name[1], "{ORIGIN}" + 1, 6) == 0 + && (name[7] == '\0' || name[7] == '/' + || (is_path && name[7] == ':')) + && (len = 7) != 0))) { - repl = ((len == 7 || name[2] == 'O') - ? (__libc_enable_secure - && ((name[len] != '\0' - && (!is_path || name[len] != ':')) - || (name != start - && (!is_path || name[-1] != ':'))) - ? NULL : l->l_origin) - : _dl_platform); + if (__builtin_expect (!__libc_enable_secure, 1) + && (name == start || (is_path && name[-1] == ':'))) + repl = l->l_origin; + } + else if ((strncmp (&name[1], "{PLATFORM}", 10) == 0 + && (len = 11) != 0) + || (strncmp (&name[1], "{PLATFORM}" + 1, 8) == 0 + && (name[9] == '\0' || name[9] == '/' || name[9] == ':') + && (len = 9) != 0)) + repl = _dl_platform; - if (repl != NULL && repl != (const char *) -1) - { - wp = __stpcpy (wp, repl); - name += len; - } - else - { - /* We cannot use this path element, the value of the - replacement is unknown. */ - wp = last_elem; - name += len; - while (*name != '\0' && (!is_path || *name != ':')) - ++name; - } + + if (repl != NULL && repl != (const char *) -1) + { + wp = __stpcpy (wp, repl); + name += len; + } + else if (len > 1) + { + /* We cannot use this path element, the value of the + replacement is unknown. */ + wp = last_elem; + name += len; + while (*name != '\0' && (!is_path || *name != ':')) + ++name; } else /* No DST we recognize. */ *wp++ = *name++; } - else if (is_path && *name == ':') + else { *wp++ = *name++; - last_elem = wp; + if (is_path && *name == ':') + last_elem = wp; } - else - *wp++ = *name++; } while (*name != '\0'); @@ -302,7 +306,7 @@ expand_dynamic_string_token (struct link cnt = DL_DST_COUNT (s, 1); /* If we do not have to replace anything simply copy the string. */ - if (cnt == 0) + if (__builtin_expect (cnt, 0) == 0) return local_strdup (s); /* Determine the length of the substituted string. */ @@ -801,8 +805,8 @@ _dl_map_object_from_fd (const char *name return NULL; /* Print debugging message. */ - if (__builtin_expect (_dl_debug_files, 0)) - _dl_debug_message (1, "file=", name, "; generating link map\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) + _dl_debug_printf ("file=%s; generating link map\n", name); /* This is the ELF header. We read it in `open_verify'. */ header = (void *) fbp->buf; @@ -901,8 +905,8 @@ _dl_map_object_from_fd (const char *name if (ph->p_flags & PF_X) c->prot |= PROT_EXEC; } - break; } + break; } /* Now process the load commands and map segments into memory. */ @@ -949,7 +953,7 @@ _dl_map_object_from_fd (const char *name { /* This object is loaded at a fixed address. This must never happen for objects loaded with dlopen(). */ - if (mode & __RTLD_DLOPEN) + if (__builtin_expect (mode & __RTLD_DLOPEN, 0)) { LOSE (0, N_("cannot dynamically load executable")); } @@ -1003,7 +1007,7 @@ _dl_map_object_from_fd (const char *name _dl_pagesize, c->prot|PROT_WRITE) < 0) LOSE (errno, N_("cannot change memory protections")); } - memset ((void *) zero, 0, zeropage - zero); + memset ((void *) zero, '\0', zeropage - zero); if ((c->prot & PROT_WRITE) == 0) __mprotect ((caddr_t) (zero & ~(_dl_pagesize - 1)), _dl_pagesize, c->prot); @@ -1026,7 +1030,7 @@ _dl_map_object_from_fd (const char *name if (l->l_phdr == NULL) { - /* The program header is not contained in any of the segmenst. + /* The program header is not contained in any of the segments. We have to allocate memory ourself and copy it over from out temporary place. */ ElfW(Phdr) *newp = (ElfW(Phdr) *) malloc (header->e_phnum @@ -1059,35 +1063,15 @@ _dl_map_object_from_fd (const char *name l->l_entry += l->l_addr; - if (__builtin_expect (_dl_debug_files, 0)) - { - const size_t nibbles = sizeof (void *) * 2; - char buf1[nibbles + 1]; - char buf2[nibbles + 1]; - char buf3[nibbles + 1]; - - buf1[nibbles] = '\0'; - buf2[nibbles] = '\0'; - buf3[nibbles] = '\0'; - - memset (buf1, '0', nibbles); - memset (buf2, '0', nibbles); - memset (buf3, '0', nibbles); - _itoa_word ((unsigned long int) l->l_ld, &buf1[nibbles], 16, 0); - _itoa_word ((unsigned long int) l->l_addr, &buf2[nibbles], 16, 0); - _itoa_word (maplength, &buf3[nibbles], 16, 0); - - _dl_debug_message (1, " dynamic: 0x", buf1, " base: 0x", buf2, - " size: 0x", buf3, "\n", NULL); - memset (buf1, '0', nibbles); - memset (buf2, '0', nibbles); - memset (buf3, ' ', nibbles); - _itoa_word ((unsigned long int) l->l_entry, &buf1[nibbles], 16, 0); - _itoa_word ((unsigned long int) l->l_phdr, &buf2[nibbles], 16, 0); - _itoa_word (l->l_phnum, &buf3[nibbles], 10, 0); - _dl_debug_message (1, " entry: 0x", buf1, " phdr: 0x", buf2, - " phnum: ", buf3, "\n\n", NULL); - } + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) + _dl_debug_printf (" dynamic: 0x%0*lx base: 0x%0*lx size: 0x%0*Zx\n" + " entry: 0x%0*lx phdr: 0x%0*lx phnum: %*u\n\n", + (int) sizeof (void *) * 2, (unsigned long int) l->l_ld, + (int) sizeof (void *) * 2, (unsigned long int) l->l_addr, + (int) sizeof (void *) * 2, maplength, + (int) sizeof (void *) * 2, (unsigned long int) l->l_entry, + (int) sizeof (void *) * 2, (unsigned long int) l->l_phdr, + (int) sizeof (void *) * 2, l->l_phnum); elf_get_dynamic_info (l); @@ -1126,7 +1110,7 @@ _dl_map_object_from_fd (const char *name /* If this object has DT_SYMBOLIC set modify now its scope. We don't have to do this for the main map. */ if (__builtin_expect (l->l_info[DT_SYMBOLIC] != NULL, 0) - && &l->l_searchlist != l->l_scope[0]) + && &l->l_searchlist != l->l_scope[0]) { /* Create an appropriate searchlist. It contains only this map. @@ -1154,7 +1138,7 @@ _dl_map_object_from_fd (const char *name } /* Remember whether this object must be initialized first. */ - if (l->l_flags_1 & DF_1_INITFIRST) + if (__builtin_expect (l->l_flags_1 & DF_1_INITFIRST, 0)) _dl_initfirst = l; /* Finally the file information. */ @@ -1172,7 +1156,7 @@ print_search_path (struct r_search_path_ char buf[max_dirnamelen + max_capstrlen]; int first = 1; - _dl_debug_message (1, " search path=", NULL); + _dl_debug_printf (" search path="); while (*list != NULL && (*list)->what == what) /* Yes, ==. */ { @@ -1187,18 +1171,23 @@ print_search_path (struct r_search_path_ cp[0] = '\0'; else cp[-1] = '\0'; - _dl_debug_message (0, first ? "" : ":", buf, NULL); - first = 0; + if (first) + { + _dl_debug_printf_c ("%s", buf); + first = 0; + } + else + _dl_debug_printf_c (":%s", buf); } ++list; } if (name != NULL) - _dl_debug_message (0, "\t\t(", what, " from file ", - name[0] ? name : _dl_argv[0], ")\n", NULL); + _dl_debug_printf_c ("\t\t(%s from file %s)\n", what, + name[0] ? name : _dl_argv[0]); else - _dl_debug_message (0, "\t\t(", what, ")\n", NULL); + _dl_debug_printf_c ("\t\t(%s)\n", what); } /* Open a file and verify it is an ELF file for this architecture. We @@ -1229,6 +1218,10 @@ open_verify (const char *name, struct fi [EI_OSABI] = ELFOSABI_SYSV, [EI_ABIVERSION] = 0 }; + static const struct { + ElfW(Word) vendorlen, datalen, type; + char vendor[4]; + } expected_note = { 4, 16, 1, "GNU" }; int fd; /* Open the file. We always open files read-only. */ @@ -1236,6 +1229,10 @@ open_verify (const char *name, struct fi if (fd != -1) { ElfW(Ehdr) *ehdr; + ElfW(Phdr) *phdr, *ph; + ElfW(Word) *abi_note, abi_note_buf[8]; + unsigned int osversion; + size_t maplength; /* We successfully openened the file. Now verify it is a file we can use. */ @@ -1303,12 +1300,7 @@ open_verify (const char *name, struct fi lose (0, fd, name, NULL, NULL, N_("ELF file version does not match current one")); if (! __builtin_expect (elf_machine_matches_host (ehdr), 1)) - { - close_and_out: - __close (fd); - __set_errno (ENOENT); - fd = -1; - } + goto close_and_out; else if (__builtin_expect (ehdr->e_phentsize, sizeof (ElfW(Phdr))) != sizeof (ElfW(Phdr))) lose (0, fd, name, NULL, NULL, @@ -1317,6 +1309,50 @@ open_verify (const char *name, struct fi && __builtin_expect (ehdr->e_type, ET_EXEC) != ET_EXEC) lose (0, fd, name, NULL, NULL, N_("only ET_DYN and ET_EXEC can be loaded")); + + maplength = ehdr->e_phnum * sizeof (ElfW(Phdr)); + if (ehdr->e_phoff + maplength <= fbp->len) + phdr = (void *) (fbp->buf + ehdr->e_phoff); + else + { + phdr = alloca (maplength); + __lseek (fd, SEEK_SET, ehdr->e_phoff); + if (__libc_read (fd, (void *) phdr, maplength) != maplength) + lose (errno, fd, name, NULL, NULL, N_("cannot read file data")); + } + + /* Check .note.ABI-tag if present. */ + for (ph = phdr; ph < &phdr[ehdr->e_phnum]; ++ph) + if (ph->p_type == PT_NOTE && ph->p_filesz == 32 && ph->p_align >= 4) + { + if (ph->p_offset + 32 <= fbp->len) + abi_note = (void *) (fbp->buf + ph->p_offset); + else + { + __lseek (fd, SEEK_SET, ph->p_offset); + if (__libc_read (fd, (void *) abi_note_buf, 32) != 32) + lose (errno, fd, name, NULL, NULL, + N_("cannot read file data")); + abi_note = abi_note_buf; + } + + if (memcmp (abi_note, &expected_note, sizeof (expected_note))) + continue; + + osversion = (abi_note[5] & 0xff) * 65536 + + (abi_note[6] & 0xff) * 256 + + (abi_note[7] & 0xff); + if (abi_note[4] != __ABI_TAG_OS + || (_dl_osversion && _dl_osversion < osversion)) + { + close_and_out: + __close (fd); + __set_errno (ENOENT); + fd = -1; + } + + break; + } } return fd; @@ -1348,10 +1384,11 @@ open_path (const char *name, size_t name size_t cnt; char *edp; int here_any = 0; + int err; /* If we are debugging the search for libraries print the path now if it hasn't happened now. */ - if (__builtin_expect (_dl_debug_libs, 0) + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0) && current_what != this_dir->what) { current_what = this_dir->what; @@ -1372,8 +1409,8 @@ open_path (const char *name, size_t name - buf); /* Print name we try if this is wanted. */ - if (__builtin_expect (_dl_debug_libs, 0)) - _dl_debug_message (1, " trying file=", buf, "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf (" trying file=%s\n", buf); fd = open_verify (buf, fbp); if (this_dir->status[cnt] == unknown) @@ -1400,7 +1437,8 @@ open_path (const char *name, size_t name /* Remember whether we found any existing directory. */ here_any |= this_dir->status[cnt] == existing; - if (fd != -1 && preloaded && __libc_enable_secure) + if (fd != -1 && __builtin_expect (preloaded, 0) + && __libc_enable_secure) { /* This is an extra security effort to make sure nobody can preload broken shared objects which are in the trusted @@ -1438,7 +1476,7 @@ open_path (const char *name, size_t name return -1; } } - if (here_any && errno != ENOENT && errno != EACCES) + if (here_any && (err = errno) != ENOENT && err != EACCES) /* The file exists and is readable, but something went wrong. */ return -1; @@ -1448,7 +1486,7 @@ open_path (const char *name, size_t name while (*++dirs != NULL); /* Remove the whole path if none of the directories exists. */ - if (! any) + if (__builtin_expect (! any, 0)) { /* Paths which were allocated using the minimal malloc() in ld.so must not be freed using the general free() in libc. */ @@ -1479,9 +1517,7 @@ _dl_map_object (struct link_map *loader, /* If the requested name matches the soname of a loaded object, use that object. Elide this check for names that have not yet been opened. */ - /* XXX Is this test still correct after the reference counter - handling rewrite? */ - if (l->l_opencount == 0) + if (__builtin_expect (l->l_faked, 0) != 0) continue; if (!_dl_name_match_p (name, l)) { @@ -1506,10 +1542,9 @@ _dl_map_object (struct link_map *loader, } /* Display information if we are debugging. */ - if (__builtin_expect (_dl_debug_files, 0) && loader != NULL) - _dl_debug_message (1, "\nfile=", name, "; needed by ", - loader->l_name[0] ? loader->l_name : _dl_argv[0], - "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0) && loader != NULL) + _dl_debug_printf ("\nfile=%s; needed by %s\n", name, + loader->l_name[0] ? loader->l_name : _dl_argv[0]); if (strchr (name, '/') == NULL) { @@ -1517,8 +1552,8 @@ _dl_map_object (struct link_map *loader, size_t namelen = strlen (name) + 1; - if (__builtin_expect (_dl_debug_libs, 0)) - _dl_debug_message (1, "find library=", name, "; searching\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf ("find library=%s; searching\n", name); fd = -1; @@ -1593,7 +1628,8 @@ _dl_map_object (struct link_map *loader, &loader->l_runpath_dirs, &realname, &fb); } - if (fd == -1 && (! preloaded || ! __libc_enable_secure)) + if (fd == -1 + && (__builtin_expect (! preloaded, 1) || ! __libc_enable_secure)) { /* Check the list of libraries in the file /etc/ld.so.cache, for compatibility with Linux's ldconfig program. */ @@ -1632,7 +1668,7 @@ _dl_map_object (struct link_map *loader, if (cached) { fd = open_verify (cached, &fb); - if (fd != -1) + if (__builtin_expect (fd, 0) != -1) { realname = local_strdup (cached); if (realname == NULL) @@ -1654,8 +1690,8 @@ _dl_map_object (struct link_map *loader, &realname, &fb); /* Add another newline when we a tracing the library loading. */ - if (__builtin_expect (_dl_debug_libs, 0)) - _dl_debug_message (1, "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_LIBS, 0)) + _dl_debug_printf ("\n"); } else { @@ -1668,12 +1704,12 @@ _dl_map_object (struct link_map *loader, else { fd = open_verify (realname, &fb); - if (fd == -1) + if (__builtin_expect (fd, 0) == -1) free (realname); } } - if (fd == -1) + if (__builtin_expect (fd, 0) == -1) { if (trace_mode) { diff -durpNa glibc-2.2.2/elf/dl-lookup.c glibc-2.2.3/elf/dl-lookup.c --- glibc-2.2.2/elf/dl-lookup.c Thu Oct 26 22:57:22 2000 +++ glibc-2.2.3/elf/dl-lookup.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Look up a symbol in the loaded objects. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -161,13 +161,12 @@ add_dependency (struct link_map *undef_m ++map->l_opencount; /* Display information if we are debugging. */ - if (__builtin_expect (_dl_debug_files, 0)) - _dl_debug_message (1, "\nfile=", - map->l_name[0] ? map->l_name : _dl_argv[0], - "; needed by ", - undef_map->l_name[0] - ? undef_map->l_name : _dl_argv[0], - " (relocation dependency)\n\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) + _dl_debug_printf ("\ +\nfile=%s; needed by %s (relocation dependency)\n\n", + map->l_name[0] ? map->l_name : _dl_argv[0], + undef_map->l_name[0] + ? undef_map->l_name : _dl_argv[0]); } else /* Whoa, that was bad luck. We have to search again. */ @@ -242,15 +241,13 @@ _dl_lookup_symbol (const char *undef_nam protected = *ref && ELFW(ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED; - if (__builtin_expect (_dl_debug_bindings, 0)) - _dl_debug_message (1, "binding file ", - (reference_name && reference_name[0] - ? reference_name - : (_dl_argv[0] ?: "
")), - " to ", current_value.m->l_name[0] + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_BINDINGS, 0)) + _dl_debug_printf ("binding file %s to %s: %s symbol `%s'\n", + (reference_name && reference_name[0] + ? reference_name : (_dl_argv[0] ?: "
")), + current_value.m->l_name[0] ? current_value.m->l_name : _dl_argv[0], - ": ", protected ? "protected" : "normal", - " symbol `", undef_name, "'\n", NULL); + protected ? "protected" : "normal", undef_name); if (__builtin_expect (protected == 0, 1)) { @@ -321,15 +318,13 @@ _dl_lookup_symbol_skip (const char *unde protected = *ref && ELFW(ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED; - if (__builtin_expect (_dl_debug_bindings, 0)) - _dl_debug_message (1, "binding file ", + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_BINDINGS, 0)) + _dl_debug_printf ("binding file %s to %s: %s symbol `%s'\n", (reference_name && reference_name[0] - ? reference_name - : (_dl_argv[0] ?: "
")), - " to ", current_value.m->l_name[0] + ? reference_name : (_dl_argv[0] ?: "
")), + current_value.m->l_name[0] ? current_value.m->l_name : _dl_argv[0], - ": ", protected ? "protected" : "normal", - " symbol `", undef_name, "'\n", NULL); + protected ? "protected" : "normal", undef_name); if (__builtin_expect (protected == 0, 1)) { @@ -449,16 +444,14 @@ _dl_lookup_versioned_symbol (const char protected = *ref && ELFW(ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED; - if (__builtin_expect (_dl_debug_bindings, 0)) - _dl_debug_message (1, "binding file ", + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_BINDINGS, 0)) + _dl_debug_printf ("binding file %s to %s: %s symbol `%s' [%s]\n", (reference_name && reference_name[0] - ? reference_name - : (_dl_argv[0] ?: "
")), - " to ", current_value.m->l_name[0] + ? reference_name : (_dl_argv[0] ?: "
")), + current_value.m->l_name[0] ? current_value.m->l_name : _dl_argv[0], - ": ", protected ? "protected" : "normal", - " symbol `", undef_name, "' [", version->name, - "]\n", NULL); + protected ? "protected" : "normal", + undef_name, version->name); if (__builtin_expect (protected == 0, 1)) { @@ -540,16 +533,14 @@ _dl_lookup_versioned_symbol_skip (const protected = *ref && ELFW(ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED; - if (__builtin_expect (_dl_debug_bindings, 0)) - _dl_debug_message (1, "binding file ", - (reference_name && reference_name[0] - ? reference_name - : (_dl_argv[0] ?: "
")), - " to ", current_value.m->l_name[0] - ? current_value.m->l_name : _dl_argv[0], - ": ", protected ? "protected" : "normal", - " symbol `", undef_name, "' [", version->name, - "]\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_BINDINGS, 0)) + _dl_debug_printf ("binding file %s to %s: %s symbol `%s' [%s]\n", + (reference_name && reference_name[0] + ? reference_name : (_dl_argv[0] ?: "
")), + current_value.m->l_name[0] + ? current_value.m->l_name : _dl_argv[0], + protected ? "protected" : "normal", + undef_name, version->name); if (__builtin_expect (protected == 0, 1)) { diff -durpNa glibc-2.2.2/elf/dl-minimal.c glibc-2.2.3/elf/dl-minimal.c --- glibc-2.2.2/elf/dl-minimal.c Tue Jan 23 14:07:16 2001 +++ glibc-2.2.3/elf/dl-minimal.c Thu Apr 12 14:02:01 2001 @@ -187,13 +187,10 @@ void weak_function __assert_fail (const char *assertion, const char *file, unsigned int line, const char *function) { - char buf[64]; - buf[sizeof buf - 1] = '\0'; - _dl_sysdep_fatal ("BUG IN DYNAMIC LINKER ld.so: ", - file, ": ", _itoa_word (line, buf + sizeof buf - 1, 10, 0), - ": ", function ?: "", function ? ": " : "", - "Assertion `", assertion, "' failed!\n", - NULL); + _dl_fatal_printf ("\ +Inconsistency detected by ld.so: %s: %u: %s%sAssertion `%s' failed!\n", + file, line, function ?: "", function ? ": " : "", + assertion); } @@ -203,15 +200,10 @@ __assert_perror_fail (int errnum, const char *function) { char errbuf[64]; - char buf[64]; - buf[sizeof buf - 1] = '\0'; - _dl_sysdep_fatal ("BUG IN DYNAMIC LINKER ld.so: ", - file, ": ", _itoa_word (line, buf + sizeof buf - 1, 10, 0), - ": ", function ?: "", function ? ": " : "", - "Unexpected error: ", - __strerror_r (errnum, errbuf, sizeof (errbuf)), "\n", - NULL); - + _dl_fatal_printf ("\ +Inconsistency detected by ld.so: %s: %u: %s%sUnexpected error: %s\n", + file, line, function ?: "", function ? ": " : "", + __strerror_r (errnum, errbuf, sizeof (errbuf))); } #endif @@ -260,6 +252,8 @@ __strtoul_internal (const char *nptr, ch || (result == ULONG_MAX / 10 && digval > ULONG_MAX % 10)) { errno = ERANGE; + if (endptr != NULL) + *endptr = (char *) nptr; return ULONG_MAX; } result *= base; @@ -267,5 +261,7 @@ __strtoul_internal (const char *nptr, ch ++nptr; } + if (endptr != NULL) + *endptr = (char *) nptr; return result * sign; } diff -durpNa glibc-2.2.2/elf/dl-misc.c glibc-2.2.3/elf/dl-misc.c --- glibc-2.2.2/elf/dl-misc.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/elf/dl-misc.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Miscellaneous support functions for dynamic linker - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 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 @@ -20,12 +20,16 @@ #include #include #include +#include #include #include +#include #include #include #include +#include #include +#include #include #ifndef MAP_ANON @@ -82,71 +86,190 @@ _dl_sysdep_read_whole_file (const char * int _dl_debug_fd = 2; -void -_dl_sysdep_output (int fd, const char *msg, ...) +/* Bare-bone printf implementation. This function only knows about + the formats and flags needed and can handle only up to 64 stripes in + the output. */ +static void +_dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg) { - va_list ap; + const int niovmax = 64; + struct iovec iov[niovmax]; + int niov = 0; + pid_t pid = 0; + char pidbuf[7]; - va_start (ap, msg); - do + while (*fmt != '\0') { - size_t len = strlen (msg); - __libc_write (fd, msg, len); - msg = va_arg (ap, const char *); + const char *startp = fmt; + + if (tag_p > 0) + { + /* Generate the tag line once. It consists of the PID and a + colon followed by a tab. */ + if (pid == 0) + { + char *p; + pid = __getpid (); + assert (pid >= 0 && pid < 100000); + p = _itoa_word (pid, &pidbuf[5], 10, 0); + while (p > pidbuf) + *--p = '0'; + pidbuf[5] = ':'; + pidbuf[6] = '\t'; + } + + /* Append to the output. */ + assert (niov < niovmax); + iov[niov].iov_len = 7; + iov[niov++].iov_base = pidbuf; + + /* No more tags until we see the next newline. */ + tag_p = -1; + } + + /* Skip everything except % and \n (if tags are needed). */ + while (*fmt != '\0' && *fmt != '%' && (! tag_p || *fmt != '\n')) + ++fmt; + + /* Append constant string. */ + assert (niov < niovmax); + if ((iov[niov].iov_len = fmt - startp) != 0) + iov[niov++].iov_base = (char *) startp; + + if (*fmt == '%') + { + /* It is a format specifier. */ + char fill = ' '; + int width = -1; +#if LONG_MAX != INT_MAX + int long_mod = 0; +#endif + + /* Recognize zero-digit fill flag. */ + if (*++fmt == '0') + { + fill = '0'; + ++fmt; + } + + /* See whether with comes from a parameter. Note that no other + way to specify the width is implemented. */ + if (*fmt == '*') + { + width = va_arg (arg, int); + ++fmt; + } + + /* Recognize the l modifier. It is only important on some + platforms where long and int have a different size. We + can use the same code for size_t. */ + if (*fmt == 'l' || *fmt == 'Z') + { +#if LONG_MAX != INT_MAX + long_mod = 1; +#endif + ++fmt; + } + + switch (*fmt) + { + /* Integer formatting. */ + case 'u': + case 'x': + { + /* We have to make a difference if long and int have a + different size. */ +#if LONG_MAX != INT_MAX + unsigned long int num = (long_mod + ? va_arg (arg, unsigned long int) + : va_arg (arg, unsigned int)); +#else + unsigned long int num = va_arg (arg, unsigned int); +#endif + /* We use alloca() to allocate the buffer with the most + pessimistic guess for the size. Using alloca() allows + having more than one integer formatting in a call. */ + char *buf = (char *) alloca (3 * sizeof (unsigned long int)); + char *endp = &buf[3 * sizeof (unsigned long int)]; + char *cp = _itoa_word (num, endp, *fmt == 'x' ? 16 : 10, 0); + + /* Pad to the width the user specified. */ + if (width != -1) + while (endp - cp < width) + *--cp = fill; + + iov[niov].iov_base = cp; + iov[niov].iov_len = endp - cp; + ++niov; + } + break; + + case 's': + /* Get the string argument. */ + iov[niov].iov_base = va_arg (arg, char *); + iov[niov].iov_len = strlen (iov[niov].iov_base); + ++niov; + break; + + default: + assert (! "invalid format specifier"); + } + ++fmt; + } + else if (*fmt == '\n') + { + /* See whether we have to print a single newline character. */ + if (fmt == startp) + { + iov[niov].iov_base = (char *) startp; + iov[niov++].iov_len = 1; + } + else + /* No, just add it to the rest of the string. */ + ++iov[niov - 1].iov_len; + + /* Next line, print a tag again. */ + tag_p = 1; + ++fmt; + } } - while (msg != NULL); - va_end (ap); + + /* Finally write the result. */ + __writev (fd, iov, niov); } +/* Write to debug file. */ void -_dl_debug_message (int new_line, const char *msg, ...) +_dl_debug_printf (const char *fmt, ...) { - /* We print the strings we get passed one after the other but start all - lines using the current PID. */ - int pid = 0; - va_list ap; + va_list arg; - va_start (ap, msg); - do - if (msg[0] == '\0') - /* Get the next argument. */ - msg = va_arg (ap, const char *); - else - { - const char *endp; + va_start (arg, fmt); + _dl_debug_vdprintf (_dl_debug_fd, 1, fmt, arg); + va_end (arg); +} - /* We actually will print something in this line. So print the - PID now if needed. */ - if (new_line) - { - char buf[7]; - char *p; - if (pid == 0) - pid = __getpid (); - assert (pid >= 0 && pid < 100000); - p = _itoa_word (pid, &buf[5], 10, 0); - while (p > buf) - *--p = '0'; - buf[5] = ':'; - buf[6] = '\t'; - __libc_write (_dl_debug_fd, buf, 7); - new_line = 0; - } - endp = msg + strcspn (msg, "\n"); - if (*endp == '\0') - { - __libc_write (_dl_debug_fd, msg, endp - msg); - msg = va_arg (ap, const char *); - } - else - { - __libc_write (_dl_debug_fd, msg, endp - msg + 1); - msg = endp + 1; - new_line = 1; - } - } - while (msg != NULL); - va_end (ap); +/* Write to debug file but don't start with a tag. */ +void +_dl_debug_printf_c (const char *fmt, ...) +{ + va_list arg; + + va_start (arg, fmt); + _dl_debug_vdprintf (_dl_debug_fd, -1, fmt, arg); + va_end (arg); +} + + +/* Write the given file descriptor. */ +void +_dl_dprintf (int fd, const char *fmt, ...) +{ + va_list arg; + + va_start (arg, fmt); + _dl_debug_vdprintf (fd, 0, fmt, arg); + va_end (arg); } diff -durpNa glibc-2.2.2/elf/dl-object.c glibc-2.2.3/elf/dl-object.c --- glibc-2.2.2/elf/dl-object.c Thu Aug 31 14:44:57 2000 +++ glibc-2.2.3/elf/dl-object.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Storage management for the chain of loaded shared objects. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -73,9 +73,10 @@ _dl_new_object (char *realname, const ch { while (loader->l_loader != NULL) loader = loader->l_loader; - new->l_scope[idx] = &loader->l_searchlist; + if (idx == 0 || &loader->l_searchlist != new->l_scope[0]) + new->l_scope[idx] = &loader->l_searchlist; } - else + else if (idx == 0 || &new->l_searchlist != new->l_scope[0]) new->l_scope[idx] = &new->l_searchlist; new->l_local_scope[0] = &new->l_searchlist; diff -durpNa glibc-2.2.2/elf/dl-open.c glibc-2.2.3/elf/dl-open.c --- glibc-2.2.2/elf/dl-open.c Sat Jan 13 10:48:47 2001 +++ glibc-2.2.3/elf/dl-open.c Mon Mar 26 20:52:49 2001 @@ -242,18 +242,9 @@ dl_open_worker (void *a) if (new->l_searchlist.r_list != NULL) { /* Let the user know about the opencount. */ - if (__builtin_expect (_dl_debug_files, 0)) - { - char buf[20]; - - buf[sizeof buf - 1] = '\0'; - - _dl_debug_message (1, "opening file=", new->l_name, - "; opencount == ", - _itoa_word (new->l_opencount, - buf + sizeof buf - 1, 10, 0), - "\n\n", NULL); - } + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) + _dl_debug_printf ("opening file=%s; opencount == %u\n\n", + new->l_name, new->l_opencount); /* If the user requested the object to be in the global namespace but it is not so far, add it now. */ @@ -342,18 +333,9 @@ dl_open_worker (void *a) __libc_multiple_libcs = 1; /* Let the user know about the opencount. */ - if (__builtin_expect (_dl_debug_files, 0)) - { - char buf[20]; - - buf[sizeof buf - 1] = '\0'; - - _dl_debug_message (1, "opening file=", new->l_name, - "; opencount == ", - _itoa_word (new->l_opencount, - buf + sizeof buf - 1, 10, 0), - "\n\n", NULL); - } + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_FILES, 0)) + _dl_debug_printf ("opening file=%s; opencount == %u\n\n", + new->l_name, new->l_opencount); } @@ -453,17 +435,15 @@ show_scope (struct link_map *new) numbuf[0] = '0' + scope_cnt; numbuf[1] = '\0'; - _dl_sysdep_message ("scope ", numbuf, ":", NULL); + _dl_printf ("scope %s:", numbuf); for (cnt = 0; cnt < new->l_scope[scope_cnt]->r_nlist; ++cnt) if (*new->l_scope[scope_cnt]->r_list[cnt]->l_name) - _dl_sysdep_message (" ", - new->l_scope[scope_cnt]->r_list[cnt]->l_name, - NULL); + _dl_printf (" %s", new->l_scope[scope_cnt]->r_list[cnt]->l_name) else - _dl_sysdep_message ("
", NULL); + _dl_printf ("
", NULL); - _dl_sysdep_message ("\n", NULL); + _dl_printf ("\n", NULL); } } #endif diff -durpNa glibc-2.2.2/elf/dl-profile.c glibc-2.2.3/elf/dl-profile.c --- glibc-2.2.2/elf/dl-profile.c Wed Jan 10 15:54:22 2001 +++ glibc-2.2.3/elf/dl-profile.c Mon Mar 26 20:52:49 2001 @@ -261,14 +261,13 @@ _dl_start_profile (struct link_map *map, #else # define EXTRA_FLAGS #endif - fd = __open (filename, O_RDWR | O_CREAT EXTRA_FLAGS, 0666); + fd = __open (filename, O_RDWR | O_CREAT EXTRA_FLAGS, DEFFILEMODE); if (fd == -1) { /* We cannot write the profiling data so don't do anything. */ char buf[400]; - _dl_sysdep_message (filename, ": cannot open file: ", - __strerror_r (errno, buf, sizeof buf), - "\n", NULL); + _dl_error_printf ("%s: cannot open file: %s\n", filename, + __strerror_r (errno, buf, sizeof buf)); return; } @@ -278,9 +277,8 @@ _dl_start_profile (struct link_map *map, char buf[400]; int errnum = errno; __close (fd); - _dl_sysdep_message (filename, ": cannot stat file: ", - __strerror_r (errnum, buf, sizeof buf), - "\n", NULL); + _dl_error_printf ("%s: cannot stat file: %s\n", filename, + __strerror_r (errnum, buf, sizeof buf)); return; } @@ -300,9 +298,8 @@ _dl_start_profile (struct link_map *map, cannot_create: errnum = errno; __close (fd); - _dl_sysdep_message (filename, ": cannot create file: ", - __strerror_r (errnum, buf, sizeof buf), - "\n", NULL); + _dl_error_printf ("%s: cannot create file: %s\n", filename, + __strerror_r (errnum, buf, sizeof buf)); return; } @@ -319,9 +316,8 @@ _dl_start_profile (struct link_map *map, if (addr != NULL) __munmap ((void *) addr, expected_size); - _dl_sysdep_message (filename, - ": file is no correct profile data file for `", - _dl_profile, "'\n", NULL); + _dl_error_printf ("%s: file is no correct profile data file for `%s'\n", + filename, _dl_profile); return; } @@ -332,9 +328,8 @@ _dl_start_profile (struct link_map *map, char buf[400]; int errnum = errno; __close (fd); - _dl_sysdep_message (filename, ": cannot map file: ", - __strerror_r (errnum, buf, sizeof buf), - "\n", NULL); + _dl_error_printf ("%s: cannot map file: %s\n", filename, + __strerror_r (errnum, buf, sizeof buf)); return; } @@ -377,7 +372,7 @@ _dl_start_profile (struct link_map *map, if (tos == NULL) { __munmap ((void *) addr, expected_size); - _dl_sysdep_fatal ("Out of memory while initializing profiler\n", NULL); + _dl_fatal_printf ("Out of memory while initializing profiler\n"); /* NOTREACHED */ } diff -durpNa glibc-2.2.2/elf/dl-reloc.c glibc-2.2.3/elf/dl-reloc.c --- glibc-2.2.2/elf/dl-reloc.c Thu Aug 31 14:44:57 2000 +++ glibc-2.2.3/elf/dl-reloc.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Relocate a shared object and resolve its references to other loaded objects. - Copyright (C) 1995,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -40,10 +40,9 @@ _dl_relocate_object (struct link_map *l, && __builtin_expect (l->l_info[DT_BIND_NOW] != NULL, 0)) lazy = 0; - if (__builtin_expect (_dl_debug_reloc, 0)) - _dl_debug_message (1, "\nrelocation processing: ", - l->l_name[0] ? l->l_name : _dl_argv[0], - lazy ? " (lazy)\n" : "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_RELOC, 0)) + _dl_printf ("\nrelocation processing: %s%s\n", + l->l_name[0] ? l->l_name : _dl_argv[0], lazy ? " (lazy)" : ""); if (__builtin_expect (l->l_info[DT_TEXTREL] != NULL, 0)) { @@ -99,17 +98,18 @@ cannot make segment writable for relocat if it only contains lead function) the l_info[DT_PLTRELSZ] will be NULL. */ if (l->l_info[DT_PLTRELSZ] == NULL) - _dl_sysdep_fatal (_dl_argv[0] ?: "", - ": profiler found no PLTREL in object ", - l->l_name, "\n", NULL); + _dl_fatal_printf ("%s: profiler found no PLTREL in object %s\n", + _dl_argv[0] ?: "", + l->l_name); l->l_reloc_result = (ElfW(Addr) *) calloc (sizeof (ElfW(Addr)), l->l_info[DT_PLTRELSZ]->d_un.d_val); if (l->l_reloc_result == NULL) - _dl_sysdep_fatal (_dl_argv[0] ?: "", - ": profiler out of memory shadowing PLTREL of ", - l->l_name, "\n", NULL); + _dl_fatal_printf ("\ +%s: profiler out of memory shadowing PLTREL of %s\n", + _dl_argv[0] ?: "", + l->l_name); } } diff -durpNa glibc-2.2.2/elf/dl-support.c glibc-2.2.3/elf/dl-support.c --- glibc-2.2.2/elf/dl-support.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/elf/dl-support.c Wed Apr 25 14:50:58 2001 @@ -29,6 +29,7 @@ #include #include #include +#include extern char *__progname; char **_dl_argv = &__progname; /* This is checked for some error messages. */ @@ -37,13 +38,7 @@ char **_dl_argv = &__progname; /* This i const char *_dl_platform; size_t _dl_platformlen; -int _dl_debug_libs; -int _dl_debug_impcalls; -int _dl_debug_bindings; -int _dl_debug_symbols; -int _dl_debug_versions; -int _dl_debug_reloc; -int _dl_debug_files; +int _dl_debug_mask; int _dl_lazy; /* XXX I know about at least one case where we depend on the old weak behavior (it has to do with librt). Until we get DSO groups implemented @@ -98,6 +93,11 @@ struct r_scope_elem *_dl_main_searchlist /* Nonzero during startup. */ int _dl_starting_up = 1; +/* Initial value of the CPU clock. */ +#if HP_TIMING_AVAIL +hp_timing_t _dl_cpuclock_offset; +#endif + /* During the program run we must not modify the global data of loaded shared object simultanously in two threads. Therefore we protect `_dl_open' and `_dl_close' in dl-close.c. @@ -133,6 +133,10 @@ static void non_dynamic_init (void) __at static void non_dynamic_init (void) { +#if HP_TIMING_AVAIL + HP_TIMING_NOW (_dl_cpuclock_offset); +#endif + if (!_dl_pagesize) _dl_pagesize = __getpagesize (); diff -durpNa glibc-2.2.2/elf/dl-version.c glibc-2.2.3/elf/dl-version.c --- glibc-2.2.2/elf/dl-version.c Sat Jan 6 20:35:11 2001 +++ glibc-2.2.3/elf/dl-version.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Handle symbol and library versioning. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -83,10 +83,11 @@ match_symbol (const char *name, ElfW(Wor ElfW(Verdef) *def; /* Display information about what we are doing while debugging. */ - if (__builtin_expect (_dl_debug_versions, 0)) - _dl_debug_message (1, "checking for version `", string, "' in file ", - map->l_name[0] ? map->l_name : _dl_argv[0], - " required by file ", name, "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_VERSIONS, 0)) + _dl_debug_printf ("\ +checking for version `%s' in file %s required by file %s\n", + string, map->l_name[0] ? map->l_name : _dl_argv[0], + name); if (__builtin_expect (map->l_info[VERSYMIDX (DT_VERDEF)] == NULL, 0)) { diff -durpNa glibc-2.2.2/elf/do-lookup.h glibc-2.2.3/elf/do-lookup.h --- glibc-2.2.2/elf/do-lookup.h Thu Aug 31 14:44:57 2000 +++ glibc-2.2.3/elf/do-lookup.h Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ /* Look up a symbol in the loaded objects. - Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. + Copyright (C) 1995,96,97,98,99,2000,2001 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 @@ -60,10 +60,9 @@ FCT (const char *undef_name, unsigned lo continue; /* Print some debugging info if wanted. */ - if (__builtin_expect (_dl_debug_symbols, 0)) - _dl_debug_message (1, "symbol=", undef_name, "; lookup in file=", - map->l_name[0] ? map->l_name : _dl_argv[0], - "\n", NULL); + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_SYMBOLS, 0)) + _dl_debug_printf ("symbol=%s; lookup in file=%s\n", undef_name, + map->l_name[0] ? map->l_name : _dl_argv[0]); symtab = (const void *) D_PTR (map, l_info[DT_SYMTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); diff -durpNa glibc-2.2.2/elf/elf.h glibc-2.2.3/elf/elf.h --- glibc-2.2.2/elf/elf.h Thu Feb 15 14:08:25 2001 +++ glibc-2.2.3/elf/elf.h Wed Apr 25 14:50:58 2001 @@ -169,6 +169,7 @@ typedef struct #define EM_88K 5 /* Motorola m88k family */ #define EM_860 7 /* Intel 80860 */ #define EM_MIPS 8 /* MIPS R3000 big-endian */ +#define EM_S370 9 /* IBM System/370 */ #define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian */ #define EM_PARISC 15 /* HPPA */ @@ -177,6 +178,7 @@ typedef struct #define EM_960 19 /* Intel 80960 */ #define EM_PPC 20 /* PowerPC */ #define EM_PPC64 21 /* PowerPC 64-bit */ +#define EM_S390 22 /* IBM S390 */ #define EM_V800 36 /* NEC V800 series */ #define EM_FR20 37 /* Fujitsu FR20 */ @@ -204,7 +206,8 @@ typedef struct #define EM_ME16 59 /* Toyota ME16 processor */ #define EM_ST100 60 /* STMicroelectronic ST100 processor */ #define EM_TINYJ 61 /* Advanced Logic Corp. Tinyj emb.fam*/ -#define EM_X8664 62 /* AMD x86-64 */ +#define EM_X86_64 62 /* AMD x86-64 architecture */ +#define EM_PDSP 63 /* Sony DSP Processor */ #define EM_FX66 66 /* Siemens FX66 microcontroller */ #define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 mc */ @@ -216,14 +219,29 @@ typedef struct #define EM_SVX 73 /* Silicon Graphics SVx */ #define EM_AT19 74 /* STMicroelectronics ST19 8 bit mc */ #define EM_VAX 75 /* Digital VAX */ -#define EM_NUM 76 +#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */ +#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded processor */ +#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */ +#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */ +#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */ +#define EM_HUANY 81 /* Harvard University machine-independent object files */ +#define EM_PRISM 82 /* SiTera Prism */ +#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ +#define EM_FR30 84 /* Fujitsu FR30 */ +#define EM_D10V 85 /* Mitsubishi D10V */ +#define EM_D30V 86 /* Mitsubishi D30V */ +#define EM_V850 87 /* NEC v850 */ +#define EM_M32R 88 /* Mitsubishi M32R */ +#define EM_MN10300 89 /* Matsushita MN10300 */ +#define EM_MN10200 90 /* Matsushita MN10200 */ +#define EM_PJ 91 /* picoJava */ +#define EM_NUM 92 /* If it is necessary to assign new unofficial EM_* values, please pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision with official or non-GNU unofficial values. */ #define EM_ALPHA 0x9026 -#define EM_S390 0xA390 /* IBM S390 */ /* Legal values for e_version (version). */ @@ -875,6 +893,15 @@ typedef struct performed by the kernel. */ #define AT_FPUCW 18 /* Used FPU control word. */ +/* Cache block sizes. */ +#define AT_DCACHEBSIZE 19 /* Data cache block size. */ +#define AT_ICACHEBSIZE 20 /* Instruction cache block size. */ +#define AT_UCACHEBSIZE 21 /* Unified cache block size. */ + +/* A special ignored value for PPC, used by the kernel to control the + interpretation of the AUXV. Must be > 16. */ +#define AT_IGNOREPPC 22 /* Entry should be ignored */ + /* Note section contents. Each entry in the note section begins with a header of a fixed form. */ @@ -1099,6 +1126,7 @@ typedef struct #define HWCAP_SPARC_SWAP 4 #define HWCAP_SPARC_MULDIV 8 #define HWCAP_SPARC_V9 16 /* The cpu is v9, so v8plus is ok. */ +#define HWCAP_SPARC_ULTRA3 32 /* MIPS R3000 specific definitions. */ @@ -1509,12 +1537,14 @@ typedef Elf32_Addr Elf32_Conflict; #define R_PARISC_DIR21L 2 /* Left 21 bits of eff. address. */ #define R_PARISC_DIR17R 3 /* Right 17 bits of eff. address. */ #define R_PARISC_DIR17F 4 /* 17 bits of eff. address. */ -#define R_PARISC_DIR14R 5 /* Right 14 bits of eff. address. */ +#define R_PARISC_DIR14R 6 /* Right 14 bits of eff. address. */ #define R_PARISC_PCREL32 9 /* 32-bit rel. address. */ #define R_PARISC_PCREL21L 10 /* Left 21 bits of rel. address. */ #define R_PARISC_PCREL17R 11 /* Right 17 bits of rel. address. */ #define R_PARISC_PCREL17F 12 /* 17 bits of rel. address. */ #define R_PARISC_PCREL14R 14 /* Right 14 bits of rel. address. */ +#define R_PARISC_DPREL21L 18 /* Left 21 bits of rel. address. */ +#define R_PARISC_DPREL14R 22 /* Right 14 bits of rel. address. */ #define R_PARISC_GPREL21L 26 /* GP-relative, left 21 bits. */ #define R_PARISC_GPREL14R 30 /* GP-relative, right 14 bits. */ #define R_PARISC_LTOFF21L 34 /* LT-relative, left 21 bits. */ @@ -1772,9 +1802,21 @@ typedef Elf32_Addr Elf32_Conflict; #define EF_ARM_APCS_26 0x08 #define EF_ARM_APCS_FLOAT 0x10 #define EF_ARM_PIC 0x20 -#define EF_ALIGN8 0x40 /* 8-bit structure alignment is in use */ -#define EF_NEW_ABI 0x80 -#define EF_OLD_ABI 0x100 +#define EF_ARM_ALIGN8 0x40 /* 8-bit structure alignment is in use */ +#define EF_ARM_NEW_ABI 0x80 +#define EF_ARM_OLD_ABI 0x100 + +/* Other constants defined in the ARM ELF spec. version B-01. */ +/* NB. These conflict with values defined above. */ +#define EF_ARM_SYMSARESORTED 0x04 +#define EF_ARM_DYNSYMSUSESEGIDX 0x08 +#define EF_ARM_MAPSYMSFIRST 0x10 +#define EF_ARM_EABIMASK 0XFF000000 + +#define EF_ARM_EABI_VERSION(flags) ((flags) & EF_ARM_EABIMASK) +#define EF_ARM_EABI_UNKNOWN 0x00000000 +#define EF_ARM_EABI_VER1 0x01000000 +#define EF_ARM_EABI_VER2 0x02000000 /* Additional symbol types for Thumb */ #define STT_ARM_TFUNC 0xd @@ -1814,6 +1856,12 @@ typedef Elf32_Addr Elf32_Conflict; #define R_ARM_GOTPC 25 /* 32 bit PC relative offset to GOT */ #define R_ARM_GOT32 26 /* 32 bit GOT entry */ #define R_ARM_PLT32 27 /* 32 bit PLT address */ +#define R_ARM_ALU_PCREL_7_0 32 +#define R_ARM_ALU_PCREL_15_8 33 +#define R_ARM_ALU_PCREL_23_15 34 +#define R_ARM_LDR_SBREL_11_0 35 +#define R_ARM_ALU_SBREL_19_12 36 +#define R_ARM_ALU_SBREL_27_20 37 #define R_ARM_GNU_VTENTRY 100 #define R_ARM_GNU_VTINHERIT 101 #define R_ARM_THM_PC11 102 /* thumb unconditional branch */ @@ -1992,9 +2040,42 @@ typedef Elf32_Addr Elf32_Conflict; #define R_390_GOT16 15 /* 16 bit GOT offset. */ #define R_390_PC16 16 /* PC relative 16 bit. */ #define R_390_PC16DBL 17 /* PC relative 16 bit shifted by 1. */ -#define R_390_PLT16DBL 18 /* 32 bit PC rel. PLT shifted by 1. */ +#define R_390_PLT16DBL 18 /* 16 bit PC rel. PLT shifted by 1. */ +#define R_390_PC32DBL 19 /* PC relative 32 bit shifted by 1. */ +#define R_390_PLT32DBL 20 /* 32 bit PC rel. PLT shifted by 1. */ +#define R_390_GOTPCDBL 21 /* 32 bit PC rel. GOT shifted by 1. */ +#define R_390_64 22 /* Direct 64 bit. */ +#define R_390_PC64 23 /* PC relative 64 bit. */ +#define R_390_GOT64 24 /* 64 bit GOT offset. */ +#define R_390_PLT64 25 /* 64 bit PC relative PLT address. */ +#define R_390_GOTENT 26 /* 32 bit PC rel. to GOT entry >> 1. */ + /* Keep this the last entry. */ #define R_390_NUM 19 + +/* CRIS relocations. */ +#define R_CRIS_NONE 0 +#define R_CRIS_8 1 +#define R_CRIS_16 2 +#define R_CRIS_32 3 +#define R_CRIS_8_PCREL 4 +#define R_CRIS_16_PCREL 5 +#define R_CRIS_32_PCREL 6 +#define R_CRIS_GNU_VTINHERIT 7 +#define R_CRIS_GNU_VTENTRY 8 +#define R_CRIS_COPY 9 +#define R_CRIS_GLOB_DAT 10 +#define R_CRIS_JUMP_SLOT 11 +#define R_CRIS_RELATIVE 12 +#define R_CRIS_16_GOT 13 +#define R_CRIS_32_GOT 14 +#define R_CRIS_16_GOTPLT 15 +#define R_CRIS_32_GOTPLT 16 +#define R_CRIS_32_GOTREL 17 +#define R_CRIS_32_PLT_GOTREL 18 +#define R_CRIS_32_PLT_PCREL 19 + +#define R_CRIS_NUM 20 __END_DECLS diff -durpNa glibc-2.2.2/elf/global.c glibc-2.2.3/elf/global.c --- glibc-2.2.2/elf/global.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/elf/global.c Tue Mar 20 23:21:34 2001 @@ -0,0 +1,7 @@ +extern int test (void); + +int +main (void) +{ + return test (); +} diff -durpNa glibc-2.2.2/elf/globalmod1.c glibc-2.2.3/elf/globalmod1.c --- glibc-2.2.2/elf/globalmod1.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/elf/globalmod1.c Sat Apr 7 14:02:34 2001 @@ -0,0 +1,17 @@ +#include +#include + +extern int test (void); + +int +test (void) +{ + (void) dlopen ("reldepmod4.so", RTLD_LAZY | RTLD_GLOBAL); + if (dlsym (RTLD_DEFAULT, "call_me") != NULL) + { + puts ("found \"call_me\""); + return 0; + } + puts ("didn't find \"call_me\""); + return 1; +} diff -durpNa glibc-2.2.2/elf/ldconfig.c glibc-2.2.3/elf/ldconfig.c --- glibc-2.2.2/elf/ldconfig.c Fri Feb 9 10:04:04 2001 +++ glibc-2.2.3/elf/ldconfig.c Mon Mar 26 20:52:49 2001 @@ -37,9 +37,6 @@ #include "ldconfig.h" #include "dl-cache.h" -/* We don't need this here - silence the compiler. */ -#define _dl_sysdep_message(string, args...) do {} while (0); - #include "dl-procinfo.h" #ifndef LD_SO_CONF @@ -51,19 +48,11 @@ #define PACKAGE _libc_intl_domainname -struct lib_entry - { - int flags; - uint64_t hwcap; - char *lib; - char *path; - }; - static const struct { const char *name; int flag; -} lib_types [] = +} lib_types[] = { {"libc4", FLAG_LIBC4}, {"libc5", FLAG_ELF_LIBC5}, @@ -319,7 +308,7 @@ add_dir (const char *line) *equal_sign = '\0'; ++equal_sign; entry->flag = FLAG_ANY; - for (i = 0; i < sizeof (lib_types) / sizeof (lib_types [0]); ++i) + for (i = 0; i < sizeof (lib_types) / sizeof (lib_types[0]); ++i) if (strcmp (equal_sign, lib_types[i].name) == 0) { entry->flag = lib_types[i].flag; @@ -337,7 +326,7 @@ add_dir (const char *line) i = strlen (entry->path) - 1; while (entry->path[i] == '/' && i > 0) { - entry->path [i] = '\0'; + entry->path[i] = '\0'; --i; } @@ -463,6 +452,7 @@ manual_link (char *library) char *soname; struct stat64 stat_buf; int flag; + unsigned int osversion; /* Prepare arguments for create_links call. Split library name in directory and filename first. Since path is allocated, we've got @@ -527,7 +517,8 @@ manual_link (char *library) free (path); return; } - if (process_file (real_library, library, libname, &flag, &soname, 0)) + if (process_file (real_library, library, libname, &flag, &osversion, + &soname, 0)) { error (0, 0, _("No link created since soname could not be found for %s"), library); @@ -571,6 +562,7 @@ struct dlib_entry char *soname; int flag; int is_link; + unsigned int osversion; struct dlib_entry *next; }; @@ -588,6 +580,7 @@ search_dir (const struct dir_entry *entr struct stat64 stat_buf; int is_link; uint64_t hwcap = path_hwcap (entry->path); + unsigned int osversion; file_name_len = PATH_MAX; file_name = alloca (file_name_len); @@ -703,7 +696,7 @@ search_dir (const struct dir_entry *entr real_name = real_file_name; if (process_file (real_name, file_name, direntry->d_name, &flag, - &soname, is_link)) + &osversion, &soname, is_link)) { if (real_name != real_file_name) free (real_name); @@ -766,6 +759,7 @@ search_dir (const struct dir_entry *entr dlib_ptr->name, direntry->d_name, entry->path); } free (dlib_ptr->name); + dlib_ptr->osversion = osversion; dlib_ptr->name = xstrdup (direntry->d_name); dlib_ptr->is_link = is_link; } @@ -781,6 +775,7 @@ search_dir (const struct dir_entry *entr dlib_ptr = (struct dlib_entry *)xmalloc (sizeof (struct dlib_entry)); dlib_ptr->name = xstrdup (direntry->d_name); dlib_ptr->flag = flag; + dlib_ptr->osversion = osversion; dlib_ptr->soname = soname; dlib_ptr->is_link = is_link; /* Add at head of list. */ @@ -800,7 +795,8 @@ search_dir (const struct dir_entry *entr create_links (dir_name, entry->path, dlib_ptr->name, dlib_ptr->soname); if (opt_build_cache) - add_to_cache (entry->path, dlib_ptr->soname, dlib_ptr->flag, hwcap); + add_to_cache (entry->path, dlib_ptr->soname, dlib_ptr->flag, + dlib_ptr->osversion, hwcap); } /* Free all resources. */ @@ -912,7 +908,7 @@ main (int argc, char **argv) { int i; for (i = remaining; i < argc; ++i) - add_dir (argv [i]); + add_dir (argv[i]); } if (opt_chroot) @@ -993,7 +989,7 @@ main (int argc, char **argv) int i; for (i = remaining; i < argc; ++i) - manual_link (argv [i]); + manual_link (argv[i]); exit (0); } diff -durpNa glibc-2.2.2/elf/ldconfig.h glibc-2.2.3/elf/ldconfig.h --- glibc-2.2.2/elf/ldconfig.h Thu Nov 16 11:12:01 2000 +++ glibc-2.2.3/elf/ldconfig.h Wed Dec 31 16:00:00 1969 @@ -1,68 +0,0 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Andreas Jaeger , 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public License as - published by the Free Software Foundation; either version 2 of the - License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with the GNU C Library; see the file COPYING.LIB. If not, - write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ - -#ifndef _LDCONFIG_H -#define _LDCONFIG_H - -#define FLAG_ANY -1 -#define FLAG_TYPE_MASK 0x00ff -#define FLAG_LIBC4 0x0000 -#define FLAG_ELF 0x0001 -#define FLAG_ELF_LIBC5 0x0002 -#define FLAG_ELF_LIBC6 0x0003 -#define FLAG_REQUIRED_MASK 0xff00 -#define FLAG_SPARC_LIB64 0x0100 -#define FLAG_IA64_LIB64 0x0200 -#define FLAG_X8664_LIB64 0x0300 - -/* Declared in cache.c. */ -extern void print_cache (const char *cache_name); - -extern void init_cache (void); - -extern void save_cache (const char *cache_name); - -extern void add_to_cache (const char *path, const char *lib, int flags, - uint64_t hwcap); - -/* Declared in readlib.c. */ -extern int process_file (const char *real_file_name, const char *file_name, - const char *lib, int *flag, char **soname, - int is_link); - -/* Declared in readelflib.c. */ -extern int process_elf_file (const char *file_name, const char *lib, int *flag, - char **soname, void *file_contents, - size_t file_length); - -/* Declared in chroot_canon.c. */ -extern char *chroot_canon (const char *chroot, const char *name); - -/* Declared in ldconfig.c. */ -extern int opt_verbose; - -extern int opt_format; - -/* Prototypes for a few program-wide used functions. */ -extern void *xmalloc (size_t __n); -extern void *xcalloc (size_t __n, size_t __size); -extern void *xrealloc (void *__p, size_t __n); -extern char *xstrdup (const char *__str); - -#endif /* ! _LDCONFIG_H */ diff -durpNa glibc-2.2.2/elf/readlib.c glibc-2.2.3/elf/readlib.c --- glibc-2.2.2/elf/readlib.c Sun Oct 8 17:04:48 2000 +++ glibc-2.2.3/elf/readlib.c Mon Mar 26 20:52:49 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger , 1999 and Jakub Jelinek , 1999. @@ -48,20 +48,21 @@ struct known_names int flag; }; -static struct known_names interpreters [] = +static struct known_names interpreters[] = { - {"/lib/" LD_SO, FLAG_ELF_LIBC6}, - {"/lib/ld-linux.so.1", FLAG_ELF_LIBC5} + { "/lib/" LD_SO, FLAG_ELF_LIBC6 }, +#ifdef SYSDEP_KNOWN_INTERPRETER_NAMES + SYSDEP_KNOWN_INTERPRETER_NAMES +#endif }; -static struct known_names known_libs [] = +static struct known_names known_libs[] = { - /* Old names: */ - {"libc.so.5", FLAG_ELF_LIBC5}, - {"libm.so.5", FLAG_ELF_LIBC5}, - /* Current names: */ - {LIBC_SO, FLAG_ELF_LIBC6}, - {LIBM_SO, FLAG_ELF_LIBC6} + { LIBC_SO, FLAG_ELF_LIBC6 }, + { LIBM_SO, FLAG_ELF_LIBC6 }, +#ifdef SYSDEP_KNOWN_LIBRARY_NAMES + SYSDEP_KNOWN_LIBRARY_NAMES +#endif }; @@ -69,13 +70,13 @@ static struct known_names known_libs [] /* Returns 0 if everything is ok, != 0 in case of error. */ int process_file (const char *real_file_name, const char *file_name, - const char *lib, int *flag, char **soname, int is_link) + const char *lib, int *flag, unsigned int *osversion, + char **soname, int is_link) { FILE *file; struct stat64 statbuf; void *file_contents; int ret; - ElfW(Ehdr) *elf_header; struct exec *aout_header; @@ -141,10 +142,7 @@ process_file (const char *real_file_name } elf_header = (ElfW(Ehdr) *) file_contents; - if (elf_header->e_ident [EI_MAG0] != ELFMAG0 - || elf_header->e_ident [EI_MAG1] != ELFMAG1 - || elf_header->e_ident [EI_MAG2] != ELFMAG2 - || elf_header->e_ident [EI_MAG3] != ELFMAG3) + if (memcmp (elf_header->e_ident, ELFMAG, SELFMAG) != 0) { /* The file is neither ELF nor aout. Check if it's a linker script, like libc.so - otherwise complain. */ @@ -160,8 +158,8 @@ process_file (const char *real_file_name goto done; } - if (process_elf_file (file_name, lib, flag, soname, file_contents, - statbuf.st_size)) + if (process_elf_file (file_name, lib, flag, osversion, soname, + file_contents, statbuf.st_size)) ret = 1; done: diff -durpNa glibc-2.2.2/elf/rtld.c glibc-2.2.3/elf/rtld.c --- glibc-2.2.2/elf/rtld.c Tue Jan 23 14:07:16 2001 +++ glibc-2.2.3/elf/rtld.c Thu Apr 12 14:02:01 2001 @@ -22,6 +22,7 @@ #include #include #include /* Check if MAP_ANON is defined. */ +#include #include #include #include @@ -51,7 +52,7 @@ enum mode { normal, list, verify, trace /* Process all environments variables the dynamic linker must recognize. Since all of them start with `LD_' we are a bit smarter while finding all the entries. */ -static void process_envvars (enum mode *modep, int *lazyp); +static void process_envvars (enum mode *modep); int _dl_argc; char **_dl_argv; @@ -65,7 +66,7 @@ struct r_search_path *_dl_search_paths; const char *_dl_profile; const char *_dl_profile_output; struct link_map *_dl_profile_map; -int _dl_lazy; +int _dl_lazy = 1; /* XXX I know about at least one case where we depend on the old weak behavior (it has to do with librt). Until we get DSO groups implemented we have to make this the default. Bummer. --drepper */ @@ -74,14 +75,7 @@ int _dl_dynamic_weak; #else int _dl_dynamic_weak = 1; #endif -int _dl_debug_libs; -int _dl_debug_impcalls; -int _dl_debug_bindings; -int _dl_debug_symbols; -int _dl_debug_versions; -int _dl_debug_reloc; -int _dl_debug_files; -int _dl_debug_statistics; +int _dl_debug_mask; const char *_dl_inhibit_rpath; /* RPATH values which should be ignored. */ const char *_dl_origin_path; @@ -257,7 +251,7 @@ _dl_start_final (void *arg, struct link_ } #endif - if (__builtin_expect (_dl_debug_statistics, 0)) + if (__builtin_expect (_dl_debug_mask & DL_DEBUG_STATISTICS, 0)) print_statistics (); return *start_addr; @@ -266,8 +260,6 @@ _dl_start_final (void *arg, struct link_ /* Now life is peachy; we can do all normal operations. On to the real work. */ -void ENTRY_POINT (void); - /* Some helper functions. */ /* Arguments to relocate_doit. */ @@ -390,12 +382,12 @@ dl_main (const ElfW(Phdr) *phdr, #endif /* Process the environment variable which control the behaviour. */ - process_envvars (&mode, &_dl_lazy); + process_envvars (&mode); /* Set up a flag which tells we are just starting. */ _dl_starting_up = 1; - if (*user_entry == (ElfW(Addr)) &ENTRY_POINT) + if (*user_entry == (ElfW(Addr)) ENTRY_POINT) { /* Ho ho. We are not the program interpreter! We are the program itself! This means someone ran ld.so as a command. Well, that @@ -457,7 +449,7 @@ dl_main (const ElfW(Phdr) *phdr, /* If we have no further argument the program was called incorrectly. Grant the user some education. */ if (_dl_argc < 2) - _dl_sysdep_fatal ("\ + _dl_fatal_printf ("\ Usage: ld.so [OPTION]... EXECUTABLE-FILE [ARGS-FOR-PROGRAM...]\n\ You have invoked `ld.so', the helper program for shared library executables.\n\ This program usually lives in the file `/lib/ld.so', and special directives\n\ @@ -477,8 +469,7 @@ of this helper program; chances are you --library-path PATH use given PATH instead of content of the environment\n\ variable LD_LIBRARY_PATH\n\ --inhibit-rpath LIST ignore RUNPATH and RPATH information in object names\n\ - in LIST\n", - NULL); + in LIST\n"); ++_dl_skip_args; --_dl_argc; @@ -527,7 +518,7 @@ of this helper program; chances are you This will be what dlopen on "" returns. */ _dl_new_object ((char *) "", "", lt_executable, NULL); if (_dl_loaded == NULL) - _dl_sysdep_fatal ("cannot allocate memory for link map\n", NULL); + _dl_fatal_printf ("cannot allocate memory for link map\n"); _dl_loaded->l_phdr = phdr; _dl_loaded->l_phnum = phnum; _dl_loaded->l_entry = *user_entry; @@ -870,7 +861,7 @@ of this helper program; chances are you functions we call below for output may no longer work properly after relocation. */ if (! _dl_loaded->l_info[DT_NEEDED]) - _dl_sysdep_message ("\t", "statically linked\n", NULL); + _dl_printf ("\tstatically linked\n"); else { struct link_map *l; @@ -878,19 +869,10 @@ of this helper program; chances are you for (l = _dl_loaded->l_next; l; l = l->l_next) if (l->l_faked) /* The library was not found. */ - _dl_sysdep_message ("\t", l->l_libname->name, " => not found\n", - NULL); + _dl_printf ("\t%s => not found\n", l->l_libname->name); else - { - char buf[20], *bp; - buf[sizeof buf - 1] = '\0'; - bp = _itoa_word (l->l_addr, &buf[sizeof buf - 1], 16, 0); - while ((size_t) (&buf[sizeof buf - 1] - bp) - < sizeof l->l_addr * 2) - *--bp = '0'; - _dl_sysdep_message ("\t", l->l_libname->name, " => ", - l->l_name, " (0x", bp, ")\n", NULL); - } + _dl_printf ("\t%s => %s (0x%0*Zx)\n", l->l_libname->name, + l->l_name, (int) sizeof l->l_addr * 2, l->l_addr); } if (__builtin_expect (mode, trace) != trace) @@ -899,7 +881,6 @@ of this helper program; chances are you const ElfW(Sym) *ref = NULL; ElfW(Addr) loadbase; lookup_t result; - char buf[20], *bp; result = _dl_lookup_symbol (_dl_argv[i], _dl_loaded, &ref, _dl_loaded->l_scope, @@ -907,20 +888,15 @@ of this helper program; chances are you loadbase = LOOKUP_VALUE_ADDRESS (result); - buf[sizeof buf - 1] = '\0'; - bp = _itoa_word (ref->st_value, &buf[sizeof buf - 1], 16, 0); - while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2) - *--bp = '0'; - _dl_sysdep_message (_dl_argv[i], " found at 0x", bp, NULL); - buf[sizeof buf - 1] = '\0'; - bp = _itoa_word (loadbase, &buf[sizeof buf - 1], 16, 0); - while ((size_t) (&buf[sizeof buf - 1] - bp) < sizeof loadbase * 2) - *--bp = '0'; - _dl_sysdep_message (" in object at 0x", bp, "\n", NULL); + _dl_printf ("%s found at 0x%0*Zd in object at 0x%0*Zd\n", + _dl_argv[i], + (int) sizeof ref->st_value * 2, ref->st_value, + (int) sizeof loadbase * 2, loadbase); } else { - if (_dl_lazy >= 0) + /* If LD_WARN is set warn about undefined symbols. */ + if (_dl_lazy >= 0 && _dl_verbose) { /* We have to do symbol dependency testing. */ struct relocate_args args; @@ -965,13 +941,12 @@ of this helper program; chances are you if (first) { - _dl_sysdep_message ("\n\tVersion information:\n", NULL); + _dl_printf ("\n\tVersion information:\n"); first = 0; } - _dl_sysdep_message ("\t", (map->l_name[0] - ? map->l_name : _dl_argv[0]), - ":\n", NULL); + _dl_printf ("\t%s:\n", + map->l_name[0] ? map->l_name : _dl_argv[0]); while (1) { @@ -985,21 +960,17 @@ of this helper program; chances are you { const char *fname = NULL; - _dl_sysdep_message ("\t\t", - strtab + ent->vn_file, - " (", strtab + aux->vna_name, - ") ", - (aux->vna_flags - & VER_FLG_WEAK - ? "[WEAK] " : ""), - "=> ", NULL); - if (needed != NULL - && match_version (strtab+aux->vna_name, needed)) + && match_version (strtab + aux->vna_name, + needed)) fname = needed->l_name; - _dl_sysdep_message (fname ?: "not found", "\n", - NULL); + _dl_printf ("\t\t%s (%s) %s=> %s\n", + strtab + ent->vn_file, + strtab + aux->vna_name, + aux->vna_flags & VER_FLG_WEAK + ? "[WEAK] " : "", + fname ?: "not found"); if (aux->vna_next == 0) /* No more symbols. */ @@ -1158,7 +1129,7 @@ print_unresolved (int errcode __attribut { if (objname[0] == '\0') objname = _dl_argv[0] ?: "
"; - _dl_sysdep_error (errstring, " (", objname, ")\n", NULL); + _dl_error_printf ("%s (%s)\n", errstring, objname); } /* This is a little helper function for resolving symbols while @@ -1167,8 +1138,8 @@ static void print_missing_version (int errcode __attribute__ ((unused)), const char *objname, const char *errstring) { - _dl_sysdep_error (_dl_argv[0] ?: "", ": ", - objname, ": ", errstring, "\n", NULL); + _dl_error_printf ("%s: %s: %s\n", _dl_argv[0] ?: "", + objname, errstring); } /* Nonzero if any of the debugging options is enabled. */ @@ -1197,13 +1168,10 @@ process_dl_debug (const char *dl_debug) useful. */ if (memcmp (dl_debug, "all", 3) == 0) { - _dl_debug_libs = 1; - _dl_debug_impcalls = 1; - _dl_debug_reloc = 1; - _dl_debug_files = 1; - _dl_debug_symbols = 1; - _dl_debug_bindings = 1; - _dl_debug_versions = 1; + _dl_debug_mask = (DL_DEBUG_LIBS | DL_DEBUG_IMPCALLS + | DL_DEBUG_RELOC | DL_DEBUG_FILES + | DL_DEBUG_SYMBOLS | DL_DEBUG_BINDINGS + | DL_DEBUG_VERSIONS); any_debug = 1; continue; } @@ -1212,7 +1180,7 @@ process_dl_debug (const char *dl_debug) case 4: if (memcmp (dl_debug, "help", 4) == 0) { - _dl_sysdep_message ("\ + _dl_printf ("\ Valid options for the LD_DEBUG environment variable are:\n\ \n\ bindings display information about symbol binding\n\ @@ -1225,15 +1193,13 @@ Valid options for the LD_DEBUG environme versions display version dependencies\n\ \n\ To direct the debugging output into a file instead of standard output\n\ -a filename can be specified using the LD_DEBUG_OUTPUT environment variable.\n", - NULL); +a filename can be specified using the LD_DEBUG_OUTPUT environment variable.\n"); _exit (0); } if (memcmp (dl_debug, "libs", 4) == 0) { - _dl_debug_libs = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_LIBS | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } @@ -1242,16 +1208,14 @@ a filename can be specified using the LD case 5: if (memcmp (dl_debug, "reloc", 5) == 0) { - _dl_debug_reloc = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_RELOC | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } if (memcmp (dl_debug, "files", 5) == 0) { - _dl_debug_files = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_FILES | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } @@ -1260,8 +1224,7 @@ a filename can be specified using the LD case 7: if (memcmp (dl_debug, "symbols", 7) == 0) { - _dl_debug_symbols = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_SYMBOLS | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } @@ -1270,16 +1233,14 @@ a filename can be specified using the LD case 8: if (memcmp (dl_debug, "bindings", 8) == 0) { - _dl_debug_bindings = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_BINDINGS | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } if (memcmp (dl_debug, "versions", 8) == 0) { - _dl_debug_versions = 1; - _dl_debug_impcalls = 1; + _dl_debug_mask |= DL_DEBUG_VERSIONS | DL_DEBUG_IMPCALLS; any_debug = 1; continue; } @@ -1288,7 +1249,7 @@ a filename can be specified using the LD case 10: if (memcmp (dl_debug, "statistics", 10) == 0) { - _dl_debug_statistics = 1; + _dl_debug_mask |= DL_DEBUG_STATISTICS; continue; } break; @@ -1300,8 +1261,8 @@ a filename can be specified using the LD { /* Display a warning and skip everything until next separator. */ char *startp = strndupa (dl_debug, len); - _dl_sysdep_error ("warning: debug option `", startp, - "' unknown; try LD_DEBUG=help\n", NULL); + _dl_error_printf ("\ +warning: debug option `%s' unknown; try LD_DEBUG=help\n", startp); break; } } @@ -1313,12 +1274,11 @@ a filename can be specified using the LD Since all of them start with `LD_' we are a bit smarter while finding all the entries. */ static void -process_envvars (enum mode *modep, int *lazyp) +process_envvars (enum mode *modep) { char **runp = NULL; char *envline; enum mode mode = normal; - int bind_now = 0; char *debug_output = NULL; /* This is the default place for profiling data file. */ @@ -1372,7 +1332,7 @@ process_envvars (enum mode *modep, int * /* Do we bind early? */ if (memcmp (&envline[3], "BIND_NOW", 8) == 0) { - bind_now = envline[12] != '\0'; + _dl_lazy = envline[12] == '\0'; break; } if (memcmp (&envline[3], "BIND_NOT", 8) == 0) @@ -1447,7 +1407,7 @@ process_envvars (enum mode *modep, int * /* Extra security for SUID binaries. Remove all dangerous environment variables. */ - if (__libc_enable_secure) + if (__builtin_expect (__libc_enable_secure, 0)) { static const char *unsecure_envvars[] = { @@ -1501,19 +1461,12 @@ process_envvars (enum mode *modep, int * *--startp = '.'; startp = memcpy (startp - name_len, debug_output, name_len); - _dl_debug_fd = __open (startp, flags, 0666); + _dl_debug_fd = __open (startp, flags, DEFFILEMODE); if (_dl_debug_fd == -1) /* We use standard output if opening the file failed. */ _dl_debug_fd = STDOUT_FILENO; } - /* LAZY is determined by the environment variable LD_WARN and - LD_BIND_NOW if we trace the binary. */ - if (__builtin_expect (mode, normal) == trace) - *lazyp = _dl_verbose ? !bind_now : -1; - else - *lazyp = !bind_now; - *modep = mode; } @@ -1522,8 +1475,8 @@ process_envvars (enum mode *modep, int * static void print_statistics (void) { - char buf[200]; #ifndef HP_TIMING_NONAVAIL + char buf[200]; char *cp; char *wp; @@ -1531,21 +1484,19 @@ print_statistics (void) if (HP_TIMING_AVAIL) { HP_TIMING_PRINT (buf, sizeof (buf), rtld_total_time); - _dl_debug_message (1, "\nruntime linker statistics:\n" - " total startup time in dynamic loader: ", - buf, "\n", NULL); + _dl_debug_printf ("\nruntime linker statistics:\n" + " total startup time in dynamic loader: %s\n", buf); } /* Print relocation statistics. */ if (HP_TIMING_AVAIL) { + char pbuf[30]; HP_TIMING_PRINT (buf, sizeof (buf), relocate_time); - _dl_debug_message (1, " time needed for relocation: ", buf, - NULL); cp = _itoa_word ((1000 * relocate_time) / rtld_total_time, - buf + sizeof (buf), 10, 0); - wp = buf; - switch (buf + sizeof (buf) - cp) + pbuf + sizeof (pbuf), 10, 0); + wp = pbuf; + switch (pbuf + sizeof (pbuf) - cp) { case 3: *wp++ = *cp++; @@ -1556,26 +1507,23 @@ print_statistics (void) *wp++ = *cp++; } *wp = '\0'; - _dl_debug_message (0, " (", buf, "%)\n", NULL); + _dl_debug_printf (" time needed for relocation: %s (%s)\n", + buf, pbuf); } #endif - buf[sizeof (buf) - 1] = '\0'; - _dl_debug_message (1, " number of relocations: ", - _itoa_word (_dl_num_relocations, - buf + sizeof (buf) - 1, 10, 0), - "\n", NULL); + _dl_debug_printf (" number of relocations: %lu\n", + _dl_num_relocations); #ifndef HP_TIMING_NONAVAIL /* Time spend while loading the object and the dependencies. */ if (HP_TIMING_AVAIL) { + char pbuf[30]; HP_TIMING_PRINT (buf, sizeof (buf), load_time); - _dl_debug_message (1, " time needed to load objects: ", buf, - NULL); cp = _itoa_word ((1000 * load_time) / rtld_total_time, - buf + sizeof (buf), 10, 0); - wp = buf; - switch (buf + sizeof (buf) - cp) + pbuf + sizeof (pbuf), 10, 0); + wp = pbuf; + switch (pbuf + sizeof (pbuf) - cp) { case 3: *wp++ = *cp++; @@ -1586,7 +1534,8 @@ print_statistics (void) *wp++ = *cp++; } *wp = '\0'; - _dl_debug_message (0, " (", buf, "%)\n", NULL); + _dl_debug_printf (" time needed to load objects: %s (%s)\n", + buf, pbuf); } #endif } diff -durpNa glibc-2.2.2/elf/sln.c glibc-2.2.3/elf/sln.c --- glibc-2.2.2/elf/sln.c Mon Jan 3 13:04:40 2000 +++ glibc-2.2.3/elf/sln.c Mon Mar 26 20:52:49 2001 @@ -1,5 +1,5 @@ -/* `sln' program to create symboblic links between files. - Copyright (C) 1998, 1999 Free Software Foundation, Inc. +/* `sln' program to create symbolic links between files. + Copyright (C) 1998, 1999, 2001 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 @@ -17,6 +17,8 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include +#include #include #include #include @@ -26,7 +28,7 @@ #include #include -#if !defined(S_ISDIR) && defined(S_IFDIR) +#if !defined S_ISDIR && defined S_IFDIR #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) #endif @@ -39,11 +41,11 @@ main (int argc, char **argv) switch (argc) { case 2: - return makesymlinks (argv [1]) == 0 ? 0 : 1; + return makesymlinks (argv [1]); break; case 3: - return makesymlink (argv [1], argv [2]) == 0 ? 0 : 1; + return makesymlink (argv [1], argv [2]); break; default: @@ -60,70 +62,69 @@ makesymlinks (file) #ifndef PATH_MAX #define PATH_MAX 4095 #endif - char buffer [PATH_MAX * 4]; - int i, ret, len; + char *buffer = NULL; + size_t bufferlen = 0; + int ret; int lineno; - const char *src; - const char *dest; - const char *error; FILE *fp; - fp = fopen (file, "r"); - if (fp == NULL) + if (strcmp (file, "-") == 0) + fp = stdin; + else { - error = strerror (errno); - fprintf (stderr, "%s: file open error: %s\n", file, error); - return -1; + fp = fopen (file, "r"); + if (fp == NULL) + { + fprintf (stderr, "%s: file open error: %m\n", file); + return 1; + } } ret = 0; lineno = 0; - while (fgets (buffer, sizeof (buffer) - 1, fp)) + while (!feof_unlocked (fp)) { - lineno++; - src = dest = NULL; - buffer [sizeof (buffer) - 1] = '\0'; - len = strlen (buffer); - for (i = 0; i < len && isspace (buffer [i]); i++); - if (i >= len) - { - fprintf (stderr, "Fail to parse line %d: \"%s\"\n", lineno, - buffer); - ret--; - continue; - } + ssize_t n = getline (&buffer, &bufferlen, fp); + char *src; + char *dest; + char *cp = buffer; - src = &buffer [i]; - for (; i < len && !isspace (buffer [i]); i++); - if (i < len) + if (n < 0) + break; + if (buffer[n - 1] == '\n') + buffer[n - 1] = '\0'; + + ++lineno; + while (isspace (*cp)) + ++cp; + if (*cp == '\0') + /* Ignore empty lines. */ + continue; + src = cp; + + do + ++cp; + while (*cp != '\0' && ! isspace (*cp)); + if (*cp != '\0') + *cp++ = '\0'; + + while (isspace (*cp)) + ++cp; + if (*cp == '\0') { - buffer [i++] = '\0'; - for (; i < len && isspace (buffer [i]); i++); - if (i >= len) - { - fprintf (stderr, "No target in line %d: \"%s\"\n", lineno, - buffer); - ret--; - continue; - } - dest = &buffer [i]; - for (; i < len && !isspace (buffer [i]); i++); - buffer [i] = '\0'; - } - else - { - fprintf (stderr, "No target in line %d: \"%s\"\n", lineno, - buffer); - ret--; + fprintf (stderr, "No target in line %d\n", lineno); + ret = 1; continue; } + dest = cp; - if (makesymlink (src, dest)) - { - fprintf (stderr, "Failed to make link from \"%s\" to \"%s\" in line %d\n", - src, dest, lineno); - ret--; - } + do + ++cp; + while (*cp != '\0' && ! isspace (*cp)); + if (*cp != '\0') + *cp++ = '\0'; + + ret |= makesymlink (src, dest); } fclose (fp); @@ -145,13 +146,13 @@ makesymlink (src, dest) { fprintf (stderr, "%s: destination must not be a directory\n", dest); - return -1; + return 1; } else if (unlink (dest) && errno != ENOENT) { fprintf (stderr, "%s: failed to remove the old destination\n", dest); - return -1; + return 1; } } else if (errno != ENOENT) @@ -174,7 +175,7 @@ makesymlink (src, dest) unlink (dest); fprintf (stderr, "Invalid link from \"%s\" to \"%s\": %s\n", src, dest, error); - return -1; + return 1; } return 0; } @@ -183,6 +184,6 @@ makesymlink (src, dest) error = strerror (errno); fprintf (stderr, "Invalid link from \"%s\" to \"%s\": %s\n", src, dest, error); - return -1; + return 1; } } diff -durpNa glibc-2.2.2/glibcbug.in glibc-2.2.3/glibcbug.in --- glibc-2.2.2/glibcbug.in Mon Aug 30 11:34:23 1999 +++ glibc-2.2.3/glibcbug.in Wed Apr 25 14:50:58 2001 @@ -36,12 +36,7 @@ if test $? -ne 0; then chmod 600 $TEMPx fi -if test "$RELEASE" = "stable"; then - BUGGLIBC="bugs@gnu.org" -else - BUGGLIBC="libc-alpha@sourceware.cygnus.com" -fi - +BUGGLIBC="glibc-bug-reports-${RELEASE}@gnu.org" BUGADDR=${1-$BUGGLIBC} : ${EDITOR=emacs} diff -durpNa glibc-2.2.2/gmon/Makefile glibc-2.2.3/gmon/Makefile --- glibc-2.2.2/gmon/Makefile Tue Aug 19 20:29:10 1997 +++ glibc-2.2.3/gmon/Makefile Tue Mar 27 22:27:28 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. +# Copyright (C) 1995, 1996, 1997, 2001 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,9 +21,11 @@ # subdir := gmon -headers := sys/gmon.h sys/gmon_out.h +headers := sys/gmon.h sys/gmon_out.h sys/profil.h distribute := machine-gmon.h profil-counter.h -routines := gmon mcount profil bb_init_func bb_exit_func prof-freq +routines := gmon mcount profil sprofil bb_init_func bb_exit_func prof-freq + +tests := tst-sprofil include ../Rules @@ -37,7 +39,7 @@ CFLAGS-mcount.c := -fno-omit-frame-point noprof := mcount ifeq (,$(filter profil,$(unix-syscalls))) -noprof += profil +noprof += profil sprofil endif $(noprof:%=$(objpfx)%.op): %.op: %.o diff -durpNa glibc-2.2.2/gmon/Versions glibc-2.2.3/gmon/Versions --- glibc-2.2.2/gmon/Versions Fri Apr 21 12:25:18 2000 +++ glibc-2.2.3/gmon/Versions Mon Mar 26 20:52:49 2001 @@ -16,4 +16,7 @@ libc { # m* moncontrol; } + GLIBC_2.2.3 { + sprofil; + } } diff -durpNa glibc-2.2.2/gmon/gmon.c glibc-2.2.3/gmon/gmon.c --- glibc-2.2.2/gmon/gmon.c Sat Jan 6 20:35:12 2001 +++ glibc-2.2.3/gmon/gmon.c Mon Mar 26 20:52:50 2001 @@ -235,10 +235,18 @@ write_call_graph (fd) to_index != 0; to_index = _gmonparam.tos[to_index].link) { - *(char **) raw_arc[nfilled].from_pc = (char *) frompc; - *(char **) raw_arc[nfilled].self_pc = - (char *)_gmonparam.tos[to_index].selfpc; - *(int *) raw_arc[nfilled].count = _gmonparam.tos[to_index].count; + struct arc + { + char *frompc; + char *selfpc; + int32_t count; + } + arc; + + arc.frompc = (char *) frompc; + arc.selfpc = (char *) _gmonparam.tos[to_index].selfpc; + arc.count = _gmonparam.tos[to_index].count; + memcpy (raw_arc + nfilled, &arc, sizeof (raw_arc [0])); if (++nfilled == NARCS_PER_WRITEV) { diff -durpNa glibc-2.2.2/gmon/sys/profil.h glibc-2.2.3/gmon/sys/profil.h --- glibc-2.2.2/gmon/sys/profil.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/gmon/sys/profil.h Tue Mar 27 22:27:28 2001 @@ -0,0 +1,61 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _PROFIL_H +#define _PROFIL_H 1 + +#include + +#include +#include + +/* This interface is intended to follow the sprofil() system calls as + described by the sprofil(2) man page of Irix v6.5, except that: + + - there is no a priori limit on number of text sections + - pr_scale is declared as unsigned long (instead of "unsigned int") + - pr_size is declared as size_t (instead of "unsigned int") + - pr_off is declared as void * (instead of "__psunsigned_t") + - the overflow bin (pr_base==0, pr_scale==2) can appear anywhere + in the profp array + - PROF_FAST has no effect */ + +struct prof + { + void *pr_base; /* buffer base */ + size_t pr_size; /* buffer size */ + size_t pr_off; /* pc offset */ + unsigned long int pr_scale; /* pc scaling (fixed-point number) */ + }; + +enum + { + PROF_USHORT = 0, /* use 16-bit counters (default) */ + PROF_UINT = 1 << 0, /* use 32-bit counters */ + PROF_FAST = 1 << 1 /* profile faster than usual */ + }; + + +__BEGIN_DECLS + +extern int sprofil (struct prof *__profp, int __profcnt, + struct timeval *__tvp, unsigned int __flags) __THROW; + +__END_DECLS + +#endif /* profil.h */ diff -durpNa glibc-2.2.2/gmon/tst-sprofil.c glibc-2.2.3/gmon/tst-sprofil.c --- glibc-2.2.2/gmon/tst-sprofil.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/gmon/tst-sprofil.c Wed Mar 21 12:12:28 2001 @@ -0,0 +1,172 @@ +/* Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by David Mosberger-Tang . + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include +#include + +#include + +#define NELEMS(a) (sizeof (a)/sizeof ((a)[0])) + +size_t taddr[] = + { + 0x00001000, /* elf32/hppa */ + 0x08048000, /* Linux elf32/x86 */ + 0x80000000, /* Linux elf32/m68k */ + 0x00400000, /* Linux elf32/mips */ + 0x01800000, /* Linux elf32/ppc */ + 0x00010000 /* Linux elf32/sparc */ +#if __WORDSIZE > 32 + , + 0x4000000000000000, /* Linux elf64/ia64 */ + 0x0000000120000000, /* Linux elf64/alpha */ + 0x4000000000001000, /* elf64/hppa */ + 0x0000000100000000 /* Linux elf64/sparc */ +#endif + }; + +unsigned int buf[NELEMS (taddr)][0x10000 / sizeof (int)]; +unsigned int bshort[5][0x100 / sizeof (int)]; +unsigned int blong[1][0x1000 / sizeof (int)]; +unsigned int vlong[1][0x2000 / sizeof (int)]; + +long int +fac (long int n) +{ + if (n == 0) + return 1; + return n * fac (n - 1); +} + +int +main (int argc, char **argv) +{ + unsigned int ovfl = 0, profcnt = 0; + struct timeval tv, start; + struct prof prof[32]; + double t_tick, delta; + long int sum = 0; + int i, j; + + for (i = 0; i < NELEMS (taddr); ++i) + { + prof[profcnt].pr_base = buf[i]; + prof[profcnt].pr_size = sizeof (buf[i]); + prof[profcnt].pr_off = taddr[i]; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + } + + prof[profcnt].pr_base = blong[0]; + prof[profcnt].pr_size = sizeof (blong[0]); + prof[profcnt].pr_off = 0x80001000; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = bshort[0]; + prof[profcnt].pr_size = sizeof (bshort[0]); + prof[profcnt].pr_off = 0x80000080; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = bshort[1]; + prof[profcnt].pr_size = sizeof (bshort[1]); + prof[profcnt].pr_off = 0x80000f80; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = bshort[2]; + prof[profcnt].pr_size = sizeof (bshort[2]); + prof[profcnt].pr_off = 0x80001080; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = bshort[3]; + prof[profcnt].pr_size = sizeof (bshort[3]); + prof[profcnt].pr_off = 0x80001f80; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = bshort[4]; + prof[profcnt].pr_size = sizeof (bshort[4]); + prof[profcnt].pr_off = 0x80002080; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + prof[profcnt].pr_base = vlong[0]; + prof[profcnt].pr_size = sizeof (vlong[0]); + prof[profcnt].pr_off = 0x80000080; + prof[profcnt].pr_scale = 0x10000; + ++profcnt; + + /* Set up overflow counter (must be last on Irix). */ + prof[profcnt].pr_base = &ovfl; + prof[profcnt].pr_size = sizeof (ovfl); + prof[profcnt].pr_off = 0; + prof[profcnt].pr_scale = 2; + ++profcnt; + + /* Turn it on. */ + if (sprofil (prof, profcnt, &tv, PROF_UINT) < 0) + { + if (errno == ENOSYS) + exit (0); + perror ("sprofil"); + exit (1); + } + + t_tick = tv.tv_sec + 1e-6 * tv.tv_usec; + printf ("profiling period = %g ms\n", 1e3 * t_tick); + + gettimeofday (&start, NULL); + do + { + for (i = 0; i < 21; ++i) + sum += fac (i); + + gettimeofday (&tv, NULL); + timersub (&tv, &start, &tv); + delta = tv.tv_sec + 1e-6 * tv.tv_usec; + } + while (delta < 1000 * t_tick); + + printf ("sum = 0x%lx\n", sum); + + /* Turn it off. */ + if (sprofil (NULL, 0, NULL, 0) < 0) + { + if (errno == ENOSYS) + exit (0); + perror ("sprofil"); + exit (1); + } + + printf ("overflow = %u\n", ovfl); + for (i = 0; i < NELEMS (taddr); ++i) + for (j = 0; j < 0x10000 / sizeof (int); ++j) + if (buf[i][j] != 0) + printf ("%0*Zx\t%u\t(buffer %d)\n", + (int) (sizeof (size_t) * 2), + (taddr[i] + (char *) &buf[i][j] - (char *) &buf[i][0]), + buf[i][j], i); + + return 0; +} diff -durpNa glibc-2.2.2/grp/initgroups.c glibc-2.2.3/grp/initgroups.c --- glibc-2.2.2/grp/initgroups.c Thu Aug 31 14:44:58 2000 +++ glibc-2.2.3/grp/initgroups.c Tue Apr 17 08:17:12 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1989, 91, 93, 1996-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1989,91,93,1996-1999,2000,01 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 @@ -158,21 +158,21 @@ initgroups (user, group) /* Start is one, because we have the first group as parameter. */ long int start = 1; long int size; - long int limit; gid_t *groups; int result; -#ifdef NGROUPS_MAX - size = NGROUPS_MAX; - limit = -1; -#else + + /* We always use sysconf even if NGROUPS_MAX is defined. That way, the + limit can be raised in the kernel configuration without having to + recompile libc. */ long int limit = __sysconf (_SC_NGROUPS_MAX); if (limit > 0) size = limit; else - /* No fixed limit on groups. Pick a starting buffer size. */ - size = 16; -#endif + { + /* No fixed limit on groups. Pick a starting buffer size. */ + size = 16; + } groups = (gid_t *) malloc (size * sizeof (gid_t)); if (__builtin_expect (groups == NULL, 0)) diff -durpNa glibc-2.2.2/hesiod/Makefile glibc-2.2.3/hesiod/Makefile --- glibc-2.2.2/hesiod/Makefile Wed Aug 2 14:52:01 2000 +++ glibc-2.2.3/hesiod/Makefile Mon Mar 26 20:52:50 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc. +# Copyright (C) 1997, 1998, 2000, 2001 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 @@ -43,4 +43,5 @@ include ../Rules # the file service. $(objpfx)libnss_hesiod.so: $(common-objpfx)resolv/libresolv.so \ $(common-objpfx)nss/libnss_files.so \ - $(common-objpfx)libc.so + $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/hurd/fopenport.c glibc-2.2.3/hurd/fopenport.c --- glibc-2.2.2/hurd/fopenport.c Tue Mar 14 16:46:43 2000 +++ glibc-2.2.3/hurd/fopenport.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1994,95,97,2000 Free Software Foundation, Inc. +/* Copyright (C) 1994,95,97,2000,01 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 @@ -62,10 +62,27 @@ writeio (void *cookie, const char *buf, The current file position is stored in *POS. Returns zero if successful, nonzero if not. */ static int -seekio (void *cookie, off_t *pos, int whence) +seekio (void *cookie, +#ifdef USE_IN_LIBIO + _IO_off64_t *pos, +#else + fpos_t *pos, +#endif + int whence) { off_t res; - error_t error = __io_seek ((file_t) cookie, *pos, whence, &res); + error_t error; + + /* XXX We don't really support large files on the Hurd. So if POS + doesn't fit in an `off_t', we'll return `-1' and set errno. EOVERFLOW + probably isn't the right error value, but seems appropriate here. */ + if ((off_t) *pos != *pos) + { + __set_errno (EOVERFLOW); + return -1; + } + + error = __io_seek ((file_t) cookie, *pos, whence, &res); if (error) return __hurd_fail (error); *pos = res; diff -durpNa glibc-2.2.2/hurd/get-host.c glibc-2.2.3/hurd/get-host.c --- glibc-2.2.2/hurd/get-host.c Thu Nov 16 11:12:01 2000 +++ glibc-2.2.3/hurd/get-host.c Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* Get a host configuration item kept as the whole contents of a file. - Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1996,97,99,2000,2001 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 "hurdhost.h" +#include ssize_t _hurd_get_host_config (const char *item, char *buf, size_t buflen) diff -durpNa glibc-2.2.2/hurd/hurd/ioctl.h glibc-2.2.3/hurd/hurd/ioctl.h --- glibc-2.2.2/hurd/hurd/ioctl.h Sat Jan 6 20:35:12 2001 +++ glibc-2.2.3/hurd/hurd/ioctl.h Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* User-registered handlers for specific `ioctl' requests. - Copyright (C) 1993,94,95,96,97,2000 Free Software Foundation, Inc. + Copyright (C) 1993,94,95,96,97,2000,01 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 @@ -59,7 +59,7 @@ extern int hurd_register_ioctl_handler ( { _IOC_NOTYPE (first), _IOC_NOTYPE (last), \ (int (*) (int, int, void *)) (handler), NULL }; \ text_set_element (_hurd_ioctl_handler_lists, \ - ##handler##_ioctl_handler##moniker) + handler##_ioctl_handler##moniker) #define _HURD_HANDLE_IOCTLS(handler, first, last) \ _HURD_HANDLE_IOCTLS_1 (handler, first, last, first##_to_##last) diff -durpNa glibc-2.2.2/hurd/hurd/threadvar.h glibc-2.2.3/hurd/hurd/threadvar.h --- glibc-2.2.2/hurd/hurd/threadvar.h Mon Jun 28 11:57:43 1999 +++ glibc-2.2.3/hurd/hurd/threadvar.h Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* Internal per-thread variables for the Hurd. - Copyright (C) 1994, 95, 97, 98, 99 Free Software Foundation, Inc. + Copyright (C) 1994,95,97,98,99,2001 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 @@ -59,9 +59,10 @@ enum __hurd_threadvar_index _HURD_THREADVAR_MIG_REPLY, /* Reply port for MiG user stub functions. */ _HURD_THREADVAR_ERRNO, /* `errno' value for this thread. */ _HURD_THREADVAR_SIGSTATE, /* This thread's `struct hurd_sigstate'. */ - _HURD_THREADVAR_DYNAMIC_USER, /* Dynamically-assigned user variables. */ - _HURD_THREADVAR_MALLOC, /* For use of malloc. */ - _HURD_THREADVAR_DL_ERROR, /* For use of -ldl and dynamic linker. */ + _HURD_THREADVAR_DYNAMIC_USER, /* Dynamically-assigned user variables. */ + _HURD_THREADVAR_MALLOC, /* For use of malloc. */ + _HURD_THREADVAR_DL_ERROR, /* For use of -ldl and dynamic linker. */ + _HURD_THREADVAR_RPC_VARS, /* For state of RPC functions. */ _HURD_THREADVAR_MAX /* Default value for __hurd_threadvar_max. */ }; @@ -73,6 +74,8 @@ enum __hurd_threadvar_index /* Return the location of the value for the per-thread variable with index INDEX used by the thread whose stack pointer is SP. */ +extern unsigned long int *__hurd_threadvar_location_from_sp + (enum __hurd_threadvar_index __index, void *__sp); _HURD_THREADVAR_H_EXTERN_INLINE unsigned long int * __hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index, void *__sp) diff -durpNa glibc-2.2.2/hurd/hurd.h glibc-2.2.3/hurd/hurd.h --- glibc-2.2.2/hurd/hurd.h Mon Nov 15 16:23:25 1999 +++ glibc-2.2.3/hurd/hurd.h Wed Apr 25 14:50:58 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993,94,95,96,97,98,99 Free Software Foundation, Inc. +/* Copyright (C) 1993,94,95,96,97,98,99,2001 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 @@ -292,6 +292,8 @@ extern error_t hurd_sig_post (pid_t pid, other than the proc server (such as a bootstrap filesystem) can set these variables to install the ports. */ +extern kern_return_t __get_privileged_ports (host_priv_t *host_priv_ptr, + device_t *device_master_ptr); extern kern_return_t get_privileged_ports (host_priv_t *host_priv_ptr, device_t *device_master_ptr); extern mach_port_t _hurd_host_priv, _hurd_device_master; diff -durpNa glibc-2.2.2/hurd/hurdchdir.c glibc-2.2.3/hurd/hurdchdir.c --- glibc-2.2.2/hurd/hurdchdir.c Sat Feb 27 12:00:59 1999 +++ glibc-2.2.3/hurd/hurdchdir.c Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* Change a port cell to a directory by looking up a name. - Copyright (C) 1999 Free Software Foundation, Inc. + Copyright (C) 1999, 2001 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 @@ -23,6 +23,7 @@ #include #include #include +#include int _hurd_change_directory_port_from_name (struct hurd_port *portcell, diff -durpNa glibc-2.2.2/hurd/hurdmalloc.c glibc-2.2.3/hurd/hurdmalloc.c --- glibc-2.2.2/hurd/hurdmalloc.c Thu Dec 19 17:32:01 1996 +++ glibc-2.2.3/hurd/hurdmalloc.c Sat Apr 7 14:02:34 2001 @@ -9,34 +9,40 @@ #define vm_allocate __vm_allocate #define vm_page_size __vm_page_size -/* +/* * Mach Operating System * Copyright (c) 1991,1990,1989 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * + * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie Mellon * the rights to redistribute these changes. */ /* * HISTORY * $Log: hurdmalloc.c,v $ + * Revision 1.14 2001/04/01 05:03:14 roland + * 2001-03-11 Roland McGrath + * + * * mach/mach_error.h: Fix ancient #endif syntax. + * * hurd/hurdmalloc.c: Likewise. + * * Revision 1.13 1996/12/20 01:32:01 drepper * Update from main archive 961219 * @@ -178,7 +184,7 @@ typedef struct free_list { header_t head; /* head of free list for this size */ #ifdef DEBUG int in_use; /* # mallocs - # frees */ -#endif DEBUG +#endif /* DEBUG */ } *free_list_t; /* @@ -301,7 +307,7 @@ malloc(size) #ifdef DEBUG fl->in_use += 1; -#endif DEBUG +#endif /* DEBUG */ spin_unlock(&fl->lock); /* * Store free list pointer in block header @@ -359,7 +365,7 @@ free(base) fl->head = h; #ifdef DEBUG fl->in_use -= 1; -#endif DEBUG +#endif /* DEBUG */ spin_unlock(&fl->lock); return; } @@ -455,7 +461,7 @@ print_malloc_free_list() fprintf(stderr, " all sizes %10d %10d %10d\n", total_used, total_free, total_used + total_free); } -#endif DEBUG +#endif /* DEBUG */ static void malloc_fork_prepare(void) diff -durpNa glibc-2.2.2/hurd/hurdsig.c glibc-2.2.3/hurd/hurdsig.c --- glibc-2.2.2/hurd/hurdsig.c Fri Feb 9 10:04:05 2001 +++ glibc-2.2.3/hurd/hurdsig.c Wed Apr 25 14:50:58 2001 @@ -1,4 +1,5 @@ -/* Copyright (C) 1991,92,93,94,95,96,97,98,99,2000 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,93,94,95,96,97,98,99,2000,01 + 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 @@ -125,6 +126,7 @@ _hurd_thread_sigstate (thread_t thread) #include #include +#include #include #include #include @@ -136,7 +138,6 @@ _hurd_thread_sigstate (thread_t thread) #include #include -int _hurd_core_limit; /* XXX */ /* Call the crash dump server to mummify us before we die. Returns nonzero if a core file was written. */ @@ -147,6 +148,15 @@ write_corefile (int signo, const struct mach_port_t coreserver; file_t file, coredir; const char *name; + + /* Don't bother locking since we just read the one word. */ + rlim_t corelimit = _hurd_rlimits[RLIMIT_CORE].rlim_cur; + + if (corelimit == 0) + /* No core dumping, thank you very much. Note that this makes + `ulimit -c 0' prevent crash-suspension too, which is probably + what the user wanted. */ + return 0; /* XXX RLIMIT_CORE: When we have a protocol to make the server return an error diff -durpNa glibc-2.2.2/hurd/privports.c glibc-2.2.3/hurd/privports.c --- glibc-2.2.2/hurd/privports.c Fri Feb 14 20:27:05 1997 +++ glibc-2.2.3/hurd/privports.c Wed Apr 25 14:50:58 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1994, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1993,94,97,2001 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 @@ -25,7 +25,8 @@ mach_port_t _hurd_host_priv, _hurd_devic kern_return_t -get_privileged_ports (host_priv_t *host_priv_ptr, device_t *device_master_ptr) +__get_privileged_ports (host_priv_t *host_priv_ptr, + device_t *device_master_ptr) { if (! _hurd_host_priv) { @@ -46,15 +47,16 @@ get_privileged_ports (host_priv_t *host_ if (host_priv_ptr) { - mach_port_mod_refs (mach_task_self (), - _hurd_host_priv, MACH_PORT_RIGHT_SEND, 1); + __mach_port_mod_refs (mach_task_self (), + _hurd_host_priv, MACH_PORT_RIGHT_SEND, 1); *host_priv_ptr = _hurd_host_priv; } if (device_master_ptr) { - mach_port_mod_refs (mach_task_self (), - _hurd_device_master, MACH_PORT_RIGHT_SEND, 1); + __mach_port_mod_refs (mach_task_self (), + _hurd_device_master, MACH_PORT_RIGHT_SEND, 1); *device_master_ptr = _hurd_device_master; } return KERN_SUCCESS; } +weak_alias (__get_privileged_ports, get_privileged_ports) diff -durpNa glibc-2.2.2/hurd/vpprintf.c glibc-2.2.3/hurd/vpprintf.c --- glibc-2.2.2/hurd/vpprintf.c Wed Aug 2 14:52:02 2000 +++ glibc-2.2.3/hurd/vpprintf.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,94,97,2000 Free Software Foundation, Inc. +/* Copyright (C) 1991,94,97,2000,01 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 @@ -58,7 +58,7 @@ vpprintf (io_t port, const char *format, _IO_cookie_init (&temp_f.cfile, _IO_NO_READS, (void *) port, (cookie_io_functions_t) { write: do_write }); - done = _IO_vfprintf (&temp_f.cfile.__fp, format, arg); + done = _IO_vfprintf (&temp_f.cfile.__fp.file, format, arg); #else diff -durpNa glibc-2.2.2/iconv/Makefile glibc-2.2.3/iconv/Makefile --- glibc-2.2.2/iconv/Makefile Thu Feb 15 14:08:25 2001 +++ glibc-2.2.3/iconv/Makefile Sat Apr 7 16:38:06 2001 @@ -43,12 +43,12 @@ CFLAGS-iconv_prog.c = -I../locale/progra CFLAGS-iconv_charmap.c = -I../locale/programs CFLAGS-dummy-repertoire.c = -I../locale/programs CFLAGS-charmap.c = -DCHARMAP_PATH='"$(i18ndir)/charmaps"' \ - -DDEFAULT_CHARMAP=null_pointer + -DDEFAULT_CHARMAP=null_pointer -DNEED_NULL_POINTER tests = tst-iconv1 tst-iconv2 tst-iconv3 distribute = gconv_builtin.h gconv_int.h loop.c skeleton.c iconv_prog.h \ - iconv_charmap.c dummy-repertoire.c + iconv_charmap.c dummy-repertoire.c gconv_charset.h others = iconv_prog install-others = $(inst_bindir)/iconv diff -durpNa glibc-2.2.2/iconv/gconv.c glibc-2.2.3/iconv/gconv.c --- glibc-2.2.2/iconv/gconv.c Wed Nov 22 10:59:47 2000 +++ glibc-2.2.3/iconv/gconv.c Sun Apr 8 22:19:10 2001 @@ -1,6 +1,6 @@ /* Convert characters in input buffer using conversion descriptor to output buffer. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -31,11 +31,13 @@ __gconv (__gconv_t cd, const unsigned ch const unsigned char *inbufend, unsigned char **outbuf, unsigned char *outbufend, size_t *irreversible) { - size_t last_step = cd->__nsteps - 1; + size_t last_step; int result; if (cd == (__gconv_t) -1L) return __GCONV_ILLEGAL_DESCRIPTOR; + + last_step = cd->__nsteps - 1; assert (irreversible != NULL); *irreversible = 0; diff -durpNa glibc-2.2.2/iconv/gconv_charset.h glibc-2.2.3/iconv/gconv_charset.h --- glibc-2.2.2/iconv/gconv_charset.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconv/gconv_charset.h Fri Apr 6 10:32:46 2001 @@ -0,0 +1,60 @@ +/* Charset name normalization. + Copyright (C) 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper , 2001. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include + + +static inline void +strip (char *wp, const char *s) +{ + int slash_count = 0; + + while (*s != '\0') + { + if (isalnum (*s) || *s == '_' || *s == '-' || *s == '.') + *wp++ = toupper (*s); + else if (*s == '/') + { + if (++slash_count == 3) + break; + *wp++ = '/'; + } + ++s; + } + + while (slash_count++ < 2) + *wp++ = '/'; + + *wp = '\0'; +} + + +static char * +upstr (char *dst, const char *str) +{ + char *cp = dst; + while ((*cp++ = toupper (*str++)) != '\0') + /* nothing */; + return dst; +} + + +/* If NAME is an codeset alias expand it. */ +extern const char *__gconv_lookup_alias (const char *name); diff -durpNa glibc-2.2.2/iconv/gconv_conf.c glibc-2.2.3/iconv/gconv_conf.c --- glibc-2.2.2/iconv/gconv_conf.c Fri Dec 1 11:55:02 2000 +++ glibc-2.2.3/iconv/gconv_conf.c Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* Handle configuration data. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -506,7 +506,7 @@ __gconv_get_path (void) result[n].len = 0; } - __gconv_path_elem = result ?: &empty_path_elem; + __gconv_path_elem = result ?: (struct path_elem *) &empty_path_elem; if (cwd != NULL) free (cwd); @@ -552,7 +552,7 @@ __gconv_read_conf (void) { struct gconv_alias fake_alias; - fake_alias.fromname = builtin_modules[cnt].from_string; + fake_alias.fromname = (char *) builtin_modules[cnt].from_string; if (__tfind (&fake_alias, &__gconv_alias_db, __gconv_alias_compare) != NULL) diff -durpNa glibc-2.2.2/iconv/gconv_db.c glibc-2.2.3/iconv/gconv_db.c --- glibc-2.2.2/iconv/gconv_db.c Wed Nov 22 10:59:47 2000 +++ glibc-2.2.3/iconv/gconv_db.c Tue Apr 17 08:17:12 2001 @@ -1,5 +1,5 @@ /* Provide access to the collection of available transformation modules. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -27,6 +27,7 @@ #include #include +#include /* Simple data structure for alias mapping. We have two names, `from' @@ -225,7 +226,7 @@ gen_steps (struct derivation_step *best, { result[step_cnt].__from_name = (step_cnt == 0 ? __strdup (fromset) - : current->last->result_set); + : (char *)current->last->result_set); result[step_cnt].__to_name = (step_cnt + 1 == *nsteps ? __strdup (current->result_set) : result[step_cnt + 1].__from_name); @@ -614,13 +615,38 @@ find_derivation (const char *toset, cons } +/* Control of initialization. */ +__libc_once_define (static, once); + + +static const char * +do_lookup_alias (const char *name) +{ + struct gconv_alias key; + struct gconv_alias **found; + + key.fromname = (char *) name; + found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare); + return found != NULL ? (*found)->toname : NULL; +} + + +const char * +__gconv_lookup_alias (const char *name) +{ + /* Ensure that the configuration data is read. */ + __libc_once (once, __gconv_read_conf); + + return do_lookup_alias (name) ?: name; +} + + int internal_function __gconv_find_transform (const char *toset, const char *fromset, struct __gconv_step **handle, size_t *nsteps, int flags) { - __libc_once_define (static, once); const char *fromset_expand = NULL; const char *toset_expand = NULL; int result; @@ -641,16 +667,8 @@ __gconv_find_transform (const char *tose /* See whether the names are aliases. */ if (__gconv_alias_db != NULL) { - struct gconv_alias key; - struct gconv_alias **found; - - key.fromname = fromset; - found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare); - fromset_expand = found != NULL ? (*found)->toname : NULL; - - key.fromname = toset; - found = __tfind (&key, &__gconv_alias_db, __gconv_alias_compare); - toset_expand = found != NULL ? (*found)->toname : NULL; + fromset_expand = do_lookup_alias (fromset); + toset_expand = do_lookup_alias (toset); } if (__builtin_expect (flags & GCONV_AVOID_NOCONV, 0) diff -durpNa glibc-2.2.2/iconv/gconv_simple.c glibc-2.2.3/iconv/gconv_simple.c --- glibc-2.2.2/iconv/gconv_simple.c Sat Jan 6 20:35:12 2001 +++ glibc-2.2.3/iconv/gconv_simple.c Sun Apr 8 22:19:10 2001 @@ -135,10 +135,10 @@ internal_ucs4_loop_unaligned (struct __g # endif /* Determine the status. */ - if (*outptrp + 4 > outend) - result = __GCONV_FULL_OUTPUT; - else if (*inptrp == inend) + if (*inptrp == inend) result = __GCONV_EMPTY_INPUT; + else if (*outptrp + 4 > outend) + result = __GCONV_FULL_OUTPUT; else result = __GCONV_INCOMPLETE_INPUT; diff -durpNa glibc-2.2.2/iconv/iconv_open.c glibc-2.2.3/iconv/iconv_open.c --- glibc-2.2.2/iconv/iconv_open.c Fri Apr 21 12:25:18 2000 +++ glibc-2.2.3/iconv/iconv_open.c Sat Apr 7 14:02:34 2001 @@ -1,5 +1,5 @@ /* Get descriptor for character set conversion. - Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1997. @@ -18,48 +18,13 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include #include #include #include #include #include - - -static inline void -strip (char *wp, const char *s) -{ - int slash_count = 0; - - while (*s != '\0') - { - if (isalnum (*s) || *s == '_' || *s == '-' || *s == '.') - *wp++ = toupper (*s); - else if (*s == '/') - { - if (++slash_count == 3) - break; - *wp++ = '/'; - } - ++s; - } - - while (slash_count++ < 2) - *wp++ = '/'; - - *wp = '\0'; -} - - -static char * -upstr (char *dst, const char *str) -{ - char *cp = dst; - while ((*cp++ = toupper (*str++)) != '\0') - /* nothing */; - return dst; -} +#include "gconv_charset.h" iconv_t diff -durpNa glibc-2.2.2/iconv/iconv_prog.c glibc-2.2.3/iconv/iconv_prog.c --- glibc-2.2.2/iconv/iconv_prog.c Fri Feb 9 10:04:05 2001 +++ glibc-2.2.3/iconv/iconv_prog.c Wed Apr 25 14:50:58 2001 @@ -586,7 +586,7 @@ insert_print_list (const void *nodep, VI } static void -do_print (const void *nodep, VISIT value, int level) +do_print_human (const void *nodep, VISIT value, int level) { if (value == leaf || value == postorder) { @@ -628,6 +628,17 @@ do_print (const void *nodep, VISIT valu } static void +do_print (const void *nodep, VISIT value, int level) +{ + if (value == leaf || value == postorder) + { + const char *s = *(const char **) nodep; + + puts (s); + } +} + +static void internal_function add_known_names (struct gconv_module *node) { @@ -672,8 +683,13 @@ listed with several different names (ali /* Now print the collected names. */ column = 2; - twalk (printlist, do_print); + if (isatty (fileno (stdout))) + { + twalk (printlist, do_print_human); - if (column != 0) - puts (""); + if (column != 0) + puts (""); + } + else + twalk (printlist, do_print); } diff -durpNa glibc-2.2.2/iconv/tst-iconv1.c glibc-2.2.3/iconv/tst-iconv1.c --- glibc-2.2.2/iconv/tst-iconv1.c Mon May 22 02:01:33 2000 +++ glibc-2.2.3/iconv/tst-iconv1.c Mon Mar 26 20:52:51 2001 @@ -29,15 +29,11 @@ main (void) inbuf = utf8; inbytes = 4; outbuf = (char *) ucs4; -#ifdef OK - outbytes = 5 * sizeof (wchar_t); /* Ok. */ -#else outbytes = 4 * sizeof (wchar_t); /* "Argument list too long" error. */ -#endif n = iconv (cd, &inbuf, &inbytes, &outbuf, &outbytes); if (n == (size_t) -1) { - perror ("iconv"); + printf ("iconv: %m\n"); iconv_close (cd); return 1; } diff -durpNa glibc-2.2.2/iconvdata/Makefile glibc-2.2.3/iconvdata/Makefile --- glibc-2.2.2/iconvdata/Makefile Thu Feb 15 14:08:25 2001 +++ glibc-2.2.3/iconvdata/Makefile Thu Apr 12 22:58:39 2001 @@ -46,7 +46,7 @@ modules := ISO8859-1 ISO8859-2 ISO8859-3 INIS-CYRILLIC ISO_6937-2 ISO_2033 ISO_5427 ISO_5427-EXT \ ISO_5428 ISO_10367-BOX MAC-IS MAC-UK NATS-DANO NATS-SEFI \ SAMI-WS2 ISO-IR-197 TIS-620 KOI8-U GBK ISIRI-3342 GBGBK \ - ISO-2022-CN libISOIR165 UTF-16 UNICODE UTF-7 BIG5HKSCS \ + ISO-2022-CN libISOIR165 UTF-16 UNICODE UTF-32 UTF-7 BIG5HKSCS \ GB18030 ISO-2022-CN-EXT VISCII GBBIG5 modules.so := $(addsuffix .so, $(modules)) @@ -96,7 +96,7 @@ LDFLAGS-libISOIR165.so = -Wl,-soname,$(@ distribute := gconv-modules extra-module.mk gap.awk gaptab.awk \ gen-8bit.sh gen-8bit-gap.sh gen-8bit-gap-1.sh \ TESTS $(filter-out testdata/CVS%, $(wildcard testdata/*)) \ - run-iconv-test.sh tst-tables.sh tst-table.sh \ + TESTS2 run-iconv-test.sh tst-tables.sh tst-table.sh \ tst-table-charmap.sh tst-table-from.c tst-table-to.c \ EUC-JP.irreversible ISIRI-3342.irreversible SJIS.irreversible \ EUC-KR.irreversible BIG5HKSCS.irreversible BIG5.irreversible \ @@ -134,7 +134,7 @@ distribute := gconv-modules extra-module macintosh.c mac-is.c mac-uk.c nats-dano.c nats-sefi.c sjis.c \ t.61.c uhc.c sami-ws2.c iso-ir-197.c tis-620.c koi8-u.c \ isiri-3342.c isiri-3342.h gbgbk.c iso-2022-cn.c cns11643l2.h \ - iso8859-16.c utf-16.c unicode.c utf-7.c big5hkscs.c \ + iso8859-16.c utf-16.c unicode.c utf-32.c utf-7.c big5hkscs.c \ iso-ir-165.c iso-ir-165.h gb18030.c iso-2022-cn-ext.c \ ibm932.c ibm932.h ibm943.c ibm943.h gbbig5.c @@ -184,7 +184,7 @@ generated-modules := $(gen-8bit-modules) generated = $(generated-modules:=.h) $(generated-modules:=.stmp) \ iconv-test.out iconv-rules tst-loading.mtrace \ - mtrace-tst-loading tst-tables.out + mtrace-tst-loading tst-tables.out iconv-test.xxx ifdef objpfx generated += gconv-modules endif @@ -259,8 +259,10 @@ include ../Rules ifeq (no,$(cross-compiling)) ifeq (yes,$(build-shared)) -tests: $(objpfx)iconv-test.out $(objpfx)tst-tables.out \ - $(objpfx)mtrace-tst-loading +tests: $(objpfx)iconv-test.out $(objpfx)tst-tables.out +ifneq (no,$(PERL)) +tests: $(objpfx)mtrace-tst-loading +endif endif endif diff -durpNa glibc-2.2.2/iconvdata/TESTS2 glibc-2.2.3/iconvdata/TESTS2 --- glibc-2.2.2/iconvdata/TESTS2 Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/TESTS2 Thu Apr 12 13:24:42 2001 @@ -0,0 +1,27 @@ +# Tests for endianness dependent iconv(1) (and therefore iconv(3)) in GNU libc. +# Copyright (C) 2001 Free Software Foundation, Inc. +# This file is part of the GNU C Library. +# Contributed by Bruno Haible , 2001. +# +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with the GNU C Library; see the file COPYING.LIB. If not, +# write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +# Each line consists of three fields: +# 1. The endianness independent encoding. +# 2. The endianness dependent encoding. +# 3. The filename stem. + +UTF-8 UTF-16 alfabeta +UTF-8 UTF-32 alfabeta diff -durpNa glibc-2.2.2/iconvdata/extra-module.mk glibc-2.2.3/iconvdata/extra-module.mk --- glibc-2.2.2/iconvdata/extra-module.mk Sun Dec 14 13:33:18 1997 +++ glibc-2.2.3/iconvdata/extra-module.mk Mon Mar 26 20:52:51 2001 @@ -9,7 +9,7 @@ $(objpfx)$(mod).so: $(addprefix $(objpfx # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)$(mod).so: $(common-objpfx)libc.so +$(objpfx)$(mod).so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a ifneq (,$(extra-modules-left)) include extra-module.mk diff -durpNa glibc-2.2.2/iconvdata/gconv-modules glibc-2.2.3/iconvdata/gconv-modules --- glibc-2.2.2/iconvdata/gconv-modules Thu Feb 15 14:08:30 2001 +++ glibc-2.2.3/iconvdata/gconv-modules Thu Apr 12 14:02:01 2001 @@ -199,6 +199,7 @@ module INTERNAL SEN_850200_C// ISO646 alias ISO-IR-100// ISO-8859-1// alias ISO_8859-1:1987// ISO-8859-1// alias ISO_8859-1// ISO-8859-1// +alias ISO8859-1// ISO-8859-1// alias LATIN1// ISO-8859-1// alias L1// ISO-8859-1// alias IBM819// ISO-8859-1// @@ -213,11 +214,14 @@ module INTERNAL ISO-8859-1// ISO8859-1 alias ISO-IR-101// ISO-8859-2// alias ISO_8859-2:1987// ISO-8859-2// alias ISO_8859-2// ISO-8859-2// +alias ISO8859-2// ISO-8859-2// alias LATIN2// ISO-8859-2// alias L2// ISO-8859-2// alias CSISOLATIN2// ISO-8859-2// alias 8859_2// ISO-8859-2// alias OSF00010002// ISO-8859-2// +alias IBM912// ISO-8859-2// +alias CP912// ISO-8859-2// module ISO-8859-2// INTERNAL ISO8859-2 1 module INTERNAL ISO-8859-2// ISO8859-2 1 @@ -225,6 +229,7 @@ module INTERNAL ISO-8859-2// ISO8859-2 alias ISO-IR-109// ISO-8859-3// alias ISO_8859-3:1988// ISO-8859-3// alias ISO_8859-3// ISO-8859-3// +alias ISO8859-3// ISO-8859-3// alias LATIN3// ISO-8859-3// alias L3// ISO-8859-3// alias CSISOLATIN3// ISO-8859-3// @@ -237,6 +242,7 @@ module INTERNAL ISO-8859-3// ISO8859-3 alias ISO-IR-110// ISO-8859-4// alias ISO_8859-4:1988// ISO-8859-4// alias ISO_8859-4// ISO-8859-4// +alias ISO8859-4// ISO-8859-4// alias LATIN4// ISO-8859-4// alias L4// ISO-8859-4// alias CSISOLATIN4// ISO-8859-4// @@ -249,10 +255,13 @@ module INTERNAL ISO-8859-4// ISO8859-4 alias ISO-IR-144// ISO-8859-5// alias ISO_8859-5:1988// ISO-8859-5// alias ISO_8859-5// ISO-8859-5// +alias ISO8859-5// ISO-8859-5// alias CYRILLIC// ISO-8859-5// alias CSISOLATINCYRILLIC// ISO-8859-5// alias 8859_5// ISO-8859-5// alias OSF00010005// ISO-8859-5// +alias IBM915// ISO-8859-5// +alias CP915// ISO-8859-5// module ISO-8859-5// INTERNAL ISO8859-5 1 module INTERNAL ISO-8859-5// ISO8859-5 1 @@ -260,12 +269,15 @@ module INTERNAL ISO-8859-5// ISO8859-5 alias ISO-IR-127// ISO-8859-6// alias ISO_8859-6:1987// ISO-8859-6// alias ISO_8859-6// ISO-8859-6// +alias ISO8859-6// ISO-8859-6// alias ECMA-114// ISO-8859-6// alias ASMO-708// ISO-8859-6// alias ARABIC// ISO-8859-6// alias CSISOLATINARABIC// ISO-8859-6// alias 8859_6// ISO-8859-6// alias OSF00010006// ISO-8859-6// +alias IBM1089// ISO-8859-6// +alias CP1089// ISO-8859-6// module ISO-8859-6// INTERNAL ISO8859-6 1 module INTERNAL ISO-8859-6// ISO8859-6 1 @@ -273,6 +285,7 @@ module INTERNAL ISO-8859-6// ISO8859-6 alias ISO-IR-126// ISO-8859-7// alias ISO_8859-7:1987// ISO-8859-7// alias ISO_8859-7// ISO-8859-7// +alias ISO8859-7// ISO-8859-7// alias ELOT_928// ISO-8859-7// alias ECMA-118// ISO-8859-7// alias GREEK// ISO-8859-7// @@ -280,6 +293,8 @@ alias GREEK8// ISO-8859-7// alias CSISOLATINGREEK// ISO-8859-7// alias 8859_7// ISO-8859-7// alias OSF00010007// ISO-8859-7// +alias IBM813// ISO-8859-7// +alias CP813// ISO-8859-7// module ISO-8859-7// INTERNAL ISO8859-7 1 module INTERNAL ISO-8859-7// ISO8859-7 1 @@ -287,10 +302,13 @@ module INTERNAL ISO-8859-7// ISO8859-7 alias ISO-IR-138// ISO-8859-8// alias ISO_8859-8:1988// ISO-8859-8// alias ISO_8859-8// ISO-8859-8// +alias ISO8859-8// ISO-8859-8// alias HEBREW// ISO-8859-8// alias CSISOLATINHEBREW// ISO-8859-8// alias 8859_8// ISO-8859-8// alias OSF00010008// ISO-8859-8// +alias IBM916// ISO-8859-8// +alias CP916// ISO-8859-8// module ISO-8859-8// INTERNAL ISO8859-8 1 module INTERNAL ISO-8859-8// ISO8859-8 1 @@ -298,11 +316,16 @@ module INTERNAL ISO-8859-8// ISO8859-8 alias ISO-IR-148// ISO-8859-9// alias ISO_8859-9:1989// ISO-8859-9// alias ISO_8859-9// ISO-8859-9// +alias ISO8859-9// ISO-8859-9// alias LATIN5// ISO-8859-9// alias L5// ISO-8859-9// alias CSISOLATIN5// ISO-8859-9// alias 8859_9// ISO-8859-9// alias OSF00010009// ISO-8859-9// +alias IBM920// ISO-8859-9// +alias CP920// ISO-8859-9// +alias TS-5881// ISO-8859-9// +alias ECMA-128// ISO-8859-9// module ISO-8859-9// INTERNAL ISO8859-9 1 module INTERNAL ISO-8859-9// ISO8859-9 1 @@ -310,6 +333,7 @@ module INTERNAL ISO-8859-9// ISO8859-9 alias ISO-IR-157// ISO-8859-10// alias ISO_8859-10:1992// ISO-8859-10// alias ISO_8859-10// ISO-8859-10// +alias ISO8859-10// ISO-8859-10// alias LATIN6// ISO-8859-10// alias L6// ISO-8859-10// alias CSISOLATIN6// ISO-8859-10// @@ -322,6 +346,7 @@ module ISO-8859-11// INTERNAL ISO8859- module INTERNAL ISO-8859-11// ISO8859-11 1 # from to module cost +alias ISO8859-13// ISO-8859-13// alias ISO-IR-179// ISO-8859-13// alias LATIN7// ISO-8859-13// alias L7// ISO-8859-13// @@ -330,6 +355,7 @@ module ISO-8859-13// INTERNAL ISO8859- module INTERNAL ISO-8859-13// ISO8859-13 1 # from to module cost +alias ISO8859-14// ISO-8859-14// alias ISO-IR-199// ISO-8859-14// alias LATIN8// ISO-8859-14// alias L8// ISO-8859-14// @@ -338,12 +364,14 @@ module ISO-8859-14// INTERNAL ISO8859- module INTERNAL ISO-8859-14// ISO8859-14 1 # from to module cost +alias ISO8859-15// ISO-8859-15// alias ISO-IR-203// ISO-8859-15// alias ISO_8859-15:1998// ISO-8859-15// module ISO-8859-15// INTERNAL ISO8859-15 1 module INTERNAL ISO-8859-15// ISO8859-15 1 # from to module cost +alias ISO8859-16// ISO-8859-16// alias ISO-IR-226// ISO-8859-16// alias LATIN10// ISO-8859-16// alias L10// ISO-8859-16// @@ -497,6 +525,8 @@ alias EBCDIC-CP-WT// IBM037// alias EBCDIC-CP-NL// IBM037// alias CSIBM037// IBM037// alias OSF10020025// IBM037// +alias CP1070// IBM037// +alias CP282// IBM037// module IBM037// INTERNAL IBM037 1 module INTERNAL IBM037// IBM037 1 @@ -570,6 +600,7 @@ alias CP284// IBM284// alias EBCDIC-CP-ES// IBM284// alias CSIBM284// IBM284// alias OSF1002011C// IBM284// +alias CP1079// IBM284// module IBM284// INTERNAL IBM284 1 module INTERNAL IBM284// IBM284 1 @@ -594,6 +625,7 @@ alias CP297// IBM297// alias EBCDIC-CP-FR// IBM297// alias CSIBM297// IBM297// alias OSF10020129// IBM297// +alias CP1081// IBM297// module IBM297// INTERNAL IBM297 1 module INTERNAL IBM297// IBM297 1 @@ -636,6 +668,7 @@ alias EBCDIC-CP-BE// IBM500// alias EBCDIC-CP-CH// IBM500// alias CSIBM500// IBM500// alias OSF100201F4// IBM500// +alias CP1084// IBM500// module IBM500// INTERNAL IBM500 1 module INTERNAL IBM500// IBM500 1 @@ -1284,6 +1317,18 @@ module INTERNAL UTF-16BE// UTF-16 1 alias CSUNICODE// UNICODE// module UNICODE// INTERNAL UNICODE 1 module INTERNAL UNICODE// UNICODE 1 + +# from to module cost +module UTF-32// INTERNAL UTF-32 1 +module INTERNAL UTF-32// UTF-32 1 + +# from to module cost +module UTF-32LE// INTERNAL UTF-32 1 +module INTERNAL UTF-32LE// UTF-32 1 + +# from to module cost +module UTF-32BE// INTERNAL UTF-32 1 +module INTERNAL UTF-32BE// UTF-32 1 # from to module cost module UTF-7// INTERNAL UTF-7 1 diff -durpNa glibc-2.2.2/iconvdata/run-iconv-test.sh glibc-2.2.3/iconvdata/run-iconv-test.sh --- glibc-2.2.2/iconvdata/run-iconv-test.sh Fri Feb 9 10:04:06 2001 +++ glibc-2.2.3/iconvdata/run-iconv-test.sh Thu Apr 12 14:02:01 2001 @@ -127,7 +127,7 @@ while read from to subset targets; do fi if test "$subset" != Y; then - echo $ac_n " suntzu: ASCII -> $to -> ASCII $ac_c" + echo $ac_n " suntzu: ASCII -> $to -> ASCII $ac_c" $PROG -f ASCII -t $to testdata/suntzus | $PROG -f $to -t ASCII > $temp1 || { if test $? -gt 128; then exit 1; fi @@ -138,6 +138,49 @@ while read from to subset targets; do echo "/OK" fi done < TESTS + +# We read the file named TESTS2. All non-empty lines not starting with +# `#' are interpreted as commands. +while read utf8 from filename; do + # Ignore empty and comment lines. + if test -z "$filename" || test "$utf8" = '#'; then continue; fi + + # Expand the variables now. + PROG=`eval echo $ICONV` + + # Test conversion to the endianness dependent encoding. + echo $ac_n "test encoder: $utf8 -> $from $ac_c" + $PROG -f $utf8 -t $from < testdata/${filename}..${utf8} > $temp1 + cmp $temp1 testdata/${filename}..${from}.BE > /dev/null 2>&1 || + cmp $temp1 testdata/${filename}..${from}.LE > /dev/null 2>&1 || + { echo "/FAILED"; failed=1; continue; } + echo "OK" + + # Test conversion from the endianness dependent encoding. + echo $ac_n "test decoder: $from -> $utf8 $ac_c" + $PROG -f $from -t $utf8 < testdata/${filename}..${from}.BE > $temp1 + cmp $temp1 testdata/${filename}..${utf8} > /dev/null 2>&1 || + { echo "/FAILED"; failed=1; continue; } + $PROG -f $from -t $utf8 < testdata/${filename}..${from}.LE > $temp1 + cmp $temp1 testdata/${filename}..${utf8} > /dev/null 2>&1 || + { echo "/FAILED"; failed=1; continue; } + echo "OK" + + # Test byte swapping behaviour. + echo $ac_n "test non-BOM: ${from}BE -> ${from}LE $ac_c" + $PROG -f ${from}BE -t ${from}LE < testdata/${filename}..${from}.BE > $temp1 + cmp $temp1 testdata/${filename}..${from}.LE > /dev/null 2>&1 || + { echo "/FAILED"; failed=1; continue; } + echo "OK" + + # Test byte swapping behaviour. + echo $ac_n "test non-BOM: ${from}LE -> ${from}BE $ac_c" + $PROG -f ${from}LE -t ${from}BE < testdata/${filename}..${from}.LE > $temp1 + cmp $temp1 testdata/${filename}..${from}.BE > /dev/null 2>&1 || + { echo "/FAILED"; failed=1; continue; } + echo "OK" + +done < TESTS2 exit $failed # Local Variables: diff -durpNa glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-16.BE glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-16.BE --- glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-16.BE Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-16.BE Thu Apr 12 13:25:38 2001 @@ -0,0 +1,7 @@ +þÿ‘’“”•–—˜™š›œžŸ ¡£¤¥¦§¨© <- Greek +ØßØßØßØßØßØßØßØßØßØß Øß +Øß Øß Øß ØßØßØßØßØßØßØßØßØßØßØßØßØßØßØßØß <- Etruscan +ABCDEFGHIJKLMNOPQRSTUVWXYZ <- Latin + !"#$%&'()*+,-./ <- Cyrillic +Øß0Øß1Øß2Øß3Øß4Øß5Øß6Øß7Øß8Øß9Øß:Øß;Øß<Øß=Øß>Øß?Øß@ØßAØßBØßCØßDØßEØßFØßGØßH <- Gothic +ÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèé <- Hebrew diff -durpNa glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-16.LE glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-16.LE --- glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-16.LE Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-16.LE Thu Apr 12 13:25:38 2001 @@ -0,0 +1,8 @@ +ÿþ‘’“”•–—˜™š›œžŸ ¡£¤¥¦§¨© <- Greek +ØßØߨߨߨߨߨߨߨߨ ߨ +ߨ ߨ ߨ ߨߨߨߨߨߨߨߨߨߨߨߨߨߨߨߨß <- Etruscan +ABCDEFGHIJKLMNOPQRSTUVWXYZ <- Latin + !"#$%&'()*+,-./ <- Cyrillic +Ø0ߨ1ߨ2ߨ3ߨ4ߨ5ߨ6ߨ7ߨ8ߨ9ߨ:ߨ;ߨ<ߨ=ߨ>ߨ?ߨ@ߨAߨBߨCߨDߨEߨFߨGߨHß <- Gothic +ÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèé <- Hebrew + \ No newline at end of file diff -durpNa glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-32.BE glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-32.BE --- glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-32.BE Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-32.BE Thu Apr 12 13:25:38 2001 @@ -0,0 +1,7 @@ +þÿ‘’“”•–—˜™š›œžŸ ¡£¤¥¦§¨© <- Greek +  +    <- Etruscan +ABCDEFGHIJKLMNOPQRSTUVWXYZ <- Latin + !"#$%&'()*+,-./ <- Cyrillic +0123456789:;<=>?@ABCDEFGH <- Gothic +ÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèé <- Hebrew diff -durpNa glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-32.LE glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-32.LE --- glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-32.LE Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-32.LE Thu Apr 12 13:25:38 2001 @@ -0,0 +1,8 @@ +ÿþ‘’“”•–—˜™š›œžŸ ¡£¤¥¦§¨© <- Greek +  +    <- Etruscan +ABCDEFGHIJKLMNOPQRSTUVWXYZ <- Latin + !"#$%&'()*+,-./ <- Cyrillic +0123456789:;<=>?@ABCDEFGH <- Gothic +ÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèé <- Hebrew + \ No newline at end of file diff -durpNa glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-8 glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-8 --- glibc-2.2.2/iconvdata/testdata/alfabeta..UTF-8 Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/testdata/alfabeta..UTF-8 Thu Apr 12 13:25:38 2001 @@ -0,0 +1,6 @@ +ΑΒΓΔΕΖΗΘΙΚΛΜÎΞΟΠΡΣΤΥΦΧΨΩ <- Greek +ðŒ€ðŒðŒ‚ðŒƒðŒ„ðŒ…ðŒ†ðŒ‡ðŒˆðŒ‰ðŒŠðŒ‹ðŒŒðŒðŒŽðŒðŒðŒ‘ðŒ’ðŒ“ðŒ”ðŒ•ðŒ–ðŒ—ðŒ˜ðŒ™ðŒšðŒ›ðŒœðŒ <- Etruscan +ABCDEFGHIJKLMNOPQRSTUVWXYZ <- Latin +ÐБВГДЕЖЗИЙКЛМÐОПРСТУФХЦЧШЩЪЫЬЭЮЯ <- Cyrillic +ðŒ°ðŒ±ðŒ²ðŒ³ðŒ´ðŒµðŒ¶ðŒ·ðŒ¸ðŒ¹ðŒºðŒ»ðŒ¼ðŒ½ðŒ¾ðŒ¿ð€ðð‚ðƒð„ð…ð†ð‡ðˆ <- Gothic +×בגדהוזחטיךכל×מןנסעףפץצקרש <- Hebrew diff -durpNa glibc-2.2.2/iconvdata/tst-loading.c glibc-2.2.3/iconvdata/tst-loading.c --- glibc-2.2.2/iconvdata/tst-loading.c Wed Aug 30 15:38:30 2000 +++ glibc-2.2.3/iconvdata/tst-loading.c Mon Mar 26 20:52:51 2001 @@ -1,5 +1,5 @@ /* Tests for loading and unloading of iconv modules. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 2000. @@ -59,61 +59,60 @@ struct /* The test data. */ -static const char inbuf[] = "\ -The first step is the function to create a handle. - - - Function: iconv_t iconv_open (const char *TOCODE, const char - *FROMCODE) - The `iconv_open' function has to be used before starting a - conversion. The two parameters this function takes determine the - source and destination character set for the conversion and if the - implementation has the possibility to perform such a conversion the - function returns a handle. - - If the wanted conversion is not available the function returns - `(iconv_t) -1'. In this case the global variable `errno' can have - the following values: - - `EMFILE' - The process already has `OPEN_MAX' file descriptors open. - - `ENFILE' - The system limit of open file is reached. - - `ENOMEM' - Not enough memory to carry out the operation. - - `EINVAL' - The conversion from FROMCODE to TOCODE is not supported. - - It is not possible to use the same descriptor in different threads - to perform independent conversions. Within the data structures - associated with the descriptor there is information about the - conversion state. This must not be messed up by using it in - different conversions. - - An `iconv' descriptor is like a file descriptor as for every use a - new descriptor must be created. The descriptor does not stand for - all of the conversions from FROMSET to TOSET. - - The GNU C library implementation of `iconv_open' has one - significant extension to other implementations. To ease the - extension of the set of available conversions the implementation - allows storing the necessary files with data and code in - arbitrarily many directories. How this extension has to be - written will be explained below (*note glibc iconv - Implementation::). Here it is only important to say that all - directories mentioned in the `GCONV_PATH' environment variable are - considered if they contain a file `gconv-modules'. These - directories need not necessarily be created by the system - administrator. In fact, this extension is introduced to help users - writing and using their own, new conversions. Of course this does - not work for security reasons in SUID binaries; in this case only - the system directory is considered and this normally is - `PREFIX/lib/gconv'. The `GCONV_PATH' environment variable is - examined exactly once at the first call of the `iconv_open' - function. Later modifications of the variable have no effect. -"; +static const char inbuf[] = +"The first step is the function to create a handle.\n" +"\n" +" - Function: iconv_t iconv_open (const char *TOCODE, const char\n" +" *FROMCODE)\n" +" The `iconv_open' function has to be used before starting a\n" +" conversion. The two parameters this function takes determine the\n" +" source and destination character set for the conversion and if the\n" +" implementation has the possibility to perform such a conversion the\n" +" function returns a handle.\n" +"\n" +" If the wanted conversion is not available the function returns\n" +" `(iconv_t) -1'. In this case the global variable `errno' can have\n" +" the following values:\n" +"\n" +" `EMFILE'\n" +" The process already has `OPEN_MAX' file descriptors open.\n" +"\n" +" `ENFILE'\n" +" The system limit of open file is reached.\n" +"\n" +" `ENOMEM'\n" +" Not enough memory to carry out the operation.\n" +"\n" +" `EINVAL'\n" +" The conversion from FROMCODE to TOCODE is not supported.\n" +"\n" +" It is not possible to use the same descriptor in different threads\n" +" to perform independent conversions. Within the data structures\n" +" associated with the descriptor there is information about the\n" +" conversion state. This must not be messed up by using it in\n" +" different conversions.\n" +"\n" +" An `iconv' descriptor is like a file descriptor as for every use a\n" +" new descriptor must be created. The descriptor does not stand for\n" +" all of the conversions from FROMSET to TOSET.\n" +"\n" +" The GNU C library implementation of `iconv_open' has one\n" +" significant extension to other implementations. To ease the\n" +" extension of the set of available conversions the implementation\n" +" allows storing the necessary files with data and code in\n" +" arbitrarily many directories. How this extension has to be\n" +" written will be explained below (*note glibc iconv\n" +" Implementation::). Here it is only important to say that all\n" +" directories mentioned in the `GCONV_PATH' environment variable are\n" +" considered if they contain a file `gconv-modules'. These\n" +" directories need not necessarily be created by the system\n" +" administrator. In fact, this extension is introduced to help users\n" +" writing and using their own, new conversions. Of course this does\n" +" not work for security reasons in SUID binaries; in this case only\n" +" the system directory is considered and this normally is\n" +" `PREFIX/lib/gconv'. The `GCONV_PATH' environment variable is\n" +" examined exactly once at the first call of the `iconv_open'\n" +" function. Later modifications of the variable have no effect.\n"; int diff -durpNa glibc-2.2.2/iconvdata/unicode.c glibc-2.2.3/iconvdata/unicode.c --- glibc-2.2.2/iconvdata/unicode.c Fri Dec 1 11:55:06 2000 +++ glibc-2.2.3/iconvdata/unicode.c Thu Apr 12 14:02:01 2001 @@ -53,11 +53,11 @@ \ if (get16u (inptr) == BOM) \ /* Simply ignore the BOM character. */ \ - inptr += 2; \ + *inptrp = inptr += 2; \ else if (get16u (inptr) == BOM_OE) \ { \ ((struct unicode_data *) step->__data)->swap = 1; \ - inptr += 2; \ + *inptrp = inptr += 2; \ } \ } \ } \ diff -durpNa glibc-2.2.2/iconvdata/utf-16.c glibc-2.2.3/iconvdata/utf-16.c --- glibc-2.2.2/iconvdata/utf-16.c Fri Dec 1 11:55:06 2000 +++ glibc-2.2.3/iconvdata/utf-16.c Thu Apr 12 14:02:01 2001 @@ -1,5 +1,5 @@ /* Conversion module for UTF-16. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1999. @@ -44,7 +44,7 @@ #define PREPARE_LOOP \ enum direction dir = ((struct utf16_data *) step->__data)->dir; \ enum variant var = ((struct utf16_data *) step->__data)->var; \ - int swap = ((struct utf16_data *) step->__data)->swap; \ + int swap; \ if (FROM_DIRECTION && var == UTF_16) \ { \ if (data->__invocation_counter == 0) \ @@ -55,11 +55,11 @@ \ if (get16u (inptr) == BOM) \ /* Simply ignore the BOM character. */ \ - inptr += 2; \ + *inptrp = inptr += 2; \ else if (get16u (inptr) == BOM_OE) \ { \ ((struct utf16_data *) step->__data)->swap = 1; \ - inptr += 2; \ + *inptrp = inptr += 2; \ } \ } \ } \ @@ -72,7 +72,8 @@ \ put16u (outbuf, BOM); \ outbuf += 2; \ - } + } \ + swap = ((struct utf16_data *) step->__data)->swap; #define EXTRA_LOOP_ARGS , var, swap @@ -159,7 +160,7 @@ gconv_init (struct __gconv_step *step) if (dir == from_utf16) { step->__min_needed_from = MIN_NEEDED_FROM; - step->__max_needed_from = MIN_NEEDED_FROM; + step->__max_needed_from = MAX_NEEDED_FROM; step->__min_needed_to = MIN_NEEDED_TO; step->__max_needed_to = MIN_NEEDED_TO; } @@ -168,7 +169,7 @@ gconv_init (struct __gconv_step *step) step->__min_needed_from = MIN_NEEDED_TO; step->__max_needed_from = MIN_NEEDED_TO; step->__min_needed_to = MIN_NEEDED_FROM; - step->__max_needed_to = MIN_NEEDED_FROM; + step->__max_needed_to = MAX_NEEDED_FROM; } step->__stateful = 0; diff -durpNa glibc-2.2.2/iconvdata/utf-32.c glibc-2.2.3/iconvdata/utf-32.c --- glibc-2.2.2/iconvdata/utf-32.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/iconvdata/utf-32.c Thu Apr 12 13:22:38 2001 @@ -0,0 +1,270 @@ +/* Conversion module for UTF-32. + Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include +#include +#include +#include +#include + +/* This is the Byte Order Mark character (BOM). */ +#define BOM 0x0000feffu +/* And in the other byte order. */ +#define BOM_OE 0xfffe0000u + + +/* Definitions used in the body of the `gconv' function. */ +#define FROM_LOOP from_utf32_loop +#define TO_LOOP to_utf32_loop +#define DEFINE_INIT 0 +#define DEFINE_FINI 0 +#define MIN_NEEDED_FROM 4 +#define MIN_NEEDED_TO 4 +#define FROM_DIRECTION (dir == from_utf32) +#define PREPARE_LOOP \ + enum direction dir = ((struct utf32_data *) step->__data)->dir; \ + enum variant var = ((struct utf32_data *) step->__data)->var; \ + int swap; \ + if (FROM_DIRECTION && var == UTF_32) \ + { \ + if (data->__invocation_counter == 0) \ + { \ + /* We have to find out which byte order the file is encoded in. */ \ + if (inptr + 4 > inend) \ + return __GCONV_EMPTY_INPUT; \ + \ + if (get32u (inptr) == BOM) \ + /* Simply ignore the BOM character. */ \ + *inptrp = inptr += 4; \ + else if (get32u (inptr) == BOM_OE) \ + { \ + ((struct utf32_data *) step->__data)->swap = 1; \ + *inptrp = inptr += 4; \ + } \ + } \ + } \ + else if (!FROM_DIRECTION && var == UTF_32 && !data->__internal_use \ + && data->__invocation_counter == 0) \ + { \ + /* Emit the Byte Order Mark. */ \ + if (__builtin_expect (outbuf + 4 > outend, 0)) \ + return __GCONV_FULL_OUTPUT; \ + \ + put32u (outbuf, BOM); \ + outbuf += 4; \ + } \ + swap = ((struct utf32_data *) step->__data)->swap; +#define EXTRA_LOOP_ARGS , var, swap + + +/* Direction of the transformation. */ +enum direction +{ + illegal_dir, + to_utf32, + from_utf32 +}; + +enum variant +{ + illegal_var, + UTF_32, + UTF_32LE, + UTF_32BE +}; + +struct utf32_data +{ + enum direction dir; + enum variant var; + int swap; +}; + + +extern int gconv_init (struct __gconv_step *step); +int +gconv_init (struct __gconv_step *step) +{ + /* Determine which direction. */ + struct utf32_data *new_data; + enum direction dir = illegal_dir; + enum variant var = illegal_var; + int result; + + if (__strcasecmp (step->__from_name, "UTF-32//") == 0) + { + dir = from_utf32; + var = UTF_32; + } + else if (__strcasecmp (step->__to_name, "UTF-32//") == 0) + { + dir = to_utf32; + var = UTF_32; + } + else if (__strcasecmp (step->__from_name, "UTF-32BE//") == 0) + { + dir = from_utf32; + var = UTF_32BE; + } + else if (__strcasecmp (step->__to_name, "UTF-32BE//") == 0) + { + dir = to_utf32; + var = UTF_32BE; + } + else if (__strcasecmp (step->__from_name, "UTF-32LE//") == 0) + { + dir = from_utf32; + var = UTF_32LE; + } + else if (__strcasecmp (step->__to_name, "UTF-32LE//") == 0) + { + dir = to_utf32; + var = UTF_32LE; + } + + result = __GCONV_NOCONV; + if (__builtin_expect (dir, to_utf32) != illegal_dir) + { + new_data = (struct utf32_data *) malloc (sizeof (struct utf32_data)); + + result = __GCONV_NOMEM; + if (new_data != NULL) + { + new_data->dir = dir; + new_data->var = var; + new_data->swap = ((var == UTF_32LE && BYTE_ORDER == BIG_ENDIAN) + || (var == UTF_32BE + && BYTE_ORDER == LITTLE_ENDIAN)); + step->__data = new_data; + + if (dir == from_utf32) + { + step->__min_needed_from = MIN_NEEDED_FROM; + step->__max_needed_from = MIN_NEEDED_FROM; + step->__min_needed_to = MIN_NEEDED_TO; + step->__max_needed_to = MIN_NEEDED_TO; + } + else + { + step->__min_needed_from = MIN_NEEDED_TO; + step->__max_needed_from = MIN_NEEDED_TO; + step->__min_needed_to = MIN_NEEDED_FROM; + step->__max_needed_to = MIN_NEEDED_FROM; + } + + step->__stateful = 0; + + result = __GCONV_OK; + } + } + + return result; +} + + +extern void gconv_end (struct __gconv_step *data); +void +gconv_end (struct __gconv_step *data) +{ + free (data->__data); +} + + +/* Convert from the internal (UCS4-like) format to UTF-32. */ +#define MIN_NEEDED_INPUT MIN_NEEDED_TO +#define MIN_NEEDED_OUTPUT MIN_NEEDED_FROM +#define LOOPFCT TO_LOOP +#define BODY \ + { \ + uint32_t c = get32 (inptr); \ + \ + if (__builtin_expect (c >= 0x110000, 0)) \ + { \ + STANDARD_ERR_HANDLER (4); \ + } \ + else if (__builtin_expect (c >= 0xd800 && c < 0xe000, 0)) \ + { \ + /* Surrogate characters in UCS-4 input are not valid. \ + We must catch this. If we let surrogates pass through, \ + attackers could make a security hole exploit by \ + generating "irregular UTF-32" sequences. */ \ + if (! ignore_errors_p ()) \ + { \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + inptr += 4; \ + ++*irreversible; \ + continue; \ + } \ + \ + if (swap) \ + put32 (outptr, bswap_32 (c)); \ + else \ + put32 (outptr, c); \ + \ + outptr += 4; \ + inptr += 4; \ + } +#define LOOP_NEED_FLAGS +#define EXTRA_LOOP_DECLS \ + , enum variant var, int swap +#include + + +/* Convert from UTF-32 to the internal (UCS4-like) format. */ +#define MIN_NEEDED_INPUT MIN_NEEDED_FROM +#define MIN_NEEDED_OUTPUT MIN_NEEDED_TO +#define LOOPFCT FROM_LOOP +#define BODY \ + { \ + uint32_t u1 = get32 (inptr); \ + \ + if (swap) \ + u1 = bswap_32 (u1); \ + \ + if (__builtin_expect (u1 >= 0x110000, 0)) \ + { \ + /* This is illegal. */ \ + if (! ignore_errors_p ()) \ + { \ + /* This is an illegal character. */ \ + result = __GCONV_ILLEGAL_INPUT; \ + break; \ + } \ + \ + inptr += 4; \ + ++*irreversible; \ + continue; \ + } \ + \ + put32 (outptr, u1); \ + inptr += 4; \ + outptr += 4; \ + } +#define LOOP_NEED_FLAGS +#define EXTRA_LOOP_DECLS \ + , enum variant var, int swap +#include + + +/* Now define the toplevel functions. */ +#include diff -durpNa glibc-2.2.2/include/endian.h glibc-2.2.3/include/endian.h --- glibc-2.2.2/include/endian.h Fri Jun 20 18:16:45 1997 +++ glibc-2.2.3/include/endian.h Sat Apr 7 14:02:34 2001 @@ -1 +1,17 @@ #include + +#if defined _LIBC && !defined _ISOMAC +# if __FLOAT_WORD_ORDER == __BIG_ENDIAN +# define BIG_ENDI 1 +# undef LITTLE_ENDI +# define HIGH_HALF 0 +# define LOW_HALF 1 +# else +# if __FLOAT_WORD_ORDER == __LITTLE_ENDIAN +# undef BIG_ENDI +# define LITTLE_ENDI 1 +# define HIGH_HALF 1 +# define LOW_HALF 0 +# endif +# endif +#endif diff -durpNa glibc-2.2.2/include/gnu/libc-version.h glibc-2.2.3/include/gnu/libc-version.h --- glibc-2.2.2/include/gnu/libc-version.h Tue Nov 23 09:36:35 1999 +++ glibc-2.2.3/include/gnu/libc-version.h Mon Mar 26 20:52:52 2001 @@ -1,5 +1,5 @@ /* Interface to GNU libc specific functions for version information. - Copyright (C) 1998, 1999 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2001 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 @@ -25,11 +25,9 @@ __BEGIN_DECLS /* Return string describing release status of currently running GNU libc. */ -extern const char *__gnu_get_libc_release (void) __THROW; extern const char *gnu_get_libc_release (void) __THROW; /* Return string describing version of currently running GNU libc. */ -extern const char *__gnu_get_libc_version (void) __THROW; extern const char *gnu_get_libc_version (void) __THROW; __END_DECLS diff -durpNa glibc-2.2.2/include/libc-internal.h glibc-2.2.3/include/libc-internal.h --- glibc-2.2.2/include/libc-internal.h Sun Dec 31 11:12:37 2000 +++ glibc-2.2.3/include/libc-internal.h Wed Apr 25 14:50:58 2001 @@ -4,6 +4,8 @@ #ifndef _LIBC_INTERNAL # define _LIBC_INTERNAL 1 +#include + /* Initialize the `__libc_enable_secure' flag. */ extern void __libc_init_secure (void); @@ -19,7 +21,7 @@ extern void __cyg_profile_func_enter (vo extern void __cyg_profile_func_exit (void *this_fn, void *call_site); /* Get frequency of the system processor. */ -extern unsigned long long int __get_clockfreq (void); +extern hp_timing_t __get_clockfreq (void); /* Free all allocated resources. */ extern void __libc_freeres (void); diff -durpNa glibc-2.2.2/include/libc-symbols.h glibc-2.2.3/include/libc-symbols.h --- glibc-2.2.2/include/libc-symbols.h Sat Jan 6 20:35:16 2001 +++ glibc-2.2.3/include/libc-symbols.h Mon Mar 26 20:52:52 2001 @@ -1,6 +1,6 @@ /* Support macros for making weak and strong aliases for symbols, and for using symbol sets and linker warnings with GNU ld. - Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1995,1996,1997,1998,2000,2001 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 @@ -154,7 +154,7 @@ # define weak_alias(original, alias) \ .weak C_SYMBOL_NAME (alias) ASM_LINE_SEP \ C_SYMBOL_NAME (alias) = C_SYMBOL_NAME (original) ASM_LINE_SEP \ - .weak C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \ + ASM_GLOBAL_DIRECTIVE C_SYMBOL_DOT_NAME (alias) ASM_LINE_SEP \ C_SYMBOL_DOT_NAME (alias) = C_SYMBOL_DOT_NAME (original) # else # define weak_alias(original, alias) \ diff -durpNa glibc-2.2.2/include/rpc/rpc.h glibc-2.2.3/include/rpc/rpc.h --- glibc-2.2.2/include/rpc/rpc.h Sat Jan 6 20:35:16 2001 +++ glibc-2.2.3/include/rpc/rpc.h Mon Mar 26 20:52:52 2001 @@ -4,4 +4,50 @@ /* Now define the internal interfaces. */ extern unsigned long _create_xid (void); +/* + * Multi-threaded support + * Group all global and static variables into a single spot. + * This area is allocated on a per-thread basis + */ +#ifdef _RPC_THREAD_SAFE_ +struct rpc_thread_variables { + fd_set svc_fdset_s; /* Global, rpc_common.c */ + struct rpc_createerr rpc_createerr_s; /* Global, rpc_common.c */ + struct pollfd *svc_pollfd_s; /* Global, rpc_common.c */ + int svc_max_pollfd_s; /* Global, rpc_common.c */ + + void *authnone_private_s; /* auth_none.c */ + + void *clnt_perr_buf_s; /* clnt_perr.c */ + + void *clntraw_private_s; /* clnt_raw.c */ + + void *callrpc_private_s; /* clnt_simp.c */ + + void *key_call_private_s; /* key_call.c */ + + void *authdes_cache_s; /* svcauth_des.c */ + void *authdes_lru_s; /* svcauth_des.c */ + + void *svc_xports_s; /* svc.c */ + void *svc_head_s; /* svc.c */ + + void *svcraw_private_s; /* svc_raw.c */ + + void *svcsimple_proglst_s; /* svc_simple.c */ + void *svcsimple_transp_s; /* svc_simple.c */ +}; + +extern struct rpc_thread_variables *__rpc_thread_variables(void) + __attribute__ ((const)); +extern void __rpc_thread_svc_cleanup (void); +extern void __rpc_thread_clnt_cleanup (void); +extern void __rpc_thread_key_cleanup (void); + +extern void __rpc_thread_destroy (void); + +#define RPC_THREAD_VARIABLE(x) (__rpc_thread_variables()->x) + +#endif /* _RPC_THREAD_SAFE_ */ + #endif diff -durpNa glibc-2.2.2/include/sys/profil.h glibc-2.2.3/include/sys/profil.h --- glibc-2.2.2/include/sys/profil.h Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/include/sys/profil.h Fri Apr 6 08:22:21 2001 @@ -0,0 +1,9 @@ +#ifndef _PROFIL_H +#include + +/* Now define the internal interfaces. */ + +extern int __sprofil (struct prof *__profp, int __profcnt, + struct timeval *__tvp, unsigned int __flags); + +#endif /* _PROFIL_H */ diff -durpNa glibc-2.2.2/include/sys/socket.h glibc-2.2.3/include/sys/socket.h --- glibc-2.2.2/include/sys/socket.h Fri Feb 9 10:04:07 2001 +++ glibc-2.2.3/include/sys/socket.h Wed Apr 25 14:50:58 2001 @@ -20,7 +20,7 @@ extern int __opensock (void) internal_fu extern int __getpeername (int __fd, __SOCKADDR_ARG __addr, socklen_t *__len); /* Send N bytes of BUF to socket FD. Returns the number sent or -1. */ -extern int __send (int __fd, __const void *__buf, size_t __n, int __flags); +extern ssize_t __send (int __fd, __const void *__buf, size_t __n, int __flags); /* Open a connection on socket FD to peer at ADDR (which LEN bytes long). For connectionless socket types, just set the default address to send to diff -durpNa glibc-2.2.2/include/unistd.h glibc-2.2.3/include/unistd.h --- glibc-2.2.2/include/unistd.h Thu Feb 15 14:08:30 2001 +++ glibc-2.2.3/include/unistd.h Mon Mar 26 20:52:52 2001 @@ -77,7 +77,7 @@ extern int __link (__const char *__from, extern int __symlink (__const char *__from, __const char *__to); extern int __readlink (__const char *__path, char *__buf, size_t __len); extern int __unlink (__const char *__name); -extern int __gethostname (char *__name, socklen_t __len); +extern int __gethostname (char *__name, size_t __len); extern int __profil (unsigned short int *__sample_buffer, size_t __size, size_t __offset, unsigned int __scale); extern int __getdtablesize (void); diff -durpNa glibc-2.2.2/include/wchar.h glibc-2.2.3/include/wchar.h --- glibc-2.2.2/include/wchar.h Fri Feb 9 10:04:06 2001 +++ glibc-2.2.3/include/wchar.h Mon Mar 26 20:52:52 2001 @@ -11,6 +11,7 @@ extern int __wcsncasecmp (__const wchar_ extern size_t __wcslen (__const wchar_t *__s) __attribute_pure__; extern size_t __wcsnlen (__const wchar_t *__s, size_t __maxlen) __attribute_pure__; +extern wchar_t *__wcscat (wchar_t *dest, const wchar_t *src); extern wint_t __btowc (int __c); extern int __mbsinit (__const __mbstate_t *__ps); extern size_t __mbrtowc (wchar_t *__restrict __pwc, diff -durpNa glibc-2.2.2/inet/Makefile glibc-2.2.3/inet/Makefile --- glibc-2.2.2/inet/Makefile Tue Aug 15 11:16:20 2000 +++ glibc-2.2.3/inet/Makefile Mon Mar 26 20:52:52 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1991-1999, 2000 Free Software Foundation, Inc. +# Copyright (C) 1991-1999, 2000, 2001 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 @@ -48,7 +48,7 @@ routines := htonl htons \ in6_addr getnameinfo if_index tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \ - tst-gethnm # tst-ipnode + tst-gethnm include ../Rules diff -durpNa glibc-2.2.2/inet/rcmd.c glibc-2.2.3/inet/rcmd.c --- glibc-2.2.2/inet/rcmd.c Fri Feb 9 10:04:07 2001 +++ glibc-2.2.3/inet/rcmd.c Sat Apr 7 14:02:34 2001 @@ -117,7 +117,7 @@ rcmd_af(ahost, rport, locuser, remuser, char num[8]; ssize_t n; - if (af != AF_INET && af != AF_INET6) + if (af != AF_INET && af != AF_INET6 && af != AF_UNSPEC) { __set_errno (EAFNOSUPPORT); return -1; diff -durpNa glibc-2.2.2/inet/rexec.c glibc-2.2.3/inet/rexec.c --- glibc-2.2.2/inet/rexec.c Tue Oct 31 11:09:52 2000 +++ glibc-2.2.3/inet/rexec.c Sun Apr 8 22:19:10 2001 @@ -117,9 +117,12 @@ retry: } listen(s2, 1); sa2len = sizeof (sa2); - if (getsockname(s2, (struct sockaddr *)&sa2, &sa2len) < 0 || - sa2len != SA_LEN((struct sockaddr *)&sa2)) { + if (getsockname(s2, (struct sockaddr *)&sa2, &sa2len) < 0) { perror("getsockname"); + (void) __close(s2); + goto bad; + } else if (sa2len != SA_LEN((struct sockaddr *)&sa2)) { + __set_errno(EINVAL); (void) __close(s2); goto bad; } diff -durpNa glibc-2.2.2/intl/Makefile glibc-2.2.3/intl/Makefile --- glibc-2.2.2/intl/Makefile Fri Feb 9 10:04:07 2001 +++ glibc-2.2.3/intl/Makefile Wed Apr 25 14:50:59 2001 @@ -25,10 +25,10 @@ routines = bindtextdom dcgettext dgettex finddomain loadmsgcat localealias textdomain \ l10nflist explodename plural distribute = gettext.h gettextP.h hash-string.h loadinfo.h locale.alias \ - plural.y po2test.sed tst-gettext.sh tst-translit.sh \ - translit.po tst-gettext2.sh tstlang1.po tstlang2.po + plural.y po2test.sed tst-gettext.sh tst-translit.sh tst-codeset.sh \ + translit.po tst-gettext2.sh tstlang1.po tstlang2.po tstcodeset.po -test-srcs := tst-gettext tst-translit tst-gettext2 +test-srcs := tst-gettext tst-translit tst-gettext2 tst-codeset tests = tst-ngettext before-compile = $(objpfx)msgs.h @@ -43,10 +43,10 @@ include ../Makeconfig ifneq (no,$(BISON)) plural.c: plural.y $(BISON) $(BISONFLAGS) $@ $^ -endif ifeq ($(with-cvs),yes) test ! -d CVS || cvs $(CVSOPTS) commit -m'$(BISON) $(BISONFLAGS) $@ $^' $@ endif +endif $(objpfx)plural.o: plural.c include ../Rules @@ -54,8 +54,12 @@ include ../Rules ifeq (no,$(cross-compiling)) ifeq (yes,$(build-shared)) ifneq ($(strip $(MSGFMT)),:) -tests: $(objpfx)mtrace-tst-gettext $(objpfx)tst-translit.out \ - $(objpfx)tst-gettext2.out +tests: $(objpfx)tst-translit.out $(objpfx)tst-gettext2.out \ + $(objpfx)tst-codeset.out +ifneq (no,$(PERL)) +tests: $(objpfx)mtrace-tst-gettext +endif +endif $(objpfx)mtrace-tst-gettext: $(objpfx)tst-gettext.out $(common-objpfx)malloc/mtrace $(objpfx)tst-gettext.mtrace > $@ $(objpfx)tst-gettext.out: tst-gettext.sh $(objpfx)tst-gettext @@ -65,7 +69,8 @@ $(objpfx)tst-translit.out: tst-translit. $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ $(objpfx)tst-gettext2.out: tst-gettext2.sh $(objpfx)tst-gettext2 $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ -endif +$(objpfx)tst-codeset.out: tst-codeset.sh $(objpfx)tst-codeset + $(SHELL) -e $< $(common-objpfx) $(common-objpfx)intl/ endif endif @@ -76,10 +81,11 @@ $(objpfx)msgs.h: po2test.sed ../po/de.po CFLAGS-tst-gettext.c = -DTESTSTRS_H=\"$(objpfx)msgs.h\" CFLAGS-tst-gettext2.c = -DOBJPFX=\"$(objpfx)\" CFLAGS-tst-translit.c = -DOBJPFX=\"$(objpfx)\" +CFLAGS-tst-codeset.c = -DOBJPFX=\"$(objpfx)\" $(objpfx)tst-translit.out: $(objpfx)tst-gettext.out -CPPFLAGS += -D'GNULOCALEDIR="$(msgcatdir)"' \ +CPPFLAGS += -D'LOCALEDIR="$(msgcatdir)"' \ -D'LOCALE_ALIAS_PATH="$(msgcatdir)"' BISONFLAGS = --yacc --name-prefix=__gettext --output diff -durpNa glibc-2.2.2/intl/bindtextdom.c glibc-2.2.3/intl/bindtextdom.c --- glibc-2.2.2/intl/bindtextdom.c Sat Jan 6 20:35:19 2001 +++ glibc-2.2.3/intl/bindtextdom.c Mon Apr 9 20:03:25 2001 @@ -1,5 +1,5 @@ /* Implementation of the bindtextdomain(3) function - Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -42,9 +42,8 @@ void free (); #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC @@ -65,6 +64,11 @@ void free (); # define _nl_domain_bindings _nl_domain_bindings__ #endif +/* Some compilers, like SunOS4 cc, don't have offsetof in . */ +#ifndef offsetof +# define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) +#endif + /* @@ end of prolog @@ */ /* Contains the default location of the message catalogs. */ @@ -93,9 +97,10 @@ __libc_rwlock_define (extern, _nl_state_ #endif /* Prototypes for local functions. */ -static void set_binding_values (const char *domainname, const char **dirnamep, - const char **codesetp); - +static void set_binding_values PARAMS ((const char *domainname, + const char **dirnamep, + const char **codesetp)); + /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP to be used for the DOMAINNAME message catalog. If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not @@ -213,6 +218,7 @@ set_binding_values (domainname, dirnamep free (binding->codeset); binding->codeset = result; + ++binding->codeset_cntr; modified = 1; } } @@ -234,7 +240,7 @@ set_binding_values (domainname, dirnamep /* We have to create a new binding. */ size_t len = strlen (domainname) + 1; struct binding *new_binding = - (struct binding *) malloc (sizeof (*new_binding) + len); + (struct binding *) malloc (offsetof (struct binding, domainname) + len); if (__builtin_expect (new_binding == NULL, 0)) goto failed; @@ -276,6 +282,8 @@ set_binding_values (domainname, dirnamep /* The default value. */ new_binding->dirname = (char *) _nl_default_dirname; + new_binding->codeset_cntr = 0; + if (codesetp) { const char *codeset = *codesetp; @@ -296,6 +304,7 @@ set_binding_values (domainname, dirnamep memcpy (result, codeset, len); #endif codeset = result; + ++new_binding->codeset_cntr; } *codesetp = codeset; new_binding->codeset = (char *) codeset; diff -durpNa glibc-2.2.2/intl/dcgettext.c glibc-2.2.3/intl/dcgettext.c --- glibc-2.2.2/intl/dcgettext.c Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/dcgettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of the dcgettext(3) function. - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -20,12 +20,11 @@ # include #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif /* @@ end of prolog @@ */ diff -durpNa glibc-2.2.2/intl/dcigettext.c glibc-2.2.3/intl/dcigettext.c --- glibc-2.2.2/intl/dcigettext.c Wed Jan 10 15:54:26 2001 +++ glibc-2.2.3/intl/dcigettext.c Mon Apr 9 20:03:25 2001 @@ -89,12 +89,11 @@ void free (); # include #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif #include "hash-string.h" @@ -129,6 +128,11 @@ void free (); # define _nl_domain_bindings _nl_domain_bindings__ #endif +/* Some compilers, like SunOS4 cc, don't have offsetof in . */ +#ifndef offsetof +# define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) +#endif + /* @@ end of prolog @@ */ #ifdef _LIBC @@ -190,21 +194,13 @@ static void *mempcpy PARAMS ((void *dest /* XPG3 defines the result of `setlocale (category, NULL)' as: ``Directs `setlocale()' to query `category' and return the current setting of `local'.'' - However it does not specify the exact format. And even worse: POSIX - defines this not at all. So we can use this feature only on selected - system (e.g. those using GNU C Library). */ + However it does not specify the exact format. Neither do SUSV2 and + ISO C 99. So we can use this feature only on selected systems (e.g. + those using GNU C Library). */ #ifdef _LIBC # define HAVE_LOCALE_NULL #endif -/* We want to allocate a string at the end of the struct. gcc makes - this easy. */ -#ifdef __GNUC__ -# define ZERO 0 -#else -# define ZERO 1 -#endif - /* This is the type used for the search tree where known translations are stored. */ struct known_translation_t @@ -241,8 +237,11 @@ static void *root; # endif /* Function to compare two entries in the table of known translations. */ +static int transcmp PARAMS ((const void *p1, const void *p2)); static int -transcmp (const void *p1, const void *p2) +transcmp (p1, p2) + const void *p1; + const void *p2; { const struct known_translation_t *s1; const struct known_translation_t *s2; @@ -274,7 +273,7 @@ const char _nl_default_default_domain[] const char *_nl_current_default_domain = _nl_default_default_domain; /* Contains the default location of the message catalogs. */ -const char _nl_default_dirname[] = GNULOCALEDIR; +const char _nl_default_dirname[] = LOCALEDIR; /* List with bindings of specific domains created by bindtextdomain() calls. */ @@ -336,11 +335,11 @@ struct block_list typedef struct transmem_list { struct transmem_list *next; - char data[0]; + char data[ZERO]; } transmem_block_t; static struct transmem_list *transmem_list; #else -typedef char transmem_block_t; +typedef unsigned char transmem_block_t; #endif @@ -423,8 +422,8 @@ DCIGETTEXT (domainname, msgid1, msgid2, /* Try to find the translation among those which we found at some time. */ - search = - (struct known_translation_t *) alloca (sizeof (*search) + msgid_len); + search = (struct known_translation_t *) + alloca (offsetof (struct known_translation_t, msgid) + msgid_len); memcpy (search->msgid, msgid1, msgid_len); search->domainname = (char *) domainname; search->category = category; @@ -575,7 +574,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, if (domain != NULL) { - retval = _nl_find_msg (domain, msgid1, &retlen); + retval = _nl_find_msg (domain, binding, msgid1, &retlen); if (retval == NULL) { @@ -583,8 +582,8 @@ DCIGETTEXT (domainname, msgid1, msgid2, for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { - retval = _nl_find_msg (domain->successor[cnt], msgid1, - &retlen); + retval = _nl_find_msg (domain->successor[cnt], binding, + msgid1, &retlen); if (retval != NULL) { @@ -607,8 +606,8 @@ DCIGETTEXT (domainname, msgid1, msgid2, struct known_translation_t *newp; newp = (struct known_translation_t *) - malloc (sizeof (*newp) + msgid_len - + domainname_len + 1 - ZERO); + malloc (offsetof (struct known_translation_t, msgid) + + msgid_len + domainname_len + 1); if (newp != NULL) { newp->domainname = @@ -653,8 +652,9 @@ DCIGETTEXT (domainname, msgid1, msgid2, char * internal_function -_nl_find_msg (domain_file, msgid, lengthp) +_nl_find_msg (domain_file, domainbinding, msgid, lengthp) struct loaded_l10nfile *domain_file; + struct binding *domainbinding; const char *msgid; size_t *lengthp; { @@ -664,7 +664,7 @@ _nl_find_msg (domain_file, msgid, length size_t resultlen; if (domain_file->decided == 0) - _nl_load_domain (domain_file); + _nl_load_domain (domain_file, domainbinding); if (domain_file->data == NULL) return NULL; @@ -679,14 +679,15 @@ _nl_find_msg (domain_file, msgid, length nls_uint32 hash_val = hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); - nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); - - if (nstr == 0) - /* Hash table entry is empty. */ - return NULL; while (1) { + nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); + + if (nstr == 0) + /* Hash table entry is empty. */ + return NULL; + /* Compare msgid with the original string at index nstr-1. We compare the lengths with >=, not ==, because plural entries are represented by strings with an embedded NUL. */ @@ -704,11 +705,6 @@ _nl_find_msg (domain_file, msgid, length idx -= domain->hash_size - incr; else idx += incr; - - nstr = W (domain->must_swap, domain->hash_tab[idx]); - if (nstr == 0) - /* Hash table entry is empty. */ - return NULL; } /* NOTREACHED */ } @@ -747,6 +743,16 @@ _nl_find_msg (domain_file, msgid, length resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; #if defined _LIBC || HAVE_ICONV + if (domain->codeset_cntr + != (domainbinding != NULL ? domainbinding->codeset_cntr : 0)) + { + /* The domain's codeset has changed through bind_textdomain_codeset() + since the message catalog was initialized or last accessed. We + have to reinitialize the converter. */ + _nl_free_domain_conv (domain); + _nl_init_domain_conv (domain_file, domain, domainbinding); + } + if ( # ifdef _LIBC domain->conv != (__gconv_t) -1 @@ -798,7 +804,7 @@ _nl_find_msg (domain_file, msgid, length __libc_lock_lock (lock); - inbuf = result; + inbuf = (const unsigned char *) result; outbuf = freemem + sizeof (size_t); malloc_count = 0; @@ -839,7 +845,9 @@ _nl_find_msg (domain_file, msgid, length goto resize_freemem; outleft = freemem_size - sizeof (size_t); - if (iconv (domain->conv, &inptr, &inleft, &outptr, &outleft) + if (iconv (domain->conv, + (ICONV_CONST char **) &inptr, &inleft, + &outptr, &outleft) != (size_t) (-1)) { outbuf = (unsigned char *) outptr; @@ -906,7 +914,7 @@ _nl_find_msg (domain_file, msgid, length /* We have now in our buffer a converted string. Put this into the table of conversions. */ *(size_t *) freemem = outbuf - freemem - sizeof (size_t); - domain->conv_tab[act] = freemem; + domain->conv_tab[act] = (char *) freemem; /* Shrink freemem, but keep it aligned. */ freemem_size -= outbuf - freemem; freemem = outbuf; @@ -980,43 +988,74 @@ plural_eval (pexp, n) struct expression *pexp; unsigned long int n; { - switch (pexp->operation) + switch (pexp->nargs) { - case var: - return n; - case num: - return pexp->val.num; - case mult: - return (plural_eval (pexp->val.args2.left, n) - * plural_eval (pexp->val.args2.right, n)); - case divide: - return (plural_eval (pexp->val.args2.left, n) - / plural_eval (pexp->val.args2.right, n)); - case module: - return (plural_eval (pexp->val.args2.left, n) - % plural_eval (pexp->val.args2.right, n)); - case plus: - return (plural_eval (pexp->val.args2.left, n) - + plural_eval (pexp->val.args2.right, n)); - case minus: - return (plural_eval (pexp->val.args2.left, n) - - plural_eval (pexp->val.args2.right, n)); - case equal: - return (plural_eval (pexp->val.args2.left, n) - == plural_eval (pexp->val.args2.right, n)); - case not_equal: - return (plural_eval (pexp->val.args2.left, n) - != plural_eval (pexp->val.args2.right, n)); - case land: - return (plural_eval (pexp->val.args2.left, n) - && plural_eval (pexp->val.args2.right, n)); - case lor: - return (plural_eval (pexp->val.args2.left, n) - || plural_eval (pexp->val.args2.right, n)); - case qmop: - return (plural_eval (pexp->val.args3.bexp, n) - ? plural_eval (pexp->val.args3.tbranch, n) - : plural_eval (pexp->val.args3.fbranch, n)); + case 0: + switch (pexp->operation) + { + case var: + return n; + case num: + return pexp->val.num; + default: + break; + } + /* NOTREACHED */ + break; + case 1: + { + /* pexp->operation must be lnot. */ + unsigned long int arg = plural_eval (pexp->val.args[0], n); + return ! arg; + } + case 2: + { + unsigned long int leftarg = plural_eval (pexp->val.args[0], n); + if (pexp->operation == lor) + return leftarg || plural_eval (pexp->val.args[1], n); + else if (pexp->operation == land) + return leftarg && plural_eval (pexp->val.args[1], n); + else + { + unsigned long int rightarg = plural_eval (pexp->val.args[1], n); + + switch (pexp->operation) + { + case mult: + return leftarg * rightarg; + case divide: + return leftarg / rightarg; + case module: + return leftarg % rightarg; + case plus: + return leftarg + rightarg; + case minus: + return leftarg - rightarg; + case less_than: + return leftarg < rightarg; + case greater_than: + return leftarg > rightarg; + case less_or_equal: + return leftarg <= rightarg; + case greater_or_equal: + return leftarg >= rightarg; + case equal: + return leftarg == rightarg; + case not_equal: + return leftarg != rightarg; + default: + break; + } + } + /* NOTREACHED */ + break; + } + case 3: + { + /* pexp->operation must be qmop. */ + unsigned long int boolarg = plural_eval (pexp->val.args[0], n); + return plural_eval (pexp->val.args[boolarg ? 1 : 2], n); + } } /* NOTREACHED */ return 0; diff -durpNa glibc-2.2.2/intl/dcngettext.c glibc-2.2.3/intl/dcngettext.c --- glibc-2.2.2/intl/dcngettext.c Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/dcngettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of the dcngettext(3) function. - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -20,12 +20,11 @@ # include #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif /* @@ end of prolog @@ */ diff -durpNa glibc-2.2.2/intl/dgettext.c glibc-2.2.3/intl/dgettext.c --- glibc-2.2.2/intl/dgettext.c Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/dgettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of the dgettext(3) function. - Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -24,10 +24,11 @@ # include #endif +#include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif /* @@ end of prolog @@ */ diff -durpNa glibc-2.2.2/intl/dngettext.c glibc-2.2.3/intl/dngettext.c --- glibc-2.2.2/intl/dngettext.c Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/dngettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of the dngettext(3) function. - Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1997, 2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -24,12 +24,11 @@ # include #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif /* @@ end of prolog @@ */ diff -durpNa glibc-2.2.2/intl/explodename.c glibc-2.2.3/intl/explodename.c --- glibc-2.2.2/intl/explodename.c Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/explodename.c Mon Mar 26 20:52:53 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. The GNU C Library is free software; you can redistribute it and/or @@ -45,7 +45,8 @@ /* @@ end of prolog @@ */ char * -_nl_find_language (const char *name) +_nl_find_language (name) + const char *name; { while (name[0] != '\0' && name[0] != '_' && name[0] != '@' && name[0] != '+' && name[0] != ',') diff -durpNa glibc-2.2.2/intl/finddomain.c glibc-2.2.3/intl/finddomain.c --- glibc-2.2.2/intl/finddomain.c Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/finddomain.c Mon Apr 9 20:03:25 2001 @@ -1,5 +1,5 @@ /* Handle list of needed message catalogs - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. The GNU C Library is free software; you can redistribute it and/or @@ -47,12 +47,11 @@ void free (); # include #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif /* @@ end of prolog @@ */ @@ -108,15 +107,14 @@ _nl_find_domain (dirname, locale, domain be one data set in the list of loaded domains. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, 0, locale, NULL, NULL, - NULL, NULL, NULL, NULL, NULL, domainname, - domainbinding, 0); + NULL, NULL, NULL, NULL, NULL, domainname, 0); if (retval != NULL) { /* We know something about this locale. */ int cnt; if (retval->decided == 0) - _nl_load_domain (retval); + _nl_load_domain (retval, domainbinding); if (retval->data != NULL) return retval; @@ -124,7 +122,7 @@ _nl_find_domain (dirname, locale, domain for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) - _nl_load_domain (retval->successor[cnt]); + _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; @@ -165,21 +163,20 @@ _nl_find_domain (dirname, locale, domain retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, mask, language, territory, codeset, normalized_codeset, modifier, special, - sponsor, revision, domainname, domainbinding, - 1); + sponsor, revision, domainname, 1); if (retval == NULL) /* This means we are out of core. */ return NULL; if (retval->decided == 0) - _nl_load_domain (retval); + _nl_load_domain (retval, domainbinding); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided == 0) - _nl_load_domain (retval->successor[cnt]); + _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } diff -durpNa glibc-2.2.2/intl/gettext.c glibc-2.2.3/intl/gettext.c --- glibc-2.2.2/intl/gettext.c Fri Apr 7 12:09:23 2000 +++ glibc-2.2.3/intl/gettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of gettext(3) function. - Copyright (C) 1995, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -35,13 +35,12 @@ # endif #endif +#include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif - -#include /* @@ end of prolog @@ */ diff -durpNa glibc-2.2.2/intl/gettext.h glibc-2.2.3/intl/gettext.h --- glibc-2.2.2/intl/gettext.h Mon Feb 28 12:34:05 2000 +++ glibc-2.2.3/intl/gettext.h Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Internal header for GNU gettext internationalization functions. - Copyright (C) 1995, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -19,8 +19,6 @@ #ifndef _GETTEXT_H #define _GETTEXT_H 1 -#include - #if HAVE_LIMITS_H || _LIBC # include #endif @@ -37,9 +35,8 @@ /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but - doing that would require that the configure script compile and *run* - the resulting executable. Locally running cross-compiled executables - is usually not possible. */ + as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work + when cross-compiling. */ #if __STDC__ # define UINT_MAX_32_BITS 4294967295U diff -durpNa glibc-2.2.2/intl/gettextP.h glibc-2.2.3/intl/gettextP.h --- glibc-2.2.2/intl/gettextP.h Thu May 4 10:09:25 2000 +++ glibc-2.2.3/intl/gettextP.h Mon Apr 9 20:03:25 2001 @@ -1,5 +1,5 @@ -/* Header describing internals of gettext library - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. +/* Header describing internals of libintl library. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. The GNU C Library is free software; you can redistribute it and/or @@ -20,6 +20,8 @@ #ifndef _GETTEXTP_H #define _GETTEXTP_H +#include /* Get size_t. */ + #ifdef _LIBC # include "../iconv/gconv_int.h" #else @@ -30,6 +32,8 @@ #include "loadinfo.h" +#include "gettext.h" /* Get nls_uint32. */ + /* @@ end of prolog @@ */ #ifndef PARAMS @@ -74,35 +78,35 @@ SWAP (i) plural form. */ struct expression { + int nargs; /* Number of arguments. */ enum operator { + /* Without arguments: */ var, /* The variable "n". */ num, /* Decimal number. */ + /* Unary operators: */ + lnot, /* Logical NOT. */ + /* Binary operators: */ mult, /* Multiplication. */ divide, /* Division. */ module, /* Module operation. */ plus, /* Addition. */ minus, /* Subtraction. */ + less_than, /* Comparison. */ + greater_than, /* Comparison. */ + less_or_equal, /* Comparison. */ + greater_or_equal, /* Comparison. */ equal, /* Comparision for equality. */ not_equal, /* Comparision for inequality. */ land, /* Logical AND. */ lor, /* Logical OR. */ + /* Ternary operators: */ qmop /* Question mark operator. */ } operation; union { unsigned long int num; /* Number value for `num'. */ - struct - { - struct expression *left; /* Left expression in binary operation. */ - struct expression *right; /* Right expression in binary operation. */ - } args2; - struct - { - struct expression *bexp; /* Boolean expression in ?: operation. */ - struct expression *tbranch; /* True-branch in ?: operation. */ - struct expression *fbranch; /* False-branch in ?: operation. */ - } args3; + struct expression *args[3]; /* Up to three arguments. */ } val; }; @@ -115,6 +119,7 @@ struct parse_args }; +/* The representation of an opened message catalog. */ struct loaded_domain { const char *data; @@ -126,6 +131,7 @@ struct loaded_domain struct string_desc *trans_tab; nls_uint32 hash_size; nls_uint32 *hash_tab; + int codeset_cntr; #ifdef _LIBC __gconv_t conv; #else @@ -139,18 +145,28 @@ struct loaded_domain unsigned long int nplurals; }; +/* We want to allocate a string at the end of the struct. But ISO C + doesn't allow zero sized arrays. */ +#ifdef __GNUC__ +# define ZERO 0 +#else +# define ZERO 1 +#endif + +/* A set of settings bound to a message domain. Used to store settings + from bindtextdomain() and bind_textdomain_codeset(). */ struct binding { struct binding *next; char *dirname; + int codeset_cntr; /* Incremented each time codeset changes. */ char *codeset; -#ifdef __GNUC__ - char domainname[0]; -#else - char domainname[1]; -#endif + char domainname[ZERO]; }; +/* A counter which is incremented each time some previous translations + become invalid. + This variable is part of the external ABI of the GNU libintl. */ extern int _nl_msg_cat_cntr; struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, @@ -158,38 +174,80 @@ struct loaded_l10nfile *_nl_find_domain const char *__domainname, struct binding *__domainbinding)) internal_function; -void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain)) +void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain, + struct binding *__domainbinding)) internal_function; void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) internal_function; +const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file, + struct loaded_domain *__domain, + struct binding *__domainbinding)) + internal_function; +void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain)) + internal_function; + +char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, + struct binding *domainbinding, + const char *msgid, size_t *lengthp)) + internal_function; #ifdef _LIBC -extern char *__ngettext PARAMS ((const char *msgid1, const char *msgid2, - unsigned long int n)); -extern char *__dngettext PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, unsigned long int n)); -extern char *__dcngettext PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, unsigned long int n, - int category)); -extern char *__dcigettext PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, int plural, - unsigned long int n, int category)); +extern char *__gettext PARAMS ((const char *__msgid)); +extern char *__dgettext PARAMS ((const char *__domainname, + const char *__msgid)); +extern char *__dcgettext PARAMS ((const char *__domainname, + const char *__msgid, int __category)); +extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2, + unsigned long int __n)); +extern char *__dngettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int n)); +extern char *__dcngettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n, int __category)); +extern char *__dcigettext PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category)); +extern char *__textdomain PARAMS ((const char *__domainname)); +extern char *__bindtextdomain PARAMS ((const char *__domainname, + const char *__dirname)); +extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname, + const char *__codeset)); #else -extern char *ngettext__ PARAMS ((const char *msgid1, const char *msgid2, - unsigned long int n)); -extern char *dngettext__ PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, unsigned long int n)); -extern char *dcngettext__ PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, unsigned long int n, - int category)); -extern char *dcigettext__ PARAMS ((const char *domainname, const char *msgid1, - const char *msgid2, int plural, - unsigned long int n, int category)); +extern char *gettext__ PARAMS ((const char *__msgid)); +extern char *dgettext__ PARAMS ((const char *__domainname, + const char *__msgid)); +extern char *dcgettext__ PARAMS ((const char *__domainname, + const char *__msgid, int __category)); +extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2, + unsigned long int __n)); +extern char *dngettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n)); +extern char *dcngettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + unsigned long int __n, int __category)); +extern char *dcigettext__ PARAMS ((const char *__domainname, + const char *__msgid1, const char *__msgid2, + int __plural, unsigned long int __n, + int __category)); +extern char *textdomain__ PARAMS ((const char *__domainname)); +extern char *bindtextdomain__ PARAMS ((const char *__domainname, + const char *__dirname)); +extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname, + const char *__codeset)); #endif -extern int __gettextdebug; -extern void __gettext_free_exp (struct expression *exp) internal_function; -extern int __gettextparse (void *arg); +#ifdef _LIBC +extern void __gettext_free_exp PARAMS ((struct expression *exp)) + internal_function; +extern int __gettextparse PARAMS ((void *arg)); +#else +extern void gettext_free_exp__ PARAMS ((struct expression *exp)) + internal_function; +extern int gettextparse__ PARAMS ((void *arg)); +#endif /* @@ begin of epilog @@ */ diff -durpNa glibc-2.2.2/intl/l10nflist.c glibc-2.2.3/intl/l10nflist.c --- glibc-2.2.2/intl/l10nflist.c Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/l10nflist.c Mon Apr 9 20:03:25 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. The GNU C Library is free software; you can redistribute it and/or @@ -175,7 +175,7 @@ pop (x) struct loaded_l10nfile * _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, territory, codeset, normalized_codeset, modifier, special, - sponsor, revision, filename, domainbinding, do_allocate) + sponsor, revision, filename, do_allocate) struct loaded_l10nfile **l10nfile_list; const char *dirlist; size_t dirlist_len; @@ -189,7 +189,6 @@ _nl_make_l10nflist (l10nfile_list, dirli const char *sponsor; const char *revision; const char *filename; - struct binding *domainbinding; int do_allocate; { char *abs_filename; @@ -310,7 +309,6 @@ _nl_make_l10nflist (l10nfile_list, dirli return NULL; retval->filename = abs_filename; - retval->domainbinding = domainbinding; retval->decided = (__argz_count (dirlist, dirlist_len) != 1 || ((mask & XPG_CODESET) != 0 && (mask & XPG_NORM_CODESET) != 0)); @@ -346,8 +344,7 @@ _nl_make_l10nflist (l10nfile_list, dirli = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, language, territory, codeset, normalized_codeset, modifier, special, - sponsor, revision, filename, domainbinding, - 1); + sponsor, revision, filename, 1); } retval->successor[entries] = NULL; @@ -389,7 +386,7 @@ _nl_normalize_codeset (codeset, name_len for (cnt = 0; cnt < name_len; ++cnt) if (isalpha (codeset[cnt])) - *wp++ = _tolower (codeset[cnt]); + *wp++ = tolower (codeset[cnt]); else if (isdigit (codeset[cnt])) *wp++ = codeset[cnt]; diff -durpNa glibc-2.2.2/intl/loadinfo.h glibc-2.2.3/intl/loadinfo.h --- glibc-2.2.2/intl/loadinfo.h Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/loadinfo.h Mon Apr 9 20:03:25 2001 @@ -55,7 +55,6 @@ struct loaded_l10nfile { const char *filename; - struct binding *domainbinding; int decided; const void *data; @@ -80,8 +79,7 @@ _nl_make_l10nflist PARAMS ((struct loade const char *normalized_codeset, const char *modifier, const char *special, const char *sponsor, const char *revision, - const char *filename, - struct binding *domainbinding, int do_allocate)); + const char *filename, int do_allocate)); extern const char *_nl_expand_alias PARAMS ((const char *name)); @@ -98,10 +96,5 @@ extern int _nl_explode_name PARAMS ((cha const char **revision)); extern char *_nl_find_language PARAMS ((const char *name)); - - -extern char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file, - const char *msgid, size_t *lengthp)) - internal_function; #endif /* loadinfo.h */ diff -durpNa glibc-2.2.2/intl/loadmsgcat.c glibc-2.2.3/intl/loadmsgcat.c --- glibc-2.2.2/intl/loadmsgcat.c Fri Feb 9 10:04:07 2001 +++ glibc-2.2.3/intl/loadmsgcat.c Mon Apr 9 20:03:25 2001 @@ -33,6 +33,23 @@ #include #include +#ifdef __GNUC__ +# define alloca __builtin_alloca +# define HAVE_ALLOCA 1 +#else +# if defined HAVE_ALLOCA_H || defined _LIBC +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca +char *alloca (); +# endif +# endif +# endif +#endif + #if defined STDC_HEADERS || defined _LIBC # include #endif @@ -81,6 +98,25 @@ # define munmap __munmap #endif +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define PLURAL_PARSE __gettextparse +#else +# define PLURAL_PARSE gettextparse__ +#endif + +/* For those losing systems which don't have `alloca' we have to add + some additional code emulating it. */ +#ifdef HAVE_ALLOCA +# define freea(p) /* nothing */ +#else +# define alloca(n) malloc (n) +# define freea(p) free (p) +#endif + /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ @@ -93,10 +129,12 @@ int _nl_msg_cat_cntr; form determination. It represents the expression "n != 1". */ static const struct expression plvar = { + .nargs = 0, .operation = var, }; static const struct expression plone = { + .nargs = 0, .operation = num, .val = { @@ -105,13 +143,14 @@ static const struct expression plone = }; static struct expression germanic_plural = { + .nargs = 2, .operation = not_equal, .val = { - .args2 = + .args = { - .left = (struct expression *) &plvar, - .right = (struct expression *) &plone + [0] = (struct expression *) &plvar, + [1] = (struct expression *) &plone } } }; @@ -132,14 +171,17 @@ init_germanic_plural () { if (plone.val.num == 0) { + plvar.nargs = 0; plvar.operation = var; + plone.nargs = 0; plone.operation = num; plone.val.num = 1; + germanic_plural.nargs = 2; germanic_plural.operation = not_equal; - germanic_plural.val.args2.left = &plvar; - germanic_plural.val.args2.right = &plone; + germanic_plural.val.args[0] = &plvar; + germanic_plural.val.args[1] = &plone; } } @@ -148,25 +190,166 @@ init_germanic_plural () #endif +/* Initialize the codeset dependent parts of an opened message catalog. + Return the header entry. */ +const char * +internal_function +_nl_init_domain_conv (domain_file, domain, domainbinding) + struct loaded_l10nfile *domain_file; + struct loaded_domain *domain; + struct binding *domainbinding; +{ + /* Find out about the character set the file is encoded with. + This can be found (in textual form) in the entry "". If this + entry does not exist or if this does not contain the `charset=' + information, we will assume the charset matches the one the + current locale and we don't have to perform any conversion. */ + char *nullentry; + size_t nullentrylen; + + /* Preinitialize fields, to avoid recursion during _nl_find_msg. */ + domain->codeset_cntr = + (domainbinding != NULL ? domainbinding->codeset_cntr : 0); +#ifdef _LIBC + domain->conv = (__gconv_t) -1; +#else +# if HAVE_ICONV + domain->conv = (iconv_t) -1; +# endif +#endif + domain->conv_tab = NULL; + + /* Get the header entry. */ + nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen); + + if (nullentry != NULL) + { +#if defined _LIBC || HAVE_ICONV + const char *charsetstr; + + charsetstr = strstr (nullentry, "charset="); + if (charsetstr != NULL) + { + size_t len; + char *charset; + const char *outcharset; + + charsetstr += strlen ("charset="); + len = strcspn (charsetstr, " \t\n"); + + charset = (char *) alloca (len + 1); +# if defined _LIBC || HAVE_MEMPCPY + *((char *) mempcpy (charset, charsetstr, len)) = '\0'; +# else + memcpy (charset, charsetstr, len); + charset[len] = '\0'; +# endif + + /* The output charset should normally be determined by the + locale. But sometimes the locale is not used or not correctly + set up, so we provide a possibility for the user to override + this. Moreover, the value specified through + bind_textdomain_codeset overrides both. */ + if (domainbinding != NULL && domainbinding->codeset != NULL) + outcharset = domainbinding->codeset; + else + { + outcharset = getenv ("OUTPUT_CHARSET"); + if (outcharset == NULL || outcharset[0] == '\0') + { +# ifdef _LIBC + outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; +# else +# if HAVE_ICONV + extern const char *locale_charset (void); + outcharset = locale_charset (); +# endif +# endif + } + } + +# ifdef _LIBC + /* We always want to use transliteration. */ + outcharset = norm_add_slashes (outcharset, "TRANSLIT"); + charset = norm_add_slashes (charset, NULL); + if (__gconv_open (outcharset, charset, &domain->conv, + GCONV_AVOID_NOCONV) + != __GCONV_OK) + domain->conv = (__gconv_t) -1; +# else +# if HAVE_ICONV + /* When using GNU libiconv, we want to use transliteration. */ +# if _LIBICONV_VERSION + len = strlen (outcharset); + { + char *tmp = (char *) alloca (len + 10 + 1); + memcpy (tmp, outcharset, len); + memcpy (tmp + len, "//TRANSLIT", 10 + 1); + outcharset = tmp; + } +# endif + domain->conv = iconv_open (outcharset, charset); +# if _LIBICONV_VERSION + freea (outcharset); +# endif +# endif +# endif + + freea (charset); + } +#endif /* _LIBC || HAVE_ICONV */ + } + + return nullentry; +} + +/* Frees the codeset dependent parts of an opened message catalog. */ +void +internal_function +_nl_free_domain_conv (domain) + struct loaded_domain *domain; +{ + if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) + free (domain->conv_tab); + +#ifdef _LIBC + if (domain->conv != (__gconv_t) -1) + __gconv_close (domain->conv); +#else +# if HAVE_ICONV + if (domain->conv != (iconv_t) -1) + iconv_close (domain->conv); +# endif +#endif +} + /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function -_nl_load_domain (domain_file) +_nl_load_domain (domain_file, domainbinding) struct loaded_l10nfile *domain_file; + struct binding *domainbinding; { int fd; size_t size; +#ifdef _LIBC struct stat64 st; +#else + struct stat st; +#endif struct mo_file_header *data = (struct mo_file_header *) -1; int use_mmap = 0; struct loaded_domain *domain; - char *nullentry; - size_t nullentrylen; + const char *nullentry; domain_file->decided = 1; domain_file->data = NULL; + /* Note that it would be useless to store domainbinding in domain_file + because domainbinding might be == NULL now but != NULL later (after + a call to bind_textdomain_codeset). */ + /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN @@ -180,7 +363,12 @@ _nl_load_domain (domain_file) return; /* We must know about the size of the file. */ - if (__builtin_expect (fstat64 (fd, &st) != 0, 0) + if ( +#ifdef _LIBC + __builtin_expect (fstat64 (fd, &st) != 0, 0) +#else + __builtin_expect (fstat (fd, &st) != 0, 0) +#endif || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0) || __builtin_expect (size < sizeof (struct mo_file_header), 0)) { @@ -287,85 +475,10 @@ _nl_load_domain (domain_file) return; } - /* Now find out about the character set the file is encoded with. - This can be found (in textual form) in the entry "". If this - entry does not exist or if this does not contain the `charset=' - information, we will assume the charset matches the one the - current locale and we don't have to perform any conversion. */ -#ifdef _LIBC - domain->conv = (__gconv_t) -1; -#else -# if HAVE_ICONV - domain->conv = (iconv_t) -1; -# endif -#endif - domain->conv_tab = NULL; - nullentry = _nl_find_msg (domain_file, "", &nullentrylen); - if (nullentry != NULL) - { -#if defined _LIBC || HAVE_ICONV - const char *charsetstr; - - charsetstr = strstr (nullentry, "charset="); - if (charsetstr != NULL) - { - size_t len; - char *charset; - const char *outcharset; - - charsetstr += strlen ("charset="); - len = strcspn (charsetstr, " \t\n"); - - charset = (char *) alloca (len + 1); -# if defined _LIBC || HAVE_MEMPCPY - *((char *) mempcpy (charset, charsetstr, len)) = '\0'; -# else - memcpy (charset, charsetstr, len); - charset[len] = '\0'; -# endif - - /* The output charset should normally be determined by the - locale. But sometimes the locale is not used or not correctly - set up, so we provide a possibility for the user to override - this. Moreover, the value specified through - bind_textdomain_codeset overrides both. */ - if (domain_file->domainbinding != NULL - && domain_file->domainbinding->codeset != NULL) - outcharset = domain_file->domainbinding->codeset; - else - { - outcharset = getenv ("OUTPUT_CHARSET"); - if (outcharset == NULL || outcharset[0] == '\0') - { -# ifdef _LIBC - outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string; -# else -# if HAVE_ICONV - extern const char *locale_charset (void); - outcharset = locale_charset (); - if (outcharset == NULL) - outcharset = ""; -# endif -# endif - } - } - -# ifdef _LIBC - /* We always want to use transliteration. */ - outcharset = norm_add_slashes (outcharset, "TRANSLIT"); - charset = norm_add_slashes (charset, NULL); - if (__gconv_open (outcharset, charset, &domain->conv, - GCONV_AVOID_NOCONV) - != __GCONV_OK) - domain->conv = (__gconv_t) -1; -# else -# if HAVE_ICONV - domain->conv = iconv_open (outcharset, charset); -# endif -# endif - } -#endif /* _LIBC || HAVE_ICONV */ - } + /* Now initialize the character set converter from the character set + the file is encoded with (found in the header entry) to the domain's + specified character set or the locale's character set. */ + nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding); /* Also look for a plural specification. */ if (nullentry != NULL) @@ -381,12 +494,19 @@ _nl_load_domain (domain_file) { /* First get the number. */ char *endp; + unsigned long int n; struct parse_args args; nplurals += 9; while (*nplurals != '\0' && isspace (*nplurals)) ++nplurals; - domain->nplurals = strtoul (nplurals, &endp, 10); +#if defined HAVE_STRTOUL || defined _LIBC + n = strtoul (nplurals, &endp, 10); +#else + for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) + n = n * 10 + (*endp - '0'); +#endif + domain->nplurals = n; if (nplurals == endp) goto no_plural; @@ -396,7 +516,7 @@ _nl_load_domain (domain_file) is passed down to the parser. */ plural += 7; args.cp = plural; - if (__gettextparse (&args) != 0) + if (PLURAL_PARSE (&args) != 0) goto no_plural; domain->plural = args.res; } @@ -423,11 +543,7 @@ _nl_unload_domain (domain) if (domain->plural != &germanic_plural) __gettext_free_exp (domain->plural); - if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1) - free (domain->conv_tab); - - if (domain->conv != (__gconv_t) -1) - __gconv_close (domain->conv); + _nl_free_domain_conv (domain); # ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) diff -durpNa glibc-2.2.2/intl/locale.alias glibc-2.2.3/intl/locale.alias --- glibc-2.2.2/intl/locale.alias Thu Nov 16 11:12:01 2000 +++ glibc-2.2.3/intl/locale.alias Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ # Locale name alias data base. -# Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +# Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -26,8 +26,8 @@ # it with the rest of us. Send it using the `glibcbug' script to # bugs@gnu.org. -bokmal nb_NO.ISO-8859-1 -bokmål nb_NO.ISO-8859-1 +bokmal no_NO.ISO-8859-1 +bokmål no_NO.ISO-8859-1 catalan ca_ES.ISO-8859-1 croatian hr_HR.ISO-8859-2 czech cs_CZ.ISO-8859-2 @@ -59,6 +59,7 @@ korean.euc ko_KR.eucKR ko_KR ko_KR.eucKR lithuanian lt_LT.ISO-8859-13 nb_NO no_NO.ISO-8859-1 +nb_NO.ISO-8859-1 no_NO.ISO-8859-1 norwegian no_NO.ISO-8859-1 nynorsk nn_NO.ISO-8859-1 polish pl_PL.ISO-8859-2 diff -durpNa glibc-2.2.2/intl/localealias.c glibc-2.2.3/intl/localealias.c --- glibc-2.2.2/intl/localealias.c Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/localealias.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Handle aliases for locale names. - Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -73,7 +73,6 @@ void free (); # endif #endif -#include "gettext.h" #include "gettextP.h" /* @@ end of prolog @@ */ @@ -99,40 +98,14 @@ __libc_lock_define_initialized (static, # define internal_function #endif -/* For those loosing systems which don't have `alloca' we have to add +/* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA -/* Nothing has to be done. */ -# define ADD_BLOCK(list, address) /* nothing */ -# define FREE_BLOCKS(list) /* nothing */ +# define freea(p) /* nothing */ #else -struct block_list -{ - void *address; - struct block_list *next; -}; -# define ADD_BLOCK(list, addr) \ - do { \ - struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ - /* If we cannot get a free block we cannot add the new element to \ - the list. */ \ - if (newp != NULL) { \ - newp->address = (addr); \ - newp->next = (list); \ - (list) = newp; \ - } \ - } while (0) -# define FREE_BLOCKS(list) \ - do { \ - while (list != NULL) { \ - struct block_list *old = list; \ - list = list->next; \ - free (old); \ - } \ - } while (0) -# undef alloca -# define alloca(size) (malloc (size)) -#endif /* have alloca */ +# define alloca(n) malloc (n) +# define freea(p) free (p) +#endif #if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED # undef fgets @@ -235,16 +208,12 @@ read_alias_file (fname, fname_len) const char *fname; int fname_len; { -#ifndef HAVE_ALLOCA - struct block_list *block_list = NULL; -#endif FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); - ADD_BLOCK (block_list, full_fname); #ifdef HAVE_MEMPCPY mempcpy (mempcpy (full_fname, fname, fname_len), aliasfile, sizeof aliasfile); @@ -254,11 +223,9 @@ read_alias_file (fname, fname_len) #endif fp = fopen (full_fname, "r"); + freea (full_fname); if (fp == NULL) - { - FREE_BLOCKS (block_list); - return 0; - } + return 0; added = 0; while (!feof (fp)) @@ -331,10 +298,7 @@ read_alias_file (fname, fname_len) if (nmap >= maxmap) if (__builtin_expect (extend_alias_table (), 0)) - { - FREE_BLOCKS (block_list); - return added; - } + return added; alias_len = strlen (alias) + 1; value_len = strlen (value) + 1; @@ -347,10 +311,7 @@ read_alias_file (fname, fname_len) ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) - { - FREE_BLOCKS (block_list); - return added; - } + return added; if (__builtin_expect (string_space != new_pool, 0)) { @@ -389,7 +350,6 @@ read_alias_file (fname, fname_len) qsort (map, nmap, sizeof (struct alias_map), (int (*) PARAMS ((const void *, const void *))) alias_compare); - FREE_BLOCKS (block_list); return added; } diff -durpNa glibc-2.2.2/intl/ngettext.c glibc-2.2.3/intl/ngettext.c --- glibc-2.2.2/intl/ngettext.c Mon May 1 14:56:37 2000 +++ glibc-2.2.3/intl/ngettext.c Mon Mar 26 20:52:53 2001 @@ -1,5 +1,5 @@ /* Implementation of ngettext(3) function. - Copyright (C) 1995, 1997, 2000 Free Software Foundation, Inc. + Copyright (C) 1995, 1997, 2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -35,12 +35,11 @@ # endif #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif #include diff -durpNa glibc-2.2.2/intl/plural.c glibc-2.2.3/intl/plural.c --- glibc-2.2.2/intl/plural.c Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/plural.c Mon Mar 26 20:52:53 2001 @@ -11,7 +11,11 @@ #define yychar __gettextchar #define yydebug __gettextdebug #define yynerrs __gettextnerrs -#define NUMBER 257 +#define EQUOP2 257 +#define CMPOP2 258 +#define ADDOP2 259 +#define MULOP2 260 +#define NUMBER 261 #line 1 "plural.y" @@ -38,25 +42,127 @@ # include #endif -#include #include -#include "gettext.h" #include "gettextP.h" +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define FREE_EXPRESSION __gettext_free_exp +#else +# define FREE_EXPRESSION gettext_free_exp__ +# define __gettextparse gettextparse__ +#endif + #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg -#line 36 "plural.y" +#line 45 "plural.y" typedef union { unsigned long int num; + enum operator op; struct expression *exp; } YYSTYPE; -#line 41 "plural.y" +#line 51 "plural.y" /* Prototypes for local functions. */ -static struct expression *new_exp (enum operator op, int n, ...); -static int yylex (YYSTYPE *lval, const char **pexp); -static void yyerror (const char *str); +static struct expression *new_exp PARAMS ((int nargs, enum operator op, + struct expression * const *args)); +static inline struct expression *new_exp_0 PARAMS ((enum operator op)); +static inline struct expression *new_exp_1 PARAMS ((enum operator op, + struct expression *right)); +static struct expression *new_exp_2 PARAMS ((enum operator op, + struct expression *left, + struct expression *right)); +static inline struct expression *new_exp_3 PARAMS ((enum operator op, + struct expression *bexp, + struct expression *tbranch, + struct expression *fbranch)); +static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); +static void yyerror PARAMS ((const char *str)); + +/* Allocation of expressions. */ + +static struct expression * +new_exp (nargs, op, args) + int nargs; + enum operator op; + struct expression * const *args; +{ + int i; + struct expression *newp; + + /* If any of the argument could not be malloc'ed, just return NULL. */ + for (i = nargs - 1; i >= 0; i--) + if (args[i] == NULL) + goto fail; + + /* Allocate a new expression. */ + newp = (struct expression *) malloc (sizeof (*newp)); + if (newp != NULL) + { + newp->nargs = nargs; + newp->operation = op; + for (i = nargs - 1; i >= 0; i--) + newp->val.args[i] = args[i]; + return newp; + } + + fail: + for (i = nargs - 1; i >= 0; i--) + FREE_EXPRESSION (args[i]); + + return NULL; +} + +static inline struct expression * +new_exp_0 (op) + enum operator op; +{ + return new_exp (0, op, NULL); +} + +static inline struct expression * +new_exp_1 (op, right) + enum operator op; + struct expression *right; +{ + struct expression *args[1]; + + args[0] = right; + return new_exp (1, op, args); +} + +static struct expression * +new_exp_2 (op, left, right) + enum operator op; + struct expression *left; + struct expression *right; +{ + struct expression *args[2]; + + args[0] = left; + args[1] = right; + return new_exp (2, op, args); +} + +static inline struct expression * +new_exp_3 (op, bexp, tbranch, fbranch) + enum operator op; + struct expression *bexp; + struct expression *tbranch; + struct expression *fbranch; +{ + struct expression *args[3]; + + args[0] = bexp; + args[1] = tbranch; + args[2] = fbranch; + return new_exp (3, op, args); +} + #include #ifndef __cplusplus @@ -67,24 +173,24 @@ static void yyerror (const char *str); -#define YYFINAL 31 +#define YYFINAL 27 #define YYFLAG -32768 -#define YYNTBASE 18 +#define YYNTBASE 16 -#define YYTRANSLATE(x) ((unsigned)(x) <= 257 ? yytranslate[x] : 20) +#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18) static const char yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 7, 2, 2, 2, 12, 5, 2, 16, - 17, 10, 8, 2, 9, 2, 11, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 14, 2, 2, - 6, 2, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 10, 2, 2, 2, 2, 5, 2, 14, + 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, + 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -99,30 +205,30 @@ static const char yytranslate[] = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 13 + 2, 2, 2, 2, 2, 1, 6, 7, 8, 9, + 11 }; #if YYDEBUG != 0 static const short yyprhs[] = { 0, - 0, 2, 8, 12, 16, 20, 24, 28, 32, 36, - 40, 44, 46, 48 + 0, 2, 8, 12, 16, 20, 24, 28, 32, 35, + 37, 39 }; -static const short yyrhs[] = { 19, - 0, 19, 3, 19, 14, 19, 0, 19, 4, 19, - 0, 19, 5, 19, 0, 19, 6, 19, 0, 19, - 7, 19, 0, 19, 8, 19, 0, 19, 9, 19, - 0, 19, 10, 19, 0, 19, 11, 19, 0, 19, - 12, 19, 0, 15, 0, 13, 0, 16, 19, 17, - 0 +static const short yyrhs[] = { 17, + 0, 17, 3, 17, 12, 17, 0, 17, 4, 17, + 0, 17, 5, 17, 0, 17, 6, 17, 0, 17, + 7, 17, 0, 17, 8, 17, 0, 17, 9, 17, + 0, 10, 17, 0, 13, 0, 11, 0, 14, 17, + 15, 0 }; #endif #if YYDEBUG != 0 static const short yyrline[] = { 0, - 59, 65, 70, 75, 80, 85, 90, 95, 100, 105, - 110, 115, 120, 126 + 170, 178, 182, 186, 190, 194, 198, 202, 206, 210, + 214, 219 }; #endif @@ -130,67 +236,61 @@ static const short yyrline[] = { 0, #if YYDEBUG != 0 || defined (YYERROR_VERBOSE) static const char * const yytname[] = { "$","error","$undefined.","'?'","'|'", -"'&'","'='","'!'","'+'","'-'","'*'","'/'","'%'","NUMBER","':'","'n'","'('","')'", +"'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'", "start","exp", NULL }; #endif static const short yyr1[] = { 0, - 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19 + 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17 }; static const short yyr2[] = { 0, - 1, 5, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 1, 1, 3 + 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, + 1, 3 }; static const short yydefact[] = { 0, - 13, 12, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 14, 0, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 0, 2, 0, 0, - 0 + 0, 11, 10, 0, 1, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 0, 3, 4, 5, 6, + 7, 8, 0, 2, 0, 0, 0 }; -static const short yydefgoto[] = { 29, - 4 +static const short yydefgoto[] = { 25, + 5 }; -static const short yypact[] = { 58, --32768,-32768, 58, 37, 10, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58,-32768, 25, 45, 52, 57, - 57, 65, 65,-32768,-32768,-32768, 58, 37, 1, 2, --32768 +static const short yypact[] = { -9, + -9,-32768,-32768, -9, 34,-32768, 11, -9, -9, -9, + -9, -9, -9, -9,-32768, 24, 39, 43, 16, 26, + -3,-32768, -9, 34, 21, 53,-32768 }; static const short yypgoto[] = {-32768, - -3 + -1 }; -#define YYLAST 77 +#define YYLAST 53 -static const short yytable[] = { 5, - 30, 31, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 0, 28, 0, 0, 16, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 0, 27, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 8, - 9, 10, 11, 12, 13, 14, 15, 9, 10, 11, - 12, 13, 14, 15, 11, 12, 13, 14, 15, 0, - 1, 0, 2, 3, 13, 14, 15 +static const short yytable[] = { 6, + 1, 2, 7, 3, 4, 14, 16, 17, 18, 19, + 20, 21, 22, 8, 9, 10, 11, 12, 13, 14, + 26, 24, 12, 13, 14, 15, 8, 9, 10, 11, + 12, 13, 14, 13, 14, 23, 8, 9, 10, 11, + 12, 13, 14, 10, 11, 12, 13, 14, 11, 12, + 13, 14, 27 }; -static const short yycheck[] = { 3, - 0, 0, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, -1, 27, -1, -1, 17, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, -1, 14, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 5, - 6, 7, 8, 9, 10, 11, 12, 6, 7, 8, - 9, 10, 11, 12, 8, 9, 10, 11, 12, -1, - 13, -1, 15, 16, 10, 11, 12 +static const short yycheck[] = { 1, + 10, 11, 4, 13, 14, 9, 8, 9, 10, 11, + 12, 13, 14, 3, 4, 5, 6, 7, 8, 9, + 0, 23, 7, 8, 9, 15, 3, 4, 5, 6, + 7, 8, 9, 8, 9, 12, 3, 4, 5, 6, + 7, 8, 9, 5, 6, 7, 8, 9, 6, 7, + 8, 9, 0 }; #define YYPURE 1 @@ -738,100 +838,78 @@ yyreduce: switch (yyn) { case 1: -#line 60 "plural.y" +#line 171 "plural.y" { + if (yyvsp[0].exp == NULL) + YYABORT; ((struct parse_args *) arg)->res = yyvsp[0].exp; ; break;} case 2: -#line 66 "plural.y" +#line 179 "plural.y" { - if ((yyval.exp = new_exp (qmop, 3, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 3: -#line 71 "plural.y" +#line 183 "plural.y" { - if ((yyval.exp = new_exp (lor, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 4: -#line 76 "plural.y" +#line 187 "plural.y" { - if ((yyval.exp = new_exp (land, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 5: -#line 81 "plural.y" +#line 191 "plural.y" { - if ((yyval.exp = new_exp (equal, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 6: -#line 86 "plural.y" +#line 195 "plural.y" { - if ((yyval.exp = new_exp (not_equal, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 7: -#line 91 "plural.y" +#line 199 "plural.y" { - if ((yyval.exp = new_exp (plus, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 8: -#line 96 "plural.y" +#line 203 "plural.y" { - if ((yyval.exp = new_exp (minus, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp); ; break;} case 9: -#line 101 "plural.y" +#line 207 "plural.y" { - if ((yyval.exp = new_exp (mult, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_1 (lnot, yyvsp[0].exp); ; break;} case 10: -#line 106 "plural.y" +#line 211 "plural.y" { - if ((yyval.exp = new_exp (divide, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + yyval.exp = new_exp_0 (var); ; break;} case 11: -#line 111 "plural.y" +#line 215 "plural.y" { - if ((yyval.exp = new_exp (module, 2, yyvsp[-2].exp, yyvsp[0].exp)) == NULL) - YYABORT + if ((yyval.exp = new_exp_0 (num)) != NULL) + yyval.exp->val.num = yyvsp[0].num; ; break;} case 12: -#line 116 "plural.y" -{ - if ((yyval.exp = new_exp (var, 0)) == NULL) - YYABORT - ; - break;} -case 13: -#line 121 "plural.y" -{ - if ((yyval.exp = new_exp (num, 0)) == NULL) - YYABORT; - yyval.exp->val.num = yyvsp[0].num - ; - break;} -case 14: -#line 127 "plural.y" +#line 220 "plural.y" { - yyval.exp = yyvsp[-1].exp + yyval.exp = yyvsp[-1].exp; ; break;} } @@ -1056,73 +1134,29 @@ yyerrhandle: } return 1; } -#line 132 "plural.y" - - -static struct expression * -new_exp (enum operator op, int n, ...) -{ - struct expression *newp = (struct expression *) calloc (1, sizeof (*newp)); - va_list va; - - va_start (va, n); - - if (newp == NULL) - while (n-- > 0) - __gettext_free_exp (va_arg (va, struct expression *)); - else - { - newp->operation = op; - if (n > 0) - { - newp->val.args3.bexp = va_arg (va, struct expression *); - newp->val.args3.tbranch = va_arg (va, struct expression *); - - if (n > 2) - newp->val.args3.fbranch = va_arg (va, struct expression *); - - if (newp->val.args3.bexp == NULL - || newp->val.args3.tbranch == NULL - || (n > 2 && newp->val.args3.fbranch == NULL)) - { - __gettext_free_exp (newp); - newp = NULL; - } - } - } - - va_end (va); +#line 225 "plural.y" - return newp; -} void internal_function -__gettext_free_exp (struct expression *exp) +FREE_EXPRESSION (exp) + struct expression *exp; { if (exp == NULL) return; /* Handle the recursive case. */ - switch (exp->operation) + switch (exp->nargs) { - case qmop: - __gettext_free_exp (exp->val.args3.fbranch); + case 3: + FREE_EXPRESSION (exp->val.args[2]); + /* FALLTHROUGH */ + case 2: + FREE_EXPRESSION (exp->val.args[1]); + /* FALLTHROUGH */ + case 1: + FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ - - case mult: - case divide: - case module: - case plus: - case minus: - case equal: - case not_equal: - case land: - case lor: - __gettext_free_exp (exp->val.args2.right); - __gettext_free_exp (exp->val.args2.left); - break; - default: break; } @@ -1132,19 +1166,15 @@ __gettext_free_exp (struct expression *e static int -yylex (YYSTYPE *lval, const char **pexp) +yylex (lval, pexp) + YYSTYPE *lval; + const char **pexp; { const char *exp = *pexp; int result; while (1) { - if (exp[0] == '\\' && exp[1] == '\n') - { - exp += 2; - continue; - } - if (exp[0] == '\0') { *pexp = exp; @@ -1176,13 +1206,25 @@ yylex (YYSTYPE *lval, const char **pexp) break; case '=': - case '!': if (exp[0] == '=') - ++exp; + { + ++exp; + lval->op = equal; + result = EQUOP2; + } else result = YYERRCODE; break; + case '!': + if (exp[0] == '=') + { + ++exp; + lval->op = not_equal; + result = EQUOP2; + } + break; + case '&': case '|': if (exp[0] == result) @@ -1191,12 +1233,54 @@ yylex (YYSTYPE *lval, const char **pexp) result = YYERRCODE; break; - case 'n': + case '<': + if (exp[0] == '=') + { + ++exp; + lval->op = less_or_equal; + } + else + lval->op = less_than; + result = CMPOP2; + break; + + case '>': + if (exp[0] == '=') + { + ++exp; + lval->op = greater_or_equal; + } + else + lval->op = greater_than; + result = CMPOP2; + break; + case '*': + lval->op = mult; + result = MULOP2; + break; + case '/': + lval->op = divide; + result = MULOP2; + break; + case '%': + lval->op = module; + result = MULOP2; + break; + case '+': + lval->op = plus; + result = ADDOP2; + break; + case '-': + lval->op = minus; + result = ADDOP2; + break; + + case 'n': case '?': case ':': case '(': @@ -1227,7 +1311,8 @@ yylex (YYSTYPE *lval, const char **pexp) static void -yyerror (const char *str) +yyerror (str) + const char *str; { /* Do nothing. We don't print error messages here. */ } diff -durpNa glibc-2.2.2/intl/plural.y glibc-2.2.3/intl/plural.y --- glibc-2.2.2/intl/plural.y Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/plural.y Mon Mar 26 20:52:53 2001 @@ -22,11 +22,20 @@ # include #endif -#include #include -#include "gettext.h" #include "gettextP.h" +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define FREE_EXPRESSION __gettext_free_exp +#else +# define FREE_EXPRESSION gettext_free_exp__ +# define __gettextparse gettextparse__ +#endif + #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg %} @@ -35,22 +44,124 @@ %union { unsigned long int num; + enum operator op; struct expression *exp; } %{ /* Prototypes for local functions. */ -static struct expression *new_exp (enum operator op, int n, ...); -static int yylex (YYSTYPE *lval, const char **pexp); -static void yyerror (const char *str); +static struct expression *new_exp PARAMS ((int nargs, enum operator op, + struct expression * const *args)); +static inline struct expression *new_exp_0 PARAMS ((enum operator op)); +static inline struct expression *new_exp_1 PARAMS ((enum operator op, + struct expression *right)); +static struct expression *new_exp_2 PARAMS ((enum operator op, + struct expression *left, + struct expression *right)); +static inline struct expression *new_exp_3 PARAMS ((enum operator op, + struct expression *bexp, + struct expression *tbranch, + struct expression *fbranch)); +static int yylex PARAMS ((YYSTYPE *lval, const char **pexp)); +static void yyerror PARAMS ((const char *str)); + +/* Allocation of expressions. */ + +static struct expression * +new_exp (nargs, op, args) + int nargs; + enum operator op; + struct expression * const *args; +{ + int i; + struct expression *newp; + + /* If any of the argument could not be malloc'ed, just return NULL. */ + for (i = nargs - 1; i >= 0; i--) + if (args[i] == NULL) + goto fail; + + /* Allocate a new expression. */ + newp = (struct expression *) malloc (sizeof (*newp)); + if (newp != NULL) + { + newp->nargs = nargs; + newp->operation = op; + for (i = nargs - 1; i >= 0; i--) + newp->val.args[i] = args[i]; + return newp; + } + + fail: + for (i = nargs - 1; i >= 0; i--) + FREE_EXPRESSION (args[i]); + + return NULL; +} + +static inline struct expression * +new_exp_0 (op) + enum operator op; +{ + return new_exp (0, op, NULL); +} + +static inline struct expression * +new_exp_1 (op, right) + enum operator op; + struct expression *right; +{ + struct expression *args[1]; + + args[0] = right; + return new_exp (1, op, args); +} + +static struct expression * +new_exp_2 (op, left, right) + enum operator op; + struct expression *left; + struct expression *right; +{ + struct expression *args[2]; + + args[0] = left; + args[1] = right; + return new_exp (2, op, args); +} + +static inline struct expression * +new_exp_3 (op, bexp, tbranch, fbranch) + enum operator op; + struct expression *bexp; + struct expression *tbranch; + struct expression *fbranch; +{ + struct expression *args[3]; + + args[0] = bexp; + args[1] = tbranch; + args[2] = fbranch; + return new_exp (3, op, args); +} + %} -%left '?' -%left '|' -%left '&' -%left '=', '!' -%left '+', '-' -%left '*', '/', '%' +/* This declares that all operators have the same associativity and the + precedence order as in C. See [Harbison, Steele: C, A Reference Manual]. + There is no unary minus and no bitwise operators. + Operators with the same syntactic behaviour have been merged into a single + token, to save space in the array generated by bison. */ +%right '?' /* ? */ +%left '|' /* || */ +%left '&' /* && */ +%left EQUOP2 /* == != */ +%left CMPOP2 /* < > <= >= */ +%left ADDOP2 /* + - */ +%left MULOP2 /* * / % */ +%right '!' /* ! */ + +%token EQUOP2 CMPOP2 ADDOP2 MULOP2 %token NUMBER %type exp @@ -58,143 +169,81 @@ static void yyerror (const char *str); start: exp { + if ($1 == NULL) + YYABORT; ((struct parse_args *) arg)->res = $1; } ; exp: exp '?' exp ':' exp { - if (($$ = new_exp (qmop, 3, $1, $3, $5)) == NULL) - YYABORT + $$ = new_exp_3 (qmop, $1, $3, $5); } | exp '|' exp { - if (($$ = new_exp (lor, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 (lor, $1, $3); } | exp '&' exp { - if (($$ = new_exp (land, 2, $1, $3)) == NULL) - YYABORT - } - | exp '=' exp - { - if (($$ = new_exp (equal, 2, $1, $3)) == NULL) - YYABORT - } - | exp '!' exp - { - if (($$ = new_exp (not_equal, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 (land, $1, $3); } - | exp '+' exp + | exp EQUOP2 exp { - if (($$ = new_exp (plus, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 ($2, $1, $3); } - | exp '-' exp + | exp CMPOP2 exp { - if (($$ = new_exp (minus, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 ($2, $1, $3); } - | exp '*' exp + | exp ADDOP2 exp { - if (($$ = new_exp (mult, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 ($2, $1, $3); } - | exp '/' exp + | exp MULOP2 exp { - if (($$ = new_exp (divide, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_2 ($2, $1, $3); } - | exp '%' exp + | '!' exp { - if (($$ = new_exp (module, 2, $1, $3)) == NULL) - YYABORT + $$ = new_exp_1 (lnot, $2); } | 'n' { - if (($$ = new_exp (var, 0)) == NULL) - YYABORT + $$ = new_exp_0 (var); } | NUMBER { - if (($$ = new_exp (num, 0)) == NULL) - YYABORT; - $$->val.num = $1 + if (($$ = new_exp_0 (num)) != NULL) + $$->val.num = $1; } | '(' exp ')' { - $$ = $2 + $$ = $2; } ; %% -static struct expression * -new_exp (enum operator op, int n, ...) -{ - struct expression *newp = (struct expression *) calloc (1, sizeof (*newp)); - va_list va; - - va_start (va, n); - - if (newp == NULL) - while (n-- > 0) - __gettext_free_exp (va_arg (va, struct expression *)); - else - { - newp->operation = op; - if (n > 0) - { - newp->val.args3.bexp = va_arg (va, struct expression *); - newp->val.args3.tbranch = va_arg (va, struct expression *); - - if (n > 2) - newp->val.args3.fbranch = va_arg (va, struct expression *); - - if (newp->val.args3.bexp == NULL - || newp->val.args3.tbranch == NULL - || (n > 2 && newp->val.args3.fbranch == NULL)) - { - __gettext_free_exp (newp); - newp = NULL; - } - } - } - - va_end (va); - - return newp; -} - void internal_function -__gettext_free_exp (struct expression *exp) +FREE_EXPRESSION (exp) + struct expression *exp; { if (exp == NULL) return; /* Handle the recursive case. */ - switch (exp->operation) + switch (exp->nargs) { - case qmop: - __gettext_free_exp (exp->val.args3.fbranch); + case 3: + FREE_EXPRESSION (exp->val.args[2]); + /* FALLTHROUGH */ + case 2: + FREE_EXPRESSION (exp->val.args[1]); + /* FALLTHROUGH */ + case 1: + FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ - - case mult: - case divide: - case module: - case plus: - case minus: - case equal: - case not_equal: - case land: - case lor: - __gettext_free_exp (exp->val.args2.right); - __gettext_free_exp (exp->val.args2.left); - break; - default: break; } @@ -204,19 +253,15 @@ __gettext_free_exp (struct expression *e static int -yylex (YYSTYPE *lval, const char **pexp) +yylex (lval, pexp) + YYSTYPE *lval; + const char **pexp; { const char *exp = *pexp; int result; while (1) { - if (exp[0] == '\\' && exp[1] == '\n') - { - exp += 2; - continue; - } - if (exp[0] == '\0') { *pexp = exp; @@ -248,13 +293,25 @@ yylex (YYSTYPE *lval, const char **pexp) break; case '=': - case '!': if (exp[0] == '=') - ++exp; + { + ++exp; + lval->op = equal; + result = EQUOP2; + } else result = YYERRCODE; break; + case '!': + if (exp[0] == '=') + { + ++exp; + lval->op = not_equal; + result = EQUOP2; + } + break; + case '&': case '|': if (exp[0] == result) @@ -263,12 +320,54 @@ yylex (YYSTYPE *lval, const char **pexp) result = YYERRCODE; break; - case 'n': + case '<': + if (exp[0] == '=') + { + ++exp; + lval->op = less_or_equal; + } + else + lval->op = less_than; + result = CMPOP2; + break; + + case '>': + if (exp[0] == '=') + { + ++exp; + lval->op = greater_or_equal; + } + else + lval->op = greater_than; + result = CMPOP2; + break; + case '*': + lval->op = mult; + result = MULOP2; + break; + case '/': + lval->op = divide; + result = MULOP2; + break; + case '%': + lval->op = module; + result = MULOP2; + break; + case '+': + lval->op = plus; + result = ADDOP2; + break; + case '-': + lval->op = minus; + result = ADDOP2; + break; + + case 'n': case '?': case ':': case '(': @@ -299,7 +398,8 @@ yylex (YYSTYPE *lval, const char **pexp) static void -yyerror (const char *str) +yyerror (str) + const char *str; { /* Do nothing. We don't print error messages here. */ } diff -durpNa glibc-2.2.2/intl/textdomain.c glibc-2.2.3/intl/textdomain.c --- glibc-2.2.2/intl/textdomain.c Sat Jan 6 20:35:20 2001 +++ glibc-2.2.3/intl/textdomain.c Mon Mar 26 20:52:54 2001 @@ -1,5 +1,5 @@ /* Implementation of the textdomain(3) function. - Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-1998, 2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -36,9 +36,8 @@ #ifdef _LIBC # include #else -# include "libgettext.h" +# include "libgnuintl.h" #endif -#include "gettext.h" #include "gettextP.h" #ifdef _LIBC diff -durpNa glibc-2.2.2/intl/tst-codeset.c glibc-2.2.3/intl/tst-codeset.c --- glibc-2.2.2/intl/tst-codeset.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/intl/tst-codeset.c Tue Apr 17 08:17:15 2001 @@ -0,0 +1,57 @@ +/* Test of bind_textdomain_codeset. + Copyright (C) 2001 Free Software Foundation, Inc. + Contributed by Bruno Haible , 2001. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include +#include +#include +#include +#include + +int +main (void) +{ + char *s; + int result = 0; + + unsetenv ("LANGUAGE"); + unsetenv ("OUTPUT_CHARSET"); + setlocale (LC_ALL, "de_DE.ISO-8859-1"); + textdomain ("codeset"); + bindtextdomain ("codeset", OBJPFX "domaindir"); + + /* Here we expect output in ISO-8859-1. */ + s = gettext ("cheese"); + if (strcmp (s, "K\344se")) + { + printf ("call 1 returned: %s\n", s); + result = 1; + } + + bind_textdomain_codeset ("codeset", "UTF-8"); + + /* Here we expect output in UTF-8. */ + s = gettext ("cheese"); + if (strcmp (s, "K\303\244se")) + { + printf ("call 2 returned: %s\n", s); + result = 1; + } + + return result; +} diff -durpNa glibc-2.2.2/intl/tst-codeset.sh glibc-2.2.3/intl/tst-codeset.sh --- glibc-2.2.2/intl/tst-codeset.sh Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/intl/tst-codeset.sh Mon Apr 9 16:32:15 2001 @@ -0,0 +1,42 @@ +#! /bin/sh +# Test of bind_textdomain_codeset. +# Copyright (C) 2001 Free Software Foundation, Inc. +# This file is part of the GNU C Library. +# +# The GNU C Library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Library General Public License as +# published by the Free Software Foundation; either version 2 of the +# License, or (at your option) any later version. +# +# The GNU C Library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Library General Public License for more details. +# +# You should have received a copy of the GNU Library General Public +# License along with the GNU C Library; see the file COPYING.LIB. If +# not, write to the Free Software Foundation, Inc., +# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +common_objpfx=$1 +objpfx=$2 + +GCONV_PATH=${common_objpfx}iconvdata +export GCONV_PATH +LOCPATH=${common_objpfx}localedata +export LOCPATH +LC_ALL=C +export LC_ALL + +# Generate the test data. +test -d ${objpfx}domaindir || mkdir ${objpfx}domaindir +# Create the domain directories. +test -d ${objpfx}domaindir/de_DE || mkdir ${objpfx}domaindir/de_DE +test -d ${objpfx}domaindir/de_DE/LC_MESSAGES || mkdir ${objpfx}domaindir/de_DE/LC_MESSAGES +# Populate them. +msgfmt -o ${objpfx}domaindir/de_DE/LC_MESSAGES/codeset.mo tstcodeset.po + +${common_objpfx}elf/ld.so --library-path $common_objpfx \ +${objpfx}tst-codeset > ${objpfx}tst-codeset.out + +exit $? diff -durpNa glibc-2.2.2/intl/tstcodeset.po glibc-2.2.3/intl/tstcodeset.po --- glibc-2.2.2/intl/tstcodeset.po Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/intl/tstcodeset.po Mon Apr 9 16:32:36 2001 @@ -0,0 +1,8 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8-bit\n" + +msgid "cheese" +msgstr "Käse" diff -durpNa glibc-2.2.2/io/Makefile glibc-2.2.3/io/Makefile --- glibc-2.2.2/io/Makefile Tue Jan 23 14:07:17 2001 +++ glibc-2.2.3/io/Makefile Mon Mar 26 20:52:55 2001 @@ -66,6 +66,16 @@ CFLAGS-fts.c = -Wno-uninitialized CFLAGS-test-stat.c = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE CFLAGS-test-lfs.c = -D_LARGEFILE64_SOURCE +ifeq (yes,$(have-protected)) +CFLAGS-stat.c = -DHAVE_DOT_HIDDEN +CFLAGS-fstat.c = -DHAVE_DOT_HIDDEN +CFLAGS-lstat.c = -DHAVE_DOT_HIDDEN +CFLAGS-mknod.c = -DHAVE_DOT_HIDDEN +CFLAGS-stat64.c = -DHAVE_DOT_HIDDEN +CFLAGS-fstat64.c = -DHAVE_DOT_HIDDEN +CFLAGS-lstat64.c = -DHAVE_DOT_HIDDEN +endif + test-stat2-ARGS = Makefile . $(objpfx)test-stat2 ifeq ($(cross-compiling),no) diff -durpNa glibc-2.2.2/io/fstat.c glibc-2.2.3/io/fstat.c --- glibc-2.2.2/io/fstat.c Sun Aug 9 15:05:41 1998 +++ glibc-2.2.3/io/fstat.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 2001 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 @@ -45,3 +45,10 @@ __fstat (int fd, struct stat *buf) } weak_alias (__fstat, fstat) + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tfstat"); +asm (".hidden\t__fstat"); +#endif diff -durpNa glibc-2.2.2/io/fstat64.c glibc-2.2.3/io/fstat64.c --- glibc-2.2.2/io/fstat64.c Tue Nov 11 15:13:23 1997 +++ glibc-2.2.3/io/fstat64.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -42,3 +42,9 @@ fstat64 (int fd, struct stat64 *buf) { return __fxstat64 (_STAT_VER, fd, buf); } + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tfstat64"); +#endif diff -durpNa glibc-2.2.2/io/lstat.c glibc-2.2.3/io/lstat.c --- glibc-2.2.2/io/lstat.c Sun Aug 9 15:07:12 1998 +++ glibc-2.2.3/io/lstat.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -45,3 +45,10 @@ __lstat (const char *file, struct stat * } weak_alias (__lstat, lstat) + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tlstat"); +asm (".hidden\t__lstat"); +#endif diff -durpNa glibc-2.2.2/io/lstat64.c glibc-2.2.3/io/lstat64.c --- glibc-2.2.2/io/lstat64.c Tue Nov 11 15:16:27 1997 +++ glibc-2.2.3/io/lstat64.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -42,3 +42,9 @@ lstat64 (const char *file, struct stat64 { return __lxstat64 (_STAT_VER, file, buf); } + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tlstat64"); +#endif diff -durpNa glibc-2.2.2/io/stat.c glibc-2.2.3/io/stat.c --- glibc-2.2.2/io/stat.c Tue Nov 11 15:16:39 1997 +++ glibc-2.2.3/io/stat.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -44,3 +44,10 @@ __stat (const char *file, struct stat *b } weak_alias (__stat, stat) + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tstat"); +asm (".hidden\t__stat"); +#endif diff -durpNa glibc-2.2.2/io/stat64.c glibc-2.2.3/io/stat64.c --- glibc-2.2.2/io/stat64.c Tue Nov 11 15:16:50 1997 +++ glibc-2.2.3/io/stat64.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2001 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 @@ -42,3 +42,9 @@ stat64 (const char *file, struct stat64 { return __xstat64 (_STAT_VER, file, buf); } + +/* Hide the symbol so that no definition but the one locally in the + executable or DSO is used. */ +#ifdef HAVE_DOT_HIDDEN +asm (".hidden\tstat64"); +#endif diff -durpNa glibc-2.2.2/libio/Makefile glibc-2.2.3/libio/Makefile --- glibc-2.2.2/libio/Makefile Thu Feb 15 14:08:31 2001 +++ glibc-2.2.3/libio/Makefile Mon Apr 9 21:48:46 2001 @@ -48,7 +48,7 @@ routines := \ libc_fatal fmemopen tests = tst_swprintf tst_wprintf tst_swscanf tst_wscanf tst_getwc tst_putwc \ - tst_wprintf2 tst-widetext test-fmemopen + tst_wprintf2 tst-widetext test-fmemopen tst-ext test-srcs = test-freopen all: # Make this the default target; it will be defined in Rules. @@ -93,7 +93,8 @@ shared-only-routines = oldiofopen oldiof oldiofgetpos oldiofgetpos64 oldiofsetpos \ oldiofsetpos64 -distribute := iolibio.h libioP.h strfile.h Banner test-freopen.sh +distribute := iolibio.h libioP.h strfile.h Banner test-freopen.sh \ + fd_to_filename.h include ../Rules diff -durpNa glibc-2.2.2/libio/freopen.c glibc-2.2.3/libio/freopen.c --- glibc-2.2.2/libio/freopen.c Thu Nov 16 11:12:02 2000 +++ glibc-2.2.3/libio/freopen.c Mon Apr 9 20:03:25 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993,95,96,97,98,2000 Free Software Foundation, Inc. +/* Copyright (C) 1993,95,96,97,98,2000,2001 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -27,6 +27,7 @@ #include "stdio.h" #include +#include FILE* freopen (filename, mode, fp) @@ -35,11 +36,18 @@ freopen (filename, mode, fp) FILE* fp; { FILE *result; + int fd = -1; CHECK_FILE (fp, NULL); if (!(fp->_flags & _IO_IS_FILEBUF)) return NULL; _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); _IO_flockfile (fp); + if (filename == NULL && _IO_fileno (fp) >= 0) + { + fd = dup (_IO_fileno (fp)); + if (fd != -1) + filename = fd_to_filename (fd); + } #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) if (&_IO_stdin_used == NULL) /* If the shared C library is used by the application binary which @@ -54,6 +62,12 @@ freopen (filename, mode, fp) if (result != NULL) /* unbound stream orientation */ result->_mode = 0; + if (fd != -1) + { + close (fd); + if (filename != NULL) + free ((char *) filename); + } _IO_funlockfile (fp); _IO_cleanup_region_end (0); return result; diff -durpNa glibc-2.2.2/libio/freopen64.c glibc-2.2.3/libio/freopen64.c --- glibc-2.2.2/libio/freopen64.c Thu Nov 16 11:12:02 2000 +++ glibc-2.2.3/libio/freopen64.c Mon Apr 9 20:03:25 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993,1995,1996,1997,1998,2000 Free Software Foundation, Inc. +/* Copyright (C) 1993,1995,1996,1997,1998,2000,2001 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -26,6 +26,8 @@ #include "libioP.h" #include "stdio.h" +#include + FILE * freopen64 (filename, mode, fp) const char* filename; @@ -34,15 +36,28 @@ freopen64 (filename, mode, fp) { #ifdef _G_OPEN64 FILE *result; + int fd = -1; CHECK_FILE (fp, NULL); if (!(fp->_flags & _IO_IS_FILEBUF)) return NULL; _IO_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp); _IO_flockfile (fp); + if (filename == NULL && _IO_fileno (fp) >= 0) + { + fd = dup (_IO_fileno (fp)); + if (fd != -1) + filename = fd_to_filename (fd); + } result = _IO_freopen64 (filename, mode, fp); if (result != NULL) /* unbound stream orientation */ result->_mode = 0; + if (fd != -1) + { + close (fd); + if (filename != NULL) + free ((char *) filename); + } _IO_funlockfile (fp); _IO_cleanup_region_end (0); return result; diff -durpNa glibc-2.2.2/libio/iofwide.c glibc-2.2.3/libio/iofwide.c --- glibc-2.2.2/libio/iofwide.c Thu Sep 7 11:56:28 2000 +++ glibc-2.2.3/libio/iofwide.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -203,10 +203,6 @@ _IO_fwide (fp, mode) return mode; } - -#ifdef weak_alias -weak_alias (_IO_fwide, fwide) -#endif static enum __codecvt_result diff -durpNa glibc-2.2.2/libio/iogetline.c glibc-2.2.3/libio/iogetline.c --- glibc-2.2.2/libio/iogetline.c Thu Aug 31 14:45:04 2000 +++ glibc-2.2.3/libio/iogetline.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1997, 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -78,9 +78,9 @@ _IO_getline_info (fp, buf, n, delim, ext *ptr++ = c; else if (extract_delim < 0) _IO_sputbackc (fp, c); - return ptr - buf; if (extract_delim > 0) ++len; + return ptr - buf; } *ptr++ = c; n--; diff -durpNa glibc-2.2.2/libio/iosetvbuf.c glibc-2.2.3/libio/iosetvbuf.c --- glibc-2.2.2/libio/iosetvbuf.c Wed May 31 11:10:40 2000 +++ glibc-2.2.3/libio/iosetvbuf.c Mon Mar 26 20:52:55 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1993,96,97,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU IO Library. This library is free software; you can redistribute it and/or @@ -82,6 +82,8 @@ _IO_setvbuf (fp, buf, mode, size) } break; case _IONBF: + fp->_IO_file_flags &= ~_IO_LINE_BUF; + fp->_IO_file_flags |= _IO_UNBUFFERED; buf = NULL; size = 0; break; diff -durpNa glibc-2.2.2/libio/tst-ext.c glibc-2.2.3/libio/tst-ext.c --- glibc-2.2.2/libio/tst-ext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/libio/tst-ext.c Mon Mar 26 16:15:41 2001 @@ -0,0 +1,141 @@ +#include +#include +#include + + +int +main (void) +{ + FILE *fp; + const char teststring[] = "hello world"; + char buf[3072]; + int result = 0; + char readbuf[256]; + + /* Open a file. */ + fp = tmpfile (); + + /* Set a buffer. */ + if (setvbuf (fp, buf, _IOFBF, sizeof buf) == EOF) + { + printf ("setvbuf failed: %m\n"); + exit (1); + } + + /* Get the buffer size. */ + if (__fbufsize (fp) != sizeof buf) + { + printf ("__fbusize() reported a buffer size of %Zd bytes;" + " we installed a buffer with %Zd bytes\n", + __fbufsize (fp), sizeof buf); + result = 1; + } + + /* Write something and read it back. */ + if (fputs (teststring, fp) == EOF) + { + printf ("writing to new stream failed: %m\n"); + exit (1); + } + rewind (fp); + if (fgets (readbuf, sizeof readbuf, fp) == NULL) + { + printf ("reading from new stream failed: %m\n"); + exit (1); + } + if (strcmp (readbuf, teststring) != 0) + { + puts ("not the correct string read"); + exit (1); + } + + /* The file must be opened for reading and writing. */ + if (__freading (fp) == 0) + { + puts ("__freading() reported stream is not last read from"); + result = 1; + } + if (__fwriting (fp) != 0) + { + puts ("__fwriting() reported stream is write-only or last written to"); + result = 1; + } + rewind (fp); + if (fputs (teststring, fp) == EOF) + { + printf ("writing(2) to new stream failed: %m\n"); + exit (1); + } + if (__fwriting (fp) == 0) + { + puts ("__fwriting() doe snot reported stream is last written to"); + result = 1; + } + if (__freading (fp) != 0) + { + puts ("__freading() reported stream is last read from"); + result = 1; + } + + if (__freadable (fp) == 0) + { + puts ("__freading() reported stream is last readable"); + result = 1; + } + if (__fwritable (fp) == 0) + { + puts ("__freading() reported stream is last writable"); + result = 1; + } + + /* The string we wrote above should still be in the buffer. */ + if (__fpending (fp) != strlen (teststring)) + { + printf ("__fpending() returned %Zd; expected %Zd\n", + __fpending (fp), strlen (teststring)); + result = 1; + } + /* Discard all the output. */ + __fpurge (fp); + /* And check again. */ + if (__fpending (fp) != 0) + { + printf ("__fpending() returned %Zd; expected 0\n", + __fpending (fp)); + result = 1; + } + + + /* Find out whether buffer is line buffered. */ + if (__flbf (fp) != 0) + { + puts ("__flbf() reports line buffered but it is fully buffered"); + result = 1; + } + + if (setvbuf (fp, buf, _IOLBF, sizeof buf) == EOF) + { + printf ("setvbuf(2) failed: %m\n"); + exit (1); + } + if (__flbf (fp) == 0) + { + puts ("__flbf() reports file is not line buffered"); + result = 1; + } + + if (setvbuf (fp, NULL, _IONBF, 0) == EOF) + { + printf ("setvbuf(3) failed: %m\n"); + exit (1); + } + if (__flbf (fp) != 0) + { + puts ("__flbf() reports line buffered but it is not buffered"); + result = 1; + } + + fclose (fp); + + return result; +} diff -durpNa glibc-2.2.2/locale/C-address.c glibc-2.2.3/locale/C-address.c --- glibc-2.2.2/locale/C-address.c Wed Jun 21 11:11:00 2000 +++ glibc-2.2.3/locale/C-address.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,7 +31,7 @@ const struct locale_data _nl_C_LC_ADDRES UNDELETABLE, 0, NULL, - 12, + 13, { { string: "%a%N%f%N%d%N%b%N%s %h %e %r%N%C-%z %T%N%c%N" }, { string: "" }, @@ -44,6 +44,7 @@ const struct locale_data _nl_C_LC_ADDRES { string: "" }, { string: "" }, { string: "" }, - { string: "" } + { string: "" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-collate.c glibc-2.2.3/locale/C-collate.c --- glibc-2.2.2/locale/C-collate.c Thu Sep 7 11:56:28 2000 +++ glibc-2.2.3/locale/C-collate.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995,1996,1997,1999,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -105,7 +105,7 @@ const struct locale_data _nl_C_LC_COLLAT UNDELETABLE, 0, NULL, - 18, + 19, { /* _NL_COLLATE_NRULES */ { word: 0 }, @@ -142,6 +142,8 @@ const struct locale_data _nl_C_LC_COLLAT /* _NL_COLLATE_COLLSEQMB */ { string: collseqmb }, /* _NL_COLLATE_COLLSEQWC */ - { string: (const char *) collseqwc } + { string: (const char *) collseqwc }, + /* _NL_COLLATE_CODESET */ + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-ctype.c glibc-2.2.3/locale/C-ctype.c --- glibc-2.2.2/locale/C-ctype.c Sun Oct 8 17:04:52 2000 +++ glibc-2.2.3/locale/C-ctype.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -590,7 +590,7 @@ const struct locale_data _nl_C_LC_CTYPE /* _NL_CTYPE_MB_CUR_MAX */ { word: 1 }, /* _NL_CTYPE_CODESET_NAME */ - { string: "ANSI_X3.4-1968" }, + { string: _nl_C_codeset }, /* _NL_CTYPE_TOUPPER32 */ { string: (const char *) &_nl_C_LC_CTYPE_toupper[128] }, /* _NL_CTYPE_TOLOWER32 */ diff -durpNa glibc-2.2.2/locale/C-identification.c glibc-2.2.3/locale/C-identification.c --- glibc-2.2.2/locale/C-identification.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-identification.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,7 +31,7 @@ const struct locale_data _nl_C_LC_IDENTI UNDELETABLE, 0, NULL, - 15, + 16, { { string: "ISO/IEC 14652 i18n FDCC-set" }, { string: "ISO/IEC JTC1/SC22/WG20 - internationalization" }, @@ -51,6 +51,7 @@ const struct locale_data _nl_C_LC_IDENTI "i18n:1999\0" "i18n:1999\0" "\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" "i18n:1999\0" - "i18n:1999" } + "i18n:1999" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-measurement.c glibc-2.2.3/locale/C-measurement.c --- glibc-2.2.2/locale/C-measurement.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-measurement.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,8 +31,9 @@ const struct locale_data _nl_C_LC_MEASUR UNDELETABLE, 0, NULL, - 1, + 2, { - { string: "\1" } + { string: "\1" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-messages.c glibc-2.2.3/locale/C-messages.c --- glibc-2.2.2/locale/C-messages.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-messages.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -31,11 +31,12 @@ const struct locale_data _nl_C_LC_MESSAG UNDELETABLE, 0, NULL, - 4, + 5, { { string: "^[yY]" }, { string: "^[nN]" }, { string: "" }, - { string: "" } + { string: "" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-monetary.c glibc-2.2.3/locale/C-monetary.c --- glibc-2.2.2/locale/C-monetary.c Thu Oct 26 22:57:25 2000 +++ glibc-2.2.3/locale/C-monetary.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -35,7 +35,7 @@ const struct locale_data _nl_C_LC_MONETA UNDELETABLE, 0, NULL, - 45, + 46, { { string: "" }, { string: "" }, @@ -81,6 +81,7 @@ const struct locale_data _nl_C_LC_MONETA { word: 99991231 }, { word: 1 }, { word: (unsigned int) L'\0' }, - { word: (unsigned int) L'\0' } + { word: (unsigned int) L'\0' }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-name.c glibc-2.2.3/locale/C-name.c --- glibc-2.2.2/locale/C-name.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-name.c Sat Apr 7 14:02:34 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,13 +31,14 @@ const struct locale_data _nl_C_LC_NAME = UNDELETABLE, 0, NULL, - 6, + 7, { { string: "%p%t%g%t%m%t%f" }, { string: "" }, { string: "" }, { string: "" }, { string: "" }, - { string: "" } + { string: "" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-numeric.c glibc-2.2.3/locale/C-numeric.c --- glibc-2.2.2/locale/C-numeric.c Thu Oct 26 22:57:25 2000 +++ glibc-2.2.3/locale/C-numeric.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -28,12 +28,13 @@ const struct locale_data _nl_C_LC_NUMERI UNDELETABLE, 0, NULL, - 5, + 6, { { string: "." }, { string: "" }, { string: "" }, { word: (unsigned int) L'.' }, - { word: (unsigned int) L'\0' } + { word: (unsigned int) L'\0' }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-paper.c glibc-2.2.3/locale/C-paper.c --- glibc-2.2.2/locale/C-paper.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-paper.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,9 +31,10 @@ const struct locale_data _nl_C_LC_PAPER UNDELETABLE, 0, NULL, - 2, + 3, { { word: 297 }, - { word: 210 } + { word: 210 }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-telephone.c glibc-2.2.3/locale/C-telephone.c --- glibc-2.2.2/locale/C-telephone.c Wed Jun 21 11:11:01 2000 +++ glibc-2.2.3/locale/C-telephone.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1998. @@ -31,11 +31,12 @@ const struct locale_data _nl_C_LC_TELEPH UNDELETABLE, 0, NULL, - 4, + 5, { { string: "+%c %a %l" }, { string: "" }, { string: "" }, - { string: "" } + { string: "" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C-time.c glibc-2.2.3/locale/C-time.c --- glibc-2.2.2/locale/C-time.c Thu Nov 9 11:34:28 2000 +++ glibc-2.2.3/locale/C-time.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995-2000, 2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1995. @@ -30,7 +30,7 @@ const struct locale_data _nl_C_LC_TIME = UNDELETABLE, 0, NULL, - 110, + 111, { { string: "Sun" }, { string: "Mon" }, @@ -141,6 +141,7 @@ const struct locale_data _nl_C_LC_TIME = { string: "\1" }, { string: "" }, { string: "%a %b %e %H:%M:%S %Z %Y" }, - { wstr: (const uint32_t *) L"%a %b %e %H:%M:%S %Z %Y" } + { wstr: (const uint32_t *) L"%a %b %e %H:%M:%S %Z %Y" }, + { string: _nl_C_codeset } } }; diff -durpNa glibc-2.2.2/locale/C_name.c glibc-2.2.3/locale/C_name.c --- glibc-2.2.2/locale/C_name.c Fri Sep 26 16:24:46 1997 +++ glibc-2.2.3/locale/C_name.c Sat Apr 7 14:02:35 2001 @@ -6,3 +6,6 @@ /* Name of our standard locale. */ const char _nl_C_name[] = "C"; const char _nl_POSIX_name[] = "POSIX"; + +/* The standard codeset. */ +const char _nl_C_codeset[] = "ANSI_X3.4-1968"; diff -durpNa glibc-2.2.2/locale/Makefile glibc-2.2.3/locale/Makefile --- glibc-2.2.2/locale/Makefile Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/Makefile Mon Mar 26 20:53:00 2001 @@ -100,4 +100,5 @@ CFLAGS-charmap-dir.c = -Wno-write-string # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)libBrokenLocale.so: $(common-objpfx)libc.so +$(objpfx)libBrokenLocale.so: $(common-objpfx)libc.so \ + $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/locale/categories.def glibc-2.2.3/locale/categories.def --- glibc-2.2.2/locale/categories.def Tue Oct 31 11:09:54 2000 +++ glibc-2.2.3/locale/categories.def Sat Apr 7 14:02:35 2001 @@ -1,5 +1,5 @@ /* Definition of all available locale categories and their items. -*- C -*- - Copyright (C) 1995, 96, 97, 98, 99, 2000 Free Software Foundation, Inc. + Copyright (C) 1995-2000, 2001 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as @@ -57,6 +57,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_COLLATE_SYMB_EXTRAMB, "collate-symb-extramb", std, wstring) DEFINE_ELEMENT (_NL_COLLATE_COLLSEQMB, "collate-collseqmb", std, wstring) DEFINE_ELEMENT (_NL_COLLATE_COLLSEQWC, "collate-collseqwc", std, wstring) + DEFINE_ELEMENT (_NL_COLLATE_CODESET, "collate-codeset", std, string) ), NO_POSTLOAD) @@ -182,6 +183,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_MONETARY_CONVERSION_RATE, "conversion_rate", std, wordarray, 2, 2) DEFINE_ELEMENT (_NL_MONETARY_DECIMAL_POINT_WC, "monetary-decimal-point-wc", std, word) DEFINE_ELEMENT (_NL_MONETARY_THOUSANDS_SEP_WC, "monetary-thousands-sep-wc", std, word) + DEFINE_ELEMENT (_NL_MONETARY_CODESET, "monetary-codeset", std, string) ), NO_POSTLOAD) @@ -194,6 +196,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (GROUPING, "grouping", std, bytearray) DEFINE_ELEMENT (_NL_NUMERIC_DECIMAL_POINT_WC, "numeric-decimal-point-wc", std, word) DEFINE_ELEMENT (_NL_NUMERIC_THOUSANDS_SEP_WC, "numeric-thousands-sep-wc", std, word) + DEFINE_ELEMENT (_NL_NUMERIC_CODESET, "numeric-codeset", std, string) ), NO_POSTLOAD) @@ -242,6 +245,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_TIME_TIMEZONE, "timezone", std, string) DEFINE_ELEMENT (_DATE_FMT, "date_fmt", opt, string) DEFINE_ELEMENT (_NL_W_DATE_FMT, "wide-date_fmt", opt, wstring) + DEFINE_ELEMENT (_NL_TIME_CODESET, "time-codeset", std, string) ), _nl_postload_time) @@ -253,6 +257,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (NOEXPR, "noexpr", std, string) DEFINE_ELEMENT (YESSTR, "yesstr", opt, string) DEFINE_ELEMENT (NOSTR, "nostr", opt, string) + DEFINE_ELEMENT (_NL_MESSAGES_CODESET, "messages-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -261,6 +266,7 @@ DEFINE_CATEGORY ( DEFINE_ELEMENT (_NL_PAPER_HEIGHT, "height", std, word) DEFINE_ELEMENT (_NL_PAPER_WIDTH, "width", std, word) + DEFINE_ELEMENT (_NL_PAPER_CODESET, "paper-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -273,6 +279,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_NAME_NAME_MRS, "name_mrs", std, string) DEFINE_ELEMENT (_NL_NAME_NAME_MISS, "name_miss", std, string) DEFINE_ELEMENT (_NL_NAME_NAME_MS, "name_ms", std, string) + DEFINE_ELEMENT (_NL_NAME_CODESET, "name-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -291,6 +298,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_ADDRESS_LANG_AB, "lang_ab", std, string) DEFINE_ELEMENT (_NL_ADDRESS_LANG_TERM, "lang_term", std, string) DEFINE_ELEMENT (_NL_ADDRESS_LANG_LIB, "lang_lib", std, string) + DEFINE_ELEMENT (_NL_ADDRESS_CODESET, "address-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -301,6 +309,7 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_TELEPHONE_TEL_DOM_FMT, "tel_dom_fmt", std, string) DEFINE_ELEMENT (_NL_TELEPHONE_INT_SELECT, "int_select", std, string) DEFINE_ELEMENT (_NL_TELEPHONE_INT_PREFIX, "int_prefix", std, string) + DEFINE_ELEMENT (_NL_TELEPHONE_CODESET, "telephone-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -308,6 +317,7 @@ DEFINE_CATEGORY LC_MEASUREMENT, "LC_MEASUREMENT", ( DEFINE_ELEMENT (_NL_MEASUREMENT_MEASUREMENT, "measurement", std, byte) + DEFINE_ELEMENT (_NL_MEASUREMENT_CODESET, "measurement-codeset", std, string) ), NO_POSTLOAD) DEFINE_CATEGORY @@ -328,5 +338,6 @@ DEFINE_CATEGORY DEFINE_ELEMENT (_NL_IDENTIFICATION_ABBREVIATION, "abbreviation", std, string) DEFINE_ELEMENT (_NL_IDENTIFICATION_REVISION, "revision", std, string) DEFINE_ELEMENT (_NL_IDENTIFICATION_DATE, "date", std, string) - DEFINE_ELEMENT (_NL_IDENTIFICATION_CATEGORY, "category", std, stringarray, 13, 13) + DEFINE_ELEMENT (_NL_IDENTIFICATION_CATEGORY, "category", std, stringarray, 13, 13) + DEFINE_ELEMENT (_NL_IDENTIFICATION_CODESET, "identification-codeset", std, string) ), NO_POSTLOAD) diff -durpNa glibc-2.2.2/locale/findlocale.c glibc-2.2.3/locale/findlocale.c --- glibc-2.2.2/locale/findlocale.c Fri Dec 1 11:55:06 2000 +++ glibc-2.2.3/locale/findlocale.c Mon Apr 9 20:03:27 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. @@ -17,6 +17,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include #include #include @@ -26,6 +27,7 @@ #endif #include "localeinfo.h" +#include "../iconv/gconv_charset.h" /* Constant data defined in setlocale.c. */ @@ -121,7 +123,7 @@ _nl_find_locale (const char *locale_path language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, - _nl_category_names[category], NULL, 0); + _nl_category_names[category], 0); if (locale_file == NULL) { @@ -132,7 +134,7 @@ _nl_find_locale (const char *locale_path language, territory, codeset, normalized_codeset, modifier, special, sponsor, revision, - _nl_category_names[category], NULL, 1); + _nl_category_names[category], 1); if (locale_file == NULL) /* This means we are out of core. */ return NULL; @@ -161,6 +163,54 @@ _nl_find_locale (const char *locale_path locale_file = locale_file->successor[cnt]; if (locale_file == NULL) + return NULL; + } + + /* The LC_CTYPE category allows to check whether a locale is really + usable. If the locale name contains a charset name and the + charset name used in the locale (present in the LC_CTYPE data) is + not the same (after resolving aliases etc) we reject the locale + since using it would irritate users expecting the charset named + in the locale name. */ + if (codeset != NULL) + { + /* Get the codeset information from the locale file. */ + static const int codeset_idx[] = + { + [__LC_CTYPE] = _NL_ITEM_INDEX (CODESET), + [__LC_NUMERIC] = _NL_ITEM_INDEX (_NL_NUMERIC_CODESET), + [__LC_TIME] = _NL_ITEM_INDEX (_NL_TIME_CODESET), + [__LC_COLLATE] = _NL_ITEM_INDEX (_NL_COLLATE_CODESET), + [__LC_MONETARY] = _NL_ITEM_INDEX (_NL_MONETARY_CODESET), + [__LC_MESSAGES] = _NL_ITEM_INDEX (_NL_MESSAGES_CODESET), + [__LC_PAPER] = _NL_ITEM_INDEX (_NL_PAPER_CODESET), + [__LC_NAME] = _NL_ITEM_INDEX (_NL_NAME_CODESET), + [__LC_ADDRESS] = _NL_ITEM_INDEX (_NL_ADDRESS_CODESET), + [__LC_TELEPHONE] = _NL_ITEM_INDEX (_NL_TELEPHONE_CODESET), + [__LC_MEASUREMENT] = _NL_ITEM_INDEX (_NL_MEASUREMENT_CODESET), + [__LC_IDENTIFICATION] = _NL_ITEM_INDEX (_NL_IDENTIFICATION_CODESET) + }; + const struct locale_data *data; + const char *locale_codeset; + char *clocale_codeset; + char *ccodeset; + + data = (const struct locale_data *) locale_file->data; + locale_codeset = + (const char *) data->values[codeset_idx[category]].string; + assert (locale_codeset != NULL); + /* Note the length of the allocated memory: +3 for up to two slashes + and the NUL byte. */ + clocale_codeset = (char *) alloca (strlen (locale_codeset) + 3); + strip (clocale_codeset, locale_codeset); + + ccodeset = (char *) alloca (strlen (codeset) + 3); + strip (ccodeset, codeset); + + if (strcmp (__gconv_lookup_alias (upstr (ccodeset, ccodeset)), + __gconv_lookup_alias (upstr (clocale_codeset, + clocale_codeset))) != 0) + /* The codesets are not identical, don't use the locale. */ return NULL; } diff -durpNa glibc-2.2.2/locale/langinfo.h glibc-2.2.3/locale/langinfo.h --- glibc-2.2.2/locale/langinfo.h Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/langinfo.h Sat Apr 7 14:02:35 2001 @@ -231,6 +231,8 @@ enum #define _DATE_FMT _DATE_FMT _NL_W_DATE_FMT, + _NL_TIME_CODESET, + _NL_NUM_LC_TIME, /* Number of indices in LC_TIME category. */ /* LC_COLLATE category: text sorting. @@ -254,6 +256,7 @@ enum _NL_COLLATE_SYMB_EXTRAMB, _NL_COLLATE_COLLSEQMB, _NL_COLLATE_COLLSEQWC, + _NL_COLLATE_CODESET, _NL_NUM_LC_COLLATE, /* LC_CTYPE category: character classification. @@ -459,6 +462,7 @@ enum _NL_MONETARY_CONVERSION_RATE, _NL_MONETARY_DECIMAL_POINT_WC, _NL_MONETARY_THOUSANDS_SEP_WC, + _NL_MONETARY_CODESET, _NL_NUM_LC_MONETARY, /* LC_NUMERIC category: formatting of numbers. @@ -481,6 +485,7 @@ enum #endif _NL_NUMERIC_DECIMAL_POINT_WC, _NL_NUMERIC_THOUSANDS_SEP_WC, + _NL_NUMERIC_CODESET, _NL_NUM_LC_NUMERIC, __YESEXPR = _NL_ITEM (__LC_MESSAGES, 0), /* Regex matching ``yes'' input. */ @@ -495,10 +500,12 @@ enum #if defined __USE_GNU || (defined __USE_XOPEN && !defined __USE_XOPEN2K) # define NOSTR __NOSTR #endif + _NL_MESSAGES_CODESET, _NL_NUM_LC_MESSAGES, _NL_PAPER_HEIGHT = _NL_ITEM (__LC_PAPER, 0), _NL_PAPER_WIDTH, + _NL_PAPER_CODESET, _NL_NUM_LC_PAPER, _NL_NAME_NAME_FMT = _NL_ITEM (__LC_NAME, 0), @@ -507,6 +514,7 @@ enum _NL_NAME_NAME_MRS, _NL_NAME_NAME_MISS, _NL_NAME_NAME_MS, + _NL_NAME_CODESET, _NL_NUM_LC_NAME, _NL_ADDRESS_POSTAL_FMT = _NL_ITEM (__LC_ADDRESS, 0), @@ -521,15 +529,18 @@ enum _NL_ADDRESS_LANG_AB, _NL_ADDRESS_LANG_TERM, _NL_ADDRESS_LANG_LIB, + _NL_ADDRESS_CODESET, _NL_NUM_LC_ADDRESS, _NL_TELEPHONE_TEL_INT_FMT = _NL_ITEM (__LC_TELEPHONE, 0), _NL_TELEPHONE_TEL_DOM_FMT, _NL_TELEPHONE_INT_SELECT, _NL_TELEPHONE_INT_PREFIX, + _NL_TELEPHONE_CODESET, _NL_NUM_LC_TELEPHONE, _NL_MEASUREMENT_MEASUREMENT = _NL_ITEM (__LC_MEASUREMENT, 0), + _NL_MEASUREMENT_CODESET, _NL_NUM_LC_MEASUREMENT, _NL_IDENTIFICATION_TITLE = _NL_ITEM (__LC_IDENTIFICATION, 0), @@ -547,6 +558,7 @@ enum _NL_IDENTIFICATION_REVISION, _NL_IDENTIFICATION_DATE, _NL_IDENTIFICATION_CATEGORY, + _NL_IDENTIFICATION_CODESET, _NL_NUM_LC_IDENTIFICATION, /* This marks the highest value used. */ diff -durpNa glibc-2.2.2/locale/localeinfo.h glibc-2.2.3/locale/localeinfo.h --- glibc-2.2.2/locale/localeinfo.h Sat Jan 13 10:48:49 2001 +++ glibc-2.2.3/locale/localeinfo.h Sat Apr 7 14:02:35 2001 @@ -155,6 +155,9 @@ extern struct locale_data * *const _nl_c extern const char _nl_C_name[]; extern const char _nl_POSIX_name[]; +/* The standard codeset. */ +extern const char _nl_C_codeset[]; + /* Extract the current CATEGORY locale's string for ITEM. */ #define _NL_CURRENT(category, item) \ (_nl_current_##category->values[_NL_ITEM_INDEX (item)].string) diff -durpNa glibc-2.2.2/locale/newlocale.c glibc-2.2.3/locale/newlocale.c --- glibc-2.2.2/locale/newlocale.c Tue Jan 23 14:07:17 2001 +++ glibc-2.2.3/locale/newlocale.c Thu Apr 12 14:02:03 2001 @@ -173,11 +173,11 @@ __newlocale (int category_mask, const ch { union locale_data_value *ctypes = result_ptr->__locales[LC_CTYPE]->values; result_ptr->__ctype_b = (const unsigned short int *) - (ctypes[_NL_ITEM_INDEX (_NL_CTYPE_CLASS)].string); + ctypes[_NL_ITEM_INDEX (_NL_CTYPE_CLASS)].string + 128; result_ptr->__ctype_tolower = (const int *) - (ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOLOWER)].string); + ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOLOWER)].string + 128; result_ptr->__ctype_toupper = (const int *) - (ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOUPPER)].string); + ctypes[_NL_ITEM_INDEX (_NL_CTYPE_TOUPPER)].string + 128; } return result_ptr; diff -durpNa glibc-2.2.2/locale/programs/charmap-dir.c glibc-2.2.3/locale/programs/charmap-dir.c --- glibc-2.2.2/locale/programs/charmap-dir.c Sun Oct 1 12:10:24 2000 +++ glibc-2.2.3/locale/programs/charmap-dir.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000,2001 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 @@ -164,7 +164,7 @@ charmap_closedir (CHARMAP_DIR *cdir) a stream reading its output (the decompressed data). */ static FILE * -fopen_uncompressed (const char *pathname, char *compressor) +fopen_uncompressed (const char *pathname, const char *compressor) { int pfd; @@ -178,7 +178,8 @@ fopen_uncompressed (const char *pathname && S_ISREG (statbuf.st_mode) && pipe (fd) >= 0) { - char *argv[4] = { compressor, "-d", "-c", NULL }; + char *argv[4] + = { (char *) compressor, (char *) "-d", (char *) "-c", NULL }; posix_spawn_file_actions_t actions; if (posix_spawn_file_actions_init (&actions) == 0) diff -durpNa glibc-2.2.2/locale/programs/charmap.c glibc-2.2.3/locale/programs/charmap.c --- glibc-2.2.2/locale/programs/charmap.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/charmap.c Sat Apr 7 14:02:35 2001 @@ -56,7 +56,9 @@ static void charmap_new_char (struct lin const char *to, int decimal_ellipsis, int step); +#ifdef NEED_NULL_POINTER static const char *null_pointer; +#endif static struct linereader * cmlr_open (const char *directory, const char *name, kw_hash_fct_t hf) diff -durpNa glibc-2.2.2/locale/programs/ld-address.c glibc-2.2.3/locale/programs/ld-address.c --- glibc-2.2.2/locale/programs/ld-address.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-address.c Sat Apr 7 14:02:35 2001 @@ -161,7 +161,7 @@ address_finish (struct localedef_t *loca if (*++cp == 'R') /* Romanize-flag. */ ++cp; - if (strchr ("afdbshNtreCzTc%", *cp) == NULL) + if (strchr ("afdbshNtreCzTSc%", *cp) == NULL) { error (0, 0, _("\ %s: invalid escape `%%%c' sequence in field `%s'"), @@ -407,6 +407,11 @@ address_output (struct localedef_t *loca idx[cnt - 3] = idx[cnt - 4] + iov[cnt - 1].iov_len; iov[cnt].iov_base = (void *) address->lang_lib; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + + idx[cnt - 3] = idx[cnt - 4] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; ++cnt; diff -durpNa glibc-2.2.2/locale/programs/ld-collate.c glibc-2.2.3/locale/programs/ld-collate.c --- glibc-2.2.2/locale/programs/ld-collate.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-collate.c Sat Apr 7 14:02:35 2001 @@ -2522,7 +2522,13 @@ collate_output (struct localedef_t *loca assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_COLLSEQWC)); iov[2 + cnt].iov_base = collate->wcseqorder.result; iov[2 + cnt].iov_len = collate->wcseqorder.result_size; + idx[1 + cnt] = idx[cnt] + iov[2 + cnt].iov_len; assert (idx[cnt] % __alignof__ (int32_t) == 0); + ++cnt; + + assert (cnt == _NL_ITEM_INDEX (_NL_COLLATE_CODESET)); + iov[2 + cnt].iov_base = (void *) charmap->code_set_name; + iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1; ++cnt; assert (cnt == _NL_ITEM_INDEX (_NL_NUM_LC_COLLATE)); diff -durpNa glibc-2.2.2/locale/programs/ld-identification.c glibc-2.2.3/locale/programs/ld-identification.c --- glibc-2.2.2/locale/programs/ld-identification.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-identification.c Sat Apr 7 14:02:35 2001 @@ -185,6 +185,7 @@ identification_output (struct localedef_ uint32_t idx[_NL_ITEM_INDEX (_NL_NUM_LC_IDENTIFICATION)]; size_t cnt = 0; size_t num; + size_t last_idx; data.magic = LIMAGIC (LC_IDENTIFICATION); data.n = _NL_ITEM_INDEX (_NL_NUM_LC_IDENTIFICATION); @@ -267,19 +268,26 @@ identification_output (struct localedef_ ++cnt; idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; + last_idx = cnt - 1; + idx[last_idx] = idx[cnt - 2]; for (num = 0; num < __LC_LAST; ++num) if (num != LC_ALL) { iov[cnt].iov_base = (void *) identification->category[num]; iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + idx[last_idx] += iov[cnt].iov_len; ++cnt; } + assert (last_idx == _NL_ITEM_INDEX (_NL_NUM_LC_IDENTIFICATION) - 1); + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == (2 + _NL_ITEM_INDEX (_NL_NUM_LC_IDENTIFICATION) + (__LC_LAST - 2))); - write_locale_data (output_path, "LC_IDENTIFICATION", - 2 + _NL_ITEM_INDEX (_NL_NUM_LC_IDENTIFICATION), iov); + write_locale_data (output_path, "LC_IDENTIFICATION", cnt, iov); } diff -durpNa glibc-2.2.2/locale/programs/ld-measurement.c glibc-2.2.3/locale/programs/ld-measurement.c --- glibc-2.2.2/locale/programs/ld-measurement.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-measurement.c Sat Apr 7 14:02:35 2001 @@ -141,6 +141,11 @@ measurement_output (struct localedef_t * iov[cnt].iov_len = 1; ++cnt; + idx[cnt - 2] = iov[0].iov_len + iov[1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == 2 + _NL_ITEM_INDEX (_NL_NUM_LC_MEASUREMENT)); write_locale_data (output_path, "LC_MEASUREMENT", diff -durpNa glibc-2.2.2/locale/programs/ld-messages.c glibc-2.2.3/locale/programs/ld-messages.c --- glibc-2.2.2/locale/programs/ld-messages.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-messages.c Sat Apr 7 14:02:35 2001 @@ -216,6 +216,11 @@ messages_output (struct localedef_t *loc idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; iov[cnt].iov_base = (char *) messages->nostr; iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + + idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (char *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; assert (cnt + 1 == 2 + _NL_ITEM_INDEX (_NL_NUM_LC_MESSAGES)); diff -durpNa glibc-2.2.2/locale/programs/ld-monetary.c glibc-2.2.3/locale/programs/ld-monetary.c --- glibc-2.2.2/locale/programs/ld-monetary.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-monetary.c Sat Apr 7 14:02:35 2001 @@ -608,6 +608,11 @@ monetary_output (struct localedef_t *loc iov[cnt].iov_len = sizeof (uint32_t); ++cnt; + idx[cnt - 3] = idx[cnt - 4] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == 3 + _NL_ITEM_INDEX (_NL_NUM_LC_MONETARY)); write_locale_data (output_path, "LC_MONETARY", diff -durpNa glibc-2.2.2/locale/programs/ld-name.c glibc-2.2.3/locale/programs/ld-name.c --- glibc-2.2.2/locale/programs/ld-name.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-name.c Sat Apr 7 14:02:35 2001 @@ -200,6 +200,11 @@ name_output (struct localedef_t *locale, iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; ++cnt; + idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == 2 + _NL_ITEM_INDEX (_NL_NUM_LC_NAME)); write_locale_data (output_path, "LC_NAME", diff -durpNa glibc-2.2.2/locale/programs/ld-numeric.c glibc-2.2.3/locale/programs/ld-numeric.c --- glibc-2.2.2/locale/programs/ld-numeric.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-numeric.c Sat Apr 7 14:02:35 2001 @@ -178,6 +178,11 @@ numeric_output (struct localedef_t *loca idx[cnt - 3] = idx[cnt - 4] + iov[cnt - 1].iov_len; iov[cnt].iov_base = (void *) &numeric->thousands_sep_wc; iov[cnt].iov_len = sizeof (uint32_t); + ++cnt; + + idx[cnt - 3] = idx[cnt - 4] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; assert (cnt + 1 == 3 + _NL_ITEM_INDEX (_NL_NUM_LC_NUMERIC)); diff -durpNa glibc-2.2.2/locale/programs/ld-paper.c glibc-2.2.3/locale/programs/ld-paper.c --- glibc-2.2.2/locale/programs/ld-paper.c Thu Feb 15 14:08:32 2001 +++ glibc-2.2.3/locale/programs/ld-paper.c Sat Apr 7 14:02:35 2001 @@ -143,6 +143,11 @@ paper_output (struct localedef_t *locale iov[cnt].iov_len = 4; ++cnt; + idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == 2 + _NL_ITEM_INDEX (_NL_NUM_LC_PAPER)); write_locale_data (output_path, "LC_PAPER", diff -durpNa glibc-2.2.2/locale/programs/ld-telephone.c glibc-2.2.3/locale/programs/ld-telephone.c --- glibc-2.2.2/locale/programs/ld-telephone.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-telephone.c Sat Apr 7 14:02:35 2001 @@ -210,6 +210,11 @@ telephone_output (struct localedef_t *lo iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; ++cnt; + idx[cnt - 2] = idx[cnt - 3] + iov[cnt - 1].iov_len; + iov[cnt].iov_base = (void *) charmap->code_set_name;; + iov[cnt].iov_len = strlen (iov[cnt].iov_base) + 1; + ++cnt; + assert (cnt == 2 + _NL_ITEM_INDEX (_NL_NUM_LC_TELEPHONE)); write_locale_data (output_path, "LC_TELEPHONE", diff -durpNa glibc-2.2.2/locale/programs/ld-time.c glibc-2.2.3/locale/programs/ld-time.c --- glibc-2.2.2/locale/programs/ld-time.c Fri Feb 9 10:04:12 2001 +++ glibc-2.2.3/locale/programs/ld-time.c Sat Apr 7 14:02:35 2001 @@ -869,6 +869,12 @@ time_output (struct localedef_t *locale, iov[2 + cnt].iov_base = (void *) time->wdate_fmt; iov[2 + cnt].iov_len = ((wcslen (iov[2 + cnt].iov_base) + 1) * sizeof (uint32_t)); + idx[1 + last_idx] = idx[last_idx] + iov[2 + cnt].iov_len; + ++cnt; + ++last_idx; + + iov[2 + cnt].iov_base = (void *) charmap->code_set_name; + iov[2 + cnt].iov_len = strlen (iov[2 + cnt].iov_base) + 1; ++cnt; ++last_idx; diff -durpNa glibc-2.2.2/locale/programs/localedef.c glibc-2.2.3/locale/programs/localedef.c --- glibc-2.2.2/locale/programs/localedef.c Fri Feb 9 10:04:13 2001 +++ glibc-2.2.3/locale/programs/localedef.c Wed Apr 25 14:50:59 2001 @@ -194,7 +194,7 @@ main (int argc, char *argv[]) /* Add the first entry in the locale list. */ memset (&global, '\0', sizeof (struct localedef_t)); - global.name = input_file; + global.name = input_file ?: "/dev/stdin"; global.needed = ALL_LOCALES; locales = &global; diff -durpNa glibc-2.2.2/locale/programs/locfile.c glibc-2.2.3/locale/programs/locfile.c --- glibc-2.2.2/locale/programs/locfile.c Fri Feb 9 10:04:13 2001 +++ glibc-2.2.3/locale/programs/locfile.c Wed Apr 25 14:50:59 2001 @@ -51,7 +51,7 @@ locfile_read (struct localedef_t *result ldfile = lr_open (filename, locfile_hash); if (ldfile == NULL) { - if (filename[0] != '/') + if (filename != NULL && filename[0] != '/') { char *i18npath = getenv ("I18NPATH"); if (i18npath != NULL && *i18npath != '\0') diff -durpNa glibc-2.2.2/locale/tst-C-locale.c glibc-2.2.3/locale/tst-C-locale.c --- glibc-2.2.2/locale/tst-C-locale.c Thu Oct 26 17:11:41 2000 +++ glibc-2.2.3/locale/tst-C-locale.c Thu Apr 12 14:02:03 2001 @@ -1,5 +1,5 @@ /* Tests of C and POSIX locale contents. - Copyright (C) 2000 Free Software Foundation, Inc. + Copyright (C) 2000, 2001 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 2000. The GNU C Library is free software; you can redistribute it and/or @@ -17,12 +17,14 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#include #include #include #include #include #include #include +#include static int @@ -32,6 +34,7 @@ run_test (const char *locname) const char *str; const wchar_t *wstr; int result = 0; + __locale_t loc; /* ISO C stuff. */ lc = localeconv (); @@ -92,7 +95,7 @@ run_test (const char *locname) str = nl_langinfo (name); \ if (strcmp (str, exp) != 0) \ { \ - printf ("nl_langinfo(" #name ") int locale %s wrong " \ + printf ("nl_langinfo(" #name ") in locale %s wrong " \ "(is \"%s\", should be \"%s\")\n", locname, str, exp); \ result = 1; \ } @@ -100,7 +103,7 @@ run_test (const char *locname) wstr = (wchar_t *) nl_langinfo (name); \ if (wcscmp (wstr, exp) != 0) \ { \ - printf ("nl_langinfo(" #name ") int locale %s wrong " \ + printf ("nl_langinfo(" #name ") in locale %s wrong " \ "(is \"%S\", should be \"%S\")\n", locname, wstr, exp); \ result = 1; \ } @@ -217,6 +220,230 @@ run_test (const char *locname) STRTEST (YESSTR, ""); STRTEST (NOSTR, ""); + + /* Test the new locale mechanisms. */ + loc = __newlocale (LC_ALL, locname, NULL); + if (loc == NULL) + { + printf ("cannot create locale object for locale %s\n", locname); + result = 1; + } + else + { + int c; + +#undef STRTEST +#define STRTEST(name, exp) \ + str = __nl_langinfo_l (name, loc); \ + if (strcmp (str, exp) != 0) \ + { \ + printf ("__nl_langinfo_l(" #name ") in locale %s wrong " \ + "(is \"%s\", should be \"%s\")\n", locname, str, exp); \ + result = 1; \ + } +#undef WSTRTEST +#define WSTRTEST(name, exp) \ + wstr = (wchar_t *) __nl_langinfo_l (name, loc); \ + if (wcscmp (wstr, exp) != 0) \ + { \ + printf ("__nl_langinfo_l(" #name ") in locale %s wrong " \ + "(is \"%S\", should be \"%S\")\n", locname, wstr, exp); \ + result = 1; \ + } + + /* Unix stuff. */ + STRTEST (ABDAY_1, "Sun"); + STRTEST (ABDAY_2, "Mon"); + STRTEST (ABDAY_3, "Tue"); + STRTEST (ABDAY_4, "Wed"); + STRTEST (ABDAY_5, "Thu"); + STRTEST (ABDAY_6, "Fri"); + STRTEST (ABDAY_7, "Sat"); + STRTEST (DAY_1, "Sunday"); + STRTEST (DAY_2, "Monday"); + STRTEST (DAY_3, "Tuesday"); + STRTEST (DAY_4, "Wednesday"); + STRTEST (DAY_5, "Thursday"); + STRTEST (DAY_6, "Friday"); + STRTEST (DAY_7, "Saturday"); + STRTEST (ABMON_1, "Jan"); + STRTEST (ABMON_2, "Feb"); + STRTEST (ABMON_3, "Mar"); + STRTEST (ABMON_4, "Apr"); + STRTEST (ABMON_5, "May"); + STRTEST (ABMON_6, "Jun"); + STRTEST (ABMON_7, "Jul"); + STRTEST (ABMON_8, "Aug"); + STRTEST (ABMON_9, "Sep"); + STRTEST (ABMON_10, "Oct"); + STRTEST (ABMON_11, "Nov"); + STRTEST (ABMON_12, "Dec"); + STRTEST (MON_1, "January"); + STRTEST (MON_2, "February"); + STRTEST (MON_3, "March"); + STRTEST (MON_4, "April"); + STRTEST (MON_5, "May"); + STRTEST (MON_6, "June"); + STRTEST (MON_7, "July"); + STRTEST (MON_8, "August"); + STRTEST (MON_9, "September"); + STRTEST (MON_10, "October"); + STRTEST (MON_11, "November"); + STRTEST (MON_12, "December"); + STRTEST (AM_STR, "AM"); + STRTEST (PM_STR, "PM"); + STRTEST (D_T_FMT, "%a %b %e %H:%M:%S %Y"); + STRTEST (D_FMT, "%m/%d/%y"); + STRTEST (T_FMT, "%H:%M:%S"); + STRTEST (T_FMT_AMPM, "%I:%M:%S %p"); + + STRTEST (RADIXCHAR, "."); + STRTEST (THOUSEP, ""); + + STRTEST (YESEXPR, "^[yY]"); + STRTEST (NOEXPR, "^[nN]"); + + /* Extensions. */ + WSTRTEST (_NL_WABDAY_1, L"Sun"); + WSTRTEST (_NL_WABDAY_2, L"Mon"); + WSTRTEST (_NL_WABDAY_3, L"Tue"); + WSTRTEST (_NL_WABDAY_4, L"Wed"); + WSTRTEST (_NL_WABDAY_5, L"Thu"); + WSTRTEST (_NL_WABDAY_6, L"Fri"); + WSTRTEST (_NL_WABDAY_7, L"Sat"); + WSTRTEST (_NL_WDAY_1, L"Sunday"); + WSTRTEST (_NL_WDAY_2, L"Monday"); + WSTRTEST (_NL_WDAY_3, L"Tuesday"); + WSTRTEST (_NL_WDAY_4, L"Wednesday"); + WSTRTEST (_NL_WDAY_5, L"Thursday"); + WSTRTEST (_NL_WDAY_6, L"Friday"); + WSTRTEST (_NL_WDAY_7, L"Saturday"); + WSTRTEST (_NL_WABMON_1, L"Jan"); + WSTRTEST (_NL_WABMON_2, L"Feb"); + WSTRTEST (_NL_WABMON_3, L"Mar"); + WSTRTEST (_NL_WABMON_4, L"Apr"); + WSTRTEST (_NL_WABMON_5, L"May"); + WSTRTEST (_NL_WABMON_6, L"Jun"); + WSTRTEST (_NL_WABMON_7, L"Jul"); + WSTRTEST (_NL_WABMON_8, L"Aug"); + WSTRTEST (_NL_WABMON_9, L"Sep"); + WSTRTEST (_NL_WABMON_10, L"Oct"); + WSTRTEST (_NL_WABMON_11, L"Nov"); + WSTRTEST (_NL_WABMON_12, L"Dec"); + WSTRTEST (_NL_WMON_1, L"January"); + WSTRTEST (_NL_WMON_2, L"February"); + WSTRTEST (_NL_WMON_3, L"March"); + WSTRTEST (_NL_WMON_4, L"April"); + WSTRTEST (_NL_WMON_5, L"May"); + WSTRTEST (_NL_WMON_6, L"June"); + WSTRTEST (_NL_WMON_7, L"July"); + WSTRTEST (_NL_WMON_8, L"August"); + WSTRTEST (_NL_WMON_9, L"September"); + WSTRTEST (_NL_WMON_10, L"October"); + WSTRTEST (_NL_WMON_11, L"November"); + WSTRTEST (_NL_WMON_12, L"December"); + WSTRTEST (_NL_WAM_STR, L"AM"); + WSTRTEST (_NL_WPM_STR, L"PM"); + WSTRTEST (_NL_WD_T_FMT, L"%a %b %e %H:%M:%S %Y"); + WSTRTEST (_NL_WD_FMT, L"%m/%d/%y"); + WSTRTEST (_NL_WT_FMT, L"%H:%M:%S"); + WSTRTEST (_NL_WT_FMT_AMPM, L"%I:%M:%S %p"); + + STRTEST (_DATE_FMT, "%a %b %e %H:%M:%S %Z %Y"); + WSTRTEST (_NL_W_DATE_FMT, L"%a %b %e %H:%M:%S %Z %Y"); + + STRTEST (INT_CURR_SYMBOL, ""); + STRTEST (CURRENCY_SYMBOL, ""); + STRTEST (MON_DECIMAL_POINT, ""); + STRTEST (MON_THOUSANDS_SEP, ""); + STRTEST (MON_GROUPING, ""); + STRTEST (POSITIVE_SIGN, ""); + STRTEST (NEGATIVE_SIGN, ""); + STRTEST (GROUPING, ""); + + STRTEST (YESSTR, ""); + STRTEST (NOSTR, ""); + + /* Character class tests. */ + for (c = 0; c < 128; ++c) + { +#define CLASSTEST(name) \ + if (is##name (c) != __is##name##_l (c, loc)) \ + { \ + printf ("is%s('\\%o') != __is%s_l('\\%o')\n", \ + #name, c, #name, c); \ + result = 1; \ + } + CLASSTEST (alnum); + CLASSTEST (alpha); + CLASSTEST (blank); + CLASSTEST (cntrl); + CLASSTEST (digit); + CLASSTEST (lower); + CLASSTEST (graph); + CLASSTEST (print); + CLASSTEST (punct); + CLASSTEST (space); + CLASSTEST (upper); + CLASSTEST (xdigit); + + /* Character mapping tests. */ +#define MAPTEST(name) \ + if (to##name (c) != __to##name##_l (c, loc)) \ + { \ + printf ("to%s('\\%o') != __to%s_l('\\%o'): '\\%o' vs '\\%o'\n", \ + #name, c, #name, c, \ + to##name (c), __to##name##_l (c, loc)); \ + result = 1; \ + } + MAPTEST (lower); + MAPTEST (upper); + } + + /* Character class tests, this time for wide characters. Note that + this only works because we know that the internal encoding is + UCS4. */ + for (c = 0; c < 128; ++c) + { +#undef CLASSTEST +#define CLASSTEST(name) \ + if (isw##name (c) != __isw##name##_l (c, loc)) \ + { \ + printf ("isw%s('\\%o') != __isw%s_l('\\%o')\n", \ + #name, c, #name, c); \ + result = 1; \ + } + CLASSTEST (alnum); + CLASSTEST (alpha); + CLASSTEST (blank); + CLASSTEST (cntrl); + CLASSTEST (digit); + CLASSTEST (lower); + CLASSTEST (graph); + CLASSTEST (print); + CLASSTEST (punct); + CLASSTEST (space); + CLASSTEST (upper); + CLASSTEST (xdigit); + + /* Character mapping tests. Note that + this only works because we know that the internal encoding is + UCS4. */ +#undef MAPTEST +#define MAPTEST(name) \ + if (tow##name (c) != __tow##name##_l (c, loc)) \ + { \ + printf ("tow%s('\\%o') != __tow%s_l('\\%o'): '\\%o' vs '\\%o'\n",\ + #name, c, #name, c, \ + tow##name (c), __tow##name##_l (c, loc)); \ + result = 1; \ + } + MAPTEST (lower); + MAPTEST (upper); + } + + __freelocale (loc); + } return result; } diff -durpNa glibc-2.2.2/localedata/ChangeLog glibc-2.2.3/localedata/ChangeLog --- glibc-2.2.2/localedata/ChangeLog Thu Feb 15 14:35:29 2001 +++ glibc-2.2.3/localedata/ChangeLog Wed Apr 25 14:50:59 2001 @@ -1,3 +1,30 @@ +2001-04-18 Jakub Jelinek + + * locales/be_BY: Fix syntax in LC_COLLATE section. + * locales/ru_UA: Likewise. + * locales/tr_TR: Likewise. + * locales/uk_UA: Likewise. + +2001-03-18 Ulrich Drepper + + * locales/fa_IR: Add outdigit information and collation. + Patch by Roozbeh Pournader . + +2001-02-21 Ulrich Drepper + + * locales/i18n: Don't define outdigit. + +2001-02-19 Ulrich Drepper + + * locales/th_TH: Remove name_ms entry. + Patch by Theppitak Karoonboonyanan . + +2001-02-16 Ulrich Drepper + + * locales/th_TH: Update era information and some of the new + categories. + Patch by Theppitak Karoonboonyanan . + 2001-02-15 Ulrich Drepper * locales/i18n: Correct classification of Thai characters. This diff -durpNa glibc-2.2.2/localedata/locales/be_BY glibc-2.2.3/localedata/locales/be_BY --- glibc-2.2.2/localedata/locales/be_BY Tue Oct 31 11:10:02 2000 +++ glibc-2.2.3/localedata/locales/be_BY Wed Apr 25 14:50:59 2001 @@ -1919,14 +1919,14 @@ UNDEFINED IGNORE;IGNORE;IGNORE ;;IGNORE;IGNORE ;;IGNORE;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE % katakana/hiragana sorting % base is katakana, as this is present in most charsets diff -durpNa glibc-2.2.2/localedata/locales/fa_IR glibc-2.2.3/localedata/locales/fa_IR --- glibc-2.2.2/localedata/locales/fa_IR Thu Oct 26 22:57:29 2000 +++ glibc-2.2.3/localedata/locales/fa_IR Mon Mar 26 20:53:00 2001 @@ -2,17 +2,17 @@ comment_char % escape_char / % % Persian Language Locale for Iran with UTF-8 character set -% Source: The Persian Internet Project +% Source: The FarsiWeb Project % Address: Computing Center, Sharif University of Technology % Azadi Ave, Tehran, Iran % Contact: Roozbeh Pournader -% Email: roozbeh@sina.sharif.ac.ir +% Email: roozbeh@sharif.edu % Tel: +98 21 6022378 % Fax: +98 21 6019568 % Language: fa % Territory: IR -% Revision: 2.0 -% Date: 2000-10-17 +% Revision: 2.1 +% Date: 2001-03-18 % Users: general % Repertoiremap: % Charset: UTF-8 @@ -21,37 +21,147 @@ escape_char / LC_IDENTIFICATION title "Persian locale for Iran" -source "The Persian Internet Project" +source "The FarsiWeb Project" address "Computing Center, Sharif University of Technology, Azadi Ave, Tehran, Iran" contact "Roozbeh Pournader" -email "roozbeh@sina.sharif.ac.ir" +email "roozbeh@sharif.edu" tel "+98 21 6022378" fax "+98 21 6019568" language "Persian" territory "Iran" -revision "2.0" -date "2000-10-17" +revision "2.1" +date "2001-03-18" % -category "fa_IR:2000";LC_IDENTIFICATION -category "fa_IR:2000";LC_CTYPE -category "fa_IR:2000";LC_COLLATE -category "fa_IR:2000";LC_TIME -category "fa_IR:2000";LC_NUMERIC -category "fa_IR:2000";LC_MONETARY -category "fa_IR:2000";LC_MESSAGES -category "fa_IR:2000";LC_PAPER -category "fa_IR:2000";LC_NAME -category "fa_IR:2000";LC_ADDRESS -category "fa_IR:2000";LC_TELEPHONE +category "fa_IR:2001";LC_IDENTIFICATION +category "fa_IR:2001";LC_CTYPE +category "fa_IR:2001";LC_COLLATE +category "fa_IR:2001";LC_TIME +category "fa_IR:2001";LC_NUMERIC +category "fa_IR:2001";LC_MONETARY +category "fa_IR:2001";LC_MESSAGES +category "fa_IR:2001";LC_PAPER +category "fa_IR:2001";LC_NAME +category "fa_IR:2001";LC_ADDRESS +category "fa_IR:2001";LC_TELEPHONE END LC_IDENTIFICATION LC_CTYPE copy "i18n" + +outdigit .. END LC_CTYPE LC_COLLATE copy "iso14651_t1" + +% The Persian alphabet order is: ALEF WITH MADDA ABOVE, ALEF, HAMZA (all +% kinds), BEH, PEH, TEH, JEEM, TCHEH, HAH, KHAH, DAL, THAL, REH, ZAIN, JEH, +% SEEN, SHEEN, SAD, DAD, TAH, ZAH, AIN, GHAIN, FEH, QAF, KAF, GAF, LAM, +% MEEM, NOON, WAW, HEH, YEH. +% The various kind of HAMZA are sorted as ALEF WITH HAMZA ABOVE, ALEF WITH +% HAMZA BELOW, WAW WITH HAMZA ABOVE, YEH WITH HAMZA ABOVE. +% +% TODO: add "Waw + Hamza Above -> Waw With Hamza Above" suport and things +% like that. +% +% TODO: add Arabic contextual forms support. + +collating-symbol % accent hamza over yeh +collating-symbol % dotless +collating-symbol % with dots over +collating-symbol % with wasla over +collating-symbol +collating-symbol + +reorder-after + + + + + + + + + + +reorder-after + + + + +reorder-after + + + +% Persian uses fatha, kasra, damma, fathatan, kasratan, dammatan order. + +reorder-after + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + +reorder-after + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + IGNORE;IGNORE;IGNORE; % + +% Persian digits are sorted before Arabic ones: they are the basic forms. +reorder-after + <0>;;;IGNORE + <0>;;;IGNORE + <1>;;;IGNORE + <1>;;;IGNORE + <2>;;;IGNORE + <2>;;;IGNORE + <3>;;;IGNORE + <3>;;;IGNORE + <4>;;;IGNORE + <4>;;;IGNORE + <5>;;;IGNORE + <5>;;;IGNORE + <6>;;;IGNORE + <6>;;;IGNORE + <7>;;;IGNORE + <7>;;;IGNORE + <8>;;;IGNORE + <8>;;;IGNORE + <9>;;;IGNORE + <9>;;;IGNORE + +% And then the letters: + + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE +reorder-after + ;;;IGNORE + ;;;IGNORE +reorder-after + ;;;IGNORE + ;;;IGNORE +reorder-after + ;;;IGNORE + ;;;IGNORE + ;;;IGNORE +reorder-end + END LC_COLLATE LC_MONETARY @@ -125,9 +235,9 @@ d_fmt "" t_fmt_ampm "/ " -date_fmt "/ -/ -" +%date_fmt "/ +%/ +%" first_weekday 7 first_workday 7 cal_direction 3 @@ -175,11 +285,9 @@ postal_fmt "/ " country_name "" -%country_post "???" country_ab2 "" country_ab3 "" country_num 364 -% right? country_car "" country_isbn "" lang_name "" diff -durpNa glibc-2.2.2/localedata/locales/i18n glibc-2.2.3/localedata/locales/i18n --- glibc-2.2.2/localedata/locales/i18n Thu Feb 15 14:35:29 2001 +++ glibc-2.2.3/localedata/locales/i18n Mon Mar 26 20:53:00 2001 @@ -351,7 +351,10 @@ alpha / digit / .. -outdigit .. +% The "outdigit" information is by default "0" to "9". We don't have to +% provide it here since localedef will fill in the bits and it would +% prevent locales copy-ing this file define their own values. +% outdigit .. space / % ISO/IEC 6429/ diff -durpNa glibc-2.2.2/localedata/locales/ru_UA glibc-2.2.3/localedata/locales/ru_UA --- glibc-2.2.2/localedata/locales/ru_UA Tue Oct 31 11:10:03 2000 +++ glibc-2.2.3/localedata/locales/ru_UA Wed Apr 25 14:50:59 2001 @@ -1923,14 +1923,14 @@ UNDEFINED IGNORE;IGNORE;IGNORE ;;IGNORE;IGNORE ;;IGNORE;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE % katakana/hiragana sorting % base is katakana, as this is present in most charsets diff -durpNa glibc-2.2.2/localedata/locales/th_TH glibc-2.2.3/localedata/locales/th_TH --- glibc-2.2.2/localedata/locales/th_TH Tue Oct 31 11:10:03 2000 +++ glibc-2.2.3/localedata/locales/th_TH Mon Mar 26 20:53:00 2001 @@ -888,10 +888,10 @@ mon "";/ "";/ "" -% Appropriate date & time representation "%a %e %b %o, %H:%M:%S" -d_t_fmt "%a%e%b%Y%H%M%S" -% Appropriate date representation "%d/%m/%Y" -d_fmt "%d%m%Y" +% Appropriate date & time representation "%a %e %b %Ey, %H:%M:%S" +d_t_fmt "%a%e%b%Ey%H%M%S" +% Appropriate date representation "%d/%m/%Ey" +d_fmt "%d%m%Ey" % Appropriate time representation "%H:%M:%S" t_fmt "%H%M%S" % AM/PM signs @@ -899,14 +899,16 @@ am_pm "";" % Appropriate 12-hour clock representation "%I:%M:%S %p" t_fmt_ampm "%I%M%S%p" % Era : Buddhist Era -%era "+:1:-542/01/01:+*::%N%o" -%era_d_fmt "%d%b%o" -%era_t_fmt "%H%M%S" -%era_d_t_fmt "%A%d%B%N%o%H%M%S" -% Appropriate date representation (date(1)) "%a %b %e %H:%M:%S %Z %Y" -date_fmt "/ -/ -" +era "+:1:-5430101:+*::%EC%Ey" +era_d_fmt "%e%b%Ey" +era_t_fmt "%H%M%S" +era_d_t_fmt "%A%e%B%EC%Ey%H%M%S" +% Appropriate date representation (date(1)) "%a %e %b %Ey %H:%M:%S %Z" +date_fmt "/ +/ +" +% ICT-7ICT-7 +timezone "" END LC_TIME LC_MESSAGES @@ -916,23 +918,23 @@ LC_MESSAGES % yesstr = "Chai2" = MAIMUAN + CHO CHANG + MAI EK % nostr = "Mai2Chai2" = MAIMALAI + MO MA + MAI EK + MAIMUAN + CHO CHANG + MAI EK -yesexpr "^[]" -noexpr "^[]" +yesexpr "" +noexpr "" yesstr "" nostr "" END LC_MESSAGES LC_PAPER -% FIXME height 297 -% FIXME width 210 END LC_PAPER LC_TELEPHONE tel_int_fmt "/ " +tel_dom_fmt "" +int_select "" int_prefix "" END LC_TELEPHONE @@ -944,12 +946,31 @@ END LC_MEASUREMENT LC_NAME name_fmt "/ " +name_gen "" +name_miss "" +name_mr "" +name_mrs "" END LC_NAME LC_ADDRESS +% "%f%N%a%N%d%N%r%t%e%t%b%N%h%t%s%N%T%N%S%N%z%c%N" postal_fmt "/ -/ -/ -/ -" +/ +/ +/ +" +country_name "" +%FIXME +%country_post "" +country_ab2 "" +country_ab3 "" +%country_num "" +%FIXME +%country_car "" +%FIXME +%country_isbn "" +lang_name "" +lang_ab "" +lang_term "" +lang_lib "" END LC_ADDRESS diff -durpNa glibc-2.2.2/localedata/locales/tr_TR glibc-2.2.3/localedata/locales/tr_TR --- glibc-2.2.2/localedata/locales/tr_TR Tue Oct 31 11:10:03 2000 +++ glibc-2.2.3/localedata/locales/tr_TR Wed Apr 25 14:51:00 2001 @@ -1928,14 +1928,14 @@ UNDEFINED IGNORE;IGNORE;IGNORE ;;IGNORE;IGNORE ;;IGNORE;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE % katakana/hiragana sorting % base is katakana, as this is present in most charsets diff -durpNa glibc-2.2.2/localedata/locales/uk_UA glibc-2.2.3/localedata/locales/uk_UA --- glibc-2.2.2/localedata/locales/uk_UA Tue Oct 31 11:10:05 2000 +++ glibc-2.2.3/localedata/locales/uk_UA Wed Apr 25 14:51:00 2001 @@ -1923,14 +1923,14 @@ UNDEFINED IGNORE;IGNORE;IGNORE ;;IGNORE;IGNORE ;;IGNORE;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE - ;;;IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE + "";"";"";IGNORE % katakana/hiragana sorting % base is katakana, as this is present in most charsets diff -durpNa glibc-2.2.2/localedata/show-ucs-data.c glibc-2.2.3/localedata/show-ucs-data.c --- glibc-2.2.2/localedata/show-ucs-data.c Sun Jun 25 17:28:25 2000 +++ glibc-2.2.3/localedata/show-ucs-data.c Mon Mar 26 20:53:00 2001 @@ -32,7 +32,7 @@ main (int argc, char *argv[]) { unsigned int val = strtoul (runp + 2, NULL, 16); - putchar ('<'); + //putchar ('<'); if (val < 128) putchar (val); else if (val < 0x800) @@ -46,7 +46,7 @@ main (int argc, char *argv[]) putchar (0x80 | ((val >> 6) & 0x3f)); putchar (0x80 | (val & 0x3f)); } - putchar ('>'); + //putchar ('>'); runp += 7; } else diff -durpNa glibc-2.2.2/localedata/tests-mbwc/tst_funcs.h glibc-2.2.3/localedata/tests-mbwc/tst_funcs.h --- glibc-2.2.2/localedata/tests-mbwc/tst_funcs.h Thu Aug 31 14:45:13 2000 +++ glibc-2.2.3/localedata/tests-mbwc/tst_funcs.h Sat Apr 7 14:02:35 2001 @@ -103,6 +103,7 @@ extern int result (FILE * fp, char res, fprintf (stderr, "Warning : can't set locale: %s\nskipping ...\n", \ locale); \ result (fp, C_LOCALES, s_func, locale, 0, 0, 0, "can't set locale"); \ + ++err_count; \ continue; \ } diff -durpNa glibc-2.2.2/login/Makefile glibc-2.2.3/login/Makefile --- glibc-2.2.2/login/Makefile Wed Jun 21 11:11:02 2000 +++ glibc-2.2.3/login/Makefile Mon Mar 26 20:53:01 2001 @@ -1,4 +1,4 @@ -# Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 2000, 2001 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 @@ -60,4 +60,4 @@ $(inst_libexecdir)/pt_chown: $(objpfx)pt # Depend on libc.so so a DT_NEEDED is generated in the shared objects. # This ensures they will load libc.so for needed symbols if loaded by # a statically-linked program that hasn't already loaded it. -$(objpfx)libutil.so: $(common-objpfx)libc.so +$(objpfx)libutil.so: $(common-objpfx)libc.so $(common-objpfx)libc_nonshared.a diff -durpNa glibc-2.2.2/login/tst-utmp.c glibc-2.2.3/login/tst-utmp.c --- glibc-2.2.2/login/tst-utmp.c Tue Jun 2 12:50:30 1998 +++ glibc-2.2.3/login/tst-utmp.c Sat Apr 7 14:02:35 2001 @@ -1,5 +1,5 @@ /* Tests for UTMP functions. - Copyright (C) 1998 Free Software Foundation, Inc. + Copyright (C) 1998, 2001 Free Software Foundation, Inc. Contributed by Mark Kettenis , 1998. The GNU C Library is free software; you can redistribute it and/or @@ -71,20 +71,24 @@ do_prepare (int argc, char *argv[]) error (EXIT_FAILURE, errno, "cannot open test file `%s'", name); } - struct utmp entry[] = { - { ut_type: BOOT_TIME, ut_pid: 1, ut_tv: { tv_sec: 1000 } }, - { ut_type: RUN_LVL, ut_pid: 1, ut_tv: { tv_sec: 2000 } }, - { ut_type: INIT_PROCESS, ut_pid: 5, ut_id: "si", ut_tv: { tv_sec: 3000 } }, +#if _HAVE_UT_TV || defined UTMPX +#define UT(a) ut_tv:{tv_sec:(a)} +#else +#define UT(a) ut_time:(a) +#endif + + { ut_type: BOOT_TIME, ut_pid: 1, UT(1000) }, + { ut_type: RUN_LVL, ut_pid: 1, UT(2000) }, + { ut_type: INIT_PROCESS, ut_pid: 5, ut_id: "si", UT(3000) }, { ut_type: LOGIN_PROCESS, ut_pid: 23, ut_line: "tty1", ut_id: "1", - ut_user: "LOGIN", ut_session: 23, ut_tv: { tv_sec: 4000 } }, + ut_user: "LOGIN", UT(4000) }, { ut_type: USER_PROCESS, ut_pid: 24, ut_line: "tty2", ut_id: "2", - ut_user: "albert", ut_session: 24, ut_tv: { tv_sec: 8000 } }, + ut_user: "albert", UT(8000) }, { ut_type: USER_PROCESS, ut_pid: 196, ut_line: "ttyp0", ut_id: "p0", - ut_user: "niels", ut_session: 196, ut_tv: { tv_sec: 10000 } }, - { ut_type: DEAD_PROCESS, ut_line: "ttyp1", ut_id: "p1", - ut_tv: { tv_sec: 16000 } }, + ut_user: "niels", UT(10000) }, + { ut_type: DEAD_PROCESS, ut_line: "ttyp1", ut_id: "p1", UT(16000) }, { ut_type: EMPTY }, { ut_type: EMPTY } }; @@ -161,8 +165,11 @@ simulate_login (const char *line, const entry[n].ut_pid = (entry_pid += 27); entry[n].ut_type = USER_PROCESS; strcpy (entry[n].ut_user, user); +#if _HAVE_UT_TV - 0 || defined UTMPX entry[n].ut_tv.tv_sec = (entry_time += 1000); - +#else + entry[n].ut_time = (entry_time += 1000); +#endif setutent (); if (pututline (&entry[n]) == NULL) @@ -192,8 +199,11 @@ simulate_logout (const char *line) { entry[n].ut_type = DEAD_PROCESS; entry[n].ut_user[0] = '\0'; - entry[n].ut_tv.tv_sec = (entry_time += 1000); - +#if _HAVE_UT_TV - 0 || defined UTMPX + entry[n].ut_tv.tv_sec = (entry_time += 1000); +#else + entry[n].ut_time = (entry_time += 1000); +#endif setutent (); if (pututline (&entry[n]) == NULL) diff -durpNa glibc-2.2.2/mach/Machrules glibc-2.2.3/mach/Machrules --- glibc-2.2.2/mach/Machrules Mon Mar 29 16:15:55 1999 +++ glibc-2.2.3/mach/Machrules Sat Apr 7 14:02:35 2001 @@ -1,6 +1,6 @@ # Rules for MiG interfaces that want to go into the C library. -# Copyright (C) 1991,92,93,94,95,96,98,99 Free Software Foundation, Inc. +# Copyright (C) 1991,92,93,94,95,96,98,99,2001 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 @@ -55,6 +55,9 @@ $(objpfx)dummy.mk: MIGFLAGS = -DMACH_IPC_COMPAT=0 -DSTANDALONE -DTypeCheck=0 \ $(+includes) $(migdefines) -subrprefix __ +# Putting CC in the enivronment makes the mig wrapper script +# use the same compiler setup we are using to run cpp. +MIG := CC='${CC}' $(MIG) .SUFFIXES: .defs # Just to set specified_rule_matched. diff -durpNa glibc-2.2.2/mach/errsystems.awk glibc-2.2.3/mach/errsystems.awk --- glibc-2.2.2/mach/errsystems.awk Fri Dec 17 13:10:15 1993 +++ glibc-2.2.3/mach/errsystems.awk Sat Apr 7 14:02:35 2001 @@ -16,6 +16,6 @@ const struct error_system __mach_error_s } END { print " };"; - printf "\n\ + print "\n\ const int __mach_error_system_count = errlib_count (__mach_error_systems);"; } diff -durpNa glibc-2.2.2/mach/mach/mig_support.h glibc-2.2.3/mach/mach/mig_support.h --- glibc-2.2.2/mach/mach/mig_support.h Fri Oct 8 10:41:21 1999 +++ glibc-2.2.3/mach/mach/mig_support.h Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1994, 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1993,94,97,99,2001 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 @@ -65,6 +65,8 @@ extern void mig_reply_setup (const mach_ mach_msg_header_t *__reply); /* Idiocy support function. */ +extern vm_size_t mig_strncpy (char *__dst, const char *__src, vm_size_t __len); +extern vm_size_t __mig_strncpy (char *__dst, const char *__src, vm_size_t); extern __inline vm_size_t __mig_strncpy (char *__dst, const char *__src, vm_size_t __len) { diff -durpNa glibc-2.2.2/mach/mach_error.h glibc-2.2.3/mach/mach_error.h --- glibc-2.2.2/mach/mach_error.h Sun Mar 16 09:42:25 1997 +++ glibc-2.2.3/mach/mach_error.h Sat Apr 7 14:02:35 2001 @@ -1,31 +1,37 @@ -/* +/* * Mach Operating System * Copyright (c) 1991,1990,1989 Carnegie Mellon University * All Rights Reserved. - * + * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * + * * Carnegie Mellon requests users of this software to return to - * + * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 - * + * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. */ /* * HISTORY * $Log: mach_error.h,v $ + * Revision 1.4 2001/04/01 05:03:14 roland + * 2001-03-11 Roland McGrath + * + * * mach/mach_error.h: Fix ancient #endif syntax. + * * hurd/hurdmalloc.c: Likewise. + * * Revision 1.3 1997/03/16 17:42:25 drepper * (mach_error_string, mach_error, mach_error_type): Always provide * prototypes. @@ -53,10 +59,10 @@ * * Revision 2.2 92/01/16 00:08:10 rpd * Moved from user collection to mk collection. - * + * * Revision 2.2 91/03/27 15:39:13 mrt * First checkin - * + * */ /* * File: mach_error.h @@ -93,4 +99,4 @@ const char *mach_error_type( mach_error_t error_value ); -#endif _MACH_ERROR_ +#endif /* _MACH_ERROR_ */ diff -durpNa glibc-2.2.2/mach/mach_init.c glibc-2.2.3/mach/mach_init.c --- glibc-2.2.2/mach/mach_init.c Sun Mar 16 09:42:35 1997 +++ glibc-2.2.3/mach/mach_init.c Sat Apr 7 14:02:35 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1993, 1995, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1992,93,95,97,2001 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 +#include mach_port_t __mach_task_self_; vm_size_t __vm_page_size = 0; /* Must be data not bss for weak alias. */ diff -durpNa glibc-2.2.2/mach/msgserver.c glibc-2.2.3/mach/msgserver.c --- glibc-2.2.2/mach/msgserver.c Thu Dec 19 17:32:35 1996 +++ glibc-2.2.3/mach/msgserver.c Mon Apr 9 20:03:29 2001 @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1994, 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1994, 1995, 1996, 2001 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,6 +49,11 @@ /* * HISTORY * $Log: msgserver.c,v $ + * Revision 1.6 2001/04/09 21:23:38 roland + * 2001-04-07 Roland McGrath + * + * * mach/msgserver.c (__mach_msg_server_timeout): Add an assert. + * * Revision 1.5 1996/12/20 01:32:35 drepper * Update from main archive 961219 * @@ -83,6 +88,7 @@ #include #include #include /* For malloc and free. */ +#include mach_msg_return_t __mach_msg_server_timeout (boolean_t (*demux) (mach_msg_header_t *request, @@ -116,6 +122,7 @@ __mach_msg_server_timeout (boolean_t (*d Pass it to DEMUX for processing. */ (void) (*demux) (&request->Head, &reply->Head); + assert (reply->Head.msgh_size <= max_size); switch (reply->RetCode) { diff -durpNa glibc-2.2.2/malloc/Makefile glibc-2.2.3/malloc/Makefile --- glibc-2.2.2/malloc/Makefile Fri Feb 9 10:04:14 2001 +++ glibc-2.2.3/malloc/Makefile Sun Apr 8 22:19:10 2001 @@ -55,7 +55,7 @@ aux := set-freeres include ../Makeconfig -# The AWK script to analyze the output of the mtrace functions. +# The Perl script to analyze the output of the mtrace functions. ifneq ($(PERL),no) install-bin = mtrace generated = mtrace @@ -100,9 +100,11 @@ lib: $(objpfx)libmcheck.a ifeq (no,$(cross-compiling)) ifeq (yes,$(build-shared)) +ifneq ($(PERL),no) tests: $(objpfx)tst-mtrace.out $(objpfx)tst-mtrace.out: tst-mtrace.sh $(objpfx)tst-mtrace $(SHELL) -e $< $(common-objpfx) +endif endif endif diff -durpNa glibc-2.2.2/malloc/malloc.c glibc-2.2.3/malloc/malloc.c --- glibc-2.2.2/malloc/malloc.c Thu Feb 15 14:08:38 2001 +++ glibc-2.2.3/malloc/malloc.c Thu Apr 26 20:07:06 2001 @@ -19,7 +19,7 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: malloc.c,v 1.79 2001/02/15 03:38:09 drepper Exp $ +/* $Id: malloc.c,v 1.80 2001/04/26 00:04:36 drepper Exp $ This work is mainly derived from malloc-2.6.4 by Doug Lea , which is available from: @@ -1292,7 +1292,10 @@ static void free_atfork(); /* sizes, alignments */ #define SIZE_SZ (sizeof(INTERNAL_SIZE_T)) -#define MALLOC_ALIGNMENT (SIZE_SZ + SIZE_SZ) +/* Allow the default to be overwritten on the compiler command line. */ +#ifndef MALLOC_ALIGNMENT +# define MALLOC_ALIGNMENT (SIZE_SZ + SIZE_SZ) +#endif #define MALLOC_ALIGN_MASK (MALLOC_ALIGNMENT - 1) #define MINSIZE (sizeof(struct malloc_chunk)) diff -durpNa glibc-2.2.2/malloc/mcheck.c glibc-2.2.3/malloc/mcheck.c --- glibc-2.2.2/malloc/mcheck.c Tue Mar 28 11:05:32 2000 +++ glibc-2.2.3/malloc/mcheck.c Thu Apr 26 20:07:06 2001 @@ -1,5 +1,5 @@ /* Standard debugging hooks for `malloc'. - Copyright (C) 1990-1997, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1990-1997, 1999, 2000, 2001 Free Software Foundation, Inc. Written May 1989 by Mike Haertel. This library is free software; you can redistribute it and/or @@ -270,7 +270,8 @@ reallochook (ptr, size, caller) return (__ptr_t) (hdr + 1); } -static void mabort __P ((enum mcheck_status status)); +static void mabort __P ((enum mcheck_status status)) + __attribute__ ((noreturn)); static void mabort (status) enum mcheck_status status; @@ -314,6 +315,10 @@ mcheck (func) /* These hooks may not be safely inserted if malloc is already in use. */ if (__malloc_initialized <= 0 && !mcheck_used) { + /* We call malloc() once here to ensure it is initialized. */ + void *p = malloc (0); + free (p); + old_free_hook = __free_hook; __free_hook = freehook; old_malloc_hook = __malloc_hook; diff -durpNa glibc-2.2.2/malloc/memusage.sh glibc-2.2.3/malloc/memusage.sh --- glibc-2.2.2/malloc/memusage.sh Sat Jan 6 20:35:23 2001 +++ glibc-2.2.3/malloc/memusage.sh Sat Apr 7 14:02:35 2001 @@ -18,7 +18,7 @@ # write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. -memusageso=@LIBDIR@/libmemusage.so +memusageso=@SLIBDIR@/libmemusage.so memusagestat=@BINDIR@/memusagestat # Print usage message. diff -durpNa glibc-2.2.2/malloc/mtrace.c glibc-2.2.3/malloc/mtrace.c --- glibc-2.2.2/malloc/mtrace.c Thu Feb 15 14:08:38 2001 +++ glibc-2.2.3/malloc/mtrace.c Mon Mar 26 20:53:01 2001 @@ -42,6 +42,7 @@ #ifdef USE_IN_LIBIO # include +# define fopen(f, n) _IO_fopen64 (f, n) # define setvbuf(s, b, f, l) _IO_setvbuf (s, b, f, l) #endif @@ -268,7 +269,7 @@ mtrace () #endif if (mallfile != NULL || mallwatch != NULL) { - mallstream = fopen64 (mallfile != NULL ? mallfile : "/dev/null", "w"); + mallstream = fopen (mallfile != NULL ? mallfile : "/dev/null", "w"); if (mallstream != NULL) { /* Make sure we close the file descriptor on exec. */ @@ -290,8 +291,10 @@ mtrace () #ifdef _LIBC if (!added_atexit_handler) { + extern void *__dso_handle __attribute__ ((__weak__)); added_atexit_handler = 1; - atexit (release_libc_mem); + __cxa_atexit ((void (*) (void *)) release_libc_mem, NULL, + &__dso_handle ? __dso_handle : NULL); } #endif } diff -durpNa glibc-2.2.2/malloc/obstack.c glibc-2.2.3/malloc/obstack.c --- glibc-2.2.2/malloc/obstack.c Thu Nov 16 11:12:03 2000 +++ glibc-2.2.3/malloc/obstack.c Wed Apr 25 14:51:00 2001 @@ -1,5 +1,5 @@ /* obstack.c - subroutines used implicitly by object stack macros - Copyright (C) 1988-1994,96,97,98,99,2000 Free Software Foundation, Inc. + Copyright (C) 1988-1994,96,97,98,99,2000,2001 Free Software Foundation, Inc. This file is part of the GNU C Library. Its master source is NOT part of the C library, however. The master source lives in /gd/gnu/lib. @@ -472,6 +472,7 @@ _obstack_memory_used (h) #endif static void +__attribute__ ((noreturn)) print_and_abort () { fputs (_("memory exhausted"), stderr); diff -durpNa glibc-2.2.2/manual/Makefile glibc-2.2.3/manual/Makefile --- glibc-2.2.2/manual/Makefile Tue Jan 23 14:07:18 2001 +++ glibc-2.2.3/manual/Makefile Mon Mar 26 20:53:01 2001 @@ -178,14 +178,14 @@ ifneq ($(strip $(MAKEINFO)),:) ifneq ($(OLD_DEBIAN_INSTALL_INFO),yes) install: $(inst_infodir)/libc.info dir-add.info @if $(SHELL) -c '$(INSTALL_INFO) --version' >/dev/null 2>&1; then \ - test -f $(inst_infodir)/dir || cp dir $(inst_infodir);\ + test -f $(inst_infodir)/dir || $(INSTALL_DATA) dir $(inst_infodir);\ $(INSTALL_INFO) --info-dir=$(inst_infodir) $(inst_infodir)/libc.info;\ $(INSTALL_INFO) --info-dir=$(inst_infodir) dir-add.info;\ else : ; fi else install: $(inst_infodir)/libc.info dir-add.info @if $(SHELL) -c '$(INSTALL_INFO) --version' >/dev/null 2>&1; then \ - test -f $(inst_infodir)/dir || cp dir $(inst_infodir);\ + test -f $(inst_infodir)/dir || $(INSTALL_DATA) dir $(inst_infodir);\ $(INSTALL_INFO) --info-dir=$(inst_infodir) \ --section '^GNU Libraries:' 'GNU Libraries:' \ $(inst_infodir)/libc.info;\ diff -durpNa glibc-2.2.2/manual/arith.texi glibc-2.2.3/manual/arith.texi --- glibc-2.2.2/manual/arith.texi Thu Feb 15 14:08:38 2001 +++ glibc-2.2.3/manual/arith.texi Mon Mar 26 20:53:02 2001 @@ -69,14 +69,14 @@ If you don't need a specific storage siz structure with @emph{at least} N bits, use one of these: @itemize @bullet -@item int8_least_t -@item int16_least_t -@item int32_least_t -@item int64_least_t -@item uint8_least_t -@item uint16_least_t -@item uint32_least_t -@item uint64_least_t +@item int_least8_t +@item int_least16_t +@item int_least32_t +@item int_least64_t +@item uint_least8_t +@item uint_least16_t +@item uint_least32_t +@item uint_least64_t @end itemize If you don't need a specific storage size, but want the data structure @@ -85,14 +85,14 @@ among data structures with the same acce one of these: @itemize @bullet -@item int8_fast_t -@item int16_fast_t -@item int32_fast_t -@item int64_fast_t -@item uint8_fast_t -@item uint16_fast_t -@item uint32_fast_t -@item uint64_fast_t +@item int_fast8_t +@item int_fast16_t +@item int_fast32_t +@item int_fast64_t +@item uint_fast8_t +@item uint_fast16_t +@item uint_fast32_t +@item uint_fast64_t @end itemize If you want an integer with the widest range possible on the platform on diff -durpNa glibc-2.2.2/manual/charset.texi glibc-2.2.3/manual/charset.texi --- glibc-2.2.2/manual/charset.texi Sat Jan 6 20:35:23 2001 +++ glibc-2.2.3/manual/charset.texi Wed Apr 25 14:51:01 2001 @@ -1821,12 +1821,12 @@ file2wcs (int fd, const char *charset, w int result = 0; iconv_t cd; - cd = iconv_open ("UCS-4", charset); + cd = iconv_open ("WCHAR_T", charset); if (cd == (iconv_t) -1) @{ /* @r{Something went wrong.} */ if (errno == EINVAL) - error (0, 0, "conversion from '%s' to 'UCS-4' not available", + error (0, 0, "conversion from '%s' to wchar_t not available", charset); else perror ("iconv_open"); diff -durpNa glibc-2.2.2/manual/dir-add.info glibc-2.2.3/manual/dir-add.info --- glibc-2.2.2/manual/dir-add.info Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/dir-add.info Wed Apr 25 14:55:23 2001 @@ -237,6 +237,7 @@ START-INFO-DIR-ENTRY * L_cuserid: (libc)Who Logged In. * L_tmpnam: (libc)Temporary Files. * MAXNAMLEN: (libc)Limits for Files. +* MAXSYMLINKS: (libc)Symbolic Links. * MAX_CANON: (libc)Limits for Files. * MAX_INPUT: (libc)Limits for Files. * MB_CUR_MAX: (libc)Selecting the Conversion. @@ -533,6 +534,7 @@ START-INFO-DIR-ENTRY * cacoshl: (libc)Hyperbolic Functions. * cacosl: (libc)Inverse Trig Functions. * calloc: (libc)Allocating Cleared Space. +* canonicalize_file_name: (libc)Symbolic Links. * carg: (libc)Operations on Complex. * cargf: (libc)Operations on Complex. * cargl: (libc)Operations on Complex. @@ -830,13 +832,16 @@ START-INFO-DIR-ENTRY * gammaf: (libc)Special Functions. * gammal: (libc)Special Functions. * gcvt: (libc)System V Number Conversion. +* get_avphys_pages: (libc)Query Memory Parameters. * get_current_dir_name: (libc)Working Directory. * get_nprocs: (libc)Processor Resources. * get_nprocs_conf: (libc)Processor Resources. +* get_phys_pages: (libc)Query Memory Parameters. * getc: (libc)Character Input. * getc_unlocked: (libc)Character Input. * getchar: (libc)Character Input. * getchar_unlocked: (libc)Character Input. +* getcontext: (libc)System V contexts. * getcwd: (libc)Working Directory. * getdate: (libc)General Time String Parsing. * getdate_r: (libc)General Time String Parsing. @@ -978,10 +983,8 @@ START-INFO-DIR-ENTRY * infnan: (libc)Floating Point Classes. * initgroups: (libc)Setting Groups. * initstate: (libc)BSD Random. +* initstate_r: (libc)BSD Random. * innetgr: (libc)Netgroup Membership. -* int: (libc)Query Memory Parameters. -* int: (libc)Query Memory Parameters. -* int: (libc)System Calls. * ioctl: (libc)IOCTLs. * isalnum: (libc)Classification of Characters. * isalpha: (libc)Classification of Characters. @@ -1104,6 +1107,7 @@ START-INFO-DIR-ENTRY * lseek: (libc)File Position Primitive. * lstat64: (libc)Reading Attributes. * lstat: (libc)Reading Attributes. +* makecontext: (libc)System V contexts. * mallinfo: (libc)Statistics of Malloc. * malloc: (libc)Basic Allocation. * mallopt: (libc)Malloc Tunable Parameters. @@ -1284,7 +1288,6 @@ START-INFO-DIR-ENTRY * putc: (libc)Simple Output. * putc_unlocked: (libc)Simple Output. * putchar: (libc)Simple Output. -* putchar: (libc)Simple Output. * putchar_unlocked: (libc)Simple Output. * putenv: (libc)Environment Access. * putpwent: (libc)Writing a User Entry. @@ -1294,6 +1297,7 @@ START-INFO-DIR-ENTRY * putw: (libc)Simple Output. * putwc: (libc)Simple Output. * putwc_unlocked: (libc)Simple Output. +* putwchar: (libc)Simple Output. * putwchar_unlocked: (libc)Simple Output. * pwrite64: (libc)I/O Primitives. * pwrite: (libc)I/O Primitives. @@ -1307,6 +1311,7 @@ START-INFO-DIR-ENTRY * rand: (libc)ISO Random. * rand_r: (libc)ISO Random. * random: (libc)BSD Random. +* random_r: (libc)BSD Random. * rawmemchr: (libc)Search Functions. * read: (libc)I/O Primitives. * readdir64: (libc)Reading/Closing Directory. @@ -1316,6 +1321,7 @@ START-INFO-DIR-ENTRY * readlink: (libc)Symbolic Links. * readv: (libc)Scatter-Gather. * realloc: (libc)Changing Block Size. +* realpath: (libc)Symbolic Links. * recv: (libc)Receiving Data. * recvfrom: (libc)Receiving Datagrams. * recvmsg: (libc)Receiving Datagrams. @@ -1375,6 +1381,7 @@ START-INFO-DIR-ENTRY * sendto: (libc)Sending Datagrams. * setbuf: (libc)Controlling Buffering. * setbuffer: (libc)Controlling Buffering. +* setcontext: (libc)System V contexts. * setdomainname: (libc)Host Identification. * setegid: (libc)Setting Groups. * setenv: (libc)Environment Access. @@ -1409,6 +1416,7 @@ START-INFO-DIR-ENTRY * setsid: (libc)Process Group Functions. * setsockopt: (libc)Socket Option Functions. * setstate: (libc)BSD Random. +* setstate_r: (libc)BSD Random. * settimeofday: (libc)High-Resolution Calendar. * setuid: (libc)Setting User ID. * setutent: (libc)Manipulating the Database. @@ -1461,6 +1469,7 @@ START-INFO-DIR-ENTRY * srand48_r: (libc)SVID Random. * srand: (libc)ISO Random. * srandom: (libc)BSD Random. +* srandom_r: (libc)BSD Random. * sscanf: (libc)Formatted Input Functions. * ssignal: (libc)Basic Signal Handling. * stat64: (libc)Reading Attributes. @@ -1515,10 +1524,12 @@ START-INFO-DIR-ENTRY * strverscmp: (libc)String/Array Comparison. * strxfrm: (libc)Collation Functions. * stty: (libc)BSD Terminal Modes. +* swapcontext: (libc)System V contexts. * swprintf: (libc)Formatted Output Functions. * swscanf: (libc)Formatted Input Functions. * symlink: (libc)Symbolic Links. * sync: (libc)Synchronizing I/O. +* syscall: (libc)System Calls. * sysconf: (libc)Sysconf Definition. * sysctl: (libc)System Parameters. * syslog: (libc)syslog; vsyslog. diff -durpNa glibc-2.2.2/manual/examples/swapcontext.c glibc-2.2.3/manual/examples/swapcontext.c --- glibc-2.2.2/manual/examples/swapcontext.c Wed Dec 31 16:00:00 1969 +++ glibc-2.2.3/manual/examples/swapcontext.c Sun Apr 8 15:47:59 2001 @@ -0,0 +1,99 @@ +#include +#include +#include +#include +#include + +/* Set by the signal handler. */ +static volatile int expired; + +/* The contexts. */ +static ucontext_t uc[3]; + +/* We do only a certain number of switches. */ +static int switches; + + +/* This is the function doing the work. It is just a + skeleton, real code has to be filled in. */ +static void +f (int n) +{ + int m = 0; + while (1) + { + /* This is where the work would be done. */ + if (++m % 100 == 0) + { + putchar ('.'); + fflush (stdout); + } + + /* Regularly the @var{expire} variable must be checked. */ + if (expired) + { + /* We do not want the program to run forever. */ + if (++switches == 20) + return; + + printf ("\nswitching from %d to %d\n", n, 3 - n); + expired = 0; + /* Switch to the other context, saving the current one. */ + swapcontext (&uc[n], &uc[3 - n]); + } + } +} + +/* This is the signal handler which simply set the variable. */ +void +handler (int signal) +{ + expired = 1; +} + + +int +main (void) +{ + struct sigaction sa; + struct itimerval it; + char st1[8192]; + char st2[8192]; + + /* Initialize the data structures for the interval timer. */ + sa.sa_flags = SA_RESTART; + sigfillset (&sa.sa_mask); + sa.sa_handler = handler; + it.it_interval.tv_sec = 0; + it.it_interval.tv_usec = 1; + it.it_value = it.it_interval; + + /* Install the timer and get the context we can manipulate. */ + if (sigaction (SIGPROF, &sa, NULL) < 0 + || setitimer (ITIMER_PROF, &it, NULL) < 0 + || getcontext (&uc[1]) == -1 + || getcontext (&uc[2]) == -1) + abort (); + + /* Create a context with a separate stack which causes the + function @code{f} to be call with the parameter @code{1}. + Note that the @code{uc_link} points to the main context + which will cause the program to terminate once the function + return. */ + uc[1].uc_link = &uc[0]; + uc[1].uc_stack.ss_sp = st1; + uc[1].uc_stack.ss_size = sizeof st1; + makecontext (&uc[1], (void (*) (void)) f, 1, 1); + + /* Similarly, but @code{2} is passed as the parameter to @code{f}. */ + uc[2].uc_link = &uc[0]; + uc[2].uc_stack.ss_sp = st2; + uc[2].uc_stack.ss_size = sizeof st2; + makecontext (&uc[2], (void (*) (void)) f, 1, 2); + + /* Start running. */ + swapcontext (&uc[0], &uc[1]); + putchar ('\n'); + + return 0; +} diff -durpNa glibc-2.2.2/manual/filesys.texi glibc-2.2.3/manual/filesys.texi --- glibc-2.2.2/manual/filesys.texi Thu Feb 15 14:08:38 2001 +++ glibc-2.2.3/manual/filesys.texi Sun Apr 8 22:19:11 2001 @@ -1065,7 +1065,23 @@ purpose is to obtain information about t function that makes a hard link, does too. It makes a hard link to the symbolic link, which one rarely wants. -Prototypes for the functions listed in this section are in +Some systems have for some functions operating on files have a limit on +how many symbolic links are followed when resolving a path name. The +limit if it exists is published in the @file{sys/param.h} header file. + +@comment sys/param.h +@comment BSD +@deftypevr Macro int MAXSYMLINKS + +The macro @code{MAXSYMLINKS} specifies how many symlinks some function +will follow before returning @code{ELOOP}. Not all functions behave the +same and this value is not the same a that returned for +@code{_SC_SYMLOOP} by @code{sysconf}. In fact, the @code{sysconf} +result can indicate that there is no fixed limit although +@code{MAXSYMLINKS} exists and has a finite value. +@end deftypevr + +Prototypes for most of the functions listed in this section are in @file{unistd.h}. @pindex unistd.h @@ -1153,6 +1169,73 @@ A hardware error occurred while reading @c @end group @end deftypefun +In some situations it is desirable to resolve all the to get the real +name of a file where no prefix names a symbolic link which is followed +and no filename in the path is @code{.} or @code{..}. This is for +instance desirable if files have to be compare in which case different +names can refer to the same inode. + +@comment stdlib.h +@comment GNU +@deftypefun {char *} canonicalize_file_name (const char *@var{name}) + +The @code{canonicalize_file_name} function returns the absolute name of +the file named by @var{name} which contains no @code{.}, @code{..} +components nor any repeated path separators (@code{/}) or symlinks. The +result is passed back as the return value of the function in a block of +memory allocated with @code{malloc}. If the result is not used anymore +the memory should be freed with a call to @code{free}. + +In any of the path components except the last one is missing the +function returns a NULL pointer. This is also what is returned if the +length of the path reaches or exceeds @code{PATH_MAX} characters. In +any case @code{errno} is set accordingly. + +@table @code +@item ENAMETOOLONG +The resulting path is too long. This error only occurs on systems which +have a limit on the file name length. + +@item EACCES +At least one of the path components is not readable. + +@item ENOENT +The input file name is empty. + +@item ENOENT +At least one of the path components does not exist. + +@item ELOOP +More than @code{MAXSYMLINKS} many symlinks have been followed. +@end table + +This function is a GNU extension and is declared in @file{stdlib.h}. +@end deftypefun + +The Unix standard includes a similar function which differs from +@code{canonicalize_file_name} in that the user has to provide the buffer +where the result is placed in. + +@comment stdlib.h +@comment XPG +@deftypefun {char *} realpath (const char *restrict @var{name}, char *restrict @var{resolved}) + +The @code{realpath} function behaves just like +@code{canonicalize_file_name} but instead of allocating a buffer for the +result it is placed in the buffer pointed to by @var{resolved}. + +One other difference is that the buffer @var{resolved} will contain the +part of the path component which does not exist or is not readable if +the function returns @code{NULL} and @code{errno} is set to +@code{EACCES} or @code{ENOENT}. + +This function is declared in @file{stdlib.h}. +@end deftypefun + +The advantage of using this function is that it is more widely +available. The drawback is that it reports failures for long path on +systems which have no limits on the file name length. + @node Deleting Files @section Deleting Files @cindex deleting a file @@ -1935,7 +2018,7 @@ the whole @code{struct stat} structure. @comment sys/stat.h @comment POSIX -@deftypefn Macro int S_TYPEISMQ (struct stat @var{s}) +@deftypefn Macro int S_TYPEISMQ (struct stat *@var{s}) If the system implement POSIX message queues as distinct objects and the file is a message queue object, this macro returns a non-zero value. In all other cases the result is zero. @@ -1943,7 +2026,7 @@ In all other cases the result is zero. @comment sys/stat.h @comment POSIX -@deftypefn Macro int S_TYPEISSEM (struct stat @var{s}) +@deftypefn Macro int S_TYPEISSEM (struct stat *@var{s}) If the system implement POSIX semaphores as distinct objects and the file is a semaphore object, this macro returns a non-zero value. In all other cases the result is zero. @@ -1951,7 +2034,7 @@ In all other cases the result is zero. @comment sys/stat.h @comment POSIX -@deftypefn Macro int S_TYPEISSHM (struct stat @var{s}) +@deftypefn Macro int S_TYPEISSHM (struct stat *@var{s}) If the system implement POSIX shared memory objects as distinct objects and the file is an shared memory object, this macro returns a non-zero value. In all other cases the result is zero. diff -durpNa glibc-2.2.2/manual/install.texi glibc-2.2.3/manual/install.texi --- glibc-2.2.2/manual/install.texi Fri Feb 9 10:04:14 2001 +++ glibc-2.2.3/manual/install.texi Wed Apr 25 14:51:01 2001 @@ -336,7 +336,7 @@ GCC 2.95 or newer The GNU C library can only be compiled with the GNU C compiler family. As of the 2.2 release, GCC 2.95.2 or higher is required. As of this -writing, GCC 2.95.2 is the compiler we advise to use. +writing, GCC 2.95.3 is the compiler we advise to use. You can use whatever compiler you like to compile programs that use GNU libc, but be aware that both GCC 2.7 and 2.8 have bugs in their @@ -406,8 +406,7 @@ and if you change any of the message tra @itemize @bullet @item -GNU @code{gettext} 0.10.35 or later (version 0.10.35 is a alpha release -and available via ftp from alpha.gnu.org/gnu) +GNU @code{gettext} 0.10.36 or later @end itemize @noindent @@ -424,6 +423,7 @@ following patterns: @smallexample alpha@var{*}-@var{*}-linux arm-@var{*}-linux +cris-@var{*}-linux hppa-@var{*}-linux i@var{x}86-@var{*}-gnu i@var{x}86-@var{*}-linux @@ -432,6 +432,7 @@ m68k-@var{*}-linux mips@var{*}-@var{*}-linux powerpc-@var{*}-linux s390-@var{*}-linux +s390x-@var{*}-linux sparc-@var{*}-linux sparc64-@var{*}-linux @end smallexample diff -durpNa glibc-2.2.2/manual/libc.cp glibc-2.2.3/manual/libc.cp --- glibc-2.2.2/manual/libc.cp Thu Feb 15 16:50:22 2001 +++ glibc-2.2.3/manual/libc.cp Wed Apr 25 16:06:31 2001 @@ -229,12 +229,13 @@ \entry{array sort function}{204}{array sort function} \entry{stable sorting}{204}{stable sorting} \entry{Kermit the frog}{207}{Kermit the frog} +\entry{Korn Shell}{214}{Korn Shell} \entry{globbing}{214}{globbing} -\entry{word expansion}{226}{word expansion} -\entry{expansion of shell words}{226}{expansion of shell words} -\entry{tilde expansion}{226}{tilde expansion} -\entry{variable substitution}{226}{variable substitution} -\entry{substitution of variables and commands}{226}{substitution of variables and commands} +\entry{word expansion}{227}{word expansion} +\entry{expansion of shell words}{227}{expansion of shell words} +\entry{tilde expansion}{227}{tilde expansion} +\entry{variable substitution}{227}{variable substitution} +\entry{substitution of variables and commands}{227}{substitution of variables and commands} \entry{command substitution}{227}{command substitution} \entry{arithmetic expansion}{227}{arithmetic expansion} \entry{field splitting}{227}{field splitting} @@ -403,37 +404,37 @@ \entry{link, soft}{375}{link, soft} \entry{symbolic link}{375}{symbolic link} \entry{link, symbolic}{375}{link, symbolic} -\entry{deleting a file}{376}{deleting a file} -\entry{removing a file}{376}{removing a file} -\entry{unlinking a file}{376}{unlinking a file} -\entry{directories, deleting}{377}{directories, deleting} -\entry{deleting a directory}{377}{deleting a directory} -\entry{renaming a file}{377}{renaming a file} -\entry{creating a directory}{379}{creating a directory} -\entry{directories, creating}{379}{directories, creating} -\entry{status of a file}{379}{status of a file} -\entry{attributes of a file}{379}{attributes of a file} -\entry{file attributes}{379}{file attributes} -\entry{inode number}{383}{inode number} -\entry{file owner}{387}{file owner} -\entry{owner of a file}{387}{owner of a file} -\entry{group owner of a file}{387}{group owner of a file} -\entry{file permission bits}{388}{file permission bits} -\entry{sticky bit}{389}{sticky bit} -\entry{permission to access a file}{390}{permission to access a file} -\entry{access permission for a file}{390}{access permission for a file} -\entry{file access permission}{390}{file access permission} -\entry{file creation mask}{390}{file creation mask} -\entry{umask}{390}{umask} -\entry{testing access permission}{392}{testing access permission} -\entry{access, testing for}{392}{access, testing for} -\entry{setuid programs and file access}{392}{setuid programs and file access} -\entry{file access time}{393}{file access time} -\entry{file modification time}{393}{file modification time} -\entry{file attribute modification time}{393}{file attribute modification time} -\entry{creating special files}{397}{creating special files} -\entry{special files}{397}{special files} -\entry{TMPDIR environment variable}{400}{TMPDIR environment variable} +\entry{deleting a file}{377}{deleting a file} +\entry{removing a file}{377}{removing a file} +\entry{unlinking a file}{377}{unlinking a file} +\entry{directories, deleting}{378}{directories, deleting} +\entry{deleting a directory}{378}{deleting a directory} +\entry{renaming a file}{378}{renaming a file} +\entry{creating a directory}{380}{creating a directory} +\entry{directories, creating}{380}{directories, creating} +\entry{status of a file}{380}{status of a file} +\entry{attributes of a file}{380}{attributes of a file} +\entry{file attributes}{380}{file attributes} +\entry{inode number}{384}{inode number} +\entry{file owner}{388}{file owner} +\entry{owner of a file}{388}{owner of a file} +\entry{group owner of a file}{388}{group owner of a file} +\entry{file permission bits}{389}{file permission bits} +\entry{sticky bit}{390}{sticky bit} +\entry{permission to access a file}{391}{permission to access a file} +\entry{access permission for a file}{391}{access permission for a file} +\entry{file access permission}{391}{file access permission} +\entry{file creation mask}{391}{file creation mask} +\entry{umask}{391}{umask} +\entry{testing access permission}{393}{testing access permission} +\entry{access, testing for}{393}{access, testing for} +\entry{setuid programs and file access}{393}{setuid programs and file access} +\entry{file access time}{394}{file access time} +\entry{file modification time}{394}{file modification time} +\entry{file attribute modification time}{394}{file attribute modification time} +\entry{creating special files}{398}{creating special files} +\entry{special files}{398}{special files} +\entry{TMPDIR environment variable}{401}{TMPDIR environment variable} \entry{pipe}{403}{pipe} \entry{FIFO special file}{403}{FIFO special file} \entry{creating a pipe}{403}{creating a pipe} @@ -605,449 +606,449 @@ \entry{pseudo-random numbers}{511}{pseudo-random numbers} \entry{seed (for random numbers)}{511}{seed (for random numbers)} \entry{Optimization}{518}{Optimization} -\entry{integer}{519}{integer} -\entry{signedness}{519}{signedness} -\entry{maximum possible integer}{520}{maximum possible integer} -\entry{mininum possible integer}{520}{mininum possible integer} -\entry{integer division functions}{520}{integer division functions} -\entry{floating point}{522}{floating point} -\entry{IEEE 754}{522}{IEEE 754} -\entry{IEEE floating point}{522}{IEEE floating point} -\entry{floating-point classes}{522}{floating-point classes} -\entry{classes, floating-point}{522}{classes, floating-point} -\entry{exception}{524}{exception} -\entry{signal}{524}{signal} -\entry{zero divide}{524}{zero divide} -\entry{division by zero}{524}{division by zero} -\entry{inexact exception}{524}{inexact exception} -\entry{invalid exception}{524}{invalid exception} -\entry{overflow exception}{524}{overflow exception} -\entry{underflow exception}{524}{underflow exception} -\entry{infinity}{526}{infinity} -\entry{not a number}{526}{not a number} -\entry{NaN}{526}{NaN} -\entry{errors, mathematical}{529}{errors, mathematical} -\entry{domain error}{529}{domain error} -\entry{range error}{529}{range error} -\entry{absolute value functions}{533}{absolute value functions} -\entry{normalization functions (floating-point)}{534}{normalization functions (floating-point)} -\entry{converting floats to integers}{535}{converting floats to integers} -\entry{FP arithmetic}{538}{FP arithmetic} -\entry{NaN}{539}{NaN} -\entry{unordered comparison}{539}{unordered comparison} -\entry{minimum}{540}{minimum} -\entry{maximum}{540}{maximum} -\entry{positive difference}{540}{positive difference} -\entry{multiply-add}{540}{multiply-add} -\entry{butterfly}{540}{butterfly} -\entry{complex numbers}{541}{complex numbers} -\entry{project complex numbers}{541}{project complex numbers} -\entry{conjugate complex numbers}{541}{conjugate complex numbers} -\entry{decompose complex numbers}{541}{decompose complex numbers} -\entry{parsing numbers (in formatted input)}{542}{parsing numbers (in formatted input)} -\entry{converting strings to numbers}{542}{converting strings to numbers} -\entry{number syntax, parsing}{542}{number syntax, parsing} -\entry{syntax, for reading numbers}{542}{syntax, for reading numbers} -\entry{gcvt{\_}r}{550}{gcvt_r} -\entry{time}{551}{time} -\entry{calendar time}{551}{calendar time} -\entry{date}{551}{date} -\entry{interval}{551}{interval} -\entry{elapsed time}{551}{elapsed time} -\entry{time, elapsed}{551}{time, elapsed} -\entry{period of time}{551}{period of time} -\entry{CPU time}{551}{CPU time} -\entry{processor time}{551}{processor time} -\entry{elapsed time}{551}{elapsed time} -\entry{timeval}{552}{timeval} -\entry{timespec}{552}{timespec} +\entry{integer}{521}{integer} +\entry{signedness}{521}{signedness} +\entry{maximum possible integer}{522}{maximum possible integer} +\entry{mininum possible integer}{522}{mininum possible integer} +\entry{integer division functions}{522}{integer division functions} +\entry{floating point}{524}{floating point} +\entry{IEEE 754}{524}{IEEE 754} +\entry{IEEE floating point}{524}{IEEE floating point} +\entry{floating-point classes}{524}{floating-point classes} +\entry{classes, floating-point}{524}{classes, floating-point} +\entry{exception}{526}{exception} +\entry{signal}{526}{signal} +\entry{zero divide}{526}{zero divide} +\entry{division by zero}{526}{division by zero} +\entry{inexact exception}{526}{inexact exception} +\entry{invalid exception}{526}{invalid exception} +\entry{overflow exception}{526}{overflow exception} +\entry{underflow exception}{526}{underflow exception} +\entry{infinity}{528}{infinity} +\entry{not a number}{528}{not a number} +\entry{NaN}{528}{NaN} +\entry{errors, mathematical}{531}{errors, mathematical} +\entry{domain error}{531}{domain error} +\entry{range error}{531}{range error} +\entry{absolute value functions}{535}{absolute value functions} +\entry{normalization functions (floating-point)}{536}{normalization functions (floating-point)} +\entry{converting floats to integers}{537}{converting floats to integers} +\entry{FP arithmetic}{540}{FP arithmetic} +\entry{NaN}{541}{NaN} +\entry{unordered comparison}{541}{unordered comparison} +\entry{minimum}{542}{minimum} +\entry{maximum}{542}{maximum} +\entry{positive difference}{542}{positive difference} +\entry{multiply-add}{542}{multiply-add} +\entry{butterfly}{542}{butterfly} +\entry{complex numbers}{543}{complex numbers} +\entry{project complex numbers}{543}{project complex numbers} +\entry{conjugate complex numbers}{543}{conjugate complex numbers} +\entry{decompose complex numbers}{543}{decompose complex numbers} +\entry{parsing numbers (in formatted input)}{544}{parsing numbers (in formatted input)} +\entry{converting strings to numbers}{544}{converting strings to numbers} +\entry{number syntax, parsing}{544}{number syntax, parsing} +\entry{syntax, for reading numbers}{544}{syntax, for reading numbers} +\entry{gcvt{\_}r}{552}{gcvt_r} +\entry{time}{553}{time} +\entry{calendar time}{553}{calendar time} +\entry{date}{553}{date} +\entry{interval}{553}{interval} +\entry{elapsed time}{553}{elapsed time} +\entry{time, elapsed}{553}{time, elapsed} +\entry{period of time}{553}{period of time} \entry{CPU time}{553}{CPU time} -\entry{clock ticks}{553}{clock ticks} -\entry{ticks, clock}{553}{ticks, clock} -\entry{processor time}{554}{processor time} -\entry{CPU time}{554}{CPU time} -\entry{child process}{555}{child process} -\entry{simple time}{555}{simple time} -\entry{high-resolution time}{555}{high-resolution time} -\entry{local time}{555}{local time} -\entry{broken-down time}{555}{broken-down time} -\entry{Gregorian calendar}{555}{Gregorian calendar} -\entry{calendar, Gregorian}{555}{calendar, Gregorian} -\entry{epoch}{556}{epoch} -\entry{broken-down time}{558}{broken-down time} -\entry{calendar time and broken-down time}{558}{calendar time and broken-down time} -\entry{leap second}{559}{leap second} -\entry{Daylight Saving Time}{559}{Daylight Saving Time} -\entry{summer time}{559}{summer time} -\entry{time, high precision}{561}{time, high precision} -\entry{clock, high accuracy}{561}{clock, high accuracy} -\entry{time zone}{577}{time zone} -\entry{time zone database}{578}{time zone database} -\entry{setting an alarm}{580}{setting an alarm} -\entry{interval timer, setting}{580}{interval timer, setting} -\entry{alarms, setting}{580}{alarms, setting} -\entry{timers, setting}{580}{timers, setting} -\entry{real-time timer}{580}{real-time timer} -\entry{timer, real-time}{580}{timer, real-time} -\entry{virtual timer}{580}{virtual timer} -\entry{timer, virtual}{580}{timer, virtual} -\entry{profiling timer}{581}{profiling timer} -\entry{timer, profiling}{581}{timer, profiling} -\entry{resource limits}{587}{resource limits} -\entry{limits on resource usage}{587}{limits on resource usage} -\entry{usage limits}{587}{usage limits} -\entry{limit}{587}{limit} -\entry{current limit}{587}{current limit} -\entry{soft limit}{587}{soft limit} -\entry{maximum limit}{587}{maximum limit} -\entry{hard limit}{587}{hard limit} -\entry{process priority}{591}{process priority} -\entry{cpu priority}{591}{cpu priority} -\entry{priority of a process}{591}{priority of a process} -\entry{absolute priority}{592}{absolute priority} -\entry{priority, absolute}{592}{priority, absolute} -\entry{realtime CPU scheduling}{592}{realtime CPU scheduling} -\entry{ready to run}{592}{ready to run} -\entry{preemptive scheduling}{592}{preemptive scheduling} -\entry{runnable process}{592}{runnable process} -\entry{realtime scheduling}{593}{realtime scheduling} -\entry{scheduling, traditional}{597}{scheduling, traditional} -\entry{address space}{600}{address space} -\entry{physical memory}{600}{physical memory} -\entry{physical address}{600}{physical address} -\entry{shared memory}{600}{shared memory} -\entry{thrashing}{601}{thrashing} -\entry{memory page}{601}{memory page} -\entry{page, memory}{601}{page, memory} -\entry{sysconf}{601}{sysconf} -\entry{sysconf}{601}{sysconf} -\entry{sysconf}{602}{sysconf} -\entry{sysconf}{602}{sysconf} -\entry{load average}{603}{load average} -\entry{non-local exits}{605}{non-local exits} -\entry{long jumps}{605}{long jumps} -\entry{signal}{609}{signal} -\entry{generation of signals}{610}{generation of signals} -\entry{delivery of signals}{610}{delivery of signals} -\entry{pending signals}{610}{pending signals} -\entry{blocked signals}{610}{blocked signals} -\entry{specified action (for a signal)}{610}{specified action (for a signal)} -\entry{default action (for a signal)}{610}{default action (for a signal)} -\entry{signal action}{610}{signal action} -\entry{catching signals}{610}{catching signals} -\entry{signal names}{611}{signal names} -\entry{names of signals}{611}{names of signals} -\entry{signal number}{611}{signal number} -\entry{program error signals}{611}{program error signals} -\entry{exception}{612}{exception} -\entry{floating-point exception}{612}{floating-point exception} -\entry{illegal instruction}{613}{illegal instruction} -\entry{segmentation violation}{613}{segmentation violation} -\entry{bus error}{613}{bus error} -\entry{abort signal}{614}{abort signal} -\entry{program termination signals}{614}{program termination signals} -\entry{termination signal}{614}{termination signal} -\entry{interrupt signal}{614}{interrupt signal} -\entry{quit signal}{615}{quit signal} -\entry{quit signal}{615}{quit signal} -\entry{kill signal}{615}{kill signal} -\entry{hangup signal}{615}{hangup signal} -\entry{alarm signal}{616}{alarm signal} -\entry{virtual time alarm signal}{616}{virtual time alarm signal} -\entry{profiling alarm signal}{616}{profiling alarm signal} -\entry{input available signal}{616}{input available signal} -\entry{output possible signal}{616}{output possible signal} -\entry{urgent data signal}{616}{urgent data signal} -\entry{job control signals}{616}{job control signals} -\entry{child process signal}{616}{child process signal} -\entry{continue signal}{617}{continue signal} -\entry{stop signal}{617}{stop signal} -\entry{interactive stop signal}{617}{interactive stop signal} -\entry{terminal input signal}{617}{terminal input signal} -\entry{terminal output signal}{618}{terminal output signal} -\entry{pipe signal}{618}{pipe signal} -\entry{broken pipe signal}{618}{broken pipe signal} -\entry{lost resource signal}{618}{lost resource signal} -\entry{user signals}{619}{user signals} -\entry{signal messages}{619}{signal messages} -\entry{signal actions}{620}{signal actions} -\entry{establishing a handler}{620}{establishing a handler} -\entry{signal function}{620}{\code {signal} function} -\entry{default action for a signal}{621}{default action for a signal} -\entry{ignore action for a signal}{621}{ignore action for a signal} -\entry{sigaction function}{622}{\code {sigaction} function} -\entry{signal flags}{625}{signal flags} -\entry{flags for sigaction}{625}{flags for \code {sigaction}} -\entry{sigaction flags}{625}{\code {sigaction} flags} -\entry{initial signal actions}{626}{initial signal actions} -\entry{signal handler function}{626}{signal handler function} -\entry{non-local exit, from signal handler}{629}{non-local exit, from signal handler} -\entry{race conditions, relating to signals}{630}{race conditions, relating to signals} -\entry{handling multiple signals}{631}{handling multiple signals} -\entry{successive signals}{631}{successive signals} -\entry{merging of signals}{631}{merging of signals} -\entry{restrictions on signal handler functions}{633}{restrictions on signal handler functions} -\entry{volatile declarations}{634}{\code {volatile} declarations} -\entry{reentrant functions}{634}{reentrant functions} -\entry{EINTR, and restarting interrupted primitives}{638}{EINTR, and restarting interrupted primitives} -\entry{restarting interrupted primitives}{638}{restarting interrupted primitives} -\entry{interrupting primitives}{638}{interrupting primitives} -\entry{primitives, interrupting}{638}{primitives, interrupting} -\entry{sending signals}{638}{sending signals} -\entry{raising signals}{638}{raising signals} -\entry{signals, generating}{638}{signals, generating} -\entry{killing a process}{639}{killing a process} -\entry{interprocess communication, with signals}{641}{interprocess communication, with signals} -\entry{blocking signals}{642}{blocking signals} -\entry{signal set}{643}{signal set} -\entry{signal mask}{644}{signal mask} -\entry{process signal mask}{644}{process signal mask} -\entry{blocking signals, in a handler}{646}{blocking signals, in a handler} -\entry{pending signals, checking for}{647}{pending signals, checking for} -\entry{blocked signals, checking for}{647}{blocked signals, checking for} -\entry{checking for pending signals}{647}{checking for pending signals} -\entry{timing error in signal handling}{649}{timing error in signal handling} -\entry{waiting for a signal}{649}{waiting for a signal} -\entry{pause function}{649}{\code {pause} function} -\entry{process}{657}{process} -\entry{program}{657}{program} -\entry{address space}{657}{address space} -\entry{thread of control}{657}{thread of control} -\entry{program arguments}{657}{program arguments} -\entry{command line arguments}{657}{command line arguments} -\entry{arguments, to program}{657}{arguments, to program} -\entry{program startup}{657}{program startup} -\entry{startup of program}{657}{startup of program} -\entry{invocation of program}{657}{invocation of program} -\entry{main function}{657}{\code {main} function} -\entry{argc (program argument count)}{657}{argc (program argument count)} -\entry{argv (program argument vector)}{657}{argv (program argument vector)} -\entry{program argument syntax}{658}{program argument syntax} -\entry{syntax, for program arguments}{658}{syntax, for program arguments} -\entry{command argument syntax}{658}{command argument syntax} -\entry{long-named options}{658}{long-named options} -\entry{program arguments, parsing}{659}{program arguments, parsing} -\entry{command arguments, parsing}{659}{command arguments, parsing} -\entry{parsing program arguments}{659}{parsing program arguments} -\entry{argp (program argument parser)}{666}{argp (program argument parser)} -\entry{argument parsing with argp}{666}{argument parsing with argp} -\entry{option parsing with argp}{666}{option parsing with argp} -\entry{argp parser functions}{671}{argp parser functions} -\entry{usage messages, in argp}{674}{usage messages, in argp} -\entry{syntax error messages, in argp}{674}{syntax error messages, in argp} -\entry{error messages, in argp}{674}{error messages, in argp} -\entry{ARGP{\_}HELP{\_}FMT environment variable}{689}{ARGP_HELP_FMT environment variable} -\entry{environment variable}{692}{environment variable} -\entry{environment}{693}{environment} -\entry{environment access}{693}{environment access} -\entry{environment representation}{693}{environment representation} -\entry{standard environment variables}{695}{standard environment variables} -\entry{HOME environment variable}{695}{\code {HOME} environment variable} -\entry{home directory}{695}{home directory} -\entry{LOGNAME environment variable}{695}{\code {LOGNAME} environment variable} -\entry{PATH environment variable}{695}{\code {PATH} environment variable} -\entry{TERM environment variable}{695}{\code {TERM} environment variable} -\entry{TZ environment variable}{696}{\code {TZ} environment variable} -\entry{LANG environment variable}{696}{\code {LANG} environment variable} -\entry{LC{\_}ALL environment variable}{696}{\code {LC_ALL} environment variable} -\entry{LC{\_}COLLATE environment variable}{696}{\code {LC_COLLATE} environment variable} -\entry{LC{\_}CTYPE environment variable}{696}{\code {LC_CTYPE} environment variable} -\entry{LC{\_}MESSAGES environment variable}{696}{\code {LC_MESSAGES} environment variable} -\entry{LC{\_}MONETARY environment variable}{696}{\code {LC_MONETARY} environment variable} -\entry{LC{\_}NUMERIC environment variable}{696}{\code {LC_NUMERIC} environment variable} -\entry{LC{\_}TIME environment variable}{696}{\code {LC_TIME} environment variable} -\entry{NLSPATH environment variable}{696}{\code {NLSPATH} environment variable} -\entry{{\_}POSIX{\_}OPTION{\_}ORDER environment variable.}{696}{\code {_POSIX_OPTION_ORDER} environment variable.} -\entry{system call}{696}{system call} -\entry{kernel call}{696}{kernel call} -\entry{system call number}{697}{system call number} -\entry{errno}{697}{errno} -\entry{program termination}{698}{program termination} -\entry{process termination}{698}{process termination} -\entry{exit status value}{698}{exit status value} -\entry{exit status}{699}{exit status} -\entry{aborting a program}{701}{aborting a program} -\entry{process}{703}{process} -\entry{child process}{703}{child process} -\entry{parent process}{703}{parent process} -\entry{running a command}{703}{running a command} -\entry{process ID}{704}{process ID} -\entry{process lifetime}{704}{process lifetime} -\entry{creating a process}{704}{creating a process} -\entry{forking a process}{704}{forking a process} -\entry{child process}{704}{child process} -\entry{parent process}{704}{parent process} -\entry{process image}{704}{process image} -\entry{executing a file}{706}{executing a file} -\entry{exec functions}{706}{\code {exec} functions} -\entry{process completion}{708}{process completion} -\entry{waiting for completion of child process}{708}{waiting for completion of child process} -\entry{testing exit status of child process}{708}{testing exit status of child process} -\entry{process groups}{715}{process groups} -\entry{job control}{715}{job control} -\entry{job}{715}{job} -\entry{session}{715}{session} -\entry{shell}{715}{shell} -\entry{session}{715}{session} -\entry{session leader}{715}{session leader} -\entry{controlling terminal}{715}{controlling terminal} -\entry{foreground job}{715}{foreground job} -\entry{background job}{715}{background job} -\entry{stopped job}{716}{stopped job} -\entry{job control is optional}{716}{job control is optional} -\entry{controlling process}{716}{controlling process} -\entry{controlling terminal, access to}{716}{controlling terminal, access to} -\entry{SIGTTIN, from background job}{716}{\code {SIGTTIN}, from background job} -\entry{SIGTTOU, from background job}{717}{\code {SIGTTOU}, from background job} -\entry{orphaned process group}{717}{orphaned process group} -\entry{job control, enabling}{719}{job control, enabling} -\entry{subshell}{719}{subshell} -\entry{job control, enabling}{719}{job control, enabling} -\entry{launching jobs}{721}{launching jobs} -\entry{process group leader}{721}{process group leader} -\entry{process group ID}{721}{process group ID} -\entry{race conditions, relating to job control}{721}{race conditions, relating to job control} -\entry{foreground job, launching}{724}{foreground job, launching} -\entry{background job, launching}{725}{background job, launching} -\entry{stopped jobs, detecting}{725}{stopped jobs, detecting} -\entry{terminated jobs, detecting}{725}{terminated jobs, detecting} -\entry{SIGCHLD, handling of}{726}{\code {SIGCHLD}, handling of} -\entry{stopped jobs, continuing}{728}{stopped jobs, continuing} -\entry{process group functions}{730}{process group functions} -\entry{job control functions}{730}{job control functions} -\entry{controlling terminal, determining}{730}{controlling terminal, determining} -\entry{BSD compatibility library}{731}{BSD compatibility library} -\entry{Name Service Switch}{735}{Name Service Switch} -\entry{NSS}{735}{NSS} -\entry{databases}{735}{databases} -\entry{ethers}{735}{ethers} -\entry{group}{735}{group} -\entry{hosts}{735}{hosts} -\entry{netgroup}{735}{netgroup} -\entry{networks}{735}{networks} -\entry{protocols}{735}{protocols} -\entry{passwd}{735}{passwd} -\entry{rpc}{735}{rpc} -\entry{services}{735}{services} -\entry{shadow}{735}{shadow} -\entry{/etc/nsswitch.conf}{736}{\file {/etc/nsswitch.conf}} -\entry{nsswitch.conf}{736}{\file {nsswitch.conf}} -\entry{DNS server unavailable}{737}{DNS server unavailable} -\entry{nisplus, and completeness}{737}{nisplus, and completeness} -\entry{nisplus, and booting}{737}{nisplus, and booting} -\entry{bootstrapping, and services}{737}{bootstrapping, and services} -\entry{default value, and NSS}{738}{default value, and NSS} -\entry{optimizing NSS}{738}{optimizing NSS} -\entry{reentrant NSS functions}{739}{reentrant NSS functions} -\entry{login name}{745}{login name} -\entry{user name}{745}{user name} -\entry{user ID}{745}{user ID} -\entry{group name}{745}{group name} -\entry{group ID}{745}{group ID} -\entry{persona}{745}{persona} -\entry{effective user ID}{745}{effective user ID} -\entry{effective group ID}{745}{effective group ID} -\entry{supplementary group IDs}{745}{supplementary group IDs} -\entry{real user ID}{745}{real user ID} -\entry{real group ID}{745}{real group ID} -\entry{setuid programs}{746}{\code {setuid} programs} -\entry{saved set-user-ID}{746}{saved set-user-ID} -\entry{saved set-group-ID}{746}{saved set-group-ID} -\entry{{\_}POSIX{\_}SAVED{\_}IDS}{746}{\code {_POSIX_SAVED_IDS}} -\entry{login name, determining}{754}{login name, determining} -\entry{user ID, determining}{754}{user ID, determining} -\entry{user accounting database}{755}{user accounting database} -\entry{user database}{763}{user database} -\entry{password database}{763}{password database} -\entry{converting user ID to user name}{763}{converting user ID to user name} -\entry{converting user name to user ID}{763}{converting user name to user ID} -\entry{scanning the user list}{764}{scanning the user list} -\entry{group database}{766}{group database} -\entry{converting group name to group ID}{766}{converting group name to group ID} -\entry{converting group ID to group name}{766}{converting group ID to group name} -\entry{scanning the group list}{767}{scanning the group list} -\entry{Netgroup}{769}{Netgroup} -\entry{host name}{773}{host name} -\entry{DNS}{773}{DNS} -\entry{Domain Name System}{773}{Domain Name System} -\entry{hostname}{773}{hostname} -\entry{domain name}{773}{domain name} -\entry{FQDN}{773}{FQDN} -\entry{YP}{773}{YP} -\entry{NIS}{773}{NIS} -\entry{NIS domain name}{773}{NIS domain name} -\entry{YP domain name}{773}{YP domain name} -\entry{/etc/hostname}{774}{/etc/hostname} -\entry{NIS domain name}{774}{NIS domain name} -\entry{YP domain name}{774}{YP domain name} -\entry{NIS domain name}{774}{NIS domain name} -\entry{YP domain name}{774}{YP domain name} -\entry{POSIX capacity limits}{789}{POSIX capacity limits} -\entry{limits, POSIX}{789}{limits, POSIX} -\entry{capacity limits, POSIX}{789}{capacity limits, POSIX} -\entry{limits, program argument size}{789}{limits, program argument size} -\entry{limits, number of processes}{789}{limits, number of processes} -\entry{limits, number of open files}{789}{limits, number of open files} -\entry{limits, time zone name length}{789}{limits, time zone name length} -\entry{limits, number of supplementary group IDs}{790}{limits, number of supplementary group IDs} -\entry{POSIX optional features}{790}{POSIX optional features} -\entry{optional POSIX features}{790}{optional POSIX features} -\entry{limits, link count of files}{802}{limits, link count of files} -\entry{limits, terminal input queue}{802}{limits, terminal input queue} -\entry{limits, file name length}{802}{limits, file name length} -\entry{limits, pipe buffer size}{803}{limits, pipe buffer size} -\entry{backtrace}{819}{backtrace} -\entry{backtrace{\_}symbols}{819}{backtrace_symbols} -\entry{backtrace{\_}fd}{819}{backtrace_fd} -\entry{consistency checking}{845}{consistency checking} -\entry{impossible events}{845}{impossible events} -\entry{assertions}{845}{assertions} -\entry{variable number of arguments}{846}{variable number of arguments} -\entry{variadic functions}{846}{variadic functions} -\entry{optional arguments}{846}{optional arguments} -\entry{function prototypes (variadic)}{847}{function prototypes (variadic)} -\entry{prototypes for variadic functions}{847}{prototypes for variadic functions} -\entry{variadic function prototypes}{847}{variadic function prototypes} -\entry{variadic function argument access}{848}{variadic function argument access} -\entry{arguments (variadic functions)}{848}{arguments (variadic functions)} -\entry{number of arguments passed}{848}{number of arguments passed} -\entry{how many arguments}{848}{how many arguments} -\entry{arguments, how many}{848}{arguments, how many} -\entry{variadic functions, calling}{849}{variadic functions, calling} -\entry{calling variadic functions}{849}{calling variadic functions} -\entry{declaring variadic functions}{849}{declaring variadic functions} -\entry{default argument promotions}{849}{default argument promotions} -\entry{argument promotion}{849}{argument promotion} -\entry{null pointer constant}{852}{null pointer constant} -\entry{integer type width}{854}{integer type width} -\entry{width of integer type}{854}{width of integer type} -\entry{type measurements, integer}{854}{type measurements, integer} -\entry{integer type range}{854}{integer type range} -\entry{range of integer type}{854}{range of integer type} -\entry{limits, integer types}{854}{limits, integer types} -\entry{floating type measurements}{856}{floating type measurements} -\entry{measurements of floating types}{856}{measurements of floating types} -\entry{type measurements, floating}{856}{type measurements, floating} -\entry{limits, floating types}{856}{limits, floating types} -\entry{sign (of floating point number)}{856}{sign (of floating point number)} -\entry{base (of floating point number)}{856}{base (of floating point number)} -\entry{radix (of floating point number)}{856}{radix (of floating point number)} -\entry{exponent (of floating point number)}{856}{exponent (of floating point number)} -\entry{bias (of floating point number exponent)}{856}{bias (of floating point number exponent)} -\entry{mantissa (of floating point number)}{856}{mantissa (of floating point number)} -\entry{significand (of floating point number)}{856}{significand (of floating point number)} -\entry{precision (of floating point number)}{856}{precision (of floating point number)} -\entry{hidden bit (of floating point number mantissa)}{856}{hidden bit (of floating point number mantissa)} -\entry{normalized floating point number}{857}{normalized floating point number} -\entry{IEEE floating point representation}{860}{IEEE floating point representation} -\entry{floating point, IEEE}{860}{floating point, IEEE} -\entry{configuring}{969}{configuring} -\entry{compiling}{969}{compiling} -\entry{installing}{972}{installing} -\entry{installation tools}{973}{installation tools} -\entry{tools, for installing library}{973}{tools, for installing library} -\entry{configurations, all supported}{974}{configurations, all supported} -\entry{upgrading from libc5}{976}{upgrading from libc5} -\entry{kernel header files}{976}{kernel header files} -\entry{reporting bugs}{976}{reporting bugs} -\entry{bugs, reporting}{976}{bugs, reporting} +\entry{processor time}{553}{processor time} +\entry{elapsed time}{553}{elapsed time} +\entry{timeval}{554}{timeval} +\entry{timespec}{554}{timespec} +\entry{CPU time}{555}{CPU time} +\entry{clock ticks}{555}{clock ticks} +\entry{ticks, clock}{555}{ticks, clock} +\entry{processor time}{556}{processor time} +\entry{CPU time}{556}{CPU time} +\entry{child process}{557}{child process} +\entry{simple time}{557}{simple time} +\entry{high-resolution time}{557}{high-resolution time} +\entry{local time}{557}{local time} +\entry{broken-down time}{557}{broken-down time} +\entry{Gregorian calendar}{557}{Gregorian calendar} +\entry{calendar, Gregorian}{557}{calendar, Gregorian} +\entry{epoch}{558}{epoch} +\entry{broken-down time}{560}{broken-down time} +\entry{calendar time and broken-down time}{560}{calendar time and broken-down time} +\entry{leap second}{561}{leap second} +\entry{Daylight Saving Time}{561}{Daylight Saving Time} +\entry{summer time}{561}{summer time} +\entry{time, high precision}{563}{time, high precision} +\entry{clock, high accuracy}{563}{clock, high accuracy} +\entry{time zone}{579}{time zone} +\entry{time zone database}{580}{time zone database} +\entry{setting an alarm}{582}{setting an alarm} +\entry{interval timer, setting}{582}{interval timer, setting} +\entry{alarms, setting}{582}{alarms, setting} +\entry{timers, setting}{582}{timers, setting} +\entry{real-time timer}{582}{real-time timer} +\entry{timer, real-time}{582}{timer, real-time} +\entry{virtual timer}{582}{virtual timer} +\entry{timer, virtual}{582}{timer, virtual} +\entry{profiling timer}{583}{profiling timer} +\entry{timer, profiling}{583}{timer, profiling} +\entry{resource limits}{589}{resource limits} +\entry{limits on resource usage}{589}{limits on resource usage} +\entry{usage limits}{589}{usage limits} +\entry{limit}{589}{limit} +\entry{current limit}{589}{current limit} +\entry{soft limit}{589}{soft limit} +\entry{maximum limit}{589}{maximum limit} +\entry{hard limit}{589}{hard limit} +\entry{process priority}{593}{process priority} +\entry{cpu priority}{593}{cpu priority} +\entry{priority of a process}{593}{priority of a process} +\entry{absolute priority}{594}{absolute priority} +\entry{priority, absolute}{594}{priority, absolute} +\entry{realtime CPU scheduling}{594}{realtime CPU scheduling} +\entry{ready to run}{594}{ready to run} +\entry{preemptive scheduling}{594}{preemptive scheduling} +\entry{runnable process}{594}{runnable process} +\entry{realtime scheduling}{595}{realtime scheduling} +\entry{scheduling, traditional}{599}{scheduling, traditional} +\entry{address space}{602}{address space} +\entry{physical memory}{602}{physical memory} +\entry{physical address}{602}{physical address} +\entry{shared memory}{602}{shared memory} +\entry{thrashing}{603}{thrashing} +\entry{memory page}{603}{memory page} +\entry{page, memory}{603}{page, memory} +\entry{sysconf}{603}{sysconf} +\entry{sysconf}{603}{sysconf} +\entry{sysconf}{604}{sysconf} +\entry{sysconf}{604}{sysconf} +\entry{load average}{605}{load average} +\entry{non-local exits}{607}{non-local exits} +\entry{long jumps}{607}{long jumps} +\entry{signal}{617}{signal} +\entry{generation of signals}{618}{generation of signals} +\entry{delivery of signals}{618}{delivery of signals} +\entry{pending signals}{618}{pending signals} +\entry{blocked signals}{618}{blocked signals} +\entry{specified action (for a signal)}{618}{specified action (for a signal)} +\entry{default action (for a signal)}{618}{default action (for a signal)} +\entry{signal action}{618}{signal action} +\entry{catching signals}{618}{catching signals} +\entry{signal names}{619}{signal names} +\entry{names of signals}{619}{names of signals} +\entry{signal number}{619}{signal number} +\entry{program error signals}{619}{program error signals} +\entry{exception}{620}{exception} +\entry{floating-point exception}{620}{floating-point exception} +\entry{illegal instruction}{621}{illegal instruction} +\entry{segmentation violation}{621}{segmentation violation} +\entry{bus error}{621}{bus error} +\entry{abort signal}{622}{abort signal} +\entry{program termination signals}{622}{program termination signals} +\entry{termination signal}{622}{termination signal} +\entry{interrupt signal}{622}{interrupt signal} +\entry{quit signal}{623}{quit signal} +\entry{quit signal}{623}{quit signal} +\entry{kill signal}{623}{kill signal} +\entry{hangup signal}{623}{hangup signal} +\entry{alarm signal}{624}{alarm signal} +\entry{virtual time alarm signal}{624}{virtual time alarm signal} +\entry{profiling alarm signal}{624}{profiling alarm signal} +\entry{input available signal}{624}{input available signal} +\entry{output possible signal}{624}{output possible signal} +\entry{urgent data signal}{624}{urgent data signal} +\entry{job control signals}{624}{job control signals} +\entry{child process signal}{624}{child process signal} +\entry{continue signal}{625}{continue signal} +\entry{stop signal}{625}{stop signal} +\entry{interactive stop signal}{625}{interactive stop signal} +\entry{terminal input signal}{625}{terminal input signal} +\entry{terminal output signal}{626}{terminal output signal} +\entry{pipe signal}{626}{pipe signal} +\entry{broken pipe signal}{626}{broken pipe signal} +\entry{lost resource signal}{626}{lost resource signal} +\entry{user signals}{627}{user signals} +\entry{signal messages}{627}{signal messages} +\entry{signal actions}{628}{signal actions} +\entry{establishing a handler}{628}{establishing a handler} +\entry{signal function}{628}{\code {signal} function} +\entry{default action for a signal}{629}{default action for a signal} +\entry{ignore action for a signal}{629}{ignore action for a signal} +\entry{sigaction function}{630}{\code {sigaction} function} +\entry{signal flags}{633}{signal flags} +\entry{flags for sigaction}{633}{flags for \code {sigaction}} +\entry{sigaction flags}{633}{\code {sigaction} flags} +\entry{initial signal actions}{634}{initial signal actions} +\entry{signal handler function}{634}{signal handler function} +\entry{non-local exit, from signal handler}{637}{non-local exit, from signal handler} +\entry{race conditions, relating to signals}{638}{race conditions, relating to signals} +\entry{handling multiple signals}{639}{handling multiple signals} +\entry{successive signals}{639}{successive signals} +\entry{merging of signals}{639}{merging of signals} +\entry{restrictions on signal handler functions}{641}{restrictions on signal handler functions} +\entry{volatile declarations}{642}{\code {volatile} declarations} +\entry{reentrant functions}{642}{reentrant functions} +\entry{EINTR, and restarting interrupted primitives}{646}{EINTR, and restarting interrupted primitives} +\entry{restarting interrupted primitives}{646}{restarting interrupted primitives} +\entry{interrupting primitives}{646}{interrupting primitives} +\entry{primitives, interrupting}{646}{primitives, interrupting} +\entry{sending signals}{646}{sending signals} +\entry{raising signals}{646}{raising signals} +\entry{signals, generating}{646}{signals, generating} +\entry{killing a process}{647}{killing a process} +\entry{interprocess communication, with signals}{649}{interprocess communication, with signals} +\entry{blocking signals}{650}{blocking signals} +\entry{signal set}{651}{signal set} +\entry{signal mask}{652}{signal mask} +\entry{process signal mask}{652}{process signal mask} +\entry{blocking signals, in a handler}{654}{blocking signals, in a handler} +\entry{pending signals, checking for}{655}{pending signals, checking for} +\entry{blocked signals, checking for}{655}{blocked signals, checking for} +\entry{checking for pending signals}{655}{checking for pending signals} +\entry{timing error in signal handling}{657}{timing error in signal handling} +\entry{waiting for a signal}{657}{waiting for a signal} +\entry{pause function}{657}{\code {pause} function} +\entry{process}{665}{process} +\entry{program}{665}{program} +\entry{address space}{665}{address space} +\entry{thread of control}{665}{thread of control} +\entry{program arguments}{665}{program arguments} +\entry{command line arguments}{665}{command line arguments} +\entry{arguments, to program}{665}{arguments, to program} +\entry{program startup}{665}{program startup} +\entry{startup of program}{665}{startup of program} +\entry{invocation of program}{665}{invocation of program} +\entry{main function}{665}{\code {main} function} +\entry{argc (program argument count)}{665}{argc (program argument count)} +\entry{argv (program argument vector)}{665}{argv (program argument vector)} +\entry{program argument syntax}{666}{program argument syntax} +\entry{syntax, for program arguments}{666}{syntax, for program arguments} +\entry{command argument syntax}{666}{command argument syntax} +\entry{long-named options}{666}{long-named options} +\entry{program arguments, parsing}{667}{program arguments, parsing} +\entry{command arguments, parsing}{667}{command arguments, parsing} +\entry{parsing program arguments}{667}{parsing program arguments} +\entry{argp (program argument parser)}{674}{argp (program argument parser)} +\entry{argument parsing with argp}{674}{argument parsing with argp} +\entry{option parsing with argp}{674}{option parsing with argp} +\entry{argp parser functions}{679}{argp parser functions} +\entry{usage messages, in argp}{682}{usage messages, in argp} +\entry{syntax error messages, in argp}{682}{syntax error messages, in argp} +\entry{error messages, in argp}{682}{error messages, in argp} +\entry{ARGP{\_}HELP{\_}FMT environment variable}{697}{ARGP_HELP_FMT environment variable} +\entry{environment variable}{700}{environment variable} +\entry{environment}{701}{environment} +\entry{environment access}{701}{environment access} +\entry{environment representation}{701}{environment representation} +\entry{standard environment variables}{703}{standard environment variables} +\entry{HOME environment variable}{703}{\code {HOME} environment variable} +\entry{home directory}{703}{home directory} +\entry{LOGNAME environment variable}{703}{\code {LOGNAME} environment variable} +\entry{PATH environment variable}{703}{\code {PATH} environment variable} +\entry{TERM environment variable}{703}{\code {TERM} environment variable} +\entry{TZ environment variable}{704}{\code {TZ} environment variable} +\entry{LANG environment variable}{704}{\code {LANG} environment variable} +\entry{LC{\_}ALL environment variable}{704}{\code {LC_ALL} environment variable} +\entry{LC{\_}COLLATE environment variable}{704}{\code {LC_COLLATE} environment variable} +\entry{LC{\_}CTYPE environment variable}{704}{\code {LC_CTYPE} environment variable} +\entry{LC{\_}MESSAGES environment variable}{704}{\code {LC_MESSAGES} environment variable} +\entry{LC{\_}MONETARY environment variable}{704}{\code {LC_MONETARY} environment variable} +\entry{LC{\_}NUMERIC environment variable}{704}{\code {LC_NUMERIC} environment variable} +\entry{LC{\_}TIME environment variable}{704}{\code {LC_TIME} environment variable} +\entry{NLSPATH environment variable}{704}{\code {NLSPATH} environment variable} +\entry{{\_}POSIX{\_}OPTION{\_}ORDER environment variable.}{704}{\code {_POSIX_OPTION_ORDER} environment variable.} +\entry{system call}{704}{system call} +\entry{kernel call}{704}{kernel call} +\entry{system call number}{705}{system call number} +\entry{errno}{705}{errno} +\entry{program termination}{706}{program termination} +\entry{process termination}{706}{process termination} +\entry{exit status value}{706}{exit status value} +\entry{exit status}{707}{exit status} +\entry{aborting a program}{709}{aborting a program} +\entry{process}{711}{process} +\entry{child process}{711}{child process} +\entry{parent process}{711}{parent process} +\entry{running a command}{711}{running a command} +\entry{process ID}{712}{process ID} +\entry{process lifetime}{712}{process lifetime} +\entry{creating a process}{712}{creating a process} +\entry{forking a process}{712}{forking a process} +\entry{child process}{712}{child process} +\entry{parent process}{712}{parent process} +\entry{process image}{712}{process image} +\entry{executing a file}{714}{executing a file} +\entry{exec functions}{714}{\code {exec} functions} +\entry{process completion}{716}{process completion} +\entry{waiting for completion of child process}{716}{waiting for completion of child process} +\entry{testing exit status of child process}{716}{testing exit status of child process} +\entry{process groups}{723}{process groups} +\entry{job control}{723}{job control} +\entry{job}{723}{job} +\entry{session}{723}{session} +\entry{shell}{723}{shell} +\entry{session}{723}{session} +\entry{session leader}{723}{session leader} +\entry{controlling terminal}{723}{controlling terminal} +\entry{foreground job}{723}{foreground job} +\entry{background job}{723}{background job} +\entry{stopped job}{724}{stopped job} +\entry{job control is optional}{724}{job control is optional} +\entry{controlling process}{724}{controlling process} +\entry{controlling terminal, access to}{724}{controlling terminal, access to} +\entry{SIGTTIN, from background job}{724}{\code {SIGTTIN}, from background job} +\entry{SIGTTOU, from background job}{725}{\code {SIGTTOU}, from background job} +\entry{orphaned process group}{725}{orphaned process group} +\entry{job control, enabling}{727}{job control, enabling} +\entry{subshell}{727}{subshell} +\entry{job control, enabling}{727}{job control, enabling} +\entry{launching jobs}{729}{launching jobs} +\entry{process group leader}{729}{process group leader} +\entry{process group ID}{729}{process group ID} +\entry{race conditions, relating to job control}{729}{race conditions, relating to job control} +\entry{foreground job, launching}{732}{foreground job, launching} +\entry{background job, launching}{733}{background job, launching} +\entry{stopped jobs, detecting}{733}{stopped jobs, detecting} +\entry{terminated jobs, detecting}{733}{terminated jobs, detecting} +\entry{SIGCHLD, handling of}{734}{\code {SIGCHLD}, handling of} +\entry{stopped jobs, continuing}{736}{stopped jobs, continuing} +\entry{process group functions}{738}{process group functions} +\entry{job control functions}{738}{job control functions} +\entry{controlling terminal, determining}{738}{controlling terminal, determining} +\entry{BSD compatibility library}{739}{BSD compatibility library} +\entry{Name Service Switch}{743}{Name Service Switch} +\entry{NSS}{743}{NSS} +\entry{databases}{743}{databases} +\entry{ethers}{743}{ethers} +\entry{group}{743}{group} +\entry{hosts}{743}{hosts} +\entry{netgroup}{743}{netgroup} +\entry{networks}{743}{networks} +\entry{protocols}{743}{protocols} +\entry{passwd}{743}{passwd} +\entry{rpc}{743}{rpc} +\entry{services}{743}{services} +\entry{shadow}{743}{shadow} +\entry{/etc/nsswitch.conf}{744}{\file {/etc/nsswitch.conf}} +\entry{nsswitch.conf}{744}{\file {nsswitch.conf}} +\entry{DNS server unavailable}{745}{DNS server unavailable} +\entry{nisplus, and completeness}{745}{nisplus, and completeness} +\entry{nisplus, and booting}{745}{nisplus, and booting} +\entry{bootstrapping, and services}{745}{bootstrapping, and services} +\entry{default value, and NSS}{746}{default value, and NSS} +\entry{optimizing NSS}{746}{optimizing NSS} +\entry{reentrant NSS functions}{747}{reentrant NSS functions} +\entry{login name}{753}{login name} +\entry{user name}{753}{user name} +\entry{user ID}{753}{user ID} +\entry{group name}{753}{group name} +\entry{group ID}{753}{group ID} +\entry{persona}{753}{persona} +\entry{effective user ID}{753}{effective user ID} +\entry{effective group ID}{753}{effective group ID} +\entry{supplementary group IDs}{753}{supplementary group IDs} +\entry{real user ID}{753}{real user ID} +\entry{real group ID}{753}{real group ID} +\entry{setuid programs}{754}{\code {setuid} programs} +\entry{saved set-user-ID}{754}{saved set-user-ID} +\entry{saved set-group-ID}{754}{saved set-group-ID} +\entry{{\_}POSIX{\_}SAVED{\_}IDS}{754}{\code {_POSIX_SAVED_IDS}} +\entry{login name, determining}{762}{login name, determining} +\entry{user ID, determining}{762}{user ID, determining} +\entry{user accounting database}{763}{user accounting database} +\entry{user database}{771}{user database} +\entry{password database}{771}{password database} +\entry{converting user ID to user name}{771}{converting user ID to user name} +\entry{converting user name to user ID}{771}{converting user name to user ID} +\entry{scanning the user list}{772}{scanning the user list} +\entry{group database}{774}{group database} +\entry{converting group name to group ID}{774}{converting group name to group ID} +\entry{converting group ID to group name}{774}{converting group ID to group name} +\entry{scanning the group list}{775}{scanning the group list} +\entry{Netgroup}{777}{Netgroup} +\entry{host name}{781}{host name} +\entry{DNS}{781}{DNS} +\entry{Domain Name System}{781}{Domain Name System} +\entry{hostname}{781}{hostname} +\entry{domain name}{781}{domain name} +\entry{FQDN}{781}{FQDN} +\entry{YP}{781}{YP} +\entry{NIS}{781}{NIS} +\entry{NIS domain name}{781}{NIS domain name} +\entry{YP domain name}{781}{YP domain name} +\entry{/etc/hostname}{782}{/etc/hostname} +\entry{NIS domain name}{782}{NIS domain name} +\entry{YP domain name}{782}{YP domain name} +\entry{NIS domain name}{782}{NIS domain name} +\entry{YP domain name}{782}{YP domain name} +\entry{POSIX capacity limits}{797}{POSIX capacity limits} +\entry{limits, POSIX}{797}{limits, POSIX} +\entry{capacity limits, POSIX}{797}{capacity limits, POSIX} +\entry{limits, program argument size}{797}{limits, program argument size} +\entry{limits, number of processes}{797}{limits, number of processes} +\entry{limits, number of open files}{797}{limits, number of open files} +\entry{limits, time zone name length}{797}{limits, time zone name length} +\entry{limits, number of supplementary group IDs}{798}{limits, number of supplementary group IDs} +\entry{POSIX optional features}{798}{POSIX optional features} +\entry{optional POSIX features}{798}{optional POSIX features} +\entry{limits, link count of files}{810}{limits, link count of files} +\entry{limits, terminal input queue}{810}{limits, terminal input queue} +\entry{limits, file name length}{810}{limits, file name length} +\entry{limits, pipe buffer size}{811}{limits, pipe buffer size} +\entry{backtrace}{827}{backtrace} +\entry{backtrace{\_}symbols}{827}{backtrace_symbols} +\entry{backtrace{\_}fd}{827}{backtrace_fd} +\entry{consistency checking}{853}{consistency checking} +\entry{impossible events}{853}{impossible events} +\entry{assertions}{853}{assertions} +\entry{variable number of arguments}{854}{variable number of arguments} +\entry{variadic functions}{854}{variadic functions} +\entry{optional arguments}{854}{optional arguments} +\entry{function prototypes (variadic)}{855}{function prototypes (variadic)} +\entry{prototypes for variadic functions}{855}{prototypes for variadic functions} +\entry{variadic function prototypes}{855}{variadic function prototypes} +\entry{variadic function argument access}{856}{variadic function argument access} +\entry{arguments (variadic functions)}{856}{arguments (variadic functions)} +\entry{number of arguments passed}{856}{number of arguments passed} +\entry{how many arguments}{856}{how many arguments} +\entry{arguments, how many}{856}{arguments, how many} +\entry{variadic functions, calling}{857}{variadic functions, calling} +\entry{calling variadic functions}{857}{calling variadic functions} +\entry{declaring variadic functions}{857}{declaring variadic functions} +\entry{default argument promotions}{857}{default argument promotions} +\entry{argument promotion}{857}{argument promotion} +\entry{null pointer constant}{860}{null pointer constant} +\entry{integer type width}{862}{integer type width} +\entry{width of integer type}{862}{width of integer type} +\entry{type measurements, integer}{862}{type measurements, integer} +\entry{integer type range}{862}{integer type range} +\entry{range of integer type}{862}{range of integer type} +\entry{limits, integer types}{862}{limits, integer types} +\entry{floating type measurements}{864}{floating type measurements} +\entry{measurements of floating types}{864}{measurements of floating types} +\entry{type measurements, floating}{864}{type measurements, floating} +\entry{limits, floating types}{864}{limits, floating types} +\entry{sign (of floating point number)}{864}{sign (of floating point number)} +\entry{base (of floating point number)}{864}{base (of floating point number)} +\entry{radix (of floating point number)}{864}{radix (of floating point number)} +\entry{exponent (of floating point number)}{864}{exponent (of floating point number)} +\entry{bias (of floating point number exponent)}{864}{bias (of floating point number exponent)} +\entry{mantissa (of floating point number)}{864}{mantissa (of floating point number)} +\entry{significand (of floating point number)}{864}{significand (of floating point number)} +\entry{precision (of floating point number)}{864}{precision (of floating point number)} +\entry{hidden bit (of floating point number mantissa)}{864}{hidden bit (of floating point number mantissa)} +\entry{normalized floating point number}{865}{normalized floating point number} +\entry{IEEE floating point representation}{868}{IEEE floating point representation} +\entry{floating point, IEEE}{868}{floating point, IEEE} +\entry{configuring}{979}{configuring} +\entry{compiling}{979}{compiling} +\entry{installing}{982}{installing} +\entry{installation tools}{983}{installation tools} +\entry{tools, for installing library}{983}{tools, for installing library} +\entry{configurations, all supported}{984}{configurations, all supported} +\entry{upgrading from libc5}{986}{upgrading from libc5} +\entry{kernel header files}{986}{kernel header files} +\entry{reporting bugs}{986}{reporting bugs} +\entry{bugs, reporting}{986}{bugs, reporting} diff -durpNa glibc-2.2.2/manual/libc.cps glibc-2.2.3/manual/libc.cps --- glibc-2.2.2/manual/libc.cps Thu Feb 15 16:49:47 2001 +++ glibc-2.2.3/manual/libc.cps Wed Apr 25 16:05:56 2001 @@ -1,26 +1,26 @@ \initial {/} -\entry {/etc/hostname}{774} -\entry {\file {/etc/nsswitch.conf}}{736} +\entry {/etc/hostname}{782} +\entry {\file {/etc/nsswitch.conf}}{744} \initial {{\_}} \entry {__va_copy}{88} -\entry {\code {_POSIX_OPTION_ORDER} environment variable.}{696} -\entry {\code {_POSIX_SAVED_IDS}}{746} +\entry {\code {_POSIX_OPTION_ORDER} environment variable.}{704} +\entry {\code {_POSIX_SAVED_IDS}}{754} \initial {4} \entry {4.\var {n} BSD Unix}{3} \initial {A} -\entry {abort signal}{614} -\entry {aborting a program}{701} +\entry {abort signal}{622} +\entry {aborting a program}{709} \entry {absolute file name}{236} -\entry {absolute priority}{592} -\entry {absolute value functions}{533} +\entry {absolute priority}{594} +\entry {absolute value functions}{535} \entry {accepting connections}{436} -\entry {access permission for a file}{390} -\entry {access, testing for}{392} +\entry {access permission for a file}{391} +\entry {access, testing for}{393} \entry {accessing directories}{363} \entry {address of socket}{411} -\entry {address space}{600, 657} -\entry {alarm signal}{616} -\entry {alarms, setting}{580} +\entry {address space}{602, 665} +\entry {alarm signal}{624} +\entry {alarms, setting}{582} \entry {alignment (in obstacks)}{57} \entry {alignment (with \code {malloc})}{38} \entry {\code {alloca} disadvantages}{61} @@ -35,17 +35,17 @@ \entry {alphabetic character}{67, 71} \entry {alphanumeric character}{68, 70} \entry {append-access files}{235} -\entry {argc (program argument count)}{657} -\entry {argp (program argument parser)}{666} -\entry {argp parser functions}{671} -\entry {ARGP_HELP_FMT environment variable}{689} -\entry {argument parsing with argp}{666} -\entry {argument promotion}{849} +\entry {argc (program argument count)}{665} +\entry {argp (program argument parser)}{674} +\entry {argp parser functions}{679} +\entry {ARGP_HELP_FMT environment variable}{697} +\entry {argument parsing with argp}{674} +\entry {argument promotion}{857} \entry {argument vectors, null-character separated}{111} -\entry {arguments (variadic functions)}{848} -\entry {arguments, how many}{848} -\entry {arguments, to program}{657} -\entry {argv (program argument vector)}{657} +\entry {arguments (variadic functions)}{856} +\entry {arguments, how many}{856} +\entry {arguments, to program}{665} +\entry {argv (program argument vector)}{665} \entry {argz vectors (string vectors)}{111} \entry {arithmetic expansion}{227} \entry {array comparison functions}{92} @@ -53,23 +53,23 @@ \entry {array search function}{203} \entry {array sort function}{204} \entry {ASCII character}{69} -\entry {assertions}{845} -\entry {attributes of a file}{379} +\entry {assertions}{853} +\entry {attributes of a file}{380} \entry {automatic freeing}{60} \entry {automatic memory allocation}{33} \entry {automatic storage class}{33} \entry {automatic storage with variable size}{60} \initial {B} -\entry {background job}{715} -\entry {background job, launching}{725} -\entry {backtrace}{819} -\entry {backtrace_fd}{819} -\entry {backtrace_symbols}{819} -\entry {base (of floating point number)}{856} +\entry {background job}{723} +\entry {background job, launching}{733} +\entry {backtrace}{827} +\entry {backtrace_fd}{827} +\entry {backtrace_symbols}{827} +\entry {base (of floating point number)}{864} \entry {baud rate}{469} \entry {Berkeley Unix}{3} \entry {Bessel functions}{503} -\entry {bias (of floating point number exponent)}{856} +\entry {bias (of floating point number exponent)}{864} \entry {big-endian}{428} \entry {binary I/O to a stream}{257} \entry {binary search function (for arrays)}{203} @@ -77,37 +77,37 @@ \entry {binding a socket address}{411} \entry {blank character}{68, 73} \entry {block I/O to a stream}{257} -\entry {blocked signals}{610} -\entry {blocked signals, checking for}{647} -\entry {blocking signals}{642} -\entry {blocking signals, in a handler}{646} -\entry {bootstrapping, and services}{737} +\entry {blocked signals}{618} +\entry {blocked signals, checking for}{655} +\entry {blocking signals}{650} +\entry {blocking signals, in a handler}{654} +\entry {bootstrapping, and services}{745} \entry {break condition, detecting}{463} \entry {break condition, generating}{477} \entry {breaking a string into tokens}{104} -\entry {broken pipe signal}{618} -\entry {broken-down time}{555, 558} -\entry {BSD compatibility library}{731} +\entry {broken pipe signal}{626} +\entry {broken-down time}{557, 560} +\entry {BSD compatibility library}{739} \entry {BSD compatibility library.}{8} \entry {BSD Unix}{3} \entry {buffering of streams}{297} \entry {buffering, controlling}{299} -\entry {bugs, reporting}{976} -\entry {bus error}{613} -\entry {butterfly}{540} +\entry {bugs, reporting}{986} +\entry {bus error}{621} +\entry {butterfly}{542} \entry {byte order conversion, for socket}{428} \entry {byte stream}{409} \initial {C} \entry {C++ streams}{248} -\entry {calendar time}{551} -\entry {calendar time and broken-down time}{558} -\entry {calendar, Gregorian}{555} -\entry {calling variadic functions}{849} +\entry {calendar time}{553} +\entry {calendar time and broken-down time}{560} +\entry {calendar, Gregorian}{557} +\entry {calling variadic functions}{857} \entry {canonical input processing}{458} -\entry {capacity limits, POSIX}{789} +\entry {capacity limits, POSIX}{797} \entry {carrier detect}{465} \entry {case conversion of characters}{69} -\entry {catching signals}{610} +\entry {catching signals}{618} \entry {categories for locales}{162} \entry {change working directory}{361} \entry {changing the locale}{163} @@ -117,60 +117,60 @@ \entry {character case conversion}{69} \entry {character predicates}{67} \entry {character testing}{67} -\entry {checking for pending signals}{647} -\entry {child process}{555, 703, 704} -\entry {child process signal}{616} +\entry {checking for pending signals}{655} +\entry {child process}{557, 711, 712} +\entry {child process signal}{624} \entry {chunks}{58} -\entry {classes, floating-point}{522} +\entry {classes, floating-point}{524} \entry {classification of characters}{67} \entry {cleaning up a stream}{324} \entry {clearing terminal input queue}{478} \entry {client}{434} -\entry {clock ticks}{553} -\entry {clock, high accuracy}{561} +\entry {clock ticks}{555} +\entry {clock, high accuracy}{563} \entry {close-on-exec (file descriptor flag)}{349} \entry {closing a file descriptor}{313} \entry {closing a socket}{433} \entry {closing a stream}{243} \entry {collating strings}{95} \entry {combining locales}{162} -\entry {command argument syntax}{658} -\entry {command arguments, parsing}{659} -\entry {command line arguments}{657} +\entry {command argument syntax}{666} +\entry {command arguments, parsing}{667} +\entry {command line arguments}{665} \entry {command substitution}{227} \entry {communication style (of a socket)}{409} \entry {comparing strings and arrays}{92} \entry {Comparison Function}{203} -\entry {compiling}{969} +\entry {compiling}{979} \entry {complex exponentiation functions}{500} \entry {complex logarithm functions}{500} -\entry {complex numbers}{541} +\entry {complex numbers}{543} \entry {complex trigonometric functions}{495} \entry {concatenating strings}{81} -\entry {configurations, all supported}{974} -\entry {configuring}{969} -\entry {conjugate complex numbers}{541} +\entry {configurations, all supported}{984} +\entry {configuring}{979} +\entry {conjugate complex numbers}{543} \entry {connecting a socket}{434} \entry {connection}{434} -\entry {consistency checking}{845} +\entry {consistency checking}{853} \entry {consistency checking, of heap}{39} \entry {constants}{32, 493} -\entry {continue signal}{617} +\entry {continue signal}{625} \entry {control character}{68, 71} \entry {control operations on files}{345} -\entry {controlling process}{716} -\entry {controlling terminal}{715} -\entry {controlling terminal, access to}{716} -\entry {controlling terminal, determining}{730} +\entry {controlling process}{724} +\entry {controlling terminal}{723} +\entry {controlling terminal, access to}{724} +\entry {controlling terminal, determining}{738} \entry {controlling terminal, setting}{351} \entry {conversion specifications (\code {printf})}{259} \entry {conversion specifications (\code {scanf})}{282} \entry {converting byte order}{428} \entry {converting case of characters}{69} \entry {converting file descriptor to stream}{323} -\entry {converting floats to integers}{535} -\entry {converting group ID to group name}{766} -\entry {converting group name to group ID}{766} +\entry {converting floats to integers}{537} +\entry {converting group ID to group name}{774} +\entry {converting group name to group ID}{774} \entry {converting host address to name}{423} \entry {converting host name to address}{423} \entry {converting network name to network number}{454} @@ -178,69 +178,69 @@ \entry {converting port number to service name}{427} \entry {converting service name to port number}{427} \entry {converting string to collation order}{96} -\entry {converting strings to numbers}{542} -\entry {converting user ID to user name}{763} -\entry {converting user name to user ID}{763} +\entry {converting strings to numbers}{544} +\entry {converting user ID to user name}{771} +\entry {converting user name to user ID}{771} \entry {cookie, for custom stream}{305} \entry {copy-on-write page fault}{64} \entry {copying strings and arrays}{81} -\entry {cpu priority}{591} -\entry {CPU time}{551, 553, 554} +\entry {cpu priority}{593} +\entry {CPU time}{553, 555, 556} \entry {create on open (file status flag)}{351} -\entry {creating a directory}{379} +\entry {creating a directory}{380} \entry {creating a FIFO special file}{406} \entry {creating a pipe}{403} \entry {creating a pipe to a subprocess}{405} -\entry {creating a process}{704} +\entry {creating a process}{712} \entry {creating a socket}{432} \entry {creating a socket pair}{433} -\entry {creating special files}{397} +\entry {creating special files}{398} \entry {cube root function}{499} \entry {currency symbols}{167} -\entry {current limit}{587} +\entry {current limit}{589} \entry {current working directory}{361} \entry {custom streams}{305} \entry {customizing \code {printf}}{275} \initial {D} \entry {data loss on sockets}{409} -\entry {databases}{735} +\entry {databases}{743} \entry {datagram socket}{447} \entry {datagrams, transmitting}{447} -\entry {date}{551} -\entry {Daylight Saving Time}{559} +\entry {date}{553} +\entry {Daylight Saving Time}{561} \entry {decimal digit character}{68} \entry {decimal-point separator}{166} \entry {declaration (compared to definition)}{4} -\entry {declaring variadic functions}{849} -\entry {decompose complex numbers}{541} -\entry {default action (for a signal)}{610} -\entry {default action for a signal}{621} -\entry {default argument promotions}{849} -\entry {default value, and NSS}{738} +\entry {declaring variadic functions}{857} +\entry {decompose complex numbers}{543} +\entry {default action (for a signal)}{618} +\entry {default action for a signal}{629} +\entry {default argument promotions}{857} +\entry {default value, and NSS}{746} \entry {defining new \code {printf} conversions}{275} \entry {definition (compared to declaration)}{4} \entry {delayed suspend character}{473} -\entry {deleting a directory}{377} -\entry {deleting a file}{376} -\entry {delivery of signals}{610} +\entry {deleting a directory}{378} +\entry {deleting a file}{377} +\entry {delivery of signals}{618} \entry {descriptors and streams}{324} \entry {digit character}{68, 71} \entry {directories, accessing}{363} -\entry {directories, creating}{379} -\entry {directories, deleting}{377} +\entry {directories, creating}{380} +\entry {directories, deleting}{378} \entry {directory}{235} \entry {directory entry}{235} \entry {directory hierarchy}{370} \entry {directory stream}{363} \entry {disadvantages of \code {alloca}}{61} \entry {DISCARD character}{474} -\entry {division by zero}{524} -\entry {DNS}{773} -\entry {DNS server unavailable}{737} +\entry {division by zero}{526} +\entry {DNS}{781} +\entry {DNS server unavailable}{745} \entry {domain (of socket)}{409} -\entry {domain error}{529} -\entry {domain name}{773} -\entry {Domain Name System}{773} +\entry {domain error}{531} +\entry {domain name}{781} +\entry {Domain Name System}{781} \entry {dot notation, for Internet addresses}{419} \entry {DSUSP character}{473} \entry {duplicating file descriptors}{346} @@ -248,47 +248,47 @@ \initial {E} \entry {EBCDIC}{119} \entry {echo of terminal input}{467} -\entry {effective group ID}{745} -\entry {effective user ID}{745} +\entry {effective group ID}{753} +\entry {effective user ID}{753} \entry {efficiency and \code {malloc}}{38} \entry {efficiency and obstacks}{55} \entry {efficiency of chunks}{58} -\entry {EINTR, and restarting interrupted primitives}{638} -\entry {elapsed time}{551} +\entry {EINTR, and restarting interrupted primitives}{646} +\entry {elapsed time}{553} \entry {encryption}{109} \entry {end of file, on a stream}{291} \entry {end-of-file, on a file descriptor}{316} -\entry {environment}{693} -\entry {environment access}{693} -\entry {environment representation}{693} -\entry {environment variable}{692} +\entry {environment}{701} +\entry {environment access}{701} +\entry {environment representation}{701} +\entry {environment variable}{700} \entry {environment vectors, null-character separated}{111} \entry {envz vectors (environment vectors)}{111} \entry {EOF character}{471} \entry {EOL character}{471} \entry {EOL2 character}{471} -\entry {epoch}{556} +\entry {epoch}{558} \entry {ERASE character}{472} -\entry {errno}{697} +\entry {errno}{705} \entry {error codes}{15} -\entry {error messages, in argp}{674} +\entry {error messages, in argp}{682} \entry {error reporting}{15} -\entry {errors, mathematical}{529} -\entry {establishing a handler}{620} -\entry {ethers}{735} +\entry {errors, mathematical}{531} +\entry {establishing a handler}{628} +\entry {ethers}{743} \entry {EUC}{120} \entry {EUC-JP}{147} -\entry {exception}{524, 612} +\entry {exception}{526, 620} \entry {exclusive lock}{355} -\entry {\code {exec} functions}{706} +\entry {\code {exec} functions}{714} \entry {execing a program}{32} \entry {executable}{32} -\entry {executing a file}{706} -\entry {exit status}{699} -\entry {exit status value}{698} +\entry {executing a file}{714} +\entry {exit status}{707} +\entry {exit status value}{706} \entry {exiting a program}{32} -\entry {expansion of shell words}{226} -\entry {exponent (of floating point number)}{856} +\entry {expansion of shell words}{227} +\entry {exponent (of floating point number)}{864} \entry {exponentiation functions}{497} \entry {extending \code {printf}}{275} \entry {extracting file descriptor from stream}{323} @@ -297,24 +297,24 @@ \entry {feature test macros}{7} \entry {field splitting}{227} \entry {FIFO special file}{403} -\entry {file access permission}{390} -\entry {file access time}{393} -\entry {file attribute modification time}{393} -\entry {file attributes}{379} -\entry {file creation mask}{390} +\entry {file access permission}{391} +\entry {file access time}{394} +\entry {file attribute modification time}{394} +\entry {file attributes}{380} +\entry {file creation mask}{391} \entry {file descriptor flags}{348} \entry {file descriptor sets, for \code {select}}{330} \entry {file descriptors, standard}{323} \entry {file locks}{355} -\entry {file modification time}{393} +\entry {file modification time}{394} \entry {file name}{235} \entry {file name component}{235} \entry {file name errors}{236} \entry {file name resolution}{236} \entry {file name translation flags}{351} \entry {file names, multiple}{374} -\entry {file owner}{387} -\entry {file permission bits}{388} +\entry {file owner}{388} +\entry {file permission bits}{389} \entry {file pointer}{239} \entry {file position}{234} \entry {file positioning on a file descriptor}{320} @@ -324,121 +324,121 @@ \entry {filtering i/o through subprocess}{405} \entry {flag character (\code {printf})}{260} \entry {flag character (\code {scanf})}{283} -\entry {flags for \code {sigaction}}{625} +\entry {flags for \code {sigaction}}{633} \entry {flags, file name translation}{351} \entry {flags, open-time action}{351} -\entry {floating point}{522} -\entry {floating point, IEEE}{860} -\entry {floating type measurements}{856} -\entry {floating-point classes}{522} -\entry {floating-point exception}{612} +\entry {floating point}{524} +\entry {floating point, IEEE}{868} +\entry {floating type measurements}{864} +\entry {floating-point classes}{524} +\entry {floating-point exception}{620} \entry {flow control, terminal}{478} \entry {flushing a stream}{298} \entry {flushing terminal output queue}{477} -\entry {foreground job}{715} -\entry {foreground job, launching}{724} -\entry {forking a process}{704} +\entry {foreground job}{723} +\entry {foreground job, launching}{732} +\entry {forking a process}{712} \entry {format string, for \code {printf}}{258} \entry {format string, for \code {scanf}}{281} \entry {formatted input from a stream}{281} \entry {formatted messages}{307} \entry {formatted output to a stream}{258} -\entry {FP arithmetic}{538} -\entry {FQDN}{773} +\entry {FP arithmetic}{540} +\entry {FQDN}{781} \entry {frame, real memory}{31} \entry {freeing (obstacks)}{52} \entry {freeing memory}{32} \entry {freeing memory allocated with \code {malloc}}{35} \entry {fully buffered stream}{298} -\entry {function prototypes (variadic)}{847} +\entry {function prototypes (variadic)}{855} \initial {G} \entry {gamma function}{503} -\entry {gcvt_r}{550} +\entry {gcvt_r}{552} \entry {gencat}{184} -\entry {generation of signals}{610} +\entry {generation of signals}{618} \entry {generic i/o control operations}{358} \entry {globbing}{214} \entry {graphic character}{68, 71} -\entry {Gregorian calendar}{555} -\entry {group}{735} -\entry {group database}{766} -\entry {group ID}{745} -\entry {group name}{745} -\entry {group owner of a file}{387} +\entry {Gregorian calendar}{557} +\entry {group}{743} +\entry {group database}{774} +\entry {group ID}{753} +\entry {group name}{753} +\entry {group owner of a file}{388} \entry {grouping of digits}{166} \entry {growing objects (in obstacks)}{53} \initial {H} -\entry {handling multiple signals}{631} -\entry {hangup signal}{615} -\entry {hard limit}{587} +\entry {handling multiple signals}{639} +\entry {hangup signal}{623} +\entry {hard limit}{589} \entry {hard link}{374} \entry {header files}{4} \entry {heap consistency checking}{39} \entry {heap, dynamic allocation from}{34} \entry {heap, freeing memory from}{35} \entry {hexadecimal digit character}{68, 73} -\entry {hidden bit (of floating point number mantissa)}{856} +\entry {hidden bit (of floating point number mantissa)}{864} \entry {hierarchy, directory}{370} \entry {high-priority data}{444} -\entry {high-resolution time}{555} +\entry {high-resolution time}{557} \entry {holes in files}{321} -\entry {home directory}{695} -\entry {\code {HOME} environment variable}{695} +\entry {home directory}{703} +\entry {\code {HOME} environment variable}{703} \entry {hook functions (of custom streams)}{306} \entry {host address, Internet}{419} -\entry {host name}{773} -\entry {hostname}{773} -\entry {hosts}{735} +\entry {host name}{781} +\entry {hostname}{781} +\entry {hosts}{743} \entry {hosts database}{423} -\entry {how many arguments}{848} +\entry {how many arguments}{856} \entry {hyperbolic functions}{501} \initial {I} \entry {identifying terminals}{457} -\entry {IEEE 754}{522} -\entry {IEEE floating point}{522} -\entry {IEEE floating point representation}{860} +\entry {IEEE 754}{524} +\entry {IEEE floating point}{524} +\entry {IEEE floating point representation}{868} \entry {IEEE Std 1003.1}{2} \entry {IEEE Std 1003.2}{2} -\entry {ignore action for a signal}{621} -\entry {illegal instruction}{613} -\entry {impossible events}{845} +\entry {ignore action for a signal}{629} +\entry {illegal instruction}{621} +\entry {impossible events}{853} \entry {independent channels}{324} -\entry {inexact exception}{524} -\entry {infinity}{526} -\entry {initial signal actions}{626} -\entry {inode number}{383} -\entry {input available signal}{616} +\entry {inexact exception}{526} +\entry {infinity}{528} +\entry {initial signal actions}{634} +\entry {inode number}{384} +\entry {input available signal}{624} \entry {input conversions, for \code {scanf}}{283} \entry {input from multiple files}{330} -\entry {installation tools}{973} -\entry {installing}{972} -\entry {integer}{519} -\entry {integer division functions}{520} -\entry {integer type range}{854} -\entry {integer type width}{854} +\entry {installation tools}{983} +\entry {installing}{982} +\entry {integer}{521} +\entry {integer division functions}{522} +\entry {integer type range}{862} +\entry {integer type width}{862} \entry {interactive signals, from terminal}{468} -\entry {interactive stop signal}{617} +\entry {interactive stop signal}{625} \entry {internal representation}{117} \entry {internationalization}{161} \entry {Internet host address}{419} \entry {Internet namespace, for sockets}{417} \entry {interprocess communication, with FIFO}{406} \entry {interprocess communication, with pipes}{403} -\entry {interprocess communication, with signals}{641} +\entry {interprocess communication, with signals}{649} \entry {interprocess communication, with sockets}{409} \entry {interrupt character}{473} -\entry {interrupt signal}{614} +\entry {interrupt signal}{622} \entry {interrupt-driven input}{358} -\entry {interrupting primitives}{638} -\entry {interval}{551} -\entry {interval timer, setting}{580} +\entry {interrupting primitives}{646} +\entry {interval}{553} +\entry {interval timer, setting}{582} \entry {INTR character}{473} -\entry {invalid exception}{524} +\entry {invalid exception}{526} \entry {inverse complex hyperbolic functions}{502} \entry {inverse complex trigonometric functions}{496} \entry {inverse hyperbolic functions}{502} \entry {inverse trigonometric functions}{496} -\entry {invocation of program}{657} +\entry {invocation of program}{665} \entry {IOCTLs}{358} \entry {ISO 10646}{117} \entry {ISO 2022}{119} @@ -448,50 +448,51 @@ \entry {ISO/IEC 9945-1}{2} \entry {ISO/IEC 9945-2}{2} \initial {J} -\entry {job}{715} -\entry {job control}{715} -\entry {job control functions}{730} -\entry {job control is optional}{716} -\entry {job control signals}{616} -\entry {job control, enabling}{719} +\entry {job}{723} +\entry {job control}{723} +\entry {job control functions}{738} +\entry {job control is optional}{724} +\entry {job control signals}{624} +\entry {job control, enabling}{727} \initial {K} \entry {Kermit the frog}{207} -\entry {kernel call}{696} -\entry {kernel header files}{976} +\entry {kernel call}{704} +\entry {kernel header files}{986} \entry {KILL character}{472} -\entry {kill signal}{615} -\entry {killing a process}{639} +\entry {kill signal}{623} +\entry {killing a process}{647} +\entry {Korn Shell}{214} \initial {L} \entry {LANG environment variable}{181} -\entry {\code {LANG} environment variable}{696} -\entry {launching jobs}{721} +\entry {\code {LANG} environment variable}{704} +\entry {launching jobs}{729} \entry {LC_ALL environment variable}{181} -\entry {\code {LC_ALL} environment variable}{696} -\entry {\code {LC_COLLATE} environment variable}{696} -\entry {\code {LC_CTYPE} environment variable}{696} +\entry {\code {LC_ALL} environment variable}{704} +\entry {\code {LC_COLLATE} environment variable}{704} +\entry {\code {LC_CTYPE} environment variable}{704} \entry {LC_MESSAGES environment variable}{181} -\entry {\code {LC_MESSAGES} environment variable}{696} -\entry {\code {LC_MONETARY} environment variable}{696} -\entry {\code {LC_NUMERIC} environment variable}{696} -\entry {\code {LC_TIME} environment variable}{696} -\entry {leap second}{559} +\entry {\code {LC_MESSAGES} environment variable}{704} +\entry {\code {LC_MONETARY} environment variable}{704} +\entry {\code {LC_NUMERIC} environment variable}{704} +\entry {\code {LC_TIME} environment variable}{704} +\entry {leap second}{561} \entry {length of string}{78} \entry {level, for socket options}{452} \entry {library}{1} -\entry {limit}{587} -\entry {limits on resource usage}{587} -\entry {limits, file name length}{802} -\entry {limits, floating types}{856} -\entry {limits, integer types}{854} -\entry {limits, link count of files}{802} -\entry {limits, number of open files}{789} -\entry {limits, number of processes}{789} -\entry {limits, number of supplementary group IDs}{790} -\entry {limits, pipe buffer size}{803} -\entry {limits, POSIX}{789} -\entry {limits, program argument size}{789} -\entry {limits, terminal input queue}{802} -\entry {limits, time zone name length}{789} +\entry {limit}{589} +\entry {limits on resource usage}{589} +\entry {limits, file name length}{810} +\entry {limits, floating types}{864} +\entry {limits, integer types}{862} +\entry {limits, link count of files}{810} +\entry {limits, number of open files}{797} +\entry {limits, number of processes}{797} +\entry {limits, number of supplementary group IDs}{798} +\entry {limits, pipe buffer size}{811} +\entry {limits, POSIX}{797} +\entry {limits, program argument size}{797} +\entry {limits, terminal input queue}{810} +\entry {limits, time zone name length}{797} \entry {line buffered stream}{298} \entry {line speed}{469} \entry {lines (in a text file)}{293} @@ -504,48 +505,48 @@ \entry {literals}{32} \entry {little-endian}{428} \entry {LNEXT character}{474} -\entry {load average}{603} +\entry {load average}{605} \entry {local namespace, for sockets}{415} \entry {local network address number}{419} -\entry {local time}{555} +\entry {local time}{557} \entry {locale categories}{162} \entry {locale, changing}{163} \entry {locales}{161} \entry {locking pages}{63} \entry {logarithm functions}{497} -\entry {login name}{745} -\entry {login name, determining}{754} -\entry {\code {LOGNAME} environment variable}{695} -\entry {long jumps}{605} -\entry {long-named options}{658} +\entry {login name}{753} +\entry {login name, determining}{762} +\entry {\code {LOGNAME} environment variable}{703} +\entry {long jumps}{607} +\entry {long-named options}{666} \entry {longjmp}{61} \entry {loss of data on sockets}{409} -\entry {lost resource signal}{618} +\entry {lost resource signal}{626} \entry {lower-case character}{67, 72} \initial {M} \entry {macros}{53} -\entry {\code {main} function}{657} +\entry {\code {main} function}{665} \entry {malloc debugger}{46} \entry {\code {malloc} function}{34} -\entry {mantissa (of floating point number)}{856} +\entry {mantissa (of floating point number)}{864} \entry {matching failure, in \code {scanf}}{282} \entry {math errors}{505} \entry {mathematical constants}{493} -\entry {maximum}{540} +\entry {maximum}{542} \entry {maximum field width (\code {scanf})}{283} -\entry {maximum limit}{587} -\entry {maximum possible integer}{520} -\entry {measurements of floating types}{856} +\entry {maximum limit}{589} +\entry {maximum possible integer}{522} +\entry {measurements of floating types}{864} \entry {memory allocation}{31} \entry {memory lock}{63} \entry {memory mapped file}{32} \entry {memory mapped I/O}{32} -\entry {memory page}{601} -\entry {merging of signals}{631} +\entry {memory page}{603} +\entry {merging of signals}{639} \entry {MIN termios slot}{475} -\entry {minimum}{540} +\entry {minimum}{542} \entry {minimum field width (\code {printf})}{260} -\entry {mininum possible integer}{520} +\entry {mininum possible integer}{522} \entry {mixing descriptors and streams}{324} \entry {modem disconnect}{465} \entry {modem status lines}{465} @@ -556,42 +557,42 @@ \entry {multibyte string}{78} \entry {multiple names for one file}{374} \entry {multiplexing input}{330} -\entry {multiply-add}{540} +\entry {multiply-add}{542} \initial {N} \entry {name of running program}{28} \entry {name of socket}{411} -\entry {Name Service Switch}{735} +\entry {Name Service Switch}{743} \entry {name space}{5} -\entry {names of signals}{611} +\entry {names of signals}{619} \entry {namespace (of socket)}{409} -\entry {NaN}{526, 539} -\entry {netgroup}{735} -\entry {Netgroup}{769} +\entry {NaN}{528, 541} +\entry {netgroup}{743} +\entry {Netgroup}{777} \entry {network byte order}{428} \entry {network number}{419} \entry {network protocol}{409} -\entry {networks}{735} +\entry {networks}{743} \entry {networks database}{454} -\entry {NIS}{773} -\entry {NIS domain name}{773, 774} -\entry {nisplus, and booting}{737} -\entry {nisplus, and completeness}{737} +\entry {NIS}{781} +\entry {NIS domain name}{781, 782} +\entry {nisplus, and booting}{745} +\entry {nisplus, and completeness}{745} \entry {NLSPATH environment variable}{180} -\entry {\code {NLSPATH} environment variable}{696} +\entry {\code {NLSPATH} environment variable}{704} \entry {non-blocking open}{351} -\entry {non-local exit, from signal handler}{629} -\entry {non-local exits}{605} +\entry {non-local exit, from signal handler}{637} +\entry {non-local exits}{607} \entry {noncanonical input processing}{458} -\entry {normalization functions (floating-point)}{534} -\entry {normalized floating point number}{857} -\entry {not a number}{526} -\entry {NSS}{735} -\entry {\file {nsswitch.conf}}{736} +\entry {normalization functions (floating-point)}{536} +\entry {normalized floating point number}{865} +\entry {not a number}{528} +\entry {NSS}{743} +\entry {\file {nsswitch.conf}}{744} \entry {null character}{77} -\entry {null pointer constant}{852} +\entry {null pointer constant}{860} \entry {null wide character}{77} -\entry {number of arguments passed}{848} -\entry {number syntax, parsing}{542} +\entry {number of arguments passed}{856} +\entry {number syntax, parsing}{544} \entry {numeric value formatting}{166} \initial {O} \entry {obstack status}{57} @@ -605,101 +606,101 @@ \entry {opening a socket pair}{433} \entry {opening a stream}{240} \entry {Optimization}{518} -\entry {optimizing NSS}{738} -\entry {option parsing with argp}{666} -\entry {optional arguments}{846} -\entry {optional POSIX features}{790} +\entry {optimizing NSS}{746} +\entry {option parsing with argp}{674} +\entry {optional arguments}{854} +\entry {optional POSIX features}{798} \entry {orientation, stream}{241, 248} -\entry {orphaned process group}{717} +\entry {orphaned process group}{725} \entry {out-of-band data}{444} \entry {output conversions, for \code {printf}}{261} -\entry {output possible signal}{616} -\entry {overflow exception}{524} -\entry {owner of a file}{387} +\entry {output possible signal}{624} +\entry {overflow exception}{526} +\entry {owner of a file}{388} \initial {P} \entry {packet}{409} \entry {page boundary}{38} \entry {page fault}{31} \entry {page fault, copy-on-write}{64} \entry {page frame}{31} -\entry {page, memory}{601} +\entry {page, memory}{603} \entry {page, virtual memory}{31} \entry {paging}{31, 63} \entry {parameter promotion}{79} \entry {parent directory}{236} -\entry {parent process}{703, 704} +\entry {parent process}{711, 712} \entry {parity checking}{462} \entry {parsing a template string}{272} -\entry {parsing numbers (in formatted input)}{542} -\entry {parsing program arguments}{659} +\entry {parsing numbers (in formatted input)}{544} +\entry {parsing program arguments}{667} \entry {parsing tokens from a string}{104} -\entry {passwd}{735} -\entry {password database}{763} -\entry {\code {PATH} environment variable}{695} -\entry {\code {pause} function}{649} +\entry {passwd}{743} +\entry {password database}{771} +\entry {\code {PATH} environment variable}{703} +\entry {\code {pause} function}{657} \entry {peeking at input}{256} -\entry {pending signals}{610} -\entry {pending signals, checking for}{647} -\entry {period of time}{551} -\entry {permission to access a file}{390} -\entry {persona}{745} -\entry {physical address}{600} -\entry {physical memory}{600} +\entry {pending signals}{618} +\entry {pending signals, checking for}{655} +\entry {period of time}{553} +\entry {permission to access a file}{391} +\entry {persona}{753} +\entry {physical address}{602} +\entry {physical memory}{602} \entry {pi (trigonometric constant)}{494} \entry {pipe}{403} -\entry {pipe signal}{618} +\entry {pipe signal}{626} \entry {pipe to a subprocess}{405} \entry {port number}{426} \entry {positioning a file descriptor}{320} \entry {positioning a stream}{293} -\entry {positive difference}{540} +\entry {positive difference}{542} \entry {POSIX}{2} -\entry {POSIX capacity limits}{789} -\entry {POSIX optional features}{790} +\entry {POSIX capacity limits}{797} +\entry {POSIX optional features}{798} \entry {POSIX.1}{2} \entry {POSIX.2}{2} \entry {power functions}{497} -\entry {precision (of floating point number)}{856} +\entry {precision (of floating point number)}{864} \entry {precision (\code {printf})}{260} \entry {predicates on arrays}{92} \entry {predicates on characters}{67} \entry {predicates on strings}{92} -\entry {preemptive scheduling}{592} -\entry {primitives, interrupting}{638} +\entry {preemptive scheduling}{594} +\entry {primitives, interrupting}{646} \entry {printing character}{68, 72} -\entry {priority of a process}{591} -\entry {priority, absolute}{592} -\entry {process}{657, 703} -\entry {process completion}{708} -\entry {process group functions}{730} -\entry {process group ID}{721} -\entry {process group leader}{721} -\entry {process groups}{715} -\entry {process ID}{704} -\entry {process image}{704} -\entry {process lifetime}{704} -\entry {process priority}{591} -\entry {process signal mask}{644} -\entry {process termination}{698} -\entry {processor time}{551, 554} -\entry {profiling alarm signal}{616} -\entry {profiling timer}{581} -\entry {program}{657} -\entry {program argument syntax}{658} -\entry {program arguments}{657} -\entry {program arguments, parsing}{659} -\entry {program error signals}{611} +\entry {priority of a process}{593} +\entry {priority, absolute}{594} +\entry {process}{665, 711} +\entry {process completion}{716} +\entry {process group functions}{738} +\entry {process group ID}{729} +\entry {process group leader}{729} +\entry {process groups}{723} +\entry {process ID}{712} +\entry {process image}{712} +\entry {process lifetime}{712} +\entry {process priority}{593} +\entry {process signal mask}{652} +\entry {process termination}{706} +\entry {processor time}{553, 556} +\entry {profiling alarm signal}{624} +\entry {profiling timer}{583} +\entry {program}{665} +\entry {program argument syntax}{666} +\entry {program arguments}{665} +\entry {program arguments, parsing}{667} +\entry {program error signals}{619} \entry {program name}{28} -\entry {program startup}{657} -\entry {program termination}{698} -\entry {program termination signals}{614} +\entry {program startup}{665} +\entry {program termination}{706} +\entry {program termination signals}{622} \entry {programming your own streams}{305} -\entry {project complex numbers}{541} +\entry {project complex numbers}{543} \entry {protocol (of socket)}{409} \entry {protocol family}{409} -\entry {protocols}{735} +\entry {protocols}{743} \entry {protocols database}{429} -\entry {prototypes for variadic functions}{847} +\entry {prototypes for variadic functions}{855} \entry {pseudo-random numbers}{511} \entry {pseudo-terminals}{480} \entry {punctuation character}{68, 72} @@ -707,17 +708,17 @@ \initial {Q} \entry {quick sort function (for arrays)}{204} \entry {QUIT character}{473} -\entry {quit signal}{615} +\entry {quit signal}{623} \entry {quote removal}{227} \initial {R} -\entry {race conditions, relating to job control}{721} -\entry {race conditions, relating to signals}{630} -\entry {radix (of floating point number)}{856} -\entry {raising signals}{638} +\entry {race conditions, relating to job control}{729} +\entry {race conditions, relating to signals}{638} +\entry {radix (of floating point number)}{864} +\entry {raising signals}{646} \entry {random numbers}{511} \entry {random-access files}{234} -\entry {range error}{529} -\entry {range of integer type}{854} +\entry {range error}{531} +\entry {range of integer type}{862} \entry {read lock}{355} \entry {reading from a directory}{363} \entry {reading from a file descriptor}{316} @@ -725,90 +726,90 @@ \entry {reading from a stream, by blocks}{257} \entry {reading from a stream, by characters}{251} \entry {reading from a stream, formatted}{281} -\entry {ready to run}{592} -\entry {real group ID}{745} -\entry {real user ID}{745} -\entry {real-time timer}{580} -\entry {realtime CPU scheduling}{592} +\entry {ready to run}{594} +\entry {real group ID}{753} +\entry {real user ID}{753} +\entry {real-time timer}{582} +\entry {realtime CPU scheduling}{594} \entry {realtime processing}{63} -\entry {realtime scheduling}{593} +\entry {realtime scheduling}{595} \entry {receiving datagrams}{447} \entry {record locking}{355} \entry {redirecting input and output}{346} -\entry {reentrant functions}{634} -\entry {reentrant NSS functions}{739} +\entry {reentrant functions}{642} +\entry {reentrant NSS functions}{747} \entry {relative file name}{236} \entry {removal of quotes}{227} -\entry {removing a file}{376} +\entry {removing a file}{377} \entry {removing macros that shadow functions}{5} -\entry {renaming a file}{377} -\entry {reporting bugs}{976} +\entry {renaming a file}{378} +\entry {reporting bugs}{986} \entry {reporting errors}{15} \entry {REPRINT character}{472} \entry {reserved names}{5} -\entry {resource limits}{587} -\entry {restarting interrupted primitives}{638} -\entry {restrictions on signal handler functions}{633} +\entry {resource limits}{589} +\entry {restarting interrupted primitives}{646} +\entry {restrictions on signal handler functions}{641} \entry {root directory}{236} \entry {Rot13}{109} -\entry {rpc}{735} -\entry {runnable process}{592} -\entry {running a command}{703} +\entry {rpc}{743} +\entry {runnable process}{594} +\entry {running a command}{711} \initial {S} -\entry {saved set-group-ID}{746} -\entry {saved set-user-ID}{746} -\entry {scanning the group list}{767} -\entry {scanning the user list}{764} +\entry {saved set-group-ID}{754} +\entry {saved set-user-ID}{754} +\entry {scanning the group list}{775} +\entry {scanning the user list}{772} \entry {scatter-gather}{325} -\entry {scheduling, traditional}{597} +\entry {scheduling, traditional}{599} \entry {search function (for arrays)}{203} \entry {search functions (for strings)}{99} \entry {seed (for random numbers)}{511} \entry {seeking on a file descriptor}{320} \entry {seeking on a stream}{293} -\entry {segmentation violation}{613} +\entry {segmentation violation}{621} \entry {sending a datagram}{447} -\entry {sending signals}{638} +\entry {sending signals}{646} \entry {sequential-access files}{234} \entry {server}{434} -\entry {services}{735} +\entry {services}{743} \entry {services database}{427} -\entry {session}{715} -\entry {session leader}{715} -\entry {setting an alarm}{580} -\entry {\code {setuid} programs}{746} -\entry {setuid programs and file access}{392} +\entry {session}{723} +\entry {session leader}{723} +\entry {setting an alarm}{582} +\entry {\code {setuid} programs}{754} +\entry {setuid programs and file access}{393} \entry {severity class}{308, 310} \entry {sgettext}{198} -\entry {shadow}{735} +\entry {shadow}{743} \entry {shadowing functions with macros}{5} \entry {shared lock}{355} -\entry {shared memory}{600} -\entry {shell}{715} +\entry {shared memory}{602} +\entry {shell}{723} \entry {shift state}{123} \entry {shrinking objects}{55} \entry {shutting down a socket}{433} -\entry {\code {sigaction} flags}{625} -\entry {\code {sigaction} function}{622} -\entry {\code {SIGCHLD}, handling of}{726} -\entry {sign (of floating point number)}{856} -\entry {signal}{524, 609} -\entry {signal action}{610} -\entry {signal actions}{620} -\entry {signal flags}{625} -\entry {\code {signal} function}{620} -\entry {signal handler function}{626} -\entry {signal mask}{644} -\entry {signal messages}{619} -\entry {signal names}{611} -\entry {signal number}{611} -\entry {signal set}{643} -\entry {signals, generating}{638} -\entry {signedness}{519} -\entry {significand (of floating point number)}{856} -\entry {\code {SIGTTIN}, from background job}{716} -\entry {\code {SIGTTOU}, from background job}{717} -\entry {simple time}{555} +\entry {\code {sigaction} flags}{633} +\entry {\code {sigaction} function}{630} +\entry {\code {SIGCHLD}, handling of}{734} +\entry {sign (of floating point number)}{864} +\entry {signal}{526, 617} +\entry {signal action}{618} +\entry {signal actions}{628} +\entry {signal flags}{633} +\entry {\code {signal} function}{628} +\entry {signal handler function}{634} +\entry {signal mask}{652} +\entry {signal messages}{627} +\entry {signal names}{619} +\entry {signal number}{619} +\entry {signal set}{651} +\entry {signals, generating}{646} +\entry {signedness}{521} +\entry {significand (of floating point number)}{864} +\entry {\code {SIGTTIN}, from background job}{724} +\entry {\code {SIGTTOU}, from background job}{725} +\entry {simple time}{557} \entry {single-byte string}{78} \entry {size of string}{78} \entry {SJIS}{120} @@ -829,18 +830,18 @@ \entry {sockets, accepting connections}{436} \entry {sockets, listening}{436} \entry {sockets, server actions}{436} -\entry {soft limit}{587} +\entry {soft limit}{589} \entry {soft link}{375} \entry {sort function (for arrays)}{204} \entry {sparse files}{321} -\entry {special files}{397} +\entry {special files}{398} \entry {special functions}{503} -\entry {specified action (for a signal)}{610} +\entry {specified action (for a signal)}{618} \entry {speed of execution}{63} \entry {square root function}{499} \entry {stable sorting}{204} \entry {standard dot notation, for Internet addresses}{419} -\entry {standard environment variables}{695} +\entry {standard environment variables}{703} \entry {standard error file descriptor}{323} \entry {standard error stream}{240} \entry {standard file descriptors}{323} @@ -851,20 +852,20 @@ \entry {standard streams}{239} \entry {standards}{1} \entry {START character}{474} -\entry {startup of program}{657} +\entry {startup of program}{665} \entry {stateful}{122, 125, 131, 141, 144, 156} \entry {static memory allocation}{33} \entry {static storage class}{33} \entry {STATUS character}{475} \entry {status codes}{15} -\entry {status of a file}{379} +\entry {status of a file}{380} \entry {status of obstack}{57} -\entry {sticky bit}{389} +\entry {sticky bit}{390} \entry {STOP character}{474} -\entry {stop signal}{617} -\entry {stopped job}{716} -\entry {stopped jobs, continuing}{728} -\entry {stopped jobs, detecting}{725} +\entry {stop signal}{625} +\entry {stopped job}{724} +\entry {stopped jobs, continuing}{736} +\entry {stopped jobs, detecting}{733} \entry {storage allocation}{31} \entry {stream (sockets)}{409} \entry {stream orientation}{241, 248} @@ -886,12 +887,12 @@ \entry {string vectors, null-character separated}{111} \entry {string, representation of}{77} \entry {style of communication (of a socket)}{409} -\entry {subshell}{719} -\entry {substitution of variables and commands}{226} -\entry {successive signals}{631} -\entry {summer time}{559} +\entry {subshell}{727} +\entry {substitution of variables and commands}{227} +\entry {successive signals}{639} +\entry {summer time}{561} \entry {SunOS}{3} -\entry {supplementary group IDs}{745} +\entry {supplementary group IDs}{753} \entry {SUSP character}{473} \entry {suspend character}{473} \entry {SVID}{3} @@ -899,23 +900,23 @@ \entry {symbolic link}{375} \entry {symbolic link, opening}{352} \entry {synchronizing}{333, 342} -\entry {syntax error messages, in argp}{674} -\entry {syntax, for program arguments}{658} -\entry {syntax, for reading numbers}{542} -\entry {sysconf}{601, 602} -\entry {system call}{696} -\entry {system call number}{697} +\entry {syntax error messages, in argp}{682} +\entry {syntax, for program arguments}{666} +\entry {syntax, for reading numbers}{544} +\entry {sysconf}{603, 604} +\entry {system call}{704} +\entry {system call number}{705} \entry {System V Unix}{3} \initial {T} \entry {TCP (Internet protocol)}{429} \entry {template, for \code {printf}}{258} \entry {template, for \code {scanf}}{281} -\entry {\code {TERM} environment variable}{695} +\entry {\code {TERM} environment variable}{703} \entry {terminal flow control}{478} \entry {terminal identification}{457} \entry {terminal input queue}{458} \entry {terminal input queue, clearing}{478} -\entry {terminal input signal}{617} +\entry {terminal input signal}{625} \entry {terminal line control functions}{477} \entry {terminal line speed}{469} \entry {terminal mode data types}{459} @@ -923,98 +924,98 @@ \entry {terminal modes, BSD}{476} \entry {terminal output queue}{458} \entry {terminal output queue, flushing}{477} -\entry {terminal output signal}{618} -\entry {terminated jobs, detecting}{725} -\entry {termination signal}{614} -\entry {testing access permission}{392} -\entry {testing exit status of child process}{708} +\entry {terminal output signal}{626} +\entry {terminated jobs, detecting}{733} +\entry {termination signal}{622} +\entry {testing access permission}{393} +\entry {testing exit status of child process}{716} \entry {text stream}{292} -\entry {thrashing}{601} -\entry {thread of control}{657} +\entry {thrashing}{603} +\entry {thread of control}{665} \entry {threads}{244} -\entry {ticks, clock}{553} -\entry {tilde expansion}{226} -\entry {time}{551} +\entry {ticks, clock}{555} +\entry {tilde expansion}{227} +\entry {time}{553} \entry {TIME termios slot}{475} -\entry {time zone}{577} -\entry {time zone database}{578} -\entry {time, elapsed}{551} -\entry {time, high precision}{561} -\entry {timer, profiling}{581} -\entry {timer, real-time}{580} -\entry {timer, virtual}{580} -\entry {timers, setting}{580} -\entry {timespec}{552} -\entry {timeval}{552} -\entry {timing error in signal handling}{649} -\entry {TMPDIR environment variable}{400} +\entry {time zone}{579} +\entry {time zone database}{580} +\entry {time, elapsed}{553} +\entry {time, high precision}{563} +\entry {timer, profiling}{583} +\entry {timer, real-time}{582} +\entry {timer, virtual}{582} +\entry {timers, setting}{582} +\entry {timespec}{554} +\entry {timeval}{554} +\entry {timing error in signal handling}{657} +\entry {TMPDIR environment variable}{401} \entry {tokenizing strings}{104} -\entry {tools, for installing library}{973} +\entry {tools, for installing library}{983} \entry {transmitting datagrams}{447} \entry {tree, directory}{370} \entry {triangulation}{147} \entry {trigonometric functions}{494} -\entry {type measurements, floating}{856} -\entry {type measurements, integer}{854} +\entry {type measurements, floating}{864} +\entry {type measurements, integer}{862} \entry {type modifier character (\code {printf})}{261} \entry {type modifier character (\code {scanf})}{283} \entry {typeahead buffer}{458} -\entry {\code {TZ} environment variable}{696} +\entry {\code {TZ} environment variable}{704} \initial {U} \entry {UCS-2}{117} \entry {UCS-4}{117} \entry {ulps}{505} -\entry {umask}{390} +\entry {umask}{391} \entry {unbuffered stream}{298} \entry {unconstrained memory allocation}{34} \entry {undefining macros that shadow functions}{5} -\entry {underflow exception}{524} +\entry {underflow exception}{526} \entry {Unicode}{117} \entry {Unix, Berkeley}{3} \entry {Unix, System V}{3} -\entry {unlinking a file}{376} -\entry {unordered comparison}{539} +\entry {unlinking a file}{377} +\entry {unordered comparison}{541} \entry {unreading characters}{256} -\entry {upgrading from libc5}{976} +\entry {upgrading from libc5}{986} \entry {upper-case character}{67, 73} -\entry {urgent data signal}{616} +\entry {urgent data signal}{624} \entry {urgent socket condition}{444} -\entry {usage limits}{587} -\entry {usage messages, in argp}{674} -\entry {user accounting database}{755} -\entry {user database}{763} -\entry {user ID}{745} -\entry {user ID, determining}{754} -\entry {user name}{745} -\entry {user signals}{619} +\entry {usage limits}{589} +\entry {usage messages, in argp}{682} +\entry {user accounting database}{763} +\entry {user database}{771} +\entry {user ID}{753} +\entry {user ID, determining}{762} +\entry {user name}{753} +\entry {user signals}{627} \entry {usual file name errors}{236} \entry {UTF-16}{117} \entry {UTF-7}{120} \entry {UTF-8}{117, 120} \initial {V} \entry {va_copy}{88} -\entry {variable number of arguments}{846} -\entry {variable substitution}{226} +\entry {variable number of arguments}{854} +\entry {variable substitution}{227} \entry {variable-sized arrays}{62} -\entry {variadic function argument access}{848} -\entry {variadic function prototypes}{847} -\entry {variadic functions}{846} -\entry {variadic functions, calling}{849} -\entry {virtual time alarm signal}{616} -\entry {virtual timer}{580} -\entry {\code {volatile} declarations}{634} +\entry {variadic function argument access}{856} +\entry {variadic function prototypes}{855} +\entry {variadic functions}{854} +\entry {variadic functions, calling}{857} +\entry {virtual time alarm signal}{624} +\entry {virtual timer}{582} +\entry {\code {volatile} declarations}{642} \initial {W} -\entry {waiting for a signal}{649} -\entry {waiting for completion of child process}{708} +\entry {waiting for a signal}{657} +\entry {waiting for completion of child process}{716} \entry {waiting for input or output}{330} \entry {WERASE character}{472} \entry {whitespace character}{68, 72} \entry {wide character}{117} \entry {wide character string}{77, 78} -\entry {width of integer type}{854} +\entry {width of integer type}{862} \entry {wildcard expansion}{227} \entry {wint_t}{79} -\entry {word expansion}{226} +\entry {word expansion}{227} \entry {working directory}{361} \entry {write lock}{355} \entry {writing to a file descriptor}{318} @@ -1023,7 +1024,7 @@ \entry {writing to a stream, by characters}{249} \entry {writing to a stream, formatted}{258} \initial {Y} -\entry {YP}{773} -\entry {YP domain name}{773, 774} +\entry {YP}{781} +\entry {YP domain name}{781, 782} \initial {Z} -\entry {zero divide}{524} +\entry {zero divide}{526} diff -durpNa glibc-2.2.2/manual/libc.fn glibc-2.2.3/manual/libc.fn --- glibc-2.2.2/manual/libc.fn Thu Feb 15 16:50:22 2001 +++ glibc-2.2.3/manual/libc.fn Wed Apr 25 16:06:31 2001 @@ -232,16 +232,16 @@ \entry{tdestroy}{211}{\code {tdestroy}} \entry{twalk}{212}{\code {twalk}} \entry{fnmatch}{213}{\code {fnmatch}} -\entry{glob}{216}{\code {glob}} -\entry{glob64}{217}{\code {glob64}} -\entry{globfree}{220}{\code {globfree}} +\entry{glob}{217}{\code {glob}} +\entry{glob64}{218}{\code {glob64}} +\entry{globfree}{221}{\code {globfree}} \entry{globfree64}{221}{\code {globfree64}} -\entry{regcomp}{221}{\code {regcomp}} -\entry{regexec}{223}{\code {regexec}} -\entry{regfree}{225}{\code {regfree}} +\entry{regcomp}{222}{\code {regcomp}} +\entry{regexec}{224}{\code {regexec}} +\entry{regfree}{226}{\code {regfree}} \entry{regerror}{226}{\code {regerror}} -\entry{wordexp}{227}{\code {wordexp}} -\entry{wordfree}{228}{\code {wordfree}} +\entry{wordexp}{228}{\code {wordexp}} +\entry{wordfree}{229}{\code {wordfree}} \entry{fopen}{240}{\code {fopen}} \entry{fopen64}{241}{\code {fopen64}} \entry{freopen}{242}{\code {freopen}} @@ -266,7 +266,7 @@ \entry{putc{\_}unlocked}{250}{\code {putc_unlocked}} \entry{putwc{\_}unlocked}{250}{\code {putwc_unlocked}} \entry{putchar}{250}{\code {putchar}} -\entry{putchar}{250}{\code {putchar}} +\entry{putwchar}{250}{\code {putwchar}} \entry{putchar{\_}unlocked}{250}{\code {putchar_unlocked}} \entry{putwchar{\_}unlocked}{250}{\code {putwchar_unlocked}} \entry{fputs}{250}{\code {fputs}} @@ -450,52 +450,54 @@ \entry{nftw}{373}{\code {nftw}} \entry{nftw64}{374}{\code {nftw64}} \entry{link}{374}{\code {link}} -\entry{symlink}{375}{\code {symlink}} +\entry{symlink}{376}{\code {symlink}} \entry{readlink}{376}{\code {readlink}} -\entry{unlink}{376}{\code {unlink}} -\entry{rmdir}{377}{\code {rmdir}} -\entry{remove}{377}{\code {remove}} -\entry{rename}{377}{\code {rename}} -\entry{mkdir}{379}{\code {mkdir}} -\entry{stat}{383}{\code {stat}} -\entry{stat64}{384}{\code {stat64}} -\entry{fstat}{384}{\code {fstat}} -\entry{fstat64}{384}{\code {fstat64}} -\entry{lstat}{384}{\code {lstat}} -\entry{lstat64}{384}{\code {lstat64}} -\entry{S{\_}ISDIR}{385}{\code {S_ISDIR}} -\entry{S{\_}ISCHR}{385}{\code {S_ISCHR}} -\entry{S{\_}ISBLK}{385}{\code {S_ISBLK}} -\entry{S{\_}ISREG}{385}{\code {S_ISREG}} -\entry{S{\_}ISFIFO}{385}{\code {S_ISFIFO}} -\entry{S{\_}ISLNK}{385}{\code {S_ISLNK}} -\entry{S{\_}ISSOCK}{385}{\code {S_ISSOCK}} -\entry{S{\_}TYPEISMQ}{386}{\code {S_TYPEISMQ}} -\entry{S{\_}TYPEISSEM}{386}{\code {S_TYPEISSEM}} -\entry{S{\_}TYPEISSHM}{386}{\code {S_TYPEISSHM}} -\entry{chown}{387}{\code {chown}} -\entry{fchown}{387}{\code {fchown}} -\entry{chmod}{390}{\code {chmod}} -\entry{umask}{390}{\code {umask}} -\entry{getumask}{391}{\code {getumask}} +\entry{canonicalize{\_}file{\_}name}{377}{\code {canonicalize_file_name}} +\entry{realpath}{377}{\code {realpath}} +\entry{unlink}{377}{\code {unlink}} +\entry{rmdir}{378}{\code {rmdir}} +\entry{remove}{378}{\code {remove}} +\entry{rename}{378}{\code {rename}} +\entry{mkdir}{380}{\code {mkdir}} +\entry{stat}{384}{\code {stat}} +\entry{stat64}{385}{\code {stat64}} +\entry{fstat}{385}{\code {fstat}} +\entry{fstat64}{385}{\code {fstat64}} +\entry{lstat}{385}{\code {lstat}} +\entry{lstat64}{385}{\code {lstat64}} +\entry{S{\_}ISDIR}{386}{\code {S_ISDIR}} +\entry{S{\_}ISCHR}{386}{\code {S_ISCHR}} +\entry{S{\_}ISBLK}{386}{\code {S_ISBLK}} +\entry{S{\_}ISREG}{386}{\code {S_ISREG}} +\entry{S{\_}ISFIFO}{386}{\code {S_ISFIFO}} +\entry{S{\_}ISLNK}{386}{\code {S_ISLNK}} +\entry{S{\_}ISSOCK}{386}{\code {S_ISSOCK}} +\entry{S{\_}TYPEISMQ}{387}{\code {S_TYPEISMQ}} +\entry{S{\_}TYPEISSEM}{387}{\code {S_TYPEISSEM}} +\entry{S{\_}TYPEISSHM}{387}{\code {S_TYPEISSHM}} +\entry{chown}{388}{\code {chown}} +\entry{fchown}{388}{\code {fchown}} \entry{chmod}{391}{\code {chmod}} -\entry{fchmod}{391}{\code {fchmod}} -\entry{access}{392}{\code {access}} -\entry{utime}{394}{\code {utime}} -\entry{utimes}{394}{\code {utimes}} -\entry{truncate}{395}{\code {truncate}} -\entry{truncate64}{395}{\code {truncate64}} -\entry{ftruncate}{396}{\code {ftruncate}} -\entry{ftruncate64}{396}{\code {ftruncate64}} -\entry{mknod}{397}{\code {mknod}} -\entry{tmpfile}{398}{\code {tmpfile}} -\entry{tmpfile64}{398}{\code {tmpfile64}} -\entry{tmpnam}{398}{\code {tmpnam}} -\entry{tmpnam{\_}r}{399}{\code {tmpnam_r}} -\entry{tempnam}{399}{\code {tempnam}} -\entry{mktemp}{400}{\code {mktemp}} -\entry{mkstemp}{400}{\code {mkstemp}} -\entry{mkdtemp}{400}{\code {mkdtemp}} +\entry{umask}{391}{\code {umask}} +\entry{getumask}{392}{\code {getumask}} +\entry{chmod}{392}{\code {chmod}} +\entry{fchmod}{392}{\code {fchmod}} +\entry{access}{393}{\code {access}} +\entry{utime}{395}{\code {utime}} +\entry{utimes}{395}{\code {utimes}} +\entry{truncate}{396}{\code {truncate}} +\entry{truncate64}{396}{\code {truncate64}} +\entry{ftruncate}{397}{\code {ftruncate}} +\entry{ftruncate64}{397}{\code {ftruncate64}} +\entry{mknod}{398}{\code {mknod}} +\entry{tmpfile}{399}{\code {tmpfile}} +\entry{tmpfile64}{399}{\code {tmpfile64}} +\entry{tmpnam}{399}{\code {tmpnam}} +\entry{tmpnam{\_}r}{400}{\code {tmpnam_r}} +\entry{tempnam}{400}{\code {tempnam}} +\entry{mktemp}{401}{\code {mktemp}} +\entry{mkstemp}{401}{\code {mkstemp}} +\entry{mkdtemp}{401}{\code {mkdtemp}} \entry{pipe}{403}{\code {pipe}} \entry{popen}{405}{\code {popen}} \entry{pclose}{405}{\code {pclose}} @@ -767,548 +769,556 @@ \entry{srandom}{513}{\code {srandom}} \entry{initstate}{513}{\code {initstate}} \entry{setstate}{513}{\code {setstate}} -\entry{drand48}{513}{\code {drand48}} -\entry{erand48}{514}{\code {erand48}} -\entry{lrand48}{514}{\code {lrand48}} -\entry{nrand48}{514}{\code {nrand48}} -\entry{mrand48}{514}{\code {mrand48}} -\entry{jrand48}{514}{\code {jrand48}} -\entry{srand48}{514}{\code {srand48}} -\entry{seed48}{515}{\code {seed48}} -\entry{lcong48}{515}{\code {lcong48}} -\entry{drand48{\_}r}{515}{\code {drand48_r}} -\entry{erand48{\_}r}{516}{\code {erand48_r}} -\entry{lrand48{\_}r}{516}{\code {lrand48_r}} -\entry{nrand48{\_}r}{516}{\code {nrand48_r}} -\entry{mrand48{\_}r}{516}{\code {mrand48_r}} -\entry{jrand48{\_}r}{516}{\code {jrand48_r}} -\entry{srand48{\_}r}{517}{\code {srand48_r}} -\entry{seed48{\_}r}{517}{\code {seed48_r}} -\entry{lcong48{\_}r}{517}{\code {lcong48_r}} -\entry{div}{521}{\code {div}} -\entry{ldiv}{521}{\code {ldiv}} -\entry{lldiv}{521}{\code {lldiv}} -\entry{imaxdiv}{522}{\code {imaxdiv}} -\entry{fpclassify}{522}{\code {fpclassify}} -\entry{isfinite}{523}{\code {isfinite}} -\entry{isnormal}{523}{\code {isnormal}} -\entry{isnan}{523}{\code {isnan}} -\entry{isinf}{523}{\code {isinf}} -\entry{isinff}{523}{\code {isinff}} -\entry{isinfl}{523}{\code {isinfl}} -\entry{isnan}{524}{\code {isnan}} -\entry{isnanf}{524}{\code {isnanf}} -\entry{isnanl}{524}{\code {isnanl}} -\entry{finite}{524}{\code {finite}} -\entry{finitef}{524}{\code {finitef}} -\entry{finitel}{524}{\code {finitel}} -\entry{infnan}{524}{\code {infnan}} -\entry{matherr}{524}{\code {matherr}} -\entry{feclearexcept}{527}{\code {feclearexcept}} -\entry{feraiseexcept}{528}{\code {feraiseexcept}} -\entry{fetestexcept}{528}{\code {fetestexcept}} -\entry{fegetexceptflag}{528}{\code {fegetexceptflag}} -\entry{fesetexceptflag}{528}{\code {fesetexceptflag}} -\entry{fegetround}{530}{\code {fegetround}} -\entry{fesetround}{531}{\code {fesetround}} -\entry{fegetenv}{531}{\code {fegetenv}} -\entry{feholdexcept}{531}{\code {feholdexcept}} -\entry{fesetenv}{532}{\code {fesetenv}} -\entry{feupdateenv}{532}{\code {feupdateenv}} -\entry{feenableexcept}{532}{\code {feenableexcept}} -\entry{fedisableexcept}{532}{\code {fedisableexcept}} -\entry{fegetexcept}{532}{\code {fegetexcept}} -\entry{abs}{533}{\code {abs}} -\entry{labs}{533}{\code {labs}} -\entry{llabs}{533}{\code {llabs}} -\entry{imaxabs}{533}{\code {imaxabs}} -\entry{fabs}{533}{\code {fabs}} -\entry{fabsf}{533}{\code {fabsf}} -\entry{fabsl}{533}{\code {fabsl}} -\entry{cabs}{533}{\code {cabs}} -\entry{cabsf}{533}{\code {cabsf}} -\entry{cabsl}{533}{\code {cabsl}} -\entry{frexp}{534}{\code {frexp}} -\entry{frexpf}{534}{\code {frexpf}} -\entry{frexpl}{534}{\code {frexpl}} -\entry{ldexp}{534}{\code {ldexp}} -\entry{ldexpf}{534}{\code {ldexpf}} -\entry{ldexpl}{534}{\code {ldexpl}} -\entry{logb}{534}{\code {logb}} -\entry{logbf}{534}{\code {logbf}} -\entry{logbl}{534}{\code {logbl}} -\entry{scalb}{535}{\code {scalb}} -\entry{scalbf}{535}{\code {scalbf}} -\entry{scalbl}{535}{\code {scalbl}} -\entry{scalbn}{535}{\code {scalbn}} -\entry{scalbnf}{535}{\code {scalbnf}} -\entry{scalbnl}{535}{\code {scalbnl}} -\entry{scalbln}{535}{\code {scalbln}} -\entry{scalblnf}{535}{\code {scalblnf}} -\entry{scalblnl}{535}{\code {scalblnl}} -\entry{significand}{535}{\code {significand}} -\entry{significandf}{535}{\code {significandf}} -\entry{significandl}{535}{\code {significandl}} -\entry{ceil}{535}{\code {ceil}} -\entry{ceilf}{535}{\code {ceilf}} -\entry{ceill}{535}{\code {ceill}} -\entry{floor}{535}{\code {floor}} -\entry{floorf}{535}{\code {floorf}} -\entry{floorl}{535}{\code {floorl}} -\entry{trunc}{536}{\code {trunc}} -\entry{truncf}{536}{\code {truncf}} -\entry{truncl}{536}{\code {truncl}} -\entry{rint}{536}{\code {rint}} -\entry{rintf}{536}{\code {rintf}} -\entry{rintl}{536}{\code {rintl}} -\entry{nearbyint}{536}{\code {nearbyint}} -\entry{nearbyintf}{536}{\code {nearbyintf}} -\entry{nearbyintl}{536}{\code {nearbyintl}} -\entry{round}{536}{\code {round}} -\entry{roundf}{536}{\code {roundf}} -\entry{roundl}{536}{\code {roundl}} -\entry{lrint}{536}{\code {lrint}} -\entry{lrintf}{536}{\code {lrintf}} -\entry{lrintl}{536}{\code {lrintl}} -\entry{llrint}{536}{\code {llrint}} -\entry{llrintf}{536}{\code {llrintf}} -\entry{llrintl}{536}{\code {llrintl}} -\entry{lround}{536}{\code {lround}} -\entry{lroundf}{536}{\code {lroundf}} -\entry{lroundl}{536}{\code {lroundl}} -\entry{llround}{537}{\code {llround}} -\entry{llroundf}{537}{\code {llroundf}} -\entry{llroundl}{537}{\code {llroundl}} -\entry{modf}{537}{\code {modf}} -\entry{modff}{537}{\code {modff}} -\entry{modfl}{537}{\code {modfl}} -\entry{fmod}{537}{\code {fmod}} -\entry{fmodf}{537}{\code {fmodf}} -\entry{fmodl}{537}{\code {fmodl}} -\entry{drem}{537}{\code {drem}} -\entry{dremf}{537}{\code {dremf}} -\entry{dreml}{537}{\code {dreml}} -\entry{remainder}{538}{\code {remainder}} -\entry{remainderf}{538}{\code {remainderf}} -\entry{remainderl}{538}{\code {remainderl}} -\entry{copysign}{538}{\code {copysign}} -\entry{copysignf}{538}{\code {copysignf}} -\entry{copysignl}{538}{\code {copysignl}} -\entry{signbit}{538}{\code {signbit}} -\entry{nextafter}{538}{\code {nextafter}} -\entry{nextafterf}{538}{\code {nextafterf}} -\entry{nextafterl}{538}{\code {nextafterl}} -\entry{nexttoward}{538}{\code {nexttoward}} -\entry{nexttowardf}{538}{\code {nexttowardf}} -\entry{nexttowardl}{538}{\code {nexttowardl}} -\entry{nan}{539}{\code {nan}} -\entry{nanf}{539}{\code {nanf}} -\entry{nanl}{539}{\code {nanl}} -\entry{isgreater}{539}{\code {isgreater}} -\entry{isgreaterequal}{539}{\code {isgreaterequal}} -\entry{isless}{539}{\code {isless}} -\entry{islessequal}{539}{\code {islessequal}} -\entry{islessgreater}{539}{\code {islessgreater}} -\entry{isunordered}{540}{\code {isunordered}} -\entry{fmin}{540}{\code {fmin}} -\entry{fminf}{540}{\code {fminf}} -\entry{fminl}{540}{\code {fminl}} -\entry{fmax}{540}{\code {fmax}} -\entry{fmaxf}{540}{\code {fmaxf}} -\entry{fmaxl}{540}{\code {fmaxl}} -\entry{fdim}{540}{\code {fdim}} -\entry{fdimf}{540}{\code {fdimf}} -\entry{fdiml}{540}{\code {fdiml}} -\entry{fma}{540}{\code {fma}} -\entry{fmaf}{540}{\code {fmaf}} -\entry{fmal}{540}{\code {fmal}} -\entry{creal}{542}{\code {creal}} -\entry{crealf}{542}{\code {crealf}} -\entry{creall}{542}{\code {creall}} -\entry{cimag}{542}{\code {cimag}} -\entry{cimagf}{542}{\code {cimagf}} -\entry{cimagl}{542}{\code {cimagl}} -\entry{conj}{542}{\code {conj}} -\entry{conjf}{542}{\code {conjf}} -\entry{conjl}{542}{\code {conjl}} -\entry{carg}{542}{\code {carg}} -\entry{cargf}{542}{\code {cargf}} -\entry{cargl}{542}{\code {cargl}} -\entry{cproj}{542}{\code {cproj}} -\entry{cprojf}{542}{\code {cprojf}} -\entry{cprojl}{542}{\code {cprojl}} -\entry{strtol}{543}{\code {strtol}} -\entry{wcstol}{543}{\code {wcstol}} -\entry{strtoul}{543}{\code {strtoul}} -\entry{wcstoul}{544}{\code {wcstoul}} -\entry{strtoll}{544}{\code {strtoll}} -\entry{wcstoll}{544}{\code {wcstoll}} -\entry{strtoq}{544}{\code {strtoq}} -\entry{wcstoq}{544}{\code {wcstoq}} -\entry{strtoull}{544}{\code {strtoull}} -\entry{wcstoull}{545}{\code {wcstoull}} -\entry{strtouq}{545}{\code {strtouq}} -\entry{wcstouq}{545}{\code {wcstouq}} -\entry{strtoimax}{545}{\code {strtoimax}} -\entry{wcstoimax}{545}{\code {wcstoimax}} -\entry{strtoumax}{545}{\code {strtoumax}} -\entry{wcstoumax}{545}{\code {wcstoumax}} -\entry{atol}{546}{\code {atol}} -\entry{atoi}{546}{\code {atoi}} -\entry{atoll}{546}{\code {atoll}} -\entry{strtod}{547}{\code {strtod}} -\entry{strtof}{548}{\code {strtof}} -\entry{strtold}{548}{\code {strtold}} -\entry{wcstod}{548}{\code {wcstod}} -\entry{wcstof}{548}{\code {wcstof}} -\entry{wcstold}{548}{\code {wcstold}} -\entry{atof}{548}{\code {atof}} -\entry{ecvt}{549}{\code {ecvt}} -\entry{fcvt}{549}{\code {fcvt}} -\entry{gcvt}{549}{\code {gcvt}} -\entry{qecvt}{549}{\code {qecvt}} -\entry{qfcvt}{549}{\code {qfcvt}} -\entry{qgcvt}{549}{\code {qgcvt}} -\entry{ecvt{\_}r}{550}{\code {ecvt_r}} -\entry{fcvt{\_}r}{550}{\code {fcvt_r}} -\entry{qecvt{\_}r}{550}{\code {qecvt_r}} -\entry{qfcvt{\_}r}{550}{\code {qfcvt_r}} -\entry{difftime}{551}{\code {difftime}} -\entry{clock}{554}{\code {clock}} -\entry{times}{555}{\code {times}} -\entry{time}{556}{\code {time}} -\entry{stime}{556}{\code {stime}} -\entry{gettimeofday}{557}{\code {gettimeofday}} -\entry{settimeofday}{557}{\code {settimeofday}} -\entry{adjtime}{558}{\code {adjtime}} -\entry{adjtimex}{558}{\code {adjtimex}} -\entry{localtime}{560}{\code {localtime}} -\entry{localtime{\_}r}{560}{\code {localtime_r}} -\entry{gmtime}{560}{\code {gmtime}} -\entry{gmtime{\_}r}{560}{\code {gmtime_r}} -\entry{mktime}{560}{\code {mktime}} -\entry{timelocal}{561}{\code {timelocal}} -\entry{timegm}{561}{\code {timegm}} -\entry{ntp{\_}gettime}{562}{\code {ntp_gettime}} -\entry{ntp{\_}adjtime}{564}{\code {ntp_adjtime}} -\entry{asctime}{564}{\code {asctime}} -\entry{asctime{\_}r}{564}{\code {asctime_r}} -\entry{ctime}{565}{\code {ctime}} -\entry{ctime{\_}r}{565}{\code {ctime_r}} -\entry{strftime}{565}{\code {strftime}} -\entry{wcsftime}{569}{\code {wcsftime}} -\entry{strptime}{570}{\code {strptime}} -\entry{getdate}{575}{\code {getdate}} -\entry{getdate{\_}r}{576}{\code {getdate_r}} -\entry{tzset}{579}{\code {tzset}} -\entry{setitimer}{581}{\code {setitimer}} -\entry{getitimer}{581}{\code {getitimer}} -\entry{alarm}{582}{\code {alarm}} -\entry{sleep}{583}{\code {sleep}} -\entry{nanosleep}{583}{\code {nanosleep}} -\entry{getrusage}{585}{\code {getrusage}} -\entry{vtimes}{586}{\code {vtimes}} -\entry{getrlimit}{588}{\code {getrlimit}} -\entry{getrlimit64}{588}{\code {getrlimit64}} -\entry{setrlimit}{588}{\code {setrlimit}} -\entry{setrlimit64}{588}{\code {setrlimit64}} -\entry{ulimit}{590}{\code {ulimit}} -\entry{vlimit}{591}{\code {vlimit}} -\entry{sched{\_}setscheduler}{595}{\code {sched_setscheduler}} -\entry{sched{\_}getscheduler}{595}{\code {sched_getscheduler}} -\entry{sched{\_}setparam}{596}{\code {sched_setparam}} -\entry{sched{\_}getparam}{596}{\code {sched_getparam}} -\entry{sched{\_}get{\_}priority{\_}min}{596}{\code {sched_get_priority_min}} -\entry{sched{\_}get{\_}priority{\_}max}{596}{\code {sched_get_priority_max}} -\entry{sched{\_}rr{\_}get{\_}interval}{596}{\code {sched_rr_get_interval}} -\entry{sched{\_}yield}{597}{\code {sched_yield}} -\entry{getpriority}{599}{\code {getpriority}} -\entry{setpriority}{599}{\code {setpriority}} -\entry{nice}{600}{\code {nice}} -\entry{getpagesize}{601}{\code {getpagesize}} -\entry{int}{602}{\code {int}} -\entry{int}{602}{\code {int}} -\entry{get{\_}nprocs{\_}conf}{602}{\code {get_nprocs_conf}} -\entry{get{\_}nprocs}{602}{\code {get_nprocs}} -\entry{getloadavg}{603}{\code {getloadavg}} -\entry{setjmp}{606}{\code {setjmp}} -\entry{longjmp}{607}{\code {longjmp}} -\entry{sigsetjmp}{608}{\code {sigsetjmp}} -\entry{siglongjmp}{608}{\code {siglongjmp}} -\entry{strsignal}{619}{\code {strsignal}} -\entry{psignal}{620}{\code {psignal}} -\entry{signal}{620}{\code {signal}} -\entry{sysv{\_}signal}{622}{\code {sysv_signal}} -\entry{ssignal}{622}{\code {ssignal}} -\entry{sigaction}{623}{\code {sigaction}} -\entry{TEMP{\_}FAILURE{\_}RETRY}{637}{\code {TEMP_FAILURE_RETRY}} -\entry{raise}{638}{\code {raise}} -\entry{gsignal}{638}{\code {gsignal}} -\entry{kill}{639}{\code {kill}} -\entry{killpg}{640}{\code {killpg}} -\entry{sigemptyset}{644}{\code {sigemptyset}} -\entry{sigfillset}{644}{\code {sigfillset}} -\entry{sigaddset}{644}{\code {sigaddset}} -\entry{sigdelset}{644}{\code {sigdelset}} -\entry{sigismember}{644}{\code {sigismember}} -\entry{sigprocmask}{644}{\code {sigprocmask}} -\entry{sigpending}{647}{\code {sigpending}} -\entry{pause}{649}{\code {pause}} -\entry{sigsuspend}{651}{\code {sigsuspend}} -\entry{sigaltstack}{653}{\code {sigaltstack}} -\entry{sigstack}{653}{\code {sigstack}} -\entry{sigvec}{655}{\code {sigvec}} -\entry{siginterrupt}{655}{\code {siginterrupt}} -\entry{sigmask}{655}{\code {sigmask}} -\entry{sigblock}{655}{\code {sigblock}} -\entry{sigsetmask}{655}{\code {sigsetmask}} -\entry{sigpause}{655}{\code {sigpause}} -\entry{main}{657}{\code {main}} -\entry{getopt}{659}{\code {getopt}} -\entry{getopt{\_}long}{663}{\code {getopt_long}} -\entry{getopt{\_}long{\_}only}{664}{\code {getopt_long_only}} -\entry{argp{\_}parse}{666}{\code {argp_parse}} -\entry{argp{\_}usage}{674}{\code {argp_usage}} -\entry{argp{\_}error}{674}{\code {argp_error}} -\entry{argp{\_}failure}{674}{\code {argp_failure}} -\entry{argp{\_}state{\_}help}{675}{\code {argp_state_help}} -\entry{argp{\_}help}{679}{\code {argp_help}} -\entry{getsubopt}{690}{\code {getsubopt}} -\entry{getenv}{693}{\code {getenv}} -\entry{putenv}{693}{\code {putenv}} -\entry{setenv}{694}{\code {setenv}} -\entry{unsetenv}{694}{\code {unsetenv}} -\entry{clearenv}{694}{\code {clearenv}} -\entry{int}{697}{\code {int}} -\entry{exit}{698}{\code {exit}} -\entry{atexit}{700}{\code {atexit}} -\entry{on{\_}exit}{700}{\code {on_exit}} -\entry{abort}{701}{\code {abort}} -\entry{{\_}exit}{701}{\code {_exit}} -\entry{{\_}Exit}{701}{\code {_Exit}} -\entry{system}{703}{\code {system}} -\entry{getpid}{704}{\code {getpid}} -\entry{getppid}{704}{\code {getppid}} -\entry{fork}{705}{\code {fork}} -\entry{vfork}{705}{\code {vfork}} -\entry{execv}{706}{\code {execv}} -\entry{execl}{706}{\code {execl}} -\entry{execve}{706}{\code {execve}} -\entry{execle}{706}{\code {execle}} -\entry{execvp}{707}{\code {execvp}} -\entry{execlp}{707}{\code {execlp}} -\entry{waitpid}{708}{\code {waitpid}} -\entry{wait}{710}{\code {wait}} -\entry{wait4}{710}{\code {wait4}} -\entry{WIFEXITED}{711}{\code {WIFEXITED}} -\entry{WEXITSTATUS}{711}{\code {WEXITSTATUS}} -\entry{WIFSIGNALED}{711}{\code {WIFSIGNALED}} -\entry{WTERMSIG}{711}{\code {WTERMSIG}} -\entry{WCOREDUMP}{711}{\code {WCOREDUMP}} -\entry{WIFSTOPPED}{712}{\code {WIFSTOPPED}} -\entry{WSTOPSIG}{712}{\code {WSTOPSIG}} -\entry{wait3}{712}{\code {wait3}} -\entry{ctermid}{730}{\code {ctermid}} -\entry{setsid}{731}{\code {setsid}} -\entry{getsid}{731}{\code {getsid}} -\entry{getpgrp}{731}{\code {getpgrp}} -\entry{getpgrp}{731}{\code {getpgrp}} -\entry{getpgid}{731}{\code {getpgid}} -\entry{setpgid}{732}{\code {setpgid}} -\entry{setpgrp}{732}{\code {setpgrp}} -\entry{tcgetpgrp}{732}{\code {tcgetpgrp}} -\entry{tcsetpgrp}{733}{\code {tcsetpgrp}} -\entry{tcgetsid}{733}{\code {tcgetsid}} -\entry{success}{737}{\code {success}} -\entry{notfound}{737}{\code {notfound}} -\entry{unavail}{737}{\code {unavail}} -\entry{tryagain}{737}{\code {tryagain}} -\entry{getuid}{747}{\code {getuid}} -\entry{getgid}{747}{\code {getgid}} -\entry{geteuid}{747}{\code {geteuid}} -\entry{getegid}{747}{\code {getegid}} -\entry{getgroups}{747}{\code {getgroups}} -\entry{seteuid}{748}{\code {seteuid}} -\entry{setuid}{748}{\code {setuid}} -\entry{setreuid}{749}{\code {setreuid}} -\entry{setegid}{749}{\code {setegid}} -\entry{setgid}{749}{\code {setgid}} -\entry{setregid}{749}{\code {setregid}} -\entry{setgroups}{750}{\code {setgroups}} -\entry{initgroups}{750}{\code {initgroups}} -\entry{getlogin}{754}{\code {getlogin}} -\entry{cuserid}{754}{\code {cuserid}} -\entry{setutent}{757}{\code {setutent}} -\entry{getutent}{757}{\code {getutent}} -\entry{endutent}{757}{\code {endutent}} -\entry{getutid}{757}{\code {getutid}} -\entry{getutline}{758}{\code {getutline}} -\entry{pututline}{758}{\code {pututline}} -\entry{getutent{\_}r}{758}{\code {getutent_r}} -\entry{getutid{\_}r}{758}{\code {getutid_r}} -\entry{getutline{\_}r}{759}{\code {getutline_r}} -\entry{utmpname}{759}{\code {utmpname}} -\entry{updwtmp}{759}{\code {updwtmp}} -\entry{setutxent}{761}{\code {setutxent}} -\entry{getutxent}{761}{\code {getutxent}} -\entry{endutxent}{761}{\code {endutxent}} -\entry{getutxid}{761}{\code {getutxid}} -\entry{getutxline}{761}{\code {getutxline}} -\entry{pututxline}{761}{\code {pututxline}} -\entry{utmpxname}{761}{\code {utmpxname}} -\entry{getutmp}{762}{\code {getutmp}} -\entry{getutmpx}{762}{\code {getutmpx}} -\entry{login{\_}tty}{762}{\code {login_tty}} -\entry{login}{762}{\code {login}} -\entry{logout}{762}{\code {logout}} -\entry{logwtmp}{762}{\code {logwtmp}} -\entry{getpwuid}{763}{\code {getpwuid}} -\entry{getpwuid{\_}r}{764}{\code {getpwuid_r}} -\entry{getpwnam}{764}{\code {getpwnam}} -\entry{getpwnam{\_}r}{764}{\code {getpwnam_r}} -\entry{fgetpwent}{764}{\code {fgetpwent}} -\entry{fgetpwent{\_}r}{764}{\code {fgetpwent_r}} -\entry{setpwent}{765}{\code {setpwent}} -\entry{getpwent}{765}{\code {getpwent}} -\entry{getpwent{\_}r}{765}{\code {getpwent_r}} -\entry{endpwent}{765}{\code {endpwent}} -\entry{putpwent}{765}{\code {putpwent}} -\entry{getgrgid}{766}{\code {getgrgid}} -\entry{getgrgid{\_}r}{766}{\code {getgrgid_r}} -\entry{getgrnam}{767}{\code {getgrnam}} -\entry{getgrnam{\_}r}{767}{\code {getgrnam_r}} -\entry{fgetgrent}{767}{\code {fgetgrent}} -\entry{fgetgrent{\_}r}{767}{\code {fgetgrent_r}} -\entry{setgrent}{767}{\code {setgrent}} -\entry{getgrent}{768}{\code {getgrent}} -\entry{getgrent{\_}r}{768}{\code {getgrent_r}} -\entry{endgrent}{768}{\code {endgrent}} -\entry{setnetgrent}{770}{\code {setnetgrent}} -\entry{getnetgrent}{770}{\code {getnetgrent}} -\entry{getnetgrent{\_}r}{771}{\code {getnetgrent_r}} -\entry{endnetgrent}{771}{\code {endnetgrent}} -\entry{innetgr}{771}{\code {innetgr}} -\entry{gethostname}{773}{\code {gethostname}} -\entry{sethostname}{774}{\code {sethostname}} -\entry{getdomainnname}{774}{\code {getdomainnname}} -\entry{setdomainname}{774}{\code {setdomainname}} -\entry{gethostid}{774}{\code {gethostid}} -\entry{sethostid}{775}{\code {sethostid}} -\entry{uname}{776}{\code {uname}} -\entry{setfsent}{778}{\code {setfsent}} -\entry{endfsent}{779}{\code {endfsent}} -\entry{getfsent}{779}{\code {getfsent}} -\entry{getfsspec}{779}{\code {getfsspec}} -\entry{getfsfile}{779}{\code {getfsfile}} -\entry{setmntent}{781}{\code {setmntent}} -\entry{endmntent}{781}{\code {endmntent}} -\entry{getmntent}{781}{\code {getmntent}} -\entry{getmntent{\_}r}{782}{\code {getmntent_r}} -\entry{addmntent}{782}{\code {addmntent}} -\entry{hasmntopt}{782}{\code {hasmntopt}} -\entry{mount}{783}{\code {mount}} -\entry{umount2}{786}{\code {umount2}} -\entry{umount}{786}{\code {umount}} -\entry{sysctl}{787}{\code {sysctl}} -\entry{sysconf}{792}{\code {sysconf}} -\entry{pathconf}{805}{\code {pathconf}} -\entry{fpathconf}{805}{\code {fpathconf}} -\entry{confstr}{808}{\code {confstr}} -\entry{getpass}{812}{\code {getpass}} -\entry{crypt}{813}{\code {crypt}} -\entry{crypt{\_}r}{815}{\code {crypt_r}} -\entry{setkey}{815}{\code {setkey}} -\entry{encrypt}{815}{\code {encrypt}} -\entry{setkey{\_}r}{816}{\code {setkey_r}} -\entry{encrypt{\_}r}{816}{\code {encrypt_r}} -\entry{ecb{\_}crypt}{816}{\code {ecb_crypt}} -\entry{DES{\_}FAILED}{817}{\code {DES_FAILED}} -\entry{cbc{\_}crypt}{817}{\code {cbc_crypt}} -\entry{des{\_}setparity}{817}{\code {des_setparity}} -\entry{backtrace}{819}{\code {backtrace}} -\entry{backtrace{\_}symbols}{819}{\code {backtrace_symbols}} -\entry{backtrace{\_}symbols{\_}fd}{820}{\code {backtrace_symbols_fd}} -\entry{pthread{\_}create}{823}{\code {pthread_create}} -\entry{pthread{\_}exit}{823}{\code {pthread_exit}} -\entry{pthread{\_}cancel}{824}{\code {pthread_cancel}} -\entry{pthread{\_}join}{824}{\code {pthread_join}} -\entry{pthread{\_}attr{\_}init}{824}{\code {pthread_attr_init}} -\entry{pthread{\_}attr{\_}destroy}{825}{\code {pthread_attr_destroy}} -\entry{pthread{\_}attr{\_}setdetachstate}{825}{\code {pthread_attr_setdetachstate}} -\entry{pthread{\_}attr{\_}setguardsize}{825}{\code {pthread_attr_setguardsize}} -\entry{pthread{\_}attr{\_}setinheritsched}{825}{\code {pthread_attr_setinheritsched}} -\entry{pthread{\_}attr{\_}setschedparam}{825}{\code {pthread_attr_setschedparam}} -\entry{pthread{\_}attr{\_}setschedpolicy}{825}{\code {pthread_attr_setschedpolicy}} -\entry{pthread{\_}attr{\_}setscope}{825}{\code {pthread_attr_setscope}} -\entry{pthread{\_}attr{\_}setstack}{825}{\code {pthread_attr_setstack}} -\entry{pthread{\_}attr{\_}setstackaddr}{825}{\code {pthread_attr_setstackaddr}} -\entry{pthread{\_}attr{\_}setstacksize}{825}{\code {pthread_attr_setstacksize}} -\entry{pthread{\_}attr{\_}setattr}{825}{\code {pthread_attr_setattr}} -\entry{pthread{\_}attr{\_}getdetachstate}{825}{\code {pthread_attr_getdetachstate}} -\entry{pthread{\_}attr{\_}getguardsize}{825}{\code {pthread_attr_getguardsize}} -\entry{pthread{\_}attr{\_}getinheritsched}{825}{\code {pthread_attr_getinheritsched}} -\entry{pthread{\_}attr{\_}getschedparam}{825}{\code {pthread_attr_getschedparam}} -\entry{pthread{\_}attr{\_}getschedpolicy}{825}{\code {pthread_attr_getschedpolicy}} -\entry{pthread{\_}attr{\_}getscope}{825}{\code {pthread_attr_getscope}} -\entry{pthread{\_}attr{\_}getstack}{825}{\code {pthread_attr_getstack}} -\entry{pthread{\_}attr{\_}getstackaddr}{825}{\code {pthread_attr_getstackaddr}} -\entry{pthread{\_}attr{\_}getstacksize}{825}{\code {pthread_attr_getstacksize}} -\entry{pthread{\_}attr{\_}getattr}{825}{\code {pthread_attr_getattr}} -\entry{pthread{\_}setcancelstate}{827}{\code {pthread_setcancelstate}} -\entry{pthread{\_}setcanceltype}{828}{\code {pthread_setcanceltype}} -\entry{pthread{\_}testcancel}{828}{\code {pthread_testcancel}} -\entry{pthread{\_}cleanup{\_}push}{829}{\code {pthread_cleanup_push}} -\entry{pthread{\_}cleanup{\_}pop}{829}{\code {pthread_cleanup_pop}} -\entry{pthread{\_}cleanup{\_}push{\_}defer{\_}np}{829}{\code {pthread_cleanup_push_defer_np}} -\entry{pthread{\_}cleanup{\_}pop{\_}restore{\_}np}{829}{\code {pthread_cleanup_pop_restore_np}} -\entry{pthread{\_}mutex{\_}init}{830}{\code {pthread_mutex_init}} -\entry{pthread{\_}mutex{\_}lock}{831}{\code {pthread_mutex_lock}} -\entry{pthread{\_}mutex{\_}trylock}{831}{\code {pthread_mutex_trylock}} -\entry{pthread{\_}mutex{\_}timedlock}{831}{\code {pthread_mutex_timedlock}} -\entry{pthread{\_}mutex{\_}unlock}{831}{\code {pthread_mutex_unlock}} -\entry{pthread{\_}mutex{\_}destroy}{832}{\code {pthread_mutex_destroy}} -\entry{pthread{\_}mutexattr{\_}init}{832}{\code {pthread_mutexattr_init}} -\entry{pthread{\_}mutexattr{\_}destroy}{832}{\code {pthread_mutexattr_destroy}} -\entry{pthread{\_}mutexattr{\_}settype}{833}{\code {pthread_mutexattr_settype}} -\entry{pthread{\_}mutexattr{\_}gettype}{833}{\code {pthread_mutexattr_gettype}} -\entry{pthread{\_}cond{\_}init}{833}{\code {pthread_cond_init}} -\entry{pthread{\_}cond{\_}signal}{834}{\code {pthread_cond_signal}} -\entry{pthread{\_}cond{\_}broadcast}{834}{\code {pthread_cond_broadcast}} -\entry{pthread{\_}cond{\_}wait}{834}{\code {pthread_cond_wait}} -\entry{pthread{\_}cond{\_}timedwait}{834}{\code {pthread_cond_timedwait}} -\entry{pthread{\_}cond{\_}destroy}{834}{\code {pthread_cond_destroy}} -\entry{pthread{\_}condattr{\_}init}{836}{\code {pthread_condattr_init}} -\entry{pthread{\_}condattr{\_}destroy}{836}{\code {pthread_condattr_destroy}} -\entry{sem{\_}init}{836}{\code {sem_init}} -\entry{sem{\_}destroy}{836}{\code {sem_destroy}} -\entry{sem{\_}wait}{837}{\code {sem_wait}} -\entry{sem{\_}trywait}{837}{\code {sem_trywait}} -\entry{sem{\_}post}{837}{\code {sem_post}} -\entry{sem{\_}getvalue}{837}{\code {sem_getvalue}} -\entry{pthread{\_}key{\_}create}{837}{\code {pthread_key_create}} -\entry{pthread{\_}key{\_}delete}{838}{\code {pthread_key_delete}} -\entry{pthread{\_}setspecific}{838}{\code {pthread_setspecific}} -\entry{pthread{\_}getspecific}{838}{\code {pthread_getspecific}} -\entry{pthread{\_}sigmask}{839}{\code {pthread_sigmask}} -\entry{pthread{\_}kill}{839}{\code {pthread_kill}} -\entry{sigwait}{840}{\code {sigwait}} -\entry{pthread{\_}atfork}{841}{\code {pthread_atfork}} -\entry{pthread{\_}self}{842}{\code {pthread_self}} -\entry{pthread{\_}equal}{842}{\code {pthread_equal}} -\entry{pthread{\_}detach}{843}{\code {pthread_detach}} -\entry{pthread{\_}kill{\_}other{\_}threads{\_}np}{843}{\code {pthread_kill_other_threads_np}} -\entry{pthread{\_}once}{843}{\code {pthread_once}} -\entry{pthread{\_}setschedparam}{844}{\code {pthread_setschedparam}} -\entry{pthread{\_}getschedparam}{844}{\code {pthread_getschedparam}} -\entry{pthread{\_}setconcurrency}{844}{\code {pthread_setconcurrency}} -\entry{pthread{\_}getconcurrency}{844}{\code {pthread_getconcurrency}} -\entry{assert}{845}{\code {assert}} -\entry{assert{\_}perror}{846}{\code {assert_perror}} -\entry{va{\_}start}{850}{\code {va_start}} -\entry{va{\_}arg}{850}{\code {va_arg}} -\entry{va{\_}end}{850}{\code {va_end}} -\entry{{\_}{\_}va{\_}copy}{850}{\code {__va_copy}} -\entry{va{\_}alist}{852}{\code {va_alist}} -\entry{va{\_}dcl}{852}{\code {va_dcl}} -\entry{va{\_}start}{852}{\code {va_start}} -\entry{offsetof}{861}{\code {offsetof}} +\entry{random{\_}r}{513}{\code {random_r}} +\entry{srandom{\_}r}{514}{\code {srandom_r}} +\entry{initstate{\_}r}{514}{\code {initstate_r}} +\entry{setstate{\_}r}{514}{\code {setstate_r}} +\entry{drand48}{514}{\code {drand48}} +\entry{erand48}{515}{\code {erand48}} +\entry{lrand48}{515}{\code {lrand48}} +\entry{nrand48}{515}{\code {nrand48}} +\entry{mrand48}{515}{\code {mrand48}} +\entry{jrand48}{515}{\code {jrand48}} +\entry{srand48}{515}{\code {srand48}} +\entry{seed48}{516}{\code {seed48}} +\entry{lcong48}{516}{\code {lcong48}} +\entry{drand48{\_}r}{516}{\code {drand48_r}} +\entry{erand48{\_}r}{517}{\code {erand48_r}} +\entry{lrand48{\_}r}{517}{\code {lrand48_r}} +\entry{nrand48{\_}r}{517}{\code {nrand48_r}} +\entry{mrand48{\_}r}{517}{\code {mrand48_r}} +\entry{jrand48{\_}r}{517}{\code {jrand48_r}} +\entry{srand48{\_}r}{518}{\code {srand48_r}} +\entry{seed48{\_}r}{518}{\code {seed48_r}} +\entry{lcong48{\_}r}{518}{\code {lcong48_r}} +\entry{div}{523}{\code {div}} +\entry{ldiv}{523}{\code {ldiv}} +\entry{lldiv}{523}{\code {lldiv}} +\entry{imaxdiv}{524}{\code {imaxdiv}} +\entry{fpclassify}{524}{\code {fpclassify}} +\entry{isfinite}{525}{\code {isfinite}} +\entry{isnormal}{525}{\code {isnormal}} +\entry{isnan}{525}{\code {isnan}} +\entry{isinf}{525}{\code {isinf}} +\entry{isinff}{525}{\code {isinff}} +\entry{isinfl}{525}{\code {isinfl}} +\entry{isnan}{526}{\code {isnan}} +\entry{isnanf}{526}{\code {isnanf}} +\entry{isnanl}{526}{\code {isnanl}} +\entry{finite}{526}{\code {finite}} +\entry{finitef}{526}{\code {finitef}} +\entry{finitel}{526}{\code {finitel}} +\entry{infnan}{526}{\code {infnan}} +\entry{matherr}{526}{\code {matherr}} +\entry{feclearexcept}{529}{\code {feclearexcept}} +\entry{feraiseexcept}{530}{\code {feraiseexcept}} +\entry{fetestexcept}{530}{\code {fetestexcept}} +\entry{fegetexceptflag}{530}{\code {fegetexceptflag}} +\entry{fesetexceptflag}{530}{\code {fesetexceptflag}} +\entry{fegetround}{532}{\code {fegetround}} +\entry{fesetround}{533}{\code {fesetround}} +\entry{fegetenv}{533}{\code {fegetenv}} +\entry{feholdexcept}{533}{\code {feholdexcept}} +\entry{fesetenv}{534}{\code {fesetenv}} +\entry{feupdateenv}{534}{\code {feupdateenv}} +\entry{feenableexcept}{534}{\code {feenableexcept}} +\entry{fedisableexcept}{534}{\code {fedisableexcept}} +\entry{fegetexcept}{534}{\code {fegetexcept}} +\entry{abs}{535}{\code {abs}} +\entry{labs}{535}{\code {labs}} +\entry{llabs}{535}{\code {llabs}} +\entry{imaxabs}{535}{\code {imaxabs}} +\entry{fabs}{535}{\code {fabs}} +\entry{fabsf}{535}{\code {fabsf}} +\entry{fabsl}{535}{\code {fabsl}} +\entry{cabs}{535}{\code {cabs}} +\entry{cabsf}{535}{\code {cabsf}} +\entry{cabsl}{535}{\code {cabsl}} +\entry{frexp}{536}{\code {frexp}} +\entry{frexpf}{536}{\code {frexpf}} +\entry{frexpl}{536}{\code {frexpl}} +\entry{ldexp}{536}{\code {ldexp}} +\entry{ldexpf}{536}{\code {ldexpf}} +\entry{ldexpl}{536}{\code {ldexpl}} +\entry{logb}{536}{\code {logb}} +\entry{logbf}{536}{\code {logbf}} +\entry{logbl}{536}{\code {logbl}} +\entry{scalb}{537}{\code {scalb}} +\entry{scalbf}{537}{\code {scalbf}} +\entry{scalbl}{537}{\code {scalbl}} +\entry{scalbn}{537}{\code {scalbn}} +\entry{scalbnf}{537}{\code {scalbnf}} +\entry{scalbnl}{537}{\code {scalbnl}} +\entry{scalbln}{537}{\code {scalbln}} +\entry{scalblnf}{537}{\code {scalblnf}} +\entry{scalblnl}{537}{\code {scalblnl}} +\entry{significand}{537}{\code {significand}} +\entry{significandf}{537}{\code {significandf}} +\entry{significandl}{537}{\code {significandl}} +\entry{ceil}{537}{\code {ceil}} +\entry{ceilf}{537}{\code {ceilf}} +\entry{ceill}{537}{\code {ceill}} +\entry{floor}{537}{\code {floor}} +\entry{floorf}{537}{\code {floorf}} +\entry{floorl}{537}{\code {floorl}} +\entry{trunc}{538}{\code {trunc}} +\entry{truncf}{538}{\code {truncf}} +\entry{truncl}{538}{\code {truncl}} +\entry{rint}{538}{\code {rint}} +\entry{rintf}{538}{\code {rintf}} +\entry{rintl}{538}{\code {rintl}} +\entry{nearbyint}{538}{\code {nearbyint}} +\entry{nearbyintf}{538}{\code {nearbyintf}} +\entry{nearbyintl}{538}{\code {nearbyintl}} +\entry{round}{538}{\code {round}} +\entry{roundf}{538}{\code {roundf}} +\entry{roundl}{538}{\code {roundl}} +\entry{lrint}{538}{\code {lrint}} +\entry{lrintf}{538}{\code {lrintf}} +\entry{lrintl}{538}{\code {lrintl}} +\entry{llrint}{538}{\code {llrint}} +\entry{llrintf}{538}{\code {llrintf}} +\entry{llrintl}{538}{\code {llrintl}} +\entry{lround}{538}{\code {lround}} +\entry{lroundf}{538}{\code {lroundf}} +\entry{lroundl}{538}{\code {lroundl}} +\entry{llround}{539}{\code {llround}} +\entry{llroundf}{539}{\code {llroundf}} +\entry{llroundl}{539}{\code {llroundl}} +\entry{modf}{539}{\code {modf}} +\entry{modff}{539}{\code {modff}} +\entry{modfl}{539}{\code {modfl}} +\entry{fmod}{539}{\code {fmod}} +\entry{fmodf}{539}{\code {fmodf}} +\entry{fmodl}{539}{\code {fmodl}} +\entry{drem}{539}{\code {drem}} +\entry{dremf}{539}{\code {dremf}} +\entry{dreml}{539}{\code {dreml}} +\entry{remainder}{540}{\code {remainder}} +\entry{remainderf}{540}{\code {remainderf}} +\entry{remainderl}{540}{\code {remainderl}} +\entry{copysign}{540}{\code {copysign}} +\entry{copysignf}{540}{\code {copysignf}} +\entry{copysignl}{540}{\code {copysignl}} +\entry{signbit}{540}{\code {signbit}} +\entry{nextafter}{540}{\code {nextafter}} +\entry{nextafterf}{540}{\code {nextafterf}} +\entry{nextafterl}{540}{\code {nextafterl}} +\entry{nexttoward}{540}{\code {nexttoward}} +\entry{nexttowardf}{540}{\code {nexttowardf}} +\entry{nexttowardl}{540}{\code {nexttowardl}} +\entry{nan}{541}{\code {nan}} +\entry{nanf}{541}{\code {nanf}} +\entry{nanl}{541}{\code {nanl}} +\entry{isgreater}{541}{\code {isgreater}} +\entry{isgreaterequal}{541}{\code {isgreaterequal}} +\entry{isless}{541}{\code {isless}} +\entry{islessequal}{541}{\code {islessequal}} +\entry{islessgreater}{541}{\code {islessgreater}} +\entry{isunordered}{542}{\code {isunordered}} +\entry{fmin}{542}{\code {fmin}} +\entry{fminf}{542}{\code {fminf}} +\entry{fminl}{542}{\code {fminl}} +\entry{fmax}{542}{\code {fmax}} +\entry{fmaxf}{542}{\code {fmaxf}} +\entry{fmaxl}{542}{\code {fmaxl}} +\entry{fdim}{542}{\code {fdim}} +\entry{fdimf}{542}{\code {fdimf}} +\entry{fdiml}{542}{\code {fdiml}} +\entry{fma}{542}{\code {fma}} +\entry{fmaf}{542}{\code {fmaf}} +\entry{fmal}{542}{\code {fmal}} +\entry{creal}{544}{\code {creal}} +\entry{crealf}{544}{\code {crealf}} +\entry{creall}{544}{\code {creall}} +\entry{cimag}{544}{\code {cimag}} +\entry{cimagf}{544}{\code {cimagf}} +\entry{cimagl}{544}{\code {cimagl}} +\entry{conj}{544}{\code {conj}} +\entry{conjf}{544}{\code {conjf}} +\entry{conjl}{544}{\code {conjl}} +\entry{carg}{544}{\code {carg}} +\entry{cargf}{544}{\code {cargf}} +\entry{cargl}{544}{\code {cargl}} +\entry{cproj}{544}{\code {cproj}} +\entry{cprojf}{544}{\code {cprojf}} +\entry{cprojl}{544}{\code {cprojl}} +\entry{strtol}{545}{\code {strtol}} +\entry{wcstol}{545}{\code {wcstol}} +\entry{strtoul}{545}{\code {strtoul}} +\entry{wcstoul}{546}{\code {wcstoul}} +\entry{strtoll}{546}{\code {strtoll}} +\entry{wcstoll}{546}{\code {wcstoll}} +\entry{strtoq}{546}{\code {strtoq}} +\entry{wcstoq}{546}{\code {wcstoq}} +\entry{strtoull}{546}{\code {strtoull}} +\entry{wcstoull}{547}{\code {wcstoull}} +\entry{strtouq}{547}{\code {strtouq}} +\entry{wcstouq}{547}{\code {wcstouq}} +\entry{strtoimax}{547}{\code {strtoimax}} +\entry{wcstoimax}{547}{\code {wcstoimax}} +\entry{strtoumax}{547}{\code {strtoumax}} +\entry{wcstoumax}{547}{\code {wcstoumax}} +\entry{atol}{548}{\code {atol}} +\entry{atoi}{548}{\code {atoi}} +\entry{atoll}{548}{\code {atoll}} +\entry{strtod}{549}{\code {strtod}} +\entry{strtof}{550}{\code {strtof}} +\entry{strtold}{550}{\code {strtold}} +\entry{wcstod}{550}{\code {wcstod}} +\entry{wcstof}{550}{\code {wcstof}} +\entry{wcstold}{550}{\code {wcstold}} +\entry{atof}{550}{\code {atof}} +\entry{ecvt}{551}{\code {ecvt}} +\entry{fcvt}{551}{\code {fcvt}} +\entry{gcvt}{551}{\code {gcvt}} +\entry{qecvt}{551}{\code {qecvt}} +\entry{qfcvt}{551}{\code {qfcvt}} +\entry{qgcvt}{551}{\code {qgcvt}} +\entry{ecvt{\_}r}{552}{\code {ecvt_r}} +\entry{fcvt{\_}r}{552}{\code {fcvt_r}} +\entry{qecvt{\_}r}{552}{\code {qecvt_r}} +\entry{qfcvt{\_}r}{552}{\code {qfcvt_r}} +\entry{difftime}{553}{\code {difftime}} +\entry{clock}{556}{\code {clock}} +\entry{times}{557}{\code {times}} +\entry{time}{558}{\code {time}} +\entry{stime}{558}{\code {stime}} +\entry{gettimeofday}{559}{\code {gettimeofday}} +\entry{settimeofday}{559}{\code {settimeofday}} +\entry{adjtime}{560}{\code {adjtime}} +\entry{adjtimex}{560}{\code {adjtimex}} +\entry{localtime}{562}{\code {localtime}} +\entry{localtime{\_}r}{562}{\code {localtime_r}} +\entry{gmtime}{562}{\code {gmtime}} +\entry{gmtime{\_}r}{562}{\code {gmtime_r}} +\entry{mktime}{562}{\code {mktime}} +\entry{timelocal}{563}{\code {timelocal}} +\entry{timegm}{563}{\code {timegm}} +\entry{ntp{\_}gettime}{564}{\code {ntp_gettime}} +\entry{ntp{\_}adjtime}{566}{\code {ntp_adjtime}} +\entry{asctime}{566}{\code {asctime}} +\entry{asctime{\_}r}{566}{\code {asctime_r}} +\entry{ctime}{567}{\code {ctime}} +\entry{ctime{\_}r}{567}{\code {ctime_r}} +\entry{strftime}{567}{\code {strftime}} +\entry{wcsftime}{571}{\code {wcsftime}} +\entry{strptime}{572}{\code {strptime}} +\entry{getdate}{577}{\code {getdate}} +\entry{getdate{\_}r}{578}{\code {getdate_r}} +\entry{tzset}{581}{\code {tzset}} +\entry{setitimer}{583}{\code {setitimer}} +\entry{getitimer}{583}{\code {getitimer}} +\entry{alarm}{584}{\code {alarm}} +\entry{sleep}{585}{\code {sleep}} +\entry{nanosleep}{585}{\code {nanosleep}} +\entry{getrusage}{587}{\code {getrusage}} +\entry{vtimes}{588}{\code {vtimes}} +\entry{getrlimit}{590}{\code {getrlimit}} +\entry{getrlimit64}{590}{\code {getrlimit64}} +\entry{setrlimit}{590}{\code {setrlimit}} +\entry{setrlimit64}{590}{\code {setrlimit64}} +\entry{ulimit}{592}{\code {ulimit}} +\entry{vlimit}{593}{\code {vlimit}} +\entry{sched{\_}setscheduler}{597}{\code {sched_setscheduler}} +\entry{sched{\_}getscheduler}{597}{\code {sched_getscheduler}} +\entry{sched{\_}setparam}{598}{\code {sched_setparam}} +\entry{sched{\_}getparam}{598}{\code {sched_getparam}} +\entry{sched{\_}get{\_}priority{\_}min}{598}{\code {sched_get_priority_min}} +\entry{sched{\_}get{\_}priority{\_}max}{598}{\code {sched_get_priority_max}} +\entry{sched{\_}rr{\_}get{\_}interval}{598}{\code {sched_rr_get_interval}} +\entry{sched{\_}yield}{599}{\code {sched_yield}} +\entry{getpriority}{601}{\code {getpriority}} +\entry{setpriority}{601}{\code {setpriority}} +\entry{nice}{602}{\code {nice}} +\entry{getpagesize}{603}{\code {getpagesize}} +\entry{get{\_}phys{\_}pages}{604}{\code {get_phys_pages}} +\entry{get{\_}avphys{\_}pages}{604}{\code {get_avphys_pages}} +\entry{get{\_}nprocs{\_}conf}{604}{\code {get_nprocs_conf}} +\entry{get{\_}nprocs}{604}{\code {get_nprocs}} +\entry{getloadavg}{605}{\code {getloadavg}} +\entry{setjmp}{608}{\code {setjmp}} +\entry{longjmp}{609}{\code {longjmp}} +\entry{sigsetjmp}{610}{\code {sigsetjmp}} +\entry{siglongjmp}{610}{\code {siglongjmp}} +\entry{getcontext}{610}{\code {getcontext}} +\entry{makecontext}{611}{\code {makecontext}} +\entry{setcontext}{612}{\code {setcontext}} +\entry{swapcontext}{612}{\code {swapcontext}} +\entry{strsignal}{627}{\code {strsignal}} +\entry{psignal}{628}{\code {psignal}} +\entry{signal}{628}{\code {signal}} +\entry{sysv{\_}signal}{630}{\code {sysv_signal}} +\entry{ssignal}{630}{\code {ssignal}} +\entry{sigaction}{631}{\code {sigaction}} +\entry{TEMP{\_}FAILURE{\_}RETRY}{645}{\code {TEMP_FAILURE_RETRY}} +\entry{raise}{646}{\code {raise}} +\entry{gsignal}{646}{\code {gsignal}} +\entry{kill}{647}{\code {kill}} +\entry{killpg}{648}{\code {killpg}} +\entry{sigemptyset}{652}{\code {sigemptyset}} +\entry{sigfillset}{652}{\code {sigfillset}} +\entry{sigaddset}{652}{\code {sigaddset}} +\entry{sigdelset}{652}{\code {sigdelset}} +\entry{sigismember}{652}{\code {sigismember}} +\entry{sigprocmask}{652}{\code {sigprocmask}} +\entry{sigpending}{655}{\code {sigpending}} +\entry{pause}{657}{\code {pause}} +\entry{sigsuspend}{659}{\code {sigsuspend}} +\entry{sigaltstack}{661}{\code {sigaltstack}} +\entry{sigstack}{661}{\code {sigstack}} +\entry{sigvec}{663}{\code {sigvec}} +\entry{siginterrupt}{663}{\code {siginterrupt}} +\entry{sigmask}{663}{\code {sigmask}} +\entry{sigblock}{663}{\code {sigblock}} +\entry{sigsetmask}{663}{\code {sigsetmask}} +\entry{sigpause}{663}{\code {sigpause}} +\entry{main}{665}{\code {main}} +\entry{getopt}{667}{\code {getopt}} +\entry{getopt{\_}long}{671}{\code {getopt_long}} +\entry{getopt{\_}long{\_}only}{672}{\code {getopt_long_only}} +\entry{argp{\_}parse}{674}{\code {argp_parse}} +\entry{argp{\_}usage}{682}{\code {argp_usage}} +\entry{argp{\_}error}{682}{\code {argp_error}} +\entry{argp{\_}failure}{682}{\code {argp_failure}} +\entry{argp{\_}state{\_}help}{683}{\code {argp_state_help}} +\entry{argp{\_}help}{687}{\code {argp_help}} +\entry{getsubopt}{698}{\code {getsubopt}} +\entry{getenv}{701}{\code {getenv}} +\entry{putenv}{701}{\code {putenv}} +\entry{setenv}{702}{\code {setenv}} +\entry{unsetenv}{702}{\code {unsetenv}} +\entry{clearenv}{702}{\code {clearenv}} +\entry{syscall}{705}{\code {syscall}} +\entry{exit}{706}{\code {exit}} +\entry{atexit}{708}{\code {atexit}} +\entry{on{\_}exit}{708}{\code {on_exit}} +\entry{abort}{709}{\code {abort}} +\entry{{\_}exit}{709}{\code {_exit}} +\entry{{\_}Exit}{709}{\code {_Exit}} +\entry{system}{711}{\code {system}} +\entry{getpid}{712}{\code {getpid}} +\entry{getppid}{712}{\code {getppid}} +\entry{fork}{713}{\code {fork}} +\entry{vfork}{713}{\code {vfork}} +\entry{execv}{714}{\code {execv}} +\entry{execl}{714}{\code {execl}} +\entry{execve}{714}{\code {execve}} +\entry{execle}{714}{\code {execle}} +\entry{execvp}{715}{\code {execvp}} +\entry{execlp}{715}{\code {execlp}} +\entry{waitpid}{716}{\code {waitpid}} +\entry{wait}{718}{\code {wait}} +\entry{wait4}{718}{\code {wait4}} +\entry{WIFEXITED}{719}{\code {WIFEXITED}} +\entry{WEXITSTATUS}{719}{\code {WEXITSTATUS}} +\entry{WIFSIGNALED}{719}{\code {WIFSIGNALED}} +\entry{WTERMSIG}{719}{\code {WTERMSIG}} +\entry{WCOREDUMP}{719}{\code {WCOREDUMP}} +\entry{WIFSTOPPED}{720}{\code {WIFSTOPPED}} +\entry{WSTOPSIG}{720}{\code {WSTOPSIG}} +\entry{wait3}{720}{\code {wait3}} +\entry{ctermid}{738}{\code {ctermid}} +\entry{setsid}{739}{\code {setsid}} +\entry{getsid}{739}{\code {getsid}} +\entry{getpgrp}{739}{\code {getpgrp}} +\entry{getpgrp}{739}{\code {getpgrp}} +\entry{getpgid}{739}{\code {getpgid}} +\entry{setpgid}{740}{\code {setpgid}} +\entry{setpgrp}{740}{\code {setpgrp}} +\entry{tcgetpgrp}{740}{\code {tcgetpgrp}} +\entry{tcsetpgrp}{741}{\code {tcsetpgrp}} +\entry{tcgetsid}{741}{\code {tcgetsid}} +\entry{success}{745}{\code {success}} +\entry{notfound}{745}{\code {notfound}} +\entry{unavail}{745}{\code {unavail}} +\entry{tryagain}{745}{\code {tryagain}} +\entry{getuid}{755}{\code {getuid}} +\entry{getgid}{755}{\code {getgid}} +\entry{geteuid}{755}{\code {geteuid}} +\entry{getegid}{755}{\code {getegid}} +\entry{getgroups}{755}{\code {getgroups}} +\entry{seteuid}{756}{\code {seteuid}} +\entry{setuid}{756}{\code {setuid}} +\entry{setreuid}{757}{\code {setreuid}} +\entry{setegid}{757}{\code {setegid}} +\entry{setgid}{757}{\code {setgid}} +\entry{setregid}{757}{\code {setregid}} +\entry{setgroups}{758}{\code {setgroups}} +\entry{initgroups}{758}{\code {initgroups}} +\entry{getlogin}{762}{\code {getlogin}} +\entry{cuserid}{762}{\code {cuserid}} +\entry{setutent}{765}{\code {setutent}} +\entry{getutent}{765}{\code {getutent}} +\entry{endutent}{765}{\code {endutent}} +\entry{getutid}{765}{\code {getutid}} +\entry{getutline}{766}{\code {getutline}} +\entry{pututline}{766}{\code {pututline}} +\entry{getutent{\_}r}{766}{\code {getutent_r}} +\entry{getutid{\_}r}{766}{\code {getutid_r}} +\entry{getutline{\_}r}{767}{\code {getutline_r}} +\entry{utmpname}{767}{\code {utmpname}} +\entry{updwtmp}{767}{\code {updwtmp}} +\entry{setutxent}{769}{\code {setutxent}} +\entry{getutxent}{769}{\code {getutxent}} +\entry{endutxent}{769}{\code {endutxent}} +\entry{getutxid}{769}{\code {getutxid}} +\entry{getutxline}{769}{\code {getutxline}} +\entry{pututxline}{769}{\code {pututxline}} +\entry{utmpxname}{769}{\code {utmpxname}} +\entry{getutmp}{770}{\code {getutmp}} +\entry{getutmpx}{770}{\code {getutmpx}} +\entry{login{\_}tty}{770}{\code {login_tty}} +\entry{login}{770}{\code {login}} +\entry{logout}{770}{\code {logout}} +\entry{logwtmp}{770}{\code {logwtmp}} +\entry{getpwuid}{771}{\code {getpwuid}} +\entry{getpwuid{\_}r}{772}{\code {getpwuid_r}} +\entry{getpwnam}{772}{\code {getpwnam}} +\entry{getpwnam{\_}r}{772}{\code {getpwnam_r}} +\entry{fgetpwent}{772}{\code {fgetpwent}} +\entry{fgetpwent{\_}r}{772}{\code {fgetpwent_r}} +\entry{setpwent}{773}{\code {setpwent}} +\entry{getpwent}{773}{\code {getpwent}} +\entry{getpwent{\_}r}{773}{\code {getpwent_r}} +\entry{endpwent}{773}{\code {endpwent}} +\entry{putpwent}{773}{\code {putpwent}} +\entry{getgrgid}{774}{\code {getgrgid}} +\entry{getgrgid{\_}r}{774}{\code {getgrgid_r}} +\entry{getgrnam}{775}{\code {getgrnam}} +\entry{getgrnam{\_}r}{775}{\code {getgrnam_r}} +\entry{fgetgrent}{775}{\code {fgetgrent}} +\entry{fgetgrent{\_}r}{775}{\code {fgetgrent_r}} +\entry{setgrent}{775}{\code {setgrent}} +\entry{getgrent}{776}{\code {getgrent}} +\entry{getgrent{\_}r}{776}{\code {getgrent_r}} +\entry{endgrent}{776}{\code {endgrent}} +\entry{setnetgrent}{778}{\code {setnetgrent}} +\entry{getnetgrent}{778}{\code {getnetgrent}} +\entry{getnetgrent{\_}r}{779}{\code {getnetgrent_r}} +\entry{endnetgrent}{779}{\code {endnetgrent}} +\entry{innetgr}{779}{\code {innetgr}} +\entry{gethostname}{781}{\code {gethostname}} +\entry{sethostname}{782}{\code {sethostname}} +\entry{getdomainnname}{782}{\code {getdomainnname}} +\entry{setdomainname}{782}{\code {setdomainname}} +\entry{gethostid}{782}{\code {gethostid}} +\entry{sethostid}{783}{\code {sethostid}} +\entry{uname}{784}{\code {uname}} +\entry{setfsent}{786}{\code {setfsent}} +\entry{endfsent}{787}{\code {endfsent}} +\entry{getfsent}{787}{\code {getfsent}} +\entry{getfsspec}{787}{\code {getfsspec}} +\entry{getfsfile}{787}{\code {getfsfile}} +\entry{setmntent}{789}{\code {setmntent}} +\entry{endmntent}{789}{\code {endmntent}} +\entry{getmntent}{789}{\code {getmntent}} +\entry{getmntent{\_}r}{790}{\code {getmntent_r}} +\entry{addmntent}{790}{\code {addmntent}} +\entry{hasmntopt}{790}{\code {hasmntopt}} +\entry{mount}{791}{\code {mount}} +\entry{umount2}{794}{\code {umount2}} +\entry{umount}{794}{\code {umount}} +\entry{sysctl}{795}{\code {sysctl}} +\entry{sysconf}{800}{\code {sysconf}} +\entry{pathconf}{813}{\code {pathconf}} +\entry{fpathconf}{813}{\code {fpathconf}} +\entry{confstr}{816}{\code {confstr}} +\entry{getpass}{820}{\code {getpass}} +\entry{crypt}{821}{\code {crypt}} +\entry{crypt{\_}r}{823}{\code {crypt_r}} +\entry{setkey}{823}{\code {setkey}} +\entry{encrypt}{823}{\code {encrypt}} +\entry{setkey{\_}r}{824}{\code {setkey_r}} +\entry{encrypt{\_}r}{824}{\code {encrypt_r}} +\entry{ecb{\_}crypt}{824}{\code {ecb_crypt}} +\entry{DES{\_}FAILED}{825}{\code {DES_FAILED}} +\entry{cbc{\_}crypt}{825}{\code {cbc_crypt}} +\entry{des{\_}setparity}{825}{\code {des_setparity}} +\entry{backtrace}{827}{\code {backtrace}} +\entry{backtrace{\_}symbols}{827}{\code {backtrace_symbols}} +\entry{backtrace{\_}symbols{\_}fd}{828}{\code {backtrace_symbols_fd}} +\entry{pthread{\_}create}{831}{\code {pthread_create}} +\entry{pthread{\_}exit}{831}{\code {pthread_exit}} +\entry{pthread{\_}cancel}{832}{\code {pthread_cancel}} +\entry{pthread{\_}join}{832}{\code {pthread_join}} +\entry{pthread{\_}attr{\_}init}{832}{\code {pthread_attr_init}} +\entry{pthread{\_}attr{\_}destroy}{833}{\code {pthread_attr_destroy}} +\entry{pthread{\_}attr{\_}setdetachstate}{833}{\code {pthread_attr_setdetachstate}} +\entry{pthread{\_}attr{\_}setguardsize}{833}{\code {pthread_attr_setguardsize}} +\entry{pthread{\_}attr{\_}setinheritsched}{833}{\code {pthread_attr_setinheritsched}} +\entry{pthread{\_}attr{\_}setschedparam}{833}{\code {pthread_attr_setschedparam}} +\entry{pthread{\_}attr{\_}setschedpolicy}{833}{\code {pthread_attr_setschedpolicy}} +\entry{pthread{\_}attr{\_}setscope}{833}{\code {pthread_attr_setscope}} +\entry{pthread{\_}attr{\_}setstack}{833}{\code {pthread_attr_setstack}} +\entry{pthread{\_}attr{\_}setstackaddr}{833}{\code {pthread_attr_setstackaddr}} +\entry{pthread{\_}attr{\_}setstacksize}{833}{\code {pthread_attr_setstacksize}} +\entry{pthread{\_}attr{\_}setattr}{833}{\code {pthread_attr_setattr}} +\entry{pthread{\_}attr{\_}getdetachstate}{833}{\code {pthread_attr_getdetachstate}} +\entry{pthread{\_}attr{\_}getguardsize}{833}{\code {pthread_attr_getguardsize}} +\entry{pthread{\_}attr{\_}getinheritsched}{833}{\code {pthread_attr_getinheritsched}} +\entry{pthread{\_}attr{\_}getschedparam}{833}{\code {pthread_attr_getschedparam}} +\entry{pthread{\_}attr{\_}getschedpolicy}{833}{\code {pthread_attr_getschedpolicy}} +\entry{pthread{\_}attr{\_}getscope}{833}{\code {pthread_attr_getscope}} +\entry{pthread{\_}attr{\_}getstack}{833}{\code {pthread_attr_getstack}} +\entry{pthread{\_}attr{\_}getstackaddr}{833}{\code {pthread_attr_getstackaddr}} +\entry{pthread{\_}attr{\_}getstacksize}{833}{\code {pthread_attr_getstacksize}} +\entry{pthread{\_}attr{\_}getattr}{833}{\code {pthread_attr_getattr}} +\entry{pthread{\_}setcancelstate}{835}{\code {pthread_setcancelstate}} +\entry{pthread{\_}setcanceltype}{836}{\code {pthread_setcanceltype}} +\entry{pthread{\_}testcancel}{836}{\code {pthread_testcancel}} +\entry{pthread{\_}cleanup{\_}push}{837}{\code {pthread_cleanup_push}} +\entry{pthread{\_}cleanup{\_}pop}{837}{\code {pthread_cleanup_pop}} +\entry{pthread{\_}cleanup{\_}push{\_}defer{\_}np}{837}{\code {pthread_cleanup_push_defer_np}} +\entry{pthread{\_}cleanup{\_}pop{\_}restore{\_}np}{837}{\code {pthread_cleanup_pop_restore_np}} +\entry{pthread{\_}mutex{\_}init}{838}{\code {pthread_mutex_init}} +\entry{pthread{\_}mutex{\_}lock}{839}{\code {pthread_mutex_lock}} +\entry{pthread{\_}mutex{\_}trylock}{839}{\code {pthread_mutex_trylock}} +\entry{pthread{\_}mutex{\_}timedlock}{839}{\code {pthread_mutex_timedlock}} +\entry{pthread{\_}mutex{\_}unlock}{839}{\code {pthread_mutex_unlock}} +\entry{pthread{\_}mutex{\_}destroy}{840}{\code {pthread_mutex_destroy}} +\entry{pthread{\_}mutexattr{\_}init}{840}{\code {pthread_mutexattr_init}} +\entry{pthread{\_}mutexattr{\_}destroy}{840}{\code {pthread_mutexattr_destroy}} +\entry{pthread{\_}mutexattr{\_}settype}{841}{\code {pthread_mutexattr_settype}} +\entry{pthread{\_}mutexattr{\_}gettype}{841}{\code {pthread_mutexattr_gettype}} +\entry{pthread{\_}cond{\_}init}{841}{\code {pthread_cond_init}} +\entry{pthread{\_}cond{\_}signal}{842}{\code {pthread_cond_signal}} +\entry{pthread{\_}cond{\_}broadcast}{842}{\code {pthread_cond_broadcast}} +\entry{pthread{\_}cond{\_}wait}{842}{\code {pthread_cond_wait}} +\entry{pthread{\_}cond{\_}timedwait}{842}{\code {pthread_cond_timedwait}} +\entry{pthread{\_}cond{\_}destroy}{842}{\code {pthread_cond_destroy}} +\entry{pthread{\_}condattr{\_}init}{844}{\code {pthread_condattr_init}} +\entry{pthread{\_}condattr{\_}destroy}{844}{\code {pthread_condattr_destroy}} +\entry{sem{\_}init}{844}{\code {sem_init}} +\entry{sem{\_}destroy}{844}{\code {sem_destroy}} +\entry{sem{\_}wait}{845}{\code {sem_wait}} +\entry{sem{\_}trywait}{845}{\code {sem_trywait}} +\entry{sem{\_}post}{845}{\code {sem_post}} +\entry{sem{\_}getvalue}{845}{\code {sem_getvalue}} +\entry{pthread{\_}key{\_}create}{845}{\code {pthread_key_create}} +\entry{pthread{\_}key{\_}delete}{846}{\code {pthread_key_delete}} +\entry{pthread{\_}setspecific}{846}{\code {pthread_setspecific}} +\entry{pthread{\_}getspecific}{846}{\code {pthread_getspecific}} +\entry{pthread{\_}sigmask}{847}{\code {pthread_sigmask}} +\entry{pthread{\_}kill}{847}{\code {pthread_kill}} +\entry{sigwait}{848}{\code {sigwait}} +\entry{pthread{\_}atfork}{849}{\code {pthread_atfork}} +\entry{pthread{\_}self}{850}{\code {pthread_self}} +\entry{pthread{\_}equal}{850}{\code {pthread_equal}} +\entry{pthread{\_}detach}{851}{\code {pthread_detach}} +\entry{pthread{\_}kill{\_}other{\_}threads{\_}np}{851}{\code {pthread_kill_other_threads_np}} +\entry{pthread{\_}once}{851}{\code {pthread_once}} +\entry{pthread{\_}setschedparam}{852}{\code {pthread_setschedparam}} +\entry{pthread{\_}getschedparam}{852}{\code {pthread_getschedparam}} +\entry{pthread{\_}setconcurrency}{852}{\code {pthread_setconcurrency}} +\entry{pthread{\_}getconcurrency}{852}{\code {pthread_getconcurrency}} +\entry{assert}{853}{\code {assert}} +\entry{assert{\_}perror}{854}{\code {assert_perror}} +\entry{va{\_}start}{858}{\code {va_start}} +\entry{va{\_}arg}{858}{\code {va_arg}} +\entry{va{\_}end}{858}{\code {va_end}} +\entry{{\_}{\_}va{\_}copy}{858}{\code {__va_copy}} +\entry{va{\_}alist}{860}{\code {va_alist}} +\entry{va{\_}dcl}{860}{\code {va_dcl}} +\entry{va{\_}start}{860}{\code {va_start}} +\entry{offsetof}{869}{\code {offsetof}} diff -durpNa glibc-2.2.2/manual/libc.fns glibc-2.2.3/manual/libc.fns --- glibc-2.2.2/manual/libc.fns Thu Feb 15 16:49:47 2001 +++ glibc-2.2.3/manual/libc.fns Wed Apr 25 16:05:56 2001 @@ -8,28 +8,28 @@ \entry {\code {__fsetlocking}}{247} \entry {\code {__fwritable}}{243} \entry {\code {__fwriting}}{243} -\entry {\code {__va_copy}}{850} -\entry {\code {_exit}}{701} -\entry {\code {_Exit}}{701} +\entry {\code {__va_copy}}{858} +\entry {\code {_exit}}{709} +\entry {\code {_Exit}}{709} \entry {\code {_flushlbf}}{299} \entry {\code {_tolower}}{69} \entry {\code {_toupper}}{69} \initial {A} \entry {\code {a64l}}{111} -\entry {\code {abort}}{701} -\entry {\code {abs}}{533} +\entry {\code {abort}}{709} +\entry {\code {abs}}{535} \entry {\code {accept}}{437} -\entry {\code {access}}{392} +\entry {\code {access}}{393} \entry {\code {acos}}{496} \entry {\code {acosf}}{496} \entry {\code {acosh}}{502} \entry {\code {acoshf}}{502} \entry {\code {acoshl}}{502} \entry {\code {acosl}}{496} -\entry {\code {addmntent}}{782} +\entry {\code {addmntent}}{790} \entry {\code {addseverity}}{310} -\entry {\code {adjtime}}{558} -\entry {\code {adjtimex}}{558} +\entry {\code {adjtime}}{560} +\entry {\code {adjtimex}}{560} \entry {\code {aio_cancel}}{344} \entry {\code {aio_cancel64}}{344} \entry {\code {aio_error}}{340} @@ -45,16 +45,16 @@ \entry {\code {aio_suspend64}}{343} \entry {\code {aio_write}}{338} \entry {\code {aio_write64}}{338} -\entry {\code {alarm}}{582} +\entry {\code {alarm}}{584} \entry {\code {alloca}}{60} \entry {\code {alphasort}}{368} \entry {\code {alphasort64}}{369} -\entry {\code {argp_error}}{674} -\entry {\code {argp_failure}}{674} -\entry {\code {argp_help}}{679} -\entry {\code {argp_parse}}{666} -\entry {\code {argp_state_help}}{675} -\entry {\code {argp_usage}}{674} +\entry {\code {argp_error}}{682} +\entry {\code {argp_failure}}{682} +\entry {\code {argp_help}}{687} +\entry {\code {argp_parse}}{674} +\entry {\code {argp_state_help}}{683} +\entry {\code {argp_usage}}{682} \entry {\code {argz_add}}{113} \entry {\code {argz_add_sep}}{113} \entry {\code {argz_append}}{113} @@ -67,8 +67,8 @@ \entry {\code {argz_next}}{113} \entry {\code {argz_replace}}{114} \entry {\code {argz_stringify}}{112} -\entry {\code {asctime}}{564} -\entry {\code {asctime_r}}{564} +\entry {\code {asctime}}{566} +\entry {\code {asctime_r}}{566} \entry {\code {asin}}{496} \entry {\code {asinf}}{496} \entry {\code {asinh}}{502} @@ -76,8 +76,8 @@ \entry {\code {asinhl}}{502} \entry {\code {asinl}}{496} \entry {\code {asprintf}}{269} -\entry {\code {assert}}{845} -\entry {\code {assert_perror}}{846} +\entry {\code {assert}}{853} +\entry {\code {assert_perror}}{854} \entry {\code {atan}}{496} \entry {\code {atan2}}{496} \entry {\code {atan2f}}{496} @@ -87,15 +87,15 @@ \entry {\code {atanhf}}{502} \entry {\code {atanhl}}{502} \entry {\code {atanl}}{496} -\entry {\code {atexit}}{700} -\entry {\code {atof}}{548} -\entry {\code {atoi}}{546} -\entry {\code {atol}}{546} -\entry {\code {atoll}}{546} +\entry {\code {atexit}}{708} +\entry {\code {atof}}{550} +\entry {\code {atoi}}{548} +\entry {\code {atol}}{548} +\entry {\code {atoll}}{548} \initial {B} -\entry {\code {backtrace}}{819} -\entry {\code {backtrace_symbols}}{819} -\entry {\code {backtrace_symbols_fd}}{820} +\entry {\code {backtrace}}{827} +\entry {\code {backtrace_symbols}}{827} +\entry {\code {backtrace_symbols_fd}}{828} \entry {\code {basename}}{107, 108} \entry {\code {bcmp}}{95} \entry {\code {bcopy}}{91} @@ -107,9 +107,9 @@ \entry {\code {btowc}}{124} \entry {\code {bzero}}{91} \initial {C} -\entry {\code {cabs}}{533} -\entry {\code {cabsf}}{533} -\entry {\code {cabsl}}{533} +\entry {\code {cabs}}{535} +\entry {\code {cabsf}}{535} +\entry {\code {cabsl}}{535} \entry {\code {cacos}}{497} \entry {\code {cacosf}}{497} \entry {\code {cacosh}}{502} @@ -117,9 +117,10 @@ \entry {\code {cacoshl}}{502} \entry {\code {cacosl}}{497} \entry {\code {calloc}}{37} -\entry {\code {carg}}{542} -\entry {\code {cargf}}{542} -\entry {\code {cargl}}{542} +\entry {\code {canonicalize_file_name}}{377} +\entry {\code {carg}}{544} +\entry {\code {cargf}}{544} +\entry {\code {cargl}}{544} \entry {\code {casin}}{497} \entry {\code {casinf}}{497} \entry {\code {casinh}}{502} @@ -135,7 +136,7 @@ \entry {\code {catclose}}{182} \entry {\code {catgets}}{182} \entry {\code {catopen}}{179} -\entry {\code {cbc_crypt}}{817} +\entry {\code {cbc_crypt}}{825} \entry {\code {cbrt}}{499} \entry {\code {cbrtf}}{499} \entry {\code {cbrtl}}{499} @@ -145,9 +146,9 @@ \entry {\code {ccoshf}}{502} \entry {\code {ccoshl}}{502} \entry {\code {ccosl}}{495} -\entry {\code {ceil}}{535} -\entry {\code {ceilf}}{535} -\entry {\code {ceill}}{535} +\entry {\code {ceil}}{537} +\entry {\code {ceilf}}{537} +\entry {\code {ceill}}{537} \entry {\code {cexp}}{500} \entry {\code {cexpf}}{500} \entry {\code {cexpl}}{500} @@ -159,15 +160,15 @@ \entry {\code {cfsetospeed}}{470} \entry {\code {cfsetspeed}}{470} \entry {\code {chdir}}{362} -\entry {\code {chmod}}{390, 391} -\entry {\code {chown}}{387} -\entry {\code {cimag}}{542} -\entry {\code {cimagf}}{542} -\entry {\code {cimagl}}{542} -\entry {\code {clearenv}}{694} +\entry {\code {chmod}}{391, 392} +\entry {\code {chown}}{388} +\entry {\code {cimag}}{544} +\entry {\code {cimagf}}{544} +\entry {\code {cimagl}}{544} +\entry {\code {clearenv}}{702} \entry {\code {clearerr}}{292} \entry {\code {clearerr_unlocked}}{292} -\entry {\code {clock}}{554} +\entry {\code {clock}}{556} \entry {\code {clog}}{500} \entry {\code {clog10}}{500} \entry {\code {clog10f}}{500} @@ -177,14 +178,14 @@ \entry {\code {close}}{315} \entry {\code {closedir}}{367} \entry {\code {closelog}}{490} -\entry {\code {confstr}}{808} -\entry {\code {conj}}{542} -\entry {\code {conjf}}{542} -\entry {\code {conjl}}{542} +\entry {\code {confstr}}{816} +\entry {\code {conj}}{544} +\entry {\code {conjf}}{544} +\entry {\code {conjl}}{544} \entry {\code {connect}}{435} -\entry {\code {copysign}}{538} -\entry {\code {copysignf}}{538} -\entry {\code {copysignl}}{538} +\entry {\code {copysign}}{540} +\entry {\code {copysignf}}{540} +\entry {\code {copysignl}}{540} \entry {\code {cos}}{494} \entry {\code {cosf}}{494} \entry {\code {cosh}}{501} @@ -194,16 +195,16 @@ \entry {\code {cpow}}{501} \entry {\code {cpowf}}{501} \entry {\code {cpowl}}{501} -\entry {\code {cproj}}{542} -\entry {\code {cprojf}}{542} -\entry {\code {cprojl}}{542} -\entry {\code {creal}}{542} -\entry {\code {crealf}}{542} -\entry {\code {creall}}{542} +\entry {\code {cproj}}{544} +\entry {\code {cprojf}}{544} +\entry {\code {cprojl}}{544} +\entry {\code {creal}}{544} +\entry {\code {crealf}}{544} +\entry {\code {creall}}{544} \entry {\code {creat}}{314} \entry {\code {creat64}}{315} -\entry {\code {crypt}}{813} -\entry {\code {crypt_r}}{815} +\entry {\code {crypt}}{821} +\entry {\code {crypt_r}}{823} \entry {\code {csin}}{495} \entry {\code {csinf}}{495} \entry {\code {csinh}}{501} @@ -219,66 +220,66 @@ \entry {\code {ctanhf}}{502} \entry {\code {ctanhl}}{502} \entry {\code {ctanl}}{495} -\entry {\code {ctermid}}{730} -\entry {\code {ctime}}{565} -\entry {\code {ctime_r}}{565} -\entry {\code {cuserid}}{754} +\entry {\code {ctermid}}{738} +\entry {\code {ctime}}{567} +\entry {\code {ctime_r}}{567} +\entry {\code {cuserid}}{762} \initial {D} \entry {\code {dcgettext}}{190} \entry {\code {dcngettext}}{194} -\entry {\code {DES_FAILED}}{817} -\entry {\code {des_setparity}}{817} +\entry {\code {DES_FAILED}}{825} +\entry {\code {des_setparity}}{825} \entry {\code {dgettext}}{190} -\entry {\code {difftime}}{551} +\entry {\code {difftime}}{553} \entry {\code {dirfd}}{365} \entry {\code {dirname}}{108} -\entry {\code {div}}{521} +\entry {\code {div}}{523} \entry {\code {dngettext}}{194} -\entry {\code {drand48}}{513} -\entry {\code {drand48_r}}{515} -\entry {\code {drem}}{537} -\entry {\code {dremf}}{537} -\entry {\code {dreml}}{537} +\entry {\code {drand48}}{514} +\entry {\code {drand48_r}}{516} +\entry {\code {drem}}{539} +\entry {\code {dremf}}{539} +\entry {\code {dreml}}{539} \entry {\code {DTTOIF}}{364} \entry {\code {dup}}{347} \entry {\code {dup2}}{347} \initial {E} -\entry {\code {ecb_crypt}}{816} -\entry {\code {ecvt}}{549} -\entry {\code {ecvt_r}}{550} -\entry {\code {encrypt}}{815} -\entry {\code {encrypt_r}}{816} -\entry {\code {endfsent}}{779} -\entry {\code {endgrent}}{768} +\entry {\code {ecb_crypt}}{824} +\entry {\code {ecvt}}{551} +\entry {\code {ecvt_r}}{552} +\entry {\code {encrypt}}{823} +\entry {\code {encrypt_r}}{824} +\entry {\code {endfsent}}{787} +\entry {\code {endgrent}}{776} \entry {\code {endhostent}}{426} -\entry {\code {endmntent}}{781} +\entry {\code {endmntent}}{789} \entry {\code {endnetent}}{455} -\entry {\code {endnetgrent}}{771} +\entry {\code {endnetgrent}}{779} \entry {\code {endprotoent}}{430} -\entry {\code {endpwent}}{765} +\entry {\code {endpwent}}{773} \entry {\code {endservent}}{428} -\entry {\code {endutent}}{757} -\entry {\code {endutxent}}{761} +\entry {\code {endutent}}{765} +\entry {\code {endutxent}}{769} \entry {\code {envz_add}}{114} \entry {\code {envz_entry}}{114} \entry {\code {envz_get}}{114} \entry {\code {envz_merge}}{115} \entry {\code {envz_strip}}{115} -\entry {\code {erand48}}{514} -\entry {\code {erand48_r}}{516} +\entry {\code {erand48}}{515} +\entry {\code {erand48_r}}{517} \entry {\code {erf}}{503} \entry {\code {erfc}}{503} \entry {\code {erfcf}}{503} \entry {\code {erfcl}}{503} \entry {\code {erff}}{503} \entry {\code {erfl}}{503} -\entry {\code {execl}}{706} -\entry {\code {execle}}{706} -\entry {\code {execlp}}{707} -\entry {\code {execv}}{706} -\entry {\code {execve}}{706} -\entry {\code {execvp}}{707} -\entry {\code {exit}}{698} +\entry {\code {execl}}{714} +\entry {\code {execle}}{714} +\entry {\code {execlp}}{715} +\entry {\code {execv}}{714} +\entry {\code {execve}}{714} +\entry {\code {execvp}}{715} +\entry {\code {exit}}{706} \entry {\code {exp}}{497} \entry {\code {exp10}}{497} \entry {\code {exp10f}}{497} @@ -292,55 +293,55 @@ \entry {\code {expm1f}}{500} \entry {\code {expm1l}}{500} \initial {F} -\entry {\code {fabs}}{533} -\entry {\code {fabsf}}{533} -\entry {\code {fabsl}}{533} +\entry {\code {fabs}}{535} +\entry {\code {fabsf}}{535} +\entry {\code {fabsl}}{535} \entry {\code {fchdir}}{362} -\entry {\code {fchmod}}{391} -\entry {\code {fchown}}{387} +\entry {\code {fchmod}}{392} +\entry {\code {fchown}}{388} \entry {\code {fclean}}{325} \entry {\code {fclose}}{243} \entry {\code {fcloseall}}{244} \entry {\code {fcntl}}{346} -\entry {\code {fcvt}}{549} -\entry {\code {fcvt_r}}{550} +\entry {\code {fcvt}}{551} +\entry {\code {fcvt_r}}{552} \entry {\code {FD_CLR}}{331} \entry {\code {FD_ISSET}}{331} \entry {\code {FD_SET}}{331} \entry {\code {FD_ZERO}}{330} \entry {\code {fdatasync}}{333} -\entry {\code {fdim}}{540} -\entry {\code {fdimf}}{540} -\entry {\code {fdiml}}{540} +\entry {\code {fdim}}{542} +\entry {\code {fdimf}}{542} +\entry {\code {fdiml}}{542} \entry {\code {fdopen}}{323} -\entry {\code {feclearexcept}}{527} -\entry {\code {fedisableexcept}}{532} -\entry {\code {feenableexcept}}{532} -\entry {\code {fegetenv}}{531} -\entry {\code {fegetexcept}}{532} -\entry {\code {fegetexceptflag}}{528} -\entry {\code {fegetround}}{530} -\entry {\code {feholdexcept}}{531} +\entry {\code {feclearexcept}}{529} +\entry {\code {fedisableexcept}}{534} +\entry {\code {feenableexcept}}{534} +\entry {\code {fegetenv}}{533} +\entry {\code {fegetexcept}}{534} +\entry {\code {fegetexceptflag}}{530} +\entry {\code {fegetround}}{532} +\entry {\code {feholdexcept}}{533} \entry {\code {feof}}{291} \entry {\code {feof_unlocked}}{291} -\entry {\code {feraiseexcept}}{528} +\entry {\code {feraiseexcept}}{530} \entry {\code {ferror}}{291} \entry {\code {ferror_unlocked}}{291} -\entry {\code {fesetenv}}{532} -\entry {\code {fesetexceptflag}}{528} -\entry {\code {fesetround}}{531} -\entry {\code {fetestexcept}}{528} -\entry {\code {feupdateenv}}{532} +\entry {\code {fesetenv}}{534} +\entry {\code {fesetexceptflag}}{530} +\entry {\code {fesetround}}{533} +\entry {\code {fetestexcept}}{530} +\entry {\code {feupdateenv}}{534} \entry {\code {fflush}}{299} \entry {\code {fflush_unlocked}}{299} \entry {\code {fgetc}}{252} \entry {\code {fgetc_unlocked}}{252} -\entry {\code {fgetgrent}}{767} -\entry {\code {fgetgrent_r}}{767} +\entry {\code {fgetgrent}}{775} +\entry {\code {fgetgrent_r}}{775} \entry {\code {fgetpos}}{297} \entry {\code {fgetpos64}}{297} -\entry {\code {fgetpwent}}{764} -\entry {\code {fgetpwent_r}}{764} +\entry {\code {fgetpwent}}{772} +\entry {\code {fgetpwent_r}}{772} \entry {\code {fgets}}{255} \entry {\code {fgets_unlocked}}{255} \entry {\code {fgetwc}}{252} @@ -349,35 +350,35 @@ \entry {\code {fgetws_unlocked}}{255} \entry {\code {fileno}}{323} \entry {\code {fileno_unlocked}}{323} -\entry {\code {finite}}{524} -\entry {\code {finitef}}{524} -\entry {\code {finitel}}{524} +\entry {\code {finite}}{526} +\entry {\code {finitef}}{526} +\entry {\code {finitel}}{526} \entry {\code {flockfile}}{245} -\entry {\code {floor}}{535} -\entry {\code {floorf}}{535} -\entry {\code {floorl}}{535} -\entry {\code {fma}}{540} -\entry {\code {fmaf}}{540} -\entry {\code {fmal}}{540} -\entry {\code {fmax}}{540} -\entry {\code {fmaxf}}{540} -\entry {\code {fmaxl}}{540} +\entry {\code {floor}}{537} +\entry {\code {floorf}}{537} +\entry {\code {floorl}}{537} +\entry {\code {fma}}{542} +\entry {\code {fmaf}}{542} +\entry {\code {fmal}}{542} +\entry {\code {fmax}}{542} +\entry {\code {fmaxf}}{542} +\entry {\code {fmaxl}}{542} \entry {\code {fmemopen}}{302} -\entry {\code {fmin}}{540} -\entry {\code {fminf}}{540} -\entry {\code {fminl}}{540} -\entry {\code {fmod}}{537} -\entry {\code {fmodf}}{537} -\entry {\code {fmodl}}{537} +\entry {\code {fmin}}{542} +\entry {\code {fminf}}{542} +\entry {\code {fminl}}{542} +\entry {\code {fmod}}{539} +\entry {\code {fmodf}}{539} +\entry {\code {fmodl}}{539} \entry {\code {fmtmsg}}{308} \entry {\code {fnmatch}}{213} \entry {\code {fopen}}{240} \entry {\code {fopen64}}{241} \entry {\code {fopencookie}}{306} -\entry {\code {fork}}{705} +\entry {\code {fork}}{713} \entry {\code {forkpty}}{483} -\entry {\code {fpathconf}}{805} -\entry {\code {fpclassify}}{522} +\entry {\code {fpathconf}}{813} +\entry {\code {fpclassify}}{524} \entry {\code {fprintf}}{267} \entry {\code {fputc}}{249} \entry {\code {fputc_unlocked}}{249} @@ -392,23 +393,23 @@ \entry {\code {free}}{35} \entry {\code {freopen}}{242} \entry {\code {freopen64}}{242} -\entry {\code {frexp}}{534} -\entry {\code {frexpf}}{534} -\entry {\code {frexpl}}{534} +\entry {\code {frexp}}{536} +\entry {\code {frexpf}}{536} +\entry {\code {frexpl}}{536} \entry {\code {fscanf}}{289} \entry {\code {fseek}}{294} \entry {\code {fseeko}}{294} \entry {\code {fseeko64}}{295} \entry {\code {fsetpos}}{297} \entry {\code {fsetpos64}}{297} -\entry {\code {fstat}}{384} -\entry {\code {fstat64}}{384} +\entry {\code {fstat}}{385} +\entry {\code {fstat64}}{385} \entry {\code {fsync}}{333} \entry {\code {ftell}}{293} \entry {\code {ftello}}{294} \entry {\code {ftello64}}{294} -\entry {\code {ftruncate}}{396} -\entry {\code {ftruncate64}}{396} +\entry {\code {ftruncate}}{397} +\entry {\code {ftruncate64}}{397} \entry {\code {ftrylockfile}}{245} \entry {\code {ftw}}{372} \entry {\code {ftw64}}{373} @@ -422,33 +423,36 @@ \entry {\code {gamma}}{504} \entry {\code {gammaf}}{504} \entry {\code {gammal}}{504} -\entry {\code {gcvt}}{549} +\entry {\code {gcvt}}{551} +\entry {\code {get_avphys_pages}}{604} \entry {\code {get_current_dir_name}}{362} -\entry {\code {get_nprocs}}{602} -\entry {\code {get_nprocs_conf}}{602} +\entry {\code {get_nprocs}}{604} +\entry {\code {get_nprocs_conf}}{604} +\entry {\code {get_phys_pages}}{604} \entry {\code {getc}}{252} \entry {\code {getc_unlocked}}{252} \entry {\code {getchar}}{252} \entry {\code {getchar_unlocked}}{253} +\entry {\code {getcontext}}{610} \entry {\code {getcwd}}{361} -\entry {\code {getdate}}{575} -\entry {\code {getdate_r}}{576} +\entry {\code {getdate}}{577} +\entry {\code {getdate_r}}{578} \entry {\code {getdelim}}{254} -\entry {\code {getdomainnname}}{774} -\entry {\code {getegid}}{747} -\entry {\code {getenv}}{693} -\entry {\code {geteuid}}{747} -\entry {\code {getfsent}}{779} -\entry {\code {getfsfile}}{779} -\entry {\code {getfsspec}}{779} -\entry {\code {getgid}}{747} -\entry {\code {getgrent}}{768} -\entry {\code {getgrent_r}}{768} -\entry {\code {getgrgid}}{766} -\entry {\code {getgrgid_r}}{766} -\entry {\code {getgrnam}}{767} -\entry {\code {getgrnam_r}}{767} -\entry {\code {getgroups}}{747} +\entry {\code {getdomainnname}}{782} +\entry {\code {getegid}}{755} +\entry {\code {getenv}}{701} +\entry {\code {geteuid}}{755} +\entry {\code {getfsent}}{787} +\entry {\code {getfsfile}}{787} +\entry {\code {getfsspec}}{787} +\entry {\code {getgid}}{755} +\entry {\code {getgrent}}{776} +\entry {\code {getgrent_r}}{776} +\entry {\code {getgrgid}}{774} +\entry {\code {getgrgid_r}}{774} +\entry {\code {getgrnam}}{775} +\entry {\code {getgrnam_r}}{775} +\entry {\code {getgroups}}{755} \entry {\code {gethostbyaddr}}{424} \entry {\code {gethostbyaddr_r}}{426} \entry {\code {gethostbyname}}{424} @@ -456,83 +460,83 @@ \entry {\code {gethostbyname2}}{424} \entry {\code {gethostbyname2_r}}{426} \entry {\code {gethostent}}{426} -\entry {\code {gethostid}}{774} -\entry {\code {gethostname}}{773} -\entry {\code {getitimer}}{581} +\entry {\code {gethostid}}{782} +\entry {\code {gethostname}}{781} +\entry {\code {getitimer}}{583} \entry {\code {getline}}{254} -\entry {\code {getloadavg}}{603} -\entry {\code {getlogin}}{754} -\entry {\code {getmntent}}{781} -\entry {\code {getmntent_r}}{782} +\entry {\code {getloadavg}}{605} +\entry {\code {getlogin}}{762} +\entry {\code {getmntent}}{789} +\entry {\code {getmntent_r}}{790} \entry {\code {getnetbyaddr}}{455} \entry {\code {getnetbyname}}{455} \entry {\code {getnetent}}{455} -\entry {\code {getnetgrent}}{770} -\entry {\code {getnetgrent_r}}{771} -\entry {\code {getopt}}{659} -\entry {\code {getopt_long}}{663} -\entry {\code {getopt_long_only}}{664} -\entry {\code {getpagesize}}{601} -\entry {\code {getpass}}{812} +\entry {\code {getnetgrent}}{778} +\entry {\code {getnetgrent_r}}{779} +\entry {\code {getopt}}{667} +\entry {\code {getopt_long}}{671} +\entry {\code {getopt_long_only}}{672} +\entry {\code {getpagesize}}{603} +\entry {\code {getpass}}{820} \entry {\code {getpeername}}{437} -\entry {\code {getpgid}}{731} -\entry {\code {getpgrp}}{731} -\entry {\code {getpid}}{704} -\entry {\code {getppid}}{704} -\entry {\code {getpriority}}{599} +\entry {\code {getpgid}}{739} +\entry {\code {getpgrp}}{739} +\entry {\code {getpid}}{712} +\entry {\code {getppid}}{712} +\entry {\code {getpriority}}{601} \entry {\code {getprotobyname}}{430} \entry {\code {getprotobynumber}}{430} \entry {\code {getprotoent}}{430} \entry {\code {getpt}}{481} -\entry {\code {getpwent}}{765} -\entry {\code {getpwent_r}}{765} -\entry {\code {getpwnam}}{764} -\entry {\code {getpwnam_r}}{764} -\entry {\code {getpwuid}}{763} -\entry {\code {getpwuid_r}}{764} -\entry {\code {getrlimit}}{588} -\entry {\code {getrlimit64}}{588} -\entry {\code {getrusage}}{585} +\entry {\code {getpwent}}{773} +\entry {\code {getpwent_r}}{773} +\entry {\code {getpwnam}}{772} +\entry {\code {getpwnam_r}}{772} +\entry {\code {getpwuid}}{771} +\entry {\code {getpwuid_r}}{772} +\entry {\code {getrlimit}}{590} +\entry {\code {getrlimit64}}{590} +\entry {\code {getrusage}}{587} \entry {\code {gets}}{255} \entry {\code {getservbyname}}{428} \entry {\code {getservbyport}}{428} \entry {\code {getservent}}{428} -\entry {\code {getsid}}{731} +\entry {\code {getsid}}{739} \entry {\code {getsockname}}{413} \entry {\code {getsockopt}}{452} -\entry {\code {getsubopt}}{690} +\entry {\code {getsubopt}}{698} \entry {\code {gettext}}{189} -\entry {\code {gettimeofday}}{557} -\entry {\code {getuid}}{747} -\entry {\code {getumask}}{391} -\entry {\code {getutent}}{757} -\entry {\code {getutent_r}}{758} -\entry {\code {getutid}}{757} -\entry {\code {getutid_r}}{758} -\entry {\code {getutline}}{758} -\entry {\code {getutline_r}}{759} -\entry {\code {getutmp}}{762} -\entry {\code {getutmpx}}{762} -\entry {\code {getutxent}}{761} -\entry {\code {getutxid}}{761} -\entry {\code {getutxline}}{761} +\entry {\code {gettimeofday}}{559} +\entry {\code {getuid}}{755} +\entry {\code {getumask}}{392} +\entry {\code {getutent}}{765} +\entry {\code {getutent_r}}{766} +\entry {\code {getutid}}{765} +\entry {\code {getutid_r}}{766} +\entry {\code {getutline}}{766} +\entry {\code {getutline_r}}{767} +\entry {\code {getutmp}}{770} +\entry {\code {getutmpx}}{770} +\entry {\code {getutxent}}{769} +\entry {\code {getutxid}}{769} +\entry {\code {getutxline}}{769} \entry {\code {getw}}{253} \entry {\code {getwc}}{252} \entry {\code {getwc_unlocked}}{252} \entry {\code {getwchar}}{253} \entry {\code {getwchar_unlocked}}{253} \entry {\code {getwd}}{362} -\entry {\code {glob}}{216} -\entry {\code {glob64}}{217} -\entry {\code {globfree}}{220} +\entry {\code {glob}}{217} +\entry {\code {glob64}}{218} +\entry {\code {globfree}}{221} \entry {\code {globfree64}}{221} -\entry {\code {gmtime}}{560} -\entry {\code {gmtime_r}}{560} +\entry {\code {gmtime}}{562} +\entry {\code {gmtime_r}}{562} \entry {\code {grantpt}}{481} -\entry {\code {gsignal}}{638} +\entry {\code {gsignal}}{646} \entry {\code {gtty}}{477} \initial {H} -\entry {\code {hasmntopt}}{782} +\entry {\code {hasmntopt}}{790} \entry {\code {hcreate}}{208} \entry {\code {hcreate_r}}{209} \entry {\code {hdestroy}}{208} @@ -556,8 +560,8 @@ \entry {\code {ilogb}}{498} \entry {\code {ilogbf}}{498} \entry {\code {ilogbl}}{498} -\entry {\code {imaxabs}}{533} -\entry {\code {imaxdiv}}{522} +\entry {\code {imaxabs}}{535} +\entry {\code {imaxdiv}}{524} \entry {\code {index}}{104} \entry {\code {inet_addr}}{422} \entry {\code {inet_aton}}{422} @@ -568,11 +572,11 @@ \entry {\code {inet_ntoa}}{422} \entry {\code {inet_ntop}}{423} \entry {\code {inet_pton}}{423} -\entry {\code {infnan}}{524} -\entry {\code {initgroups}}{750} +\entry {\code {infnan}}{526} +\entry {\code {initgroups}}{758} \entry {\code {initstate}}{513} -\entry {\code {innetgr}}{771} -\entry {\code {int}}{602, 697} +\entry {\code {initstate_r}}{514} +\entry {\code {innetgr}}{779} \entry {\code {ioctl}}{359} \entry {\code {isalnum}}{68} \entry {\code {isalpha}}{67} @@ -581,25 +585,25 @@ \entry {\code {isblank}}{68} \entry {\code {iscntrl}}{69} \entry {\code {isdigit}}{68} -\entry {\code {isfinite}}{523} +\entry {\code {isfinite}}{525} \entry {\code {isgraph}}{68} -\entry {\code {isgreater}}{539} -\entry {\code {isgreaterequal}}{539} -\entry {\code {isinf}}{523} -\entry {\code {isinff}}{523} -\entry {\code {isinfl}}{523} -\entry {\code {isless}}{539} -\entry {\code {islessequal}}{539} -\entry {\code {islessgreater}}{539} +\entry {\code {isgreater}}{541} +\entry {\code {isgreaterequal}}{541} +\entry {\code {isinf}}{525} +\entry {\code {isinff}}{525} +\entry {\code {isinfl}}{525} +\entry {\code {isless}}{541} +\entry {\code {islessequal}}{541} +\entry {\code {islessgreater}}{541} \entry {\code {islower}}{67} -\entry {\code {isnan}}{523, 524} -\entry {\code {isnanf}}{524} -\entry {\code {isnanl}}{524} -\entry {\code {isnormal}}{523} +\entry {\code {isnan}}{525, 526} +\entry {\code {isnanf}}{526} +\entry {\code {isnanl}}{526} +\entry {\code {isnormal}}{525} \entry {\code {isprint}}{68} \entry {\code {ispunct}}{68} \entry {\code {isspace}}{68} -\entry {\code {isunordered}}{540} +\entry {\code {isunordered}}{542} \entry {\code {isupper}}{67} \entry {\code {iswalnum}}{71} \entry {\code {iswalpha}}{71} @@ -625,20 +629,20 @@ \entry {\code {jn}}{504} \entry {\code {jnf}}{504} \entry {\code {jnl}}{504} -\entry {\code {jrand48}}{514} -\entry {\code {jrand48_r}}{516} +\entry {\code {jrand48}}{515} +\entry {\code {jrand48_r}}{517} \initial {K} -\entry {\code {kill}}{639} -\entry {\code {killpg}}{640} +\entry {\code {kill}}{647} +\entry {\code {killpg}}{648} \initial {L} \entry {\code {l64a}}{110} -\entry {\code {labs}}{533} -\entry {\code {lcong48}}{515} -\entry {\code {lcong48_r}}{517} -\entry {\code {ldexp}}{534} -\entry {\code {ldexpf}}{534} -\entry {\code {ldexpl}}{534} -\entry {\code {ldiv}}{521} +\entry {\code {labs}}{535} +\entry {\code {lcong48}}{516} +\entry {\code {lcong48_r}}{518} +\entry {\code {ldexp}}{536} +\entry {\code {ldexpf}}{536} +\entry {\code {ldexpl}}{536} +\entry {\code {ldiv}}{523} \entry {\code {lfind}}{203} \entry {\code {lgamma}}{503} \entry {\code {lgamma_r}}{504} @@ -650,17 +654,17 @@ \entry {\code {lio_listio}}{339} \entry {\code {lio_listio64}}{340} \entry {\code {listen}}{436} -\entry {\code {llabs}}{533} -\entry {\code {lldiv}}{521} -\entry {\code {llrint}}{536} -\entry {\code {llrintf}}{536} -\entry {\code {llrintl}}{536} -\entry {\code {llround}}{537} -\entry {\code {llroundf}}{537} -\entry {\code {llroundl}}{537} +\entry {\code {llabs}}{535} +\entry {\code {lldiv}}{523} +\entry {\code {llrint}}{538} +\entry {\code {llrintf}}{538} +\entry {\code {llrintl}}{538} +\entry {\code {llround}}{539} +\entry {\code {llroundf}}{539} +\entry {\code {llroundl}}{539} \entry {\code {localeconv}}{166} -\entry {\code {localtime}}{560} -\entry {\code {localtime_r}}{560} +\entry {\code {localtime}}{562} +\entry {\code {localtime_r}}{562} \entry {\code {log}}{498} \entry {\code {log10}}{498} \entry {\code {log10f}}{498} @@ -671,35 +675,36 @@ \entry {\code {log2}}{498} \entry {\code {log2f}}{498} \entry {\code {log2l}}{498} -\entry {\code {logb}}{498, 534} -\entry {\code {logbf}}{498, 534} -\entry {\code {logbl}}{498, 534} +\entry {\code {logb}}{498, 536} +\entry {\code {logbf}}{498, 536} +\entry {\code {logbl}}{498, 536} \entry {\code {logf}}{498} -\entry {\code {login}}{762} -\entry {\code {login_tty}}{762} +\entry {\code {login}}{770} +\entry {\code {login_tty}}{770} \entry {\code {logl}}{498} -\entry {\code {logout}}{762} -\entry {\code {logwtmp}}{762} -\entry {\code {longjmp}}{607} -\entry {\code {lrand48}}{514} -\entry {\code {lrand48_r}}{516} -\entry {\code {lrint}}{536} -\entry {\code {lrintf}}{536} -\entry {\code {lrintl}}{536} -\entry {\code {lround}}{536} -\entry {\code {lroundf}}{536} -\entry {\code {lroundl}}{536} +\entry {\code {logout}}{770} +\entry {\code {logwtmp}}{770} +\entry {\code {longjmp}}{609} +\entry {\code {lrand48}}{515} +\entry {\code {lrand48_r}}{517} +\entry {\code {lrint}}{538} +\entry {\code {lrintf}}{538} +\entry {\code {lrintl}}{538} +\entry {\code {lround}}{538} +\entry {\code {lroundf}}{538} +\entry {\code {lroundl}}{538} \entry {\code {lsearch}}{204} \entry {\code {lseek}}{320} \entry {\code {lseek64}}{321} -\entry {\code {lstat}}{384} -\entry {\code {lstat64}}{384} +\entry {\code {lstat}}{385} +\entry {\code {lstat64}}{385} \initial {M} -\entry {\code {main}}{657} +\entry {\code {main}}{665} +\entry {\code {makecontext}}{611} \entry {\code {mallinfo}}{45} \entry {\code {malloc}}{34} \entry {\code {mallopt}}{39} -\entry {\code {matherr}}{524} +\entry {\code {matherr}}{526} \entry {\code {mblen}}{136} \entry {\code {mbrlen}}{126} \entry {\code {mbrtowc}}{125} @@ -720,24 +725,24 @@ \entry {\code {mempcpy}}{82} \entry {\code {memrchr}}{100} \entry {\code {memset}}{83} -\entry {\code {mkdir}}{379} -\entry {\code {mkdtemp}}{400} +\entry {\code {mkdir}}{380} +\entry {\code {mkdtemp}}{401} \entry {\code {mkfifo}}{407} -\entry {\code {mknod}}{397} -\entry {\code {mkstemp}}{400} -\entry {\code {mktemp}}{400} -\entry {\code {mktime}}{560} +\entry {\code {mknod}}{398} +\entry {\code {mkstemp}}{401} +\entry {\code {mktemp}}{401} +\entry {\code {mktime}}{562} \entry {\code {mlock}}{64} \entry {\code {mlockall}}{65} \entry {\code {mmap}}{327} \entry {\code {mmap64}}{328} -\entry {\code {modf}}{537} -\entry {\code {modff}}{537} -\entry {\code {modfl}}{537} -\entry {\code {mount}}{783} +\entry {\code {modf}}{539} +\entry {\code {modff}}{539} +\entry {\code {modfl}}{539} +\entry {\code {mount}}{791} \entry {\code {mprobe}}{40} -\entry {\code {mrand48}}{514} -\entry {\code {mrand48_r}}{516} +\entry {\code {mrand48}}{515} +\entry {\code {mrand48_r}}{517} \entry {\code {mremap}}{329} \entry {\code {msync}}{329} \entry {\code {mtrace}}{46} @@ -746,31 +751,31 @@ \entry {\code {munmap}}{328} \entry {\code {muntrace}}{46} \initial {N} -\entry {\code {nan}}{539} -\entry {\code {nanf}}{539} -\entry {\code {nanl}}{539} -\entry {\code {nanosleep}}{583} -\entry {\code {nearbyint}}{536} -\entry {\code {nearbyintf}}{536} -\entry {\code {nearbyintl}}{536} -\entry {\code {nextafter}}{538} -\entry {\code {nextafterf}}{538} -\entry {\code {nextafterl}}{538} -\entry {\code {nexttoward}}{538} -\entry {\code {nexttowardf}}{538} -\entry {\code {nexttowardl}}{538} +\entry {\code {nan}}{541} +\entry {\code {nanf}}{541} +\entry {\code {nanl}}{541} +\entry {\code {nanosleep}}{585} +\entry {\code {nearbyint}}{538} +\entry {\code {nearbyintf}}{538} +\entry {\code {nearbyintl}}{538} +\entry {\code {nextafter}}{540} +\entry {\code {nextafterf}}{540} +\entry {\code {nextafterl}}{540} +\entry {\code {nexttoward}}{540} +\entry {\code {nexttowardf}}{540} +\entry {\code {nexttowardl}}{540} \entry {\code {nftw}}{373} \entry {\code {nftw64}}{374} \entry {\code {ngettext}}{194} -\entry {\code {nice}}{600} +\entry {\code {nice}}{602} \entry {\code {nl_langinfo}}{170} -\entry {\code {notfound}}{737} -\entry {\code {nrand48}}{514} -\entry {\code {nrand48_r}}{516} +\entry {\code {notfound}}{745} +\entry {\code {nrand48}}{515} +\entry {\code {nrand48_r}}{517} \entry {\code {ntohl}}{429} \entry {\code {ntohs}}{429} -\entry {\code {ntp_adjtime}}{564} -\entry {\code {ntp_gettime}}{562} +\entry {\code {ntp_adjtime}}{566} +\entry {\code {ntp_gettime}}{564} \initial {O} \entry {\code {obstack_1grow}}{54} \entry {\code {obstack_1grow_fast}}{55} @@ -798,8 +803,8 @@ \entry {\code {obstack_ptr_grow_fast}}{56} \entry {\code {obstack_room}}{55} \entry {\code {obstack_vprintf}}{272} -\entry {\code {offsetof}}{861} -\entry {\code {on_exit}}{700} +\entry {\code {offsetof}}{869} +\entry {\code {on_exit}}{708} \entry {\code {open}}{313} \entry {\code {open_memstream}}{303} \entry {\code {open_obstack_stream}}{304} @@ -809,8 +814,8 @@ \entry {\code {openpty}}{483} \initial {P} \entry {\code {parse_printf_format}}{272} -\entry {\code {pathconf}}{805} -\entry {\code {pause}}{649} +\entry {\code {pathconf}}{813} +\entry {\code {pause}}{657} \entry {\code {pclose}}{405} \entry {\code {perror}}{27} \entry {\code {pipe}}{403} @@ -827,103 +832,105 @@ \entry {\code {printf}}{267} \entry {\code {printf_size}}{280} \entry {\code {printf_size_info}}{281} -\entry {\code {psignal}}{620} -\entry {\code {pthread_atfork}}{841} -\entry {\code {pthread_attr_destroy}}{825} -\entry {\code {pthread_attr_getattr}}{825} -\entry {\code {pthread_attr_getdetachstate}}{825} -\entry {\code {pthread_attr_getguardsize}}{825} -\entry {\code {pthread_attr_getinheritsched}}{825} -\entry {\code {pthread_attr_getschedparam}}{825} -\entry {\code {pthread_attr_getschedpolicy}}{825} -\entry {\code {pthread_attr_getscope}}{825} -\entry {\code {pthread_attr_getstack}}{825} -\entry {\code {pthread_attr_getstackaddr}}{825} -\entry {\code {pthread_attr_getstacksize}}{825} -\entry {\code {pthread_attr_init}}{824} -\entry {\code {pthread_attr_setattr}}{825} -\entry {\code {pthread_attr_setdetachstate}}{825} -\entry {\code {pthread_attr_setguardsize}}{825} -\entry {\code {pthread_attr_setinheritsched}}{825} -\entry {\code {pthread_attr_setschedparam}}{825} -\entry {\code {pthread_attr_setschedpolicy}}{825} -\entry {\code {pthread_attr_setscope}}{825} -\entry {\code {pthread_attr_setstack}}{825} -\entry {\code {pthread_attr_setstackaddr}}{825} -\entry {\code {pthread_attr_setstacksize}}{825} -\entry {\code {pthread_cancel}}{824} -\entry {\code {pthread_cleanup_pop}}{829} -\entry {\code {pthread_cleanup_pop_restore_np}}{829} -\entry {\code {pthread_cleanup_push}}{829} -\entry {\code {pthread_cleanup_push_defer_np}}{829} -\entry {\code {pthread_cond_broadcast}}{834} -\entry {\code {pthread_cond_destroy}}{834} -\entry {\code {pthread_cond_init}}{833} -\entry {\code {pthread_cond_signal}}{834} -\entry {\code {pthread_cond_timedwait}}{834} -\entry {\code {pthread_cond_wait}}{834} -\entry {\code {pthread_condattr_destroy}}{836} -\entry {\code {pthread_condattr_init}}{836} -\entry {\code {pthread_create}}{823} -\entry {\code {pthread_detach}}{843} -\entry {\code {pthread_equal}}{842} -\entry {\code {pthread_exit}}{823} -\entry {\code {pthread_getconcurrency}}{844} -\entry {\code {pthread_getschedparam}}{844} -\entry {\code {pthread_getspecific}}{838} -\entry {\code {pthread_join}}{824} -\entry {\code {pthread_key_create}}{837} -\entry {\code {pthread_key_delete}}{838} -\entry {\code {pthread_kill}}{839} -\entry {\code {pthread_kill_other_threads_np}}{843} -\entry {\code {pthread_mutex_destroy}}{832} -\entry {\code {pthread_mutex_init}}{830} -\entry {\code {pthread_mutex_lock}}{831} -\entry {\code {pthread_mutex_timedlock}}{831} -\entry {\code {pthread_mutex_trylock}}{831} -\entry {\code {pthread_mutex_unlock}}{831} -\entry {\code {pthread_mutexattr_destroy}}{832} -\entry {\code {pthread_mutexattr_gettype}}{833} -\entry {\code {pthread_mutexattr_init}}{832} -\entry {\code {pthread_mutexattr_settype}}{833} -\entry {\code {pthread_once}}{843} -\entry {\code {pthread_self}}{842} -\entry {\code {pthread_setcancelstate}}{827} -\entry {\code {pthread_setcanceltype}}{828} -\entry {\code {pthread_setconcurrency}}{844} -\entry {\code {pthread_setschedparam}}{844} -\entry {\code {pthread_setspecific}}{838} -\entry {\code {pthread_sigmask}}{839} -\entry {\code {pthread_testcancel}}{828} +\entry {\code {psignal}}{628} +\entry {\code {pthread_atfork}}{849} +\entry {\code {pthread_attr_destroy}}{833} +\entry {\code {pthread_attr_getattr}}{833} +\entry {\code {pthread_attr_getdetachstate}}{833} +\entry {\code {pthread_attr_getguardsize}}{833} +\entry {\code {pthread_attr_getinheritsched}}{833} +\entry {\code {pthread_attr_getschedparam}}{833} +\entry {\code {pthread_attr_getschedpolicy}}{833} +\entry {\code {pthread_attr_getscope}}{833} +\entry {\code {pthread_attr_getstack}}{833} +\entry {\code {pthread_attr_getstackaddr}}{833} +\entry {\code {pthread_attr_getstacksize}}{833} +\entry {\code {pthread_attr_init}}{832} +\entry {\code {pthread_attr_setattr}}{833} +\entry {\code {pthread_attr_setdetachstate}}{833} +\entry {\code {pthread_attr_setguardsize}}{833} +\entry {\code {pthread_attr_setinheritsched}}{833} +\entry {\code {pthread_attr_setschedparam}}{833} +\entry {\code {pthread_attr_setschedpolicy}}{833} +\entry {\code {pthread_attr_setscope}}{833} +\entry {\code {pthread_attr_setstack}}{833} +\entry {\code {pthread_attr_setstackaddr}}{833} +\entry {\code {pthread_attr_setstacksize}}{833} +\entry {\code {pthread_cancel}}{832} +\entry {\code {pthread_cleanup_pop}}{837} +\entry {\code {pthread_cleanup_pop_restore_np}}{837} +\entry {\code {pthread_cleanup_push}}{837} +\entry {\code {pthread_cleanup_push_defer_np}}{837} +\entry {\code {pthread_cond_broadcast}}{842} +\entry {\code {pthread_cond_destroy}}{842} +\entry {\code {pthread_cond_init}}{841} +\entry {\code {pthread_cond_signal}}{842} +\entry {\code {pthread_cond_timedwait}}{842} +\entry {\code {pthread_cond_wait}}{842} +\entry {\code {pthread_condattr_destroy}}{844} +\entry {\code {pthread_condattr_init}}{844} +\entry {\code {pthread_create}}{831} +\entry {\code {pthread_detach}}{851} +\entry {\code {pthread_equal}}{850} +\entry {\code {pthread_exit}}{831} +\entry {\code {pthread_getconcurrency}}{852} +\entry {\code {pthread_getschedparam}}{852} +\entry {\code {pthread_getspecific}}{846} +\entry {\code {pthread_join}}{832} +\entry {\code {pthread_key_create}}{845} +\entry {\code {pthread_key_delete}}{846} +\entry {\code {pthread_kill}}{847} +\entry {\code {pthread_kill_other_threads_np}}{851} +\entry {\code {pthread_mutex_destroy}}{840} +\entry {\code {pthread_mutex_init}}{838} +\entry {\code {pthread_mutex_lock}}{839} +\entry {\code {pthread_mutex_timedlock}}{839} +\entry {\code {pthread_mutex_trylock}}{839} +\entry {\code {pthread_mutex_unlock}}{839} +\entry {\code {pthread_mutexattr_destroy}}{840} +\entry {\code {pthread_mutexattr_gettype}}{841} +\entry {\code {pthread_mutexattr_init}}{840} +\entry {\code {pthread_mutexattr_settype}}{841} +\entry {\code {pthread_once}}{851} +\entry {\code {pthread_self}}{850} +\entry {\code {pthread_setcancelstate}}{835} +\entry {\code {pthread_setcanceltype}}{836} +\entry {\code {pthread_setconcurrency}}{852} +\entry {\code {pthread_setschedparam}}{852} +\entry {\code {pthread_setspecific}}{846} +\entry {\code {pthread_sigmask}}{847} +\entry {\code {pthread_testcancel}}{836} \entry {\code {ptsname}}{482} \entry {\code {ptsname_r}}{482} \entry {\code {putc}}{250} \entry {\code {putc_unlocked}}{250} \entry {\code {putchar}}{250} \entry {\code {putchar_unlocked}}{250} -\entry {\code {putenv}}{693} -\entry {\code {putpwent}}{765} +\entry {\code {putenv}}{701} +\entry {\code {putpwent}}{773} \entry {\code {puts}}{251} -\entry {\code {pututline}}{758} -\entry {\code {pututxline}}{761} +\entry {\code {pututline}}{766} +\entry {\code {pututxline}}{769} \entry {\code {putw}}{251} \entry {\code {putwc}}{250} \entry {\code {putwc_unlocked}}{250} +\entry {\code {putwchar}}{250} \entry {\code {putwchar_unlocked}}{250} \entry {\code {pwrite}}{319} \entry {\code {pwrite64}}{320} \initial {Q} -\entry {\code {qecvt}}{549} -\entry {\code {qecvt_r}}{550} -\entry {\code {qfcvt}}{549} -\entry {\code {qfcvt_r}}{550} -\entry {\code {qgcvt}}{549} +\entry {\code {qecvt}}{551} +\entry {\code {qecvt_r}}{552} +\entry {\code {qfcvt}}{551} +\entry {\code {qfcvt_r}}{552} +\entry {\code {qgcvt}}{551} \entry {\code {qsort}}{204} \initial {R} -\entry {\code {raise}}{638} +\entry {\code {raise}}{646} \entry {\code {rand}}{512} \entry {\code {rand_r}}{512} \entry {\code {random}}{512} +\entry {\code {random_r}}{513} \entry {\code {rawmemchr}}{100} \entry {\code {read}}{316} \entry {\code {readdir}}{365} @@ -933,139 +940,142 @@ \entry {\code {readlink}}{376} \entry {\code {readv}}{326} \entry {\code {realloc}}{36} +\entry {\code {realpath}}{377} \entry {\code {recv}}{439} \entry {\code {recvfrom}}{448} -\entry {\code {regcomp}}{221} +\entry {\code {regcomp}}{222} \entry {\code {regerror}}{226} -\entry {\code {regexec}}{223} -\entry {\code {regfree}}{225} +\entry {\code {regexec}}{224} +\entry {\code {regfree}}{226} \entry {\code {register_printf_function}}{276} -\entry {\code {remainder}}{538} -\entry {\code {remainderf}}{538} -\entry {\code {remainderl}}{538} -\entry {\code {remove}}{377} -\entry {\code {rename}}{377} +\entry {\code {remainder}}{540} +\entry {\code {remainderf}}{540} +\entry {\code {remainderl}}{540} +\entry {\code {remove}}{378} +\entry {\code {rename}}{378} \entry {\code {rewind}}{295} \entry {\code {rewinddir}}{368} \entry {\code {rindex}}{104} -\entry {\code {rint}}{536} -\entry {\code {rintf}}{536} -\entry {\code {rintl}}{536} -\entry {\code {rmdir}}{377} -\entry {\code {round}}{536} -\entry {\code {roundf}}{536} -\entry {\code {roundl}}{536} +\entry {\code {rint}}{538} +\entry {\code {rintf}}{538} +\entry {\code {rintl}}{538} +\entry {\code {rmdir}}{378} +\entry {\code {round}}{538} +\entry {\code {roundf}}{538} +\entry {\code {roundl}}{538} \initial {S} -\entry {\code {S_ISBLK}}{385} -\entry {\code {S_ISCHR}}{385} -\entry {\code {S_ISDIR}}{385} -\entry {\code {S_ISFIFO}}{385} -\entry {\code {S_ISLNK}}{385} -\entry {\code {S_ISREG}}{385} -\entry {\code {S_ISSOCK}}{385} -\entry {\code {S_TYPEISMQ}}{386} -\entry {\code {S_TYPEISSEM}}{386} -\entry {\code {S_TYPEISSHM}}{386} +\entry {\code {S_ISBLK}}{386} +\entry {\code {S_ISCHR}}{386} +\entry {\code {S_ISDIR}}{386} +\entry {\code {S_ISFIFO}}{386} +\entry {\code {S_ISLNK}}{386} +\entry {\code {S_ISREG}}{386} +\entry {\code {S_ISSOCK}}{386} +\entry {\code {S_TYPEISMQ}}{387} +\entry {\code {S_TYPEISSEM}}{387} +\entry {\code {S_TYPEISSHM}}{387} \entry {\code {sbrk}}{63} -\entry {\code {scalb}}{535} -\entry {\code {scalbf}}{535} -\entry {\code {scalbl}}{535} -\entry {\code {scalbln}}{535} -\entry {\code {scalblnf}}{535} -\entry {\code {scalblnl}}{535} -\entry {\code {scalbn}}{535} -\entry {\code {scalbnf}}{535} -\entry {\code {scalbnl}}{535} +\entry {\code {scalb}}{537} +\entry {\code {scalbf}}{537} +\entry {\code {scalbl}}{537} +\entry {\code {scalbln}}{537} +\entry {\code {scalblnf}}{537} +\entry {\code {scalblnl}}{537} +\entry {\code {scalbn}}{537} +\entry {\code {scalbnf}}{537} +\entry {\code {scalbnl}}{537} \entry {\code {scandir}}{368} \entry {\code {scandir64}}{369} \entry {\code {scanf}}{289} -\entry {\code {sched_get_priority_max}}{596} -\entry {\code {sched_get_priority_min}}{596} -\entry {\code {sched_getparam}}{596} -\entry {\code {sched_getscheduler}}{595} -\entry {\code {sched_rr_get_interval}}{596} -\entry {\code {sched_setparam}}{596} -\entry {\code {sched_setscheduler}}{595} -\entry {\code {sched_yield}}{597} -\entry {\code {seed48}}{515} -\entry {\code {seed48_r}}{517} +\entry {\code {sched_get_priority_max}}{598} +\entry {\code {sched_get_priority_min}}{598} +\entry {\code {sched_getparam}}{598} +\entry {\code {sched_getscheduler}}{597} +\entry {\code {sched_rr_get_interval}}{598} +\entry {\code {sched_setparam}}{598} +\entry {\code {sched_setscheduler}}{597} +\entry {\code {sched_yield}}{599} +\entry {\code {seed48}}{516} +\entry {\code {seed48_r}}{518} \entry {\code {seekdir}}{368} \entry {\code {select}}{331} -\entry {\code {sem_destroy}}{836} -\entry {\code {sem_getvalue}}{837} -\entry {\code {sem_init}}{836} -\entry {\code {sem_post}}{837} -\entry {\code {sem_trywait}}{837} -\entry {\code {sem_wait}}{837} +\entry {\code {sem_destroy}}{844} +\entry {\code {sem_getvalue}}{845} +\entry {\code {sem_init}}{844} +\entry {\code {sem_post}}{845} +\entry {\code {sem_trywait}}{845} +\entry {\code {sem_wait}}{845} \entry {\code {send}}{438} \entry {\code {sendto}}{447} \entry {\code {setbuf}}{301} \entry {\code {setbuffer}}{301} -\entry {\code {setdomainname}}{774} -\entry {\code {setegid}}{749} -\entry {\code {setenv}}{694} -\entry {\code {seteuid}}{748} -\entry {\code {setfsent}}{778} -\entry {\code {setgid}}{749} -\entry {\code {setgrent}}{767} -\entry {\code {setgroups}}{750} +\entry {\code {setcontext}}{612} +\entry {\code {setdomainname}}{782} +\entry {\code {setegid}}{757} +\entry {\code {setenv}}{702} +\entry {\code {seteuid}}{756} +\entry {\code {setfsent}}{786} +\entry {\code {setgid}}{757} +\entry {\code {setgrent}}{775} +\entry {\code {setgroups}}{758} \entry {\code {sethostent}}{426} -\entry {\code {sethostid}}{775} -\entry {\code {sethostname}}{774} -\entry {\code {setitimer}}{581} -\entry {\code {setjmp}}{606} -\entry {\code {setkey}}{815} -\entry {\code {setkey_r}}{816} +\entry {\code {sethostid}}{783} +\entry {\code {sethostname}}{782} +\entry {\code {setitimer}}{583} +\entry {\code {setjmp}}{608} +\entry {\code {setkey}}{823} +\entry {\code {setkey_r}}{824} \entry {\code {setlinebuf}}{301} \entry {\code {setlocale}}{163} \entry {\code {setlogmask}}{490} -\entry {\code {setmntent}}{781} +\entry {\code {setmntent}}{789} \entry {\code {setnetent}}{455} -\entry {\code {setnetgrent}}{770} -\entry {\code {setpgid}}{732} -\entry {\code {setpgrp}}{732} -\entry {\code {setpriority}}{599} +\entry {\code {setnetgrent}}{778} +\entry {\code {setpgid}}{740} +\entry {\code {setpgrp}}{740} +\entry {\code {setpriority}}{601} \entry {\code {setprotoent}}{430} -\entry {\code {setpwent}}{765} -\entry {\code {setregid}}{749} -\entry {\code {setreuid}}{749} -\entry {\code {setrlimit}}{588} -\entry {\code {setrlimit64}}{588} +\entry {\code {setpwent}}{773} +\entry {\code {setregid}}{757} +\entry {\code {setreuid}}{757} +\entry {\code {setrlimit}}{590} +\entry {\code {setrlimit64}}{590} \entry {\code {setservent}}{428} -\entry {\code {setsid}}{731} +\entry {\code {setsid}}{739} \entry {\code {setsockopt}}{453} \entry {\code {setstate}}{513} -\entry {\code {settimeofday}}{557} -\entry {\code {setuid}}{748} -\entry {\code {setutent}}{757} -\entry {\code {setutxent}}{761} +\entry {\code {setstate_r}}{514} +\entry {\code {settimeofday}}{559} +\entry {\code {setuid}}{756} +\entry {\code {setutent}}{765} +\entry {\code {setutxent}}{769} \entry {\code {setvbuf}}{300} \entry {\code {shutdown}}{433} -\entry {\code {sigaction}}{623} -\entry {\code {sigaddset}}{644} -\entry {\code {sigaltstack}}{653} -\entry {\code {sigblock}}{655} -\entry {\code {sigdelset}}{644} -\entry {\code {sigemptyset}}{644} -\entry {\code {sigfillset}}{644} -\entry {\code {siginterrupt}}{655} -\entry {\code {sigismember}}{644} -\entry {\code {siglongjmp}}{608} -\entry {\code {sigmask}}{655} -\entry {\code {signal}}{620} -\entry {\code {signbit}}{538} -\entry {\code {significand}}{535} -\entry {\code {significandf}}{535} -\entry {\code {significandl}}{535} -\entry {\code {sigpause}}{655} -\entry {\code {sigpending}}{647} -\entry {\code {sigprocmask}}{644} -\entry {\code {sigsetjmp}}{608} -\entry {\code {sigsetmask}}{655} -\entry {\code {sigstack}}{653} -\entry {\code {sigsuspend}}{651} -\entry {\code {sigvec}}{655} -\entry {\code {sigwait}}{840} +\entry {\code {sigaction}}{631} +\entry {\code {sigaddset}}{652} +\entry {\code {sigaltstack}}{661} +\entry {\code {sigblock}}{663} +\entry {\code {sigdelset}}{652} +\entry {\code {sigemptyset}}{652} +\entry {\code {sigfillset}}{652} +\entry {\code {siginterrupt}}{663} +\entry {\code {sigismember}}{652} +\entry {\code {siglongjmp}}{610} +\entry {\code {sigmask}}{663} +\entry {\code {signal}}{628} +\entry {\code {signbit}}{540} +\entry {\code {significand}}{537} +\entry {\code {significandf}}{537} +\entry {\code {significandl}}{537} +\entry {\code {sigpause}}{663} +\entry {\code {sigpending}}{655} +\entry {\code {sigprocmask}}{652} +\entry {\code {sigsetjmp}}{610} +\entry {\code {sigsetmask}}{663} +\entry {\code {sigstack}}{661} +\entry {\code {sigsuspend}}{659} +\entry {\code {sigvec}}{663} +\entry {\code {sigwait}}{848} \entry {\code {sin}}{494} \entry {\code {sincos}}{495} \entry {\code {sincosf}}{495} @@ -1075,7 +1085,7 @@ \entry {\code {sinhf}}{501} \entry {\code {sinhl}}{501} \entry {\code {sinl}}{494} -\entry {\code {sleep}}{583} +\entry {\code {sleep}}{585} \entry {\code {snprintf}}{268} \entry {\code {socket}}{432} \entry {\code {socketpair}}{434} @@ -1084,14 +1094,15 @@ \entry {\code {sqrtf}}{499} \entry {\code {sqrtl}}{499} \entry {\code {srand}}{512} -\entry {\code {srand48}}{514} -\entry {\code {srand48_r}}{517} +\entry {\code {srand48}}{515} +\entry {\code {srand48_r}}{518} \entry {\code {srandom}}{513} +\entry {\code {srandom_r}}{514} \entry {\code {sscanf}}{289} -\entry {\code {ssignal}}{622} -\entry {\code {stat}}{383} -\entry {\code {stat64}}{384} -\entry {\code {stime}}{556} +\entry {\code {ssignal}}{630} +\entry {\code {stat}}{384} +\entry {\code {stat64}}{385} +\entry {\code {stime}}{558} \entry {\code {stpcpy}}{85} \entry {\code {stpncpy}}{86} \entry {\code {strcasecmp}}{93} @@ -1109,7 +1120,7 @@ \entry {\code {strerror_r}}{27} \entry {\code {strfmon}}{175} \entry {\code {strfry}}{109} -\entry {\code {strftime}}{565} +\entry {\code {strftime}}{567} \entry {\code {strlen}}{79} \entry {\code {strncasecmp}}{94} \entry {\code {strncat}}{90} @@ -1119,39 +1130,41 @@ \entry {\code {strndupa}}{87} \entry {\code {strnlen}}{80} \entry {\code {strpbrk}}{103} -\entry {\code {strptime}}{570} +\entry {\code {strptime}}{572} \entry {\code {strrchr}}{101} \entry {\code {strsep}}{106} -\entry {\code {strsignal}}{619} +\entry {\code {strsignal}}{627} \entry {\code {strspn}}{102} \entry {\code {strstr}}{102} -\entry {\code {strtod}}{547} -\entry {\code {strtof}}{548} -\entry {\code {strtoimax}}{545} +\entry {\code {strtod}}{549} +\entry {\code {strtof}}{550} +\entry {\code {strtoimax}}{547} \entry {\code {strtok}}{104} \entry {\code {strtok_r}}{106} -\entry {\code {strtol}}{543} -\entry {\code {strtold}}{548} -\entry {\code {strtoll}}{544} -\entry {\code {strtoq}}{544} -\entry {\code {strtoul}}{543} -\entry {\code {strtoull}}{544} -\entry {\code {strtoumax}}{545} -\entry {\code {strtouq}}{545} +\entry {\code {strtol}}{545} +\entry {\code {strtold}}{550} +\entry {\code {strtoll}}{546} +\entry {\code {strtoq}}{546} +\entry {\code {strtoul}}{545} +\entry {\code {strtoull}}{546} +\entry {\code {strtoumax}}{547} +\entry {\code {strtouq}}{547} \entry {\code {strverscmp}}{94} \entry {\code {strxfrm}}{96} \entry {\code {stty}}{477} -\entry {\code {success}}{737} +\entry {\code {success}}{745} \entry {\code {SUN_LEN}}{416} +\entry {\code {swapcontext}}{612} \entry {\code {swprintf}}{268} \entry {\code {swscanf}}{290} -\entry {\code {symlink}}{375} +\entry {\code {symlink}}{376} \entry {\code {sync}}{333} -\entry {\code {sysconf}}{792} -\entry {\code {sysctl}}{787} +\entry {\code {syscall}}{705} +\entry {\code {sysconf}}{800} +\entry {\code {sysctl}}{795} \entry {\code {syslog}}{487} -\entry {\code {system}}{703} -\entry {\code {sysv_signal}}{622} +\entry {\code {system}}{711} +\entry {\code {sysv_signal}}{630} \initial {T} \entry {\code {tan}}{494} \entry {\code {tanf}}{494} @@ -1163,79 +1176,79 @@ \entry {\code {tcflow}}{478} \entry {\code {tcflush}}{478} \entry {\code {tcgetattr}}{460} -\entry {\code {tcgetpgrp}}{732} -\entry {\code {tcgetsid}}{733} +\entry {\code {tcgetpgrp}}{740} +\entry {\code {tcgetsid}}{741} \entry {\code {tcsendbreak}}{477} \entry {\code {tcsetattr}}{460} -\entry {\code {tcsetpgrp}}{733} +\entry {\code {tcsetpgrp}}{741} \entry {\code {tdelete}}{211} \entry {\code {tdestroy}}{211} \entry {\code {telldir}}{368} -\entry {\code {TEMP_FAILURE_RETRY}}{637} -\entry {\code {tempnam}}{399} +\entry {\code {TEMP_FAILURE_RETRY}}{645} +\entry {\code {tempnam}}{400} \entry {\code {textdomain}}{192} \entry {\code {tfind}}{211} \entry {\code {tgamma}}{504} \entry {\code {tgammaf}}{504} \entry {\code {tgammal}}{504} -\entry {\code {time}}{556} -\entry {\code {timegm}}{561} -\entry {\code {timelocal}}{561} -\entry {\code {times}}{555} -\entry {\code {tmpfile}}{398} -\entry {\code {tmpfile64}}{398} -\entry {\code {tmpnam}}{398} -\entry {\code {tmpnam_r}}{399} +\entry {\code {time}}{558} +\entry {\code {timegm}}{563} +\entry {\code {timelocal}}{563} +\entry {\code {times}}{557} +\entry {\code {tmpfile}}{399} +\entry {\code {tmpfile64}}{399} +\entry {\code {tmpnam}}{399} +\entry {\code {tmpnam_r}}{400} \entry {\code {toascii}}{69} \entry {\code {tolower}}{69} \entry {\code {toupper}}{69} \entry {\code {towctrans}}{75} \entry {\code {towlower}}{75} \entry {\code {towupper}}{75} -\entry {\code {trunc}}{536} -\entry {\code {truncate}}{395} -\entry {\code {truncate64}}{395} -\entry {\code {truncf}}{536} -\entry {\code {truncl}}{536} -\entry {\code {tryagain}}{737} +\entry {\code {trunc}}{538} +\entry {\code {truncate}}{396} +\entry {\code {truncate64}}{396} +\entry {\code {truncf}}{538} +\entry {\code {truncl}}{538} +\entry {\code {tryagain}}{745} \entry {\code {tsearch}}{210} \entry {\code {ttyname}}{457} \entry {\code {ttyname_r}}{457} \entry {\code {twalk}}{212} -\entry {\code {tzset}}{579} +\entry {\code {tzset}}{581} \initial {U} -\entry {\code {ulimit}}{590} -\entry {\code {umask}}{390} -\entry {\code {umount}}{786} -\entry {\code {umount2}}{786} -\entry {\code {uname}}{776} -\entry {\code {unavail}}{737} +\entry {\code {ulimit}}{592} +\entry {\code {umask}}{391} +\entry {\code {umount}}{794} +\entry {\code {umount2}}{794} +\entry {\code {uname}}{784} +\entry {\code {unavail}}{745} \entry {\code {ungetc}}{256} \entry {\code {ungetwc}}{257} -\entry {\code {unlink}}{376} +\entry {\code {unlink}}{377} \entry {\code {unlockpt}}{481} -\entry {\code {unsetenv}}{694} -\entry {\code {updwtmp}}{759} -\entry {\code {utime}}{394} -\entry {\code {utimes}}{394} -\entry {\code {utmpname}}{759} -\entry {\code {utmpxname}}{761} +\entry {\code {unsetenv}}{702} +\entry {\code {updwtmp}}{767} +\entry {\code {utime}}{395} +\entry {\code {utimes}}{395} +\entry {\code {utmpname}}{767} +\entry {\code {utmpxname}}{769} \initial {V} -\entry {\code {va_alist}}{852} -\entry {\code {va_arg}}{850} -\entry {\code {va_dcl}}{852} -\entry {\code {va_end}}{850} -\entry {\code {va_start}}{850, 852} +\entry {\code {va_alist}}{860} +\entry {\code {va_arg}}{858} +\entry {\code {va_dcl}}{860} +\entry {\code {va_end}}{858} +\entry {\code {va_start}}{858, 860} \entry {\code {valloc}}{39} \entry {\code {vasprintf}}{271} \entry {\code {versionsort}}{369} \entry {\code {versionsort64}}{369} -\entry {\code {vfork}}{705} +\entry {\code {vfork}}{713} \entry {\code {vfprintf}}{271} \entry {\code {vfscanf}}{290} \entry {\code {vfwprintf}}{271} \entry {\code {vfwscanf}}{290} -\entry {\code {vlimit}}{591} +\entry {\code {vlimit}}{593} \entry {\code {vprintf}}{271} \entry {\code {vscanf}}{290} \entry {\code {vsnprintf}}{271} @@ -1244,15 +1257,15 @@ \entry {\code {vswprintf}}{271} \entry {\code {vswscanf}}{290} \entry {\code {vsyslog}}{490} -\entry {\code {vtimes}}{586} +\entry {\code {vtimes}}{588} \entry {\code {vwprintf}}{271} \entry {\code {vwscanf}}{290} \initial {W} -\entry {\code {wait}}{710} -\entry {\code {wait3}}{712} -\entry {\code {wait4}}{710} -\entry {\code {waitpid}}{708} -\entry {\code {WCOREDUMP}}{711} +\entry {\code {wait}}{718} +\entry {\code {wait3}}{720} +\entry {\code {wait4}}{718} +\entry {\code {waitpid}}{716} +\entry {\code {WCOREDUMP}}{719} \entry {\code {wcpcpy}}{86} \entry {\code {wcpncpy}}{86} \entry {\code {wcrtomb}}{128} @@ -1265,7 +1278,7 @@ \entry {\code {wcscpy}}{84} \entry {\code {wcscspn}}{103} \entry {\code {wcsdup}}{85} -\entry {\code {wcsftime}}{569} +\entry {\code {wcsftime}}{571} \entry {\code {wcslen}}{80} \entry {\code {wcsncasecmp}}{94} \entry {\code {wcsncat}}{91} @@ -1278,43 +1291,43 @@ \entry {\code {wcsrtombs}}{131} \entry {\code {wcsspn}}{103} \entry {\code {wcsstr}}{102} -\entry {\code {wcstod}}{548} -\entry {\code {wcstof}}{548} -\entry {\code {wcstoimax}}{545} +\entry {\code {wcstod}}{550} +\entry {\code {wcstof}}{550} +\entry {\code {wcstoimax}}{547} \entry {\code {wcstok}}{105} -\entry {\code {wcstol}}{543} -\entry {\code {wcstold}}{548} -\entry {\code {wcstoll}}{544} +\entry {\code {wcstol}}{545} +\entry {\code {wcstold}}{550} +\entry {\code {wcstoll}}{546} \entry {\code {wcstombs}}{137} -\entry {\code {wcstoq}}{544} -\entry {\code {wcstoul}}{544} -\entry {\code {wcstoull}}{545} -\entry {\code {wcstoumax}}{545} -\entry {\code {wcstouq}}{545} +\entry {\code {wcstoq}}{546} +\entry {\code {wcstoul}}{546} +\entry {\code {wcstoull}}{547} +\entry {\code {wcstoumax}}{547} +\entry {\code {wcstouq}}{547} \entry {\code {wcswcs}}{102} \entry {\code {wcsxfrm}}{97} \entry {\code {wctob}}{125} \entry {\code {wctomb}}{135} \entry {\code {wctrans}}{74} \entry {\code {wctype}}{70} -\entry {\code {WEXITSTATUS}}{711} -\entry {\code {WIFEXITED}}{711} -\entry {\code {WIFSIGNALED}}{711} -\entry {\code {WIFSTOPPED}}{712} +\entry {\code {WEXITSTATUS}}{719} +\entry {\code {WIFEXITED}}{719} +\entry {\code {WIFSIGNALED}}{719} +\entry {\code {WIFSTOPPED}}{720} \entry {\code {wmemchr}}{100} \entry {\code {wmemcmp}}{92} \entry {\code {wmemcpy}}{81} \entry {\code {wmemmove}}{83} \entry {\code {wmempcpy}}{82} \entry {\code {wmemset}}{83} -\entry {\code {wordexp}}{227} -\entry {\code {wordfree}}{228} +\entry {\code {wordexp}}{228} +\entry {\code {wordfree}}{229} \entry {\code {wprintf}}{267} \entry {\code {write}}{318} \entry {\code {writev}}{326} \entry {\code {wscanf}}{289} -\entry {\code {WSTOPSIG}}{712} -\entry {\code {WTERMSIG}}{711} +\entry {\code {WSTOPSIG}}{720} +\entry {\code {WTERMSIG}}{719} \initial {Y} \entry {\code {y0}}{504} \entry {\code {y0f}}{504} diff -durpNa glibc-2.2.2/manual/libc.info glibc-2.2.3/manual/libc.info --- glibc-2.2.2/manual/libc.info Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info Wed Apr 25 14:55:23 2001 @@ -33,776 +33,778 @@ accuracy by the Foundation.  Indirect: libc.info-1: 1272 -libc.info-2: 61251 -libc.info-3: 106360 -libc.info-4: 155809 -libc.info-5: 205787 -libc.info-6: 252544 -libc.info-7: 300409 -libc.info-8: 349283 -libc.info-9: 391324 -libc.info-10: 439988 -libc.info-11: 486735 -libc.info-12: 530234 -libc.info-13: 571951 -libc.info-14: 618921 -libc.info-15: 667780 -libc.info-16: 715643 -libc.info-17: 765212 -libc.info-18: 813843 -libc.info-19: 862947 -libc.info-20: 908766 -libc.info-21: 949967 -libc.info-22: 994668 -libc.info-23: 1044215 -libc.info-24: 1091654 -libc.info-25: 1139430 -libc.info-26: 1188521 -libc.info-27: 1237881 -libc.info-28: 1286523 -libc.info-29: 1336486 -libc.info-30: 1385736 -libc.info-31: 1427222 -libc.info-32: 1474608 -libc.info-33: 1522037 -libc.info-34: 1564652 -libc.info-35: 1610942 -libc.info-36: 1659923 -libc.info-37: 1705918 -libc.info-38: 1755900 -libc.info-39: 1805365 -libc.info-40: 1854857 -libc.info-41: 1902841 -libc.info-42: 1952476 -libc.info-43: 2001853 -libc.info-44: 2050235 -libc.info-45: 2097679 -libc.info-46: 2147368 -libc.info-47: 2195197 -libc.info-48: 2243430 -libc.info-49: 2292350 -libc.info-50: 2323179 -libc.info-51: 2528717 -libc.info-52: 2573948 -libc.info-53: 2618159 -libc.info-54: 2681444 -libc.info-55: 2689108 -libc.info-56: 2770080 -libc.info-57: 2834287 +libc.info-2: 61325 +libc.info-3: 106434 +libc.info-4: 155883 +libc.info-5: 205861 +libc.info-6: 252618 +libc.info-7: 300483 +libc.info-8: 349357 +libc.info-9: 391398 +libc.info-10: 440064 +libc.info-11: 486811 +libc.info-12: 530310 +libc.info-13: 572027 +libc.info-14: 619160 +libc.info-15: 669075 +libc.info-16: 716938 +libc.info-17: 765716 +libc.info-18: 814355 +libc.info-19: 863327 +libc.info-20: 909102 +libc.info-21: 950303 +libc.info-22: 995004 +libc.info-23: 1044551 +libc.info-24: 1092148 +libc.info-25: 1138374 +libc.info-26: 1187352 +libc.info-27: 1236080 +libc.info-28: 1284752 +libc.info-29: 1332695 +libc.info-30: 1381687 +libc.info-31: 1428321 +libc.info-32: 1476759 +libc.info-33: 1522610 +libc.info-34: 1570391 +libc.info-35: 1616681 +libc.info-36: 1665662 +libc.info-37: 1711000 +libc.info-38: 1760433 +libc.info-39: 1807431 +libc.info-40: 1857053 +libc.info-41: 1901453 +libc.info-42: 1950851 +libc.info-43: 1997050 +libc.info-44: 2046345 +libc.info-45: 2095962 +libc.info-46: 2145425 +libc.info-47: 2194599 +libc.info-48: 2243561 +libc.info-49: 2289420 +libc.info-50: 2332600 +libc.info-51: 2342000 +libc.info-52: 2549959 +libc.info-53: 2595140 +libc.info-54: 2639351 +libc.info-55: 2702696 +libc.info-56: 2710473 +libc.info-57: 2792133 +libc.info-58: 2856397  Tag Table: (Indirect) Node: Top1272 -Node: Introduction61251 -Node: Getting Started62600 -Node: Standards and Portability64059 -Node: ISO C65507 -Node: POSIX67024 -Node: Berkeley Unix68761 -Node: SVID69525 -Node: XPG70525 -Node: Using the Library71466 -Node: Header Files72189 -Node: Macro Definitions76140 -Node: Reserved Names78485 -Node: Feature Test Macros83164 -Node: Roadmap to the Manual93948 -Node: Error Reporting101232 -Node: Checking for Errors102149 -Node: Error Codes106360 -Node: Error Messages125366 -Node: Memory131062 -Node: Memory Concepts131919 -Node: Memory Allocation137587 -Node: Memory Allocation and C138476 -Node: Unconstrained Allocation142025 -Node: Basic Allocation143445 -Node: Malloc Examples145145 -Node: Freeing after Malloc147112 -Node: Changing Block Size148927 -Node: Allocating Cleared Space151530 -Node: Efficiency and Malloc152538 -Node: Aligned Memory Blocks153637 -Node: Malloc Tunable Parameters155809 -Node: Heap Consistency Checking157471 -Node: Hooks for Malloc162571 -Node: Statistics of Malloc168769 -Node: Summary of Malloc170727 -Node: Allocation Debugging172889 -Node: Tracing malloc173992 -Node: Using the Memory Debugger175842 -Node: Tips for the Memory Debugger177728 -Node: Interpreting the traces179056 -Node: Obstacks182591 -Node: Creating Obstacks184205 -Node: Preparing for Obstacks186104 -Node: Allocation in an Obstack188847 -Node: Freeing Obstack Objects191254 -Node: Obstack Functions192588 -Node: Growing Objects194818 -Node: Extra Fast Growing199063 -Node: Status of an Obstack202682 -Node: Obstacks Data Alignment204101 -Node: Obstack Chunks205787 -Node: Summary of Obstacks208142 -Node: Variable Size Automatic211556 -Node: Alloca Example213082 -Node: Advantages of Alloca214203 -Node: Disadvantages of Alloca216090 -Node: GNU C Variable-Size Arrays216833 -Node: Resizing the Data Segment217991 -Node: Locking Pages220079 -Node: Why Lock Pages220841 -Node: Locked Memory Details222469 -Node: Page Lock Functions224725 -Node: Character Handling230588 -Node: Classification of Characters232043 -Node: Case Conversion235887 -Node: Classification of Wide Characters237777 -Node: Using Wide Char Classes245477 -Node: Wide Character Case Conversion247788 -Node: String and Array Utilities250480 -Node: Representation of Strings252544 -Node: String/Array Conventions258066 -Node: String Length261000 -Node: Copying and Concatenation264799 -Node: String/Array Comparison290266 -Node: Collation Functions300409 -Node: Search Functions310614 -Node: Finding Tokens in a String322734 -Node: strfry334932 -Node: Trivial Encryption335962 -Node: Encode Binary Data337420 -Node: Argz and Envz Vectors342122 -Node: Argz Functions342722 -Node: Envz Functions349283 -Node: Character Set Handling352333 -Node: Extended Char Intro353486 -Node: Charset Function Overview366474 -Node: Restartable multibyte conversion367479 -Node: Selecting the Conversion369590 -Node: Keeping the state372007 -Node: Converting a Character375222 -Node: Converting Strings391324 -Node: Multibyte Conversion Example401361 -Node: Non-reentrant Conversion404347 -Node: Non-reentrant Character Conversion405973 -Node: Non-reentrant String Conversion410675 -Node: Shift State413661 -Node: Generic Charset Conversion416324 -Node: Generic Conversion Interface419452 -Node: iconv Examples429319 -Node: Other iconv Implementations434654 -Node: glibc iconv Implementation439988 -Node: Locales479393 -Node: Effects of Locale480993 -Node: Choosing Locale482922 -Node: Locale Categories484296 -Node: Setting the Locale486735 -Node: Standard Locales491287 -Node: Locale Information492576 -Node: The Lame Way to Locale Data494292 -Node: General Numeric496163 -Node: Currency Symbol499142 -Node: Sign of Money Amount503330 -Node: The Elegant and Fast Way505460 -Node: Formatting Numbers517498 -Node: Message Translation526890 -Node: Message catalogs a la X/Open528936 -Node: The catgets Functions530234 -Node: The message catalog files539255 -Node: The gencat program546004 -Node: Common Usage549138 -Node: The Uniforum approach556264 -Node: Message catalogs with gettext557758 -Node: Translation with gettext558793 -Node: Locating gettext catalog565088 -Node: Advanced gettext functions571951 -Ref: Advanced gettext functions-Footnote-1581646 -Node: Charset conversion in gettext581738 -Node: GUI program problems584227 -Node: Using gettextized software589761 -Node: Helper programs for gettext598460 -Node: Searching and Sorting600224 -Node: Comparison Functions601139 -Node: Array Search Function602356 -Node: Array Sort Function605700 -Node: Search/Sort Example607831 -Node: Hash Search Function611322 -Node: Tree Search Function618921 -Node: Pattern Matching625836 -Node: Wildcard Matching626638 -Node: Globbing629516 -Node: Calling Glob630380 -Node: Flags for Globbing640362 -Node: More Flags for Globbing643892 -Node: Regular Expressions650022 -Node: POSIX Regexp Compilation651006 -Node: Flags for POSIX Regexps655121 -Node: Matching POSIX Regexps656028 -Node: Regexp Subexpressions658189 -Node: Subexpression Complications660243 -Node: Regexp Cleanup662606 -Node: Word Expansion664932 -Node: Expansion Stages666287 -Node: Calling Wordexp667780 -Node: Flags for Wordexp671743 -Node: Wordexp Example673696 -Node: Tilde Expansion675492 -Node: Variable Substitution676564 -Node: I/O Overview680679 -Node: I/O Concepts682193 -Node: Streams and File Descriptors683338 -Node: File Position686425 -Node: File Names688557 -Node: Directories689443 -Node: File Name Resolution691180 -Node: File Name Errors694108 -Node: File Name Portability695648 -Node: I/O on Streams697640 -Node: Streams699862 -Node: Standard Streams701203 -Node: Opening Streams702987 -Node: Closing Streams713090 -Node: Streams and Threads715643 -Node: Streams and I18N724634 -Node: Simple Output730797 -Node: Character Input736498 -Node: Line Input742008 -Node: Unreading748776 -Node: Unreading Idea749585 -Node: How Unread750411 -Node: Block Input/Output753066 -Node: Formatted Output755932 -Node: Formatted Output Basics757699 -Node: Output Conversion Syntax760192 -Node: Table of Output Conversions765212 -Node: Integer Conversions768218 -Node: Floating-Point Conversions773751 -Node: Other Output Conversions779547 -Node: Formatted Output Functions783353 -Node: Dynamic Output789295 -Node: Variable Arguments Output791150 -Node: Parsing a Template String797334 -Node: Example of Parsing801165 -Node: Customizing Printf803453 -Node: Registering New Conversions805372 -Node: Conversion Specifier Options807545 -Node: Defining the Output Handler811382 -Node: Printf Extension Example813843 -Node: Predefined Printf Handlers816252 -Node: Formatted Input819663 -Node: Formatted Input Basics820742 -Node: Input Conversion Syntax823422 -Node: Table of Input Conversions826784 -Node: Numeric Input Conversions830954 -Node: String Input Conversions835409 -Node: Dynamic String Input840529 -Node: Other Input Conversions841719 -Node: Formatted Input Functions843364 -Node: Variable Arguments Input846205 -Node: EOF and Errors848560 -Node: Error Recovery851562 -Node: Binary Streams853392 -Node: File Positioning855916 -Node: Portable Positioning862947 -Node: Stream Buffering868482 -Node: Buffering Concepts870081 -Node: Flushing Buffers871444 -Node: Controlling Buffering874595 -Node: Other Kinds of Streams880200 -Node: String Streams881489 -Node: Obstack Streams885623 -Node: Custom Streams887666 -Node: Streams and Cookies888383 -Node: Hook Functions891453 -Node: Formatted Messages893839 -Node: Printing Formatted Messages894504 -Node: Adding Severity Classes900948 -Node: Example902555 -Node: Low-Level I/O905758 -Node: Opening and Closing Files908766 -Node: I/O Primitives916742 -Node: File Position Primitive930840 -Node: Descriptors and Streams938154 -Node: Stream/Descriptor Precautions940838 -Node: Linked Channels942044 -Node: Independent Channels943272 -Node: Cleaning Streams945175 -Node: Scatter-Gather947378 -Node: Memory-mapped I/O949967 -Node: Waiting for I/O959428 -Node: Synchronizing I/O967185 -Node: Asynchronous I/O970619 -Node: Asynchronous Reads/Writes978662 -Node: Status of AIO Operations991098 -Node: Synchronizing AIO Operations994668 -Node: Cancel AIO Operations1001067 -Node: Configuration of AIO1004538 -Node: Control Operations1006634 -Node: Duplicating Descriptors1009326 -Node: Descriptor Flags1013582 -Node: File Status Flags1016983 -Node: Access Modes1018436 -Node: Open-time Flags1020725 -Node: Operating Modes1025441 -Node: Getting File Status Flags1028206 -Node: File Locks1030813 -Node: Interrupt Input1039708 -Node: IOCTLs1042138 -Ref: IOCTLs-Footnote-11044118 -Node: File System Interface1044215 -Node: Working Directory1045744 -Node: Accessing Directories1050748 -Node: Directory Entries1052175 -Node: Opening a Directory1055429 -Node: Reading/Closing Directory1057872 -Node: Simple Directory Lister1062543 -Node: Random Access Directory1063562 -Node: Scanning Directory Content1065064 -Node: Simple Directory Lister Mark II1069519 -Node: Working with Directory Trees1070628 -Node: Hard Links1082171 -Node: Symbolic Links1084969 -Node: Deleting Files1088736 -Node: Renaming Files1091654 -Node: Creating Directories1095258 -Node: File Attributes1097010 -Node: Attribute Meanings1098534 -Node: Reading Attributes1107756 -Node: Testing File Type1111826 -Node: File Owner1115979 -Node: Permission Bits1119631 -Node: Access Permission1124949 -Node: Setting Permissions1126091 -Node: Testing File Access1131297 -Node: File Times1134959 -Node: File Size1139430 -Node: Making Special Files1145853 -Node: Temporary Files1147529 -Node: Pipes and FIFOs1156749 -Node: Creating a Pipe1158332 -Node: Pipe to a Subprocess1161625 -Node: FIFO Special Files1164632 -Node: Pipe Atomicity1166204 -Node: Sockets1167087 -Node: Socket Concepts1169127 -Node: Communication Styles1173367 -Node: Socket Addresses1175217 -Node: Address Formats1177253 -Node: Setting Address1180454 -Node: Reading Address1182176 -Node: Interface Naming1183937 -Node: Local Namespace1186344 -Node: Local Namespace Concepts1187004 -Node: Local Namespace Details1188521 -Node: Local Socket Example1190468 -Node: Internet Namespace1191894 -Node: Internet Address Formats1194117 -Node: Host Addresses1196268 -Node: Abstract Host Addresses1197436 -Node: Host Address Data Type1201954 -Node: Host Address Functions1205077 -Node: Host Names1209429 -Node: Ports1218700 -Node: Services Database1220738 -Node: Byte Order1223561 -Node: Protocols Database1225869 -Node: Inet Example1229411 -Node: Misc Namespaces1231421 -Node: Open/Close Sockets1232167 -Node: Creating a Socket1232665 -Node: Closing a Socket1234346 -Node: Socket Pairs1235872 -Node: Connections1237881 -Node: Connecting1238975 -Node: Listening1241802 -Node: Accepting Connections1243875 -Node: Who is Connected1247006 -Node: Transferring Data1248105 -Node: Sending Data1249210 -Node: Receiving Data1251728 -Node: Socket Data Options1253464 -Node: Byte Stream Example1254327 -Node: Server Example1256384 -Node: Out-of-Band Data1260400 -Node: Datagrams1266311 -Node: Sending Datagrams1267340 -Node: Receiving Datagrams1269265 -Node: Datagram Example1271331 -Node: Example Receiver1273345 -Node: Inetd1275909 -Node: Inetd Servers1276718 -Node: Configuring Inetd1277960 -Node: Socket Options1280629 -Node: Socket Option Functions1281337 -Node: Socket-Level Options1282894 -Node: Networks Database1286523 -Node: Low-Level Terminal Interface1289407 -Node: Is It a Terminal1290877 -Node: I/O Queues1292780 -Node: Canonical or Not1294737 -Node: Terminal Modes1296583 -Node: Mode Data Types1298152 -Node: Mode Functions1299980 -Node: Setting Modes1303912 -Node: Input Modes1305909 -Node: Output Modes1311175 -Node: Control Modes1312787 -Node: Local Modes1316876 -Node: Line Speed1323189 -Node: Special Characters1327366 -Node: Editing Characters1329280 -Node: Signal Characters1333620 -Node: Start/Stop Characters1336486 -Node: Other Special1338356 -Node: Noncanonical Input1340170 -Node: BSD Terminal Modes1344983 -Node: Line Control1346455 -Node: Noncanon Example1351171 -Node: Pseudo-Terminals1353398 -Node: Allocation1354310 -Node: Pseudo-Terminal Pairs1359099 -Node: Syslog1361615 -Node: Overview of Syslog1362564 -Node: Submitting Syslog Messages1366748 -Node: openlog1367566 -Node: syslog; vsyslog1370922 -Node: closelog1375119 -Node: setlogmask1375766 -Node: Syslog Example1377609 -Node: Mathematics1378272 -Node: Mathematical Constants1379994 -Node: Trig Functions1382001 -Node: Inverse Trig Functions1385736 -Node: Exponents and Logarithms1389538 -Node: Hyperbolic Functions1397730 -Node: Special Functions1401770 -Node: Errors in Math Functions1406308 -Node: Pseudo-Random Numbers1420733 -Node: ISO Random1422974 -Node: BSD Random1424906 -Node: SVID Random1427222 -Node: FP Function Optimizations1440414 -Node: Arithmetic1442501 -Node: Integers1443780 -Node: Integer Division1446796 -Node: Floating Point Numbers1450481 -Node: Floating Point Classes1452223 -Node: Floating Point Errors1456621 -Node: FP Exceptions1457118 -Node: Infinity and NaN1461479 -Node: Status bit operations1464552 -Node: Math Error Reporting1468694 -Node: Rounding1471020 -Node: Control Functions1474608 -Node: Arithmetic Functions1479430 -Node: Absolute Value1480298 -Node: Normalization Functions1482358 -Node: Rounding Functions1486432 -Node: Remainder Functions1490814 -Node: FP Bit Twiddling1492958 -Node: FP Comparison Functions1496070 -Node: Misc FP Arithmetic1498783 -Node: Complex Numbers1501525 -Node: Operations on Complex1503230 -Node: Parsing of Numbers1505574 -Node: Parsing of Integers1506266 -Node: Parsing of Floats1516871 -Node: System V Number Conversion1522037 -Node: Date and Time1527353 -Node: Time Basics1528083 -Node: Elapsed Time1529963 -Node: Processor And CPU Time1533515 -Node: CPU Time1535386 -Node: Processor Time1537159 -Node: Calendar Time1539559 -Node: Simple Calendar Time1541492 -Node: High-Resolution Calendar1543896 -Node: Broken-down Time1549257 -Node: High Accuracy Clock1557216 -Node: Formatting Calendar Time1564652 -Node: Parsing Date and Time1579961 -Node: Low-Level Time String Parsing1580804 -Node: General Time String Parsing1593823 -Node: TZ Variable1600951 -Node: Time Zone Functions1606994 -Node: Time Functions Example1609834 -Node: Setting an Alarm1610942 -Node: Sleeping1616189 -Node: Resource Usage And Limitation1620792 -Node: Resource Usage1621469 -Node: Limits on Resources1627051 -Node: Priority1636269 -Node: Absolute Priority1638631 -Node: Realtime Scheduling1643727 -Node: Basic Scheduling Functions1647175 -Node: Traditional Scheduling1655108 -Node: Traditional Scheduling Intro1655661 -Node: Traditional Scheduling Functions1659923 -Node: Memory Resources1663585 -Node: Memory Subsystem1664435 -Node: Query Memory Parameters1666815 -Node: Processor Resources1670462 -Node: Non-Local Exits1672579 -Node: Non-Local Intro1673215 -Node: Non-Local Details1676946 -Node: Non-Local Exits and Signals1680022 -Node: Signal Handling1681493 -Node: Concepts of Signals1683527 -Node: Kinds of Signals1684091 -Node: Signal Generation1685486 -Node: Delivery of Signal1687753 -Node: Standard Signals1690607 -Node: Program Error Signals1692200 -Node: Termination Signals1699658 -Node: Alarm Signals1703496 -Node: Asynchronous I/O Signals1704728 -Node: Job Control Signals1705918 -Node: Operation Error Signals1710518 -Node: Miscellaneous Signals1712457 -Node: Signal Messages1714151 -Node: Signal Actions1716036 -Node: Basic Signal Handling1716981 -Node: Advanced Signal Handling1723054 -Node: Signal and Sigaction1726010 -Node: Sigaction Function Example1727762 -Node: Flags for Sigaction1730078 -Node: Initial Signal Actions1732456 -Node: Defining Handlers1733837 -Node: Handler Returns1736022 -Node: Termination in Handler1738072 -Node: Longjmp in Handler1739511 -Node: Signals in Handler1741615 -Node: Merged Signals1743735 -Node: Nonreentrancy1749448 -Node: Atomic Data Access1754854 -Node: Non-atomic Example1755900 -Node: Atomic Types1757677 -Node: Atomic Usage1758696 -Node: Interrupted Primitives1760166 -Node: Generating Signals1763465 -Node: Signaling Yourself1764058 -Node: Signaling Another Process1766041 -Node: Permission for kill1769417 -Node: Kill Example1771213 -Node: Blocking Signals1773565 -Node: Why Block1775337 -Node: Signal Sets1776873 -Node: Process Signal Mask1779899 -Node: Testing for Delivery1782906 -Node: Blocking for Handler1784164 -Node: Checking for Pending Signals1786583 -Node: Remembering a Signal1788595 -Node: Waiting for a Signal1792149 -Node: Using Pause1792694 -Node: Pause Problems1794319 -Node: Sigsuspend1796043 -Node: Signal Stack1798754 -Node: BSD Signal Handling1804091 -Node: BSD Handler1805365 -Node: Blocking in BSD1807797 -Node: Program Basics1809248 -Node: Program Arguments1811232 -Node: Argument Syntax1813231 -Node: Parsing Program Arguments1815905 -Node: Getopt1817008 -Node: Using Getopt1817646 -Node: Example of Getopt1821765 -Node: Getopt Long Options1824503 -Node: Getopt Long Option Example1829739 -Node: Argp1832860 -Node: Argp Global Variables1836210 -Node: Argp Parsers1838232 -Node: Argp Option Vectors1841579 -Node: Argp Option Flags1844814 -Node: Argp Parser Functions1846831 -Node: Argp Special Keys1849530 -Node: Argp Helper Functions1854857 -Node: Argp Parsing State1857914 -Node: Argp Children1861422 -Node: Argp Flags1863482 -Node: Argp Help Filtering1865799 -Node: Argp Help Filter Keys1867014 -Node: Argp Help1867887 -Node: Argp Help Flags1869075 -Node: Argp Examples1871369 -Node: Argp Example 11871839 -Node: Argp Example 21872643 -Node: Argp Example 31875587 -Node: Argp Example 41882632 -Node: Argp User Customization1890334 -Node: Suboptions1891946 -Node: Suboptions Example1893888 -Node: Environment Variables1896057 -Node: Environment Access1897922 -Node: Standard Environment1902841 -Node: System Calls1907013 -Node: Program Termination1910569 -Node: Normal Termination1911778 -Node: Exit Status1913175 -Node: Cleanups on Exit1916534 -Node: Aborting a Program1918351 -Node: Termination Internals1919250 -Node: Processes1921430 -Node: Running a Command1923452 -Node: Process Creation Concepts1925477 -Node: Process Identification1927486 -Node: Creating a Process1928410 -Node: Executing a File1932030 -Node: Process Completion1939165 -Node: Process Completion Status1945431 -Node: BSD Wait Functions1947074 -Node: Process Creation Example1948942 -Node: Job Control1951198 -Node: Concepts of Job Control1952476 -Node: Job Control is Optional1955830 -Node: Controlling Terminal1956879 -Node: Access to the Terminal1957786 -Node: Orphaned Process Groups1959389 -Node: Implementing a Shell1960380 -Node: Data Structures1961263 -Node: Initializing the Shell1963921 -Node: Launching Jobs1967657 -Node: Foreground and Background1975110 -Node: Stopped and Terminated Jobs1978229 -Node: Continuing Stopped Jobs1983439 -Node: Missing Pieces1985071 -Node: Functions for Job Control1986695 -Node: Identifying the Terminal1987175 -Node: Process Group Functions1988748 -Node: Terminal Access Functions1993758 -Node: Name Service Switch1997235 -Node: NSS Basics1998566 -Node: NSS Configuration File2000155 -Node: Services in the NSS configuration2001853 -Node: Actions in the NSS configuration2003134 -Node: Notes on NSS Configuration File2006295 -Node: NSS Module Internals2008172 -Node: NSS Module Names2008868 -Ref: NSS Module Names-Footnote-12010909 -Ref: NSS Module Names-Footnote-22011063 -Node: NSS Modules Interface2011241 -Node: Extending NSS2015939 -Node: Adding another Service to NSS2016870 -Node: NSS Module Function Internals2019101 -Node: Users and Groups2024005 -Node: User and Group IDs2026616 -Node: Process Persona2027524 -Node: Why Change Persona2029209 -Node: How Change Persona2031090 -Node: Reading Persona2032977 -Node: Setting User ID2035247 -Node: Setting Groups2038110 -Node: Enable/Disable Setuid2042212 -Node: Setuid Program Example2044246 -Node: Tips for Setuid2047720 -Node: Who Logged In2050235 -Node: User Accounting Database2052615 -Node: Manipulating the Database2053799 -Node: XPG Functions2066127 -Node: Logging In and Out2070542 -Node: User Database2072658 -Node: User Data Structure2073320 -Node: Lookup User2074577 -Node: Scanning All Users2077141 -Node: Writing a User Entry2080095 -Node: Group Database2080994 -Node: Group Data Structure2081570 -Node: Lookup Group2082333 -Node: Scanning All Groups2084834 -Node: Database Example2087864 -Node: Netgroup Database2090061 -Node: Netgroup Data2090472 -Node: Lookup Netgroup2092000 -Node: Netgroup Membership2095418 -Node: System Management2096748 -Node: Host Identification2097679 -Node: Platform Type2104158 -Node: Filesystem Handling2107463 -Node: Mount Information2108963 -Node: fstab2110982 -Node: mtab2116798 -Node: Other Mount Information2126090 -Node: Mount-Unmount-Remount2126604 -Node: System Parameters2136629 -Node: System Configuration2142162 -Node: General Limits2143733 -Node: System Options2147368 -Node: Version Supported2150700 -Node: Sysconf2152537 -Node: Sysconf Definition2153173 -Node: Constants for Sysconf2153845 -Node: Examples of Sysconf2166780 -Node: Minimums2167773 -Node: Limits for Files2170484 -Node: Options for Files2173485 -Node: File Minimums2175778 -Node: Pathconf2177998 -Node: Utility Limits2181373 -Node: Utility Minimums2183303 -Node: String Parameters2185055 -Node: Cryptographic Functions2188955 -Node: Legal Problems2190752 -Node: getpass2193027 -Node: crypt2195197 -Node: DES Encryption2199965 -Node: Debugging Support2206167 -Node: Backtraces2206809 -Node: POSIX Threads2211595 -Node: Basic Thread Operations2213199 -Node: Thread Attributes2217783 -Node: Cancellation2224740 -Node: Cleanup Handlers2228634 -Node: Mutexes2233772 -Node: Condition Variables2243430 -Node: POSIX Semaphores2250806 -Node: Thread-Specific Data2254687 -Node: Threads and Signal Handling2259320 -Node: Threads and Fork2263010 -Node: Streams and Fork2268437 -Node: Miscellaneous Thread Functions2270599 -Node: Language Features2277084 -Node: Consistency Checking2278010 -Node: Variadic Functions2282551 -Node: Why Variadic2283623 -Node: How Variadic2285587 -Node: Variadic Prototypes2286876 -Node: Receiving Arguments2288017 -Node: How Many Arguments2290688 -Node: Calling Variadics2292350 -Node: Argument Macros2294450 -Node: Variadic Example2297286 -Node: Old Varargs2298438 -Node: Null Pointer Constant2300113 -Node: Important Data Types2301198 -Node: Data Type Measurements2303762 -Node: Width of Type2304619 -Node: Range of Type2305525 -Node: Floating Type Macros2308793 -Node: Floating Point Concepts2310051 -Node: Floating Point Parameters2313779 -Node: IEEE Floating Point2320731 -Node: Structure Measurement2322484 -Node: Library Summary2323179 -Node: Installation2528717 -Node: Configuring and compiling2530406 -Node: Running make install2539711 -Node: Tools for Compilation2543769 -Node: Supported Configurations2547119 -Node: Linux2549286 -Node: Reporting Bugs2551432 -Node: Maintenance2554262 -Node: Source Layout2554645 -Node: Porting2558577 -Node: Hierarchy Conventions2566877 -Node: Porting to Unix2571933 -Node: Contributors2573948 -Node: Copying2591262 -Node: Concept Index2618159 -Node: Type Index2681444 -Node: Function Index2689108 -Node: Variable Index2770080 -Node: File Index2834287 +Node: Introduction61325 +Node: Getting Started62674 +Node: Standards and Portability64133 +Node: ISO C65581 +Node: POSIX67098 +Node: Berkeley Unix68835 +Node: SVID69599 +Node: XPG70599 +Node: Using the Library71540 +Node: Header Files72263 +Node: Macro Definitions76214 +Node: Reserved Names78559 +Node: Feature Test Macros83238 +Node: Roadmap to the Manual94022 +Node: Error Reporting101306 +Node: Checking for Errors102223 +Node: Error Codes106434 +Node: Error Messages125440 +Node: Memory131136 +Node: Memory Concepts131993 +Node: Memory Allocation137661 +Node: Memory Allocation and C138550 +Node: Unconstrained Allocation142099 +Node: Basic Allocation143519 +Node: Malloc Examples145219 +Node: Freeing after Malloc147186 +Node: Changing Block Size149001 +Node: Allocating Cleared Space151604 +Node: Efficiency and Malloc152612 +Node: Aligned Memory Blocks153711 +Node: Malloc Tunable Parameters155883 +Node: Heap Consistency Checking157545 +Node: Hooks for Malloc162645 +Node: Statistics of Malloc168843 +Node: Summary of Malloc170801 +Node: Allocation Debugging172963 +Node: Tracing malloc174066 +Node: Using the Memory Debugger175916 +Node: Tips for the Memory Debugger177802 +Node: Interpreting the traces179130 +Node: Obstacks182665 +Node: Creating Obstacks184279 +Node: Preparing for Obstacks186178 +Node: Allocation in an Obstack188921 +Node: Freeing Obstack Objects191328 +Node: Obstack Functions192662 +Node: Growing Objects194892 +Node: Extra Fast Growing199137 +Node: Status of an Obstack202756 +Node: Obstacks Data Alignment204175 +Node: Obstack Chunks205861 +Node: Summary of Obstacks208216 +Node: Variable Size Automatic211630 +Node: Alloca Example213156 +Node: Advantages of Alloca214277 +Node: Disadvantages of Alloca216164 +Node: GNU C Variable-Size Arrays216907 +Node: Resizing the Data Segment218065 +Node: Locking Pages220153 +Node: Why Lock Pages220915 +Node: Locked Memory Details222543 +Node: Page Lock Functions224799 +Node: Character Handling230662 +Node: Classification of Characters232117 +Node: Case Conversion235961 +Node: Classification of Wide Characters237851 +Node: Using Wide Char Classes245551 +Node: Wide Character Case Conversion247862 +Node: String and Array Utilities250554 +Node: Representation of Strings252618 +Node: String/Array Conventions258140 +Node: String Length261074 +Node: Copying and Concatenation264873 +Node: String/Array Comparison290340 +Node: Collation Functions300483 +Node: Search Functions310688 +Node: Finding Tokens in a String322808 +Node: strfry335006 +Node: Trivial Encryption336036 +Node: Encode Binary Data337494 +Node: Argz and Envz Vectors342196 +Node: Argz Functions342796 +Node: Envz Functions349357 +Node: Character Set Handling352407 +Node: Extended Char Intro353560 +Node: Charset Function Overview366548 +Node: Restartable multibyte conversion367553 +Node: Selecting the Conversion369664 +Node: Keeping the state372081 +Node: Converting a Character375296 +Node: Converting Strings391398 +Node: Multibyte Conversion Example401435 +Node: Non-reentrant Conversion404421 +Node: Non-reentrant Character Conversion406047 +Node: Non-reentrant String Conversion410749 +Node: Shift State413735 +Node: Generic Charset Conversion416398 +Node: Generic Conversion Interface419526 +Node: iconv Examples429393 +Node: Other iconv Implementations434730 +Node: glibc iconv Implementation440064 +Node: Locales479469 +Node: Effects of Locale481069 +Node: Choosing Locale482998 +Node: Locale Categories484372 +Node: Setting the Locale486811 +Node: Standard Locales491363 +Node: Locale Information492652 +Node: The Lame Way to Locale Data494368 +Node: General Numeric496239 +Node: Currency Symbol499218 +Node: Sign of Money Amount503406 +Node: The Elegant and Fast Way505536 +Node: Formatting Numbers517574 +Node: Message Translation526966 +Node: Message catalogs a la X/Open529012 +Node: The catgets Functions530310 +Node: The message catalog files539331 +Node: The gencat program546080 +Node: Common Usage549214 +Node: The Uniforum approach556340 +Node: Message catalogs with gettext557834 +Node: Translation with gettext558869 +Node: Locating gettext catalog565164 +Node: Advanced gettext functions572027 +Ref: Advanced gettext functions-Footnote-1581885 +Node: Charset conversion in gettext581977 +Node: GUI program problems584466 +Node: Using gettextized software590000 +Node: Helper programs for gettext598699 +Node: Searching and Sorting600463 +Node: Comparison Functions601378 +Node: Array Search Function602595 +Node: Array Sort Function605939 +Node: Search/Sort Example608070 +Node: Hash Search Function611561 +Node: Tree Search Function619160 +Node: Pattern Matching626075 +Node: Wildcard Matching626877 +Node: Globbing630811 +Node: Calling Glob631675 +Node: Flags for Globbing641657 +Node: More Flags for Globbing645187 +Node: Regular Expressions651317 +Node: POSIX Regexp Compilation652301 +Node: Flags for POSIX Regexps656416 +Node: Matching POSIX Regexps657323 +Node: Regexp Subexpressions659484 +Node: Subexpression Complications661538 +Node: Regexp Cleanup663901 +Node: Word Expansion666227 +Node: Expansion Stages667582 +Node: Calling Wordexp669075 +Node: Flags for Wordexp673038 +Node: Wordexp Example674991 +Node: Tilde Expansion676787 +Node: Variable Substitution677859 +Node: I/O Overview681974 +Node: I/O Concepts683488 +Node: Streams and File Descriptors684633 +Node: File Position687720 +Node: File Names689852 +Node: Directories690738 +Node: File Name Resolution692475 +Node: File Name Errors695403 +Node: File Name Portability696943 +Node: I/O on Streams698935 +Node: Streams701157 +Node: Standard Streams702498 +Node: Opening Streams704282 +Node: Closing Streams714385 +Node: Streams and Threads716938 +Node: Streams and I18N725929 +Node: Simple Output732092 +Node: Character Input737442 +Node: Line Input742688 +Node: Unreading749368 +Node: Unreading Idea750177 +Node: How Unread751003 +Node: Block Input/Output753658 +Node: Formatted Output756436 +Node: Formatted Output Basics758203 +Node: Output Conversion Syntax760696 +Node: Table of Output Conversions765716 +Node: Integer Conversions768722 +Node: Floating-Point Conversions774255 +Node: Other Output Conversions780051 +Node: Formatted Output Functions783857 +Node: Dynamic Output789807 +Node: Variable Arguments Output791662 +Node: Parsing a Template String797846 +Node: Example of Parsing801677 +Node: Customizing Printf803965 +Node: Registering New Conversions805884 +Node: Conversion Specifier Options808057 +Node: Defining the Output Handler811894 +Node: Printf Extension Example814355 +Node: Predefined Printf Handlers816764 +Node: Formatted Input820175 +Node: Formatted Input Basics821254 +Node: Input Conversion Syntax823934 +Node: Table of Input Conversions827296 +Node: Numeric Input Conversions831466 +Node: String Input Conversions835921 +Node: Dynamic String Input841041 +Node: Other Input Conversions842231 +Node: Formatted Input Functions843876 +Node: Variable Arguments Input846717 +Node: EOF and Errors849072 +Node: Error Recovery851986 +Node: Binary Streams853772 +Node: File Positioning856296 +Node: Portable Positioning863327 +Node: Stream Buffering868862 +Node: Buffering Concepts870461 +Node: Flushing Buffers871824 +Node: Controlling Buffering874931 +Node: Other Kinds of Streams880536 +Node: String Streams881825 +Node: Obstack Streams885959 +Node: Custom Streams888002 +Node: Streams and Cookies888719 +Node: Hook Functions891789 +Node: Formatted Messages894175 +Node: Printing Formatted Messages894840 +Node: Adding Severity Classes901284 +Node: Example902891 +Node: Low-Level I/O906094 +Node: Opening and Closing Files909102 +Node: I/O Primitives917078 +Node: File Position Primitive931176 +Node: Descriptors and Streams938490 +Node: Stream/Descriptor Precautions941174 +Node: Linked Channels942380 +Node: Independent Channels943608 +Node: Cleaning Streams945511 +Node: Scatter-Gather947714 +Node: Memory-mapped I/O950303 +Node: Waiting for I/O959764 +Node: Synchronizing I/O967521 +Node: Asynchronous I/O970955 +Node: Asynchronous Reads/Writes978998 +Node: Status of AIO Operations991434 +Node: Synchronizing AIO Operations995004 +Node: Cancel AIO Operations1001403 +Node: Configuration of AIO1004874 +Node: Control Operations1006970 +Node: Duplicating Descriptors1009662 +Node: Descriptor Flags1013918 +Node: File Status Flags1017319 +Node: Access Modes1018772 +Node: Open-time Flags1021061 +Node: Operating Modes1025777 +Node: Getting File Status Flags1028542 +Node: File Locks1031149 +Node: Interrupt Input1040044 +Node: IOCTLs1042474 +Ref: IOCTLs-Footnote-11044454 +Node: File System Interface1044551 +Node: Working Directory1046080 +Node: Accessing Directories1051084 +Node: Directory Entries1052511 +Node: Opening a Directory1055765 +Node: Reading/Closing Directory1058208 +Node: Simple Directory Lister1062879 +Node: Random Access Directory1063898 +Node: Scanning Directory Content1065400 +Node: Simple Directory Lister Mark II1069855 +Node: Working with Directory Trees1070964 +Node: Hard Links1082507 +Node: Symbolic Links1085305 +Node: Deleting Files1092148 +Node: Renaming Files1095066 +Node: Creating Directories1098670 +Node: File Attributes1100422 +Node: Attribute Meanings1101946 +Node: Reading Attributes1111168 +Node: Testing File Type1115238 +Node: File Owner1119394 +Node: Permission Bits1123046 +Node: Access Permission1128364 +Node: Setting Permissions1129506 +Node: Testing File Access1134712 +Node: File Times1138374 +Node: File Size1142845 +Node: Making Special Files1149268 +Node: Temporary Files1150944 +Node: Pipes and FIFOs1160164 +Node: Creating a Pipe1161747 +Node: Pipe to a Subprocess1165040 +Node: FIFO Special Files1168047 +Node: Pipe Atomicity1169619 +Node: Sockets1170502 +Node: Socket Concepts1172542 +Node: Communication Styles1176782 +Node: Socket Addresses1178632 +Node: Address Formats1180668 +Node: Setting Address1183869 +Node: Reading Address1185591 +Node: Interface Naming1187352 +Node: Local Namespace1189759 +Node: Local Namespace Concepts1190419 +Node: Local Namespace Details1191936 +Node: Local Socket Example1193883 +Node: Internet Namespace1195309 +Node: Internet Address Formats1197532 +Node: Host Addresses1199683 +Node: Abstract Host Addresses1200851 +Node: Host Address Data Type1205369 +Node: Host Address Functions1208492 +Node: Host Names1212844 +Node: Ports1222115 +Node: Services Database1224153 +Node: Byte Order1226976 +Node: Protocols Database1229284 +Node: Inet Example1232826 +Node: Misc Namespaces1234836 +Node: Open/Close Sockets1235582 +Node: Creating a Socket1236080 +Node: Closing a Socket1237761 +Node: Socket Pairs1239287 +Node: Connections1241296 +Node: Connecting1242390 +Node: Listening1245217 +Node: Accepting Connections1247290 +Node: Who is Connected1250421 +Node: Transferring Data1251520 +Node: Sending Data1252625 +Node: Receiving Data1255143 +Node: Socket Data Options1256879 +Node: Byte Stream Example1257742 +Node: Server Example1259799 +Node: Out-of-Band Data1263815 +Node: Datagrams1269726 +Node: Sending Datagrams1270755 +Node: Receiving Datagrams1272680 +Node: Datagram Example1274746 +Node: Example Receiver1276760 +Node: Inetd1279324 +Node: Inetd Servers1280133 +Node: Configuring Inetd1281375 +Node: Socket Options1284044 +Node: Socket Option Functions1284752 +Node: Socket-Level Options1286309 +Node: Networks Database1289938 +Node: Low-Level Terminal Interface1292822 +Node: Is It a Terminal1294292 +Node: I/O Queues1296195 +Node: Canonical or Not1298152 +Node: Terminal Modes1299998 +Node: Mode Data Types1301567 +Node: Mode Functions1303395 +Node: Setting Modes1307327 +Node: Input Modes1309324 +Node: Output Modes1314590 +Node: Control Modes1316202 +Node: Local Modes1320291 +Node: Line Speed1326604 +Node: Special Characters1330781 +Node: Editing Characters1332695 +Node: Signal Characters1337035 +Node: Start/Stop Characters1339901 +Node: Other Special1341771 +Node: Noncanonical Input1343585 +Node: BSD Terminal Modes1348398 +Node: Line Control1349870 +Node: Noncanon Example1354586 +Node: Pseudo-Terminals1356813 +Node: Allocation1357725 +Node: Pseudo-Terminal Pairs1362514 +Node: Syslog1365030 +Node: Overview of Syslog1365979 +Node: Submitting Syslog Messages1370163 +Node: openlog1370981 +Node: syslog; vsyslog1374337 +Node: closelog1378534 +Node: setlogmask1379181 +Node: Syslog Example1381024 +Node: Mathematics1381687 +Node: Mathematical Constants1383409 +Node: Trig Functions1385416 +Node: Inverse Trig Functions1389151 +Node: Exponents and Logarithms1392953 +Node: Hyperbolic Functions1401145 +Node: Special Functions1405185 +Node: Errors in Math Functions1409723 +Node: Pseudo-Random Numbers1424148 +Node: ISO Random1426389 +Node: BSD Random1428321 +Node: SVID Random1432903 +Node: FP Function Optimizations1446153 +Node: Arithmetic1448240 +Node: Integers1449519 +Node: Integer Division1452535 +Node: Floating Point Numbers1456220 +Node: Floating Point Classes1457962 +Node: Floating Point Errors1462360 +Node: FP Exceptions1462857 +Node: Infinity and NaN1467218 +Node: Status bit operations1470291 +Node: Math Error Reporting1474433 +Node: Rounding1476759 +Node: Control Functions1480347 +Node: Arithmetic Functions1485169 +Node: Absolute Value1486037 +Node: Normalization Functions1488097 +Node: Rounding Functions1492171 +Node: Remainder Functions1496553 +Node: FP Bit Twiddling1498697 +Node: FP Comparison Functions1501809 +Node: Misc FP Arithmetic1504522 +Node: Complex Numbers1507264 +Node: Operations on Complex1508969 +Node: Parsing of Numbers1511313 +Node: Parsing of Integers1512005 +Node: Parsing of Floats1522610 +Node: System V Number Conversion1527776 +Node: Date and Time1533092 +Node: Time Basics1533822 +Node: Elapsed Time1535702 +Node: Processor And CPU Time1539254 +Node: CPU Time1541125 +Node: Processor Time1542898 +Node: Calendar Time1545298 +Node: Simple Calendar Time1547231 +Node: High-Resolution Calendar1549635 +Node: Broken-down Time1554996 +Node: High Accuracy Clock1562955 +Node: Formatting Calendar Time1570391 +Node: Parsing Date and Time1585700 +Node: Low-Level Time String Parsing1586543 +Node: General Time String Parsing1599562 +Node: TZ Variable1606690 +Node: Time Zone Functions1612733 +Node: Time Functions Example1615573 +Node: Setting an Alarm1616681 +Node: Sleeping1621928 +Node: Resource Usage And Limitation1626531 +Node: Resource Usage1627208 +Node: Limits on Resources1632790 +Node: Priority1642008 +Node: Absolute Priority1644370 +Node: Realtime Scheduling1649466 +Node: Basic Scheduling Functions1652914 +Node: Traditional Scheduling1660847 +Node: Traditional Scheduling Intro1661400 +Node: Traditional Scheduling Functions1665662 +Node: Memory Resources1669324 +Node: Memory Subsystem1670174 +Node: Query Memory Parameters1672554 +Node: Processor Resources1676201 +Node: Non-Local Exits1678318 +Node: Non-Local Intro1679028 +Node: Non-Local Details1682759 +Node: Non-Local Exits and Signals1685835 +Node: System V contexts1687332 +Node: Signal Handling1700293 +Node: Concepts of Signals1702327 +Node: Kinds of Signals1702891 +Node: Signal Generation1704286 +Node: Delivery of Signal1706553 +Node: Standard Signals1709407 +Node: Program Error Signals1711000 +Node: Termination Signals1718458 +Node: Alarm Signals1722296 +Node: Asynchronous I/O Signals1723528 +Node: Job Control Signals1724718 +Node: Operation Error Signals1729318 +Node: Miscellaneous Signals1731257 +Node: Signal Messages1732951 +Node: Signal Actions1734836 +Node: Basic Signal Handling1735781 +Node: Advanced Signal Handling1741854 +Node: Signal and Sigaction1744828 +Node: Sigaction Function Example1746580 +Node: Flags for Sigaction1748896 +Node: Initial Signal Actions1751274 +Node: Defining Handlers1752655 +Node: Handler Returns1754840 +Node: Termination in Handler1756890 +Node: Longjmp in Handler1758329 +Node: Signals in Handler1760433 +Node: Merged Signals1762553 +Node: Nonreentrancy1768266 +Node: Atomic Data Access1773672 +Node: Non-atomic Example1774718 +Node: Atomic Types1776495 +Node: Atomic Usage1777514 +Node: Interrupted Primitives1778984 +Node: Generating Signals1782283 +Node: Signaling Yourself1782876 +Node: Signaling Another Process1784859 +Node: Permission for kill1788235 +Node: Kill Example1790031 +Node: Blocking Signals1792383 +Node: Why Block1794155 +Node: Signal Sets1795691 +Node: Process Signal Mask1798717 +Node: Testing for Delivery1801742 +Node: Blocking for Handler1803000 +Node: Checking for Pending Signals1805419 +Node: Remembering a Signal1807431 +Node: Waiting for a Signal1810985 +Node: Using Pause1811530 +Node: Pause Problems1813155 +Node: Sigsuspend1814879 +Node: Signal Stack1817590 +Node: BSD Signal Handling1822912 +Node: BSD Handler1824186 +Node: Blocking in BSD1826618 +Node: Program Basics1828069 +Node: Program Arguments1830053 +Node: Argument Syntax1832052 +Node: Parsing Program Arguments1834726 +Node: Getopt1835829 +Node: Using Getopt1836467 +Node: Example of Getopt1840586 +Node: Getopt Long Options1843324 +Node: Getopt Long Option Example1848560 +Node: Argp1851681 +Node: Argp Global Variables1855031 +Node: Argp Parsers1857053 +Node: Argp Option Vectors1860400 +Node: Argp Option Flags1863635 +Node: Argp Parser Functions1865652 +Node: Argp Special Keys1868351 +Node: Argp Helper Functions1873678 +Node: Argp Parsing State1876735 +Node: Argp Children1880243 +Node: Argp Flags1882303 +Node: Argp Help Filtering1884620 +Node: Argp Help Filter Keys1885835 +Node: Argp Help1886708 +Node: Argp Help Flags1887896 +Node: Argp Examples1890190 +Node: Argp Example 11890660 +Node: Argp Example 21891464 +Node: Argp Example 31894408 +Node: Argp Example 41901453 +Node: Argp User Customization1909155 +Node: Suboptions1910767 +Node: Suboptions Example1912709 +Node: Environment Variables1914878 +Node: Environment Access1916743 +Node: Standard Environment1921662 +Node: System Calls1925834 +Node: Program Termination1929390 +Node: Normal Termination1930599 +Node: Exit Status1931996 +Node: Cleanups on Exit1935355 +Node: Aborting a Program1937172 +Node: Termination Internals1938071 +Node: Processes1940251 +Node: Running a Command1942273 +Node: Process Creation Concepts1944298 +Node: Process Identification1946307 +Node: Creating a Process1947231 +Node: Executing a File1950851 +Node: Process Completion1957986 +Node: Process Completion Status1964252 +Node: BSD Wait Functions1965895 +Node: Process Creation Example1967763 +Node: Job Control1970019 +Node: Concepts of Job Control1971297 +Node: Job Control is Optional1974651 +Node: Controlling Terminal1975700 +Node: Access to the Terminal1976607 +Node: Orphaned Process Groups1978210 +Node: Implementing a Shell1979201 +Node: Data Structures1980084 +Node: Initializing the Shell1982742 +Node: Launching Jobs1986478 +Node: Foreground and Background1993931 +Node: Stopped and Terminated Jobs1997050 +Node: Continuing Stopped Jobs2002260 +Node: Missing Pieces2003892 +Node: Functions for Job Control2005516 +Node: Identifying the Terminal2005996 +Node: Process Group Functions2007569 +Node: Terminal Access Functions2012579 +Node: Name Service Switch2016056 +Node: NSS Basics2017387 +Node: NSS Configuration File2018976 +Node: Services in the NSS configuration2020674 +Node: Actions in the NSS configuration2021955 +Node: Notes on NSS Configuration File2025116 +Node: NSS Module Internals2026993 +Node: NSS Module Names2027689 +Ref: NSS Module Names-Footnote-12029730 +Ref: NSS Module Names-Footnote-22029884 +Node: NSS Modules Interface2030062 +Node: Extending NSS2034760 +Node: Adding another Service to NSS2035691 +Node: NSS Module Function Internals2037922 +Node: Users and Groups2042826 +Node: User and Group IDs2045437 +Node: Process Persona2046345 +Node: Why Change Persona2048030 +Node: How Change Persona2049911 +Node: Reading Persona2051798 +Node: Setting User ID2054068 +Node: Setting Groups2056931 +Node: Enable/Disable Setuid2061033 +Node: Setuid Program Example2063067 +Node: Tips for Setuid2066541 +Node: Who Logged In2069056 +Node: User Accounting Database2071436 +Node: Manipulating the Database2072620 +Node: XPG Functions2084948 +Node: Logging In and Out2089363 +Node: User Database2091479 +Node: User Data Structure2092141 +Node: Lookup User2093398 +Node: Scanning All Users2095962 +Node: Writing a User Entry2098916 +Node: Group Database2099815 +Node: Group Data Structure2100391 +Node: Lookup Group2101154 +Node: Scanning All Groups2103655 +Node: Database Example2106685 +Node: Netgroup Database2108882 +Node: Netgroup Data2109293 +Node: Lookup Netgroup2110821 +Node: Netgroup Membership2114239 +Node: System Management2115569 +Node: Host Identification2116500 +Node: Platform Type2122979 +Node: Filesystem Handling2126284 +Node: Mount Information2127784 +Node: fstab2129803 +Node: mtab2135619 +Node: Other Mount Information2144911 +Node: Mount-Unmount-Remount2145425 +Node: System Parameters2155450 +Node: System Configuration2160983 +Node: General Limits2162554 +Node: System Options2166189 +Node: Version Supported2169521 +Node: Sysconf2171358 +Node: Sysconf Definition2171994 +Node: Constants for Sysconf2172666 +Node: Examples of Sysconf2185601 +Node: Minimums2186594 +Node: Limits for Files2189305 +Node: Options for Files2192306 +Node: File Minimums2194599 +Node: Pathconf2196819 +Node: Utility Limits2200194 +Node: Utility Minimums2202124 +Node: String Parameters2203876 +Node: Cryptographic Functions2207776 +Node: Legal Problems2209573 +Node: getpass2211848 +Node: crypt2214018 +Node: DES Encryption2218786 +Node: Debugging Support2224988 +Node: Backtraces2225630 +Node: POSIX Threads2230416 +Node: Basic Thread Operations2232020 +Node: Thread Attributes2236604 +Node: Cancellation2243561 +Node: Cleanup Handlers2247455 +Node: Mutexes2252593 +Node: Condition Variables2262251 +Node: POSIX Semaphores2269627 +Node: Thread-Specific Data2273508 +Node: Threads and Signal Handling2278141 +Node: Threads and Fork2281831 +Node: Streams and Fork2287258 +Node: Miscellaneous Thread Functions2289420 +Node: Language Features2295905 +Node: Consistency Checking2296831 +Node: Variadic Functions2301372 +Node: Why Variadic2302444 +Node: How Variadic2304408 +Node: Variadic Prototypes2305697 +Node: Receiving Arguments2306838 +Node: How Many Arguments2309509 +Node: Calling Variadics2311171 +Node: Argument Macros2313271 +Node: Variadic Example2316107 +Node: Old Varargs2317259 +Node: Null Pointer Constant2318934 +Node: Important Data Types2320019 +Node: Data Type Measurements2322583 +Node: Width of Type2323440 +Node: Range of Type2324346 +Node: Floating Type Macros2327614 +Node: Floating Point Concepts2328872 +Node: Floating Point Parameters2332600 +Node: IEEE Floating Point2339552 +Node: Structure Measurement2341305 +Node: Library Summary2342000 +Node: Installation2549959 +Node: Configuring and compiling2551648 +Node: Running make install2560953 +Node: Tools for Compilation2565011 +Node: Supported Configurations2568274 +Node: Linux2570478 +Node: Reporting Bugs2572624 +Node: Maintenance2575454 +Node: Source Layout2575837 +Node: Porting2579769 +Node: Hierarchy Conventions2588069 +Node: Porting to Unix2593125 +Node: Contributors2595140 +Node: Copying2612454 +Node: Concept Index2639351 +Node: Type Index2702696 +Node: Function Index2710473 +Node: Variable Index2792133 +Node: File Index2856397  End Tag Table diff -durpNa glibc-2.2.2/manual/libc.info-1 glibc-2.2.3/manual/libc.info-1 --- glibc-2.2.2/manual/libc.info-1 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-1 Wed Apr 25 14:55:22 2001 @@ -920,8 +920,9 @@ Memory Resources Non-Local Exits * Intro: Non-Local Intro. When and how to use these facilities. -* Details: Non-Local Details. Functions for non-local exits. +* Details: Non-Local Details. Functions for non-local exits. * Non-Local Exits and Signals:: Portability issues. +* System V contexts:: Complete context control a la System V. Signal Handling diff -durpNa glibc-2.2.2/manual/libc.info-13 glibc-2.2.3/manual/libc.info-13 --- glibc-2.2.2/manual/libc.info-13 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-13 Wed Apr 25 14:55:22 2001 @@ -47,10 +47,10 @@ find code similar to the following: printf ("%d file%s deleted", n, n == 1 ? "" : "s"); -After the first complains from people internationalizing the code people -either completely avoided formulations like this or used strings like -`"file(s)"'. Both look unnatural and should be avoided. First tries -to solve the problem correctly looked like this: +After the first complaints from people internationalizing the code +people either completely avoided formulations like this or used strings +like `"file(s)"'. Both look unnatural and should be avoided. First +tries to solve the problem correctly looked like this: if (n == 1) printf ("%d file deleted", n); @@ -152,10 +152,10 @@ details are explained in the GNU `gettex of information is provided. The information about the plural form selection has to be stored in -the header entry (the one with the empty (`msgid' string). There should -be something like: +the header entry (the one with the empty (`msgid' string). It looks +like this: - nplurals=2; plural=n == 1 ? 0 : 1 + Plural-Forms: nplurals=2; plural=n == 1 ? 0 : 1; The `nplurals' value must be a decimal number which specifies how many different plural forms exist for this language. The string @@ -175,10 +175,10 @@ below).(1) Only one form: Some languages only require one single form. There is no - distinction between the singular and plural form. And appropriate + distinction between the singular and plural form. An appropriate header entry would look like this: - nplurals=1; plural=0 + Plural-Forms: nplurals=1; plural=0; Languages with this property include: @@ -195,7 +195,7 @@ Two forms, singular used for one only This is the form used in most existing programs since it is what English is using. A header entry would look like this: - nplurals=2; plural=n != 1 + Plural-Forms: nplurals=2; plural=n != 1; (Note: this uses the feature of C expressions that boolean expressions have to value zero or one.) @@ -224,7 +224,7 @@ Two forms, singular used for zero and on Exceptional case in the language family. The header entry would be: - nplurals=2; plural=n>1 + Plural-Forms: nplurals=2; plural=n>1; Languages with this property include: @@ -234,7 +234,7 @@ Two forms, singular used for zero and on Three forms, special cases for one and two The header entry would be: - nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2 + Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2; Languages with this property include: @@ -244,7 +244,8 @@ Three forms, special cases for one and t Three forms, special cases for numbers ending in 1 and 2, 3, 4, except those ending in 1[1-4] The header entry would look like this: - nplurals=3; plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1 + Plural-Forms: nplurals=3; \ + plural=n%100/10==1 ? 2 : n%10==1 ? 0 : (n+9)%10>3 ? 2 : 1; Languages with this property include: @@ -254,8 +255,9 @@ Three forms, special cases for numbers e Three forms, special case for one and some numbers ending in 2, 3, or 4 The header entry would look like this: - nplurals=3; plural=n==1 ? 0 : \ - n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2 + Plural-Forms: nplurals=3; \ + plural=n==1 ? 0 : \ + n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2; (Continuation in the next line is possible.) @@ -267,7 +269,8 @@ Three forms, special case for one and so Four forms, special case for one and all numbers ending in 2, 3, or 4 The header entry would look like this: - nplurals=4; plural=n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%10==4 ? 2 : 3 + Plural-Forms: nplurals=4; \ + plural=n==1 ? 0 : n%10==2 ? 1 : n%10==3 || n%10==4 ? 2 : 3; Languages with this property include: diff -durpNa glibc-2.2.2/manual/libc.info-14 glibc-2.2.3/manual/libc.info-14 --- glibc-2.2.2/manual/libc.info-14 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-14 Wed Apr 25 14:55:22 2001 @@ -262,6 +262,32 @@ fit the pattern or not. The symbols des `FNM_CASEFOLD' Ignore case in comparing STRING to PATTERN. +`FNM_EXTMATCH' + Recognize beside the normal patterns also the extended patterns + introduced in `ksh'. The patterns are written in the form + explained in the following table where PATTERN-LIST is a `|' + separated list of patterns. + + `?(PATTERN-LIST)' + The pattern matches if zero or one occurences of any of the + patterns in the PATTERN-LIST allow matching the input string. + + `*(PATTERN-LIST)' + The pattern matches if zero or more occurences of any of the + patterns in the PATTERN-LIST allow matching the input string. + + `+(PATTERN-LIST)' + The pattern matches if one or more occurences of any of the + patterns in the PATTERN-LIST allow matching the input string. + + `@(PATTERN-LIST)' + The pattern matches if exactly one occurence of any of the + patterns in the PATTERN-LIST allows matching the input string. + + `!(PATTERN-LIST)' + The pattern matches if the input string cannot be matched + with any of the patterns in the PATTERN-LIST. +  File: libc.info, Node: Globbing, Next: Regular Expressions, Prev: Wildcard Matching, Up: Pattern Matching diff -durpNa glibc-2.2.2/manual/libc.info-16 glibc-2.2.3/manual/libc.info-16 --- glibc-2.2.2/manual/libc.info-16 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-16 Wed Apr 25 14:55:22 2001 @@ -374,13 +374,11 @@ line-oriented output. - Function: int fputc_unlocked (int C, FILE *STREAM) The `fputc_unlocked' function is equivalent to the `fputc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. - Function: wint_t fputwc_unlocked (wint_t WC, FILE *STREAM) The `fputwc_unlocked' function is equivalent to the `fputwc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -400,13 +398,11 @@ line-oriented output. - Function: int putc_unlocked (int C, FILE *STREAM) The `putc_unlocked' function is equivalent to the `putc' function - except that it does not implicitly lock the stream if the state is - `FSETLOCKING_INTERNAL'. + except that it does not implicitly lock the stream. - Function: wint_t putwc_unlocked (wchar_t WC, FILE *STREAM) The `putwc_unlocked' function is equivalent to the `putwc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -414,19 +410,17 @@ line-oriented output. The `putchar' function is equivalent to `putc' with `stdout' as the value of the STREAM argument. - - Function: wint_t putchar (wchar_t WC) + - Function: wint_t putwchar (wchar_t WC) The `putwchar' function is equivalent to `putwc' with `stdout' as the value of the STREAM argument. - Function: int putchar_unlocked (int C) The `putchar_unlocked' function is equivalent to the `putchar' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. - Function: wint_t putwchar_unlocked (wchar_t WC) The `putwchar_unlocked' function is equivalent to the `putwchar' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -458,15 +452,13 @@ line-oriented output. - Function: int fputs_unlocked (const char *S, FILE *STREAM) The `fputs_unlocked' function is equivalent to the `fputs' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. - Function: int fputws_unlocked (const wchar_t *WS, FILE *STREAM) The `fputws_unlocked' function is equivalent to the `fputws' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -523,13 +515,11 @@ sure that it will fit in a `char' variab - Function: int fgetc_unlocked (FILE *STREAM) The `fgetc_unlocked' function is equivalent to the `fgetc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. - Function: wint_t fgetwc_unlocked (FILE *STREAM) The `fgetwc_unlocked' function is equivalent to the `fgetwc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -548,13 +538,11 @@ sure that it will fit in a `char' variab - Function: int getc_unlocked (FILE *STREAM) The `getc_unlocked' function is equivalent to the `getc' function - except that it does not implicitly lock the stream if the state is - `FSETLOCKING_INTERNAL'. + except that it does not implicitly lock the stream. - Function: wint_t getwc_unlocked (FILE *STREAM) The `getwc_unlocked' function is equivalent to the `getwc' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -568,13 +556,11 @@ sure that it will fit in a `char' variab - Function: int getchar_unlocked (void) The `getchar_unlocked' function is equivalent to the `getchar' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. - Function: wint_t getwchar_unlocked (void) The `getwchar_unlocked' function is equivalent to the `getwchar' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -733,16 +719,14 @@ of a specified delimiter character. - Function: char * fgets_unlocked (char *S, int COUNT, FILE *STREAM) The `fgets_unlocked' function is equivalent to the `fgets' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. - Function: wchar_t * fgetws_unlocked (wchar_t *WS, int COUNT, FILE *STREAM) The `fgetws_unlocked' function is equivalent to the `fgetws' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -928,8 +912,7 @@ different kinds of computers. - Function: size_t fread_unlocked (void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM) The `fread_unlocked' function is equivalent to the `fread' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -943,8 +926,7 @@ different kinds of computers. - Function: size_t fwrite_unlocked (const void *DATA, size_t SIZE, size_t COUNT, FILE *STREAM) The `fwrite_unlocked' function is equivalent to the `fwrite' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. diff -durpNa glibc-2.2.2/manual/libc.info-17 glibc-2.2.3/manual/libc.info-17 --- glibc-2.2.2/manual/libc.info-17 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-17 Wed Apr 25 14:55:22 2001 @@ -603,11 +603,11 @@ way to make sure you have all the right In practice, it is often easier just to use `asprintf', below. - *Attention:* In the GNU C library version 2.0 the return value is - the number of characters stored, not including the terminating - null. If this value equals `SIZE - 1', then there was not enough - space in S for all the output. This change was necessary with the - adoption of snprintf by ISO C99. + *Attention:* In versions of the GNU C library prior to 2.1 the + return value is the number of characters stored, not including the + terminating null; unless there was not enough space in S to store + the result in which case `-1' is returned. This was changed in + order to comply with the ISO C99 standard.  File: libc.info, Node: Dynamic Output, Next: Variable Arguments Output, Prev: Formatted Output Functions, Up: Formatted Output diff -durpNa glibc-2.2.2/manual/libc.info-18 glibc-2.2.3/manual/libc.info-18 --- glibc-2.2.2/manual/libc.info-18 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-18 Wed Apr 25 14:55:22 2001 @@ -896,8 +896,7 @@ I/O operation on that stream. - Function: int feof_unlocked (FILE *STREAM) The `feof_unlocked' function is equivalent to the `feof' function - except that it does not implicitly lock the stream if the state is - `FSETLOCKING_INTERNAL'. + except that it does not implicitly lock the stream. This function is a GNU extension. @@ -912,8 +911,7 @@ I/O operation on that stream. - Function: int ferror_unlocked (FILE *STREAM) The `ferror_unlocked' function is equivalent to the `ferror' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. @@ -946,8 +944,7 @@ function. - Function: void clearerr_unlocked (FILE *STREAM) The `clearerr_unlocked' function is equivalent to the `clearerr' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. This function is a GNU extension. diff -durpNa glibc-2.2.2/manual/libc.info-19 glibc-2.2.3/manual/libc.info-19 --- glibc-2.2.2/manual/libc.info-19 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-19 Wed Apr 25 14:55:22 2001 @@ -247,8 +247,7 @@ buffered output on a stream is flushed a - Function: int fflush_unlocked (FILE *STREAM) The `fflush_unlocked' function is equivalent to the `fflush' - function except that it does not implicitly lock the stream if the - state is `FSETLOCKING_INTERNAL'. + function except that it does not implicitly lock the stream. The `fflush' function can be used to flush all streams currently opened. While this is useful in some situations it does often more than diff -durpNa glibc-2.2.2/manual/libc.info-23 glibc-2.2.3/manual/libc.info-23 --- glibc-2.2.2/manual/libc.info-23 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-23 Wed Apr 25 14:55:22 2001 @@ -1025,7 +1025,19 @@ obtain information about the link. `lin hard link, does too. It makes a hard link to the symbolic link, which one rarely wants. - Prototypes for the functions listed in this section are in + Some systems have for some functions operating on files have a limit +on how many symbolic links are followed when resolving a path name. The +limit if it exists is published in the `sys/param.h' header file. + + - Macro: int MAXSYMLINKS + The macro `MAXSYMLINKS' specifies how many symlinks some function + will follow before returning `ELOOP'. Not all functions behave the + same and this value is not the same a that returned for + `_SC_SYMLOOP' by `sysconf'. In fact, the `sysconf' result can + indicate that there is no fixed limit although `MAXSYMLINKS' + exists and has a finite value. + + Prototypes for most of the functions listed in this section are in `unistd.h'. - Function: int symlink (const char *OLDNAME, const char *NEWNAME) @@ -1092,77 +1104,61 @@ one rarely wants. A hardware error occurred while reading or writing data on the disk. - -File: libc.info, Node: Deleting Files, Next: Renaming Files, Prev: Symbolic Links, Up: File System Interface - -Deleting Files -============== - - You can delete a file with `unlink' or `remove'. - - Deletion actually deletes a file name. If this is the file's only -name, then the file is deleted as well. If the file has other -remaining names (*note Hard Links::), it remains accessible under those -names. + In some situations it is desirable to resolve all the to get the real +name of a file where no prefix names a symbolic link which is followed +and no filename in the path is `.' or `..'. This is for instance +desirable if files have to be compare in which case different names can +refer to the same inode. - - Function: int unlink (const char *FILENAME) - The `unlink' function deletes the file name FILENAME. If this is - a file's sole name, the file itself is also deleted. (Actually, - if any process has the file open when this happens, deletion is - postponed until all processes have closed the file.) + - Function: char * canonicalize_file_name (const char *NAME) + The `canonicalize_file_name' function returns the absolute name of + the file named by NAME which contains no `.', `..' components nor + any repeated path separators (`/') or symlinks. The result is + passed back as the return value of the function in a block of + memory allocated with `malloc'. If the result is not used anymore + the memory should be freed with a call to `free'. - The function `unlink' is declared in the header file `unistd.h'. + In any of the path components except the last one is missing the + function returns a NULL pointer. This is also what is returned if + the length of the path reaches or exceeds `PATH_MAX' characters. + In any case `errno' is set accordingly. - This function returns `0' on successful completion, and `-1' on - error. In addition to the usual file name errors (*note File Name - Errors::), the following `errno' error conditions are defined for - this function: + `ENAMETOOLONG' + The resulting path is too long. This error only occurs on + systems which have a limit on the file name length. `EACCES' - Write permission is denied for the directory from which the - file is to be removed, or the directory has the sticky bit - set and you do not own the file. - - `EBUSY' - This error indicates that the file is being used by the - system in such a way that it can't be unlinked. For example, - you might see this error if the file name specifies the root - directory or a mount point for a file system. + At least one of the path components is not readable. `ENOENT' - The file name to be deleted doesn't exist. + The input file name is empty. - `EPERM' - On some systems `unlink' cannot be used to delete the name of - a directory, or at least can only be used this way by a - privileged user. To avoid such problems, use `rmdir' to - delete directories. (In the GNU system `unlink' can never - delete the name of a directory.) + `ENOENT' + At least one of the path components does not exist. - `EROFS' - The directory containing the file name to be deleted is on a - read-only file system and can't be modified. + `ELOOP' + More than `MAXSYMLINKS' many symlinks have been followed. - - Function: int rmdir (const char *FILENAME) - The `rmdir' function deletes a directory. The directory must be - empty before it can be removed; in other words, it can only contain - entries for `.' and `..'. + This function is a GNU extension and is declared in `stdlib.h'. - In most other respects, `rmdir' behaves like `unlink'. There are - two additional `errno' error conditions defined for `rmdir': + The Unix standard includes a similar function which differs from +`canonicalize_file_name' in that the user has to provide the buffer +where the result is placed in. - `ENOTEMPTY' - `EEXIST' - The directory to be deleted is not empty. + - Function: char * realpath (const char *restrict NAME, char *restrict + RESOLVED) + The `realpath' function behaves just like `canonicalize_file_name' + but instead of allocating a buffer for the result it is placed in + the buffer pointed to by RESOLVED. - These two error codes are synonymous; some systems use one, and - some use the other. The GNU system always uses `ENOTEMPTY'. + One other difference is that the buffer RESOLVED will contain the + part of the path component which does not exist or is not readable + if the function returns `NULL' and `errno' is set to `EACCES' or + `ENOENT'. - The prototype for this function is declared in the header file - `unistd.h'. + This function is declared in `stdlib.h'. - - Function: int remove (const char *FILENAME) - This is the ISO C function to remove a file. It works like - `unlink' for files and like `rmdir' for directories. `remove' is - declared in `stdio.h'. + The advantage of using this function is that it is more widely +available. The drawback is that it reports failures for long path on +systems which have no limits on the file name length. diff -durpNa glibc-2.2.2/manual/libc.info-24 glibc-2.2.3/manual/libc.info-24 --- glibc-2.2.2/manual/libc.info-24 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-24 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,80 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Deleting Files, Next: Renaming Files, Prev: Symbolic Links, Up: File System Interface + +Deleting Files +============== + + You can delete a file with `unlink' or `remove'. + + Deletion actually deletes a file name. If this is the file's only +name, then the file is deleted as well. If the file has other +remaining names (*note Hard Links::), it remains accessible under those +names. + + - Function: int unlink (const char *FILENAME) + The `unlink' function deletes the file name FILENAME. If this is + a file's sole name, the file itself is also deleted. (Actually, + if any process has the file open when this happens, deletion is + postponed until all processes have closed the file.) + + The function `unlink' is declared in the header file `unistd.h'. + + This function returns `0' on successful completion, and `-1' on + error. In addition to the usual file name errors (*note File Name + Errors::), the following `errno' error conditions are defined for + this function: + + `EACCES' + Write permission is denied for the directory from which the + file is to be removed, or the directory has the sticky bit + set and you do not own the file. + + `EBUSY' + This error indicates that the file is being used by the + system in such a way that it can't be unlinked. For example, + you might see this error if the file name specifies the root + directory or a mount point for a file system. + + `ENOENT' + The file name to be deleted doesn't exist. + + `EPERM' + On some systems `unlink' cannot be used to delete the name of + a directory, or at least can only be used this way by a + privileged user. To avoid such problems, use `rmdir' to + delete directories. (In the GNU system `unlink' can never + delete the name of a directory.) + + `EROFS' + The directory containing the file name to be deleted is on a + read-only file system and can't be modified. + + - Function: int rmdir (const char *FILENAME) + The `rmdir' function deletes a directory. The directory must be + empty before it can be removed; in other words, it can only contain + entries for `.' and `..'. + + In most other respects, `rmdir' behaves like `unlink'. There are + two additional `errno' error conditions defined for `rmdir': + + `ENOTEMPTY' + `EEXIST' + The directory to be deleted is not empty. + + These two error codes are synonymous; some systems use one, and + some use the other. The GNU system always uses `ENOTEMPTY'. + + The prototype for this function is declared in the header file + `unistd.h'. + + - Function: int remove (const char *FILENAME) + This is the ISO C function to remove a file. It works like + `unlink' for files and like `rmdir' for directories. `remove' is + declared in `stdio.h'. + + File: libc.info, Node: Renaming Files, Next: Creating Directories, Prev: Deleting Files, Up: File System Interface Renaming Files @@ -618,17 +692,17 @@ introduces three new test macros. But u not take the value of the `st_mode' field as the parameter. Instead they expect a pointer to the whole `struct stat' structure. - - Macro: int S_TYPEISMQ (struct stat S) + - Macro: int S_TYPEISMQ (struct stat *S) If the system implement POSIX message queues as distinct objects and the file is a message queue object, this macro returns a non-zero value. In all other cases the result is zero. - - Macro: int S_TYPEISSEM (struct stat S) + - Macro: int S_TYPEISSEM (struct stat *S) If the system implement POSIX semaphores as distinct objects and the file is a semaphore object, this macro returns a non-zero value. In all other cases the result is zero. - - Macro: int S_TYPEISSHM (struct stat S) + - Macro: int S_TYPEISSHM (struct stat *S) If the system implement POSIX shared memory objects as distinct objects and the file is an shared memory object, this macro returns a non-zero value. In all other cases the result is zero. @@ -1084,109 +1158,4 @@ constants. - Macro: int F_OK Flag meaning test for existence of the file. - - -File: libc.info, Node: File Times, Next: File Size, Prev: Testing File Access, Up: File Attributes - -File Times ----------- - - Each file has three time stamps associated with it: its access time, -its modification time, and its attribute modification time. These -correspond to the `st_atime', `st_mtime', and `st_ctime' members of the -`stat' structure; see *Note File Attributes::. - - All of these times are represented in calendar time format, as -`time_t' objects. This data type is defined in `time.h'. For more -information about representation and manipulation of time values, see -*Note Calendar Time::. - - Reading from a file updates its access time attribute, and writing -updates its modification time. When a file is created, all three time -stamps for that file are set to the current time. In addition, the -attribute change time and modification time fields of the directory that -contains the new entry are updated. - - Adding a new name for a file with the `link' function updates the -attribute change time field of the file being linked, and both the -attribute change time and modification time fields of the directory -containing the new name. These same fields are affected if a file name -is deleted with `unlink', `remove' or `rmdir'. Renaming a file with -`rename' affects only the attribute change time and modification time -fields of the two parent directories involved, and not the times for -the file being renamed. - - Changing the attributes of a file (for example, with `chmod') -updates its attribute change time field. - - You can also change some of the time stamps of a file explicitly -using the `utime' function--all except the attribute change time. You -need to include the header file `utime.h' to use this facility. - - - Data Type: struct utimbuf - The `utimbuf' structure is used with the `utime' function to - specify new access and modification times for a file. It contains - the following members: - - `time_t actime' - This is the access time for the file. - - `time_t modtime' - This is the modification time for the file. - - - Function: int utime (const char *FILENAME, const struct utimbuf - *TIMES) - This function is used to modify the file times associated with the - file named FILENAME. - - If TIMES is a null pointer, then the access and modification times - of the file are set to the current time. Otherwise, they are set - to the values from the `actime' and `modtime' members - (respectively) of the `utimbuf' structure pointed to by TIMES. - - The attribute modification time for the file is set to the current - time in either case (since changing the time stamps is itself a - modification of the file attributes). - - The `utime' function returns `0' if successful and `-1' on - failure. In addition to the usual file name errors (*note File - Name Errors::), the following `errno' error conditions are defined - for this function: - - `EACCES' - There is a permission problem in the case where a null - pointer was passed as the TIMES argument. In order to update - the time stamp on the file, you must either be the owner of - the file, have write permission for the file, or be a - privileged user. - - `ENOENT' - The file doesn't exist. - - `EPERM' - If the TIMES argument is not a null pointer, you must either - be the owner of the file or be a privileged user. - - `EROFS' - The file lives on a read-only file system. - - Each of the three time stamps has a corresponding microsecond part, -which extends its resolution. These fields are called `st_atime_usec', -`st_mtime_usec', and `st_ctime_usec'; each has a value between 0 and -999,999, which indicates the time in microseconds. They correspond to -the `tv_usec' field of a `timeval' structure; see *Note High-Resolution -Calendar::. - - The `utimes' function is like `utime', but also lets you specify the -fractional part of the file times. The prototype for this function is -in the header file `sys/time.h'. - - - Function: int utimes (const char *FILENAME, struct timeval TVP[2]) - This function sets the file access and modification times of the - file FILENAME. The new file access time is specified by `TVP[0]', - and the new modification time by `TVP[1]'. This function comes - from BSD. - - The return values and error conditions are the same as for the - `utime' function. diff -durpNa glibc-2.2.2/manual/libc.info-25 glibc-2.2.3/manual/libc.info-25 --- glibc-2.2.2/manual/libc.info-25 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-25 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,111 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: File Times, Next: File Size, Prev: Testing File Access, Up: File Attributes + +File Times +---------- + + Each file has three time stamps associated with it: its access time, +its modification time, and its attribute modification time. These +correspond to the `st_atime', `st_mtime', and `st_ctime' members of the +`stat' structure; see *Note File Attributes::. + + All of these times are represented in calendar time format, as +`time_t' objects. This data type is defined in `time.h'. For more +information about representation and manipulation of time values, see +*Note Calendar Time::. + + Reading from a file updates its access time attribute, and writing +updates its modification time. When a file is created, all three time +stamps for that file are set to the current time. In addition, the +attribute change time and modification time fields of the directory that +contains the new entry are updated. + + Adding a new name for a file with the `link' function updates the +attribute change time field of the file being linked, and both the +attribute change time and modification time fields of the directory +containing the new name. These same fields are affected if a file name +is deleted with `unlink', `remove' or `rmdir'. Renaming a file with +`rename' affects only the attribute change time and modification time +fields of the two parent directories involved, and not the times for +the file being renamed. + + Changing the attributes of a file (for example, with `chmod') +updates its attribute change time field. + + You can also change some of the time stamps of a file explicitly +using the `utime' function--all except the attribute change time. You +need to include the header file `utime.h' to use this facility. + + - Data Type: struct utimbuf + The `utimbuf' structure is used with the `utime' function to + specify new access and modification times for a file. It contains + the following members: + + `time_t actime' + This is the access time for the file. + + `time_t modtime' + This is the modification time for the file. + + - Function: int utime (const char *FILENAME, const struct utimbuf + *TIMES) + This function is used to modify the file times associated with the + file named FILENAME. + + If TIMES is a null pointer, then the access and modification times + of the file are set to the current time. Otherwise, they are set + to the values from the `actime' and `modtime' members + (respectively) of the `utimbuf' structure pointed to by TIMES. + + The attribute modification time for the file is set to the current + time in either case (since changing the time stamps is itself a + modification of the file attributes). + + The `utime' function returns `0' if successful and `-1' on + failure. In addition to the usual file name errors (*note File + Name Errors::), the following `errno' error conditions are defined + for this function: + + `EACCES' + There is a permission problem in the case where a null + pointer was passed as the TIMES argument. In order to update + the time stamp on the file, you must either be the owner of + the file, have write permission for the file, or be a + privileged user. + + `ENOENT' + The file doesn't exist. + + `EPERM' + If the TIMES argument is not a null pointer, you must either + be the owner of the file or be a privileged user. + + `EROFS' + The file lives on a read-only file system. + + Each of the three time stamps has a corresponding microsecond part, +which extends its resolution. These fields are called `st_atime_usec', +`st_mtime_usec', and `st_ctime_usec'; each has a value between 0 and +999,999, which indicates the time in microseconds. They correspond to +the `tv_usec' field of a `timeval' structure; see *Note High-Resolution +Calendar::. + + The `utimes' function is like `utime', but also lets you specify the +fractional part of the file times. The prototype for this function is +in the header file `sys/time.h'. + + - Function: int utimes (const char *FILENAME, struct timeval TVP[2]) + This function sets the file access and modification times of the + file FILENAME. The new file access time is specified by `TVP[0]', + and the new modification time by `TVP[1]'. This function comes + from BSD. + + The return values and error conditions are the same as for the + `utime' function. + + File: libc.info, Node: File Size, Prev: File Times, Up: File Attributes File Size @@ -1124,115 +1229,4 @@ socket. The prototype for this function You can't read the address of a socket in the file namespace. This is consistent with the rest of the system; in general, there's no way to find a file's name from a descriptor for that file. - - -File: libc.info, Node: Interface Naming, Next: Local Namespace, Prev: Socket Addresses, Up: Sockets - -Interface Naming -================ - - Each network interface has a name. This usually consists of a few -letters that relate to the type of interface, which may be followed by a -number if there is more than one interface of that type. Examples -might be `lo' (the loopback interface) and `eth0' (the first Ethernet -interface). - - Although such names are convenient for humans, it would be clumsy to -have to use them whenever a program needs to refer to an interface. In -such situations an interface is referred to by its "index", which is an -arbitrarily-assigned small positive integer. - - The following functions, constants and data types are declared in the -header file `net/if.h'. - - - Constant: size_t IFNAMSIZ - This constant defines the maximum buffer size needed to hold an - interface name, including its terminating zero byte. - - - Function: unsigned int if_nametoindex (const char *ifname) - This function yields the interface index corresponding to a - particular name. If no interface exists with the name given, it - returns 0. - - - Function: char * if_indextoname (unsigned int ifindex, char *ifname) - This function maps an interface index to its corresponding name. - The returned name is placed in the buffer pointed to by `ifname', - which must be at least `IFNAMSIZ' bytes in length. If the index - was invalid, the function's return value is a null pointer, - otherwise it is `ifname'. - - - Data Type: struct if_nameindex - This data type is used to hold the information about a single - interface. It has the following members: - - `unsigned int if_index;' - This is the interface index. - - `char *if_name' - This is the null-terminated index name. - - - - Function: struct if_nameindex * if_nameindex (void) - This function returns an array of `if_nameindex' structures, one - for every interface that is present. The end of the list is - indicated by a structure with an interface of 0 and a null name - pointer. If an error occurs, this function returns a null pointer. - - The returned structure must be freed with `if_freenameindex' after - use. - - - Function: void if_freenameindex (struct if_nameindex *ptr) - This function frees the structure returned by an earlier call to - `if_nameindex'. - - -File: libc.info, Node: Local Namespace, Next: Internet Namespace, Prev: Interface Naming, Up: Sockets - -The Local Namespace -=================== - - This section describes the details of the local namespace, whose -symbolic name (required when you create a socket) is `PF_LOCAL'. The -local namespace is also known as "Unix domain sockets". Another name -is file namespace since socket addresses are normally implemented as -file names. - -* Menu: - -* Concepts: Local Namespace Concepts. What you need to understand. -* Details: Local Namespace Details. Address format, symbolic names, etc. -* Example: Local Socket Example. Example of creating a socket. - - -File: libc.info, Node: Local Namespace Concepts, Next: Local Namespace Details, Up: Local Namespace - -Local Namespace Concepts ------------------------- - - In the local namespace socket addresses are file names. You can -specify any file name you want as the address of the socket, but you -must have write permission on the directory containing it. It's common -to put these files in the `/tmp' directory. - - One peculiarity of the local namespace is that the name is only used -when opening the connection; once open the address is not meaningful and -may not exist. - - Another peculiarity is that you cannot connect to such a socket from -another machine-not even if the other machine shares the file system -which contains the name of the socket. You can see the socket in a -directory listing, but connecting to it never succeeds. Some programs -take advantage of this, such as by asking the client to send its own -process ID, and using the process IDs to distinguish between clients. -However, we recommend you not use this method in protocols you design, -as we might someday permit connections from other machines that mount -the same file systems. Instead, send each new client an identifying -number if you want it to have one. - - After you close a socket in the local namespace, you should delete -the file name from the file system. Use `unlink' or `remove' to do -this; see *Note Deleting Files::. - - The local namespace supports just one protocol for any communication -style; it is protocol number `0'. diff -durpNa glibc-2.2.2/manual/libc.info-26 glibc-2.2.3/manual/libc.info-26 --- glibc-2.2.2/manual/libc.info-26 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-26 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,117 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Interface Naming, Next: Local Namespace, Prev: Socket Addresses, Up: Sockets + +Interface Naming +================ + + Each network interface has a name. This usually consists of a few +letters that relate to the type of interface, which may be followed by a +number if there is more than one interface of that type. Examples +might be `lo' (the loopback interface) and `eth0' (the first Ethernet +interface). + + Although such names are convenient for humans, it would be clumsy to +have to use them whenever a program needs to refer to an interface. In +such situations an interface is referred to by its "index", which is an +arbitrarily-assigned small positive integer. + + The following functions, constants and data types are declared in the +header file `net/if.h'. + + - Constant: size_t IFNAMSIZ + This constant defines the maximum buffer size needed to hold an + interface name, including its terminating zero byte. + + - Function: unsigned int if_nametoindex (const char *ifname) + This function yields the interface index corresponding to a + particular name. If no interface exists with the name given, it + returns 0. + + - Function: char * if_indextoname (unsigned int ifindex, char *ifname) + This function maps an interface index to its corresponding name. + The returned name is placed in the buffer pointed to by `ifname', + which must be at least `IFNAMSIZ' bytes in length. If the index + was invalid, the function's return value is a null pointer, + otherwise it is `ifname'. + + - Data Type: struct if_nameindex + This data type is used to hold the information about a single + interface. It has the following members: + + `unsigned int if_index;' + This is the interface index. + + `char *if_name' + This is the null-terminated index name. + + + - Function: struct if_nameindex * if_nameindex (void) + This function returns an array of `if_nameindex' structures, one + for every interface that is present. The end of the list is + indicated by a structure with an interface of 0 and a null name + pointer. If an error occurs, this function returns a null pointer. + + The returned structure must be freed with `if_freenameindex' after + use. + + - Function: void if_freenameindex (struct if_nameindex *ptr) + This function frees the structure returned by an earlier call to + `if_nameindex'. + + +File: libc.info, Node: Local Namespace, Next: Internet Namespace, Prev: Interface Naming, Up: Sockets + +The Local Namespace +=================== + + This section describes the details of the local namespace, whose +symbolic name (required when you create a socket) is `PF_LOCAL'. The +local namespace is also known as "Unix domain sockets". Another name +is file namespace since socket addresses are normally implemented as +file names. + +* Menu: + +* Concepts: Local Namespace Concepts. What you need to understand. +* Details: Local Namespace Details. Address format, symbolic names, etc. +* Example: Local Socket Example. Example of creating a socket. + + +File: libc.info, Node: Local Namespace Concepts, Next: Local Namespace Details, Up: Local Namespace + +Local Namespace Concepts +------------------------ + + In the local namespace socket addresses are file names. You can +specify any file name you want as the address of the socket, but you +must have write permission on the directory containing it. It's common +to put these files in the `/tmp' directory. + + One peculiarity of the local namespace is that the name is only used +when opening the connection; once open the address is not meaningful and +may not exist. + + Another peculiarity is that you cannot connect to such a socket from +another machine-not even if the other machine shares the file system +which contains the name of the socket. You can see the socket in a +directory listing, but connecting to it never succeeds. Some programs +take advantage of this, such as by asking the client to send its own +process ID, and using the process IDs to distinguish between clients. +However, we recommend you not use this method in protocols you design, +as we might someday permit connections from other machines that mount +the same file systems. Instead, send each new client an identifying +number if you want it to have one. + + After you close a socket in the local namespace, you should delete +the file name from the file system. Use `unlink' or `remove' to do +this; see *Note Deleting Files::. + + The local namespace supports just one protocol for any communication +style; it is protocol number `0'. + + File: libc.info, Node: Local Namespace Details, Next: Local Socket Example, Prev: Local Namespace Concepts, Up: Local Namespace Details of Local Namespace @@ -1098,144 +1209,4 @@ connection styles. * Creating a Socket:: How to open a socket. * Closing a Socket:: How to close a socket. * Socket Pairs:: These are created like pipes. - - -File: libc.info, Node: Creating a Socket, Next: Closing a Socket, Up: Open/Close Sockets - -Creating a Socket ------------------ - - The primitive for creating a socket is the `socket' function, -declared in `sys/socket.h'. - - - Function: int socket (int NAMESPACE, int STYLE, int PROTOCOL) - This function creates a socket and specifies communication style - STYLE, which should be one of the socket styles listed in *Note - Communication Styles::. The NAMESPACE argument specifies the - namespace; it must be `PF_LOCAL' (*note Local Namespace::) or - `PF_INET' (*note Internet Namespace::). PROTOCOL designates the - specific protocol (*note Socket Concepts::); zero is usually right - for PROTOCOL. - - The return value from `socket' is the file descriptor for the new - socket, or `-1' in case of error. The following `errno' error - conditions are defined for this function: - - `EPROTONOSUPPORT' - The PROTOCOL or STYLE is not supported by the NAMESPACE - specified. - - `EMFILE' - The process already has too many file descriptors open. - - `ENFILE' - The system already has too many file descriptors open. - - `EACCESS' - The process does not have the privilege to create a socket of - the specified STYLE or PROTOCOL. - - `ENOBUFS' - The system ran out of internal buffer space. - - The file descriptor returned by the `socket' function supports both - read and write operations. However, like pipes, sockets do not - support file positioning operations. - - For examples of how to call the `socket' function, see *Note Local -Socket Example::, or *Note Inet Example::. - - -File: libc.info, Node: Closing a Socket, Next: Socket Pairs, Prev: Creating a Socket, Up: Open/Close Sockets - -Closing a Socket ----------------- - - When you have finished using a socket, you can simply close its file -descriptor with `close'; see *Note Opening and Closing Files::. If -there is still data waiting to be transmitted over the connection, -normally `close' tries to complete this transmission. You can control -this behavior using the `SO_LINGER' socket option to specify a timeout -period; see *Note Socket Options::. - - You can also shut down only reception or transmission on a -connection by calling `shutdown', which is declared in `sys/socket.h'. - - - Function: int shutdown (int SOCKET, int HOW) - The `shutdown' function shuts down the connection of socket - SOCKET. The argument HOW specifies what action to perform: - - `0' - Stop receiving data for this socket. If further data arrives, - reject it. - - `1' - Stop trying to transmit data from this socket. Discard any - data waiting to be sent. Stop looking for acknowledgement of - data already sent; don't retransmit it if it is lost. - - `2' - Stop both reception and transmission. - - The return value is `0' on success and `-1' on failure. The - following `errno' error conditions are defined for this function: - - `EBADF' - SOCKET is not a valid file descriptor. - - `ENOTSOCK' - SOCKET is not a socket. - - `ENOTCONN' - SOCKET is not connected. - - -File: libc.info, Node: Socket Pairs, Prev: Closing a Socket, Up: Open/Close Sockets - -Socket Pairs ------------- - - A "socket pair" consists of a pair of connected (but unnamed) -sockets. It is very similar to a pipe and is used in much the same -way. Socket pairs are created with the `socketpair' function, declared -in `sys/socket.h'. A socket pair is much like a pipe; the main -difference is that the socket pair is bidirectional, whereas the pipe -has one input-only end and one output-only end (*note Pipes and -FIFOs::). - - - Function: int socketpair (int NAMESPACE, int STYLE, int PROTOCOL, - int FILEDES[2]) - This function creates a socket pair, returning the file - descriptors in `FILEDES[0]' and `FILEDES[1]'. The socket pair is - a full-duplex communications channel, so that both reading and - writing may be performed at either end. - - The NAMESPACE, STYLE and PROTOCOL arguments are interpreted as for - the `socket' function. STYLE should be one of the communication - styles listed in *Note Communication Styles::. The NAMESPACE - argument specifies the namespace, which must be `AF_LOCAL' (*note - Local Namespace::); PROTOCOL specifies the communications - protocol, but zero is the only meaningful value. - - If STYLE specifies a connectionless communication style, then the - two sockets you get are not _connected_, strictly speaking, but - each of them knows the other as the default destination address, - so they can send packets to each other. - - The `socketpair' function returns `0' on success and `-1' on - failure. The following `errno' error conditions are defined for - this function: - - `EMFILE' - The process has too many file descriptors open. - - `EAFNOSUPPORT' - The specified namespace is not supported. - - `EPROTONOSUPPORT' - The specified protocol is not supported. - - `EOPNOTSUPP' - The specified protocol does not support the creation of - socket pairs. diff -durpNa glibc-2.2.2/manual/libc.info-27 glibc-2.2.3/manual/libc.info-27 --- glibc-2.2.2/manual/libc.info-27 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-27 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,146 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Creating a Socket, Next: Closing a Socket, Up: Open/Close Sockets + +Creating a Socket +----------------- + + The primitive for creating a socket is the `socket' function, +declared in `sys/socket.h'. + + - Function: int socket (int NAMESPACE, int STYLE, int PROTOCOL) + This function creates a socket and specifies communication style + STYLE, which should be one of the socket styles listed in *Note + Communication Styles::. The NAMESPACE argument specifies the + namespace; it must be `PF_LOCAL' (*note Local Namespace::) or + `PF_INET' (*note Internet Namespace::). PROTOCOL designates the + specific protocol (*note Socket Concepts::); zero is usually right + for PROTOCOL. + + The return value from `socket' is the file descriptor for the new + socket, or `-1' in case of error. The following `errno' error + conditions are defined for this function: + + `EPROTONOSUPPORT' + The PROTOCOL or STYLE is not supported by the NAMESPACE + specified. + + `EMFILE' + The process already has too many file descriptors open. + + `ENFILE' + The system already has too many file descriptors open. + + `EACCESS' + The process does not have the privilege to create a socket of + the specified STYLE or PROTOCOL. + + `ENOBUFS' + The system ran out of internal buffer space. + + The file descriptor returned by the `socket' function supports both + read and write operations. However, like pipes, sockets do not + support file positioning operations. + + For examples of how to call the `socket' function, see *Note Local +Socket Example::, or *Note Inet Example::. + + +File: libc.info, Node: Closing a Socket, Next: Socket Pairs, Prev: Creating a Socket, Up: Open/Close Sockets + +Closing a Socket +---------------- + + When you have finished using a socket, you can simply close its file +descriptor with `close'; see *Note Opening and Closing Files::. If +there is still data waiting to be transmitted over the connection, +normally `close' tries to complete this transmission. You can control +this behavior using the `SO_LINGER' socket option to specify a timeout +period; see *Note Socket Options::. + + You can also shut down only reception or transmission on a +connection by calling `shutdown', which is declared in `sys/socket.h'. + + - Function: int shutdown (int SOCKET, int HOW) + The `shutdown' function shuts down the connection of socket + SOCKET. The argument HOW specifies what action to perform: + + `0' + Stop receiving data for this socket. If further data arrives, + reject it. + + `1' + Stop trying to transmit data from this socket. Discard any + data waiting to be sent. Stop looking for acknowledgement of + data already sent; don't retransmit it if it is lost. + + `2' + Stop both reception and transmission. + + The return value is `0' on success and `-1' on failure. The + following `errno' error conditions are defined for this function: + + `EBADF' + SOCKET is not a valid file descriptor. + + `ENOTSOCK' + SOCKET is not a socket. + + `ENOTCONN' + SOCKET is not connected. + + +File: libc.info, Node: Socket Pairs, Prev: Closing a Socket, Up: Open/Close Sockets + +Socket Pairs +------------ + + A "socket pair" consists of a pair of connected (but unnamed) +sockets. It is very similar to a pipe and is used in much the same +way. Socket pairs are created with the `socketpair' function, declared +in `sys/socket.h'. A socket pair is much like a pipe; the main +difference is that the socket pair is bidirectional, whereas the pipe +has one input-only end and one output-only end (*note Pipes and +FIFOs::). + + - Function: int socketpair (int NAMESPACE, int STYLE, int PROTOCOL, + int FILEDES[2]) + This function creates a socket pair, returning the file + descriptors in `FILEDES[0]' and `FILEDES[1]'. The socket pair is + a full-duplex communications channel, so that both reading and + writing may be performed at either end. + + The NAMESPACE, STYLE and PROTOCOL arguments are interpreted as for + the `socket' function. STYLE should be one of the communication + styles listed in *Note Communication Styles::. The NAMESPACE + argument specifies the namespace, which must be `AF_LOCAL' (*note + Local Namespace::); PROTOCOL specifies the communications + protocol, but zero is the only meaningful value. + + If STYLE specifies a connectionless communication style, then the + two sockets you get are not _connected_, strictly speaking, but + each of them knows the other as the default destination address, + so they can send packets to each other. + + The `socketpair' function returns `0' on success and `-1' on + failure. The following `errno' error conditions are defined for + this function: + + `EMFILE' + The process has too many file descriptors open. + + `EAFNOSUPPORT' + The specified namespace is not supported. + + `EPROTONOSUPPORT' + The specified protocol is not supported. + + `EOPNOTSUPP' + The specified protocol does not support the creation of + socket pairs. + + File: libc.info, Node: Connections, Next: Datagrams, Prev: Open/Close Sockets, Up: Sockets Using Sockets with Connections @@ -1191,139 +1331,4 @@ protocol interface. * Socket Option Functions:: The basic functions for setting and getting socket options. * Socket-Level Options:: Details of the options at the socket level. - - -File: libc.info, Node: Socket Option Functions, Next: Socket-Level Options, Up: Socket Options - -Socket Option Functions ------------------------ - - Here are the functions for examining and modifying socket options. -They are declared in `sys/socket.h'. - - - Function: int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void - *OPTVAL, socklen_t *OPTLEN-PTR) - The `getsockopt' function gets information about the value of - option OPTNAME at level LEVEL for socket SOCKET. - - The option value is stored in a buffer that OPTVAL points to. - Before the call, you should supply in `*OPTLEN-PTR' the size of - this buffer; on return, it contains the number of bytes of - information actually stored in the buffer. - - Most options interpret the OPTVAL buffer as a single `int' value. - - The actual return value of `getsockopt' is `0' on success and `-1' - on failure. The following `errno' error conditions are defined: - - `EBADF' - The SOCKET argument is not a valid file descriptor. - - `ENOTSOCK' - The descriptor SOCKET is not a socket. - - `ENOPROTOOPT' - The OPTNAME doesn't make sense for the given LEVEL. - - - Function: int setsockopt (int SOCKET, int LEVEL, int OPTNAME, void - *OPTVAL, socklen_t OPTLEN) - This function is used to set the socket option OPTNAME at level - LEVEL for socket SOCKET. The value of the option is passed in the - buffer OPTVAL of size OPTLEN. - - The return value and error codes for `setsockopt' are the same as - for `getsockopt'. - - - -File: libc.info, Node: Socket-Level Options, Prev: Socket Option Functions, Up: Socket Options - -Socket-Level Options --------------------- - - - Constant: int SOL_SOCKET - Use this constant as the LEVEL argument to `getsockopt' or - `setsockopt' to manipulate the socket-level options described in - this section. - -Here is a table of socket-level option names; all are defined in the -header file `sys/socket.h'. - -`SO_DEBUG' - This option toggles recording of debugging information in the - underlying protocol modules. The value has type `int'; a nonzero - value means "yes". - -`SO_REUSEADDR' - This option controls whether `bind' (*note Setting Address::) - should permit reuse of local addresses for this socket. If you - enable this option, you can actually have two sockets with the - same Internet port number; but the system won't allow you to use - the two identically-named sockets in a way that would confuse the - Internet. The reason for this option is that some higher-level - Internet protocols, including FTP, require you to keep reusing the - same port number. - - The value has type `int'; a nonzero value means "yes". - -`SO_KEEPALIVE' - This option controls whether the underlying protocol should - periodically transmit messages on a connected socket. If the peer - fails to respond to these messages, the connection is considered - broken. The value has type `int'; a nonzero value means "yes". - -`SO_DONTROUTE' - This option controls whether outgoing messages bypass the normal - message routing facilities. If set, messages are sent directly to - the network interface instead. The value has type `int'; a nonzero - value means "yes". - -`SO_LINGER' - This option specifies what should happen when the socket of a type - that promises reliable delivery still has untransmitted messages - when it is closed; see *Note Closing a Socket::. The value has - type `struct linger'. - - - Data Type: struct linger - This structure type has the following members: - - `int l_onoff' - This field is interpreted as a boolean. If nonzero, - `close' blocks until the data are transmitted or the - timeout period has expired. - - `int l_linger' - This specifies the timeout period, in seconds. - -`SO_BROADCAST' - This option controls whether datagrams may be broadcast from the - socket. The value has type `int'; a nonzero value means "yes". - -`SO_OOBINLINE' - If this option is set, out-of-band data received on the socket is - placed in the normal input queue. This permits it to be read using - `read' or `recv' without specifying the `MSG_OOB' flag. *Note - Out-of-Band Data::. The value has type `int'; a nonzero value - means "yes". - -`SO_SNDBUF' - This option gets or sets the size of the output buffer. The value - is a `size_t', which is the size in bytes. - -`SO_RCVBUF' - This option gets or sets the size of the input buffer. The value - is a `size_t', which is the size in bytes. - -`SO_STYLE' -`SO_TYPE' - This option can be used with `getsockopt' only. It is used to get - the socket's communication style. `SO_TYPE' is the historical - name, and `SO_STYLE' is the preferred name in GNU. The value has - type `int' and its value designates a communication style; see - *Note Communication Styles::. - -`SO_ERROR' - This option can be used with `getsockopt' only. It is used to - reset the error status of the socket. The value is an `int', - which represents the previous error status. diff -durpNa glibc-2.2.2/manual/libc.info-28 glibc-2.2.3/manual/libc.info-28 --- glibc-2.2.2/manual/libc.info-28 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-28 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,141 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Socket Option Functions, Next: Socket-Level Options, Up: Socket Options + +Socket Option Functions +----------------------- + + Here are the functions for examining and modifying socket options. +They are declared in `sys/socket.h'. + + - Function: int getsockopt (int SOCKET, int LEVEL, int OPTNAME, void + *OPTVAL, socklen_t *OPTLEN-PTR) + The `getsockopt' function gets information about the value of + option OPTNAME at level LEVEL for socket SOCKET. + + The option value is stored in a buffer that OPTVAL points to. + Before the call, you should supply in `*OPTLEN-PTR' the size of + this buffer; on return, it contains the number of bytes of + information actually stored in the buffer. + + Most options interpret the OPTVAL buffer as a single `int' value. + + The actual return value of `getsockopt' is `0' on success and `-1' + on failure. The following `errno' error conditions are defined: + + `EBADF' + The SOCKET argument is not a valid file descriptor. + + `ENOTSOCK' + The descriptor SOCKET is not a socket. + + `ENOPROTOOPT' + The OPTNAME doesn't make sense for the given LEVEL. + + - Function: int setsockopt (int SOCKET, int LEVEL, int OPTNAME, void + *OPTVAL, socklen_t OPTLEN) + This function is used to set the socket option OPTNAME at level + LEVEL for socket SOCKET. The value of the option is passed in the + buffer OPTVAL of size OPTLEN. + + The return value and error codes for `setsockopt' are the same as + for `getsockopt'. + + + +File: libc.info, Node: Socket-Level Options, Prev: Socket Option Functions, Up: Socket Options + +Socket-Level Options +-------------------- + + - Constant: int SOL_SOCKET + Use this constant as the LEVEL argument to `getsockopt' or + `setsockopt' to manipulate the socket-level options described in + this section. + +Here is a table of socket-level option names; all are defined in the +header file `sys/socket.h'. + +`SO_DEBUG' + This option toggles recording of debugging information in the + underlying protocol modules. The value has type `int'; a nonzero + value means "yes". + +`SO_REUSEADDR' + This option controls whether `bind' (*note Setting Address::) + should permit reuse of local addresses for this socket. If you + enable this option, you can actually have two sockets with the + same Internet port number; but the system won't allow you to use + the two identically-named sockets in a way that would confuse the + Internet. The reason for this option is that some higher-level + Internet protocols, including FTP, require you to keep reusing the + same port number. + + The value has type `int'; a nonzero value means "yes". + +`SO_KEEPALIVE' + This option controls whether the underlying protocol should + periodically transmit messages on a connected socket. If the peer + fails to respond to these messages, the connection is considered + broken. The value has type `int'; a nonzero value means "yes". + +`SO_DONTROUTE' + This option controls whether outgoing messages bypass the normal + message routing facilities. If set, messages are sent directly to + the network interface instead. The value has type `int'; a nonzero + value means "yes". + +`SO_LINGER' + This option specifies what should happen when the socket of a type + that promises reliable delivery still has untransmitted messages + when it is closed; see *Note Closing a Socket::. The value has + type `struct linger'. + + - Data Type: struct linger + This structure type has the following members: + + `int l_onoff' + This field is interpreted as a boolean. If nonzero, + `close' blocks until the data are transmitted or the + timeout period has expired. + + `int l_linger' + This specifies the timeout period, in seconds. + +`SO_BROADCAST' + This option controls whether datagrams may be broadcast from the + socket. The value has type `int'; a nonzero value means "yes". + +`SO_OOBINLINE' + If this option is set, out-of-band data received on the socket is + placed in the normal input queue. This permits it to be read using + `read' or `recv' without specifying the `MSG_OOB' flag. *Note + Out-of-Band Data::. The value has type `int'; a nonzero value + means "yes". + +`SO_SNDBUF' + This option gets or sets the size of the output buffer. The value + is a `size_t', which is the size in bytes. + +`SO_RCVBUF' + This option gets or sets the size of the input buffer. The value + is a `size_t', which is the size in bytes. + +`SO_STYLE' +`SO_TYPE' + This option can be used with `getsockopt' only. It is used to get + the socket's communication style. `SO_TYPE' is the historical + name, and `SO_STYLE' is the preferred name in GNU. The value has + type `int' and its value designates a communication style; see + *Note Communication Styles::. + +`SO_ERROR' + This option can be used with `getsockopt' only. It is used to + reset the error status of the socket. The value is an `int', + which represents the previous error status. + + File: libc.info, Node: Networks Database, Prev: Socket Options, Up: Sockets Networks Database @@ -1034,181 +1169,4 @@ system you are using supports `_POSIX_VD suspended output. * Other Special:: Other special characters for BSD systems: they can discard output, and print status. - - -File: libc.info, Node: Editing Characters, Next: Signal Characters, Up: Special Characters - -Characters for Input Editing -............................ - - These special characters are active only in canonical input mode. -*Note Canonical or Not::. - - - Macro: int VEOF - This is the subscript for the EOF character in the special control - character array. `TERMIOS.c_cc[VEOF]' holds the character itself. - - The EOF character is recognized only in canonical input mode. It - acts as a line terminator in the same way as a newline character, - but if the EOF character is typed at the beginning of a line it - causes `read' to return a byte count of zero, indicating - end-of-file. The EOF character itself is discarded. - - Usually, the EOF character is `C-d'. - - - Macro: int VEOL - This is the subscript for the EOL character in the special control - character array. `TERMIOS.c_cc[VEOL]' holds the character itself. - - The EOL character is recognized only in canonical input mode. It - acts as a line terminator, just like a newline character. The EOL - character is not discarded; it is read as the last character in - the input line. - - You don't need to use the EOL character to make end a line. - Just set the ICRNL flag. In fact, this is the default state of - affairs. - - - Macro: int VEOL2 - This is the subscript for the EOL2 character in the special control - character array. `TERMIOS.c_cc[VEOL2]' holds the character itself. - - The EOL2 character works just like the EOL character (see above), - but it can be a different character. Thus, you can specify two - characters to terminate an input line, by setting EOL to one of - them and EOL2 to the other. - - The EOL2 character is a BSD extension; it exists only on BSD - systems and the GNU system. - - - Macro: int VERASE - This is the subscript for the ERASE character in the special - control character array. `TERMIOS.c_cc[VERASE]' holds the - character itself. - - The ERASE character is recognized only in canonical input mode. - When the user types the erase character, the previous character - typed is discarded. (If the terminal generates multibyte - character sequences, this may cause more than one byte of input to - be discarded.) This cannot be used to erase past the beginning of - the current line of text. The ERASE character itself is discarded. - - Usually, the ERASE character is . - - - Macro: int VWERASE - This is the subscript for the WERASE character in the special - control character array. `TERMIOS.c_cc[VWERASE]' holds the - character itself. - - The WERASE character is recognized only in canonical mode. It - erases an entire word of prior input, and any whitespace after it; - whitespace characters before the word are not erased. - - The definition of a "word" depends on the setting of the - `ALTWERASE' mode; *note Local Modes::. - - If the `ALTWERASE' mode is not set, a word is defined as a sequence - of any characters except space or tab. - - If the `ALTWERASE' mode is set, a word is defined as a sequence of - characters containing only letters, numbers, and underscores, - optionally followed by one character that is not a letter, number, - or underscore. - - The WERASE character is usually `C-w'. - - This is a BSD extension. - - - Macro: int VKILL - This is the subscript for the KILL character in the special control - character array. `TERMIOS.c_cc[VKILL]' holds the character itself. - - The KILL character is recognized only in canonical input mode. - When the user types the kill character, the entire contents of the - current line of input are discarded. The kill character itself is - discarded too. - - The KILL character is usually `C-u'. - - - Macro: int VREPRINT - This is the subscript for the REPRINT character in the special - control character array. `TERMIOS.c_cc[VREPRINT]' holds the - character itself. - - The REPRINT character is recognized only in canonical mode. It - reprints the current input line. If some asynchronous output has - come while you are typing, this lets you see the line you are - typing clearly again. - - The REPRINT character is usually `C-r'. - - This is a BSD extension. - - -File: libc.info, Node: Signal Characters, Next: Start/Stop Characters, Prev: Editing Characters, Up: Special Characters - -Characters that Cause Signals -............................. - - These special characters may be active in either canonical or -noncanonical input mode, but only when the `ISIG' flag is set (*note -Local Modes::). - - - Macro: int VINTR - This is the subscript for the INTR character in the special control - character array. `TERMIOS.c_cc[VINTR]' holds the character itself. - - The INTR (interrupt) character raises a `SIGINT' signal for all - processes in the foreground job associated with the terminal. The - INTR character itself is then discarded. *Note Signal Handling::, - for more information about signals. - - Typically, the INTR character is `C-c'. - - - Macro: int VQUIT - This is the subscript for the QUIT character in the special control - character array. `TERMIOS.c_cc[VQUIT]' holds the character itself. - - The QUIT character raises a `SIGQUIT' signal for all processes in - the foreground job associated with the terminal. The QUIT - character itself is then discarded. *Note Signal Handling::, for - more information about signals. - - Typically, the QUIT character is `C-\'. - - - Macro: int VSUSP - This is the subscript for the SUSP character in the special control - character array. `TERMIOS.c_cc[VSUSP]' holds the character itself. - - The SUSP (suspend) character is recognized only if the - implementation supports job control (*note Job Control::). It - causes a `SIGTSTP' signal to be sent to all processes in the - foreground job associated with the terminal. The SUSP character - itself is then discarded. *Note Signal Handling::, for more - information about signals. - - Typically, the SUSP character is `C-z'. - - Few applications disable the normal interpretation of the SUSP -character. If your program does this, it should provide some other -mechanism for the user to stop the job. When the user invokes this -mechanism, the program should send a `SIGTSTP' signal to the process -group of the process, not just to the process itself. *Note Signaling -Another Process::. - - - Macro: int VDSUSP - This is the subscript for the DSUSP character in the special - control character array. `TERMIOS.c_cc[VDSUSP]' holds the - character itself. - - The DSUSP (suspend) character is recognized only if the - implementation supports job control (*note Job Control::). It - sends a `SIGTSTP' signal, like the SUSP character, but not right - away--only when the program tries to read it as input. Not all - systems with job control support DSUSP; only BSD-compatible - systems (including the GNU system). - - *Note Signal Handling::, for more information about signals. - - Typically, the DSUSP character is `C-y'. diff -durpNa glibc-2.2.2/manual/libc.info-29 glibc-2.2.3/manual/libc.info-29 --- glibc-2.2.2/manual/libc.info-29 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-29 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,183 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Editing Characters, Next: Signal Characters, Up: Special Characters + +Characters for Input Editing +............................ + + These special characters are active only in canonical input mode. +*Note Canonical or Not::. + + - Macro: int VEOF + This is the subscript for the EOF character in the special control + character array. `TERMIOS.c_cc[VEOF]' holds the character itself. + + The EOF character is recognized only in canonical input mode. It + acts as a line terminator in the same way as a newline character, + but if the EOF character is typed at the beginning of a line it + causes `read' to return a byte count of zero, indicating + end-of-file. The EOF character itself is discarded. + + Usually, the EOF character is `C-d'. + + - Macro: int VEOL + This is the subscript for the EOL character in the special control + character array. `TERMIOS.c_cc[VEOL]' holds the character itself. + + The EOL character is recognized only in canonical input mode. It + acts as a line terminator, just like a newline character. The EOL + character is not discarded; it is read as the last character in + the input line. + + You don't need to use the EOL character to make end a line. + Just set the ICRNL flag. In fact, this is the default state of + affairs. + + - Macro: int VEOL2 + This is the subscript for the EOL2 character in the special control + character array. `TERMIOS.c_cc[VEOL2]' holds the character itself. + + The EOL2 character works just like the EOL character (see above), + but it can be a different character. Thus, you can specify two + characters to terminate an input line, by setting EOL to one of + them and EOL2 to the other. + + The EOL2 character is a BSD extension; it exists only on BSD + systems and the GNU system. + + - Macro: int VERASE + This is the subscript for the ERASE character in the special + control character array. `TERMIOS.c_cc[VERASE]' holds the + character itself. + + The ERASE character is recognized only in canonical input mode. + When the user types the erase character, the previous character + typed is discarded. (If the terminal generates multibyte + character sequences, this may cause more than one byte of input to + be discarded.) This cannot be used to erase past the beginning of + the current line of text. The ERASE character itself is discarded. + + Usually, the ERASE character is . + + - Macro: int VWERASE + This is the subscript for the WERASE character in the special + control character array. `TERMIOS.c_cc[VWERASE]' holds the + character itself. + + The WERASE character is recognized only in canonical mode. It + erases an entire word of prior input, and any whitespace after it; + whitespace characters before the word are not erased. + + The definition of a "word" depends on the setting of the + `ALTWERASE' mode; *note Local Modes::. + + If the `ALTWERASE' mode is not set, a word is defined as a sequence + of any characters except space or tab. + + If the `ALTWERASE' mode is set, a word is defined as a sequence of + characters containing only letters, numbers, and underscores, + optionally followed by one character that is not a letter, number, + or underscore. + + The WERASE character is usually `C-w'. + + This is a BSD extension. + + - Macro: int VKILL + This is the subscript for the KILL character in the special control + character array. `TERMIOS.c_cc[VKILL]' holds the character itself. + + The KILL character is recognized only in canonical input mode. + When the user types the kill character, the entire contents of the + current line of input are discarded. The kill character itself is + discarded too. + + The KILL character is usually `C-u'. + + - Macro: int VREPRINT + This is the subscript for the REPRINT character in the special + control character array. `TERMIOS.c_cc[VREPRINT]' holds the + character itself. + + The REPRINT character is recognized only in canonical mode. It + reprints the current input line. If some asynchronous output has + come while you are typing, this lets you see the line you are + typing clearly again. + + The REPRINT character is usually `C-r'. + + This is a BSD extension. + + +File: libc.info, Node: Signal Characters, Next: Start/Stop Characters, Prev: Editing Characters, Up: Special Characters + +Characters that Cause Signals +............................. + + These special characters may be active in either canonical or +noncanonical input mode, but only when the `ISIG' flag is set (*note +Local Modes::). + + - Macro: int VINTR + This is the subscript for the INTR character in the special control + character array. `TERMIOS.c_cc[VINTR]' holds the character itself. + + The INTR (interrupt) character raises a `SIGINT' signal for all + processes in the foreground job associated with the terminal. The + INTR character itself is then discarded. *Note Signal Handling::, + for more information about signals. + + Typically, the INTR character is `C-c'. + + - Macro: int VQUIT + This is the subscript for the QUIT character in the special control + character array. `TERMIOS.c_cc[VQUIT]' holds the character itself. + + The QUIT character raises a `SIGQUIT' signal for all processes in + the foreground job associated with the terminal. The QUIT + character itself is then discarded. *Note Signal Handling::, for + more information about signals. + + Typically, the QUIT character is `C-\'. + + - Macro: int VSUSP + This is the subscript for the SUSP character in the special control + character array. `TERMIOS.c_cc[VSUSP]' holds the character itself. + + The SUSP (suspend) character is recognized only if the + implementation supports job control (*note Job Control::). It + causes a `SIGTSTP' signal to be sent to all processes in the + foreground job associated with the terminal. The SUSP character + itself is then discarded. *Note Signal Handling::, for more + information about signals. + + Typically, the SUSP character is `C-z'. + + Few applications disable the normal interpretation of the SUSP +character. If your program does this, it should provide some other +mechanism for the user to stop the job. When the user invokes this +mechanism, the program should send a `SIGTSTP' signal to the process +group of the process, not just to the process itself. *Note Signaling +Another Process::. + + - Macro: int VDSUSP + This is the subscript for the DSUSP character in the special + control character array. `TERMIOS.c_cc[VDSUSP]' holds the + character itself. + + The DSUSP (suspend) character is recognized only if the + implementation supports job control (*note Job Control::). It + sends a `SIGTSTP' signal, like the SUSP character, but not right + away--only when the program tries to read it as input. Not all + systems with job control support DSUSP; only BSD-compatible + systems (including the GNU system). + + *Note Signal Handling::, for more information about signals. + + Typically, the DSUSP character is `C-y'. + + File: libc.info, Node: Start/Stop Characters, Next: Other Special, Prev: Signal Characters, Up: Special Characters Special Characters for Flow Control @@ -1151,202 +1328,4 @@ messages get discarded without ever reac syslog (LOG_INFO, "A tree falls in a forest"); closelog (); - - -File: libc.info, Node: Mathematics, Next: Arithmetic, Prev: Syslog, Up: Top - -Mathematics -*********** - - This chapter contains information about functions for performing -mathematical computations, such as trigonometric functions. Most of -these functions have prototypes declared in the header file `math.h'. -The complex-valued functions are defined in `complex.h'. - - All mathematical functions which take a floating-point argument have -three variants, one each for `double', `float', and `long double' -arguments. The `double' versions are mostly defined in ISO C89. The -`float' and `long double' versions are from the numeric extensions to C -included in ISO C99. - - Which of the three versions of a function should be used depends on -the situation. For most calculations, the `float' functions are the -fastest. On the other hand, the `long double' functions have the -highest precision. `double' is somewhere in between. It is usually -wise to pick the narrowest type that can accommodate your data. Not -all machines have a distinct `long double' type; it may be the same as -`double'. - -* Menu: - -* Mathematical Constants:: Precise numeric values for often-used - constants. -* Trig Functions:: Sine, cosine, tangent, and friends. -* Inverse Trig Functions:: Arcsine, arccosine, etc. -* Exponents and Logarithms:: Also pow and sqrt. -* Hyperbolic Functions:: sinh, cosh, tanh, etc. -* Special Functions:: Bessel, gamma, erf. -* Errors in Math Functions:: Known Maximum Errors in Math Functions. -* Pseudo-Random Numbers:: Functions for generating pseudo-random - numbers. -* FP Function Optimizations:: Fast code or small code. - - -File: libc.info, Node: Mathematical Constants, Next: Trig Functions, Up: Mathematics - -Predefined Mathematical Constants -================================= - - The header `math.h' defines several useful mathematical constants. -All values are defined as preprocessor macros starting with `M_'. The -values provided are: - -`M_E' - The base of natural logarithms. - -`M_LOG2E' - The logarithm to base `2' of `M_E'. - -`M_LOG10E' - The logarithm to base `10' of `M_E'. - -`M_LN2' - The natural logarithm of `2'. - -`M_LN10' - The natural logarithm of `10'. - -`M_PI' - Pi, the ratio of a circle's circumference to its diameter. - -`M_PI_2' - Pi divided by two. - -`M_PI_4' - Pi divided by four. - -`M_1_PI' - The reciprocal of pi (1/pi) - -`M_2_PI' - Two times the reciprocal of pi. - -`M_2_SQRTPI' - Two times the reciprocal of the square root of pi. - -`M_SQRT2' - The square root of two. - -`M_SQRT1_2' - The reciprocal of the square root of two (also the square root of - 1/2). - - These constants come from the Unix98 standard and were also -available in 4.4BSD; therefore they are only defined if `_BSD_SOURCE' or -`_XOPEN_SOURCE=500', or a more general feature select macro, is -defined. The default set of features includes these constants. *Note -Feature Test Macros::. - - All values are of type `double'. As an extension, the GNU C library -also defines these constants with type `long double'. The `long -double' macros have a lowercase `l' appended to their names: `M_El', -`M_PIl', and so forth. These are only available if `_GNU_SOURCE' is -defined. - - _Note:_ Some programs use a constant named `PI' which has the same -value as `M_PI'. This constant is not standard; it may have appeared -in some old AT&T headers, and is mentioned in Stroustrup's book on C++. -It infringes on the user's name space, so the GNU C library does not -define it. Fixing programs written to expect it is simple: replace -`PI' with `M_PI' throughout, or put `-DPI=M_PI' on the compiler command -line. - - -File: libc.info, Node: Trig Functions, Next: Inverse Trig Functions, Prev: Mathematical Constants, Up: Mathematics - -Trigonometric Functions -======================= - - These are the familiar `sin', `cos', and `tan' functions. The -arguments to all of these functions are in units of radians; recall -that pi radians equals 180 degrees. - - The math library normally defines `M_PI' to a `double' approximation -of pi. If strict ISO and/or POSIX compliance are requested this -constant is not defined, but you can easily define it yourself: - - #define M_PI 3.14159265358979323846264338327 - -You can also compute the value of pi with the expression `acos (-1.0)'. - - - Function: double sin (double X) - - Function: float sinf (float X) - - Function: long double sinl (long double X) - These functions return the sine of X, where X is given in radians. - The return value is in the range `-1' to `1'. - - - Function: double cos (double X) - - Function: float cosf (float X) - - Function: long double cosl (long double X) - These functions return the cosine of X, where X is given in - radians. The return value is in the range `-1' to `1'. - - - Function: double tan (double X) - - Function: float tanf (float X) - - Function: long double tanl (long double X) - These functions return the tangent of X, where X is given in - radians. - - Mathematically, the tangent function has singularities at odd - multiples of pi/2. If the argument X is too close to one of these - singularities, `tan' will signal overflow. - - In many applications where `sin' and `cos' are used, the sine and -cosine of the same angle are needed at the same time. It is more -efficient to compute them simultaneously, so the library provides a -function to do that. - - - Function: void sincos (double X, double *SINX, double *COSX) - - Function: void sincosf (float X, float *SINX, float *COSX) - - Function: void sincosl (long double X, long double *SINX, long - double *COSX) - These functions return the sine of X in `*SINX' and the cosine of - X in `*COS', where X is given in radians. Both values, `*SINX' - and `*COSX', are in the range of `-1' to `1'. - - This function is a GNU extension. Portable programs should be - prepared to cope with its absence. - - ISO C99 defines variants of the trig functions which work on complex -numbers. The GNU C library provides these functions, but they are only -useful if your compiler supports the new complex types defined by the -standard. (As of this writing GCC supports complex numbers, but there -are bugs in the implementation.) - - - Function: complex double csin (complex double Z) - - Function: complex float csinf (complex float Z) - - Function: complex long double csinl (complex long double Z) - These functions return the complex sine of Z. The mathematical - definition of the complex sine is - - sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i)). - - - Function: complex double ccos (complex double Z) - - Function: complex float ccosf (complex float Z) - - Function: complex long double ccosl (complex long double Z) - These functions return the complex cosine of Z. The mathematical - definition of the complex cosine is - - cos (z) = 1/2 * (exp (z*i) + exp (-z*i)) - - - Function: complex double ctan (complex double Z) - - Function: complex float ctanf (complex float Z) - - Function: complex long double ctanl (complex long double Z) - These functions return the complex tangent of Z. The mathematical - definition of the complex tangent is - - tan (z) = -i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i)) - - The complex tangent has poles at pi/2 + 2n, where n is an integer. - `ctan' may signal overflow if Z is too close to a pole. diff -durpNa glibc-2.2.2/manual/libc.info-30 glibc-2.2.3/manual/libc.info-30 --- glibc-2.2.2/manual/libc.info-30 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-30 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,204 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Mathematics, Next: Arithmetic, Prev: Syslog, Up: Top + +Mathematics +*********** + + This chapter contains information about functions for performing +mathematical computations, such as trigonometric functions. Most of +these functions have prototypes declared in the header file `math.h'. +The complex-valued functions are defined in `complex.h'. + + All mathematical functions which take a floating-point argument have +three variants, one each for `double', `float', and `long double' +arguments. The `double' versions are mostly defined in ISO C89. The +`float' and `long double' versions are from the numeric extensions to C +included in ISO C99. + + Which of the three versions of a function should be used depends on +the situation. For most calculations, the `float' functions are the +fastest. On the other hand, the `long double' functions have the +highest precision. `double' is somewhere in between. It is usually +wise to pick the narrowest type that can accommodate your data. Not +all machines have a distinct `long double' type; it may be the same as +`double'. + +* Menu: + +* Mathematical Constants:: Precise numeric values for often-used + constants. +* Trig Functions:: Sine, cosine, tangent, and friends. +* Inverse Trig Functions:: Arcsine, arccosine, etc. +* Exponents and Logarithms:: Also pow and sqrt. +* Hyperbolic Functions:: sinh, cosh, tanh, etc. +* Special Functions:: Bessel, gamma, erf. +* Errors in Math Functions:: Known Maximum Errors in Math Functions. +* Pseudo-Random Numbers:: Functions for generating pseudo-random + numbers. +* FP Function Optimizations:: Fast code or small code. + + +File: libc.info, Node: Mathematical Constants, Next: Trig Functions, Up: Mathematics + +Predefined Mathematical Constants +================================= + + The header `math.h' defines several useful mathematical constants. +All values are defined as preprocessor macros starting with `M_'. The +values provided are: + +`M_E' + The base of natural logarithms. + +`M_LOG2E' + The logarithm to base `2' of `M_E'. + +`M_LOG10E' + The logarithm to base `10' of `M_E'. + +`M_LN2' + The natural logarithm of `2'. + +`M_LN10' + The natural logarithm of `10'. + +`M_PI' + Pi, the ratio of a circle's circumference to its diameter. + +`M_PI_2' + Pi divided by two. + +`M_PI_4' + Pi divided by four. + +`M_1_PI' + The reciprocal of pi (1/pi) + +`M_2_PI' + Two times the reciprocal of pi. + +`M_2_SQRTPI' + Two times the reciprocal of the square root of pi. + +`M_SQRT2' + The square root of two. + +`M_SQRT1_2' + The reciprocal of the square root of two (also the square root of + 1/2). + + These constants come from the Unix98 standard and were also +available in 4.4BSD; therefore they are only defined if `_BSD_SOURCE' or +`_XOPEN_SOURCE=500', or a more general feature select macro, is +defined. The default set of features includes these constants. *Note +Feature Test Macros::. + + All values are of type `double'. As an extension, the GNU C library +also defines these constants with type `long double'. The `long +double' macros have a lowercase `l' appended to their names: `M_El', +`M_PIl', and so forth. These are only available if `_GNU_SOURCE' is +defined. + + _Note:_ Some programs use a constant named `PI' which has the same +value as `M_PI'. This constant is not standard; it may have appeared +in some old AT&T headers, and is mentioned in Stroustrup's book on C++. +It infringes on the user's name space, so the GNU C library does not +define it. Fixing programs written to expect it is simple: replace +`PI' with `M_PI' throughout, or put `-DPI=M_PI' on the compiler command +line. + + +File: libc.info, Node: Trig Functions, Next: Inverse Trig Functions, Prev: Mathematical Constants, Up: Mathematics + +Trigonometric Functions +======================= + + These are the familiar `sin', `cos', and `tan' functions. The +arguments to all of these functions are in units of radians; recall +that pi radians equals 180 degrees. + + The math library normally defines `M_PI' to a `double' approximation +of pi. If strict ISO and/or POSIX compliance are requested this +constant is not defined, but you can easily define it yourself: + + #define M_PI 3.14159265358979323846264338327 + +You can also compute the value of pi with the expression `acos (-1.0)'. + + - Function: double sin (double X) + - Function: float sinf (float X) + - Function: long double sinl (long double X) + These functions return the sine of X, where X is given in radians. + The return value is in the range `-1' to `1'. + + - Function: double cos (double X) + - Function: float cosf (float X) + - Function: long double cosl (long double X) + These functions return the cosine of X, where X is given in + radians. The return value is in the range `-1' to `1'. + + - Function: double tan (double X) + - Function: float tanf (float X) + - Function: long double tanl (long double X) + These functions return the tangent of X, where X is given in + radians. + + Mathematically, the tangent function has singularities at odd + multiples of pi/2. If the argument X is too close to one of these + singularities, `tan' will signal overflow. + + In many applications where `sin' and `cos' are used, the sine and +cosine of the same angle are needed at the same time. It is more +efficient to compute them simultaneously, so the library provides a +function to do that. + + - Function: void sincos (double X, double *SINX, double *COSX) + - Function: void sincosf (float X, float *SINX, float *COSX) + - Function: void sincosl (long double X, long double *SINX, long + double *COSX) + These functions return the sine of X in `*SINX' and the cosine of + X in `*COS', where X is given in radians. Both values, `*SINX' + and `*COSX', are in the range of `-1' to `1'. + + This function is a GNU extension. Portable programs should be + prepared to cope with its absence. + + ISO C99 defines variants of the trig functions which work on complex +numbers. The GNU C library provides these functions, but they are only +useful if your compiler supports the new complex types defined by the +standard. (As of this writing GCC supports complex numbers, but there +are bugs in the implementation.) + + - Function: complex double csin (complex double Z) + - Function: complex float csinf (complex float Z) + - Function: complex long double csinl (complex long double Z) + These functions return the complex sine of Z. The mathematical + definition of the complex sine is + + sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i)). + + - Function: complex double ccos (complex double Z) + - Function: complex float ccosf (complex float Z) + - Function: complex long double ccosl (complex long double Z) + These functions return the complex cosine of Z. The mathematical + definition of the complex cosine is + + cos (z) = 1/2 * (exp (z*i) + exp (-z*i)) + + - Function: complex double ctan (complex double Z) + - Function: complex float ctanf (complex float Z) + - Function: complex long double ctanl (complex long double Z) + These functions return the complex tangent of Z. The mathematical + definition of the complex tangent is + + tan (z) = -i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i)) + + The complex tangent has poles at pi/2 + 2n, where n is an integer. + `ctan' may signal overflow if Z is too close to a pole. + + File: libc.info, Node: Inverse Trig Functions, Next: Exponents and Logarithms, Prev: Trig Functions, Up: Mathematics Inverse Trigonometric Functions @@ -914,59 +1112,4 @@ badly designed and unsuitable for seriou reentrant GNU extensions to the SVID random number generator. The POSIX.1 interface should only be used when the GNU extensions are not available. - - -File: libc.info, Node: BSD Random, Next: SVID Random, Prev: ISO Random, Up: Pseudo-Random Numbers - -BSD Random Number Functions ---------------------------- - - This section describes a set of random number generation functions -that are derived from BSD. There is no advantage to using these -functions with the GNU C library; we support them for BSD compatibility -only. - - The prototypes for these functions are in `stdlib.h'. - - - Function: long int random (void) - This function returns the next pseudo-random number in the - sequence. The value returned ranges from `0' to `RAND_MAX'. - - *Note:* Temporarily this function was defined to return a - `int32_t' value to indicate that the return value always contains - 32 bits even if `long int' is wider. The standard demands it - differently. Users must always be aware of the 32-bit limitation, - though. - - - Function: void srandom (unsigned int SEED) - The `srandom' function sets the state of the random number - generator based on the integer SEED. If you supply a SEED value - of `1', this will cause `random' to reproduce the default set of - random numbers. - - To produce a different set of pseudo-random numbers each time your - program runs, do `srandom (time (0))'. - - - Function: void * initstate (unsigned int SEED, void *STATE, size_t - SIZE) - The `initstate' function is used to initialize the random number - generator state. The argument STATE is an array of SIZE bytes, - used to hold the state information. It is initialized based on - SEED. The size must be between 8 and 256 bytes, and should be a - power of two. The bigger the STATE array, the better. - - The return value is the previous value of the state information - array. You can use this value later as an argument to `setstate' - to restore that state. - - - Function: void * setstate (void *STATE) - The `setstate' function restores the random number state - information STATE. The argument must have been the result of a - previous call to INITSTATE or SETSTATE. - - The return value is the previous value of the state information - array. You can use this value later as an argument to `setstate' - to restore that state. - - If the function fails the return value is `NULL'. diff -durpNa glibc-2.2.2/manual/libc.info-31 glibc-2.2.3/manual/libc.info-31 --- glibc-2.2.2/manual/libc.info-31 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-31 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,107 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: BSD Random, Next: SVID Random, Prev: ISO Random, Up: Pseudo-Random Numbers + +BSD Random Number Functions +--------------------------- + + This section describes a set of random number generation functions +that are derived from BSD. There is no advantage to using these +functions with the GNU C library; we support them for BSD compatibility +only. + + The prototypes for these functions are in `stdlib.h'. + + - Function: long int random (void) + This function returns the next pseudo-random number in the + sequence. The value returned ranges from `0' to `RAND_MAX'. + + *Note:* Temporarily this function was defined to return a + `int32_t' value to indicate that the return value always contains + 32 bits even if `long int' is wider. The standard demands it + differently. Users must always be aware of the 32-bit limitation, + though. + + - Function: void srandom (unsigned int SEED) + The `srandom' function sets the state of the random number + generator based on the integer SEED. If you supply a SEED value + of `1', this will cause `random' to reproduce the default set of + random numbers. + + To produce a different set of pseudo-random numbers each time your + program runs, do `srandom (time (0))'. + + - Function: void * initstate (unsigned int SEED, void *STATE, size_t + SIZE) + The `initstate' function is used to initialize the random number + generator state. The argument STATE is an array of SIZE bytes, + used to hold the state information. It is initialized based on + SEED. The size must be between 8 and 256 bytes, and should be a + power of two. The bigger the STATE array, the better. + + The return value is the previous value of the state information + array. You can use this value later as an argument to `setstate' + to restore that state. + + - Function: void * setstate (void *STATE) + The `setstate' function restores the random number state + information STATE. The argument must have been the result of a + previous call to INITSTATE or SETSTATE. + + The return value is the previous value of the state information + array. You can use this value later as an argument to `setstate' + to restore that state. + + If the function fails the return value is `NULL'. + + The four functions described so far in this section all work on a +state which is shared by all threads. The state is not directly +accessible to the user and can only be modified by these functions. +This makes it hard to deal with situations where each thread should +have its own pseudo-random number generator. + + The GNU C library contains four additional functions which contain +the state as an explicit parameter and therefore make it possible to +handle thread-local PRNGs. Beside this there are no difference. In +fact, the four functions already discussed are implemented internally +using the following interfaces. + + The `stdlib.h' header contains a definition of the following type: + + - Data Type: struct random_data + Objects of type `struct random_data' contain the information + necessary to represent the state of the PRNG. Although a complete + definition of the type is present the type should be treated as + opaque. + + The functions modifying the state follow exactly the already +described functions. + + - Function: int random_r (struct random_data *restrict BUF, int32_t + *restrict RESULT) + The `random_r' function behaves exactly like the `random' function + except that it uses and modifies the state in the object pointed + to by the first parameter instead of the global state. + + - Function: int srandom_r (unsigned int SEED, struct random_data *BUF) + The `srandom_r' function behaves exactly like the `srandom' + function except that it uses and modifies the state in the object + pointed to by the second parameter instead of the global state. + + - Function: int initstate_r (unsigned int SEED, char *restrict + STATEBUF, size_t STATELEN, struct random_data *restrict BUF) + The `initstate_r' function behaves exactly like the `initstate' + function except that it uses and modifies the state in the object + pointed to by the fourth parameter instead of the global state. + + - Function: int setstate_r (char *restrict STATEBUF, struct + random_data *restrict BUF) + The `setstate_r' function behaves exactly like the `setstate' + function except that it uses and modifies the state in the object + pointed to by the first parameter instead of the global state. + + File: libc.info, Node: SVID Random, Prev: BSD Random, Up: Pseudo-Random Numbers SVID Random Number Function @@ -61,6 +162,8 @@ generator works. By default they are but they can also be changed by the user. `m' is of course 2^48 since the state consists of a 48-bit array. + The prototypes for these functions are in `stdlib.h'. + - Function: double drand48 (void) This function returns a `double' value in the range of `0.0' to `1.0' (exclusive). The random bits are determined by the global @@ -438,42 +541,42 @@ certain size, the corresponding above ty If you don't need a specific storage size, but want the smallest data structure with _at least_ N bits, use one of these: - * int8_least_t + * int_least8_t - * int16_least_t + * int_least16_t - * int32_least_t + * int_least32_t - * int64_least_t + * int_least64_t - * uint8_least_t + * uint_least8_t - * uint16_least_t + * uint_least16_t - * uint32_least_t + * uint_least32_t - * uint64_least_t + * uint_least64_t If you don't need a specific storage size, but want the data structure that allows the fastest access while having at least N bits (and among data structures with the same access speed, the smallest one), use one of these: - * int8_fast_t + * int_fast8_t - * int16_fast_t + * int_fast16_t - * int32_fast_t + * int_fast32_t - * int64_fast_t + * int_fast64_t - * uint8_fast_t + * uint_fast8_t - * uint16_fast_t + * uint_fast16_t - * uint32_fast_t + * uint_fast32_t - * uint64_fast_t + * uint_fast64_t If you want an integer with the widest range possible on the platform on which it is being used, use one of the following. If you @@ -1092,91 +1195,4 @@ test for overflow on both old and new ha Mathematical functions return the appropriately typed version of `HUGE_VAL' or `-HUGE_VAL' when the result is too large to be represented. - - -File: libc.info, Node: Rounding, Next: Control Functions, Prev: Floating Point Errors, Up: Arithmetic - -Rounding Modes -============== - - Floating-point calculations are carried out internally with extra -precision, and then rounded to fit into the destination type. This -ensures that results are as precise as the input data. IEEE 754 -defines four possible rounding modes: - -Round to nearest. - This is the default mode. It should be used unless there is a - specific need for one of the others. In this mode results are - rounded to the nearest representable value. If the result is - midway between two representable values, the even representable is - chosen. "Even" here means the lowest-order bit is zero. This - rounding mode prevents statistical bias and guarantees numeric - stability: round-off errors in a lengthy calculation will remain - smaller than half of `FLT_EPSILON'. - -Round toward plus Infinity. - All results are rounded to the smallest representable value which - is greater than the result. - -Round toward minus Infinity. - All results are rounded to the largest representable value which - is less than the result. - -Round toward zero. - All results are rounded to the largest representable value whose - magnitude is less than that of the result. In other words, if the - result is negative it is rounded up; if it is positive, it is - rounded down. - -`fenv.h' defines constants which you can use to refer to the various -rounding modes. Each one will be defined if and only if the FPU -supports the corresponding rounding mode. - -`FE_TONEAREST' - Round to nearest. - -`FE_UPWARD' - Round toward +oo. - -`FE_DOWNWARD' - Round toward -oo. - -`FE_TOWARDZERO' - Round toward zero. - - Underflow is an unusual case. Normally, IEEE 754 floating point -numbers are always normalized (*note Floating Point Concepts::). -Numbers smaller than 2^r (where r is the minimum exponent, -`FLT_MIN_RADIX-1' for FLOAT) cannot be represented as normalized -numbers. Rounding all such numbers to zero or 2^r would cause some -algorithms to fail at 0. Therefore, they are left in denormalized -form. That produces loss of precision, since some bits of the mantissa -are stolen to indicate the decimal point. - - If a result is too small to be represented as a denormalized number, -it is rounded to zero. However, the sign of the result is preserved; if -the calculation was negative, the result is "negative zero". Negative -zero can also result from some operations on infinity, such as 4/-oo. -Negative zero behaves identically to zero except when the `copysign' or -`signbit' functions are used to check the sign bit directly. - - At any time one of the above four rounding modes is selected. You -can find out which one with this function: - - - Function: int fegetround (void) - Returns the currently selected rounding mode, represented by one - of the values of the defined rounding mode macros. - -To change the rounding mode, use this function: - - - Function: int fesetround (int ROUND) - Changes the currently selected rounding mode to ROUND. If ROUND - does not correspond to one of the supported rounding modes nothing - is changed. `fesetround' returns zero if it changed the rounding - mode, a nonzero value if the mode is not supported. - - You should avoid changing the rounding mode if possible. It can be -an expensive operation; also, some hardware requires you to compile your -program differently for it to work. The resulting code may run slower. -See your compiler documentation for details. diff -durpNa glibc-2.2.2/manual/libc.info-32 glibc-2.2.3/manual/libc.info-32 --- glibc-2.2.2/manual/libc.info-32 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-32 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,93 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Rounding, Next: Control Functions, Prev: Floating Point Errors, Up: Arithmetic + +Rounding Modes +============== + + Floating-point calculations are carried out internally with extra +precision, and then rounded to fit into the destination type. This +ensures that results are as precise as the input data. IEEE 754 +defines four possible rounding modes: + +Round to nearest. + This is the default mode. It should be used unless there is a + specific need for one of the others. In this mode results are + rounded to the nearest representable value. If the result is + midway between two representable values, the even representable is + chosen. "Even" here means the lowest-order bit is zero. This + rounding mode prevents statistical bias and guarantees numeric + stability: round-off errors in a lengthy calculation will remain + smaller than half of `FLT_EPSILON'. + +Round toward plus Infinity. + All results are rounded to the smallest representable value which + is greater than the result. + +Round toward minus Infinity. + All results are rounded to the largest representable value which + is less than the result. + +Round toward zero. + All results are rounded to the largest representable value whose + magnitude is less than that of the result. In other words, if the + result is negative it is rounded up; if it is positive, it is + rounded down. + +`fenv.h' defines constants which you can use to refer to the various +rounding modes. Each one will be defined if and only if the FPU +supports the corresponding rounding mode. + +`FE_TONEAREST' + Round to nearest. + +`FE_UPWARD' + Round toward +oo. + +`FE_DOWNWARD' + Round toward -oo. + +`FE_TOWARDZERO' + Round toward zero. + + Underflow is an unusual case. Normally, IEEE 754 floating point +numbers are always normalized (*note Floating Point Concepts::). +Numbers smaller than 2^r (where r is the minimum exponent, +`FLT_MIN_RADIX-1' for FLOAT) cannot be represented as normalized +numbers. Rounding all such numbers to zero or 2^r would cause some +algorithms to fail at 0. Therefore, they are left in denormalized +form. That produces loss of precision, since some bits of the mantissa +are stolen to indicate the decimal point. + + If a result is too small to be represented as a denormalized number, +it is rounded to zero. However, the sign of the result is preserved; if +the calculation was negative, the result is "negative zero". Negative +zero can also result from some operations on infinity, such as 4/-oo. +Negative zero behaves identically to zero except when the `copysign' or +`signbit' functions are used to check the sign bit directly. + + At any time one of the above four rounding modes is selected. You +can find out which one with this function: + + - Function: int fegetround (void) + Returns the currently selected rounding mode, represented by one + of the values of the defined rounding mode macros. + +To change the rounding mode, use this function: + + - Function: int fesetround (int ROUND) + Changes the currently selected rounding mode to ROUND. If ROUND + does not correspond to one of the supported rounding modes nothing + is changed. `fesetround' returns zero if it changed the rounding + mode, a nonzero value if the mode is not supported. + + You should avoid changing the rounding mode if possible. It can be +an expensive operation; also, some hardware requires you to compile your +program differently for it to work. The resulting code may run slower. +See your compiler documentation for details. + + File: libc.info, Node: Control Functions, Next: Arithmetic Functions, Prev: Rounding, Up: Arithmetic Floating-Point Control Functions @@ -999,117 +1086,4 @@ and returns the sum of them: return sum; } - - -File: libc.info, Node: Parsing of Floats, Prev: Parsing of Integers, Up: Parsing of Numbers - -Parsing of Floats ------------------ - - The `str' functions are declared in `stdlib.h' and those beginning -with `wcs' are declared in `wchar.h'. One might wonder about the use -of `restrict' in the prototypes of the functions in this section. It -is seemingly useless but the ISO C standard uses it (for the functions -defined there) so we have to do it as well. - - - Function: double strtod (const char *restrict STRING, char - **restrict TAILPTR) - The `strtod' ("string-to-double") function converts the initial - part of STRING to a floating-point number, which is returned as a - value of type `double'. - - This function attempts to decompose STRING as follows: - - * A (possibly empty) sequence of whitespace characters. Which - characters are whitespace is determined by the `isspace' - function (*note Classification of Characters::). These are - discarded. - - * An optional plus or minus sign (`+' or `-'). - - * A floating point number in decimal or hexadecimal format. The - decimal format is: - - A nonempty sequence of digits optionally containing a - decimal-point character--normally `.', but it depends on - the locale (*note General Numeric::). - - - An optional exponent part, consisting of a character `e' - or `E', an optional sign, and a sequence of digits. - - - The hexadecimal format is as follows: - - A 0x or 0X followed by a nonempty sequence of - hexadecimal digits optionally containing a decimal-point - character--normally `.', but it depends on the locale - (*note General Numeric::). - - - An optional binary-exponent part, consisting of a - character `p' or `P', an optional sign, and a sequence - of digits. - - - * Any remaining characters in the string. If TAILPTR is not a - null pointer, a pointer to this tail of the string is stored - in `*TAILPTR'. - - If the string is empty, contains only whitespace, or does not - contain an initial substring that has the expected syntax for a - floating-point number, no conversion is performed. In this case, - `strtod' returns a value of zero and the value returned in - `*TAILPTR' is the value of STRING. - - In a locale other than the standard `"C"' or `"POSIX"' locales, - this function may recognize additional locale-dependent syntax. - - If the string has valid syntax for a floating-point number but the - value is outside the range of a `double', `strtod' will signal - overflow or underflow as described in *Note Math Error Reporting::. - - `strtod' recognizes four special input strings. The strings - `"inf"' and `"infinity"' are converted to oo, or to the largest - representable value if the floating-point format doesn't support - infinities. You can prepend a `"+"' or `"-"' to specify the sign. - Case is ignored when scanning these strings. - - The strings `"nan"' and `"nan(CHARS...)"' are converted to NaN. - Again, case is ignored. If CHARS... are provided, they are used - in some unspecified fashion to select a particular representation - of NaN (there can be several). - - Since zero is a valid result as well as the value returned on - error, you should check for errors in the same way as for - `strtol', by examining ERRNO and TAILPTR. - - - Function: float strtof (const char *STRING, char **TAILPTR) - - Function: long double strtold (const char *STRING, char **TAILPTR) - These functions are analogous to `strtod', but return `float' and - `long double' values respectively. They report errors in the same - way as `strtod'. `strtof' can be substantially faster than - `strtod', but has less precision; conversely, `strtold' can be - much slower but has more precision (on systems where `long double' - is a separate type). - - These functions have been GNU extensions and are new to ISO C99. - - - Function: double wcstod (const wchar_t *restrict STRING, wchar_t - **restrict TAILPTR) - - Function: float wcstof (const wchar_t *STRING, wchar_t **TAILPTR) - - Function: long double wcstold (const wchar_t *STRING, wchar_t - **TAILPTR) - The `wcstod', `wcstof', and `wcstol' functions are equivalent in - nearly all aspect to the `strtod', `strtof', and `strtold' - functions but it handles wide character string. - - The `wcstod' function was introduced in Amendment 1 of ISO C90. - The `wcstof' and `wcstold' functions were introduced in ISO C99. - - - Function: double atof (const char *STRING) - This function is similar to the `strtod' function, except that it - need not detect overflow and underflow errors. The `atof' function - is provided mostly for compatibility with existing code; using - `strtod' is more robust. - - The GNU C library also provides `_l' versions of these functions, -which take an additional argument, the locale to use in conversion. -*Note Parsing of Integers::. diff -durpNa glibc-2.2.2/manual/libc.info-33 glibc-2.2.3/manual/libc.info-33 --- glibc-2.2.2/manual/libc.info-33 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-33 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,119 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Parsing of Floats, Prev: Parsing of Integers, Up: Parsing of Numbers + +Parsing of Floats +----------------- + + The `str' functions are declared in `stdlib.h' and those beginning +with `wcs' are declared in `wchar.h'. One might wonder about the use +of `restrict' in the prototypes of the functions in this section. It +is seemingly useless but the ISO C standard uses it (for the functions +defined there) so we have to do it as well. + + - Function: double strtod (const char *restrict STRING, char + **restrict TAILPTR) + The `strtod' ("string-to-double") function converts the initial + part of STRING to a floating-point number, which is returned as a + value of type `double'. + + This function attempts to decompose STRING as follows: + + * A (possibly empty) sequence of whitespace characters. Which + characters are whitespace is determined by the `isspace' + function (*note Classification of Characters::). These are + discarded. + + * An optional plus or minus sign (`+' or `-'). + + * A floating point number in decimal or hexadecimal format. The + decimal format is: + - A nonempty sequence of digits optionally containing a + decimal-point character--normally `.', but it depends on + the locale (*note General Numeric::). + + - An optional exponent part, consisting of a character `e' + or `E', an optional sign, and a sequence of digits. + + + The hexadecimal format is as follows: + - A 0x or 0X followed by a nonempty sequence of + hexadecimal digits optionally containing a decimal-point + character--normally `.', but it depends on the locale + (*note General Numeric::). + + - An optional binary-exponent part, consisting of a + character `p' or `P', an optional sign, and a sequence + of digits. + + + * Any remaining characters in the string. If TAILPTR is not a + null pointer, a pointer to this tail of the string is stored + in `*TAILPTR'. + + If the string is empty, contains only whitespace, or does not + contain an initial substring that has the expected syntax for a + floating-point number, no conversion is performed. In this case, + `strtod' returns a value of zero and the value returned in + `*TAILPTR' is the value of STRING. + + In a locale other than the standard `"C"' or `"POSIX"' locales, + this function may recognize additional locale-dependent syntax. + + If the string has valid syntax for a floating-point number but the + value is outside the range of a `double', `strtod' will signal + overflow or underflow as described in *Note Math Error Reporting::. + + `strtod' recognizes four special input strings. The strings + `"inf"' and `"infinity"' are converted to oo, or to the largest + representable value if the floating-point format doesn't support + infinities. You can prepend a `"+"' or `"-"' to specify the sign. + Case is ignored when scanning these strings. + + The strings `"nan"' and `"nan(CHARS...)"' are converted to NaN. + Again, case is ignored. If CHARS... are provided, they are used + in some unspecified fashion to select a particular representation + of NaN (there can be several). + + Since zero is a valid result as well as the value returned on + error, you should check for errors in the same way as for + `strtol', by examining ERRNO and TAILPTR. + + - Function: float strtof (const char *STRING, char **TAILPTR) + - Function: long double strtold (const char *STRING, char **TAILPTR) + These functions are analogous to `strtod', but return `float' and + `long double' values respectively. They report errors in the same + way as `strtod'. `strtof' can be substantially faster than + `strtod', but has less precision; conversely, `strtold' can be + much slower but has more precision (on systems where `long double' + is a separate type). + + These functions have been GNU extensions and are new to ISO C99. + + - Function: double wcstod (const wchar_t *restrict STRING, wchar_t + **restrict TAILPTR) + - Function: float wcstof (const wchar_t *STRING, wchar_t **TAILPTR) + - Function: long double wcstold (const wchar_t *STRING, wchar_t + **TAILPTR) + The `wcstod', `wcstof', and `wcstol' functions are equivalent in + nearly all aspect to the `strtod', `strtof', and `strtold' + functions but it handles wide character string. + + The `wcstod' function was introduced in Amendment 1 of ISO C90. + The `wcstof' and `wcstold' functions were introduced in ISO C99. + + - Function: double atof (const char *STRING) + This function is similar to the `strtod' function, except that it + need not detect overflow and underflow errors. The `atof' function + is provided mostly for compatibility with existing code; using + `strtod' is more robust. + + The GNU C library also provides `_l' versions of these functions, +which take an additional argument, the locale to use in conversion. +*Note Parsing of Integers::. + + File: libc.info, Node: System V Number Conversion, Prev: Parsing of Numbers, Up: Arithmetic Old-fashioned System V number-to-string functions diff -durpNa glibc-2.2.2/manual/libc.info-36 glibc-2.2.3/manual/libc.info-36 --- glibc-2.2.2/manual/libc.info-36 Thu Feb 15 16:48:20 2001 +++ glibc-2.2.3/manual/libc.info-36 Wed Apr 25 14:55:22 2001 @@ -344,8 +344,9 @@ describes how you can do such "non-local * Menu: * Intro: Non-Local Intro. When and how to use these facilities. -* Details: Non-Local Details. Functions for non-local exits. +* Details: Non-Local Details. Functions for non-local exits. * Non-Local Exits and Signals:: Portability issues. +* System V contexts:: Complete context control a la System V.  File: libc.info, Node: Non-Local Intro, Next: Non-Local Details, Up: Non-Local Exits @@ -514,7 +515,7 @@ call to `setjmp' are indeterminate, unle `volatile'.  -File: libc.info, Node: Non-Local Exits and Signals, Prev: Non-Local Details, Up: Non-Local Exits +File: libc.info, Node: Non-Local Exits and Signals, Next: System V contexts, Prev: Non-Local Details, Up: Non-Local Exits Non-Local Exits and Signals =========================== @@ -549,6 +550,319 @@ behavior. blocked signals.  +File: libc.info, Node: System V contexts, Prev: Non-Local Exits and Signals, Up: Non-Local Exits + +Complete Context Control +======================== + + The Unix standard one more set of function to control the execution +path and these functions are more powerful than those discussed in this +chapter so far. These function were part of the original System V API +and by this route were added to the Unix API. Beside on branded Unix +implementations these interfaces are not widely available. Not all +platforms and/or architectures the GNU C Library is available on provide +this interface. Use `configure' to detect the availability. + + Similar to the `jmp_buf' and `sigjmp_buf' types used for the +variables to contain the state of the `longjmp' functions the +interfaces of interest here have an appropriate type as well. Objects +of this type are normally much larger since more information is +contained. The type is also used in a few more places as we will see. +The types and functions described in this section are all defined and +declared respectively in the `ucontext.h' header file. + + - Data Type: ucontext_t + The `ucontext_t' type is defined as a structure with as least the + following elements: + + `ucontext_t *uc_link' + This is a pointer to the next context structure which is used + if the context described in the current structure returns. + + `sigset_t uc_sigmask' + Set of signals which are blocked when this context is used. + + `stack_t uc_stack' + Stack used for this context. The value need not be (and + normally is not) the stack pointer. *Note Signal Stack::. + + `mcontext_t uc_mcontext' + This element contains the actual state of the process. The + `mcontext_t' type is also defined in this header but the + definition should be treated as opaque. Any use of knowledge + of the type makes applications less portable. + + + Objects of this type have to be created by the user. The +initialization and modification happens through one of the following +functions: + + - Function: int getcontext (ucontext_t *UCP) + The `getcontext' function initializes the variable pointed to by + UCP with the context of the calling thread. The context contains + the content of the registers, the signal mask, and the current + stack. Executing the contents would start at the point where the + `getcontext' call just returned. + + The function returns `0' if succesful. Otherwise it returns `-1' + and sets ERRNO accordingly. + + The `getcontext' function is similar to `setjmp' but it does not +provide an indication of whether the function returns for the first +time or whether the initialized context was used and the execution is +resumed at just that point. If this is necessary the user has to take +determine this herself. This must be done carefully since the context +contains registers which might contain register variables. This is a +good situation to define variables with `volatile'. + + Once the context variable is initialized it can be used as is or it +can be modified. The latter is normally done to implement co-routines +or similar constructs. The `makecontext' function is what has to be +used to do that. + + - Function: void makecontext (ucontext_t *UCP, void (*FUNC) (void), + int ARGC, ...) + The UCP parameter passed to the `makecontext' shall be initialized + by a call to `getcontext'. The context will be modified to in a + way so that if the context is resumed it will start by calling the + function `func' which gets ARGC integer arguments passed. The + integer arguments which are to be passed should follow the ARGC + parameter in the call to `makecontext'. + + Before the call to this function the `uc_stack' and `uc_link' + element of the UCP structure should be initialized. The + `uc_stack' element describes the stack which is used for this + context. No two contexts which are used at the same time should + use the same memory region for a stack. + + The `uc_link' element of the object pointed to by UCP should be a + pointer to the context to be executed when the function FUNC + returns or it should be a null pointer. See `setcontext' for more + information about the exact use. + + While allocating the memory for the stack one has to be careful. +Most modern processors keep track of whether a certain memory region is +allowed to contain code which is executed or not. Data segments and +heap memory is normally not tagged to allow this. The result is that +programs would fail. Examples for such code include the calling +sequences the GNU C compiler generates for calls to nested functions. +Safe ways to allocate stacks correctly include using memory on the +original threads stack or explicitly allocate memory tagged for +execution using (*note Memory-mapped I/O::). + + *Compatibility note*: The current Unix standard is very imprecise +about the way the stack is allocated. All implementations seem to agree +that the `uc_stack' element must be used but the values stored in the +elements of the `stack_t' value are unclear. The GNU C library and +most other Unix implementations require the `ss_sp' value of the +`uc_stack' element to point to the base of the memory region allocated +for the stack and the size of the memory region is stored in `ss_size'. +There are implements out there which require `ss_sp' to be set to the +value the stack pointer will have (which can depending on the direction +the stack grows be different). This difference makes the `makecontext' +function hard to use and it requires detection of the platform at +compile time. + + - Function: int setcontext (const ucontext_t *UCP) + The `setcontext' function restores the context described by UCP. + The context is not modified and can be reused as often as wanted. + + If the context was created by `getcontext' execution resumes with + the registers filled with the same values and the same stack as if + the `getcontext' call just returned. + + If the context was modified with a call to `makecontext' execution + continues with the function passed to `makecontext' which gets the + specified parameters passed. If this function returns execution is + resumed in the context which was referenced by the `uc_link' + element of the context structure passed to `makecontext' at the + time of the call. If `uc_link' was a null pointer the application + terminates in this case. + + Since the context contains information about the stack no two + threads should use the same context at the same time. The result + in most cases would be disastrous. + + The `setcontext' function does not return unless an error occurred + in which case it returns `-1'. + + The `setcontext' function simply replaces the current context with +the one described by the UCP parameter. This is often useful but there +are situations where the current context has to be preserved. + + - Function: int swapcontext (ucontext_t *restrict OUCP, const + ucontext_t *restrict UCP) + The `swapcontext' function is similar to `setcontext' but instead + of just replacing the current context the latter is first saved in + the object pointed to by OUCP as if this was a call to + `getcontext'. The saved context would resume after the call to + `swapcontext'. + + Once the current context is saved the context described in UCP is + installed and execution continues as described in this context. + + If `swapcontext' succeeds the function does not return unless the + context OUCP is used without prior modification by `makecontext'. + The return value in this case is `0'. If the function fails it + returns `-1' and set ERRNO accordingly. + +Example for SVID Context Handling +================================= + + The easiest way to use the context handling functions is as a +replacement for `setjmp' and `longjmp'. The context contains on most +platforms more information which might lead to less surprises but this +also means using these functions is more expensive (beside being less +portable). + + int + random_search (int n, int (*fp) (int, ucontext_t *)) + { + volatile int cnt = 0; + ucontext_t uc; + + /* Safe current context. */ + if (getcontext (&uc) < 0) + return -1; + + /* If we have not tried N times try again. */ + if (cnt++ < n) + /* Call the function with a new random number + and the context. */ + if (fp (rand (), &uc) != 0) + /* We found what we were looking for. */ + return 1; + + /* Not found. */ + return 0; + } + + Using contexts in such a way enables emulating exception handling. +The search functions passed in the FP parameter could be very large, +nested, and complex which would make it complicated (or at least would +require a lot of code) to leave the function with an error value which +has to be passed down to the caller. By using the context it is +possible to leave the search function in one step and allow restarting +the search which also has the nice side effect that it can be +significantly faster. + + Something which is harder to implement with `setjmp' and `longjmp' +is to switch temporarily to a different execution path and then resume +where execution was stopped. + + #include + #include + #include + #include + #include + + /* Set by the signal handler. */ + static volatile int expired; + + /* The contexts. */ + static ucontext_t uc[3]; + + /* We do only a certain number of switches. */ + static int switches; + + + /* This is the function doing the work. It is just a + skeleton, real code has to be filled in. */ + static void + f (int n) + { + int m = 0; + while (1) + { + /* This is where the work would be done. */ + if (++m % 100 == 0) + { + putchar ('.'); + fflush (stdout); + } + + /* Regularly the EXPIRE variable must be checked. */ + if (expired) + { + /* We do not want the program to run forever. */ + if (++switches == 20) + return; + + printf ("\nswitching from %d to %d\n", n, 3 - n); + expired = 0; + /* Switch to the other context, saving the current one. */ + swapcontext (&uc[n], &uc[3 - n]); + } + } + } + + /* This is the signal handler which simply set the variable. */ + void + handler (int signal) + { + expired = 1; + } + + + int + main (void) + { + struct sigaction sa; + struct itimerval it; + char st1[8192]; + char st2[8192]; + + /* Initialize the data structures for the interval timer. */ + sa.sa_flags = SA_RESTART; + sigfillset (&sa.sa_mask); + sa.sa_handler = handler; + it.it_interval.tv_sec = 0; + it.it_interval.tv_usec = 1; + it.it_value = it.it_interval; + + /* Install the timer and get the context we can manipulate. */ + if (sigaction (SIGPROF, &sa, NULL) < 0 + || setitimer (ITIMER_PROF, &it, NULL) < 0 + || getcontext (&uc[1]) == -1 + || getcontext (&uc[2]) == -1) + abort (); + + /* Create a context with a separate stack which causes the + function `f' to be call with the parameter `1'. + Note that the `uc_link' points to the main context + which will cause the program to terminate once the function + return. */ + uc[1].uc_link = &uc[0]; + uc[1].uc_stack.ss_sp = st1; + uc[1].uc_stack.ss_size = sizeof st1; + makecontext (&uc[1], (void (*) (void)) f, 1, 1); + + /* Similarly, but `2' is passed as the parameter to `f'. */ + uc[2].uc_link = &uc[0]; + uc[2].uc_stack.ss_sp = st2; + uc[2].uc_stack.ss_size = sizeof st2; + makecontext (&uc[2], (void (*) (void)) f, 1, 2); + + /* Start running. */ + swapcontext (&uc[0], &uc[1]); + putchar ('\n'); + + return 0; + } + + This an example how the context functions can be used to implement +co-routines or cooperative multi-threading. All that has to be done is +to call every once in a while `swapcontext' to continue running a +different context. It is not allowed to do the context switching from +the signal handler directly since neither `setcontext' nor +`swapcontext' are functions which can be called from a signal handler. +But setting a variable in the signal handler and checking it in the +body of the functions which are executed. Since `swapcontext' is +saving the current context it is possible to have multiple different +scheduling points in the code. Execution will always resume where it +was left. + + File: libc.info, Node: Signal Handling, Next: Program Basics, Prev: Non-Local Exits, Up: Top Signal Handling @@ -781,307 +1095,4 @@ the names are standardized and fairly un * Operation Error Signals:: Used to report operational system errors. * Miscellaneous Signals:: Miscellaneous Signals. * Signal Messages:: Printing a message describing a signal. - - -File: libc.info, Node: Program Error Signals, Next: Termination Signals, Up: Standard Signals - -Program Error Signals ---------------------- - - The following signals are generated when a serious program error is -detected by the operating system or the computer itself. In general, -all of these signals are indications that your program is seriously -broken in some way, and there's usually no way to continue the -computation which encountered the error. - - Some programs handle program error signals in order to tidy up before -terminating; for example, programs that turn off echoing of terminal -input should handle program error signals in order to turn echoing back -on. The handler should end by specifying the default action for the -signal that happened and then reraising it; this will cause the program -to terminate with that signal, as if it had not had a handler. (*Note -Termination in Handler::.) - - Termination is the sensible ultimate outcome from a program error in -most programs. However, programming systems such as Lisp that can load -compiled user programs might need to keep executing even if a user -program incurs an error. These programs have handlers which use -`longjmp' to return control to the command level. - - The default action for all of these signals is to cause the process -to terminate. If you block or ignore these signals or establish -handlers for them that return normally, your program will probably -break horribly when such signals happen, unless they are generated by -`raise' or `kill' instead of a real error. - - When one of these program error signals terminates a process, it also -writes a "core dump file" which records the state of the process at the -time of termination. The core dump file is named `core' and is written -in whichever directory is current in the process at the time. (On the -GNU system, you can specify the file name for core dumps with the -environment variable `COREFILE'.) The purpose of core dump files is so -that you can examine them with a debugger to investigate what caused -the error. - - - Macro: int SIGFPE - The `SIGFPE' signal reports a fatal arithmetic error. Although the - name is derived from "floating-point exception", this signal - actually covers all arithmetic errors, including division by zero - and overflow. If a program stores integer data in a location - which is then used in a floating-point operation, this often - causes an "invalid operation" exception, because the processor - cannot recognize the data as a floating-point number. - - Actual floating-point exceptions are a complicated subject because - there are many types of exceptions with subtly different meanings, - and the `SIGFPE' signal doesn't distinguish between them. The - `IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std - 754-1985 and ANSI/IEEE Std 854-1987)' defines various - floating-point exceptions and requires conforming computer systems - to report their occurrences. However, this standard does not - specify how the exceptions are reported, or what kinds of handling - and control the operating system can offer to the programmer. - - BSD systems provide the `SIGFPE' handler with an extra argument that -distinguishes various causes of the exception. In order to access this -argument, you must define the handler to accept two arguments, which -means you must cast it to a one-argument function type in order to -establish the handler. The GNU library does provide this extra -argument, but the value is meaningful only on operating systems that -provide the information (BSD systems and GNU systems). - -`FPE_INTOVF_TRAP' - Integer overflow (impossible in a C program unless you enable - overflow trapping in a hardware-specific fashion). - -`FPE_INTDIV_TRAP' - Integer division by zero. - -`FPE_SUBRNG_TRAP' - Subscript-range (something that C programs never check for). - -`FPE_FLTOVF_TRAP' - Floating overflow trap. - -`FPE_FLTDIV_TRAP' - Floating/decimal division by zero. - -`FPE_FLTUND_TRAP' - Floating underflow trap. (Trapping on floating underflow is not - normally enabled.) - -`FPE_DECOVF_TRAP' - Decimal overflow trap. (Only a few machines have decimal - arithmetic and C never uses it.) - - - Macro: int SIGILL - The name of this signal is derived from "illegal instruction"; it - usually means your program is trying to execute garbage or a - privileged instruction. Since the C compiler generates only valid - instructions, `SIGILL' typically indicates that the executable - file is corrupted, or that you are trying to execute data. Some - common ways of getting into the latter situation are by passing an - invalid object where a pointer to a function was expected, or by - writing past the end of an automatic array (or similar problems - with pointers to automatic variables) and corrupting other data on - the stack such as the return address of a stack frame. - - `SIGILL' can also be generated when the stack overflows, or when - the system has trouble running the handler for a signal. - - - Macro: int SIGSEGV - This signal is generated when a program tries to read or write - outside the memory that is allocated for it, or to write memory - that can only be read. (Actually, the signals only occur when the - program goes far enough outside to be detected by the system's - memory protection mechanism.) The name is an abbreviation for - "segmentation violation". - - Common ways of getting a `SIGSEGV' condition include dereferencing - a null or uninitialized pointer, or when you use a pointer to step - through an array, but fail to check for the end of the array. It - varies among systems whether dereferencing a null pointer generates - `SIGSEGV' or `SIGBUS'. - - - Macro: int SIGBUS - This signal is generated when an invalid pointer is dereferenced. - Like `SIGSEGV', this signal is typically the result of - dereferencing an uninitialized pointer. The difference between - the two is that `SIGSEGV' indicates an invalid access to valid - memory, while `SIGBUS' indicates an access to an invalid address. - In particular, `SIGBUS' signals often result from dereferencing a - misaligned pointer, such as referring to a four-word integer at an - address not divisible by four. (Each kind of computer has its own - requirements for address alignment.) - - The name of this signal is an abbreviation for "bus error". - - - Macro: int SIGABRT - This signal indicates an error detected by the program itself and - reported by calling `abort'. *Note Aborting a Program::. - - - Macro: int SIGIOT - Generated by the PDP-11 "iot" instruction. On most machines, this - is just another name for `SIGABRT'. - - - Macro: int SIGTRAP - Generated by the machine's breakpoint instruction, and possibly - other trap instructions. This signal is used by debuggers. Your - program will probably only see `SIGTRAP' if it is somehow - executing bad instructions. - - - Macro: int SIGEMT - Emulator trap; this results from certain unimplemented instructions - which might be emulated in software, or the operating system's - failure to properly emulate them. - - - Macro: int SIGSYS - Bad system call; that is to say, the instruction to trap to the - operating system was executed, but the code number for the system - call to perform was invalid. - - -File: libc.info, Node: Termination Signals, Next: Alarm Signals, Prev: Program Error Signals, Up: Standard Signals - -Termination Signals -------------------- - - These signals are all used to tell a process to terminate, in one way -or another. They have different names because they're used for slightly -different purposes, and programs might want to handle them differently. - - The reason for handling these signals is usually so your program can -tidy up as appropriate before actually terminating. For example, you -might want to save state information, delete temporary files, or restore -the previous terminal modes. Such a handler should end by specifying -the default action for the signal that happened and then reraising it; -this will cause the program to terminate with that signal, as if it had -not had a handler. (*Note Termination in Handler::.) - - The (obvious) default action for all of these signals is to cause the -process to terminate. - - - Macro: int SIGTERM - The `SIGTERM' signal is a generic signal used to cause program - termination. Unlike `SIGKILL', this signal can be blocked, - handled, and ignored. It is the normal way to politely ask a - program to terminate. - - The shell command `kill' generates `SIGTERM' by default. - - - Macro: int SIGINT - The `SIGINT' ("program interrupt") signal is sent when the user - types the INTR character (normally `C-c'). *Note Special - Characters::, for information about terminal driver support for - `C-c'. - - - Macro: int SIGQUIT - The `SIGQUIT' signal is similar to `SIGINT', except that it's - controlled by a different key--the QUIT character, usually - `C-\'--and produces a core dump when it terminates the process, - just like a program error signal. You can think of this as a - program error condition "detected" by the user. - - *Note Program Error Signals::, for information about core dumps. - *Note Special Characters::, for information about terminal driver - support. - - Certain kinds of cleanups are best omitted in handling `SIGQUIT'. - For example, if the program creates temporary files, it should - handle the other termination requests by deleting the temporary - files. But it is better for `SIGQUIT' not to delete them, so that - the user can examine them in conjunction with the core dump. - - - Macro: int SIGKILL - The `SIGKILL' signal is used to cause immediate program - termination. It cannot be handled or ignored, and is therefore - always fatal. It is also not possible to block this signal. - - This signal is usually generated only by explicit request. Since - it cannot be handled, you should generate it only as a last - resort, after first trying a less drastic method such as `C-c' or - `SIGTERM'. If a process does not respond to any other termination - signals, sending it a `SIGKILL' signal will almost always cause it - to go away. - - In fact, if `SIGKILL' fails to terminate a process, that by itself - constitutes an operating system bug which you should report. - - The system will generate `SIGKILL' for a process itself under some - unusual conditions where the program cannot possibly continue to - run (even to run a signal handler). - - - Macro: int SIGHUP - The `SIGHUP' ("hang-up") signal is used to report that the user's - terminal is disconnected, perhaps because a network or telephone - connection was broken. For more information about this, see *Note - Control Modes::. - - This signal is also used to report the termination of the - controlling process on a terminal to jobs associated with that - session; this termination effectively disconnects all processes in - the session from the controlling terminal. For more information, - see *Note Termination Internals::. - - -File: libc.info, Node: Alarm Signals, Next: Asynchronous I/O Signals, Prev: Termination Signals, Up: Standard Signals - -Alarm Signals -------------- - - These signals are used to indicate the expiration of timers. *Note -Setting an Alarm::, for information about functions that cause these -signals to be sent. - - The default behavior for these signals is to cause program -termination. This default is rarely useful, but no other default would -be useful; most of the ways of using these signals would require -handler functions in any case. - - - Macro: int SIGALRM - This signal typically indicates expiration of a timer that - measures real or clock time. It is used by the `alarm' function, - for example. - - - Macro: int SIGVTALRM - This signal typically indicates expiration of a timer that - measures CPU time used by the current process. The name is an - abbreviation for "virtual time alarm". - - - Macro: int SIGPROF - This signal typically indicates expiration of a timer that measures - both CPU time used by the current process, and CPU time expended on - behalf of the process by the system. Such a timer is used to - implement code profiling facilities, hence the name of this signal. - - -File: libc.info, Node: Asynchronous I/O Signals, Next: Job Control Signals, Prev: Alarm Signals, Up: Standard Signals - -Asynchronous I/O Signals ------------------------- - - The signals listed in this section are used in conjunction with -asynchronous I/O facilities. You have to take explicit action by -calling `fcntl' to enable a particular file descriptor to generate -these signals (*note Interrupt Input::). The default action for these -signals is to ignore them. - - - Macro: int SIGIO - This signal is sent when a file descriptor is ready to perform - input or output. - - On most operating systems, terminals and sockets are the only - kinds of files that can generate `SIGIO'; other kinds, including - ordinary files, never generate `SIGIO' even if you ask them to. - - In the GNU system `SIGIO' will always be generated properly if you - successfully set asynchronous mode with `fcntl'. - - - Macro: int SIGURG - This signal is sent when "urgent" or out-of-band data arrives on a - socket. *Note Out-of-Band Data::. - - - Macro: int SIGPOLL - This is a System V signal name, more or less similar to `SIGIO'. - It is defined only for compatibility. diff -durpNa glibc-2.2.2/manual/libc.info-37 glibc-2.2.3/manual/libc.info-37 --- glibc-2.2.2/manual/libc.info-37 Thu Feb 15 16:48:21 2001 +++ glibc-2.2.3/manual/libc.info-37 Wed Apr 25 14:55:22 2001 @@ -31,6 +31,309 @@ entitled "GNU Library General Public Lic accuracy by the Foundation.  +File: libc.info, Node: Program Error Signals, Next: Termination Signals, Up: Standard Signals + +Program Error Signals +--------------------- + + The following signals are generated when a serious program error is +detected by the operating system or the computer itself. In general, +all of these signals are indications that your program is seriously +broken in some way, and there's usually no way to continue the +computation which encountered the error. + + Some programs handle program error signals in order to tidy up before +terminating; for example, programs that turn off echoing of terminal +input should handle program error signals in order to turn echoing back +on. The handler should end by specifying the default action for the +signal that happened and then reraising it; this will cause the program +to terminate with that signal, as if it had not had a handler. (*Note +Termination in Handler::.) + + Termination is the sensible ultimate outcome from a program error in +most programs. However, programming systems such as Lisp that can load +compiled user programs might need to keep executing even if a user +program incurs an error. These programs have handlers which use +`longjmp' to return control to the command level. + + The default action for all of these signals is to cause the process +to terminate. If you block or ignore these signals or establish +handlers for them that return normally, your program will probably +break horribly when such signals happen, unless they are generated by +`raise' or `kill' instead of a real error. + + When one of these program error signals terminates a process, it also +writes a "core dump file" which records the state of the process at the +time of termination. The core dump file is named `core' and is written +in whichever directory is current in the process at the time. (On the +GNU system, you can specify the file name for core dumps with the +environment variable `COREFILE'.) The purpose of core dump files is so +that you can examine them with a debugger to investigate what caused +the error. + + - Macro: int SIGFPE + The `SIGFPE' signal reports a fatal arithmetic error. Although the + name is derived from "floating-point exception", this signal + actually covers all arithmetic errors, including division by zero + and overflow. If a program stores integer data in a location + which is then used in a floating-point operation, this often + causes an "invalid operation" exception, because the processor + cannot recognize the data as a floating-point number. + + Actual floating-point exceptions are a complicated subject because + there are many types of exceptions with subtly different meanings, + and the `SIGFPE' signal doesn't distinguish between them. The + `IEEE Standard for Binary Floating-Point Arithmetic (ANSI/IEEE Std + 754-1985 and ANSI/IEEE Std 854-1987)' defines various + floating-point exceptions and requires conforming computer systems + to report their occurrences. However, this standard does not + specify how the exceptions are reported, or what kinds of handling + and control the operating system can offer to the programmer. + + BSD systems provide the `SIGFPE' handler with an extra argument that +distinguishes various causes of the exception. In order to access this +argument, you must define the handler to accept two arguments, which +means you must cast it to a one-argument function type in order to +establish the handler. The GNU library does provide this extra +argument, but the value is meaningful only on operating systems that +provide the information (BSD systems and GNU systems). + +`FPE_INTOVF_TRAP' + Integer overflow (impossible in a C program unless you enable + overflow trapping in a hardware-specific fashion). + +`FPE_INTDIV_TRAP' + Integer division by zero. + +`FPE_SUBRNG_TRAP' + Subscript-range (something that C programs never check for). + +`FPE_FLTOVF_TRAP' + Floating overflow trap. + +`FPE_FLTDIV_TRAP' + Floating/decimal division by zero. + +`FPE_FLTUND_TRAP' + Floating underflow trap. (Trapping on floating underflow is not + normally enabled.) + +`FPE_DECOVF_TRAP' + Decimal overflow trap. (Only a few machines have decimal + arithmetic and C never uses it.) + + - Macro: int SIGILL + The name of this signal is derived from "illegal instruction"; it + usually means your program is trying to execute garbage or a + privileged instruction. Since the C compiler generates only valid + instructions, `SIGILL' typically indicates that the executable + file is corrupted, or that you are trying to execute data. Some + common ways of getting into the latter situation are by passing an + invalid object where a pointer to a function was expected, or by + writing past the end of an automatic array (or similar problems + with pointers to automatic variables) and corrupting other data on + the stack such as the return address of a stack frame. + + `SIGILL' can also be generated when the stack overflows, or when + the system has trouble running the handler for a signal. + + - Macro: int SIGSEGV + This signal is generated when a program tries to read or write + outside the memory that is allocated for it, or to write memory + that can only be read. (Actually, the signals only occur when the + program goes far enough outside to be detected by the system's + memory protection mechanism.) The name is an abbreviation for + "segmentation violation". + + Common ways of getting a `SIGSEGV' condition include dereferencing + a null or uninitialized pointer, or when you use a pointer to step + through an array, but fail to check for the end of the array. It + varies among systems whether dereferencing a null pointer generates + `SIGSEGV' or `SIGBUS'. + + - Macro: int SIGBUS + This signal is generated when an invalid pointer is dereferenced. + Like `SIGSEGV', this signal is typically the result of + dereferencing an uninitialized pointer. The difference between + the two is that `SIGSEGV' indicates an invalid access to valid + memory, while `SIGBUS' indicates an access to an invalid address. + In particular, `SIGBUS' signals often result from dereferencing a + misaligned pointer, such as referring to a four-word integer at an + address not divisible by four. (Each kind of computer has its own + requirements for address alignment.) + + The name of this signal is an abbreviation for "bus