diff options
193 files changed, 18682 insertions, 3188 deletions
diff --git a/ChangeLog b/ChangeLog index b762bd97c1..4f384b53c3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,19 +1,487 @@ -2005-02-12 Jakub Jelinek <jakub@redhat.com> +2005-03-01 Jakub Jelinek <jakub@redhat.com> - * elf/rtld.c (dlmain): If LD_TRACE_PRELINKING, clear l_relocated flag - before relocating ld.so again. + * posix/bits/unistd.h (read, pread, pread64): Use __bos0 instead + of __bos. + * socket/bits/socket2.h (recv, recvfrom): Likewise. + +2005-03-01 Roland McGrath <roland@redhat.com> + + [BZ #721] + * sysdeps/arm/dl-machine.h (ELF_MACHINE_NO_RELA): Define this outside + of [RESOLVE_MAP]. + +2005-03-01 Alfred M. Szmidt <ams@gnu.org> + + * elf/dl-load.c (__stack_prot) [!PROT_GROWSUP && !PROT_GROWSDOWN]: + Add missing initializer. + + * malloc/arena.c: #include <stdbool.h> outside of [SHARED && + USE_TLS && !USE___THREAD]. + +2005-02-26 GOTO Masanori <gotom@debian.or.jp> + + * csu/Makefile: Use printf instead of echo for some shells. + +2005-02-28 Roland McGrath <roland@redhat.com> + + * debug/warning-nop.c (__nop): Rename to nop, make it static. + (__warndecl): Use alias attribute directly, instead of strong_alias + macro. Add attribute_hidden. + +2005-02-28 Ulrich Drepper <drepper@redhat.com> + + * posix/bits/unistd.h: Avoid calling __*_chk variants if we can + determine the call will never trigger a failure. + * debug/read_chk.c (__read_chk): Always fail if the buffer is too + small. + * debug/readlink_chk.c (__readlink_chk): Likewise. + * debug/pread64_chk.c (__pread64_chk): Likewise. + * debug/pread_chk.c (__pread_chk): Likewise. + + * sysdeps/i386/i686/memset_chk.S: Remove alias and warning. + * sysdeps/x86_64/memset_chk.S: Likewise. + +2005-02-24 Roland McGrath <roland@redhat.com> + + * debug/Versions (libc: GLIBC_2.4): Remove + __memset_zero_constant_len_parameter. + * sysdeps/generic/memset_chk.c: Remove alias and warning. + * misc/sys/cdefs.h (__warndecl): New macro. + * debug/warning-nop.c: New file. + * string/bits/string3.h (memset): Call __warn_memset_zero_len with no + arguments, instead of calling __memset_zero_constant_len_parameter. + Use __warndecl for __warn_memset_zero_len. + * debug/Makefile (routines): Add $(static-only-routines). + (static-only-routines): New variable. + +2005-02-27 Ulrich Drepper <drepper@redhat.com> + + * po/tr.po: Update from translation team. + +2005-02-26 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-addr.c: Cleanups. Move declaration next to first use. + + * dlfcn/dlerror.c (check_free): New function. Extract common code + from fini and free_key_mem. Check whether this is libdl in the + base namespace. + +2005-02-25 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-lookup.c (_dl_debug_bindings): Add namespace information + to debug output. + +2004-11-11 Richard Sandiford <rsandifo@redhat.com> + + [BZ #758] + * sysdeps/unix/sysv/linux/mips/configure.in (asm-unistd.h): Only + preprocess <asm/unistd.h> if it defines ABI-prefixed syscall names + like __NR_N32_open. Just include <asm/unistd.h> otherwise. + * sysdeps/unix/sysv/linux/mips/configure: Regenerate. + * sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h: Delete + * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h (SYS_ify): Use the + standard __NR prefix. + * sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h (SYS_ify): Likewise. + * sysdeps/unix/sysv/linux/mips/Makefile (syscall-%.h): Rework so that + the output file is compatible with both pre-2.6 and 2.6 kernel headers. + Extract separate syscall lists for each ABI. + +2005-02-23 Ulrich Drepper <drepper@redhat.com> + + * Makerules (libc.so): Add AS_NEEDED line for dynamic linker. + + [BZ #719] + * elf/Makefile: Run tst-tls9-static again. + +2005-02-22 Ulrich Drepper <drepper@redhat.com> + + [BZ #719] + * sysdeps/generic/libc-tls.c (static_dtv): Size the same as the + slotinfo array. + (__libc_setup_tls): Initialize length of DTV based on array length. + * elf/dl-load.c: Revert last change. + * sysdeps/generic/dl-tls.c: Revert last change. + + * posix/Makefile (tests): Add tst-execvp1, tst-execvp2, tst-execlp1, + tst-execlp2, tst-execv1, tst-execv2, tst-execl1, tst-execl2, + tst-execve1, tst-execve2, tst-execle1, and tst-execle2. + * posix/tst-execl1.c: New file. + * posix/tst-execl2.c: New file. + * posix/tst-execle1.c: New file. + * posix/tst-execle2.c: New file. + * posix/tst-execlp1.c: New file. + * posix/tst-execlp2.c: New file. + * posix/tst-execv1.c: New file. + * posix/tst-execv2.c: New file. + * posix/tst-execve1.c: New file. + * posix/tst-execve2.c: New file. + * posix/tst-execvp1.c: New file. + * posix/tst-execvp2.c: New file. + +2005-02-22 Roland McGrath <roland@redhat.com> + + * include/signal.h: Revert last change. + (__sigemptyset): Use __builtin_memset instead of memset. + +2005-02-22 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/libc_fatal.c (__libc_message): Use + non-cancelable I/O functions. + +2005-02-22 Jakub Jelinek <jakub@redhat.com> + + [BZ #769] + * nscd/nscd-client.h: Include sys/uio.h. + (__readall, __readvall, writeall): New prototypes. + * nscd/connections.c (writeall): New function. + (handle_request): Use it. + * nscd/aicache.c (addhstaiX): Likewise. + * nscd/initgrcache.c (addinitgroupsX): Likewise. + * nscd/hstcache.c (cache_addhst): Likewise. + * nscd/grpcache.c (cache_addgr): Likewise. + * nscd/pwdcache.c (cache_addpw): Likewise. + * nscd/nscd_helper.c (__readall, __readvall): New functions. + * nscd/nscd_getai.c (__nscd_getai): Use them. + * nscd/nscd_getpw_r.c (__nscd_getpw_r): Likewise. + * nscd/nscd_getgr_r.c (__nscd_getgr_r): Likewise. + * nscd/nscd_gethst_r.c (__nscd_gethst_r): Likewise. + * nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise. + +2005-02-22 Roland McGrath <roland@redhat.com> + + * include/sys/socket.h: Declare __recv. + * sysdeps/generic/recv.c (recv): Rename to __recv, and add weak alias. + * sysdeps/mach/hurd/recv.c: Likewise. + + * sysdeps/unix/sysv/linux/libc_fatal.c: Include <execinfo.h> for + __backtrace_* decls. + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h + (INTERNAL_SYSCALL_ERROR_P): Evalute VAL. Parenthesize ERR. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h: Likewise. + + * include/signal.h: Include <string.h> for memset decl. + +2005-02-22 Andreas Schwab <schwab@suse.de> + + * posix/execvp.c (execvp): Fix invalid free. + +2005-02-22 Jakub Jelinek <jakub@redhat.com> + + * malloc/Makefile (CFLAGS-mcheck-init.c): Add. + * sunrpc/Makefile: Add $(PIC-ccflag) to CFLAGS-x* for + librpcsvc.a objects. + +2005-02-21 Ulrich Drepper <drepper@redhat.com> + + * iconvdata/ibm930.h: Correct Yen mapping. + * iconvdata/ibm939.h: Likewise. + * iconvdata/testdata/IBM930..UTF8: Adjust test data. + * iconvdata/testdata/IBM939..UTF8: Likewise. + Patch by Jiro Sekiba <SEKIBA@jp.ibm.com>. + + * iconvdata/Makefile (modules): Add IBM1025, IBM1122, IBM1137, IBM1153, + IBM1154, IBM1155, IBM1156, IBM1157, and IBM1158. + (distribute): Add ibm1025.c, ibm1025.h, ibm1122.c, ibm1122.h, + ibm1137.c, ibm1137.h, ibm1153.c, ibm1153.h, ibm1154.c, ibm1154.h, + ibm1155.c, ibm1155.h, ibm1156.c, ibm1156.h, ibm1157.c, ibm1157.h, + ibm1158.c, and ibm1158.h. + * iconvdata/TESTS: Add IBM1025, IBM1122, IBM1137, IBM1153, + IBM1154, IBM1155, IBM1156, IBM1157, and IBM1158. + * iconvdata/gconv-modules: Likewise. + * iconvdata/ibm1025.c: New file. + * iconvdata/ibm1025.h: New file. + * iconvdata/ibm1122.c: New file. + * iconvdata/ibm1122.h: New file. + * iconvdata/ibm1137.c: New file. + * iconvdata/ibm1137.h: New file. + * iconvdata/ibm1153.c: New file. + * iconvdata/ibm1153.h: New file. + * iconvdata/ibm1154.c: New file. + * iconvdata/ibm1154.h: New file. + * iconvdata/ibm1155.c: New file. + * iconvdata/ibm1155.h: New file. + * iconvdata/ibm1156.c: New file. + * iconvdata/ibm1156.h: New file. + * iconvdata/ibm1157.c: New file. + * iconvdata/ibm1157.h: New file. + * iconvdata/ibm1158.c: New file. + * iconvdata/ibm1158.h: New file. + * iconvdata/testdata/IBM1025: New file. + * iconvdata/testdata/IBM1025..UTF8: New file. + * iconvdata/testdata/IBM1122: New file. + * iconvdata/testdata/IBM1122..UTF8: New file. + * iconvdata/testdata/IBM1137: New file. + * iconvdata/testdata/IBM1137..UTF8: New file. + * iconvdata/testdata/IBM1153: New file. + * iconvdata/testdata/IBM1153..UTF8: New file. + * iconvdata/testdata/IBM1154: New file. + * iconvdata/testdata/IBM1154..UTF8: New file. + * iconvdata/testdata/IBM1155: New file. + * iconvdata/testdata/IBM1155..UTF8: New file. + * iconvdata/testdata/IBM1156: New file. + * iconvdata/testdata/IBM1156..UTF8: New file. + * iconvdata/testdata/IBM1157: New file. + * iconvdata/testdata/IBM1157..UTF8: New file. + * iconvdata/testdata/IBM1158: New file. + * iconvdata/testdata/IBM1158..UTF8: New file. + Contributed by Jiro Sekiba <SEKIBA@jp.ibm.com>. + +2005-02-10 Paolo Bonzini <bonzini@gnu.org> + + * posix/regcomp.c (lower_subexp): Do not optimize empty + subexpressions even with REG_NOSUB. + * posix/rxspencer/tests: Add a previously failing testcase. + +2005-02-21 Alan Modra <amodra@bigpond.net.au> + + [BZ #719] + * elf/dl-reloc.c (_dl_nothread_init_static_tls): Assert that dtv + array index is within bounds. + +2005-02-21 Ulrich Drepper <drepper@redhat.com> + + [BZ #719] + * elf/dl-load.c: Do not allow PT_TLS in modules loaded in statically + linked code. + * sysdeps/generic/dl-tls.c [!SHARED]: Don't build _dl_next_tls_modid. + * elf/Makefile: Remove rules to build and run tst-tls9-static. + + [BZ #719] + * elf/dl-reloc.c (_dl_nothread_init_static_tls): Avoid using + THREAD_DTV multiple times, this minimally reduces code size on + some archs. + +2005-02-21 Jakub Jelinek <jakub@redhat.com> + + [BZ #768] + * nscd/nscd_gethst_r.c (nscd_gethst_r): Set *h_errnop to + NETDB_INTERNAL if buffer is too small. + + [BZ #768] + * nscd/hstcache.c (INCR): Remove. + (addhstbyX): Double buflen in each iteration rather than add INCR. + * nscd/grpcache.c: Likewise. + * nscd/pwdcache.c: Likewise. + +2005-02-21 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/libc_fatal.c: Print backtrace and memory + map if requested. + * debug/chk_fail.c: Request backtrace and memory map dump. + + * Versions.def: Add GLIBC_2.4 for libc. + * debug/fgets_chk.c: New file. + * debug/fgets_u_chk.c: New file. + * debug/getcwd_chk.c: New file. + * debug/getwd_chk.c: New file. + * debug/readlink_chk.c: New file. + * debug/read_chk.c: New file. + * debug/pread_chk.c: New file. + * debug/pread64_chk.c: New file. + * debug/recv_chk.c: New file. + * debug/recvfrom_chk.c: New file. + * debug/Versions: Add all new functions with version GLIBC_2.4. + * debug/Makefile (routines): Add fgets_chk, fgets_u_chk, read_chk, + pread_chk, pread64_chk, recv_chk, recvfrom_chk, readlink_chk, + getwd_chk, and getcwd_chk. Plus appropriate CFLAGS definitions. + * debug/tst-chk1.c: Add more tests. + * libio/bits/stdio2.h: Add macros for fgets and fgets_unlocked. + * include/stdio.h: Declare __fgets_chk and __fgets_unlocked_chk. + * posix/unistd.h: Include <bits/unistd.h> for fortification. + * posix/bits/unistd.h: New file. + * posix/Makefile (headers): Add bits/unistd.h. + * socket/sys/socket.h: Include <bits/socket2.h> for fortification. + * socket/bits/socket2.h: New file. + * socket/Makefile (headers): Add bits/socket2.h. + + * string/bits/string3.h: Extend memset macro to check for zero 3rd + parameter and use __memset_zero_constant_len_parameter in that case. + * sysdeps/generic/memset_chk.c: Add + __memset_zero_constant_len_parameter alias and linker warning. + * debug/Versions: Add __memset_zero_constant_len_parameter to libc + with version GLIBC_2.4. + + * sysdeps/generic/bits/types.h: Don't unnecessarily use __extension__ + in __STD_TYPE definition. + +2005-02-21 Jakub Jelinek <jakub@redhat.com> + + * malloc/malloc.c (malloc_printerr): If MALLOC_CHECK_={5,7}, print + the error message rather than program name. + +2005-02-21 Ulrich Drepper <drepper@redhat.com> + + [BZ #767] + * posix/unistd.h: symlink and readlink are unconditionally + available in the 2001 spec. + +2005-02-16 Roland McGrath <roland@redhat.com> + + * intl/dcigettext.c (_nl_find_msg): Add a cast. + + * nis/nis_clone_dir.c (nis_clone_directory): Use char * for ADDR. + * nis/nis_clone_obj.c (nis_clone_object): Likewise. + * nis/nis_clone_res.c (nis_clone_result): Likewise. + + * resolv/nss_dns/dns-network.c (getanswer_r): Use const unsigned char * + for END_OF_MESSAGE and CP. + + * resolv/res_send.c (send_dg): Add else branch for case impossible + unless `poll' is buggy. + + * crypt/crypt_util.c (__setkey_r): Add a cast. + + * locale/programs/linereader.c (get_toplvl_escape): Use size_t for + NBYTES, and unsigned char * for BYTES. + + * locale/programs/charmap.c (charmap_new_char): Use size_t and + unsighed char * for NBYTES, BYTES parameters. + + * sysdeps/generic/dl-hash.h (_dl_elf_hash): Take const char * argument + and cast it. + * sysdeps/i386/i686/dl-hash.h (_dl_elf_hash): Likewise. + + * sunrpc/create_xid.c (_create_xid): Don't use unsigned long for RES. + + * sunrpc/svcauth_des.c (_svcauth_des): Fix cast type. + + * sunrpc/auth_des.c (authdes_create): Don't use u_char for PKEY_DATA. + (authdes_marshal): Don't use unsigned int for LEN. + * sunrpc/xdr.c (xdr_hyper): Don't use unsigned long for T2. + (xdr_u_hyper): Likewise. + (xdr_u_short): Don't use u_long for L. + * sunrpc/xdr_intXX_t.c (xdr_int64_t): Don't use uint32_t for T2. + + * inet/rexec.c (rexec_af): Use socklen_t. + * sunrpc/key_call.c (getkeyserv_handle): Likewise. + * sunrpc/rtime.c (rtime): Likewise. + * resolv/res_send.c (send_vc, send_dg): Likewise. + * nis/nis_callback.c (__nis_create_callback): Likewise. + + * sysdeps/generic/libc-start.c: Use unsigned int for nthreads ptr. + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Fix type of ADDR local. + + * libio/libio.h (_IO_BE): Add parenthesis around EXPR. + + * intl/dcigettext.c (INTVARDEF, INTUSE): Macros removed. + (_nl_default_dirname): Use libc_hidden_data_def instead of INTVARDEF. + (libc_freeres_fn, DCIGETTEXT): Don't use INTUSE. + * intl/bindtextdom.c (INTUSE): Macro removed. + (_nl_default_dirname): Use libc_hidden_proto. + (set_binding_values): Don't use INTUSE. + * include/libintl.h (_libc_intl_domainname_internal): Decl removed. + (_libc_intl_domainname): Use libc_hidden_proto. + * posix/regex_internal.h (gettext): Remove INTUSE on it. + * locale/SYS_libc.c (_libc_intl_domainname): Use libc_hidden_data_def + rather than INTDEF. + * include/libintl.h (_): Don't use *_internal name. + + * ctype/ctype-extn.c (__ctype_tolower, __ctype_toupper): Use int32_t, + not uint32_t. + * locale/lc-ctype.c (_nl_postload_ctype): Likewise for assignments. + + * iconv/gconv_open.c (__gconv_open): Remove useless cast. + + [BZ #721] + * sysdeps/i386/dl-machine.h (ELF_MACHINE_NO_RELA): Define this outside + of [RESOLVE_MAP]. + * sysdeps/sh/dl-machine.h (ELF_MACHINE_NO_REL): Likewise. + * sysdeps/powerpc/powerpc32/dl-machine.h + (elf_machine_rel, elf_machine_rel_relative): Removed. + * sysdeps/powerpc/powerpc64/dl-machine.h + (elf_machine_rel, elf_machine_rel_relative): Removed. + +2005-02-03 Alexandre Oliva <aoliva@redhat.com> + + [BZ #721] + * elf/dynamic-link.h: Don't declare nested auto functions that are + not going to be defined. + +2004-07-23 Jakub Jelinek <jakub@redhat.com> + + [BZ #284] + * include/features.h (_POSIX_SOURCE, _POSIX_C_SOURCE): Define + if _XOPEN_SOURCE >= 500 even if __STRICT_ANSI__ is defined. + +2005-02-16 Roland McGrath <roland@redhat.com> + + * sysdeps/generic/libc-start.c (LIBC_START_MAIN): Move UBP_EV defn + inside [! SHARED] where it's used. + +2005-02-15 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/generic/bits/byteswap.h: Make sure result of all the + functions and macros is unsigned. + +2005-02-11 Barry deFrese <bddebian@comcast.net> + + [BZ #722] + * sysdeps/mach/hurd/setresgid.c: Use weak_alias. + * sysdeps/mach/hurd/setresuid.c: Likewise. + +2005-02-14 GOTO Masanori <gotom@debian.or.jp> + + * misc/sys/syslog.h: Fix typo in comment. + +2005-02-14 Roland McGrath <roland@redhat.com> + + [BZ #720] + * sysdeps/unix/sysv/linux/sys/kd.h: Don't leave _LINUX_TYPES_H defined + if it wasn't originally. + +2005-02-14 GOTO Masanori <gotom@debian.or.jp> + + * sysdeps/unix/sysv/linux/alpha/syscalls.list: Remove the duplicated + getpeername entry. + * sysdeps/unix/sysv/linux/ia64/syscalls.list: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list: Likewise. + +2005-02-11 Jakub Jelinek <jakub@redhat.com> + + * scripts/soversions.awk: Only record first WORDSIZE{32,64} + matching line. + +2005-02-14 Alan Modra <amodra@bigpond.net.au> + + * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela): Define + with auto inline, and attribute always_inline. + (elf_machine_rela_relative, elf_machine_lazy_rel): Likewise. + (elf_machine_rel, elf_machine_rel_relative): Likewise. + * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela): Likewise. + (elf_machine_rela_relative, elf_machine_lazy_rel): Likewise. + (elf_machine_rel, elf_machine_rel_relative): Likewise. + (elf_machine_tprel): Likewise. + +2005-02-14 Andreas Schwab <schwab@suse.de> + + * manual/filesys.texi (Random Access Directory): Fix type of file + position value for telldir and seekdir. + (Attribute Meanings): Fix typo. + +2005-02-14 H.J. Lu <hongjiu.lu@intel.com> + + * csu/elf-init.c (__libc_csu_fini): Enable if LIBC_NONSHARED + isn't defined. + * sysdeps/generic/libc-start.c (LIBC_START_MAIN): Call fini + if SHARED isn't defined. + * elf/Makefile (tests-static): Add tst-array1-static. + ($(objpfx)tst-array1-static.out): New target. + * elf/tst-array1-static.c: New file. 2005-02-11 Jakub Jelinek <jakub@redhat.com> * debug/chk_fail.c (__chk_fail): Add a while (1) loop around __libc_message to kill GCC warning about noreturn function returning. + * elf/rtld.c (dlmain): If LD_TRACE_PRELINKING, clear l_relocated flag + before relocating ld.so again. + * elf/rtld.c (_dl_start): Set bootstrap_map.l_relocated even for already prelinked ld.so. - * scripts/soversions.awk: Only record first WORDSIZE{32,64} - matching line. - +>>>>>>> 1.9238 2005-02-11 Roland McGrath <roland@redhat.com> [BZ #715] @@ -127,7 +595,7 @@ 2005-02-07 Ulrich Drepper <drepper@redhat.com> - * elf/dl-load.c (_dl_map_object_from_fd): Makre sure registers are + * elf/dl-load.c (_dl_map_object_from_fd): Make sure registers are set correctly. 2005-01-07 Richard Henderson <rth@redhat.com> @@ -142,6 +610,7 @@ 2005-01-07 Jakub Jelinek <jakub@redhat.com> + [BZ #738] * elf/dl-load.c (open_path): If rtld_search_dirs is in RELRO segment, avoid writing to it if none of the standard search directories exist. @@ -162,9 +631,11 @@ 2005-02-07 Jakub Jelinek <jakub@redhat.com> + [BZ #741] * nscd/nscd.c (termination_handler): Avoid segfault if some database is not enabled. + [BZ #741] * nscd/nscd_getai.c (__nscd_getai): If ai_resp->found == -1, set __nss_not_use_nscd_hosts and return -1. * nscd/nscd_initgroups.c (__nscd_getgrouplist): If @@ -205,6 +676,7 @@ 2005-02-07 Jakub Jelinek <jakub@redhat.com> + [BZ #742] * nscd/nscd.init (reload): Print Reloading nscd: before and a newline after the status string printed by killproc. @@ -233,6 +705,7 @@ * shadow/sgetspent_r.c (FALSE): Macro renamed to ... (FALSEP): ... this. Updated all references. + [BZ #765] * libio/fmemopen.c: Include <stdint.h>. 2005-01-30 Ulrich Drepper <drepper@redhat.com> @@ -272,6 +745,7 @@ La_s390_64_regs, La_s390_64_retval): New. * elf/tst-auditmod1.c: Add s390 entries. + [BZ #743] * sysdeps/s390/bits/string.h (strlen, strncpy, strcat, strncat, strncat, memchr, strcmp): Add missing memory clobber. @@ -403,6 +877,7 @@ 2005-01-23 Roland McGrath <roland@redhat.com> + [BZ #737] * sysdeps/i386/Makefile (defines): If -mno-tls-direct-seg-refs appears in $(CFLAGS), add -DNO_TLS_DIRECT_SEG_REFS. * sysdeps/unix/sysv/linux/i386/sysdep.h [USE___THREAD] @@ -412,6 +887,7 @@ 2005-01-25 Jakub Jelinek <jakub@redhat.com> + [BZ #731] * stdlib/fmtmsg.c (addseverity): Remove new_string variable. (free_mem): Don't free string. * stdlib/tst-fmtmsg.c: Include string.h. @@ -419,12 +895,15 @@ 2005-01-25 Andreas Schwab <schwab@suse.de> + [BZ #736] * timezone/asia: Update from tzdata2005c. * timezone/backward: Likewise. + * timezone/europe: Likewise. * timezone/leapseconds: Likewise. * timezone/northamerica: Likewise. * timezone/southamerica: Likewise. + [BZ #736] * timezone/private.h: Update from tzcode2005c. * timezone/tzfile.h: Likewise. * timezone/zdump.c: Likewise. @@ -445,6 +924,7 @@ 2005-01-24 Ulrich Drepper <drepper@redhat.com> + [BZ #671] * misc/syslog.c: Moved to... * sysdeps/generic/syslog.c: ...here. [NO_SIGIPE]: Don't install SIGPIPE handler. @@ -484,6 +964,7 @@ 2005-01-21 Jakub Jelinek <jakub@redhat.com> + [BZ #735] * elf/Makefile: Add rules to build and run tst-align2. * elf/tst-align2.c: New test. * elf/tst-alignmod2.c: New file. @@ -498,7 +979,7 @@ stack. * posix/execle.c: Likewise. * posix/execlp.c: Likewise. - * posix/execlp.c: Likewise. + * posix/execvp.c: Likewise. (script_execute): Removed. (allocate_scripts_argv): New function. Called at most once to allocate memory, not every time a script is run. Adjust caller. @@ -528,6 +1009,7 @@ 2005-01-17 Roland McGrath <roland@redhat.com> + [BZ #745] * nscd/Makefile (LDLIBS-nscd): New variable. ($(objpfx)nscd): Use that instead of selinux-LIBS. @@ -541,6 +1023,7 @@ 2005-01-16 GOTO Masanori <gotom@debian.or.jp> + [BZ #734] * sysdeps/unix/rewinddir.c: Reset filepos. * dirent/tst-seekdir.c: Check telldir value after calling rewinddir. @@ -565,6 +1048,7 @@ * posix/regcomp.c [!_LIBC] (init_dfa): Fix determining of relevant LC_* variable. Patch by Aharon Robbins <arnold@skeeve.com>. + [BZ #731] * stdlib/fmtmsg.c (internal_addseverity): Remove incorrect free call. * stdlib/tst-fmtmsg.c (main): Add another addseverity test. @@ -600,6 +1084,7 @@ 2005-01-11 Thorsten Kukuk <kukuk@suse.de> + [BZ #733] * sunrpc/svc_tcp.c (svctcp_create): Call listen with SOMAXCONN as backlog. * sunrpc/svc_unix.c (svcunix_create): Likewise. @@ -624,6 +1109,7 @@ 2005-01-10 Jakub Jelinek <jakub@redhat.com> + [BZ #732] * time/tst-strptime.c (day_tests): Add 2 new tests. (test_tm, main): Issue an error instead of segfaulting if strptime returns NULL. @@ -665,6 +1151,7 @@ 2005-01-09 Andreas Jaeger <aj@suse.de> + [BZ #732] * time/strptime_l.c (__strptime_internal): Add braces to avoid warning. @@ -853,6 +1340,7 @@ 2004-12-22 Steven Munroe <sjmunroe@us.ibm.com> + [BZ #602] * math/libm-test.inc (rint_test_tonearest): New test. (rint_test_towardzero): New test. (rint_test_downward): New test. @@ -908,6 +1396,7 @@ 2004-12-29 Jakub Jelinek <jakub@redhat.com> + [BZ #592] * sysdeps/ia64/fpu/libm_support.h (__libm_error_support): Use libc_hidden_proto instead of HIDDEN_PROTO. * sysdeps/ia64/fpu/libm-symbols.h (HIDDEN_PROTO): Remove. @@ -916,6 +1405,7 @@ 2004-12-28 David Mosberger <davidm@hpl.hp.com> + [BZ #592] * sysdeps/ia64/fpu/Makefile (duplicated-routines): New macro. (sysdep_routines): Replace libm_ldexp{,f,l} and libm_scalbn{,f,l} with $(duplicated-routines). @@ -924,14 +1414,17 @@ 2004-12-27 David Mosberger <davidm@hpl.hp.com> + [BZ #592] * sysdeps/ia64/fpu/libm-symbols.h: Add include of <sysdep.h> and undefine "ret" macro. Add __libm_error_support hidden definitions. + [BZ #592] * sysdeps/ia64/fpu/e_lgamma_r.c: Remove CVS-id comment. Add missing portion of copyright statement. * sysdeps/ia64/fpu/e_lgammaf_r.c: Likewise. * sysdeps/ia64/fpu/e_lgammal_r.c: Likewise. + [BZ #592] * sysdeps/ia64/fpu/w_lgamma.c: Remove CVS-id comment. Add missing portion of copyright statement. (__ieee754_lgamma): Rename from lgamma(). Make lgamma() a weak alias. @@ -941,6 +1434,7 @@ 2004-12-09 H. J. Lu <hjl@lucon.org> + [BZ #592] * sysdeps/ia64/fpu/s_nextafterl.c: Remove. * sysdeps/ia64/fpu/s_nexttoward.c: Likewise. * sysdeps/ia64/fpu/s_nexttowardf.c: Likewise. @@ -950,6 +1444,7 @@ 2004-11-18 David Mosberger <davidm@hpl.hp.com> + [BZ #592] * sysdeps/ia64/fpu/README: New file. * sysdeps/ia64/fpu/gen_import_file_list: New file. * sysdeps/ia64/fpu/import_check: Likewise. @@ -958,6 +1453,7 @@ * sysdeps/ia64/fpu/import_intel_libm: Likewise. * sysdeps/ia64/fpu/libm-symbols.h: Likewise. + [BZ #592] * sysdeps/ia64/fpu/e_acos.S: Update from Intel libm v2.1+. * sysdeps/ia64/fpu/e_acosf.S: Likewise. * sysdeps/ia64/fpu/e_acosl.S: Likewise. @@ -1055,6 +1551,7 @@ * sysdeps/ia64/fpu/s_truncf.S: Likewise. * sysdeps/ia64/fpu/s_truncl.S: Likewise. + [BZ #592] * sysdeps/ia64/fpu/e_acosh.S: New file from Intel libm v2.1+. * sysdeps/ia64/fpu/e_acoshf.S: Likewise. * sysdeps/ia64/fpu/e_acoshl.S: Likewise. @@ -1126,6 +1623,7 @@ * sysdeps/ia64/fpu/w_tgammaf.S: Likewise. * sysdeps/ia64/fpu/w_tgammal.S: Likewise. + [BZ #592] * sysdeps/ia64/fpu/e_gamma_r.c: New empty dummy-file. * sysdeps/ia64/fpu/e_gammaf_r.c: Likewise. * sysdeps/ia64/fpu/e_gammal_r.c: Likewise. @@ -1153,6 +1651,7 @@ * sysdeps/ia64/fpu/w_sinhf.c: Likewise. * sysdeps/ia64/fpu/w_sinhl.c: Likewise. + [BZ #592] * sysdeps/ia64/fpu/libm_atan2_reg.S: Remove. * sysdeps/ia64/fpu/s_ldexp.S: Likewise. * sysdeps/ia64/fpu/s_ldexpf.S: Likewise. @@ -1161,15 +1660,19 @@ * sysdeps/ia64/fpu/s_scalbnf.S: Likewise. * sysdeps/ia64/fpu/s_scalbnl.S: Likewise. + [BZ #592] * sysdeps/ia64/fpu/s_sincos.c: Make it an empty dummy-file. * sysdeps/ia64/fpu/s_sincosf.c: Likewise. * sysdeps/ia64/fpu/s_sincosl.c: Likewise. + [BZ #592] * sysdeps/ia64/fpu/e_atan2l.S: Add "Not needed" comment. + [BZ #592] * sysdeps/ia64/fpu/s_copysign.S: Add __libm_copysign{,f,l} alias for use by libm_error.c + [BZ #592] * sysdeps/ia64/fpu/Makefile (libm-sysdep_routines): Remove libm_atan2_reg, libm_tan, libm_frexp4{f,l}. Mention s_erfc{,f,l}, libm_frexp{,f,l}, libm_ldexp{,f,l}, @@ -1183,11 +1686,13 @@ 2005-01-05 Steven Munroe <sjmunroe@us.ibm.com> + [BZ #729] * elf/rtld.c (dl_main) [NEED_DL_SYSINFO_DSO]: Insure l_map_end and l_text_end are set for a VDSO with a single PT_LOAD entry. 2005-01-05 Ulrich Drepper <drepper@redhat.com> + [BZ #730] * libio/iofopncook.c (_IO_cookie_seekoff): Define. Mark offset as invalid to disable optimizations in fileops which won't work here. (_IO_cookie_jumps): Use it. @@ -1206,6 +1711,7 @@ 2005-01-03 Ulrich Drepper <drepper@redhat.com> + [BZ #727] * sysdeps/generic/libc-start.c [SHARED] (__libc_start_main): Don't initialize __environ again. * stdlib/Makefile: Add rules to build and run tst-putenv. @@ -1232,10 +1738,12 @@ * po/es.po: Update from translation team. + [BZ #726] * sysdeps/generic/dl-tls.c (__tls_get_addr): Fix typo. 2004-12-27 Ulrich Drepper <drepper@redhat.com> + [BZ #744] * include/signal.h: Define __sigemptyset. 2004-04-27 Paolo Bonzini <bonzini@gnu.org> @@ -1251,10 +1759,12 @@ 2004-12-21 Jakub Jelinek <jakub@redhat.com> + [BZ #723] * sysdeps/unix/sysv/linux/i386/clone.S (__clone): Make sure %esp when calling fn is 16 byte aligned. * sysdeps/i386/tst-stack-align.h: New file. + [BZ #725] * misc/efgcvt_r.c (FLOAT_MIN_10_EXP, FLOAT_MIN_10_NORM): Define. (ecvt_r): Special case denormals. * misc/qefgcvt_r.c (FLOAT_MIN_10_EXP, FLOAT_MIN_10_NORM): Define. @@ -1266,6 +1776,7 @@ * version.h (RELEASE, VERSION): development, 2.3.90 * include/features.h (__GLIBC_MINOR__): Now 4. +<<<<<<< ChangeLog 2004-12-20 Jakub Jelinek <jakub@redhat.com>, Jim Gifford <giffordj@linkline.com> @@ -6827,5 +7338,4 @@ * stdio-common/tst-sscanf.c (int_tests): New array. (main): Run int_tests. - -See ChangeLog.14 for earlier changes. +See ChangeLog.15 for earlier changes. diff --git a/ChangeLog.15 b/ChangeLog.15 new file mode 100644 index 0000000000..5d9b00d42a --- /dev/null +++ b/ChangeLog.15 @@ -0,0 +1,5480 @@ +2004-12-20 Jakub Jelinek <jakub@redhat.com>, + Jim Gifford <giffordj@linkline.com> + + [BZ #562] + * sysdeps/mips/Makefile (librt-sysdep_routines): Add. + * sysdeps/unix/mips/rt-sysdep.S: New file. + +2004-12-19 Roland McGrath <roland@redhat.com> + + * iconv/Makefile (test-iconvconfig): New target. + [$(cross-compiling) != yes] (xtests): Depend on it. + + * iconv/iconvconfig.c (nostdlib, output_file, output_file_len): + New variables. + (options, parse_opt, main): Take new options --nostdlib and + --output/-o to set them. Under --nostdlib, skip GCONV_PATH dirs. + (write_output): If output_file is set, write the output there. + +2004-12-19 Andreas Jaeger <aj@suse.de> + + [BZ #560] + * inet/netinet/in.h: Use __interface_addr instead of __interface. + + [BZ #573] + * sunrpc/xcrypt.c (passwd2des_internal): Make it hidden instead of + internal linkage. + +2004-12-19 Roland McGrath <roland@frob.com> + + * version.h (VERSION): 2.3.4. + * README.template: Various updates. + * README: Regenerated. + * NEWS: Mention ports. + * README-alpha: File removed. + + [BZ #416] + * locale/langinfo.h: Comment fixes. + +2004-12-17 Ulrich Drepper <drepper@redhat.com> + + * po/ja.po: Update from translation team. + +2004-12-17 Richard Henderson <rth@redhat.com> + + * sysdeps/unix/sysv/linux/alpha/clone.S (__clone): Add support + for NPTL where the PID is stored at userlevel and needs to be + reset when CLONE_THREAD is not used. + +2004-12-17 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Update. + +2004-12-17 Andreas Jaeger <aj@suse.de> + + * math/libm-test.inc (atan2_test): Compute value with 36 digits. + * sysdeps/alpha/fpu/libm-test-ulps: Adjust for changed result. + * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. + * sysdeps/s390/fpu/libm-test-ulps: Likewise. + * sysdeps/sparc/sparc32/fpu/libm-test-ulps: Likewise. + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Likewise. + * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. + +2004-12-16 Ulrich Drepper <drepper@redhat.com> + + * stdlib/tst-setcontext.c: Enlarge st1 and st2 arrays. + +2004-09-02 Steven Munroe <sjmunroe@us.ibm.com> + + [BZ #610] + * sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S + (__novec_getcontext): Fix typo in store of fp29. + (__getcontext): Fix typo in store of fp29. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S + (__novec_swapcontext): Fix typo in store of fp29. + (__swapcontext): Fix typo in store of fp29. + +2004-12-17 GOTO Masanori <gotom@debian.or.jp> + + * sysdeps/unix/sysv/linux/dl-osinfo.h (DL_SYSDEP_OSCHECK): Fix + vague message. + +2004-12-16 Roland McGrath <roland@redhat.com> + + * nscd/Makefile ($(objpfx)nscd): Don't depend on $(selinux-LIBS), + which is usually a -lselinux that make will resolve wrongly. + +2004-12-16 Andreas Jaeger <aj@suse.de> + + * math/math.h: Use #if defined to not receive warnings about + undefined symbols. + +2004-12-16 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): Add support + for NPTL where the PID is stored at userlevel and needs to be reset + when CLONE_THREAD is not used. + + * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep.h + (SYSCALL_ERROR_HANDLER): If RTLD_PRIVATE_ERRNO, use rtld_errno + instead of errno. + * sysdeps/unix/sysv/linux/sparc/sparc64/socket.S: Include + sysdep-cancel.h instead of sysdep.h. Handle cancellation. + * sysdeps/sparc/sparc64/fpu/libm-test-ulps: Regenerate. + + * sysdeps/ieee754/ldbl-128/e_expl.c: Include stdlib.h. + +2004-12-15 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/gethostid.c: Make bi-arch safe. + +2004-12-15 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S: Correct stack + alignment. Clean up flag bit tests. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Correct stack + alignment. Clean up flag bit tests. Remove redundent SP assignment. + Add TOC register save/restore around function call. + + * sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S: Make no_vmx symbol + local. + * sysdeps/powerpc/powerpc32/fpu/setjmp-common.S: Make no_vmx symbol + local. + * sysdeps/powerpc/powerpc64/__longjmp-common.S: Make no_vmx symbol + local. + * sysdeps/powerpc/powerpc64/setjmp-common.S: Make no_vmx and + aligned_save_vmx symbol local. + +2004-12-15 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/i386/i486/bits/string.h (__strncat_g): Fix i686 + implementation. + +2004-09-08 H.J. Lu <hongjiu.lu@intel.com> + + * Makeconfig (libunwind): New. + (libgcc_eh): Add $(libunwind). + (gnulib): Always set to -lgcc $(libgcc_eh). + (static-gnulib): Always set to -lgcc -lgcc_eh $(libunwind). + (libc.so-gnulib): New. + * Makerules (LDLIBS-c.so): Use $(libc.so-gnulib) instead of + $(static-gnulib). + * configure.in (libc_cv_cc_with_libunwind): Set to yes if gcc + uses -lunwind for static binaries. + +2004-06-05 Joseph S. Myers <jsm@polyomino.org.uk> + + * malloc/Makefile (install-bin): Remove memusage. + (install-bin-script): Add memusage. + +2004-12-15 Jakub Jelinek <jakub@redhat.com> + + * nis/nis_domain_of_r.c (nis_domain_of_r): Use libnsl_hidden_def, + not libnsl_hidden_proto. + + * sysdeps/unix/sysv/linux/s390/s390-32/clone.S (__clone): Add support + for NPTL where the PID is stored at userlevel and needs to be reset + when CLONE_THREAD is not used. + * sysdeps/unix/sysv/linux/s390/s390-64/clone.S (__clone): Likewise. + + * sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S (__clone): Save + and restore r2 around call to fn. + +2004-12-15 Andreas Jaeger <aj@suse.de> + + * sysdeps/ia64/dl-machine.h (elf_machine_rela): Mark auto instead + of static, add always_inline attribute. + (elf_machine_rela_relative): Likewise. + (elf_machine_lazy_rel): Likewise. + +2004-12-15 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S: Add support + for pid caching in nptl. + +2004-12-14 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Add support + for pid caching in nptl. + +2004-10-18 Maciej W. Rozycki <macro@mips.com> + + * sysdeps/unix/sysv/linux/mips/bits/socket.h (__cmsg_nxthdr): Use + __NTH instead of __THROW in the inline definition. + * sysdeps/unix/sysv/linux/mips/sys/tas.h (_test_and_set): Likewise. + + * sysdeps/mips/bits/dlfcn.h (RTLD_DEEPBIND): New macro. + + * sysdeps/unix/sysv/linux/mips/bits/mman.h + (PROT_GROWSDOWN, PROT_GROWSUP): New macros. + +2004-10-06 Alan Modra <amodra@bigpond.net.au> + + * sysdeps/powerpc/powerpc64/ppc-mcount.S (PROF): Don't undef. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S: Invoke CALL_MOUNT. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/vfork.S: Likewise. + +2004-10-19 Wolfram Gloger <wg@malloc.de> + + * malloc/hooks.c (mem2chunk_check, top_check): Handle + non-contiguous arena. Reported by Michael Dalton + <mwdalton@stanford.edu> [BZ #457]. Add further checks for top chunk. + +2004-12-14 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/posix/sysconf.c (__sysconf_check_spec): Remove leading + underscore from GETCONF_DIR filenames. + +2004-12-13 Ulrich Drepper <drepper@redhat.com> + + * po/de.po: Update from translation team. + + * nss/getnssent.c (__nss_getent): Double buffer size each round to + avoid problems with delays for some people's huge entries. + * nss/getXXbyYY.c (FUNCTION_NAME): Likewise. + +2004-12-13 Jakub Jelinek <jakub@redhat.com> + + * posix/getconf.c (main): Prepend just $GETCONF_DIR/ instead of + $GETCONF_DIR/_ to spec. + * posix/confstr.c (confstr): Remove leading underscores for + _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS. + +2004-12-12 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-load.c (_dl_map_object_from_fd): Fix computation of + mapping start. It must take the actual pagesize into account, not + the alignment in the file. + +2004-12-11 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.c (_int_realloc): Add checks for corrupted memory. + (_int_free): Make clear message are result of free() calls. + + * malloc/malloc.c (_int_realloc): Remove unnecessary tests for + oldmem and size == 0. + +2004-12-10 Ulrich Drepper <drepper@redhat.com> + + * malloc/arena.c (arena_get2): Prevent endless loop if arenas and + list lock are taken. + +2004-12-08 Thorsten Kukuk <kukuk@suse.de> + + * nis/nss_nisplus/nisplus-netgrp.c (_nss_nisplus_getnetgrent_r): + Add check if the value is not an empty string. [BZ #597] + +2004-11-29 Jakub Jelinek <jakub@redhat.com> + + * stdlib/strtod_l.c (INTERNAL (__STRTOF)): If densize > 2 + and numsize < densize, always shift num up by empty + 1 limbs. + +2004-12-07 Paolo Bonzini <bonzini@gnu.org> + + * posix/regexec.c (proceed_next_node): Simplify treatment of epsilon + nodes. Pass the pushed node to push_fail_stack. + (push_fail_stack): Accept a single node rather than an array + of two epsilon destinations. + (build_sifted_states): Only walk non-epsilon nodes. + (check_arrival): Don't pass epsilon nodes to + check_arrival_add_next_nodes. + (check_arrival_add_next_nodes) [DEBUG]: Abort if an epsilon node is + found. + (check_node_accept): Do expensive checks later. + (add_epsilon_src_nodes): Cache result of merging the inveclosures. + * posix/regex_internal.h (re_dfastate_t): Add non_eps_nodes and + inveclosure. + (re_string_elem_size_at, re_string_char_size_at, re_string_wchar_at, + re_string_context_at, re_string_peek_byte_case, + re_string_fetch_byte_case, re_node_set_compare, re_node_set_contains): + Declare as pure. + * posix/regex_internal.c (create_newstate_common): Remove. + (register_state): Move part of it here. Initialize non_eps_nodes. + (free_state): Free inveclosure and non_eps_nodes. + (create_cd_newstate, create_ci_newstate): Allocate the new + re_dfastate_t here. + +2004-12-09 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.c (public_rEALLOc): Add parameter checks. + (_int_free): Provide better error message for invalid pointers. + +2004-12-01 Jakub Jelinek <jakub@redhat.com> + + * posix/tst-regex.c: Use defined _POSIX_CPUTIME && _POSIX_CPUTIME >= 0 + conditionals instead of defined _POSIX_CPUTIME. + (main): If _POSIX_CPUTIME == 0, call sysconf to see if CPUTIME + option is available. + * posix/tst-regex.c2: Use defined _POSIX_CPUTIME && _POSIX_CPUTIME >= 0 + conditionals instead of defined _POSIX_CPUTIME. + (do_test): If _POSIX_CPUTIME == 0, call sysconf to see if CPUTIME + option is available. + * sysdeps/posix/sysconf.c (__sysconf): If _POSIX_CPUTIME resp. + _POSIX_THREAD_CPUTIME is defined to 0, return -1 for the corresponding + _SC_ argument. + +2004-12-08 Jakub Jelinek <jakub@redhat.com> + + * elf/ldd.bash.in: When set -o pipefail is available, use that for + piping to cat; when not, don't use the pipe at all. + Pipe to cat in all cases of running the executable. + When direct running exits with code 5, retry running via ${RTLD}. + * elf/rtld.c (process_envvars): If __libc_enable_secure and + mode != normal, exit with exitcode 5. + +2004-12-07 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/posix/sysconf.c (__sysconf_check_spec): Only define + if it will be actually used. + +2004-12-07 Roland McGrath <roland@redhat.com> + + * rt/tst-timer5.c (setup_test): New function. + (TEST_CLOCK_MISSING): Use it to punt test if timer_create does not + support CLOCK_MONOTONIC. + +2004-12-07 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/ia64/clone2.S (__clone2): Add support for + NPTL where the PID is stored at userlevel and needs to be reset when + CLONE_THREAD is not used. Restore gp before calling _exit. + +2004-12-07 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/sh/clone.S: Clear the frame pointer when + starting a new thread. Add support for NPTL where the PID is stored + at userlevel and needs to be reset when CLONE_THREAD is not used. + +2004-12-01 Jakub Jelinek <jakub@redhat.com> + + * elf/rtld.c (process_envvars): Don't consider LD_SHOW_AUXV + and LD_DYNAMIC_WEAK if __libc_enable_secure. + If __libc_enable_secure, /etc/suid-debug doesn't exist and + program will be actually run, turn off all debugging. + * sysdeps/generic/unsecvars.h (UNSECURE_ENVVARS): Add LD_DEBUG, + LD_DYNAMIC_WEAK and LD_SHOW_AUXV. + +2004-12-06 Jakub Jelinek <jakub@redhat.com> + + * time/tzset.c (tzset_internal): If + or - is seen, + but no offset after it, reset offset to 0. [BZ #601] + +2004-12-06 Ulrich Drepper <drepper@redhat.com> + + * libio/ioseekpos.c (_IO_seekpos_unlocked): Call _IO_SEEKOFF not + _IO_SEEKPOS, saving one indirect jump. + + * libio/fileops.c (_IO_new_file_seekoff): Fix optimization of in-buffer + seek. Remove dead code. + +2004-12-02 Jakub Jelinek <jakub@redhat.com> + + * libio/Makefile (tests): Add bug-ungetc4. + * libio/bug-ungetc4.c: New test. + +2004-12-06 Roland McGrath <roland@redhat.com> + + * sysdeps/unix/clock_nanosleep.c (clock_nanosleep): Diagnose EINVAL + for CLOCK_THREAD_CPUTIME_ID, not ENOTSUP. + Use SYSDEP_NANOSLEEP handler before validating CLOCK_ID value. + + * rt/tst-timer4.c (TEST_CLOCK, TEST_CLOCK_NANOSLEEP): New macros. + Use them throughout in place of CLOCK_REALTIME and nanosleep. + (do_test) [TEST_CLOCK_MISSING]: Call this macro and if it returns + non-null, punt the test with a message using the string returned. + * rt/tst-timer5.c: New file. + * rt/Makefile (tests): Add it. + +2004-12-01 Paolo Bonzini <bonzini@gnu.org> + + * posix/regcomp.c (free_dfa_content, init_dfa): Remove + references to re_dfa_t's subexps field. + (parse_sub_exp, parse_expression): Do not use it. Use + completed_bkref_map instead. + (create_initial_state, peek_token): Store a backreference \N + with opr.idx = N-1. + * posix/regexec.c (proceed_next_node, check_dst_limits, get_subexp): + Likewise. + (check_subexp_limits): Remove useless condition. + * posix/regex_internal.h (re_subexp_t): Remove. + (re_dfa_t): Remove subexps and subexps_alloc field, add + completed_bkref_map. + +2004-12-05 Roland McGrath <roland@frob.com> + + * Makeconfig: Comment typo fix. + +2004-11-30 Andreas Schwab <schwab@suse.de> + + * nis/ypclnt.c (ypprot_err): Remove unused entries. + +2004-11-30 Paolo Bonzini <bonzini@gnu.org> + + * posix/regexec.c (check_dst_limits_calc_pos_1): Check for + bkref_idx == -1, and don't recurse in that case. + +2004-11-30 GOTO Masanori <gotom@debian.or.jp> + + * posix/confstr.c: Enclose #error message with double quote + for gcc-3.3 and lower. + +2004-12-04 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/i386/clone.S: Add support for NPTL where + the PID is stored at userlevel and needs to be reset when CLONE_THREAD + is not used. + * sysdeps/unix/sysv/linux/x86_64/clone.S: Likewise. + +2004-11-18 Daniel Jacobowitz <dan@codesourcery.com> + + * sysdeps/arm/sysdep.h: Define __USE_BX__ if bx is available. + Use it instead of __THUMB_INTERWORK__. Make RETINSTR take + only a condition and a register. + * sysdeps/arm/dl-machine.h: Use __USE_BX__ instead of + __THUMB_INTERWORK__. + (_dl_start_user): Use BX. + * sysdeps/arm/strlen.S: Use DO_RET. + * sysdeps/unix/arm/brk.S: Likewise. + * sysdeps/unix/arm/fork.S: Likewise. + * sysdeps/unix/arm/sysdep.S: Likewise. + * sysdeps/unix/arm/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/arm/clone.S: Update uses of RETINSTR. + * sysdeps/unix/sysv/linux/arm/mmap.S: Likewise. + * sysdeps/unix/sysv/linux/arm/mmap64.S: Likewise. + * sysdeps/unix/sysv/linux/arm/socket.S: Likewise. + * sysdeps/unix/sysv/linux/arm/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/arm/vfork.S: Likewise. + +2004-12-02 Roland McGrath <roland@redhat.com> + + * extra-lib.mk (object-suffixes-$(lib)): Add .oS when + $(lib)-static-only-routines is nonempty. + (extra-objs, o-iterator.mk rule): Filter out .oS from generators. + Add a special rule for .oS objects -> _nonshared.a library. + +2004-12-01 Jakub Jelinek <jakub@redhat.com> + + * time/mktime.c (__mktime_internal): If SEC_REQUESTED != SEC, + convert T2, not T. + * time/Makefile (tests): Add tst-mktime3. + * time/tst-mktime3.c: New test. + +2004-12-01 Jakub Jelinek <jakub@redhat.com> + + * stdlib/stdlib.h (realpath): Remove nonnull attribute. + + * posix/fnmatch_loop.c (internal_fnmatch): Clear is_seqval after + normal_bracket label. + + * time/tst-mktime2.c (bigtime_test): Initialize tm.tm_isdst to -1. + +2004-12-01 Roland McGrath <roland@redhat.com> + + * sysdeps/gnu/Makefile ($(objpfx)errlist-compat.c): + Do $(make-target-directory). + +2004-11-29 Roland McGrath <roland@redhat.com> + + * posix/confstr.c: Avoid punctuation in #error text. + +2004-11-27 Ulrich Drepper <drepper@redhat.com> + + * posix/Makefile (tests): Add tst-sysconf. + * posix/tst-sysconf.c: New file. + + * posix/getconf.c (vars): Add support for _SC_IPV6 and + _SC_RAW_SOCKETS. + * sysdeps/posix/sysconf.c (__sysconf): Add support for _SC_IPV6 + and _SC_RAW_SOCKETS. + * sysdeps/generic/bits/confname.h: Define _SC_IPV6 and + _SC_RAW_SOCKETS. + +2004-11-26 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/generic/unsecvars.h (UNSECURE_ENVVARS): Add GETCONF_DIR. + +2004-11-26 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/mips/pread.c: Include sgidefs.h only if + NO_SGIDEFS_H isn't defined. Don't include sgidefs.h twice. + * sysdeps/unix/sysv/linux/mips/pwrite.c: Likewise. + * sysdeps/unix/sysv/linux/mips/pread64.c: Likewise. + * sysdeps/unix/sysv/linux/mips/pwrite64.c: Likewise. + +2004-11-27 Ulrich Drepper <drepper@redhat.com> + + * include/dlfcn.h (__libc_dlopen): Add __RTLD_DLOPEN to the mode + parameter. Reported by VY Newsum <newsum@fel.tno.nl>. + +2004-11-10 Daniel Jacobowitz <dan@debian.org> + + * libio/iolibio.h (_IO_fclose, _IO_new_fclose, _IO_old_fclose, + _IO_fflush, _IO_fgetpos, _IO_fgetpos64, _IO_fgets, _IO_fopen, + _IO_old_fopen, _IO_new_fopen, _IO_fopen64, __fopen_internal, + _IO_fprintf, _IO_fputs, _IO_fsetpos, _IO_fsetpos64, _IO_ftell, + _IO_fread, _IO_fwrite, _IO_gets, _IO_printf, _IO_puts, _IO_scanf, + _IO_fflush_internal, _IO_ftell_internal, _IO_fputs_internal) + _IO_fwrite_internal): Remove incorrect __THROW. + * libio/libioP.h (_IO_default_xsputn, _IO_wdefault_xsputn, + _IO_default_xsgetn, _IO_wdefault_xsgetn, _IO_default_write, + _IO_default_read, _IO_getline, _IO_getline_info, _IO_getwline, + _IO_getwline_info, _IO_file_read_internal, _IO_sgetn_internal, + _IO_wdo_write_internal, _IO_do_write_internal, + _IO_getline_info_internal, _IO_getline_internal, + _IO_vfprintf_internal, _IO_putc_internal, _IO_read, _IO_write, + _IO_close): Likewise. + +2004-11-26 Jakub Jelinek <jakub@redhat.com> + + * posix/Makefile (install-others): Add $(inst_libexecdir)/getconf. + (CFLAGS-sysconf.c): Add -D_GETCONF_DIR. + (CFLAGS-getconf.c): New. + ($(inst_libexecdir)/getconf): New. + * posix/confstr.c (confstr): Use __sysconf to query specifications + that don't have _POSIX_V6_* macros defined. Use __*_{C,LD}FLAGS + macros defined in bits/environments.h. + * sysdeps/posix/sysconf.c: Include stdlib.h, string.h and + sys/stat.h. + (__sysconf_check_spec): New routine. + (__sysconf): Use it. + * posix/getconf.c (specs): Change into structure array. + (main): If -v is not given, try to get default from + $(libexecdir)/getconf/default. If specification is not + supported by this getconf, try to execute + $(libexecdir)/getconf/$(specification). + * sysdeps/unix/bsd/bsd4.4/freebsd/bits/environments.h: New file. + * sysdeps/unix/sysv/linux/s390/bits/environments.h: New file. + * sysdeps/unix/sysv/linux/powerpc/bits/environments.h: New file. + * sysdeps/unix/sysv/linux/sparc/bits/environments.h: New file. + * sysdeps/unix/sysv/linux/i386/bits/environments.h: New file. + * sysdeps/unix/sysv/linux/x86_64/bits/environments.h: New file. + * sysdeps/generic/bits/environments.h (__ILP32_OFFBIG_CFLAGS): + Define. + + * stdlib/stdlib.h (setenv): Use nonnull only for second argument. + (unsetenv): Remove. + +2004-11-23 Paolo Bonzini <bonzini@gnu.org> + + * posix/regcomp.c (analyze_tree): Always call calc_epsdest. + (calc_inveclosure): Use re_node_set_insert_last. + (parse_dup_op): Lower X{1,5} to (X(X(X(XX?)?)?)?)? + rather than X?X?X?X?X?. + * posix/regex_internal.h (re_node_set_insert_last): New declaration. + * posix/regex_internal.c (re_node_set_insert_last): New function. + * posix/PCRE.tests: Add testcases. + +2004-11-25 Ulrich Drepper <drepper@redhat.com> + + * dlfcn/dlfcn.h: Remove nonnull attribute from dlopen. + + * posix/confstr.c (confstr): Return appropriate strings for + _CS_LFS_LINTFLAGS, _CS_LFS64_CFLAGS, and _CS_LFS64_LINTFLAGS. + +2004-11-05 Maciej W. Rozycki <macro@mips.com> + + * sysdeps/mips/dl-machine.h: Include <sgidefs.h>. Use _ABIO32, + _ABIN32 and _ABI64 for ABI selection throughout. + * sysdeps/mips/elf/start.S: Likewise. + * sysdeps/mips/mips64/__longjmp.c: Likewise. + * sysdeps/mips/mips64/bsd-_setjmp.S: Likewise. + * sysdeps/mips/mips64/bsd-setjmp.S: Likewise. + * sysdeps/mips/mips64/setjmp.S: Likewise. + * sysdeps/mips/mips64/setjmp_aux.c: Likewise. + * sysdeps/mips/sys/regdef.h: Likewise. + * sysdeps/mips/sys/ucontext.h: Likewise. + * sysdeps/unix/mips/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/kernel-features.h: Likewise. + * sysdeps/unix/sysv/linux/mips/pread.c: Likewise. + * sysdeps/unix/sysv/linux/mips/pread64.c: Likewise. + * sysdeps/unix/sysv/linux/mips/ptrace.c: Likewise. + * sysdeps/unix/sysv/linux/mips/pwrite.c: Likewise. + * sysdeps/unix/sysv/linux/mips/pwrite64.c: Likewise. + * sysdeps/unix/sysv/linux/mips/sigaction.c: Likewise. + * sysdeps/unix/sysv/linux/mips/sys/procfs.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sys/ucontext.h: Likewise. + + * sysdeps/mips/atomicity.h: Use _ABIO32, _ABIN32 and _ABI64 for + ABI selection throughout. + * sysdeps/mips/bits/setjmp.h: Likewise. + * sysdeps/mips/fpu/bits/mathdef.h: Likewise. + * sysdeps/mips/machine-gmon.h: Likewise. + * sysdeps/mips/sys/asm.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/sigcontext.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/mips/kernel_stat.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sys/ptrace.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sys/tas.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sys/user.h: Likewise. + + * sysdeps/mips/sgidefs.h: Prevent <asm/sgidefs.h> from being + included by kernel headers and undo its settings if already + included. Define _ABIO32, _ABIN32 and _ABI64 if missing and use + them to define _MIPS_SIM_ABI32, _MIPS_SIM_NABI32 and + _MIPS_SIM_ABI64 for compatibility. + * sysdeps/unix/sysv/linux/mips/Makefile: Use _ABIO32, _ABIN32 and + _ABI64 for ABI selection in generated syscall-list.h + * sysdeps/unix/sysv/linux/mips/configure.in: Use _ABIO32, _ABIN32 + and _ABI64 for ABI selection in generated asm-unistd.h. + * sysdeps/unix/sysv/linux/mips/configure: Regenerate. + + * sysdeps/unix/sysv/linux/mips/pwrite.c (__libc_pwrite): Correct + an inverted _MIPS_SIM conditional. + +2004-11-23 Alexandre Oliva <aoliva@redhat.com> + + * sysdeps/generic/dl-tls.c (_dl_determine_tlsoffset): Use free + range even if it doesn't match exactly. + +2004-11-23 Jakub Jelinek <jakub@redhat.com> + + * nss/nss_files/files-XXX.c (internal_getent): If parse_line returned + -1, also do H_ERRNO_SET (NETDB_INTERNAL). + +2004-11-22 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/i386/fpu_control.h: Add volatile to the asms. + Patch by Alexander Stohr. + +2004-11-22 Jakub Jelinek <jakub@redhat.com> + + * nscd/nscd_getai (__nscd_getai): Avoid memory and file descriptor + leaks. + * sysdeps/posix/getaddrinfo.c (gaih_inet): Free air. + +2004-11-15 Maciej W. Rozycki <macro@mips.com> + + * sysdeps/unix/sysv/linux/mips/bits/siginfo.h (__SI_MAX_SIZE): + Define appropriately based on __WORDSIZE. + [struct siginfo] (__pad0): Add for explicit padding. + + * sysdeps/unix/sysv/linux/mips/bits/siginfo.h: Formatting fixes + throughout. + +2004-11-22 Ulrich Drepper <drepper@redhat.com> + + * dirent/dirent.h: Add nonnull attributes. + * dlfcn/dlfcn.h: Likewise. + +2004-11-20 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/ieee754/k_standard.c: Document code 50. + (__kernel_standard) <case 50>: Avoid raising div-by-zero + exception again. + +2004-11-19 H.J. Lu <hongjiu.lu@intel.com> + + [BZ #552] + * math/libm-test.inc (tgamma_test): Update tgamma (0) and + tgamma (-0). + * sysdeps/generic/w_tgamma.c (__tgamma): Properly handle |x| == 0. + * sysdeps/generic/w_tgammaf.c (__tgammaf): Likewise. + * sysdeps/generic/w_tgammal.c (__tgammal): Likewise. + * sysdeps/ieee754/dbl-64/e_gamma_r.c (__ieee754_gamma_r): Likewise. + * sysdeps/ieee754/flt-32/e_gammaf_r.c: Likewise. + * sysdeps/ieee754/ldbl-128/e_gammal_r.c: Likewise. + * sysdeps/ieee754/ldbl-96/e_gammal_r.c: Likewise. + * sysdeps/ieee754/k_standard.c (__kernel_standard): Handle + tgamma (0) and tgamma (-0). + +2004-11-20 Ulrich Drepper <drepper@redhat.com> + + * time/tzfile.c (__tzfile_read): Avoid open for checking whether + the file we already use changed. + + * misc/syslog.c: Remove !USE_IN_LIBIO code. + +2004-11-20 Jakub Jelinek <jakub@redhat.com> + + * signal/signal.h (__sysv_signal, sysv_signal, signal, bsd_signal, + ssignal): Remove __nonnull attribute. + +2004-11-20 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/sh/sys/procfs.h: New file. + +2004-11-20 Ulrich Drepper <drepper@redhat.com> + + * signal/signal.h: Add nonnull attributes. + + * signal/signal.h: Add deprecated attributes to sigstack, + sigpause, sigblock, sigsetmask, siggetmask. + +2004-11-20 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/bits/socket.h (SCM_RIGHTS): Avoid + comma at the end of enum if __USE_BSD is not defined. + +2004-11-19 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.c (_int_malloc): Check for corruption of chunk + which is about to be returned. + + * malloc/malloc.c (_int_free): Add a few more cheap tests for + corruption. + +2004-11-17 Randolph Chung <tausq@debian.org> + + * sysdeps/hppa/dl-machine.h (TRAMPOLINE_TEMPLATE): Add unwind + annotations. + +2004-11-18 Jakub Jelinek <jakub@redhat.com> + + [BZ #544] + * posix/regex.h (RE_NO_SUB): New define. + * posix/regex_internal.h (OP_DELETED_SUBEXP): New. + (re_dfa_t): Add subexp_map. + * posix/regcomp.c (struct subexp_optimize): New type. + (optimize_subexps): New routine. + (re_compile_internal): Call it. + (re_compile_pattern): Set preg->no_sub to 1 if RE_NO_SUB. + (free_dfa_content): Free subexp_map. + (calc_inveclosure, calc_eclosure): Skip OP_DELETED_SUBEXP nodes. + * posix/regexec.c (re_search_internal): If subexp_map + is not NULL, duplicate registers as needed. + * posix/Makefile: Add rules to build and run tst-regex2. + * posix/tst-regex2.c: New test. + * posix/rxspencer/tests: Fix last two tests (\0 -> \1). + Add some new tests for nested subexpressions. + +2004-11-18 Ulrich Drepper <drepper@redhat.com> + + * libio/libio.h (_IO_FLAGS2_FORTIFY): Renamed from + _IO_FLAGS2_CHECK_PERCENT_N. + * debug/fprintf_chk.c: Adjust all users. + * debug/printf_chk.c: Likewise. + * debug/vfprintf_chk.c: Likewise. + * debug/vprintf_chk.c: Likewise. + * debug/vsnprintf_chk.c: Likewise. + * debug/vsprintf_chk.c: Likewise. + * stdio-common/vfprintf.c: Likewise. Detect missing %N$ formats. + * debug/tst-chk1.c: Test detection of missing %N$ formats. + +2004-11-15 Jakub Jelinek <jakub@redhat.com> + + * posix/bug-regex24.c: Include string.h. + + * nis/nis_clone_obj.c (nis_clone_object): Rename out3 label to out2 + and out2 to out. Remove out label. Formatting. + +2004-11-15 Ulrich Drepper <drepper@redhat.com> + + * include/stdio.h: Do not mark __libc_message as noreturn. + * sysdeps/unix/sysv/linux/libc_fatal.c (__libc_fatal): Add loop to + fool gcc. Include <stdbool.h>. + * sysdeps/posix/libc_fatal.c (__libc_fatal): Add loop to fool gcc. + (__libc_message): Fix typo. + +2004-11-13 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.c (malloc_state): stat_lock_* elements need only + be defined if THREAD_STATS is defined. Remove pad0_ since it does + not align with cache line sizes in general anyway. + +2004-11-13 Jakub Jelinek <jakub@redhat.com> + + * elf/rtld.c (print_statistics): Avoid segfaults if not all namespaces + are used. Fix computation of num_relative_relocations on RELA + architectures other than IA-64 and Alpha. + +2004-11-13 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.c (_int_free): Use munmap_chunk for handling + mmaped memory. + +2004-11-12 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.c (_int_free): Remove test for NULL parameter. + (_int_realloc): Call _int_free only if memory parameter is not NULL. + + * sysdeps/unix/sysv/linux/libc_fatal.c: Add new function __libc_message + which performs the printing and simple format string handling. The + string is written to tty, stderr, syslog in this order, stopping after + the first successful output. + (__libc_fatal): Call __libc_message. + * include/stdio.h: Declare __libc_message. + * malloc/malloc.c (malloc_printerr): Use __libc_message. + * debug/chk_fail.c: Also print message with __libc_message. + * debug/test-strcpy_chk.c: Ensure that debug messages are not printed + to the terminal or stderr. + * debug/tst-chk1.c: Likewise. + + * posix/Makefile: Remove gpl2lgpl variable. + +2004-11-12 Martin Schwidefsky <schwidefsky@de.ibm.com> + + * elf/elf.h: Add 20 bit relocations R_390_*20. + +2004-11-12 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/i386/setuid.c: Include linux/posix_types.h. + * sysdeps/unix/sysv/linux/i386/setgid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setreuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setregid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setresuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setresgid.c: Likewise. + +2004-11-12 Andreas Schwab <schwab@suse.de> + + * nis/ypclnt.c (ypprot_err): Fix "minor optimizations". + +2004-11-12 Ulrich Drepper <drepper@redhat.com> + + * posix/Makefile (tests): Add bug-regex24. + * posix/bug-regex24.c: New file. + +2004-11-12 Paolo Bonzini <bonzini@gnu.org> + + * posix/regexec.c (check_dst_limits_calc_pos_1): Use the map to + cut recursive paths. Make exit condition more precise. + (match_ctx_add_entry): Initialize the map. + * posix/regex_internal.h (struct re_backref_cache_entry): Add a map of + reachable subexpression nodes from each backreference cache entry. + +2004-11-10 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/setreuid.c: Remove sys/syscall.h, + sys/types.h, linux/posix_types.h, sysdep.h and pthread-functions.h + includes. Include setxid.h. Use INLINE_SETXID_SYSCALL macro + instead of INLINE_SYSCALL, kill the HAVE_PTR__NPTL_SETXID guarded + snippets. + * sysdeps/unix/sysv/linux/setegid.c: Likewise. + * sysdeps/unix/sysv/linux/setuid.c: Likewise. + * sysdeps/unix/sysv/linux/seteuid.c: Likewise. + * sysdeps/unix/sysv/linux/setgid.c: Likewise. + * sysdeps/unix/sysv/linux/setresuid.c: Likewise. + * sysdeps/unix/sysv/linux/setresgid.c: Likewise. + * sysdeps/unix/sysv/linux/setregid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setegid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setreuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/seteuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setgid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setresuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setresgid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setregid.c: Likewise. + * sysdeps/unix/sysv/linux/alpha/setreuid.c: Likewise. + Formatting. Change signed int into int. + * sysdeps/unix/sysv/linux/alpha/setresuid.c: Likewise. + * sysdeps/unix/sysv/linux/alpha/setresgid.c: Likewise. + * sysdeps/unix/sysv/linux/alpha/setregid.c: Likewise. + * sysdeps/unix/sysv/linux/syscalls.list (setresuid, setresgid): + Remove. + * sysdeps/unix/setxid.h: New file. + + * Rules (binaries-static): Add xtests-static. + * Makeconfig (run-program-prefix): Filter also xtests-static. + +2004-11-09 Paul Eggert <eggert@cs.ucla.edu. + + [BZ #535] + * time/difftime.c: Fix a double-rounding bug on hosts with + 64-bit time_t and long double being IEEE double. Also, port + to more valid C99 hosts, even those that have padding bits. + Don't include <values.h> since it is marked as an obsolescent + interface. Include <limits.h>, <float.h>, and <stdint.h> instead. + (TYPE_BITS, TYPE_FLOATING, TYPE_SIGNED): New macros. + (subtract): New static function, that works correctly without + double-rounding, even on hosts with 64-bit time_t. Also cater + to hosts with padding bits. + (__difftime): Use it. Use DBL_MANT_DIG and LDBL_MANT_DIG to + determine whether floating types are wide enough: the old + test (which used sizeof) could in theory report the wrong results + on hosts with padding bits in floating-point values. + +2004-11-11 Simon Josefsson <jas@extundo.com> + + [BZ #542] + * sysdeps/generic/strtok_r.c [HAVE_CONFIG_H]: Include config.h. + [!_LIBC]: Include strtok_r.h (in gnulib), map __strtok_r to + strtok_r and __rawmemchr to strch. + (__strtok_r): Use C89 prototype. + [weak_alias]: Move calls to libc_hidden_def and weak_alias into + this #ifdef. + +2004-11-10 Paul Eggert <eggert@cs.ucla.edu> + + [BZ #541] + * time/mktime.c (SHR): New macro, which is a portable + substitute for >> that should work even on Crays. + (TIME_T_MIDPOINT, ydhms_diff, __mktime_internal): Use it. + Problem reported by Mark D. Baushke in + <http://lists.gnu.org/archive/html/bug-gnulib/2004-11/msg00071.html>. + +2004-11-09 Paolo Bonzini <bonzini@gnu.org> + + * posix/regexec.c (match_ctx_free_subtops): Remove, merge into... + (match_ctx_clean): ... this function. + (match_ctx_free): Call match_ctx_clean. + + * posix/regexec.c (transit_state): Remove the check for + out-of-bounds buffers. + (check_matching): Check here for out-of-bounds buffers. + (re_search_internal): Store into match_kind a set of bits + indicating which incantation of fastmap scanning must be + used. Use a switch statement instead of multiple ifs. + Exit the final "for (;;)" with goto free_return unless + the match succeeded, thus simplifying some conditionals. + + * posix/regex_internal.c (re_string_reconstruct, + re_string_context_at): Add several branch predictions for + case-sensitive matching and no transition table being used. + +2004-11-10 Ulrich Drepper <drepper@redhat.com> + + * posix/tst-waitid.c: Don't use error to print error message, they + won't end up in the .out file. + +2004-11-09 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd-client.h (libc_locked_map_ptr): Add new first + parameter, used as class for definition. + * nscd/nscd_getpw_r.c: Adjust for libc_locked_map_ptr change. + (pw_map_free): Ensure no crash after memory is freed. + * nscd/nscd_getgr_r.c: Likewise. Make map externally visible. + * nscd/nscd_gethst_r.c: Likewise. + * nscd/nscd_getai.c: Use map from nscd_gethost.c. + * nscd/nscd_initgroups.c: Use map from nscd_getgr.c. + + * nscd/nscd_getai.c: Add some checks to detect corrupt databases. + * nscd/nscd_getgr_r.c: Likewise + * nscd/nscd_gethst_r.c: Likewise. + * nscd/nscd_getpw_r.c: Likewise + +2004-11-09 Jakub Jelinek <jakub@redhat.com> + + * posix/regcomp.c (calc_eclosure_iter): Don't access + dfa->edests[node].elems[0] if dfa->edests[node].nelem == 0. + * posix/rxspencer/tests: Add 5 new tests. + +2004-11-09 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/ifaddrs.c: Determine sin6_scope_id field + value correctly. Patch by Mitsuru Kanda <mk@karaba.org>. + +2004-11-04 Jakub Jelinek <jakub@redhat.com> + + * libio/fileops.c (_IO_new_file_seekoff): If mode is 0 and + fp->_offset == _IO_pos_BAD, just call _IO_SYSSEEK (fp, 0, dir) + and if successful set fp->_offset. + * libio/Makefile (tests): Add bug-ungetc3. + * libio/bug-ungetc3.c: New test. + +2004-11-03 Marcus Brinkmann <marcus@gnu.org> + + * sysdeps/gnu/_G_config.h (_G_HAVE_MREMAP): Define symbol. + * sysdeps/mach/hurd/_G_config.h: New file. + * libio/fileops.c (mmap_remap_check) [__linux__]: Replaced with + [_G_HAVE_MREMAP]. + +2004-11-08 Ulrich Drepper <drepper@redhat.com> + + * posix/regcomp.c (utf8_sb_map): Define. + (free_dfa_content): Don't free dfa->sb_char if it's a pointer to + utf8_sb_map. + (init_dfa): Use utf8_sb_map instead of initializing memory when the + encoding is UTF-8. + +2004-11-03 Paolo Bonzini <bonzini@gnu.org> + + * posix/regcomp.c (init_dfa): Get the codeset name outside glibc as + well. Check if it is spelled UTF8 as well as UTF-8, and check + case-insensitively. Set dfa->map_notascii manually when outside + glibc. + * posix/regex_internal.c (build_wcs_upper_buffer) [!_LIBC]: Enable + optimizations based on map_notascii. + * posix/regex_internal.h [HAVE_LANGINFO_H || HAVE_LANGINFO_CODESET + || _LIBC]: Include langinfo.h. + + * posix/regex_internal.h (struct re_backref_cache_entry): Add "more" + field. + * posix/regexec.c (check_dst_limits): Hoist computation of the source + and destination bkref_idx out of the loop. Pass it to + check_dst_limits_calc_pos. + (check_dst_limits_calc_pos_1): New function, containing the recursive + loop of check_dst_limits_calc_pos; uses the "more" field of + struct re_backref_cache to control the loop. + (check_dst_limits_calc_pos): Store into "boundaries" the position + relative to lim's start and end positions. Do not accept eclosures, + accept bkref_idx instead. Call check_dst_limits_calc_pos_1 to do the + work. + (sift_states_bkref): Use the "more" field of struct re_backref_cache + to control the loop. A big "if" was turned into a continue and the + function was reindented. + (get_subexp): Use the "more" field of struct re_backref_cache + to control the loop. + (match_ctx_add_entry): Initialize the bkref_ents' "more" field. + (search_cur_bkref_entry): Return -1 if out of bounds. + + * posix/regexec.c (empty_set): Remove. + (sift_states_backward): Remove cur_src variable. Move inner loop + to build_sifted_states. + (build_sifted_states): Extract from sift_states_backward. Do not + use empty_set. + (update_cur_sifted_state): Do not use empty_set. Special case + dest_nodes->nelem == 0. + + * posix/regex_internal.h (struct re_backref_cache_entry): Remove flag + field. + (struct re_sift_context_t): Remove cur_bkref, cls_subexp_idx, + check_subexp fields. Move limits last. + * posix/regexec.c (match_ctx_clear_flag): Remove. + (sift_ctx_init): Remove check_subexp parameter. Do not set removed + fields. Callers adjusted. + (expand_bkref_cache): Remove last_str parameter. Callers adjusted. + (re_search_internal): Remove fast_translate variable. + (update_cur_sifted_state): Pass candidates as the final parameter + to sift_states_bkref. + (sift_states_bkref): Change last unused parameter to be "candidates", + do not fetch candidates into a local variable. + Remove dead test for "node == sctx->bkref", and the cur_bkref_idx + variable. + Remove loops that set/reset the flag field of backref cache entries. + (check_arrival_add_next_nodes): Use a signed int to hold the return + value of re_node_set_insert. + (group_nodes_into_DFAstates): Likewise. + (match_ctx_add_entry): Do not set the flag field of the new entry. + +2004-11-05 Roland McGrath <roland@redhat.com> + + * sysdeps/generic/ldsodefs.h (struct rtld_global_ro): Define + _dl_sysinfo_dso under [NEED_DL_SYSINFO_DSO] as well. + * elf/rtld.c (dl_main): Set up GLRO(dl_sysinfo_dso) under + [NEED_DL_SYSINFO_DSO] as well. + * sysdeps/generic/dl-sysdep.c (_dl_show_auxv): Always include + AT_SYSINFO and AT_SYSINFO_EHDR in name table. + (_dl_sysdep_start) [NEED_DL_SYSINFO_DSO]: Match AT_SYSINFO_EHDR. + * elf/dl-support.c (_dl_sysinfo_dso): Define also under + [NEED_DL_SYSINFO_DSO]. + (_dl_aux_init) [NEED_DL_SYSINFO || NEED_DL_SYSINFO_DSO]: + Match AT_SYSINFO_EHDR and set GL(dl_sysinfo_dso). + +2004-11-05 Roland McGrath <roland@redhat.com> + + * manual/errno.texi (Error Codes): Revert last change for now. + * sysdeps/gnu/errlist.c: Regenerated. + +2004-11-04 Roland McGrath <roland@frob.com> + + * Makeconfig (link-libc, rpath-dirs): Remove AIX cruft definitions. + (LDFLAGS-rpath-ORIGIN, LDFLAGS-soname-fname): Likewise. + (LDFLAGS-rdynamic, LDFLAGS-Bsymbolic): Likewise. + ($(common-objpfx)gnu/lib-names.stmp): Likewise. + +2004-11-01 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/sys/procfs.h [__WORDSIZE == 32] + (elf_fpxregset_t): New type. + (struct elf_prpsinfo): If __WORDSIZE == 32, change pr_[ug]id type + to unsigned short int. + * sysdeps/unix/sysv/linux/x86_64/sys/user.h + (struct user_fpregs_struct): Fix comment. + * sysdeps/i386/fpu/bits/mathdef.h (float_t, double_t): If + __FLOAT_EVAL_METHOD__ is defined and 0, typedef to float resp. double. + * sysdeps/x86_64/fpu/bits/mathdef.h: Include bits/wordsize.h. + (float_t, double_t): If -m32 and not -mfpmath=sse, typedef to + long double. + * sysdeps/x86_64/fpu/bits/fenv.h: Include bits/wordsize.h. + (fenv_t): Remove __mxcsr field for -m32. + +2004-11-04 Jakub Jelinek <jakub@redhat.com> + + * libio/ftello.c (ftello): Don't subtract save_end - save_base + if pos is _IO_pos_BAD. + * libio/ftello64.c (ftello64): Likewise. + * libio/iofgetpos.c (_IO_new_fgetpos): Likewise. + * libio/iofgetpos64.c (_IO_new_fgetpos64): Likewise. + * libio/oldiofgetpos.c (_IO_old_fgetpos): Likewise. + * libio/oldiofgetpos64.c (_IO_old_fgetpos64): Likewise. + * libio/ioftell.c (_IO_ftell): Likewise. + Cast to long int instead of off_t when checking for overflow. + +2004-11-04 Richard Henderson <rth@redhat.com> + + * sysdeps/unix/sysv/linux/alpha/register-dump.h (regnames): Align. + (linefeed): Remove. + (register_dump): Rewrite to generate into a flat buffer instead + of into iovecs. + +2004-11-02 Jakub Jelinek <jakub@redhat.com> + + * debug/tst-chk1.c (ret): New volatile variable. + (CHK_FAIL_END): Remove redundant ret setting. + (do_test): Remote ret variable. + +2004-01-03 Paolo Bonzini <bonzini@gnu.org> + + * posix/regex_internal.h (__regfree) [!_LIBC]: Define to regfree. + +2004-11-03 Marcus Brinkmann <marcus@gnu.org> + + * sysdeps/generic/utime.c: Include <stddef.h>. + + * sysdeps/generic/sysconf.c: Include <grp.h> and <pwd.h>. + + * sysdeps/generic/tempname.c (__path_search): Add missing argument + TRY_TMPDIR. + +2004-10-31 Mariusz Mazur <mmazur@kernel.pl> + + * sysdeps/unix/sysv/linux/alpha/setregid.c: New file. + * sysdeps/unix/sysv/linux/alpha/setresgid.c: New file. + * sysdeps/unix/sysv/linux/alpha/setresuid.c: New file. + * sysdeps/unix/sysv/linux/alpha/setreuid.c: New file. + +2004-10-27 Derek R. Price <derek@ximbiot.com> + + [BZ #487] This change is imported from gnulib. + * time/mktime.c (not_equal_tm) [DEBUG]: Remove redundant check. + +2004-10-24 Paul Eggert <eggert@cs.ucla.edu> + + [BZ #473] + * time/tst-mktime.c (main): Don't assume that mktime fails + when given time stamps before 1970. It returns negative + time_t values instead, for compatibility with BSD. + + * time/tst-mktime2.c: New file. + * time/Makefile (tests): Add it. + + [BZ #473] Import from gnulib. Revamp to avoid several problems near + time_t extrema, and on hosts with 64-bit time_t and 32-bit int. + This fixes Debian bug 177940. + * time/mktime.c (TIME_T_MIDPOINT): New macro. + (ydhms_diff): Renamed from ydhms_tm_diff, with a new signature, + which avoids overflow problems on hosts with 64-bit time_t and + 32-bit int. All callers changed. Now an inline function. + Verify at compile-time that long int is wide enough to avoid + these overflow problems. + (guess_time_tm): New function. + (__mktime_internal): Use it. Avoid overflow when computing yday on + hosts with 64-bit long and 32-bit int. Remove tests for 69; + no longer needed. Use if rather than #ifdef for LEAP_SECONDS_POSSIBLE + so that the code is checked by more compilers. + Do not rely on floating point to probe: stick to integer arithmetic, + to avoid potential porting problems. + Repair potential overflow correctly in the Southern Hemisphere. + (localtime_offset): Add a FIXME for the case where time_t is unsigned. + +2004-10-30 Andreas Schwab <schwab@suse.de> + + * sysdeps/m68k/dl-machine.h (elf_machine_rela) + (elf_machine_rela_relative, elf_machine_lazy_rel): Mark auto + instead of static. + +2004-10-30 Andreas Schwab <schwab@suse.de> + + * sysdeps/unix/sysv/linux/waitid.c: Include <stddef.h> for NULL. + +2004-10-30 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.c (_int_free): Use unique comments for the error + cases. + +2004-10-28 Roland McGrath <roland@frob.com> + + * sysdeps/mach/hurd/i386/tls.h (_hurd_tls_fork): Use i386_thread_state + instead of machine_thread_state. + +2004-10-28 Roland McGrath <roland@redhat.com> + + * sysdeps/unix/sysv/linux/syscalls.list: Remove setaltroot. + +2004-10-28 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-open.c (dl_open_worker): Remove reference to glibcbug script. + +2004-10-27 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-load.c (_dl_map_object): Use cache_rpath to check for + existing rpath in main executable, not explicit test. + +2004-10-27 Jakub Jelinek <jakub@redhat.com> + + * include/resolv.h (_res_opcodes): New extern. + Add libresolv_hidden_proto. + * resolv/res_debug.c (_res_opcodes): Remove. + (__p_class_syms, __p_type_syms): Add libresolv_hidden_proto + and libresolv_hidden_data_def. Remove attribute_hidden. + * resolv/res_mkquery (_res_opcodes): Remove. + * resolv/res_data.c (_res_opcodes): Remove attribute_hidden. + Add libresolv_hidden_data_def. + +2004-10-27 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-open.c (_dl_open): Don't allow explicitly opening a DSO + into an empty namespace. + + * elf/dl-fini.c (_dl_fini): Fix search for map in maps array. + Reverse order of namespaces. + * elf/Makefile: Add rules to build and run tst-dlmopen3. + * elf/tst-dlmopen3.c: New file. + * elf/tst-dlmopen1mod.c: Add check whether constructor runs. + +2004-10-27 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/generic/glob.c (globfree): Clear gl_pathv after freeing it. + * posix/Makefile: Add rules to build and run bug-glob2 test. + * posix/bug-glob2.c: New test. + +2004-10-27 Roland McGrath <roland@frob.com> + + * sysdeps/mach/hurd/i386/tls.h (HURD_TLS_DESC_DECL): New macro. + (_hurd_tls_init): Use it. + (_hurd_tls_fork): New function. + * sysdeps/mach/hurd/fork.c (__fork) [USE_TLS]: Call it. + +2004-10-26 Roland McGrath <roland@frob.com> + + * sysdeps/mach/hurd/i386/tls.h (_hurd_tls_init): Initialize TCB->tcb. + +2004-10-26 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/gnu/netinet/udp.h (struct udphdr): Use u_int16_t + type instead of uint16_t. Formatting. + +2004-10-25 Roland McGrath <roland@redhat.com> + + * login/openpty.c (openpty): Add libutil_hidden_def. + + * nss/nss_files/files-parse.c (nss_files_parse_hidden_def): Define to + either libc_hidden_def or libnss_files_hidden_def, not hidden_def. + This file is also compiled into libnss_hesiod by #include. + +2004-10-25 Roland McGrath <roland@frob.com> + + * sysdeps/unix/bsd/hp: Directory and all files removed. + These are now in the ports repository. + * sysdeps/unix/bsd/osf: Likewise. + * sysdeps/unix/bsd/sequent: Likewise. + * sysdeps/unix/bsd/sony: Likewise. + * sysdeps/unix/bsd/ultrix4: Likewise. + * sysdeps/unix/sysv/aix: Likewise. + * sysdeps/unix/sysv/hpux: Likewise. + * sysdeps/unix/sysv/irix4: Likewise. + * sysdeps/unix/sysv/isc2.2: Likewise. + * sysdeps/unix/sysv/minix: Likewise. + * sysdeps/unix/sysv/sco3.2.4: Likewise. + * sysdeps/unix/sysv/sco3.2: Likewise. + * sysdeps/unix/sysv/sysv4: Likewise. + + * configure.in (ASM_LINE_SEP): Move this setting to ... + * sysdeps/hppa/configure.in: ... here, new file. + * sysdeps/hppa/configure: New generated file. + * configure: Regenerated. + +2004-10-25 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/sh/dl-machine.h: Include sysdep.h. + (ELF_MACHINE_RUNTIME_TRAMPOLINE): Add CFI directives. + (elf_machine_runtime_setup): Add always_inline attribute. + (_dl_start_user): Pass the correct environ. + (elf_machine_rela): Replace static inline by auto inline, add + always_inline attribute. + (elf_machine_rela_relative): Likewise. + (elf_machine_lazy_rel): Likewise. + +2004-10-24 Ulrich Drepper <drepper@redhat.com> + + * nis/nis_call.c: Pretty printing. Minor cleanups. + * nis/nis_addmember.c (nis_addmember): Add assert to check buffer + bounds. + + * resolv/nss_dns/dns-host.c: Avoid using PLTs. + * include/libc-symbols.h: Define hidden attribute macros for + libnss_nisplus and libutil. + * include/utmp.h: Add libutil_hidden_proto for login_tty. + * login/login_tty.c: Add libutil_hidden_def. + * nis/nisplus-parser.h: Add libnss_nisplus_hidden_proto for parsers. + * nis/nss_nisplus/nisplus-parser.c: Add libnss_nisplus_hidden_def. + * include/pty.h: New file. + * include/rpcsvc/yp.h: New file. + * include/rpcsvc/ypclnt.h: New file. + * include/rpcsvc/ypupd.h: New file. + * include/libc-symbols.h: Define hidden attribute macros for libnsl. + * include/rpcsvc/nislib.h: Use libnsl_hidden_proto for various + functions. + * nis/nis_add.c: Add libnsl_hidden_def. Minor optimizations. + * nis/nis_call.c: Likewise. + * nis/nis_clone_obj.c: Likewise. + * nis/nis_defaults.c: Likewise. + * nis/nis_domain_of_r.c: Likewise. + * nis/nis_error.c: Likewise. + * nis/nis_file.c: Likewise. + * nis/nis_free.c: Likewise. + * nis/nis_local_names.c: Likewise. + * nis/nis_lookup.c: Likewise. + * nis/nis_modify.c: Likewise. + * nis/nis_print.c: Likewise. + * nis/nis_remove.c: Likewise. + * nis/nis_subr.c: Likewise. + * nis/nis_table.c: Likewise. + * nis/nis_util.c: Likewise. + * nis/yp_xdr.c: Likewise. + * nis/ypclnt.c: Likewise. + * nis/ypupdate_xdr.c: Likewise. + + * resolv/res_send.c (send_dg): Cope with failures. + + * include/libc-symbols.h: Define hidden attribute macros for + libnss_files. + * include/netdb.h: Use libnss_files_hidden_proto for the parsers + defined in libnss_files, not libc_hidden_proto. + * include/netinet/ether.h: Likewise. + * include/rpc/netdb.h: Likewise. + * nss/nss_files/files-parse.c: Use hidden_def in parser definitions + instead of libc_hidden_def. + * nss/nss_files/files-netgrp.c: Add libnss_files_hidden_def to + _nss_netgroup_parseline definition. + +2004-10-23 Roland McGrath <roland@frob.com> + + * sysdeps/mach/hurd/i386/tls.h (_hurd_tls_init): Don't return early + after an RPC succeeds. + + * sysdeps/vax, sysdeps/unix/bsd/vax: Directories and all files removed. + These are now in the ports repository. + * sysdeps/tahoe, sysdeps/unix/bsd/tahoe: Likewise. + * sysdeps/cris, sysdeps/unix/sysv/linux/cris: Likewise. + * sysdeps/am29k, sysdeps/i860, sysdeps/i960, sysdeps/m88k: Likewise. + * sysdeps/standalone, sysdeps/z8000: Likewise. + +2004-10-23 Ulrich Drepper <drepper@redhat.com> + + * resolv/res_send.c (send_dg): Combine write and read to socket + into one loop. + +2004-10-22 Roland McGrath <roland@frob.com> + + * Makefile (%.bz2, %.gz): Move these pattern rules ... + * Makerules: ... to here. + +2001-10-31 Alexandre Oliva <aoliva@redhat.com> + + * elf/elf.h: Add R_MN10300_* relocation numbers. + +2004-10-22 Paul Eggert <eggert@cs.ucla.edu> + + [BZ #471] Fix imported from gnulib. + * time/mktime.c (leapyear, ydms_tm_diff): Year is of type + long int, not int, to avoid problems when tm_year == INT_MAX + and tm_mon > 12. + (__mktime_intenral): Compute year using long int arithmetic, + not int arithmetic, to avoid problems on hosts where time_t + and long are 64 bits but int is 32. + + [BZ #468] Import a fix from gnulib. + * time/mktime.c [! DEBUG]: Do not include <string.h>. + It's needed only if DEBUG is nonzero. + + [BZ #470] Import fix from gnulib. + * time/mktime.c [!_LIBC] (__mktime_internal): Define to + mktime_internal, to avoid clashes with any __mktime_internal + function defined in the standard library. + + [BZ #469] Imported from gnulib. + * time/mktime.c (__isleap): Remove; all uses replaced by: + (leapyear): New function, which avoids overflow by not adding + 1900 to year before testing whether it is a leap year. + + [BZ #472] Imported from gnulib. + * time/mktime.c (Local Variables): Remove -DHAVE_TIME_R_POSIX; + no longer used. + +2004-10-22 Ulrich Drepper <drepper@redhat.com> + + * resolv/res_send.c: Remove compatibility code which is unused in + glibc and probably bitrotten. + + * debug/execinfo.h: Remove __THROW from backtrace prototype. + +2004-10-22 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/i386/Makefile (CFLAGS-backtrace.c): Add -fexceptions. + * sysdeps/i386/backtrace.c: Include <bits/libc-lock.h>, <dlfcn.h>, + <stdlib.h> and <unwind.h>. Remove <bp-checks.h> include. + (struct trace_arg): New type. + (unwind_backtrace, unwind_getip, unwind_getcfa, unwind_getgr): New + fn pointers resp. macros. + (init, backtrace_helper): New functions. + (__backtrace): Rewritten to use _Unwind_Backtrace first and fall + back to frame pointer walking. + +2004-10-22 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/Versions: Things are still in flux, it + seems. Undo last additions. + +2004-10-21 Ulrich Drepper <drepper@redhat.com> + + * posix/execvp.c (execvp): Also ignore ENODEV and ETIMEDOUT errno + values. + +2004-10-20 Roland McGrath <roland@redhat.com> + + * Makeconfig ($(common-objpfx)shlib-versions.v.i): Check also + $(config-sysdirs) for shlib-versions files. + + * Makeconfig ($(common-objpfx)soversions.i): Replace shell loop with + use of ... + * scripts/soversions.awk: ... this new file. Collect lib info and + match any DEFAULT line before emitting anything, so DEFAULT can come + later in the concatenation of shlib-versions files. + + * manual/errno.texi (Error Codes): Add ENOKEY, EKEYEXPIRED, + EKEYREVOKED, EKEYREJECTED. + * sysdeps/unix/sysv/linux/Versions (libc: GLIBC_2.3.4): New errlist. + * sysdeps/gnu/errlist.c: Regenerated + + * sysdeps/gnu/errlist-compat.awk: Don't bail if Versions gives a count + higher than ERR_MAX reports. Instead, emit a #define ERR_MAX. + * sysdeps/gnu/Makefile ($(objpfx)errlist-compat.h): New target. + (generated): Add errlist-compat.h. + * sysdeps/gnu/errlist.awk: Make output #include <errlist-compat.h> to + define ERR_MAX and use that for table size. + +2004-10-20 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/syscalls.list: Add entries for setaltroot, + key_add, key_request, and keyctl syscalls. + * sysdeps/unix/sysv/linux/Versions: Export them. + +2004-10-19 Roland McGrath <roland@frob.com> + + * sysdeps/mach/readonly-area.c: New file. + +2004-10-19 Ulrich Drepper <drepper@redhat.com> + + * elf/Versions [ld, GLIBC_PRIVATE]: Add _dl_debug_state. + * elf/dl-debug.c (_dl_debug_state): Add rtld_hidden_def. + * sysdeps/generic/ldsodefs.h (_dl_debug_state): Don't mark as + hidden but use rtld_hidden_proto. + +2004-10-19 Alfred M. Szmidt <ams@gnu.org> + + * sysdeps/generic/readonly-area.c (__readonly_str): Renamed to ... + (__readonly_area): ... this. + +2004-10-18 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/generic/strcpy_chk.c (__strcpy_chk): Speed up by checking + destlen only every 4 bytes. + +2004-10-19 Ulrich Drepper <drepper@redhat.com> + + * nss/getent.c (hosts_keys): Let inet_pton decide whether the + string is an address or not. + +2004-10-19 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-addr.c (_dl_addr): Don't look at STT_TLS symbols. + Use DL_SYMBOL_ADDRESS to set dli_saddr. + + * debug/Makefile (catchsegv): Prefix $LIB with a backslash. + +2004-10-19 Ulrich Drepper <drepper@redhat.com> + + * debug/Makefile ($(objpfx)catchsegv): To support multilib + platforms, use $LIB in path to slibdir. + +2004-10-19 Jakub Jelinek <jakub@redhat.com> + + * debug/catchsegv.sh: Update copyright year. + Use mktemp to create segv_output file. + +2004-10-18 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-libc.c (__libc_dlsym_private, __libc_register_dl_open_hook): + New functions. + (__libc_dlopen_mode): Call __libc_register_dl_open_hook and + __libc_register_dlfcn_hook. + * dlfcn/Makefile (routines, elide-routines.os): Set. + Add rules to build and test tststatic2. + * dlfcn/tststatic2.c: New test. + * dlfcn/modstatic2.c: New test module. + * dlfcn/dladdr.c: Call _dlfcn_hook from libdl.so if not NULL. + Define __ prefixed routine in libc.a and in libdl.a just call it. + * dlfcn/dladdr1.c: Likewise. + * dlfcn/dlclose.c: Likewise. + * dlfcn/dlerror.c: Likewise. + * dlfcn/dlinfo.c: Likewise. + * dlfcn/dlmopen.c: Likewise. + * dlfcn/dlopen.c: Likewise. + * dlfcn/dlopenold.c: Likewise. + * dlfcn/dlsym.c: Likewise. + * dlfcn/dlvsym.c: Likewise. + * dlfcn/sdladdr.c: New file. + * dlfcn/sdladdr1.c: New file. + * dlfcn/sdlclose.c: New file. + * dlfcn/sdlerror.c: New file. + * dlfcn/sdlinfo.c: New file. + * dlfcn/sdlopen.c: New file. + * dlfcn/sdlsym.c: New file. + * dlfcn/sdlvsym.c: New file. + * dlfcn/Versions (libdl): Export _dlfcn_hook@GLIBC_PRIVATE. + * include/dlfcn.h (DL_CALLER_DECL, DL_CALLER RETURN_ADDRESS): Define. + (struct dlfcn_hook): New type. + (_dlfcn_hook): New extern decl. + (__dlopen, __dlclose, __dlsym, __dlerror, __dladdr, __dladdr1, + __dlinfo, __dlmopen, __libc_dlsym_private, + __libc_register_dl_open_hook, __libc_register_dlfcn_hook): New + prototypes. + (__dlvsym): Use DL_CALLER_DECL. + * include/libc-symbols.h: Define libdl_hidden_proto and friends. + + * malloc/arena.c (_dl_open_hook): Extern decl. + (ptmalloc_init): Don't call _dl_addr when dlopened from statically + linked programs but don't use brk for them either. + +2004-10-18 Roland McGrath <roland@redhat.com> + + * dlfcn/bug-dlsym1.c (main): Remove bogus setenv call. + +2004-10-18 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-open.c (dl_open_worker): Avoid dereferencing map in + statically linked code if there might none be found. + +2004-10-06 Maciej W. Rozycki <macro@mips.com> + + * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h + (__SYSCALL_CLOBBERS): Add "memory". + * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h + (__SYSCALL_CLOBBERS): Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h + (__SYSCALL_CLOBBERS): Likewise. + +2004-10-17 Ulrich Drepper <drepper@redhat.com> + + * include/libc-symbols.h: Define libresolv_hidden_proto and friends. + * include/resolv.h: Add libresolv_hidden_proto for symbols defined, + used, and exported in libresolv. + * resolv/base64.c: Add libresolv_hidden_def. + * resolv/gethnamaddr.c: Likewise. + * resolv/ns_name.c: Likewise. + * resolv/ns_netint.c: Likewise. + * resolv/res_comp.c: Likewise. + * resolv/res_data.c: Likewise. + * resolv/res_debug.c: Likewise. + * resolv/res_mkquery.c: Likewise. + * resolv/res_query.c: Likewise. + * resolv/res_send.c: Likewise. + +2004-10-15 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-minimal.c (__chk_fail): New. Add rtld_hidden_def. + * sysdeps/unix/sysv/linux/readonly-area.c: New file. + * sysdeps/i386/i686/memmove.S (__memmove_chk): Add checking + routine. + * sysdeps/i386/i686/memcpy.S (__memcpy_chk): Likewise. + * sysdeps/i386/i686/mempcpy.S (__mempcpy_chk): Likewise. + * sysdeps/i386/i686/memset.S (__memset_chk): Likewise. + * sysdeps/i386/i686/memmove-chk.S: New file. + * sysdeps/i386/i686/memcpy-chk.S: Likewise. + * sysdeps/i386/i686/mempcpy-chk.S: Likewise. + * sysdeps/i386/i686/memset-chk.S: Likewise. + * sysdeps/generic/strcat-chk.c (__strcat_chk): Don't __chk_fail + if exactly fitting into buffer. + * sysdeps/generic/strncat-chk.c (__strncat_chk): Likewise. + * sysdeps/generic/readonly-area.c: New file. + * sysdeps/generic/strncpy-chk.c (__strncpy_chk): Only test + destlen once. + * sysdeps/x86_64/memset.S (__memset_chk): Add checking routine. + * sysdeps/x86_64/memcpy.S (__memcpy_chk): Likewise. + * sysdeps/x86_64/mempcpy.S (__memcpy_chk): Define to __mempcpy_chk. + * sysdeps/x86_64/memcpy-chk.S: New file. + * sysdeps/x86_64/mempcpy-chk.S: Likewise. + * sysdeps/x86_64/memset-chk.S: Likewise. + * sysdeps/x86_64/strcpy-chk.S: Likewise. + * sysdeps/x86_64/stpcpy-chk.S: Likewise. + * argp/argp-xinl.c (__OPTIMIZE__): Define to 1 instead of nothing. + * argp/argp-fs-xinl.c (__OPTIMIZE__): Likewise. + * debug/tst-chk1.c: New test. + * debug/tst-chk2.c: Likewise. + * debug/tst-chk3.c: Likewise. + * debug/test-strcpy_chk.c: Likewise. + * debug/test-stpcpy_chk.c: Likewise. + * debug/vsprintf_chk.c (__vsprintf_chk): If flags > 0, request + _IO_FLAGS2_CHECK_PERCENT_N. Add libc_hidden_def. + * debug/Makefile (routines): Add printf_chk, fprintf_chk, vprintf_chk, + vfprintf_chk, gets_chk and readonly-area. + (CFLAGS-*_chk.c): Set. + (tests): Add tst-chk1, tst-chk2, tst-chk3, test-strcpy_chk and + test-stpcpy_chk. + * debug/vprintf_chk.c: New file. + * debug/printf_chk.c: Likewise. + * debug/vfprintf_chk.c: Likewise. + * debug/fprintf_chk.c: Likewise. + * debug/gets_chk.c: Likewise. + * debug/chk_fail.c (__chk_fail): Add libc_hidden_def. + * debug/snprintf_chk.c (__snprintf_chk): Fix order of arguments + passed to __vsnprintf_chk. + * debug/Versions (libc): Export __printf_chk, __fprintf_chk, + __vprintf_chk, __vfprintf_chk and __gets_chk @GLIBC_2.3.4. + * debug/vsnprintf_chk.c (__vsnprintf_chk): Don't call + __vsnprintf, instead create a temporary file with + _IO_strn_jumps jumptable. If flags > 0, request + _IO_FLAGS2_CHECK_PERCENT_N. Add libc_hidden_def. + * libio/Makefile (headers): Add bits/stdio2.h. + * libio/stdio.h: Include <bits/stdio2.h> if __USE_FORTIFY_LEVEL. + (sprintf, snprintf, vsprintf, vsnprintf): Remove defines. + * libio/strfile.h (_IO_strnfile): New type. + (_IO_strn_jumps): New extern. + * libio/vsnprintf.c (_IO_strnfile): Remove. + (_IO_strn_jumps): Remove static. + * libio/bits/stdio2.h: New file. + * libio/vswprintf.c (_IO_strnfile): Rename type to... + (_IO_wstrnfile): ...this. Adjust all uses. + * libio/libio.h (_IO_FLAGS2_CHECK_PERCENT_N): Define. + * stdio-common/vfprintf.c (STR_LEN): Define. + (vfprintf): Add readonly_format variable. + Handle _IO_FLAGS2_CHECK_PERCENT_N. + (buffered_vfprintf): Copy _flags2. + * include/stdio.h (__sprintf_chk, __snprintf_chk, __vsprintf_chk, + __vsnprintf_chk, __printf_chk, __fprintf_chk, __vprintf_chk, + __vfprintf_chk): New prototypes. + (__vsprintf_chk, __vsnprintf_chk): Add libc_hidden_proto. + * include/string.h (__memcpy_chk, __memmove_chk, __mempcpy_chk, + __memset_chk, __strcpy_chk, __stpcpy_chk, __strncpy_chk, __strcat_chk, + __strncat_chk): New prototypes. + * include/bits/string3.h: New file. + * include/sys/cdefs.h (__chk_fail): Add libc_hidden_proto + and rtld_hidden_proto. + * string/Makefile (headers): Add bits/string3.h. + * string/bits/string3.h (bcopy, bzero): New defines. + (memset, memcpy, memmove, strcpy, strncpy, strcat, strncat): Change + macros so that inlines are used only if unknown destination size + or side-effects in destination argument. + (mempcpy, stpcpy): Likewise. Protect with #ifdef __USE_GNU. + +2004-09-16 Ulrich Drepper <drepper@redhat.com> + + * debug/Makefile (routines): Add *_chk. + * debug/Versions (libc): Export __chk_fail, __memcpy_chk, + __memmove_chk, __mempcpy_chk, __memset_chk, __stpcpy_chk, + __strcat_chk, __strcpy_chk, __strncat_chk, __strncpy_chk, + __sprintf_chk, __vsprintf_chk, __snprintf_chk, __vsnprintf_chk + @GLIBC_2.3.4. + * debug/chk_fail.c: New file. + * debug/snprintf_chk.c: Likewise. + * debug/sprintf_chk.c: Likewise. + * debug/vsnprintf_chk.c: Likewise. + * debug/vsprintf_chk.c: Likewise. + * include/features.h (_FORTIFY_SOURCE): Document, handle. + (__USE_FORTIFY_LEVEL): Define. + (__GNUC_PREREQ): Move to earlier location. + * include/sys/cdefs.h (__chk_fail): New prototype. + * libio/bits/stdio.h (sprintf, vsprintf, snprintf, vsnprintf): + Define if __USE_FORTIFY_LEVEL. + * misc/sys/cdefs.h (__bos, __bos0): Define. + * string/string.h: Include <bits/string3.h> if __USE_FORTIFY_LEVEL. + * bits/string/string3.h: New header. + * sysdeps/generic/memcpy_chk.c: New file. + * sysdeps/generic/memmove_chk.c: Likewise. + * sysdeps/generic/mempcpy_chk.c: Likewise. + * sysdeps/generic/memset_chk.c: Likewise. + * sysdeps/generic/stpcpy_chk.c: Likewise. + * sysdeps/generic/strcat_chk.c: Likewise. + * sysdeps/generic/strcpy_chk.c: Likewise. + * sysdeps/generic/strncat_chk.c: Likewise. + * sysdeps/generic/strncpy_chk.c: Likewise. + +2004-10-17 Roland McGrath <roland@frob.com> + + * manual/memory.texi (Page Lock Functions): Typo fix. + Reported by Carlos Maziero <maziero@ppgia.pucpr.br> + +2004-10-16 Alfred M. Szmidt <ams@kemisten.nu> + + * sysdeps/mach/hurd/Makefile (link-libc-static): Use + `$(static-gnulib') instead of `$(gnulib)'. + +2004-10-17 Ulrich Drepper <drepper@redhat.com> + + * sunrpc/rpc_clntout.c: Avoid including rcsid into binary. + * sunrpc/rpc_cout.c: Likewise. + * sunrpc/rpc_hout.c: Likewise. + * sunrpc/rpc_main.c: Likewise. + * sunrpc/rpc_parse.c: Likewise. + * sunrpc/rpc_sample.c: Likewise. + * sunrpc/rpc_scan.c: Likewise. + * sunrpc/rpc_svcout.c: Likewise. + * sunrpc/rpc_tblout.c: Likewise. + * sunrpc/rpc_util.c: Likewise. + +2004-10-15 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/i386/sysdep.h (PUSHARGS_6, DOARGS_6, + POPARGS_6, _PUSHARGS_6, _DOARGS_6, _POPARGS_6): Define. + * sysdeps/unix/sysv/linux/i386/syscall.S (syscall): Handle 6 argument + syscalls. + +2004-10-15 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd.h (_PATH_NSCD_PASSWD_DB): Move to /var/db. + (_PATH_NSCD_GROUP_DB): Likewise. + (_PATH_NSCD_HOSTS_DB): Likewise. + (_PATH_NSCD_XYZ_DB_TMP): New #define, point to /var/run. + * nscd/connections.c (nscd_init): Non-persistent database files + are created with the _PATH_NSCD_XYZ_DB_TMP path. + * nscd/nscd.init: Create /var/db/nscd if necessary. + +2004-10-15 Richard Henderson <rth@redhat.com> + + * sysdeps/unix/sysv/linux/alpha/register-dump.h: New file. + * sysdeps/unix/sysv/linux/alpha/sigcontextinfo.h (SIGCONTEXT): Add + _code argument, pass sigcontext by pointer. + (SIGCONTEXT_EXTRA_ARGS): Likewise. + (GET_PC, GET_FRAME, GET_STACK): Expect ctx as pointer. + +2004-10-14 Richard Henderson <rth@redhat.com> + + * sysdeps/alpha/dl-machine.h (elf_machine_rela, + elf_machine_rela_relative, elf_machine_lazy_rel): Mark auto + instead of static. + + * sysdeps/unix/sysv/linux/adjtime.c (ADJTIME): Use prototype + style definition. + * sysdeps/unix/sysv/linux/alpha/adjtime.c (ADJTIME): If + __ASSUME_TIMEVAL64, define __adjtime directly rather than + via strong_alias. + +2004-10-14 Ulrich Drepper <drepper@redhat.com> + + * nscd/Makefile: When using compilers without -fpie support, also + link with -lselinux if necessary. + Patch by Arkadiusz Miskiewicz <arekm@pld-linux.org>. + + * nscd/connections.c (nscd_init): Remove file if not persistent + and not shared. Patch by Jerome Borsboom <j.borsboom@erasmusmc.nl>. + +2004-10-14 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/i386/setresuid.c: Handle + defined __NR_setresuid32 && !defined __NR_setresuid. + * sysdeps/unix/sysv/linux/i386/setresgid.c: Handle + defined __NR_setresgid32 && !defined __NR_setresgid. + + * sysdeps/sparc/fpu/bits/mathinline.h (__signbitf, __signbit, + __signbitl, sqrtf, sqrt, sqrtl, fdim, fdimf): Use __NTH macro. + + * sysdeps/generic/errno-loc.c: Don't undef #errno + if RTLD_PRIVATE_ERRNO. + * include/errno.h (__errno_location): If RTLD_PRIVATE_ERRNO, + add attribute_hidden. + + * dlfcn/dlinfo.c (dlinfo_doit): Replace iteration over GL(dl_loaded) + chain with iteration over all namespaces' _ns_loaded chains. + * sysdeps/powerpc/powerpc32/dl-machine.c (__elf_preferred_address): + Likewise. + * sysdeps/mips/dl-machine.h (elf_machine_runtime_link_map): Likewise. + + * elf/rtld.c (_dl_start): Fix one last dl_loaded. + * elf/dl-load.c (_dl_map_object_from_fd): Avoid definition of + label when it is not needed. + * elf/dl-close.c (_dl_close): Typo: & -> &&. + +2004-10-12 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/generic/segfault.c: Include alloca.h and stdint.h. + Don't include frame.h. + (CURRENT_STACK_FRAME, INNER_THAN, ADVANCE_STACK_FRAME): Remove. + (catch_segfault): Use backtrace function. + + * sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h: Fix comment. + * sysdeps/unix/sysv/linux/ia64/register-dump.h: New file. + * sysdeps/unix/sysv/linux/ia64/sigcontextinfo.h (GET_PC): Return sc_ip + field. + +2004-10-13 Ulrich Drepper <drepper@redhat.com> + + Add support for namespaces in the dynamic linker. + * dlfcn/Makefile (libdl-routines): Add dlmopen. + * dlfcn/Versions [libdl, GLIBC_2.3.4]: Add dlmopen. + * dlfcn/dlfcn.h: Define Lmid_t, LM_ID_BASE, and LM_ID_NEWLM. + Declare dlmopen. Document RTLD_DI_LMID. + * dlfcn/dlinfo.c: Handle RTLD_DI_LMID. + * dlfcn/dlmopen.c: New file. + * dlfcn/dlopen.c: Pass new parameter to _dl_open. + * dlfcn/dlopenold.c: Likewise. + * elf/dl-addr.c: Adjust for removal of GL(dl_loaded). + * elf/dl-caller.c: Likewise. + * elf/dl-close.c: Likewise. + * elf/dl-conflict.c: Likewise. + * elf/dl-debug.c: Likewise. + * elf/dl-lookup.c: Likewise. + * elf/dl-sym.c: Likewise. + * elf/dl-version.c: Likewise. + * elf/do-lookup.h: Likewise. + * elf/rtld.c: Likewise. + * sysdeps/unix/sysv/linux/i386/dl-librecon.h: Likewise. + * elf/dl-depsc: Likewise. Add new parameter to _dl_map_object. + * elf/dl-fini.c: Call destructors in all namespaces. + * elf/dl-iteratephdr.c: Compute total nloaded. Adjust for removal of + GL(dl_loaded). + * elf/dl-libc.c: Pass new parameter to _dl_open. Adjust for removal + of GL(dl_loaded). + * elf/dl-load.c (_dl_map_object_from_fd): Don't load ld.so a second + time. Reuse the one from the main namespace in all others. + Pass new parameter to _dl_new_object. + Adjust for removal of GL(dl_loaded). + * elf/dl-object.c: Take new parameter. Use it to initialize l_ns. + Adjust for removal of GL(dl_loaded). + * elf/dl-open.c (_dl_open): Take new parameter. + Adjust for removal of GL(dl_loaded). + * elf/dl-support.c: Replace global _dl_loaded etc variables with + _dl_ns variable. + * include/dlfcn.h: Adjust prototype of _dl_open. + Define __LM_ID_CALLER. + * include/link.h: Add l_real, l_ns, and l_direct_opencount elements. + * sysdeps/generic/dl-tls.c: Bump TLS_STATIC_SURPLUS. Since libc is + using TLS we need memory appropriate to the number of namespaces. + * sysdeps/generic/ldsodefs.h (struct rtld_global): Replace _dl_loaded, + _dl_nloaded, _dl_global_scope, _dl_main_searchlist, and + _dl_global_scope_alloc with _dl_ns element. Define DL_NNS. + Adjust prototypes of _dl_map_object and member in rtld_global_ro. + * malloc/malloc.c: Include <dlfcn.h>. + * malloc/arena.c (ptmalloc_init): If libc is not in primary namespace, + never use brk. + * elf/Makefile: Add rules to build and run tst-dlmopen1 and + tst-dlmopen2. + * elf/tst-dlmopen1.c: New file. + * elf/tst-dlmopen1mod.c: New file. + * elf/tst-dlmopen2.c: New file. + + * elf/dl-close.c: Improve reference counting by tracking direct loads. + * elf/dl-lookup.c (add_dependency): Likewise. + * elf/dl-open.c (dl_open_worker): Likewise. + * elf/rtld.c (dl_main): Likewise. + +2004-09-09 GOTO Masanori <gotom@debian.or.jp> + + [BZ #77] + * elf/dl-close.c: Count down l_opencount to check not only for + l_reldeps, but also l_initfini. + +2004-10-13 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-close.c (_dl_close): Update bug reporting instructions. + +2004-10-11 Ulrich Drepper <drepper@redhat.com> + + * timezone/asia: Update from tzdata2004e. + * timezone/southamerica: Likewise. + * timezone/private.h: Update from tzcode2004e. + * timezone/zdump.c: Likewise. + + * stdio-common/vfscanf.c: Add support for reading localized + digits. Patch mainly by Hamed Malek <hamed@bamdad.org>. + + * resolv/res_init.c (res_thread_freeres): Reset _res.options. + [BZ #434] + + * resolv/res_send.c (send_dg): Use nonblocking sockets. Add + appropriate poll/select calls and restart operation if necessary. + Also handle EINTR. + + * elf/tst-dlopenrpath.c (do_test): Enable code which was disabled + for debugging. + + * elf/dl-sym.c (do_sym): Avoid using global variable. + + * elf/dl-addr.c (_dl_addr): Really use match everywhere. + +2004-10-09 Andreas Schwab <schwab@suse.de> + + * sysdeps/m68k/memcopy.h (WORD_COPY_BWD): Remove use of cast as + lvalue. + + * sysdeps/m68k/fpu/bits/mathinline.h: Remove __THROW from inline + definitions. + +2004-10-07 Andreas Schwab <schwab@suse.de> + + * misc/sys/uio.h: Change __vector to __iovec to avoid clash with + altivec. + +2004-10-06 Alan Modra <amodra@bigpond.net.au> + + * gmon/Makefile (CFLAGS-mcount.c): Move before inclusion of "Rules". + * sysdeps/powerpc/powerpc64/Makefile (CFLAGS-mcount.c): Add + -msoft-float. + * sysdeps/powerpc/powerpc64/sysdep.h (SAVE_ARG, REST_ARG): New macros. + (CALL_MCOUNT): Replace with a gas macro implementation. + (EALIGN): Delete PROF version. + * sysdeps/powerpc/powerpc64/__longjmp-common.S: Invoke CALL_MCOUNT. + * sysdeps/powerpc/powerpc64/bsd-_setjmp.S: Likewise. + * sysdeps/powerpc/powerpc64/bsd-setjmp.S: Likewise. + * sysdeps/powerpc/powerpc64/setjmp-common.S: Likewise. + * sysdeps/powerpc/powerpc64/memcpy.S: Likewise. + * sysdeps/powerpc/powerpc64/memset.S: Likewise. + * sysdeps/powerpc/powerpc64/stpcpy.S: Likewise. + * sysdeps/powerpc/powerpc64/strchr.S: Likewise. + * sysdeps/powerpc/powerpc64/strcmp.S: Likewise. + * sysdeps/powerpc/powerpc64/strcpy.S: Likewise. + * sysdeps/powerpc/powerpc64/strlen.S: Likewise. + * sysdeps/powerpc/powerpc64/strncmp.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_floor.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_llrintf.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_llround.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_rint.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_round.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: Likewise. + * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Likewise. + + * sysdeps/powerpc/powerpc64/setjmp-common.S: Add extra entry point + past _mcount call. + * sysdeps/powerpc/powerpc64/bsd-_setjmp.S: Use it. + * sysdeps/powerpc/powerpc64/bsd-setjmp.S: Likewise. + +2004-10-06 Ulrich Drepper <drepper@redhat.com> + + * resolv/res_mkquery.c (res_nmkquery): Reject randombits value if + low 16 bits are zero. + +2004-10-06 Jakub Jelinek <jakub@redhat.com> + + * posix/tst-getaddrinfo2.c: Include stdlib.h and string.h. + (do_test): Use %p instead of 0x%08X to print a pointer. + + * malloc/malloc.c: Include stdio-common/_itoa.h. + +2004-10-05 Ulrich Drepper <drepper@redhat.com> + + * elf/rtld.c (dl_main): Use _dl_debug_printf instead of _dl_printf + for prelink message. + +2004-10-05 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Include dl-sysdep.h. + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise. + +2004-10-05 Ulrich Drepper <drepper@redhat.com> + + * grp/initgroups.c: Remove duplicate group IDs. + * grp/compat-initgroups.c: Likewise. + * nscd/initgrcache.c: Likewise. + +2004-10-05 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/sysconf.c (__sysconf): Return 200112L + for _SC_CPUTIME or _SC_THREAD_CPUTIME. + + * nscd/Makefile (nscd-cflags): Set to -DIS_IN_nscd=1, plus + -fpie if building PIE. + (CFLAGS-*.c): Use it. + + * nscd/Makefile (relro-LDFLAGS): Add -Wl,-z,now if have-z-relro. + ($(objpfx)nscd): Add $(relro-LDFLAGS). + + * sysdeps/unix/sysv/linux/i386/sysconf.c: Include hp-timing.h. + (__sysconf): Return -1 for _SC_CPUTIME or _SC_THREAD_CPUTIME if + !HP_TIMING_AVAIL. + +2004-10-05 Ulrich Drepper <drepper@redhat.com> + + * nscd/Makefile (distribute): Remove TODO. + * nscd/TODO: Removed. + +2004-10-04 Ulrich Drepper <drepper@redhat.com> + + * nscd/gai.c: Define __no_netlink_support if NEED_NETLINK is + defined and __ASSUME_NETLINK_SUPPORT is zero. + * sysdeps/unix/sysv/linux/Makefile (CFLAGS-gai.c): Add + -DNEED_NETLINK. + + * malloc/mtrace.pl: Avoid calling location unless it is needed for + output. Patch by Edward Bishop <binutils@gmail.com>. + + * nscd/Makefile (CFLAGS-gai.c): Add -fpie. + +2004-10-04 H.J. Lu <hongjiu.lu@intel.com> + + * sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c + (clock_getcpuclockid): Add missing retval. + + * sysdeps/unix/sysv/linux/ia64/sysconf.c (linux_sysconf): Fix a typo. + +2004-10-04 Roland McGrath <roland@redhat.com> + + * include/errno.h [RTLD_PRIVATE_ERRNO] (errno): Rename the real symbol + to rtld_errno. + * sysdeps/generic/errno.c [RTLD_PRIVATE_ERRNO] (rtld_errno): Define it, + and don't define any other errno names. + * sysdeps/unix/alpha/sysdep.h [RTLD_PRIVATE_ERRNO]: Use rtld_errno in + place of errno. + * sysdeps/unix/i386/sysdep.S: Likewise. + * sysdeps/unix/sysv/linux/i386/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/sysdep.S: Likewise. + * sysdeps/unix/sysv/linux/m68k/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/sh/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise. + * sysdeps/unix/x86_64/sysdep.S: Likewise. + + * sysdeps/generic/errno.c [! USE___THREAD] (errno): Use `nocommon' + attribute instead of `section'. + +2004-10-04 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/ia64/sysconf.c: New file. + * sysdeps/unix/sysv/linux/ia64/Dist: Add has_cpuclock.c. + * sysdeps/unix/sysv/linux/ia64/clock_getcpuclockid.c: Move actual + testing code to... + * sysdeps/unix/sysv/linux/ia64/has_cpuclock.c: ...here. New file. + * sysdeps/unix/sysv/linux/i386/sysconf.c: Add dynamic check for + _SC_CPUTIME and _SC_THREAD_CPUTIME. + + * nscd/connections.c (start_threads): Use sysconf in case + _POSIX_CLOCK_SELECTION or _POSIX_MONOTONIC_CLOCK is not greater zero. + + * nscd/Makefile (nscd-modules): Add gai. + * nscd/gai.c: New file. + * nscd/nscd.c: Remove getaddrinfo stub definition. + + * assert/assert.h: Give up on using __builtin_expect. + + * elf/rtld.c (dl_main): Only skip => output in ldd mode if both + strings are identical. + +2004-03-18 Jakub Jelinek <jakub@redhat.com> + + * malloc/arena.c (aligned_heap_area): New variable. + (new_heap): If aligned_heap_area != NULL, attempt to use that + first. If HEAP_MAX_SIZE << 1 area is already HEAP_MAX_SIZE bytes + aligned, remember the second half in aligned_heap_area. + (delete_heap): Clear aligned_heap_area if deleting the area right + before aligned_heap_area. + +2004-10-03 Juerg Billeter <j@bitron.ch> + + * nscd/nscd_initgroups.c (__nscd_getgrouplist): Return -1 if nscd + can't be used. [BZ #424] + +2004-10-03 Ulrich Drepper <drepper@redhat.com> + + Dynamically create new threads if necessary. + * nscd/connections.c (fd_ready): If no thread available for processing + the request, create a new one unless the limit is reached. + (start_threads): Check errors from pthread_create. + * nscd/nscd.h: Declare max_nthreads. + * nscd/nscd_conf.c: Parse max-nthreads entry. + * nscd/nscd.conf: Add max-threads entry. + * nscd/nscd_stat.c: Print current and maximum number of threads. + + Implement paranoia mode. + * nscd/connections.c (nscd_init): Mark database and socket descriptors + as close on exec. + (restart): New function. + (restart_p): New function. + (nscd_run): Add missing descrement of nready in case readylist is + empty. + (main_loop_poll): Call restart_p and restart. + (main_loop_epoll): Likewise. + (begin_drop_privileges): Save original UID and GID. + * nscd/nscd.c: Define new variables paranoia, restart_time, + restart_interval, oldcwd, old_gid, old_uid. + (main): Disable paranoia mode if we are not forking. + (check_pid): When re-execing, the PID file contains the same PID as + the current process. Do not fail in this case. + * nscd/nscd.conf: Add paranoia and restart-interval entries. + * nscd/nscd.h: Define RESTART_INTERVAL. Declare new variables. + * nscd/nscd_conf.c: Parse paranoia and restart-internal configurations. + * nscd/nscd_stat.c: Print paranoia and restart-internal values. + + * nscd/connections.c: Implement alternative loop for main thread + which uses epoll. + * sysdeps/unix/sysv/linux/Makefile [subdir=nscd] + (CFLAGS-connections.c): Add -DHAVE_EPOLL. + +2004-10-02 Ulrich Drepper <drepper@redhat.com> + + * nscd/Makefile (CFLAGS-initgrcache.c): Add to CFLAGS-* variables, + don't replace old content. + + * nscd/connections.c: Rewrite handling of incoming connections. All + are handled by one thread which then hands off the descriptors for the + real work to the worker threads. + * nscd/Makefile: Link nscd with librt. + + * nscd/selinux.c: Pretty printing. + + * nscd/dbg_log.c (dbg_log): Don't add unnecessary newline to + output. Let syslog do the formatting if debug_level == 0. + + * nscd/nscd_helper.c (get_mapping): No need to check timestamp if + nscd_certainly_running is nonzero. + +2004-10-02 Simon Josefsson <jas@extundo.com> + + [BZ #420] + * sysdeps/generic/memmem.c [!_LIBC]: Define __builtin_expect, to + make the file usable inside gnulib. + +2004-10-01 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.c (public_vALLOc): Add missing use of hooks. + (public_pVALLOc): Likewise. + + * nscd/nscd_initgroups.c (__nscd_getgrouplist): Always add the + group the caller provided unless there is a real problem. + + * posix/bug-glob1.c (prepare): Fix creation of symlink. + +2004-09-30 Ulrich Drepper <drepper@redhat.com> + + * posix/Makefile: Add rules to build and run bug-glob1. + * posix/bug-glob1.c: New file. + + * iconv/iconv_prog.c (main): Print progress information to stderr. + + * nscd/nscd.c (termination_handler): Reset timestamp so that + clients immediately stop using the database. + + * nscd/nscd-client.h (__nscd_get_map_ref): Drop volatile from last + parameter. + (__nscd_drop_map_ref): Change second parameter to be a reference to + a variable. Update variable when cycle count changed. + * nscd/nscd_helper.c (__nscd_get_map_ref): Remove volatile here, too. + * nscd/nscd_getai.c: Correctly use __nscd_drop_map_ref. Reinitialize + all variables and avoid memory leak in case of retries. + * nscd/nscd_getgr_r.c: Likewise. + * nscd/nscd_gethst_r.c: Likewise. + * nscd/nscd_getpw_r.c: Likewise. + * nscd/nscd_initgroups.c: Likewise. + + * nscd/nscd.h: Add declaration of addinitgroups and + readdinitgroups. + +2004-09-30 Andreas Jaeger <aj@suse.de> + + * nscd/Makefile (CFLAGS-nscd_initgroups.c): Set to -fpie. + (CFLAGS-initgrcache.c): Set to -fexceptions. + +2004-09-29 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/generic/glob.c (glob_in_dir): Don't blindly trust + readdir results; for symlinks or files of unknown type check using + stat whether the file exists. + + * posix/tst-gnuglob.c (find_file): Handle leading "./". Fix + recognition of files. + +2004-09-29 Jakub Jelinek <jakub@redhat.com> + + * time/tzfile.c (tzfile_mtime): New variable. + (__tzfile_read): Reread the file if mtime is different. + +2004-09-28 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/alpha/fpu/bits/mathinline.h (__fdimf, __fdim, fdimf, fdim): + Handle +inf/+inf. + * sysdeps/powerpc/fpu/bits/mathinline.h (fdim, fdimf): Likewise. + * sysdeps/sparc/fpu/bits/mathinline.h (fdim, fdimf): Likewise. + +2004-09-29 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd_gethst_r.c (nscd_gethst_r): Use correct constant for + testing result of __nscd_get_map_ref. + +2004-09-29 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/i386/fpu/s_fdim.S (__fdim): Handle +inf/+inf. + * sysdeps/i386/fpu/s_fdimf.S (__fdimf): Likewise. + * sysdeps/i386/fpu/s_fdiml.S (__fdiml): Likewise. + +004-09-29 Ulrich Drepper <drepper@redhat.com> + + * grp/initgroups.c: Move compat_call implementation... + * grp/compat-initgroups.c: ...to here. New file. + * grp/Makefile (distribute): Add compat-initgroups.c. + (CFLAGS-initgroups.c): Add -DUSE_NSCD=1. + * mscd/initgrcache.c: New file. + * nscd/nscd_initgroups.c: New file. + * nscd/Makefile (routines): Add nscd_initgroups. + (nscd-modules): Add initgrcache. + * nscd/cache.c (prune_cache): Add support for INITGROUPS entries. + * nscd/connections.c: Handle INITGROUPS requests. + * nscd/nscd-client.h: Define INITGROUPS, initgr_response_header. + Add initgrdata element to struct datahead. Fix typo in comment. + * nscd/nscd_proto.h: Declare __nscd_getgrouplist. Fix parameter + type in __nscd_getgrgrid_r. + * nscd/selinux.c (perms): Add INITGROUPS entry. + + * nscd/nscd_getai.c: No need to include <sys/mman.h>. + + * sunrpc/get_myaddr.c (get_myaddress): Account for interfaces without + assigned addresses. + * sunrpc/pmap_clnt.c (__get_myaddress): Likewise. + * sunrpc/pmap_rmt.c (getbroadcastnets): Likewise. + * sunrpc/clnt_udp.c (is_network_up): Likewise. + + * nscd/nscd.c: Define getaddrinfo hidden so that it is never found + outside. + + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h (si_segvflags): + Renamed from si_flags due to conflict with si_flags from <elf.h>. + +2004-09-28 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd_getai.c: Use NO_MAPPING instead of MAP_FAILED for test + of failing __nscd_get_map_ref. Fix a few typos. + + * sysdeps/unix/sysv/linux/sigwait.c (do_sigwait): Make sure + SIGSETXID is not blocked. + * sysdeps/unix/sysv/linux/sigwaitinfo.c (do_sigwaitinfo): Likewise. + * sysdeps/unix/sysv/linux/sigtimedwait.c (do_sigtimedwait): Likewise. + * sysdeps/unix/sysv/linux/sigprocmask.c (__sigprocmask): Likewise. + * sysdeps/generic/sigfillset.c (sigfillset): Don't set SIGSETXID. + + * sunrpc/get_myaddr.c (get_myaddress): Fix test for failing + getifaddrs call. + * sunrpc/pmap_clnt.c (__get_myaddress): Likewise. + * sunrpc/pmap_rmt.c (getbroadcastnets): Likewise. + * sunrpc/Makefile (xtests): Add tst-getmyaddr. + * sunrpc/tst-getmyaddr.c: New file. + + * malloc/arena.c (ptmalloc_init): Allow MALLOC_CHECK_==0 to + disable all checking. + + * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h (si_flags): Add + support to get this value. + +2004-09-28 Jakub Jelinek <jakub@redhat.com> + + * io/utime.h (utime): Allow second argument to be NULL. + +2004-09-28 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c (gaih_inet): If NAME is a numerical IP + address and AI_CANONNAME is set, return copy of NAME as ai_canonname. + +2004-09-27 Andreas Jaeger <aj@suse.de> + + * sysdeps/i386/dl-machine.h (elf_machine_rela_relative): Replace + static inline by auto inline, add always_inline attribute. + (elf_machine_rel): Likewise. + (elf_machine_rela): Likewise. + (elf_machine_lazy_rel): Likewise. + (elf_machine_lazy_rela): Likewise. + (elf_machine_rel_relative): Likewise. + +2004-09-27 Ulrich Drepper <drepper@redhat.com> + + * sunrpc/xdr_intXX_t.c: Add xdr_quad_t and xdr_u_quad_t aliases. + * sunrpc/rpc/xdr.h: Declare xdr_quad_t and xdr_u_quad_t. + * sunrpc/rpc_parse.c (get_type): Use "quad_t" for TOK_HYPER. + Otherwise isvectordef will loop infinitely if typedef hyper int64_t + is seen. + (unsigned_dec): Use "u_quad_t" for similar reasons. + * sunrpc/Versions: Export xdr_quad_t and xdr_u_quad_t. + +2004-09-27 Roland McGrath <roland@redhat.com> + + * sysdeps/generic/bits/waitstatus.h (__WIFSIGNALED): Simplify bit + twiddling in last change. + + * posix/tst-waitid.c (do_test): Add tests for waitpid with WCONTINUED. + + [BZ #409] + * posix/sys/wait.h [__WIFCONTINUED] (WIFCONTINUED): New macro. + * stdlib/stdlib.h [__WIFCONTINUED] (WIFCONTINUED): New macro. + * sysdeps/generic/bits/waitstatus.h (__W_CONTINUED): New macro. + [WCONTINUED] (__WIFCONTINUED): New macro. + (__WIFSIGNALED): Rewritten to exclude __W_CONTINUED value, and have no + branches. + + * sysdeps/unix/sysv/linux/waitid.c (do_waitid): Add fifth argument to + all three syscall uses, not just one! + +2004-09-26 Richard Henderson <rth@redhat.com> + + * sysdeps/alpha/alphaev6/memcpy.S: Mark .prologue. + * sysdeps/unix/alpha/sysdep.h (LEAF, ENTRY): Align entry points + to 16 byte boundaries. + +2004-09-26 Ulrich Drepper <drepper@redhat.com> + + * elf/readlib.c (process_file): Before complaining about too-short + file, check that it potentially be an ELF file. Also complain about + empty files. [BZ #151]. + + * scripts/test-installation.pl: Fix ld.so recognition for new + LD_TRACE_LOADED_OBJECTS output format. + Patch by <jsberg04+computing.glibc@ftml.net> [BZ #407]. + + * elf/dl-support.c (_dl_non_dynamic_init): Fix cleaning of + environment. [BZ #384] + + * sunrpc/clnt_udp.c (is_network_up): Use getifaddrs instead of ioctl. + * sunrpc/get_myaddr.c (get_myaddress): Likewise. + * sunrpc/pmap_clnt.c (__get_myaddress): Likewise. + * sunrpc/pmap_rmt.c (getbroadcastnets): Likewise. Change interface + to avoid buffer overrun and remove now useless parameters. + (clnt_broadcast): Adjust caller. [BZ #381]. + + * sysdeps/generic/s_fdim.c: Handle +inf/+inf + * sysdeps/generic/s_fdimf.c: Likewise. + * sysdeps/generic/s_fdiml.c: Likewise. + * sysdeps/i386/i686/fpu/s_fdim.S: Likewise. + * sysdeps/i386/i686/fpu/s_fdimf.S: Likewise. + * sysdeps/i386/i686/fpu/s_fdiml.S: Likewise. + * sysdeps/powerpc/fpu/s_fdim.c: Likewise. + * sysdeps/powerpc/fpu/s_fdimf.c: Likewise. + * sysdeps/x86_64/fpu/s_fdiml.S: Likewise. + * math/libm-test.inc (fdim_test): Add test case. [BZ #376]. + + * sysdeps/generic/bits/types.h: Fix __SQUAD_TYPE and __UQUAD_TYPE + for compilers without __GLIBC_HAVE_LONG_LONG. [BZ #362] + + * sysdeps/posix/getaddrinfo.c (getaddrinfo): Remove incorrect + requirement on socktype and protocol. + (gaih_inet): If numeric port number is given, return records for all + possible socket types. + * posix/tst-getaddrinfo2.c: New file. + * posix/Makefile (tests): Add tst-getaddrinfo2. [BZ #358] + +2004-09-25 Ulrich Drepper <drepper@redhat.com> + + * locale/loadlocale.c (_nl_intern_locale_data): Recognize LC_CTYPE + data where _nl_value_type_LC_CTYPE does not contain the type + information. Add range checks. + Reported by John Lumby <johnlumby@hotmail.com> [BZ #356]. + + * libio/vasprintf.c (_IO_vasprintf): Fix condition to decide + whether to realloc or not. + Reported by Pavel Kankovsky <peak@argo.troja.mff.cuni.cz> [BZ #346]. + + * intl/dcigettext.c (DCIGETTEXT): Protect tfind/tsearch calls. + * intl/dcigettext.c (_nl_find_msg): Call _nl_load_domain also if + decided < 0. + * intl/finddomain.c (_nl_find_domain): Likewise. + * intl/loadmsgcat.c (_nl_load_domain): Set decided to 1 only once we + are done. First set to -1 to signal initialization is ongoing. + Protect against concurrent callers with recursive lock. + * intl/finddomain.c (_nl_find_domain): Protect calls to + _nl_make_l10nflist. [BZ #322] + + * sysdeps/posix/getaddrinfo.c (getaddrinfo): If determinination of + source address fails, initialized source_addr_len field so that + duplicate address recognition does not copy junk. + +2004-09-25 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/i386/setuid.c (__setuid): Remove second + result declaration. + +2004-09-22 Andreas Schwab <schwab@suse.de> + + * sysdeps/unix/sysv/linux/ia64/sysdep.h: Adjust whitespace. + +2004-09-24 Ulrich Drepper <drepper@redhat.com> + + * misc/daemon.c (daemon): Don't succeed if /dev/null cannot be + opened. + + * nis/ypclnt.c (do_ypcall): Add one missing unlock. Simplify the + code a bit. + + * misc/daemon.c (daemon): Define errno in case /dev/null is not + the correct device. + + * nis/ypclnt.c (yp_bind_file): Optimize a bit. Minimal cleanups. + +2004-09-23 Andreas Jaeger <aj@suse.de> + + * locale/weight.h (findidx): Remove static, it's not supported + anymore with GCC 4.0 in a block scope. + * locale/weightwc.h (findidx): Likewise. + * posix/regcomp.c (seek_collating_symbol_entry): Likewise. + (lookup_collation_sequence_value): Likewise. + (build_range_exp): Likewise. + (build_collating_symbol): Likewise. + * iconv/iconvconfig.c (write_output): Likewise. + * elf/do-rel.h (elf_dynamic_do_rel): Likewise. + + * sysdeps/x86_64/dl-machine.h (elf_machine_rela_relative): Remove + static, add always_inline attribute. + (elf_machine_rela): Likewise. + (elf_machine_lazy_rel): Likewise. + + * elf/dynamic-link.h (elf_get_dynamic_info): Make static dependend + on !RESOLVE so that it's not defined in local scope. + +2004-09-23 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/sh/sysdep.h (INTERNAL_SYSCALL_NCS): Define. + +2004-09-23 Thorsten Kukuk <kukuk@suse.de> + + * sysdeps/unix/sysv/linux/sys/mount.h: Sync MS_RMT_MASK flag + and BLK* ioctls with linux kernel headers. + +2004-09-23 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/generic/bits/dlfcn.h: Add RTLD_DEEPBIND. + * elf/dl-object.c (_dl_new_object): Add new parameter mode. If mode + has RTLD_DEEPBIND set add local searchlist before global scope. + * sysdeps/generic/ldsodefs.h (_dl_new_object): Adjust prototype. + * elf/rtld.c: Adjust callers of _dl_new_object. + * elf/dl-load.c: Likewise. + (_dl_map_object_from_fd): If RTLD_DEEPBIND is used, don't do anything + for DF_SYMBOLIC. + * elf/dl-open.c (dl_open_writer): Pass RTLD_DEEPBIND flag on to + _dl_map_object_deps. + * elf/tst-deep1.c: New file. + * elf/tst-deep1mod1.c: New file. + * elf/tst-deep1mod2.c: New file. + * elf/tst-deep1mod3.c: New file. + * elf/Makefile: Add rules to build and run new tests. + + * elf/dl-deps.c: Pretty printing. + +2004-09-23 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/alpha/sysdep.h (inline_syscall[0-6]): Change name + argument to numbers from syscall names. + (INLINE_SYSCALL1): Pass __NR_##name to inline_syscall##nr. + (INTERNAL_SYSCALL_NCS): Renamed from... + (INTERNAL_SYSCALL_1): ... this. Use INTERNAL_SYSCALL_NCS. + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.h + (INTERNAL_SYSCALL_NCS): Define. + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.h + (INTERNAL_SYSCALL_NCS): Likewise. + * sysdeps/unix/sysv/linux/sparc/sysdep.h (inline_syscall[0-6]): + Change name argument to numbers from syscall names. + (INLINE_SYSCALL, INTERNAL_SYSCALL): Adjust. + (INTERNAL_SYSCALL_NCS): Define. + +2004-09-22 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.c (malloc_printerr): Use syslog if writev failed. + + * string/string.h: Add __nonnull annotations. + * stdlib/stdlib.h: Likewise. + +2004-09-20 H.J. Lu <hongjiu.lu@intel.com> + + * sysdeps/unix/sysv/linux/ia64/sysdep.h (DO_INLINE_SYSCALL): + Renamed to ... + (DO_INLINE_SYSCALL_NCS): This. + (DO_INLINE_SYSCALL): New. + (INLINE_SYSCALL): Updated. + (INTERNAL_SYSCALL_NCS): Updated. + +2004-09-21 Ulrich Drepper <drepper@redhat.com> + + * elf/sprof.c (load_shobj): Add support for reading symbol table + from debuginfo file. + + * elf/ldd.bash.in: Fix syntax errors. + +2004-09-20 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/dl-execstack.c + (_dl_make_stack_executable): Remove some duplication. + + * nscd/nscd.c (options): Mark S option as hidden. + (parse_opt): When S option is used, print warning message. + * nscd/grpcache.c (adgrptbyX): Don't handle secure mode. + * nscd/hstcache.c (addhstbyX): Don't handle secure mode. + * nscd/aicache.c (addhstaiX): Don't handle secure mode. + * nscd/pwdcache.c (addpwbyX): Don't handle secure mode. + +2004-09-20 Roland McGrath <roland@frob.com> + + * elf/dl-load.c (__stack_prot): Only use PROT_GROWSUP/PROT_GROWSDOWN + in initializer #if defined. + +2004-09-18 Paul Eggert <eggert@cs.ucla.edu> + + [BZ #391] + * stdlib/getsubopt.c: Merge fixes from gnulib. + (__strchrnul) [!_LIBC]: Define and include "strchrnul.c". + (getsubopt): Use prototypes, not K&R style. + Fix bug: memcmp(A,B,N) was being invoked on a memory block B + whose size might be smaller than N. Use strncmp to avoid the bug. + +2004-09-20 Ulrich Drepper <drepper@redhat.com> + + * configure.in: If selinux has not explictly been requested, don't + comment on it missing. + + * elf/dl-load.c: Define __stack_prot. + * sysdeps/unix/sysv/linux/dl-execstack.c: Don't define + __stack_prot here, just declare it. + +2004-09-20 Jakub Jelinek <jakub@redhat.com> + + * configure.in (libc_cv_z_relro): Only set to yes if linker script + contains DATA_SEGMENT_RELRO_END. + +2004-09-20 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-load.c (_dl_map_object_from_fd): Add some error checking. + Reorder code slightly. + * elf/rtld.c (dl_main): No need to check whether l_info[DT_HASH] + is non-null, _dl_setup_hash will do that. + +2004-09-19 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/setegid.c [HAVE_PTR__NPTL_SETXID]: Call + callback to set IDs in all other threads as well. + * sysdeps/unix/sysv/linux/seteuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setegid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/seteuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setgid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setreuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setreuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setresuid.c: Likewise. + * sysdeps/unix/sysv/linux/i386/setresuid.c: Likewise. + * sysdeps/unix/sysv/linux/setuid.c: New file. + * sysdeps/unix/sysv/linux/setgid.c: New file. + * sysdeps/unix/sysv/linux/setreuid.c: New file. + * sysdeps/unix/sysv/linux/setregid.c: New file. + * sysdeps/unix/sysv/linux/setresuid.c: New file. + * sysdeps/unix/sysv/linux/setresgid.c: New file. + * sysdeps/unix/sysv/linux/i386/sysdep.h: Define INTERNAL_SYSCALL_NCS. + * sysdeps/unix/sysv/linux/ia64/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/setegid.c: Use x86 version. + * sysdeps/unix/sysv/linux/sparc/sparc32/seteuid.c: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/setresgid.c: New file. + * sysdeps/unix/sysv/linux/sparc/sparc32/setresuid.c: New file. + * sysdeps/unix/sysv/linux/sparc/sparc32/syscalls.list: Remove setresgid + and setresuid. + * nscd/aicache.c: Use pthread_seteuid_np instead of seteuid. + * nscd/grpcache.c: Likewise. + * nscd/hstcache.c: Likewise. + * nscd/pwdcache.c: Likewise. + + * resolv/res_mkquery.c (res_nmkquery): Fix typo. + +2004-09-18 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unisx/sysv/linux/dl-execstack.c: Get protection flag + from memory. + * elf/dl-load.c (_dl_map_object_from_fd): Add PROT_EXEC flag to + __stack_flags. + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Do not use + gethostbyname3_r if we are not looking for the canonical name. + + * resolv/res_mkquery.c (res_nmkquery): Randomize request ID every + time. + +2004-09-18 Roland McGrath <roland@redhat.com> + + * sysdeps/unix/sysv/linux/waitid.c (do_waitid): Pass fifth argument to + system call. + +2004-09-17 Ulrich Drepper <drepper@redhat.com> + + * include/link.h (struct link_map): Add l_used element. + * sysdeps/generic/ldsodefs.h: Define DL_DEBUG_UNUSED. + * elf/rtld.c (process_dl_debug): Recognize unused. + (dl_main): When unused debug flag is set check for unused direct + dependencies. + When printing dependencies and SONAME starts with /, omit the SONAME => + part. + * elf/dl-lookup.c (_dl_lookup_symbol_x): Mark object in which the + symbol has been found as used. + * elf/ldd.bash.in: Add -u option. + +2004-09-18 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/nscd_setup_thread.c (setup_thread): + Do nothing if __NR_set_tid_address is not defined. [BZ #390] + +2004-09-17 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c: Use gethostbyname3_r NSS function + in case it is available. + +2004-09-17 Jakub Jelinek <jakub@redhat.com> + + * nscd/nscd.c (parse_opt): Write arg string instead of (void *) + key to the socket. + +2004-09-17 Ulrich Drepper <drepper@redhat.com> + + * misc/sys/cdefs.h: Define __nonnull using nonnull function attribute + for gcc 3.3 and higher. + * io/fcntl.h: Add __nonnull where appropriate. + * io/ftw.h: Likewise. + * io/utime.h: Likewise. + * io/sys/poll.h: Likewise. + * io/sys/sendfile.h: Likewise. + * io/sys/stat.h: Likewise. + * io/sys/statfs.h: Likewise. + * io/sys/statvfs.h: Likewise. + * posix/unistd.h: Likewise. + * catgets/nl_types.h: Likewise. + * crypt/crypt.h: Likewise. + * debug/execinfo.h: Likewise. + +2004-09-16 Ulrich Drepper <drepper@redhat.com> + + * posix/glob.h: Remove cruft to make header usable outside glibc. + The maintenance headache is too big. + + * configure.in: Add test for required SELinux features. + * config.make.in: Add have-selinux entry. + * config.h.in: Add HAVE_SELINUX entry. + * nscd/Makefile (nscd-modules): Add selinux. + (CFLAGS-selinux.c): Add -fpie. + Define selinux-LIBS and use in link line. + * nscd/connections.c (handle_request): Check access SELinux permissions + before processing request. + * nscd/nscd.c (main): Initialize selinux_enabled and stop avc thread. + * nscd/nscd_stat.c: Transmit and print AVC statistics. + * nscd/selinux.c: New file. + * nscd/selinux.h: New file. + Patch mostly by Matthew Rickard <mjricka@epoch.ncsc.mil>. + +2004-09-16 Jakub Jelinek <jakub@redhat.com> + + * nscd/nscd_helper.c (__nscd_unmap, get_mapping): Use __munmap + instead of munmap. + + * nscd/Makefile (CFLAGS-aicache.c): Set to -fpie. + +2004-09-16 Thorsten Kukuk <kukuk@suse.de> + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Check + __nss_not_use_nscd_hosts variable if nscd should be used or not. + +2004-09-16 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd_proto.h: Define NSS_NSCD_RETRY. + Add __nscd_getai prototype. + * nss/getXXbyYY_r.c: Remode definition of NSS_NSCD_RETRY. + * nscd/nscd-client.h: Remove __nscd_getai prototype. + * nscd/nscd_getai.c: Include nscd_proto.h. + + * elf/ldd.bash.in: Add support for SELinux environments. + Patch by Stephen Smalley <sds@epoch.ncsc.mil>. + +2004-09-16 Roland McGrath <roland@redhat.com> + + * configure.in (--with-headers): Let argument contain a : separated + list of directories to use, not just one. + * configure: Regenerated. + +2004-09-15 Richard Henderson <rth@redhat.com> + + * sysdeps/alpha/fpu/libm-test-ulps: Update. + * scripts/data/c++-types-alpha-linux-gnu.data: New file. + +2004-09-15 Ulrich Drepper <drepper@redhat.com> + + * nscd/aicache.c: Prefer using gethostbyname3_r NSS callback to also + get ttl and canonical name. Use these two values. + * resolv/Versions: Export _nss_dns_gethostbyname3_r from libnss_dns. + * resolv/nss_dns/dns-host.c (getanswer_r): Take two new parameters. + If nonnull fill with TTL and pointer to canonical name respectively. + (_nss_dns_gethostbyaddr_r): Pass NULL in new parameters of getanswer_r. + (_nss_dns_gethostbyname2_r): Just wrapper around + _nss_dns_gethostbyname3_r. + (_nss_dns_gethostbyname3_r): Renamed from _nss_dns_gethostbyname2_r. + Take two new parameters which as passed to getanswer_r. + + * nscd/Makefile (rountines): Add nscd_getai. + (nscd-modules): Add aicache. + * nscd/aicache.c: New file. + * nscd/nscd_getai.c: New file. + * nscd/cache.c (prune_cache): Handle GETAI request type. + * nscd/connections.c: Add GETAI support in request handling. + * nscd/nscd-client.h (request_type): Add GETAI. + Define ai_response_header and struct nscd_ai_result types. + (struct datahead): Add aidata field. + Declare __nscd_getai. + * nscd/nscd.c: Add getaddrinfo definition to catch problems. + * nscd/nscd.h: Declare addhstai and readdhstai. + + * sysdeps/posix/getaddrinfo.c: Add support for using cached results. + * posix/Makefile (CFLAGS-getaddrinfo.c): Add -DUSE_NSCD. + + * nscd/nscd-client.h (struct datahead): Use uint8_t instead of bool. + +2004-09-14 Ulrich Drepper <drepper@redhat.com> + + * misc/sys/cdefs.h: Remove debugging text from __P and __PMT. + +2004-09-13 Ulrich Drepper <drepper@redhat.com> + + * misc/sys/cdefs.h: Restore old definition of __P. + * csu/munch.awk: Remove uses of __P and __PMT. + * gmon/gmon.c: Likewise. + * hesiod/hesiod.h: Likewise. + * include/stdio.h: Likewise. + * io/fts.c: Likewise. + * libio/genops.c: Likewise. + * libio/libioP.h: Likewise. + * libio/fileops.c: Likewise. + * libio/iolibio.h: Likewise. + * libio/libio.h: Likewise. + * libio/memstream.c: Likewise. + * libio/oldfileops.c: Likewise. + * libio/oldstdfiles.c: Likewise. + * libio/iopopen.c: Likewise. + * libio/vsnprintf.c: Likewise. + * libio/vswprintf.c: Likewise. + * libio/wgenops.c: Likewise. + * libio/oldiopopen.c: Likewise. + * locale/programs/xmalloc.c: Likewise. + * locale/programs/xstrdup.c: Likewise. + * malloc/mtrace.c: Likewise. + * misc/getttyent.c: Likewise. + * misc/getusershell.c: Likewise. + * nis/rpcsvc/ypupd.h: Likewise. + * posix/fnmatch.h: Likewise. + * posix/glob.h: Likewise. + * resolv/arpa/nameser.h: Likewise. + * resolv/gethnamaddr.c: Likewise. + * resolv/resolv.h: Likewise. + * resolv/inet_net_ntop.c: Likewise. + * resolv/inet_net_pton.c: Likewise. + * resolv/res_init.c: Likewise. + * resolv/nss_dns/dns-network.c: Likewise. + * stdio-common/vfprintf.c: Likewise. + * stdio-common/reg-printf.c: Likewise. + * sysdeps/generic/chflags.c: Likewise. + * sysdeps/generic/fchflags.c: Likewise. + * sysdeps/generic/glob.c: Likewise. + * sysdeps/generic/printf_fphex.c: Likewise. + * sysdeps/generic/memcmp.c: Likewise. + * sysdeps/generic/memcopy.h: Likewise. + * sysdeps/generic/morecore.c: Likewise. + * sysdeps/generic/sstk.c: Likewise. + * sysdeps/posix/sigvec.c: Likewise. + * sysdeps/posix/ttyname_r.c: Likewise. + * sysdeps/standalone/arm/bits/errno.h: Likewise. + * sysdeps/standalone/standalone.h: Likewise. + * sysdeps/standalone/i386/force_cpu386/brdinit.c: Likewise. + * sysdeps/standalone/i386/force_cpu386/_exit.c: Likewise. + * sysdeps/unix/arm/start.c: Likewise. + * sysdeps/unix/bsd/sigaction.c: Likewise. + * sysdeps/unix/bsd/sun/m68k/sigtramp.c: Likewise. + * sysdeps/unix/bsd/sun/sparc/sigtramp.c: Likewise. + * sysdeps/unix/bsd/sun/sunos4/wait4.c: Likewise. + * sysdeps/unix/bsd/ultrix4/mips/sigvec.c: Likewise. + * sysdeps/unix/bsd/ultrix4/sysconf.c: Likewise. + * sysdeps/unix/sparc/start.c: Likewise. + * sysdeps/unix/sysv/getdents.c: Likewise. + * sysdeps/unix/sysv/irix4/fpathconf.c: Likewise. + * sysdeps/unix/sysv/irix4/getgroups.c: Likewise. + * sysdeps/unix/sysv/irix4/getpriority.c: Likewise. + * sysdeps/unix/sysv/irix4/getrusage.c: Likewise. + * sysdeps/unix/sysv/irix4/pathconf.c: Likewise. + * sysdeps/unix/sysv/irix4/setgroups.c: Likewise. + * sysdeps/unix/sysv/irix4/sigtramp.c: Likewise. + * sysdeps/unix/sysv/irix4/start.c: Likewise. + * sysdeps/unix/sysv/irix4/sysconf.c: Likewise. + * sysdeps/unix/sysv/sco3.2.4/__setpgid.c: Likewise. + * sysdeps/unix/sysv/sco3.2.4/getgroups.c: Likewise. + * sysdeps/unix/sysv/sysv4/__getpgid.c: Likewise. + * sysdeps/unix/sysv/sysv4/__setpgid.c: Likewise. + * sysdeps/unix/sysv/sysv4/getpgid.c: Likewise. + * sysdeps/unix/sysv/sysv4/setpgid.c: Likewise. + * sysdeps/unix/sysv/sysv4/sethostname.c: Likewise. + * sysdeps/unix/sysv/sysv4/setsid.c: Likewise. + * sysdeps/unix/sysv/sysv4/sysconf.c: Likewise. + * sysdeps/unix/sysv/sysv4/waitpid.c: Likewise. + * sysdeps/unix/sysv/sysv4/solaris2/getdents.c: Likewise. + * time/tzset.c: Likewise. + * time/strftime_l.c: Likewise. + * time/strptime_l.c: Likewise. + * crypt/md5.h: Likewise. + +2004-09-13 Andreas Jaeger <aj@suse.de> + + * configure.in: Support GCC 4.x. + * configure: Regenerated. + +2004-09-13 Thorsten Kukuk <kukuk@suse.de> + + * nscd/nscd_stat.c: Don't access dbs[cnt].head for disabled services. + + * nscd/nscd.init: Fix path to socket. + +2004-09-12 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd_helper.c (get_mapping): Correctly check cmsg length. + Avoid file descriptor leak in case of size mismatch. + + * nscd/nscd-client.h: Fix database structure layout for biarch. + * nscd/mem.c (gc): Add casts to avoid warnings. + + * nss/getent.c: Don't preconstruct help message. Do it only when + needed. + + * locale/programs/locale.c: Simplify help message printing. + +2004-09-12 Roland McGrath <roland@frob.com> + + * sysdeps/mach/hurd/i386/init-first.c (init1) [! SHARED]: Add decls + missing in last change. + +2004-09-11 Thorsten Kukuk <kukuk@suse.de> + + * nis/nss_compat/compat-grp.c: Check that buflen is greater zero + before writing data into the buffer with negative offset. + * nis/nss_compat/compat-initgroups.c: Likewise. + * nis/nss_compat/compat-pwd.c: Likewise. + * nis/nss_compat/compat-spwd.c Likewise. + +2004-09-12 Ulrich Drepper <drepper@redhat.com> + + * misc/syslog.c (vsyslog): Fix copying of PID in case of + out-of-memory situation. [BZ #365]. + + * sysdeps/alpha/fpu/bits/mathinline.h: Use __NTH instead of + __THROW in inline function definitions. + + * posix/spawn.h [__USE_GNU]: Define POSIX_SPAWN_USEVFORK. + * posix/spawnattr_setflags.c: Check whether any unknown bit is set + in FLAGS parameter and fail if this is the case. + * sysdeps/posix/spawni.c: Use vfork if POSIX_SPAWN_USEVFORK flag is + set. + + * nscd/pwdcache.c (cache_addpw): Sync also negative results to disk. + * nscd/grpcache.c (cache_addgr): Likewise. + * nscd/hstcache.c (cache_addhst): Likewise. + +2004-09-11 Roland McGrath <roland@frob.com> + + * sysdeps/mach/hurd/i386/init-first.c (init1) [! SHARED]: + Set _dl_phdr and _dl_phnum. + (init1): When bootstrap task, bail early and never examine *D. + +2004-09-11 Alfred M. Szmidt <ams@kemisten.nu> + + * sysdeps/mach/hurd/i386/tls.h (__i386_set_gdt) [!HAVE_I386_SET_GDT]: + Cast THR, SEL and DESC to `void'. + +2004-09-11 Ulrich Drepper <drepper@redhat.com> + + * nscd/connections.c (nscd_run): Call setup_thread only for enabled + databases. + + * sysdeps/unix/bsd/bsd4.4/bits/socket.h: Use __NTH for __cmsg_nxthdr. + +2004-09-10 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd.c (pagesize_m1): New variable. + (main): Initialize it. + * nscd/nscd.h: Declare pagesize_m1. + * nscd/hstcache.c: Pass correctly aligned address to msync. + * nscd/grpcache.c: Likewise. + * nscd/pwdcache.c: Likewise. + +2004-09-10 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S: Decrement + __nwaiters. If pthread_cond_destroy has been called and this is + the last waiter, signal pthread_cond_destroy caller and avoid + using the pthread_cond_t structure after unlock. + * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Likewise. + +2004-09-10 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/kernel-features.h: Don't define + __ASSUME_CLONE_STOPPED. + +2004-09-10 Jakub Jelinek <jakub@redhat.com> + + * misc/sys/cdefs.h (__REDIRECT_NTH): Change order of __THROW and + __asm__ for C++. [BZ #377] + +2004-09-10 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd_stat.c: Improve output by also printing .shared and + .persistent. + + * nscd/connections.c: Allow cache sharing to be really disabled. + +2004-09-10 Jakub Jelinek <jakub@redhat.com> + + * malloc/malloc.c (_int_free): Only do arena boundary check for + contiguous arenas. + +2004-09-10 Kazuhiro Inaoka <inaoka.kazuhiro@renesas.com> + + * stdlib/longlong.h [__M32R__] (add_ssaaaa, sub_ddmmss): Fix broken + instruct operands. + * elf/elf.h: Add R_M32R_* relocs. + +2004-09-09 Ulrich Drepper <drepper@redhat.com> + + * misc/sys/cdefs.h: Despite what the gcc manual says, gcc 3.2 + seems not to support the nothrow attribute. Use it only for gcc + 3.3 and higher. + + * malloc/hooks.c (top_check): Print top chunk corruption as normal + error message. + + * malloc/malloc.c (malloc_printerr): Don't make informational + message look like error message. + +2004-09-09 Andreas Jaeger <aj@suse.de> + + * nscd/Makefile (CFLAGS-nscd_setup_thread.c): Set to -fpie. + +2004-09-08 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/bits/socket.h (__SCM_CONNECT): Removed. + + * malloc/malloc.c (_int_free): Add inexpensive double free and + memory corruption tests. + (malloc_printf_nc): Renamed to malloc_printerr. Second parameter + is no format string anymore. Don't use stdio. Adjust all callers. + * malloc/hooks.c: Adjust malloc_printf_nc callers. + +2004-09-08 Roland McGrath <roland@redhat.com> + + * malloc/mcheck.c: Don't use __P. + Use prototypes definitions for static functions. + +2004-09-08 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/ia64/fpu/bits/mathinline.h: Use __NTH instead of __THROW. + +2004-09-08 Ulrich Drepper <drepper@redhat.com> + Jakub Jelinek <jakub@redhat.com> + + * nscd/nscd-client.h: Add a few #includes. + + * nscd/Makefile (nscd-modules): Add nscd_setup_thread. + * nscd/connections.c (nscd_run): Call setup_thread for maintenance + threads. + * nscd/nscd-client.h (struct database_pers_head): Add + nscd_certainly_running field. + * nscd/nscd.h: Declare setup_thread. + * nscd/nscd_helper.c (__nscd_get_map_ref): Avoid the time test if + nscd_certainly_running is nonzero. + * sysdeps/generic/nscd_setup_thread.c: New file. + * sysdeps/unix/sysv/linux/nscd_setup_thread.c: New file. + +2004-09-08 Ulrich Drepper <drepper@redhat.com> + + * nscd/connections.c: Implement r/o sharing of nscd's cache with client + processes via shared memory. + * nscd/nscd-client.h: Likewise. + * nscd/nscd.h: Likewise. + * nscd/nscd_conf.c: Likewise. + * nscd/nscd_getgr_r.c: Likewise. + * nscd/nscd_getpw_r.c: Likewise. + * nscd/nscd_gethst_r.c: Likewise. + * nscd/nscd.conf: Add new config parameters. + * nscd/Makefile (aux): Add nscd_helper. + * nscd/nscd_helper.c: New file. + * nscd/mem.c (gc): Indicate beginning and end of the gc cycle. + + * nscd/hstcache.c: Simplify a lot. We cache only the request itself, + no derived information. + * connections.c (nscd_init): Fix bug in testing size of the persistent. + + * nis/Makefile (aux): Add nis_hash. + * nis/nis_hash.c: New file. Split out from nis_util.c. + * nis/nis_util.c: Move __nis_hash code in separate file. + + * csu/tst-atomic.c: Improve atomic_increment_val test which would + not have found a ppc bug. + + * sysdeps/s390/fpu/bits/mathinline.h: Remove unnecessary includes. + + * malloc/arena.c: Remove __MALLOC_P uses. + * malloc/malloc.c: Likewise. + + * malloc/mtrace.c: Remove __P uses. + * malloc/mcheck-init.c: Likewise. + +2004-09-07 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/powerpc/powerpc64/configure.in: New file. + * config.h.in (USE_PPC64_OVERLAPPING_OPD): Add. + * configure.in (HAVE_ASM_GLOBAL_DOT_NAME): Remove. + * sysdeps/powerpc/powerpc64/sysdep.h: Formatting. + (OPD_ENT, BODY_LABEL, ENTRY_1, ENTRY_2, END_2, DOT_PREFIX, + BODY_PREFIX): Define. + (ENTRY, DOT_LABEL, END, TRACEBACK, END_GEN_TB, EALIGN): Support + HAVE_ASM_GLOBAL_DOT_NAME or no dot symbols, + USE_PPC64_OVERLAPPING_OPD or never overlapping .opd entries. + * sysdeps/powerpc/powerpc64/dl-machine.h: Include sysdep.h. + (TRAMPOLINE_TEMPLATE, RTLD_START): Use the new sysdep.h macros. + +2004-09-07 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.h: Don't define __THROW if it is already defined. + + * sysdeps/powerpc/bits/atomic.h (atomic_increment): Define. + (atomic_decrement): Define. + + * sysdeps/powerpc/bits/atomic.h: Implement atomic_increment_val and + atomic_decrement_val. + * sysdeps/powerpc/powerpc32/bits/atomic.h: Likewise. + * sysdeps/powerpc/powerpc64/bits/atomic.h: Likewise. + + * csu/tst-atomic.c (do_test): Add tests of atomic_increment_val + and atomic_decrement_val. + + * include/atomic.h: Define atomic_increment_val, atomic_decrement_val, + and atomic_delay is not already defined. + * sysdeps/i386/i486/bits/atomic.h: Define atomic_delay. + * sysdeps/x86_64/bits/atomic.h: Likewise. + + * miscd/sys/cdefs.h (__NTH): New macro. + (__THROW): Define using nothrow attribute for C code and gcc >= 3.2. + (__REDIRECT_NTH): New macro. + * argp/argp.h: Use __NTH and __REDIRECT_NTH where necessary. + * ctype/ctype.h: Likewise. + * dirent/dirent.h: Likewise. + * io/fcntl.h: Likewise. + * io/sys/sendfile.h: Likewise. + * io/sys/stat.h: Likewise. + * io/sys/statfs.h: Likewise. + * io/sys/statvfs.h: Likewise. + * libio/bits/stdio.h: Likewise. + * misc/sys/mman.h: Likewise. + * posix/unistd.h: Likewise. + * resource/sys/resource.h: Likewise. + * rt/aio.h: Likewise. + * signal/signal.h: Likewise. + * stdlib/stdlib.h: Likewise. + * string/argz.h: Likewise. + * string/string.h: Likewise. + * sysdeps/generic/inttypes.h: Likewise. + * sysdeps/i386/fpu/bits/mathinline.h: Likewise. + * sysdeps/powerpc/fpu/bits/mathinline.h: Likewise. + * sysdeps/s390/fpu/bits/mathinline.h: Likewise. + * sysdeps/x86_64/fpu/bits/mathinline.h: Likewise. + * sysdeps/unix/sysv/linux/bits/socket.h: Likewise. + * sysdeps/unix/sysv/linux/bits/sys/sysmacros.h: Likewise. + * wcsmbs/wchar.h: Likewise. + + * sysdeps/generic/glob.c: Use __PMT isntead of __P where appropriate. + + * resolv/gethnamaddr.c (getanswer): Remove __P use in variable + definition. + + * io/sys/poll.h: Remove __THROW from poll prototype, it's a + cancellation point. + + * io/fts.c (fts_open): Remove uses of __P. + + * include/stdlib.h: No need to use __THROW in this header. + +2004-09-06 Roland McGrath <roland@frob.com> + + * sysdeps/mach/hurd/dl-sysdep.c (__writev): Does use assert on FD + validity, since __assert_fail gets to here anyway. Just fail. + +2004-09-06 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Fix problem with + AF_UNSPEC lookup with AI_CANONNAME of name which has only IPv6 + addresses. + +2004-09-05 Richard Henderson <rth@redhat.com> + + * sysdeps/alpha/fpu/fraiseexcpt.c: Remove file. + * sysdeps/unix/sysv/linux/kernel-features.h + (__ASSUME_IEEE_RAISE_EXCEPTION): New. + * sysdeps/unix/sysv/linux/alpha/fraiseexcpt.c: New file. + * sysdeps/unix/sysv/linux/alpha/kernel_sysinfo.h: New file. + * sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S: Use it. + * sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S: Likewise. + +2004-09-05 Richard Henderson <rth@redhat.com> + + * sysdeps/alpha/div.S: Save and restore FPCR around fp operations. + * sysdeps/alpha/divl.S, sysdeps/alpha/divq.S, sysdeps/alpha/divqu.S, + sysdeps/alpha/ldiv.S, sysdeps/alpha/reml.S, sysdeps/alpha/remq.S, + sysdeps/alpha/remqu.S: Likewise. + * sysdeps/alpha/div_libc.h (FRAME): Increase to 64. + +2004-09-05 Ulrich Drepper <drepper@redhat.com> + + * nscd/cache.c (cache_add): Correctly log GETHOSTBYADDR and + GETHOSTBYADDRv6 requests. + +2004-09-04 Ulrich Drepper <drepper@redhat.com> + + * nscd/pwdcache.c (cache_addpw): Use correct key length in + cache_add calls. + * nscd/grpcache.c (cache_addgr): Likewise. + +2004-09-03 Alfred M. Szmidt <ams@kemisten.nu> + + * sysdeps/mach/hurd/i386/tls.h (THREAD_DTV): Changed type of _DTV + to `dtv_t *'. + +2004-09-03 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd.c (parse_opt): Use writev instead of two write for + invalidate command. + +2004-09-02 Ulrich Drepper <drepper@redhat.com> + + * nscd/connections.c (nscd_run): Check early for invalid request types. + +2004-09-02 Roland McGrath <roland@frob.com> + + * sysdeps/mach/hurd/i386/tls.h (TLS_INIT_TP_EXPENSIVE): New macro. + (INSTALL_NEW_DTV, THREAD_DTV): Rewritten to fetch the right word. + (THREAD_SELF): New macro. + +2004-09-02 Steven Munroe <sjmunroe@us.ibm.com> + + [BZ #357] + * stdlib/tst-setcontext.c (test_stack): Added test for stack clobber. + (main): Call test_stack. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S + (__getcontext): Push stack frame then save parms in local frame. + Improve instruction scheduling. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S + (__swapcontext): Likewise. + +2004-09-01 Andreas Schwab <schwab@suse.de> + + * sysdeps/unix/sysv/linux/ia64/sys/ucontext.h [g++ >= 3.5]: Use + __builtin_offsetof. + +2004-09-01 Jakub Jelinek <jakub@redhat.com> + + [BZ #361] + * posix/fnmatch_loop.c (FCT): For backslash between brackets, branch + to normal_bracket after fetching the next character. + * posix/tst-fnmatch.input: Add 25 new tests. + Reported by Markus Oberhumer <markus@oberhumer.com>. + +2004-09-01 Ulrich Drepper <drepper@redhat.com> + + * elf/rtld.c (dl_main): First check existence of ld.so.preload + with access. + +2004-09-01 Roland McGrath <roland@redhat.com> + + * sysdeps/unix/sysv/linux/bits/waitflags.h + (WSTOPPED, WEXITED, WCONTINUED, WNOWAIT): New macros. + * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_WAITID_SYSCALL): + New macro. + * sysdeps/unix/sysv/linux/waitid.c: New file. Use new syscall when + available, or fall back to the waitpid-based generic code. + +2004-08-14 Alfred M. Szmidt <ams@kemisten.nu> + + * sysdeps/mach/hurd/i386/init-first.c (_hurd_stack_setup): Let gcc + clobber the `ebp' register. + * sysdeps/mach/hurd/i386/Makefile (CFLAGS-init-first.c): Removed. + Reverts change from 2004-05-07 by Jeroen Dekkers. + + * sysdeps/mach/hurd/i386/init-first.c (init): Changed the type of + NEWSP from `void *' to `int *'. Changed all casts accordingly. + +2004-08-31 Jakub Jelinek <jakub@redhat.com> + + * wcsmbs/wcsmbsload.c (__wcsmbs_getfct): Move attribute_hidden + before return type. + * locale/localename.c (__current_locale_name): Likewise. + +2004-08-30 Roland McGrath <roland@frob.com> + + * scripts/extract-abilist.awk: If `lastversion' variable defined, omit + later sets from output. + * Makerules (check-abi): Pass option to set that with value of + LIB-abi-frozen variable if one is set. + + * abilist/libcidn.abilist: New file (empty). + +2004-08-30 Jakub Jelinek <jakub@redhat.com> + + * posix/bits/posix1_lim.h (_POSIX_CHILD_MAX, _POSIX_OPEN_MAX): If + not __USE_XOPEN2K, use the Unix98 mandated values. + +2004-08-27 Roland McGrath <roland@redhat.com> + + * configure.in (usetls): Default to yes. + * configure: Regenerated. + +2004-08-26 Roland McGrath <roland@redhat.com> + + * configure.in (add_ons_automatic): New variable, set to yes or no + indicating --enable-add-ons with no explicit list. + (running add-on fragments): Allow a fragment to modify $libc_add_on + and have that affect its place in the list of add-ons to use. + * configure: Regenerated. + +2004-08-26 Ulrich Drepper <drepper@redhat.com> + + * nscd/cache.c: Major rewrite. The data is now optionally kept in + a mmaped memory region which is automatically mirrored on disk. + This implements persistent data storage. The Memory handled + needed to be completely revamped, it now uses a garbage collection + mechanism instead of malloc. + * nscd/connections.c: Likewise. + * nscd/nscd.c: Likewise. + * nscd/nscd.h: Likewise. + * nscd/nscd_conf.c: Likewise. + * nscd/nscd_stat.c: Likewise. + * nscd/grpcache.c: Likewise. + * nscd/hstcache.c:: Likewise. + * nscd/pwdcache.c:: Likewise. + * nscd/Makefile: Add rules to build mem.c. + * nscd/mem.c: New file. + * nscd/nscd.conf: Describe new configuration options. + +2004-08-26 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/mips/pread.c: Include sgidefs.h only if + NO_SGIDEFS_H isn't defined. + * sysdeps/unix/sysv/linux/mips/pwrite.c: Likewise. + * sysdeps/unix/sysv/linux/mips/pread64.c: Likewise. + + * sysdeps/unix/sysv/linux/sh/pread.c: Define NO_SGIDEFS_H and + _MIPS_SIM. + * sysdeps/unix/sysv/linux/sh/pwrite.c: Likewise. + * sysdeps/unix/sysv/linux/sh/pread64.c: Likewise. + * sysdeps/unix/sysv/linux/sh/pwrite64.c: Likewise. + +2004-08-26 Ulrich Drepper <drepper@redhat.com> + + * nscd/connections.c (nscd_run): atomic_increment was not missing. + + * sysdeps/gnu/Makefile (libdl-sysdep_routines): Don't add eval. + Patch by Greg Schafer. + +2004-08-25 Richard Henderson <rth@redhat.com> + + * sysdeps/alpha/elf/start.S (_start): Use $15 as frame unwind + instead of $31. Zero $15. + * sysdeps/unix/sysv/linux/alpha/clone.S (thread_start): Likewise. + +2004-08-25 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/powerpc/powerpc64/bits/atomic.h + (__arch_compare_and_exchange_bool_32_acq): Fix case where oldval + is negative. + (__arch_compare_and_exchange_bool_32_rel): Likewise. + + * nscd/connections.c: Make socket nonblocking so that threads + don't get stuck on accept. Fix locking. + + * nscd/grpcache.c (cache_addgr): Use copy of original key in hash + entry with alternative key. + * nscd/pwdcache.c (cache_addpw): Likewise. + +2004-08-25 Richard Sandiford <rsandifo@redhat.com> + + * sysdeps/mips/dl-machine.h (_dl_start_user): Don't set + __libc_stack_end. + +2004-08-23 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/gnu/netinet/udp.h: Cosmetic changes. Remove unnecessary + __BEGIN_DECLS/__END_DECLS. + +2004-08-23 Andreas Jaeger <aj@suse.de> + + [BZ #341] + * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (O_NOATIME): Define. + * sysdeps/unix/sysv/linux/arm/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/cris/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/hppa/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/i386/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/ia64/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/m68k/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/mips/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/s390/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/sh/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h (O_NOATIME): Likewise. + * sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h (O_NOATIME): Likewise. + +2004-08-21 Ulrich Drepper <drepper@redhat.com> + + * malloc/hooks.c (DEFAULT_CHECK_ACTION): Moved to malloc.c. + (check_action): Likewise. + When printing error messages, use malloc_printf_nc now instead of + fiddling with the streams cancellation flag in every place. + * malloc/malloc.c (DEFAULT_CHECK_ACTION): New definition. Change + default to 3. + (check_action): New variable. + (unlink): Print error message and eventually terminate in case list + is corrupted. + (malloc_printf_nc): New function. Use it in _int_free. + Change proposed by Arjan van de Ven. + + * dlfcn/Makefile: Don't build eval.c anymore. + +2004-08-20 Roland McGrath <roland@frob.com> + + * csu/Makefile ($(objpfx)version-info.h): Use printf in place + of echo -e for POSIX.2 portability. + Reported by Paul Jarc <prj@po.cwru.edu>. + +2004-08-19 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Minor optimizations in + list generation. + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Don't use + getcanonname_r function if AI_CANONNAME flag is not set in + request. + + * nis/nss_compat/compat-initgroups.c (getgrent_next_nss): + Initialize mysize with limits only if latter is >= 0. Use mysize + in malloc call. + +2004-08-19 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Cast canon to (char *) + to avoid warning. + + * resolv/nss_dns/dns-canon.c (_nss_dns_getcanonname_r): Initialize + status to NSS_STATUS_UNAVAIL. + +2004-08-19 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Use h->h_name in the + cannoname lookup since it has the FQDN even if the original NAME + value has not. + +2004-08-18 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Store NAME parameter + pointer in new variable ORIG_NAME and use this pointer when + determination of canonical name failed, not the possibly IDN + translated value of NAME. + +2004-08-17 Ulrich Drepper <drepper@redhat.com> + + * resolv/resolv.h (RES_DEFAULT): Add RES_NOIP6DOTINT. + * resolv/res_init.c (res_setoptions): Recognize ip6-dotint option. + Reset RES_NOIP6DOTINT flag in this case.. + + * sysdeps/posix/getaddrinfo.c: Fix memory handling of + ai_canonname. + +2004-08-16 Ulrich Drepper <drepper@redhat.com> + + * resolv/nss_dns/dns-canon.c (_nss_dns_getcanonname_r): Don't use + CNAME records, we better follow the chain of CNAME records which + can be accomplished with A/AAAA lookups. + +2004-08-15 Roland McGrath <roland@redhat.com> + + * sysdeps/unix/sysv/linux/bits/resource.h (enum __rusage_who): + Remove __RUSAGE_BOTH constant and RUSAGE_BOTH macro. + * sysdeps/unix/sysv/linux/alpha/bits/resource.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/resource.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/resource.h: Likewise. + +2004-08-15 Roland McGrath <roland@frob.com> + + * sysdeps/i386/i686/Makefile (elide-routines.os): Append hp-timing to + this, not ... + (static-only-routines): ... this. + * sysdeps/ia64/Makefile: Likewise. + * sysdeps/sparc/sparc32/sparcv9/Makefile: Likewise. + * sysdeps/sparc/sparc64/Makefile: Likewise. + * sysdeps/x86_64/Makefile: Likewise. + * sysdeps/i386/i686/hp-timing.c: Revert copyright terms change. + * sysdeps/ia64/hp-timing.c: Likewise. + * sysdeps/sparc/sparc32/sparcv9/hp-timing.c: Likewise. + * sysdeps/sparc/sparc64/hp-timing.c: Likewise. + + * csu/elf-init.c: Update copyright terms including special exception + for these trivial files, which are statically linked into executables + that use dynamic linking for the significant library code. + * io/fstat.c: Likewise. + * io/fstat64.c: Likewise. + * io/lstat.c: Likewise. + * io/lstat64.c: Likewise. + * io/stat.c: Likewise. + * io/stat64.c: Likewise. + * stdlib/atexit.c: Likewise. + * sysdeps/alpha/elf/initfini.c: Likewise. + * sysdeps/alpha/elf/start.S: Likewise. + * sysdeps/arm/elf/start.S: Likewise. + * sysdeps/cris/elf/start.S: Likewise. + * sysdeps/generic/initfini.c: Likewise. + * sysdeps/generic/mknod.c: Likewise. + * sysdeps/hppa/elf/initfini.c: Likewise. + * sysdeps/hppa/elf/start.S: Likewise. + * sysdeps/i386/elf/start.S: Likewise. + * sysdeps/i386/i686/hp-timing.c: Likewise. + * sysdeps/ia64/elf/initfini.c: Likewise. + * sysdeps/ia64/elf/start.S: Likewise. + * sysdeps/ia64/hp-timing.c: Likewise. + * sysdeps/m68k/elf/start.S: Likewise. + * sysdeps/mach/start.c: Likewise. + * sysdeps/mips/elf/start.S: Likewise. + * sysdeps/powerpc/powerpc32/elf/start.S: Likewise. + * sysdeps/powerpc/powerpc64/elf/start.S: Likewise. + * sysdeps/s390/s390-32/elf/start.S: Likewise. + * sysdeps/s390/s390-32/initfini.c: Likewise. + * sysdeps/s390/s390-64/elf/start.S: Likewise. + * sysdeps/s390/s390-64/initfini.c: Likewise. + * sysdeps/sh/elf/initfini.c: Likewise. + * sysdeps/sh/elf/start.S: Likewise. + * sysdeps/sparc/sparc32/elf/start.S: Likewise. + * sysdeps/sparc/sparc32/sparcv9/hp-timing.c: Likewise. + * sysdeps/sparc/sparc64/elf/start.S: Likewise. + * sysdeps/sparc/sparc64/hp-timing.c: Likewise. + * sysdeps/standalone/i386/start.S: Likewise. + * sysdeps/standalone/i960/start.S: Likewise. + * sysdeps/standalone/m68k/m68020/start.S: Likewise. + * sysdeps/unix/arm/start.c: Likewise. + * sysdeps/unix/bsd/osf/alpha/start.S: Likewise. + * sysdeps/unix/bsd/ultrix4/mips/start.S: Likewise. + * sysdeps/unix/sparc/start.c: Likewise. + * sysdeps/unix/start.c: Likewise. + * sysdeps/unix/sysv/aix/start.s: Likewise. + * sysdeps/unix/sysv/irix4/start.c: Likewise. + * sysdeps/x86_64/elf/initfini.c: Likewise. + * sysdeps/x86_64/elf/start.S: Likewise. + +2004-08-15 Roland McGrath <roland@redhat.com> + + [BZ #227] + * sysdeps/unix/sysv/linux/kernel-features.h + (__ASSUME_BRK_PAGE_ROUNDED): New macro. + * sysdeps/unix/sysv/linux/dl-sysdep.c (frob_brk) + [! __ASSUME_BRK_PAGE_ROUNDED]: Adjust the break up if it falls within + the partial page after the dynamic linker's own data segment. + +2004-08-15 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Optimize generation of + v4-mapped addresses a bit. + (gethosts): Move alloca out of macro, so that it is done only once. + + * sysdeps/posix/getaddrinfo.c (gaih_addrtuple): Change type of + addr to avoid casts. + (gethosts): Removed. + (gethosts2): Renamed to gethosts. Make it usable for family != + AF_UNSPEC. Fix AI_V4MAPPED. + (gaih_inet): Remove use of old gethosts. Always use what used to be + gethosts2. If entry is found, try to use the same NSS module's + getcanonname_r function. Use gethostbyaddr for AI_CANONNAME only + if getcanonname_r was not available. Fix filtering of AI_V4MAPPED + addresses. Numerous cleanups. + * resolv/nss_dns/dns-canon.c: New file. + * resolv/Makefile (libnss_dns-routines): Add dns-canon. + * resolv/Versions (libnss_dns): Add _nss_dns_getcanonname_r. + + * elf/Makefile: Add rules to build and run tst-dlopenrpath. + * elf/tst-dlopenrpath.c: New file. + * elf/tst-dlopenrpathmod.c: New file. + + * intl/tst-gettext.sh: Adjust for change of de.po file to UTF-8. + * intl/tst-gettext.c: Likewise. + + * nss/getent.c (ahosts_keys_int): Correctly print IPv6 addresses. + + * nss/getent.c: Allow queries for getaddrinfo with AF_INET and + AF_INET6. + +2004-08-14 Ulrich Drepper <drepper@redhat.com> + + * po/de.po: Update from translation team. + +2004-08-14 Roland McGrath <roland@frob.com> + + * sysdeps/mach/configure: Regenerated. + * sysdeps/mach/hurd/configure: Regenerated. + +2004-08-14 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c (getaddrinfo): If RFC3484 sorting is + performed, make sure it is still the first entry after sorting + that has the ai_canonname information. + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Really set ai_canonname + only in one entry. + +2004-08-13 Daniel Jacobowitz <dan@debian.org> + + * scripts/output-format.sed: Handle default case of three-argument + OUTPUT_FORMAT. + + * sysdeps/arm/machine-gmon.h (mcount_internal): Mark as + __attribute_used__. + +2004-08-13 Ulrich Drepper <drepper@redhat.com> + + * nss/getent.c (ahosts_keys): ai_canonname is NULL for all but the + first returned entry. Print name only if not NULL. + + * nis/nss_nis/nis-netgrp.c: Remove locking by using data in struct + __netgrent object passed in instead of global variables. + Optimize. + * nis/nss_nisplus/nisplus-netgrp.c: Remove locking by using data + in struct __netgrent object passed in instead of global variables. + * inet/netgroup.h (struct __netgrent): Add service_user field. + Move cursor in anonymous union, add new field location to that + union. + * inet/getnetgrent_r.c: Extensive rewrite to really enable + concurrent uset of set/get/endnetgrent and innetgr. + Reported by Chuck Simmons. + + * inet/netgroup.h (struct name_list): Replace name pointer with + zero-sized array. + * inet/getnetgrent_r.c: Adjust code for change in name_list + layout. Numerous strdup and free calls removed. + + * elf/sprof.c (read_symbols): When comparing aliases, prefer + non-hidden over hidden symbols and strong over weak symbols + if both don't start with '_'. + + * malloc/malloc.c: Use strong_alias instead of weak_alias wherever + possible. + +2004-08-12 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/bits/resource.h: Define non-standard + RUSAGE_ enums as __RUSAGE_ and adjust macros accordingly. + * sysdeps/unix/sysv/linux/alpha/bits/resource.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/resource.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/resource.h: Likewise. + Define non-standard RLIMIT_ enums as __RLIMIT_ and adjust macros + accordingly. + +2004-08-11 Andreas Schwab <schwab@suse.de> + + * resolv/res_libc.c: Move definition of __res_initstamp ... + * resolv/res_init.c: ... here. + +2004-08-10 GOTO Masanori <gotom@debian.or.jp> + + * locale/C-time.c: Change default ERA value from NULL to "". + * locale/tst-C-locale.c: Add test case for ERA keywords. + +2004-08-12 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/bits/resource.h: Define non-standard + RLIMIT__ enums as __RLIMIT_ and adjust macros accordingly. + * sysdeps/unix/sysv/linux/alpha/bits/resource.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/resource.h: Likewise. + +2004-08-12 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/bits/resource.h (RLIMIT_SIGPENDING, + RLIMIT_MSGQUEUE): Add. + (RLIMIT_NLIMITS, RLIM_NLIMITS): Adjust. + * sysdeps/unix/sysv/linux/alpha/bits/resource.h (RLIMIT_SIGPENDING, + RLIMIT_MSGQUEUE, RLIMIT_NLIMITS): Add. + (RLIM_NLIMITS): Adjust. + * sysdeps/unix/sysv/linux/sparc/bits/resource.h (RLIMIT_SIGPENDING, + RLIMIT_MSGQUEUE, RLIMIT_NLIMITS): Add. + (RLIM_NLIMITS): Adjust. + * sysdeps/unix/sysv/linux/mips/bits/resource.h (RLIMIT_SIGPENDING, + RLIMIT_MSGQUEUE, RLIMIT_NLIMITS): Add. + (RLIM_NLIMITS): Adjust. + +2004-08-12 Jakub Jelinek <jakub@redhat.com> + + * resolv/res_query.c (__libc_res_nsearch): Protect the debugging + printf with #ifdef DEBUG and RES_DEBUG check. + + * sysdeps/unix/sysv/linux/bits/shm.h: Move __END_DECLS after + __USE_MISC #endif. + * sysdeps/generic/bits/shm.h: Add __BEGIN_DECLS for __getpagesize + declaration. + * sysdeps/gnu/bits/shm.h: Likewise. + * sysdeps/unix/sysv/linux/alpha/bits/shm.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/bits/shm.h: Likewise. + * sysdeps/unix/sysv/linux/s390/bits/shm.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/shm.h: Likewise. + * sysdeps/unix/sysv/linux/x86_64/bits/shm.h: Likewise. + +2004-08-12 Ulrich Drepper <drepper@redhat.com> + + * po/ca.po: Update from translation team. + +2004-08-11 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/bits/shm.h: Add __BEGIN_DECLS for + __getpagesize declaration. + +2004-08-11 Roland McGrath <roland@redhat.com> + + * configure.in (libc_cv_cpp_asm_debuginfo): Add missing braces around + commands inside &&. + Reported by Andreas Schwab <schwab@suse.de>. + * configure: Regenerated. + + * posix/tst-waitid.c (do_test): Ignore SIGCHLD before cleanup SIGKILL. + +2004-08-11 Ulrich Drepper <drepper@redhat.com> + + * time/tzset.c (tzset_internal): Add new parameter which is + nonzero if called through tzset. Use TZDEFAULT name including + name comparison if the new parameter is zero. This means implicit + tzset calls will not cause files to be opened and read by tzfile.c + all the time. + +2004-08-11 Jakub Jelinek <jakub@redhat.com> + + * rt/tst-timer2.c (do_test): If timer_create fails, just continue. + * rt/tst-timer4.c (do_test): If one of the timer_create calls fails, + return 1 immediately. + + * time/tzfile.c (__tzfile_read): Free transitions only if it will + not be reused. + + * sysdeps/ieee754/dbl-64/mpa.c: Include <sys/param.h>. + * sysdeps/ieee754/dbl-64/mpa.h (MAX, MIN): Macros removed. + + * stdio-common/tst-popen.c: Include <string.h>. + + * resolv/res_send.c (__libc_res_nsend): Only define TMPBUF #if DEBUG. + + * sysdeps/pthread/aio_misc.c (handle_fildes_io): Remove noreturn + attribute. Return NULL instead of calling pthread_exit at the end. + +2004-08-11 Roland McGrath <roland@redhat.com> + + * iconvdata/testdata/ISO-2022-JP-3: Regenerated. + +2004-08-10 Alfred M. Szmidt <ams@kemisten.nu> + + * sysdeps/generic/bits/in.h (struct ip_mreq): Remove definition. + +2004-08-10 Jakub Jelinek <jakub@redhat.com> + + * libio/bits/stdio.h (fread_unlocked): Cast 0 to (size_t). + (fwrite_unlocked): When checking if size * n is <= 8, cast each + argument to size_t individually. Cast n to (void) instead of + (size_t), surround with (), return (size_t) 0 if one of n or size + is 0. [BZ #316] + * stdio-common/Makefile (tests): Add tst-unlockedio. + * stdio-common/tst-unlockedio.c: New test. + +2004-08-09 Roland McGrath <roland@frob.com> + + * manual/install.texi (Supported Configurations): Replace bug-glibc + mention with web URL. + * INSTALL: Regenerated. + * locale/iso-3166.def: Likewise, in comment. + * locale/iso-4217.def: Likewise. + * locale/iso-639.def: Likewise. + * posix/cpio.h: Remove bug reporting comment. + +2004-08-09 Ulrich Drepper <drepper@redhat.com> + + * libio/bits/stdio.h (fread_unlocked): Add a couple of (size_t) + casts to handle funny calls with floating point argument values + and signed values correctly and without warning. + (fwrite_unlocked): Likewise. [BZ #309] + + * malloc/memusage.c (me): Use creat64, not creat. + * malloc/memusagestat.c: Fix handling of very large sizes. [BZ #285] + Patch by Guy Maor <guymaor@yahoo.com>. + + * elf/ldconfig.c (options): Mark parameter option names as + translatable. [BZ #253] Patch by Jakub Bogusz <qboosh@pld-linux.org>. + + * iconv/gconv_charset.h (strip): Also allow comma which is what is + used to separate options. [BZ #194] + +2004-08-09 Roland McGrath <roland@redhat.com> + + * FAQ.in: Refer to web pages instead of bug-glibc. + * FAQ: Regenerated. + + * time/strptime_l.c: #include <stdbool.h>, `bool' used in last change. + +2004-08-09 Ulrich Drepper <drepper@redhat.com> + + * time/tzset.c (tzset_internal): If TZ is not set do not compare + old and new tz value since it might be /etc/localtime in both + cases although the file changed. [BZ #154] + Patch by Christian Franke <franke@computer.org>. + + * time/tzfile.c (__tzfile_read): Determine dev/ino of file. + Compare with values of previously opened file. Don't do anything + is they match. + +2004-08-08 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-load.c (_dl_map_object): If __RTLD_CALLMAP flag is set, + reset loader before the actual loading. + * elf/dl-open.c (dl_open_worker): If file name contains no path + element determine map of caller. Pass caller map in this case to + _dl_map_object. Set __RTLD_CALLMAP in mode. + * include/dlfcn.h (__RTLD_CALLMAP): Define. [BZ #116] + Patch by Greg Wolodkin <greg@mathworks.com>. + + * misc/syslog.c (openlog_internal): Always try both UDP and TCP. + [BZ #108] Patch mainly by Bjorn Andersson <bjorn@iki.fi>. + + * configure.in: Also recognize i786. [BZ #106] + Patch by <pluto@pld-linux.org>. + + * resolv/res_query.c (__libc_res_nsearch): Correctly test whether + name contains any dots. [BZ #95] + + * resolv/res_send.c: Compiling with DEBUG defined works again. + * resolv/gethnamaddr.c (dprintf): Renamed to Dprintf. Adjust all + callers. + + * resolv/tst-leaks.c (TIMEOUT): Define so that if no server is + available the process is not killed. [BZ #41] + + * intl/tst-gettext.c (main): Improve some messages. [BZ #33] + + * time/strptime_l.c (__strptime_internal): Fix handling of %Ey. + [BZ #28] + + * po/sv.po: Update from translation team. + +2004-08-07 Ulrich Drepper <drepper@redhat.com> + + * inet/netinet/in.h: Add more const to the setipv4soucefilter, + getsourcefilter, and setsourcefilter parameter list. + * sysdeps/generic/setipv4sourcefilter.c: Likewise. + * sysdeps/generic/getsourcefilter.c: Likewise. + * sysdeps/generic/setsourcefilter.c: Likewise. + * sysdeps/unix/sysv/linux/setipv4sourcefilter.c: Likewise. + * sysdeps/unix/sysv/linux/getsourcefilter.c: Likewise. + * sysdeps/unix/sysv/linux/setsourcefilter.c: Likewise. + + * po/tr.po: Update from translation team. + +2004-08-06 Ulrich Drepper <drepper@redhat.com> + + * iconvdata/jisx0213.h (jisx0213_added_in_2004_p): Fix typo. + Reported by Paolo Bonzini. + +2004-08-06 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/ia64/dl-machine.h (elf_machine_fixup_plt): Add + always_inline. + * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_runtime_setup, + elf_machine_fixup_plt, elf_machine_plt_conflict): Likewise. + + * sysdeps/unix/sysv/linux/netatalk/at.h: Include bits/sockaddr.h + before including linux/atalk.h. + + * resolv/res_libc.c: Include atomic.h. + + * intl/finddomain.c (free_mem): Rename to... + (_nl_finddomain_subfreeres): ... this. Add + __libc_freeres_fn_section. + * intl/loadmsgcat.c (_nl_unload_domain): Add + __libc_freeres_fn_section. + * intl/gettextP.h (_nl_unload_domain): Move into #ifdef _LIBC. + Add attribute_hidden. + (_nl_findomain_subfreeres): New prototype. + * iconv/gconv_db.c (free_mem): Call _nl_findomain_subfreeres. + +2004-07-30 Guido Guenther <agx@sigxcpu.org> + + * nss/getent.c (passwd_keys): Use strtoul instead of isdigit to + test if the key is numeric or not. + (group_keys): Likewise. + +2004-08-05 Ulrich Drepper <drepper@redhat.com> + + * inet/netinet/in.h: Define struct ip_msfilter, IP_MSFILTER_SIZE, + struct group_filter, and GROUP_FILTER_SIZE. + * include/sys/socket.h: Declare __getsockopt. + * sysdeps/unix/sysv/linux/setipv4sourcefilter.c: New file. + * sysdeps/unix/sysv/linux/getipv4sourcefilter.c: New file. + * sysdeps/unix/sysv/linux/setsourcefilter.c: New file. + * sysdeps/unix/sysv/linux/getsourcefilter.c: New file. [BZ #211] + + * po/ko.po: Update from translation team. + +2004-08-04 Jakub Jelinek <jakub@redhat.com> + + * hesiod/hesiod.c (__hesiod_res_get): Use calloc instead of malloc + + memset. + (__hesiod_res_set): Free nsaddrs. + + * include/resolv.h (__res_maybe_init): Add prototype. + * resolv/resolv.h (struct __res_state): Add _u._ext.initstamp field. + * resolv/Versions (libc): Add __res_maybe_init@@GLIBC_PRIVATE. + * resolv/res_libc.c (__res_initstamp, lock): New variables. + (res_init): Increase __res_initstamp. + (__res_maybe_init): New function. + * resolv/res_init.c (__res_vinit): Initialize _u._ext.initstamp. + * hesiod/hesiod.c (__hesiod_res_get): Use __res_maybe_init instead + of RES_INIT check and {res_ninit,__res_ninit,res_init} call. + * sysdeps/posix/getaddrinfo.c (gaih_inet): Likewise. + * resolv/nss_dns/dns-host.c (_nss_dns_gethostbyname2_r, + _nss_dns_gethostbyaddr_r): Likewise. + * resolv/nss_dns/dns-network.c (_nss_dns_getnetbyname_r, + _nss_dns_getnetbyaddr_r): Likewise. + * resolv/gethnamaddr.c (gethostbyname, gethostbyname2, + gethostbyaddr): Likewise. + * resolv/res_data.c (fp_nquery, res_mkquery, res_mkupdate, + res_isourserver, res_sendsigned, res_update, res_search, + res_querydomain): Likewise. + * nss/getXXbyYY_r.c (INTERNAL (REENTRANT_NAME)): Likewise. + * nss/digits_dots.c (__nss_hostname_digits_dots): Likewise. + * nss/getnssent_r.c (__nss_setent, __nss_endent, __nss_getent_r): + Likewise. + +2004-08-05 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Set ai_family for + V4-mapped IPv6 addresses and req->ai_family==AF_INET. + Reported by A. Guru <a.guru@sympatico.ca>. + + * po/sv.po: Update from translation team. + * po/sk.po: Likewise. + * po/pl.po: Likewise. + +2004-08-04 Jakub Jelinek <jakub@redhat.com> + Ulrich Drepper <drepper@redhat.com> + + * wcsmbs/mbsrtowcs_l.c (__mbsrtowcs_l): Don't read more input + characters than necessary. + +2004-08-05 Ulrich Drepper <drepper@redhat.com> + + * wcsmbs/Makefile (tests): Add tst-mbsrtowcs. + * wcsmbs/tst-mbsrtowcs.c: New file. + + * po/fr.po: Update from translation team. + +2004-08-04 Jakub Jelinek <jakub@redhat.com> + + * resolv/inet_pton.c (inet_pton4): Disallow octal numbers. Reported + by A. Guru <a.guru@sympatico.ca>. [BZ #295] + +2004-08-05 Ulrich Drepper <drepper@redhat.com> + + * po/nl.po: Update from translation team. + + * sysdeps/posix/getaddrinfo.c (gaih_inet): Recognize all the IPv4 + numeric address formats inet_addr knows. + (getaddrinfo): Allow AI_NUMERICSERV flag. + If neither IPv4 nor IPv6 interface is present we cannot make any + decision for AI_ADDRCONFIG. Fail if AI_NUMERICSERV is set and the + string is not just a number. Remove useless freeaddrinfo call. + * resolv/netdb.h (AI_NUMERICSERV): Define. + Based on a patch by a.guru@sympatico.ca. + +2004-08-04 Jakub Jelinek <jakub@redhat.com> + + * stdlib/strfmon_l.c (__vstrfmon_l): Memset whole info structure + instead of trying to initialize some, but not all, fields one by + one. + * stdio-common/printf_size.c (printf_size): Initialize fb_info + structure with *info instead of trying to initialize some, but not + all, fields from it. + + * nscd/connections.c (handle_request): Check if req->type is in + LASTDBREQ .. LASTREQ range instead of req. + + * locale/programs/linereader.c (lr_create): Initialize + lr->return_widestr to 0. + + * elf/dl-close.c (free_slotinfo): Add __libc_freeres_fn_section. + (free_mem): Call free_slotinfo just once. + + * stdio-common/tst-fmemopen.c (main): Check for MAP_FAILED instead + of NULL. + + * locale/localeinfo.h (_nl_locale_subfreeres): New prototype. + * locale/setlocale.c (free_category): Add __libc_freeres_fn_section. + (free_mem): Rename to _nl_locale_subfreeres. + * iconv/gconv_db.c: Include locale/localeinfo.h. + (free_derivation, free_modules_db): Add __libc_freeres_fn_section. + (free_mem): Call _nl_locale_subfreeres. + * iconv/gconv_dl.c (do_release_all): Add __libc_freeres_fn_section. + +2004-08-04 Roland McGrath <roland@frob.com> + + * Makeconfig ($(common-objpfx)config.status): + Fix typo: $(add_ons) -> $(add-ons). + (Makeconfig-add-on): New variable. When doing $(sysdep-makeconfigs) + include, use black magic to get it set to an add-on's name during the + include of the add-on's Makeconfig. + + * configure.in: Use variable name `libc_add_on' when sourcing add-on + configure fragments, so they can refer to this. + * configure: Regenerated. + +2004-08-04 Roland McGrath <roland@redhat.com> + + * posix/tst-waitid.c (test_child): Sleep a second before stopping. + (do_test): Bump sleep to three seconds. + (sigchld, check_sigchld): New functions. + (do_test): Handle SIGCHLD and check for getting the right details. + + * posix/tst-waitid.c (do_test): Kill the child process when bailing + out early on some failure. + [WCONTINUED]: Test WCONTINUED functionality. + +2004-08-03 Ulrich Drepper <drepper@redhat.com> + + * nscd/connections.c (handle_request): Print more descriptive + message for invalid request types. + +2004-08-02 Jakub Jelinek <jakub@redhat.com> + + * iconvdata/ibm932.c (BODY): Avoid binary search for ch >= 0xffff. + Always treat high as highest number in range + 1. + * iconvdata/ibm943.c (BODY): Likewise. + +2004-07-31 Bruno Haible <bruno@clisp.org> + + * iconvdata/JISX0213.TXT: Updated to JISX0213 plane 1 version 2004. + * iconvdata/jisx0213.c (__jisx0213_to_ucs_main, + __jisx0213_to_ucs_pagestart, __jisx0213_from_ucs_level1, + __jisx0213_from_ucs_level2): Regenerated. + * iconvdata/jisx0213.h (jisx0213_added_in_2004_p): New function. + * iconvdata/iso-2022-jp-3.c (JISX0213_1_2000_set): Renamed from + JISX0213_1_set. + (JISX0213_1_2004_set): New enum value. + (BODY for FROM_LOOP): Treat ESC $ ( Q like ESC $ ( O. + (BODY for TO_LOOP): For JISX 0213 plane 1 characters, emit ESC $ ( O + when possible, ESC $ ( Q when needed. + * iconvdata/testdata/EUC-JISX0213: Add the 10 new characters. + * iconvdata/testdata/EUC-JISX0213..UTF8: Update. + * iconvdata/testdata/SHIFT_JISX0213: Add the 10 new characters. + * iconvdata/testdata/SHIFT_JISX0213..UTF8: Update. + * iconvdata/testdata/ISO-2022-JP-3: Add the 10 new JISX0213 characters. + * iconvdata/testdata/ISO-2022-JP-3..UTF8: Update. + +2004-07-22 Bruno Haible <bruno@clisp.org> + + * iconvdata/gconv-modules (ISO-8859-7): Add alias ISO_8859-7:2003. + +2004-07-29 David S. Miller <davem@redhat.com> + + * sysdeps/sparc/sparc64/sparcv9b/memcpy.S (memcpy): Optimize + better for smaller than 256 byte copies. Also, use only one + unrolled loop instead of two for the large copy case. + +2004-07-30 Richard Henderson <rth@redhat.com> + + * sysdeps/alpha/divq.S: Save t3 before it gets clobbered. + * sysdeps/alpha/remq.S: Likewise. + * sysdeps/alpha/div.S, sysdeps/alpha/ldiv.S: Rewrite with the + new division algorithms in divl.S and divq.S respectively. + +2004-07-28 GOTO Masanori <gotom@debian.or.jp> + + * timezone/asia: Update from tzdata2004b. + * timezone/backward: Likewise. + * timezone/europe: Likewise. + * timezone/iso3166.tab: Likewise. + * timezone/leapseconds: Likewise. + * timezone/northamerica: Likewise. + * timezone/southamerica: Likewise. + * timezone/zone.tab: Likewise. + + * timezone/private.h: Update from tzcode2004b. + * timezone/zic.c: Likewise. + +2004-07-27 Ulrich Drepper <drepper@redhat.com> + + * nscd/grpcache.c (cache_addgr): If necessary, add entry also + under the name the user provided. + * nscd/pwdcache.c (cache_addpw): Likewise. + +2004-07-26 Roland McGrath <roland@redhat.com> + + * sysdeps/posix/waitid.c [WEXITED]: Clear WEXITED bit in OPTIONS for + call to __waitpid. + +2004-07-26 Ulrich Drepper <drepper@redhat.com> + + * nscd/hstcache.c (cache_addhst): Fix two scenarios which lead to + memory leaks. + + * sysdeps/unix/sysv/linux/ifreq.c (__ifreq): Assign pointer for + new buffer at the right time. + Reported by Jakub Bogusz <qboosh@pld-linux.org>. + +2004-07-25 Ulrich Drepper <drepper@redhat.com> + + * inet/Versions [libc, GLIBC_2.3.4]: Add getipv4sourcefilter, + getsourcefilter, setipv4sourcefilter, and setsourcefilter. + * inet/Makefile (routines): Likewise. + * inet/netinet/in.h: Add prototypes for getipv4sourcefilter, + getsourcefilter, setipv4sourcefilter, and setsourcefilter. + * sysdeps/generic/getipv4sourcefilter.c: New file. + * sysdeps/generic/setipv4sourcefilter.c: New file. + * sysdeps/generic/getsourcefilter.c: New file. + * sysdeps/generic/setsourcefilter.c: New file. + +2004-07-17 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/powerpc/powerpc64/memcpy.S: Improve instruction scheduling + for POWER4 machines. + +2004-07-21 Jakub Jelinek <jakub@redhat.com> + + [BZ #274] + * stdlib/strtod_l.c (INTERNAL (__STRTOF)): Fix used >= + BITS_PER_MP_LIMB shifting up. + * stdlib/tst-strtod.c (main): Add new tests. + +2004-07-23 Jakub Jelinek <jakub@redhat.com> + + [BZ #282] + * libio/iopopen.c (_IO_new_popen): Use _IO_init instead of + _IO_no_init. Remove wd from struct locked_FILE. + (_IO_wproc_jumps): Remove. + Reported by Andrew Josey <a.josey@opengroup.org>. + * stdio-common/Makefile (tests): Add tst-popen. + * stdio-common/tst-popen.c: New test. + +2004-07-23 Ulrich Drepper <drepper@redhat.com> + + * posix/bits/posix1_lim.h: Fix values for _POSIX_CHILD_MAX and + _POSIX_OPEN_MAX. Add _POSIX_HOST_NAME_MAX, _POSIX_SYMLINK_MAX, + _POSIX_SYMLOOP_MAX, and _POSIX_RE_DUP_MAX. + Reported by Andrew Josey. + + * include/features.h: Document _POSIX_C_SOURCE == 200112L. + + * grp/grp.h: Define gid_t if __USE_XOPEN2K is defined. + * pwd/pwd.h: Define uid_t and gid_t if __USE_XOPEN2K is defined. + * io/sys/stat.h: Define dev_t, gid_t, ino_t, mode_t, nlink_t, + off_t, time_t, and uid_t if __USE_XOPEN2K is defined. + * signal/signal.h: Define pid_t if __USE_XOPEN2K is defined. + * posix/unistd.h: Define gid_t, off_t, pid_t, uid_t, and + useconds_t if __USE_XOPEN2K is defined. + * io/utime.h: Define time_t if __USE_XOPEN2K is defined. + * libio/stdio.h: Declare fseeko and ftello if __USE_XOPEN2K is defined. + +2004-07-19 Thorsten Kukuk <kukuk@suse.de> + + * nis/nss_compat/compat-initgroups.c (getgrent_next_nss): Don't + allocate memory for large temporary variables with alloca. + +2004-07-22 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S: Compatibility + code must have version GLIBC_2.0. Patch by Dwayne McConnell. + + * nscd/nscd_getgr_r.c (nscd_getgr_r): Avoid read call with NULL + pointer and zero length. + +2004-07-21 Ulrich Drepper <drepper@redhat.com> + + * nscd/cache.c (prune_cache): Print correct list when debugging. + +2004-07-21 Jakub Jelinek <jakub@redhat.com> + + * resolv/res_libc.c (res_init): If RES_INIT is set and + _res.nscount > 0, call __res_nclose and free nsaddrs. + * resolv/Makefile: Add rules to build and run tst-leaks2. + * resolv/tst-leaks2.c: New test. + +2004-07-21 Ulrich Drepper <drepper@redhat.com> + + * intl/libintl.h: Don't define macros for C++. + Patch by Goto Masanori. + +2004-07-22 GOTO Masanori <gotom@debian.or.jp> + + [BZ #276] + * include/arpa/inet.h: Change inet_aton type from in_addr_t to int. + * inet/arpa/inet.h: Likewise. + * resolv/inet_addr.c: Likewise. + +2004-07-21 Alexandre Oliva <aoliva@redhat.com> + + * sysdeps/unix/sysv/linux/mips/mips64/syscalls.list: Add semtimedop. + +2004-07-20 Roland McGrath <roland@redhat.com> + + * configure.in (add_ons): Substitute this. Move $add_ons handling + after AC_CANONICAL_HOST and default setting of $machine et al. + Don't set $subdirs from $add_ons. + Instead, source add-on/configure fragments early on. + (base_machine): If it's already set, don't set it based on $machine. + (libc_config_ok): New variable, set to no. If an add-on fragment sets + it to yes, skip the tuple sanity check as if --enable-hacker-mode. + (sysnames): Try appending add-on names after machine as well. + * config.make.in (add-ons): Set from @add_ons@ instead of @subdirs@. + * Makeconfig ($(common-objpfx)config.status): Also depend on configure + files in $(add_ons) dirs. + + * sysdeps/unix/sysv/linux/bits/in.h (struct ip_mreq): Remove + definition, now in netinet/in.h proper. + +2004-07-20 Alexandre Oliva <aoliva@redhat.com> + + * sysdeps/unix/sysv/linux/mips/Makefile ($(objpfx)syscall-%.h): + Sort by syscalls. Make sure we get headers such as sgidefs.h from + the build tree before just-installed ones. + + * sysdeps/mips/atomicity.h: Use standard names for ABI macros, + include sgidefs.h where appropriate. + * sysdeps/mips/dl-machine.h: Likewise. + * sysdeps/mips/machine-gmon.h: Likewise. + * sysdeps/mips/bits/setjmp.h: Likewise. + * sysdeps/mips/fpu/bits/mathdef.h: Likewise. + * sysdeps/mips/mips64/__longjmp.c: Likewise. + * sysdeps/mips/mips64/setjmp_aux.c: Likewise. + * sysdeps/unix/sysv/linux/mips/kernel_stat.h: Likewise. + * sysdeps/unix/sysv/linux/mips/pread.c: Likewise. + * sysdeps/unix/sysv/linux/mips/pread64.c: Likewise. + * sysdeps/unix/sysv/linux/mips/ptrace.c: Likewise. + * sysdeps/unix/sysv/linux/mips/pwrite.c: Likewise. + * sysdeps/unix/sysv/linux/mips/pwrite64.c: Likewise. + * sysdeps/unix/sysv/linux/mips/sigaction.c: Likewise. + * sysdeps/unix/sysv/linux/mips/sigcontextinfo.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/sigcontext.h: Likewise. + * sysdeps/unix/sysv/linux/mips/bits/stat.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sys/procfs.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sys/ptrace.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sys/tas.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sys/ucontext.h: Likewise. + * sysdeps/unix/sysv/linux/mips/sys/user.h: Likewise. + * sysdeps/unix/sysv/linux/mips/Makefile ($(objpfx)syscall-%.h): + Likewise. + * sysdeps/unix/sysv/linux/mips/configure.in (asm-unistd.h): + Likewise. + + * sysdeps/mips/dl-machine.h (__dl_runtime_resolve): Update to use + _dl_lookup_symbol_x. + (elf_machine_runtime_link_map): Don't INTUSE _dl_signal_error. + +2004-07-20 Ulrich Drepper <drepper@redhat.com> + + * inet/netinet/in.h: Define struct ip_mreq and struct + ip_mreq_source. + Define struct group_req and struct group_source_req. + * sysdeps/unix/sysv/linux/bits/in.h: Define IP_UNBLOCK_SOURCE, + IP_BLOCK_SOURCE, IP_ADD_SOURCE_MEMBERSHIP, + IP_DROP_SOURCE_MEMBERSHIP, IP_MSFILTER, MCAST_JOIN_GROUP, + MCAST_BLOCK_SOURCE, MCAST_UNBLOCK_SOURCE, MCAST_LEAVE_GROUP, + MCAST_JOIN_SOURCE_GROUP, MCAST_LEAVE_SOURCE_GROUP, and + MCAST_MSFILTER. + Define MCAST_INCLUDE and MCAST_EXCLUDE. + + * iconvdata/gconv-modules: Add alias for IBM874 [BZ #244]. + +2004-07-19 Jakub Jelinek <jakub@redhat.com> + + [BZ #258] + * math/libm-test.inc (max_value, min_value): New variables. + (initialize): Initialize them. + (pow_test): Add a couple of new tests. + * sysdeps/i386/fpu/e_powf.S (__ieee754_powf): Don't generate invalid + exception if |y| >= 1U<<31. + * sysdeps/i386/fpu/e_pow.S (__ieee754_pow): Don't generate invalid + exception if |y| >= 1L<<63. + * sysdeps/i386/fpu/e_powl.S (__ieee754_powl): Likewise. + If y*log2(x) overflows to +-inf, return still +inf/+0 instead of NaN. + * sysdeps/x86_64/fpu/e_powl.S (__ieee754_powl): Likewise. + +2004-07-18 Ulrich Drepper <drepper@redhat.com> + + * nscd/pwdcache.c (cache_addpw): Optimize case of unsuccessful + lookup a bit. + * nscd/grpcache.c (cache_addgr): Likewise. + * nscd/hstcache.c (cache_addhst): Likewise. + +2004-07-10 GOTO Masanori <gotom@debian.or.jp> + + * sysdeps/s390/s390-32/elf/start.S: Remove symbol _fp_hw. + * sysdeps/s390/s390-64/elf/start.S: Likewise. + +2004-04-16 Andreas Schwab <schwab@suse.de> + + * sysdeps/ia64/bits/atomic.h: Cast first argument of + __sync_bool_compare_and_swap_si correct to void*. + +2004-07-17 Ulrich Drepper <drepper@redhat.com> + + * iconv/iconv_prog.c (print_known_names): Make machine-readable + output even less cluttered. + +2004-07-16 Steven Munroe <sjmunroe@us.ibm.com> + + [BZ #269] + * setjmp/Makefile (tests): Add bug269-setjmp. + * setjmp/bug269-setjmp.c: New file. + * sysdeps/powerpc/powerpc64/__longjmp-common.S [SHARED && !IS_IN_rtld]: + Store R2 from jmpbuf in callers TOC save area. + * sysdeps/powerpc/powerpc64/bsd-_setjmp.S [SHARED && !IS_IN_rtld]: + Store R2 in TOC save area. + * sysdeps/powerpc/powerpc64/setjmp-common.S [SHARED && !IS_IN_rtld]: + Copy TOC save area from previous frame as R2 (TOC) in jmpbuf. + +2004-07-16 Jakub Jelinek <jakub@redhat.com> + + * locale/newlocale.c: Include bits/libc-lock.h. + (__libc_setlocale_lock): Extern decl. + (__newlocale): Use it. + Reported by Ulrich Weigand <Ulrich.Weigand@de.ibm.com>. + +2004-07-15 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/fcntl.c (__fcntl_nocancel): Remove + static inline __attribute ((always_inline)). Don't define if + NO_CANCELLATION. + (__libc_fcntl): Use INLINE_SYSCALL directly instead of + __fcntl_nocancel. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c (__fcntl_nocancel): + Remove static inline __attribute ((always_inline)). Don't define + if NO_CANCELLATION. + (__libc_fcntl): Use INLINE_SYSCALL directly instead of + __fcntl_nocancel. + * sysdeps/unix/sysv/linux/i386/fcntl.c (__fcntl_nocancel): Define to + __libc_fcntl if NO_CANCELLATION and __ASSUME_FCNTL64 == 0. + Don't define at all if NO_CANCELLATION and __ASSUME_FCNTL64 > 0. + (__libc_fcntl): Don't define if __fcntl_nocancel is a macro. + + [BZ #262] + * sysdeps/i386/elf/start.S (_start): Use @GOT instead of @GOTOFF + for main. + * elf/Makefile: Add rules to build and run tst-pie1. + * elf/tst-pie1.c: New test. + * elf/tst-piemod1.c: New file. + +2004-07-14 Jakub Jelinek <jakub@redhat.com> + + [BZ #266] + * manual/string.texi (l64a): Note that the static buffer is 7 bytes + long. Rewrite example code so that it takes into account l64a output + shorter than 6 characters. + Reported by Julian Graham <julian.graham@aya.yale.edu>. + +2004-07-14 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/sh/dl-machine.h: Don't reset _dl_starting_up here. + (elf_machine_rela_relative): Remove unused valiable. + +2004-07-12 Paul Eggert <eggert@cs.ucla.edu> + + [BZ #263] + * sysdeps/unix/sysv/linux/getloadavg.c (getloadavg): Don't store + outside the buffer if the read returns 0. __strtod_l can't set + endp to NULL, so remove a test for that case. + +2004-07-12 Roland McGrath <roland@redhat.com> + + * manual/signal.texi (Interrupted Primitives): Make clear that + TEMP_FAILURE_RETRY evaluates its expression as long int and compares + it to -1 to define "failure". + +2004-07-10 Ulrich Drepper <drepper@redhat.com> + + * elf/ldconfig.c: Define PROCINFO_CLASS as static before including + ldsodefs.h. + * sysdeps/generic/ldsodefs.h: Only define PROCINFO_CLASS if it is not + already defined. + * sysdeps/i386/dl-procinfo.c: Define PROCINFO_CALLS only if not + already defined. + + * elf/rtld.c (print_statistics): Mark with noinline attribute. + * sysdeps/i386/dl-machine.h (elf_machine_rel): Mark with always_inline + attribute. + (elf_machine_rel_relative): Likewise. + + * include/string.h: Add libc_hidden_proto for __strtok_r and + __strsep_g. + * sysdeps/generic/strsep.c: Add libc_hidden_def. + * sysdeps/generic/strtok_r.c: Likewise. + * sysdeps/i386/strtok_r.S: Add alias for internal symbol. + * sysdeps/i386/i686/strtok_r.S: Likewise. + * sysdeps/x86_64/strtok_r.S: Likewise. + +2004-07-09 Alexandre Oliva <aoliva@redhat.com> + + * inet/getnetgrent_r.c (internal_setnetgrent): Make it hidden + instead of internal-linkage, such that we can alias to it. + (internal_endnetgrent, internal_getnetgrent_r): Likewise. + +2004-07-09 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/fcntl.c (__fcntl_nocancel): Move attribute + to the front for gcc 3.5+. + * sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Likewise. + * include/fcntl.h: Don't declare __fcntl_nocancel here if + NO_CANCELLATION is defined. + +2004-07-07 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-fini.c (_dl_fini): Add nloaded variable, load + GL(dl_nloaded) into it while still in critical section. + +2004-07-06 Thorsten Kukuk <kukuk@suse.de> + + * nss/getent.c (print_group, print_passwd): Use %lu format for + `unsigned long int' values. + + * sysdeps/unix/sysv/linux/i386/fcntl.c (__fcntl_nocancel): Fix syntax + error typos in goto statements. + +2004-07-07 Roland McGrath <roland@frob.com> + + * Makefile (dist-separate): New variable. + (glibc-%.tar rule): Make separate tar files for add-ons listed there. + Depend on their configure files. + (dist-do-separate-dirs): New canned sequence to do that. + (dist-separate-libidn, dist-separate-linuxthreads): New variables. + (dist): Depend on add-on tar files based on $(dist-separate). + (dist-version): New variable, default to $(version). + (tag-for-dist, dist): Use that in place of $(version) in deps. + +2004-07-07 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-fini.c (_dl_fini): Move the unlock of the ld.so lock + before the loop running the destructors. + +2004-05-18 Andreas Schwab <schwab@suse.de> + + * elf/dl-load.c (_dl_map_object_from_fd): Use the end address of + the first segment for mprotect, not l_text_end. + +2004-07-05 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-profile.c (_dl_start_profile): Compact error handling. + Remove hashfraction variable. Make kcount and kcountsize local + variables. + + * elf/dl-init.c: Don't define and use _dl_starting_up if + HAVE_INLINED_SYSCALLS is defined and the variable is not used. + * elf/dl-support.c: Likewise. + * elf/rtld.c: Likewise. + * elf/dl-misc.c (_dl_debug_vdprintf): Use writev syscall directly + if HAVE_INLINED_SYSCALLS is defined. + * sysdeps/powerpc/powerpc64/dl-machine.h: Don't reset _dl_starting_up + here. + * sysdeps/powerpc/powerpc32/dl-start.S: Likewise. + * sysdeps/unix/sysv/linux/configure.in: Define HAVE_INLINED_SYSCALLS. + * config.h.in: Add entry for HAVE_INLINED_SYSCALLS. + + * sysdeps/posix/profil.c: If compiled for ld.so, omit code which + is needed to stop profiling. + * elf/dl-open.c (dl_open_worker): If a newly opened object is to be + profile make sure it cannot be unloaded. + + * sysdeps/unix/sysv/linux/dl-origin.c: Inline readlink syscall. + + * sysdeps/unix/sysv/linux/fcntl.c: If compiled without cancellation + support, make sure the helper function is inlined. + * sysdeps/unix/sysv/linux/pread.c: Likewise. + * sysdeps/unix/sysv/linux/pwrite.c: Likewise. + * sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Likewise. + +2004-07-05 Jakub Jelinek <jakub@redhat.com> + + * include/string.h (ffs): Add libc_hidden_builtin_proto. + * sysdeps/rs6000/ffs.c (ffs): Add libc_hidden_builtin_def. + * sysdeps/alpha/alphaev67/ffs.S (ffs): Likewise. + * sysdeps/alpha/ffs.S (ffs): Likewise. + * sysdeps/s390/ffs.c (ffs): Likewise. + * sysdeps/powerpc/ffs.c (ffs): Likewise. + * sysdeps/i386/ffs.c (ffs): Likewise. + * sysdeps/i386/i686/ffs.c (ffs): Likewise. + * sysdeps/m68k/ffs.c (ffs): Likewise. + * sysdeps/generic/ffs.c (ffs): Likewise. + * sysdeps/m88k/ffs.c (ffs): Likewise. + * sysdeps/am29k/ffs.c (ffs): Likewise. + * sysdeps/i960/ffs.c (ffs): Likewise. + * sysdeps/x86_64/ffs.c (ffs): Likewise. + + * Makerules (check-abi): Use diff -p -U 0 instead of diff -pu0. + + * sysdeps/powerpc/novmx-longjmp.c (__libc_longjmp, + __libc_siglongjmp): Remove symbol_version. + * sysdeps/powerpc/longjmp.c (__libc_longjmp, __libc_siglongjmp): + Export @@GLIBC_PRIVATE, not @@GLIBC_2.3.4. + * sysdeps/powerpc/sigjmp.c (__sigjmp_save): Use strong_alias + unconditionally. + * sysdeps/powerpc/novmx-sigjmp.c (__sigjmp_save): Remove. + * sysdeps/powerpc/powerpc32/__longjmp.S (__longjmp): Use + strong_alias instead of default_symbol_version, remove + symbol_version. + * sysdeps/powerpc/powerpc64/__longjmp.S (__longjmp): Likewise. + * sysdeps/powerpc/powerpc32/bsd-setjmp.S (__novmx__setjmp): Change + into strong_alias to __novmxsetjmp. + (__vmx__setjmp): Similarly with __vmxsetjmp. + (__setjmp): Make it strong_alias to __vmx__setjmp, remove + default_symbol_version and symbol_version. + * sysdeps/powerpc/powerpc64/bsd-setjmp.S (__novmx__setjmp): Change + into strong_alias to __novmxsetjmp. + (__vmx__setjmp): Similarly with __vmxsetjmp. + (__setjmp): Make it strong_alias to __vmx__setjmp, remove + default_symbol_version and symbol_version. + + * nscd/nscd_getgr_r.c: Include stdio-common/_itoa.h. + +2004-07-05 Ulrich Drepper <drepper@redhat.com> + + * elf/rtld.c (dl_main): Mark dyn_temp with attribute_relro. + +2004-07-04 Matthew Reppert <arashi@kai.vm.bytemark.co.uk> + + * sysdeps/unix/sysv/linux/i386/glob64.c (glob64): Use libc_hidden_ver + instead of libc_hidden_def. + +2004-07-01 Roland McGrath <roland@redhat.com> + + * aclocal.m4: Add provide for AC_CONFIG_AUX_DIR_DEFAULT. + + * Makeconfig ($(common-objpfx)shlib-versions.v.i): Move top-level + $(..)shlib-versions file to last in deps list. This lets add-ons give + more-specific matches that override defaults in the top-level file. + + * sysdeps/unix/sysv/linux/configure.in: If arch_minimum_kernel was + already set, don't set it or libc_cv_gcc_unwind_find_fde. + * sysdeps/unix/sysv/linux/configure: Regenerated. + +2004-07-01 Martin Schwidefsky <schwidefsky@de.ibm.com> + + * sysdeps/s390/fpu/bits/mathinline.h [__LIBC_INTERNAL_MATH_INLINES] + (__ieee754_sqrt): Define as __MATH_INLINE using sqdbr instruction. + (__ieee754_sqrtf): Define as __MATH_INLINE using sqebr instruction. + * sysdeps/s390/fpu/e_sqrt.c: New file. + * sysdeps/s390/fpu/e_sqrtf.c: New file. + * sysdeps/s390/Implies: New file. + * sysdeps/s390/s390-32/Implies: Remove ieee754, move + ieee754/dbl-64 and ieee754/flt-32 to s390/Implies. + * sysdeps/s390/s390-64/Implies: Likewise. + +2004-06-30 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/s390/s390-32/sysdep.S: Include tls.h. + * sysdeps/unix/sysv/linux/s390/s390-64/sysdep.S: Likewise. + + * sysdeps/unix/sysv/linux/s390/s390-32/clone.S (thread_start): + DO_CALL (exit, 1) instead of branching to _exit. + * sysdeps/unix/sysv/linux/s390/s390-64/clone.S (thread_start): + Likewise. + + * sysdeps/s390/fpu/bits/mathinline.h: New file. + + * include/glob.h (glob64): Add libc_hidden_proto. + * sysdeps/generic/glob64.c (glob64): Add libc_hidden_def. + * sysdeps/gnu/glob64.c (glob64): Likewise. + * sysdeps/unix/sysv/linux/i386/glob64.c (glob64): Likewise. + +2004-06-11 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/i386/fpu/libm-test-ulps: Update for GCC 3.4. + * sysdeps/s390/fpu/libm-test-ulps: Likewise. + +2004-06-11 Dwayne Grant McConnell <dgm69@us.ibm.com> + + * sysdeps/powerpc/fpu/s_lround.c: Removed. + * sysdeps/powerpc/fpu/s_lroundf.c: Removed. + * sysdeps/powerpc/powerpc32/fpu/s_ceilf.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_ceil.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_floorf.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_floor.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_lrint.c: Removed. + * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_lroundf.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_lround.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_rintf.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_rint.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_roundf.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_round.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_truncf.S: New file. + * sysdeps/powerpc/powerpc32/fpu/s_trunc.S: New file. + +2004-06-30 Ulrich Drepper <drepper@redhat.com> + + * include/net/if.h: Handle if_nameindex and if_freenameindex with + libc_proto_hidden. + * sysdeps/unix/sysv/linux/netlinkaccess.h: New file. + * sysdeps/unix/sysv/linux/ifaddrs.c: Export netlink handling functions. + * sysdeps/unix/sysv/linux/if_index.c (if_nameindex): Implement using + netlink if possible. Fall back on ioctl method if necessary. + * sysdeps/unix/sysv/linux/Dist: Add netlinkaccess.h. + + * include/unistd.h: Declare __truncate. + * sysdeps/generic/truncate.c: Also define __truncate. + * sysdeps/mach/hurd/truncate.c: Likewise. + * sysdeps/unix/common/syscalls.list: Likewise. + * sysdeps/unix/sysv/linux/truncate64.c: Use __truncate, not truncate. + +2004-06-29 Ulrich Drepper <drepper@redhat.com> + + * stdio-common/printf-parsemb.c (__parse_one_specmb): Initialize + info.extra. Patch by Marcus Meissner. + +2004-06-29 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/sh/sysdep.h (SYSCALL_ERROR_HANDLER): + Fix branch offset for a PLT entry. + +2004-06-20 Jim Meyering <jim@meyering.net> + + * malloc/obstack.h (obstack_base): Cast to `void *', to align with + documentation. + +2004-06-28 Ulrich Drepper <drepper@redhat.com> + + * inet/bug-if1.c (do_test): Simply use 0 as invalid index. + Workaround for [BZ #232]. + + * sysdeps/unix/sysv/linux/if_index.c (if_nameindex): Use extend_alloca. + +2004-06-28 GOTO Masanori <gotom@debian.or.jp> + + * iconv/gconv_simple.c: Use get16/put16 for user given buffer + in ucs2/ucs2reverse when unaligned memory access is attempted. + * iconv/tst-iconv5.c: New file. + * iconv/Makefile (tests): Add tst-iconv5. + +2004-06-28 Jakub Jelinek <jakub@redhat.com> + + * inet/bug-if1.c: Include <string.h>. + +2004-06-19 Roland McGrath <roland@redhat.com> + + * sysdeps/posix/waitid.c (do_waitid) [DO_WAITID]: Define function + under this macro name instead. + [NO_DO_WAITID]: Don't define it at all. + (do_waitid) [WNOWAIT, WEXITED]: If these POSIX.1 waitid flag bits are + defined, then return ENOTSUP for combinations of selection bits other + than WEXITED and WEXITED|WSTOPPED, which this version cannot support. + + * posix/tst-waitid.c: New file. + * posix/Makefile (tests): Add it. + +2004-06-28 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/alpha/sysdep.h (inline_syscall6): Fix a typo. + + [BZ #231] + * sysdeps/unix/alpha/sysdep.S (__syscall_error): Avoid !samegp + relocation in librt.so. + + [BZ #230] + * sysdeps/alpha/dl-machine.h (_dl_start_user): Use ldah/ldl to load + _dl_skip_args. Patch by Jakub Bogusz <qboosh@pld-linux.org>. + +2004-06-27 Ulrich Drepper <drepper@redhat.com> + + * elf/ldconfig.c (add_dir): Take chroot into account. + Based on changes by HJ Lu and Hideki Iwamoto. + + * nscd/connections.c (invalidate_cache): If the host cache has to + be invalidated, re-read resolv.conf. + + * resolv/resolv.h (RES_NOIP6DOTINT): Define. + * resolv/res_init.c (res_setoptions): Handle no-ip6-dotint option. + * resolv/gethnamaddr.c (gethostbyaddr): Don't lookup with .ip6.int + if RES_NOIP6DOTINT flag is set. + * resolv/nss_dns/dns-host.c (_nss_dns_gethostbyaddr_r): Likewise. + +2004-06-25 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/powerpc/fcntl.c: Move to... + * sysdeps/unix/sysv/linux/powerpc/powerpc32/fcntl.c: ... here. + * sysdeps/unix/sysv/linux/powerpc/lockf64.c: Move to... + * sysdeps/unix/sysv/linux/powerpc/powerpc32/lockf64.c: ... here. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: New file. + + * sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h (F_GETLK, F_SETLK, + F_SETLKW): Fix values for -m32 -D_FILE_OFFSET_BITS=64. + +2004-06-21 Jakub Jelinek <jakub@redhat.com> + + [BZ #231] + * sysdeps/unix/alpha/Makefile: New file. + * sysdeps/unix/alpha/rt-sysdep.S: New file. + Reported by Jakub Bogusz <qboosh@pld-linux.org>. + +2004-06-18 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/getaddrinfo.c (gaih_inet): For AI_CANONNAME, + determine the canonical name only for the first returned entry. + + * inet/bug-if1.c: New file. + * inet/Makefile (tests): Add bug-if1. + +2004-06-18 Roland McGrath <roland@frob.com> + + * Makerules (compile-mkdep-flags): Add -MT $@. + + * Makefile (dist, tag-for-dist): New targets. + (files-for-dist, tag-of-stem): New variables. + (glibc-%.tar glibc-linuxthreads-%.tar): New pattern rule. + Make tar files using cvs export. + (%.bz2, %.gz, tag-%): New pattern rules. + (distribute): Variable removed. + (+subdir_targets): Remove distinfo targets. + (echo_subdirs, echo-distinfo, parent_echo-distinfo): Targets removed. + (rpm/%): Pattern rule removed. + * rpm/Makefile, rpm/rpmrc, rpm/template: Ancient cruft files removed. + * Rules (subdir_echo-headers, subdir_echo-distinfo, subdir_dist): + Targets removed. + * Makerules (dist, subdir_distinfo): Targets removed. + ($(objpfx)distinfo): Depend on $(distribute). + * Make-dist: File removed. + + * NEWS: Fix a typo. Update bug-reporting instructions. + +2004-06-17 Thorsten Kukuk <kukuk@suse.de> + + * sysdeps/unix/sysv/linux/sched_setaffinity.c + (__sched_setaffinity_new): Set errno to EINVAL and return -1 if + cpuset is wrongly set. + +2004-06-15 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/powerpc/powerpc64/memcpy.S: Improve instruction scheduling + for POWER4 machines. + +2004-06-14 Jakub Jelinek <jakub@redhat.com> + + [BZ #218] + * sunrpc/pmap_prot2.c (xdr_pmaplist): When freeing, remember pml_next + in a local variable, point rp to that local variable afterwards. + +2004-06-11 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/ieee754/dbl-64/e_sqrt.c (__ieee754_sqrt): Handle special + cases properly. + +2004-06-17 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/if_index.c (if_indextoname): Correct + error value for unknown interface. [BZ #198] + +2004-06-13 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/i386/bits/string.h (memcpy): Add () around arguments. + (memchr, __memrchr, strlen, strcmp, strncmp, __strchr_g, __strchr_c, + __strchrnul_g, __strchrnul_c, strspn, strcspn, strpbrk): Add memory + the asm uses as its input, either of size __n where __n is known or + 0xfffffff. + (strstr): Add "memory" clobber. + +2004-06-14 Jakub Jelinek <jakub@redhat.com> + + [BZ #219] + * nss/nsswitch.c (free_mem): Don't try to close a library handle + if the handle is invalid. Patch by David Kimdon <kimdon@esrf.fr>. + +2004-06-11 Dmitry V. Levin <ldv@altlinux.org> + + [BZ #217] + * debug/xtrace.sh: Fix typo in error diagnostics. + +2004-06-14 Andreas Schwab <schwab@suse.de> + + * stdio-common/psignal.c (psignal): Don't use BUF when asprintf + failed. + +2004-06-15 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S: Fix pasto + that clobbers r19. Fix pasto that overflowed sigcontext.v_reserve. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S: Fix pasto + that clobbers r19. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S: Fix pasto + that clobbers r19. Fix pasto that overflowed sigcontext.v_reserve. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S: + Fix setting of sigcontext.v_regs. Fix pasto that clobbers r19. + Fix pasto that overflowed sigcontext.v_reserve. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S: + Fix pasto that clobbers r19. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S: Fix setting + of sigcontext.v_regs. Fix pasto that clobbers r19. Fix pasto that + overflowed sigcontext.v_reserve. + +2004-05-04 H.J. Lu <hongjiu.lu@intel.com> + + [BZ #150] + * sysdeps/generic/strtol_l.c (DEF): Use ".gnu.linkonce.r." + instead of ".gnu.linkonce.ro." as the prefix for linkonce + read-only section name. + +2004-06-14 Richard Henderson <rth@redhat.com> + + * sysdeps/alpha/div_libc.h (_ITOFS): Use "sp" not "$sp". + (_ITOFT, _FTOIT, _ITOFT2): Likewise. + +2004-06-08 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/s390/s390-32/backtrace.c (init): Guard with #ifdef SHARED. + (unwind_backtrace, unwind_getip): Define #ifndef SHARED. + (__backtrace): Don't call init #ifndef SHARED. + * sysdeps/s390/s390-64/backtrace.c (init): Guard with #ifdef SHARED. + (unwind_backtrace, unwind_getip): Define #ifndef SHARED. + (__backtrace): Don't call init #ifndef SHARED. + * sysdeps/ia64/backtrace.c (init): Guard with #ifdef SHARED. + (unwind_backtrace, unwind_getip): Define #ifndef SHARED. + (__backtrace): Don't call init #ifndef SHARED. + +2004-06-11 Roland McGrath <roland@redhat.com> + + * sysdeps/arm/strlen.S [__ARMEB__]: Compute correctly for big-endian. + From Krzysztof Halasa <khc@pm.waw.pl>. + +2004-06-10 Jakub Jelinek <jakub@redhat.com> + + * elf/tls-macros.h [__s390x__] (TLS_LD, TLS_GD): Clobber also r14. + +2004-06-08 Jakub Jelinek <jakub@redhat.com> + + [BZ #199] + * crypt/md5-crypt.c (__md5_crypt): Only update buflen if realloc + succeeds. Reported by Miles Ohlrich <miles@cray.com>. + + * elf/chroot_canon.c (chroot_canon): Avoid segfault if first malloc + fails. Avoid memory leak if realloc fails. + +2004-06-09 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/generic/setenv.c (setenv): Return -1/EINVAL if name is + NULL, "" or contains '=' character in it. Reported by + Michael T Kerrisk <mtk-lists@gmx.net>. + * stdlib/tst-environ.c: Include errno.h. + (main): Add tests for these arguments to setenv/unsetenv. + +2004-06-07 Roland McGrath <roland@frob.com> + + * NEWS: Update bug reporting instructions. Fix some typos. + +2004-06-05 Ulrich Drepper <drepper@redhat.com> + + * stdio-common/_itoa.h: Don't expand _itoa inline for libc. + * stdio-common/_itoa.c: Add _itoa implementation. + + * nscd/nscd_gethst_r.c (__nscd_open_socket): Change implementation + to also send request. Add parameter to allow this. + Change callers. + * nscd/nscd_getgr_r.c: Change __nscd_open_socket caller. + * nscd/nscd_getpw_r.c: Likewise. + * nscd/nscd-client.h: Change __nscd_open_socket prototype. + +2004-06-05 Andreas Jaeger <aj@suse.de> + + * sysdeps/unix/sysv/linux/x86_64/makecontext.c (__makecontext): + Handle more than 6 args correctly. Based on a patch by Masahide + Washizawa <washi@jp.ibm.com>. + +2004-06-04 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd_gethst_r.c (nscd_gethst_r): Use __nss_not_use_nscd_hosts + in all places, not __nss_not_use_nscd_group. + Reported by Philippe Gregoire. + +2004-06-03 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/i386/i486/bits/atomic.h: Optimize a bit. + +2004-05-07 Dmitry V. Levin <ldv@altlinux.org> + + * argp/argp-help.c (__argp_error, __argp_failure): Check result + of __asprintf call and don't use string if it failed. + * stdio-common/psignal.c (psignal): Likewise. + * locale/programs/localedef.c (more_help): Likewise. + * resolv/res_hconf.c (arg_service_list, arg_trimdomain_list, + arg_bool, parse_line): Check result of __asprintf calls and + don't use string if they failed. + * sunrpc/svc_simple.c (registerrpc, universal): Likewise. + * elf/ldconfig.c (parse_conf_include): Check result of __asprintf + call and exit if it failed. + +2004-05-10 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/posix/sysconf.c (__sysconf) <cases _SC_REALTIME_SIGNALS, + _SC_PRIORITY_SCHEDULING, _SC_TIMERS, _SC_ASYNCHRONOUS_IO, + _SC_PRIORITIZED_IO, _SC_SYNCHRONIZED_IO, _SC_FSYNC, _SC_MAPPED_FILES, + _SC_MEMLOCK, _SC_MEMLOCK_RANGE, _SC_MEMORY_PROTECTION, + _SC_MESSAGE_PASSING, _SC_SEMAPHORES, _SC_SHARED_MEMORY_OBJECTS, + _SC_THREADS, _SC_THREAD_SAFE_FUNCTIONS, _SC_THREAD_ATTR_STACKADDR, + _SC_THREAD_ATTR_STACKSIZE, _SC_THREAD_PRIORITY_SCHEDULING, + _SC_THREAD_PRIO_INHERIT, _SC_THREAD_PRIO_PROTECT, + _SC_THREAD_PROCESS_SHARED>: Return _POSIX_* value instead of 1. + * sysdeps/unix/sysv/linux/sysconf.c (__sysconf) + <case _SC_MONOTONIC_CLOCK>: Return _POSIX_VERSION instead of 1. + +2004-05-07 Jeroen Dekkers <jeroen@dekkers.cx> + + * sysdeps/mach/hurd/i386/Makefile (CFLAGS-init-first.c): Add + -momit-leaf-frame-pointer. + + * inet/test-ifaddrs.c (addr_string): Surround AF_PACKET case with + #ifdef AF_PACKET. + + * sysdeps/mach/hurd/getcwd.c + (_hurd_canonicalize_directory_name_intern): Only realloc when + size is <= 0. + + * sysdeps/mach/hurd/mmap.c (__mmap): Fail when addr or offset + isn't page aligned. + + * sysdeps/mach/hurd/spawni.c (EXPAND_DTABLE): Set dtablesize to + new size. + + * sysdeps/mach/hurd/Versions (GLIBC_PRIVATE): Add __libc_read, + __libc_write and __libc_lseek64. + +2004-05-29 Roland McGrath <roland@redhat.com> + + * elf/Makefile (shared-only-routines): Add dl-caller. + +2004-05-28 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/powerpc/configure.in: New file. + +2004-05-28 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S: Add .machine + "altivec" to enable VMX instructions. + * sysdeps/powerpc/powerpc32/fpu/setjmp-common.S: Likewise. + * sysdeps/powerpc/powerpc64/__longjmp-common.S: Likewise. + * sysdeps/powerpc/powerpc64/setjmp-common.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S: Likewise. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S: Likewise. + +2004-05-27 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/i386/fpu/bits/mathinline.h (__expm1_code): Define using + __builtin_expm1l for GCC 3.5+. + (__expl): Define using __builtin_expl for GCC 3.4+. + (exp, expf, expl): Don't define for GCC 3.4+. + (tan, tanf, tanl): Don't define for GCC 3.5+. + (__atan2l): Define using __builtin_atan2l for GCC 3.4+. + (atan2, atan2f, atan2l): Don't define for GCC 3.4+ or !__FAST_MATH__. + (fmod, fmodf, fmodl): Don't define for GCC 3.5+ or !__FAST_MATH__. + (fabsf, fabsl): Only provide if __USE_MISC or __USE_ISOC99. + (sin, sinf, sinl, cos, cosf, cosl, log, logf, logl): Don't define + for GCC 3.4+. + (log10, log10f, log10l, asin, asinf, asinl, acos, acosf, acosl): + Don't define for GCC 3.5+. + (atan, atanf, atanl): Don't define for GCC 3.4+ or !__FAST_MATH__. + (log1p, log1pf, log1pl, logb, logbf, logbl, log2, log2f, log2l): Don't + define for GCC 3.5+. + (drem, dremf, dreml): Don't define for GCC 3.5+ or !__FAST_MATH__. + * sysdeps/sparc/fpu/bits/mathinline.h (sqrt, sqrtf, sqrtl): Don't + define for GCC 3.2+. + +2004-05-27 Jakub Jelinek <jakub@redhat.com> + + * string/bits/string2.h (__bzero): Define even for GCC 3.0+. + * sysdeps/alpha/stpcpy.S (stpcpy): Add libc_hidden_builtin_def. + * sysdeps/alpha/alphaev67/stpcpy.S (stpcpy): Likewise. + * sysdeps/powerpc/powerpc32/stpcpy.S (stpcpy): Likewise. + * sysdeps/powerpc/powerpc64/stpcpy.S (stpcpy): Likewise. + * sysdeps/sparc/sparc32/stpcpy.S (stpcpy): Likewise. + * sysdeps/sparc/sparc64/stpcpy.S (stpcpy): Likewise. + * sysdeps/i386/stpcpy.S (stpcpy): Likewise. + * sysdeps/i386/i586/stpcpy.S (stpcpy): Likewise. + * sysdeps/generic/stpcpy.c (stpcpy): Likewise. + * sysdeps/x86_64/stpcpy.S (stpcpy): Likewise. + * sysdeps/i386/i586/memcpy.S (memcpy): Remove + libc_hidden_builtin_def if MEMPCPY_P. + * sysdeps/x86_64/memcpy.S (memcpy): Likewise. + * sysdeps/i386/i686/mempcpy.S (mempcpy): Add libc_hidden_builtin_def. + * sysdeps/i386/i586/mempcpy.S (mempcpy): Likewise. + * sysdeps/generic/mempcpy.c (mempcpy): Likewise. + * sysdeps/x86_64/mempcpy.S (mempcpy): Likewise. + +2004-05-26 Roland McGrath <roland@frob.com> + + * sysdeps/generic/bits/in.h + (IMPLINK_IP, IMPLINK_LOWEXPER, IMPLINK_HIGHEXPER): Macros removed. + These are long obsolete in BSD systems where they originated. + * conform/data/netinet/in.h-data: Remove `allow IMPLINK_*' + +2004-05-26 Jakub Jelinek <jakub@redhat.com> + + * include/string.h (mempcpy, stpcpy): Add libc_hidden_builtin_proto. + * string/bits/string2.h (memset): Disable macro for GCC 3.0+. + (__mempcpy): Use __builtin_mempcpy for GCC 3.4+. + (strchr): For GCC 3.2+, only use __rawmemchr if second argument is + constant '\0' and first argument is not constant. + (__stpcpy): Use __builtin_stpcpy for GCC 3.4+. + (strncpy): Remove #ifdef _USE_STRING_ARCH_mempcpy variant. + For GCC 3.2+ use __builtin_strncpy. + (strncat): For GCC 3.2+ use __builtin_strncat. + (strcmp): For GCC 3.2+ use __builtin_strcmp if both arguments are + constant. + (strcspn, strspn, strpbrk): For GCC 3.2+, use builtin function + if both arguments are constant. + +2004-05-26 Ulrich Drepper <drepper@redhat.com> + + * nss/nss_files/files-hosts.c: Fix condition for looking up IPv4 + mapped addresses in gethostbyaddr. + +2004-05-25 Ulrich Drepper <drepper@redhat.com> + + * nss/digits_dots.c (__nss_hostname_digits_dots): Remove typep and + flags parameter, convert afp to simple int parameter. Adjust code. + typep was never != NULL and flags therefore also unused. *afp is + never modified. + * nss/nsswitch.h: Adjust __nss_hostname_digits_dots prototype. + * nss/getXXbyYY.c: Remove HAVE_TYPE handling. Adjust af parameter + handling for __nss_hostname_digits_dots calls. + * nss/getXXbyYY_r.c: Likewise. + + * elf/dl-load.c (_dl_map_object_from_fd): Map DSOs with MAP_DENYWRITE. + +2004-05-25 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/powerpc/fpu/Makefile: Make ld.so a dependency of libm.so. + * sysdeps/powerpc/fpu/bits/mathinline.h [__LIBC_INERNAL_MATH_INLINES] + (__ieee754_sqrt): Define as __MATH_INLINE using fsqrt instruction. + (__ieee754_sqrtf): Define as __MATH_INLINE using fsqrts instruction. + * sysdeps/powerpc/fpu/e_sqrt.c (__slow_ieee754_sqrt): Moved + implementation from w_sqrt.c. + * sysdeps/powerpc/fpu/e_sqrtf.c (__slow_ieee754_sqrtf): Moved + implementation from w_sqrtf.c. + * sysdeps/powerpc/fpu/w_sqrt.c (__sqrt): Wrapper implementation + using inline __ieee754_sqrt(). + * sysdeps/powerpc/fpu/w_sqrtf.c (__sqrtf): Wrapper implementation + using inline __ieee754_sqrtf(). + * sysdeps/powerpc/powerpc32/sysdep.h [__ASSEMBLER__]: Include + <sysdeps/powerpc/sysdep.h> independent of __ASSEMBLER__. + * sysdeps/powerpc/sysdep.h [__ASSEMBLER__] (PPC_FEATURE_*): Define + PPC_FEATURE_* independent of __ASSEMBLER__. + +2004-05-25 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/pthread/aio_notify.c: Use <> instead of "" for aio_misc.h + include. + (aio_start_notify_thread): Define if not defined. + (notify_func_wrapper): Use it. + * sysdeps/pthread/aio_misc.c: Use <> instead of "" for aio_misc.h + include. + (aio_create_helper_thread): Define if not defined. + (__aio_create_helper_thread): New function. + (__aio_enqueue_request): Use aio_create_helper_thread. + + * nis/ypclnt.c (ypall_data, ypall_foreach): Remove. + (struct ypresp_all_data): New type. + (__xdr_ypresp_all): Change second argument to + struct ypresp_all_data *. Replace ypall_foreach and + ypall_data with objp->foreach and objp->data. + (yp_all): Remove status variable, add data. Replace + all uses of status with data.status. Initialize data.foreach + and data.data instead of ypall_foreach and ypall_data. + +2004-05-24 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-lookup.c (add_dependency): Set DF_1_NODELETE bit + in l_flags_1, not in l_flags. + +2004-04-10 Robert Millan <robertmh@gnu.org> + + * sysdeps/unix/sysv/linux/bits/in.h: Cosmetic fixes to get in sync + with sysdeps/generic/bits/in.h. + +2004-05-25 Roland McGrath <roland@frob.com> + + * sysdeps/generic/unwind-dw2-fde-glibc.c: Change copyright terms from + GCC GPL to standard glibc LGPL. + +2004-05-24 Ulrich Drepper <drepper@redhat.com> + + * manual/string.texi (Copying and Concatenation): Fixed second + concat example. + Reported by Fabian Pietsch <fabian@zzznowman.dyndns.org>. + +2004-05-23 Ulrich Drepper <drepper@redhat.com> + + * malloc/obstack.c: Don't allow linking with _obstack. + +2004-05-23 Andreas Schwab <schwab@suse.de> + + * sysdeps/m68k/m68020/bits/atomic.h: Use "+m" constraint instead + of separate "m" constraints. + +2004-05-15 Chris Demetriou <cgd@broadcom.com> + + * sysdeps/mips/dl-machine.h (ELF_DL_FRAME_SIZE) + (ELF_DL_SAVE_ARG_REGS, ELF_DL_RESTORE_ARG_REGS): For the N32 + and 64 ABIs, save and restore regs $10 and $11 (a6 and a7). + +2004-05-20 Paul Eggert <eggert@cs.ucla.edu> + + * malloc/obstack.c (_obstack) [!defined _LIBC]: Remove; not used. + Add comment explaining why libc still defines it. + +2004-05-19 Paul Eggert <eggert@cs.ucla.edu> + + * malloc/obstack.h (_obstack_free, obstack_1grow, obstack_1grow_fast, + obstack_alignment_mask, obstack_alloc, obstack_base, + obstack_blank, obstack_blank_fast, obstack_chunk_size, + obstack_copy, obstack_copy0, obstack_finish, obstack_grow, + obstack_grow0, obstack_init, obstack_int_grow, + obstack_int_grow_fast, obstack_make_room, obstack_memory_used, + obstack_next_free, obstack_object_size, obstack_ptr_grow, + obstack_ptr_grow_fast, obstack_room): Remove declarations of + nonexistent functions. + +2004-05-18 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/powerpc/powerpc64/sysdep.h [__ASSEMBLER__]: Include + <sysdeps/powerpc/sysdep.h> independent of __ASSEMBLER__. + [PIC]: Redundent for powerpc64, removed. + (ENTRY): Generate size and alignment for opd entry. + (EALIGN): Generate size and alignment for opd entry. + (END): Use DOT_LABEL in ASM_SIZE_DIRECTIVE. + (END_GEN_TB): Use DOT_LABEL in ASM_SIZE_DIRECTIVE. + +2004-05-19 Ulrich Drepper <drepper@redhat.com> + + * misc/regexp.h: Say the functions have been withdrawn. + + * wcsmbs/tst-wcpncpy.c: Add more tests. + +2004-05-18 Roland McGrath <roland@frob.com> + + * sysdeps/generic/unwind.h: Change copyright terms from GCC GPL to + standard glibc LGPL. + * sysdeps/generic/unwind-dw2.c: Likewise. + * sysdeps/generic/unwind-dw2-fde.c: Likewise. + * sysdeps/generic/unwind-dw2-fde.h: Likewise. + * sysdeps/generic/unwind-pe.h: Likewise. + +2004-05-15 Petter Reinholdtsen <pere@hungry.com> + + * locale/iso-3166.def: Remove YUGOSLAVIA and insert "SERBIA AND + MONTENEGRO" which have taken over the code 819. Patch from + Danilo Segan. [BZ #40] + +2004-05-15 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep.h + (SYSCALL_ERROR_HANDLER): Rename __sparc.get_pic.l7 to + __sparc_get_pic_l7. + +2004-05-15 Joseph S. Myers <jsm@polyomino.org.uk> + + * catgets/gencat.c: Update bug reporting instructions. + * csu/version.c: Likewise. + * debug/catchsegv.sh: Likewise. + * debug/pcprofiledump.c: Likewise. + * debug/xtrace.sh: Likewise. + * elf/ldd.bash.in: Likewise. + * iconv/iconv_prog.c: Likewise. + * iconv/iconvconfig.c: Likewise. + * locale/programs/locale.c: Likewise. + * locale/programs/localedef.c: Likewise. + * login/programs/pt_chown.c: Likewise. + * malloc/memusage.sh: Likewise. + * malloc/memusagestat.c: Likewise. + * malloc/mtrace.pl: Likewise. + * manual/crypt.texi: Likewise. + * manual/install.texi: Likewise. + * nss/makedb.c: Likewise. + +2004-05-14 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Only + CHECK_STATIC_TLS if sym != NULL. + * sysdeps/sh/dl-machine.h (elf_machine_rela): Likewise. + * sysdeps/i386/dl-machine.h (elf_machine_rela): Likewise. + +2004-05-12 Andreas Schwab <schwab@suse.de> + + * posix/regex_internal.c (build_wcs_buffer): Also set pstr->mbs + when translating. + +2004-05-13 H.J. Lu <hongjiu.lu@intel.com> + + * Rules (xtests): Depend on tests. + +2004-05-13 Jakub Jelinek <jakub@redhat.com> + + * libio/genops.c (_IO_default_xsputn): Avoid one overflow per char if + count is negative, yet write_ptr < write_end. + (_IO_default_xsgetn): Avoid one underflow per char if count is + negative, yet read_ptr < read_end. + +2004-05-12 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/unix/sysv/linux/powerpc/bits/termios.h (XTABS): Define XTABS + equal to TAB3. + +2004-05-12 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-lookup.c (_dl_lookup_symbol_x): Correct _dl_signal_cerror + call. + +2004-05-10 Roland McGrath <roland@frob.com> + + * hurd/hurdlookup.c (__hurd_file_name_split): Return ENOENT for "". + (__hurd_directory_name_split): Likewise. + +2004-05-10 Ulrich Drepper <drepper@redhat.com> + + * po/fr.po: Update from translation team. + +2004-05-10 Andreas Jaeger <aj@suse.de> + + * sysdeps/unix/sysv/linux/x86_64/makecontext.c (__makecontext): + Correctly compute alignment. + Patch by Michael Matz <matz@suse.de>. + +2004-05-09 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/generic/sigpause.c: Prevent sigpause prototype. + * sysdeps/posix/sigpause.c: Likewise. + * signal/signal.h: Don't define sigpause macro unless needed. + +2004-05-08 Jakub Jelinek <jakub@redhat.com> + + * configure.in (libc_cv_libgcc_s_suffix): New check. + (libc_cv_as_needed): Use -lgcc_s$libc_cv_libgcc_s_suffix. + * config.make.in (libgcc_s_suffix): Set. + * Makeconfig (libgcc_eh): Use -lgcc_s$(libgcc_s_suffix). + +2004-05-08 Ulrich Drepper <drepper@redhat.com> + + * signal/signal.h: Use BSD sigpause only if BSD behavior is preferred. + +2004-04-29 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h (LOADARGS_1, + LOADARGS_2, LOADARGS_3, LOADARGS_4, LOADARGS_5, LOADARGS_6): + Load argument values into temporary variables. + * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h (LOADARGS_1, + LOADARGS_2, LOADARGS_3, LOADARGS_4, LOADARGS_5, LOADARGS_6): + Likewise. + +2004-05-07 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/Makefile: mq_send.c and mq_receive.c + need to be compiled with exceptions. + +2004-05-06 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/ifreq.c (__ifreq): Fix memory handling. + * sysdeps/generic/ifreq.c (__ifreq): Fix memory handling. + + * resolv/res_hconf.c (_res_hconf_reorder_addrs): Make clear that + realloc cannot fail. + + * nss/nss_files/files-netgrp.c (EXPAND): Free buffer which cannot + be expanded. + + * nis/nis_table.c: Clean up memory handling. + * nis/nis_subr.c (nis_getnames): Clean up memory handling. + * nis/nis_removemember.c (nis_removemember): Add comment + explaining use of realloc. + + * math/tgmath.h (fabs): Use __TGMATH_UNARY_REAL_IMAG_RET_REAL. + (carg): Likewise. + Patch by Lev S Bishop <lev.bishop@yale.edu>. + + * math/bug-tgmath1.c (main): Test fabs and carg as well. + +2004-05-06 Richard Henderson <rth@redhat.com> + + * elf/elf.h (AT_L1I_CACHESHAPE, AT_L1D_CACHESHAPE, + AT_L2_CACHESHAPE, AT_L3_CACHESHAPE): New. + * sysdeps/unix/sysv/linux/alpha/Versions: Export + __libc_alpha_cache_shape as a private symbol. + * sysdeps/unix/sysv/linux/alpha/dl-sysdep.c: New file. + * sysdeps/unix/sysv/linux/alpha/sysconf.c: New file. + +2004-05-06 Richard Henderson <rth@redhat.com> + + * sysdeps/alpha/div_libc.h (_ITOFS, _ITOFT, _FTOIT, _ITOFT2): New. + * sysdeps/alpha/divl.S: Use them. + * sysdeps/alpha/divq.S: Likewise. + * sysdeps/alpha/divqu.S: Likewise. + * sysdeps/alpha/reml.S: Likewise. + * sysdeps/alpha/remq.S: Likewise. + * sysdeps/alpha/remqu.S: Likewise. + +2004-05-06 Ulrich Drepper <drepper@redhat.com> + + * math/tgmath.h (__TGMATH_UNARY_REAL_IMAG_RET_REAL):Define. + (cimag): Use it. + (creal): Likewise. + * math/Makefile (tests): Add bug-tgmath1. + * math/bug-tgmath1.c: New file. + +2004-05-05 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/alpha/atomicity.h: Remove. + * sysdeps/generic/atomicity.h: Remove. + +2004-05-05 H.J. Lu <hongjiu.lu@intel.com> + + * sysdeps/i386/i486/bits/string.h (strpbrk): Cast return to + char *. + +2004-04-22 David Mosberger <davidm@hpl.hp.com> + + * sysdeps/unix/sysv/linux/ia64/Makefile (librt-routines): Mention + rt-sysdep. + * sysdeps/unix/sysv/linux/ia64/rt-sysdep.S: New file. + + * sysdeps/ia64/strcat.c: New file. + * sysdeps/ia64/strcat.S: Delete. + +2004-05-04 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/ia64/sysdep.S (USE___THREAD): Remove + defined. + +2004-04-23 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/ia64/fpu/libm_support.h (__libm_error_support): Add + libc_hidden_proto. Define to __GI___libm_error_support for + assembly going into libc.so. + * sysdeps/ia64/fpu/libc_libm_error.c (__libm_error_support): Add + libc_hidden_def. + + * include/libc-symbols.h (HIDDEN_BUILTIN_JUMPTARGET): Define. + * sysdeps/ia64/bcopy.S (bcopy): Use it for jump to memmove. + + * sysdeps/unix/sysv/linux/ia64/sysdep.S (__syscall_error): Access + gprel errno if RTLD_PRIVATE_ERRNO or __thread __libc_errno/errno + if USE___THREAD. + +2004-05-03 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/bsd/bits/fcntl.h (F_SETOWN, F_GETOWN): Define if + __USE_BSD or __USE_UNIX98. + * sysdeps/unix/bsd/ultrix4/bits/fcntl.h (F_SETOWN, F_GETOWN): Likewise. + * sysdeps/unix/bsd/bsd4.4/bits/fcntl.h (F_SETOWN, F_GETOWN): Likewise. + * sysdeps/unix/bsd/sun/sunos4/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/common/bits/fcntl.h (F_SETOWN, F_GETOWN): Likewise. + * sysdeps/unix/sysv/aix/bits/fcntl.h (F_SETOWN, F_GETOWN): Likewise. + * sysdeps/unix/sysv/irix4/bits/fcntl.h (F_SETOWN, F_GETOWN): Likewise. + * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/s390/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/cris/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/mips/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/sh/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/i386/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/m68k/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/ia64/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/arm/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/hppa/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h (F_SETOWN, F_GETOWN): + Likewise. + * sysdeps/generic/bits/fcntl.h (F_SETOWN, F_GETOWN): Likewise. + * sysdeps/mach/hurd/bits/fcntl.h (F_SETOWN, F_GETOWN): Likewise. + * io/sys/stat.h (S_ISSOCK, S_IFSOCK): Likewise. + +2004-05-01 Jakub Jelinek <jakub@redhat.com> + + * posix/Versions (libc): Remove __libc_wait, __libc_waitpid, + __libc_pause, __libc_nanosleep, __libc_pread, __libc_pread64, + __libc_pwrite64, __waitid and __pselect @@GLIBC_PRIVATE. + * stdlib/Versions (libc): Remove __on_exit@@GLIBC_PRIVATE. + * sysdeps/unix/sysv/linux/Versions (libc): Remove + __libc_sigaction@@GLIBC_PRIVATE. + * sysdeps/unix/sysv/linux/x86_64/Versions (libc): Remove + __modify_ldt@@GLIBC_PRIVATE. + * socket/Versions (libc): Remove __libc_accept, __libc_send, + __libc_recvfrom, __libc_recvmsg, __libc_sendmsg, __libc_recv, + __libc_sendto and __libc_connect @@GLIBC_PRIVATE. + * stdio-common/Versions (libc): Remove + _itoa_upper_digits@@GLIBC_PRIVATE. + * resolv/Versions (libresolv): Remove __ns_samename@@GLIBC_PRIVATE. + * misc/Versions (libc): Remove __libc_fsync, __libc_msync, + __libc_readv and __libc_writev @@GLIBC_PRIVATE. + * termios/Versions (libc): Remove __libc_tcdrain@@GLIBC_PRIVATE. + * io/Versions (libc): Remove __libc_open, __libc_close, __libc_read, + __libc_write, __libc_lseek, __libc_fcntl, __libc_open64 and + __libc_lseek64 @@GLIBC_PRIVATE. + +2004-04-30 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-load.c (open_verify): Move e_phentsize check after e_type + check. + +2004-04-29 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/powerpc/powerpc64/fpu/s_ceil.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_floor.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_floorf.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_llrint.c: Removed. + * sysdeps/powerpc/powerpc64/fpu/s_llrint.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_llrintf.c: Removed. + * sysdeps/powerpc/powerpc64/fpu/s_llrintf.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_llround.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_llroundf.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_lround.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_lroundf.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_rint.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_rintf.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_round.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_roundf.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_trunc.S: New file. + * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: New file. + + * math/test-misc.c [LDBL_MANT_DIG == 106](main): Correct LDBL_MAX + mantissa for AIX long double format. + * misc/qefgcvt.c [LDBL_MANT_DIG == 106] (NDIGIT_MAX): Define for AIX + long double format. + * misc/qefgcvt_r.c [LDBL_MANT_DIG == 106] (NDIGIT_MAX): Likewise. + * stdlib/fpioconst.c [!__NO_LONG_DOUBLE_MATH && __LDBL_MAX_EXP__>1024] + (_fpioconst_pow10): AIX long double format has same exponent range as + double. + * stdlib/fpioconst.h [!__NO_LONG_DOUBLE_MATH && __LDBL_MAX_EXP__>1024] + (LDBL_MAX_10_EXP_LOG): AIX long double format has same exponent range + as double. + +2004-04-23 Art Haas <ahaas@airmail.net> + + * sysdeps/unix/sysv/linux/kernel-features.h: Add 'defined'. + +2004-04-28 Carlos O'Donell <carlos@baldric.uwo.ca> + + * sysdeps/unix/sysv/linux/mq_getattr.c: Include <stddef.h>. + * sysdeps/unix/sysv/linux/mq_notify.c: Likewise. + * sysdeps/unix/sysv/linux/mq_open.c: Likewise. + * sysdeps/unix/sysv/linux/mq_receive.c: Likewise. + * sysdeps/unix/sysv/linux/mq_send.c: Likewise. + +2004-04-29 Philip Blundell <pb@nexus.co.uk> + + * sysdeps/arm/dl-machine.h (RTLD_START): Avoid unnecessary GOT + entries. + +2004-04-29 Jakub Jelinek <jakub@redhat.com> + + * manual/resource.texi (sched_setaffinity, sched_getaffinity): Fix + prototypes and description [BZ #131]. + + * string/bits/string2.h (strpbrk): Cast NULL to char * [BZ #130]. + Patch by Ed Catmur <ed@catmur.co.uk>. + * string/tst-inlcall.c (main): Add test for strpbrk. + + [BZ #140] + * sysdeps/unix/sysv/linux/sys/sysctl.h: Remove linux/compiler.h + include. + (_LINUX_KERNEL_H, _LINUX_TYPES_H, _LINUX_LIST_H): Only define if not + yet defined, #undef back after including linux/sysctl.h if defined + here. + (__LINUX_COMPILER_H, __user): Define if not yet defined, #undef + back after including linux/sysctl.h if defined here. + + * sysdeps/sparc/sparc64/soft-fp/qp_qtoi.c (_Qp_qtoi): Use %f31 + for single precision register, add it to __asm clobbers [BZ #139]. + * sysdeps/sparc/sparc64/soft-fp/qp_qtoui.c (_Qp_qtoui): Use %f31 + for single precision register, add it to __asm clobbers. + * sysdeps/sparc/sparc64/soft-fp/qp_qtoux.c (_Qp_qtoux): Use fqtox + instead of fqtoi in QP_HANDLE_EXCEPTIONS. + * sysdeps/sparc/sparc64/soft-fp/qp_qtox.c (_Qp_qtox): Likewise. + Reported by M. H. VanLeeuwen <vanl@megsinet.net>. + +2004-04-23 Andreas Schwab <schwab@suse.de> + + * sysdeps/unix/sysv/linux/m68k/register-dump.h: Use + __attribute_used__. + +2004-04-22 Philip Blundell <philb@gnu.org> + + * sysdeps/arm/dl-machine.h (elf_machine_rela): Don't use INTUSE + when calling _dl_signal_error. + (elf_machine_rel): Likewise. + +2004-04-21 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/ia64/setjmp.S: Define _GI___sigsetjmp + and use it internally instead of __sigsetjmp. + * sysdeps/ia64/fpu/s_frexpf.c (frexpf): Use _GI___libm_frexp_4f. + * sysdeps/ia64/fpu/s_frexpl.c (frexpl): Use _GI___libm_frexp_4l. + * sysdeps/ia64/fpu/libm_frexp4.S: Define _GI___libm_frexp_4. + * sysdeps/ia64/fpu/libm_frexp4f.S: Define _GI___libm_frexp_4f. + * sysdeps/ia64/fpu/libm_frexp4l.S: Define _GI___libm_frexp_4l. + * sysdeps/ia64/fpu/s_frexp.c (frexp): Use _GI___libm_frexp_4. + * sysdeps/ia64/fpu/libm_support.h: Declare _GI___libm_frexp_4, + _GI___libm_frexp_4f, _GI___libm_frexp_4l. + * sysdeps/ia64/fpu/bits/mathinline.h: New file. + * sysdeps/unix/sysv/linux/ia64/__start_context.S: Use + HIDDEN_JUMPTARGET for exit call. + * sysdeps/unix/sysv/linux/ia64/clone2.S: Use HIDDEN_JUMPTARGET for + _exit call. + * sysdeps/ia64/bcopy.S: Use HIDDEN_JUMPTARGET for memmove call. + * sysdeps/ia64/strcat.S: Use HIDDEN_JUMPTARGET for strlen and + strcpy calls. + +2004-04-21 Jakub Jelinek <jakub@redhat.com> + + * posix/tst-chmod.c (do_test): Fix a typo. + + * elf/lateglobal.c (main): Fix error checks. + Patch by Stephen Clarke <stephen.clarke@st.com>. + + * manual/ctype.texi (isblank, iswblank): Mark as ISO functions, + mention they have been added in ISO C99. + Reported by Ben Pfaff <blp@cs.stanford.edu>. + +2004-03-31 H.J. Lu <hongjiu.lu@intel.com> + + * sysdeps/ieee754/ldbl-128/bits/huge_vall.h: Fix typo. + +2004-04-20 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/shm_open.c (shm_unlink): Change EPERM into + EACCES. + +2004-04-20 Jakub Jelinek <jakub@redhat.com> + + * stdio-common/vfscanf.c (_IO_vfscanf): Revert last %% whitespace + handling change. + * stdio-common/tst-sscanf.c (int_tests): Adjust. + + * nis/nss-nis.c: Include stdlib.h. + + * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Shut up a + warning. + * sysdeps/sparc/sparc64/memcmp.S (memcmp): Remove BP_SYM () from + libc_hidden_builtin_def. + +2004-04-20 Jim Meyering <jim@meyering.net> + + * misc/error.c (error_tail): Don't leak upon realloc failure. + +2004-04-20 Martin Schwidefsky <schwidefsky@de.ibm.com> + + * sysdeps/unix/sysv/linux/dl-execstack.c (_dl_make_stack_executable): + Use RETURN_ADDRESS instead of __builtin_return_address. + +2004-04-19 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/mq_unlink.c: Rewrite to produce more + compact code. + +2004-04-20 Jakub Jelinek <jakub@redhat.com> + + * stdio-common/vfscanf.c (_IO_vfscanf): When skipping whitespace, + do input_error () instead of conv_error () and don't look at errno. + Don't eat any whitespace before %% if skip_space == 0. + * stdio-common/tst-sscanf.c (int_tests): New array. + (main): Run int_tests. + + +See ChangeLog.14 for earlier changes. diff --git a/Makerules b/Makerules index 887d7275c3..57268a6988 100644 --- a/Makerules +++ b/Makerules @@ -972,7 +972,7 @@ $(inst_libdir)/libc.so: $(common-objpfx)format.lds \ cat $<; \ echo 'GROUP ( $(slibdir)/libc.so$(libc.so-version)' \ '$(libdir)/$(patsubst %,$(libtype.oS),$(libprefix)$(libc-name))'\ - ')' \ + ' AS_NEEDED (' $(inst_slibdir)/$(rtld-installed-name) ') )' \ ) > $@.new mv -f $@.new $@ diff --git a/NEWS b/NEWS index f73d3287c4..cd975c998b 100644 --- a/NEWS +++ b/NEWS @@ -1,10 +1,17 @@ -GNU C Library NEWS -- history of user-visible changes. 2004-12-19 -Copyright (C) 1992-2002,2003,2004 Free Software Foundation, Inc. +GNU C Library NEWS -- history of user-visible changes. 2005-2-21 +Copyright (C) 1992-2004, 2005 Free Software Foundation, Inc. See the end for copying conditions. Please send GNU C library bug reports via <http://sources.redhat.com/bugzilla/> using `glibc' in the "product" field. +Version 2.4 + +* More overflow detection functions. + +* New iconv converters for IBM1025, IBM1122, IBM1137, IBM1153, + IBM1154, IBM1155, IBM1156, IBM1157, and IBM1158 contributed by Jiro Sekiba. + Version 2.3.4 * Support for RFC 3678. Real implementations exist only for Linux so far. diff --git a/Versions.def b/Versions.def index 33409f1143..45b2127914 100644 --- a/Versions.def +++ b/Versions.def @@ -20,6 +20,7 @@ libc { GLIBC_2.3.2 GLIBC_2.3.3 GLIBC_2.3.4 + GLIBC_2.4 %ifdef USE_IN_LIBIO HURD_CTHREADS_0.3 %endif diff --git a/crypt/crypt_util.c b/crypt/crypt_util.c index 5467a97b8a..0db5be7b0f 100644 --- a/crypt/crypt_util.c +++ b/crypt/crypt_util.c @@ -902,7 +902,7 @@ __setkey_r(__key, __data) c = c << 1 | *__key++; ktab[i] = c >> 1; } - _ufc_mk_keytab_r(ktab, __data); + _ufc_mk_keytab_r((char *) ktab, __data); } weak_alias (__setkey_r, setkey_r) diff --git a/csu/Makefile b/csu/Makefile index 20709c3c8d..bd82641d41 100644 --- a/csu/Makefile +++ b/csu/Makefile @@ -241,7 +241,7 @@ $(objpfx)version-info.h: $(common-objpfx)config.make $(all-Banner-files) esac; \ files="$(all-Banner-files)"; \ if test -n "$$files"; then \ - echo "\"Available extensions:\\n\""; \ + printf '"Available extensions:\\n"\n'; \ sed -e '/^#/d' -e 's/^[[:space:]]*/ /' \ -e 's/^\(.*\)$$/\"\1\\n\"/' $$files; \ fi) > $@T diff --git a/csu/elf-init.c b/csu/elf-init.c index dbd2a91cb7..fcf6a04315 100644 --- a/csu/elf-init.c +++ b/csu/elf-init.c @@ -110,7 +110,7 @@ __libc_csu_init (void) void __libc_csu_fini (void) { -#if 0 +#ifndef LIBC_NONSHARED #ifdef HAVE_INITFINI_ARRAY size_t i = __fini_array_end - __fini_array_start; while (i-- > 0) diff --git a/ctype/ctype-extn.c b/ctype/ctype-extn.c index b54080d7ac..d6851d4fbc 100644 --- a/ctype/ctype-extn.c +++ b/ctype/ctype-extn.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1991,1997,1999,2000,2002,2005 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,9 +20,9 @@ #include <ctype.h> #define __ctype_tolower \ - ((uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128) + ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOLOWER) + 128) #define __ctype_toupper \ - ((uint32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128) + ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128) /* Real function versions of the non-ANSI ctype functions. isblank is now in ISO C99 but we leave it here. */ diff --git a/debug/Makefile b/debug/Makefile index 6df06116b7..c904913c35 100644 --- a/debug/Makefile +++ b/debug/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1998, 1999, 2000, 2001, 2004 Free Software Foundation, Inc. +# Copyright (C) 1998,1999,2000,2001,2004,2005 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,12 +24,16 @@ subdir := debug headers := execinfo.h distribute = sigcontextinfo.h register-dump.h frame.h -routines := backtrace backtracesyms backtracesymsfd noophooks \ +routines = backtrace backtracesyms backtracesymsfd noophooks \ memcpy_chk memmove_chk mempcpy_chk memset_chk stpcpy_chk \ strcat_chk strcpy_chk strncat_chk strncpy_chk \ sprintf_chk vsprintf_chk snprintf_chk vsnprintf_chk \ printf_chk fprintf_chk vprintf_chk vfprintf_chk \ - gets_chk chk_fail readonly-area + gets_chk chk_fail readonly-area fgets_chk fgets_u_chk \ + read_chk pread_chk pread64_chk recv_chk recvfrom_chk \ + readlink_chk getwd_chk getcwd_chk \ + $(static-only-routines) +static-only-routines := warning-nop CFLAGS-backtrace.c = -fno-omit-frame-pointer CFLAGS-sprintf_chk.c = -D_IO_MTSAFE_IO @@ -41,6 +45,13 @@ CFLAGS-fprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) CFLAGS-vprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) CFLAGS-vfprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) CFLAGS-gets_chk.c = -D_IO_MTSAFE_IO $(exceptions) +CFLAGS-fgets_chk.c = -D_IO_MTSAFE_IO $(exceptions) +CFLAGS-fgets_u_chk.c = -D_IO_MTSAFE_IO $(exceptions) +CFLAGS-read_chk.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-pread_chk.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-pread64_chk.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-recv_chk.c = -fexceptions -fasynchronous-unwind-tables +CFLAGS-recvfrom_chk.c = -fexceptions -fasynchronous-unwind-tables tests = backtrace-tst tst-chk1 tst-chk2 tst-chk3 \ test-strcpy_chk test-stpcpy_chk diff --git a/debug/Versions b/debug/Versions index 07d6fbb830..fd97834171 100644 --- a/debug/Versions +++ b/debug/Versions @@ -18,4 +18,10 @@ libc { __printf_chk; __fprintf_chk; __vprintf_chk; __vfprintf_chk; __gets_chk; } + GLIBC_2.4 { + __fgets_chk; __fgets_unlocked_chk; + __read_chk; __pread_chk; __pread64_chk; + __readlink_chk; __getcwd_chk; __getwd_chk; + __recv_chk; __recvfrom_chk; + } } diff --git a/debug/chk_fail.c b/debug/chk_fail.c index 6921ca4686..0cfca295a9 100644 --- a/debug/chk_fail.c +++ b/debug/chk_fail.c @@ -28,7 +28,7 @@ __chk_fail (void) { /* The loop is added only to keep gcc happy. */ while (1) - __libc_message (1, "*** buffer overflow detected ***: %s terminated\n", + __libc_message (2, "*** buffer overflow detected ***: %s terminated\n", __libc_argv[0] ?: "<unknown>"); } libc_hidden_def (__chk_fail) diff --git a/debug/fgets_chk.c b/debug/fgets_chk.c new file mode 100644 index 0000000000..27fbede7f0 --- /dev/null +++ b/debug/fgets_chk.c @@ -0,0 +1,67 @@ +/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2002, 2003, 2005 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. + + As a special exception, if you link the code in this file with + files compiled with a GNU compiler to produce an executable, + that does not cause the resulting executable to be covered by + the GNU Lesser General Public License. This exception does not + however invalidate any other reasons why the executable file + might be covered by the GNU Lesser General Public License. + This exception applies to code released by its copyright holders + in files containing the exception. */ + +#include "libioP.h" +#include <stdio.h> +#include <sys/param.h> + +char * +__fgets_chk (buf, size, n, fp) + char *buf; + size_t size; + int n; + _IO_FILE *fp; +{ + _IO_size_t count; + char *result; + CHECK_FILE (fp, NULL); + if (n <= 0) + return NULL; + _IO_acquire_lock (fp); + /* This is very tricky since a file descriptor may be in the + non-blocking mode. The error flag doesn't mean much in this + case. We return an error only when there is a new error. */ + int old_error = fp->_IO_file_flags & _IO_ERR_SEEN; + fp->_IO_file_flags &= ~_IO_ERR_SEEN; + count = INTUSE(_IO_getline) (fp, buf, MIN ((size_t) n - 1, size), '\n', 1); + /* If we read in some bytes and errno is EAGAIN, that error will + be reported for next read. */ + if (count == 0 || ((fp->_IO_file_flags & _IO_ERR_SEEN) + && errno != EAGAIN)) + result = NULL; + else if (count >= size) + __chk_fail (); + else + { + buf[count] = '\0'; + result = buf; + } + fp->_IO_file_flags |= old_error; + _IO_release_lock (fp); + return result; +} diff --git a/debug/fgets_u_chk.c b/debug/fgets_u_chk.c new file mode 100644 index 0000000000..324d7e371b --- /dev/null +++ b/debug/fgets_u_chk.c @@ -0,0 +1,65 @@ +/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2002, 2003, 2005 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. + + As a special exception, if you link the code in this file with + files compiled with a GNU compiler to produce an executable, + that does not cause the resulting executable to be covered by + the GNU Lesser General Public License. This exception does not + however invalidate any other reasons why the executable file + might be covered by the GNU Lesser General Public License. + This exception applies to code released by its copyright holders + in files containing the exception. */ + +#include "libioP.h" +#include <stdio.h> +#include <sys/param.h> + +char * +__fgets_unlocked_chk (buf, size, n, fp) + char *buf; + size_t size; + int n; + _IO_FILE *fp; +{ + _IO_size_t count; + char *result; + CHECK_FILE (fp, NULL); + if (n <= 0) + return NULL; + /* This is very tricky since a file descriptor may be in the + non-blocking mode. The error flag doesn't mean much in this + case. We return an error only when there is a new error. */ + int old_error = fp->_IO_file_flags & _IO_ERR_SEEN; + fp->_IO_file_flags &= ~_IO_ERR_SEEN; + count = INTUSE(_IO_getline) (fp, buf, MIN ((size_t) n - 1, size), '\n', 1); + /* If we read in some bytes and errno is EAGAIN, that error will + be reported for next read. */ + if (count == 0 || ((fp->_IO_file_flags & _IO_ERR_SEEN) + && errno != EAGAIN)) + result = NULL; + else if (count >= size) + __chk_fail (); + else + { + buf[count] = '\0'; + result = buf; + } + fp->_IO_file_flags |= old_error; + return result; +} diff --git a/debug/getcwd_chk.c b/debug/getcwd_chk.c new file mode 100644 index 0000000000..cb864c858e --- /dev/null +++ b/debug/getcwd_chk.c @@ -0,0 +1,31 @@ +/* Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <errno.h> +#include <unistd.h> +#include <sys/param.h> + + +char * +__getcwd_chk (char *buf, size_t size, size_t buflen) +{ + if (size > buflen) + __chk_fail (); + + return __getcwd (buf, size); +} diff --git a/debug/getwd_chk.c b/debug/getwd_chk.c new file mode 100644 index 0000000000..898af28d3f --- /dev/null +++ b/debug/getwd_chk.c @@ -0,0 +1,34 @@ +/* Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <errno.h> +#include <unistd.h> +#include <sys/param.h> + + +char * +__getwd_chk (char *buf, size_t buflen) +{ + char *res = __getcwd (buf, buflen); + if (res == NULL && errno == ERANGE) + __chk_fail (); + return res; +} + +link_warning (getwd, + "the `getwd' function is dangerous and should not be used.") diff --git a/debug/pread64_chk.c b/debug/pread64_chk.c new file mode 100644 index 0000000000..93e5151ddc --- /dev/null +++ b/debug/pread64_chk.c @@ -0,0 +1,30 @@ +/* Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <unistd.h> +#include <sys/param.h> + + +ssize_t +__pread64_chk (int fd, void *buf, size_t nbytes, off64_t offset, size_t buflen) +{ + if (nbytes > buflen) + __chk_fail (); + + return __pread64 (fd, buf, offset, nbytes); +} diff --git a/debug/pread_chk.c b/debug/pread_chk.c new file mode 100644 index 0000000000..24c13103dd --- /dev/null +++ b/debug/pread_chk.c @@ -0,0 +1,30 @@ +/* Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <unistd.h> +#include <sys/param.h> + + +ssize_t +__pread_chk (int fd, void *buf, size_t nbytes, off_t offset, size_t buflen) +{ + if (nbytes > buflen) + __chk_fail (); + + return __pread (fd, buf, offset, nbytes); +} diff --git a/debug/read_chk.c b/debug/read_chk.c new file mode 100644 index 0000000000..da2bc945b7 --- /dev/null +++ b/debug/read_chk.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <unistd.h> +#include <sys/param.h> +#ifdef HAVE_INLINED_SYSCALLS +# include <errno.h> +# include <sysdep.h> +#endif + + +ssize_t +__read_chk (int fd, void *buf, size_t nbytes, size_t buflen) +{ + if (nbytes > buflen) + __chk_fail (); + +#ifdef HAVE_INLINED_SYSCALLS + return INLINE_SYSCALL (read, 3, fd, buf, nbytes); +#else + return __read (fd, buf, nbytes); +#endif +} diff --git a/debug/readlink_chk.c b/debug/readlink_chk.c new file mode 100644 index 0000000000..ac18ee2c29 --- /dev/null +++ b/debug/readlink_chk.c @@ -0,0 +1,38 @@ +/* Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <unistd.h> +#include <sys/param.h> +#ifdef HAVE_INLINED_SYSCALLS +# include <errno.h> +# include <sysdep.h> +#endif + + +ssize_t +__readlink_chk (const char *path, void *buf, size_t len, size_t buflen) +{ + if (len > buflen) + __chk_fail (); + +#ifdef HAVE_INLINED_SYSCALLS + return INLINE_SYSCALL (readlink, 3, path, buf, len); +#else + return __readlink (path, buf, len); +#endif +} diff --git a/debug/recv_chk.c b/debug/recv_chk.c new file mode 100644 index 0000000000..7a49d17234 --- /dev/null +++ b/debug/recv_chk.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <sys/param.h> +#include <sys/socket.h> + + +ssize_t +__recv_chk (int fd, void *buf, size_t n, size_t buflen, int flags) +{ + /* In case N is greater than BUFLEN, we read BUFLEN+1 bytes. + This might overflow the buffer but the damage is reduced to just + one byte. And the program will terminate right away. */ + ssize_t nrecv = __recv (fd, buf, MIN (n, buflen + 1), flags); + if (nrecv > 0 && (size_t) nrecv > buflen) + __chk_fail (); + return nrecv; +} diff --git a/debug/recvfrom_chk.c b/debug/recvfrom_chk.c new file mode 100644 index 0000000000..e1b1da7f6b --- /dev/null +++ b/debug/recvfrom_chk.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <sys/param.h> +#include <sys/socket.h> + + +ssize_t +__recvfrom_chk (int fd, void *buf, size_t n, size_t buflen, int flags, + __SOCKADDR_ARG addr, socklen_t *addr_len) +{ + /* In case N is greater than BUFLEN, we read BUFLEN+1 bytes. + This might overflow the buffer but the damage is reduced to just + one byte. And the program will terminate right away. */ + ssize_t nrecv = __recvfrom (fd, buf, MIN (n, buflen + 1), flags, + addr, addr_len); + if (nrecv > 0 && (size_t) nrecv > buflen) + __chk_fail (); + return nrecv; +} diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c index b4607bc9f0..ea059e6f85 100644 --- a/debug/tst-chk1.c +++ b/debug/tst-chk1.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. +/* Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. @@ -455,6 +455,85 @@ do_test (void) CHK_FAIL_END #endif + rewind (stdin); + + if (fgets (buf, sizeof (buf), stdin) != buf + || memcmp (buf, "abcdefgh\n", 10)) + FAIL (); + if (fgets (buf, sizeof (buf), stdin) != buf || memcmp (buf, "ABCDEFGHI", 10)) + FAIL (); + +#if __USE_FORTIFY_LEVEL >= 1 + CHK_FAIL_START + if (fgets (buf, sizeof (buf) + 1, stdin) != buf) + FAIL (); + CHK_FAIL_END +#endif + + rewind (stdin); + + if (fgets_unlocked (buf, sizeof (buf), stdin) != buf + || memcmp (buf, "abcdefgh\n", 10)) + FAIL (); + if (fgets_unlocked (buf, sizeof (buf), stdin) != buf + || memcmp (buf, "ABCDEFGHI", 10)) + FAIL (); + +#if __USE_FORTIFY_LEVEL >= 1 + CHK_FAIL_START + if (fgets_unlocked (buf, sizeof (buf) + 1, stdin) != buf) + FAIL (); + CHK_FAIL_END +#endif + + lseek (fileno (stdin), 0, SEEK_SET); + + if (read (fileno (stdin), buf, sizeof (buf) - 1) != sizeof (buf) - 1 + || memcmp (buf, "abcdefgh\n", 9)) + FAIL (); + if (read (fileno (stdin), buf, sizeof (buf) - 1) != sizeof (buf) - 1 + || memcmp (buf, "ABCDEFGHI", 9)) + FAIL (); + +#if __USE_FORTIFY_LEVEL >= 1 + CHK_FAIL_START + if (read (fileno (stdin), buf, sizeof (buf) + 1) != sizeof (buf) + 1) + FAIL (); + CHK_FAIL_END +#endif + + if (pread (fileno (stdin), buf, sizeof (buf) - 1, 0) != sizeof (buf) - 1 + || memcmp (buf, "abcdefgh\n", 9)) + FAIL (); + if (pread (fileno (stdin), buf, sizeof (buf) - 1, sizeof (buf) - 1) + != sizeof (buf) - 1 + || memcmp (buf, "ABCDEFGHI", 9)) + FAIL (); + +#if __USE_FORTIFY_LEVEL >= 1 + CHK_FAIL_START + if (pread (fileno (stdin), buf, sizeof (buf) + 1, 2 * sizeof (buf)) + != sizeof (buf) + 1) + FAIL (); + CHK_FAIL_END +#endif + + if (pread64 (fileno (stdin), buf, sizeof (buf) - 1, 0) != sizeof (buf) - 1 + || memcmp (buf, "abcdefgh\n", 9)) + FAIL (); + if (pread64 (fileno (stdin), buf, sizeof (buf) - 1, sizeof (buf) - 1) + != sizeof (buf) - 1 + || memcmp (buf, "ABCDEFGHI", 9)) + FAIL (); + +#if __USE_FORTIFY_LEVEL >= 1 + CHK_FAIL_START + if (pread64 (fileno (stdin), buf, sizeof (buf) + 1, 2 * (sizeof (buf) - 1)) + != sizeof (buf) + 1) + FAIL (); + CHK_FAIL_END +#endif + if (freopen (temp_filename, "r", stdin) == NULL) { puts ("could not open temporary file"); diff --git a/debug/warning-nop.c b/debug/warning-nop.c new file mode 100644 index 0000000000..b4ebbac4dd --- /dev/null +++ b/debug/warning-nop.c @@ -0,0 +1,40 @@ +/* Dummy nop functions to elicit link-time warnings. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <sys/cdefs.h> + +static void +nop (void) +{ +} + +/* Don't insert any other #include's before this #undef! */ + +#undef __warndecl +#define __warndecl(name, msg) \ + extern void name (void) __attribute__ ((alias ("nop"))) attribute_hidden; \ + link_warning (name, msg) + +#undef __USE_FORTIFY_LEVEL +#define __USE_FORTIFY_LEVEL 99 + +/* Following here we need an #include for each public header file + that uses __warndecl. */ + +#include <string.h> diff --git a/dlfcn/dlerror.c b/dlfcn/dlerror.c index 8789f4f68b..1254381f2b 100644 --- a/dlfcn/dlerror.c +++ b/dlfcn/dlerror.c @@ -1,5 +1,5 @@ /* Return error detail for failing <dlfcn.h> functions. - Copyright (C) 1995-2000,2002,2003,2004 Free Software Foundation, Inc. + Copyright (C) 1995-2000,2002,2003,2004,2005 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 @@ -180,13 +180,30 @@ init (void) static_buf = &last_result; } + +static void +check_free (struct dl_action_result *rec) +{ + if (rec->errstring != NULL + && strcmp (rec->errstring, "out of memory") != 0) + { + /* We can free the string only if the allocation happened in the + C library used by the dynamic linker. This means, it is + always the C library in the base namespave. */ + struct link_map *map = NULL; + Dl_info info; + if (_dl_addr (check_free, &info, &map, NULL) != 0 + && map != NULL && map->l_ns == 0) + free ((char *) rec->errstring); + } +} + + static void __attribute__ ((destructor)) fini (void) { - if (last_result.errstring != NULL - && strcmp (last_result.errstring, "out of memory") != 0) - free ((char *) last_result.errstring); + check_free (&last_result); } @@ -194,11 +211,7 @@ fini (void) static void free_key_mem (void *mem) { - struct dl_action_result *result = (struct dl_action_result *) mem; - - if (result->errstring != NULL - && strcmp (result->errstring, "out of memory") != 0) - free ((char *) result->errstring); + check_free ((struct dl_action_result *) mem); free (mem); __libc_setspecific (key, NULL); diff --git a/elf/Makefile b/elf/Makefile index 47e6ea4d58..8a8bb3a239 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -141,7 +141,10 @@ tests-static = tst-tls1-static tst-tls2-static ifeq (yesyesyes,$(build-static)$(build-shared)$(elf)) tests-static += tst-tls9-static tst-tls9-static-ENV = \ - LD_LIBRARY_PATH=$(objpfx):$(common-objpfx):$(common-objpfx)dlfcn + LD_LIBRARY_PATH=$(objpfx):$(common-objpfx):$(common-objpfx)dlfcn +endif +ifeq (yes,$(have-initfini-array)) +tests-static += tst-array1-static endif tests += $(tests-static) endif @@ -701,6 +704,10 @@ $(objpfx)tst-array1.out: $(objpfx)tst-array1 $(objpfx)tst-array1 > $@ cmp $@ tst-array1.exp > /dev/null +$(objpfx)tst-array1-static.out: $(objpfx)tst-array1-static + $(objpfx)tst-array1-static > $@ + cmp $@ tst-array1.exp > /dev/null + $(objpfx)tst-array2: $(objpfx)tst-array2dep.so $(objpfx)tst-array2.out: $(objpfx)tst-array2 $(elf-objpfx)$(rtld-installed-name) \ diff --git a/elf/dl-addr.c b/elf/dl-addr.c index 685cab9be8..c56736ceb1 100644 --- a/elf/dl-addr.c +++ b/elf/dl-addr.c @@ -1,5 +1,5 @@ /* Locate the shared object symbol nearest a given address. - Copyright (C) 1996-2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1996-2004, 2005 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 @@ -28,16 +28,12 @@ _dl_addr (const void *address, Dl_info *info, struct link_map **mapp, const ElfW(Sym) **symbolp) { const ElfW(Addr) addr = DL_LOOKUP_ADDRESS (address); - struct link_map *match; - const ElfW(Sym) *symtab, *matchsym, *symtabend; - const char *strtab; - ElfW(Word) strtabsize; /* Protect against concurrent loads and unloads. */ __rtld_lock_lock_recursive (GL(dl_load_lock)); /* Find the highest-addressed object that ADDRESS is not below. */ - match = NULL; + struct link_map *match = NULL; for (Lmid_t ns = 0; ns < DL_NNS; ++ns) for (struct link_map *l = GL(dl_ns)[ns]._ns_loaded; l; l = l->l_next) if (addr >= l->l_map_start && addr < l->l_map_end) @@ -72,11 +68,12 @@ _dl_addr (const void *address, Dl_info *info, && match->l_type == lt_executable) info->dli_fname = _dl_argv[0]; - symtab = (const void *) D_PTR (match, l_info[DT_SYMTAB]); - strtab = (const void *) D_PTR (match, l_info[DT_STRTAB]); + const ElfW(Sym) *symtab = D_PTR (match, l_info[DT_SYMTAB]); + const char *strtab = (const char *) D_PTR (match, l_info[DT_STRTAB]); - strtabsize = match->l_info[DT_STRSZ]->d_un.d_val; + ElfW(Word) strtabsize = match->l_info[DT_STRSZ]->d_un.d_val; + const ElfW(Sym) *symtabend; if (match->l_info[DT_HASH] != NULL) symtabend = (symtab + ((Elf_Symndx *) D_PTR (match, l_info[DT_HASH]))[1]); @@ -90,6 +87,7 @@ _dl_addr (const void *address, Dl_info *info, /* We assume that the string table follows the symbol table, because there is no way in ELF to know the size of the dynamic symbol table!! */ + const ElfW(Sym) *matchsym; for (matchsym = NULL; (void *) symtab < (void *) symtabend; ++symtab) if (addr >= match->l_addr + symtab->st_value #if defined USE_TLS diff --git a/elf/dl-load.c b/elf/dl-load.c index 088b2224e2..97e1e0089c 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -110,6 +110,8 @@ int __stack_prot attribute_hidden attribute_relro = PROT_GROWSDOWN; #elif _STACK_GROWS_UP && defined PROT_GROWSUP = PROT_GROWSUP; +#else + = 0; #endif diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c index fdb076951d..24fc89af10 100644 --- a/elf/dl-lookup.c +++ b/elf/dl-lookup.c @@ -1,5 +1,5 @@ /* Look up a symbol in the loaded objects. - Copyright (C) 1995-2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1995-2002, 2003, 2004, 2005 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 @@ -395,11 +395,13 @@ _dl_debug_bindings (const char *undef_name, struct link_map *undef_map, if (GLRO(dl_debug_mask) & DL_DEBUG_BINDINGS) { - _dl_debug_printf ("binding file %s to %s: %s symbol `%s'", + _dl_debug_printf ("binding file %s [%lu] to %s [%lu]: %s symbol `%s'", (reference_name[0] ? reference_name : (rtld_progname ?: "<main program>")), + undef_map->l_ns, value->m->l_name[0] ? value->m->l_name : rtld_progname, + value->m->l_ns, protected ? "protected" : "normal", undef_name); if (version) _dl_debug_printf_c (" [%s]\n", version->name); diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c index b680683198..2d309fb210 100644 --- a/elf/dl-reloc.c +++ b/elf/dl-reloc.c @@ -1,5 +1,5 @@ /* Relocate a shared object and resolve its references to other loaded objects. - Copyright (C) 1995-2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1995-2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -124,8 +124,10 @@ _dl_nothread_init_static_tls (struct link_map *map) # endif /* Fill in the DTV slot so that a later LD/GD access will find it. */ - THREAD_DTV ()[map->l_tls_modid].pointer.val = dest; - THREAD_DTV ()[map->l_tls_modid].pointer.is_static = true; + dtv_t *dtv = THREAD_DTV (); + assert (map->l_tls_modid <= dtv[-1].counter); + dtv[map->l_tls_modid].pointer.val = dest; + dtv[map->l_tls_modid].pointer.is_static = true; /* Initialize the memory. */ memset (__mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size), diff --git a/elf/dynamic-link.h b/elf/dynamic-link.h index 5118144174..1d6806f50c 100644 --- a/elf/dynamic-link.h +++ b/elf/dynamic-link.h @@ -1,5 +1,5 @@ /* Inline functions for dynamic linking. - Copyright (C) 1995-2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1995-2002, 2003, 2004, 2005 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 @@ -31,20 +31,24 @@ optimizing away alignment tests or using word instructions for copying memory, breaking the very code written to handle the unaligned cases. */ +# if ! ELF_MACHINE_NO_REL auto void __attribute__((always_inline)) elf_machine_rel (struct link_map *map, const ElfW(Rel) *reloc, const ElfW(Sym) *sym, const struct r_found_version *version, void *const reloc_addr); auto void __attribute__((always_inline)) +elf_machine_rel_relative (ElfW(Addr) l_addr, const ElfW(Rel) *reloc, + void *const reloc_addr); +# endif +# if ! ELF_MACHINE_NO_RELA +auto void __attribute__((always_inline)) elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, const ElfW(Sym) *sym, const struct r_found_version *version, void *const reloc_addr); auto void __attribute__((always_inline)) -elf_machine_rel_relative (ElfW(Addr) l_addr, const ElfW(Rel) *reloc, - void *const reloc_addr); -auto void __attribute__((always_inline)) elf_machine_rela_relative (ElfW(Addr) l_addr, const ElfW(Rela) *reloc, void *const reloc_addr); +# endif # if ELF_MACHINE_NO_RELA || defined ELF_MACHINE_PLT_REL auto void __attribute__((always_inline)) elf_machine_lazy_rel (struct link_map *map, diff --git a/elf/tst-array1-static.c b/elf/tst-array1-static.c new file mode 100644 index 0000000000..21539a4212 --- /dev/null +++ b/elf/tst-array1-static.c @@ -0,0 +1 @@ +#include "tst-array1.c" diff --git a/fedora/branch.mk b/fedora/branch.mk index 2ec1f17148..f528e06674 100644 --- a/fedora/branch.mk +++ b/fedora/branch.mk @@ -1,5 +1,5 @@ # This file is updated automatically by Makefile. glibc-branch := fedora glibc-base := HEAD -fedora-sync-date := 2005-02-11 10:37 UTC -fedora-sync-tag := fedora-glibc-20050211T1037 +fedora-sync-date := 2005-03-02 18:20 UTC +fedora-sync-tag := fedora-glibc-20050302T1820 diff --git a/iconv/gconv_open.c b/iconv/gconv_open.c index 90da784f78..b23ab44e4e 100644 --- a/iconv/gconv_open.c +++ b/iconv/gconv_open.c @@ -1,5 +1,6 @@ /* Find matching transformation algorithms and initialize steps. - Copyright (C) 1997, 1998, 1999, 2000, 2001, 2004 Free Software Foundation, Inc. + Copyright (C) 1997,1998,1999,2000,2001,2004,2005 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -279,7 +280,7 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle, /* Allocate the buffer. */ size = (GCONV_NCHAR_GOAL * steps[cnt].__max_needed_to); - result->__data[cnt].__outbuf = (char *) malloc (size); + result->__data[cnt].__outbuf = malloc (size); if (result->__data[cnt].__outbuf == NULL) { res = __GCONV_NOMEM; diff --git a/iconvdata/Makefile b/iconvdata/Makefile index ceefe840a5..a45c7a9b3d 100644 --- a/iconvdata/Makefile +++ b/iconvdata/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1997-2002, 2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 1997-2004, 2005 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 @@ -51,7 +51,9 @@ modules := ISO8859-1 ISO8859-2 ISO8859-3 ISO8859-4 ISO8859-5 \ GB18030 ISO-2022-CN-EXT VISCII GBBIG5 CP10007 KOI8-T \ GEORGIAN-PS GEORGIAN-ACADEMY ISO-IR-209 MAC-SAMI ARMSCII-8 \ TCVN5712-1 libJISX0213 EUC-JISX0213 SHIFT_JISX0213 \ - ISO-2022-JP-3 TSCII IBM866NAV CP932 EUC-JP-MS PT154 RK1048 + ISO-2022-JP-3 TSCII IBM866NAV CP932 EUC-JP-MS PT154 RK1048 \ + IBM1025 IBM1122 IBM1137 IBM1153 IBM1154 IBM1155 IBM1156 \ + IBM1157 IBM1158 modules.so := $(addsuffix .so, $(modules)) @@ -172,7 +174,10 @@ distribute := gconv-modules extra-module.mk gap.awk gaptab.awk gconv.map \ mac-sami.c ibm1160.c ibm1160.h ibm1161.c ibm1161.h \ ibm1163.c ibm1163.h ibm1164.c ibm1164.h jisx0213.c jisx0213.h \ euc-jisx0213.c shift_jisx0213.c iso-2022-jp-3.c \ - tcvn5712-1.c armscii-8.c tscii.c ibm866nav.c pt154.c rk1048.c + tcvn5712-1.c armscii-8.c tscii.c ibm866nav.c pt154.c rk1048.c \ + ibm1025.c ibm1025.h ibm1122.c ibm1122.h ibm1137.c ibm1137.h \ + ibm1153.c ibm1153.h ibm1154.c ibm1154.h ibm1155.c ibm1155.h \ + ibm1156.c ibm1156.h ibm1157.c ibm1157.h ibm1158.c ibm1158.h # We build the transformation modules only when we build shared libs. ifeq (yes,$(build-shared)) diff --git a/iconvdata/TESTS b/iconvdata/TESTS index 57e86ac37e..8ff19125c3 100644 --- a/iconvdata/TESTS +++ b/iconvdata/TESTS @@ -1,5 +1,5 @@ # Available tests for iconv(1) (and therefore iconv(3)) in GNU libc. -# Copyright (C) 1998-2002 Free Software Foundation, Inc. +# Copyright (C) 1998-2002, 2005 Free Software Foundation, Inc. # This file is part of the GNU C Library. # Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. # @@ -119,3 +119,12 @@ EUC-JISX0213 EUC-JISX0213 Y UTF8 SHIFT_JISX0213 SHIFT_JISX0213 Y UTF8 ISO-2022-JP-3 ISO-2022-JP-3 N UTF8 TSCII TSCII Y UTF8 +IBM1025 IBM1025 N UTF8 +IBM1122 IBM1122 N UTF8 +IBM1137 IBM1137 N UTF8 +IBM1153 IBM1153 N UTF8 +IBM1154 IBM1154 N UTF8 +IBM1155 IBM1155 N UTF8 +IBM1156 IBM1156 N UTF8 +IBM1157 IBM1157 N UTF8 +IBM1158 IBM1158 N UTF8 diff --git a/iconvdata/gconv-modules b/iconvdata/gconv-modules index 1bf24413b3..75d4228497 100644 --- a/iconvdata/gconv-modules +++ b/iconvdata/gconv-modules @@ -1,7 +1,6 @@ # GNU libc iconv configuration. -# Copyright (C) 1997-2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 1997-2004, 2005 Free Software Foundation, Inc. # This file is part of the GNU C Library. -# # The GNU C Library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public @@ -1572,3 +1571,73 @@ module INTERNAL PT154// PT154 1 alias STRK1048-2002// RK1048// module RK1048// INTERNAL RK1048 1 module INTERNAL RK1048// RK1048 1 + +# from to module cost +alias IBM-1025// IBM1025// +alias CP1025// IBM1025// +alias CSIBM1025// IBM1025// +module IBM1025// INTERNAL IBM1025 1 +module INTERNAL IBM1025// IBM1025 1 + +# from to module cost +alias IBM-1122// IBM1122// +alias CP1122// IBM1122// +alias CSIBM1122// IBM1122// +module IBM1122// INTERNAL IBM1122 1 +module INTERNAL IBM1122// IBM1122 1 + +# from to module cost +alias IBM-1137// IBM1137// +alias CP1137// IBM1137// +alias CSIBM1137// IBM1137// +module IBM1137// INTERNAL IBM1137 1 +module INTERNAL IBM1137// IBM1137 1 + +# from to module cost +alias IBM-1153// IBM1153// +alias CP1153// IBM1153// +alias CSIBM1153// IBM1153// +module IBM1153// INTERNAL IBM1153 1 +module INTERNAL IBM1153// IBM1153 1 + +# from to module cost +alias IBM-1154// IBM1154// +alias CP1154// IBM1154// +alias CSIBM1154// IBM1154// +module IBM1154// INTERNAL IBM1154 1 +module INTERNAL IBM1154// IBM1154 1 + +# from to module cost +alias IBM-1155// IBM1155// +alias CP1155// IBM1155// +alias CSIBM1155// IBM1155// +module IBM1155// INTERNAL IBM1155 1 +module INTERNAL IBM1155// IBM1155 1 + +# from to module cost +alias IBM-1155// IBM1155// +alias CP1155// IBM1155// +alias CSIBM1155// IBM1155// +module IBM1155// INTERNAL IBM1155 1 +module INTERNAL IBM1155// IBM1155 1 + +# from to module cost +alias IBM-1156// IBM1156// +alias CP1156// IBM1156// +alias CSIBM1156// IBM1156// +module IBM1156// INTERNAL IBM1156 1 +module INTERNAL IBM1156// IBM1156 1 + +# from to module cost +alias IBM-1157// IBM1157// +alias CP1157// IBM1157// +alias CSIBM1157// IBM1157// +module IBM1157// INTERNAL IBM1157 1 +module INTERNAL IBM1157// IBM1157 1 + +# from to module cost +alias IBM-1158// IBM1158// +alias CP1158// IBM1158// +alias CSIBM1158// IBM1158// +module IBM1158// INTERNAL IBM1158 1 +module INTERNAL IBM1158// IBM1158 1 diff --git a/iconvdata/ibm1025.c b/iconvdata/ibm1025.c new file mode 100644 index 0000000000..65931912fa --- /dev/null +++ b/iconvdata/ibm1025.c @@ -0,0 +1,29 @@ +/* Conversion from and to IBM1025. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdint.h> + +/* Get the conversion table. */ +#define TABLES <ibm1025.h> + +#define CHARSET_NAME "IBM1025//" +#define HAS_HOLES 0 /* All 256 character are defined. */ + +#include <8bit-gap.c> diff --git a/iconvdata/ibm1025.h b/iconvdata/ibm1025.h new file mode 100644 index 0000000000..f608f4be42 --- /dev/null +++ b/iconvdata/ibm1025.h @@ -0,0 +1,133 @@ +/* Mapping table for IBM1025. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +static const uint32_t to_ucs4[256] = +{ + [0x00] = 0x0000, [0x01] = 0x0001, [0x02] = 0x0002, [0x03] = 0x0003, + [0x04] = 0x009c, [0x05] = 0x0009, [0x06] = 0x0086, [0x07] = 0x007f, + [0x08] = 0x0097, [0x09] = 0x008d, [0x0a] = 0x008e, [0x0b] = 0x000b, + [0x0c] = 0x000c, [0x0d] = 0x000d, [0x0e] = 0x000e, [0x0f] = 0x000f, + [0x10] = 0x0010, [0x11] = 0x0011, [0x12] = 0x0012, [0x13] = 0x0013, + [0x14] = 0x009d, [0x15] = 0x0085, [0x16] = 0x0008, [0x17] = 0x0087, + [0x18] = 0x0018, [0x19] = 0x0019, [0x1a] = 0x0092, [0x1b] = 0x008f, + [0x1c] = 0x001c, [0x1d] = 0x001d, [0x1e] = 0x001e, [0x1f] = 0x001f, + [0x20] = 0x0080, [0x21] = 0x0081, [0x22] = 0x0082, [0x23] = 0x0083, + [0x24] = 0x0084, [0x25] = 0x000a, [0x26] = 0x0017, [0x27] = 0x001b, + [0x28] = 0x0088, [0x29] = 0x0089, [0x2a] = 0x008a, [0x2b] = 0x008b, + [0x2c] = 0x008c, [0x2d] = 0x0005, [0x2e] = 0x0006, [0x2f] = 0x0007, + [0x30] = 0x0090, [0x31] = 0x0091, [0x32] = 0x0016, [0x33] = 0x0093, + [0x34] = 0x0094, [0x35] = 0x0095, [0x36] = 0x0096, [0x37] = 0x0004, + [0x38] = 0x0098, [0x39] = 0x0099, [0x3a] = 0x009a, [0x3b] = 0x009b, + [0x3c] = 0x0014, [0x3d] = 0x0015, [0x3e] = 0x009e, [0x3f] = 0x001a, + [0x40] = 0x0020, [0x41] = 0x00a0, [0x42] = 0x0452, [0x43] = 0x0453, + [0x44] = 0x0451, [0x45] = 0x0454, [0x46] = 0x0455, [0x47] = 0x0456, + [0x48] = 0x0457, [0x49] = 0x0458, [0x4a] = 0x005b, [0x4b] = 0x002e, + [0x4c] = 0x003c, [0x4d] = 0x0028, [0x4e] = 0x002b, [0x4f] = 0x0021, + [0x50] = 0x0026, [0x51] = 0x0459, [0x52] = 0x045a, [0x53] = 0x045b, + [0x54] = 0x045c, [0x55] = 0x045e, [0x56] = 0x045f, [0x57] = 0x042a, + [0x58] = 0x2116, [0x59] = 0x0402, [0x5a] = 0x005d, [0x5b] = 0x0024, + [0x5c] = 0x002a, [0x5d] = 0x0029, [0x5e] = 0x003b, [0x5f] = 0x005e, + [0x60] = 0x002d, [0x61] = 0x002f, [0x62] = 0x0403, [0x63] = 0x0401, + [0x64] = 0x0404, [0x65] = 0x0405, [0x66] = 0x0406, [0x67] = 0x0407, + [0x68] = 0x0408, [0x69] = 0x0409, [0x6a] = 0x007c, [0x6b] = 0x002c, + [0x6c] = 0x0025, [0x6d] = 0x005f, [0x6e] = 0x003e, [0x6f] = 0x003f, + [0x70] = 0x040a, [0x71] = 0x040b, [0x72] = 0x040c, [0x73] = 0x00ad, + [0x74] = 0x040e, [0x75] = 0x040f, [0x76] = 0x044e, [0x77] = 0x0430, + [0x78] = 0x0431, [0x79] = 0x0060, [0x7a] = 0x003a, [0x7b] = 0x0023, + [0x7c] = 0x0040, [0x7d] = 0x0027, [0x7e] = 0x003d, [0x7f] = 0x0022, + [0x80] = 0x0446, [0x81] = 0x0061, [0x82] = 0x0062, [0x83] = 0x0063, + [0x84] = 0x0064, [0x85] = 0x0065, [0x86] = 0x0066, [0x87] = 0x0067, + [0x88] = 0x0068, [0x89] = 0x0069, [0x8a] = 0x0434, [0x8b] = 0x0435, + [0x8c] = 0x0444, [0x8d] = 0x0433, [0x8e] = 0x0445, [0x8f] = 0x0438, + [0x90] = 0x0439, [0x91] = 0x006a, [0x92] = 0x006b, [0x93] = 0x006c, + [0x94] = 0x006d, [0x95] = 0x006e, [0x96] = 0x006f, [0x97] = 0x0070, + [0x98] = 0x0071, [0x99] = 0x0072, [0x9a] = 0x043a, [0x9b] = 0x043b, + [0x9c] = 0x043c, [0x9d] = 0x043d, [0x9e] = 0x043e, [0x9f] = 0x043f, + [0xa0] = 0x044f, [0xa1] = 0x007e, [0xa2] = 0x0073, [0xa3] = 0x0074, + [0xa4] = 0x0075, [0xa5] = 0x0076, [0xa6] = 0x0077, [0xa7] = 0x0078, + [0xa8] = 0x0079, [0xa9] = 0x007a, [0xaa] = 0x0440, [0xab] = 0x0441, + [0xac] = 0x0442, [0xad] = 0x0443, [0xae] = 0x0436, [0xaf] = 0x0432, + [0xb0] = 0x044c, [0xb1] = 0x044b, [0xb2] = 0x0437, [0xb3] = 0x0448, + [0xb4] = 0x044d, [0xb5] = 0x0449, [0xb6] = 0x0447, [0xb7] = 0x044a, + [0xb8] = 0x042e, [0xb9] = 0x0410, [0xba] = 0x0411, [0xbb] = 0x0426, + [0xbc] = 0x0414, [0xbd] = 0x0415, [0xbe] = 0x0424, [0xbf] = 0x0413, + [0xc0] = 0x007b, [0xc1] = 0x0041, [0xc2] = 0x0042, [0xc3] = 0x0043, + [0xc4] = 0x0044, [0xc5] = 0x0045, [0xc6] = 0x0046, [0xc7] = 0x0047, + [0xc8] = 0x0048, [0xc9] = 0x0049, [0xca] = 0x0425, [0xcb] = 0x0418, + [0xcc] = 0x0419, [0xcd] = 0x041a, [0xce] = 0x041b, [0xcf] = 0x041c, + [0xd0] = 0x007d, [0xd1] = 0x004a, [0xd2] = 0x004b, [0xd3] = 0x004c, + [0xd4] = 0x004d, [0xd5] = 0x004e, [0xd6] = 0x004f, [0xd7] = 0x0050, + [0xd8] = 0x0051, [0xd9] = 0x0052, [0xda] = 0x041d, [0xdb] = 0x041e, + [0xdc] = 0x041f, [0xdd] = 0x042f, [0xde] = 0x0420, [0xdf] = 0x0421, + [0xe0] = 0x005c, [0xe1] = 0x00a7, [0xe2] = 0x0053, [0xe3] = 0x0054, + [0xe4] = 0x0055, [0xe5] = 0x0056, [0xe6] = 0x0057, [0xe7] = 0x0058, + [0xe8] = 0x0059, [0xe9] = 0x005a, [0xea] = 0x0422, [0xeb] = 0x0423, + [0xec] = 0x0416, [0xed] = 0x0412, [0xee] = 0x042c, [0xef] = 0x042b, + [0xf0] = 0x0030, [0xf1] = 0x0031, [0xf2] = 0x0032, [0xf3] = 0x0033, + [0xf4] = 0x0034, [0xf5] = 0x0035, [0xf6] = 0x0036, [0xf7] = 0x0037, + [0xf8] = 0x0038, [0xf9] = 0x0039, [0xfa] = 0x0417, [0xfb] = 0x0428, + [0xfc] = 0x042d, [0xfd] = 0x0429, [0xfe] = 0x0427, [0xff] = 0x009f +}; + +static const struct gap from_idx[] = +{ + { start: 0x0000, end: 0x00a0, idx: 0 }, + { start: 0x00a7, end: 0x00ad, idx: -6 }, + { start: 0x0401, end: 0x045f, idx: -857 }, + { start: 0x2116, end: 0x2116, idx: -8207 }, + { start: 0xffff, end: 0xffff, idx: 0 } +}; + +static const char from_ucs4[] = +{ + '\x00', '\x01', '\x02', '\x03', '\x37', '\x2d', '\x2e', '\x2f', + '\x16', '\x05', '\x25', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + '\x10', '\x11', '\x12', '\x13', '\x3c', '\x3d', '\x32', '\x26', + '\x18', '\x19', '\x3f', '\x27', '\x1c', '\x1d', '\x1e', '\x1f', + '\x40', '\x4f', '\x7f', '\x7b', '\x5b', '\x6c', '\x50', '\x7d', + '\x4d', '\x5d', '\x5c', '\x4e', '\x6b', '\x60', '\x4b', '\x61', + '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', + '\xf8', '\xf9', '\x7a', '\x5e', '\x4c', '\x7e', '\x6e', '\x6f', + '\x7c', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', + '\xc8', '\xc9', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', + '\xd7', '\xd8', '\xd9', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', + '\xe7', '\xe8', '\xe9', '\x4a', '\xe0', '\x5a', '\x5f', '\x6d', + '\x79', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', + '\x97', '\x98', '\x99', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', + '\xa7', '\xa8', '\xa9', '\xc0', '\x6a', '\xd0', '\xa1', '\x07', + '\x20', '\x21', '\x22', '\x23', '\x24', '\x15', '\x06', '\x17', + '\x28', '\x29', '\x2a', '\x2b', '\x2c', '\x09', '\x0a', '\x1b', + '\x30', '\x31', '\x1a', '\x33', '\x34', '\x35', '\x36', '\x08', + '\x38', '\x39', '\x3a', '\x3b', '\x04', '\x14', '\x3e', '\xff', + '\x41', '\xe1', '\x00', '\x00', '\x00', '\x00', '\x00', '\x73', + '\x63', '\x59', '\x62', '\x64', '\x65', '\x66', '\x67', '\x68', + '\x69', '\x70', '\x71', '\x72', '\x00', '\x74', '\x75', '\xb9', + '\xba', '\xed', '\xbf', '\xbc', '\xbd', '\xec', '\xfa', '\xcb', + '\xcc', '\xcd', '\xce', '\xcf', '\xda', '\xdb', '\xdc', '\xde', + '\xdf', '\xea', '\xeb', '\xbe', '\xca', '\xbb', '\xfe', '\xfb', + '\xfd', '\x57', '\xef', '\xee', '\xfc', '\xb8', '\xdd', '\x77', + '\x78', '\xaf', '\x8d', '\x8a', '\x8b', '\xae', '\xb2', '\x8f', + '\x90', '\x9a', '\x9b', '\x9c', '\x9d', '\x9e', '\x9f', '\xaa', + '\xab', '\xac', '\xad', '\x8c', '\x8e', '\x80', '\xb6', '\xb3', + '\xb5', '\xb7', '\xb1', '\xb0', '\xb4', '\x76', '\xa0', '\x00', + '\x44', '\x42', '\x43', '\x45', '\x46', '\x47', '\x48', '\x49', + '\x51', '\x52', '\x53', '\x54', '\x00', '\x55', '\x56', '\x58' +}; diff --git a/iconvdata/ibm1122.c b/iconvdata/ibm1122.c new file mode 100644 index 0000000000..504972b791 --- /dev/null +++ b/iconvdata/ibm1122.c @@ -0,0 +1,29 @@ +/* Conversion from and to IBM1122. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdint.h> + +/* Get the conversion table. */ +#define TABLES <ibm1122.h> + +#define CHARSET_NAME "IBM1122//" +#define HAS_HOLES 0 /* All 256 character are defined. */ + +#include <8bit-gap.c> diff --git a/iconvdata/ibm1122.h b/iconvdata/ibm1122.h new file mode 100644 index 0000000000..b37c84ae00 --- /dev/null +++ b/iconvdata/ibm1122.h @@ -0,0 +1,133 @@ +/* Mapping table for IBM1122. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +static const uint32_t to_ucs4[256] = +{ + [0x00] = 0x0000, [0x01] = 0x0001, [0x02] = 0x0002, [0x03] = 0x0003, + [0x04] = 0x009c, [0x05] = 0x0009, [0x06] = 0x0086, [0x07] = 0x007f, + [0x08] = 0x0097, [0x09] = 0x008d, [0x0a] = 0x008e, [0x0b] = 0x000b, + [0x0c] = 0x000c, [0x0d] = 0x000d, [0x0e] = 0x000e, [0x0f] = 0x000f, + [0x10] = 0x0010, [0x11] = 0x0011, [0x12] = 0x0012, [0x13] = 0x0013, + [0x14] = 0x009d, [0x15] = 0x0085, [0x16] = 0x0008, [0x17] = 0x0087, + [0x18] = 0x0018, [0x19] = 0x0019, [0x1a] = 0x0092, [0x1b] = 0x008f, + [0x1c] = 0x001c, [0x1d] = 0x001d, [0x1e] = 0x001e, [0x1f] = 0x001f, + [0x20] = 0x0080, [0x21] = 0x0081, [0x22] = 0x0082, [0x23] = 0x0083, + [0x24] = 0x0084, [0x25] = 0x000a, [0x26] = 0x0017, [0x27] = 0x001b, + [0x28] = 0x0088, [0x29] = 0x0089, [0x2a] = 0x008a, [0x2b] = 0x008b, + [0x2c] = 0x008c, [0x2d] = 0x0005, [0x2e] = 0x0006, [0x2f] = 0x0007, + [0x30] = 0x0090, [0x31] = 0x0091, [0x32] = 0x0016, [0x33] = 0x0093, + [0x34] = 0x0094, [0x35] = 0x0095, [0x36] = 0x0096, [0x37] = 0x0004, + [0x38] = 0x0098, [0x39] = 0x0099, [0x3a] = 0x009a, [0x3b] = 0x009b, + [0x3c] = 0x0014, [0x3d] = 0x0015, [0x3e] = 0x009e, [0x3f] = 0x001a, + [0x40] = 0x0020, [0x41] = 0x00a0, [0x42] = 0x00e2, [0x43] = 0x007b, + [0x44] = 0x00e0, [0x45] = 0x00e1, [0x46] = 0x00e3, [0x47] = 0x007d, + [0x48] = 0x00e7, [0x49] = 0x00f1, [0x4a] = 0x00a7, [0x4b] = 0x002e, + [0x4c] = 0x003c, [0x4d] = 0x0028, [0x4e] = 0x002b, [0x4f] = 0x0021, + [0x50] = 0x0026, [0x51] = 0x0060, [0x52] = 0x00ea, [0x53] = 0x00eb, + [0x54] = 0x00e8, [0x55] = 0x00ed, [0x56] = 0x00ee, [0x57] = 0x00ef, + [0x58] = 0x00ec, [0x59] = 0x00df, [0x5a] = 0x00a4, [0x5b] = 0x00c5, + [0x5c] = 0x002a, [0x5d] = 0x0029, [0x5e] = 0x003b, [0x5f] = 0x005e, + [0x60] = 0x002d, [0x61] = 0x002f, [0x62] = 0x00c2, [0x63] = 0x0023, + [0x64] = 0x00c0, [0x65] = 0x00c1, [0x66] = 0x00c3, [0x67] = 0x0024, + [0x68] = 0x00c7, [0x69] = 0x00d1, [0x6a] = 0x00f6, [0x6b] = 0x002c, + [0x6c] = 0x0025, [0x6d] = 0x005f, [0x6e] = 0x003e, [0x6f] = 0x003f, + [0x70] = 0x00f8, [0x71] = 0x005c, [0x72] = 0x00ca, [0x73] = 0x00cb, + [0x74] = 0x00c8, [0x75] = 0x00cd, [0x76] = 0x00ce, [0x77] = 0x00cf, + [0x78] = 0x00cc, [0x79] = 0x00e9, [0x7a] = 0x003a, [0x7b] = 0x00c4, + [0x7c] = 0x00d6, [0x7d] = 0x0027, [0x7e] = 0x003d, [0x7f] = 0x0022, + [0x80] = 0x00d8, [0x81] = 0x0061, [0x82] = 0x0062, [0x83] = 0x0063, + [0x84] = 0x0064, [0x85] = 0x0065, [0x86] = 0x0066, [0x87] = 0x0067, + [0x88] = 0x0068, [0x89] = 0x0069, [0x8a] = 0x00ab, [0x8b] = 0x00bb, + [0x8c] = 0x0161, [0x8d] = 0x00fd, [0x8e] = 0x017e, [0x8f] = 0x00b1, + [0x90] = 0x00b0, [0x91] = 0x006a, [0x92] = 0x006b, [0x93] = 0x006c, + [0x94] = 0x006d, [0x95] = 0x006e, [0x96] = 0x006f, [0x97] = 0x0070, + [0x98] = 0x0071, [0x99] = 0x0072, [0x9a] = 0x00aa, [0x9b] = 0x00ba, + [0x9c] = 0x00e6, [0x9d] = 0x00b8, [0x9e] = 0x00c6, [0x9f] = 0x005d, + [0xa0] = 0x00b5, [0xa1] = 0x00fc, [0xa2] = 0x0073, [0xa3] = 0x0074, + [0xa4] = 0x0075, [0xa5] = 0x0076, [0xa6] = 0x0077, [0xa7] = 0x0078, + [0xa8] = 0x0079, [0xa9] = 0x007a, [0xaa] = 0x00a1, [0xab] = 0x00bf, + [0xac] = 0x0160, [0xad] = 0x00dd, [0xae] = 0x017d, [0xaf] = 0x00ae, + [0xb0] = 0x00a2, [0xb1] = 0x00a3, [0xb2] = 0x00a5, [0xb3] = 0x00b7, + [0xb4] = 0x00a9, [0xb5] = 0x005b, [0xb6] = 0x00b6, [0xb7] = 0x00bc, + [0xb8] = 0x00bd, [0xb9] = 0x00be, [0xba] = 0x00ac, [0xbb] = 0x007c, + [0xbc] = 0x00af, [0xbd] = 0x00a8, [0xbe] = 0x00b4, [0xbf] = 0x00d7, + [0xc0] = 0x00e4, [0xc1] = 0x0041, [0xc2] = 0x0042, [0xc3] = 0x0043, + [0xc4] = 0x0044, [0xc5] = 0x0045, [0xc6] = 0x0046, [0xc7] = 0x0047, + [0xc8] = 0x0048, [0xc9] = 0x0049, [0xca] = 0x00ad, [0xcb] = 0x00f4, + [0xcc] = 0x00a6, [0xcd] = 0x00f2, [0xce] = 0x00f3, [0xcf] = 0x00f5, + [0xd0] = 0x00e5, [0xd1] = 0x004a, [0xd2] = 0x004b, [0xd3] = 0x004c, + [0xd4] = 0x004d, [0xd5] = 0x004e, [0xd6] = 0x004f, [0xd7] = 0x0050, + [0xd8] = 0x0051, [0xd9] = 0x0052, [0xda] = 0x00b9, [0xdb] = 0x00fb, + [0xdc] = 0x007e, [0xdd] = 0x00f9, [0xde] = 0x00fa, [0xdf] = 0x00ff, + [0xe0] = 0x00c9, [0xe1] = 0x00f7, [0xe2] = 0x0053, [0xe3] = 0x0054, + [0xe4] = 0x0055, [0xe5] = 0x0056, [0xe6] = 0x0057, [0xe7] = 0x0058, + [0xe8] = 0x0059, [0xe9] = 0x005a, [0xea] = 0x00b2, [0xeb] = 0x00d4, + [0xec] = 0x0040, [0xed] = 0x00d2, [0xee] = 0x00d3, [0xef] = 0x00d5, + [0xf0] = 0x0030, [0xf1] = 0x0031, [0xf2] = 0x0032, [0xf3] = 0x0033, + [0xf4] = 0x0034, [0xf5] = 0x0035, [0xf6] = 0x0036, [0xf7] = 0x0037, + [0xf8] = 0x0038, [0xf9] = 0x0039, [0xfa] = 0x00b3, [0xfb] = 0x00db, + [0xfc] = 0x00dc, [0xfd] = 0x00d9, [0xfe] = 0x00da, [0xff] = 0x009f +}; + +static const struct gap from_idx[] = +{ + { start: 0x0000, end: 0x00ff, idx: 0 }, + { start: 0x0160, end: 0x0161, idx: -96 }, + { start: 0x017d, end: 0x017e, idx: -123 }, + { start: 0x203e, end: 0x203e, idx: -7994 }, + { start: 0xffff, end: 0xffff, idx: 0 } +}; + +static const char from_ucs4[] = +{ + '\x00', '\x01', '\x02', '\x03', '\x37', '\x2d', '\x2e', '\x2f', + '\x16', '\x05', '\x25', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + '\x10', '\x11', '\x12', '\x13', '\x3c', '\x3d', '\x32', '\x26', + '\x18', '\x19', '\x3f', '\x27', '\x1c', '\x1d', '\x1e', '\x1f', + '\x40', '\x4f', '\x7f', '\x63', '\x67', '\x6c', '\x50', '\x7d', + '\x4d', '\x5d', '\x5c', '\x4e', '\x6b', '\x60', '\x4b', '\x61', + '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', + '\xf8', '\xf9', '\x7a', '\x5e', '\x4c', '\x7e', '\x6e', '\x6f', + '\xec', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', + '\xc8', '\xc9', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', + '\xd7', '\xd8', '\xd9', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', + '\xe7', '\xe8', '\xe9', '\xb5', '\x71', '\x9f', '\x5f', '\x6d', + '\x51', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', + '\x97', '\x98', '\x99', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', + '\xa7', '\xa8', '\xa9', '\x43', '\xbb', '\x47', '\xdc', '\x07', + '\x20', '\x21', '\x22', '\x23', '\x24', '\x15', '\x06', '\x17', + '\x28', '\x29', '\x2a', '\x2b', '\x2c', '\x09', '\x0a', '\x1b', + '\x30', '\x31', '\x1a', '\x33', '\x34', '\x35', '\x36', '\x08', + '\x38', '\x39', '\x3a', '\x3b', '\x04', '\x14', '\x3e', '\xff', + '\x41', '\xaa', '\xb0', '\xb1', '\x5a', '\xb2', '\xcc', '\x4a', + '\xbd', '\xb4', '\x9a', '\x8a', '\xba', '\xca', '\xaf', '\xbc', + '\x90', '\x8f', '\xea', '\xfa', '\xbe', '\xa0', '\xb6', '\xb3', + '\x9d', '\xda', '\x9b', '\x8b', '\xb7', '\xb8', '\xb9', '\xab', + '\x64', '\x65', '\x62', '\x66', '\x7b', '\x5b', '\x9e', '\x68', + '\x74', '\xe0', '\x72', '\x73', '\x78', '\x75', '\x76', '\x77', + '\x00', '\x69', '\xed', '\xee', '\xeb', '\xef', '\x7c', '\xbf', + '\x80', '\xfd', '\xfe', '\xfb', '\xfc', '\xad', '\x00', '\x59', + '\x44', '\x45', '\x42', '\x46', '\xc0', '\xd0', '\x9c', '\x48', + '\x54', '\x79', '\x52', '\x53', '\x58', '\x55', '\x56', '\x57', + '\x00', '\x49', '\xcd', '\xce', '\xcb', '\xcf', '\x6a', '\xe1', + '\x70', '\xdd', '\xde', '\xdb', '\xa1', '\x8d', '\x00', '\xdf', + '\xac', '\x8c', '\xae', '\x8e', '\xbc' +}; diff --git a/iconvdata/ibm1137.c b/iconvdata/ibm1137.c new file mode 100644 index 0000000000..54df85b0ff --- /dev/null +++ b/iconvdata/ibm1137.c @@ -0,0 +1,29 @@ +/* Conversion from and to IBM1137. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdint.h> + +/* Get the conversion table. */ +#define TABLES <ibm1137.h> + +#define CHARSET_NAME "IBM1137//" +#define HAS_HOLES 1 /* Not all 256 character are defined. */ + +#include <8bit-gap.c> diff --git a/iconvdata/ibm1137.h b/iconvdata/ibm1137.h new file mode 100644 index 0000000000..3d0f5dd1b7 --- /dev/null +++ b/iconvdata/ibm1137.h @@ -0,0 +1,133 @@ +/* Mapping table for IBM1137. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +static const uint32_t to_ucs4[256] = +{ + [0x00] = 0x0000, [0x01] = 0x0001, [0x02] = 0x0002, [0x03] = 0x0003, + [0x04] = 0x009c, [0x05] = 0x0009, [0x06] = 0x0086, [0x07] = 0x007f, + [0x08] = 0x0097, [0x09] = 0x008d, [0x0a] = 0x008e, [0x0b] = 0x000b, + [0x0c] = 0x000c, [0x0d] = 0x000d, [0x0e] = 0x000e, [0x0f] = 0x000f, + [0x10] = 0x0010, [0x11] = 0x0011, [0x12] = 0x0012, [0x13] = 0x0013, + [0x14] = 0x009d, [0x15] = 0x0085, [0x16] = 0x0008, [0x17] = 0x0087, + [0x18] = 0x0018, [0x19] = 0x0019, [0x1a] = 0x0092, [0x1b] = 0x008f, + [0x1c] = 0x001c, [0x1d] = 0x001d, [0x1e] = 0x001e, [0x1f] = 0x001f, + [0x20] = 0x0080, [0x21] = 0x0081, [0x22] = 0x0082, [0x23] = 0x0083, + [0x24] = 0x0084, [0x25] = 0x000a, [0x26] = 0x0017, [0x27] = 0x001b, + [0x28] = 0x0088, [0x29] = 0x0089, [0x2a] = 0x008a, [0x2b] = 0x008b, + [0x2c] = 0x008c, [0x2d] = 0x0005, [0x2e] = 0x0006, [0x2f] = 0x0007, + [0x30] = 0x0090, [0x31] = 0x0091, [0x32] = 0x0016, [0x33] = 0x0093, + [0x34] = 0x0094, [0x35] = 0x0095, [0x36] = 0x0096, [0x37] = 0x0004, + [0x38] = 0x0098, [0x39] = 0x0099, [0x3a] = 0x009a, [0x3b] = 0x009b, + [0x3c] = 0x0014, [0x3d] = 0x0015, [0x3e] = 0x009e, [0x3f] = 0x001a, + [0x40] = 0x0020, [0x41] = 0x00a0, [0x42] = 0x0901, [0x43] = 0x0902, + [0x44] = 0x0903, [0x45] = 0x0905, [0x46] = 0x0906, [0x47] = 0x0907, + [0x48] = 0x0908, [0x49] = 0x0909, [0x4a] = 0x090a, [0x4b] = 0x002e, + [0x4c] = 0x003c, [0x4d] = 0x0028, [0x4e] = 0x002b, [0x4f] = 0x007c, + [0x50] = 0x0026, [0x51] = 0x090b, [0x52] = 0x090c, [0x53] = 0x090d, + [0x54] = 0x090e, [0x55] = 0x090f, [0x56] = 0x0910, [0x57] = 0x0911, + [0x58] = 0x0912, [0x59] = 0x0913, [0x5a] = 0x0021, [0x5b] = 0x0024, + [0x5c] = 0x002a, [0x5d] = 0x0029, [0x5e] = 0x003b, [0x5f] = 0x005e, + [0x60] = 0x002d, [0x61] = 0x002f, [0x62] = 0x0914, [0x63] = 0x0915, + [0x64] = 0x0916, [0x65] = 0x0917, [0x66] = 0x0918, [0x67] = 0x0919, + [0x68] = 0x091a, [0x69] = 0x091b, [0x6a] = 0x091c, [0x6b] = 0x002c, + [0x6c] = 0x0025, [0x6d] = 0x005f, [0x6e] = 0x003e, [0x6f] = 0x003f, + [0x70] = 0x091d, [0x71] = 0x091e, [0x72] = 0x091f, [0x73] = 0x0920, + [0x74] = 0x0921, [0x75] = 0x0922, [0x76] = 0x0923, [0x77] = 0x0924, + [0x78] = 0x0925, [0x79] = 0x0060, [0x7a] = 0x003a, [0x7b] = 0x0023, + [0x7c] = 0x0040, [0x7d] = 0x0027, [0x7e] = 0x003d, [0x7f] = 0x0022, + [0x80] = 0x0926, [0x81] = 0x0061, [0x82] = 0x0062, [0x83] = 0x0063, + [0x84] = 0x0064, [0x85] = 0x0065, [0x86] = 0x0066, [0x87] = 0x0067, + [0x88] = 0x0068, [0x89] = 0x0069, [0x8a] = 0x0927, [0x8b] = 0x0928, + [0x8c] = 0x092a, [0x8d] = 0x092b, [0x8e] = 0x092c, [0x8f] = 0x092d, + [0x90] = 0x092e, [0x91] = 0x006a, [0x92] = 0x006b, [0x93] = 0x006c, + [0x94] = 0x006d, [0x95] = 0x006e, [0x96] = 0x006f, [0x97] = 0x0070, + [0x98] = 0x0071, [0x99] = 0x0072, [0x9a] = 0x092f, [0x9b] = 0x0930, + [0x9c] = 0x0932, [0x9d] = 0x0933, [0x9e] = 0x0935, [0x9f] = 0x0936, + [0xa0] = 0x200c, [0xa1] = 0x007e, [0xa2] = 0x0073, [0xa3] = 0x0074, + [0xa4] = 0x0075, [0xa5] = 0x0076, [0xa6] = 0x0077, [0xa7] = 0x0078, + [0xa8] = 0x0079, [0xa9] = 0x007a, [0xaa] = 0x0937, [0xab] = 0x0938, + [0xac] = 0x0939, [0xad] = 0x005b, [0xae] = 0x093c, [0xaf] = 0x093d, + [0xb0] = 0x093e, [0xb1] = 0x093f, [0xb2] = 0x0940, [0xb3] = 0x0941, + [0xb4] = 0x0942, [0xb5] = 0x0943, [0xb6] = 0x0944, [0xb7] = 0x0945, + [0xb8] = 0x0946, [0xb9] = 0x0947, [0xba] = 0x0948, [0xbb] = 0x0949, + [0xbc] = 0x094a, [0xbd] = 0x005d, [0xbe] = 0x094b, [0xbf] = 0x094c, + [0xc0] = 0x007b, [0xc1] = 0x0041, [0xc2] = 0x0042, [0xc3] = 0x0043, + [0xc4] = 0x0044, [0xc5] = 0x0045, [0xc6] = 0x0046, [0xc7] = 0x0047, + [0xc8] = 0x0048, [0xc9] = 0x0049, [0xca] = 0x094d, [0xcb] = 0x0950, + [0xcc] = 0x0951, [0xcd] = 0x0952, [0xd0] = 0x007d, [0xd1] = 0x004a, + [0xd2] = 0x004b, [0xd3] = 0x004c, [0xd4] = 0x004d, [0xd5] = 0x004e, + [0xd6] = 0x004f, [0xd7] = 0x0050, [0xd8] = 0x0051, [0xd9] = 0x0052, + [0xda] = 0x0960, [0xdb] = 0x0961, [0xdc] = 0x0962, [0xdd] = 0x0963, + [0xde] = 0x0964, [0xdf] = 0x0965, [0xe0] = 0x005c, [0xe1] = 0x200d, + [0xe2] = 0x0053, [0xe3] = 0x0054, [0xe4] = 0x0055, [0xe5] = 0x0056, + [0xe6] = 0x0057, [0xe7] = 0x0058, [0xe8] = 0x0059, [0xe9] = 0x005a, + [0xea] = 0x0966, [0xeb] = 0x0967, [0xec] = 0x0968, [0xed] = 0x0969, + [0xee] = 0x096a, [0xef] = 0x096b, [0xf0] = 0x0030, [0xf1] = 0x0031, + [0xf2] = 0x0032, [0xf3] = 0x0033, [0xf4] = 0x0034, [0xf5] = 0x0035, + [0xf6] = 0x0036, [0xf7] = 0x0037, [0xf8] = 0x0038, [0xf9] = 0x0039, + [0xfa] = 0x096c, [0xfb] = 0x096d, [0xfc] = 0x096e, [0xfd] = 0x096f, + [0xfe] = 0x0970, [0xff] = 0x009f +}; + +static const struct gap from_idx[] = +{ + { start: 0x0000, end: 0x00a0, idx: 0 }, + { start: 0x0901, end: 0x0952, idx: -2144 }, + { start: 0x0960, end: 0x0970, idx: -2157 }, + { start: 0x200c, end: 0x200d, idx: -7944 }, + { start: 0xffff, end: 0xffff, idx: 0 } +}; + +static const char from_ucs4[] = +{ + '\x00', '\x01', '\x02', '\x03', '\x37', '\x2d', '\x2e', '\x2f', + '\x16', '\x05', '\x25', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + '\x10', '\x11', '\x12', '\x13', '\x3c', '\x3d', '\x32', '\x26', + '\x18', '\x19', '\x3f', '\x27', '\x1c', '\x1d', '\x1e', '\x1f', + '\x40', '\x5a', '\x7f', '\x7b', '\x5b', '\x6c', '\x50', '\x7d', + '\x4d', '\x5d', '\x5c', '\x4e', '\x6b', '\x60', '\x4b', '\x61', + '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', + '\xf8', '\xf9', '\x7a', '\x5e', '\x4c', '\x7e', '\x6e', '\x6f', + '\x7c', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', + '\xc8', '\xc9', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', + '\xd7', '\xd8', '\xd9', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', + '\xe7', '\xe8', '\xe9', '\xad', '\xe0', '\xbd', '\x5f', '\x6d', + '\x79', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', + '\x97', '\x98', '\x99', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', + '\xa7', '\xa8', '\xa9', '\xc0', '\x4f', '\xd0', '\xa1', '\x07', + '\x20', '\x21', '\x22', '\x23', '\x24', '\x15', '\x06', '\x17', + '\x28', '\x29', '\x2a', '\x2b', '\x2c', '\x09', '\x0a', '\x1b', + '\x30', '\x31', '\x1a', '\x33', '\x34', '\x35', '\x36', '\x08', + '\x38', '\x39', '\x3a', '\x3b', '\x04', '\x14', '\x3e', '\xff', + '\x41', '\x42', '\x43', '\x44', '\x00', '\x45', '\x46', '\x47', + '\x48', '\x49', '\x4a', '\x51', '\x52', '\x53', '\x54', '\x55', + '\x56', '\x57', '\x58', '\x59', '\x62', '\x63', '\x64', '\x65', + '\x66', '\x67', '\x68', '\x69', '\x6a', '\x70', '\x71', '\x72', + '\x73', '\x74', '\x75', '\x76', '\x77', '\x78', '\x80', '\x8a', + '\x8b', '\x00', '\x8c', '\x8d', '\x8e', '\x8f', '\x90', '\x9a', + '\x9b', '\x00', '\x9c', '\x9d', '\x00', '\x9e', '\x9f', '\xaa', + '\xab', '\xac', '\x00', '\x00', '\xae', '\xaf', '\xb0', '\xb1', + '\xb2', '\xb3', '\xb4', '\xb5', '\xb6', '\xb7', '\xb8', '\xb9', + '\xba', '\xbb', '\xbc', '\xbe', '\xbf', '\xca', '\x00', '\x00', + '\xcb', '\xcc', '\xcd', '\xda', '\xdb', '\xdc', '\xdd', '\xde', + '\xdf', '\xea', '\xeb', '\xec', '\xed', '\xee', '\xef', '\xfa', + '\xfb', '\xfc', '\xfd', '\xfe', '\xa0', '\xe1' +}; diff --git a/iconvdata/ibm1153.c b/iconvdata/ibm1153.c new file mode 100644 index 0000000000..5eafc6b252 --- /dev/null +++ b/iconvdata/ibm1153.c @@ -0,0 +1,29 @@ +/* Conversion from and to IBM1153. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdint.h> + +/* Get the conversion table. */ +#define TABLES <ibm1153.h> + +#define CHARSET_NAME "IBM1153//" +#define HAS_HOLES 0 /* All 256 character are defined. */ + +#include <8bit-gap.c> diff --git a/iconvdata/ibm1153.h b/iconvdata/ibm1153.h new file mode 100644 index 0000000000..32fcac7a68 --- /dev/null +++ b/iconvdata/ibm1153.h @@ -0,0 +1,147 @@ +/* Mapping table for IBM1153. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +static const uint32_t to_ucs4[256] = +{ + [0x00] = 0x0000, [0x01] = 0x0001, [0x02] = 0x0002, [0x03] = 0x0003, + [0x04] = 0x009c, [0x05] = 0x0009, [0x06] = 0x0086, [0x07] = 0x007f, + [0x08] = 0x0097, [0x09] = 0x008d, [0x0a] = 0x008e, [0x0b] = 0x000b, + [0x0c] = 0x000c, [0x0d] = 0x000d, [0x0e] = 0x000e, [0x0f] = 0x000f, + [0x10] = 0x0010, [0x11] = 0x0011, [0x12] = 0x0012, [0x13] = 0x0013, + [0x14] = 0x009d, [0x15] = 0x0085, [0x16] = 0x0008, [0x17] = 0x0087, + [0x18] = 0x0018, [0x19] = 0x0019, [0x1a] = 0x0092, [0x1b] = 0x008f, + [0x1c] = 0x001c, [0x1d] = 0x001d, [0x1e] = 0x001e, [0x1f] = 0x001f, + [0x20] = 0x0080, [0x21] = 0x0081, [0x22] = 0x0082, [0x23] = 0x0083, + [0x24] = 0x0084, [0x25] = 0x000a, [0x26] = 0x0017, [0x27] = 0x001b, + [0x28] = 0x0088, [0x29] = 0x0089, [0x2a] = 0x008a, [0x2b] = 0x008b, + [0x2c] = 0x008c, [0x2d] = 0x0005, [0x2e] = 0x0006, [0x2f] = 0x0007, + [0x30] = 0x0090, [0x31] = 0x0091, [0x32] = 0x0016, [0x33] = 0x0093, + [0x34] = 0x0094, [0x35] = 0x0095, [0x36] = 0x0096, [0x37] = 0x0004, + [0x38] = 0x0098, [0x39] = 0x0099, [0x3a] = 0x009a, [0x3b] = 0x009b, + [0x3c] = 0x0014, [0x3d] = 0x0015, [0x3e] = 0x009e, [0x3f] = 0x001a, + [0x40] = 0x0020, [0x41] = 0x00a0, [0x42] = 0x00e2, [0x43] = 0x00e4, + [0x44] = 0x0163, [0x45] = 0x00e1, [0x46] = 0x0103, [0x47] = 0x010d, + [0x48] = 0x00e7, [0x49] = 0x0107, [0x4a] = 0x005b, [0x4b] = 0x002e, + [0x4c] = 0x003c, [0x4d] = 0x0028, [0x4e] = 0x002b, [0x4f] = 0x0021, + [0x50] = 0x0026, [0x51] = 0x00e9, [0x52] = 0x0119, [0x53] = 0x00eb, + [0x54] = 0x016f, [0x55] = 0x00ed, [0x56] = 0x00ee, [0x57] = 0x013e, + [0x58] = 0x013a, [0x59] = 0x00df, [0x5a] = 0x005d, [0x5b] = 0x0024, + [0x5c] = 0x002a, [0x5d] = 0x0029, [0x5e] = 0x003b, [0x5f] = 0x005e, + [0x60] = 0x002d, [0x61] = 0x002f, [0x62] = 0x00c2, [0x63] = 0x00c4, + [0x64] = 0x02dd, [0x65] = 0x00c1, [0x66] = 0x0102, [0x67] = 0x010c, + [0x68] = 0x00c7, [0x69] = 0x0106, [0x6a] = 0x007c, [0x6b] = 0x002c, + [0x6c] = 0x0025, [0x6d] = 0x005f, [0x6e] = 0x003e, [0x6f] = 0x003f, + [0x70] = 0x02c7, [0x71] = 0x00c9, [0x72] = 0x0118, [0x73] = 0x00cb, + [0x74] = 0x016e, [0x75] = 0x00cd, [0x76] = 0x00ce, [0x77] = 0x013d, + [0x78] = 0x0139, [0x79] = 0x0060, [0x7a] = 0x003a, [0x7b] = 0x0023, + [0x7c] = 0x0040, [0x7d] = 0x0027, [0x7e] = 0x003d, [0x7f] = 0x0022, + [0x80] = 0x02d8, [0x81] = 0x0061, [0x82] = 0x0062, [0x83] = 0x0063, + [0x84] = 0x0064, [0x85] = 0x0065, [0x86] = 0x0066, [0x87] = 0x0067, + [0x88] = 0x0068, [0x89] = 0x0069, [0x8a] = 0x015b, [0x8b] = 0x0148, + [0x8c] = 0x0111, [0x8d] = 0x00fd, [0x8e] = 0x0159, [0x8f] = 0x015f, + [0x90] = 0x00b0, [0x91] = 0x006a, [0x92] = 0x006b, [0x93] = 0x006c, + [0x94] = 0x006d, [0x95] = 0x006e, [0x96] = 0x006f, [0x97] = 0x0070, + [0x98] = 0x0071, [0x99] = 0x0072, [0x9a] = 0x0142, [0x9b] = 0x0144, + [0x9c] = 0x0161, [0x9d] = 0x00b8, [0x9e] = 0x02db, [0x9f] = 0x20ac, + [0xa0] = 0x0105, [0xa1] = 0x007e, [0xa2] = 0x0073, [0xa3] = 0x0074, + [0xa4] = 0x0075, [0xa5] = 0x0076, [0xa6] = 0x0077, [0xa7] = 0x0078, + [0xa8] = 0x0079, [0xa9] = 0x007a, [0xaa] = 0x015a, [0xab] = 0x0147, + [0xac] = 0x0110, [0xad] = 0x00dd, [0xae] = 0x0158, [0xaf] = 0x015e, + [0xb0] = 0x02d9, [0xb1] = 0x0104, [0xb2] = 0x017c, [0xb3] = 0x0162, + [0xb4] = 0x017b, [0xb5] = 0x00a7, [0xb6] = 0x017e, [0xb7] = 0x017a, + [0xb8] = 0x017d, [0xb9] = 0x0179, [0xba] = 0x0141, [0xbb] = 0x0143, + [0xbc] = 0x0160, [0xbd] = 0x00a8, [0xbe] = 0x00b4, [0xbf] = 0x00d7, + [0xc0] = 0x007b, [0xc1] = 0x0041, [0xc2] = 0x0042, [0xc3] = 0x0043, + [0xc4] = 0x0044, [0xc5] = 0x0045, [0xc6] = 0x0046, [0xc7] = 0x0047, + [0xc8] = 0x0048, [0xc9] = 0x0049, [0xca] = 0x00ad, [0xcb] = 0x00f4, + [0xcc] = 0x00f6, [0xcd] = 0x0155, [0xce] = 0x00f3, [0xcf] = 0x0151, + [0xd0] = 0x007d, [0xd1] = 0x004a, [0xd2] = 0x004b, [0xd3] = 0x004c, + [0xd4] = 0x004d, [0xd5] = 0x004e, [0xd6] = 0x004f, [0xd7] = 0x0050, + [0xd8] = 0x0051, [0xd9] = 0x0052, [0xda] = 0x011a, [0xdb] = 0x0171, + [0xdc] = 0x00fc, [0xdd] = 0x0165, [0xde] = 0x00fa, [0xdf] = 0x011b, + [0xe0] = 0x005c, [0xe1] = 0x00f7, [0xe2] = 0x0053, [0xe3] = 0x0054, + [0xe4] = 0x0055, [0xe5] = 0x0056, [0xe6] = 0x0057, [0xe7] = 0x0058, + [0xe8] = 0x0059, [0xe9] = 0x005a, [0xea] = 0x010f, [0xeb] = 0x00d4, + [0xec] = 0x00d6, [0xed] = 0x0154, [0xee] = 0x00d3, [0xef] = 0x0150, + [0xf0] = 0x0030, [0xf1] = 0x0031, [0xf2] = 0x0032, [0xf3] = 0x0033, + [0xf4] = 0x0034, [0xf5] = 0x0035, [0xf6] = 0x0036, [0xf7] = 0x0037, + [0xf8] = 0x0038, [0xf9] = 0x0039, [0xfa] = 0x010e, [0xfb] = 0x0170, + [0xfc] = 0x00dc, [0xfd] = 0x0164, [0xfe] = 0x00da, [0xff] = 0x009f +}; + +static const struct gap from_idx[] = +{ + { start: 0x0000, end: 0x00a0, idx: 0 }, + { start: 0x00a7, end: 0x00b8, idx: -6 }, + { start: 0x00c1, end: 0x0111, idx: -14 }, + { start: 0x0118, end: 0x011b, idx: -20 }, + { start: 0x0139, end: 0x0148, idx: -49 }, + { start: 0x0150, end: 0x0165, idx: -56 }, + { start: 0x016e, end: 0x0171, idx: -64 }, + { start: 0x0179, end: 0x017e, idx: -71 }, + { start: 0x02c7, end: 0x02c7, idx: -399 }, + { start: 0x02d8, end: 0x02dd, idx: -415 }, + { start: 0x20ac, end: 0x20ac, idx: -8045 }, + { start: 0xffff, end: 0xffff, idx: 0 } +}; + +static const char from_ucs4[] = +{ + '\x00', '\x01', '\x02', '\x03', '\x37', '\x2d', '\x2e', '\x2f', + '\x16', '\x05', '\x25', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + '\x10', '\x11', '\x12', '\x13', '\x3c', '\x3d', '\x32', '\x26', + '\x18', '\x19', '\x3f', '\x27', '\x1c', '\x1d', '\x1e', '\x1f', + '\x40', '\x4f', '\x7f', '\x7b', '\x5b', '\x6c', '\x50', '\x7d', + '\x4d', '\x5d', '\x5c', '\x4e', '\x6b', '\x60', '\x4b', '\x61', + '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', + '\xf8', '\xf9', '\x7a', '\x5e', '\x4c', '\x7e', '\x6e', '\x6f', + '\x7c', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', + '\xc8', '\xc9', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', + '\xd7', '\xd8', '\xd9', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', + '\xe7', '\xe8', '\xe9', '\x4a', '\xe0', '\x5a', '\x5f', '\x6d', + '\x79', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', + '\x97', '\x98', '\x99', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', + '\xa7', '\xa8', '\xa9', '\xc0', '\x6a', '\xd0', '\xa1', '\x07', + '\x20', '\x21', '\x22', '\x23', '\x24', '\x15', '\x06', '\x17', + '\x28', '\x29', '\x2a', '\x2b', '\x2c', '\x09', '\x0a', '\x1b', + '\x30', '\x31', '\x1a', '\x33', '\x34', '\x35', '\x36', '\x08', + '\x38', '\x39', '\x3a', '\x3b', '\x04', '\x14', '\x3e', '\xff', + '\x41', '\xb5', '\xbd', '\x00', '\x00', '\x00', '\x00', '\xca', + '\x00', '\x00', '\x90', '\x00', '\x00', '\x00', '\xbe', '\x00', + '\x00', '\x00', '\x9d', '\x65', '\x62', '\x00', '\x63', '\x00', + '\x00', '\x68', '\x00', '\x71', '\x00', '\x73', '\x00', '\x75', + '\x76', '\x00', '\xac', '\x00', '\x00', '\xee', '\xeb', '\x00', + '\xec', '\xbf', '\x00', '\x00', '\xfe', '\x00', '\xfc', '\xad', + '\x00', '\x59', '\x00', '\x45', '\x42', '\x00', '\x43', '\x00', + '\x00', '\x48', '\x00', '\x51', '\x00', '\x53', '\x00', '\x55', + '\x56', '\x00', '\x00', '\x00', '\x00', '\xce', '\xcb', '\x00', + '\xcc', '\xe1', '\x00', '\x00', '\xde', '\x00', '\xdc', '\x8d', + '\x00', '\x00', '\x00', '\x00', '\x66', '\x46', '\xb1', '\xa0', + '\x69', '\x49', '\x00', '\x00', '\x00', '\x00', '\x67', '\x47', + '\xfa', '\xea', '\xac', '\x8c', '\x72', '\x52', '\xda', '\xdf', + '\x78', '\x58', '\x00', '\x00', '\x77', '\x57', '\x00', '\x00', + '\xba', '\x9a', '\xbb', '\x9b', '\x00', '\x00', '\xab', '\x8b', + '\xef', '\xcf', '\x00', '\x00', '\xed', '\xcd', '\x00', '\x00', + '\xae', '\x8e', '\xaa', '\x8a', '\x00', '\x00', '\xaf', '\x8f', + '\xbc', '\x9c', '\xb3', '\x44', '\xfd', '\xdd', '\x74', '\x54', + '\xfb', '\xdb', '\xb9', '\xb7', '\xb4', '\xb2', '\xb8', '\xb6', + '\x70', '\x80', '\xb0', '\x00', '\x9e', '\x00', '\x64', '\x9f' +}; diff --git a/iconvdata/ibm1154.c b/iconvdata/ibm1154.c new file mode 100644 index 0000000000..9aaf5d8be2 --- /dev/null +++ b/iconvdata/ibm1154.c @@ -0,0 +1,29 @@ +/* Conversion from and to IBM1154. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdint.h> + +/* Get the conversion table. */ +#define TABLES <ibm1154.h> + +#define CHARSET_NAME "IBM1154//" +#define HAS_HOLES 0 /* All 256 character are defined. */ + +#include <8bit-gap.c> diff --git a/iconvdata/ibm1154.h b/iconvdata/ibm1154.h new file mode 100644 index 0000000000..6e4d07f8a3 --- /dev/null +++ b/iconvdata/ibm1154.h @@ -0,0 +1,134 @@ +/* Mapping table for IBM1154. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +static const uint32_t to_ucs4[256] = +{ + [0x00] = 0x0000, [0x01] = 0x0001, [0x02] = 0x0002, [0x03] = 0x0003, + [0x04] = 0x009c, [0x05] = 0x0009, [0x06] = 0x0086, [0x07] = 0x007f, + [0x08] = 0x0097, [0x09] = 0x008d, [0x0a] = 0x008e, [0x0b] = 0x000b, + [0x0c] = 0x000c, [0x0d] = 0x000d, [0x0e] = 0x000e, [0x0f] = 0x000f, + [0x10] = 0x0010, [0x11] = 0x0011, [0x12] = 0x0012, [0x13] = 0x0013, + [0x14] = 0x009d, [0x15] = 0x0085, [0x16] = 0x0008, [0x17] = 0x0087, + [0x18] = 0x0018, [0x19] = 0x0019, [0x1a] = 0x0092, [0x1b] = 0x008f, + [0x1c] = 0x001c, [0x1d] = 0x001d, [0x1e] = 0x001e, [0x1f] = 0x001f, + [0x20] = 0x0080, [0x21] = 0x0081, [0x22] = 0x0082, [0x23] = 0x0083, + [0x24] = 0x0084, [0x25] = 0x000a, [0x26] = 0x0017, [0x27] = 0x001b, + [0x28] = 0x0088, [0x29] = 0x0089, [0x2a] = 0x008a, [0x2b] = 0x008b, + [0x2c] = 0x008c, [0x2d] = 0x0005, [0x2e] = 0x0006, [0x2f] = 0x0007, + [0x30] = 0x0090, [0x31] = 0x0091, [0x32] = 0x0016, [0x33] = 0x0093, + [0x34] = 0x0094, [0x35] = 0x0095, [0x36] = 0x0096, [0x37] = 0x0004, + [0x38] = 0x0098, [0x39] = 0x0099, [0x3a] = 0x009a, [0x3b] = 0x009b, + [0x3c] = 0x0014, [0x3d] = 0x0015, [0x3e] = 0x009e, [0x3f] = 0x001a, + [0x40] = 0x0020, [0x41] = 0x00a0, [0x42] = 0x0452, [0x43] = 0x0453, + [0x44] = 0x0451, [0x45] = 0x0454, [0x46] = 0x0455, [0x47] = 0x0456, + [0x48] = 0x0457, [0x49] = 0x0458, [0x4a] = 0x005b, [0x4b] = 0x002e, + [0x4c] = 0x003c, [0x4d] = 0x0028, [0x4e] = 0x002b, [0x4f] = 0x0021, + [0x50] = 0x0026, [0x51] = 0x0459, [0x52] = 0x045a, [0x53] = 0x045b, + [0x54] = 0x045c, [0x55] = 0x045e, [0x56] = 0x045f, [0x57] = 0x042a, + [0x58] = 0x2116, [0x59] = 0x0402, [0x5a] = 0x005d, [0x5b] = 0x0024, + [0x5c] = 0x002a, [0x5d] = 0x0029, [0x5e] = 0x003b, [0x5f] = 0x005e, + [0x60] = 0x002d, [0x61] = 0x002f, [0x62] = 0x0403, [0x63] = 0x0401, + [0x64] = 0x0404, [0x65] = 0x0405, [0x66] = 0x0406, [0x67] = 0x0407, + [0x68] = 0x0408, [0x69] = 0x0409, [0x6a] = 0x007c, [0x6b] = 0x002c, + [0x6c] = 0x0025, [0x6d] = 0x005f, [0x6e] = 0x003e, [0x6f] = 0x003f, + [0x70] = 0x040a, [0x71] = 0x040b, [0x72] = 0x040c, [0x73] = 0x00ad, + [0x74] = 0x040e, [0x75] = 0x040f, [0x76] = 0x044e, [0x77] = 0x0430, + [0x78] = 0x0431, [0x79] = 0x0060, [0x7a] = 0x003a, [0x7b] = 0x0023, + [0x7c] = 0x0040, [0x7d] = 0x0027, [0x7e] = 0x003d, [0x7f] = 0x0022, + [0x80] = 0x0446, [0x81] = 0x0061, [0x82] = 0x0062, [0x83] = 0x0063, + [0x84] = 0x0064, [0x85] = 0x0065, [0x86] = 0x0066, [0x87] = 0x0067, + [0x88] = 0x0068, [0x89] = 0x0069, [0x8a] = 0x0434, [0x8b] = 0x0435, + [0x8c] = 0x0444, [0x8d] = 0x0433, [0x8e] = 0x0445, [0x8f] = 0x0438, + [0x90] = 0x0439, [0x91] = 0x006a, [0x92] = 0x006b, [0x93] = 0x006c, + [0x94] = 0x006d, [0x95] = 0x006e, [0x96] = 0x006f, [0x97] = 0x0070, + [0x98] = 0x0071, [0x99] = 0x0072, [0x9a] = 0x043a, [0x9b] = 0x043b, + [0x9c] = 0x043c, [0x9d] = 0x043d, [0x9e] = 0x043e, [0x9f] = 0x043f, + [0xa0] = 0x044f, [0xa1] = 0x007e, [0xa2] = 0x0073, [0xa3] = 0x0074, + [0xa4] = 0x0075, [0xa5] = 0x0076, [0xa6] = 0x0077, [0xa7] = 0x0078, + [0xa8] = 0x0079, [0xa9] = 0x007a, [0xaa] = 0x0440, [0xab] = 0x0441, + [0xac] = 0x0442, [0xad] = 0x0443, [0xae] = 0x0436, [0xaf] = 0x0432, + [0xb0] = 0x044c, [0xb1] = 0x044b, [0xb2] = 0x0437, [0xb3] = 0x0448, + [0xb4] = 0x044d, [0xb5] = 0x0449, [0xb6] = 0x0447, [0xb7] = 0x044a, + [0xb8] = 0x042e, [0xb9] = 0x0410, [0xba] = 0x0411, [0xbb] = 0x0426, + [0xbc] = 0x0414, [0xbd] = 0x0415, [0xbe] = 0x0424, [0xbf] = 0x0413, + [0xc0] = 0x007b, [0xc1] = 0x0041, [0xc2] = 0x0042, [0xc3] = 0x0043, + [0xc4] = 0x0044, [0xc5] = 0x0045, [0xc6] = 0x0046, [0xc7] = 0x0047, + [0xc8] = 0x0048, [0xc9] = 0x0049, [0xca] = 0x0425, [0xcb] = 0x0418, + [0xcc] = 0x0419, [0xcd] = 0x041a, [0xce] = 0x041b, [0xcf] = 0x041c, + [0xd0] = 0x007d, [0xd1] = 0x004a, [0xd2] = 0x004b, [0xd3] = 0x004c, + [0xd4] = 0x004d, [0xd5] = 0x004e, [0xd6] = 0x004f, [0xd7] = 0x0050, + [0xd8] = 0x0051, [0xd9] = 0x0052, [0xda] = 0x041d, [0xdb] = 0x041e, + [0xdc] = 0x041f, [0xdd] = 0x042f, [0xde] = 0x0420, [0xdf] = 0x0421, + [0xe0] = 0x005c, [0xe1] = 0x20ac, [0xe2] = 0x0053, [0xe3] = 0x0054, + [0xe4] = 0x0055, [0xe5] = 0x0056, [0xe6] = 0x0057, [0xe7] = 0x0058, + [0xe8] = 0x0059, [0xe9] = 0x005a, [0xea] = 0x0422, [0xeb] = 0x0423, + [0xec] = 0x0416, [0xed] = 0x0412, [0xee] = 0x042c, [0xef] = 0x042b, + [0xf0] = 0x0030, [0xf1] = 0x0031, [0xf2] = 0x0032, [0xf3] = 0x0033, + [0xf4] = 0x0034, [0xf5] = 0x0035, [0xf6] = 0x0036, [0xf7] = 0x0037, + [0xf8] = 0x0038, [0xf9] = 0x0039, [0xfa] = 0x0417, [0xfb] = 0x0428, + [0xfc] = 0x042d, [0xfd] = 0x0429, [0xfe] = 0x0427, [0xff] = 0x009f +}; + +static const struct gap from_idx[] = +{ + { start: 0x0000, end: 0x00a0, idx: 0 }, + { start: 0x00ad, end: 0x00ad, idx: -12 }, + { start: 0x0401, end: 0x045f, idx: -863 }, + { start: 0x20ac, end: 0x20ac, idx: -8107 }, + { start: 0x2116, end: 0x2116, idx: -8212 }, + { start: 0xffff, end: 0xffff, idx: 0 } +}; + +static const char from_ucs4[] = +{ + '\x00', '\x01', '\x02', '\x03', '\x37', '\x2d', '\x2e', '\x2f', + '\x16', '\x05', '\x25', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + '\x10', '\x11', '\x12', '\x13', '\x3c', '\x3d', '\x32', '\x26', + '\x18', '\x19', '\x3f', '\x27', '\x1c', '\x1d', '\x1e', '\x1f', + '\x40', '\x4f', '\x7f', '\x7b', '\x5b', '\x6c', '\x50', '\x7d', + '\x4d', '\x5d', '\x5c', '\x4e', '\x6b', '\x60', '\x4b', '\x61', + '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', + '\xf8', '\xf9', '\x7a', '\x5e', '\x4c', '\x7e', '\x6e', '\x6f', + '\x7c', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', + '\xc8', '\xc9', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', + '\xd7', '\xd8', '\xd9', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', + '\xe7', '\xe8', '\xe9', '\x4a', '\xe0', '\x5a', '\x5f', '\x6d', + '\x79', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', + '\x97', '\x98', '\x99', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', + '\xa7', '\xa8', '\xa9', '\xc0', '\x6a', '\xd0', '\xa1', '\x07', + '\x20', '\x21', '\x22', '\x23', '\x24', '\x15', '\x06', '\x17', + '\x28', '\x29', '\x2a', '\x2b', '\x2c', '\x09', '\x0a', '\x1b', + '\x30', '\x31', '\x1a', '\x33', '\x34', '\x35', '\x36', '\x08', + '\x38', '\x39', '\x3a', '\x3b', '\x04', '\x14', '\x3e', '\xff', + '\x41', '\x73', '\x63', '\x59', '\x62', '\x64', '\x65', '\x66', + '\x67', '\x68', '\x69', '\x70', '\x71', '\x72', '\x00', '\x74', + '\x75', '\xb9', '\xba', '\xed', '\xbf', '\xbc', '\xbd', '\xec', + '\xfa', '\xcb', '\xcc', '\xcd', '\xce', '\xcf', '\xda', '\xdb', + '\xdc', '\xde', '\xdf', '\xea', '\xeb', '\xbe', '\xca', '\xbb', + '\xfe', '\xfb', '\xfd', '\x57', '\xef', '\xee', '\xfc', '\xb8', + '\xdd', '\x77', '\x78', '\xaf', '\x8d', '\x8a', '\x8b', '\xae', + '\xb2', '\x8f', '\x90', '\x9a', '\x9b', '\x9c', '\x9d', '\x9e', + '\x9f', '\xaa', '\xab', '\xac', '\xad', '\x8c', '\x8e', '\x80', + '\xb6', '\xb3', '\xb5', '\xb7', '\xb1', '\xb0', '\xb4', '\x76', + '\xa0', '\x00', '\x44', '\x42', '\x43', '\x45', '\x46', '\x47', + '\x48', '\x49', '\x51', '\x52', '\x53', '\x54', '\x00', '\x55', + '\x56', '\xe1', '\x58' +}; diff --git a/iconvdata/ibm1155.c b/iconvdata/ibm1155.c new file mode 100644 index 0000000000..f60ec5fb44 --- /dev/null +++ b/iconvdata/ibm1155.c @@ -0,0 +1,29 @@ +/* Conversion from and to IBM1155. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdint.h> + +/* Get the conversion table. */ +#define TABLES <ibm1155.h> + +#define CHARSET_NAME "IBM1155//" +#define HAS_HOLES 0 /* All 256 character are defined. */ + +#include <8bit-gap.c> diff --git a/iconvdata/ibm1155.h b/iconvdata/ibm1155.h new file mode 100644 index 0000000000..282834f2ec --- /dev/null +++ b/iconvdata/ibm1155.h @@ -0,0 +1,134 @@ +/* Mapping table for IBM1155. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +static const uint32_t to_ucs4[256] = +{ + [0x00] = 0x0000, [0x01] = 0x0001, [0x02] = 0x0002, [0x03] = 0x0003, + [0x04] = 0x009c, [0x05] = 0x0009, [0x06] = 0x0086, [0x07] = 0x007f, + [0x08] = 0x0097, [0x09] = 0x008d, [0x0a] = 0x008e, [0x0b] = 0x000b, + [0x0c] = 0x000c, [0x0d] = 0x000d, [0x0e] = 0x000e, [0x0f] = 0x000f, + [0x10] = 0x0010, [0x11] = 0x0011, [0x12] = 0x0012, [0x13] = 0x0013, + [0x14] = 0x009d, [0x15] = 0x0085, [0x16] = 0x0008, [0x17] = 0x0087, + [0x18] = 0x0018, [0x19] = 0x0019, [0x1a] = 0x0092, [0x1b] = 0x008f, + [0x1c] = 0x001c, [0x1d] = 0x001d, [0x1e] = 0x001e, [0x1f] = 0x001f, + [0x20] = 0x0080, [0x21] = 0x0081, [0x22] = 0x0082, [0x23] = 0x0083, + [0x24] = 0x0084, [0x25] = 0x000a, [0x26] = 0x0017, [0x27] = 0x001b, + [0x28] = 0x0088, [0x29] = 0x0089, [0x2a] = 0x008a, [0x2b] = 0x008b, + [0x2c] = 0x008c, [0x2d] = 0x0005, [0x2e] = 0x0006, [0x2f] = 0x0007, + [0x30] = 0x0090, [0x31] = 0x0091, [0x32] = 0x0016, [0x33] = 0x0093, + [0x34] = 0x0094, [0x35] = 0x0095, [0x36] = 0x0096, [0x37] = 0x0004, + [0x38] = 0x0098, [0x39] = 0x0099, [0x3a] = 0x009a, [0x3b] = 0x009b, + [0x3c] = 0x0014, [0x3d] = 0x0015, [0x3e] = 0x009e, [0x3f] = 0x001a, + [0x40] = 0x0020, [0x41] = 0x00a0, [0x42] = 0x00e2, [0x43] = 0x00e4, + [0x44] = 0x00e0, [0x45] = 0x00e1, [0x46] = 0x00e3, [0x47] = 0x00e5, + [0x48] = 0x007b, [0x49] = 0x00f1, [0x4a] = 0x00c7, [0x4b] = 0x002e, + [0x4c] = 0x003c, [0x4d] = 0x0028, [0x4e] = 0x002b, [0x4f] = 0x0021, + [0x50] = 0x0026, [0x51] = 0x00e9, [0x52] = 0x00ea, [0x53] = 0x00eb, + [0x54] = 0x00e8, [0x55] = 0x00ed, [0x56] = 0x00ee, [0x57] = 0x00ef, + [0x58] = 0x00ec, [0x59] = 0x00df, [0x5a] = 0x011e, [0x5b] = 0x0130, + [0x5c] = 0x002a, [0x5d] = 0x0029, [0x5e] = 0x003b, [0x5f] = 0x005e, + [0x60] = 0x002d, [0x61] = 0x002f, [0x62] = 0x00c2, [0x63] = 0x00c4, + [0x64] = 0x00c0, [0x65] = 0x00c1, [0x66] = 0x00c3, [0x67] = 0x00c5, + [0x68] = 0x005b, [0x69] = 0x00d1, [0x6a] = 0x015f, [0x6b] = 0x002c, + [0x6c] = 0x0025, [0x6d] = 0x005f, [0x6e] = 0x003e, [0x6f] = 0x003f, + [0x70] = 0x00f8, [0x71] = 0x00c9, [0x72] = 0x00ca, [0x73] = 0x00cb, + [0x74] = 0x00c8, [0x75] = 0x00cd, [0x76] = 0x00ce, [0x77] = 0x00cf, + [0x78] = 0x00cc, [0x79] = 0x0131, [0x7a] = 0x003a, [0x7b] = 0x00d6, + [0x7c] = 0x015e, [0x7d] = 0x0027, [0x7e] = 0x003d, [0x7f] = 0x00dc, + [0x80] = 0x00d8, [0x81] = 0x0061, [0x82] = 0x0062, [0x83] = 0x0063, + [0x84] = 0x0064, [0x85] = 0x0065, [0x86] = 0x0066, [0x87] = 0x0067, + [0x88] = 0x0068, [0x89] = 0x0069, [0x8a] = 0x00ab, [0x8b] = 0x00bb, + [0x8c] = 0x007d, [0x8d] = 0x0060, [0x8e] = 0x00a6, [0x8f] = 0x00b1, + [0x90] = 0x00b0, [0x91] = 0x006a, [0x92] = 0x006b, [0x93] = 0x006c, + [0x94] = 0x006d, [0x95] = 0x006e, [0x96] = 0x006f, [0x97] = 0x0070, + [0x98] = 0x0071, [0x99] = 0x0072, [0x9a] = 0x00aa, [0x9b] = 0x00ba, + [0x9c] = 0x00e6, [0x9d] = 0x00b8, [0x9e] = 0x00c6, [0x9f] = 0x20ac, + [0xa0] = 0x00b5, [0xa1] = 0x00f6, [0xa2] = 0x0073, [0xa3] = 0x0074, + [0xa4] = 0x0075, [0xa5] = 0x0076, [0xa6] = 0x0077, [0xa7] = 0x0078, + [0xa8] = 0x0079, [0xa9] = 0x007a, [0xaa] = 0x00a1, [0xab] = 0x00bf, + [0xac] = 0x005d, [0xad] = 0x0024, [0xae] = 0x0040, [0xaf] = 0x00ae, + [0xb0] = 0x00a2, [0xb1] = 0x00a3, [0xb2] = 0x00a5, [0xb3] = 0x00b7, + [0xb4] = 0x00a9, [0xb5] = 0x00a7, [0xb6] = 0x00b6, [0xb7] = 0x00bc, + [0xb8] = 0x00bd, [0xb9] = 0x00be, [0xba] = 0x00ac, [0xbb] = 0x007c, + [0xbc] = 0x00af, [0xbd] = 0x00a8, [0xbe] = 0x00b4, [0xbf] = 0x00d7, + [0xc0] = 0x00e7, [0xc1] = 0x0041, [0xc2] = 0x0042, [0xc3] = 0x0043, + [0xc4] = 0x0044, [0xc5] = 0x0045, [0xc6] = 0x0046, [0xc7] = 0x0047, + [0xc8] = 0x0048, [0xc9] = 0x0049, [0xca] = 0x00ad, [0xcb] = 0x00f4, + [0xcc] = 0x007e, [0xcd] = 0x00f2, [0xce] = 0x00f3, [0xcf] = 0x00f5, + [0xd0] = 0x011f, [0xd1] = 0x004a, [0xd2] = 0x004b, [0xd3] = 0x004c, + [0xd4] = 0x004d, [0xd5] = 0x004e, [0xd6] = 0x004f, [0xd7] = 0x0050, + [0xd8] = 0x0051, [0xd9] = 0x0052, [0xda] = 0x00b9, [0xdb] = 0x00fb, + [0xdc] = 0x005c, [0xdd] = 0x00f9, [0xde] = 0x00fa, [0xdf] = 0x00ff, + [0xe0] = 0x00fc, [0xe1] = 0x00f7, [0xe2] = 0x0053, [0xe3] = 0x0054, + [0xe4] = 0x0055, [0xe5] = 0x0056, [0xe6] = 0x0057, [0xe7] = 0x0058, + [0xe8] = 0x0059, [0xe9] = 0x005a, [0xea] = 0x00b2, [0xeb] = 0x00d4, + [0xec] = 0x0023, [0xed] = 0x00d2, [0xee] = 0x00d3, [0xef] = 0x00d5, + [0xf0] = 0x0030, [0xf1] = 0x0031, [0xf2] = 0x0032, [0xf3] = 0x0033, + [0xf4] = 0x0034, [0xf5] = 0x0035, [0xf6] = 0x0036, [0xf7] = 0x0037, + [0xf8] = 0x0038, [0xf9] = 0x0039, [0xfa] = 0x00b3, [0xfb] = 0x00db, + [0xfc] = 0x0022, [0xfd] = 0x00d9, [0xfe] = 0x00da, [0xff] = 0x009f +}; + +static const struct gap from_idx[] = +{ + { start: 0x0000, end: 0x00ff, idx: 0 }, + { start: 0x011e, end: 0x011f, idx: -30 }, + { start: 0x0130, end: 0x0131, idx: -46 }, + { start: 0x015e, end: 0x015f, idx: -90 }, + { start: 0x20ac, end: 0x20ac, idx: -8102 }, + { start: 0xffff, end: 0xffff, idx: 0 } +}; + +static const char from_ucs4[] = +{ + '\x00', '\x01', '\x02', '\x03', '\x37', '\x2d', '\x2e', '\x2f', + '\x16', '\x05', '\x25', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + '\x10', '\x11', '\x12', '\x13', '\x3c', '\x3d', '\x32', '\x26', + '\x18', '\x19', '\x3f', '\x27', '\x1c', '\x1d', '\x1e', '\x1f', + '\x40', '\x4f', '\xfc', '\xec', '\xad', '\x6c', '\x50', '\x7d', + '\x4d', '\x5d', '\x5c', '\x4e', '\x6b', '\x60', '\x4b', '\x61', + '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', + '\xf8', '\xf9', '\x7a', '\x5e', '\x4c', '\x7e', '\x6e', '\x6f', + '\xae', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', + '\xc8', '\xc9', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', + '\xd7', '\xd8', '\xd9', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', + '\xe7', '\xe8', '\xe9', '\x68', '\xdc', '\xac', '\x5f', '\x6d', + '\x8d', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', + '\x97', '\x98', '\x99', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', + '\xa7', '\xa8', '\xa9', '\x48', '\xbb', '\x8c', '\xcc', '\x07', + '\x20', '\x21', '\x22', '\x23', '\x24', '\x15', '\x06', '\x17', + '\x28', '\x29', '\x2a', '\x2b', '\x2c', '\x09', '\x0a', '\x1b', + '\x30', '\x31', '\x1a', '\x33', '\x34', '\x35', '\x36', '\x08', + '\x38', '\x39', '\x3a', '\x3b', '\x04', '\x14', '\x3e', '\xff', + '\x41', '\xaa', '\xb0', '\xb1', '\x00', '\xb2', '\x8e', '\xb5', + '\xbd', '\xb4', '\x9a', '\x8a', '\xba', '\xca', '\xaf', '\xbc', + '\x90', '\x8f', '\xea', '\xfa', '\xbe', '\xa0', '\xb6', '\xb3', + '\x9d', '\xda', '\x9b', '\x8b', '\xb7', '\xb8', '\xb9', '\xab', + '\x64', '\x65', '\x62', '\x66', '\x63', '\x67', '\x9e', '\x4a', + '\x74', '\x71', '\x72', '\x73', '\x78', '\x75', '\x76', '\x77', + '\x00', '\x69', '\xed', '\xee', '\xeb', '\xef', '\x7b', '\xbf', + '\x80', '\xfd', '\xfe', '\xfb', '\x7f', '\x00', '\x00', '\x59', + '\x44', '\x45', '\x42', '\x46', '\x43', '\x47', '\x9c', '\xc0', + '\x54', '\x51', '\x52', '\x53', '\x58', '\x55', '\x56', '\x57', + '\x00', '\x49', '\xcd', '\xce', '\xcb', '\xcf', '\xa1', '\xe1', + '\x70', '\xdd', '\xde', '\xdb', '\xe0', '\x00', '\x00', '\xdf', + '\x5a', '\xd0', '\x5b', '\x79', '\x7c', '\x6a', '\x9f' +}; diff --git a/iconvdata/ibm1156.c b/iconvdata/ibm1156.c new file mode 100644 index 0000000000..6751abe294 --- /dev/null +++ b/iconvdata/ibm1156.c @@ -0,0 +1,29 @@ +/* Conversion from and to IBM1156. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdint.h> + +/* Get the conversion table. */ +#define TABLES <ibm1156.h> + +#define CHARSET_NAME "IBM1156//" +#define HAS_HOLES 0 /* All 256 character are defined. */ + +#include <8bit-gap.c> diff --git a/iconvdata/ibm1156.h b/iconvdata/ibm1156.h new file mode 100644 index 0000000000..1352c8f672 --- /dev/null +++ b/iconvdata/ibm1156.h @@ -0,0 +1,149 @@ +/* Mapping table for IBM1156. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +static const uint32_t to_ucs4[256] = +{ + [0x00] = 0x0000, [0x01] = 0x0001, [0x02] = 0x0002, [0x03] = 0x0003, + [0x04] = 0x009c, [0x05] = 0x0009, [0x06] = 0x0086, [0x07] = 0x007f, + [0x08] = 0x0097, [0x09] = 0x008d, [0x0a] = 0x008e, [0x0b] = 0x000b, + [0x0c] = 0x000c, [0x0d] = 0x000d, [0x0e] = 0x000e, [0x0f] = 0x000f, + [0x10] = 0x0010, [0x11] = 0x0011, [0x12] = 0x0012, [0x13] = 0x0013, + [0x14] = 0x009d, [0x15] = 0x0085, [0x16] = 0x0008, [0x17] = 0x0087, + [0x18] = 0x0018, [0x19] = 0x0019, [0x1a] = 0x0092, [0x1b] = 0x008f, + [0x1c] = 0x001c, [0x1d] = 0x001d, [0x1e] = 0x001e, [0x1f] = 0x001f, + [0x20] = 0x0080, [0x21] = 0x0081, [0x22] = 0x0082, [0x23] = 0x0083, + [0x24] = 0x0084, [0x25] = 0x000a, [0x26] = 0x0017, [0x27] = 0x001b, + [0x28] = 0x0088, [0x29] = 0x0089, [0x2a] = 0x008a, [0x2b] = 0x008b, + [0x2c] = 0x008c, [0x2d] = 0x0005, [0x2e] = 0x0006, [0x2f] = 0x0007, + [0x30] = 0x0090, [0x31] = 0x0091, [0x32] = 0x0016, [0x33] = 0x0093, + [0x34] = 0x0094, [0x35] = 0x0095, [0x36] = 0x0096, [0x37] = 0x0004, + [0x38] = 0x0098, [0x39] = 0x0099, [0x3a] = 0x009a, [0x3b] = 0x009b, + [0x3c] = 0x0014, [0x3d] = 0x0015, [0x3e] = 0x009e, [0x3f] = 0x001a, + [0x40] = 0x0020, [0x41] = 0x00a0, [0x42] = 0x0161, [0x43] = 0x00e4, + [0x44] = 0x0105, [0x45] = 0x012f, [0x46] = 0x016b, [0x47] = 0x00e5, + [0x48] = 0x0113, [0x49] = 0x017e, [0x4a] = 0x00a2, [0x4b] = 0x002e, + [0x4c] = 0x003c, [0x4d] = 0x0028, [0x4e] = 0x002b, [0x4f] = 0x007c, + [0x50] = 0x0026, [0x51] = 0x00e9, [0x52] = 0x0119, [0x53] = 0x0117, + [0x54] = 0x010d, [0x55] = 0x0173, [0x56] = 0x201e, [0x57] = 0x201c, + [0x58] = 0x0123, [0x59] = 0x00df, [0x5a] = 0x0021, [0x5b] = 0x0024, + [0x5c] = 0x002a, [0x5d] = 0x0029, [0x5e] = 0x003b, [0x5f] = 0x00ac, + [0x60] = 0x002d, [0x61] = 0x002f, [0x62] = 0x0160, [0x63] = 0x00c4, + [0x64] = 0x0104, [0x65] = 0x012e, [0x66] = 0x016a, [0x67] = 0x00c5, + [0x68] = 0x0112, [0x69] = 0x017d, [0x6a] = 0x00a6, [0x6b] = 0x002c, + [0x6c] = 0x0025, [0x6d] = 0x005f, [0x6e] = 0x003e, [0x6f] = 0x003f, + [0x70] = 0x00f8, [0x71] = 0x00c9, [0x72] = 0x0118, [0x73] = 0x0116, + [0x74] = 0x010c, [0x75] = 0x0172, [0x76] = 0x012a, [0x77] = 0x013b, + [0x78] = 0x0122, [0x79] = 0x0060, [0x7a] = 0x003a, [0x7b] = 0x0023, + [0x7c] = 0x0040, [0x7d] = 0x0027, [0x7e] = 0x003d, [0x7f] = 0x0022, + [0x80] = 0x00d8, [0x81] = 0x0061, [0x82] = 0x0062, [0x83] = 0x0063, + [0x84] = 0x0064, [0x85] = 0x0065, [0x86] = 0x0066, [0x87] = 0x0067, + [0x88] = 0x0068, [0x89] = 0x0069, [0x8a] = 0x00ab, [0x8b] = 0x00bb, + [0x8c] = 0x0101, [0x8d] = 0x017c, [0x8e] = 0x0144, [0x8f] = 0x00b1, + [0x90] = 0x00b0, [0x91] = 0x006a, [0x92] = 0x006b, [0x93] = 0x006c, + [0x94] = 0x006d, [0x95] = 0x006e, [0x96] = 0x006f, [0x97] = 0x0070, + [0x98] = 0x0071, [0x99] = 0x0072, [0x9a] = 0x0156, [0x9b] = 0x0157, + [0x9c] = 0x00e6, [0x9d] = 0x0137, [0x9e] = 0x00c6, [0x9f] = 0x20ac, + [0xa0] = 0x00b5, [0xa1] = 0x007e, [0xa2] = 0x0073, [0xa3] = 0x0074, + [0xa4] = 0x0075, [0xa5] = 0x0076, [0xa6] = 0x0077, [0xa7] = 0x0078, + [0xa8] = 0x0079, [0xa9] = 0x007a, [0xaa] = 0x201d, [0xab] = 0x017a, + [0xac] = 0x0100, [0xad] = 0x017b, [0xae] = 0x0143, [0xaf] = 0x00ae, + [0xb0] = 0x005e, [0xb1] = 0x00a3, [0xb2] = 0x012b, [0xb3] = 0x00b7, + [0xb4] = 0x00a9, [0xb5] = 0x00a7, [0xb6] = 0x00b6, [0xb7] = 0x00bc, + [0xb8] = 0x00bd, [0xb9] = 0x00be, [0xba] = 0x005b, [0xbb] = 0x005d, + [0xbc] = 0x0179, [0xbd] = 0x0136, [0xbe] = 0x013c, [0xbf] = 0x00d7, + [0xc0] = 0x007b, [0xc1] = 0x0041, [0xc2] = 0x0042, [0xc3] = 0x0043, + [0xc4] = 0x0044, [0xc5] = 0x0045, [0xc6] = 0x0046, [0xc7] = 0x0047, + [0xc8] = 0x0048, [0xc9] = 0x0049, [0xca] = 0x00ad, [0xcb] = 0x014d, + [0xcc] = 0x00f6, [0xcd] = 0x0146, [0xce] = 0x00f3, [0xcf] = 0x00f5, + [0xd0] = 0x007d, [0xd1] = 0x004a, [0xd2] = 0x004b, [0xd3] = 0x004c, + [0xd4] = 0x004d, [0xd5] = 0x004e, [0xd6] = 0x004f, [0xd7] = 0x0050, + [0xd8] = 0x0051, [0xd9] = 0x0052, [0xda] = 0x00b9, [0xdb] = 0x0107, + [0xdc] = 0x00fc, [0xdd] = 0x0142, [0xde] = 0x015b, [0xdf] = 0x2019, + [0xe0] = 0x005c, [0xe1] = 0x00f7, [0xe2] = 0x0053, [0xe3] = 0x0054, + [0xe4] = 0x0055, [0xe5] = 0x0056, [0xe6] = 0x0057, [0xe7] = 0x0058, + [0xe8] = 0x0059, [0xe9] = 0x005a, [0xea] = 0x00b2, [0xeb] = 0x014c, + [0xec] = 0x00d6, [0xed] = 0x0145, [0xee] = 0x00d3, [0xef] = 0x00d5, + [0xf0] = 0x0030, [0xf1] = 0x0031, [0xf2] = 0x0032, [0xf3] = 0x0033, + [0xf4] = 0x0034, [0xf5] = 0x0035, [0xf6] = 0x0036, [0xf7] = 0x0037, + [0xf8] = 0x0038, [0xf9] = 0x0039, [0xfa] = 0x00b3, [0xfb] = 0x0106, + [0xfc] = 0x00dc, [0xfd] = 0x0141, [0xfe] = 0x015a, [0xff] = 0x009f +}; + +static const struct gap from_idx[] = +{ + { start: 0x0000, end: 0x00c9, idx: 0 }, + { start: 0x00d3, end: 0x00e9, idx: -9 }, + { start: 0x00f3, end: 0x0119, idx: -18 }, + { start: 0x0122, end: 0x0123, idx: -26 }, + { start: 0x012a, end: 0x012f, idx: -32 }, + { start: 0x0136, end: 0x014d, idx: -38 }, + { start: 0x0156, end: 0x0161, idx: -46 }, + { start: 0x016a, end: 0x016b, idx: -54 }, + { start: 0x0172, end: 0x017e, idx: -60 }, + { start: 0x2019, end: 0x201e, idx: -7894 }, + { start: 0x20ac, end: 0x20ac, idx: -8035 }, + { start: 0xffff, end: 0xffff, idx: 0 } +}; + +static const char from_ucs4[] = +{ + '\x00', '\x01', '\x02', '\x03', '\x37', '\x2d', '\x2e', '\x2f', + '\x16', '\x05', '\x25', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + '\x10', '\x11', '\x12', '\x13', '\x3c', '\x3d', '\x32', '\x26', + '\x18', '\x19', '\x3f', '\x27', '\x1c', '\x1d', '\x1e', '\x1f', + '\x40', '\x5a', '\x7f', '\x7b', '\x5b', '\x6c', '\x50', '\x7d', + '\x4d', '\x5d', '\x5c', '\x4e', '\x6b', '\x60', '\x4b', '\x61', + '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', + '\xf8', '\xf9', '\x7a', '\x5e', '\x4c', '\x7e', '\x6e', '\x6f', + '\x7c', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', + '\xc8', '\xc9', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', + '\xd7', '\xd8', '\xd9', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', + '\xe7', '\xe8', '\xe9', '\xba', '\xe0', '\xbb', '\xb0', '\x6d', + '\x79', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', + '\x97', '\x98', '\x99', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', + '\xa7', '\xa8', '\xa9', '\xc0', '\x4f', '\xd0', '\xa1', '\x07', + '\x20', '\x21', '\x22', '\x23', '\x24', '\x15', '\x06', '\x17', + '\x28', '\x29', '\x2a', '\x2b', '\x2c', '\x09', '\x0a', '\x1b', + '\x30', '\x31', '\x1a', '\x33', '\x34', '\x35', '\x36', '\x08', + '\x38', '\x39', '\x3a', '\x3b', '\x04', '\x14', '\x3e', '\xff', + '\x41', '\x00', '\x4a', '\xb1', '\x00', '\x00', '\x6a', '\xb5', + '\x00', '\xb4', '\x00', '\x8a', '\x5f', '\xca', '\xaf', '\x00', + '\x90', '\x8f', '\xea', '\xfa', '\x00', '\xa0', '\xb6', '\xb3', + '\x00', '\xda', '\x00', '\x8b', '\xb7', '\xb8', '\xb9', '\x00', + '\x00', '\x00', '\x00', '\x00', '\x63', '\x67', '\x9e', '\x00', + '\x00', '\x71', '\xee', '\x00', '\xef', '\xec', '\xbf', '\x80', + '\x00', '\x00', '\x00', '\xfc', '\x00', '\x00', '\x59', '\x00', + '\x00', '\x00', '\x00', '\x43', '\x47', '\x9c', '\x00', '\x00', + '\x51', '\xce', '\x00', '\xcf', '\xcc', '\xe1', '\x70', '\x00', + '\x00', '\x00', '\xdc', '\x00', '\x00', '\x00', '\xac', '\x8c', + '\x00', '\x00', '\x64', '\x44', '\xfb', '\xdb', '\x00', '\x00', + '\x00', '\x00', '\x74', '\x54', '\x00', '\x00', '\x00', '\x00', + '\x68', '\x48', '\x00', '\x00', '\x73', '\x53', '\x72', '\x52', + '\x78', '\x58', '\x76', '\xb2', '\x00', '\x00', '\x65', '\x45', + '\xbd', '\x9d', '\x00', '\x00', '\x00', '\x77', '\xbe', '\x00', + '\x00', '\x00', '\x00', '\xfd', '\xdd', '\xae', '\x8e', '\xed', + '\xcd', '\x00', '\x00', '\x00', '\x00', '\x00', '\xeb', '\xcb', + '\x9a', '\x9b', '\x00', '\x00', '\xfe', '\xde', '\x00', '\x00', + '\x00', '\x00', '\x62', '\x42', '\x66', '\x46', '\x75', '\x55', + '\x00', '\x00', '\x00', '\x00', '\x00', '\xbc', '\xab', '\xad', + '\x8d', '\x69', '\x49', '\xdf', '\x00', '\x00', '\x57', '\xaa', + '\x56', '\x9f' +}; diff --git a/iconvdata/ibm1157.c b/iconvdata/ibm1157.c new file mode 100644 index 0000000000..18ccc39efd --- /dev/null +++ b/iconvdata/ibm1157.c @@ -0,0 +1,29 @@ +/* Conversion from and to IBM1157. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdint.h> + +/* Get the conversion table. */ +#define TABLES <ibm1157.h> + +#define CHARSET_NAME "IBM1157//" +#define HAS_HOLES 0 /* All 256 character are defined. */ + +#include <8bit-gap.c> diff --git a/iconvdata/ibm1157.h b/iconvdata/ibm1157.h new file mode 100644 index 0000000000..f30f6dff49 --- /dev/null +++ b/iconvdata/ibm1157.h @@ -0,0 +1,134 @@ +/* Mapping table for IBM1157. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +static const uint32_t to_ucs4[256] = +{ + [0x00] = 0x0000, [0x01] = 0x0001, [0x02] = 0x0002, [0x03] = 0x0003, + [0x04] = 0x009c, [0x05] = 0x0009, [0x06] = 0x0086, [0x07] = 0x007f, + [0x08] = 0x0097, [0x09] = 0x008d, [0x0a] = 0x008e, [0x0b] = 0x000b, + [0x0c] = 0x000c, [0x0d] = 0x000d, [0x0e] = 0x000e, [0x0f] = 0x000f, + [0x10] = 0x0010, [0x11] = 0x0011, [0x12] = 0x0012, [0x13] = 0x0013, + [0x14] = 0x009d, [0x15] = 0x0085, [0x16] = 0x0008, [0x17] = 0x0087, + [0x18] = 0x0018, [0x19] = 0x0019, [0x1a] = 0x0092, [0x1b] = 0x008f, + [0x1c] = 0x001c, [0x1d] = 0x001d, [0x1e] = 0x001e, [0x1f] = 0x001f, + [0x20] = 0x0080, [0x21] = 0x0081, [0x22] = 0x0082, [0x23] = 0x0083, + [0x24] = 0x0084, [0x25] = 0x000a, [0x26] = 0x0017, [0x27] = 0x001b, + [0x28] = 0x0088, [0x29] = 0x0089, [0x2a] = 0x008a, [0x2b] = 0x008b, + [0x2c] = 0x008c, [0x2d] = 0x0005, [0x2e] = 0x0006, [0x2f] = 0x0007, + [0x30] = 0x0090, [0x31] = 0x0091, [0x32] = 0x0016, [0x33] = 0x0093, + [0x34] = 0x0094, [0x35] = 0x0095, [0x36] = 0x0096, [0x37] = 0x0004, + [0x38] = 0x0098, [0x39] = 0x0099, [0x3a] = 0x009a, [0x3b] = 0x009b, + [0x3c] = 0x0014, [0x3d] = 0x0015, [0x3e] = 0x009e, [0x3f] = 0x001a, + [0x40] = 0x0020, [0x41] = 0x00a0, [0x42] = 0x00e2, [0x43] = 0x007b, + [0x44] = 0x00e0, [0x45] = 0x00e1, [0x46] = 0x00e3, [0x47] = 0x007d, + [0x48] = 0x00e7, [0x49] = 0x00f1, [0x4a] = 0x00a7, [0x4b] = 0x002e, + [0x4c] = 0x003c, [0x4d] = 0x0028, [0x4e] = 0x002b, [0x4f] = 0x0021, + [0x50] = 0x0026, [0x51] = 0x0060, [0x52] = 0x00ea, [0x53] = 0x00eb, + [0x54] = 0x00e8, [0x55] = 0x00ed, [0x56] = 0x00ee, [0x57] = 0x00ef, + [0x58] = 0x00ec, [0x59] = 0x00df, [0x5a] = 0x20ac, [0x5b] = 0x00c5, + [0x5c] = 0x002a, [0x5d] = 0x0029, [0x5e] = 0x003b, [0x5f] = 0x005e, + [0x60] = 0x002d, [0x61] = 0x002f, [0x62] = 0x00c2, [0x63] = 0x0023, + [0x64] = 0x00c0, [0x65] = 0x00c1, [0x66] = 0x00c3, [0x67] = 0x0024, + [0x68] = 0x00c7, [0x69] = 0x00d1, [0x6a] = 0x00f6, [0x6b] = 0x002c, + [0x6c] = 0x0025, [0x6d] = 0x005f, [0x6e] = 0x003e, [0x6f] = 0x003f, + [0x70] = 0x00f8, [0x71] = 0x005c, [0x72] = 0x00ca, [0x73] = 0x00cb, + [0x74] = 0x00c8, [0x75] = 0x00cd, [0x76] = 0x00ce, [0x77] = 0x00cf, + [0x78] = 0x00cc, [0x79] = 0x00e9, [0x7a] = 0x003a, [0x7b] = 0x00c4, + [0x7c] = 0x00d6, [0x7d] = 0x0027, [0x7e] = 0x003d, [0x7f] = 0x0022, + [0x80] = 0x00d8, [0x81] = 0x0061, [0x82] = 0x0062, [0x83] = 0x0063, + [0x84] = 0x0064, [0x85] = 0x0065, [0x86] = 0x0066, [0x87] = 0x0067, + [0x88] = 0x0068, [0x89] = 0x0069, [0x8a] = 0x00ab, [0x8b] = 0x00bb, + [0x8c] = 0x0161, [0x8d] = 0x00fd, [0x8e] = 0x017e, [0x8f] = 0x00b1, + [0x90] = 0x00b0, [0x91] = 0x006a, [0x92] = 0x006b, [0x93] = 0x006c, + [0x94] = 0x006d, [0x95] = 0x006e, [0x96] = 0x006f, [0x97] = 0x0070, + [0x98] = 0x0071, [0x99] = 0x0072, [0x9a] = 0x00aa, [0x9b] = 0x00ba, + [0x9c] = 0x00e6, [0x9d] = 0x00b8, [0x9e] = 0x00c6, [0x9f] = 0x005d, + [0xa0] = 0x00b5, [0xa1] = 0x00fc, [0xa2] = 0x0073, [0xa3] = 0x0074, + [0xa4] = 0x0075, [0xa5] = 0x0076, [0xa6] = 0x0077, [0xa7] = 0x0078, + [0xa8] = 0x0079, [0xa9] = 0x007a, [0xaa] = 0x00a1, [0xab] = 0x00bf, + [0xac] = 0x0160, [0xad] = 0x00dd, [0xae] = 0x017d, [0xaf] = 0x00ae, + [0xb0] = 0x00a2, [0xb1] = 0x00a3, [0xb2] = 0x00a5, [0xb3] = 0x00b7, + [0xb4] = 0x00a9, [0xb5] = 0x005b, [0xb6] = 0x00b6, [0xb7] = 0x00bc, + [0xb8] = 0x00bd, [0xb9] = 0x00be, [0xba] = 0x00ac, [0xbb] = 0x007c, + [0xbc] = 0x00af, [0xbd] = 0x00a8, [0xbe] = 0x00b4, [0xbf] = 0x00d7, + [0xc0] = 0x00e4, [0xc1] = 0x0041, [0xc2] = 0x0042, [0xc3] = 0x0043, + [0xc4] = 0x0044, [0xc5] = 0x0045, [0xc6] = 0x0046, [0xc7] = 0x0047, + [0xc8] = 0x0048, [0xc9] = 0x0049, [0xca] = 0x00ad, [0xcb] = 0x00f4, + [0xcc] = 0x00a6, [0xcd] = 0x00f2, [0xce] = 0x00f3, [0xcf] = 0x00f5, + [0xd0] = 0x00e5, [0xd1] = 0x004a, [0xd2] = 0x004b, [0xd3] = 0x004c, + [0xd4] = 0x004d, [0xd5] = 0x004e, [0xd6] = 0x004f, [0xd7] = 0x0050, + [0xd8] = 0x0051, [0xd9] = 0x0052, [0xda] = 0x00b9, [0xdb] = 0x00fb, + [0xdc] = 0x007e, [0xdd] = 0x00f9, [0xde] = 0x00fa, [0xdf] = 0x00ff, + [0xe0] = 0x00c9, [0xe1] = 0x00f7, [0xe2] = 0x0053, [0xe3] = 0x0054, + [0xe4] = 0x0055, [0xe5] = 0x0056, [0xe6] = 0x0057, [0xe7] = 0x0058, + [0xe8] = 0x0059, [0xe9] = 0x005a, [0xea] = 0x00b2, [0xeb] = 0x00d4, + [0xec] = 0x0040, [0xed] = 0x00d2, [0xee] = 0x00d3, [0xef] = 0x00d5, + [0xf0] = 0x0030, [0xf1] = 0x0031, [0xf2] = 0x0032, [0xf3] = 0x0033, + [0xf4] = 0x0034, [0xf5] = 0x0035, [0xf6] = 0x0036, [0xf7] = 0x0037, + [0xf8] = 0x0038, [0xf9] = 0x0039, [0xfa] = 0x00b3, [0xfb] = 0x00db, + [0xfc] = 0x00dc, [0xfd] = 0x00d9, [0xfe] = 0x00da, [0xff] = 0x009f +}; + +static const struct gap from_idx[] = +{ + { start: 0x0000, end: 0x00ff, idx: 0 }, + { start: 0x0160, end: 0x0161, idx: -96 }, + { start: 0x017d, end: 0x017e, idx: -123 }, + { start: 0x203e, end: 0x203e, idx: -7994 }, + { start: 0x20ac, end: 0x20ac, idx: -8103 }, + { start: 0xffff, end: 0xffff, idx: 0 } +}; + +static const char from_ucs4[] = +{ + '\x00', '\x01', '\x02', '\x03', '\x37', '\x2d', '\x2e', '\x2f', + '\x16', '\x05', '\x25', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + '\x10', '\x11', '\x12', '\x13', '\x3c', '\x3d', '\x32', '\x26', + '\x18', '\x19', '\x3f', '\x27', '\x1c', '\x1d', '\x1e', '\x1f', + '\x40', '\x4f', '\x7f', '\x63', '\x67', '\x6c', '\x50', '\x7d', + '\x4d', '\x5d', '\x5c', '\x4e', '\x6b', '\x60', '\x4b', '\x61', + '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', + '\xf8', '\xf9', '\x7a', '\x5e', '\x4c', '\x7e', '\x6e', '\x6f', + '\xec', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', + '\xc8', '\xc9', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', + '\xd7', '\xd8', '\xd9', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', + '\xe7', '\xe8', '\xe9', '\xb5', '\x71', '\x9f', '\x5f', '\x6d', + '\x51', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', + '\x97', '\x98', '\x99', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', + '\xa7', '\xa8', '\xa9', '\x43', '\xbb', '\x47', '\xdc', '\x07', + '\x20', '\x21', '\x22', '\x23', '\x24', '\x15', '\x06', '\x17', + '\x28', '\x29', '\x2a', '\x2b', '\x2c', '\x09', '\x0a', '\x1b', + '\x30', '\x31', '\x1a', '\x33', '\x34', '\x35', '\x36', '\x08', + '\x38', '\x39', '\x3a', '\x3b', '\x04', '\x14', '\x3e', '\xff', + '\x41', '\xaa', '\xb0', '\xb1', '\x00', '\xb2', '\xcc', '\x4a', + '\xbd', '\xb4', '\x9a', '\x8a', '\xba', '\xca', '\xaf', '\xbc', + '\x90', '\x8f', '\xea', '\xfa', '\xbe', '\xa0', '\xb6', '\xb3', + '\x9d', '\xda', '\x9b', '\x8b', '\xb7', '\xb8', '\xb9', '\xab', + '\x64', '\x65', '\x62', '\x66', '\x7b', '\x5b', '\x9e', '\x68', + '\x74', '\xe0', '\x72', '\x73', '\x78', '\x75', '\x76', '\x77', + '\x00', '\x69', '\xed', '\xee', '\xeb', '\xef', '\x7c', '\xbf', + '\x80', '\xfd', '\xfe', '\xfb', '\xfc', '\xad', '\x00', '\x59', + '\x44', '\x45', '\x42', '\x46', '\xc0', '\xd0', '\x9c', '\x48', + '\x54', '\x79', '\x52', '\x53', '\x58', '\x55', '\x56', '\x57', + '\x00', '\x49', '\xcd', '\xce', '\xcb', '\xcf', '\x6a', '\xe1', + '\x70', '\xdd', '\xde', '\xdb', '\xa1', '\x8d', '\x00', '\xdf', + '\xac', '\x8c', '\xae', '\x8e', '\xbc', '\x5a' +}; diff --git a/iconvdata/ibm1158.c b/iconvdata/ibm1158.c new file mode 100644 index 0000000000..6ca7e6c1c6 --- /dev/null +++ b/iconvdata/ibm1158.c @@ -0,0 +1,29 @@ +/* Conversion from and to IBM1158. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <stdint.h> + +/* Get the conversion table. */ +#define TABLES <ibm1158.h> + +#define CHARSET_NAME "IBM1158//" +#define HAS_HOLES 0 /* All 256 character are defined. */ + +#include <8bit-gap.c> diff --git a/iconvdata/ibm1158.h b/iconvdata/ibm1158.h new file mode 100644 index 0000000000..31b71fee3b --- /dev/null +++ b/iconvdata/ibm1158.h @@ -0,0 +1,135 @@ +/* Mapping table for IBM1158. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jiro SEKIBA <sekiba@jp.ibm.com>, 2005. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +static const uint32_t to_ucs4[256] = +{ + [0x00] = 0x0000, [0x01] = 0x0001, [0x02] = 0x0002, [0x03] = 0x0003, + [0x04] = 0x009c, [0x05] = 0x0009, [0x06] = 0x0086, [0x07] = 0x007f, + [0x08] = 0x0097, [0x09] = 0x008d, [0x0a] = 0x008e, [0x0b] = 0x000b, + [0x0c] = 0x000c, [0x0d] = 0x000d, [0x0e] = 0x000e, [0x0f] = 0x000f, + [0x10] = 0x0010, [0x11] = 0x0011, [0x12] = 0x0012, [0x13] = 0x0013, + [0x14] = 0x009d, [0x15] = 0x0085, [0x16] = 0x0008, [0x17] = 0x0087, + [0x18] = 0x0018, [0x19] = 0x0019, [0x1a] = 0x0092, [0x1b] = 0x008f, + [0x1c] = 0x001c, [0x1d] = 0x001d, [0x1e] = 0x001e, [0x1f] = 0x001f, + [0x20] = 0x0080, [0x21] = 0x0081, [0x22] = 0x0082, [0x23] = 0x0083, + [0x24] = 0x0084, [0x25] = 0x000a, [0x26] = 0x0017, [0x27] = 0x001b, + [0x28] = 0x0088, [0x29] = 0x0089, [0x2a] = 0x008a, [0x2b] = 0x008b, + [0x2c] = 0x008c, [0x2d] = 0x0005, [0x2e] = 0x0006, [0x2f] = 0x0007, + [0x30] = 0x0090, [0x31] = 0x0091, [0x32] = 0x0016, [0x33] = 0x0093, + [0x34] = 0x0094, [0x35] = 0x0095, [0x36] = 0x0096, [0x37] = 0x0004, + [0x38] = 0x0098, [0x39] = 0x0099, [0x3a] = 0x009a, [0x3b] = 0x009b, + [0x3c] = 0x0014, [0x3d] = 0x0015, [0x3e] = 0x009e, [0x3f] = 0x001a, + [0x40] = 0x0020, [0x41] = 0x00a0, [0x42] = 0x0452, [0x43] = 0x0491, + [0x44] = 0x0451, [0x45] = 0x0454, [0x46] = 0x0455, [0x47] = 0x0456, + [0x48] = 0x0457, [0x49] = 0x0458, [0x4a] = 0x005b, [0x4b] = 0x002e, + [0x4c] = 0x003c, [0x4d] = 0x0028, [0x4e] = 0x002b, [0x4f] = 0x0021, + [0x50] = 0x0026, [0x51] = 0x0459, [0x52] = 0x045a, [0x53] = 0x045b, + [0x54] = 0x045c, [0x55] = 0x045e, [0x56] = 0x045f, [0x57] = 0x042a, + [0x58] = 0x2116, [0x59] = 0x0402, [0x5a] = 0x005d, [0x5b] = 0x0024, + [0x5c] = 0x002a, [0x5d] = 0x0029, [0x5e] = 0x003b, [0x5f] = 0x005e, + [0x60] = 0x002d, [0x61] = 0x002f, [0x62] = 0x0490, [0x63] = 0x0401, + [0x64] = 0x0404, [0x65] = 0x0405, [0x66] = 0x0406, [0x67] = 0x0407, + [0x68] = 0x0408, [0x69] = 0x0409, [0x6a] = 0x007c, [0x6b] = 0x002c, + [0x6c] = 0x0025, [0x6d] = 0x005f, [0x6e] = 0x003e, [0x6f] = 0x003f, + [0x70] = 0x040a, [0x71] = 0x040b, [0x72] = 0x040c, [0x73] = 0x00ad, + [0x74] = 0x040e, [0x75] = 0x040f, [0x76] = 0x044e, [0x77] = 0x0430, + [0x78] = 0x0431, [0x79] = 0x0060, [0x7a] = 0x003a, [0x7b] = 0x0023, + [0x7c] = 0x0040, [0x7d] = 0x0027, [0x7e] = 0x003d, [0x7f] = 0x0022, + [0x80] = 0x0446, [0x81] = 0x0061, [0x82] = 0x0062, [0x83] = 0x0063, + [0x84] = 0x0064, [0x85] = 0x0065, [0x86] = 0x0066, [0x87] = 0x0067, + [0x88] = 0x0068, [0x89] = 0x0069, [0x8a] = 0x0434, [0x8b] = 0x0435, + [0x8c] = 0x0444, [0x8d] = 0x0433, [0x8e] = 0x0445, [0x8f] = 0x0438, + [0x90] = 0x0439, [0x91] = 0x006a, [0x92] = 0x006b, [0x93] = 0x006c, + [0x94] = 0x006d, [0x95] = 0x006e, [0x96] = 0x006f, [0x97] = 0x0070, + [0x98] = 0x0071, [0x99] = 0x0072, [0x9a] = 0x043a, [0x9b] = 0x043b, + [0x9c] = 0x043c, [0x9d] = 0x043d, [0x9e] = 0x043e, [0x9f] = 0x043f, + [0xa0] = 0x044f, [0xa1] = 0x007e, [0xa2] = 0x0073, [0xa3] = 0x0074, + [0xa4] = 0x0075, [0xa5] = 0x0076, [0xa6] = 0x0077, [0xa7] = 0x0078, + [0xa8] = 0x0079, [0xa9] = 0x007a, [0xaa] = 0x0440, [0xab] = 0x0441, + [0xac] = 0x0442, [0xad] = 0x0443, [0xae] = 0x0436, [0xaf] = 0x0432, + [0xb0] = 0x044c, [0xb1] = 0x044b, [0xb2] = 0x0437, [0xb3] = 0x0448, + [0xb4] = 0x044d, [0xb5] = 0x0449, [0xb6] = 0x0447, [0xb7] = 0x044a, + [0xb8] = 0x042e, [0xb9] = 0x0410, [0xba] = 0x0411, [0xbb] = 0x0426, + [0xbc] = 0x0414, [0xbd] = 0x0415, [0xbe] = 0x0424, [0xbf] = 0x0413, + [0xc0] = 0x007b, [0xc1] = 0x0041, [0xc2] = 0x0042, [0xc3] = 0x0043, + [0xc4] = 0x0044, [0xc5] = 0x0045, [0xc6] = 0x0046, [0xc7] = 0x0047, + [0xc8] = 0x0048, [0xc9] = 0x0049, [0xca] = 0x0425, [0xcb] = 0x0418, + [0xcc] = 0x0419, [0xcd] = 0x041a, [0xce] = 0x041b, [0xcf] = 0x041c, + [0xd0] = 0x007d, [0xd1] = 0x004a, [0xd2] = 0x004b, [0xd3] = 0x004c, + [0xd4] = 0x004d, [0xd5] = 0x004e, [0xd6] = 0x004f, [0xd7] = 0x0050, + [0xd8] = 0x0051, [0xd9] = 0x0052, [0xda] = 0x041d, [0xdb] = 0x041e, + [0xdc] = 0x041f, [0xdd] = 0x042f, [0xde] = 0x0420, [0xdf] = 0x0421, + [0xe0] = 0x005c, [0xe1] = 0x20ac, [0xe2] = 0x0053, [0xe3] = 0x0054, + [0xe4] = 0x0055, [0xe5] = 0x0056, [0xe6] = 0x0057, [0xe7] = 0x0058, + [0xe8] = 0x0059, [0xe9] = 0x005a, [0xea] = 0x0422, [0xeb] = 0x0423, + [0xec] = 0x0416, [0xed] = 0x0412, [0xee] = 0x042c, [0xef] = 0x042b, + [0xf0] = 0x0030, [0xf1] = 0x0031, [0xf2] = 0x0032, [0xf3] = 0x0033, + [0xf4] = 0x0034, [0xf5] = 0x0035, [0xf6] = 0x0036, [0xf7] = 0x0037, + [0xf8] = 0x0038, [0xf9] = 0x0039, [0xfa] = 0x0417, [0xfb] = 0x0428, + [0xfc] = 0x042d, [0xfd] = 0x0429, [0xfe] = 0x0427, [0xff] = 0x009f +}; + +static const struct gap from_idx[] = +{ + { start: 0x0000, end: 0x00a0, idx: 0 }, + { start: 0x00ad, end: 0x00ad, idx: -12 }, + { start: 0x0401, end: 0x045f, idx: -863 }, + { start: 0x0490, end: 0x0491, idx: -911 }, + { start: 0x20ac, end: 0x20ac, idx: -8105 }, + { start: 0x2116, end: 0x2116, idx: -8210 }, + { start: 0xffff, end: 0xffff, idx: 0 } +}; + +static const char from_ucs4[] = +{ + '\x00', '\x01', '\x02', '\x03', '\x37', '\x2d', '\x2e', '\x2f', + '\x16', '\x05', '\x25', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + '\x10', '\x11', '\x12', '\x13', '\x3c', '\x3d', '\x32', '\x26', + '\x18', '\x19', '\x3f', '\x27', '\x1c', '\x1d', '\x1e', '\x1f', + '\x40', '\x4f', '\x7f', '\x7b', '\x5b', '\x6c', '\x50', '\x7d', + '\x4d', '\x5d', '\x5c', '\x4e', '\x6b', '\x60', '\x4b', '\x61', + '\xf0', '\xf1', '\xf2', '\xf3', '\xf4', '\xf5', '\xf6', '\xf7', + '\xf8', '\xf9', '\x7a', '\x5e', '\x4c', '\x7e', '\x6e', '\x6f', + '\x7c', '\xc1', '\xc2', '\xc3', '\xc4', '\xc5', '\xc6', '\xc7', + '\xc8', '\xc9', '\xd1', '\xd2', '\xd3', '\xd4', '\xd5', '\xd6', + '\xd7', '\xd8', '\xd9', '\xe2', '\xe3', '\xe4', '\xe5', '\xe6', + '\xe7', '\xe8', '\xe9', '\x4a', '\xe0', '\x5a', '\x5f', '\x6d', + '\x79', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87', + '\x88', '\x89', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', + '\x97', '\x98', '\x99', '\xa2', '\xa3', '\xa4', '\xa5', '\xa6', + '\xa7', '\xa8', '\xa9', '\xc0', '\x6a', '\xd0', '\xa1', '\x07', + '\x20', '\x21', '\x22', '\x23', '\x24', '\x15', '\x06', '\x17', + '\x28', '\x29', '\x2a', '\x2b', '\x2c', '\x09', '\x0a', '\x1b', + '\x30', '\x31', '\x1a', '\x33', '\x34', '\x35', '\x36', '\x08', + '\x38', '\x39', '\x3a', '\x3b', '\x04', '\x14', '\x3e', '\xff', + '\x41', '\x73', '\x63', '\x59', '\x00', '\x64', '\x65', '\x66', + '\x67', '\x68', '\x69', '\x70', '\x71', '\x72', '\x00', '\x74', + '\x75', '\xb9', '\xba', '\xed', '\xbf', '\xbc', '\xbd', '\xec', + '\xfa', '\xcb', '\xcc', '\xcd', '\xce', '\xcf', '\xda', '\xdb', + '\xdc', '\xde', '\xdf', '\xea', '\xeb', '\xbe', '\xca', '\xbb', + '\xfe', '\xfb', '\xfd', '\x57', '\xef', '\xee', '\xfc', '\xb8', + '\xdd', '\x77', '\x78', '\xaf', '\x8d', '\x8a', '\x8b', '\xae', + '\xb2', '\x8f', '\x90', '\x9a', '\x9b', '\x9c', '\x9d', '\x9e', + '\x9f', '\xaa', '\xab', '\xac', '\xad', '\x8c', '\x8e', '\x80', + '\xb6', '\xb3', '\xb5', '\xb7', '\xb1', '\xb0', '\xb4', '\x76', + '\xa0', '\x00', '\x44', '\x42', '\x00', '\x45', '\x46', '\x47', + '\x48', '\x49', '\x51', '\x52', '\x53', '\x54', '\x00', '\x55', + '\x56', '\x62', '\x43', '\xe1', '\x58' +}; diff --git a/iconvdata/ibm930.h b/iconvdata/ibm930.h index cbf24c39c2..739a88fe9d 100644 --- a/iconvdata/ibm930.h +++ b/iconvdata/ibm930.h @@ -45,7 +45,7 @@ static const uint16_t __ibm930sb_to_ucs4[256] = /* 0x40 */ 0x0020, 0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65, 0xFF66, 0xFF67, /* 0x48 */ 0xFF68, 0xFF69, 0x00A3, 0x002E, 0x003C, 0x0028, 0x002B, 0x007C, /* 0x50 */ 0x0026, 0xFF6A, 0xFF6B, 0xFF6C, 0xFF6D, 0xFF6E, 0xFF6F, 0x0000, - /* 0x58 */ 0xFF70, 0x0000, 0x0021, 0x005C, 0x002A, 0x0029, 0x003B, 0x00AC, + /* 0x58 */ 0xFF70, 0x0000, 0x0021, 0x00A5, 0x002A, 0x0029, 0x003B, 0x00AC, /* 0x60 */ 0x002D, 0x002F, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, /* 0x68 */ 0x0067, 0x0068, 0x0000, 0x002C, 0x0025, 0x005F, 0x003E, 0x003F, /* 0x70 */ 0x005B, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, diff --git a/iconvdata/ibm939.h b/iconvdata/ibm939.h index 0597294ac6..900a5e2445 100644 --- a/iconvdata/ibm939.h +++ b/iconvdata/ibm939.h @@ -56,7 +56,7 @@ static const uint16_t __ibm939sb_to_ucs4[256] = /* 0x98 */ 0x0071, 0x0072, 0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D, 0xFF8E, /* 0xa0 */ 0x203E, 0x007E, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, /* 0xa8 */ 0x0079, 0x007A, 0xFF8F, 0xFF90, 0xFF91, 0x005B, 0xFF92, 0xFF93, - /* 0xb0 */ 0x005E, 0x00A3, 0x005C, 0xFF94, 0xFF95, 0xFF96, 0xFF97, 0xFF98, + /* 0xb0 */ 0x005E, 0x00A3, 0x00A5, 0xFF94, 0xFF95, 0xFF96, 0xFF97, 0xFF98, /* 0xb8 */ 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D, 0x005D, 0xFF9E, 0xFF9F, /* 0xc0 */ 0x007B, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, /* 0xc8 */ 0x0048, 0x0049, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, diff --git a/iconvdata/testdata/IBM1025 b/iconvdata/testdata/IBM1025 new file mode 100644 index 0000000000..39b0a84127 --- /dev/null +++ b/iconvdata/testdata/IBM1025 @@ -0,0 +1,28 @@ + ! " # $ % & ' ( ) * + , - . / 0 +1 2 3 4 5 6 7 8 9 : ; < = > ? @ A +B C D E F G H I J K L M N O P Q R +S T U V W X Y Z [ \ ] ^ _ ` a b c +d e f g h i j k l m n o p q r s t +u v w x y z { | } ~ € ‚ ƒ „ … +† ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – +— ˜ ™ š › œ ž Ÿ ¡ ¢ £ ¤ ¥ ¦ § +¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ +¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É +Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú +Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë +ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü +ý þ ÿ + ! " # $ % & ' ( ) * + , - . / 0 +1 2 3 4 5 6 7 8 9 : ; < = > ? @ A +B C D E F G H I J K L M N O P Q R +S T U V W X Y Z [ \ ] ^ _ ` a b c +d e f g h i j k l m n o p q r s t +u v w x y z { | } ~ € ‚ ƒ „ … +† ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – +— ˜ ™ š › œ ž Ÿ ¡ ¢ £ ¤ ¥ ¦ § +¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ +¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É +Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú +Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë +ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü +ý þ ÿ diff --git a/iconvdata/testdata/IBM1025..UTF8 b/iconvdata/testdata/IBM1025..UTF8 new file mode 100644 index 0000000000..09024c8475 --- /dev/null +++ b/iconvdata/testdata/IBM1025..UTF8 @@ -0,0 +1,3 @@ +€€Â€‚€ƒ€„€ +€€€ˆ€‰€Š€‹€Œ€€€€ÂŽ‘€€“€”€•€–€€˜€™€š€›€€€ž€€ € Žђ€ѓ€ё€є€ѕ€і€ї€ј€[€.€<€(€+€!€&€љ€њŽћ€ќ€ў€џ€Ъ€№€Ђ€]€$€*€)€;€^€-€/€Ѓ€ÐŽЄ€Ѕ€І€Ї€Ј€Љ€|€,€%€_€>€?€Њ€Ћ€Ќ€Â€ЎŽÐ€ю€а€б€`€:€#€@€'€=€"€ц€a€b€c€d€eÂŽf€g€h€i€д€е€ф€г€х€и€й€j€k€l€m€n€oÂŽp€q€r€к€л€м€н€о€п€Ñ€~€s€t€u€v€w€xÂŽy€z€р€Ñ€т€у€ж€в€ь€ы€з€ш€Ñ€щ€ч€ъ€ЮŽÐ€Б€Ц€Д€Е€Ф€Г€{€A€B€C€D€E€F€G€H€IŽХ€И€Й€К€Л€М€}€J€K€L€M€N€O€P€Q€R€ÐŽО€П€Я€Р€С€\€§€S€T€U€V€W€X€Y€Z€Т€УŽЖ€В€Ь€Ы€0€1€2€3€4€5€6€7€8€9€З€Ш€ÐŽЩ€Ч€Ÿ€Ž€€Â€‚€ƒ€„€ +€€€ˆ€‰€Š€‹€Œ€€€€ÂŽ‘€€“€”€•€–€€˜€™€š€›€€€ž€€ € Žђ€ѓ€ё€є€ѕ€і€ї€ј€[€.€<€(€+€!€&€љ€њŽћ€ќ€ў€џ€Ъ€№€Ђ€]€$€*€)€;€^€-€/€Ѓ€ÐŽЄ€Ѕ€І€Ї€Ј€Љ€|€,€%€_€>€?€Њ€Ћ€Ќ€Â€ЎŽÐ€ю€а€б€`€:€#€@€'€=€"€ц€a€b€c€d€eÂŽf€g€h€i€д€е€ф€г€х€и€й€j€k€l€m€n€oÂŽp€q€r€к€л€м€н€о€п€Ñ€~€s€t€u€v€w€xÂŽy€z€р€Ñ€т€у€ж€в€ь€ы€з€ш€Ñ€щ€ч€ъ€ЮŽÐ€Б€Ц€Д€Е€Ф€Г€{€A€B€C€D€E€F€G€H€IŽХ€И€Й€К€Л€М€}€J€K€L€M€N€O€P€Q€R€ÐŽО€П€Я€Р€С€\€§€S€T€U€V€W€X€Y€Z€Т€УŽЖ€В€Ь€Ы€0€1€2€3€4€5€6€7€8€9€З€Ш€ÐŽЩ€Ч€Ÿ€Ž \ No newline at end of file diff --git a/iconvdata/testdata/IBM1122 b/iconvdata/testdata/IBM1122 new file mode 100644 index 0000000000..a67fa4ccd3 --- /dev/null +++ b/iconvdata/testdata/IBM1122 Binary files differdiff --git a/iconvdata/testdata/IBM1122..UTF8 b/iconvdata/testdata/IBM1122..UTF8 new file mode 100644 index 0000000000..a44b917bce --- /dev/null +++ b/iconvdata/testdata/IBM1122..UTF8 Binary files differdiff --git a/iconvdata/testdata/IBM1137 b/iconvdata/testdata/IBM1137 new file mode 100644 index 0000000000..30994bfe6b --- /dev/null +++ b/iconvdata/testdata/IBM1137 Binary files differdiff --git a/iconvdata/testdata/IBM1137..UTF8 b/iconvdata/testdata/IBM1137..UTF8 new file mode 100644 index 0000000000..b36d18ade5 --- /dev/null +++ b/iconvdata/testdata/IBM1137..UTF8 Binary files differdiff --git a/iconvdata/testdata/IBM1153 b/iconvdata/testdata/IBM1153 new file mode 100644 index 0000000000..a67fa4ccd3 --- /dev/null +++ b/iconvdata/testdata/IBM1153 Binary files differdiff --git a/iconvdata/testdata/IBM1153..UTF8 b/iconvdata/testdata/IBM1153..UTF8 new file mode 100644 index 0000000000..c621c423cb --- /dev/null +++ b/iconvdata/testdata/IBM1153..UTF8 Binary files differdiff --git a/iconvdata/testdata/IBM1154 b/iconvdata/testdata/IBM1154 new file mode 100644 index 0000000000..a67fa4ccd3 --- /dev/null +++ b/iconvdata/testdata/IBM1154 Binary files differdiff --git a/iconvdata/testdata/IBM1154..UTF8 b/iconvdata/testdata/IBM1154..UTF8 new file mode 100644 index 0000000000..7b431a49d0 --- /dev/null +++ b/iconvdata/testdata/IBM1154..UTF8 Binary files differdiff --git a/iconvdata/testdata/IBM1155 b/iconvdata/testdata/IBM1155 new file mode 100644 index 0000000000..a67fa4ccd3 --- /dev/null +++ b/iconvdata/testdata/IBM1155 Binary files differdiff --git a/iconvdata/testdata/IBM1155..UTF8 b/iconvdata/testdata/IBM1155..UTF8 new file mode 100644 index 0000000000..d3e53f9779 --- /dev/null +++ b/iconvdata/testdata/IBM1155..UTF8 Binary files differdiff --git a/iconvdata/testdata/IBM1156 b/iconvdata/testdata/IBM1156 new file mode 100644 index 0000000000..a67fa4ccd3 --- /dev/null +++ b/iconvdata/testdata/IBM1156 Binary files differdiff --git a/iconvdata/testdata/IBM1156..UTF8 b/iconvdata/testdata/IBM1156..UTF8 new file mode 100644 index 0000000000..5ff81538a3 --- /dev/null +++ b/iconvdata/testdata/IBM1156..UTF8 Binary files differdiff --git a/iconvdata/testdata/IBM1157 b/iconvdata/testdata/IBM1157 new file mode 100644 index 0000000000..a67fa4ccd3 --- /dev/null +++ b/iconvdata/testdata/IBM1157 Binary files differdiff --git a/iconvdata/testdata/IBM1157..UTF8 b/iconvdata/testdata/IBM1157..UTF8 new file mode 100644 index 0000000000..6687d34991 --- /dev/null +++ b/iconvdata/testdata/IBM1157..UTF8 Binary files differdiff --git a/iconvdata/testdata/IBM1158 b/iconvdata/testdata/IBM1158 new file mode 100644 index 0000000000..a67fa4ccd3 --- /dev/null +++ b/iconvdata/testdata/IBM1158 Binary files differdiff --git a/iconvdata/testdata/IBM1158..UTF8 b/iconvdata/testdata/IBM1158..UTF8 new file mode 100644 index 0000000000..1fb7dbc821 --- /dev/null +++ b/iconvdata/testdata/IBM1158..UTF8 Binary files differdiff --git a/iconvdata/testdata/IBM930..UTF8 b/iconvdata/testdata/IBM930..UTF8 index 89df7f15ac..639a16fdac 100644 --- a/iconvdata/testdata/IBM930..UTF8 +++ b/iconvdata/testdata/IBM930..UTF8 Binary files differdiff --git a/iconvdata/testdata/IBM939..UTF8 b/iconvdata/testdata/IBM939..UTF8 index 89df7f15ac..639a16fdac 100644 --- a/iconvdata/testdata/IBM939..UTF8 +++ b/iconvdata/testdata/IBM939..UTF8 Binary files differdiff --git a/include/features.h b/include/features.h index 5e6cca5c86..cb0844ddda 100644 --- a/include/features.h +++ b/include/features.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1993,1995-2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1991-1993,1995-2003,2004,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff --git a/include/libintl.h b/include/libintl.h index 8f312f1042..20083d4264 100644 --- a/include/libintl.h +++ b/include/libintl.h @@ -41,7 +41,7 @@ extern char *__bind_textdomain_codeset (__const char *__domainname, __const char *__codeset); extern const char _libc_intl_domainname[]; -extern const char _libc_intl_domainname_internal[] attribute_hidden; +libc_hidden_proto (_libc_intl_domainname) /* Define the macros `_' and `N_' for conveniently marking translatable strings in the libc source code. We have to make sure we get the @@ -52,12 +52,7 @@ extern const char _libc_intl_domainname_internal[] attribute_hidden; # undef _ /* This is defined as an optimizing macro, so use it. */ -# if !defined NOT_IN_libc && defined SHARED -# define _(msgid) \ - __dcgettext_internal (_libc_intl_domainname_internal, msgid, LC_MESSAGES) -# else -# define _(msgid) \ +# define _(msgid) \ __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) -#endif #endif diff --git a/include/signal.h b/include/signal.h index dc1e0a12e5..2be67babad 100644 --- a/include/signal.h +++ b/include/signal.h @@ -50,7 +50,7 @@ extern int __xpg_sigpause (int sig); /* Simplified sigemptyset() implementation without the parameter checking. */ #undef __sigemptyset -#define __sigemptyset(ss) (memset (ss, '\0', sizeof (sigset_t)), 0) +#define __sigemptyset(ss) (__builtin_memset (ss, '\0', sizeof (sigset_t)), 0) /* Allocate real-time signal with highest/lowest available priority. */ diff --git a/include/stdio.h b/include/stdio.h index 0c1e8fca10..c8c89ad878 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -38,6 +38,8 @@ extern int __printf_chk (int, const char *, ...); extern int __fprintf_chk (FILE *, int, const char *, ...); extern int __vprintf_chk (int, const char *, _G_va_list); extern int __vfprintf_chk (FILE *, int, const char *, _G_va_list); +extern char *__fgets_unlocked_chk (char *buf, size_t size, int n, FILE *fp); +extern char *__fgets_chk (char *buf, size_t size, int n, FILE *fp); /* Prototypes for compatibility functions. */ extern FILE *__new_tmpfile (void); diff --git a/include/sys/socket.h b/include/sys/socket.h index 937909a125..0a226726aa 100644 --- a/include/sys/socket.h +++ b/include/sys/socket.h @@ -59,6 +59,14 @@ extern int __connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len); extern int __connect_internal (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len) attribute_hidden; +/* Read N bytes into BUF from socket FD. + Returns the number read or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern ssize_t __recv (int __fd, void *__buf, size_t __n, int __flags) + attribute_hidden; + /* Send N bytes of BUF on socket FD to peer at address ADDR (which is ADDR_LEN bytes long). Returns the number sent, or -1 for errors. */ extern ssize_t __libc_sendto (int __fd, __const void *__buf, size_t __n, diff --git a/inet/rexec.c b/inet/rexec.c index 3c14836aa2..6deb1feb45 100644 --- a/inet/rexec.c +++ b/inet/rexec.c @@ -111,7 +111,8 @@ retry: port = 0; } else { char num[32]; - int s2, sa2len; + int s2; + socklen_t sa2len; s2 = __socket(res0->ai_family, res0->ai_socktype, 0); if (s2 < 0) { @@ -136,7 +137,7 @@ retry: port = atoi(servbuff); (void) sprintf(num, "%u", port); (void) __write(s, num, strlen(num)+1); - { int len = sizeof (from); + { socklen_t len = sizeof (from); s3 = TEMP_FAILURE_RETRY (accept(s2, (struct sockaddr *)&from, &len)); __close(s2); diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c index 39256ed566..546da8e29d 100644 --- a/intl/bindtextdom.c +++ b/intl/bindtextdom.c @@ -1,5 +1,5 @@ /* Implementation of the bindtextdomain(3) function - Copyright (C) 1995-1998, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1995-1998, 2000, 2001, 2002, 2005 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,9 +60,7 @@ /* Contains the default location of the message catalogs. */ extern const char _nl_default_dirname[]; #ifdef _LIBC -extern const char _nl_default_dirname_internal[] attribute_hidden; -#else -# define INTUSE(name) name +libc_hidden_proto (_nl_default_dirname) #endif /* List with bindings of specific domains. */ @@ -152,8 +150,8 @@ set_binding_values (domainname, dirnamep, codesetp) char *result = binding->dirname; if (strcmp (dirname, result) != 0) { - if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0) - result = (char *) INTUSE(_nl_default_dirname); + if (strcmp (dirname, _nl_default_dirname) == 0) + result = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP @@ -168,7 +166,7 @@ set_binding_values (domainname, dirnamep, codesetp) if (__builtin_expect (result != NULL, 1)) { - if (binding->dirname != INTUSE(_nl_default_dirname)) + if (binding->dirname != _nl_default_dirname) free (binding->dirname); binding->dirname = result; @@ -222,7 +220,7 @@ set_binding_values (domainname, dirnamep, codesetp) { /* Simply return the default values. */ if (dirnamep) - *dirnamep = INTUSE(_nl_default_dirname); + *dirnamep = _nl_default_dirname; if (codesetp) *codesetp = NULL; } @@ -244,11 +242,11 @@ set_binding_values (domainname, dirnamep, codesetp) if (dirname == NULL) /* The default value. */ - dirname = INTUSE(_nl_default_dirname); + dirname = _nl_default_dirname; else { - if (strcmp (dirname, INTUSE(_nl_default_dirname)) == 0) - dirname = INTUSE(_nl_default_dirname); + if (strcmp (dirname, _nl_default_dirname) == 0) + dirname = _nl_default_dirname; else { char *result; @@ -271,7 +269,7 @@ set_binding_values (domainname, dirnamep, codesetp) } else /* The default value. */ - new_binding->dirname = (char *) INTUSE(_nl_default_dirname); + new_binding->dirname = (char *) _nl_default_dirname; new_binding->codeset_cntr = 0; @@ -327,7 +325,7 @@ set_binding_values (domainname, dirnamep, codesetp) if (0) { failed_codeset: - if (new_binding->dirname != INTUSE(_nl_default_dirname)) + if (new_binding->dirname != _nl_default_dirname) free (new_binding->dirname); failed_dirname: free (new_binding); diff --git a/intl/dcigettext.c b/intl/dcigettext.c index d7111729b9..75762ea18f 100644 --- a/intl/dcigettext.c +++ b/intl/dcigettext.c @@ -1,5 +1,5 @@ /* Implementation of the internal dcigettext function. - Copyright (C) 1995-2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1995-2002,2003,2004,2005 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 @@ -236,13 +236,6 @@ transcmp (p1, p2) } #endif -#ifndef INTVARDEF -# define INTVARDEF -#endif -#ifndef INTUSE -# define INTUSE(name) name -#endif - /* Name of the default domain used for gettext(3) prior any call to textdomain(3). The default value for this is "messages". */ const char _nl_default_default_domain[] attribute_hidden = "messages"; @@ -252,8 +245,15 @@ const char *_nl_current_default_domain attribute_hidden = _nl_default_default_domain; /* Contains the default location of the message catalogs. */ + +#ifdef _LIBC +extern const char _nl_default_dirname[]; +libc_hidden_proto (_nl_default_dirname) +#endif const char _nl_default_dirname[] = LOCALEDIR; -INTVARDEF (_nl_default_dirname) +#ifdef _LIBC +libc_hidden_data_def (_nl_default_dirname) +#endif /* List with bindings of specific domains created by bindtextdomain() calls. */ @@ -485,7 +485,7 @@ DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category) } if (binding == NULL) - dirname = (char *) INTUSE(_nl_default_dirname); + dirname = (char *) _nl_default_dirname; else if (binding->dirname[0] == '/') dirname = binding->dirname; else @@ -882,7 +882,7 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp) goto converted; } - inbuf = result; + inbuf = (const unsigned char *) result; # else # if HAVE_ICONV const char *inptr = (const char *) inbuf; @@ -950,7 +950,7 @@ _nl_find_msg (domain_file, domainbinding, msgid, lengthp) newmem->next = transmem_list; transmem_list = newmem; - freemem = newmem->data; + freemem = (unsigned char *) newmem->data; freemem_size -= offsetof (struct transmem_list, data); # else transmem_list = newmem; @@ -1161,7 +1161,7 @@ libc_freeres_fn (free_mem) { struct binding *oldp = _nl_domain_bindings; _nl_domain_bindings = _nl_domain_bindings->next; - if (oldp->dirname != INTUSE(_nl_default_dirname)) + if (oldp->dirname != _nl_default_dirname) /* Yes, this is a pointer comparison. */ free (oldp->dirname); free (oldp->codeset); diff --git a/libidn/ChangeLog b/libidn/ChangeLog index daeb4bdef0..df3a6269e8 100644 --- a/libidn/ChangeLog +++ b/libidn/ChangeLog @@ -1,3 +1,14 @@ +2005-02-12 Simon Josefsson <jas@extundo.com > + + * iconvme.h: New file, extracted from toutf8.c but improved. + * iconvme.c: New file. + * toutf8.c: Include stringprep.h first, to make the compiler check + that stringprep.h is standalone. Improve comments. Replace + #include of errno.h and sys/param.h with iconvme.h. Don't define + ICONV_CONST. + (stringprep_convert): Rewrite to use iconvme.h. + * Makefile (libcidn-routines): Add iconvme. + 2004-10-05 Ulrich Drepper <drepper@redhat.com> * idn-stub.c (unload_libidn): Don't define outside libc. diff --git a/libidn/Makefile b/libidn/Makefile index 8e8759bdcc..3d2ef5ef9b 100644 --- a/libidn/Makefile +++ b/libidn/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005 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,14 +20,15 @@ subdir := libidn -distribute := punycode.h stringprep.h idna.h +distribute := punycode.h stringprep.h idna.h iconvme.h routines = idn-stub extra-libs = libcidn extra-libs-others = $(extra-libs) -libcidn-routines := punycode toutf8 nfkc stringprep rfc3454 profiles idna +libcidn-routines := punycode toutf8 nfkc stringprep rfc3454 profiles idna \ + iconvme include ../Makeconfig diff --git a/libidn/iconvme.c b/libidn/iconvme.c new file mode 100644 index 0000000000..daf0c8e349 --- /dev/null +++ b/libidn/iconvme.c @@ -0,0 +1,159 @@ +/* Recode strings between character sets, using iconv. + Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1, or (at + your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +/* Get prototype. */ +#include "iconvme.h" + +/* Get malloc. */ +#include <stdlib.h> + +/* Get strcmp. */ +#include <string.h> + +/* Get errno. */ +#include <errno.h> + +#ifdef _LIBC +# define HAVE_ICONV 1 +#else +/* Get strdup. */ +# include "strdup.h" +#endif + +#if HAVE_ICONV +/* Get iconv etc. */ +# include <iconv.h> +/* Get MB_LEN_MAX. */ +# include <limits.h> +#endif + +/* Convert a zero-terminated string STR from the FROM_CODSET code set + to the TO_CODESET code set. The returned string is allocated using + malloc, and must be dellocated by the caller using free. On + failure, NULL is returned and errno holds the error reason. Note + that if TO_CODESET uses \0 for anything but to terminate the + string, the caller of this function may have difficulties finding + out the length of the output string. */ +char * +iconv_string (const char *str, const char *from_codeset, + const char *to_codeset) +{ + char *dest = NULL; +#if HAVE_ICONV + iconv_t cd; + char *outp; + char *p = (char *) str; + size_t inbytes_remaining = strlen (p); + /* Guess the maximum length the output string can have. */ + size_t outbuf_size = (inbytes_remaining + 1) * MB_LEN_MAX; + size_t outbytes_remaining = outbuf_size - 1; /* -1 for NUL */ + size_t err; + int have_error = 0; +#endif + + if (strcmp (to_codeset, from_codeset) == 0) + return strdup (str); + +#if HAVE_ICONV + cd = iconv_open (to_codeset, from_codeset); + if (cd == (iconv_t) -1) + return NULL; + + outp = dest = (char *) malloc (outbuf_size); + if (dest == NULL) + goto out; + +again: + err = iconv (cd, &p, &inbytes_remaining, &outp, &outbytes_remaining); + + if (err == (size_t) - 1) + { + switch (errno) + { + case EINVAL: + /* Incomplete text, do not report an error */ + break; + + case E2BIG: + { + size_t used = outp - dest; + size_t newsize = outbuf_size * 2; + char *newdest; + + if (newsize <= outbuf_size) + { + errno = ENOMEM; + have_error = 1; + goto out; + } + newdest = (char *) realloc (dest, newsize); + if (newdest == NULL) + { + have_error = 1; + goto out; + } + dest = newdest; + outbuf_size = newsize; + + outp = dest + used; + outbytes_remaining = outbuf_size - used - 1; /* -1 for NUL */ + + goto again; + } + break; + + case EILSEQ: + have_error = 1; + break; + + default: + have_error = 1; + break; + } + } + + *outp = '\0'; + +out: + { + int save_errno = errno; + + if (iconv_close (cd) < 0 && !have_error) + { + /* If we didn't have a real error before, make sure we restore + the iconv_close error below. */ + save_errno = errno; + have_error = 1; + } + + if (have_error && dest) + { + free (dest); + dest = NULL; + errno = save_errno; + } + } +#else + errno = ENOSYS; +#endif + + return dest; +} diff --git a/libidn/iconvme.h b/libidn/iconvme.h new file mode 100644 index 0000000000..3eb9b32b49 --- /dev/null +++ b/libidn/iconvme.h @@ -0,0 +1,25 @@ +/* Recode strings between character sets, using iconv. + Copyright (C) 2004 Free Software Foundation, Inc. + Written by Simon Josefsson. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along + with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef ICONVME_H +# define ICONVME_H + +extern char *iconv_string (const char *string, const char *from_code, + const char *to_code); + +#endif /* ICONVME_H */ diff --git a/libidn/toutf8.c b/libidn/toutf8.c index 262f252d5f..dad47c9af0 100644 --- a/libidn/toutf8.c +++ b/libidn/toutf8.c @@ -1,5 +1,5 @@ -/* toutf8.c Convert strings from system locale into UTF-8. - * Copyright (C) 2002, 2003, 2004 Simon Josefsson +/* toutf8.c --- Convert strings from system locale into UTF-8. + * Copyright (C) 2002, 2003, 2004, 2005 Simon Josefsson * * This file is part of GNU Libidn. * @@ -23,33 +23,36 @@ # include "config.h" #endif +/* Get prototypes. */ +#include "stringprep.h" + +/* Get fprintf. */ #include <stdio.h> + +/* Get getenv. */ #include <stdlib.h> + +/* Get strlen. */ #include <string.h> -#include <errno.h> -#include <sys/param.h> -#include "stringprep.h" +/* Get iconv_string. */ +#include "iconvme.h" #ifdef _LIBC # define HAVE_ICONV 1 # define LOCALE_WORKS 1 -# define ICONV_CONST #endif -#ifdef HAVE_ICONV -# include <iconv.h> - -# if LOCALE_WORKS -# include <langinfo.h> -# include <locale.h> -# endif +#if LOCALE_WORKS +# include <langinfo.h> +# include <locale.h> +#endif -# ifdef _LIBC -# define stringprep_locale_charset() nl_langinfo (CODESET) -# else +#ifdef _LIBC +# define stringprep_locale_charset() nl_langinfo (CODESET) +#else /** - * stringprep_locale_charset: + * stringprep_locale_charset - return charset used in current locale * * Find out current locale charset. The function respect the CHARSET * environment variable, but typically uses nl_langinfo(CODESET) when @@ -76,19 +79,19 @@ stringprep_locale_charset (void) if (charset && *charset) return charset; -# ifdef LOCALE_WORKS +# ifdef LOCALE_WORKS charset = nl_langinfo (CODESET); if (charset && *charset) return charset; -# endif +# endif return "ASCII"; } -# endif +#endif /** - * stringprep_convert: + * stringprep_convert - encode string using new character set * @str: input zero-terminated string. * @to_codeset: name of destination character set. * @from_codeset: name of origin character set, as used by @str. @@ -103,132 +106,21 @@ char * stringprep_convert (const char *str, const char *to_codeset, const char *from_codeset) { - iconv_t cd; - char *dest; - char *outp; - ICONV_CONST char *p; - size_t inbytes_remaining; - size_t outbytes_remaining; - size_t err; - size_t outbuf_size; - int have_error = 0; - - if (strcmp (to_codeset, from_codeset) == 0) - { -#if defined HAVE_STRDUP || defined _LIBC - return strdup (str); +#if HAVE_ICONV + return iconv_string (str, from_codeset, to_codeset); #else - char *p; - p = malloc (strlen (str) + 1); - if (!p) - return NULL; - return strcpy (p, str); -#endif - } - - cd = iconv_open (to_codeset, from_codeset); - - if (cd == (iconv_t) - 1) - return NULL; - - p = (ICONV_CONST char *) str; - - inbytes_remaining = strlen (p); - /* Guess the maximum length the output string can have. */ - outbuf_size = (inbytes_remaining + 1) * MAX (7, MB_CUR_MAX); - - outp = dest = malloc (outbuf_size); - if (dest == NULL) - goto out; - outbytes_remaining = outbuf_size - 1; /* -1 for NUL */ - -again: - - err = iconv (cd, (ICONV_CONST char **) &p, &inbytes_remaining, - &outp, &outbytes_remaining); - - if (err == (size_t) - 1) - { - switch (errno) - { - case EINVAL: - /* Incomplete text, do not report an error */ - break; - - case E2BIG: - { - size_t used = outp - dest; - char *newdest; - - outbuf_size *= 2; - newdest = realloc (dest, outbuf_size); - if (newdest == NULL) - { - have_error = 1; - goto out; - } - dest = newdest; - - outp = dest + used; - outbytes_remaining = outbuf_size - used - 1; /* -1 for NUL */ - - goto again; - } - break; - - case EILSEQ: - have_error = 1; - break; - - default: - have_error = 1; - break; - } - } - - *outp = '\0'; - - if (*p != '\0') - have_error = 1; - - out: - iconv_close (cd); - - if (have_error) - { - free (dest); - dest = NULL; - } - - return dest; -} - -#else /* HAVE_ICONV */ - -const char * -stringprep_locale_charset () -{ - return "ASCII"; -} - -char * -stringprep_convert (const char *str, - const char *to_codeset, const char *from_codeset) -{ char *p; fprintf (stderr, "libidn: warning: libiconv not installed, cannot " "convert data to UTF-8\n"); p = malloc (strlen (str) + 1); if (!p) return NULL; - strcpy (p, str); - return p; + return strcpy (p, str); +#endif } -#endif /* HAVE_ICONV */ - /** - * stringprep_locale_to_utf8: + * stringprep_locale_to_utf8 - convert locale encoded string to UTF-8 * @str: input zero terminated string. * * Convert string encoded in the locale's character set into UTF-8 by @@ -244,7 +136,7 @@ stringprep_locale_to_utf8 (const char *str) } /** - * stringprep_utf8_to_locale: + * stringprep_utf8_to_locale - encode UTF-8 string to locale encoding * @str: input zero terminated string. * * Convert string encoded in UTF-8 into the locale's character set by diff --git a/libio/bits/stdio2.h b/libio/bits/stdio2.h index 42a326c60a..e33cbb401a 100644 --- a/libio/bits/stdio2.h +++ b/libio/bits/stdio2.h @@ -1,5 +1,5 @@ /* Checking macros for stdio functions. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2005 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,7 +49,7 @@ extern int __vsnprintf_chk (char *__restrict __s, size_t __n, int __flag, __builtin___vsnprintf_chk (str, len, __USE_FORTIFY_LEVEL - 1, __bos (str), \ fmt, ap) -#endif +#endif #if __USE_FORTIFY_LEVEL > 1 @@ -85,5 +85,16 @@ extern int __vprintf_chk (int __flag, __const char *__restrict __format, extern char *__gets_chk (char *__str, size_t); #define gets(__str) \ - ((__bos (__str) == (size_t) -1) \ - ? (gets) (__str) : __gets_chk (__str, __bos (__str))) + ((__bos (__str) == (size_t) -1) \ + ? gets (__str) : __gets_chk (__str, __bos (__str))) + +extern char *__fgets_chk (char *s, size_t size, int n, FILE *stream); +#define fgets(__str, __n, __fp) \ + ((__bos (__str) == (size_t) -1) \ + ? fgets (__str, __n, __fp) : __fgets_chk (__str, __bos (__str), __n, __fp)) + +extern char *__fgets_unlocked_chk (char *s, size_t size, int n, FILE *stream); +#define fgets_unlocked(__str, __n, __fp) \ + ((__bos (__str) == (size_t) -1) \ + ? fgets_unlocked (__str, __n, __fp) \ + : __fgets_unlocked_chk (__str, __bos (__str), __n, __fp)) diff --git a/libio/libio.h b/libio/libio.h index 3b6facdddb..21e70489cf 100644 --- a/libio/libio.h +++ b/libio/libio.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1995, 1997-2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1991-1995,1997-2003,2004,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Per Bothner <bothner@cygnus.com>. @@ -411,7 +411,7 @@ extern _IO_wint_t __wuflow (_IO_FILE *) __THROW; extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t) __THROW; #if __GNUC__ >= 3 -# define _IO_BE(expr, res) __builtin_expect (expr, res) +# define _IO_BE(expr, res) __builtin_expect ((expr), res) #else # define _IO_BE(expr, res) (expr) #endif diff --git a/locale/SYS_libc.c b/locale/SYS_libc.c index 4f9e946cf3..a879b68a25 100644 --- a/locale/SYS_libc.c +++ b/locale/SYS_libc.c @@ -1,5 +1,7 @@ /* Define a constant for the dgettext domainname for libc internal messages, so the string constant is not repeated in dozens of object files. */ +#include <libintl.h> + const char _libc_intl_domainname[] = "libc"; -INTDEF(_libc_intl_domainname) +libc_hidden_data_def (_libc_intl_domainname) diff --git a/locale/lc-ctype.c b/locale/lc-ctype.c index 21964b9130..a0a54fbd8d 100644 --- a/locale/lc-ctype.c +++ b/locale/lc-ctype.c @@ -1,5 +1,5 @@ /* Define current locale data for LC_CTYPE category. - Copyright (C) 1995,1996,1997,1998,1999,2000,2002,2003 + Copyright (C) 1995,1996,1997,1998,1999,2000,2002,2003,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -102,8 +102,8 @@ compat_symbol (libc, __ctype32_tolower, __ctype32_tolower, GLIBC_2_2); compat_symbol (libc, __ctype32_toupper, __ctype32_toupper, GLIBC_2_2); __ctype_b = current (uint16_t, CLASS, 128); - __ctype_toupper = current (uint32_t, TOUPPER, 128); - __ctype_tolower = current (uint32_t, TOLOWER, 128); + __ctype_toupper = current (int32_t, TOUPPER, 128); + __ctype_tolower = current (int32_t, TOLOWER, 128); __ctype32_b = current (uint32_t, CLASS32, 0); __ctype32_toupper = current (uint32_t, TOUPPER32, 0); __ctype32_tolower = current (uint32_t, TOLOWER32, 0); diff --git a/locale/programs/charmap.c b/locale/programs/charmap.c index 8dbac6f5b9..b8aa1aafc4 100644 --- a/locale/programs/charmap.c +++ b/locale/programs/charmap.c @@ -49,8 +49,9 @@ static void new_width (struct linereader *cmfile, struct charmap_t *result, const char *from, const char *to, unsigned long int width); static void charmap_new_char (struct linereader *lr, struct charmap_t *cm, - int nbytes, char *bytes, const char *from, - const char *to, int decimal_ellipsis, int step); + size_t nbytes, unsigned char *bytes, + const char *from, const char *to, + int decimal_ellipsis, int step); bool enc_not_ascii_compatible; @@ -927,7 +928,8 @@ charmap_find_value (const struct charmap_t *cm, const char *name, size_t len) static void charmap_new_char (struct linereader *lr, struct charmap_t *cm, - int nbytes, char *bytes, const char *from, const char *to, + size_t nbytes, unsigned char *bytes, + const char *from, const char *to, int decimal_ellipsis, int step) { hash_table *ht = &cm->char_table; diff --git a/locale/programs/linereader.c b/locale/programs/linereader.c index 233799a87d..5c8cf65012 100644 --- a/locale/programs/linereader.c +++ b/locale/programs/linereader.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996-2001, 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1996-2001,2002,2003,2004,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. @@ -347,8 +347,8 @@ get_toplvl_escape (struct linereader *lr) /* This is supposed to be a numeric value. We return the numerical value and the number of bytes. */ size_t start_idx = lr->idx - 1; - char *bytes = lr->token.val.charcode.bytes; - int nbytes = 0; + unsigned char *bytes = lr->token.val.charcode.bytes; + size_t nbytes = 0; int ch; do diff --git a/malloc/Makefile b/malloc/Makefile index 0512c49839..45e8f59ab4 100644 --- a/malloc/Makefile +++ b/malloc/Makefile @@ -101,6 +101,8 @@ $(objpfx)memusagestat: $(memusagestat-modules:%=$(objpfx)%.o) include ../Rules +CFLAGS-mcheck-init.c = $(PIC-ccflag) + $(objpfx)libmcheck.a: $(objpfx)mcheck-init.o -rm -f $@ $(patsubst %/,cd % &&,$(objpfx)) \ diff --git a/malloc/arena.c b/malloc/arena.c index 026f2c7822..8202aaf01b 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -1,5 +1,5 @@ /* Malloc implementation for multiple threads without lock contention. - Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Wolfram Gloger <wg@malloc.de>, 2001. @@ -20,6 +20,8 @@ /* $Id$ */ +#include <stdbool.h> + /* Compile-time constants. */ #define HEAP_MIN_SIZE (32*1024) @@ -353,8 +355,6 @@ libc_hidden_proto (_dl_open_hook); # endif # if defined SHARED && defined USE_TLS && !USE___THREAD -# include <stdbool.h> - /* This is called by __pthread_initialize_minimal when it needs to use malloc to set up the TLS state. We cannot do the full work of ptmalloc_init (below) until __pthread_initialize_minimal has finished, diff --git a/malloc/malloc.c b/malloc/malloc.c index 4d2169bf78..5c9e77e9ec 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -5513,7 +5513,9 @@ extern char **__libc_argv attribute_hidden; static void malloc_printerr(int action, const char *str, void *ptr) { - if (action & 1) + if ((action & 5) == 5) + __libc_message (action & 2, "%s\n", str); + else if (action & 1) { char buf[2 * sizeof (uintptr_t) + 1]; @@ -5523,8 +5525,7 @@ malloc_printerr(int action, const char *str, void *ptr) *--cp = '0'; __libc_message (action & 2, - action & 4 - ? "%s\n" : "*** glibc detected *** %s: %s: 0x%s ***\n", + "*** glibc detected *** %s: %s: 0x%s ***\n", __libc_argv[0] ?: "<unknown>", str, cp); } else if (action & 2) diff --git a/manual/filesys.texi b/manual/filesys.texi index 70889c2f85..084d18cd8c 100644 --- a/manual/filesys.texi +++ b/manual/filesys.texi @@ -531,7 +531,7 @@ added or removed since you last called @code{opendir} or @comment dirent.h @comment BSD -@deftypefun off_t telldir (DIR *@var{dirstream}) +@deftypefun long int telldir (DIR *@var{dirstream}) The @code{telldir} function returns the file position of the directory stream @var{dirstream}. You can use this value with @code{seekdir} to restore the directory stream to that position. @@ -539,7 +539,7 @@ restore the directory stream to that position. @comment dirent.h @comment BSD -@deftypefun void seekdir (DIR *@var{dirstream}, off_t @var{pos}) +@deftypefun void seekdir (DIR *@var{dirstream}, long int @var{pos}) The @code{seekdir} function sets the file position of the directory stream @var{dirstream} to @var{pos}. The value @var{pos} must be the result of a previous call to @code{telldir} on this particular stream; @@ -1740,7 +1740,7 @@ is transparently replaced by @code{ino64_t}. @deftp {Data Type} ino64_t This is an arithmetic data type used to represent file serial numbers for the use in LFS. In the GNU system, this type is equivalent to -@code{unsigned long longint}. +@code{unsigned long long int}. When compiling with @code{_FILE_OFFSET_BITS == 64} this type is available under the name @code{ino_t}. diff --git a/manual/texinfo.tex b/manual/texinfo.tex index e9293f3b9d..c93912a055 100644 --- a/manual/texinfo.tex +++ b/manual/texinfo.tex @@ -3,10 +3,11 @@ % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2003-05-04.08} +\def\texinfoversion{2004-11-25.16} % % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, -% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software +% Foundation, Inc. % % This texinfo.tex file is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as @@ -23,21 +24,16 @@ % to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, % Boston, MA 02111-1307, USA. % -% In other words, you are welcome to use, share and improve this program. -% You are forbidden to forbid anyone else to use, share and improve -% what you give them. Help stamp out software-hoarding! +% As a special exception, when this file is read by TeX when processing +% a Texinfo source document, you may use the result without +% restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: -% ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex -% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) +% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex -% (and all CTAN mirrors, see http://www.ctan.org), -% and /home/gd/gnu/doc/texinfo.tex on the GNU machines. -% -% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. -% -% The texinfo.tex in any given Texinfo distribution could well be out +% (and all CTAN mirrors, see http://www.ctan.org). +% The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a @@ -59,6 +55,9 @@ % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. +% +% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. + \message{Loading texinfo [version \texinfoversion]:} @@ -85,12 +84,16 @@ \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! +\let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent +\let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< +\let\ptexnewwrite\newwrite +\let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexrbrace=\} \let\ptexslash=\/ @@ -101,6 +104,15 @@ % starts a new line in the output. \newlinechar = `^^J +% Use TeX 3.0's \inputlineno to get the line number, for better error +% messages, but if we're using an old version of TeX, don't do anything. +% +\ifx\inputlineno\thisisundefined + \let\linenumber = \empty % Pre-3.0. +\else + \def\linenumber{l.\the\inputlineno:\space} +\fi + % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi @@ -139,43 +151,81 @@ \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi -\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi % In some macros, we cannot use the `\? notation---the left quote is % in some cases the escape char. \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dotChar = `\. -\chardef\equalChar = `\= \chardef\exclamChar= `\! \chardef\questChar = `\? \chardef\semiChar = `\; -\chardef\spaceChar = `\ % \chardef\underChar = `\_ +\chardef\spaceChar = `\ % +\chardef\spacecat = 10 +\def\spaceisspace{\catcode\spaceChar=\spacecat} + % Ignore a token. % \def\gobble#1{} -% True if #1 is the empty string, i.e., called like `\ifempty{}'. -% -\def\ifempty#1{\ifemptyx #1\emptymarkA\emptymarkB}% -\def\ifemptyx#1#2\emptymarkB{\ifx #1\emptymarkA}% +% The following is used inside several \edef's. +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. -\hyphenation{ap-pen-dix} -\hyphenation{eshell} -\hyphenation{mini-buf-fer mini-buf-fers} -\hyphenation{time-stamp} -\hyphenation{white-space} +\hyphenation{ + Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script + ap-pen-dix bit-map bit-maps + data-base data-bases eshell fall-ing half-way long-est man-u-script + man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm + par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces + spell-ing spell-ings + stand-alone strong-est time-stamp time-stamps which-ever white-space + wide-spread wrap-around +} % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight +% For a final copy, take out the rectangles +% that mark overfull boxes (in case you have decided +% that the text looks ok even though it passes the margin). +% +\def\finalout{\overfullrule=0pt} + +% @| inserts a changebar to the left of the current line. It should +% surround any changed text. This approach does *not* work if the +% change spans more than two lines of output. To handle that, we would +% have adopt a much more difficult approach (putting marks into the main +% vertical list for the beginning and end of each change). +% +\def\|{% + % \vadjust can only be used in horizontal mode. + \leavevmode + % + % Append this vertical mode material after the current line in the output. + \vadjust{% + % We want to insert a rule with the height and depth of the current + % leading; that is exactly what \strutbox is supposed to record. + \vskip-\baselineskip + % + % \vadjust-items are inserted at the left edge of the type. So + % the \llap here moves out into the left-hand margin. + \llap{% + % + % For a thicker or thinner bar, change the `1pt'. + \vrule height\baselineskip width1pt + % + % This is the space between the bar and the text. + \hskip 12pt + }% + }% +} + % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make @@ -200,7 +250,7 @@ \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex - \errorcontextlines\maxdimen + \errorcontextlines16 }% % add check for \lastpenalty to plain's definitions. If the last thing @@ -258,7 +308,7 @@ % the page break happens to be in the middle of an example. \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. - \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi + \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize @@ -339,132 +389,162 @@ % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % -\def\parsearg#1{% - \let\next = #1% +\def\parsearg{\parseargusing{}} +\def\parseargusing#1#2{% + \def\next{#2}% \begingroup \obeylines - \futurelet\temp\parseargx -} - -% If the next token is an obeyed space (from an @example environment or -% the like), remove it and recurse. Otherwise, we're done. -\def\parseargx{% - % \obeyedspace is defined far below, after the definition of \sepspaces. - \ifx\obeyedspace\temp - \expandafter\parseargdiscardspace - \else - \expandafter\parseargline - \fi + \spaceisspace + #1% + \parseargline\empty% Insert the \empty token, see \finishparsearg below. } -% Remove a single space (as the delimiter token to the macro call). -{\obeyspaces % - \gdef\parseargdiscardspace {\futurelet\temp\parseargx}} - {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. - % - % First remove any @c comment, then any @comment. - % Result of each macro is put in \toks0. - \argremovec #1\c\relax % - \expandafter\argremovecomment \the\toks0 \comment\relax % - % - % Call the caller's macro, saved as \next in \parsearg. - \expandafter\next\expandafter{\the\toks0}% + \argremovecomment #1\comment\ArgTerm% }% } -% Since all \c{,omment} does is throw away the argument, we can let TeX -% do that for us. The \relax here is matched by the \relax in the call -% in \parseargline; it could be more or less anything, its purpose is -% just to delimit the argument to the \c. -\def\argremovec#1\c#2\relax{\toks0 = {#1}} -\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}} +% First remove any @comment, then any @c comment. +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} -% \argremovec{,omment} might leave us with trailing spaces, though; e.g., +% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space. +% +% \argremovec might leave us with trailing space, e.g., % @end itemize @c foo -% will have two active spaces as part of the argument with the -% `itemize'. Here we remove all active spaces from #1, and assign the -% result to \toks0. -% -% This loses if there are any *other* active characters besides spaces -% in the argument -- _ ^ +, for example -- since they get expanded. -% Fortunately, Texinfo does not define any such commands. (If it ever -% does, the catcode of the characters in questionwill have to be changed -% here.) But this means we cannot call \removeactivespaces as part of -% \argremovec{,omment}, since @c uses \parsearg, and thus the argument -% that \parsearg gets might well have any character at all in it. -% -\def\removeactivespaces#1{% - \begingroup - \ignoreactivespaces - \edef\temp{#1}% - \global\toks0 = \expandafter{\temp}% - \endgroup +% This space token undergoes the same procedure and is eventually removed +% by \finishparsearg. +% +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% + \def\temp{#3}% + \ifx\temp\empty + % We cannot use \next here, as it holds the macro to run; + % thus we reuse \temp. + \let\temp\finishparsearg + \else + \let\temp\argcheckspaces + \fi + % Put the space token in: + \temp#1 #3\ArgTerm } -% Change the active space to expand to nothing. +% If a _delimited_ argument is enclosed in braces, they get stripped; so +% to get _exactly_ the rest of the line, we had to prevent such situation. +% We prepended an \empty token at the very beginning and we expand it now, +% just before passing the control to \next. +% (Similarily, we have to think about #3 of \argcheckspacesY above: it is +% either the null string, or it ends with \^^M---thus there is no danger +% that a pair of braces would be stripped. % -\begingroup +% But first, we have to remove the trailing space token. +% +\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}} + +% \parseargdef\foo{...} +% is roughly equivalent to +% \def\foo{\parsearg\Xfoo} +% \def\Xfoo#1{...} +% +% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my +% favourite TeX trick. --kasal, 16nov03 + +\def\parseargdef#1{% + \expandafter \doparseargdef \csname\string#1\endcsname #1% +} +\def\doparseargdef#1#2{% + \def#2{\parsearg#1}% + \def#1##1% +} + +% Several utility definitions with active space: +{ \obeyspaces - \gdef\ignoreactivespaces{\obeyspaces\let =\empty} -\endgroup + \gdef\obeyedspace{ } + + % Make each space character in the input produce a normal interword + % space in the output. Don't allow a line break at this space, as this + % is used only in environments like @example, where each line of input + % should produce a line of output anyway. + % + \gdef\sepspaces{\obeyspaces\let =\tie} + + % If an index command is used in an @example environment, any spaces + % therein should become regular spaces in the raw index file, not the + % expansion of \tie (\leavevmode \penalty \@M \ ). + \gdef\unsepspaces{\let =\space} +} \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} -%% These are used to keep @begin/@end levels from running away -%% Call \inENV within environments (after a \begingroup) -\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} -\def\ENVcheck{% -\ifENV\errmessage{Still within an environment; press RETURN to continue} -\endgroup\fi} % This is not perfect, but it should reduce lossage +% Define the framework for environments in texinfo.tex. It's used like this: +% +% \envdef\foo{...} +% \def\Efoo{...} +% +% It's the responsibility of \envdef to insert \begingroup before the +% actual body; @end closes the group after calling \Efoo. \envdef also +% defines \thisenv, so the current environment is known; @end checks +% whether the environment name matches. The \checkenv macro can also be +% used to check whether the current environment is the one expected. +% +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they +% are not treated as enviroments; they don't open a group. (The +% implementation of @end takes care not to call \endgroup in this +% special case.) -% @begin foo is the same as @foo, for now. -\newhelp\EMsimple{Press RETURN to continue.} -\outer\def\begin{\parsearg\beginxxx} +% At runtime, environments start with this: +\def\startenvironment#1{\begingroup\def\thisenv{#1}} +% initialize +\let\thisenv\empty -\def\beginxxx #1{% -\expandafter\ifx\csname #1\endcsname\relax -{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else -\csname #1\endcsname\fi} +% ... but they get defined via ``\envdef\foo{...}'': +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}} +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} -% @end foo executes the definition of \Efoo. -% -\def\end{\parsearg\endxxx} -\def\endxxx #1{% - \removeactivespaces{#1}% - \edef\endthing{\the\toks0}% - % - \expandafter\ifx\csname E\endthing\endcsname\relax - \expandafter\ifx\csname \endthing\endcsname\relax - % There's no \foo, i.e., no ``environment'' foo. - \errhelp = \EMsimple - \errmessage{Undefined command `@end \endthing'}% - \else - \unmatchedenderror\endthing - \fi +% Check whether we're in the right environment: +\def\checkenv#1{% + \def\temp{#1}% + \ifx\thisenv\temp \else - % Everything's ok; the right environment has been started. - \csname E\endthing\endcsname + \badenverr \fi } -% There is an environment #1, but it hasn't been started. Give an error. -% -\def\unmatchedenderror#1{% +% Evironment mismatch, #1 expected: +\def\badenverr{% \errhelp = \EMsimple - \errmessage{This `@end #1' doesn't have a matching `@#1'}% + \errmessage{This command can appear only \inenvironment\temp, + not \inenvironment\thisenv}% +} +\def\inenvironment#1{% + \ifx#1\empty + out of any environment% + \else + in environment \expandafter\string#1% + \fi } -% Define the control sequence \E#1 to give an unmatched @end error. +% @end foo executes the definition of \Efoo. +% But first, it executes a specialized version of \checkenv % -\def\defineunmatchedend#1{% - \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}% +\parseargdef\end{% + \if 1\csname iscond.#1\endcsname + \else + % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 + \expandafter\checkenv\csname#1\endcsname + \csname E#1\endcsname + \endgroup + \fi } +\newhelp\EMsimple{Press RETURN to continue.} + %% Simple single-character @ commands @@ -496,6 +576,9 @@ !gdef!rbraceatcmd[@}]% !endgroup +% @comma{} to avoid , parsing problems. +\let\comma = , + % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \c @@ -505,10 +588,12 @@ \let\ubaraccent = \b \let\udotaccent = \d -% Other special characters: @questiondown @exclamdown +% Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} +\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} +\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} @@ -521,6 +606,25 @@ \fi\fi } +% The \TeX{} logo, as in plain, but resetting the spacing so that a +% period following counts as ending a sentence. (Idea found in latex.) +% +\edef\TeX{\TeX \spacefactor=1000 } + +% @LaTeX{} logo. Not quite the same results as the definition in +% latex.ltx, since we use a different font for the raised A; it's most +% convenient for us to use an explicitly smaller font, rather than using +% the \scriptstyle font (since we don't reset \scriptstyle and +% \scriptscriptstyle). +% +\def\LaTeX{% + L\kern-.36em + {\setbox0=\hbox{T}% + \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% + \kern-.15em + \TeX +} + % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and @@ -574,59 +678,14 @@ \newbox\groupbox \def\vfilllimit{0.7} % -\def\group{\begingroup - \ifnum\catcode13=\active \else +\envdef\group{% + \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi - % - % The \vtop we start below produces a box with normal height and large - % depth; thus, TeX puts \baselineskip glue before it, and (when the - % next line of text is done) \lineskip glue after it. (See p.82 of - % the TeXbook.) Thus, space below is not quite equal to space - % above. But it's pretty close. - \def\Egroup{% - \egroup % End the \vtop. - % \dimen0 is the vertical size of the group's box. - \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox - % \dimen2 is how much space is left on the page (more or less). - \dimen2 = \pageheight \advance\dimen2 by -\pagetotal - % if the group doesn't fit on the current page, and it's a big big - % group, force a page break. - \ifdim \dimen0 > \dimen2 - \ifdim \pagetotal < \vfilllimit\pageheight - \page - \fi - \fi - \copy\groupbox - \endgroup % End the \group. - }% + \startsavinginserts % \setbox\groupbox = \vtop\bgroup - % We have to put a strut on the last line in case the @group is in - % the midst of an example, rather than completely enclosing it. - % Otherwise, the interline space between the last line of the group - % and the first line afterwards is too small. But we can't put the - % strut in \Egroup, since there it would be on a line by itself. - % Hence this just inserts a strut at the beginning of each line. - \everypar = {\strut}% - % - % Since we have a strut on every line, we don't need any of TeX's - % normal interline spacing. - \offinterlineskip - % - % OK, but now we have to do something about blank - % lines in the input in @example-like environments, which normally - % just turn into \lisppar, which will insert no space now that we've - % turned off the interline space. Simplest is to make them be an - % empty paragraph. - \ifx\par\lisppar - \edef\par{\leavevmode \par}% - % - % Reset ^^M's definition to new definition of \par. - \obeylines - \fi - % % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after @@ -636,6 +695,32 @@ \comment } % +% The \vtop produces a box with normal height and large depth; thus, TeX puts +% \baselineskip glue before it, and (when the next line of text is done) +% \lineskip glue after it. Thus, space below is not quite equal to space +% above. But it's pretty close. +\def\Egroup{% + % To get correct interline space between the last line of the group + % and the first line afterwards, we have to propagate \prevdepth. + \endgraf % Not \par, as it may have been set to \lisppar. + \global\dimen1 = \prevdepth + \egroup % End the \vtop. + % \dimen0 is the vertical size of the group's box. + \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox + % \dimen2 is how much space is left on the page (more or less). + \dimen2 = \pageheight \advance\dimen2 by -\pagetotal + % if the group doesn't fit on the current page, and it's a big big + % group, force a page break. + \ifdim \dimen0 > \dimen2 + \ifdim \pagetotal < \vfilllimit\pageheight + \page + \fi + \fi + \box\groupbox + \prevdepth = \dimen1 + \checkinserts +} +% % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % @@ -648,10 +733,8 @@ where each line of input produces a line of output.} \newdimen\mil \mil=0.001in -\def\need{\parsearg\needx} - % Old definition--didn't work. -%\def\needx #1{\par % +%\parseargdef\need{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% @@ -659,7 +742,7 @@ where each line of input produces a line of output.} %\prevdepth=-1000pt %}} -\def\needx#1{% +\parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par @@ -698,35 +781,10 @@ where each line of input produces a line of output.} \fi } -% @br forces paragraph break +% @br forces paragraph break (and is undocumented). \let\br = \par -% @dots{} output an ellipsis using the current font. -% We do .5em per period so that it has the same spacing in a typewriter -% font as three actual period characters. -% -\def\dots{% - \leavevmode - \hbox to 1.5em{% - \hskip 0pt plus 0.25fil minus 0.25fil - .\hss.\hss.% - \hskip 0pt plus 0.5fil minus 0.5fil - }% -} - -% @enddots{} is an end-of-sentence ellipsis. -% -\def\enddots{% - \leavevmode - \hbox to 2em{% - \hskip 0pt plus 0.25fil minus 0.25fil - .\hss.\hss.\hss.% - \hskip 0pt plus 0.5fil minus 0.5fil - }% - \spacefactor=3000 -} - % @page forces the start of a new page. % \def\page{\par\vfill\supereject} @@ -739,13 +797,11 @@ where each line of input produces a line of output.} \newskip\exdentamount % This defn is used inside fill environments such as @defun. -\def\exdent{\parsearg\exdentyyy} -\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}} +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. -\def\nofillexdent{\parsearg\nofillexdentyyy} -\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount -\leftline{\hskip\leftskip{\rm#1}}}} +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount + \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion @@ -797,8 +853,19 @@ where each line of input produces a line of output.} } % @include file insert text of that file as input. -% Allow normal characters that we make active in the argument (a file name). -\def\include{\begingroup +% +\def\include{\parseargusing\filenamecatcodes\includezzz} +\def\includezzz#1{% + \pushthisfilestack + \def\thisfile{#1}% + {% + \makevalueexpandable + \def\temp{\input #1 }% + \expandafter + }\temp + \popthisfilestack +} +\def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other @@ -807,33 +874,50 @@ where each line of input produces a line of output.} \catcode`<=\other \catcode`>=\other \catcode`+=\other - \parsearg\includezzz} -% Restore active chars for included file. -\def\includezzz#1{\endgroup\begingroup - % Read the included file in a group so nested @include's work. - \def\thisfile{#1}% - \let\value=\expandablevalue - \input\thisfile -\endgroup} + \catcode`-=\other +} + +\def\pushthisfilestack{% + \expandafter\pushthisfilestackX\popthisfilestack\StackTerm +} +\def\pushthisfilestackX{% + \expandafter\pushthisfilestackY\thisfile\StackTerm +} +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {% + \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% +} + +\def\popthisfilestack{\errthisfilestackempty} +\def\errthisfilestackempty{\errmessage{Internal error: + the stack of filenames is empty.}} \def\thisfile{} % @center line % outputs that line, centered. % -\def\center{\parsearg\docenter} -\def\docenter#1{{% - \ifhmode \hfil\break \fi - \advance\hsize by -\leftskip - \advance\hsize by -\rightskip - \line{\hfil \ignorespaces#1\unskip \hfil}% - \ifhmode \break \fi -}} +\parseargdef\center{% + \ifhmode + \let\next\centerH + \else + \let\next\centerV + \fi + \next{\hfil \ignorespaces#1\unskip \hfil}% +} +\def\centerH#1{% + {% + \hfil\break + \advance\hsize by -\leftskip + \advance\hsize by -\rightskip + \line{#1}% + \break + }% +} +\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} % @sp n outputs n lines of vertical space -\def\sp{\parsearg\spxxx} -\def\spxxx #1{\vskip #1\baselineskip} +\parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment @@ -854,8 +938,7 @@ where each line of input produces a line of output.} \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % -\def\paragraphindent{\parsearg\doparagraphindent} -\def\doparagraphindent#1{% +\parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else @@ -872,8 +955,7 @@ where each line of input produces a line of output.} % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. -\def\exampleindent{\parsearg\doexampleindent} -\def\doexampleindent#1{% +\parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else @@ -887,21 +969,18 @@ where each line of input produces a line of output.} % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph -% after a section heading. If WORD is `insert', then do indentat such +% after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling -% \suppressfirstparagraphindent, which the sectioning commands do. We -% switch the definition of this back and forth according to WORD. By -% default, we suppress indentation. +% \suppressfirstparagraphindent, which the sectioning commands do. +% We switch the definition of this back and forth according to WORD. +% By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} -\newdimen\currentparindent -% \def\insertword{insert} % -\def\firstparagraphindent{\parsearg\dofirstparagraphindent} -\def\dofirstparagraphindent#1{% +\parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent @@ -921,15 +1000,24 @@ where each line of input produces a line of output.} % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% - \global\let\indent=\ptexindent - \global\everypar = {}% + \restorefirstparagraphindent + \indent + }% + \gdef\noindent{% + \restorefirstparagraphindent + \noindent }% \global\everypar = {% - \kern-\parindent - \global\let\indent=\ptexindent - \global\everypar = {}% + \kern -\parindent + \restorefirstparagraphindent }% -}% +} + +\gdef\restorefirstparagraphindent{% + \global \let \indent = \ptexindent + \global \let \noindent = \ptexnoindent + \global \everypar = {}% +} % @asis just yields its argument. Used with @table, for example. @@ -937,23 +1025,18 @@ where each line of input produces a line of output.} \def\asis#1{#1} % @math outputs its argument in math mode. -% We don't use $'s directly in the definition of \math because we need -% to set catcodes according to plain TeX first, to allow for subscripts, -% superscripts, special math chars, etc. -% -\let\implicitmath = $%$ font-lock fix % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make -% _ within @math be active (mathcode "8000), and distinguish by seeing -% if the current family is \slfam, which is what @var uses. -% -{\catcode\underChar = \active -\gdef\mathunderscore{% - \catcode\underChar=\active - \def_{\ifnum\fam=\slfam \_\else\sb\fi}% -}} -% +% _ active, and distinguish by seeing if the current family is \slfam, +% which is what @var uses. +{ + \catcode\underChar = \active + \gdef\mathunderscore{% + \catcode\underChar=\active + \def_{\ifnum\fam=\slfam \_\else\sb\fi}% + } +} % Another complication: we want \\ (and @\) to output a \ character. % FYI, plain.tex uses \\ as a temporary control sequence (why?), but % this is not advertised and we don't care. Texinfo does not @@ -964,15 +1047,16 @@ where each line of input produces a line of output.} % \def\math{% \tex - \mathcode`\_="8000 \mathunderscore + \mathunderscore \let\\ = \mathbackslash \mathactive - \implicitmath\finishmath} -\def\finishmath#1{#1\implicitmath\Etex} + $\finishmath +} +\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. -% We have to reset their definitions in case the @math was an -% argument to a command which set the catcodes (such as @item or @section). +% We have to reset their definitions in case the @math was an argument +% to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active @@ -988,8 +1072,33 @@ where each line of input produces a line of output.} } % @bullet and @minus need the same treatment as @math, just above. -\def\bullet{\implicitmath\ptexbullet\implicitmath} -\def\minus{\implicitmath-\implicitmath} +\def\bullet{$\ptexbullet$} +\def\minus{$-$} + +% @dots{} outputs an ellipsis using the current font. +% We do .5em per period so that it has the same spacing in a typewriter +% font as three actual period characters. +% +\def\dots{% + \leavevmode + \hbox to 1.5em{% + \hskip 0pt plus 0.25fil + .\hfil.\hfil.% + \hskip 0pt plus 0.5fil + }% +} + +% @enddots{} is an end-of-sentence ellipsis. +% +\def\enddots{% + \dots + \spacefactor=3000 +} + +% @comma{} is so commas can be inserted into text without messing up +% Texinfo's parsing. +% +\let\comma = , % @refill is a no-op. \let\refill=\relax @@ -1005,20 +1114,20 @@ where each line of input produces a line of output.} % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% + \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks - \readauxfile + \tryauxfile + % Open the new aux file. TeX will close it automatically at exit. + \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \global\let\setfilename=\comment % Ignore extra @setfilename cmds. + \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. - % Just to be on the safe side, close the input stream before the \input. \openin 1 texinfo.cnf - \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi - \closein1 - \temp + \ifeof 1 \else \input texinfo.cnf \fi + \closein 1 % \comment % Ignore the actual filename. } @@ -1054,17 +1163,23 @@ where each line of input produces a line of output.} \newif\ifpdf \newif\ifpdfmakepagedest +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 +% can be set). So we test for \relax and 0 as well as \undefined, +% borrowed from ifpdf.sty. \ifx\pdfoutput\undefined - \pdffalse - \let\pdfmkdest = \gobble - \let\pdfurl = \gobble - \let\endlink = \relax - \let\linkcolor = \relax - \let\pdfmakeoutlines = \relax \else - \pdftrue - \pdfoutput = 1 + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi +\fi +% +\ifpdf \input pdfcolor + \pdfcatalog{/PageMode /UseOutlines}% \def\dopdfimage#1#2#3{% \def\imagewidth{#2}% \def\imageheight{#3}% @@ -1085,7 +1200,13 @@ where each line of input produces a line of output.} \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} - \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}} + \def\pdfmkdest#1{{% + % We have to set dummies so commands such as @code in a section title + % aren't expanded. + \atdummies + \normalturnoffactive + \pdfdest name{#1} xyz% + }} \def\pdfmkpgn#1{#1} \let\linkcolor = \Blue % was Cyan, but that seems light? \def\endlink{\Black\pdfendlink} @@ -1094,48 +1215,94 @@ where each line of input produces a line of output.} \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax - \advance\tempnum by1 + \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} - \def\pdfmakeoutlines{{% - \openin 1 \jobname.toc - \ifeof 1\else\begingroup - \closein 1 + % + % #1 is the section text. #2 is the pdf expression for the number + % of subentries (or empty, for subsubsections). #3 is the node + % text, which might be empty if this toc entry had no + % corresponding node. #4 is the page number. + % + \def\dopdfoutline#1#2#3#4{% + % Generate a link to the node text if that exists; else, use the + % page number. We could generate a destination for the section + % text in the case where a section has no node, but it doesn't + % seem worthwhile, since most documents are normally structured. + \def\pdfoutlinedest{#3}% + \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi + % + \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}% + } + % + \def\pdfmakeoutlines{% + \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % - \def\chapentry ##1##2##3{} - \def\secentry ##1##2##3##4{\advancenumber{chap##2}} - \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}} - \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}} - \let\appendixentry = \chapentry - \let\unnumbchapentry = \chapentry - \let\unnumbsecentry = \secentry - \let\unnumbsubsecentry = \subsecentry - \let\unnumbsubsubsecentry = \subsubsecentry + % Read toc silently, to get counts of subentries for \pdfoutline. + \def\numchapentry##1##2##3##4{% + \def\thischapnum{##2}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + }% + \def\numsecentry##1##2##3##4{% + \advancenumber{chap\thischapnum}% + \def\thissecnum{##2}% + \def\thissubsecnum{0}% + }% + \def\numsubsecentry##1##2##3##4{% + \advancenumber{sec\thissecnum}% + \def\thissubsecnum{##2}% + }% + \def\numsubsubsecentry##1##2##3##4{% + \advancenumber{subsec\thissubsecnum}% + }% + \def\thischapnum{0}% + \def\thissecnum{0}% + \def\thissubsecnum{0}% + % + % use \def rather than \let here because we redefine \chapentry et + % al. a second time, below. + \def\appentry{\numchapentry}% + \def\appsecentry{\numsecentry}% + \def\appsubsecentry{\numsubsecentry}% + \def\appsubsubsecentry{\numsubsubsecentry}% + \def\unnchapentry{\numchapentry}% + \def\unnsecentry{\numsecentry}% + \def\unnsubsecentry{\numsubsecentry}% + \def\unnsubsubsecentry{\numsubsubsecentry}% \input \jobname.toc - \def\chapentry ##1##2##3{% - \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} - \def\secentry ##1##2##3##4{% - \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}} - \def\subsecentry ##1##2##3##4##5{% - \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}} - \def\subsubsecentry ##1##2##3##4##5##6{% - \pdfoutline goto name{\pdfmkpgn{##6}}{##1}} - \let\appendixentry = \chapentry - \let\unnumbchapentry = \chapentry - \let\unnumbsecentry = \secentry - \let\unnumbsubsecentry = \subsecentry - \let\unnumbsubsubsecentry = \subsubsecentry % - % Make special characters normal for writing to the pdf file. + % Read toc second time, this time actually producing the outlines. + % The `-' means take the \expnumber as the absolute number of + % subentries, which we calculated on our first read of the .toc above. + % + % We use the node names as the destinations. + \def\numchapentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% + \def\numsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% + \def\numsubsecentry##1##2##3##4{% + \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% + \def\numsubsubsecentry##1##2##3##4{% count is always zero + \dopdfoutline{##1}{}{##3}{##4}}% % + % PDF outlines are displayed using system fonts, instead of + % document fonts. Therefore we cannot use special characters, + % since the encoding is unknown. For example, the eogonek from + % Latin 2 (0xea) gets translated to a | character. Info from + % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. + % + % xx to do this right, we have to translate 8-bit characters to + % their "best" equivalent, based on the @documentencoding. Right + % now, I guess we'll just let the pdf reader have its way. \indexnofonts - \let\tt=\relax \turnoffactive \input \jobname.toc - \endgroup\fi - }} + \endgroup + } + % \def\makelinks #1,{% \def\params{#1}\def\E{END}% \ifx\params\E @@ -1166,7 +1333,6 @@ where each line of input produces a line of output.} \def\ppn#1{\pgn=#1\gobble} \def\ppnn{\pgn=\first} \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces @@ -1184,18 +1350,17 @@ where each line of input produces a line of output.} \def\pdfurl#1{% \begingroup \normalturnoffactive\def\@{@}% - \let\value=\expandablevalue + \makevalueexpandable \leavevmode\Red \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% - % #1 \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% - \expandafter\poptoks\the\toksA|ENDTOKS| + \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 @@ -1215,20 +1380,44 @@ where each line of input produces a line of output.} \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \linkcolor #1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\fi % \ifx\pdfoutput +\else + \let\pdfmkdest = \gobble + \let\pdfurl = \gobble + \let\endlink = \relax + \let\linkcolor = \relax + \let\pdfmakeoutlines = \relax +\fi % \ifx\pdfoutput \message{fonts,} -% Font-change commands. + +% Change the current font style to #1, remembering it in \curfontstyle. +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in +% italics, not bold italics. +% +\def\setfontstyle#1{% + \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. + \csname ten#1\endcsname % change the current font +} + +% Select #1 fonts with the current style. +% +\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} + +\def\rm{\fam=0 \setfontstyle{rm}} +\def\it{\fam=\itfam \setfontstyle{it}} +\def\sl{\fam=\slfam \setfontstyle{sl}} +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} +\def\tt{\fam=\ttfam \setfontstyle{tt}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. -% So we set up a \sf analogous to plain's \rm, etc. +% So we set up a \sf. \newfam\sffam -\def\sf{\fam=\sffam \tensf} +\def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. -% We don't need math for this one. -\def\ttsl{\tenttsl} +% We don't need math for this font style. +\def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt @@ -1279,21 +1468,11 @@ where each line of input produces a line of output.} \def\scshape{csc} \def\scbshape{csc} -\newcount\mainmagstep -\ifx\bigger\relax - % not really supported. - \mainmagstep=\magstep1 - \setfont\textrm\rmshape{12}{1000} - \setfont\texttt\ttshape{12}{1000} -\else - \mainmagstep=\magstephalf - \setfont\textrm\rmshape{10}{\mainmagstep} - \setfont\texttt\ttshape{10}{\mainmagstep} -\fi -% Instead of cmb10, you may want to use cmbx10. -% cmbx10 is a prettier font on its own, but cmb10 -% looks better when embedded in a line with cmr10 -% (in Bob's opinion). +% Text fonts (11.2pt, magstep1). +\def\textnominalsize{11pt} +\edef\mainmagstep{\magstephalf} +\setfont\textrm\rmshape{10}{\mainmagstep} +\setfont\texttt\ttshape{10}{\mainmagstep} \setfont\textbf\bfshape{10}{\mainmagstep} \setfont\textit\itshape{10}{\mainmagstep} \setfont\textsl\slshape{10}{\mainmagstep} @@ -1303,12 +1482,14 @@ where each line of input produces a line of output.} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep -% A few fonts for @defun, etc. -\setfont\defbf\bxshape{10}{\magstep1} %was 1314 +% A few fonts for @defun names and args. +\setfont\defbf\bfshape{10}{\magstep1} \setfont\deftt\ttshape{10}{\magstep1} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} +\setfont\defttsl\ttslshape{10}{\magstep1} +\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). +\def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000} \setfont\smalltt\ttshape{9}{1000} \setfont\smallbf\bfshape{10}{900} @@ -1321,6 +1502,7 @@ where each line of input produces a line of output.} \font\smallsy=cmsy9 % Fonts for small examples (8pt). +\def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000} \setfont\smallertt\ttshape{8}{1000} \setfont\smallerbf\bfshape{10}{800} @@ -1332,7 +1514,8 @@ where each line of input produces a line of output.} \font\smalleri=cmmi8 \font\smallersy=cmsy8 -% Fonts for title page: +% Fonts for title page (20.4pt): +\def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3} \setfont\titleit\itbshape{10}{\magstep4} \setfont\titlesl\slbshape{10}{\magstep4} @@ -1347,6 +1530,7 @@ where each line of input produces a line of output.} \def\authortt{\sectt} % Chapter (and unnumbered) fonts (17.28pt). +\def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2} \setfont\chapit\itbshape{10}{\magstep3} \setfont\chapsl\slbshape{10}{\magstep3} @@ -1359,6 +1543,7 @@ where each line of input produces a line of output.} \font\chapsy=cmsy10 scaled \magstep3 % Section fonts (14.4pt). +\def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1} \setfont\secit\itbshape{10}{\magstep2} \setfont\secsl\slbshape{10}{\magstep2} @@ -1371,6 +1556,7 @@ where each line of input produces a line of output.} \font\secsy=cmsy10 scaled \magstep2 % Subsection fonts (13.15pt). +\def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf} \setfont\ssecit\itbshape{10}{1315} \setfont\ssecsl\slbshape{10}{1315} @@ -1378,11 +1564,22 @@ where each line of input produces a line of output.} \setfont\ssecttsl\ttslshape{10}{1315} \setfont\ssecsf\sfbshape{12}{\magstephalf} \let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{\magstep1} +\setfont\ssecsc\scbshape{10}{1315} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 -% The smallcaps and symbol fonts should actually be scaled \magstep1.5, -% but that is not a standard magnification. + +% Reduced fonts for @acro in text (10pt). +\def\reducednominalsize{10pt} +\setfont\reducedrm\rmshape{10}{1000} +\setfont\reducedtt\ttshape{10}{1000} +\setfont\reducedbf\bfshape{10}{1000} +\setfont\reducedit\itshape{10}{1000} +\setfont\reducedsl\slshape{10}{1000} +\setfont\reducedsf\sfshape{10}{1000} +\setfont\reducedsc\scshape{10}{1000} +\setfont\reducedttsl\ttslshape{10}{1000} +\font\reducedi=cmmi10 +\font\reducedsy=cmsy10 % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since @@ -1397,50 +1594,81 @@ where each line of input produces a line of output.} } % The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this so that font changes will continue to work -% in math mode, where it is the current \fam that is relevant in most -% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam -% \tenbf}, for example. By redefining \tenbf, we obviate the need to -% redefine \bf itself. +% of just \STYLE. We do this because \STYLE needs to also set the +% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire +% \tenSTYLE to set the current font. +% +% Each font-changing command also sets the names \lsize (one size lower) +% and \lllsize (three sizes lower). These relative commands are used in +% the LaTeX logo and acronyms. +% +% This all needs generalizing, badly. +% \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl + \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy + \let\tenttsl=\textttsl + \def\curfontsize{text}% + \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl + \def\curfontsize{title}% + \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rm #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl + \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy + \let\tenttsl=\chapttsl + \def\curfontsize{chap}% + \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl + \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy + \let\tenttsl=\secttsl + \def\curfontsize{sec}% + \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl + \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy + \let\tenttsl=\ssecttsl + \def\curfontsize{ssec}% + \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? +\let\subsubsecfonts = \subsecfonts +\def\reducedfonts{% + \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl + \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc + \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy + \let\tenttsl=\reducedttsl + \def\curfontsize{reduced}% + \def\lsize{small}\def\lllsize{smaller}% + \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl + \def\curfontsize{small}% + \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl + \def\curfontsize{smaller}% + \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Set the fonts to use with the @small... environments. @@ -1449,7 +1677,7 @@ where each line of input produces a line of output.} % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 -% If we use \smallerfonts (8pt), then we can fit this many characters: +% If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. @@ -1457,14 +1685,13 @@ where each line of input produces a line of output.} % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % -% I wish we used A4 paper on this side of the Atlantic. -% +% I wish the USA used A4 paper. % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % -\textfonts +\textfonts \rm % Define these so they can be easily changed for other fonts. \def\angleleft{$\langle$} @@ -1475,7 +1702,7 @@ where each line of input produces a line of output.} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000} -\setfont\shortcontbf\bxshape{12}{1000} +\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000} \setfont\shortconttt\ttshape{12}{1000} @@ -1489,15 +1716,27 @@ where each line of input produces a line of output.} \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} +% like \smartslanted except unconditionally uses \ttsl. +% @var is set to this for defun arguments. +\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} + +% like \smartslanted except unconditionally use \sl. We never want +% ttsl for book titles, do we? +\def\cite#1{{\sl #1}\futurelet\next\smartitalicx} + \let\i=\smartitalic +\let\slanted=\smartslanted \let\var=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic -\let\cite=\smartslanted +% @b, explicit bold. \def\b#1{{\bf #1}} \let\strong=\b +% @sansserif, explicit sans. +\def\sansserif#1{{\sf #1}} + % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. @@ -1520,7 +1759,6 @@ where each line of input produces a line of output.} {\tt \rawbackslash \frenchspacing #1}% \null } -\let\ttfont=\t \def\samp#1{`\tclose{#1}'\null} \setfont\keyrm\rmshape{8}{1000} \font\keysy=cmsy9 @@ -1561,7 +1799,7 @@ where each line of input produces a line of output.} \null } -% We *must* turn on hyphenation at `-' and `_' in \code. +% We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. @@ -1579,10 +1817,6 @@ where each line of input produces a line of output.} \catcode`\_=\active \let_\codeunder \codex } - % - % If we end up with any active - characters when handling the index, - % just treat them as a normal -. - \global\def\indexbreaks{\catcode`\-=\active \let-\realdash} } \def\realdash{-} @@ -1606,8 +1840,7 @@ where each line of input produces a line of output.} % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). -\def\kbdinputstyle{\parsearg\kbdinputstylexxx} -\def\kbdinputstylexxx#1{% +\parseargdef\kbdinputstyle{% \def\arg{#1}% \ifx\arg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% @@ -1633,8 +1866,8 @@ where each line of input produces a line of output.} \else{\tclose{\kbdfont\look}}\fi \else{\tclose{\kbdfont\look}}\fi} -% For @url, @env, @command quotes seem unnecessary, so use \code. -\let\url=\code +% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. +\let\indicateurl=\code \let\env=\code \let\command=\code @@ -1666,6 +1899,10 @@ where each line of input produces a line of output.} \endlink \endgroup} +% @url synonym for @uref, since that's how everyone uses it. +% +\let\url=\uref + % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % @@ -1707,22 +1944,101 @@ where each line of input produces a line of output.} \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font -% @acronym downcases the argument and prints in smallcaps. -\def\acronym#1{{\smallcaps \lowercase{#1}}} +% @acronym for "FBI", "NATO", and the like. +% We print this one point size smaller, since it's intended for +% all-uppercase. +% +\def\acronym#1{\doacronym #1,,\finish} +\def\doacronym#1,#2,#3\finish{% + {\selectfonts\lsize #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} + +% @abbr for "Comput. J." and the like. +% No font change, but don't do end-of-sentence spacing. +% +\def\abbr#1{\doabbr #1,,\finish} +\def\doabbr#1,#2,#3\finish{% + {\frenchspacing #1}% + \def\temp{#2}% + \ifx\temp\empty \else + \space ({\unsepspaces \ignorespaces \temp \unskip})% + \fi +} -% @pounds{} is a sterling sign. +% @pounds{} is a sterling sign, which Knuth put in the CM italic font. +% \def\pounds{{\it\$}} -% @registeredsymbol - R in a circle. For now, only works in text size; -% we'd have to redo the font mechanism to change the \scriptstyle and -% \scriptscriptstyle font sizes to make it look right in headings. +% @euro{} comes from a separate font, depending on the current style. +% We use the free feym* fonts from the eurosym package by Henrik +% Theiling, which support regular, slanted, bold and bold slanted (and +% "outlined" (blackboard board, sort of) versions, which we don't need). +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym. +% +% Although only regular is the truly official Euro symbol, we ignore +% that. The Euro is designed to be slightly taller than the regular +% font height. +% +% feymr - regular +% feymo - slanted +% feybr - bold +% feybo - bold slanted +% +% There is no good (free) typewriter version, to my knowledge. +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. +% Hmm. +% +% Also doesn't work in math. Do we need to do math with euro symbols? +% Hope not. +% +% +\def\euro{{\eurofont e}} +\def\eurofont{% + % We set the font at each command, rather than predefining it in + % \textfonts and the other font-switching commands, so that + % installations which never need the symbold don't have to have the + % font installed. + % + % There is only one designed size (nominal 10pt), so we always scale + % that to the current nominal size. + % + % By the way, simply using "at 1em" works for cmr10 and the like, but + % does not work for cmbx10 and other extended/shrunken fonts. + % + \def\eurosize{\csname\curfontsize nominalsize\endcsname}% + % + \ifx\curfontstyle\bfstylename + % bold: + \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize + \else + % regular: + \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize + \fi + \thiseurofont +} + +% @registeredsymbol - R in a circle. The font for the R should really +% be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% - $^{{\ooalign{\hfil\raise.07ex\hbox{$\scriptstyle\rm R$}\hfil\crcr\Orb}}% + $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% + \hfil\crcr\Orb}}% }$% } +% Laurent Siebenmann reports \Orb undefined with: +% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 +% so we'll define it if necessary. +% +\ifx\Orb\undefined +\def\Orb{\mathhexbox20D} +\fi + \message{page headings,} @@ -1741,87 +2057,103 @@ where each line of input produces a line of output.} \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue -\def\shorttitlepage{\parsearg\shorttitlepagezzz} -\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% +\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} -\def\titlepage{\begingroup \parindent=0pt \textfonts - \let\subtitlerm=\tenrm - \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% - % - \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines - \let\tt=\authortt}% - % - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % - % Now you can print the title using @title. - \def\title{\parsearg\titlezzz}% - \def\titlezzz##1{\leftline{\titlefonts\rm ##1} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Now you can put text using @subtitle. - \def\subtitle{\parsearg\subtitlezzz}% - \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}% - % - % @author should come last, but may come many times. - \def\author{\parsearg\authorzzz}% - \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi - {\authorfont \leftline{##1}}}% - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% +\envdef\titlepage{% + % Open one extra group, as we want to close it in the middle of \Etitlepage. + \begingroup + \parindent=0pt \textfonts + % Leave some space at the very top of the page. + \vglue\titlepagetopglue + % No rule at page bottom unless we print one at the top with @title. + \finishedtitlepagetrue + % + % Most title ``pages'' are actually two pages long, with space + % at the top of the second. We don't want the ragged left on the second. + \let\oldpage = \page + \def\page{% \iffinishedtitlepage\else - \finishtitlepage + \finishtitlepage \fi - \oldpage \let\page = \oldpage - \hbox{}}% -% \def\page{\oldpage \hbox{}} + \page + \null + }% } \def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - % - % Need this before the \...aftertitlepage checks so that if they are - % in effect the toc pages will come out with page numbers. - \HEADINGSon - % - % If they want short, they certainly want long too. - \ifsetshortcontentsaftertitlepage - \shortcontents - \contents - \global\let\shortcontents = \relax - \global\let\contents = \relax - \fi - % - \ifsetcontentsaftertitlepage - \contents - \global\let\contents = \relax - \global\let\shortcontents = \relax - \fi + \iffinishedtitlepage\else + \finishtitlepage + \fi + % It is important to do the page break before ending the group, + % because the headline and footline are only empty inside the group. + % If we use the new definition of \page, we always get a blank page + % after the title page, which we certainly don't want. + \oldpage + \endgroup + % + % Need this before the \...aftertitlepage checks so that if they are + % in effect the toc pages will come out with page numbers. + \HEADINGSon + % + % If they want short, they certainly want long too. + \ifsetshortcontentsaftertitlepage + \shortcontents + \contents + \global\let\shortcontents = \relax + \global\let\contents = \relax + \fi + % + \ifsetcontentsaftertitlepage + \contents + \global\let\contents = \relax + \global\let\shortcontents = \relax + \fi } \def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue + \vskip4pt \hrule height 2pt width \hsize + \vskip\titlepagebottomglue + \finishedtitlepagetrue +} + +%%% Macros to be used within @titlepage: + +\let\subtitlerm=\tenrm +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} + +\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines + \let\tt=\authortt} + +\parseargdef\title{% + \checkenv\titlepage + \leftline{\titlefonts\rm #1} + % print a rule at the page bottom also. + \finishedtitlepagefalse + \vskip4pt \hrule height 4pt width \hsize \vskip4pt +} + +\parseargdef\subtitle{% + \checkenv\titlepage + {\subtitlefont \rightline{#1}}% +} + +% @author should come last, but may come many times. +% It can also be used inside @quotation. +% +\parseargdef\author{% + \def\temp{\quotation}% + \ifx\thisenv\temp + \def\quotationauthor{#1}% printed in \Equotation. + \else + \checkenv\titlepage + \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi + {\authorfont \leftline{#1}}% + \fi } + %%% Set up page headings and footings. \let\thispage=\folio @@ -1831,7 +2163,7 @@ where each line of input produces a line of output.} \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages -% Now make Tex use those variables +% Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline @@ -1845,32 +2177,27 @@ where each line of input produces a line of output.} % @evenfooting @thisfile|| % @oddfooting ||@thisfile -\def\evenheading{\parsearg\evenheadingxxx} -\def\oddheading{\parsearg\oddheadingxxx} -\def\everyheading{\parsearg\everyheadingxxx} - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\oddfooting{\parsearg\oddfootingxxx} -\def\everyfooting{\parsearg\everyfootingxxx} -{\catcode`\@=0 % - -\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish} -\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{% +\def\evenheading{\parsearg\evenheadingxxx} +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} -\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish} -\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% +\def\oddheading{\parsearg\oddheadingxxx} +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} -\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}% +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% -\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} -\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% +\def\evenfooting{\parsearg\evenfootingxxx} +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} -\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} -\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% +\def\oddfooting{\parsearg\oddfootingxxx} +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume @@ -1879,9 +2206,8 @@ where each line of input produces a line of output.} \global\advance\vsize by -\baselineskip } -\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} -% -}% unbind the catcode of @. +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} + % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. @@ -1895,7 +2221,7 @@ where each line of input produces a line of output.} \def\headings #1 {\csname HEADINGS#1\endcsname} -\def\HEADINGSoff{ +\def\HEADINGSoff{% \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff @@ -1904,7 +2230,7 @@ where each line of input produces a line of output.} % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. -\def\HEADINGSdouble{ +\def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} @@ -1916,7 +2242,7 @@ where each line of input produces a line of output.} % For single-sided printing, chapter title goes across top left of page, % page number on top right. -\def\HEADINGSsingle{ +\def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} @@ -1963,12 +2289,11 @@ where each line of input produces a line of output.} % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} -\def\settitle{\parsearg\settitlezzz} -\def\settitlezzz #1{\gdef\thistitle{#1}} +\def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} -% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). +% Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in @@ -1980,7 +2305,7 @@ where each line of input produces a line of output.} % used internally for \itemindent minus \itemmargin \newdimen\itemmax -% Note @table, @vtable, and @vtable define @item, @itemx, etc., with +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). @@ -1992,22 +2317,10 @@ where each line of input produces a line of output.} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} -\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} -\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz} - -\def\internalBkitem{\smallbreak \parsearg\kitemzzz} -\def\internalBkitemx{\itemxpar \parsearg\kitemzzz} - -\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}% - \itemzzz {#1}} - -\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}% - \itemzzz {#1}} - \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent - \setbox0=\hbox{\itemfont{#1}}% + \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % @@ -2031,17 +2344,13 @@ where each line of input produces a line of output.} % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % - % Stop a page break at the \parskip glue coming up. (Unfortunately - % we can't prevent a possible page break at the following - % \baselineskip glue.) However, if what follows is an environment - % such as @example, there will be no \parskip glue; then - % the negative vskip we just would cause the example and the item to - % crash together. So we use this bizarre value of 10001 as a signal - % to \aboveenvbreak to insert \parskip glue after all. - % (Possibly there are other commands that could be followed by - % @example which need the same treatment, but not section titles; or - % maybe section titles are the only special case and they should be - % penalty 10001...) + % Stop a page break at the \parskip glue coming up. However, if + % what follows is an environment such as @example, there will be no + % \parskip glue; then the negative vskip we just inserted would + % cause the example and the item to crash together. So we use this + % bizarre value of 10001 as a signal to \aboveenvbreak to insert + % \parskip glue after all. Section titles are handled this way also. + % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse @@ -2061,81 +2370,72 @@ where each line of input produces a line of output.} \fi } -\def\item{\errmessage{@item while not in a table}} -\def\itemx{\errmessage{@itemx while not in a table}} -\def\kitem{\errmessage{@kitem while not in a table}} -\def\kitemx{\errmessage{@kitemx while not in a table}} -\def\xitem{\errmessage{@xitem while not in a table}} -\def\xitemx{\errmessage{@xitemx while not in a table}} - -% Contains a kludge to get @end[description] to work. -\def\description{\tablez{\dontindex}{1}{}{}{}{}} +\def\item{\errmessage{@item while not in a list environment}} +\def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. -\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} -{\obeylines\obeyspaces% -\gdef\tablex #1^^M{% -\tabley\dontindex#1 \endtabley}} - -\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex} -{\obeylines\obeyspaces% -\gdef\ftablex #1^^M{% -\tabley\fnitemindex#1 \endtabley -\def\Eftable{\endgraf\afterenvbreak\endgroup}% -\let\Etable=\relax}} - -\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} -{\obeylines\obeyspaces% -\gdef\vtablex #1^^M{% -\tabley\vritemindex#1 \endtabley -\def\Evtable{\endgraf\afterenvbreak\endgroup}% -\let\Etable=\relax}} - -\def\dontindex #1{} -\def\fnitemindex #1{\doind {fn}{\code{#1}}}% -\def\vritemindex #1{\doind {vr}{\code{#1}}}% - -{\obeyspaces % -\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup% -\tablez{#1}{#2}{#3}{#4}{#5}{#6}}} - -\def\tablez #1#2#3#4#5#6{% -\aboveenvbreak % -\begingroup % -\def\Edescription{\Etable}% Necessary kludge. -\let\itemindex=#1% -\ifnum 0#3>0 \advance \leftskip by #3\mil \fi % -\ifnum 0#4>0 \tableindent=#4\mil \fi % -\ifnum 0#5>0 \advance \rightskip by #5\mil \fi % -\def\itemfont{#2}% -\itemmax=\tableindent % -\advance \itemmax by -\itemmargin % -\advance \leftskip by \tableindent % -\exdentamount=\tableindent -\parindent = 0pt -\parskip = \smallskipamount -\ifdim \parskip=0pt \parskip=2pt \fi% -\def\Etable{\endgraf\afterenvbreak\endgroup}% -\let\item = \internalBitem % -\let\itemx = \internalBitemx % -\let\kitem = \internalBkitem % -\let\kitemx = \internalBkitemx % -\let\xitem = \internalBxitem % -\let\xitemx = \internalBxitemx % +\envdef\table{% + \let\itemindex\gobble + \tablecheck{table}% +} +\envdef\ftable{% + \def\itemindex ##1{\doind {fn}{\code{##1}}}% + \tablecheck{ftable}% +} +\envdef\vtable{% + \def\itemindex ##1{\doind {vr}{\code{##1}}}% + \tablecheck{vtable}% } +\def\tablecheck#1{% + \ifnum \the\catcode`\^^M=\active + \endgroup + \errmessage{This command won't work in this context; perhaps the problem is + that we are \inenvironment\thisenv}% + \def\next{\doignore{#1}}% + \else + \let\next\tablex + \fi + \next +} +\def\tablex#1{% + \def\itemindicate{#1}% + \parsearg\tabley +} +\def\tabley#1{% + {% + \makevalueexpandable + \edef\temp{\noexpand\tablez #1\space\space\space}% + \expandafter + }\temp \endtablez +} +\def\tablez #1 #2 #3 #4\endtablez{% + \aboveenvbreak + \ifnum 0#1>0 \advance \leftskip by #1\mil \fi + \ifnum 0#2>0 \tableindent=#2\mil \fi + \ifnum 0#3>0 \advance \rightskip by #3\mil \fi + \itemmax=\tableindent + \advance \itemmax by -\itemmargin + \advance \leftskip by \tableindent + \exdentamount=\tableindent + \parindent = 0pt + \parskip = \smallskipamount + \ifdim \parskip=0pt \parskip=2pt \fi + \let\item = \internalBitem + \let\itemx = \internalBitemx +} +\def\Etable{\endgraf\afterenvbreak} +\let\Eftable\Etable +\let\Evtable\Etable +\let\Eitemize\Etable +\let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno -\def\itemize{\parsearg\itemizezzz} - -\def\itemizezzz #1{% - \begingroup % ended by the @end itemize - \itemizey {#1}{\Eitemize} -} +\envdef\itemize{\parsearg\doitemize} -\def\itemizey#1#2{% +\def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin @@ -2144,13 +2444,33 @@ where each line of input produces a line of output.} \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi - \def#2{\endgraf\afterenvbreak\endgroup}% \def\itemcontents{#1}% % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi \let\item=\itemizeitem } +% Definition of @item while inside @itemize and @enumerate. +% +\def\itemizeitem{% + \advance\itemno by 1 % for enumerations + {\let\par=\endgraf \smallbreak}% reasonable place to break + {% + % If the document has an @itemize directly after a section title, a + % \nobreak will be last on the list, and \sectionheading will have + % done a \vskip-\parskip. In that case, we don't want to zero + % parskip, or the item text will crash with the heading. On the + % other hand, when there is normal text preceding the item (as there + % usually is), we do want to zero parskip, or there would be too much + % space. In that case, we won't have a \nobreak before. At least + % that's the theory. + \ifnum\lastpenalty<10000 \parskip=0in \fi + \noindent + \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% + \vadjust{\penalty 1200}}% not good to break after first line of item. + \flushcr +} + % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % @@ -2160,11 +2480,8 @@ where each line of input produces a line of output.} % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % -\def\enumerate{\parsearg\enumeratezzz} -\def\enumeratezzz #1{\enumeratey #1 \endenumeratey} +\envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% - \begingroup % ended by the @end enumerate - % % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi @@ -2235,13 +2552,13 @@ where each line of input produces a line of output.} }% } -% Call itemizey, adding a period to the first argument and supplying the +% Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 - \itemizey{#1.}\Eenumerate\flushcr + \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg @@ -2252,16 +2569,6 @@ where each line of input produces a line of output.} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} -% Definition of @item while inside @itemize. - -\def\itemizeitem{% -\advance\itemno by 1 -{\let\par=\endgraf \smallbreak}% -\ifhmode \errmessage{In hmode at itemizeitem}\fi -{\parskip=0in \hskip 0pt -\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% -\vadjust{\penalty 1200}}% -\flushcr} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 @@ -2288,24 +2595,14 @@ where each line of input produces a line of output.} % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. -% -% For those who want to use more than one line's worth of words in -% the preamble, break the line within one argument and it -% will parse correctly, i.e., -% -% @multitable {Column 1 template} {Column 2 template} {Column 3 -% template} -% Not: -% @multitable {Column 1 template} {Column 2 template} -% {Column 3 template} % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. -% @item, @tab, @multitable or @end multitable do not need to be on their -% own lines, but it will not hurt if they are. +% @item, @tab do not need to be on their own lines, but it will not hurt +% if they are. % Sample multitable: @@ -2349,13 +2646,12 @@ where each line of input produces a line of output.} \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent -% #1 is the part of the @columnfraction before the decimal point, which -% is presumably either 0 or the empty string (but we don't check, we -% just throw it away). #2 is the decimal part, which we use as the -% percent of \hsize for this column. -\def\pickupwholefraction#1.#2 {% +% #1 is the @columnfraction, usually a decimal number like .5, but might +% be just 1. We just use it, whatever it is. +% +\def\pickupwholefraction#1 {% \global\advance\colcount by 1 - \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}% + \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } @@ -2388,18 +2684,33 @@ where each line of input produces a line of output.} \go } +% multitable-only commands. +% +% @headitem starts a heading row, which we typeset in bold. +% Assignments have to be global since we are inside the implicit group +% of an alignment entry. Note that \everycr resets \everytab. +\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% +% +% A \tab used to include \hskip1sp. But then the space in a template +% line is not enough. That is bad. So let's go back to just `&' until +% we encounter the problem it was intended to solve again. +% --karl, nathan@acm.org, 20apr99. +\def\tab{\checkenv\multitable &\the\everytab}% + % @multitable ... @end multitable definitions: % -\def\multitable{\parsearg\dotable} -\def\dotable#1{\bgroup +\newtoks\everytab % insert after every tab. +% +\envdef\multitable{% \vskip\parskip - \let\item=\crcrwithfootnotes - % A \tab used to include \hskip1sp. But then the space in a template - % line is not enough. That is bad. So let's go back to just & until - % we encounter the problem it was intended to solve again. --karl, - % nathan@acm.org, 20apr99. - \let\tab=&% - \let\startfootins=\startsavedfootnote + \startsavinginserts + % + % @item within a multitable starts a normal row. + % We use \def instead of \let so that if one of the multitable entries + % contains an @itemize, we don't choke on the \item (seen as \crcr aka + % \endtemplate) expanding \doitemize. + \def\item{\crcr}% + % \tolerance=9500 \hbadness=9500 \setmultitablespacing @@ -2407,85 +2718,93 @@ where each line of input produces a line of output.} \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 - \def\Emultitable{% - \global\setpercentfalse - \crcrwithfootnotes\crcr - \egroup\egroup + % + \everycr = {% + \noalign{% + \global\everytab={}% + \global\colcount=0 % Reset the column counter. + % Check for saved footnotes, etc. + \checkinserts + % Keeps underfull box messages off when table breaks over pages. + %\filbreak + % Maybe so, but it also creates really weird page breaks when the + % table breaks over pages. Wouldn't \vfil be better? Wait until the + % problem manifests itself, so it can be fixed for real --karl. + }% }% % + \parsearg\domultitable +} +\def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % - % \everycr will reset column counter, \colcount, at the end of - % each line. Every column entry will cause \colcount to advance by one. - % The table preamble - % looks at the current \colcount to find the correct column width. - \everycr{\noalign{% - % - % \filbreak%% keeps underfull box messages off when table breaks over pages. - % Maybe so, but it also creates really weird page breaks when the table - % breaks over pages. Wouldn't \vfil be better? Wait until the problem - % manifests itself, so it can be fixed for real --karl. - \global\colcount=0\relax}}% - % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. - \halign\bgroup&\global\advance\colcount by 1\relax - \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname - % - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % - % If the user has set preamble in terms of percent of \hsize we will - % use that dimension as the width of the column, and the \leftskip - % will keep entries from bumping into each other. Table will start at - % left margin and final column will justify at right margin. - % - % Make sure we don't inherit \rightskip from the outer environment. - \rightskip=0pt - \ifnum\colcount=1 - % The first column will be indented with the surrounding text. - \advance\hsize by\leftskip - \else - \ifsetpercent \else - % If user has not set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace. - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: - \leftskip=\multitablecolspace - \fi - % Ignoring space at the beginning and end avoids an occasional spurious - % blank line, when TeX decides to break the line at the space before the - % box from the multistrut, so the strut ends up on a line by itself. - % For example: - % @multitable @columnfractions .11 .89 - % @item @code{#} - % @tab Legal holiday which is valid in major parts of the whole country. - % Is automatically provided with highlighting sequences respectively marking - % characters. - \noindent\ignorespaces##\unskip\multistrut}\cr -} - -\def\setmultitablespacing{% test to see if user has set \multitablelinespace. -% If so, do nothing. If not, give it an appropriate dimension based on -% current baselineskip. + \halign\bgroup &% + \global\advance\colcount by 1 + \multistrut + \vtop{% + % Use the current \colcount to find the correct column width: + \hsize=\expandafter\csname col\the\colcount\endcsname + % + % In order to keep entries from bumping into each other + % we will add a \leftskip of \multitablecolspace to all columns after + % the first one. + % + % If a template has been used, we will add \multitablecolspace + % to the width of each template entry. + % + % If the user has set preamble in terms of percent of \hsize we will + % use that dimension as the width of the column, and the \leftskip + % will keep entries from bumping into each other. Table will start at + % left margin and final column will justify at right margin. + % + % Make sure we don't inherit \rightskip from the outer environment. + \rightskip=0pt + \ifnum\colcount=1 + % The first column will be indented with the surrounding text. + \advance\hsize by\leftskip + \else + \ifsetpercent \else + % If user has not set preamble in terms of percent of \hsize + % we will advance \hsize by \multitablecolspace. + \advance\hsize by \multitablecolspace + \fi + % In either case we will make \leftskip=\multitablecolspace: + \leftskip=\multitablecolspace + \fi + % Ignoring space at the beginning and end avoids an occasional spurious + % blank line, when TeX decides to break the line at the space before the + % box from the multistrut, so the strut ends up on a line by itself. + % For example: + % @multitable @columnfractions .11 .89 + % @item @code{#} + % @tab Legal holiday which is valid in major parts of the whole country. + % Is automatically provided with highlighting sequences respectively + % marking characters. + \noindent\ignorespaces##\unskip\multistrut + }\cr +} +\def\Emultitable{% + \crcr + \egroup % end the \halign + \global\setpercentfalse +} + +\def\setmultitablespacing{% + \def\multistrut{\strut}% just use the standard line spacing + % + % Compute \multitablelinespace (if not defined by user) for use in + % \multitableparskip calculation. We used define \multistrut based on + % this, but (ironically) that caused the spacing to be off. + % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 -%% strut to put in table in case some entry doesn't have descenders, -%% to keep lines equally spaced -\let\multistrut = \strut -\else -%% FIXME: what is \box0 supposed to be? -\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 -width0pt\relax} \fi +\fi %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. @@ -2500,163 +2819,33 @@ width0pt\relax} \fi %% than skip between lines in the table. \fi} -% In case a @footnote appears inside an alignment, save the footnote -% text to a box and make the \insert when a row of the table is -% finished. Otherwise, the insertion is lost, it never migrates to the -% main vertical list. --kasal, 22jan03. -% -\newbox\savedfootnotes -% -% \dotable \let's \startfootins to this, so that \dofootnote will call -% it instead of starting the insertion right away. -\def\startsavedfootnote{% - \global\setbox\savedfootnotes = \vbox\bgroup - \unvbox\savedfootnotes -} -\def\crcrwithfootnotes{% - \crcr - \ifvoid\savedfootnotes \else - \noalign{\insert\footins{\box\savedfootnotes}}% - \fi -} \message{conditionals,} -% Prevent errors for section commands. -% Used in @ignore and in failing conditionals. -\def\ignoresections{% - \let\chapter=\relax - \let\unnumbered=\relax - \let\top=\relax - \let\unnumberedsec=\relax - \let\unnumberedsection=\relax - \let\unnumberedsubsec=\relax - \let\unnumberedsubsection=\relax - \let\unnumberedsubsubsec=\relax - \let\unnumberedsubsubsection=\relax - \let\section=\relax - \let\subsec=\relax - \let\subsubsec=\relax - \let\subsection=\relax - \let\subsubsection=\relax - \let\appendix=\relax - \let\appendixsec=\relax - \let\appendixsection=\relax - \let\appendixsubsec=\relax - \let\appendixsubsection=\relax - \let\appendixsubsubsec=\relax - \let\appendixsubsubsection=\relax - \let\contents=\relax - \let\smallbook=\relax - \let\titlepage=\relax -} - -% Used in nested conditionals, where we have to parse the Texinfo source -% and so want to turn off most commands, in case they are used -% incorrectly. -% -% We use \empty instead of \relax for the @def... commands, so that \end -% doesn't throw an error. For instance: -% @ignore -% @deffn ... -% @end deffn -% @end ignore -% -% The @end deffn is going to get expanded, because we're trying to allow -% nested conditionals. But we don't want to expand the actual @deffn, -% since it might be syntactically correct and intended to be ignored. -% Since \end checks for \relax, using \empty does not cause an error. -% -\def\ignoremorecommands{% - \let\defcodeindex = \relax - \let\defcv = \empty - \let\defcvx = \empty - \let\Edefcv = \empty - \let\deffn = \empty - \let\deffnx = \empty - \let\Edeffn = \empty - \let\defindex = \relax - \let\defivar = \empty - \let\defivarx = \empty - \let\Edefivar = \empty - \let\defmac = \empty - \let\defmacx = \empty - \let\Edefmac = \empty - \let\defmethod = \empty - \let\defmethodx = \empty - \let\Edefmethod = \empty - \let\defop = \empty - \let\defopx = \empty - \let\Edefop = \empty - \let\defopt = \empty - \let\defoptx = \empty - \let\Edefopt = \empty - \let\defspec = \empty - \let\defspecx = \empty - \let\Edefspec = \empty - \let\deftp = \empty - \let\deftpx = \empty - \let\Edeftp = \empty - \let\deftypefn = \empty - \let\deftypefnx = \empty - \let\Edeftypefn = \empty - \let\deftypefun = \empty - \let\deftypefunx = \empty - \let\Edeftypefun = \empty - \let\deftypeivar = \empty - \let\deftypeivarx = \empty - \let\Edeftypeivar = \empty - \let\deftypemethod = \empty - \let\deftypemethodx = \empty - \let\Edeftypemethod = \empty - \let\deftypeop = \empty - \let\deftypeopx = \empty - \let\Edeftypeop = \empty - \let\deftypevar = \empty - \let\deftypevarx = \empty - \let\Edeftypevar = \empty - \let\deftypevr = \empty - \let\deftypevrx = \empty - \let\Edeftypevr = \empty - \let\defun = \empty - \let\defunx = \empty - \let\Edefun = \empty - \let\defvar = \empty - \let\defvarx = \empty - \let\Edefvar = \empty - \let\defvr = \empty - \let\defvrx = \empty - \let\Edefvr = \empty - \let\clear = \relax - \let\down = \relax - \let\evenfooting = \relax - \let\evenheading = \relax - \let\everyfooting = \relax - \let\everyheading = \relax - \let\headings = \relax - \let\include = \relax - \let\item = \relax - \let\lowersections = \relax - \let\oddfooting = \relax - \let\oddheading = \relax - \let\printindex = \relax - \let\pxref = \relax - \let\raisesections = \relax - \let\ref = \relax - \let\set = \relax - \let\setchapternewpage = \relax - \let\setchapterstyle = \relax - \let\settitle = \relax - \let\up = \relax - \let\verbatiminclude = \relax - \let\xref = \relax + +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, +% @ifnotxml always succeed. They currently do nothing; we don't +% attempt to check whether the conditionals are properly nested. But we +% have to remember that they are conditionals, so that @end doesn't +% attempt to close an environment group. +% +\def\makecond#1{% + \expandafter\let\csname #1\endcsname = \relax + \expandafter\let\csname iscond.#1\endcsname = 1 } +\makecond{iftex} +\makecond{ifnotdocbook} +\makecond{ifnothtml} +\makecond{ifnotinfo} +\makecond{ifnotplaintext} +\makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} -\def\documentdescriptionword{documentdescription} \def\documentdescription{\doignore{documentdescription}} +\def\docbook{\doignore{docbook}} \def\html{\doignore{html}} +\def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} @@ -2666,198 +2855,133 @@ width0pt\relax} \fi \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory = \comment - -% Ignore text until a line `@end #1'. +% Ignore text until a line `@end #1', keeping track of nested conditionals. % +% A count to remember the depth of nesting. +\newcount\doignorecount + \def\doignore#1{\begingroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define a command to swallow text until we reach `@end #1'. - % This @ is a catcode 12 token (that is the normal catcode of @ in - % this texinfo.tex file). We change the catcode of @ below to match. - \long\def\doignoretext##1@end #1{\enddoignore}% + % Scan in ``verbatim'' mode: + \catcode`\@ = \other + \catcode`\{ = \other + \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. - \catcode\spaceChar = 10 + \spaceisspace % - % Ignore braces, too, so mismatched braces don't cause trouble. - \catcode`\{ = 9 - \catcode`\} = 9 - % - % We must not have @c interpreted as a control sequence. - \catcode`\@ = 12 - % - \def\ignoreword{#1}% - \ifx\ignoreword\documentdescriptionword - % The c kludge breaks documentdescription, since - % `documentdescription' contains a `c'. Means not everything will - % be ignored inside @documentdescription, but oh well... - \else - % Make the letter c a comment character so that the rest of the line - % will be ignored. This way, the document can have (for example) - % @c @end ifinfo - % and the @end ifinfo will be properly ignored. - % (We've just changed @ to catcode 12.) - \catcode`\c = 14 - \fi + % Count number of #1's that we've seen. + \doignorecount = 0 % - % And now expand the command defined above. - \doignoretext -} - -% What we do to finish off ignored text. -% -\def\enddoignore{\endgroup\ignorespaces}% - -\newif\ifwarnedobs\warnedobsfalse -\def\obstexwarn{% - \ifwarnedobs\relax\else - % We need to warn folks that they may have trouble with TeX 3.0. - % This uses \immediate\write16 rather than \message to get newlines. - \immediate\write16{} - \immediate\write16{WARNING: for users of Unix TeX 3.0!} - \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} - \immediate\write16{If you are running another version of TeX, relax.} - \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} - \immediate\write16{ Then upgrade your TeX installation if you can.} - \immediate\write16{ (See ftp://ftp.gnu.org/non-gnu/TeX.README.)} - \immediate\write16{If you are stuck with version 3.0, run the} - \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} - \immediate\write16{ to use a workaround.} - \immediate\write16{} - \global\warnedobstrue - \fi + % Swallow text until we reach the matching `@end #1'. + \dodoignore{#1}% } -% **In TeX 3.0, setting text in \nullfont hangs tex. For a -% workaround (which requires the file ``dummy.tfm'' to be installed), -% uncomment the following line: -%%%%%\font\nullfont=dummy\let\obstexwarn=\relax - -% Ignore text, except that we keep track of conditional commands for -% purposes of nesting, up to an `@end #1' command. -% -\def\nestedignore#1{% - \obstexwarn - % We must actually expand the ignored text to look for the @end - % command, so that nested ignore constructs work. Thus, we put the - % text into a \vbox and then do nothing with the result. To minimize - % the chance of memory overflow, we follow the approach outlined on - % page 401 of the TeXbook. +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. + \obeylines % % - \setbox0 = \vbox\bgroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define `@end #1' to end the box, which will in turn undefine the - % @end command again. - \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% + \gdef\dodoignore#1{% + % #1 contains the command name as a string, e.g., `ifinfo'. % - % We are going to be parsing Texinfo commands. Most cause no - % trouble when they are used incorrectly, but some commands do - % complicated argument parsing or otherwise get confused, so we - % undefine them. + % Define a command to find the next `@end #1', which must be on a line + % by itself. + \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}% + % And this command to find another #1 command, at the beginning of a + % line. (Otherwise, we would consider a line `@c @ifset', for + % example, to count as an @ifset for nesting.) + \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % - % We can't do anything about stray @-signs, unfortunately; - % they'll produce `undefined control sequence' errors. - \ignoremorecommands - % - % Set the current font to be \nullfont, a TeX primitive, and define - % all the font commands to also use \nullfont. We don't use - % dummy.tfm, as suggested in the TeXbook, because some sites - % might not have that installed. Therefore, math mode will still - % produce output, but that should be an extremely small amount of - % stuff compared to the main input. - % - \nullfont - \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont - \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont - \let\tensf=\nullfont - % Similarly for index fonts. - \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont - \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont - \let\smallsf=\nullfont - % Similarly for smallexample fonts. - \let\smallerrm=\nullfont \let\smallerit=\nullfont \let\smallersl=\nullfont - \let\smallerbf=\nullfont \let\smallertt=\nullfont \let\smallersc=\nullfont - \let\smallersf=\nullfont - % - % Don't complain when characters are missing from the fonts. - \tracinglostchars = 0 - % - % Don't bother to do space factor calculations. - \frenchspacing - % - % Don't report underfull hboxes. - \hbadness = 10000 - % - % Do minimal line-breaking. - \pretolerance = 10000 - % - % Do not execute instructions in @tex. - \def\tex{\doignore{tex}}% - % Do not execute macro definitions. - % `c' is a comment character, so the word `macro' will get cut off. - \def\macro{\doignore{ma}}% + % And now expand that command. + \obeylines % + \doignoretext ^^M% + }% +} + +\def\doignoreyyy#1{% + \def\temp{#1}% + \ifx\temp\empty % Nothing found. + \let\next\doignoretextzzz + \else % Found a nested condition, ... + \advance\doignorecount by 1 + \let\next\doignoretextyyy % ..., look for another. + % If we're here, #1 ends with ^^M\ifinfo (for example). + \fi + \next #1% the token \_STOP_ is present just after this macro. +} + +% We have to swallow the remaining "\_STOP_". +% +\def\doignoretextzzz#1{% + \ifnum\doignorecount = 0 % We have just found the outermost @end. + \let\next\enddoignore + \else % Still inside a nested condition. + \advance\doignorecount by -1 + \let\next\doignoretext % Look for the next @end. + \fi + \next } +% Finish off ignored text. +\def\enddoignore{\endgroup\ignorespaces} + + % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we -% didn't need it. Make sure the catcode of space is correct to avoid -% losing inside @example, for instance. +% didn't need it. +% We rely on the fact that \parsearg sets \catcode`\ =10. % -\def\set{\begingroup\catcode` =10 - \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. - \parsearg\setxxx} -\def\setxxx#1{\setyyy#1 \endsetyyy} +\parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% - \def\temp{#2}% - \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty - \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. - \fi - \endgroup + {% + \makevalueexpandable + \def\temp{#2}% + \edef\next{\gdef\makecsname{SET#1}}% + \ifx\temp\empty + \next{}% + \else + \setzzz#2\endsetzzz + \fi + }% } -% Can't use \xdef to pre-expand #2 and save some time, since \temp or -% \next or other control sequences that we've defined might get us into -% an infinite loop. Consider `@set foo @cite{bar}'. -\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} +% Remove the trailing space \setxxx inserted. +\def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % -\def\clear{\parsearg\clearxxx} -\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} +\parseargdef\clear{% + {% + \makevalueexpandable + \global\expandafter\let\csname SET#1\endcsname=\relax + }% +} % @value{foo} gets the text saved in variable foo. +\def\value{\begingroup\makevalueexpandable\valuexxx} +\def\valuexxx#1{\expandablevalue{#1}\endgroup} { - \catcode`\_ = \active + \catcode`\- = \active \catcode`\_ = \active % - % We might end up with active _ or - characters in the argument if - % we're called from @code, as @code{@value{foo-bar_}}. So \let any - % such active characters to their normal equivalents. - \gdef\value{\begingroup + \gdef\makevalueexpandable{% + \let\value = \expandablevalue + % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other - \indexbreaks \let_\normalunderscore - \valuexxx} + % ..., but we might end up with active ones in the argument if + % we're called from @code, as @code{@value{foo-bar_}}, though. + % So \let them to their normal equivalents. + \let-\realdash \let_\normalunderscore + } } -\def\valuexxx#1{\expandablevalue{#1}\endgroup} % We have this subroutine so that we can handle at least some @value's -% properly in indexes (we \let\value to this in \indexdummies). Ones -% whose names contain - or _ still won't work, but we can't do anything -% about that. The command has to be fully expandable (if the variable -% is set), since the result winds up in the index file. This means that -% if the variable's value contains other Texinfo commands, it's almost -% certain it will fail (although perhaps we could fix that with -% sufficient work to do a one-level expansion on the result, instead of -% complete). +% properly in indexes (we call \makevalueexpandable in \indexdummies). +% The command has to be fully expandable (if the variable is set), since +% the result winds up in the index file. This means that if the +% variable's value contains other Texinfo commands, it's almost certain +% it will fail (although perhaps we could fix that with sufficient work +% to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax @@ -2871,55 +2995,36 @@ width0pt\relax} \fi % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % -\def\ifset{\parsearg\doifset} -\def\doifset#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \let\next=\ifsetfail - \else - \let\next=\ifsetsucceed - \fi - \next +% To get special treatment of `@end ifset,' call \makeond and the redefine. +% +\makecond{ifset} +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} +\def\doifset#1#2{% + {% + \makevalueexpandable + \let\next=\empty + \expandafter\ifx\csname SET#2\endcsname\relax + #1% If not set, redefine \next. + \fi + \expandafter + }\next } -\def\ifsetsucceed{\conditionalsucceed{ifset}} -\def\ifsetfail{\nestedignore{ifset}} -\defineunmatchedend{ifset} +\def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % -\def\ifclear{\parsearg\doifclear} -\def\doifclear#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \let\next=\ifclearsucceed - \else - \let\next=\ifclearfail - \fi - \next -} -\def\ifclearsucceed{\conditionalsucceed{ifclear}} -\def\ifclearfail{\nestedignore{ifclear}} -\defineunmatchedend{ifclear} - -% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we -% read the text following, through the first @end iftex (etc.). Make -% `@end iftex' (etc.) valid only after an @iftex. +% The `\else' inside the `\doifset' parameter is a trick to reuse the +% above code: if the variable is not set, do nothing, if it is set, +% then redefine \next to \ifclearfail. % -\def\iftex{\conditionalsucceed{iftex}} -\def\ifnothtml{\conditionalsucceed{ifnothtml}} -\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} -\def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}} -\defineunmatchedend{iftex} -\defineunmatchedend{ifnothtml} -\defineunmatchedend{ifnotinfo} -\defineunmatchedend{ifnotplaintext} +\makecond{ifclear} +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} +\def\ifclearfail{\doignore{ifclear}} -% True conditional. Since \set globally defines its variables, we can -% just start and end a group (to keep the @end definition undefined at -% the outer level). -% -\def\conditionalsucceed#1{\begingroup - \expandafter\def\csname E#1\endcsname{\endgroup}% -} +% @dircategory CATEGORY -- specify a category of the dir file +% which this file should belong to. Ignore this in TeX. +\let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment @@ -2929,9 +3034,8 @@ width0pt\relax} \fi % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within \newindex. -{\catcode`\@=11 -\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} +% except not \outer, so it can be used within macros and \if's. +\edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that @@ -3044,6 +3148,7 @@ width0pt\relax} \fi \def\definedummyletter##1{% \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% }% + \let\definedummyaccent\definedummyletter % % Do the redefinitions. \commondummies @@ -3066,6 +3171,7 @@ width0pt\relax} \fi \def\definedummyletter##1{% \expandafter\def\csname ##1\endcsname{@##1}% }% + \let\definedummyaccent\definedummyletter % % Do the redefinitions. \commondummies @@ -3078,26 +3184,11 @@ width0pt\relax} \fi % \normalturnoffactive % - % Control letters and accents. + \commondummiesnofonts + % \definedummyletter{_}% - \definedummyletter{,}% - \definedummyletter{"}% - \definedummyletter{`}% - \definedummyletter{'}% - \definedummyletter{^}% - \definedummyletter{~}% - \definedummyletter{=}% - \definedummyword{u}% - \definedummyword{v}% - \definedummyword{H}% - \definedummyword{dotaccent}% - \definedummyword{ringaccent}% - \definedummyword{tieaccent}% - \definedummyword{ubaraccent}% - \definedummyword{udotaccent}% - \definedummyword{dotless}% - % - % Other non-English letters. + % + % Non-English letters. \definedummyword{AA}% \definedummyword{AE}% \definedummyword{L}% @@ -3109,6 +3200,10 @@ width0pt\relax} \fi \definedummyword{oe}% \definedummyword{o}% \definedummyword{ss}% + \definedummyword{exclamdown}% + \definedummyword{questiondown}% + \definedummyword{ordf}% + \definedummyword{ordm}% % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword{bf}% @@ -3120,41 +3215,19 @@ width0pt\relax} \fi \definedummyword{tclose}% \definedummyword{tt}% % - % Texinfo font commands. - \definedummyword{b}% - \definedummyword{i}% - \definedummyword{r}% - \definedummyword{sc}% - \definedummyword{t}% - % + \definedummyword{LaTeX}% \definedummyword{TeX}% - \definedummyword{acronym}% - \definedummyword{cite}% - \definedummyword{code}% - \definedummyword{command}% - \definedummyword{dfn}% - \definedummyword{dots}% - \definedummyword{emph}% - \definedummyword{env}% - \definedummyword{file}% - \definedummyword{kbd}% - \definedummyword{key}% - \definedummyword{math}% - \definedummyword{option}% - \definedummyword{samp}% - \definedummyword{strong}% - \definedummyword{uref}% - \definedummyword{url}% - \definedummyword{var}% - \definedummyword{w}% % % Assorted special characters. \definedummyword{bullet}% + \definedummyword{comma}% \definedummyword{copyright}% + \definedummyword{registeredsymbol}% \definedummyword{dots}% \definedummyword{enddots}% \definedummyword{equiv}% \definedummyword{error}% + \definedummyword{euro}% \definedummyword{expansion}% \definedummyword{minus}% \definedummyword{pounds}% @@ -3162,10 +3235,9 @@ width0pt\relax} \fi \definedummyword{print}% \definedummyword{result}% % - % Handle some cases of @value -- where the variable name does not - % contain - or _, and the value does not contain any + % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. - \let\value = \expandablevalue + \makevalueexpandable % % Normal spaces, not active ones. \unsepspaces @@ -3174,45 +3246,97 @@ width0pt\relax} \fi \turnoffmacros } -% If an index command is used in an @example environment, any spaces -% therein should become regular spaces in the raw index file, not the -% expansion of \tie (\leavevmode \penalty \@M \ ). -{\obeyspaces - \gdef\unsepspaces{\obeyspaces\let =\space}} - +% \commondummiesnofonts: common to \commondummies and \indexnofonts. +% +% Better have this without active chars. +{ + \catcode`\~=\other + \gdef\commondummiesnofonts{% + % Control letters and accents. + \definedummyletter{!}% + \definedummyaccent{"}% + \definedummyaccent{'}% + \definedummyletter{*}% + \definedummyaccent{,}% + \definedummyletter{.}% + \definedummyletter{/}% + \definedummyletter{:}% + \definedummyaccent{=}% + \definedummyletter{?}% + \definedummyaccent{^}% + \definedummyaccent{`}% + \definedummyaccent{~}% + \definedummyword{u}% + \definedummyword{v}% + \definedummyword{H}% + \definedummyword{dotaccent}% + \definedummyword{ringaccent}% + \definedummyword{tieaccent}% + \definedummyword{ubaraccent}% + \definedummyword{udotaccent}% + \definedummyword{dotless}% + % + % Texinfo font commands. + \definedummyword{b}% + \definedummyword{i}% + \definedummyword{r}% + \definedummyword{sc}% + \definedummyword{t}% + % + % Commands that take arguments. + \definedummyword{acronym}% + \definedummyword{cite}% + \definedummyword{code}% + \definedummyword{command}% + \definedummyword{dfn}% + \definedummyword{emph}% + \definedummyword{env}% + \definedummyword{file}% + \definedummyword{kbd}% + \definedummyword{key}% + \definedummyword{math}% + \definedummyword{option}% + \definedummyword{samp}% + \definedummyword{strong}% + \definedummyword{tie}% + \definedummyword{uref}% + \definedummyword{url}% + \definedummyword{var}% + \definedummyword{verb}% + \definedummyword{w}% + } +} % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % -\def\indexdummytex{TeX} -\def\indexdummydots{...} -% \def\indexnofonts{% + % Accent commands should become @asis. + \def\definedummyaccent##1{% + \expandafter\let\csname ##1\endcsname\asis + }% + % We can just ignore other control letters. + \def\definedummyletter##1{% + \expandafter\def\csname ##1\endcsname{}% + }% + % Hopefully, all control words can become @asis. + \let\definedummyword\definedummyaccent + % + \commondummiesnofonts + % + % Don't no-op \tt, since it isn't a user-level command + % and is used in the definitions of the active chars like <, >, |, etc. + % Likewise with the other plain tex font commands. + %\let\tt=\asis + % \def\ { }% \def\@{@}% % how to handle braces? \def\_{\normalunderscore}% % - \let\,=\asis - \let\"=\asis - \let\`=\asis - \let\'=\asis - \let\^=\asis - \let\~=\asis - \let\==\asis - \let\u=\asis - \let\v=\asis - \let\H=\asis - \let\dotaccent=\asis - \let\ringaccent=\asis - \let\tieaccent=\asis - \let\ubaraccent=\asis - \let\udotaccent=\asis - \let\dotless=\asis - % - % Other non-English letters. + % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\L{L}% @@ -3226,130 +3350,170 @@ width0pt\relax} \fi \def\ss{ss}% \def\exclamdown{!}% \def\questiondown{?}% + \def\ordf{a}% + \def\ordm{o}% % - % Don't no-op \tt, since it isn't a user-level command - % and is used in the definitions of the active chars like <, >, |, etc. - % Likewise with the other plain tex font commands. - %\let\tt=\asis + \def\LaTeX{LaTeX}% + \def\TeX{TeX}% % - % Texinfo font commands. - \let\b=\asis - \let\i=\asis - \let\r=\asis - \let\sc=\asis - \let\t=\asis - % - \let\TeX=\indexdummytex - \let\acronym=\asis - \let\cite=\asis - \let\code=\asis - \let\command=\asis - \let\dfn=\asis - \let\dots=\indexdummydots - \let\emph=\asis - \let\env=\asis - \let\file=\asis - \let\kbd=\asis - \let\key=\asis - \let\math=\asis - \let\option=\asis - \let\samp=\asis - \let\strong=\asis - \let\uref=\asis - \let\url=\asis - \let\var=\asis - \let\w=\asis + % Assorted special characters. + % (The following {} will end up in the sort string, but that's ok.) + \def\bullet{bullet}% + \def\comma{,}% + \def\copyright{copyright}% + \def\registeredsymbol{R}% + \def\dots{...}% + \def\enddots{...}% + \def\equiv{==}% + \def\error{error}% + \def\euro{euro}% + \def\expansion{==>}% + \def\minus{-}% + \def\pounds{pounds}% + \def\point{.}% + \def\print{-|}% + \def\result{=>}% + % + % Don't write macro names. + \emptyusermacros } \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? -% For \ifx comparisons. -\def\emptymacro{\empty} - % Most index entries go through here, but \dosubind is the general case. -% -\def\doind#1#2{\dosubind{#1}{#2}\empty} +% #1 is the index name, #2 is the entry text. +\def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% \empty if called from \doind, as we usually are. The main exception -% is with defuns, which call us directly. +% empty if called from \doind, as we usually are (the main exception +% is with most defuns, which call us directly). % \def\dosubind#1#2#3{% + \iflinks + {% + % Store the main index entry text (including the third arg). + \toks0 = {#2}% + % If third arg is present, precede it with a space. + \def\thirdarg{#3}% + \ifx\thirdarg\empty \else + \toks0 = \expandafter{\the\toks0 \space #3}% + \fi + % + \edef\writeto{\csname#1indfile\endcsname}% + % + \ifvmode + \dosubindsanitize + \else + \dosubindwrite + \fi + }% + \fi +} + +% Write the entry in \toks0 to the index file: +% +\def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% + \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi - {% - \count255=\lastpenalty - {% - \indexdummies % Must do this here, since \bf, etc expand at this stage - \escapechar=`\\ - {% - \let\folio = 0% We will expand all macros now EXCEPT \folio. - \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - % The main index entry text. - \toks0 = {#2}% - % - % If third arg is present, precede it with space in sort key. - \def\thirdarg{#3}% - \ifx\thirdarg\emptymacro \else - % If the third (subentry) arg is present, add it to the index - % line to write. - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi - % - % Process the index entry with all font commands turned off, to - % get the string to sort by. - {\indexnofonts - \edef\temp{\the\toks0}% need full expansion - \xdef\indexsorttmp{\temp}% - }% - % - % Set up the complete index entry, with both the sort key and - % the original text, including any font commands. We write - % three arguments to \entry to the .?? file (four in the - % subentry case), texindex reduces to two when writing the .??s - % sorted result. - \edef\temp{% - \write\csname#1indfile\endcsname{% - \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% - }% - % - % If a skip is the last thing on the list now, preserve it - % by backing up by \lastskip, doing the \write, then inserting - % the skip again. Otherwise, the whatsit generated by the - % \write will make \lastskip zero. The result is that sequences - % like this: - % @end defun - % @tindex whatever - % @defun ... - % will have extra space inserted, because the \medbreak in the - % start of the @defun won't see the skip inserted by the @end of - % the previous defun. - % - % But don't do any of this if we're not in vertical mode. We - % don't want to do a \vskip and prematurely end a paragraph. - % - % Avoid page breaks due to these extra skips, too. - % - \iflinks - \ifvmode - \skip0 = \lastskip - \ifdim\lastskip = 0pt \else \nobreak\vskip-\skip0 \fi - \fi - % - \temp % do the write - % - \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi - \fi - }% - }% - \penalty\count255 + % + % Remember, we are within a group. + \indexdummies % Must do this here, since \bf, etc expand at this stage + \escapechar=`\\ + \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now + % so it will be output as is; and it will print as backslash. + % + % Process the index entry with all font commands turned off, to + % get the string to sort by. + {\indexnofonts + \edef\temp{\the\toks0}% need full expansion + \xdef\indexsorttmp{\temp}% + }% + % + % Set up the complete index entry, with both the sort key and + % the original text, including any font commands. We write + % three arguments to \entry to the .?? file (four in the + % subentry case), texindex reduces to two when writing the .??s + % sorted result. + \edef\temp{% + \write\writeto{% + \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% + \temp +} + +% Take care of unwanted page breaks: +% +% If a skip is the last thing on the list now, preserve it +% by backing up by \lastskip, doing the \write, then inserting +% the skip again. Otherwise, the whatsit generated by the +% \write will make \lastskip zero. The result is that sequences +% like this: +% @end defun +% @tindex whatever +% @defun ... +% will have extra space inserted, because the \medbreak in the +% start of the @defun won't see the skip inserted by the @end of +% the previous defun. +% +% But don't do any of this if we're not in vertical mode. We +% don't want to do a \vskip and prematurely end a paragraph. +% +% Avoid page breaks due to these extra skips, too. +% +% But wait, there is a catch there: +% We'll have to check whether \lastskip is zero skip. \ifdim is not +% sufficient for this purpose, as it ignores stretch and shrink parts +% of the skip. The only way seems to be to check the textual +% representation of the skip. +% +% The following is almost like \def\zeroskipmacro{0.0pt} except that +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter). +% +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} +% +% ..., ready, GO: +% +\def\dosubindsanitize{% + % \lastskip and \lastpenalty cannot both be nonzero simultaneously. + \skip0 = \lastskip + \edef\lastskipmacro{\the\lastskip}% + \count255 = \lastpenalty + % + % If \lastskip is nonzero, that means the last item was a + % skip. And since a skip is discardable, that means this + % -\skip0 glue we're inserting is preceded by a + % non-discardable item, therefore it is not a potential + % breakpoint, therefore no \nobreak needed. + \ifx\lastskipmacro\zeroskipmacro + \else + \vskip-\skip0 + \fi + % + \dosubindwrite + % + \ifx\lastskipmacro\zeroskipmacro + % If \lastskip was zero, perhaps the last item was a penalty, and + % perhaps it was >=10000, e.g., a \nobreak. In that case, we want + % to re-insert the same penalty (values >10000 are used for various + % signals); since we just inserted a non-discardable item, any + % following glue (such as a \parskip) would be a breakpoint. For example: + % + % @deffn deffn-whatever + % @vindex index-whatever + % Description. + % would allow a break between the index-whatever whatsit + % and the "Description." paragraph. + \ifnum\count255>9999 \penalty\count255 \fi + \else + % On the other hand, if we had a nonzero \lastskip, + % this make-up glue would be preceded by a non-discardable item + % (the whatsit from the \write), so we must insert a \nobreak. + \nobreak\vskip\skip0 + \fi } % The index entry written in the file actually looks like @@ -3387,14 +3551,12 @@ width0pt\relax} \fi % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % -\def\printindex{\parsearg\doprintindex} -\def\doprintindex#1{\begingroup +\parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \everypar = {}% don't want the \kern\-parindent from indentation suppression. - \indexbreaks % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains @@ -3421,7 +3583,7 @@ width0pt\relax} \fi % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. - \def\indexbackslash{\rawbackslashxx}% + \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns @@ -3443,7 +3605,10 @@ width0pt\relax} \fi \removelastskip % % We like breaks before the index initials, so insert a bonus. - \penalty -300 + \nobreak + \vskip 0pt plus 3\baselineskip + \penalty 0 + \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column @@ -3453,80 +3618,100 @@ width0pt\relax} \fi % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% - \vskip .33\baselineskip plus .1\baselineskip - % % Do our best not to break after the initial. \nobreak + \vskip .33\baselineskip plus .1\baselineskip }} -% This typesets a paragraph consisting of #1, dot leaders, and then #2 -% flush to the right margin. It is used for index and table of contents -% entries. The paragraph is indented by \leftskip. +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and +% then page number (#2) flushed to the right margin. It is used for index +% and table of contents entries. The paragraph is indented by \leftskip. % -\def\entry#1#2{\begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % A bit of stretch before each entry for the benefit of balancing columns. - \vskip 0pt plus1pt - % - % Start a ``paragraph'' for the index entry so the line breaking - % parameters we've set above will have an effect. - \noindent - % - % Insert the text of the index entry. TeX will do line-breaking on it. - #1% - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \def\tempa{{\rm }}% - \def\tempb{#2}% - \edef\tempc{\tempa}% - \edef\tempd{\tempb}% - \ifx\tempc\tempd\ \else% +% A straightforward implementation would start like this: +% \def\entry#1#2{... +% But this frozes the catcodes in the argument, and can cause problems to +% @code, which sets - active. This problem was fixed by a kludge--- +% ``-'' was active throughout whole index, but this isn't really right. +% +% The right solution is to prevent \entry from swallowing the whole text. +% --kasal, 21nov03 +\def\entry{% + \begingroup + % + % Start a new paragraph if necessary, so our assignments below can't + % affect previous text. + \par + % + % Do not fill out the last line with white space. + \parfillskip = 0in + % + % No extra space above this paragraph. + \parskip = 0in + % + % Do not prefer a separate line ending with a hyphen to fewer lines. + \finalhyphendemerits = 0 + % + % \hangindent is only relevant when the entry text and page number + % don't both fit on one line. In that case, bob suggests starting the + % dots pretty far over on the line. Unfortunately, a large + % indentation looks wrong when the entry text itself is broken across + % lines. So we use a small indentation and put up with long leaders. + % + % \hangafter is reset to 1 (which is the value we want) at the start + % of each paragraph, so we need not do anything with that. + \hangindent = 2em % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. + % When the entry text needs to be broken, just fill out the first line + % with blank space. + \rightskip = 0pt plus1fil % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. + % A bit of stretch before each entry for the benefit of balancing + % columns. + \vskip 0pt plus1pt + % + % Swallow the left brace of the text (first parameter): + \afterassignment\doentry + \let\temp = +} +\def\doentry{% + \bgroup % Instead of the swallowed brace. + \noindent + \aftergroup\finishentry + % And now comes the text of the entry. +} +\def\finishentry#1{% + % #1 is the page number. + % + % The following is kludged to not output a line of dots in the index if + % there are no page numbers. The next person who breaks this will be + % cursed by a Unix daemon. + \def\tempa{{\rm }}% + \def\tempb{#1}% + \edef\tempc{\tempa}% + \edef\tempd{\tempb}% + \ifx\tempc\tempd + \ % \else - \ #2% The page number ends the paragraph. + % + % If we must, put the page number on a line of its own, and fill out + % this line with blank space. (The \hfil is overwhelmed with the + % fill leaders glue in \indexdotfill if the page number does fit.) + \hfil\penalty50 + \null\nobreak\indexdotfill % Have leaders before the page number. + % + % The `\ ' here is removed by the implicit \unskip that TeX does as + % part of (the primitive) \par. Without it, a spurious underfull + % \hbox ensues. + \ifpdf + \pdfgettoks#1.% + \ \the\toksA + \else + \ #1% + \fi \fi - \fi% - \par -\endgroup} + \par + \endgroup +} % Like \dotfill except takes at least 1 em. \def\indexdotfill{\cleaders @@ -3695,6 +3880,12 @@ width0pt\relax} \fi \message{sectioning,} % Chapters, sections, etc. +% \unnumberedno is an oxymoron, of course. But we count the unnumbered +% sections so that we can refer to them unambiguously in the pdf +% outlines by their "section number". We avoid collisions with chapter +% numbers by starting them at 10000. (If a document ever has 10000 +% chapters, we're in trouble anyway, I'm sure.) +\newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 @@ -3702,9 +3893,12 @@ width0pt\relax} \fi % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ +% % \def\appendixletter{\char\the\appendixno} -% We do the following for the sake of pdftex, which needs the actual +% We do the following ugly conditional instead of the above simple +% construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. +% \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% @@ -3742,11 +3936,12 @@ width0pt\relax} \fi % Each @chapter defines this as the name of the chapter. % page headings and footings can use it. @section does likewise. +% However, they are not reliable, because we don't use marks. \def\thischapter{} \def\thissection{} \newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raise/lowersections modify this count +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} @@ -3756,121 +3951,142 @@ width0pt\relax} \fi \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name -% Choose a numbered-heading macro -% #1 is heading level if unmodified by @raisesections or @lowersections -% #2 is text for heading -\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \chapterzzz{#2} -\or - \seczzz{#2} -\or - \numberedsubseczzz{#2} -\or - \numberedsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \chapterzzz{#2} +% we only have subsub. +\chardef\maxseclevel = 3 +% +% A numbered section within an unnumbered changes to unnumbered too. +% To achive this, remember the "biggest" unnum. sec. we are currently in: +\chardef\unmlevel = \maxseclevel +% +% Trace whether the current chapter is an appendix or not: +% \chapheadtype is "N" or "A", unnumbered chapters are ignored. +\def\chapheadtype{N} + +% Choose a heading macro +% #1 is heading type +% #2 is heading level +% #3 is text for heading +\def\genhead#1#2#3{% + % Compute the abs. sec. level: + \absseclevel=#2 + \advance\absseclevel by \secbase + % Make sure \absseclevel doesn't fall outside the range: + \ifnum \absseclevel < 0 + \absseclevel = 0 \else - \numberedsubsubseczzz{#2} + \ifnum \absseclevel > 3 + \absseclevel = 3 + \fi \fi -\fi -\suppressfirstparagraphindent -} - -% like \numhead, but chooses appendix heading levels -\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \appendixzzz{#2} -\or - \appendixsectionzzz{#2} -\or - \appendixsubseczzz{#2} -\or - \appendixsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \appendixzzz{#2} + % The heading type: + \def\headtype{#1}% + \if \headtype U% + \ifnum \absseclevel < \unmlevel + \chardef\unmlevel = \absseclevel + \fi \else - \appendixsubsubseczzz{#2} + % Check for appendix sections: + \ifnum \absseclevel = 0 + \edef\chapheadtype{\headtype}% + \else + \if \headtype A\if \chapheadtype N% + \errmessage{@appendix... within a non-appendix chapter}% + \fi\fi + \fi + % Check for numbered within unnumbered: + \ifnum \absseclevel > \unmlevel + \def\headtype{U}% + \else + \chardef\unmlevel = 3 + \fi \fi -\fi -\suppressfirstparagraphindent -} - -% like \numhead, but chooses numberless heading levels -\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \unnumberedzzz{#2} -\or - \unnumberedseczzz{#2} -\or - \unnumberedsubseczzz{#2} -\or - \unnumberedsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \unnumberedzzz{#2} + % Now print the heading: + \if \headtype U% + \ifcase\absseclevel + \unnumberedzzz{#3}% + \or \unnumberedseczzz{#3}% + \or \unnumberedsubseczzz{#3}% + \or \unnumberedsubsubseczzz{#3}% + \fi \else - \unnumberedsubsubseczzz{#2} + \if \headtype A% + \ifcase\absseclevel + \appendixzzz{#3}% + \or \appendixsectionzzz{#3}% + \or \appendixsubseczzz{#3}% + \or \appendixsubsubseczzz{#3}% + \fi + \else + \ifcase\absseclevel + \chapterzzz{#3}% + \or \seczzz{#3}% + \or \numberedsubseczzz{#3}% + \or \numberedsubsubseczzz{#3}% + \fi + \fi \fi -\fi -\suppressfirstparagraphindent -} - -% @chapter, @appendix, @unnumbered. -\def\thischaptername{No Chapter Title} -\outer\def\chapter{\parsearg\chapteryyy} -\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 - \global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}% - \chapmacro {#1}{\the\chapno}% - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - % We don't substitute the actual chapter name into \thischapter - % because we don't want its macros evaluated now. - \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% - \writetocentry{chap}{#1}{{\the\chapno}} - \donoderef + \suppressfirstparagraphindent +} + +% an interface: +\def\numhead{\genhead N} +\def\apphead{\genhead A} +\def\unnmhead{\genhead U} + +% @chapter, @appendix, @unnumbered. Increment top-level counter, reset +% all lower-level sectioning counters to zero. +% +% Also set \chaplevelprefix, which we prepend to @float sequence numbers +% (e.g., figures), q.v. By default (before any chapter), that is empty. +\let\chaplevelprefix = \empty +% +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz +\def\chapterzzz#1{% + % section resetting is \global in case the chapter is in a group, such + % as an @include file. + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\chapno by 1 + % + % Used for \float. + \gdef\chaplevelprefix{\the\chapno.}% + \resetallfloatnos + % + \message{\putwordChapter\space \the\chapno}% + % + % Write the actual heading. + \chapmacro{#1}{Ynumbered}{\the\chapno}% + % + % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } -% we use \chapno to avoid indenting back -\def\appendixbox#1{% - \setbox0 = \hbox{\putwordAppendix{} \the\chapno}% - \hbox to \wd0{#1\hss}} - -\outer\def\appendix{\parsearg\appendixyyy} -\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz -\def\appendixzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 - \global\advance \appendixno by 1 - \message{\putwordAppendix\space \appendixletter}% - \chapmacro {#1}{\appendixbox{\putwordAppendix{} \appendixletter}}% - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% - \writetocentry{appendix}{#1}{{\appendixletter}} - \appendixnoderef +\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz +\def\appendixzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\appendixno by 1 + \gdef\chaplevelprefix{\appendixletter.}% + \resetallfloatnos + % + \def\appendixnum{\putwordAppendix\space \appendixletter}% + \message{\appendixnum}% + % + \chapmacro{#1}{Yappendix}{\appendixletter}% + % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } -% @centerchap is like @unnumbered, but the heading is centered. -\outer\def\centerchap{\parsearg\centerchapyyy} -\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} - -% @top is like @unnumbered. -\outer\def\top{\parsearg\unnumberedyyy} - -\outer\def\unnumbered{\parsearg\unnumberedyyy} -\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 +\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz +\def\unnumberedzzz#1{% + \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 + \global\advance\unnumberedno by 1 + % + % Since an unnumbered has no number, no prefix for figures. + \global\let\chaplevelprefix = \empty + \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX @@ -3883,134 +4099,98 @@ width0pt\relax} \fi % \the<toks register> to achieve this: TeX expands \the<toks> only once, % simply yielding the contents of <toks register>. (We also do this for % the toc entries.) - \toks0 = {#1}\message{(\the\toks0)}% + \toks0 = {#1}% + \message{(\the\toks0)}% + % + \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % - \unnumbchapmacro {#1}% - \gdef\thischapter{#1}\gdef\thissection{#1}% - \writetocentry{unnumbchap}{#1}{{\the\chapno}} - \unnumbnoderef \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } +% @centerchap is like @unnumbered, but the heading is centered. +\outer\parseargdef\centerchap{% + % Well, we could do the following in a group, but that would break + % an assumption that \chapmacro is called at the outermost level. + % Thus we are safer this way: --kasal, 24feb04 + \let\centerparametersmaybe = \centerparameters + \unnmhead0{#1}% + \let\centerparametersmaybe = \relax +} + +% @top is like @unnumbered. +\let\top\unnumbered + % Sections. -\outer\def\numberedsec{\parsearg\secyyy} -\def\secyyy #1{\numhead1{#1}} % normally calls seczzz -\def\seczzz #1{% - \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % - \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% - \writetocentry{sec}{#1}{{\the\chapno}{\the\secno}} - \donoderef - \nobreak +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz +\def\seczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } -\outer\def\appendixsection{\parsearg\appendixsecyyy} -\outer\def\appendixsec{\parsearg\appendixsecyyy} -\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz #1{% - \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % - \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% - \writetocentry{sec}{#1}{{\appendixletter}{\the\secno}} - \appendixnoderef - \nobreak +\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz +\def\appendixsectionzzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } +\let\appendixsec\appendixsection -\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} -\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz #1{% - \plainsecheading {#1}\gdef\thissection{#1}% - \writetocentry{unnumbsec}{#1}{{\the\chapno}{\the\secno}} - \unnumbnoderef - \nobreak +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz +\def\unnumberedseczzz#1{% + \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 + \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. -\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} -\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz #1{% - \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % - \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% - \writetocentry{subsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}} - \donoderef - \nobreak +\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz +\def\numberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } -\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} -\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz #1{% - \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % - \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% - \writetocentry{subsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}} - \appendixnoderef - \nobreak +\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz +\def\appendixsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno}% } -\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} -\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz #1{% - \plainsubsecheading {#1}\gdef\thissection{#1}% - \writetocentry{unnumbsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}} - \unnumbnoderef - \nobreak +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz +\def\unnumberedsubseczzz#1{% + \global\subsubsecno=0 \global\advance\subsecno by 1 + \sectionheading{#1}{subsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. -\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} -\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz #1{% - \gdef\thissection{#1}\global\advance \subsubsecno by 1 % - \subsubsecheading {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% - \writetocentry{subsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}} - \donoderef - \nobreak +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz +\def\numberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynumbered}% + {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } -\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} -\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz #1{% - \gdef\thissection{#1}\global\advance \subsubsecno by 1 % - \subsubsecheading {#1} - {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% - \writetocentry{subsubsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}} - \appendixnoderef - \nobreak +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz +\def\appendixsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Yappendix}% + {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } -\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} -\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz #1{% - \plainsubsubsecheading {#1}\gdef\thissection{#1}% - \writetocentry{unnumbsubsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}} - \unnumbnoderef - \nobreak +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz +\def\unnumberedsubsubseczzz#1{% + \global\advance\subsubsecno by 1 + \sectionheading{#1}{subsubsec}{Ynothing}% + {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } -% These are variants which are not "outer", so they can appear in @ifinfo. -% Actually, they should now be obsolete; ordinary section commands should work. -\def\infotop{\parsearg\unnumberedzzz} -\def\infounnumbered{\parsearg\unnumberedzzz} -\def\infounnumberedsec{\parsearg\unnumberedseczzz} -\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz} -\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} - -\def\infoappendix{\parsearg\appendixzzz} -\def\infoappendixsec{\parsearg\appendixseczzz} -\def\infoappendixsubsec{\parsearg\appendixsubseczzz} -\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz} - -\def\infochapter{\parsearg\chapterzzz} -\def\infosection{\parsearg\sectionzzz} -\def\infosubsection{\parsearg\subsectionzzz} -\def\infosubsubsection{\parsearg\subsubsectionzzz} - % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. -\global\let\section = \numberedsec -\global\let\subsection = \numberedsubsec -\global\let\subsubsection = \numberedsubsubsec +\let\section = \numberedsec +\let\subsection = \numberedsubsec +\let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading @@ -4023,23 +4203,27 @@ width0pt\relax} \fi % if justification is not attempted. Hence \raggedright. -\def\majorheading{\parsearg\majorheadingzzz} -\def\majorheadingzzz #1{% +\def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% - {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 200} + \parsearg\chapheadingzzz +} -\def\chapheading{\parsearg\chapheadingzzz} -\def\chapheadingzzz #1{\chapbreak % +\def\chapheading{\chapbreak \parsearg\chapheadingzzz} +\def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 200} + \rm #1\hfill}}% + \bigskip \par\penalty 200\relax + \suppressfirstparagraphindent +} % @heading, @subheading, @subsubheading. -\def\heading{\parsearg\plainsecheading} -\def\subheading{\parsearg\plainsubsecheading} -\def\subsubheading{\parsearg\plainsubsubsecheading} +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} + \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), @@ -4048,8 +4232,6 @@ width0pt\relax} \fi %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} - %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) @@ -4072,7 +4254,7 @@ width0pt\relax} \fi \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} -\def\CHAPPAGodd{ +\def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage @@ -4080,116 +4262,193 @@ width0pt\relax} \fi \CHAPPAGon -\def\CHAPFplain{ -\global\let\chapmacro=\chfplain -\global\let\unnumbchapmacro=\unnchfplain -\global\let\centerchapmacro=\centerchfplain} - -% Plain chapter opening. -% #1 is the text, #2 the chapter number or empty if unnumbered. -\def\chfplain#1#2{% +% Chapter opening. +% +% #1 is the text, #2 is the section type (Ynumbered, Ynothing, +% Yappendix, Yomitfromtoc), #3 the chapter number. +% +% To test against our argument. +\def\Ynothingkeyword{Ynothing} +\def\Yomitfromtockeyword{Yomitfromtoc} +\def\Yappendixkeyword{Yappendix} +% +\def\chapmacro#1#2#3{% \pchapsepmacro {% \chapfonts \rm - \def\chapnum{#2}% - \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% + % + % Have to define \thissection before calling \donoderef, because the + % xref code eventually uses it. On the other hand, it has to be called + % after \pchapsepmacro, or the headline will change too soon. + \gdef\thissection{#1}% + \gdef\thischaptername{#1}% + % + % Only insert the separating space if we have a chapter/appendix + % number, and don't print the unnumbered ``number''. + \def\temptype{#2}% + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unnchap}% + \def\thischapter{#1}% + \else\ifx\temptype\Yomitfromtockeyword + \setbox0 = \hbox{}% contents like unnumbered, but no toc entry + \def\toctype{omit}% + \xdef\thischapter{}% + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% + \def\toctype{app}% + % We don't substitute the actual chapter name into \thischapter + % because we don't want its macros evaluated now. And we don't + % use \thissection because that changes with each section. + % + \xdef\thischapter{\putwordAppendix{} \appendixletter: + \noexpand\thischaptername}% + \else + \setbox0 = \hbox{#3\enspace}% + \def\toctype{numchap}% + \xdef\thischapter{\putwordChapter{} \the\chapno: + \noexpand\thischaptername}% + \fi\fi\fi + % + % Write the toc entry for this chapter. Must come before the + % \donoderef, because we include the current node name in the toc + % entry, and \donoderef resets it to empty. + \writetocentry{\toctype}{#1}{#3}% + % + % For pdftex, we have to write out the node definition (aka, make + % the pdfdest) after any page break, but before the actual text has + % been typeset. If the destination for the pdf outline is after the + % text, then jumping from the outline may wind up with the text not + % being visible, for instance under high magnification. + \donoderef{#2}% + % + % Typeset the actual heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent = \wd0 \centerparametersmaybe + \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } -% Plain opening for unnumbered. -\def\unnchfplain#1{\chfplain{#1}{}} - % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax -\def\centerchfplain#1{{% - \def\centerparametersmaybe{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt - }% - \chfplain{#1}{}% -}} +\def\centerparameters{% + \advance\rightskip by 3\rightskip + \leftskip = \rightskip + \parfillskip = 0pt +} -\CHAPFplain % The default +% I don't think this chapter style is supported any more, so I'm not +% updating it with the new noderef stuff. We'll see. --karl, 11aug03. +% +\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} +% \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rm #1\hfill}}\bigskip \par\nobreak } - \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } - \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rm #1}\hfill}}\bigskip \par\nobreak } - -\def\CHAPFopen{ -\global\let\chapmacro=\chfopen -\global\let\unnumbchapmacro=\unnchfopen -\global\let\centerchapmacro=\centerchfopen} +\def\CHAPFopen{% + \global\let\chapmacro=\chfopen + \global\let\centerchapmacro=\centerchfopen} -% Section titles. +% Section titles. These macros combine the section number parts and +% call the generic \sectionheading to do the printing. +% \newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip {-1000}} -\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} -\def\plainsecheading#1{\sectionheading{sec}{}{#1}} +\def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. -\newskip \subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} -\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} -\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} +\newskip\subsecheadingskip +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. -\let\subsubsecheadingskip = \subsecheadingskip -\let\subsubsecheadingbreak = \subsecheadingbreak -\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} -\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} +\def\subsubsecheadingskip{\subsecheadingskip} +\def\subsubsecheadingbreak{\subsecheadingbreak} -% Print any size section title. +% Print any size, any type, section title. % -% #1 is the section type (sec/subsec/subsubsec), #2 is the section -% number (maybe empty), #3 the text. -\def\sectionheading#1#2#3{% - {% - \expandafter\advance\csname #1headingskip\endcsname by \parskip - \csname #1headingbreak\endcsname - }% +% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is +% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the +% section number. +% +\def\sectionheading#1#2#3#4{% {% % Switch to the right set of fonts. - \csname #1fonts\endcsname \rm + \csname #2fonts\endcsname \rm + % + % Insert space above the heading. + \csname #2headingbreak\endcsname + % + % Only insert the space after the number if we have a section number. + \def\sectionlevel{#2}% + \def\temptype{#3}% + % + \ifx\temptype\Ynothingkeyword + \setbox0 = \hbox{}% + \def\toctype{unn}% + \gdef\thissection{#1}% + \else\ifx\temptype\Yomitfromtockeyword + % for @headings -- no section number, don't include in toc, + % and don't redefine \thissection. + \setbox0 = \hbox{}% + \def\toctype{omit}% + \let\sectionlevel=\empty + \else\ifx\temptype\Yappendixkeyword + \setbox0 = \hbox{#4\enspace}% + \def\toctype{app}% + \gdef\thissection{#1}% + \else + \setbox0 = \hbox{#4\enspace}% + \def\toctype{num}% + \gdef\thissection{#1}% + \fi\fi\fi % - % Only insert the separating space if we have a section number. - \def\secnum{#2}% - \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% + % Write the toc entry (before \donoderef). See comments in \chfplain. + \writetocentry{\toctype\sectionlevel}{#1}{#4}% % + % Write the node reference (= pdf destination for pdftex). + % Again, see comments in \chfplain. + \donoderef{#3}% + % + % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent = \wd0 % zero if no section number - \unhbox0 #3}% + \hangindent=\wd0 % zero if no section number + \unhbox0 #1}% }% - % Add extra space after the heading -- either a line space or a - % paragraph space, whichever is more. (Some people like to set - % \parskip to large values for some reason.) Don't allow stretch, though. - \nobreak - \ifdim\parskip>\normalbaselineskip - \kern\parskip - \else - \kern\normalbaselineskip - \fi + % Add extra space after the heading -- half of whatever came above it. + % Don't allow stretch, though. + \kern .5 \csname #2headingskip\endcsname + % + % Do not let the kern be a potential breakpoint, as it would be if it + % was followed by glue. \nobreak + % + % We'll almost certainly start a paragraph next, so don't let that + % glue accumulate. (Not a breakpoint because it's preceded by a + % discardable item.) + \vskip-\parskip + % + % This is purely so the last item on the list is a known \penalty > + % 10000. This is so \startdefun can avoid allowing breakpoints after + % section headings. Otherwise, it would insert a valid breakpoint between: + % + % @section sec-whatever + % @deffn def-whatever + \penalty 10001 } @@ -4198,119 +4457,152 @@ width0pt\relax} \fi \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. -% Called from @chapter, etc. We supply {\folio} at the end of the -% argument, which will end up as the last argument to the \...entry macro. +% Called from @chapter, etc. +% +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} +% We append the current node name (if any) and page number as additional +% arguments for the \{chap,sec,...}entry macros which will eventually +% read this. The node name is used in the pdf outlines as the +% destination to jump to. % -% Usage: \writetocentry{chap}{The Name of The Game}{{\the\chapno}} % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. +% But if #1 is `omit', then we don't do anything. This is used for the +% table of contents chapter openings themselves. % \newif\iftocfileopened +\def\omitkeyword{omit}% +% \def\writetocentry#1#2#3{% - \iftocfileopened\else - \immediate\openout\tocfile = \jobname.toc - \global\tocfileopenedtrue - \fi - % - \iflinks - \toks0 = {#2}% - \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}#3{\folio}}}% - \temp + \edef\writetoctype{#1}% + \ifx\writetoctype\omitkeyword \else + \iftocfileopened\else + \immediate\openout\tocfile = \jobname.toc + \global\tocfileopenedtrue + \fi + % + \iflinks + \toks0 = {#2}% + \toks2 = \expandafter{\lastnode}% + \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}% + {\the\toks2}{\noexpand\folio}}}% + \temp + \fi \fi % - % Tell \shipout to create a page destination if we're doing pdf, which - % will be the target of the links in the table of contents. We can't - % just do it on every page because the title pages are numbered 1 and - % 2 (the page numbers aren't printed), and so are the first two pages - % of the document. Thus, we'd have two destinations named `1', and - % two named `2'. - \ifpdf \pdfmakepagedesttrue \fi + % Tell \shipout to create a pdf destination on each page, if we're + % writing pdf. These are used in the table of contents. We can't + % just write one on every page because the title pages are numbered + % 1 and 2 (the page numbers aren't printed), and so are the first + % two pages of the document. Thus, we'd have two destinations named + % `1', and two named `2'. + \ifpdf \global\pdfmakepagedesttrue \fi } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 -% Finish up the main text and prepare to read what we've written -% to \tocfile. +% Prepare to read what we've written to \tocfile. % \def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund <tege@matematik.su.se> - \contentsalignmacro - \immediate\closeout\tocfile - % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \unnumbchapmacro{#1}\def\thischapter{}% - \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - % We can't do this, because then an actual ^ in a section - % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. - %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. - % - % Roman numerals for page numbers. - \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi + % If @setchapternewpage on, and @headings double, the contents should + % start on an odd page, unlike chapters. Thus, we maintain + % \contentsalignmacro in parallel with \pagealignmacro. + % From: Torbjorn Granlund <tege@matematik.su.se> + \contentsalignmacro + \immediate\closeout\tocfile + % + % Don't need to put `Contents' or `Short Contents' in the headline. + % It is abundantly clear what they are. + \def\thischapter{}% + \chapmacro{#1}{Yomitfromtoc}{}% + % + \savepageno = \pageno + \begingroup % Set up to handle contents files properly. + \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 + % We can't do this, because then an actual ^ in a section + % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. + %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi + \raggedbottom % Worry more about breakpoints than the bottom. + \advance\hsize by -\contentsrightmargin % Don't use the full line length. + % + % Roman numerals for page numbers. + \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % Normal (long) toc. \def\contents{% - \startcontents{\putwordTOC}% - \openin 1 \jobname.toc - \ifeof 1 \else - \closein 1 - \input \jobname.toc - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \pdfmakeoutlines - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno + \startcontents{\putwordTOC}% + \openin 1 \jobname.toc + \ifeof 1 \else + \input \jobname.toc + \fi + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \ifeof 1 \else + \pdfmakeoutlines + \fi + \closein 1 + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% - \startcontents{\putwordShortTOC}% - % - \let\chapentry = \shortchapentry - \let\appendixentry = \shortappendixentry - \let\unnumbchapentry = \shortunnumberedentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf - \let\sl=\shortcontsl \let\tt=\shortconttt - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\secentry ##1##2##3##4{} - \def\subsecentry ##1##2##3##4##5{} - \def\subsubsecentry ##1##2##3##4##5##6{} - \let\unnumbsecentry = \secentry - \let\unnumbsubsecentry = \subsecentry - \let\unnumbsubsubsecentry = \subsubsecentry - \openin 1 \jobname.toc - \ifeof 1 \else - \closein 1 - \input \jobname.toc - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno + \startcontents{\putwordShortTOC}% + % + \let\numchapentry = \shortchapentry + \let\appentry = \shortchapentry + \let\unnchapentry = \shortunnchapentry + % We want a true roman here for the page numbers. + \secfonts + \let\rm=\shortcontrm \let\bf=\shortcontbf + \let\sl=\shortcontsl \let\tt=\shortconttt + \rm + \hyphenpenalty = 10000 + \advance\baselineskip by 1pt % Open it up a little. + \def\numsecentry##1##2##3##4{} + \let\appsecentry = \numsecentry + \let\unnsecentry = \numsecentry + \let\numsubsecentry = \numsecentry + \let\appsubsecentry = \numsecentry + \let\unnsubsecentry = \numsecentry + \let\numsubsubsecentry = \numsecentry + \let\appsubsubsecentry = \numsecentry + \let\unnsubsubsecentry = \numsecentry + \openin 1 \jobname.toc + \ifeof 1 \else + \input \jobname.toc + \fi + \closein 1 + \vfill \eject + \contentsalignmacro % in case @setchapternewpage odd is in effect + \endgroup + \lastnegativepageno = \pageno + \global\pageno = \savepageno } \let\shortcontents = \summarycontents -\ifpdf - \pdfcatalog{/PageMode /UseOutlines}% -\fi +% Typeset the label for a chapter or appendix for the short contents. +% The arg is, e.g., `A' for an appendix, or `3' for a chapter. +% +\def\shortchaplabel#1{% + % This space should be enough, since a single number is .5em, and the + % widest letter (M) is 1em, at least in the Computer Modern fonts. + % But use \hss just in case. + % (This space doesn't include the extra space that gets added after + % the label; that gets put in by \shortchapentry above.) + % + % We'd like to right-justify chapter numbers, but that looks strange + % with appendix letters. And right-justifying numbers and + % left-justifying letters looks strange when there is less than 10 + % chapters. Have to read the whole toc once to know how many chapters + % there are before deciding ... + \hbox to 1em{#1\hss}% +} % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. @@ -4318,58 +4610,46 @@ width0pt\relax} \fi % The arguments in between are the chapter number, section number, ... % Chapters, in the main contents. -\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. -\def\shortchapentry#1#2#3{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% +\def\shortchapentry#1#2#3#4{% + \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. -\def\appendixentry#1#2#3{% - \dochapentry{\appendixbox{\putwordAppendix{} #2}\labelspace#1}{#3}} -% -% Appendices, in the short toc. -\let\shortappendixentry = \shortchapentry - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter. -% We could simplify the code here by writing out an \appendixentry -% command in the toc file for appendices, instead of using \chapentry -% for both, but it doesn't seem worth it. +% Need the word Appendix, and a fixed-size box. % -\newdimen\shortappendixwidth +\def\appendixbox#1{% + % We use M since it's probably the widest letter. + \setbox0 = \hbox{\putwordAppendix{} M}% + \hbox to \wd0{\putwordAppendix{} #1\hss}} % -\def\shortchaplabel#1{% - % This space should be enough, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % But use \hss just in case. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - \dimen0 = 1em - \hbox to \dimen0{#1\hss}% -} +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. -\def\unnumbchapentry#1#2#3{\dochapentry{#1}{#3}} -\def\shortunnumberedentry#1#2#3{\tocentry{#1}{\doshortpageno\bgroup#3\egroup}} +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. -\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} -\def\unnumbsecentry#1#2#3#4{\dosecentry{#1}{#4}} +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} +\let\appsecentry=\numsecentry +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. -\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}} -\def\unnumbsubsecentry#1#2#3#4#5{\dosubsecentry{#1}{#5}} +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} +\let\appsubsecentry=\numsubsecentry +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. -\def\subsubsecentry#1#2#3#4#5#6{% - \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} -\def\unnumbsubsubsecentry#1#2#3#4#5#6{\dosubsubsecentry{#1}{#6}} +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} +\let\appsubsubsecentry=\numsubsubsecentry +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. -\newdimen\tocindent \tocindent = 3pc +% Same as \defaultparindent. +\newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. @@ -4400,17 +4680,8 @@ width0pt\relax} \fi \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} -% Final typesetting of a toc entry; we use the same \entry macro as for -% the index entries, but we want to suppress hyphenation here. (We -% can't do that in the \entry macro, since index entries might consist -% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) -\def\tocentry#1#2{\begingroup - \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks - % Do not use \turnoffactive in these arguments. Since the toc is - % typeset in cmr, characters such as _ would come out wrong; we - % have to do the usual translation tricks. - \entry{#1}{#2}% -\endgroup} +% We use the same \entry macro as for the index entries. +\let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} @@ -4420,8 +4691,8 @@ width0pt\relax} \fi \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} -\let\subsecentryfonts = \textfonts -\let\subsubsecentryfonts = \textfonts +\def\subsecentryfonts{\textfonts} +\def\subsubsecentryfonts{\textfonts} \message{environments,} @@ -4448,10 +4719,10 @@ width0pt\relax} \fi % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} % -\global\setbox\errorbox=\hbox to \dimen0{\hfil +\setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. - \vbox{ + \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. @@ -4465,14 +4736,13 @@ width0pt\relax} \fi % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain tex @ character. -\def\tex{\begingroup +\envdef\tex{% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other - \catcode `\==\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other @@ -4488,6 +4758,7 @@ width0pt\relax} \fi \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent + \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace @@ -4498,10 +4769,11 @@ width0pt\relax} \fi \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% -\let\Etex=\endgroup} +} +% There is no need to define \Etex. % Define @lisp ... @end lisp. -% @lisp does a \begingroup so it can rebind things, +% @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. @@ -4512,19 +4784,6 @@ width0pt\relax} \fi % have any width. \def\lisppar{\null\endgraf} -% Make each space character in the input produce a normal interword -% space in the output. Don't allow a line break at this space, as this -% is used only in environments like @example, where each line of input -% should produce a line of output anyway. -% -{\obeyspaces % -\gdef\sepspaces{\obeyspaces\let =\tie}} - -% Define \obeyedspace to be our active space, whatever it is. This is -% for use in \parsearg. -{\sepspaces% -\global\let\obeyedspace= } - % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt @@ -4534,7 +4793,8 @@ width0pt\relax} \fi % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% - % =10000 instead of <10000 because of a special case in \itemzzz, q.v. + % =10000 instead of <10000 because of a special case in \itemzzz and + % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf @@ -4542,7 +4802,7 @@ width0pt\relax} \fi \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... - \ifnum\lastpenalty>10000 \else \penalty-50 \fi + \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi @@ -4574,52 +4834,52 @@ width0pt\relax} \fi % \newskip\lskip\newskip\rskip -\def\cartouche{% -\par % can't be in the midst of a paragraph. -\begingroup - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt %we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18.4pt % allow for 3pt kerns on either -% side, and for 6pt waste from -% each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \hsize=\cartinner - \kern3pt - \begingroup - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip +\envdef\cartouche{% + \ifhmode\par\fi % can't be in the midst of a paragraph. + \startsavinginserts + \lskip=\leftskip \rskip=\rightskip + \leftskip=0pt\rightskip=0pt % we want these *outside*. + \cartinner=\hsize \advance\cartinner by-\lskip + \advance\cartinner by-\rskip + \cartouter=\hsize + \advance\cartouter by 18.4pt % allow for 3pt kerns on either + % side, and for 6pt waste from + % each corner char, and rule thickness + \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip + % Flag to tell @lisp, etc., not to narrow margin. + \let\nonarrowing=\comment + \vbox\bgroup + \baselineskip=0pt\parskip=0pt\lineskip=0pt + \carttop + \hbox\bgroup + \hskip\lskip + \vrule\kern3pt + \vbox\bgroup + \kern3pt + \hsize=\cartinner + \baselineskip=\normbskip + \lineskip=\normlskip + \parskip=\normpskip + \vskip -\parskip + \comment % For explanation, see the end of \def\group. +} \def\Ecartouche{% - \endgroup - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup -\endgroup -}} + \ifhmode\par\fi + \kern3pt + \egroup + \kern3pt\vrule + \hskip\rskip + \egroup + \cartbot + \egroup + \checkinserts +} % This macro is called at the beginning of all the @example variants, % inside a group. \def\nonfillstart{% \aboveenvbreak - \inENV % This group ends at the end of the body \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines @@ -4632,103 +4892,99 @@ width0pt\relax} \fi \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing - \let\exdent=\nofillexdent - \let\nonarrowing=\relax \fi + \let\exdent=\nofillexdent } -% Define the \E... control sequence only if we are inside the particular -% environment, so the error checking in \end will work. +% If you want all examples etc. small: @set dispenvsize small. +% If you want even small examples the full size: @set dispenvsize nosmall. +% This affects the following displayed environments: +% @example, @display, @format, @lisp % -% To end an @example-like environment, we first end the paragraph (via -% \afterenvbreak's vertical glue), and then the group. That way we keep -% the zero \parskip that the environments set -- \parskip glue will be -% inserted at the beginning of the next paragraph in the document, after -% the environment. -% -\def\nonfillfinish{\afterenvbreak\endgroup} +\def\smallword{small} +\def\nosmallword{nosmall} +\let\SETdispenvsize\relax +\def\setnormaldispenv{% + \ifx\SETdispenvsize\smallword + \smallexamplefonts \rm + \fi +} +\def\setsmalldispenv{% + \ifx\SETdispenvsize\nosmallword + \else + \smallexamplefonts \rm + \fi +} -% @lisp: indented, narrowed, typewriter font. -\def\lisp{\begingroup - \nonfillstart - \let\Elisp = \nonfillfinish - \tt - \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. - \gobble % eat return +% We often define two environments, @foo and @smallfoo. +% Let's do it by one command: +\def\makedispenv #1#2{ + \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} + \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} + \expandafter\let\csname E#1\endcsname \afterenvbreak + \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } -% @example: Same as @lisp. -\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} +% Define two synonyms: +\def\maketwodispenvs #1#2#3{ + \makedispenv{#1}{#3} + \makedispenv{#2}{#3} +} +% @lisp: indented, narrowed, typewriter font; @example: same as @lisp. +% % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. -\def\smalllisp{\begingroup - \def\Esmalllisp{\nonfillfinish\endgroup}% - \def\Esmallexample{\nonfillfinish\endgroup}% - \smallexamplefonts - \lisp +% +\maketwodispenvs {lisp}{example}{% + \nonfillstart + \tt + \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. + \gobble % eat return } -\let\smallexample = \smalllisp - -% @display: same as @lisp except keep current font. +% @display/@smalldisplay: same as @lisp except keep current font. % -\def\display{\begingroup +\makedispenv {display}{% \nonfillstart - \let\Edisplay = \nonfillfinish \gobble } -% -% @smalldisplay: @display plus smaller fonts. -% -\def\smalldisplay{\begingroup - \def\Esmalldisplay{\nonfillfinish\endgroup}% - \smallexamplefonts \rm - \display -} -% @format: same as @display except don't narrow margins. +% @format/@smallformat: same as @display except don't narrow margins. % -\def\format{\begingroup - \let\nonarrowing = t +\makedispenv{format}{% + \let\nonarrowing = t% \nonfillstart - \let\Eformat = \nonfillfinish \gobble } -% -% @smallformat: @format plus smaller fonts. -% -\def\smallformat{\begingroup - \def\Esmallformat{\nonfillfinish\endgroup}% - \smallexamplefonts \rm - \format -} -% @flushleft (same as @format). -% -\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format} +% @flushleft: same as @format, but doesn't obey \SETdispenvsize. +\envdef\flushleft{% + \let\nonarrowing = t% + \nonfillstart + \gobble +} +\let\Eflushleft = \afterenvbreak % @flushright. % -\def\flushright{\begingroup - \let\nonarrowing = t +\envdef\flushright{% + \let\nonarrowing = t% \nonfillstart - \let\Eflushright = \nonfillfinish \advance\leftskip by 0pt plus 1fill \gobble } +\let\Eflushright = \afterenvbreak % @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. +% and narrows the margins. We keep \parskip nonzero in general, since +% we're doing normal filling. So, when using \aboveenvbreak and +% \afterenvbreak, temporarily make \parskip 0. % -\def\quotation{% - \begingroup\inENV %This group ends at the end of the @quotation body +\envdef\quotation{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt - % We have retained a nonzero parskip for the environment, since we're - % doing normal filling. So to avoid extra space below the environment... - \def\Equotation{\parskip = 0pt \nonfillfinish}% % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax @@ -4737,6 +4993,27 @@ width0pt\relax} \fi \exdentamount = \lispnarrowing \let\nonarrowing = \relax \fi + \parsearg\quotationlabel +} + +% We have retained a nonzero parskip for the environment, since we're +% doing normal filling. +% +\def\Equotation{% + \par + \ifx\quotationauthor\undefined\else + % indent a bit. + \leftline{\kern 2\leftskip \sl ---\quotationauthor}% + \fi + {\parskip=0pt \afterenvbreak}% +} + +% If we're given an argument, typeset it in bold with a colon after. +\def\quotationlabel#1{% + \def\temp{#1}% + \ifx\temp\empty \else + {\bf #1: }% + \fi } @@ -4758,7 +5035,7 @@ width0pt\relax} \fi % % [Knuth] p. 380 \def\uncatcodespecials{% - \def\do##1{\catcode`##1=12}\dospecials} + \def\do##1{\catcode`##1=\other}\dospecials} % % [Knuth] pp. 380,381,391 % Disable Spanish ligatures ?` and !` of \tt font @@ -4806,6 +5083,8 @@ width0pt\relax} \fi } \endgroup \def\setupverbatim{% + \nonfillstart + \advance\leftskip by -\defbodyindent % Easiest (and conventionally used) font for verbatim \tt \def\par{\leavevmode\egroup\box0\endgraf}% @@ -4827,7 +5106,7 @@ width0pt\relax} \fi % % [Knuth] p. 382; only eat outer {} \begingroup - \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12 + \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % @@ -4844,13 +5123,6 @@ width0pt\relax} \fi % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] -%% Include LaTeX hack for completeness -- never know -%% \begingroup -%% \catcode`|=0 \catcode`[=1 -%% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active -%% \catcode`\\=12|gdef|doverbatim#1@end verbatim[ -%% #1|endgroup|def|Everbatim[]|end[verbatim]] -%% |endgroup % \begingroup \catcode`\ =\active @@ -4858,54 +5130,32 @@ width0pt\relax} \fi % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. - \gdef\doverbatim#1^^M#2@end verbatim{#2\end{verbatim}}% + \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% + % We really want {...\end verbatim} in the body of the macro, but + % without the active space; thus we have to use \xdef and \gobble. \endgroup % -\def\verbatim{% - \def\Everbatim{\nonfillfinish\endgroup}% - \begingroup - \nonfillstart - \advance\leftskip by -\defbodyindent - \begingroup\setupverbatim\doverbatim +\envdef\verbatim{% + \setupverbatim\doverbatim } +\let\Everbatim = \afterenvbreak + % @verbatiminclude FILE - insert text of file in verbatim environment. % -% Allow normal characters that we make active in the argument (a file name). -\def\verbatiminclude{% - \begingroup - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \parsearg\doverbatiminclude -} -\def\setupverbatiminclude{% - \begingroup - \nonfillstart - \advance\leftskip by -\defbodyindent - \begingroup\setupverbatim -} +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% - % Restore active chars for included file. - \endgroup - \begingroup - \let\value=\expandablevalue - \def\thisfile{#1}% - \expandafter\expandafter\setupverbatiminclude\input\thisfile - \endgroup - \nonfillfinish - \endgroup + {% + \makevalueexpandable + \setupverbatim + \input #1 + \afterenvbreak + }% } % @copying ... @end copying. -% Save the text away for @insertcopying later. Many commands won't be -% allowed in this context, but that's ok. +% Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the @@ -4914,641 +5164,349 @@ width0pt\relax} \fi % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % -\def\copying{\begingroup - % Define a command to swallow text until we reach `@end copying'. - % \ is the escape char in this texinfo.tex file, so it is the - % delimiter for the command; @ will be the escape char when we read - % it, but that doesn't matter. - \long\def\docopying##1\end copying{\gdef\copyingtext{##1}\enddocopying}% - % - % We must preserve ^^M's in the input file; see \insertcopying below. - \catcode`\^^M = \active - \docopying -} - -% What we do to finish off the copying text. -% -\def\enddocopying{\endgroup\ignorespaces} - -% @insertcopying. Here we must play games with ^^M's. On the one hand, -% we need them to delimit commands such as `@end quotation', so they -% must be active. On the other hand, we certainly don't want every -% end-of-line to be a \par, as would happen with the normal active -% definition of ^^M. On the third hand, two ^^M's in a row should still -% generate a \par. -% -% Our approach is to make ^^M insert a space and a penalty1 normally; -% then it can also check if \lastpenalty=1. If it does, then manually -% do \par. -% -% This messes up the normal definitions of @c[omment], so we redefine -% it. Similarly for @ignore. (These commands are used in the gcc -% manual for man page generation.) -% -% Seems pretty fragile, most line-oriented commands will presumably -% fail, but for the limited use of getting the copying text (which -% should be quite simple) inserted, we can hope it's ok. -% -{\catcode`\^^M=\active % -\gdef\insertcopying{\begingroup % - \parindent = 0pt % looks wrong on title page - \def^^M{% - \ifnum \lastpenalty=1 % - \par % - \else % - \space \penalty 1 % - \fi % - }% - % - % Fix @c[omment] for catcode 13 ^^M's. - \def\c##1^^M{\ignorespaces}% - \let\comment = \c % - % - % Don't bother jumping through all the hoops that \doignore does, it - % would be very hard since the catcodes are already set. - \long\def\ignore##1\end ignore{\ignorespaces}% - % - \copyingtext % -\endgroup}% +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying} +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} +% +\def\insertcopying{% + \begingroup + \parindent = 0pt % paragraph indentation looks wrong on title page + \scanexp\copyingtext + \endgroup } \message{defuns,} % @defun etc. -% Allow user to change definition object font (\df) internally -\def\setdeffont#1 {\csname DEF#1\endcsname} - \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt -\newcount\parencount - -% We want ()&[] to print specially on the defun line. -% -\def\activeparens{% - \catcode`\(=\active \catcode`\)=\active - \catcode`\&=\active - \catcode`\[=\active \catcode`\]=\active -} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -{\activeparens % Now, smart parens don't turn on until &foo (see \amprm) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -\global\let(=\lparen \global\let)=\rparen -\global\let[=\lbrack \global\let]=\rbrack - -\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 } -\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} -% This is used to turn on special parens -% but make & act ordinary (given that it's active). -\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr} - -% Definitions of (, ) and & used in args for functions. -% This is the definition of ( outside of all parentheses. -\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested - \global\advance\parencount by 1 -} -% -% This is the definition of ( when already inside a level of parens. -\gdef\opnested{\char`\(\global\advance\parencount by 1 } -% -\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. - % also in that case restore the outer-level definition of (. - \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi - \global\advance \parencount by -1 } -% If we encounter &foo, then turn on ()-hacking afterwards -\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } -% -\gdef\normalparens{\boldbrax\let&=\ampnr} -} % End of definition inside \activeparens -%% These parens (in \boldbrax) actually are a little bolder than the -%% contained text. This is especially needed for [ and ] -\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } -\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } -\let\ampnr = \& -\def\lbrb{{\bf\char`\[}} -\def\rbrb{{\bf\char`\]}} - -% Active &'s sneak into the index arguments, so make sure it's defined. -{ - \catcode`& = \active - \global\let& = \ampnr -} - -% \defname, which formats the name of the @def (not the args). -% #1 is the function name. -% #2 is the type of definition, such as "Function". -% -\def\defname#1#2{% - % How we'll output the type name. Putting it in brackets helps - % distinguish it from the body text that may end up on the next line - % just below it. - \ifempty{#2}% - \def\defnametype{}% +% Start the processing of @deffn: +\def\startdefun{% + \ifnum\lastpenalty<10000 + \medbreak \else - \def\defnametype{[\rm #2]}% + % If there are two @def commands in a row, we'll have a \nobreak, + % which is there to keep the function description together with its + % header. But if there's nothing but headers, we need to allow a + % break somewhere. Check specifically for penalty 10002, inserted + % by \defargscommonending, instead of 10000, since the sectioning + % commands also insert a nobreak penalty, and we don't want to allow + % a break between a section heading and a defun. + % + \ifnum\lastpenalty=10002 \penalty2000 \fi + % + % Similarly, after a section heading, do not allow a break. + % But do insert the glue. + \medskip % preceded by discardable penalty, so not a breakpoint \fi % - % Get the values of \leftskip and \rightskip as they were outside the @def... - \dimen2=\leftskip - \advance\dimen2 by -\defbodyindent - % - % Figure out values for the paragraph shape. - \setbox0=\hbox{\hskip \deflastargmargin{\defnametype}}% - \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line - \dimen1=\hsize \advance \dimen1 by -\defargsindent % size for continuations - \parshape 2 0in \dimen0 \defargsindent \dimen1 - % - % Output arg 2 ("Function" or some such) but stuck inside a box of - % width 0 so it does not interfere with linebreaking. - \noindent - % - {% Adjust \hsize to exclude the ambient margins, - % so that \rightline will obey them. - \advance \hsize by -\dimen2 - \dimen3 = 0pt % was -1.25pc - \rlap{\rightline{\defnametype\kern\dimen3}}% - }% - % - % Allow all lines to be underfull without complaint: - \tolerance=10000 \hbadness=10000 - \advance\leftskip by -\defbodyindent - \exdentamount=\defbodyindent - {\df #1}\enskip % output function name - % \defunargs will be called next to output the arguments, if any. -} - -% Common pieces to start any @def... -% #1 is the \E... control sequence to end the definition (which we define). -% #2 is the \...x control sequence (which our caller defines). -% #3 is the control sequence to process the header, such as \defunheader. -% -\def\parsebodycommon#1#2#3{% - \begingroup\inENV - % If there are two @def commands in a row, we'll have a \nobreak, - % which is there to keep the function description together with its - % header. But if there's nothing but headers, we want to allow a - % break after all. Check for penalty 10002 (inserted by - % \defargscommonending) instead of 10000, since the sectioning - % commands insert a \penalty10000, and we don't want to allow a break - % between a section heading and a defun. - \ifnum\lastpenalty=10002 \penalty0 \fi - \medbreak - % - % Define the \E... end token that this defining construct specifies - % so that it will exit this group. - \def#1{\endgraf\endgroup\medbreak}% - % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } -% Common part of the \...x definitions. -% -\def\defxbodycommon{% - % As with \parsebodycommon above, allow line break if we have multiple - % x headers in a row. It's not a great place, though. - \ifnum\lastpenalty=10000 \penalty1000 \fi +\def\dodefunx#1{% + % First, check whether we are in the right environment: + \checkenv#1% % - \begingroup\obeylines + % As above, allow line break if we have multiple x headers in a row. + % It's not a great place, though. + \ifnum\lastpenalty=10002 \penalty3000 \fi + % + % And now, it's time to reuse the body of the original defun: + \expandafter\gobbledefun#1% } +\def\gobbledefun#1\startdefun{} -% Process body of @defun, @deffn, @defmac, etc. +% \printdefunline \deffnheader{text} % -\def\defparsebody#1#2#3{% - \parsebodycommon{#1}{#2}{#3}% - \def#2{\defxbodycommon \activeparens \spacesplit#3}% - \catcode\equalChar=\active - \begingroup\obeylines\activeparens - \spacesplit#3% +\def\printdefunline#1#2{% + \begingroup + % call \deffnheader: + #1#2 \endheader + % common ending: + \interlinepenalty = 10000 + \advance\rightskip by 0pt plus 1fil + \endgraf + \nobreak\vskip -\parskip + \penalty 10002 % signal to \startdefun and \dodefunx + % Some of the @defun-type tags do not enable magic parentheses, + % rendering the following check redundant. But we don't optimize. + \checkparencounts + \endgroup } -% #1, #2, #3 are the common arguments (see \parsebodycommon above). -% #4, delimited by the space, is the class name. -% -\def\defmethparsebody#1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 {\defxbodycommon \activeparens \spacesplit{#3{##1}}}% - \begingroup\obeylines\activeparens - % The \empty here prevents misinterpretation of a construct such as - % @deffn {whatever} {Enharmonic comma} - % See comments at \deftpparsebody, although in our case we don't have - % to remove the \empty afterwards, since it is empty. - \spacesplit{#3{#4}}\empty -} +\def\Edefun{\endgraf\medbreak} -% Used for @deftypemethod and @deftypeivar. -% #1, #2, #3 are the common arguments (see \defparsebody). -% #4, delimited by a space, is the class name. -% #5 is the method's return type. +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; +% the only thing remainnig is to define \deffnheader. % -\def\deftypemethparsebody#1#2#3#4 #5 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 {\defxbodycommon \activeparens \spacesplit{#3{##1}{##2}}}% - \begingroup\obeylines\activeparens - \spacesplit{#3{#4}{#5}}% +\def\makedefun#1{% + \expandafter\let\csname E#1\endcsname = \Edefun + \edef\temp{\noexpand\domakedefun + \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% + \temp } -% Used for @deftypeop. The change from \deftypemethparsebody is an -% extra argument at the beginning which is the `category', instead of it -% being the hardwired string `Method' or `Instance Variable'. We have -% to account for this both in the \...x definition and in parsing the -% input at hand. Thus also need a control sequence (passed as #5) for -% the \E... definition to assign the category name to. +% \domakedefun \deffn \deffnx \deffnheader % -\def\deftypeopparsebody#1#2#3#4#5 #6 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 ##3 {\def#4{##1}% - \defxbodycommon \activeparens \spacesplit{#3{##2}{##3}}}% - \begingroup\obeylines\activeparens - \spacesplit{#3{#5}{#6}}% -} - -% For @defop. -\def\defopparsebody #1#2#3#4#5 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 {\def#4{##1}% - \defxbodycommon \activeparens \spacesplit{#3{##2}}}% - \begingroup\obeylines\activeparens - \spacesplit{#3{#5}}% -} - -% These parsing functions are similar to the preceding ones -% except that they do not make parens into active characters. -% These are used for "variables" since they have no arguments. +% Define \deffn and \deffnx, without parameters. +% \deffnheader has to be defined explicitly. % -\def\defvarparsebody #1#2#3{% - \parsebodycommon{#1}{#2}{#3}% - \def#2{\defxbodycommon \spacesplit#3}% - \catcode\equalChar=\active - \begingroup\obeylines - \spacesplit#3% +\def\domakedefun#1#2#3{% + \envdef#1{% + \startdefun + \parseargusing\activeparens{\printdefunline#3}% + }% + \def#2{\dodefunx#1}% + \def#3% } -% @defopvar. -\def\defopvarparsebody #1#2#3#4#5 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 {\def#4{##1}% - \defxbodycommon \spacesplit{#3{##2}}}% - \begingroup\obeylines - \spacesplit{#3{#5}}% -} +%%% Untyped functions: -\def\defvrparsebody#1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}% - \begingroup\obeylines - \spacesplit{#3{#4}}% -} +% @deffn category name args +\makedefun{deffn}{\deffngeneral{}} -% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the -% type is just `struct', because we lose the braces in `{struct -% termios}' when \spacesplit reads its undelimited argument. Sigh. -% \let\deftpparsebody=\defvrparsebody -% -% So, to get around this, we put \empty in with the type name. That -% way, TeX won't find exactly `{...}' as an undelimited argument, and -% won't strip off the braces. -% -\def\deftpparsebody #1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}% - \begingroup\obeylines - \spacesplit{\parsetpheaderline{#3{#4}}}\empty -} - -% Fine, but then we have to eventually remove the \empty *and* the -% braces (if any). That's what this does. -% -\def\removeemptybraces\empty#1\relax{#1} +% @deffn category class name args +\makedefun{defop}#1 {\defopon{#1\ \putwordon}} -% After \spacesplit has done its work, this is called -- #1 is the final -% thing to call, #2 the type name (which starts with \empty), and #3 -% (which might be empty) the arguments. -% -\def\parsetpheaderline#1#2#3{% - #1{\removeemptybraces#2\relax}{#3}% -}% +% \defopon {category on}class name args +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } -% Split up #2 (the rest of the input line) at the first space token. -% call #1 with two arguments: -% the first is all of #2 before the space token, -% the second is all of #2 after that space token. -% If #2 contains no space token, all of it is passed as the first arg -% and the second is passed as empty. +% \deffngeneral {subind}category name args % -{\obeylines % - \gdef\spacesplit#1#2^^M{\endgroup\spacesplitx{#1}#2 \relax\spacesplitx}% - \long\gdef\spacesplitx#1#2 #3#4\spacesplitx{% - \ifx\relax #3% - #1{#2}{}% - \else % - #1{#2}{#3#4}% - \fi}% +\def\deffngeneral#1#2 #3 #4\endheader{% + % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. + \dosubind{fn}{\code{#3}}{#1}% + \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } -% Define @defun. +%%% Typed functions: -% This is called to end the arguments processing for all the @def... commands. -% -\def\defargscommonending{% - \interlinepenalty = 10000 - \advance\rightskip by 0pt plus 1fil - \endgraf - \nobreak\vskip -\parskip - \penalty 10002 % signal to \parsebodycommon. -} +% @deftypefn category type name args +\makedefun{deftypefn}{\deftypefngeneral{}} -% This expands the args and terminates the paragraph they comprise. -% -\def\defunargs#1{\functionparens \sl -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -% Set the font temporarily and use \font in case \setfont made \tensl a macro. -{\tensl\hyphenchar\font=0}% -#1% -{\tensl\hyphenchar\font=45}% -\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% - \defargscommonending -} - -\def\deftypefunargs #1{% -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -% Use \boldbraxnoamp, not \functionparens, so that & is not special. -\boldbraxnoamp -\tclose{#1}% avoid \code because of side effects on active chars - \defargscommonending -} - -% Do complete processing of one @defun or @defunx line already parsed. - -% @deffn Command forward-char nchars +% @deftypeop category class type name args +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} -\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader} +% \deftypeopon {category on}class type name args +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } -\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}% -\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody +% \deftypefngeneral {subind}category type name args +% +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{% + \dosubind{fn}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } -% @defun == @deffn Function - -\def\defun{\defparsebody\Edefun\defunx\defunheader} +%%% Typed variables: -\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDeffunc}% -\defunargs {#2}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} +% @deftypevr category type var args +\makedefun{deftypevr}{\deftypecvgeneral{}} -% @deftypefun int foobar (int @var{foo}, float @var{bar}) +% @deftypecv category class type var args +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} -\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader} +% \deftypecvof {category of}class type var args +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } -% #1 is the data type. #2 is the name and args. -\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax} -% #1 is the data type, #2 the name, #3 the args. -\def\deftypefunheaderx #1#2 #3\relax{% -\doind {fn}{\code{#2}}% Make entry in function index -\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}% -\deftypefunargs {#3}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody +% \deftypecvgeneral {subind}category type var args +% +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% + \dosubind{vr}{\code{#4}}{#1}% + \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } -% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) +%%% Untyped variables: -\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} +% @defvr category var args +\makedefun{defvr}#1 {\deftypevrheader{#1} {} } -% \defheaderxcond#1\relax$.$ -% puts #1 in @code, followed by a space, but does nothing if #1 is null. -\def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi} +% @defcv category class var args +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} -% #1 is the classification. #2 is the data type. #3 is the name and args. -\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} -% #1 is the classification, #2 the data type, #3 the name, #4 the args. -\def\deftypefnheaderx #1#2#3 #4\relax{% -\doind {fn}{\code{#3}}% Make entry in function index -\begingroup -\normalparens % notably, turn off `&' magic, which prevents -% at least some C++ text from working -\defname {\defheaderxcond#2\relax$.$#3}{#1}% -\deftypefunargs {#4}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @defmac == @deffn Macro - -\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} +% \defcvof {category of}class var args +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} } -\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDefmac}% -\defunargs {#2}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody +%%% Type: +% @deftp category name args +\makedefun{deftp}#1 #2 #3\endheader{% + \doind{tp}{\code{#2}}% + \defname{#1}{}{#2}\defunargs{#3\unskip}% } -% @defspec == @deffn Special Form +% Remaining @defun-like shortcuts: +\makedefun{defun}{\deffnheader{\putwordDeffunc} } +\makedefun{defmac}{\deffnheader{\putwordDefmac} } +\makedefun{defspec}{\deffnheader{\putwordDefspec} } +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } +\makedefun{defvar}{\defvrheader{\putwordDefvar} } +\makedefun{defopt}{\defvrheader{\putwordDefopt} } +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } +\makedefun{defmethod}{\defopon\putwordMethodon} +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon} +\makedefun{defivar}{\defcvof\putwordInstanceVariableof} +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} -\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} - -\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDefspec}% -\defunargs {#2}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @defop CATEGORY CLASS OPERATION ARG... +% \defname, which formats the name of the @def (not the args). +% #1 is the category, such as "Function". +% #2 is the return type, if any. +% #3 is the function name. % -\def\defop #1 {\def\defoptype{#1}% -\defopparsebody\Edefop\defopx\defopheader\defoptype} +% We are followed by (but not passed) the arguments, if any. % -\def\defopheader#1#2#3{% - \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% function index entry - \begingroup - \defname{#2}{\defoptype\ \putwordon\ #1}% - \defunargs{#3}% - \endgroup +\def\defname#1#2#3{% + % Get the values of \leftskip and \rightskip as they were outside the @def... + \advance\leftskip by -\defbodyindent + % + % How we'll format the type name. Putting it in brackets helps + % distinguish it from the body text that may end up on the next line + % just below it. + \def\temp{#1}% + \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} + % + % Figure out line sizes for the paragraph shape. + % The first line needs space for \box0; but if \rightskip is nonzero, + % we need only space for the part of \box0 which exceeds it: + \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip + % The continuations: + \dimen2=\hsize \advance\dimen2 by -\defargsindent + % (plain.tex says that \dimen1 should be used only as global.) + \parshape 2 0in \dimen0 \defargsindent \dimen2 + % + % Put the type name to the right margin. + \noindent + \hbox to 0pt{% + \hfil\box0 \kern-\hsize + % \hsize has to be shortened this way: + \kern\leftskip + % Intentionally do not respect \rightskip, since we need the space. + }% + % + % Allow all lines to be underfull without complaint: + \tolerance=10000 \hbadness=10000 + \exdentamount=\defbodyindent + {% + % defun fonts. We use typewriter by default (used to be bold) because: + % . we're printing identifiers, they should be in tt in principle. + % . in languages with many accents, such as Czech or French, it's + % common to leave accents off identifiers. The result looks ok in + % tt, but exceedingly strange in rm. + % . we don't want -- and --- to be treated as ligatures. + % . this still does not fix the ?` and !` ligatures, but so far no + % one has made identifiers using them :). + \df \tt + \def\temp{#2}% return value type + \ifx\temp\empty\else \tclose{\temp} \fi + #3% output function name + }% + {\rm\enskip}% hskip 0.5 em of \tenrm + % + \boldbrax + % arguments will be output next, if any. } -% @deftypeop CATEGORY CLASS TYPE OPERATION ARG... +% Print arguments in slanted roman (not ttsl), inconsistently with using +% tt for the name. This is because literal text is sometimes needed in +% the argument list (groff manual), and ttsl and tt are not very +% distinguishable. Prevent hyphenation at `-' chars. % -\def\deftypeop #1 {\def\deftypeopcategory{#1}% - \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader - \deftypeopcategory} -% -% #1 is the class name, #2 the data type, #3 the operation name, #4 the args. -\def\deftypeopheader#1#2#3#4{% - \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{\defheaderxcond#2\relax$.$#3} - {\deftypeopcategory\ \putwordon\ \code{#1}}% - \deftypefunargs{#4}% - \endgroup +\def\defunargs#1{% + % use sl by default (not ttsl), + % tt for the names. + \df \sl \hyphenchar\font=0 + % + % On the other hand, if an argument has two dashes (for instance), we + % want a way to get ttsl. Let's try @var for that. + \let\var=\ttslanted + #1% + \sl\hyphenchar\font=45 } -% @deftypemethod CLASS TYPE METHOD ARG... -% -\def\deftypemethod{% - \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} +% We want ()&[] to print specially on the defun line. % -% #1 is the class name, #2 the data type, #3 the method name, #4 the args. -\def\deftypemethodheader#1#2#3#4{% - \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}% - \deftypefunargs{#4}% - \endgroup +\def\activeparens{% + \catcode`\(=\active \catcode`\)=\active + \catcode`\[=\active \catcode`\]=\active + \catcode`\&=\active } -% @deftypeivar CLASS TYPE VARNAME -% -\def\deftypeivar{% - \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader} -% -% #1 is the class name, #2 the data type, #3 the variable name. -\def\deftypeivarheader#1#2#3{% - \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index - \begingroup - \defname{\defheaderxcond#2\relax$.$#3} - {\putwordInstanceVariableof\ \code{#1}}% - \defvarargs{#3}% - \endgroup -} +% Make control sequences which act like normal parenthesis chars. +\let\lparen = ( \let\rparen = ) -% @defmethod == @defop Method -% -\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} -% -% #1 is the class name, #2 the method name, #3 the args. -\def\defmethodheader#1#2#3{% - \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{#2}{\putwordMethodon\ \code{#1}}% - \defunargs{#3}% - \endgroup -} +% Be sure that we always have a definition for `(', etc. For example, +% if the fn name has parens in it, \boldbrax will not be in effect yet, +% so TeX would otherwise complain about undefined control sequence. +{ + \activeparens + \global\let(=\lparen \global\let)=\rparen + \global\let[=\lbrack \global\let]=\rbrack + \global\let& = \& -% @defcv {Class Option} foo-class foo-flag + \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} + \gdef\magicamp{\let&=\amprm} +} -\def\defcv #1 {\def\defcvtype{#1}% -\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} +\newcount\parencount -\def\defcvarheader #1#2#3{% - \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% variable index entry - \begingroup - \defname{#2}{\defcvtype\ \putwordof\ #1}% - \defvarargs{#3}% - \endgroup +% If we encounter &foo, then turn on ()-hacking afterwards +\newif\ifampseen +\def\amprm#1 {\ampseentrue{\bf\ }} + +\def\parenfont{% + \ifampseen + % At the first level, print parens in roman, + % otherwise use the default font. + \ifnum \parencount=1 \rm \fi + \else + % The \sf parens (in \boldbrax) actually are a little bolder than + % the contained text. This is especially needed for [ and ] . + \sf + \fi } - -% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME -% -\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} -% -\def\defivarheader#1#2#3{% - \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% entry in var index - \begingroup - \defname{#2}{\putwordInstanceVariableof\ #1}% - \defvarargs{#3}% - \endgroup +\def\infirstlevel#1{% + \ifampseen + \ifnum\parencount=1 + #1% + \fi + \fi } +\def\bfafterword#1 {#1 \bf} -% @defvar -% First, define the processing that is wanted for arguments of @defvar. -% This is actually simple: just print them in roman. -% This must expand the args and terminate the paragraph they make up -\def\defvarargs #1{\normalparens #1% - \defargscommonending +\def\opnr{% + \global\advance\parencount by 1 + {\parenfont(}% + \infirstlevel \bfafterword } - -% @defvr Counter foo-count - -\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader} - -\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}% -\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup} - -% @defvar == @defvr Variable - -\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} - -\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{\putwordDefvar}% -\defvarargs {#2}\endgroup % +\def\clnr{% + {\parenfont)}% + \infirstlevel \sl + \global\advance\parencount by -1 } -% @defopt == @defvr {User Option} - -\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} - -\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{\putwordDefopt}% -\defvarargs {#2}\endgroup % +\newcount\brackcount +\def\lbrb{% + \global\advance\brackcount by 1 + {\bf[}% +} +\def\rbrb{% + {\bf]}% + \global\advance\brackcount by -1 } -% @deftypevar int foobar - -\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} - -% #1 is the data type. #2 is the name, perhaps followed by text that -% is actually part of the data type, which should not be put into the index. -\def\deftypevarheader #1#2{% -\dovarind#2 \relax% Make entry in variables index -\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}% - \defargscommonending -\endgroup} -\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} - -% @deftypevr {Global Flag} int enable - -\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} - -\def\deftypevrheader #1#2#3{\dovarind#3 \relax% -\begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1} - \defargscommonending -\endgroup} - -% Now define @deftp -% Args are printed in bold, a slight difference from @defvar. - -\def\deftpargs #1{\bf \defvarargs{#1}} - -% @deftp Class window height width ... - -\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader} - -\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% -\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} - -% These definitions are used if you use @defunx (etc.) -% anywhere other than immediately after a @defun or @defunx. -% -\def\defcvx#1 {\errmessage{@defcvx in invalid context}} -\def\deffnx#1 {\errmessage{@deffnx in invalid context}} -\def\defivarx#1 {\errmessage{@defivarx in invalid context}} -\def\defmacx#1 {\errmessage{@defmacx in invalid context}} -\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}} -\def\defoptx #1 {\errmessage{@defoptx in invalid context}} -\def\defopx#1 {\errmessage{@defopx in invalid context}} -\def\defspecx#1 {\errmessage{@defspecx in invalid context}} -\def\deftpx#1 {\errmessage{@deftpx in invalid context}} -\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}} -\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}} -\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}} -\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}} -\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}} -\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}} -\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}} -\def\defunx#1 {\errmessage{@defunx in invalid context}} -\def\defvarx#1 {\errmessage{@defvarx in invalid context}} -\def\defvrx#1 {\errmessage{@defvrx in invalid context}} +\def\checkparencounts{% + \ifnum\parencount=0 \else \badparencount \fi + \ifnum\brackcount=0 \else \badbrackcount \fi +} +\def\badparencount{% + \errmessage{Unbalanced parentheses in @def}% + \global\parencount=0 +} +\def\badbrackcount{% + \errmessage{Unbalanced square braces in @def}% + \global\brackcount=0 +} \message{macros,} @@ -5557,28 +5515,42 @@ width0pt\relax} \fi % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\undefined - \newwrite\macscribble - \def\scanmacro#1{% - \begingroup \newlinechar`\^^M - % Undo catcode changes of \startcontents and \doprintindex - \catcode`\@=0 \catcode`\\=\other \escapechar=`\@ - % Append \endinput to make sure that TeX does not see the ending newline. - \toks0={#1\endinput}% - \immediate\openout\macscribble=\jobname.tmp - \immediate\write\macscribble{\the\toks0}% - \immediate\closeout\macscribble - \let\xeatspaces\eatspaces - \input \jobname.tmp - \endgroup -} -\else -\def\scanmacro#1{% -\begingroup \newlinechar`\^^M -% Undo catcode changes of \startcontents and \doprintindex -\catcode`\@=0 \catcode`\\=\other \escapechar=`\@ -\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup} + \newwrite\macscribble + \def\scantokens#1{% + \toks0={#1}% + \immediate\openout\macscribble=\jobname.tmp + \immediate\write\macscribble{\the\toks0}% + \immediate\closeout\macscribble + \input \jobname.tmp + } \fi +\def\scanmacro#1{% + \begingroup + \newlinechar`\^^M + \let\xeatspaces\eatspaces + % Undo catcode changes of \startcontents and \doprintindex + % When called from @insertcopying or (short)caption, we need active + % backslash to get it printed correctly. Previously, we had + % \catcode`\\=\other instead. We'll see whether a problem appears + % with macro expansion. --kasal, 19aug04 + \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ + % ... and \example + \spaceisspace + % + % Append \endinput to make sure that TeX does not see the ending newline. + % + % I've verified that it is necessary both for e-TeX and for ordinary TeX + % --kasal, 29nov03 + \scantokens{#1\endinput}% + \endgroup +} + +\def\scanexp#1{% + \edef\temp{\noexpand\scanmacro{#1}}% + \temp +} + \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? @@ -5586,13 +5558,15 @@ width0pt\relax} \fi % \do\macro1\do\macro2... % Utility routines. -% Thisdoes \let #1 = #2, except with \csnames. +% This does \let #1 = #2, with \csnames; that is, +% \let \csname#1\endcsname = \csname#2\endcsname +% (except of course we have to play expansion games). +% \def\cslet#1#2{% -\expandafter\expandafter -\expandafter\let -\expandafter\expandafter -\csname#1\endcsname -\csname#2\endcsname} + \expandafter\let + \csname#1\expandafter\endcsname + \csname#2\endcsname +} % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). @@ -5619,30 +5593,36 @@ width0pt\relax} \fi % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. -\def\macrobodyctxt{% - \catcode`\~=\other +\def\scanctxt{% + \catcode`\"=\other + \catcode`\+=\other + \catcode`\<=\other + \catcode`\>=\other + \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\+=\other + \catcode`\~=\other +} + +\def\scanargctxt{% + \scanctxt + \catcode`\\=\other + \catcode`\^^M=\other +} + +\def\macrobodyctxt{% + \scanctxt \catcode`\{=\other \catcode`\}=\other - \catcode`\@=\other \catcode`\^^M=\other - \usembodybackslash} + \usembodybackslash +} \def\macroargctxt{% - \catcode`\~=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\+=\other - \catcode`\@=\other - \catcode`\\=\other} + \scanctxt + \catcode`\\=\other +} % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N @@ -5683,8 +5663,7 @@ width0pt\relax} \fi \else \expandafter\parsemacbody \fi} -\def\unmacro{\parsearg\dounmacro} -\def\dounmacro#1{% +\parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% @@ -5825,25 +5804,41 @@ width0pt\relax} \fi \expandafter\parsearg \fi \next} -% We mant to disable all macros during \shipout so that they are not +% We want to disable all macros during \shipout so that they are not % expanded by \write. \def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% \edef\next{\macrolist}\expandafter\endgroup\next} +% For \indexnofonts, we need to get rid of all macros, leaving only the +% arguments (if present). Of course this is not nearly correct, but it +% is the best we can do for now. makeinfo does not expand macros in the +% argument to @deffn, which ends up writing an index entry, and texindex +% isn't prepared for an index sort entry that starts with \. +% +% Since macro invocations are followed by braces, we can just redefine them +% to take a single TeX argument. The case of a macro invocation that +% goes to end-of-line is not handled. +% +\def\emptyusermacros{\begingroup + \def\do##1{\let\noexpand##1=\noexpand\asis}% + \edef\next{\macrolist}\expandafter\endgroup\next} + % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Just make them active and then expand them all to nothing. -\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx} +\def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} -\def\aliasyyy #1=#2\relax{\ignoreactivespaces -\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=% - \expandafter\noexpand\csname#2\endcsname}% -\expandafter\endgroup\next} +\def\aliasyyy #1=#2\relax{% + {% + \expandafter\let\obeyedspace=\empty + \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% + }% + \next +} \message{cross references,} -% @xref etc. \newwrite\auxfile @@ -5855,64 +5850,70 @@ width0pt\relax} \fi \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} -% @node's job is to define \lastnode. -\def\node{\ENVcheck\parsearg\nodezzz} -\def\nodezzz#1{\nodexxx #1,\finishnodeparse} -\def\nodexxx#1,#2\finishnodeparse{\gdef\lastnode{#1}} +% @node's only job in TeX is to define \lastnode, which is used in +% cross-references. The @node line might or might not have commas, and +% might or might not have spaces before the first comma, like: +% @node foo , bar , ... +% We don't want such trailing spaces in the node name. +% +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} +% +% also remove a trailing comma, in case of something like this: +% @node Help-Cross, , , Cross-refs +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} + \let\nwnode=\node -\let\lastnode=\relax - -% The sectioning commands (@chapter, etc.) call these. -\def\donoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}% - {Ysectionnumberandtype}% - \global\let\lastnode=\relax - \fi -} -\def\unnumbnoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}% - \global\let\lastnode=\relax - \fi -} -\def\appendixnoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}% - {Yappendixletterandtype}% - \global\let\lastnode=\relax +\let\lastnode=\empty + +% Write a cross-reference definition for the current node. #1 is the +% type (Ynumbered, Yappendix, Ynothing). +% +\def\donoderef#1{% + \ifx\lastnode\empty\else + \setref{\lastnode}{#1}% + \global\let\lastnode=\empty \fi } - % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister -\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} +% +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an -% anchor), namely NAME-title (the corresponding @chapter/etc. name), -% NAME-pg (the page number), and NAME-snt (section number and type). -% Called from \foonoderef. -% -% We have to set \indexdummies so commands such as @code in a section -% title aren't expanded. It would be nicer not to expand the titles in -% the first place, but there's so many layers that that is hard to do. -% -% Likewise, use \turnoffactive so that punctuation chars such as underscore -% and backslash work in node names. -% -\def\setref#1#2{{% - \atdummies +% anchor), which consists of three parts: +% 1) NAME-title - the current sectioning name taken from \thissection, +% or the anchor name. +% 2) NAME-snt - section number and type, passed as the SNT arg, or +% empty for anchors. +% 3) NAME-pg - the page number. +% +% This is called from \donoderef, \anchor, and \dofloat. In the case of +% floats, there is an additional part, which is not written here: +% 4) NAME-lof - the text as it should appear in a @listoffloats. +% +\def\setref#1#2{% \pdfmkdest{#1}% - % - \turnoffactive - \dosetq{#1-title}{Ytitle}% - \dosetq{#1-pg}{Ypagenumber}% - \dosetq{#1-snt}{#2}% -}} + \iflinks + {% + \atdummies % preserve commands, but don't expand them + \turnoffactive + \otherbackslash + \edef\writexrdef##1##2{% + \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef + ##1}{##2}}% these are parameters of \writexrdef + }% + \toks0 = \expandafter{\thissection}% + \immediate \writexrdef{title}{\the\toks0 }% + \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. + \writexrdef{pg}{\folio}% will be written later, during \shipout + }% + \fi +} % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed @@ -5925,38 +5926,33 @@ width0pt\relax} \fi \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% - \def\printednodename{\ignorespaces #3}% - \setbox1=\hbox{\printedmanual}% - \setbox0=\hbox{\printednodename}% + \def\printedrefname{\ignorespaces #3}% + \setbox1=\hbox{\printedmanual\unskip}% + \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. - \def\printednodename{\ignorespaces #1}% + \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. - \def\printednodename{\ignorespaces #1}% + \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. - \def\printednodename{\refx{#1-title}{}}% + \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. - \def\printednodename{\ignorespaces #1}% + \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % - % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not - % insert empty discretionaries after hyphens, which means that it will - % not find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, this - % is a loss. Therefore, we give the text of the node name again, so it - % is as if TeX is seeing it for the first time. + % Make link in pdf output. \ifpdf \leavevmode \getfilename{#4}% @@ -5966,64 +5962,86 @@ width0pt\relax} \fi goto file{\the\filename.pdf} name{#1}% \else \startlink attr{/Border [0 0 0]}% - goto name{#1}% + goto name{\pdfmkpgn{#1}}% \fi }% \linkcolor \fi % - \ifdim \wd1 > 0pt - \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}% - \else - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\turnoffactive \otherbackslash - % Only output a following space if the -snt ref is nonempty; for - % @unnumbered and @anchor, it won't be. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi - }% - % output the `[mynode]' via a macro. - \xrefprintnodename\printednodename + % Float references are printed completely differently: "Figure 1.2" + % instead of "[somenode], p.3". We distinguish them by the + % LABEL-title being set to a magic string. + {% + % Have to otherify everything special to allow the \csname to + % include an _ in the xref name, etc. + \indexnofonts + \turnoffactive + \otherbackslash + \expandafter\global\expandafter\let\expandafter\Xthisreftitle + \csname XR#1-title\endcsname + }% + \iffloat\Xthisreftitle + % If the user specified the print name (third arg) to the ref, + % print it instead of our usual "Figure 1.2". + \ifdim\wd0 = 0pt + \refx{#1-snt}% + \else + \printedrefname + \fi % - % But we always want a comma and a space: - ,\space + % if the user also gave the printed manual name (fifth arg), append + % "in MANUALNAME". + \ifdim \wd1 > 0pt + \space \putwordin{} \cite{\printedmanual}% + \fi + \else + % node/anchor (non-float) references. % - % output the `page 3'. - \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% + % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not + % insert empty discretionaries after hyphens, which means that it will + % not find a line break at a hyphen in a node names. Since some manuals + % are best written with fairly long node names, containing hyphens, this + % is a loss. Therefore, we give the text of the node name again, so it + % is as if TeX is seeing it for the first time. + \ifdim \wd1 > 0pt + \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% + \else + % _ (for example) has to be the character _ for the purposes of the + % control sequence corresponding to the node, but it has to expand + % into the usual \leavevmode...\vrule stuff for purposes of + % printing. So we \turnoffactive for the \refx-snt, back on for the + % printing, back off for the \refx-pg. + {\turnoffactive \otherbackslash + % Only output a following space if the -snt ref is nonempty; for + % @unnumbered and @anchor, it won't be. + \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% + \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi + }% + % output the `[mynode]' via a macro so it can be overridden. + \xrefprintnodename\printedrefname + % + % But we always want a comma and a space: + ,\space + % + % output the `page 3'. + \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% + \fi \fi \endlink \endgroup} % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, -% since not square brackets don't work in some documents. Particularly +% since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} -% \dosetq is called from \setref to do the actual \write (\iflinks). -% -\def\dosetq#1#2{% - {\let\folio=0% - \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% - \iflinks \next \fi - }% -} - -% \internalsetq{foo}{page} expands into -% CHARACTERS @xrdef{foo}{...expansion of \page...} -\def\internalsetq#1#2{@xrdef{#1}{\csname #2\endcsname}} - -% Things to be expanded by \internalsetq. +% Things referred to by \setref. % -\def\Ypagenumber{\folio} -\def\Ytitle{\thissection} \def\Ynothing{} -\def\Ysectionnumberandtype{% +\def\Yomitfromtoc{} +\def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 @@ -6034,8 +6052,7 @@ width0pt\relax} \fi \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } - -\def\Yappendixletterandtype{% +\def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 @@ -6048,15 +6065,6 @@ width0pt\relax} \fi \fi\fi\fi } -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Pre-3.0. -\else - \def\linenumber{\the\inputlineno:\space} -\fi - % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % @@ -6065,7 +6073,7 @@ width0pt\relax} \fi \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX - \csname X#1\endcsname + \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. @@ -6087,11 +6095,44 @@ width0pt\relax} \fi #2% Output the suffix in any case. } -% This is the macro invoked by entries in the aux file. +% This is the macro invoked by entries in the aux file. Usually it's +% just a \def (we prepend XR to the control sequence name to avoid +% collisions). But if this is a float type, we have more work to do. % -\def\xrdef#1{\expandafter\gdef\csname X#1\endcsname} +\def\xrdef#1#2{% + \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value. + % + % Was that xref control sequence that we just defined for a float? + \expandafter\iffloat\csname XR#1\endcsname + % it was a float, and we have the (safe) float type in \iffloattype. + \expandafter\let\expandafter\floatlist + \csname floatlist\iffloattype\endcsname + % + % Is this the first time we've seen this float type? + \expandafter\ifx\floatlist\relax + \toks0 = {\do}% yes, so just \do + \else + % had it before, so preserve previous elements in list. + \toks0 = \expandafter{\floatlist\do}% + \fi + % + % Remember this xref in the control sequence \floatlistFLOATTYPE, + % for later use in \listoffloats. + \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}% + \fi +} % Read the last existing aux file, if any. No error if none exists. +% +\def\tryauxfile{% + \openin 1 \jobname.aux + \ifeof 1 \else + \readauxfile + \global\havexrefstrue + \fi + \closein 1 +} + \def\readauxfile{\begingroup \catcode`\^^@=\other \catcode`\^^A=\other @@ -6150,7 +6191,16 @@ width0pt\relax} \fi \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % - % Make the characters 128-255 be printing characters + % This is to support \ in node names and titles, since the \ + % characters end up in a \csname. It's easier than + % leaving it active and making its active definition an actual \ + % character. What I don't understand is why it works in the *value* + % of the xrdef. Seems like it should be a catcode12 \, and that + % should not typeset properly. But it works, so I'm moving on for + % now. --karl, 15jan04. + \catcode`\\=\other + % + % Make the characters 128-255 be printing characters. {% \count 1=128 \def\loop{% @@ -6160,31 +6210,17 @@ width0pt\relax} \fi }% }% % - % Turn off \ as an escape so we do not lose on - % entries which were dumped with control sequences in their names. - % For example, @xrdef{$\leq $-fun}{page ...} made by @defun ^^ - % Reference to such entries still does not work the way one would wish, - % but at least they do not bomb out when the aux file is read in. - \catcode`\\=\other - % - % @ is our escape character in .aux files. + % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 % - \openin 1 \jobname.aux - \ifeof 1 \else - \closein 1 - \input \jobname.aux - \global\havexrefstrue - \global\warnedobstrue - \fi - % Open the new aux file. TeX will close it automatically at exit. - \openout\auxfile=\jobname.aux + \input \jobname.aux \endgroup} -% Footnotes. +\message{insertions,} +% including footnotes. \newcount \footnoteno @@ -6198,13 +6234,12 @@ width0pt\relax} \fi % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment -\let\ptexfootnote=\footnote - {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent + \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % @@ -6222,17 +6257,12 @@ width0pt\relax} \fi % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % -% Oh yes, they do; otherwise, @ifset and anything else that uses -% \parseargline fail inside footnotes because the tokens are fixed when +% Oh yes, they do; otherwise, @ifset (and anything else that uses +% \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % -% The start of the footnote looks usually like this: -\gdef\startfootins{\insert\footins\bgroup} -% -% ... but this macro is redefined inside @multitable. -% \gdef\dofootnote{% - \startfootins + \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. @@ -6268,40 +6298,66 @@ width0pt\relax} \fi } }%end \catcode `\@=11 -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). +% In case a @footnote appears in a vbox, save the footnote text and create +% the real \insert just after the vbox finished. Otherwise, the insertion +% would be lost. +% Similarily, if a @footnote appears inside an alignment, save the footnote +% text to a box and make the \insert when a row of the table is finished. +% And the same can be done for other insert classes. --kasal, 16nov03. + +% Replace the \insert primitive by a cheating macro. +% Deeper inside, just make sure that the saved insertions are not spilled +% out prematurely. % -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% +\def\startsavinginserts{% + \ifx \insert\ptexinsert + \let\insert\saveinsert + \else + \let\checkinserts\relax + \fi } -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). +% This \insert replacement works for both \insert\footins{foo} and +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % -\def\finalout{\overfullrule=0pt} +\def\saveinsert#1{% + \edef\next{\noexpand\savetobox \makeSAVEname#1}% + \afterassignment\next + % swallow the left brace + \let\temp = +} +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} + +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} + +\def\placesaveins#1{% + \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname + {\box#1}% +} + +% eat @SAVE -- beware, all of them have catcode \other: +{ + \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) + \gdef\gobblesave @SAVE{} +} + +% initialization: +\def\newsaveins #1{% + \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% + \next +} +\def\newsaveinsX #1{% + \csname newbox\endcsname #1% + \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts + \checksaveins #1}% +} + +% initialize: +\let\checkinserts\empty +\newsaveins\footins +\newsaveins\margin + % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. @@ -6311,12 +6367,12 @@ width0pt\relax} \fi % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else - \closein 1 % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi +\closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf @@ -6372,6 +6428,269 @@ width0pt\relax} \fi \endgroup} +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, +% etc. We don't actually implement floating yet, we always include the +% float "here". But it seemed the best name for the future. +% +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} + +% There may be a space before second and/or third parameter; delete it. +\def\eatcommaspace#1, {#1,} + +% #1 is the optional FLOATTYPE, the text label for this float, typically +% "Figure", "Table", "Example", etc. Can't contain commas. If omitted, +% this float will not be numbered and cannot be referred to. +% +% #2 is the optional xref label. Also must be present for the float to +% be referable. +% +% #3 is the optional positioning argument; for now, it is ignored. It +% will somehow specify the positions allowed to float to (here, top, bottom). +% +% We keep a separate counter for each FLOATTYPE, which we reset at each +% chapter-level command. +\let\resetallfloatnos=\empty +% +\def\dofloat#1,#2,#3,#4\finish{% + \let\thiscaption=\empty + \let\thisshortcaption=\empty + % + % don't lose footnotes inside @float. + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \startsavinginserts + % + % We can't be used inside a paragraph. + \par + % + \vtop\bgroup + \def\floattype{#1}% + \def\floatlabel{#2}% + \def\floatloc{#3}% we do nothing with this yet. + % + \ifx\floattype\empty + \let\safefloattype=\empty + \else + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + \fi + % + % If label is given but no type, we handle that as the empty type. + \ifx\floatlabel\empty \else + % We want each FLOATTYPE to be numbered separately (Figure 1, + % Table 1, Figure 2, ...). (And if no label, no number.) + % + \expandafter\getfloatno\csname\safefloattype floatno\endcsname + \global\advance\floatno by 1 + % + {% + % This magic value for \thissection is output by \setref as the + % XREFLABEL-title value. \xrefX uses it to distinguish float + % labels (which have a completely different output format) from + % node and anchor labels. And \xrdef uses it to construct the + % lists of floats. + % + \edef\thissection{\floatmagic=\safefloattype}% + \setref{\floatlabel}{Yfloat}% + }% + \fi + % + % start with \parskip glue, I guess. + \vskip\parskip + % + % Don't suppress indentation if a float happens to start a section. + \restorefirstparagraphindent +} + +% we have these possibilities: +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap +% @float Foo,lbl & no caption: Foo 1.1 +% @float Foo & @caption{Cap}: Foo: Cap +% @float Foo & no caption: Foo +% @float ,lbl & Caption{Cap}: 1.1: Cap +% @float ,lbl & no caption: 1.1 +% @float & @caption{Cap}: Cap +% @float & no caption: +% +\def\Efloat{% + \let\floatident = \empty + % + % In all cases, if we have a float type, it comes first. + \ifx\floattype\empty \else \def\floatident{\floattype}\fi + % + % If we have an xref label, the number comes next. + \ifx\floatlabel\empty \else + \ifx\floattype\empty \else % if also had float type, need tie first. + \appendtomacro\floatident{\tie}% + \fi + % the number. + \appendtomacro\floatident{\chaplevelprefix\the\floatno}% + \fi + % + % Start the printed caption with what we've constructed in + % \floatident, but keep it separate; we need \floatident again. + \let\captionline = \floatident + % + \ifx\thiscaption\empty \else + \ifx\floatident\empty \else + \appendtomacro\captionline{: }% had ident, so need a colon between + \fi + % + % caption text. + \appendtomacro\captionline{\scanexp\thiscaption}% + \fi + % + % If we have anything to print, print it, with space before. + % Eventually this needs to become an \insert. + \ifx\captionline\empty \else + \vskip.5\parskip + \captionline + % + % Space below caption. + \vskip\parskip + \fi + % + % If have an xref label, write the list of floats info. Do this + % after the caption, to avoid chance of it being a breakpoint. + \ifx\floatlabel\empty \else + % Write the text that goes in the lof to the aux file as + % \floatlabel-lof. Besides \floatident, we include the short + % caption if specified, else the full caption if specified, else nothing. + {% + \atdummies \turnoffactive \otherbackslash + % since we read the caption text in the macro world, where ^^M + % is turned into a normal character, we have to scan it back, so + % we don't write the literal three characters "^^M" into the aux file. + \scanexp{% + \xdef\noexpand\gtemp{% + \ifx\thisshortcaption\empty + \thiscaption + \else + \thisshortcaption + \fi + }% + }% + \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident + \ifx\gtemp\empty \else : \gtemp \fi}}% + }% + \fi + \egroup % end of \vtop + % + % place the captured inserts + % + % BEWARE: when the floats start float, we have to issue warning whenever an + % insert appears inside a float which could possibly float. --kasal, 26may04 + % + \checkinserts +} + +% Append the tokens #2 to the definition of macro #1, not expanding either. +% +\def\appendtomacro#1#2{% + \expandafter\def\expandafter#1\expandafter{#1#2}% +} + +% @caption, @shortcaption +% +\def\caption{\docaption\thiscaption} +\def\shortcaption{\docaption\thisshortcaption} +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} +\def\defcaption#1#2{\egroup \def#1{#2}} + +% The parameter is the control sequence identifying the counter we are +% going to use. Create it if it doesn't exist and assign it to \floatno. +\def\getfloatno#1{% + \ifx#1\relax + % Haven't seen this figure type before. + \csname newcount\endcsname #1% + % + % Remember to reset this floatno at the next chap. + \expandafter\gdef\expandafter\resetallfloatnos + \expandafter{\resetallfloatnos #1=0 }% + \fi + \let\floatno#1% +} + +% \setref calls this to get the XREFLABEL-snt value. We want an @xref +% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we +% first read the @float command. +% +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% + +% Magic string used for the XREFLABEL-title value, so \xrefX can +% distinguish floats from other xref types. +\def\floatmagic{!!float!!} + +% #1 is the control sequence we are passed; we expand into a conditional +% which is true if #1 represents a float ref. That is, the magic +% \thissection value which we \setref above. +% +\def\iffloat#1{\expandafter\doiffloat#1==\finish} +% +% #1 is (maybe) the \floatmagic string. If so, #2 will be the +% (safe) float type for this float. We set \iffloattype to #2. +% +\def\doiffloat#1=#2=#3\finish{% + \def\temp{#1}% + \def\iffloattype{#2}% + \ifx\temp\floatmagic +} + +% @listoffloats FLOATTYPE - print a list of floats like a table of contents. +% +\parseargdef\listoffloats{% + \def\floattype{#1}% floattype + {% + % the floattype might have accents or other special characters, + % but we need to use it in a control sequence name. + \indexnofonts + \turnoffactive + \xdef\safefloattype{\floattype}% + }% + % + % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. + \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax + \ifhavexrefs + % if the user said @listoffloats foo but never @float foo. + \message{\linenumber No `\safefloattype' floats to list.}% + \fi + \else + \begingroup + \leftskip=\tocindent % indent these entries like a toc + \let\do=\listoffloatsdo + \csname floatlist\safefloattype\endcsname + \endgroup + \fi +} + +% This is called on each entry in a list of floats. We're passed the +% xref label, in the form LABEL-title, which is how we save it in the +% aux file. We strip off the -title and look up \XRLABEL-lof, which +% has the text we're supposed to typeset here. +% +% Figures without xref labels will not be included in the list (since +% they won't appear in the aux file). +% +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} +\def\listoffloatsdoentry#1-title\finish{{% + % Can't fully expand XR#1-lof because it can contain anything. Just + % pass the control sequence. On the other hand, XR#1-pg is just the + % page number, and we want to fully expand that so we can get a link + % in pdf output. + \toksA = \expandafter{\csname XR#1-lof\endcsname}% + % + % use the same \entry macro we use to generate the TOC and index. + \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% + \writeentry +}} + \message{localization,} % and i18n. @@ -6380,19 +6699,17 @@ width0pt\relax} \fi % properly. Single argument is the language abbreviation. % It would be nice if we could set up a hyphenation file here. % -\def\documentlanguage{\parsearg\dodocumentlanguage} -\def\dodocumentlanguage#1{% +\parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. - % Read the file if it exists. - \openin 1 txi-#1.tex - \ifeof1 - \errhelp = \nolanghelp - \errmessage{Cannot read language file txi-#1.tex}% - \let\temp = \relax - \else - \def\temp{\input txi-#1.tex }% - \fi - \temp + % Read the file if it exists. + \openin 1 txi-#1.tex + \ifeof 1 + \errhelp = \nolanghelp + \errmessage{Cannot read language file txi-#1.tex}% + \else + \input txi-#1.tex + \fi + \closein 1 \endgroup } \newhelp\nolanghelp{The given language definition file cannot be found or @@ -6575,8 +6892,7 @@ should work if nowhere else does.} % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % -\def\pagesizes{\parsearg\pagesizesxxx} -\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 @@ -6623,8 +6939,8 @@ should work if nowhere else does.} \def\normalplus{+} \def\normaldollar{$}%$ font-lock fix -% This macro is used to make a character print one way in ttfont -% where it can probably just be output, and another way in other fonts, +% This macro is used to make a character print one way in \tt +% (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print @@ -6672,13 +6988,6 @@ should work if nowhere else does.} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix -% Set up an active definition for =, but don't enable it most of the time. -{\catcode`\==\active -\global\def={{\tt \char 61}}} - -\catcode`+=\active -\catcode`\_=\active - % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. @@ -6687,15 +6996,16 @@ should work if nowhere else does.} \catcode`\@=0 -% \rawbackslashxx outputs one backslash character in current font, +% \backslashcurfont outputs one backslash character in current font, % as in \char`\\. -\global\chardef\rawbackslashxx=`\\ +\global\chardef\backslashcurfont=`\\ +\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work -% \rawbackslash defines an active \ to do \rawbackslashxx. +% \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. {\catcode`\\=\active - @gdef@rawbackslash{@let\=@rawbackslashxx} + @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} } @@ -6703,7 +7013,7 @@ should work if nowhere else does.} {\catcode`\\=\other @gdef@realbackslash{\}} % \normalbackslash outputs one backslash in fixed width font. -\def\normalbackslash{{\tt\rawbackslashxx}} +\def\normalbackslash{{\tt\backslashcurfont}} \catcode`\\=\active @@ -6720,6 +7030,7 @@ should work if nowhere else does.} @let>=@normalgreater @let+=@normalplus @let$=@normaldollar %$ font-lock fix + @unsepspaces } % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of @@ -6759,10 +7070,6 @@ should work if nowhere else does.} @catcode`@# = @other @catcode`@% = @other -@c Set initial fonts. -@textfonts -@rm - @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @@ -6771,3 +7078,9 @@ should work if nowhere else does.} @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: + +@c vim:sw=2: + +@ignore + arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 +@end ignore diff --git a/misc/sys/cdefs.h b/misc/sys/cdefs.h index 8d529bfadc..6f562e56d0 100644 --- a/misc/sys/cdefs.h +++ b/misc/sys/cdefs.h @@ -130,6 +130,7 @@ /* Fortify support. */ #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) #define __bos0(ptr) __builtin_object_size (ptr, 0) +#define __warndecl(name, msg) extern void name (void) /* Support for flexible arrays. */ diff --git a/misc/sys/syslog.h b/misc/sys/syslog.h index ace88a0979..5007525d85 100644 --- a/misc/sys/syslog.h +++ b/misc/sys/syslog.h @@ -168,7 +168,7 @@ CODE facilitynames[] = __BEGIN_DECLS -/* Close desriptor used to write to system logger. +/* Close descriptor used to write to system logger. This function is a possible cancellation point and therefore not marked with __THROW. */ diff --git a/nis/nis_callback.c b/nis/nis_callback.c index b867b39ab7..7d1b9f8e53 100644 --- a/nis/nis_callback.c +++ b/nis/nis_callback.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 1998, 1999, 2000, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997. @@ -274,7 +274,7 @@ __nis_create_callback (int (*callback) (const_nis_name, const nis_object *, struct nis_cb *cb; int sock = RPC_ANYSOCK; struct sockaddr_in sin; - int len = sizeof (struct sockaddr_in); + socklen_t len = sizeof (struct sockaddr_in); char addr[NIS_MAXNAMELEN + 1]; unsigned short port; diff --git a/nis/nis_clone_dir.c b/nis/nis_clone_dir.c index 0271db1790..92e883fde9 100644 --- a/nis/nis_clone_dir.c +++ b/nis/nis_clone_dir.c @@ -1,4 +1,4 @@ -/* Copyright (c) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (c) 1997, 1998, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. @@ -26,7 +26,7 @@ directory_obj * nis_clone_directory (const directory_obj *src, directory_obj *dest) { - unsigned char *addr; + char *addr; unsigned int size; XDR xdrs; directory_obj *res; diff --git a/nis/nis_clone_obj.c b/nis/nis_clone_obj.c index 0b163fe662..4d88200284 100644 --- a/nis/nis_clone_obj.c +++ b/nis/nis_clone_obj.c @@ -1,4 +1,4 @@ -/* Copyright (c) 1997, 1998, 2004 Free Software Foundation, Inc. +/* Copyright (c) 1997, 1998, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. @@ -26,8 +26,8 @@ nis_object * nis_clone_object (const nis_object *src, nis_object *dest) { - unsigned char *addr; - unsigned long size; + char *addr; + unsigned int size; XDR xdrs; nis_object *res = NULL; diff --git a/nis/nis_clone_res.c b/nis/nis_clone_res.c index 135f397911..a0e098c1ed 100644 --- a/nis/nis_clone_res.c +++ b/nis/nis_clone_res.c @@ -1,4 +1,4 @@ -/* Copyright (c) 1997, 1998 Free Software Foundation, Inc. +/* Copyright (c) 1997, 1998, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. @@ -26,7 +26,7 @@ nis_result * nis_clone_result (const nis_result *src, nis_result *dest) { - unsigned char *addr; + char *addr; unsigned int size; XDR xdrs; nis_result *res; diff --git a/nptl/ChangeLog b/nptl/ChangeLog index f372bde30e..df2979e5a4 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,24 @@ +2005-02-25 Roland McGrath <roland@redhat.com> + + * alloca_cutoff.c: Correct license text. + * tst-unload.c: Likewise. + * sysdeps/pthread/allocalim.h: Likewise. + * sysdeps/pthread/pt-initfini.c: Likewise. + * sysdeps/pthread/bits/libc-lock.h: Likewise. + * sysdeps/pthread/bits/sigthread.h: Likewise. + * sysdeps/unix/sysv/linux/bits/local_lim.h: Likewise. + * sysdeps/unix/sysv/linux/bits/posix_opt.h: Likewise. + +2005-02-16 Roland McGrath <roland@redhat.com> + + * sysdeps/pthread/pthread-functions.h (struct pthread_functions): + Use unsigned int * for ptr_nthreads. + +2005-02-14 Alan Modra <amodra@bigpond.net.au> + + * sysdeps/powerpc/tcb-offsets.sym (thread_offsetof): Redefine to suit + gcc4. + 2005-02-07 Richard Henderson <rth@redhat.com> * sysdeps/pthread/pthread.h (__sigsetjmp): Use pointer as first @@ -10,6 +31,7 @@ 2005-01-26 Jakub Jelinek <jakub@redhat.com> + [BZ #737] * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S (__new_sem_trywait): Use direct %gs segment access or, if NO_TLS_DIRECT_SEG_REFS, at least gotntpoff relocation and addition. diff --git a/nptl/sysdeps/powerpc/tcb-offsets.sym b/nptl/sysdeps/powerpc/tcb-offsets.sym index a9701fb5b7..3962edbd54 100644 --- a/nptl/sysdeps/powerpc/tcb-offsets.sym +++ b/nptl/sysdeps/powerpc/tcb-offsets.sym @@ -6,7 +6,8 @@ -- Abuse tls.h macros to derive offsets relative to the thread register. # undef __thread_register # define __thread_register ((void *) 0) -# define thread_offsetof(mem) ((void *) &THREAD_SELF->mem - (void *) 0) +# define thread_offsetof(mem) ((ptrdiff_t) THREAD_SELF + offsetof (struct pthread, mem)) + #if TLS_MULTIPLE_THREADS_IN_TCB MULTIPLE_THREADS_OFFSET thread_offsetof (header.multiple_threads) diff --git a/nptl/sysdeps/pthread/pthread-functions.h b/nptl/sysdeps/pthread/pthread-functions.h index 2845346128..d75bbbb11e 100644 --- a/nptl/sysdeps/pthread/pthread-functions.h +++ b/nptl/sysdeps/pthread/pthread-functions.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2003. @@ -90,7 +90,7 @@ struct pthread_functions void (*ptr__pthread_cleanup_pop_restore) (struct _pthread_cleanup_buffer *, int); #define HAVE_PTR_NTHREADS - int *ptr_nthreads; + unsigned int *ptr_nthreads; void (*ptr___pthread_unwind) (__pthread_unwind_buf_t *) __attribute ((noreturn)) __cleanup_fct_attribute; void (*ptr__nptl_deallocate_tsd) (void); diff --git a/nscd/aicache.c b/nscd/aicache.c index 4e0496ff44..bdd2a9b371 100644 --- a/nscd/aicache.c +++ b/nscd/aicache.c @@ -1,5 +1,5 @@ /* Cache handling for host lookup. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. @@ -365,7 +365,7 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req, wait. */ assert (fd != -1); - TEMP_FAILURE_RETRY (write (fd, &dataset->resp, total)); + writeall (fd, &dataset->resp, total); } goto out; diff --git a/nscd/connections.c b/nscd/connections.c index fe4989d6ef..1f61ee1044 100644 --- a/nscd/connections.c +++ b/nscd/connections.c @@ -183,13 +183,28 @@ static int sock; unsigned long int client_queued; +ssize_t +writeall (int fd, const void *buf, size_t len) +{ + size_t n = len; + ssize_t ret; + do + { + ret = TEMP_FAILURE_RETRY (write (fd, buf, n)); + if (ret <= 0) + break; + buf = (const char *) buf + ret; + n -= ret; + } + while (n > 0); + return ret < 0 ? ret : len - n; +} + + /* Initialize database information structures. */ void nscd_init (void) { - struct sockaddr_un sock_addr; - size_t cnt; - /* Secure mode and unprivileged mode are incompatible */ if (server_user != NULL && secure_in_use) { @@ -206,7 +221,7 @@ nscd_init (void) /* No configuration for this value, assume a default. */ nthreads = 2 * lastdb; - for (cnt = 0; cnt < lastdb; ++cnt) + for (size_t cnt = 0; cnt < lastdb; ++cnt) if (dbs[cnt].enabled) { pthread_rwlock_init (&dbs[cnt].lock, NULL); @@ -502,6 +517,7 @@ cannot set socket to close on exec: %s; disabling paranoia mode"), exit (1); } /* Bind a name to the socket. */ + struct sockaddr_un sock_addr; sock_addr.sun_family = AF_UNIX; strcpy (sock_addr.sun_path, _PATH_NSCDSOCKET); if (bind (sock, (struct sockaddr *) &sock_addr, sizeof (sock_addr)) < 0) @@ -693,7 +709,7 @@ cannot handle old request version %d; current version is %d"), if (cached != NULL) { /* Hurray it's in the cache. */ - if (TEMP_FAILURE_RETRY (write (fd, cached->data, cached->recsize)) + if (writeall (fd, cached->data, cached->recsize) != cached->recsize && __builtin_expect (debug_level, 0) > 0) { diff --git a/nscd/grpcache.c b/nscd/grpcache.c index c565f5a682..5d327f360c 100644 --- a/nscd/grpcache.c +++ b/nscd/grpcache.c @@ -1,5 +1,5 @@ /* Cache handling for group lookup. - Copyright (C) 1998-2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1998-2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -292,7 +292,7 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req, unnecessarily let the receiver wait. */ assert (fd != -1); - written = TEMP_FAILURE_RETRY (write (fd, &dataset->resp, total)); + written = writeall (fd, &dataset->resp, total); } /* Add the record to the database. But only if it has not been @@ -429,11 +429,10 @@ addgrbyX (struct database_dyn *db, int fd, request_header *req, { char *old_buffer = buffer; errno = 0; -#define INCR 1024 if (__builtin_expect (buflen > 32768, 0)) { - buflen += INCR; + buflen *= 2; buffer = (char *) realloc (use_malloc ? buffer : NULL, buflen); if (buffer == NULL) { @@ -454,7 +453,7 @@ addgrbyX (struct database_dyn *db, int fd, request_header *req, else /* Allocate a new buffer on the stack. If possible combine it with the previously allocated buffer. */ - buffer = (char *) extend_alloca (buffer, buflen, buflen + INCR); + buffer = (char *) extend_alloca (buffer, buflen, 2 * buflen); } #if 0 diff --git a/nscd/hstcache.c b/nscd/hstcache.c index 99d2998f49..377f02387d 100644 --- a/nscd/hstcache.c +++ b/nscd/hstcache.c @@ -1,5 +1,5 @@ /* Cache handling for host lookup. - Copyright (C) 1998-2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1998-2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -327,7 +327,7 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req, unnecessarily keep the receiver waiting. */ assert (fd != -1); - written = TEMP_FAILURE_RETRY (write (fd, &dataset->resp, total)); + written = writeall (fd, &dataset->resp, total); } /* Add the record to the database. But only if it has not been @@ -453,11 +453,10 @@ addhstbyX (struct database_dyn *db, int fd, request_header *req, { char *old_buffer = buffer; errno = 0; -#define INCR 1024 if (__builtin_expect (buflen > 32768, 0)) { - buflen += INCR; + buflen *= 2; buffer = (char *) realloc (use_malloc ? buffer : NULL, buflen); if (buffer == NULL) { @@ -478,7 +477,7 @@ addhstbyX (struct database_dyn *db, int fd, request_header *req, else /* Allocate a new buffer on the stack. If possible combine it with the previously allocated buffer. */ - buffer = (char *) extend_alloca (buffer, buflen, buflen + INCR); + buffer = (char *) extend_alloca (buffer, buflen, 2 * buflen); } #if 0 diff --git a/nscd/initgrcache.c b/nscd/initgrcache.c index b46433716b..db01f1bc28 100644 --- a/nscd/initgrcache.c +++ b/nscd/initgrcache.c @@ -1,5 +1,5 @@ /* Cache handling for host lookup. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. @@ -343,7 +343,7 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req, unnecessarily let the receiver wait. */ assert (fd != -1); - written = TEMP_FAILURE_RETRY (write (fd, &dataset->resp, total)); + written = writeall (fd, &dataset->resp, total); } diff --git a/nscd/nscd-client.h b/nscd/nscd-client.h index d49cb8136c..1389f2da19 100644 --- a/nscd/nscd-client.h +++ b/nscd/nscd-client.h @@ -1,4 +1,5 @@ -/* Copyright (c) 1998, 1999, 2000, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (c) 1998, 1999, 2000, 2003, 2004, 2005 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998. @@ -28,6 +29,7 @@ #include <sys/types.h> #include <atomic.h> #include <nscd-types.h> +#include <sys/uio.h> /* Version number of the daemon interface */ @@ -309,4 +311,13 @@ extern const struct datahead *__nscd_cache_search (request_type type, size_t keylen, const struct mapped_database *mapped); +/* Wrappers around read, readv and write that only read/write less than LEN + bytes on error or EOF. */ +extern ssize_t __readall (int fd, void *buf, size_t len) + attribute_hidden; +extern ssize_t __readvall (int fd, const struct iovec *iov, int iovcnt) + attribute_hidden; +extern ssize_t writeall (int fd, const void *buf, size_t len) + attribute_hidden; + #endif /* nscd.h */ diff --git a/nscd/nscd_getai.c b/nscd/nscd_getai.c index 866f7b2a5f..4e3dfad1ea 100644 --- a/nscd/nscd_getai.c +++ b/nscd/nscd_getai.c @@ -119,8 +119,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop) if (respdata == NULL) { /* Read the data from the socket. */ - if ((size_t) TEMP_FAILURE_RETRY (__read (sock, resultbuf + 1, - datalen)) == datalen) + if ((size_t) __readall (sock, resultbuf + 1, datalen) == datalen) { retval = 0; *result = resultbuf; diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c index 282912db3e..dae1c0da54 100644 --- a/nscd/nscd_getgr_r.c +++ b/nscd/nscd_getgr_r.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004 +/* Copyright (C) 1998, 1999, 2000, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998. @@ -202,7 +202,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type, total_len = vec[0].iov_len + vec[1].iov_len; /* Get this data. */ - size_t n = TEMP_FAILURE_RETRY (__readv (sock, vec, 2)); + size_t n = __readvall (sock, vec, 2); if (__builtin_expect (n != total_len, 0)) goto out_close; } @@ -232,8 +232,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type, retval = 0; if (gr_name == NULL) { - size_t n = TEMP_FAILURE_RETRY (__read (sock, resultbuf->gr_mem[0], - total_len)); + size_t n = __readall (sock, resultbuf->gr_mem[0], total_len); if (__builtin_expect (n != total_len, 0)) { /* The `errno' to some value != ERANGE. */ diff --git a/nscd/nscd_gethst_r.c b/nscd/nscd_gethst_r.c index 5d9d569107..70ee38b71f 100644 --- a/nscd/nscd_gethst_r.c +++ b/nscd/nscd_gethst_r.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998-2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1998-2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -218,6 +218,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type, ? INADDRSZ : IN6ADDRSZ))) { no_room: + *h_errnop = NETDB_INTERNAL; __set_errno (ERANGE); retval = ERANGE; goto out_close; @@ -298,8 +299,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type, ++n; } - if ((size_t) TEMP_FAILURE_RETRY (__readv (sock, vec, n)) - != total_len) + if ((size_t) __readvall (sock, vec, n) != total_len) goto out_close; } else @@ -328,9 +328,8 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type, /* And finally read the aliases. */ if (addr_list == NULL) { - if ((size_t) TEMP_FAILURE_RETRY (__read (sock, - resultbuf->h_aliases[0], - total_len)) == total_len) + if ((size_t) __readall (sock, resultbuf->h_aliases[0], total_len) + == total_len) { retval = 0; *result = resultbuf; diff --git a/nscd/nscd_getpw_r.c b/nscd/nscd_getpw_r.c index fe5fb43ca1..61a712c6b4 100644 --- a/nscd/nscd_getpw_r.c +++ b/nscd/nscd_getpw_r.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998. @@ -172,7 +172,7 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type, retval = 0; if (pw_name == NULL) { - ssize_t nbytes = TEMP_FAILURE_RETRY (__read (sock, buffer, total)); + ssize_t nbytes = __readall (sock, buffer, total); if (__builtin_expect (nbytes != total, 0)) { diff --git a/nscd/nscd_helper.c b/nscd/nscd_helper.c index ea4fb968db..c99cb430aa 100644 --- a/nscd/nscd_helper.c +++ b/nscd/nscd_helper.c @@ -34,6 +34,64 @@ #include "nscd-client.h" +ssize_t +__readall (int fd, void *buf, size_t len) +{ + size_t n = len; + ssize_t ret; + do + { + ret = TEMP_FAILURE_RETRY (__read (fd, buf, n)); + if (ret <= 0) + break; + buf = (char *) buf + ret; + n -= ret; + } + while (n > 0); + return ret < 0 ? ret : len - n; +} + + +ssize_t +__readvall (int fd, const struct iovec *iov, int iovcnt) +{ + ssize_t ret = TEMP_FAILURE_RETRY (__readv (fd, iov, iovcnt)); + if (ret <= 0) + return ret; + + size_t total = 0; + for (int i = 0; i < iovcnt; ++i) + total += iov[i].iov_len; + + if (ret < total) + { + struct iovec iov_buf[iovcnt]; + ssize_t r = ret; + + struct iovec *iovp = memcpy (iov_buf, iov, iovcnt * sizeof (*iov)); + do + { + while (iovp->iov_len <= r) + { + r -= iovp->iov_len; + --iovcnt; + ++iovp; + } + iovp->iov_base = (char *) iovp->iov_base + r; + iovp->iov_len -= r; + r = TEMP_FAILURE_RETRY (__readv (fd, iovp, iovcnt)); + if (r <= 0) + break; + ret += r; + } + while (ret < total); + if (r < 0) + ret = r; + } + return ret; +} + + static int open_socket (void) { diff --git a/nscd/nscd_initgroups.c b/nscd/nscd_initgroups.c index daddf2e164..cf5af6edc1 100644 --- a/nscd/nscd_initgroups.c +++ b/nscd/nscd_initgroups.c @@ -110,9 +110,8 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, if (respdata == NULL) { /* Read the data from the socket. */ - if ((size_t) TEMP_FAILURE_RETRY (__read (sock, *groupsp, - initgr_resp->ngrps - * sizeof (gid_t))) + if ((size_t) __readall (sock, *groupsp, initgr_resp->ngrps + * sizeof (gid_t)) == initgr_resp->ngrps * sizeof (gid_t)) retval = initgr_resp->ngrps; } diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c index e8b9578778..34265c3f39 100644 --- a/nscd/pwdcache.c +++ b/nscd/pwdcache.c @@ -1,5 +1,5 @@ /* Cache handling for passwd lookup. - Copyright (C) 1998-2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 1998-2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -287,7 +287,7 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req, unnecessarily let the receiver wait. */ assert (fd != -1); - written = TEMP_FAILURE_RETRY (write (fd, &dataset->resp, total)); + written = writeall (fd, &dataset->resp, total); } @@ -425,11 +425,10 @@ addpwbyX (struct database_dyn *db, int fd, request_header *req, { char *old_buffer = buffer; errno = 0; -#define INCR 1024 if (__builtin_expect (buflen > 32768, 0)) { - buflen += INCR; + buflen *= 2; buffer = (char *) realloc (use_malloc ? buffer : NULL, buflen); if (buffer == NULL) { @@ -450,7 +449,7 @@ addpwbyX (struct database_dyn *db, int fd, request_header *req, else /* Allocate a new buffer on the stack. If possible combine it with the previously allocated buffer. */ - buffer = (char *) extend_alloca (buffer, buflen, buflen + INCR); + buffer = (char *) extend_alloca (buffer, buflen, 2 * buflen); } #if 0 diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000000..bc7650b39d --- /dev/null +++ b/po/ru.po @@ -0,0 +1,5999 @@ +# ÐÅÒÅ×ÏÄ ÓÏÏÂÝÅÎÉÊ GNU libc +# Copyright (C) 2005 Free Software Foundation, Inc. +# Oleg Tihonov <ost@tatnipi.ru>, 2005. +# +msgid "" +msgstr "" +"Project-Id-Version: libc 2.3.3\n" +"POT-Creation-Date: 2004-08-05 09:16+0200\n" +"PO-Revision-Date: 2005-02-15 11:35+0300\n" +"Last-Translator: Oleg Tihonov <ost@tatnipi.ru>\n" +"Language-Team: Russian <ru@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=koi8-r\n" +"Content-Transfer-Encoding: 8bit\n" + +#: sysdeps/generic/siglist.h:29 stdio-common/../sysdeps/unix/siglist.c:27 +msgid "Hangup" +msgstr "ïÂÒÙ× ÔÅÒÍÉÎÁÌØÎÏÊ ÌÉÎÉÉ" + +#: sysdeps/generic/siglist.h:30 stdio-common/../sysdeps/unix/siglist.c:28 +msgid "Interrupt" +msgstr "ðÒÅÒÙ×ÁÎÉÅ" + +#: sysdeps/generic/siglist.h:31 stdio-common/../sysdeps/unix/siglist.c:29 +msgid "Quit" +msgstr "÷ÙÈÏÄ" + +#: sysdeps/generic/siglist.h:32 stdio-common/../sysdeps/unix/siglist.c:30 +msgid "Illegal instruction" +msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ÉÎÓÔÒÕËÃÉÑ" + +#: sysdeps/generic/siglist.h:33 stdio-common/../sysdeps/unix/siglist.c:31 +msgid "Trace/breakpoint trap" +msgstr "ìÏ×ÕÛËÁ ÔÒÁÓÓÉÒÏ×ËÉ/ÏÓÔÁÎÏ×Á" + +#: sysdeps/generic/siglist.h:34 +msgid "Aborted" +msgstr "á×ÁÒÉÊÎÙÊ ÏÓÔÁÎÏ×" + +#: sysdeps/generic/siglist.h:35 stdio-common/../sysdeps/unix/siglist.c:34 +msgid "Floating point exception" +msgstr "éÓËÌÀÞÅÎÉÅ × ÏÐÅÒÁÃÉÉ Ó ÐÌÁ×ÁÀÝÅÊ ÔÏÞËÏÊ" + +#: sysdeps/generic/siglist.h:36 stdio-common/../sysdeps/unix/siglist.c:35 +msgid "Killed" +msgstr "õÂÉÔÏ" + +#: sysdeps/generic/siglist.h:37 stdio-common/../sysdeps/unix/siglist.c:36 +msgid "Bus error" +msgstr "ïÛÉÂËÁ ÛÉÎÙ" + +#: sysdeps/generic/siglist.h:38 stdio-common/../sysdeps/unix/siglist.c:37 +msgid "Segmentation fault" +msgstr "ïÛÉÂËÁ ÓÅÇÍÅÎÔÉÒÏ×ÁÎÉÑ" + +#. TRANS Broken pipe; there is no process reading from the other end of a pipe. +#. TRANS Every library function that returns this error code also generates a +#. TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled +#. TRANS or blocked. Thus, your program will never actually see @code{EPIPE} +#. TRANS unless it has handled or blocked @code{SIGPIPE}. +#: sysdeps/generic/siglist.h:39 stdio-common/../sysdeps/gnu/errlist.c:351 +#: stdio-common/../sysdeps/unix/siglist.c:39 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:62 +msgid "Broken pipe" +msgstr "ïÂÒÙ× ËÁÎÁÌÁ" + +#: sysdeps/generic/siglist.h:40 stdio-common/../sysdeps/unix/siglist.c:40 +msgid "Alarm clock" +msgstr "óÉÇÎÁÌ ÔÁÊÍÅÒÁ" + +#: sysdeps/generic/siglist.h:41 stdio-common/../sysdeps/unix/siglist.c:41 +msgid "Terminated" +msgstr "úÁ×ÅÒÛÅÎÏ" + +#: sysdeps/generic/siglist.h:42 stdio-common/../sysdeps/unix/siglist.c:42 +msgid "Urgent I/O condition" +msgstr "óÉÔÕÁÃÉÑ ÓÒÏÞÎÏÇÏ ××ÏÄÁ/×Ù×ÏÄÁ" + +#: sysdeps/generic/siglist.h:43 stdio-common/../sysdeps/unix/siglist.c:43 +msgid "Stopped (signal)" +msgstr "ïÓÔÁÎÏ×ÌÅÎÏ (ÓÉÇÎÁÌ)" + +#: sysdeps/generic/siglist.h:44 stdio-common/../sysdeps/unix/siglist.c:44 +msgid "Stopped" +msgstr "ïÓÔÁÎÏ×ÌÅÎÏ" + +#: sysdeps/generic/siglist.h:45 stdio-common/../sysdeps/unix/siglist.c:45 +msgid "Continued" +msgstr "ðÒÏÄÏÌÖÅÎÏ" + +#: sysdeps/generic/siglist.h:46 stdio-common/../sysdeps/unix/siglist.c:46 +msgid "Child exited" +msgstr "äÏÞÅÒÎÉÊ ÐÒÏÃÅÓÓ ÚÁ×ÅÒÛÉÌÓÑ" + +#: sysdeps/generic/siglist.h:47 stdio-common/../sysdeps/unix/siglist.c:47 +msgid "Stopped (tty input)" +msgstr "ïÓÔÁÎÏ×ÌÅÎÏ (××ÏÄ Ó ÔÅÒÍÉÎÁÌÁ)" + +#: sysdeps/generic/siglist.h:48 stdio-common/../sysdeps/unix/siglist.c:48 +msgid "Stopped (tty output)" +msgstr "ïÓÔÁÎÏ×ÌÅÎÏ (×Ù×ÏÄ ÎÁ ÔÅÒÍÉÎÁÌ)" + +#: sysdeps/generic/siglist.h:49 stdio-common/../sysdeps/unix/siglist.c:49 +msgid "I/O possible" +msgstr "÷ÏÚÍÏÖÅÎ ××ÏÄ/×Ù×ÏÄ" + +#: sysdeps/generic/siglist.h:50 stdio-common/../sysdeps/unix/siglist.c:50 +msgid "CPU time limit exceeded" +msgstr "ðÒÅ×ÙÛÅÎ ÌÉÍÉÔ ÐÒÏÃÅÓÓÏÒÎÏÇÏ ×ÒÅÍÅÎÉ" + +#: sysdeps/generic/siglist.h:51 stdio-common/../sysdeps/unix/siglist.c:51 +msgid "File size limit exceeded" +msgstr "ðÒÅ×ÙÛÅÎ ÌÉÍÉÔ ÒÁÚÍÅÒÁ ÆÁÊÌÁ" + +#: sysdeps/generic/siglist.h:52 stdio-common/../sysdeps/unix/siglist.c:52 +msgid "Virtual timer expired" +msgstr "÷ÉÒÔÕÁÌØÎÙÊ ÔÁÊÍÅÒ ÉÓÔÅË" + +#: sysdeps/generic/siglist.h:53 stdio-common/../sysdeps/unix/siglist.c:53 +msgid "Profiling timer expired" +msgstr "ðÒÏÆÉÌÉÒÏ×ÏÞÎÙÊ ÔÁÊÍÅÒ ÉÓÔÅË" + +#: sysdeps/generic/siglist.h:54 stdio-common/../sysdeps/unix/siglist.c:54 +msgid "Window changed" +msgstr "ïËÎÏ ÉÚÍÅÎÉÌÏÓØ" + +#: sysdeps/generic/siglist.h:55 stdio-common/../sysdeps/unix/siglist.c:56 +msgid "User defined signal 1" +msgstr "ïÐÒÅÄÅÌÑÅÍÙÊ ÐÏÌØÚÏ×ÁÔÅÌÅÍ ÓÉÇÎÁÌ 1" + +#: sysdeps/generic/siglist.h:56 stdio-common/../sysdeps/unix/siglist.c:57 +msgid "User defined signal 2" +msgstr "ïÐÒÅÄÅÌÑÅÍÙÊ ÐÏÌØÚÏ×ÁÔÅÌÅÍ ÓÉÇÎÁÌ 2" + +#: sysdeps/generic/siglist.h:60 stdio-common/../sysdeps/unix/siglist.c:33 +msgid "EMT trap" +msgstr "ìÏ×ÕÛËÁ EMT" + +#: sysdeps/generic/siglist.h:63 stdio-common/../sysdeps/unix/siglist.c:38 +msgid "Bad system call" +msgstr "îÅ×ÅÒÎÙÊ ÓÉÓÔÅÍÎÙÊ ×ÙÚÏ×" + +#: sysdeps/generic/siglist.h:66 +msgid "Stack fault" +msgstr "ïÛÉÂËÁ ÓÔÅËÁ" + +#: sysdeps/generic/siglist.h:69 +msgid "Information request" +msgstr "úÁÐÒÏÓ ÉÎÆÏÒÍÁÃÉÉ" + +#: sysdeps/generic/siglist.h:71 +msgid "Power failure" +msgstr "óÂÏÊ ÐÉÔÁÎÉÑ" + +#: sysdeps/generic/siglist.h:74 stdio-common/../sysdeps/unix/siglist.c:55 +msgid "Resource lost" +msgstr "ðÏÔÅÒÑ ÒÅÓÕÒÓÁ" + +#: sysdeps/mach/hurd/mips/dl-machine.c:68 +#: string/../sysdeps/mach/_strerror.c:57 +msgid "Error in unknown error system: " +msgstr "ïÛÉÂËÁ × ÎÅÉÚ×ÅÓÔÎÏÊ ÓÉÓÔÅÍÅ ÏÛÉÂÏË: " + +#: sysdeps/mach/hurd/mips/dl-machine.c:83 +#: string/../sysdeps/generic/_strerror.c:44 +#: string/../sysdeps/mach/_strerror.c:87 +msgid "Unknown error " +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ " + +#: sysdeps/unix/sysv/linux/lddlibc4.c:64 +#, c-format +msgid "cannot open `%s'" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ `%s'" + +#: sysdeps/unix/sysv/linux/lddlibc4.c:68 +#, c-format +msgid "cannot read header from `%s'" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË ÉÚ `%s'" + +#: iconv/iconv_charmap.c:159 iconv/iconv_prog.c:295 catgets/gencat.c:288 +#, c-format +msgid "cannot open input file `%s'" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÈÏÄÎÏÊ ÆÁÊÌ `%s'" + +#: iconv/iconv_charmap.c:177 iconv/iconv_prog.c:313 +#, c-format +msgid "error while closing input `%s'" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ `%s'" + +#: iconv/iconv_charmap.c:443 +#, c-format +msgid "illegal input sequence at position %Zd" +msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ×ÈÏÄÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ÐÏÚÉÃÉÉ %Zd" + +#: iconv/iconv_charmap.c:462 iconv/iconv_prog.c:506 +msgid "incomplete character or shift sequence at end of buffer" +msgstr "ÎÅÐÏÌÎÙÊ ÚÎÁË ÉÌÉ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÓÄ×ÉÇÁ × ËÏÎÃÅ ÂÕÆÅÒÁ" + +#: iconv/iconv_charmap.c:507 iconv/iconv_charmap.c:543 iconv/iconv_prog.c:549 +#: iconv/iconv_prog.c:585 +msgid "error while reading the input" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ" + +#: iconv/iconv_charmap.c:525 iconv/iconv_prog.c:567 +msgid "unable to allocate buffer for input" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÂÕÆÅÒ ÄÌÑ ××ÏÄÁ" + +#: iconv/iconv_prog.c:61 +msgid "Input/Output format specification:" +msgstr "óÐÅÃÉÆÉËÁÃÉÑ ÆÏÒÍÁÔÁ ××ÏÄÁ/×Ù×ÏÄÁ:" + +#: iconv/iconv_prog.c:62 +msgid "encoding of original text" +msgstr "ËÏÄÉÒÏ×ËÁ ÏÒÉÇÉÎÁÌØÎÏÇÏ ÔÅËÓÔÁ" + +#: iconv/iconv_prog.c:63 +msgid "encoding for output" +msgstr "ËÏÄÉÒÏ×ËÁ ÄÌÑ ×Ù×ÏÄÁ" + +#: iconv/iconv_prog.c:64 +msgid "Information:" +msgstr "éÎÆÏÒÍÁÃÉÑ:" + +#: iconv/iconv_prog.c:65 +msgid "list all known coded character sets" +msgstr "ÐÅÒÅÞÉÓÌÉÔØ ×ÓÅ ÉÚ×ÅÓÔÎÙÅ ×ÓÔÒÏÅÎÎÙÅ ËÏÄÉÒÏ×ËÉ" + +#: iconv/iconv_prog.c:66 locale/programs/localedef.c:128 +msgid "Output control:" +msgstr "õÓÐÒÁ×ÌÅÎÉÅ ×Ù×ÏÄÏÍ:" + +#: iconv/iconv_prog.c:67 +msgid "omit invalid characters from output" +msgstr "ÐÒÏÐÕÓËÁÔØ ÎÁ ×Ù×ÏÄÅ ÎÅÄÏÐÕÓÔÉÍÙÅ ÚÎÁËÉ" + +#: iconv/iconv_prog.c:68 +msgid "output file" +msgstr "×ÙÈÏÄÎÏÊ ÆÁÊÌ" + +#: iconv/iconv_prog.c:69 +msgid "suppress warnings" +msgstr "ÎÅ ÐÅÞÁÔÁÔØ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ" + +#: iconv/iconv_prog.c:70 +msgid "print progress information" +msgstr "ÐÅÞÁÔÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÈÏÄÅ ÒÁÂÏÔÙ" + +#: iconv/iconv_prog.c:75 +msgid "Convert encoding of given files from one encoding to another." +msgstr "ðÒÅÏÂÒÁÚÕÅÔ ÕËÁÚÁÎÎÙÅ ÆÁÊÌÙ ÉÚ ÏÄÎÏÊ ËÏÄÉÒÏ×ËÉ × ÄÒÕÇÕÀ." + +#: iconv/iconv_prog.c:79 +msgid "[FILE...]" +msgstr "[æáêì...]" + +#: iconv/iconv_prog.c:201 +msgid "cannot open output file" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ" + +#: iconv/iconv_prog.c:243 +#, c-format +msgid "conversion from `%s' and to `%s' are not supported" +msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÉÚ `%s' É × `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ" + +#: iconv/iconv_prog.c:248 +#, c-format +msgid "conversion from `%s' is not supported" +msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" + +#: iconv/iconv_prog.c:255 +#, c-format +msgid "conversion to `%s' is not supported" +msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ × `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" + +#: iconv/iconv_prog.c:259 +#, c-format +msgid "conversion from `%s' to `%s' is not supported" +msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ `%s' × `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" + +#: iconv/iconv_prog.c:265 +msgid "failed to start conversion processing" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÎÁÞÁÔØ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ" + +#: iconv/iconv_prog.c:360 +msgid "error while closing output file" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ" + +#: iconv/iconv_prog.c:409 iconv/iconvconfig.c:357 locale/programs/locale.c:279 +#: locale/programs/localedef.c:372 catgets/gencat.c:233 +#: malloc/memusagestat.c:602 debug/pcprofiledump.c:199 +msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n" +msgstr "ï ÏÛÉÂËÁÈ ÓÏÏÂÝÁÊÔÅ ÐÒÉ ÐÏÍÏÝÉ ÐÒÏÇÒÁÍÍÙ `glibcbug' ÎÁ ÁÄÒÅÓ <bugs@gnu.org>.\n" + +#: iconv/iconv_prog.c:423 iconv/iconvconfig.c:371 locale/programs/locale.c:292 +#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:913 +#: nss/getent.c:74 nscd/nscd.c:355 nscd/nscd_nischeck.c:90 elf/ldconfig.c:274 +#: elf/sprof.c:349 +#, c-format +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"üÔÏ Ó×ÏÂÏÄÎÁÑ ÐÒÏÇÒÁÍÍÁ; ÐÏÄÒÏÂÎÏÓÔÉ Ï ÕÓÌÏ×ÉÑÈ ÒÁÓÐÒÏÓÔÒÁÎÅÎÉÑ\n" +"ÓÍÏÔÒÉÔÅ × ÉÓÈÏÄÎÏÍ ÔÅËÓÔÅ. íÙ îå ÐÒÅÄÏÓÔÁ×ÌÑÅÍ ÇÁÒÁÎÔÉÊ; ÄÁÖÅ ÇÁÒÁÎÔÉÊ\n" +"ëïííåòþåóëïê ðòéçïäîïóôé ÉÌÉ ðòéçïäîïóôé äìñ ëáëïê-ìéâï ãåìé.\n" + +#: iconv/iconv_prog.c:428 iconv/iconvconfig.c:376 locale/programs/locale.c:297 +#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:918 +#: nss/getent.c:79 nscd/nscd.c:360 nscd/nscd_nischeck.c:95 elf/ldconfig.c:279 +#: elf/sprof.c:355 +#, c-format +msgid "Written by %s.\n" +msgstr "á×ÔÏÒ ÐÒÏÇÒÁÍÍÙ -- %s.\n" + +#: iconv/iconv_prog.c:458 iconv/iconv_prog.c:484 +msgid "conversion stopped due to problem in writing the output" +msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÏÓÔÁÎÏ×ÌÅÎÏ ÉÚ-ÚÁ ÐÒÏÂÌÅÍÙ ÐÒÉ ÚÁÐÉÓÉ ×Ù×ÏÄÁ" + +#: iconv/iconv_prog.c:502 +#, c-format +msgid "illegal input sequence at position %ld" +msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ×ÈÏÄÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ÐÏÚÉÃÉÉ %ld" + +#: iconv/iconv_prog.c:510 +msgid "internal error (illegal descriptor)" +msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ (ÎÅ×ÅÒÎÙÊ ÄÅÓËÒÉÐÔÏÒ)" + +#: iconv/iconv_prog.c:513 +#, c-format +msgid "unknown iconv() error %d" +msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ iconv() %d" + +#: iconv/iconv_prog.c:756 +msgid "" +"The following list contain all the coded character sets known. This does\n" +"not necessarily mean that all combinations of these names can be used for\n" +"the FROM and TO command line parameters. One coded character set can be\n" +"listed with several different names (aliases).\n" +"\n" +" " +msgstr "" +"óÌÅÄÕÀÝÉÊ ÓÐÉÓÏË ÓÏÄÅÒÖÉÔ ×ÓÅ ÉÚ×ÅÓÔÎÙÅ ×ÓÔÒÏÅÎÎÙÅ ËÏÄÉÒÏ×ËÉ. üÔÏ ÎÅ\n" +"ÏÂÑÚÁÔÅÌØÎÏ ÏÚÎÁÞÁÅÔ, ÞÔÏ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÌÀÂÙÅ ËÏÍÂÉÎÁÃÉÉ ÄÁÎÎÙÈ\n" +"ÉÍÅÎ × ÐÁÒÁÍÅÔÒÁÈ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ FROM É TO. ïÄÎÁ É ÔÁ ÖÅ ËÏÄÉÒÏ×ËÁ\n" +"ÍÏÖÅÔ ÂÙÔØ ÐÅÒÅÞÉÓÌÅÎÁ ÐÏÄ ÎÅÓËÏÌØËÉÍÉ ÉÍÅÎÁÍÉ (ÐÓÅ×ÄÏÎÉÍÁÍÉ).\n" +"\n" +" " + +#: iconv/iconvconfig.c:110 +msgid "Create fastloading iconv module configuration file." +msgstr "óÏÚÄÁÅÔ ÂÙÓÔÒÏÚÁÇÒÕÖÁÅÍÙÊ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ ÍÏÄÕÌÑ iconv." + +#: iconv/iconvconfig.c:114 +msgid "[DIR...]" +msgstr "[ëáôáìïç...]" + +#: iconv/iconvconfig.c:126 +msgid "Prefix used for all file accesses" +msgstr "ðÒÅÆÉËÓ, ÉÓÐÏÌØÚÕÅÍÙÊ ÄÌÑ ÄÏÓÔÕÐÁ ËÏ ×ÓÅÍ ÆÁÊÌÁÍ" + +#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292 +msgid "no output file produced because warning were issued" +msgstr "×ÙÈÏÄÎÏÊ ÆÁÊÌ ÎÅ ÓÏÚÄÁÎ, ÐÏÓËÏÌØËÕ ÂÙÌÉ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ" + +#: iconv/iconvconfig.c:405 +msgid "while inserting in search tree" +msgstr "ÐÒÉ ×ÓÔÁ×ËÅ × ÄÅÒÅ×Ï ÐÏÉÓËÁ" + +#: iconv/iconvconfig.c:1204 +msgid "cannot generate output file" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÇÅÎÅÒÉÒÏ×ÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ" + +#: locale/programs/charmap-dir.c:59 +#, c-format +msgid "cannot read character map directory `%s'" +msgstr "" + +#: locale/programs/charmap.c:136 +#, c-format +msgid "character map file `%s' not found" +msgstr "" + +#: locale/programs/charmap.c:194 +#, c-format +msgid "default character map file `%s' not found" +msgstr "" + +#: locale/programs/charmap.c:257 +#, c-format +msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n" +msgstr "" + +#: locale/programs/charmap.c:336 +#, c-format +msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n" +msgstr "%s: <mb_cur_max> ÄÏÌÖÎÏ ÂÙÔØ ÂÏÌØÛÅ ÞÅÍ <mb_cur_min>\n" + +#: locale/programs/charmap.c:356 locale/programs/charmap.c:373 +#: locale/programs/repertoire.c:175 +#, c-format +msgid "syntax error in prolog: %s" +msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÐÒÏÌÏÇÅ: %s" + +#: locale/programs/charmap.c:357 +msgid "invalid definition" +msgstr "ÎÅ×ÅÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ" + +#: locale/programs/charmap.c:374 locale/programs/locfile.c:126 +#: locale/programs/locfile.c:153 locale/programs/repertoire.c:176 +msgid "bad argument" +msgstr "ÎÅÐÒÁ×ÉÌØÎÙÊ ÁÒÇÕÍÅÎÔ" + +#: locale/programs/charmap.c:402 +#, c-format +msgid "duplicate definition of <%s>" +msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÄÌÑ <%s>" + +#: locale/programs/charmap.c:409 +#, c-format +msgid "value for <%s> must be 1 or greater" +msgstr "ÚÎÁÞÅÎÉÅ <%s> ÄÏÌÖÎÏ ÂÙÔØ 1 ÉÌÉ ÂÏÌØÛÅ" + +#: locale/programs/charmap.c:421 +#, c-format +msgid "value of <%s> must be greater or equal than the value of <%s>" +msgstr "ÚÎÁÞÅÎÉÅ <%s> ÄÏÌÖÎÏ ÂÙÔØ ÂÏÌØÛÅ ÉÌÉ ÒÁ×ÎÏ ÚÎÁÞÅÎÉÀ <%s>" + +#: locale/programs/charmap.c:444 locale/programs/repertoire.c:184 +#, c-format +msgid "argument to <%s> must be a single character" +msgstr "ÁÒÇÕÍÅÎÔ ÄÌÑ <%s> ÄÏÌÖÅÎ ÂÙÔØ ÏÄÎÉÍ ÚÎÁËÏÍ" + +#: locale/programs/charmap.c:470 +msgid "character sets with locking states are not supported" +msgstr "ËÏÄÉÒÏ×ËÉ Ó ÂÌÏËÉÒÕÀÝÉÍÉ ÓÏÓÔÏÑÎÉÑÍÉ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ" + +#: locale/programs/charmap.c:497 locale/programs/charmap.c:551 +#: locale/programs/charmap.c:583 locale/programs/charmap.c:677 +#: locale/programs/charmap.c:732 locale/programs/charmap.c:773 +#: locale/programs/charmap.c:814 +#, c-format +msgid "syntax error in %s definition: %s" +msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÏÐÒÅÄÅÌÅÎÉÉ %s: %s" + +#: locale/programs/charmap.c:498 locale/programs/charmap.c:678 +#: locale/programs/charmap.c:774 locale/programs/repertoire.c:231 +msgid "no symbolic name given" +msgstr "ÎÅ ÚÁÄÁÎÏ ÓÉÍ×ÏÌØÎÏÅ ÉÍÑ" + +#: locale/programs/charmap.c:552 +msgid "invalid encoding given" +msgstr "ÚÁÄÁÎÁ ÎÅ×ÅÒÎÁÑ ËÏÄÉÒÏ×ËÁ" + +#: locale/programs/charmap.c:561 +msgid "too few bytes in character encoding" +msgstr "ÓÌÉÛËÏÍ ÍÁÌÏ ÂÁÊÔ × ËÏÄÉÒÏ×ËÅ ÚÎÁËÁ" + +#: locale/programs/charmap.c:563 +msgid "too many bytes in character encoding" +msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÂÁÊÔ × ËÏÄÉÒÏ×ËÅ ÚÎÁËÁ" + +#: locale/programs/charmap.c:585 locale/programs/charmap.c:733 +#: locale/programs/charmap.c:816 locale/programs/repertoire.c:297 +msgid "no symbolic name given for end of range" +msgstr "ÎÅ ÚÁÄÁÎÏ ÓÉÍ×ÏÌØÎÏÅ ÉÍÑ ÄÌÑ ËÏÎÃÁ ÄÉÁÐÁÚÏÎÁ" + +#: locale/programs/charmap.c:609 locale/programs/locfile.c:818 +#: locale/programs/repertoire.c:314 +#, c-format +msgid "`%1$s' definition does not end with `END %1$s'" +msgstr "ÏÐÒÅÄÅÌÅÎÉÅ `%1$s' ÎÅ ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÎÁ `END %1$s'" + +#: locale/programs/charmap.c:642 +msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" +msgstr "ÐÏÓÌÅ ÏÐÒÅÄÅÌÅÎÉÑ CHARMAP ÍÏÇÕÔ ÓÌÅÄÏ×ÁÔØ ÔÏÌØËÏ ÏÐÒÅÄÅÌÅÎÉÑ WIDTH" + +#: locale/programs/charmap.c:650 locale/programs/charmap.c:713 +#, c-format +msgid "value for %s must be an integer" +msgstr "ÚÎÁÞÅÎÉÅ ÄÌÑ %s ÄÏÌÖÎÏ ÂÙÔØ ÃÅÌÙÍ ÞÉÓÌÏÍ" + +#: locale/programs/charmap.c:841 +#, c-format +msgid "%s: error in state machine" +msgstr "%s: ÏÛÉÂËÁ × Á×ÔÏÍÁÔÅ" + +#: locale/programs/charmap.c:849 locale/programs/ld-address.c:605 +#: locale/programs/ld-collate.c:2650 locale/programs/ld-collate.c:3818 +#: locale/programs/ld-ctype.c:2225 locale/programs/ld-ctype.c:2994 +#: locale/programs/ld-identification.c:469 +#: locale/programs/ld-measurement.c:255 locale/programs/ld-messages.c:349 +#: locale/programs/ld-monetary.c:958 locale/programs/ld-name.c:324 +#: locale/programs/ld-numeric.c:392 locale/programs/ld-paper.c:258 +#: locale/programs/ld-telephone.c:330 locale/programs/ld-time.c:1219 +#: locale/programs/locfile.c:825 locale/programs/repertoire.c:325 +#, c-format +msgid "%s: premature end of file" +msgstr "%s: ÐÒÅÖÄÅ×ÒÅÍÅÎÎÙÊ ËÏÎÅà ÆÁÊÌÁ" + +#: locale/programs/charmap.c:868 locale/programs/charmap.c:879 +#, c-format +msgid "unknown character `%s'" +msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË `%s'" + +#: locale/programs/charmap.c:887 +#, c-format +msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d" +msgstr "ÞÉÓÌÏ ÂÁÊÔ ÄÌÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÂÁÊÔ ÎÁÞÁÌÁ É ËÏÎÃÁ ÄÉÁÐÁÚÏÎÁ ÎÅ ÓÏ×ÐÁÄÁÀÔ: %d É %d" + +#: locale/programs/charmap.c:991 locale/programs/ld-collate.c:2930 +#: locale/programs/repertoire.c:420 +msgid "invalid names for character range" +msgstr "ÎÅÄÏÐÕÓÔÉÍÙÅ ÉÍÅÎÁ ÄÌÑ ÄÉÁÐÁÚÏÎÁ ÚÎÁËÏ×" + +#: locale/programs/charmap.c:1003 locale/programs/repertoire.c:432 +msgid "hexadecimal range format should use only capital characters" +msgstr "× ÛÅÓÔÎÁÄÃÁÔÉÒÉÞÎÏÍ ÆÏÒÍÁÔÅ ÄÉÁÐÁÚÏÎÁ ÓÌÅÄÕÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÏÌØËÏ ÚÁÇÌÁ×ÎÙÅ ÂÕË×Ù" + +#: locale/programs/charmap.c:1021 +#, c-format +msgid "<%s> and <%s> are illegal names for range" +msgstr "<%s> É <%s> -- ÎÅÄÏÐÕÓÔÉÍÙÅ ÉÍÅÎÁ ÄÌÑ ÄÉÁÐÁÚÏÎÁ" + +#: locale/programs/charmap.c:1027 +msgid "upper limit in range is not higher then lower limit" +msgstr "×ÅÒÈÎÑÑ ÇÒÁÎÉÃÁ ÄÉÁÐÁÚÏÎÁ ÎÅ ÂÏÌØÛÅ ÎÉÖÎÅÊ ÇÒÁÎÉÃÙ" + +#: locale/programs/charmap.c:1085 +msgid "resulting bytes for range not representable." +msgstr "ÒÅÚÕÌØÔÉÒÕÀÝÉÅ ÂÁÊÔÙ ÄÌÑ ÄÉÁÐÁÚÏÎÁ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ." + +#: locale/programs/ld-address.c:134 locale/programs/ld-collate.c:1534 +#: locale/programs/ld-ctype.c:421 locale/programs/ld-identification.c:134 +#: locale/programs/ld-measurement.c:95 locale/programs/ld-messages.c:98 +#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:95 +#: locale/programs/ld-numeric.c:99 locale/programs/ld-paper.c:92 +#: locale/programs/ld-telephone.c:95 locale/programs/ld-time.c:160 +#, c-format +msgid "No definition for %s category found" +msgstr "îÅ ÎÁÊÄÅÎÏ ÏÐÒÅÄÅÌÅÎÉÑ ÄÌÑ ËÁÔÅÇÏÒÉÉ %s" + +#: locale/programs/ld-address.c:145 locale/programs/ld-address.c:183 +#: locale/programs/ld-address.c:201 locale/programs/ld-address.c:228 +#: locale/programs/ld-address.c:290 locale/programs/ld-address.c:309 +#: locale/programs/ld-address.c:322 locale/programs/ld-identification.c:147 +#: locale/programs/ld-measurement.c:106 locale/programs/ld-monetary.c:206 +#: locale/programs/ld-monetary.c:250 locale/programs/ld-monetary.c:266 +#: locale/programs/ld-monetary.c:278 locale/programs/ld-name.c:106 +#: locale/programs/ld-name.c:143 locale/programs/ld-numeric.c:113 +#: locale/programs/ld-numeric.c:127 locale/programs/ld-paper.c:103 +#: locale/programs/ld-paper.c:112 locale/programs/ld-telephone.c:106 +#: locale/programs/ld-telephone.c:163 locale/programs/ld-time.c:176 +#: locale/programs/ld-time.c:197 +#, c-format +msgid "%s: field `%s' not defined" +msgstr "%s: ÐÏÌÅ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎÏ" + +#: locale/programs/ld-address.c:157 locale/programs/ld-address.c:209 +#: locale/programs/ld-address.c:235 locale/programs/ld-address.c:265 +#: locale/programs/ld-name.c:118 locale/programs/ld-telephone.c:118 +#, c-format +msgid "%s: field `%s' must not be empty" +msgstr "%s: ÐÏÌÅ `%s' ÄÏÌÖÎÏ ÂÙÔØ ÎÅÐÕÓÔÙÍ" + +#: locale/programs/ld-address.c:169 +#, c-format +msgid "%s: invalid escape `%%%c' sequence in field `%s'" +msgstr "%s: ÎÅ×ÅÒÎÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ `%%%c' × ÐÏÌÅ `%s'" + +#: locale/programs/ld-address.c:220 +#, c-format +msgid "%s: terminology language code `%s' not defined" +msgstr "" + +#: locale/programs/ld-address.c:247 locale/programs/ld-address.c:276 +#, c-format +msgid "%s: language abbreviation `%s' not defined" +msgstr "%s: ÓÏËÒÁÝÅÎÎÏÅ ÉÍÑ ÑÚÙËÁ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎÏ" + +#: locale/programs/ld-address.c:254 locale/programs/ld-address.c:282 +#: locale/programs/ld-address.c:316 locale/programs/ld-address.c:328 +#, c-format +msgid "%s: `%s' value does not match `%s' value" +msgstr "%s: ÚÎÁÞÅÎÉÅ `%s' ÎÅ ÓÏ×ÐÁÄÁÅÔ ÓÏ ÚÎÁÞÅÎÉÅÍ `%s'" + +#: locale/programs/ld-address.c:301 +#, c-format +msgid "%s: numeric country code `%d' not valid" +msgstr "%s: ÎÅ×ÅÒÎÙÊ ÞÉÓÌÏ×ÏÊ ËÏÄ ÓÔÒÁÎÙ `%d'" + +#: locale/programs/ld-address.c:497 locale/programs/ld-address.c:534 +#: locale/programs/ld-address.c:572 locale/programs/ld-ctype.c:2601 +#: locale/programs/ld-identification.c:365 +#: locale/programs/ld-measurement.c:222 locale/programs/ld-messages.c:302 +#: locale/programs/ld-monetary.c:700 locale/programs/ld-monetary.c:735 +#: locale/programs/ld-monetary.c:776 locale/programs/ld-name.c:281 +#: locale/programs/ld-numeric.c:264 locale/programs/ld-paper.c:225 +#: locale/programs/ld-telephone.c:289 locale/programs/ld-time.c:1108 +#: locale/programs/ld-time.c:1150 +#, c-format +msgid "%s: field `%s' declared more than once" +msgstr "%s: ÐÏÌÅ `%s' ÏÂßÑ×ÌÅÎÏ ÎÅÓËÏÌØËÏ ÒÁÚ" + +#: locale/programs/ld-address.c:501 locale/programs/ld-address.c:539 +#: locale/programs/ld-identification.c:369 locale/programs/ld-messages.c:312 +#: locale/programs/ld-monetary.c:704 locale/programs/ld-monetary.c:739 +#: locale/programs/ld-name.c:285 locale/programs/ld-numeric.c:268 +#: locale/programs/ld-telephone.c:293 locale/programs/ld-time.c:1002 +#: locale/programs/ld-time.c:1071 locale/programs/ld-time.c:1113 +#, c-format +msgid "%s: unknown character in field `%s'" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÐÏÌÅ `%s'" + +#: locale/programs/ld-address.c:586 locale/programs/ld-collate.c:3800 +#: locale/programs/ld-ctype.c:2974 locale/programs/ld-identification.c:450 +#: locale/programs/ld-measurement.c:236 locale/programs/ld-messages.c:331 +#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:306 +#: locale/programs/ld-numeric.c:374 locale/programs/ld-paper.c:240 +#: locale/programs/ld-telephone.c:312 locale/programs/ld-time.c:1201 +#, c-format +msgid "%s: incomplete `END' line" +msgstr "%s: ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÓÔÒÏËÁ `END'" + +#: locale/programs/ld-address.c:589 locale/programs/ld-collate.c:2653 +#: locale/programs/ld-collate.c:3802 locale/programs/ld-ctype.c:2228 +#: locale/programs/ld-ctype.c:2977 locale/programs/ld-identification.c:453 +#: locale/programs/ld-measurement.c:239 locale/programs/ld-messages.c:333 +#: locale/programs/ld-monetary.c:942 locale/programs/ld-name.c:308 +#: locale/programs/ld-numeric.c:376 locale/programs/ld-paper.c:242 +#: locale/programs/ld-telephone.c:314 locale/programs/ld-time.c:1203 +#, c-format +msgid "%1$s: definition does not end with `END %1$s'" +msgstr "%1$s: ÏÐÒÅÄÅÌÅÎÉÅ ÎÅ ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÎÁ `END %1$s'" + +#: locale/programs/ld-address.c:596 locale/programs/ld-collate.c:523 +#: locale/programs/ld-collate.c:575 locale/programs/ld-collate.c:871 +#: locale/programs/ld-collate.c:884 locale/programs/ld-collate.c:2640 +#: locale/programs/ld-collate.c:3809 locale/programs/ld-ctype.c:1956 +#: locale/programs/ld-ctype.c:2215 locale/programs/ld-ctype.c:2799 +#: locale/programs/ld-ctype.c:2985 locale/programs/ld-identification.c:460 +#: locale/programs/ld-measurement.c:246 locale/programs/ld-messages.c:340 +#: locale/programs/ld-monetary.c:949 locale/programs/ld-name.c:315 +#: locale/programs/ld-numeric.c:383 locale/programs/ld-paper.c:249 +#: locale/programs/ld-telephone.c:321 locale/programs/ld-time.c:1210 +#, c-format +msgid "%s: syntax error" +msgstr "%s: ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ" + +#: locale/programs/ld-collate.c:398 +#, c-format +msgid "`%.*s' already defined in charmap" +msgstr "" + +#: locale/programs/ld-collate.c:407 +#, c-format +msgid "`%.*s' already defined in repertoire" +msgstr "`%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎÏ × ÒÅÐÅÒÔÕÁÒÅ" + +#: locale/programs/ld-collate.c:414 +#, c-format +msgid "`%.*s' already defined as collating symbol" +msgstr "`%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎÏ ËÁË ÓÉÍ×ÏÌ ÓÏÒÔÉÒÏ×ËÉ" + +#: locale/programs/ld-collate.c:421 +#, c-format +msgid "`%.*s' already defined as collating element" +msgstr "`%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎÏ ËÁË ÜÌÅÍÅÎÔ ÓÏÒÔÉÒÏ×ËÉ" + +#: locale/programs/ld-collate.c:452 locale/programs/ld-collate.c:478 +#, c-format +msgid "%s: `forward' and `backward' are mutually excluding each other" +msgstr "%s: `forward' É `backward' ×ÚÁÉÍÎÏ ÉÓËÌÀÞÁÀÔÓÑ" + +#: locale/programs/ld-collate.c:462 locale/programs/ld-collate.c:488 +#: locale/programs/ld-collate.c:504 +#, c-format +msgid "%s: `%s' mentioned more than once in definition of weight %d" +msgstr "%s: `%s' ×ÓÔÒÅÞÁÅÔÓÑ ÂÏÌÅÅ ÏÄÎÏÇÏ ÒÁÚÁ × ÏÐÒÅÄÅÌÅÎÉÉ ×ÅÓÁ %d" + +#: locale/programs/ld-collate.c:560 +#, c-format +msgid "%s: too many rules; first entry only had %d" +msgstr "%s: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÐÒÁ×ÉÌ; × ÐÅÒ×ÏÍ ×ÈÏÖÄÅÎÉÉ ÂÙÌÏ ÔÏÌØËÏ %d" + +#: locale/programs/ld-collate.c:596 +#, c-format +msgid "%s: not enough sorting rules" +msgstr "%s: ÎÅÄÏÓÔÁÔÏÞÎÏ ÐÒÁ×ÉÌ ÓÏÒÔÉÒÏ×ËÉ" + +#: locale/programs/ld-collate.c:761 +#, c-format +msgid "%s: empty weight string not allowed" +msgstr "%s: ÐÕÓÔÁÑ ÓÔÒÏËÁ ×ÅÓÁ ÎÅÄÏÐÕÓÔÉÍÁ" + +#: locale/programs/ld-collate.c:856 +#, c-format +msgid "%s: weights must use the same ellipsis symbol as the name" +msgstr "%s: ×ÅÓÁ ÄÏÌÖÎÙ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÁËÏÊ ÖÅ ÓÉÍ×ÏÌ ÜÌÌÉÐÓÉÓÁ, ËÁË ÉÍÑ" + +#: locale/programs/ld-collate.c:912 +#, c-format +msgid "%s: too many values" +msgstr "%s: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÚÎÁÞÅÎÉÊ" + +#: locale/programs/ld-collate.c:1031 locale/programs/ld-collate.c:1206 +#, c-format +msgid "order for `%.*s' already defined at %s:%Zu" +msgstr "ÐÏÒÑÄÏË ÄÌÑ `%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎ × %s:%Zu" + +#: locale/programs/ld-collate.c:1081 +#, c-format +msgid "%s: the start and the end symbol of a range must stand for characters" +msgstr "%s: ÎÁÞÁÌØÎÙÊ É ËÏÎÅÞÎÙÊ ÓÉÍ×ÏÌÙ ÄÉÁÐÁÚÏÎÁ ÄÏÌÖÎÙ ÏÂÏÚÎÁÞÁÔØ ÚÎÁËÉ" + +#: locale/programs/ld-collate.c:1108 +#, c-format +msgid "%s: byte sequences of first and last character must have the same length" +msgstr "%s: ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÂÁÊÔ ÄÌÑ ÐÅÒ×ÏÇÏ É ÐÏÓÌÅÄÎÅÇÏ ÚÎÁËÁ ÄÏÌÖÎÙ ÂÙÔØ ÏÄÉÎÁËÏ×ÏÊ ÄÌÉÎÙ" + +#: locale/programs/ld-collate.c:1150 +#, c-format +msgid "%s: byte sequence of first character of sequence is not lower than that of the last character" +msgstr "%s: ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÂÁÊÔ ÄÌÑ ÐÅÒ×ÏÇÏ ÚÎÁËÁ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÎÅ ÍÅÎØÛÅ ÞÅÍ ÄÌÑ ÐÏÓÌÅÄÎÅÇÏ" + +#: locale/programs/ld-collate.c:1275 +#, c-format +msgid "%s: symbolic range ellipsis must not directly follow `order_start'" +msgstr "%s: ÜÌÌÉÐÓÉÓ ÓÉÍ×ÏÌØÎÏÇÏ ÄÉÁÐÁÚÏÎÁ ÎÅ ÍÏÖÅÔ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÓÌÅÄÏ×ÁÔØ ÐÏÓÌÅ `order_start'" + +#: locale/programs/ld-collate.c:1279 +#, c-format +msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'" +msgstr "%s: ÐÏÓÌÅ ÜÌÌÉÐÓÉÓÁ ÓÉÍ×ÏÌØÎÏÇÏ ÄÉÁÐÁÚÏÎÁ ÎÅ ÍÏÖÅÔ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÓÌÅÄÏ×ÁÔØ `order_end'" + +#: locale/programs/ld-collate.c:1299 locale/programs/ld-ctype.c:1476 +#, c-format +msgid "`%s' and `%.*s' are no valid names for symbolic range" +msgstr "`%s' É `%.*s' ÎÅ Ñ×ÌÑÀÔÓÑ ×ÅÒÎÙÍÉ ÉÍÅÎÁÍÉ ÓÉÍ×ÏÌØÎÏÇÏ ÄÉÁÐÏÚÏÎÁ" + +#: locale/programs/ld-collate.c:1348 locale/programs/ld-collate.c:3737 +#, c-format +msgid "%s: order for `%.*s' already defined at %s:%Zu" +msgstr "%s: ÐÏÒÑÄÏË ÄÌÑ `%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎ × %s:%Zu" + +#: locale/programs/ld-collate.c:1357 +#, c-format +msgid "%s: `%s' must be a character" +msgstr "%s: `%s' ÄÏÌÖÎÏ ÂÙÔØ ÚÎÁËÏÍ" + +#: locale/programs/ld-collate.c:1550 +#, c-format +msgid "%s: `position' must be used for a specific level in all sections or none" +msgstr "%s: `position' ÄÏÌÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÄÌÑ ÏÄÎÏÇÏ ËÏÎËÒÅÔÎÏÇÏ ÕÒÏ×ÎÑ ÌÉÂÏ ×Ï ×ÓÅÈ ÓÅËÃÉÑÈ, ÌÉÂÏ ÎÉ × ÏÄÎÏÊ" + +#: locale/programs/ld-collate.c:1575 +#, c-format +msgid "symbol `%s' not defined" +msgstr "ÓÉÍ×ÏÌ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎ" + +#: locale/programs/ld-collate.c:1651 locale/programs/ld-collate.c:1757 +#, c-format +msgid "symbol `%s' has the same encoding as" +msgstr "ÓÉÍ×ÏÌ `%s' ÉÍÅÅÔ ÔÁËÕÀ ÖÅ ËÏÄÉÒÏ×ËÕ ËÁË" + +#: locale/programs/ld-collate.c:1655 locale/programs/ld-collate.c:1761 +#, c-format +msgid "symbol `%s'" +msgstr "ÓÉÍ×ÏÌ `%s'" + +#: locale/programs/ld-collate.c:1803 +msgid "no definition of `UNDEFINED'" +msgstr "ÎÅÔ ÏÐÒÅÄÅÌÅÎÉÑ ÄÌÑ `UNDEFINED'" + +#: locale/programs/ld-collate.c:1832 +msgid "too many errors; giving up" +msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÏÛÉÂÏË; ËÏÎÅÃ" + +#: locale/programs/ld-collate.c:2735 +#, c-format +msgid "%s: duplicate definition of `%s'" +msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ `%s'" + +#: locale/programs/ld-collate.c:2771 +#, c-format +msgid "%s: duplicate declaration of section `%s'" +msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÂßÑ×ÌÅÎÉÅ ÓÅËÃÉÉ `%s'" + +#: locale/programs/ld-collate.c:2910 +#, c-format +msgid "%s: unknown character in collating symbol name" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÉÍÅÎÉ ÓÉÍ×ÏÌÁ ÓÏÒÔÉÒÏ×ËÉ" + +#: locale/programs/ld-collate.c:3042 +#, c-format +msgid "%s: unknown character in equivalent definition name" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÉÍÅÎÉ ÏÐÒÅÄÅÌÅÎÉÑ ÜË×É×ÁÌÅÎÔÎÏÓÔÉ" + +#: locale/programs/ld-collate.c:3055 +#, c-format +msgid "%s: unknown character in equivalent definition value" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÚÎÁÞÅÎÉÉ ÏÐÒÅÄÅÌÅÎÁÑ ÜË×É×ÁÌÅÎÔÎÏÓÔÉ" + +#: locale/programs/ld-collate.c:3065 +#, c-format +msgid "%s: unknown symbol `%s' in equivalent definition" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÓÉÍ×ÏÌ `%s' × ÏÐÒÅÄÅÌÅÎÉÉ ÜË×É×ÁÌÅÎÔÎÏÓÔÉ" + +#: locale/programs/ld-collate.c:3074 +msgid "error while adding equivalent collating symbol" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÄÏÂÁ×ÌÅÎÉÉ ÜË×É×ÁÌÅÎÔÎÏÇÏ ÓÉÍ×ÏÌÁ ÓÏÒÔÉÒÏ×ËÉ" + +#: locale/programs/ld-collate.c:3104 +#, c-format +msgid "duplicate definition of script `%s'" +msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÓÉÓÔÅÍÙ ÐÉÓØÍÁ `%s'" + +#: locale/programs/ld-collate.c:3152 +#, c-format +msgid "%s: unknown section name `%s'" +msgstr "%s: ÎÅÉÚ×ÅÓÔÎÏÅ ÉÍÑ ÓÅËÃÉÉ `%s'" + +#: locale/programs/ld-collate.c:3180 +#, c-format +msgid "%s: multiple order definitions for section `%s'" +msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÐÏÒÑÄËÁ ÄÌÑ ÓÅËÃÉÉ `%s'" + +#: locale/programs/ld-collate.c:3205 +#, c-format +msgid "%s: invalid number of sorting rules" +msgstr "%s: ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÒÁ×ÉÌ ÓÏÒÔÉÒÏ×ËÉ" + +#: locale/programs/ld-collate.c:3232 +#, c-format +msgid "%s: multiple order definitions for unnamed section" +msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÐÏÒÑÄËÁ ÄÌÑ ÂÅÚÙÍÑÎÎÏÊ ÓÅËÃÉÉ" + +#: locale/programs/ld-collate.c:3286 locale/programs/ld-collate.c:3414 +#: locale/programs/ld-collate.c:3778 +#, c-format +msgid "%s: missing `order_end' keyword" +msgstr "%s: ÐÒÏÐÕÝÅÎÏ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï `order_end'" + +#: locale/programs/ld-collate.c:3347 +#, c-format +msgid "%s: order for collating symbol %.*s not yet defined" +msgstr "%s: ÐÏÒÑÄÏË ÄÌÑ ÓÉÍ×ÏÌÁ ÓÏÒÔÉÒÏ×ËÉ %.*s ÅÝÅ ÎÅ ÏÐÒÅÄÅÌÅÎ" + +#: locale/programs/ld-collate.c:3365 +#, c-format +msgid "%s: order for collating element %.*s not yet defined" +msgstr "%s: ÐÏÒÑÄÏË ÄÌÑ ÜÌÅÍÅÎÔÁ ÓÏÒÔÉÒÏ×ËÉ %.*s ÅÝÅ ÎÅ ÏÐÒÅÄÅÌÅÎ" + +#: locale/programs/ld-collate.c:3376 +#, c-format +msgid "%s: cannot reorder after %.*s: symbol not known" +msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÐÏÍÅÎÑÔØ ÐÏÒÑÄÏË ÐÏÓÌÅ %.*s: ÓÉÍ×ÏÌ ÎÅÉÚ×ÅÓÔÅÎ" + +#: locale/programs/ld-collate.c:3428 locale/programs/ld-collate.c:3790 +#, c-format +msgid "%s: missing `reorder-end' keyword" +msgstr "%s: ÐÒÏÐÕÝÅÎÏ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï `reorder-end'" + +#: locale/programs/ld-collate.c:3462 locale/programs/ld-collate.c:3662 +#, c-format +msgid "%s: section `%.*s' not known" +msgstr "%s: ÓÅËÃÉÑ `%.*s' ÎÅÉÚ×ÅÓÔÎÁ" + +#: locale/programs/ld-collate.c:3527 +#, c-format +msgid "%s: bad symbol <%.*s>" +msgstr "%s: ÎÅÐÒÁ×ÉÌØÎÙÊ ÓÉÍ×ÏÌ <%.*s>" + +#: locale/programs/ld-collate.c:3725 +#, c-format +msgid "%s: cannot have `%s' as end of ellipsis range" +msgstr "%s: `%s' ÎÅ ÍÏÖÅÔ ÂÙÔØ ËÏÎÃÏÍ ÄÉÁÐÁÚÏÎÁ Ó ÜÌÌÉÐÓÉÓÏÍ" + +#: locale/programs/ld-collate.c:3774 +#, c-format +msgid "%s: empty category description not allowed" +msgstr "%s: ÐÕÓÔÙÅ ÏÐÉÓÁÎÉÑ ËÁÔÅÇÏÒÉÊ ÎÅÄÏÐÕÓÔÉÍÙ" + +#: locale/programs/ld-collate.c:3793 +#, c-format +msgid "%s: missing `reorder-sections-end' keyword" +msgstr "%s: ÐÒÏÐÕÝÅÎÏ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï `reorder-sections-end'" + +#: locale/programs/ld-ctype.c:440 +msgid "No character set name specified in charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:469 +#, c-format +msgid "character L'\\u%0*x' in class `%s' must be in class `%s'" +msgstr "ÚÎÁË L'\\u%0*x' × ËÌÁÓÓÅ `%s' ÄÏÌÖÅÎ ÂÙÔØ × ËÌÁÓÓÅ `%s'" + +#: locale/programs/ld-ctype.c:484 +#, c-format +msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'" +msgstr "ÚÎÁË L'\\u%0*x' × ËÌÁÓÓÅ `%s' ÎÅ ÄÏÌÖÅÎ ÂÙÔØ × ËÌÁÓÓÅ `%s'" + +#: locale/programs/ld-ctype.c:498 locale/programs/ld-ctype.c:556 +#, c-format +msgid "internal error in %s, line %u" +msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ × %s, ÓÔÒÏËÁ %u" + +#: locale/programs/ld-ctype.c:527 +#, c-format +msgid "character '%s' in class `%s' must be in class `%s'" +msgstr "ÚÎÁË '%s' × ËÌÁÓÓÅ `%s' ÄÏÌÖÅÎ ÂÙÔØ × ËÌÁÓÓÅ `%s'" + +#: locale/programs/ld-ctype.c:543 +#, c-format +msgid "character '%s' in class `%s' must not be in class `%s'" +msgstr "ÚÎÁË '%s' × ËÌÁÓÓÅ `%s' ÎÅ ÄÏÌÖÅÎ ÂÙÔØ × ËÌÁÓÓÅ `%s'" + +#: locale/programs/ld-ctype.c:573 locale/programs/ld-ctype.c:611 +#, c-format +msgid "<SP> character not in class `%s'" +msgstr "ÚÎÁË <SP> ÎÅ × ËÌÁÓÓÅ `%s'" + +#: locale/programs/ld-ctype.c:585 locale/programs/ld-ctype.c:622 +#, c-format +msgid "<SP> character must not be in class `%s'" +msgstr "ÚÎÁË <SP> ÎÅ ÄÏÌÖÅÎ ÂÙÔØ × ËÌÁÓÓÅ `%s'" + +#: locale/programs/ld-ctype.c:600 +msgid "character <SP> not defined in character map" +msgstr "" + +#: locale/programs/ld-ctype.c:714 +msgid "`digit' category has not entries in groups of ten" +msgstr "×ÈÏÖÄÅÎÉÑ ËÁÔÅÇÏÒÉÉ `digit' ÎÅ ÇÒÕÐÐÉÒÕÀÔÓÑ ÐÏ ÄÅÓÑÔØ" + +#: locale/programs/ld-ctype.c:763 +msgid "no input digits defined and none of the standard names in the charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:828 +msgid "not all characters used in `outdigit' are available in the charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:845 +msgid "not all characters used in `outdigit' are available in the repertoire" +msgstr "ÎÅ ×ÓÅ ÚÎÁËÉ, ÉÓÐÏÌØÚÏ×ÁÎÎÙÅ × `outdigit', ÄÏÓÔÕÐÎÙ × ÄÁÎÎÏÍ ÒÅÐÅÒÔÕÁÒÅ" + +#: locale/programs/ld-ctype.c:1244 +#, c-format +msgid "character class `%s' already defined" +msgstr "ËÌÁÓÓ ÚÎÁËÏ× `%s' ÕÖÅ ÏÐÒÅÄÅÌÅÎ" + +#: locale/programs/ld-ctype.c:1250 +#, c-format +msgid "implementation limit: no more than %Zd character classes allowed" +msgstr "ÏÇÒÁÎÉÞÅÎÉÅ ÒÅÁÌÉÚÁÃÉÉ: ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÎÅ ÂÏÌÅÅ %Zd ËÌÁÓÓÏ× ÚÎÁËÏ×" + +#: locale/programs/ld-ctype.c:1276 +#, c-format +msgid "character map `%s' already defined" +msgstr "" + +#: locale/programs/ld-ctype.c:1282 +#, c-format +msgid "implementation limit: no more than %d character maps allowed" +msgstr "" + +#: locale/programs/ld-ctype.c:1547 locale/programs/ld-ctype.c:1672 +#: locale/programs/ld-ctype.c:1778 locale/programs/ld-ctype.c:2464 +#: locale/programs/ld-ctype.c:3460 +#, c-format +msgid "%s: field `%s' does not contain exactly ten entries" +msgstr "%s: ÐÏÌÅ `%s' ÎÅ ÓÏÄÅÒÖÉÔ ÒÏ×ÎÏ ÄÅÓÑÔØ ×ÈÏÖÄÅÎÉÊ" + +#: locale/programs/ld-ctype.c:1575 locale/programs/ld-ctype.c:2146 +#, c-format +msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>" +msgstr "×ÅÒÈÎÅÅ ÚÎÁÞÅÎÉÅ ÄÉÁÐÁÚÏÎÁ <U%0*X> ÍÅÎØÛÅ ÞÅÍ ÎÉÖÎÅÅ ÚÎÁÞÅÎÉÅ <U%0*X>" + +#: locale/programs/ld-ctype.c:1702 +msgid "start and end character sequence of range must have the same length" +msgstr "ÎÁÞÁÌØÎÁÑ É ËÏÎÅÞÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÚÎÁËÏ× ÄÉÁÐÁÚÏÎÁ ÄÏÌÖÎÙ ÂÙÔØ ÏÄÉÎÁËÏ×ÏÊ ÄÌÉÎÙ" + +#: locale/programs/ld-ctype.c:1709 +msgid "to-value character sequence is smaller than from-value sequence" +msgstr "ËÏÎÅÞÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÚÎÁËÏ× ÄÉÁÐÁÚÏÎÁ ÍÅÎØÛÅ ÞÅÍ ÎÁÞÁÌØÎÁÑ" + +#: locale/programs/ld-ctype.c:2066 locale/programs/ld-ctype.c:2117 +msgid "premature end of `translit_ignore' definition" +msgstr "ÐÒÅÖÄÅ×ÒÅÍÅÎÎÙÊ ËÏÎÅà ÏÐÒÅÄÅÌÅÎÉÑ `translit_ignore'" + +#: locale/programs/ld-ctype.c:2072 locale/programs/ld-ctype.c:2123 +#: locale/programs/ld-ctype.c:2165 +msgid "syntax error" +msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ" + +#: locale/programs/ld-ctype.c:2296 +#, c-format +msgid "%s: syntax error in definition of new character class" +msgstr "%s: ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÏÐÒÅÄÅÌÅÎÉÉ ÎÏ×ÏÇÏ ËÌÁÓÓÁ ÚÎÁËÏ×" + +#: locale/programs/ld-ctype.c:2311 +#, c-format +msgid "%s: syntax error in definition of new character map" +msgstr "" + +#: locale/programs/ld-ctype.c:2486 +msgid "ellipsis range must be marked by two operands of same type" +msgstr "ÄÉÁÐÁÚÏÎ Ó ÜÌÌÉÐÓÉÓÏÍ ÄÏÌÖÅÎ ÂÙÔØ ÐÏÍÅÞÅÎ Ä×ÕÍÑ ÏÐÅÒÁÎÄÁÍÉ ÏÄÎÏÇÏ ÔÉÐÁ" + +#: locale/programs/ld-ctype.c:2495 +msgid "with symbolic name range values the absolute ellipsis `...' must not be used" +msgstr "Ó ÓÉÍ×ÏÌØÎÙÍÉ ÉÍÅÎÁÍÉ ÚÎÁÞÅÎÉÊ ÄÉÁÐÁÚÏÎÁ ÎÅÌØÚÑ ÉÓÐÏÌØÚÏ×ÁÔØ ÁÂÓÏÌÀÔÎÙÊ ÜÌÌÉÐÓÉÓ `...'" + +#: locale/programs/ld-ctype.c:2510 +msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'" +msgstr "Ó UCS-ÚÎÁÞÅÎÉÑÍÉ ÄÉÁÐÁÚÏÎÁ ÓÌÅÄÕÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÛÅÓÔÎÁÄÃÁÔÉÒÉÞÎÙÊ ÓÉÍ×ÏÌØÎÙÊ ÜÌÌÉÐÓÉÓ `..'" + +#: locale/programs/ld-ctype.c:2524 +msgid "with character code range values one must use the absolute ellipsis `...'" +msgstr "ÓÏ ÚÎÁËÏ×ÙÍÉ ËÏÄÁÍÉ ÚÎÁÞÅÎÉÊ ÄÉÁÐÁÚÏÎÁ ÓÌÅÄÕÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÁÂÓÏÌÀÔÎÙÊ ÜÌÌÉÐÓÉÓ `...'" + +#: locale/programs/ld-ctype.c:2675 +#, c-format +msgid "duplicated definition for mapping `%s'" +msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÏÔÏÂÒÁÖÅÎÉÑ `%s'" + +#: locale/programs/ld-ctype.c:2761 locale/programs/ld-ctype.c:2905 +#, c-format +msgid "%s: `translit_start' section does not end with `translit_end'" +msgstr "%s: ÓÅËÃÉÑ `translit_start' ÎÅ ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÎÁ `translit_end'" + +#: locale/programs/ld-ctype.c:2856 +#, c-format +msgid "%s: duplicate `default_missing' definition" +msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ `default_missing'" + +#: locale/programs/ld-ctype.c:2861 +msgid "previous definition was here" +msgstr "ÐÒÅÄÙÄÕÝÅÅ ÏÐÒÅÄÅÌÅÎÉÅ ÂÙÌÏ ÚÄÅÓØ" + +#: locale/programs/ld-ctype.c:2883 +#, c-format +msgid "%s: no representable `default_missing' definition found" +msgstr "%s: ÎÅ ÎÁÊÄÅÎÏ ÐÒÅÄÓÔÁ×ÉÍÏÇÏ ÏÐÒÅÄÅÌÅÎÉÑ `default_missing'" + +#: locale/programs/ld-ctype.c:3036 +#, c-format +msgid "%s: character `%s' not defined in charmap while needed as default value" +msgstr "" + +#: locale/programs/ld-ctype.c:3041 locale/programs/ld-ctype.c:3125 +#: locale/programs/ld-ctype.c:3145 locale/programs/ld-ctype.c:3166 +#: locale/programs/ld-ctype.c:3187 locale/programs/ld-ctype.c:3208 +#: locale/programs/ld-ctype.c:3229 locale/programs/ld-ctype.c:3269 +#: locale/programs/ld-ctype.c:3290 locale/programs/ld-ctype.c:3357 +#, c-format +msgid "%s: character `%s' in charmap not representable with one byte" +msgstr "" + +#: locale/programs/ld-ctype.c:3120 locale/programs/ld-ctype.c:3140 +#: locale/programs/ld-ctype.c:3182 locale/programs/ld-ctype.c:3203 +#: locale/programs/ld-ctype.c:3224 locale/programs/ld-ctype.c:3264 +#: locale/programs/ld-ctype.c:3285 locale/programs/ld-ctype.c:3352 +#: locale/programs/ld-ctype.c:3394 locale/programs/ld-ctype.c:3419 +#, c-format +msgid "%s: character `%s' not defined while needed as default value" +msgstr "%s: ÚÎÁË `%s' ÎÅ ÏÐÒÅÄÅÌÅÎ, ÈÏÔÑ ÏÎ ÎÕÖÅÎ ËÁË ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ" + +#: locale/programs/ld-ctype.c:3161 +#, c-format +msgid "character `%s' not defined while needed as default value" +msgstr "ÚÎÁË `%s' ÎÅ ÏÐÒÅÄÅÌÅÎ, ÈÏÔÑ ÏÎ ÎÕÖÅÎ ËÁË ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ" + +#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426 +#, c-format +msgid "%s: character `%s' needed as default value not representable with one byte" +msgstr "%s: ÚÎÁË `%s' ÎÕÖÅÎ ËÁË ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ, ÎÏ ÅÇÏ ÎÅÌØÚÑ ÐÒÅÄÓÔÁ×ÉÔØ ÏÄÎÉÍ ÂÁÊÔÏÍ" + +#: locale/programs/ld-ctype.c:3481 +msgid "no output digits defined and none of the standard names in the charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:3772 +#, c-format +msgid "%s: transliteration data from locale `%s' not available" +msgstr "%s: ÎÅÔ ÄÁÎÎÙÈ ÄÌÑ ÔÒÁÎÓÌÉÔÅÒÁÃÉÉ ÉÚ ÌÏËÁÌÉ `%s'" + +#: locale/programs/ld-ctype.c:3868 +#, c-format +msgid "%s: table for class \"%s\": %lu bytes\n" +msgstr "%s: ÔÁÂÌÉÃÁ ÄÌÑ ËÌÁÓÓÁ \"%s\": %lu ÂÁÊÔ\n" + +#: locale/programs/ld-ctype.c:3937 +#, c-format +msgid "%s: table for map \"%s\": %lu bytes\n" +msgstr "" + +#: locale/programs/ld-ctype.c:4070 +#, c-format +msgid "%s: table for width: %lu bytes\n" +msgstr "%s: ÔÁÂÌÉÃÁ ÄÌÑ ÛÉÒÉÎÙ: %lu ÂÁÊÔ\n" + +#: locale/programs/ld-identification.c:171 +#, c-format +msgid "%s: no identification for category `%s'" +msgstr "%s: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÃÉÉ ÄÌÑ ËÁÔÅÇÏÒÉÉ `%s'" + +#: locale/programs/ld-identification.c:436 +#, c-format +msgid "%s: duplicate category version definition" +msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ×ÅÒÓÉÉ ËÁÔÅÇÏÒÉÉ" + +#: locale/programs/ld-measurement.c:114 +#, c-format +msgid "%s: invalid value for field `%s'" +msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s'" + +#: locale/programs/ld-messages.c:115 locale/programs/ld-messages.c:149 +#, c-format +msgid "%s: field `%s' undefined" +msgstr "%s: ÐÏÌÅ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎÏ" + +#: locale/programs/ld-messages.c:122 locale/programs/ld-messages.c:156 +#, c-format +msgid "%s: value for field `%s' must not be an empty string" +msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÏ ÂÙÔØ ÐÕÓÔÏÊ ÓÔÒÏËÏÊ" + +#: locale/programs/ld-messages.c:138 locale/programs/ld-messages.c:172 +#, c-format +msgid "%s: no correct regular expression for field `%s': %s" +msgstr "%s: ÎÅÔ ÐÒÁ×ÉÌØÎÏÇÏ ÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ ÄÌÑ ÐÏÌÑ `%s': %s" + +#: locale/programs/ld-monetary.c:224 +#, c-format +msgid "%s: value of field `int_curr_symbol' has wrong length" +msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `int_curr_symbol' ÉÍÅÅÔ ÎÅÐÒÁ×ÉÌØÎÕÀ ÄÌÉÎÕ" + +#: locale/programs/ld-monetary.c:237 +#, c-format +msgid "%s: value of field `int_curr_symbol' does not correspond to a valid name in ISO 4217" +msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `int_curr_symbol' ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÎÉ ÏÄÎÏÍÕ ×ÅÒÎÏÍÕ ÉÍÅÎÉ ÉÚ ISO 4217" + +#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:119 +#, c-format +msgid "%s: value for field `%s' must not be the empty string" +msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÏ ÂÙÔØ ÐÕÓÔÏÊ ÓÔÒÏËÏÊ" + +#: locale/programs/ld-monetary.c:284 locale/programs/ld-monetary.c:314 +#, c-format +msgid "%s: value for field `%s' must be in range %d...%d" +msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÄÏÌÖÎÏ ÂÙÔØ × ÄÉÁÐÁÚÏÎÅ %d...%d" + +#: locale/programs/ld-monetary.c:746 locale/programs/ld-numeric.c:275 +#, c-format +msgid "%s: value for field `%s' must be a single character" +msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÄÏÌÖÎÏ ÂÙÔØ ÏÄÎÉÍ ÚÎÁËÏÍ" + +#: locale/programs/ld-monetary.c:843 locale/programs/ld-numeric.c:319 +#, c-format +msgid "%s: `-1' must be last entry in `%s' field" +msgstr "%s: `-1' ÄÏÌÖÎÏ ÂÙÔØ ÐÏÓÌÅÄÎÉÍ ×ÈÏÖÄÅÎÉÅ × ÐÏÌÅ `%s'" + +#: locale/programs/ld-monetary.c:865 locale/programs/ld-numeric.c:340 +#, c-format +msgid "%s: values for field `%s' must be smaller than 127" +msgstr "%s: ÚÎÁÞÅÎÉÑ ÐÏÌÑ `%s' ÄÏÌÖÎÙ ÂÙÔØ ÍÅÎØÛÅ 127" + +#: locale/programs/ld-monetary.c:908 +msgid "conversion rate value cannot be zero" +msgstr "" + +#: locale/programs/ld-name.c:130 locale/programs/ld-telephone.c:127 +#: locale/programs/ld-telephone.c:150 +#, c-format +msgid "%s: invalid escape sequence in field `%s'" +msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ÐÏÌÅ `%s'" + +#: locale/programs/ld-time.c:248 +#, c-format +msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'" +msgstr "%s: ÆÌÁÇ ÎÁÐÒÁ×ÌÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era' ÎÅ '+' É ÎÅ '-'" + +#: locale/programs/ld-time.c:259 +#, c-format +msgid "%s: direction flag in string %Zd in `era' field is not a single character" +msgstr "%s: ÆÌÁÇ ÎÁÐÒÁ×ÌÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era' ÎÅ Ñ×ÌÑÅÔÓÑ ÏÄÎÉÍ ÚÎÁËÏÍ" + +#: locale/programs/ld-time.c:272 +#, c-format +msgid "%s: invalid number for offset in string %Zd in `era' field" +msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÏÅ ÞÉÓÌÏ ÄÌÑ ÓÍÅÝÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'" + +#: locale/programs/ld-time.c:280 +#, c-format +msgid "%s: garbage at end of offset value in string %Zd in `era' field" +msgstr "%s: ÍÕÓÏÒ × ËÏÎÃÅ ÚÎÁÞÅÎÉÑ ÓÍÅÝÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'" + +#: locale/programs/ld-time.c:331 +#, c-format +msgid "%s: invalid starting date in string %Zd in `era' field" +msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÁÑ ÎÁÞÁÌØÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'" + +#: locale/programs/ld-time.c:340 +#, c-format +msgid "%s: garbage at end of starting date in string %Zd in `era' field " +msgstr "%s: ÍÕÓÏÒ × ËÏÎÃÅ ÎÁÞÁÌØÎÏÊ ÄÁÔÙ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'" + +#: locale/programs/ld-time.c:359 +#, c-format +msgid "%s: starting date is invalid in string %Zd in `era' field" +msgstr "%s: ÎÅ×ÅÒÎÁÑ ÎÁÞÁÌØÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'" + +#: locale/programs/ld-time.c:408 +#, c-format +msgid "%s: invalid stopping date in string %Zd in `era' field" +msgstr "%s: ÎÅ×ÅÒÎÁÑ ËÏÎÅÞÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'" + +#: locale/programs/ld-time.c:417 +#, c-format +msgid "%s: garbage at end of stopping date in string %Zd in `era' field" +msgstr "%s: ÍÕÓÏÒ × ËÏÎÃÅ ËÏÎÅÞÎÏÊ ÄÁÔÙ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'" + +#: locale/programs/ld-time.c:436 +#, c-format +msgid "%s: stopping date is invalid in string %Zd in `era' field" +msgstr "%s: ÎÅ×ÅÒÎÁÑ ËÏÎÅÞÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'" + +#: locale/programs/ld-time.c:445 +#, c-format +msgid "%s: missing era name in string %Zd in `era' field" +msgstr "%s: ÐÒÏÐÕÝÅÎÏ ÉÍÑ ÜÒÙ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'" + +#: locale/programs/ld-time.c:457 +#, c-format +msgid "%s: missing era format in string %Zd in `era' field" +msgstr "%s: ÐÒÏÐÕÝÅÎ ÆÏÒÍÁÔ ÜÒÙ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'" + +#: locale/programs/ld-time.c:486 +#, c-format +msgid "%s: third operand for value of field `%s' must not be larger than %d" +msgstr "%s: ÔÒÅÔÉÊ ÏÐÅÒÁÎÄ ÄÌÑ ÚÎÁÞÅÎÉÑ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÅÎ ÂÙÔØ ÂÏÌØÛÅ %d" + +#: locale/programs/ld-time.c:494 locale/programs/ld-time.c:502 +#, c-format +msgid "%s: values of field `%s' must not be larger than %d" +msgstr "%s: ÚÎÁÞÅÎÉÑ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÙ ÂÙÔØ ÂÏÌØÛÅ %d" + +#: locale/programs/ld-time.c:510 +#, c-format +msgid "%s: values for field `%s' must not be larger than %d" +msgstr "%s: ÚÎÁÞÅÎÉÑ ÄÌÑ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÙ ÂÙÔØ ÂÏÌØÛÅ %d" + +#: locale/programs/ld-time.c:986 +#, c-format +msgid "%s: too few values for field `%s'" +msgstr "%s: ÓÌÉÛËÏÍ ÍÁÌÏ ÚÎÁÞÅÎÉÊ ÄÌÑ ÐÏÌÑ `%s'" + +#: locale/programs/ld-time.c:1031 +msgid "extra trailing semicolon" +msgstr "ÌÉÛÎÅÅ Ä×ÏÅÔÏÞÉÅ × ËÏÎÃÅ" + +#: locale/programs/ld-time.c:1034 +#, c-format +msgid "%s: too many values for field `%s'" +msgstr "%s: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÚÎÁÞÅÎÉÊ ÄÌÑ ÐÏÌÑ `%s'" + +#: locale/programs/linereader.c:130 +msgid "trailing garbage at end of line" +msgstr "ÍÕÓÏÒ × ËÏÎÃÅ ÓÔÒÏËÉ" + +#: locale/programs/linereader.c:304 +msgid "garbage at end of number" +msgstr "ÍÕÓÏÒ × ËÏÎÃÅ ÞÉÓÌÁ" + +#: locale/programs/linereader.c:416 +msgid "garbage at end of character code specification" +msgstr "ÍÕÓÏÒ × ËÏÎÃÅ ÓÐÅÃÉÆÉËÁÃÉÉ ËÏÄÁ ÚÎÁËÁ" + +#: locale/programs/linereader.c:502 +msgid "unterminated symbolic name" +msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÏÅ ÓÉÍ×ÏÌØÎÏÅ ÉÍÑ" + +#: locale/programs/linereader.c:566 catgets/gencat.c:1195 +msgid "invalid escape sequence" +msgstr "ÎÅ×ÅÒÎÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ" + +#: locale/programs/linereader.c:629 +msgid "illegal escape sequence at end of string" +msgstr "ÎÅ×ÅÒÎÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ËÏÎÃÅ ÓÔÒÏËÉ" + +#: locale/programs/linereader.c:633 locale/programs/linereader.c:861 +msgid "unterminated string" +msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÓÔÒÏËÁ" + +#: locale/programs/linereader.c:675 +msgid "non-symbolic character value should not be used" +msgstr "ÎÅ ÓÔÏÉÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÎÅÓÉÍ×ÏÌØÎÏÅ ÚÎÁËÏ×ÏÅ ÚÎÁÞÅÎÉÅ" + +#: locale/programs/linereader.c:822 +#, c-format +msgid "symbol `%.*s' not in charmap" +msgstr "" + +#: locale/programs/linereader.c:843 +#, c-format +msgid "symbol `%.*s' not in repertoire map" +msgstr "" + +#: locale/programs/locale.c:75 +msgid "System information:" +msgstr "éÎÆÏÒÍÁÃÉÑ Ï ÓÉÓÔÅÍÅ:" + +#: locale/programs/locale.c:77 +msgid "Write names of available locales" +msgstr "îÁÐÉÓÁÔØ ÉÍÅÎÁ ÄÏÓÔÕÐÎÙÈ ÌÏËÁÌÅÊ" + +#: locale/programs/locale.c:79 +msgid "Write names of available charmaps" +msgstr "" + +#: locale/programs/locale.c:80 +msgid "Modify output format:" +msgstr "éÚÍÅÎÅÎÉÅ ×ÙÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ:" + +#: locale/programs/locale.c:81 +msgid "Write names of selected categories" +msgstr "îÁÐÉÓÁÔØ ÉÍÅÎÁ ×ÙÂÒÁÎÎÙÈ ËÁÔÅÇÏÒÉÊ" + +#: locale/programs/locale.c:82 +msgid "Write names of selected keywords" +msgstr "îÁÐÉÓÁÔØ ÉÍÅÎÁ ×ÙÂÒÁÎÎÙÈ ËÌÀÞÅ×ÙÈ ÓÌÏ×" + +#: locale/programs/locale.c:83 +msgid "Print more information" +msgstr "îÁÐÅÞÁÔÁÔØ ÂÏÌØÛÅ ÉÎÆÏÒÍÁÃÉÉ" + +#: locale/programs/locale.c:88 +msgid "Get locale-specific information." +msgstr "ðÏÌÕÞÁÅÔ ÓÐÅÃÉÆÉÞÎÕÀ ÄÌÑ ÌÏËÁÌÉ ÉÎÆÏÒÍÁÃÉÀ." + +#: locale/programs/locale.c:91 +msgid "" +"NAME\n" +"[-a|-m]" +msgstr "" +"éíñ\n" +"[-a|-m]" + +#: locale/programs/locale.c:195 +msgid "Cannot set LC_CTYPE to default locale" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_CTYPE × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ." + +#: locale/programs/locale.c:197 +msgid "Cannot set LC_MESSAGES to default locale" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_MESSAGES × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ." + +#: locale/programs/locale.c:210 +msgid "Cannot set LC_COLLATE to default locale" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_COLLATE × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ." + +#: locale/programs/locale.c:226 +msgid "Cannot set LC_ALL to default locale" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_ALL × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ." + +#: locale/programs/locale.c:517 +msgid "while preparing output" +msgstr "ÐÒÉ ÐÏÄÇÏÔÏ×ËÅ ×Ù×ÏÄÁ" + +#: locale/programs/localedef.c:121 +msgid "Input Files:" +msgstr "÷ÈÏÄÎÙÅ ÆÁÊÌÙ:" + +#: locale/programs/localedef.c:123 +msgid "Symbolic character names defined in FILE" +msgstr "óÉÍ×ÏÌØÎÙÅ ÉÍÅÎÁ ÚÎÁËÏ× ÏÂßÑ×ÌÅÎÙ × æáêìå" + +#: locale/programs/localedef.c:124 +msgid "Source definitions are found in FILE" +msgstr "éÓÈÏÄÎÙÅ ÏÐÒÅÄÅÌÅÎÉÑ ÎÁÈÏÄÑÔÓÑ × æáêìå" + +#: locale/programs/localedef.c:126 +msgid "FILE contains mapping from symbolic names to UCS4 values" +msgstr "æáêì ÓÏÄÅÒÖÉÔ ÏÔÏÂÒÁÖÅÎÉÑ ÉÚ ÓÉÍ×ÏÌØÎÙÈ ÉÍÅÎ × ÚÎÁÞÅÎÉÑ UCS4" + +#: locale/programs/localedef.c:130 +msgid "Create output even if warning messages were issued" +msgstr "óÏÚÄÁ×ÁÔØ ×Ù×ÏÄ, ÄÁÖÅ ÅÓÌÉ ÂÙÌÉ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ" + +#: locale/programs/localedef.c:131 +msgid "Create old-style tables" +msgstr "óÏÚÄÁ×ÁÔØ ÔÁÂÌÉÃÙ × ÓÔÁÒÏÍ ÓÔÉÌÅ" + +#: locale/programs/localedef.c:132 +msgid "Optional output file prefix" +msgstr "îÅÏÂÑÚÁÔÅÌØÎÙÊ ÐÒÅÆÉËÓ ÄÌÑ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×" + +#: locale/programs/localedef.c:133 +msgid "Be strictly POSIX conform" +msgstr "óÔÒÏÇÏ ÓÌÅÄÏ×ÁÔØ ÓÔÁÎÄÁÒÔÕ POSIX" + +#: locale/programs/localedef.c:135 +msgid "Suppress warnings and information messages" +msgstr "îÅ ×Ù×ÏÄÉÔØ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ É ÉÎÆÏÒÍÁÃÉÏÎÎÙÅ ÓÏÏÂÝÅÎÉÑ" + +#: locale/programs/localedef.c:136 +msgid "Print more messages" +msgstr "ðÅÞÁÔÁÔØ ÂÏÌØÛÅ ÓÏÏÂÝÅÎÉÊ" + +#: locale/programs/localedef.c:137 +msgid "Archive control:" +msgstr "õÐÒÁ×ÌÅÎÉÅ ÁÒÈÉ×ÏÍ:" + +#: locale/programs/localedef.c:139 +msgid "Don't add new data to archive" +msgstr "îÅ ÄÏÂÁ×ÌÑÔØ × ÁÒÈÉ× ÎÏ×ÙÅ ÄÁÎÎÙÅ" + +#: locale/programs/localedef.c:141 +msgid "Add locales named by parameters to archive" +msgstr "äÏÂÁ×ÉÔØ × ÁÒÈÉ× ÌÏËÁÌÉ, ÕËÁÚÁÎÎÙÅ × ÐÁÒÁÍÅÔÒÁÈ" + +#: locale/programs/localedef.c:142 +msgid "Replace existing archive content" +msgstr "úÁÍÅÎÉÔØ ÓÕÝÅÓÔ×ÕÀÝÅÅ ÓÏÄÅÒÖÉÍÏÅ ÁÒÈÉ×Á" + +#: locale/programs/localedef.c:144 +msgid "Remove locales named by parameters from archive" +msgstr "õÄÁÌÉÔØ ÉÚ ÁÒÈÉ×Á ÌÏËÁÌÉ, ÕËÁÚÁÎÎÙÅ × ÐÁÒÁÍÅÔÒÁÈ" + +#: locale/programs/localedef.c:145 +msgid "List content of archive" +msgstr "ðÅÒÅÞÉÓÌÉÔØ ÓÏÄÅÒÖÉÍÏÅ ÁÒÈÉ×Á" + +#: locale/programs/localedef.c:147 +msgid "locale.alias file to consult when making archive" +msgstr "ÆÁÊÌ locale.alias, Ë ËÏÔÏÒÏÍÕ ÓÌÅÄÕÅÔ ÏÂÒÁÝÁÔØÓÑ ÐÒÉ ÓÏÚÄÁÎÉÉ ÁÒÈÉ×Á" + +#: locale/programs/localedef.c:152 +msgid "Compile locale specification" +msgstr "ëÏÍÐÉÌÉÒÕÅÔ ÓÐÅÃÉÆÉËÁÃÉÀ ÌÏËÁÌÉ" + +#: locale/programs/localedef.c:155 +msgid "" +"NAME\n" +"[--add-to-archive|--delete-from-archive] FILE...\n" +"--list-archive [FILE]" +msgstr "" +"éíñ\n" +"[--add-to-archive|--delete-from-archive] æáêì...\n" +"--list-archive [æáêì]" + +#: locale/programs/localedef.c:233 +msgid "cannot create directory for output files" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ ÄÌÑ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×" + +#: locale/programs/localedef.c:244 +msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" +msgstr "æáôáìøîáñ ïûéâëá: ÓÉÓÔÅÍÁ ÎÅ ÏÐÒÅÄÅÌÑÅÔ `_POSIX2_LOCALEDEF'" + +#: locale/programs/localedef.c:258 locale/programs/localedef.c:274 +#: locale/programs/localedef.c:599 locale/programs/localedef.c:619 +#, c-format +msgid "cannot open locale definition file `%s'" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ Ó ÏÐÒÅÄÅÌÅÎÉÅÍ ÌÏËÁÌÉ `%s'" + +#: locale/programs/localedef.c:286 +#, c-format +msgid "cannot write output files to `%s'" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ×ÙÈÏÄÎÙÅ ÆÁÊÌÙ × `%s'" + +#: locale/programs/localedef.c:367 +#, c-format +msgid "" +"System's directory for character maps : %s\n" +" repertoire maps: %s\n" +" locale path : %s\n" +"%s" +msgstr "" + +#: locale/programs/localedef.c:567 +msgid "circular dependencies between locale definitions" +msgstr "ÃÉËÌÉÞÅÓËÉÅ ÚÁ×ÉÓÉÍÏÓÔÉ ÍÅÖÄÕ ÏÐÒÅÄÅÌÅÎÉÑÍÉ ÌÏËÁÌÅÊ" + +#: locale/programs/localedef.c:573 +#, c-format +msgid "cannot add already read locale `%s' a second time" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÕÖÅ ÓÞÉÔÁÎÎÕÀ ÌÏËÁÌØ `%s' ×ÔÏÒÏÊ ÒÁÚ" + +#: locale/programs/locarchive.c:89 locale/programs/locarchive.c:259 +msgid "cannot create temporary file" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ" + +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305 +msgid "cannot initialize archive file" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÁÒÈÉ×ÎÙÊ ÆÁÊÌ" + +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312 +msgid "cannot resize archive file" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ ÒÁÚÍÅÒ ÁÒÈÉ×ÎÏÇÏ ÆÁÊÌÁ" + +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321 +#: locale/programs/locarchive.c:511 +msgid "cannot map archive header" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ × ÐÁÍÑÔØ ÚÁÇÏÌÏ×ÏË ÁÒÈÉ×Á" + +#: locale/programs/locarchive.c:156 +msgid "failed to create new locale archive" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÎÏ×ÙÊ ÁÒÈÉ× ÌÏËÁÌÉ" + +#: locale/programs/locarchive.c:168 +msgid "cannot change mode of new locale archive" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ ÐÒÁ×Á ÄÏÓÔÕÐÁ ÄÌÑ ÎÏ×ÏÇÏ ÁÒÈÉ×ÎÏÇÏ ÆÁÊÌÁ" + +#: locale/programs/locarchive.c:253 +msgid "cannot map locale archive file" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ × ÐÁÍÑÔØ ÁÒÈÉ×ÎÙÊ ÆÁÊÌ ÌÏËÁÌÉ" + +#: locale/programs/locarchive.c:329 +msgid "cannot lock new archive" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÎÏ×ÙÊ ÁÒÈÉ×" + +#: locale/programs/locarchive.c:380 +msgid "cannot extend locale archive file" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÒÁÓÛÉÒÉÔØ ÁÒÈÉ×ÎÙÊ ÆÁÊÌ ÌÏËÁÌÉ" + +#: locale/programs/locarchive.c:389 +msgid "cannot change mode of resized locale archive" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ ÐÒÁ×Á ÄÏÓÔÕÐÁ ÁÒÈÉ×Á ÌÏËÁÌÉ ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÚÍÅÒÁ" + +#: locale/programs/locarchive.c:397 +msgid "cannot rename new archive" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÉÍÅÎÏ×ÁÔØ ÎÏ×ÙÊ ÁÒÈÉ×" + +#: locale/programs/locarchive.c:450 +#, c-format +msgid "cannot open locale archive \"%s\"" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÁÒÈÉ× ÌÏËÁÌÉ \"%s\"" + +#: locale/programs/locarchive.c:455 +#, c-format +msgid "cannot stat locale archive \"%s\"" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat ÄÌÑ ÁÒÈÉ×Á ÌÏËÁÌÉ \"%s\"" + +#: locale/programs/locarchive.c:474 +#, c-format +msgid "cannot lock locale archive \"%s\"" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÁÒÈÉ× ÌÏËÁÌÉ \"%s\"" + +#: locale/programs/locarchive.c:497 +msgid "cannot read archive header" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË ÁÒÈÉ×Á" + +#: locale/programs/locarchive.c:557 +#, c-format +msgid "locale '%s' already exists" +msgstr "ÌÏËÁÌØ '%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ" + +#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803 +#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827 +#: locale/programs/locfile.c:343 +msgid "cannot add to locale archive" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ Ë ÁÒÈÉ×Õ ÌÏËÁÌÉ" + +#: locale/programs/locarchive.c:982 +#, c-format +msgid "locale alias file `%s' not found" +msgstr "ÆÁÊÌ ÐÓÅ×ÄÏÎÉÍÏ× ÌÏËÁÌÅÊ `%s' ÎÅ ÎÁÊÄÅÎ" + +#: locale/programs/locarchive.c:1126 +#, c-format +msgid "Adding %s\n" +msgstr "äÏÂÁ×ÌÅÎÉÅ %s\n" + +#: locale/programs/locarchive.c:1132 +#, c-format +msgid "stat of \"%s\" failed: %s: ignored" +msgstr "ÏÐÅÒÁÃÉÑ stat ÄÌÑ \"%s\" ÎÅÕÓÐÅÛÎÁ: %s: ÉÇÎÏÒÉÒÏ×ÁÎÏ" + +#: locale/programs/locarchive.c:1138 +#, c-format +msgid "\"%s\" is no directory; ignored" +msgstr "\"%s\" ÎÅ Ñ×ÌÑÅÔÓÑ ËÁÔÁÌÏÇÏÍ; ÉÇÎÏÒÉÒÏ×ÁÎÏ" + +#: locale/programs/locarchive.c:1145 +#, c-format +msgid "cannot open directory \"%s\": %s: ignored" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÔÁÌÏÇ \"%s\": %s: ÉÇÎÏÒÉÒÏ×ÁÎÏ" + +#: locale/programs/locarchive.c:1217 +#, c-format +msgid "incomplete set of locale files in \"%s\"" +msgstr "ÎÅÐÏÌÎÙÊ ÎÁÂÏÒ ÆÁÊÌÏ× ÌÏËÁÌÉ × \"%s\"" + +#: locale/programs/locarchive.c:1281 +#, c-format +msgid "cannot read all files in \"%s\": ignored" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ×ÓÅ ÆÁÊÌÙ × \"%s\": ÉÇÎÏÒÉÒÏ×ÁÎÏ" + +#: locale/programs/locarchive.c:1351 +#, c-format +msgid "locale \"%s\" not in archive" +msgstr "ÌÏËÁÌØ \"%s\" ÏÔÓÕÔÓÔ×ÕÅÔ × ÁÒÈÉ×Å" + +#: locale/programs/locfile.c:132 +#, c-format +msgid "argument to `%s' must be a single character" +msgstr "ÁÒÇÕÍÅÎÔ ÄÌÑ `%s' ÄÏÌÖÅÎ ÂÙÔØ ÏÄÎÉÍ ÚÎÁËÏÍ" + +#: locale/programs/locfile.c:251 +msgid "syntax error: not inside a locale definition section" +msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ: ×ÎÅ ÓÅËÃÉÉ ÏÐÒÅÄÅÌÅÎÉÑ ÌÏËÁÌÉ" + +#: locale/programs/locfile.c:625 +#, c-format +msgid "cannot open output file `%s' for category `%s'" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s' ÄÌÑ ËÁÔÅÇÏÒÉÉ `%s'" + +#: locale/programs/locfile.c:649 +#, c-format +msgid "failure while writing data for category `%s'" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁÐÉÓÉ ÄÁÎÎÙÈ ÄÌÑ ËÁÔÅÇÏÒÉÉ`%s'" + +#: locale/programs/locfile.c:745 +#, c-format +msgid "cannot create output file `%s' for category `%s'" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s' ÄÌÑ ËÁÔÅÇÏÒÉÉ `%s'" + +#: locale/programs/locfile.c:781 +msgid "expect string argument for `copy'" +msgstr "ÄÌÑ `copy' ÏÖÉÄÁÅÔÓÑ ÁÒÇÕÍÅÎÔ-ÓÔÒÏËÁ" + +#: locale/programs/locfile.c:785 +msgid "locale name should consist only of portable characters" +msgstr "ÉÍÑ ÌÏËÁÌÉ ÄÏÌÖÎÏ ÓÏÓÔÏÑÔØ ÔÏÌØËÏ ÉÚ ÐÅÒÅÎÏÓÉÍÙÈ ÚÎÁËÏ×" + +#: locale/programs/locfile.c:804 +msgid "no other keyword shall be specified when `copy' is used" +msgstr "ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ `copy' ÎÅÌØÚÑ ÚÁÄÁ×ÁÔØ ÄÒÕÇÉÅ ËÌÀÞÅ×ÙÅ ÓÌÏ×Á" + +#: locale/programs/repertoire.c:230 locale/programs/repertoire.c:271 +#: locale/programs/repertoire.c:296 +#, c-format +msgid "syntax error in repertoire map definition: %s" +msgstr "" + +#: locale/programs/repertoire.c:272 +msgid "no <Uxxxx> or <Uxxxxxxxx> value given" +msgstr "ÎÅ ÚÁÄÁÎÏ ÚÎÁÞÅÎÉÅ <Uxxxx> ÉÌÉ <Uxxxxxxxx>" + +#: locale/programs/repertoire.c:332 +msgid "cannot safe new repertoire map" +msgstr "" + +#: locale/programs/repertoire.c:343 +#, c-format +msgid "repertoire map file `%s' not found" +msgstr "" + +#: locale/programs/repertoire.c:450 +#, c-format +msgid "<%s> and <%s> are invalid names for range" +msgstr "<%s> É <%s> ÎÅ Ñ×ÌÑÀÔÓÑ ÄÏÐÕÓÔÉÍÙÍÉ ÉÍÅÎÁÍÉ ÄÉÁÐÁÚÏÎÁ" + +#: locale/programs/repertoire.c:457 +msgid "upper limit in range is not smaller then lower limit" +msgstr "×ÅÒÈÎÑÑ ÇÒÁÎÉÃÁ ÄÉÁÐÁÚÏÎÁ ÎÅ ÍÅÎØÛÅ ÎÉÖÎÅÊ" + +#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508 +#: posix/getconf.c:1007 +msgid "memory exhausted" +msgstr "ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ" + +#: assert/assert-perr.c:57 +#, c-format +msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n" +msgstr "%s%s%s:%u: %s%sîÅÏÖÉÄÁÎÎÁÑ ÏÛÉÂËÁ: %s.\n" + +#: assert/assert.c:56 +#, c-format +msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" +msgstr "%s%s%s:%u: %s%sðÒÏ×ÅÒÏÞÎÏÅ ÕÔ×ÅÒÖÄÅÎÉÅ `%s' ÎÅ ×ÙÐÏÌÎÅÎÏ.\n" + +#: intl/tst-codeset.c:40 intl/tst-codeset.c:50 +msgid "cheese" +msgstr "" + +#: intl/tst-gettext2.c:37 +msgid "First string for testing." +msgstr "ðÅÒ×ÁÑ ÓÔÒÏËÁ ÄÌÑ ÔÅÓÔÁ." + +#: intl/tst-gettext2.c:38 +msgid "Another string for testing." +msgstr "äÒÕÇÁÑ ÓÔÒÏËÁ ÄÌÑ ÔÅÓÔÁ." + +#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:88 +msgid "NAME" +msgstr "æáêì" + +#: catgets/gencat.c:112 +msgid "Create C header file NAME containing symbol definitions" +msgstr "óÏÚÄÁÅÔ ÚÁÇÏÌÏ×ÏÞÎÙÊ æáêì ÎÁ óÉ, ÓÏÄÅÒÖÁÝÉÊ ÏÐÒÅÄÅÌÅÎÉÑ ÓÉÍ×ÏÌÏ×." + +#: catgets/gencat.c:114 +msgid "Do not use existing catalog, force new output file" +msgstr "îÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ ËÁÔÁÌÏÇ, ÐÒÉÎÕÄÉÔÅÌØÎÏ ÓÏÚÄÁÔØ ÎÏ×ÙÊ ×ÙÈÏÄÎÏÊ ÆÁÊÌ" + +#: catgets/gencat.c:115 +msgid "Write output to file NAME" +msgstr "úÁÐÉÓÁÔØ ×Ù×ÏÄ × æáêì" + +#: catgets/gencat.c:120 +msgid "" +"Generate message catalog.If INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" +"is -, output is written to standard output.\n" +msgstr "" +"çÅÎÅÒÉÒÕÅÔ ËÁÔÁÌÏÇ ÓÏÏÂÝÅÎÉÊ.åÓÌÉ ÷èïäîïê-æáêì ÚÁÄÁÎ ËÁË -, ÞÉÔÁÅÔ ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ. åÓÌÉ\n" +"÷ùèïäîïê-æáêì ÚÁÄÁÎ ËÁË -, ÒÅÚÕÌØÔÁÔ ÐÅÞÁÔÁÅÔÓÑ ÎÁ ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ.\n" + +#: catgets/gencat.c:125 +msgid "" +"-o OUTPUT-FILE [INPUT-FILE]...\n" +"[OUTPUT-FILE [INPUT-FILE]...]" +msgstr "" +"-o ÷ùèïäîïê-æáêì [÷èïäîïê-æáêì]...\n" +"[÷ùèïäîïê-æáêì [÷èïäîïê-æáêì]...]" + +#: catgets/gencat.c:282 +msgid "*standard input*" +msgstr "*ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ*" + +#: catgets/gencat.c:417 catgets/gencat.c:494 +msgid "illegal set number" +msgstr "ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÍÎÏÖÅÓÔ×Á" + +#: catgets/gencat.c:444 +msgid "duplicate set definition" +msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÍÎÏÖÅÓÔ×Á" + +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677 +msgid "this is the first definition" +msgstr "ÜÔÏ ÐÅÒ×ÏÅ ÏÐÒÅÄÅÌÅÎÉÅ" + +#: catgets/gencat.c:522 +#, c-format +msgid "unknown set `%s'" +msgstr "ÎÅÉÚ×ÅÓÔÎÏÅ ÍÎÏÖÅÓÔ×Ï `%s'" + +#: catgets/gencat.c:563 +msgid "invalid quote character" +msgstr "ÎÅ×ÅÒÎÙÊ ÜËÒÁÎÉÒÕÀÝÉÊ ÚÎÁË" + +#: catgets/gencat.c:576 +#, c-format +msgid "unknown directive `%s': line ignored" +msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÄÉÒÅËÔÉ×Á `%s': ÓÔÒÏËÁ ÉÇÎÏÒÉÒÏ×ÁÎÁ" + +#: catgets/gencat.c:621 +msgid "duplicated message number" +msgstr "ÐÏ×ÔÏÒÎÙÊ ÎÏÍÅÒ ÓÏÏÂÝÅÎÉÑ" + +#: catgets/gencat.c:674 +msgid "duplicated message identifier" +msgstr "ÐÏ×ÔÏÒÎÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÓÏÏÂÝÅÎÉÑ" + +#: catgets/gencat.c:731 +msgid "invalid character: message ignored" +msgstr "ÎÅÄÏÐÕÓÔÉÍÙÊ ÚÎÁË: ÓÏÏÂÝÅÎÉÅ ÉÇÎÏÒÉÒÏ×ÁÎÏ" + +#: catgets/gencat.c:774 +msgid "invalid line" +msgstr "ÎÅ×ÅÒÎÁÑ ÓÔÒÏËÁ" + +#: catgets/gencat.c:828 +msgid "malformed line ignored" +msgstr "ÎÅÐÒÁ×ÉÌØÎÁÑ ÓÔÒÏËÁ ÉÇÎÏÒÉÒÏ×ÁÎÁ" + +#: catgets/gencat.c:992 catgets/gencat.c:1033 +#, c-format +msgid "cannot open output file `%s'" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s'" + +#: catgets/gencat.c:1217 +msgid "unterminated message" +msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: catgets/gencat.c:1241 +msgid "while opening old catalog file" +msgstr "ÐÒÉ ÏÔËÒÙÔÉÉ ÓÔÁÒÏÇÏ ÆÁÊÌÁ ËÁÔÁÌÏÇÁ" + +#: catgets/gencat.c:1332 +msgid "conversion modules not available" +msgstr "ÍÏÄÕÌÉ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÎÅÄÏÓÔÕÐÎÙ" + +#: catgets/gencat.c:1358 +msgid "cannot determine escape character" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÚÎÁË ×ÙÈÏÄÁ" + +#: stdlib/../sysdeps/unix/sysv/linux/ia64/makecontext.c:63 +#, c-format +msgid "makecontext: does not know how to handle more than 8 arguments\n" +msgstr "makecontext: ÎÅÔ ×ÏÚÍÏÖÎÏÓÔÉ ÏÂÒÁÂÏÔÁÔØ ÂÏÌÅÅ ×ÏÓØÍÉ ÁÒÇÕÍÅÎÔÏ×\n" + +#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:147 +#: nis/nis_error.c:29 nis/ypclnt.c:778 nis/ypclnt.c:852 +msgid "Success" +msgstr "ðÏÂÅÄÁ" + +#. TRANS Operation not permitted; only the owner of the file (or other resource) +#. TRANS or processes with special privileges can perform the operation. +#: stdio-common/../sysdeps/gnu/errlist.c:17 +msgid "Operation not permitted" +msgstr "ïÐÅÒÁÃÉÑ ÎÅ ÐÏÚ×ÏÌÑÅÔÓÑ" + +#. TRANS No such file or directory. This is a ``file doesn't exist'' error +#. TRANS for ordinary files that are referenced in contexts where they are +#. TRANS expected to already exist. +#: stdio-common/../sysdeps/gnu/errlist.c:28 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:32 +msgid "No such file or directory" +msgstr "îÅÔ ÔÁËÏÇÏ ÆÁÊÌÁ ÉÌÉ ËÁÔÁÌÏÇÁ" + +#. TRANS No process matches the specified process ID. +#: stdio-common/../sysdeps/gnu/errlist.c:37 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:33 +msgid "No such process" +msgstr "îÅÔ ÔÁËÏÇÏ ÐÒÏÃÅÓÓÁ" + +#. TRANS Interrupted function call; an asynchronous signal occurred and prevented +#. TRANS completion of the call. When this happens, you should try the call +#. TRANS again. +#. TRANS +#. TRANS You can choose to have functions resume after a signal that is handled, +#. TRANS rather than failing with @code{EINTR}; see @ref{Interrupted +#. TRANS Primitives}. +#: stdio-common/../sysdeps/gnu/errlist.c:52 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:34 +msgid "Interrupted system call" +msgstr "ðÒÅÒ×ÁÎ ÓÉÓÔÅÍÎÙÊ ×ÙÚÏ×" + +#. TRANS Input/output error; usually used for physical read or write errors. +#: stdio-common/../sysdeps/gnu/errlist.c:61 +msgid "Input/output error" +msgstr "ïÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ" + +#. TRANS No such device or address. The system tried to use the device +#. TRANS represented by a file you specified, and it couldn't find the device. +#. TRANS This can mean that the device file was installed incorrectly, or that +#. TRANS the physical device is missing or not correctly attached to the +#. TRANS computer. +#: stdio-common/../sysdeps/gnu/errlist.c:74 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:36 +msgid "No such device or address" +msgstr "îÅÔ ÔÁËÏÇÏ ÕÓÔÒÏÊÓÔ×Á ÉÌÉ ÁÄÒÅÓÁ" + +#. TRANS Argument list too long; used when the arguments passed to a new program +#. TRANS being executed with one of the @code{exec} functions (@pxref{Executing a +#. TRANS File}) occupy too much memory space. This condition never arises in the +#. TRANS GNU system. +#: stdio-common/../sysdeps/gnu/errlist.c:86 +msgid "Argument list too long" +msgstr "óÌÉÛËÏÍ ÄÌÉÎÎÙÊ ÓÐÉÓÏË ÁÒÇÕÍÅÎÔÏ×" + +#. TRANS Invalid executable file format. This condition is detected by the +#. TRANS @code{exec} functions; see @ref{Executing a File}. +#: stdio-common/../sysdeps/gnu/errlist.c:96 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:38 +msgid "Exec format error" +msgstr "ïÛÉÂËÁ ÆÏÒÍÁÔÁ ×ÙÐÏÌÎÑÅÍÏÇÏ ÆÁÊÌÁ" + +#. TRANS Bad file descriptor; for example, I/O on a descriptor that has been +#. TRANS closed or reading from a descriptor open only for writing (or vice +#. TRANS versa). +#: stdio-common/../sysdeps/gnu/errlist.c:107 +msgid "Bad file descriptor" +msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÄÅÓËÒÉÐÔÏÒ ÆÁÊÌÁ" + +#. TRANS There are no child processes. This error happens on operations that are +#. TRANS supposed to manipulate child processes, when there aren't any processes +#. TRANS to manipulate. +#: stdio-common/../sysdeps/gnu/errlist.c:118 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:40 +msgid "No child processes" +msgstr "îÅÔ ÄÏÞÅÒÎÉÈ ÐÒÏÃÅÓÓÏ×" + +#. TRANS Deadlock avoided; allocating a system resource would have resulted in a +#. TRANS deadlock situation. The system does not guarantee that it will notice +#. TRANS all such situations. This error means you got lucky and the system +#. TRANS noticed; it might just hang. @xref{File Locks}, for an example. +#: stdio-common/../sysdeps/gnu/errlist.c:130 +msgid "Resource deadlock avoided" +msgstr "" + +#. TRANS No memory available. The system cannot allocate more virtual memory +#. TRANS because its capacity is full. +#: stdio-common/../sysdeps/gnu/errlist.c:140 +msgid "Cannot allocate memory" +msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ" + +#. TRANS Permission denied; the file permissions do not allow the attempted operation. +#: stdio-common/../sysdeps/gnu/errlist.c:149 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:43 +#: nis/nis_error.c:39 nis/ypclnt.c:808 +msgid "Permission denied" +msgstr "ïÔËÁÚÁÎÏ × ÄÏÓÔÕÐÅ" + +#. TRANS Bad address; an invalid pointer was detected. +#. TRANS In the GNU system, this error never happens; you get a signal instead. +#: stdio-common/../sysdeps/gnu/errlist.c:159 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:44 +msgid "Bad address" +msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÁÄÒÅÓ" + +#. TRANS A file that isn't a block special file was given in a situation that +#. TRANS requires one. For example, trying to mount an ordinary file as a file +#. TRANS system in Unix gives this error. +#: stdio-common/../sysdeps/gnu/errlist.c:170 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:45 +msgid "Block device required" +msgstr "ôÒÅÂÕÅÔÓÑ ÂÌÏÞÎÏÅ ÕÓÔÒÏÊÓÔ×Ï" + +#. TRANS Resource busy; a system resource that can't be shared is already in use. +#. TRANS For example, if you try to delete a file that is the root of a currently +#. TRANS mounted filesystem, you get this error. +#: stdio-common/../sysdeps/gnu/errlist.c:181 +msgid "Device or resource busy" +msgstr "õÓÔÒÏÊÓÔ×Ï ÉÌÉ ÒÅÓÕÒÓ ÚÁÎÑÔÏ" + +#. TRANS File exists; an existing file was specified in a context where it only +#. TRANS makes sense to specify a new file. +#: stdio-common/../sysdeps/gnu/errlist.c:191 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:47 +msgid "File exists" +msgstr "æÁÊÌ ÓÕÝÅÓÔ×ÕÅÔ" + +#. TRANS An attempt to make an improper link across file systems was detected. +#. TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but +#. TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}). +#: stdio-common/../sysdeps/gnu/errlist.c:202 +msgid "Invalid cross-device link" +msgstr "îÅ×ÅÒÎÁÑ ÓÓÙÌËÁ ÍÅÖÄÕ ÕÓÔÒÏÊÓÔ×ÁÍÉ" + +#. TRANS The wrong type of device was given to a function that expects a +#. TRANS particular sort of device. +#: stdio-common/../sysdeps/gnu/errlist.c:212 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:49 +msgid "No such device" +msgstr "îÅÔ ÔÁËÏÇÏ ÕÓÔÒÏÊÓÔ×Á" + +#. TRANS A file that isn't a directory was specified when a directory is required. +#: stdio-common/../sysdeps/gnu/errlist.c:221 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:50 +msgid "Not a directory" +msgstr "üÔÏ ÎÅ ËÁÔÁÌÏÇ" + +#. TRANS File is a directory; you cannot open a directory for writing, +#. TRANS or create or remove hard links to it. +#: stdio-common/../sysdeps/gnu/errlist.c:231 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:51 +msgid "Is a directory" +msgstr "üÔÏ ËÁÔÁÌÏÇ" + +#. TRANS Invalid argument. This is used to indicate various kinds of problems +#. TRANS with passing the wrong argument to a library function. +#: stdio-common/../sysdeps/gnu/errlist.c:241 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:52 +msgid "Invalid argument" +msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÁÒÇÕÍÅÎÔ" + +#. TRANS The current process has too many files open and can't open any more. +#. TRANS Duplicate descriptors do count toward this limit. +#. TRANS +#. TRANS In BSD and GNU, the number of open files is controlled by a resource +#. TRANS limit that can usually be increased. If you get this error, you might +#. TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited; +#. TRANS @pxref{Limits on Resources}. +#: stdio-common/../sysdeps/gnu/errlist.c:256 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:54 +msgid "Too many open files" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÏÔËÒÙÔÙÈ ÆÁÊÌÏ×" + +#. TRANS There are too many distinct file openings in the entire system. Note +#. TRANS that any number of linked channels count as just one file opening; see +#. TRANS @ref{Linked Channels}. This error never occurs in the GNU system. +#: stdio-common/../sysdeps/gnu/errlist.c:267 +msgid "Too many open files in system" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÏÔËÒÙÔÙÈ ÆÁÊÌÏ× × ÓÉÓÔÅÍÅ" + +#. TRANS Inappropriate I/O control operation, such as trying to set terminal +#. TRANS modes on an ordinary file. +#: stdio-common/../sysdeps/gnu/errlist.c:277 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:55 +msgid "Inappropriate ioctl for device" +msgstr "îÅÐÒÉÍÅÎÉÍÙÊ Ë ÄÁÎÎÏÍÕ ÕÓÔÒÏÊÓÔ×Õ ioctl" + +#. TRANS An attempt to execute a file that is currently open for writing, or +#. TRANS write to a file that is currently being executed. Often using a +#. TRANS debugger to run a program is considered having it open for writing and +#. TRANS will cause this error. (The name stands for ``text file busy''.) This +#. TRANS is not an error in the GNU system; the text is copied as necessary. +#: stdio-common/../sysdeps/gnu/errlist.c:290 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:56 +msgid "Text file busy" +msgstr "ôÅËÓÔÏ×ÙÊ ÆÁÊÌ ÚÁÎÑÔ" + +#. TRANS File too big; the size of a file would be larger than allowed by the system. +#: stdio-common/../sysdeps/gnu/errlist.c:299 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:57 +msgid "File too large" +msgstr "æÁÊÌ ÓÌÉÛËÏÍ ×ÅÌÉË" + +#. TRANS No space left on device; write operation on a file failed because the +#. TRANS disk is full. +#: stdio-common/../sysdeps/gnu/errlist.c:309 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:58 +msgid "No space left on device" +msgstr "îÁ ÕÓÔÒÏÊÓÔ×Å ËÏÎÞÉÌÏÓØ ÍÅÓÔÏ" + +#. TRANS Invalid seek operation (such as on a pipe). +#: stdio-common/../sysdeps/gnu/errlist.c:318 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:59 +msgid "Illegal seek" +msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ÏÐÅÒÁÃÉÑ ÓÍÅÝÅÎÉÑ" + +#. TRANS An attempt was made to modify something on a read-only file system. +#: stdio-common/../sysdeps/gnu/errlist.c:327 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:60 +msgid "Read-only file system" +msgstr "æÁÊÌÏ×ÁÑ ÓÉÓÔÅÍÁ ÄÏÓÔÕÐÎÁ ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ" + +#. TRANS Too many links; the link count of a single file would become too large. +#. TRANS @code{rename} can cause this error if the file being renamed already has +#. TRANS as many links as it can take (@pxref{Renaming Files}). +#: stdio-common/../sysdeps/gnu/errlist.c:338 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:61 +msgid "Too many links" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÓÓÙÌÏË" + +#. TRANS Domain error; used by mathematical functions when an argument value does +#. TRANS not fall into the domain over which the function is defined. +#: stdio-common/../sysdeps/gnu/errlist.c:361 +msgid "Numerical argument out of domain" +msgstr "þÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ ×ÎÅ ÏÂÌÁÓÔÉ ÏÐÒÅÄÅÌÅÎÉÑ" + +#. TRANS Range error; used by mathematical functions when the result value is +#. TRANS not representable because of overflow or underflow. +#: stdio-common/../sysdeps/gnu/errlist.c:371 +msgid "Numerical result out of range" +msgstr "þÉÓÌÏ×ÏÊ ÒÅÚÕÌØÔÁÔ ×ÎÅ ÐÒÅÄÓÔÁ×ÉÍÏÇÏ ÄÉÁÐÁÚÏÎÁ" + +#. TRANS Resource temporarily unavailable; the call might work if you try again +#. TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN}; +#. TRANS they are always the same in the GNU C library. +#. TRANS +#. TRANS This error can happen in a few different situations: +#. TRANS +#. TRANS @itemize @bullet +#. TRANS @item +#. TRANS An operation that would block was attempted on an object that has +#. TRANS non-blocking mode selected. Trying the same operation again will block +#. TRANS until some external condition makes it possible to read, write, or +#. TRANS connect (whatever the operation). You can use @code{select} to find out +#. TRANS when the operation will be possible; @pxref{Waiting for I/O}. +#. TRANS +#. TRANS @strong{Portability Note:} In many older Unix systems, this condition +#. TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code +#. TRANS different from @code{EAGAIN}. To make your program portable, you should +#. TRANS check for both codes and treat them the same. +#. TRANS +#. TRANS @item +#. TRANS A temporary resource shortage made an operation impossible. @code{fork} +#. TRANS can return this error. It indicates that the shortage is expected to +#. TRANS pass, so your program can try the call again later and it may succeed. +#. TRANS It is probably a good idea to delay for a few seconds before trying it +#. TRANS again, to allow time for other processes to release scarce resources. +#. TRANS Such shortages are usually fairly serious and affect the whole system, +#. TRANS so usually an interactive program should report the error to the user +#. TRANS and return to its command loop. +#. TRANS @end itemize +#: stdio-common/../sysdeps/gnu/errlist.c:408 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:41 +msgid "Resource temporarily unavailable" +msgstr "òÅÓÕÒÓ ×ÒÅÍÅÎÎÏ ÎÅÄÏÓÔÕÐÅÎ" + +#. TRANS In the GNU C library, this is another name for @code{EAGAIN} (above). +#. TRANS The values are always the same, on every operating system. +#. TRANS +#. TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a +#. TRANS separate error code. +#: stdio-common/../sysdeps/gnu/errlist.c:421 +msgid "Operation would block" +msgstr "ïÐÅÒÁÃÉÑ ÐÒÉ×ÅÄÅÔ Ë ÂÌÏËÉÒÏ×ËÅ" + +#. TRANS An operation that cannot complete immediately was initiated on an object +#. TRANS that has non-blocking mode selected. Some functions that must always +#. TRANS block (such as @code{connect}; @pxref{Connecting}) never return +#. TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that +#. TRANS the operation has begun and will take some time. Attempts to manipulate +#. TRANS the object before the call completes return @code{EALREADY}. You can +#. TRANS use the @code{select} function to find out when the pending operation +#. TRANS has completed; @pxref{Waiting for I/O}. +#: stdio-common/../sysdeps/gnu/errlist.c:437 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:180 +msgid "Operation now in progress" +msgstr "ïÐÅÒÁÃÉÑ ×ÙÐÏÌÎÑÅÔÓÑ × ÄÁÎÎÙÊ ÍÏÍÅÎÔ" + +#. TRANS An operation is already in progress on an object that has non-blocking +#. TRANS mode selected. +#: stdio-common/../sysdeps/gnu/errlist.c:447 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:179 +msgid "Operation already in progress" +msgstr "ïÐÅÒÁÃÉÑ ÕÖÅ ×ÙÐÏÌÎÑÅÔÓÑ" + +#. TRANS A file that isn't a socket was specified when a socket is required. +#: stdio-common/../sysdeps/gnu/errlist.c:456 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:125 +msgid "Socket operation on non-socket" +msgstr "ïÐÅÒÁÃÉÑ ÄÌÑ ÓÏËÅÔÁ ÐÒÉÍÅÎÅÎÁ Ë ÎÅ-ÓÏËÅÔÕ" + +#. TRANS The size of a message sent on a socket was larger than the supported +#. TRANS maximum size. +#: stdio-common/../sysdeps/gnu/errlist.c:466 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:127 +msgid "Message too long" +msgstr "óÏÏÂÝÅÎÉÅ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ" + +#. TRANS The socket type does not support the requested communications protocol. +#: stdio-common/../sysdeps/gnu/errlist.c:475 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:128 +msgid "Protocol wrong type for socket" +msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÄÌÑ ÓÏËÅÔÁ ÔÉÐ ÐÒÏÔÏËÏÌÁ" + +#. TRANS You specified a socket option that doesn't make sense for the +#. TRANS particular protocol being used by the socket. @xref{Socket Options}. +#: stdio-common/../sysdeps/gnu/errlist.c:485 +msgid "Protocol not available" +msgstr "ðÒÏÔÏËÏÌ ÎÅÄÏÓÔÕÐÅÎ" + +#. TRANS The socket domain does not support the requested communications protocol +#. TRANS (perhaps because the requested protocol is completely invalid). +#. TRANS @xref{Creating a Socket}. +#: stdio-common/../sysdeps/gnu/errlist.c:496 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:150 +msgid "Protocol not supported" +msgstr "ðÒÏÔÏËÏÌ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" + +#. TRANS The socket type is not supported. +#: stdio-common/../sysdeps/gnu/errlist.c:505 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:151 +msgid "Socket type not supported" +msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÔÉÐ ÓÏËÅÔÁ" + +#. TRANS The operation you requested is not supported. Some socket functions +#. TRANS don't make sense for all types of sockets, and others may not be +#. TRANS implemented for all communications protocols. In the GNU system, this +#. TRANS error can happen for many calls when the object does not support the +#. TRANS particular operation; it is a generic indication that the server knows +#. TRANS nothing to do for that call. +#: stdio-common/../sysdeps/gnu/errlist.c:519 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:78 +msgid "Operation not supported" +msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÁÑ ÏÐÅÒÁÃÉÑ" + +#. TRANS The socket communications protocol family you requested is not supported. +#: stdio-common/../sysdeps/gnu/errlist.c:528 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:153 +msgid "Protocol family not supported" +msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÏÅ ÓÅÍÅÊÓÔ×Ï ÐÒÏÔÏËÏÌÏ×" + +#. TRANS The address family specified for a socket is not supported; it is +#. TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}. +#: stdio-common/../sysdeps/gnu/errlist.c:538 +msgid "Address family not supported by protocol" +msgstr "óÅÍÅÊÓÔ×Ï ÁÄÒÅÓÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÐÒÏÔÏËÏÌÏÍ" + +#. TRANS The requested socket address is already in use. @xref{Socket Addresses}. +#: stdio-common/../sysdeps/gnu/errlist.c:547 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:155 +msgid "Address already in use" +msgstr "áÄÒÅÓ ÕÖÅ ÉÓÐÏÌØÚÕÅÔÓÑ" + +#. TRANS The requested socket address is not available; for example, you tried +#. TRANS to give a socket a name that doesn't match the local host name. +#. TRANS @xref{Socket Addresses}. +#: stdio-common/../sysdeps/gnu/errlist.c:558 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:156 +msgid "Cannot assign requested address" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÚÎÁÞÉÔØ ÚÁÐÒÏÛÅÎÎÙÊ ÁÄÒÅÓ" + +#. TRANS A socket operation failed because the network was down. +#: stdio-common/../sysdeps/gnu/errlist.c:567 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:157 +msgid "Network is down" +msgstr "óÅÔØ ÎÅ ÒÁÂÏÔÁÅÔ" + +#. TRANS A socket operation failed because the subnet containing the remote host +#. TRANS was unreachable. +#: stdio-common/../sysdeps/gnu/errlist.c:577 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:158 +msgid "Network is unreachable" +msgstr "óÅÔØ ÎÅÄÏÓÔÕÐÎÁ" + +#. TRANS A network connection was reset because the remote host crashed. +#: stdio-common/../sysdeps/gnu/errlist.c:586 +msgid "Network dropped connection on reset" +msgstr "óÅÔÅ×ÏÅ ÓÏÅÄÉÎÅÎÉÅ ÂÙÌÏ ÓÂÒÏÛÅÎÏ" + +#. TRANS A network connection was aborted locally. +#: stdio-common/../sysdeps/gnu/errlist.c:595 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:160 +msgid "Software caused connection abort" +msgstr "ðÒÏÇÒÁÍÍÁ ×ÙÚ×ÁÌÁ ÓÂÒÏÓ ÓÏÅÄÉÎÅÎÉÑ" + +#. TRANS A network connection was closed for reasons outside the control of the +#. TRANS local host, such as by the remote machine rebooting or an unrecoverable +#. TRANS protocol violation. +#: stdio-common/../sysdeps/gnu/errlist.c:606 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:161 +msgid "Connection reset by peer" +msgstr "óÏÅÄÉÎÅÎÉÅ ÓÂÒÏÛÅÎÏ ÄÒÕÇÏÊ ÓÔÏÒÏÎÏÊ" + +#. TRANS The kernel's buffers for I/O operations are all in use. In GNU, this +#. TRANS error is always synonymous with @code{ENOMEM}; you may get one or the +#. TRANS other from network operations. +#: stdio-common/../sysdeps/gnu/errlist.c:617 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:162 +msgid "No buffer space available" +msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÂÕÆÅÒÎÏÇÏ ÐÒÏÓÔÒÁÎÓÔ×Á" + +#. TRANS You tried to connect a socket that is already connected. +#. TRANS @xref{Connecting}. +#: stdio-common/../sysdeps/gnu/errlist.c:627 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:163 +msgid "Transport endpoint is already connected" +msgstr "ëÏÎÅÞÎÁÑ ÔÏÞËÁ ÐÅÒÅÄÁÞÉ ÕÖÅ ÐÏÄÓÏÅÄÉÎÅÎÁ" + +#. TRANS The socket is not connected to anything. You get this error when you +#. TRANS try to transmit data over a socket, without first specifying a +#. TRANS destination for the data. For a connectionless socket (for datagram +#. TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead. +#: stdio-common/../sysdeps/gnu/errlist.c:639 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:164 +msgid "Transport endpoint is not connected" +msgstr "ëÏÎÅÞÎÁÑ ÔÏÞËÁ ÐÅÒÅÄÁÞÉ ÎÅ ÐÏÄÓÏÅÄÉÎÅÎÁ" + +#. TRANS No default destination address was set for the socket. You get this +#. TRANS error when you try to transmit data over a connectionless socket, +#. TRANS without first specifying a destination for the data with @code{connect}. +#: stdio-common/../sysdeps/gnu/errlist.c:650 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:126 +msgid "Destination address required" +msgstr "ôÒÅÂÕÅÔÓÑ ÕËÁÚÁÔØ ÁÄÒÅÓ ÎÁÚÎÁÞÅÎÉÑ" + +#. TRANS The socket has already been shut down. +#: stdio-common/../sysdeps/gnu/errlist.c:659 +msgid "Cannot send after transport endpoint shutdown" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÓÌÁÔØ ÄÁÎÎÙÅ ÐÏÓÌÅ ×ÙËÌÀÞÅÎÉÑ ËÏÎÅÞÎÏÊ ÔÏÞËÉ ÐÅÒÅÄÁÞÉ" + +#. TRANS ??? +#: stdio-common/../sysdeps/gnu/errlist.c:668 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:174 +msgid "Too many references: cannot splice" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÓÓÙÌÏË: ÎÅ×ÏÚÍÏÖÎÏ ÏÂßÅÄÉÎÉÔØ" + +#. TRANS A socket operation with a specified timeout received no response during +#. TRANS the timeout period. +#: stdio-common/../sysdeps/gnu/errlist.c:678 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:175 +msgid "Connection timed out" +msgstr "÷ÒÅÍÑ ÏÖÉÄÁÎÉÑ ÓÏÅÄÉÎÅÎÉÑ ÉÓÔÅËÌÏ" + +#. TRANS A remote host refused to allow the network connection (typically because +#. TRANS it is not running the requested service). +#: stdio-common/../sysdeps/gnu/errlist.c:688 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:176 +msgid "Connection refused" +msgstr "÷ ÓÏÅÄÉÎÅÎÉÉ ÏÔËÁÚÁÎÏ" + +#. TRANS Too many levels of symbolic links were encountered in looking up a file name. +#. TRANS This often indicates a cycle of symbolic links. +#: stdio-common/../sysdeps/gnu/errlist.c:698 +msgid "Too many levels of symbolic links" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÕÒÏ×ÎÅÊ ÓÉÍ×ÏÌØÎÙÈ ÓÓÙÌÏË" + +#. TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for +#. TRANS Files}) or host name too long (in @code{gethostname} or +#. TRANS @code{sethostname}; @pxref{Host Identification}). +#: stdio-common/../sysdeps/gnu/errlist.c:709 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:108 +msgid "File name too long" +msgstr "óÌÉÛËÏÍ ÄÌÉÎÎÏÅ ÉÍÑ ÆÁÊÌÁ" + +#. TRANS The remote host for a requested network connection is down. +#: stdio-common/../sysdeps/gnu/errlist.c:718 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:177 +msgid "Host is down" +msgstr "èÏÓÔ ×ÙËÌÀÞÅÎ" + +#. TRANS The remote host for a requested network connection is not reachable. +#: stdio-common/../sysdeps/gnu/errlist.c:727 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:178 +msgid "No route to host" +msgstr "îÅÔ ÐÕÔÉ ÄÏ ÈÏÓÔÁ" + +#. TRANS Directory not empty, where an empty directory was expected. Typically, +#. TRANS this error occurs when you are trying to delete a directory. +#: stdio-common/../sysdeps/gnu/errlist.c:737 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:123 +msgid "Directory not empty" +msgstr "ëÁÔÁÌÏÇ ÎÅ ÐÕÓÔ" + +#. TRANS This means that the per-user limit on new process would be exceeded by +#. TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on +#. TRANS the @code{RLIMIT_NPROC} limit. +#: stdio-common/../sysdeps/gnu/errlist.c:748 +msgid "Too many processes" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÐÒÏÃÅÓÓÏ×" + +#. TRANS The file quota system is confused because there are too many users. +#. TRANS @c This can probably happen in a GNU system when using NFS. +#: stdio-common/../sysdeps/gnu/errlist.c:758 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:124 +msgid "Too many users" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÅÊ" + +#. TRANS The user's disk quota was exceeded. +#: stdio-common/../sysdeps/gnu/errlist.c:767 +msgid "Disk quota exceeded" +msgstr "ðÒÅ×ÙÛÅÎÁ ÄÉÓËÏ×ÁÑ Ë×ÏÔÁ" + +#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS +#. TRANS system which is due to file system rearrangements on the server host. +#. TRANS Repairing this condition usually requires unmounting and remounting +#. TRANS the NFS file system on the local host. +#: stdio-common/../sysdeps/gnu/errlist.c:779 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:181 +msgid "Stale NFS file handle" +msgstr "õÓÔÁÒÅ×ÛÉÊ ÈÜÎÄÌ ÆÁÊÌÁ NFS" + +#. TRANS An attempt was made to NFS-mount a remote file system with a file name that +#. TRANS already specifies an NFS-mounted file. +#. TRANS (This is an error on some operating systems, but we expect it to work +#. TRANS properly on the GNU system, making this error code impossible.) +#: stdio-common/../sysdeps/gnu/errlist.c:791 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:96 +msgid "Object is remote" +msgstr "üÔÏ ÕÄÁÌÅÎÎÙÊ ÏÂßÅËÔ" + +#. TRANS ??? +#: stdio-common/../sysdeps/gnu/errlist.c:800 +#, fuzzy +msgid "RPC struct is bad" +msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ÓÔÒÕËÔÕÒÁ RPC" + +#. TRANS ??? +#: stdio-common/../sysdeps/gnu/errlist.c:809 +#, fuzzy +msgid "RPC version wrong" +msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ×ÅÒÓÉÑ RPC" + +#. TRANS ??? +#: stdio-common/../sysdeps/gnu/errlist.c:818 +#, fuzzy +msgid "RPC program not available" +msgstr "ðÒÏÇÒÁÍÍÁ RPC ÎÅÄÏÓÔÕÐÎÁ" + +#. TRANS ??? +#: stdio-common/../sysdeps/gnu/errlist.c:827 +#, fuzzy +msgid "RPC program version wrong" +msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ×ÅÒÓÉÑ ÐÒÏÇÒÁÍÍÙ RPC" + +#. TRANS ??? +#: stdio-common/../sysdeps/gnu/errlist.c:836 +msgid "RPC bad procedure for program" +msgstr "" + +#. TRANS No locks available. This is used by the file locking facilities; see +#. TRANS @ref{File Locks}. This error is never generated by the GNU system, but +#. TRANS it can result from an operation to an NFS server running another +#. TRANS operating system. +#: stdio-common/../sysdeps/gnu/errlist.c:848 +msgid "No locks available" +msgstr "îÅÔ ÄÏÓÔÕÐÎÙÈ ÂÌÏËÉÒÏ×ÏË" + +#. TRANS Inappropriate file type or format. The file was the wrong type for the +#. TRANS operation, or a data file had the wrong format. +#. TRANS +#. TRANS On some systems @code{chmod} returns this error if you try to set the +#. TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}. +#: stdio-common/../sysdeps/gnu/errlist.c:861 +msgid "Inappropriate file type or format" +msgstr "îÅÐÏÄÈÏÄÑÝÉÊ ÔÉÐ ÉÌÉ ÆÏÒÍÁÔ ÆÁÊÌÁ" + +#. TRANS ??? +#: stdio-common/../sysdeps/gnu/errlist.c:870 +msgid "Authentication error" +msgstr "ïÛÉÂËÁ ÁÕÔÅÎÆÉËÁÃÉÉ" + +#. TRANS ??? +#: stdio-common/../sysdeps/gnu/errlist.c:879 +msgid "Need authenticator" +msgstr "îÅÏÂÈÏÄÉÍ ÁÕÔÅÎÆÉËÁÔÏÒ" + +#. TRANS Function not implemented. This indicates that the function called is +#. TRANS not implemented at all, either in the C library itself or in the +#. TRANS operating system. When you get this error, you can be sure that this +#. TRANS particular function will always fail with @code{ENOSYS} unless you +#. TRANS install a new version of the C library or the operating system. +#: stdio-common/../sysdeps/gnu/errlist.c:892 +msgid "Function not implemented" +msgstr "æÕÎËÃÉÑ ÎÅ ÒÅÁÌÉÚÏ×ÁÎÁ" + +#. TRANS Not supported. A function returns this error when certain parameter +#. TRANS values are valid, but the functionality they request is not available. +#. TRANS This can mean that the function does not implement a particular command +#. TRANS or option value or flag bit at all. For functions that operate on some +#. TRANS object given in a parameter, such as a file descriptor or a port, it +#. TRANS might instead mean that only @emph{that specific object} (file +#. TRANS descriptor, port, etc.) is unable to support the other parameters given; +#. TRANS different file descriptors might support different ranges of parameter +#. TRANS values. +#. TRANS +#. TRANS If the entire function is not available at all in the implementation, +#. TRANS it returns @code{ENOSYS} instead. +#: stdio-common/../sysdeps/gnu/errlist.c:912 +msgid "Not supported" +msgstr "îÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" + +#. TRANS While decoding a multibyte character the function came along an invalid +#. TRANS or an incomplete sequence of bytes or the given wide character is invalid. +#: stdio-common/../sysdeps/gnu/errlist.c:922 +msgid "Invalid or incomplete multibyte or wide character" +msgstr "îÅ×ÅÒÎÙÊ ÉÌÉ ÎÅÐÏÌÎÙÊ ÍÕÌØÔÉÂÁÊÔÎÙÊ ÉÌÉ ÛÉÒÏËÉÊ ÚÎÁË" + +#. TRANS In the GNU system, servers supporting the @code{term} protocol return +#. TRANS this error for certain operations when the caller is not in the +#. TRANS foreground process group of the terminal. Users do not usually see this +#. TRANS error because functions such as @code{read} and @code{write} translate +#. TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control}, +#. TRANS for information on process groups and these signals. +#: stdio-common/../sysdeps/gnu/errlist.c:936 +msgid "Inappropriate operation for background process" +msgstr "îÅÐÏÄÈÏÄÑÝÁÑ ÏÐÅÒÁÃÉÑ ÄÌÑ ÆÏÎÏ×ÏÇÏ ÐÒÏÃÅÓÓÁ" + +#. TRANS In the GNU system, opening a file returns this error when the file is +#. TRANS translated by a program and the translator program dies while starting +#. TRANS up, before it has connected to the file. +#: stdio-common/../sysdeps/gnu/errlist.c:947 +msgid "Translator died" +msgstr "ôÒÁÎÓÌÑÔÏÒ ÕÍÅÒ" + +#. TRANS The experienced user will know what is wrong. +#. TRANS @c This error code is a joke. Its perror text is part of the joke. +#. TRANS @c Don't change it. +#: stdio-common/../sysdeps/gnu/errlist.c:958 +msgid "?" +msgstr "?" + +#. TRANS You did @strong{what}? +#: stdio-common/../sysdeps/gnu/errlist.c:967 +msgid "You really blew it this time" +msgstr "îÁ ÜÔÏÔ ÒÁÚ ×Ù ×ÓÅÈ ÏÐÒÏËÉÎÕÌÉ" + +#. TRANS Go home and have a glass of warm, dairy-fresh milk. +#: stdio-common/../sysdeps/gnu/errlist.c:976 +msgid "Computer bought the farm" +msgstr "ëÏÍÐØÀÔÅÒ ËÕÐÉÌ ÆÅÒÍÕ" + +#. TRANS This error code has no purpose. +#: stdio-common/../sysdeps/gnu/errlist.c:985 +msgid "Gratuitous error" +msgstr "âÅÚ×ÏÚÍÅÚÄÎÁÑ ÏÛÉÂËÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:993 +msgid "Bad message" +msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1001 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:66 +msgid "Identifier removed" +msgstr "éÄÅÎÔÉÆÉËÁÔÏÒ ÂÙÌ ÕÄÁÌÅÎ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1009 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:104 +msgid "Multihop attempted" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1017 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:91 +msgid "No data available" +msgstr "îÅÔ ÄÏÓÔÕÐÎÙÈ ÄÁÎÎÙÈ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1025 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:97 +msgid "Link has been severed" +msgstr "óÏÅÄÉÎÅÎÅÎÉÅ ÂÙÌÏ ÒÁÚÏÒ×ÁÎÏ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1033 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:65 +msgid "No message of desired type" +msgstr "îÅÔ ÓÏÏÂÝÅÎÉÑ ÖÅÌÁÅÍÏÇÏ ÔÉÐÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1041 +msgid "Out of streams resources" +msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÐÏÔÏËÏ×ÙÈ ÒÅÓÕÒÓÏ×" + +#: stdio-common/../sysdeps/gnu/errlist.c:1049 +msgid "Device not a stream" +msgstr "õÓÔÒÏÊÓÔ×Ï ÎÅ Ñ×ÌÑÅÔÓÑ ÐÏÔÏËÏÍ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1057 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:109 +msgid "Value too large for defined data type" +msgstr "úÎÁÞÅÎÉÅ ÓÌÉÛËÏÍ ×ÅÌÉËÏ ÄÌÑ ÔÁËÏÇÏ ÔÉÐÁ ÄÁÎÎÙÈ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1065 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:101 +msgid "Protocol error" +msgstr "ïÛÉÂËÁ ÐÒÏÔÏËÏÌÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1073 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:92 +msgid "Timer expired" +msgstr "ôÁÊÍÅÒ ÉÓÔÅË" + +#. TRANS Operation canceled; an asynchronous operation was canceled before it +#. TRANS completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel}, +#. TRANS the normal result is for the operations affected to complete with this +#. TRANS error; @pxref{Cancel AIO Operations}. +#: stdio-common/../sysdeps/gnu/errlist.c:1085 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:77 +msgid "Operation canceled" +msgstr "ïÐÅÒÁÃÉÑ ÏÔÍÅÎÅÎÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1093 +msgid "Interrupted system call should be restarted" +msgstr "ðÒÅÒ×ÁÎÙÊ ÓÉÓÔÅÍÎÙÊ ×ÙÚÏ× ÓÌÅÄÕÅÔ ÐÅÒÅÚÁÐÕÓÔÉÔØ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1101 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:67 +msgid "Channel number out of range" +msgstr "îÏÍÅÒ ËÁÎÁÌÁ ×ÎÅ ÄÉÁÐÁÚÏÎÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1109 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:68 +msgid "Level 2 not synchronized" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1117 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:69 +msgid "Level 3 halted" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1125 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:70 +msgid "Level 3 reset" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1133 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:71 +msgid "Link number out of range" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1141 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:72 +msgid "Protocol driver not attached" +msgstr "äÒÁÊ×ÅÒ ÐÒÏÔÏËÏÌÁ ÎÅ ÐÏÄÓÏÅÄÉÎÅÎ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1149 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:73 +msgid "No CSI structure available" +msgstr "îÅÔ ÄÏÓÔÕÐÎÏÊ CSI-ÓÔÒÕËÔÕÒÙ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1157 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:74 +msgid "Level 2 halted" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1165 +msgid "Invalid exchange" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1173 +msgid "Invalid request descriptor" +msgstr "îÅ×ÅÒÎÙÊ ÄÅÓËÒÉÐÔÏÒ ÚÁÐÒÏÓÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1181 +msgid "Exchange full" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1189 +msgid "No anode" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1197 +msgid "Invalid request code" +msgstr "îÅ×ÅÒÎÙÊ ËÏÄ ÚÁÐÒÏÓÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1205 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:85 +msgid "Invalid slot" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1213 +msgid "File locking deadlock error" +msgstr "ïÛÉÂËÁ: ÔÕÐÉË ÐÒÉ ÂÌÏËÉÒÏ×ËÅ ÆÁÊÌÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1221 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:87 +msgid "Bad font file format" +msgstr "îÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÆÁÊÌÁ ÓÏ ÛÒÉÆÔÏÍ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1229 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:94 +msgid "Machine is not on the network" +msgstr "íÁÛÉÎÁ ÎÅ × ÓÅÔÉ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1237 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:95 +msgid "Package not installed" +msgstr "ðÁËÅÔ ÎÅ ÕÓÔÁÎÏ×ÌÅÎ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1245 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:98 +msgid "Advertise error" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1253 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:99 +msgid "Srmount error" +msgstr "ïÛÉÂËÁ Srmount" + +#: stdio-common/../sysdeps/gnu/errlist.c:1261 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:100 +msgid "Communication error on send" +msgstr "ïÛÉÂËÁ Ó×ÑÚÉ ÐÒÉ ÏÔÐÒÁ×ËÅ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1269 +msgid "RFS specific error" +msgstr "óÐÅÃÉÆÉÞÎÁÑ ÄÌÑ RFS ÏÛÉÂËÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1277 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:110 +msgid "Name not unique on network" +msgstr "éÍÑ ÎÅ ÕÎÉËÁÌØÎÏ × ÓÅÔÉ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1285 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:111 +msgid "File descriptor in bad state" +msgstr "äÅÓËÒÉÐÔÏÒ ÆÁÊÌÁ × ÐÌÏÈÏÍ ÓÏÓÔÏÑÎÉÉ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1293 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:112 +msgid "Remote address changed" +msgstr "õÄÁÌÅÎÎÙÊ ÁÄÒÅÓ ÂÙÌ ÉÚÍÅÎÅÎ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1301 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:113 +msgid "Can not access a needed shared library" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÄÏÓÔÕÐ Ë ÎÕÖÎÏÊ ÒÁÚÄÅÌÑÅÍÏÊ ÂÉÂÌÉÏÔÅËÅ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1309 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:114 +msgid "Accessing a corrupted shared library" +msgstr "ïÂÒÁÝÅÎÉÅ Ë ÐÏ×ÒÅÖÄÅÎÎÏÊ ÒÁÚÄÅÌÑÅÍÏÊ ÂÉÂÌÉÏÔÅËÅ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1317 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:115 +msgid ".lib section in a.out corrupted" +msgstr "óÅËÃÉÑ .lib × a.out ÐÏ×ÒÅÖÄÅÎÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1325 +msgid "Attempting to link in too many shared libraries" +msgstr "ðÏÐÙÔËÁ ÐÏÄËÌÀÞÉÔØ ÓÌÉÛËÏÍ ÍÎÏÇÏ ÒÁÚÄÅÌÑÅÍÙÊ ÂÉÂÌÉÏÔÅË" + +#: stdio-common/../sysdeps/gnu/errlist.c:1333 +msgid "Cannot exec a shared library directly" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ×ÙÐÏÌÎÉÔØ ÒÁÚÄÅÌÑÅÍÕÀ ÂÉÂÌÉÏÔÅËÕ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1341 +msgid "Streams pipe error" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1349 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:165 +msgid "Structure needs cleaning" +msgstr "óÔÒÕËÔÕÒÕ ÎÅÏÂÈÏÄÉÍÏ ÐÏÞÉÓÔÉÔØ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1357 +msgid "Not a XENIX named type file" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1365 +msgid "No XENIX semaphores available" +msgstr "óÅÍÁÆÏÒÙ XENIX ÎÅÄÏÓÔÕÐÎÙ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1373 +msgid "Is a named type file" +msgstr "" + +#: stdio-common/../sysdeps/gnu/errlist.c:1381 +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:170 +msgid "Remote I/O error" +msgstr "ïÛÉÂËÁ ÕÄÁÌÅÎÎÏÇÏ ××ÏÄÁ/×Ù×ÏÄÁ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1389 +msgid "No medium found" +msgstr "îÏÓÉÔÅÌØ ÎÅ ÎÁÊÄÅÎ" + +#: stdio-common/../sysdeps/gnu/errlist.c:1397 +msgid "Wrong medium type" +msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÔÉÐ ÎÏÓÉÔÅÌÑ" + +#: stdio-common/../sysdeps/unix/siglist.c:26 +msgid "Signal 0" +msgstr "óÉÇÎÁÌ 0" + +#: stdio-common/../sysdeps/unix/siglist.c:32 +msgid "IOT trap" +msgstr "ìÏ×ÕÛËÁ IOT" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:30 +msgid "Error 0" +msgstr "ïÛÉÂËÁ 0" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:31 +#: nis/nis_error.c:40 +msgid "Not owner" +msgstr "îÅ ×ÌÁÄÅÌÅÃ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:35 +msgid "I/O error" +msgstr "ïÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:37 +msgid "Arg list too long" +msgstr "óÐÉÓÏË ÁÒÇÕÍÅÎÔÏ× ÓÌÉÛËÏÍ ÄÌÉÎÎÙÊ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:39 +msgid "Bad file number" +msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÎÏÍÅÒ ÆÁÊÌÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:42 +msgid "Not enough space" +msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÍÅÓÔÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:46 +msgid "Device busy" +msgstr "õÓÔÒÏÊÓÔ×Ï ÚÁÎÑÔÏ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:48 +msgid "Cross-device link" +msgstr "óÓÙÌËÁ ÍÅÖÄÕ ÕÓÔÒÏÊÓÔ×ÁÍÉ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:53 +msgid "File table overflow" +msgstr "ðÅÒÅÐÏÌÎÅÎÉÅ ÔÁÂÌÉÃÙ ÆÁÊÌÏ×" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:63 +msgid "Argument out of domain" +msgstr "áÇÒÕÍÅÎÔ ×ÎÅ ÄÉÁÐÁÚÏÎÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:64 +msgid "Result too large" +msgstr "òÅÚÕÌØÔÁÔ ÓÌÉÛËÏÍ ×ÅÌÉË" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:75 +msgid "Deadlock situation detected/avoided" +msgstr "ôÕÐÉËÏ×ÁÑ ÓÉÔÕÁÃÉÑ ÏÂÎÁÒÕÖÅÎÁ/ÐÒÅÄÏÔ×ÒÁÝÅÎÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:76 +msgid "No record locks available" +msgstr "îÅÔ ÄÏÓÔÕÐÎÙÈ ÂÌÏËÉÒÏ×ÏË ÚÁÐÉÓÅÊ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:79 +msgid "Disc quota exceeded" +msgstr "ðÒÅ×ÙÛÅÎÁ ÄÉÓËÏ×ÁÑ Ë×ÏÔÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:80 +msgid "Bad exchange descriptor" +msgstr "" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:81 +msgid "Bad request descriptor" +msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÄÅÓËÒÉÐÔÏÒ ÚÁÐÒÏÓÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:82 +msgid "Message tables full" +msgstr "ôÁÂÌÉÃÙ ÓÏÏÂÝÅÎÉÊ ÐÅÒÅÐÏÌÎÅÎÙ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:83 +msgid "Anode table overflow" +msgstr "" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:84 +msgid "Bad request code" +msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ËÏÄ ÚÁÐÒÏÓÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:86 +msgid "File locking deadlock" +msgstr "ôÕÐÉË ÐÒÉ ÂÌÏËÉÒÏ×ËÅ ÆÁÊÌÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:88 +msgid "Error 58" +msgstr "ïÛÉÂËÁ 58" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:89 +msgid "Error 59" +msgstr "ïÛÉÂËÁ 59" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:90 +msgid "Not a stream device" +msgstr "üÔÏ ÎÅ ÐÏÔÏÞÎÏÅ ÕÓÔÒÏÊÓÔ×Ï" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:93 +msgid "Out of stream resources" +msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÐÏÔÏËÏ×ÙÈ ÒÅÓÕÒÓÏ×" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:102 +msgid "Error 72" +msgstr "ïÛÉÂËÁ 72" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:103 +msgid "Error 73" +msgstr "ïÛÉÂËÁ 73" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:105 +msgid "Error 75" +msgstr "ïÛÉÂËÁ 75" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:106 +msgid "Error 76" +msgstr "ïÛÉÂËÁ 76" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:107 +msgid "Not a data message" +msgstr "üÔÏ ÎÅ ÓÏÏÂÝÅÎÉÅ Ó ÄÁÎÎÙÍÉ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:116 +msgid "Attempting to link in more shared libraries than system limit" +msgstr "ðÏÐÙÔËÁ ÐÏÄËÌÀÞÉÔØ ÂÏÌØÛÅ ÒÁÚÄÅÌÑÅÍÙÈ ÂÉÂÌÉÏÔÅË, ÞÅÍ ÐÏÚ×ÏÌÑÅÔ ÓÉÓÔÅÍÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:117 +msgid "Can not exec a shared library directly" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ×ÙÐÏÌÎÉÔØ ÒÁÚÄÅÌÑÅÍÕÀ ÂÉÂÌÉÏÔÅËÕ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:118 +msgid "Illegal byte sequence" +msgstr "îÅ×ÅÒÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÂÁÊÔ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:119 +msgid "Operation not applicable" +msgstr "ïÐÅÒÁÃÉÑ ÎÅÐÒÉÍÅÎÉÍÁ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:120 +msgid "Number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS" +msgstr "þÉÓÌÏ ÓÉÍ×ÏÌØÎÙÈ ÓÓÙÌÏË, ×ÓÔÒÅÞÅÎÙÈ ÐÒÉ ÏÂÈÏÄÅ ÐÕÔÉ, ÐÒÅ×ÏÓÈÏÄÉÔ MAXSYMLINKS" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:121 +msgid "Error 91" +msgstr "ïÛÉÂËÁ 91" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:122 +msgid "Error 92" +msgstr "ïÛÉÂËÁ 92" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:129 +msgid "Option not supported by protocol" +msgstr "÷ÏÚÍÏÖÎÏÓÔØ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÐÒÏÔÏËÏÌÏÍ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:130 +msgid "Error 100" +msgstr "ïÛÉÂËÁ 100" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:131 +msgid "Error 101" +msgstr "ïÛÉÂËÁ 101" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:132 +msgid "Error 102" +msgstr "ïÛÉÂËÁ 102" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:133 +msgid "Error 103" +msgstr "ïÛÉÂËÁ 103" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:134 +msgid "Error 104" +msgstr "ïÛÉÂËÁ 104" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:135 +msgid "Error 105" +msgstr "ïÛÉÂËÁ 105" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:136 +msgid "Error 106" +msgstr "ïÛÉÂËÁ 106" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:137 +msgid "Error 107" +msgstr "ïÛÉÂËÁ 107" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:138 +msgid "Error 108" +msgstr "ïÛÉÂËÁ 108" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:139 +msgid "Error 109" +msgstr "ïÛÉÂËÁ 109" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:140 +msgid "Error 110" +msgstr "ïÛÉÂËÁ 110" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:141 +msgid "Error 111" +msgstr "ïÛÉÂËÁ 111" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:142 +msgid "Error 112" +msgstr "ïÛÉÂËÁ 112" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:143 +msgid "Error 113" +msgstr "ïÛÉÂËÁ 113" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:144 +msgid "Error 114" +msgstr "ïÛÉÂËÁ 114" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:145 +msgid "Error 115" +msgstr "ïÛÉÂËÁ 115" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:146 +msgid "Error 116" +msgstr "ïÛÉÂËÁ 116" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:147 +msgid "Error 117" +msgstr "ïÛÉÂËÁ 117" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:148 +msgid "Error 118" +msgstr "ïÛÉÂËÁ 118" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:149 +msgid "Error 119" +msgstr "ïÛÉÂËÁ 119" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:152 +msgid "Operation not supported on transport endpoint" +msgstr "ïÐÅÒÁÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÎÁ ËÏÎÅÞÎÏÊ ÔÏÞËÅ ÐÅÒÅÄÁÞÉ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:154 +msgid "Address family not supported by protocol family" +msgstr "óÅÍÅÊÓÔ×Ï ÁÄÒÅÓÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÓÅÍÅÊÓÔ×ÏÍ ÐÒÏÔÏËÏÌÏ×" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:159 +msgid "Network dropped connection because of reset" +msgstr "óÅÔØ ÓÂÒÏÓÉÌÁ ÓÏÅÄÉÎÅÎÉÅ ÉÚ-ÚÁ ÐÅÒÅÚÁÇÒÕÚËÉ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:166 +msgid "Error 136" +msgstr "ïÛÉÂËÁ 136" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:167 +msgid "Not a name file" +msgstr "" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:168 +msgid "Not available" +msgstr "îÅÄÏÓÔÕÐÎÏ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:169 +msgid "Is a name file" +msgstr "" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:171 +msgid "Reserved for future use" +msgstr "úÁÒÅÚÅÒ×ÉÒÏ×ÁÎÏ ÎÁ ÂÕÄÕÝÅÅ" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:172 +msgid "Error 142" +msgstr "ïÛÉÂËÁ 142" + +#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:173 +msgid "Cannot send after socket shutdown" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔÐÒÁ×ÉÔØ ÐÏÓÌÅ ×ÙËÌÀÞÅÎÉÑ ÓÏËÅÔÁ" + +#: stdio-common/psignal.c:63 +#, c-format +msgid "%s%sUnknown signal %d\n" +msgstr "%s%sîÅÉÚ×ÅÓÔÎÙÊ ÓÉÇÎÁÌ %d\n" + +#: dlfcn/dlinfo.c:51 +msgid "RTLD_SELF used in code not dynamically loaded" +msgstr "RTLD_SELF ÉÓÐÏÌØÚÏ×ÁÎÏ × ÎÅ ÄÉÎÁÍÉÞÅÓËÉ ÚÁÇÒÕÖÅÎÎÏÍ ËÏÄÅ" + +#: dlfcn/dlinfo.c:61 +msgid "unsupported dlinfo request" +msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÚÁÐÒÏÓ dlinfo" + +#: malloc/mcheck.c:346 +msgid "memory is consistent, library is buggy\n" +msgstr "ÐÁÍÑÔØ × ÈÏÒÏÛÅÍ ÓÏÓÔÏÑÎÉÉ, ÏÛÉÂËÉ × ÂÉÂÌÉÏÔÅËÅ\n" + +#: malloc/mcheck.c:349 +msgid "memory clobbered before allocated block\n" +msgstr "ÐÁÍÑÔØ ÚÁÔÅÒÔÁ ÐÅÒÅÄ ×ÙÄÅÌÅÎÎÙÍ ÂÌÏËÏÍ\n" + +#: malloc/mcheck.c:352 +msgid "memory clobbered past end of allocated block\n" +msgstr "ÐÁÍÑÔØ ÚÁÔÅÒÔÁ ÐÏÓÌÅ ËÏÎÃÁ ×ÙÄÅÌÅÎÎÏÇÏ ÂÌÏËÁ\n" + +#: malloc/mcheck.c:355 +msgid "block freed twice\n" +msgstr "ÂÌÏË ÏÓ×ÏÂÏÖÄÅÎ Ä×ÁÖÄÙ\n" + +#: malloc/mcheck.c:358 +msgid "bogus mcheck_status, library is buggy\n" +msgstr "ÎÅÁÄÅË×ÁÔÎÙÊ mcheck_status, × ÂÉÂÌÉÏÔÅËÅ ÏÛÉÂËÉ\n" + +#: malloc/memusagestat.c:53 +msgid "Name output file" +msgstr "éÍÑ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ" + +#: malloc/memusagestat.c:54 +msgid "Title string used in output graphic" +msgstr "úÁÇÏÌÏ×ÏË ÄÌÑ ×ÙÈÏÄÎÏÇÏ ÇÒÁÆÉËÁ" + +#: malloc/memusagestat.c:55 +msgid "Generate output linear to time (default is linear to number of function calls)" +msgstr "çÅÎÅÒÉÒÏ×ÁÔØ ×Ù×ÏÄ ÌÉÎÅÊÎÏ ÏÔÎÏÓÉÔÅÌØÎÏ ×ÒÅÍÅÎÉ (ÐÏ ÕÍÏÌÞÁÎÉÀ ÌÉÎÅÊÎÏ ÏÔÎÏÓÉÔÅÌØÎÏ ÞÉÓÌÕ ×ÙÚÏ×Ï× ÆÕÎËÃÉÊ)" + +#: malloc/memusagestat.c:57 +msgid "Also draw graph for total memory consumption" +msgstr "ðÏÓÔÒÏÉÔØ ÔÁËÖÅ ÇÒÁÆÉË ÉÔÏÇÏ×ÏÇÏ ÐÏÔÒÅÂÌÅÎÉÑ ÐÁÍÑÔÉ" + +#: malloc/memusagestat.c:58 +msgid "make output graphic VALUE pixel wide" +msgstr "ÒÉÓÏ×ÁÔØ ÇÒÁÆÉË ÛÉÒÉÎÏÊ × VALUE ÐÉËÓÅÌÏ×" + +#: malloc/memusagestat.c:59 +msgid "make output graphic VALUE pixel high" +msgstr "ÒÉÓÏ×ÁÔØ ÇÒÁÆÉË ×ÙÓÏÔÏÊ × VALUE ÐÉËÓÅÌÏ×" + +#: malloc/memusagestat.c:64 +msgid "Generate graphic from memory profiling data" +msgstr "óÇÅÎÅÒÉÒÏ×ÁÔØ ÇÒÁÆÉË ÐÏ ÄÁÎÎÙÍ ÐÒÏÆÉÌÉÒÏ×ÁÎÉÑ ÐÁÍÑÔÉ" + +#: malloc/memusagestat.c:67 +msgid "DATAFILE [OUTFILE]" +msgstr "æáêì-äáîîùè [÷ùèïäîïê-æáêì]" + +#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57 +msgid "Unknown error" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ" + +#: string/strsignal.c:69 +#, c-format +msgid "Real-time signal %d" +msgstr "óÉÇÎÁÌ ÒÅÁÌØÎÏÇÏ ×ÒÅÍÅÎÉ %d" + +#: string/strsignal.c:73 +#, c-format +msgid "Unknown signal %d" +msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÓÉÇÎÁÌ %d" + +#: timezone/zdump.c:176 +#, c-format +msgid "%s: usage is %s [ --version ] [ -v ] [ -c cutoff ] zonename ...\n" +msgstr "%s: ÉÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ --version ] [ -v ] [ -c cutoff ] ÉÍÑ-ÚÏÎÙ ...\n" + +#: timezone/zdump.c:269 +msgid "Error writing standard output" +msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÎÁ ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ" + +#: timezone/zic.c:361 +#, c-format +msgid "%s: Memory exhausted: %s\n" +msgstr "%s: ðÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ: %s\n" + +#: timezone/zic.c:386 misc/error.c:129 misc/error.c:157 +msgid "Unknown system error" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ" + +#: timezone/zic.c:420 +#, c-format +msgid "\"%s\", line %d: %s" +msgstr "\"%s\", ÓÔÒÏËÁ %d: %s" + +#: timezone/zic.c:423 +#, c-format +msgid " (rule from \"%s\", line %d)" +msgstr " (ÐÒÁ×ÉÌÏ ÉÚ \"%s\", ÓÔÒÏËÁ %d)" + +#: timezone/zic.c:435 +msgid "warning: " +msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: " + +#: timezone/zic.c:445 +#, c-format +msgid "" +"%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" +"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" +msgstr "" +"%s: ÉÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ --version ] [ -s ] [ -v ] [ -l ÍÅÓÔÎÏÅ-×ÒÅÍÑ ] [ -p ÐÒÁ×ÉÌÁ-posix ] \\\n" +"\t[ -d ËÁÔÁÌÏÇ ] [ -L ×ÉÓÏËÏÓÎÙÅ-ÓÅËÕÎÄÙ ] [ -y yearistype ] [ ÉÍÑ-ÆÁÊÌÁ ... ]\n" + +#: timezone/zic.c:492 +#, c-format +msgid "%s: More than one -d option specified\n" +msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -d\n" + +#: timezone/zic.c:502 +#, c-format +msgid "%s: More than one -l option specified\n" +msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -l\n" + +#: timezone/zic.c:512 +#, c-format +msgid "%s: More than one -p option specified\n" +msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -p\n" + +#: timezone/zic.c:522 +#, c-format +msgid "%s: More than one -y option specified\n" +msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -y\n" + +#: timezone/zic.c:532 +#, c-format +msgid "%s: More than one -L option specified\n" +msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -L\n" + +#: timezone/zic.c:639 +#, c-format +msgid "%s: Can't unlink %s: %s\n" +msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÓÓÙÌËÕ %s: %s\n" + +#: timezone/zic.c:646 +msgid "hard link failed, symbolic link used" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÄÅÌÁÔØ ÖÅÓÔËÕÀ ÓÓÙÌËÕ, ÉÓÐÏÌØÚÕÅÔÓÑ ÓÉÍ×ÏÌØÎÁÑ" + +#: timezone/zic.c:654 +#, c-format +msgid "%s: Can't link from %s to %s: %s\n" +msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÓÓÙÌËÕ Ó %s ÎÁ %s: %s\n" + +#: timezone/zic.c:752 timezone/zic.c:754 +msgid "same rule name in multiple files" +msgstr "ÏÄÉÎÁËÏ×ÏÅ ÉÍÑ ÐÒÁ×ÉÌÁ × ÎÅÓËÏÌØËÉÈ ÆÁÊÌÁÈ" + +#: timezone/zic.c:795 +msgid "unruly zone" +msgstr "ÎÅ ÐÏÄÞÉÎÑÀÝÁÑÓÑ ÐÒÁ×ÉÌÁÍ ÚÏÎÁ" + +#: timezone/zic.c:802 +#, c-format +msgid "%s in ruleless zone" +msgstr "%s × ÚÏÎÅ ÂÅÚ ÐÒÁ×ÉÌ" + +#: timezone/zic.c:823 +msgid "standard input" +msgstr "ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ" + +#: timezone/zic.c:828 +#, c-format +msgid "%s: Can't open %s: %s\n" +msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n" + +#: timezone/zic.c:839 +msgid "line too long" +msgstr "ÓÔÒÏËÁ ÓÌÉÛËÏÍ ÄÌÉÎÎÁÑ" + +#: timezone/zic.c:859 +msgid "input line of unknown type" +msgstr "×ÈÏÄÎÁÑ ÓÔÒÏËÁ ÎÅÉÚ×ÅÓÔÎÏÇÏ ÔÉÐÁ" + +#: timezone/zic.c:875 +#, c-format +msgid "%s: Leap line in non leap seconds file %s\n" +msgstr "%s: ÷ÉÓÏËÏÓÎÁÑ ÓÔÒÏËÁ ×ÅË ÆÁÊÌÁ ×ÉÓÏËÏÓÎÙÈ ÓÅËÕÎÄ %s\n" + +#: timezone/zic.c:882 timezone/zic.c:1297 timezone/zic.c:1322 +#, c-format +msgid "%s: panic: Invalid l_value %d\n" +msgstr "%s: ÐÁÎÉËÁ: îÅÄÏÐÕÓÔÉÍÏÅ l_value %d\n" + +#: timezone/zic.c:890 +#, c-format +msgid "%s: Error reading %s\n" +msgstr "%s: ïÛÉÂËÁ ÞÔÅÎÉÑ %s\n" + +#: timezone/zic.c:897 +#, c-format +msgid "%s: Error closing %s: %s\n" +msgstr "%s: ïÛÉÂËÁ ÚÁËÒÙÔÉÑ %s: %s\n" + +#: timezone/zic.c:902 +msgid "expected continuation line not found" +msgstr "ÏÖÉÄÁÅÍÁÑ ÓÔÒÏËÁ ÐÒÏÄÏÌÖÅÎÉÑ ÎÅ ÎÁÊÄÅÎÁ" + +#: timezone/zic.c:958 +msgid "wrong number of fields on Rule line" +msgstr "ÎÅÐÒÁ×ÉÌØÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Rule" + +#: timezone/zic.c:962 +msgid "nameless rule" +msgstr "ÂÅÚÙÍÑÎÎÏÅ ÐÒÁ×ÉÌÏ" + +#: timezone/zic.c:967 +msgid "invalid saved time" +msgstr "ÎÅ×ÅÒÎÏÅ ÓÏÈÒÁÎÅÎÎÏÅ ×ÒÅÍÑ" + +#: timezone/zic.c:986 +msgid "wrong number of fields on Zone line" +msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Zone" + +#: timezone/zic.c:992 +#, c-format +msgid "\"Zone %s\" line and -l option are mutually exclusive" +msgstr "ÓÔÒÏËÁ \"Zone %s\" É ËÌÀÞ -l ×ÚÁÉÍÎÏ ÉÓËÌÀÞÁÀÔÓÑ" + +#: timezone/zic.c:1000 +#, c-format +msgid "\"Zone %s\" line and -p option are mutually exclusive" +msgstr "ÓÔÒÏËÁ \"Zone %s\" É ËÌÀÞ -p ×ÚÁÉÍÎÏ ÉÓËÌÀÞÁÀÔÓÑ" + +#: timezone/zic.c:1012 +#, c-format +msgid "duplicate zone name %s (file \"%s\", line %d)" +msgstr "ÐÏ×ÔÏÒÎÏÅ ÉÍÑ ÚÏÎÙ %s (ÆÁÊÌ \"%s\", ÓÔÒÏËÁ %d)" + +#: timezone/zic.c:1028 +msgid "wrong number of fields on Zone continuation line" +msgstr "ÎÅÐÒÁ×ÉÌØÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ ÐÒÏÄÏÌÖÅÎÉÑ Zone" + +#: timezone/zic.c:1068 +msgid "invalid UTC offset" +msgstr "ÎÅ×ÅÒÎÏÅ ÓÍÅÝÅÎÉÅ ÏÔ UTC" + +#: timezone/zic.c:1071 +msgid "invalid abbreviation format" +msgstr "ÎÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÓÏËÒÁÝÅÎÉÑ" + +#: timezone/zic.c:1097 +msgid "Zone continuation line end time is not after end time of previous line" +msgstr "ËÏÎÅÞÎÏÅ ×ÒÅÍÑ × ÓÔÒÏËÅ ÐÒÏÄÏÌÖÅÎÉÑ Zone ÎÅ ÐÏÚÄÎÅÅ ËÏÎÅÞÎÏÇÏ ×ÒÅÍÅÎÉ × ÐÒÅÄÙÄÕÝÅÊ ÓÔÒÏËÅ" + +#: timezone/zic.c:1124 +msgid "wrong number of fields on Leap line" +msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Leap" + +#: timezone/zic.c:1133 +msgid "invalid leaping year" +msgstr "ÎÅ×ÅÒÎÙÊ ×ÉÓÏËÏÓÎÙÊ ÇÏÄ" + +#: timezone/zic.c:1148 timezone/zic.c:1252 +msgid "invalid month name" +msgstr "ÎÅ×ÅÒÎÏÅ ÎÁÚ×ÁÎÉÅ ÍÅÓÑÃÁ" + +#: timezone/zic.c:1161 timezone/zic.c:1374 timezone/zic.c:1388 +msgid "invalid day of month" +msgstr "ÎÅ×ÅÒÎÙÊ ÄÅÎØ ÍÅÓÑÃÁ" + +#: timezone/zic.c:1166 +msgid "time before zero" +msgstr "×ÒÅÍÑ ÄÏ ÎÕÌÑ" + +#: timezone/zic.c:1170 +msgid "time too small" +msgstr "×ÒÅÍÑ ÓÌÉÛËÏÍ ÍÁÌÏ" + +#: timezone/zic.c:1174 +msgid "time too large" +msgstr "×ÒÅÍÑ ÓÌÉÛËÏÍ ×ÅÌÉËÏ" + +#: timezone/zic.c:1178 timezone/zic.c:1281 +msgid "invalid time of day" +msgstr "ÎÅ×ÅÒÎÏÅ ×ÒÅÍÑ ÄÎÑ" + +#: timezone/zic.c:1197 +msgid "illegal CORRECTION field on Leap line" +msgstr "ÎÅ×ÅÒÎÏÅ ÐÏÌÅ CORRECTION × ÓÔÒÏËÅ Leap" + +#: timezone/zic.c:1201 +msgid "illegal Rolling/Stationary field on Leap line" +msgstr "ÎÅ×ÅÒÎÏÅ ÐÏÌÅ Rolling/Stationary × ÓÔÒÏËÅ Leap" + +#: timezone/zic.c:1216 +msgid "wrong number of fields on Link line" +msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Link" + +#: timezone/zic.c:1220 +msgid "blank FROM field on Link line" +msgstr "ÐÕÓÔÏÅ ÐÏÌÅ FROM × ÓÔÒÏËÅ Link" + +#: timezone/zic.c:1224 +msgid "blank TO field on Link line" +msgstr "ÐÕÓÔÏÅ ÐÏÌÅ TO × ÓÔÒÏËÅ Link" + +#: timezone/zic.c:1301 +msgid "invalid starting year" +msgstr "ÎÅ×ÅÒÎÙÊ ÎÁÞÁÌØÎÙÊ ÇÏÄ" + +#: timezone/zic.c:1305 +msgid "starting year too low to be represented" +msgstr "ÎÁÞÁÌØÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ÍÁÌ É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ" + +#: timezone/zic.c:1307 +msgid "starting year too high to be represented" +msgstr "ÎÁÞÁÌØÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ×ÅÌÉË É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ" + +#: timezone/zic.c:1326 +msgid "invalid ending year" +msgstr "ÎÅ×ÅÒÎÙÊ ËÏÎÅÞÎÙÊ ÇÏÄ" + +#: timezone/zic.c:1330 +msgid "ending year too low to be represented" +msgstr "ËÏÎÅÞÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ÍÁÌ É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ" + +#: timezone/zic.c:1332 +msgid "ending year too high to be represented" +msgstr "ËÏÎÅÞÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ×ÅÌÉË É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ" + +#: timezone/zic.c:1335 +msgid "starting year greater than ending year" +msgstr "ÎÁÞÁÌØÎÙÊ ÇÏÄ ÂÏÌØÛÅ ËÏÎÅÞÎÏÇÏ" + +#: timezone/zic.c:1342 +msgid "typed single year" +msgstr "ÏÄÉÎ ÔÉÐÉÚÉÒÏ×ÁÎÎÙÊ ÇÏÄ" + +#: timezone/zic.c:1379 +msgid "invalid weekday name" +msgstr "ÎÅ×ÅÒÎÏÅ ÎÁÚ×ÁÎÉÑ ÄÎÑ ÎÅÄÅÌÉ" + +#: timezone/zic.c:1494 +#, c-format +msgid "%s: Can't remove %s: %s\n" +msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ %s: %s\n" + +#: timezone/zic.c:1504 +#, c-format +msgid "%s: Can't create %s: %s\n" +msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ %s: %s\n" + +#: timezone/zic.c:1570 +#, c-format +msgid "%s: Error writing %s\n" +msgstr "%s: ïÛÉÂËÁ ÚÁÐÉÓÉ %s\n" + +#: timezone/zic.c:1760 +msgid "can't determine time zone abbreviation to use just after until time" +msgstr "" + +#: timezone/zic.c:1803 +msgid "too many transitions?!" +msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÐÅÒÅÈÏÄÏ×?!" + +#: timezone/zic.c:1822 +msgid "internal error - addtype called with bad isdst" +msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ -- addtype ×ÙÚ×ÁÎÁ Ó ÎÅÐÒÁ×ÉÌØÎÙÍ isdst" + +#: timezone/zic.c:1826 +msgid "internal error - addtype called with bad ttisstd" +msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ -- addtype ×ÙÚ×ÁÎÁ Ó ÎÅÐÒÁ×ÉÌØÎÙÍ ttisstd" + +#: timezone/zic.c:1830 +msgid "internal error - addtype called with bad ttisgmt" +msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ -- addtype ×ÙÚ×ÁÎÁ Ó ÎÅÐÒÁ×ÉÌØÎÙÍ ttisgmt" + +#: timezone/zic.c:1849 +msgid "too many local time types" +msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÔÉÐÏ× ÍÅÓÔÎÏÇÏ ×ÒÅÍÅÎÉ" + +#: timezone/zic.c:1877 +msgid "too many leap seconds" +msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ×ÉÓÏËÏÓÎÙÈ ÓÅËÕÎÄ" + +#: timezone/zic.c:1883 +msgid "repeated leap second moment" +msgstr "ÐÏ×ÔÏÒÑÀÝÉÊÓÑ ÍÏÍÅÎÔ ×ÉÓÏËÏÓÎÏÊ ÓÅËÕÎÄÙ" + +#: timezone/zic.c:1935 +msgid "Wild result from command execution" +msgstr "îÅÁÄÅË×ÁÔÎÙÊ ÒÅÚÕÌØÔÁÔ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄÙ" + +#: timezone/zic.c:1936 +#, c-format +msgid "%s: command was '%s', result was %d\n" +msgstr "%s: ËÏÍÁÎÄÁ ÂÙÌÁ '%s', ÒÅÚÕÌØÔÁÔ ÂÙÌ %d\n" + +#: timezone/zic.c:2031 +msgid "Odd number of quotation marks" +msgstr "îÅÞÅÔÎÏÅ ÞÉÓÌÏ ËÁ×ÙÞÅË" + +#: timezone/zic.c:2051 timezone/zic.c:2070 +msgid "time overflow" +msgstr "ÐÅÒÅÐÏÌÎÅÎÉÅ ×ÒÅÍÅÎÉ" + +#: timezone/zic.c:2117 +msgid "use of 2/29 in non leap-year" +msgstr "ÉÓÐÏÌØÚÏ×ÁÎÉÅ 29 ÆÅ×ÒÁÌÑ × ÎÅ×ÉÓÏËÏÓÎÏÍ ÇÏÄÕ" + +#: timezone/zic.c:2151 +msgid "no day in month matches rule" +msgstr "ÎÉ ÏÄÉÎ ÄÅÎØ × ÍÅÓÑÃÅ ÎÅ ÐÏÄÈÏÄÉÔ ÐÏÄ ÐÒÁ×ÉÌÏ" + +#: timezone/zic.c:2175 +msgid "too many, or too long, time zone abbreviations" +msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÓÏËÒÁÝÅÎÉÊ ÞÁÓÏ×ÙÈ ÐÏÑÓÏ× ÉÌÉ ÏÎÉ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÅ" + +#: timezone/zic.c:2216 +#, c-format +msgid "%s: Can't create directory %s: %s\n" +msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ %s: %s\n" + +#: timezone/zic.c:2238 +#, c-format +msgid "%s: %d did not sign extend correctly\n" +msgstr "%s: %d ÎÅ ÓÏÈÒÁÎÉÌÏ ÚÎÁË ÐÒÉ ÒÁÓÛÉÒÅÎÉÉ\n" + +#: posix/../sysdeps/generic/wordexp.c:1797 +msgid "parameter null or not set" +msgstr "ÐÁÒÁÍÅÔÒ ÐÕÓÔ ÉÌÉ ÎÅ ÚÁÄÁÎ" + +#: posix/../sysdeps/posix/gai_strerror.c:31 +msgid "Address family for hostname not supported" +msgstr "óÅÍÅÊÓÔ×Ï ÁÄÒÅÓÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÔÓÑ ÄÌÑ ÄÁÎÎÏÇÏ ÉÍÅÎÉ ÈÏÓÔÁ" + +#: posix/../sysdeps/posix/gai_strerror.c:32 +msgid "Temporary failure in name resolution" +msgstr "÷ÒÅÍÅÎÎÙÊ ÓÂÏÊ × ÒÁÚÒÅÛÅÎÉÉ ÉÍÅÎ" + +#: posix/../sysdeps/posix/gai_strerror.c:33 +msgid "Bad value for ai_flags" +msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÚÎÁÞÅÎÉÅ ÄÌÑ ai_flags" + +#: posix/../sysdeps/posix/gai_strerror.c:34 +msgid "Non-recoverable failure in name resolution" +msgstr "îÅÉÓÐÒÁ×ÉÍÁÑ ÏÛÉÂËÁ × ÒÁÚÒÅÛÅÎÉÉ ÉÍÅÎ" + +#: posix/../sysdeps/posix/gai_strerror.c:35 +msgid "ai_family not supported" +msgstr "ai_family ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" + +#: posix/../sysdeps/posix/gai_strerror.c:36 +msgid "Memory allocation failure" +msgstr "ïÛÉÂËÁ ×ÙÄÅÌÅÎÉÑ ÐÁÍÑÔÉ" + +#: posix/../sysdeps/posix/gai_strerror.c:37 +msgid "No address associated with hostname" +msgstr "ó ÉÍÅÎÅÍ ÈÏÓÔÁ ÎÅ Ó×ÑÚÁÎÏ ÎÉ ÏÄÎÏÇÏ ÁÄÒÅÓÁ" + +#: posix/../sysdeps/posix/gai_strerror.c:38 +msgid "Name or service not known" +msgstr "éÍÑ ÉÌÉ ÓÌÕÖÂÁ ÎÅ ÉÚ×ÅÓÔÎÙ" + +#: posix/../sysdeps/posix/gai_strerror.c:39 +msgid "Servname not supported for ai_socktype" +msgstr "Servname ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ai_socktype" + +#: posix/../sysdeps/posix/gai_strerror.c:40 +msgid "ai_socktype not supported" +msgstr "ai_socktype ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ" + +#: posix/../sysdeps/posix/gai_strerror.c:41 +msgid "System error" +msgstr "óÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ" + +#: posix/../sysdeps/posix/gai_strerror.c:42 +msgid "Processing request in progress" +msgstr "ïÂÒÁÂÏÔËÁ ÚÁÐÒÏÓÁ ÐÒÏÄÏÌÖÁÅÔÓÑ" + +#: posix/../sysdeps/posix/gai_strerror.c:43 +msgid "Request canceled" +msgstr "úÁÐÒÏÓ ÏÔÍÅÎÅÎ" + +#: posix/../sysdeps/posix/gai_strerror.c:44 +msgid "Request not canceled" +msgstr "úÁÐÒÏÓ ÎÅ ÏÔÍÅÎÅÎ" + +#: posix/../sysdeps/posix/gai_strerror.c:45 +msgid "All requests done" +msgstr "÷ÓÅ ÚÁÐÒÏÓÙ ×ÙÐÏÌÎÅÎÙ" + +#: posix/../sysdeps/posix/gai_strerror.c:46 +msgid "Interrupted by a signal" +msgstr "ðÒÅÒ×ÁÎÏ ÐÏ ÓÉÇÎÁÌÕ" + +#: posix/getconf.c:892 +#, c-format +msgid "Usage: %s [-v specification] variable_name [pathname]\n" +msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [-v ÓÐÅÃÉÆÉËÁÃÉÑ] ÉÍÑ-ÐÅÒÅÍÅÎÎÏÊ [ÐÕÔØ]\n" + +#: posix/getconf.c:950 +#, c-format +msgid "unknown specification \"%s\"" +msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÓÐÅÃÉÆÉËÁÃÉÑ \"%s\"" + +#: posix/getconf.c:979 posix/getconf.c:995 +msgid "undefined" +msgstr "ÎÅ ÏÐÒÅÄÅÌÅÎÏ" + +#: posix/getconf.c:1017 +#, c-format +msgid "Unrecognized variable `%s'" +msgstr "îÅÒÁÓÐÏÚÎÁÎÎÁÑ ÐÅÒÅÍÅÎÎÁÑ `%s'" + +#: posix/getopt.c:692 posix/getopt.c:711 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: ËÌÀÞ `%s' ÎÅÏÄÎÏÚÎÁÞÅÎ\n" + +#: posix/getopt.c:744 posix/getopt.c:748 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: ËÌÀÞ `--%s' ÎÅÌØÚÑ ÉÓÐÏÌØÚÏ×ÁÔØ Ó ÁÒÇÕÍÅÎÔÏÍ\n" + +#: posix/getopt.c:757 posix/getopt.c:762 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: ËÌÀÞ `%c%s' ÎÅÌØÚÑ ÉÓÐÏÌØÚÏ×ÁÔØ Ó ÁÒÇÕÍÅÎÔÏÍ\n" + +#: posix/getopt.c:807 posix/getopt.c:829 posix/getopt.c:1159 +#: posix/getopt.c:1181 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "%s: ËÌÀÞ `%s' ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ\n" + +#: posix/getopt.c:867 posix/getopt.c:870 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ËÌÀÞ `--%s'\n" + +#: posix/getopt.c:878 posix/getopt.c:881 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ËÌÀÞ `%c%s'\n" + +#: posix/getopt.c:936 posix/getopt.c:939 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÙÊ ËÌÀÞ -- %c\n" + +#: posix/getopt.c:945 posix/getopt.c:948 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "%s: ÎÅ×ÅÒÎÙÊ ËÌÀÞ -- %c\n" + +#: posix/getopt.c:1003 posix/getopt.c:1022 posix/getopt.c:1234 +#: posix/getopt.c:1255 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: ËÌÀÞ ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ -- %c\n" + +#: posix/getopt.c:1074 posix/getopt.c:1093 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: ËÌÀÞ `-W %s' ÎÅÏÄÎÏÚÎÁÞÅÎ\n" + +#: posix/getopt.c:1117 posix/getopt.c:1138 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: ËÌÀÞ `-W %s' ÎÅÌØÚÑ ÉÓÐÏÌØÚÏ×ÁÔØ Ó ÁÒÇÕÍÅÎÔÏÍ\n" + +#: posix/regcomp.c:150 +msgid "No match" +msgstr "îÅÔ ÓÏ×ÐÁÄÅÎÉÑ" + +#: posix/regcomp.c:153 +msgid "Invalid regular expression" +msgstr "îÅ×ÅÒÎÏÅ ÒÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ" + +#: posix/regcomp.c:156 +msgid "Invalid collation character" +msgstr "îÅ×ÅÒÎÙÊ ÚÎÁË ÓÏÒÔÉÒÏ×ËÉ" + +#: posix/regcomp.c:159 +msgid "Invalid character class name" +msgstr "îÅ×ÅÒÎÏÅ ÉÍÑ ËÌÁÓÓÁ ÚÎÁËÏ×" + +#: posix/regcomp.c:162 +msgid "Trailing backslash" +msgstr "ïÂÒÁÔÎÁÑ ËÏÓÁÑ ÞÅÒÔÁ × ËÏÎÃÅ" + +#: posix/regcomp.c:165 +msgid "Invalid back reference" +msgstr "îÅ×ÅÒÎÁÑ ÓÓÙÌËÁ ÎÁÚÁÄ" + +#: posix/regcomp.c:168 +msgid "Unmatched [ or [^" +msgstr "îÅÐÁÒÎÁÑ [ ÉÌÉ [^" + +#: posix/regcomp.c:171 +msgid "Unmatched ( or \\(" +msgstr "îÅÐÁÒÎÁÑ ( ÉÌÉ \\(" + +#: posix/regcomp.c:174 +msgid "Unmatched \\{" +msgstr "îÅÐÁÒÎÁÑ \\{" + +#: posix/regcomp.c:177 +msgid "Invalid content of \\{\\}" +msgstr "îÅ×ÅÒÎÏÅ ÓÏÄÅÒÖÉÍÏÅ × \\{\\}" + +#: posix/regcomp.c:180 +msgid "Invalid range end" +msgstr "îÅ×ÅÒÎÙÊ ËÏÎÅà ÄÉÁÐÁÚÏÎÁ" + +#: posix/regcomp.c:183 +msgid "Memory exhausted" +msgstr "ðÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ" + +#: posix/regcomp.c:186 +msgid "Invalid preceding regular expression" +msgstr "îÅ×ÅÒÎÏÅ ÐÒÅÄÛÅÓÔ×ÕÀÝÅÅ ÒÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ" + +#: posix/regcomp.c:189 +msgid "Premature end of regular expression" +msgstr "ðÒÅÖÄÅ×ÒÅÍÅÎÎÙÊ ËÏÎÅà ÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ" + +#: posix/regcomp.c:192 +msgid "Regular expression too big" +msgstr "òÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ ÓÌÉÛËÏÍ ×ÅÌÉËÏ" + +#: posix/regcomp.c:195 +msgid "Unmatched ) or \\)" +msgstr "îÅÐÁÒÎÁÑ ) ÉÌÉ \\)" + +#: posix/regcomp.c:661 +msgid "No previous regular expression" +msgstr "îÅÔ ÐÒÅÄÛÅÓÔ×ÕÀÝÅÇÏ ÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ" + +#: argp/argp-help.c:224 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ÐÁÒÁÍÅÔÒ ARGP_HELP_FMT ÔÒÅÂÕÅÔ ÚÎÁÞÅÎÉÅ" + +#: argp/argp-help.c:233 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: ÎÅÉÚ×ÅÓÔÎÙÊ ÐÁÒÁÍÅÔÒ ARGP_HELP_FMT" + +#: argp/argp-help.c:245 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "íÕÓÏÒ × ARGP_HELP_FMT: %s" + +#: argp/argp-help.c:1205 +msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." +msgstr "ïÂÑÚÁÔÅÌØÎÙÅ ÉÌÉ ÎÅÏÂÑÚÁÔÅÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ÄÌÑ ÄÌÉÎÎÙÈ ËÌÀÞÅÊ ÔÁËÖÅ Ñ×ÌÑÀÔÓÑ ÏÂÑÚÁÔÅÌØÎÙÍÉ ÉÌÉ ÎÅÏÂÑÚÁÔÅÌØÎÙÍÉ ÄÌÑ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ËÏÒÏÔËÉÈ ËÌÀÞÅÊ." + +#: argp/argp-help.c:1592 +msgid "Usage:" +msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ:" + +#: argp/argp-help.c:1596 +msgid " or: " +msgstr " ÉÌÉ: " + +#: argp/argp-help.c:1608 +msgid " [OPTION...]" +msgstr " [ëìàþ...]" + +#: argp/argp-help.c:1635 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "ðÏÐÒÏÂÕÊÔÅ `%s --help' ÉÌÉ `%s --usage' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ.\n" + +#: argp/argp-help.c:1663 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "óÏÏÂÝÅÎÉÑ Ï ÏÛÉÂËÁÈ ÏÔÐÒÁ×ÌÑÊÔÅ ÐÏ ÁÄÒÅÓÕ %s.\n" + +#: argp/argp-parse.c:115 +msgid "Give this help list" +msgstr "÷ÙÄÁÅÔ ÜÔÏÔ ÓÐÒÁ×ÏÞÎÙÊ ÓÐÉÓÏË" + +#: argp/argp-parse.c:116 +msgid "Give a short usage message" +msgstr "÷ÙÄÁÅÔ ËÒÁÔËÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÉÓÐÏÌØÚÏ×ÁÎÉÉ" + +#: argp/argp-parse.c:117 +msgid "Set the program name" +msgstr "õÓÔÁÎÁ×ÌÉ×ÁÅÔ ÉÍÑ ÐÒÏÇÒÁÍÍÙ" + +#: argp/argp-parse.c:119 +msgid "Hang for SECS seconds (default 3600)" +msgstr "÷ÉÓÉÔ ÕËÁÚÁÎÎÏÅ ÞÉÓÌÏ ÓÅËÕÎÄ (ÐÏ ÕÍÏÌÞÁÎÉÀ 3600)" + +#: argp/argp-parse.c:180 +msgid "Print program version" +msgstr "ðÅÞÁÔÁÅÔ ×ÅÒÓÉÀ ÐÒÏÇÒÁÍÍÙ" + +#: argp/argp-parse.c:196 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(ïûéâëá ðòïçòáííù) ÷ÅÒÓÉÑ ÎÅÉÚ×ÅÓÔÎÁ!?" + +#: argp/argp-parse.c:672 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: óÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×\n" + +#: argp/argp-parse.c:813 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(ïûéâëá ðòïçòáííù) ëÌÀÞ ÄÏÌÖÅÎ ÂÙÔØ ÒÁÓÐÏÚÎÁÎ!?" + +#: resolv/herror.c:68 +msgid "Resolver Error 0 (no error)" +msgstr "ïÛÉÂËÁ ÒÅÓÏÌ×ÅÒÁ 0 (ÎÅÔ ÏÛÉÂËÉ)" + +#: resolv/herror.c:69 +msgid "Unknown host" +msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÈÏÓÔ" + +#: resolv/herror.c:70 +msgid "Host name lookup failure" +msgstr "óÂÏÊ ÐÏÉÓËÁ ÉÍÅÎÉ ÈÏÓÔÁ" + +#: resolv/herror.c:71 +msgid "Unknown server error" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ ÓÅÒ×ÅÒÁ" + +#: resolv/herror.c:72 +msgid "No address associated with name" +msgstr "ó ÉÍÅÎÅÍ ÎÅ Ó×ÑÚÁÎÏ ÎÉ ÏÄÎÏÇÏ ÁÄÒÅÓÁ" + +#: resolv/herror.c:108 +msgid "Resolver internal error" +msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ ÒÅÓÏÌ×ÅÒÁ" + +#: resolv/herror.c:111 +msgid "Unknown resolver error" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ ÒÅÓÏÌ×ÅÒÁ" + +#: resolv/res_hconf.c:147 +#, c-format +msgid "%s: line %d: expected service, found `%s'\n" +msgstr "%s: ÓÔÒÏËÁ %d: ÏÖÉÄÁÅÔÓÑ ÓÌÕÖÂÁ, ÎÁÊÄÅÎÏ `%s'\n" + +#: resolv/res_hconf.c:165 +#, c-format +msgid "%s: line %d: cannot specify more than %d services" +msgstr "%s: ÓÔÒÏËÁ %d: ÎÅÌØÚÑ ÚÁÄÁÔØ ÂÏÌÅÅ ÞÅÍ %d ÓÌÕÖÂ" + +#: resolv/res_hconf.c:191 +#, c-format +msgid "%s: line %d: list delimiter not followed by keyword" +msgstr "%s: ÓÔÒÏËÁ %d: ÐÏÓÌÅ ÒÁÚÄÅÌÉÔÅÌÑ ÓÐÉÓËÁ ÎÅ ÓÔÏÉÔ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï" + +#: resolv/res_hconf.c:231 +#, c-format +msgid "%s: line %d: cannot specify more than %d trim domains" +msgstr "" + +#: resolv/res_hconf.c:256 +#, c-format +msgid "%s: line %d: list delimiter not followed by domain" +msgstr "%s: ÓÔÒÏËÁ %d: ÐÏÓÌÅ ÒÁÚÄÅÌÉÔÅÌÑ ÓÐÉÓËÁ ÎÅ ÓÔÏÉÔ ÄÏÍÅÎ" + +#: resolv/res_hconf.c:319 +#, c-format +msgid "%s: line %d: expected `on' or `off', found `%s'\n" +msgstr "%s: ÓÔÒÏËÁ %d: ÏÖÉÄÁÅÔÓÑ `on' ÉÌÉ `off', ÎÁÊÄÅÎÏ `%s'\n" + +#: resolv/res_hconf.c:366 +#, c-format +msgid "%s: line %d: bad command `%s'\n" +msgstr "%s: ÓÔÒÏËÁ %d: ÎÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÁ `%s'\n" + +#: resolv/res_hconf.c:395 +#, c-format +msgid "%s: line %d: ignoring trailing garbage `%s'\n" +msgstr "%s: ÓÔÒÏËÁ %d: ÉÇÎÏÒÉÒÏ×ÁÎ ÍÕÓÏÒ × ËÏÎÃÅ `%s'\n" + +#: nss/getent.c:51 +msgid "database [key ...]" +msgstr "ÂÁÚÁ-ÄÁÎÎÙÈ [ËÌÀÞ ...]" + +#: nss/getent.c:56 +msgid "Service configuration to be used" +msgstr "éÓÐÏÌØÚÕÅÍÁÑ ËÏÎÆÉÇÕÒÁÃÉÑ ÓÌÕÖÂÙ" + +#: nss/getent.c:136 nss/getent.c:375 +#, c-format +msgid "Enumeration not supported on %s\n" +msgstr "ðÅÒÅÞÉÓÌÅÎÉÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ %s\n" + +#: nss/getent.c:800 +msgid "getent - get entries from administrative database." +msgstr "getent -- ÐÏÌÕÞÁÅÔ ÚÁÐÉÓÉ ÉÚ ÁÄÍÉÎÉÓÔÒÁÔÉ×ÎÏÊ ÂÁÚÙ ÄÁÎÎÙÈ." + +#: nss/getent.c:801 +msgid "Supported databases:" +msgstr "ðÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÂÁÚÙ ÄÁÎÎÙÈ:" + +#: nss/getent.c:858 nscd/nscd.c:131 nscd/nscd_nischeck.c:64 +msgid "wrong number of arguments" +msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÞÉÓÌÏ ÁÒÇÕÍÅÎÔÏ×" + +#: nss/getent.c:868 +#, c-format +msgid "Unknown database: %s\n" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÂÁÚÁ ÄÁÎÎÙÈ: %s\n" + +#: debug/pcprofiledump.c:52 +msgid "Don't buffer output" +msgstr "îÅ ÂÕÆÅÒÉÒÏ×ÁÔØ ×Ù×ÏÄ" + +#: debug/pcprofiledump.c:57 +msgid "Dump information generated by PC profiling." +msgstr "óÂÒÁÓÙ×ÁÅÔ ÉÎÆÏÒÍÁÃÉÀ, ÓÏÂÒÁÎÎÕÀ ÐÒÉ ÐÒÏÆÉÌÉÒÏ×ÁÎÉÉ PC." + +#: debug/pcprofiledump.c:60 +msgid "[FILE]" +msgstr "[æáêì]" + +#: debug/pcprofiledump.c:100 +msgid "cannot open input file" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÈÏÄÎÏÊ ÆÁÊÌ" + +#: debug/pcprofiledump.c:106 +msgid "cannot read header" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË" + +#: debug/pcprofiledump.c:170 +msgid "invalid pointer size" +msgstr "ÎÅ×ÅÒÎÙÊ ÒÁÚÍÅÒ ÕËÁÚÁÔÅÌÑ" + +#: inet/rcmd.c:163 inet/rcmd.c:166 +msgid "rcmd: Cannot allocate memory\n" +msgstr "rcmd: îÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ\n" + +#: inet/rcmd.c:185 inet/rcmd.c:188 +msgid "rcmd: socket: All ports in use\n" +msgstr "rcmd: socket: ÷ÓÅ ÐÏÒÔÙ ÉÓÐÏÌØÚÕÀÔÓÑ\n" + +#: inet/rcmd.c:222 +#, c-format +msgid "connect to address %s: " +msgstr "ÓÏÅÄÉÎÅÎÉÅ Ó ÁÄÒÅÓÏÍ %s: " + +#: inet/rcmd.c:240 +#, c-format +msgid "Trying %s...\n" +msgstr "ðÏÐÙÔËÁ %s...\n" + +#: inet/rcmd.c:289 +#, c-format +msgid "rcmd: write (setting up stderr): %m\n" +msgstr "rcmd: write (ÎÁÓÔÒÏÊËÁ stderr): %m\n" + +#: inet/rcmd.c:310 +#, c-format +msgid "rcmd: poll (setting up stderr): %m\n" +msgstr "rcmd: poll (ÎÁÓÔÒÏÊËÁ stderr): %m\n" + +#: inet/rcmd.c:313 +msgid "poll: protocol failure in circuit setup\n" +msgstr "poll: ÓÂÏÊ ÐÒÏÔÏËÏÌÁ ÐÒÉ ÎÁÓÔÒÏÊËÅ ÃÅÐÉ\n" + +#: inet/rcmd.c:358 +msgid "socket: protocol failure in circuit setup\n" +msgstr "socket: ÓÂÏÊ ÐÒÏÔÏËÏÌÁ ÐÒÉ ÎÁÓÔÒÏÊËÅ ÃÅÐÉ\n" + +#: inet/rcmd.c:387 +#, fuzzy, c-format +msgid "rcmd: %s: short read" +msgstr "rcmd: %s: ÎÅÐÏÌÎÏÅ ÞÔÅÎÉÅ" + +#: inet/rcmd.c:549 +msgid "lstat failed" +msgstr "lstat ÎÅÕÓÐÅÛÎÁ" + +#: inet/rcmd.c:551 +msgid "not regular file" +msgstr "ÎÅ ÏÂÙÞÎÙÊ ÆÁÊÌ" + +#: inet/rcmd.c:556 +msgid "cannot open" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ" + +#: inet/rcmd.c:558 +msgid "fstat failed" +msgstr "fstat ÎÅÕÓÐÅÛÎÁ" + +#: inet/rcmd.c:560 +msgid "bad owner" +msgstr "ÎÅÐÒÁ×ÉÌØÎÙÊ ×ÌÁÄÅÌÅÃ" + +#: inet/rcmd.c:562 +msgid "writeable by other than owner" +msgstr "ÍÏÖÅÔ ÚÁÐÉÓÙ×ÁÔØÓÑ ÎÅ ×ÌÁÄÅÌØÃÅÍ" + +#: inet/rcmd.c:564 +msgid "hard linked somewhere" +msgstr "ÉÍÅÅÔÓÑ ÖÅÓÔËÁÑ ÓÓÙÌËÁ" + +#: inet/ruserpass.c:170 inet/ruserpass.c:193 +msgid "out of memory" +msgstr "ÎÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ" + +#: inet/ruserpass.c:184 +msgid "Error: .netrc file is readable by others." +msgstr "ïÛÉÂËÁ: ÆÁÊÌ .netrc ÍÏÖÅÔ ÚÁÐÉÓÙ×ÁÔØÓÑ ÄÒÕÇÉÍÉ." + +#: inet/ruserpass.c:185 +msgid "Remove password or make file unreadable by others." +msgstr "õÄÁÌÉÔÅ ÐÁÒÏÌØ ÉÌÉ ÓÄÅÌÁÊÔÅ ÆÁÊÌ ÎÅÞÉÔÁÅÍÙÍ ÄÒÕÇÉÍÉ." + +#: inet/ruserpass.c:277 +#, c-format +msgid "Unknown .netrc keyword %s" +msgstr "îÅÉÚ×ÅÓÔÎÏÅ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï .netrc %s" + +#: sunrpc/auth_unix.c:115 sunrpc/auth_unix.c:118 +msgid "authunix_create: out of memory\n" +msgstr "authunix_create: ÎÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ\n" + +#: sunrpc/auth_unix.c:318 +msgid "auth_none.c - Fatal marshalling problem" +msgstr "auth_none.c -- æÁÔÁÌØÎÁÑ ÏÛÉÂËÁ ÍÁÒÛÁÌÌÉÎÇÁ" + +#: sunrpc/clnt_perr.c:118 sunrpc/clnt_perr.c:139 +#, c-format +msgid "; low version = %lu, high version = %lu" +msgstr "; ÎÉÖÎÑÑ ×ÅÒÓÉÑ = %lu, ×ÅÒÈÎÑÑ ×ÅÒÓÉÑ = %lu" + +#: sunrpc/clnt_perr.c:125 +msgid "; why = " +msgstr "; ÐÒÉÞÉÎÁ = " + +#: sunrpc/clnt_perr.c:132 +#, c-format +msgid "(unknown authentication error - %d)" +msgstr "(ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ ÁÕÔÅÎÆÉËÁÃÉÉ -- %d)" + +#: sunrpc/clnt_perr.c:177 +msgid "RPC: Success" +msgstr "RPC: õÓÐÅÈ" + +#: sunrpc/clnt_perr.c:180 +msgid "RPC: Can't encode arguments" +msgstr "RPC: îÅ×ÏÚÍÏÖÎÏ ÚÁËÏÄÉÒÏ×ÁÔØ ÁÒÇÕÍÅÎÔÙ" + +#: sunrpc/clnt_perr.c:184 +msgid "RPC: Can't decode result" +msgstr "RPC: îÅ×ÏÚÍÏÖÎÏ ÒÁÓËÏÄÉÒÏ×ÁÔØ ÒÅÚÕÌØÔÁÔ" + +#: sunrpc/clnt_perr.c:188 +msgid "RPC: Unable to send" +msgstr "RPC: îÅ ÕÄÁÌÏÓØ ÐÏÓÌÁÔØ" + +#: sunrpc/clnt_perr.c:192 +msgid "RPC: Unable to receive" +msgstr "RPC: îÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ" + +#: sunrpc/clnt_perr.c:196 +msgid "RPC: Timed out" +msgstr "RPC: ÷ÒÅÍÑ ÏÖÉÄÁÎÉÑ ÉÓÔÅËÌÏ" + +#: sunrpc/clnt_perr.c:200 +msgid "RPC: Incompatible versions of RPC" +msgstr "RPC: îÅÓÏ×ÍÅÓÔÉÍÙÅ ×ÅÒÓÉÉ RPC" + +#: sunrpc/clnt_perr.c:204 +msgid "RPC: Authentication error" +msgstr "RPC: ïÛÉÂËÁ ÁÕÔÅÎÆÉËÁÃÉÉ" + +#: sunrpc/clnt_perr.c:208 +msgid "RPC: Program unavailable" +msgstr "RPC: ðÒÏÇÒÁÍÍÁ ÎÅÄÏÓÔÕÐÎÁ" + +#: sunrpc/clnt_perr.c:212 +msgid "RPC: Program/version mismatch" +msgstr "RPC: îÅÓÏ×ÐÁÄÅÎÉÅ ÐÒÏÇÒÁÍÍÙ/×ÅÒÓÉÉ" + +#: sunrpc/clnt_perr.c:216 +msgid "RPC: Procedure unavailable" +msgstr "RPC: ðÒÏÃÅÄÕÒÁ ÎÅÄÏÓÔÕÐÎÁ" + +#: sunrpc/clnt_perr.c:220 +msgid "RPC: Server can't decode arguments" +msgstr "RPC: óÅÒ×ÅÒ ÎÅ ÍÏÖÅÔ ÒÁÓËÏÄÉÒÏ×ÁÔØ ÁÒÇÕÍÅÎÔÙ" + +#: sunrpc/clnt_perr.c:224 +msgid "RPC: Remote system error" +msgstr "RPC: ïÛÉÂËÁ ÕÄÁÌÅÎÎÏÊ ÓÉÓÔÅÍÙ" + +#: sunrpc/clnt_perr.c:228 +msgid "RPC: Unknown host" +msgstr "RPC: îÅÉÚ×ÅÓÔÎÙÊ ÈÏÓÔ" + +#: sunrpc/clnt_perr.c:232 +msgid "RPC: Unknown protocol" +msgstr "RPC: îÅÉÚ×ÅÓÔÎÙÊ ÐÒÏÔÏËÏÌ" + +#: sunrpc/clnt_perr.c:236 +msgid "RPC: Port mapper failure" +msgstr "RPC: óÂÏÊ ÏÔÏÂÒÁÖÁÔÅÌÑ ÐÏÒÔÏ×" + +#: sunrpc/clnt_perr.c:240 +msgid "RPC: Program not registered" +msgstr "RPC: ðÒÏÇÒÁÍÍÁ ÎÅ ÚÁÒÅÇÉÓÔÒÉÒÏ×ÁÎÁ" + +#: sunrpc/clnt_perr.c:244 +msgid "RPC: Failed (unspecified error)" +msgstr "RPC: óÂÏÊ (ÏÛÉÂËÁ ÎÅ ÕËÁÚÁÎÁ)" + +#: sunrpc/clnt_perr.c:285 +msgid "RPC: (unknown error code)" +msgstr "RPC: (ÎÅÉÚ×ÅÓÔÎÙÊ ËÏÄ ÏÛÉÂËÉ)" + +#: sunrpc/clnt_perr.c:357 +msgid "Authentication OK" +msgstr "áÕÔÅÎÆÉËÁÃÉÑ ÕÓÐÅÛÎÁ" + +#: sunrpc/clnt_perr.c:360 +msgid "Invalid client credential" +msgstr "îÅ×ÅÒÎÙÊ ÒÅË×ÉÚÉÔ ËÌÉÅÎÔÁ" + +#: sunrpc/clnt_perr.c:364 +msgid "Server rejected credential" +msgstr "óÅÒ×ÅÒ ÏÔ×ÅÒÇ ÒÅË×ÉÚÉÔ" + +#: sunrpc/clnt_perr.c:368 +msgid "Invalid client verifier" +msgstr "" + +#: sunrpc/clnt_perr.c:372 +msgid "Server rejected verifier" +msgstr "" + +#: sunrpc/clnt_perr.c:376 +msgid "Client credential too weak" +msgstr "òÅË×ÉÚÉÔ ËÌÉÅÎÔÁ ÓÌÉÛËÏÍ ÓÌÁÂ" + +#: sunrpc/clnt_perr.c:380 +msgid "Invalid server verifier" +msgstr "" + +#: sunrpc/clnt_perr.c:384 +msgid "Failed (unspecified error)" +msgstr "óÂÏÊ (ÏÛÉÂËÁ ÎÅ ÕËÁÚÁÎÁ)" + +#: sunrpc/clnt_raw.c:117 +msgid "clnt_raw.c - Fatal header serialization error." +msgstr "clnt_raw.c -- æÁÔÁÌØÎÁÑ ÏÛÉÂËÁ ÓÅÒÉÁÌÉÚÁÃÉÉ ÚÁÇÏÌÏ×ËÁ." + +#: sunrpc/clnt_tcp.c:134 sunrpc/clnt_tcp.c:137 +msgid "clnttcp_create: out of memory\n" +msgstr "clnttcp_create: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/clnt_udp.c:141 sunrpc/clnt_udp.c:144 +msgid "clntudp_create: out of memory\n" +msgstr "clntudp_create: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/clnt_unix.c:131 sunrpc/clnt_unix.c:134 +msgid "clntunix_create: out of memory\n" +msgstr "clntunix_create: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/get_myaddr.c:78 +msgid "get_myaddress: ioctl (get interface configuration)" +msgstr "get_myaddress: ioctl (ÐÏÌÕÞÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÉÎÔÅÒÆÅÊÓÁ)" + +#: sunrpc/pm_getmaps.c:74 +msgid "pmap_getmaps rpc problem" +msgstr "ÐÒÏÂÌÅÍÁ pmap_getmaps rpc" + +#: sunrpc/pmap_clnt.c:72 +msgid "__get_myaddress: ioctl (get interface configuration)" +msgstr "__get_myaddress: ioctl (ÐÏÌÕÞÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÉÎÔÅÒÆÅÊÓÁ)" + +#: sunrpc/pmap_clnt.c:137 +msgid "Cannot register service" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÒÅÇÉÓÔÒÉÒÏ×ÁÔØ ÓÌÕÖÂÕ" + +#: sunrpc/pmap_rmt.c:190 +msgid "broadcast: ioctl (get interface configuration)" +msgstr "broadcast: ioctl (ÐÏÌÕÞÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÉÎÔÅÒÆÅÊÓÁ)" + +#: sunrpc/pmap_rmt.c:199 +msgid "broadcast: ioctl (get interface flags)" +msgstr "broadcast: ioctl (ÐÏÌÕÞÅÎÉÅ ÆÌÁÇÏ× ÉÎÔÅÒÆÅÊÓÁ)" + +#: sunrpc/pmap_rmt.c:269 +msgid "Cannot create socket for broadcast rpc" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÏËÅÔ ÄÌÑ ÛÉÒÏËÏ×ÅÝÁÔÅÌØÎÏÇÏ rpc" + +#: sunrpc/pmap_rmt.c:276 +msgid "Cannot set socket option SO_BROADCAST" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ×ÏÚÍÏÖÎÏÓÔØ ÓÏËÅÔÁ SO_BROADCAST" + +#: sunrpc/pmap_rmt.c:328 +msgid "Cannot send broadcast packet" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÓÌÁÔØ ÛÉÒÏËÏ×ÅÝÁÔÅÌØÎÙÊ ÐÁËÅÔ" + +#: sunrpc/pmap_rmt.c:353 +msgid "Broadcast poll problem" +msgstr "ðÒÏÂÌÅÍÁ Ó ÛÉÒÏËÏ×ÅÝÁÔÅÌØÎÙÍ ÏÐÒÏÓÏÍ" + +#: sunrpc/pmap_rmt.c:366 +msgid "Cannot receive reply to broadcast" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÏÔ×ÅÔ ÎÁ ÛÉÒÏËÏ×ÅÝÁÔÅÌØÎÏÅ ÓÏÏÂÝÅÎÉÅ" + +#: sunrpc/rpc_main.c:288 +#, c-format +msgid "%s: output would overwrite %s\n" +msgstr "%s: ×Ù×ÏÄ ÐÅÒÅÚÁÐÉÓÁÌ ÂÙ %s\n" + +#: sunrpc/rpc_main.c:295 +#, c-format +msgid "%s: unable to open %s: %m\n" +msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %m\n" + +#: sunrpc/rpc_main.c:307 +#, c-format +msgid "%s: while writing output %s: %m" +msgstr "%s: ×Ï ×ÒÅÍÑ ÚÁÐÉÓÉ ×Ù×ÏÄÁ %s: %m" + +#: sunrpc/rpc_main.c:342 +#, c-format +msgid "cannot find C preprocessor: %s \n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÐÒÅÐÒÏÃÅÓÓÏÒ óÉ: %s \n" + +#: sunrpc/rpc_main.c:350 +msgid "cannot find any C preprocessor (cpp)\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÎÉËÁËÏÇÏ ÐÒÅÐÒÏÃÅÓÓÏÒÁ óÉ (cpp)\n" + +#: sunrpc/rpc_main.c:419 +#, c-format +msgid "%s: C preprocessor failed with signal %d\n" +msgstr "%s: ÐÒÅÐÒÏÃÅÓÓÏÒ óÉ ÚÁ×ÅÒÛÉÌÓÑ ÎÅÕÓÐÅÛÎÏ Ó ÓÉÇÎÁÌÏÍ %d\n" + +#: sunrpc/rpc_main.c:422 +#, c-format +msgid "%s: C preprocessor failed with exit code %d\n" +msgstr "%s: ÐÒÅÐÒÏÃÅÓÓÏÒ óÉ ÚÁ×ÅÒÛÉÌÓÑ ÎÅÕÓÐÅÛÎÏ Ó ×ÙÈÏÄÎÙÍ ËÏÄÏÍ %d\n" + +#: sunrpc/rpc_main.c:462 +#, c-format +msgid "illegal nettype :`%s'\n" +msgstr "ÎÅ×ÅÒÎÙÊ nettype :`%s'\n" + +#: sunrpc/rpc_main.c:1104 +#, c-format +msgid "rpcgen: too many defines\n" +msgstr "rpcgen: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÏÐÒÅÄÅÌÅÎÉÊ\n" + +#: sunrpc/rpc_main.c:1116 +#, c-format +msgid "rpcgen: arglist coding error\n" +msgstr "rpcgen: ÏÛÉÂËÁ ËÏÄÉÒÏ×ÁÎÉÑ ÓÐÉÓËÁ ÁÒÇÕÍÅÎÔÏ×\n" + +#. TRANS: the file will not be removed; this is an +#. TRANS: informative message. +#: sunrpc/rpc_main.c:1149 +#, c-format +msgid "file `%s' already exists and may be overwritten\n" +msgstr "ÆÁÊÌ `%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ É ÍÏÖÅÔ ÂÙÔØ ÐÅÒÅÚÁÐÉÓÁÎ\n" + +#: sunrpc/rpc_main.c:1194 +#, c-format +msgid "Cannot specify more than one input file!\n" +msgstr "îÅÌØÚÑ ÚÁÄÁ×ÁÔØ ÂÏÌÅÅ ÏÄÎÏÇÏ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ!\n" + +#: sunrpc/rpc_main.c:1364 +msgid "This implementation doesn't support newstyle or MT-safe code!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1373 +#, c-format +msgid "Cannot use netid flag with inetd flag!\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÆÌÁÇ netid Ó ÆÌÁÇÏÍ inetd!\n" + +#: sunrpc/rpc_main.c:1385 +msgid "Cannot use netid flag without TIRPC!\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÆÌÁÇ netid ÂÅÚ TIRPC!\n" + +#: sunrpc/rpc_main.c:1392 +msgid "Cannot use table flags with newstyle!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1411 +#, c-format +msgid "\"infile\" is required for template generation flags.\n" +msgstr "ôÒÅÂÕÅÔÓÑ ÚÁÄÁÔØ \"×ÈÏÄÎÏÊ-ÆÁÊÌ\" ÄÌÑ ÆÌÁÇÏ× ÇÅÎÅÒÉÒÏ×ÁÎÉÑ ÛÁÂÌÏÎÁ.\n" + +#: sunrpc/rpc_main.c:1416 +#, c-format +msgid "Cannot have more than one file generation flag!\n" +msgstr "îÅÌØÚÑ ÚÁÄÁ×ÁÔØ ÂÏÌÅÅ ÏÄÎÏÇÏ ÆÌÁÇÁ ÇÅÎÅÒÉÒÏ×ÁÎÉÑ ÆÁÊÌÁ!\n" + +#: sunrpc/rpc_main.c:1425 +#, c-format +msgid "usage: %s infile\n" +msgstr "ÉÓÐÏÌØÚÏ×ÁÎÉÅ: %s ×ÈÏÄÎÏÊ-ÆÁÊÌ\n" + +#: sunrpc/rpc_main.c:1426 +#, c-format +msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n" +msgstr "\t%s [-abkCLNTM][-Dname[=ÚÎÁÞÅÎÉÅ]] [-i ÒÁÚÍÅÒ] [-I [-K ÓÅËÕÎÄÙ]] [-Y ÐÕÔØ] ×ÈÏÄÎÏÊ-ÆÁÊÌ\n" + +#: sunrpc/rpc_main.c:1428 +#, c-format +msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n" +msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o ×ÙÈÏÄÎÏÊ-ÆÁÊÌ] [×ÈÏÄÎÏÊ-ÆÁÊÌ]\n" + +# ??? +#: sunrpc/rpc_main.c:1430 +#, c-format +msgid "\t%s [-s nettype]* [-o outfile] [infile]\n" +msgstr "\t%s [-s nettype]* [-o ×ÙÈÏÄÎÏÊ-ÆÁÊÌ] [×ÈÏÄÎÏÊ-ÆÁÊÌ]\n" + +#: sunrpc/rpc_main.c:1431 +#, c-format +msgid "\t%s [-n netid]* [-o outfile] [infile]\n" +msgstr "\t%s [-n netid]* [-o ×ÙÈÏÄÎÏÊ-ÆÁÊÌ] [×ÈÏÄÎÏÊ-ÆÁÊÌ]\n" + +#: sunrpc/rpc_scan.c:116 +msgid "constant or identifier expected" +msgstr "ÏÖÉÄÁÅÔÓÑ ËÏÎÓÔÁÎÔÁ ÉÌÉ ÉÄÅÎÔÉÆÉËÁÔÏÒ" + +#: sunrpc/rpc_scan.c:312 +msgid "illegal character in file: " +msgstr "ÎÅ×ÅÒÎÙÊ ÚÎÁË × ÆÁÊÌÅ: " + +#: sunrpc/rpc_scan.c:351 sunrpc/rpc_scan.c:377 +msgid "unterminated string constant" +msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÓÔÒÏËÏ×ÁÑ ËÏÎÓÔÁÎÔÁ" + +#: sunrpc/rpc_scan.c:383 +msgid "empty char string" +msgstr "ÐÕÓÔÁÑ ÓÔÒÏËÁ" + +#: sunrpc/rpc_scan.c:525 sunrpc/rpc_scan.c:535 +msgid "preprocessor error" +msgstr "ÏÛÉÂËÁ ÐÒÅÐÒÏÃÅÓÓÏÒÁ" + +#: sunrpc/rpcinfo.c:237 sunrpc/rpcinfo.c:383 +#, c-format +msgid "program %lu is not available\n" +msgstr "ÐÒÏÇÒÁÍÍÁ %lu ÎÅÄÏÓÔÕÐÎÁ\n" + +#: sunrpc/rpcinfo.c:264 sunrpc/rpcinfo.c:310 sunrpc/rpcinfo.c:333 +#: sunrpc/rpcinfo.c:407 sunrpc/rpcinfo.c:453 sunrpc/rpcinfo.c:476 +#: sunrpc/rpcinfo.c:510 +#, c-format +msgid "program %lu version %lu is not available\n" +msgstr "ÐÒÏÇÒÁÍÍÁ %lu ×ÅÒÓÉÉ %lu ÎÅÄÏÓÔÕÐÎÁ\n" + +#: sunrpc/rpcinfo.c:515 +#, c-format +msgid "program %lu version %lu ready and waiting\n" +msgstr "ÐÒÏÇÒÁÍÍÁ %lu ×ÅÒÓÉÉ %lu ÇÏÔÏ×Á É ÖÄÅÔ\n" + +#: sunrpc/rpcinfo.c:556 sunrpc/rpcinfo.c:563 +msgid "rpcinfo: can't contact portmapper" +msgstr "rpcinfo: ÎÅ×ÏÚÍÏÖÎÏ Ó×ÑÚÁÔØÓÑ Ó ÏÔÏÂÒÁÖÁÔÅÌÅÍ ÐÏÒÔÏ×" + +#: sunrpc/rpcinfo.c:570 +msgid "No remote programs registered.\n" +msgstr "îÅÔ ÚÁÒÅÇÉÓÔÒÉÒÏ×ÁÎÎÙÈ ÕÄÁÌÅÎÎÙÈ ÐÒÏÇÒÁÍÍ.\n" + +#: sunrpc/rpcinfo.c:574 +msgid " program vers proto port\n" +msgstr " ÐÒÏÇ-ÍÁ ×ÅÒÓ ÐÒÏÔÏ ÐÏÒÔ\n" + +#: sunrpc/rpcinfo.c:613 +msgid "(unknown)" +msgstr "(ÎÅÉÚ×ÅÓÔÎÏ)" + +#: sunrpc/rpcinfo.c:637 +#, c-format +msgid "rpcinfo: broadcast failed: %s\n" +msgstr "rpcinfo: ÛÉÒÏËÏ×ÅÝÁÔÅÌØÎÏÅ ÓÏÏÂÝÅÎÉÅ ÎÅÕÓÐÅÛÎÏ: %s\n" + +#: sunrpc/rpcinfo.c:658 +msgid "Sorry. You are not root\n" +msgstr "éÚ×ÉÎÉÔÅ, ×Ù ÎÅ ÓÕÐÅÒÐÏÌØÚÏ×ÁÔÅÌØ.\n" + +#: sunrpc/rpcinfo.c:665 +#, c-format +msgid "rpcinfo: Could not delete registration for prog %s version %s\n" +msgstr "rpcinfo: îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÒÅÇÉÓÔÒÁÃÉÀ ÐÒÏÇÒÁÍÍÙ %s ×ÅÒÓÉÉ %s\n" + +#: sunrpc/rpcinfo.c:674 +msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n" +msgstr "Usage: rpcinfo [ -n ÎÏÍÅÒ-ÐÏÒÔÁ ] -u ÈÏÓÔ ÎÏÍÅÒ-ÐÒÏÇÒÁÍÍÙ [ ÎÏÍÅÒ-×ÅÒÓÉÉ ]\n" + +#: sunrpc/rpcinfo.c:676 +msgid " rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n" +msgstr " rpcinfo [ -n ÎÏÍÅÒ-ÐÏÒÔÁ ] -t ÈÏÓÔ ÎÏÍÅÒ-ÐÒÏÇÒÁÍÍÙ [ ÎÏÍÅÒ-×ÅÒÓÉÉ ]\n" + +#: sunrpc/rpcinfo.c:678 +msgid " rpcinfo -p [ host ]\n" +msgstr " rpcinfo -p [ ÈÏÓÔ ]\n" + +#: sunrpc/rpcinfo.c:679 +msgid " rpcinfo -b prognum versnum\n" +msgstr " rpcinfo -b ÎÏÍÅÒ-ÐÒÏÇÒÁÍÍÙ ÎÏÍÅÒ-×ÅÒÓÉÉ\n" + +#: sunrpc/rpcinfo.c:680 +msgid " rpcinfo -d prognum versnum\n" +msgstr " rpcinfo -d ÎÏÍÅÒ-ÐÒÏÇÒÁÍÍÙ ÎÏÍÅÒ-×ÅÒÓÉÉ\n" + +#: sunrpc/rpcinfo.c:695 +#, c-format +msgid "rpcinfo: %s is unknown service\n" +msgstr "rpcinfo: ÓÌÕÖÂÁ %s ÎÅÉÚ×ÅÓÔÎÁ\n" + +#: sunrpc/rpcinfo.c:732 +#, c-format +msgid "rpcinfo: %s is unknown host\n" +msgstr "rpcinfo: ÈÏÓÔ %s ÎÅÉÚ×ÅÓÔÅÎ\n" + +#: sunrpc/svc_run.c:76 +msgid "svc_run: - poll failed" +msgstr "svc_run: -- ÏÐÒÏÓ ÎÅÕÓÐÅÛÅÎ" + +#: sunrpc/svc_simple.c:87 +#, c-format +msgid "can't reassign procedure number %ld\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÎÁÚÎÁÞÉÔØ ÎÏÍÅÒ ÐÒÏÃÅÄÕÒÙ %ld\n" + +#: sunrpc/svc_simple.c:96 +msgid "couldn't create an rpc server\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÅÒ×ÅÒ rpc\n" + +#: sunrpc/svc_simple.c:104 +#, c-format +msgid "couldn't register prog %ld vers %ld\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÒÅÇÉÓÔÒÉÒÏ×ÁÔØ ÐÒÏÇÒÁÍÍÕ %ld ×ÅÒÓÉÉ %ld\n" + +#: sunrpc/svc_simple.c:111 +msgid "registerrpc: out of memory\n" +msgstr "registerrpc: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/svc_simple.c:175 +#, c-format +msgid "trouble replying to prog %d\n" +msgstr "ÐÒÏÂÌÅÍÙ ÐÒÉ ÏÔÐÒÁ×ËÅ ÏÔ×ÅÔÁ ÐÒÏÇÒÁÍÍÅ %d\n" + +#: sunrpc/svc_simple.c:183 +#, c-format +msgid "never registered prog %d\n" +msgstr "ÎÉ ÒÁÚÕ ÎÅ ÒÅÇÉÓÔÒÉÒÏ×ÁÎÎÁÑ ÐÒÏÇÒÁÍÍÁ %d\n" + +#: sunrpc/svc_tcp.c:155 +msgid "svc_tcp.c - tcp socket creation problem" +msgstr "svc_tcp.c -- ÐÒÏÂÌÅÍÁ ÐÒÉ ÓÏÚÄÁÎÉÉ tcp-ÓÏËÅÔÁ" + +#: sunrpc/svc_tcp.c:170 +msgid "svc_tcp.c - cannot getsockname or listen" +msgstr "svc_tcp.c -- ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ getsockname ÉÌÉ listen" + +#: sunrpc/svc_tcp.c:181 sunrpc/svc_tcp.c:184 +msgid "svctcp_create: out of memory\n" +msgstr "svctcp_create: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/svc_tcp.c:225 sunrpc/svc_tcp.c:228 +msgid "svc_tcp: makefd_xprt: out of memory\n" +msgstr "svc_tcp: makefd_xprt: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/svc_udp.c:128 +msgid "svcudp_create: socket creation problem" +msgstr "svcudp_create: ÐÒÏÂÌÅÍÁ ÐÒÉ ÓÏÚÄÁÎÉÉ ÓÏËÅÔÁ" + +#: sunrpc/svc_udp.c:142 +msgid "svcudp_create - cannot getsockname" +msgstr "svcudp_create -- ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ getsockname" + +#: sunrpc/svc_udp.c:154 sunrpc/svc_udp.c:157 +msgid "svcudp_create: out of memory\n" +msgstr "svcudp_create: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/svc_udp.c:182 sunrpc/svc_udp.c:185 +msgid "svcudp_create: xp_pad is too small for IP_PKTINFO\n" +msgstr "svcudp_create: xp_pad ÓÌÉÛËÏÍ ÍÁÌÏ ÄÌÑ IP_PKTINFO\n" + +#: sunrpc/svc_udp.c:493 +msgid "enablecache: cache already enabled" +msgstr "enablecache: ËÜÛ ÕÖÅ ÚÁÄÅÊÓÔ×Ï×ÁÎ" + +#: sunrpc/svc_udp.c:499 +msgid "enablecache: could not allocate cache" +msgstr "enablecache: ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÍÅÓÔÏ ÐÏÄ ËÜÛ" + +#: sunrpc/svc_udp.c:507 +msgid "enablecache: could not allocate cache data" +msgstr "enablecache: ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÍÅÓÔÏ ÐÏÄ ÄÁÎÎÙÅ ËÜÛÁ" + +#: sunrpc/svc_udp.c:514 +msgid "enablecache: could not allocate cache fifo" +msgstr "enablecache: ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÍÅÓÔÏ ÐÏÄ ÏÞÅÒÅÄØ ËÜÛÁ" + +#: sunrpc/svc_udp.c:550 +msgid "cache_set: victim not found" +msgstr "cache_set: ÖÅÒÔ×Á ÎÅ ÎÁÊÄÅÎÁ" + +#: sunrpc/svc_udp.c:561 +msgid "cache_set: victim alloc failed" +msgstr "cache_set: ÓÂÏÊ ×ÙÄÅÌÅÎÉÑ ÐÁÍÑÔÉ ÄÌÑ ÖÅÒÔ×Ù" + +#: sunrpc/svc_udp.c:567 +msgid "cache_set: could not allocate new rpc_buffer" +msgstr "cache_set: ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÎÏ×ÙÊ rpc_buffer" + +#: sunrpc/svc_unix.c:150 +msgid "svc_unix.c - AF_UNIX socket creation problem" +msgstr "svc_unix.c -- ÐÒÏÂÌÅÍÁ ÐÒÉ ÓÏÚÄÁÎÉÉ AF_UNIX-ÓÏËÅÔÁ" + +#: sunrpc/svc_unix.c:166 +msgid "svc_unix.c - cannot getsockname or listen" +msgstr "svc_unix.c -- ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ getsockname ÉÌÉ listen" + +#: sunrpc/svc_unix.c:178 sunrpc/svc_unix.c:181 +msgid "svcunix_create: out of memory\n" +msgstr "svcunix_create: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/svc_unix.c:222 sunrpc/svc_unix.c:225 +msgid "svc_unix: makefd_xprt: out of memory\n" +msgstr "svc_unix: makefd_xprt: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/xdr.c:570 sunrpc/xdr.c:573 +msgid "xdr_bytes: out of memory\n" +msgstr "xdr_bytes: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/xdr.c:728 sunrpc/xdr.c:731 +msgid "xdr_string: out of memory\n" +msgstr "xdr_string: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/xdr_array.c:111 sunrpc/xdr_array.c:114 +msgid "xdr_array: out of memory\n" +msgstr "xdr_array: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/xdr_rec.c:158 sunrpc/xdr_rec.c:161 +msgid "xdrrec_create: out of memory\n" +msgstr "xdrrec_create: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: sunrpc/xdr_ref.c:88 sunrpc/xdr_ref.c:91 +msgid "xdr_reference: out of memory\n" +msgstr "xdr_reference: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n" + +#: nis/nis_callback.c:189 +msgid "unable to free arguments" +msgstr "ÎÅ ÕÄÁÌÏÓØ ×ÙÓ×ÏÂÏÄÉÔØ ÚÁÎÑÔÕÀ ÁÒÇÕÍÅÎÔÁÍÉ ÐÁÍÑÔØ" + +#: nis/nis_error.c:30 +msgid "Probable success" +msgstr "÷ÅÒÏÑÔÎÙÊ ÕÓÐÅÈ" + +#: nis/nis_error.c:31 +msgid "Not found" +msgstr "îÅ ÎÁÊÄÅÎÏ" + +#: nis/nis_error.c:32 +msgid "Probably not found" +msgstr "÷ÅÒÏÑÔÎÏ, ÎÅ ÎÁÊÄÅÎÏ" + +#: nis/nis_error.c:33 +msgid "Cache expired" +msgstr "÷ÒÅÍÑ ÖÉÚÎÉ ËÜÛÁ ÉÓÔÅËÌÏ " + +#: nis/nis_error.c:34 +msgid "NIS+ servers unreachable" +msgstr "óÌÕÖÂÙ NIS+ ÎÅÄÏÓÔÉÖÉÍÙ" + +#: nis/nis_error.c:35 +msgid "Unknown object" +msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÏÂßÅËÔ" + +#: nis/nis_error.c:36 +msgid "Server busy, try again" +msgstr "óÅÒ×ÅÒ ÚÁÎÑÔ, ÐÏÐÒÏÂÕÊÔÅ ÅÝÅ ÒÁÚ" + +#: nis/nis_error.c:37 +msgid "Generic system error" +msgstr "ïÂÝÁÑ ÏÛÉÂËÁ ÓÉÓÔÅÍÙ" + +#: nis/nis_error.c:38 +msgid "First/next chain broken" +msgstr "òÁÚÏÒ×ÁÎÁ ÃÅÐÏÞËÁ ÐÅÒ×ÙÊ/ÓÌÅÄÕÀÝÉÊ" + +#: nis/nis_error.c:41 +msgid "Name not served by this server" +msgstr "éÍÑ ÎÅ ÏÂÓÌÕÖÉ×ÁÅÔÓÑ ÄÁÎÎÙÍ ÓÅÒ×ÅÒÏÍ" + +#: nis/nis_error.c:42 +msgid "Server out of memory" +msgstr "ðÁÍÑÔØ ÎÁ ÓÅÒ×ÅÒÅ ÉÓÞÅÒÐÁÎÁ" + +#: nis/nis_error.c:43 +msgid "Object with same name exists" +msgstr "óÕÝÅÓÔ×ÕÅÔ ÏÂßÅËÔ Ó ÔÁËÉÍ ÖÅ ÉÍÅÎÅÍ" + +#: nis/nis_error.c:44 +msgid "Not master server for this domain" +msgstr "üÔÏ ÎÅ ÍÁÓÔÅÒ-ÓÅÒ×ÅÒ ÄÌÑ ÄÁÎÎÏÇÏ ÄÏÍÅÎÁ" + +#: nis/nis_error.c:45 +msgid "Invalid object for operation" +msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÄÌÑ ÄÁÎÎÏÊ ÏÐÅÒÁÃÉÉ ÏÂßÅËÔ" + +#: nis/nis_error.c:46 +msgid "Malformed name, or illegal name" +msgstr "îÅÐÒÁ×ÉÌØÎÏ ÕËÁÚÁÎÎÏÅ ÉÌÉ ÎÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ" + +#: nis/nis_error.c:47 +msgid "Unable to create callback" +msgstr "" + +#: nis/nis_error.c:48 +msgid "Results sent to callback proc" +msgstr "" + +#: nis/nis_error.c:49 +msgid "Not found, no such name" +msgstr "îÅ ÎÁÊÄÅÎÏ, ÎÅÔ ÔÁËÏÇÏ ÉÍÅÎÉ" + +#: nis/nis_error.c:50 +msgid "Name/entry isn't unique" +msgstr "éÍÑ/ÚÁÐÉÓØ ÎÅ ÕÎÉËÁÌØÎÏ" + +#: nis/nis_error.c:51 +msgid "Modification failed" +msgstr "íÏÄÉÆÉËÁÃÉÑ ÎÅ ÕÄÁÌÁÓØ" + +#: nis/nis_error.c:52 +msgid "Database for table does not exist" +msgstr "âÁÚÁ ÄÁÎÎÙÈ ÄÌÑ ÔÁÂÌÉÃÙ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ" + +#: nis/nis_error.c:53 +msgid "Entry/table type mismatch" +msgstr "îÅÓÏÏÔ×ÅÔÓÔ×ÉÅ ÔÉÐÏ× ÚÁÐÉÓÉ/ÔÁÂÌÉÃÙ" + +#: nis/nis_error.c:54 +msgid "Link points to illegal name" +msgstr "óÓÙÌËÁ ÕËÁÚÙ×ÁÅÔ ÎÁ ÎÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ" + +#: nis/nis_error.c:55 +msgid "Partial success" +msgstr "þÁÓÔÉÞÎÙÊ ÕÓÐÅÈ" + +#: nis/nis_error.c:56 +msgid "Too many attributes" +msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÁÔÒÉÂÕÔÏ×" + +#: nis/nis_error.c:57 +msgid "Error in RPC subsystem" +msgstr "ïÛÉÂËÁ × ÐÏÄÓÉÓÔÅÍÅ RPC" + +#: nis/nis_error.c:58 +msgid "Missing or malformed attribute" +msgstr "ðÒÏÐÕÝÅÎÎÙÊ ÉÌÉ ÎÅÐÒÁ×ÉÌØÎÏ ÕËÁÚÁÎÎÙÊ ÁÔÒÉÂÕÔ" + +#: nis/nis_error.c:59 +msgid "Named object is not searchable" +msgstr "" + +#: nis/nis_error.c:60 +msgid "Error while talking to callback proc" +msgstr "" + +#: nis/nis_error.c:61 +msgid "Non NIS+ namespace encountered" +msgstr "ïÂÎÁÒÕÖÅÎÏ ÎÅ-NIS+ ÐÒÏÓÔÒÁÎÓÔ×Ï ÉÍÅÎ" + +#: nis/nis_error.c:62 +msgid "Illegal object type for operation" +msgstr "îÅ ÄÏÐÕÓÔÉÍÙÊ ÄÌÑ ÏÐÅÒÁÃÉÉ ÔÉÐ ÏÂßÅËÔÁ" + +#: nis/nis_error.c:63 +msgid "Passed object is not the same object on server" +msgstr "ðÅÒÅÄÁÎÎÙÊ ÏÂßÅËÔ ÎÅ ÔÏÇÏ ÖÅ ÔÉÐÁ, ÞÔÏ ÏÂßÅËÔ ÎÁ ÓÅÒ×ÅÒÅ" + +#: nis/nis_error.c:64 +msgid "Modify operation failed" +msgstr "ïÐÅÒÁÃÉÑ ÍÏÄÉÆÉËÁÃÉÉ ÎÅÕÓÐÅÛÎÁ" + +#: nis/nis_error.c:65 +msgid "Query illegal for named table" +msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÚÁÐÒÏÓ ÄÌÑ ÉÍÅÎÏ×ÁÎÎÏÊ ÔÁÂÌÉÃÙ" + +#: nis/nis_error.c:66 +msgid "Attempt to remove a non-empty table" +msgstr "ðÏÐÙÔËÁ ÕÄÁÌÉÔØ ÎÅÐÕÓÔÕÀ ÔÁÂÌÉÃÕ" + +#: nis/nis_error.c:67 +msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?" +msgstr "ïÛÉÂËÁ ÏÂÒÁÝÅÎÉÑ Ë ÆÁÊÌÕ ÈÏÌÏÄÎÏÇÏ ÚÁÐÕÓËÁ NIS+. õÓÔÁÎÏ×ÌÅÎ ÌÉ NIS+?" + +#: nis/nis_error.c:68 +msgid "Full resync required for directory" +msgstr "äÌÑ ËÁÔÁÌÏÇÁ ÔÒÅÂÕÅÔÓÑ ÐÏÌÎÁÑ ÒÅÓÉÎÈÒÏÎÉÚÁÃÉÑ" + +#: nis/nis_error.c:69 +msgid "NIS+ operation failed" +msgstr "ïÐÅÒÁÃÉÑ NIS+ ÎÅÕÓÐÅÛÎÁ" + +#: nis/nis_error.c:70 +msgid "NIS+ service is unavailable or not installed" +msgstr "óÌÕÖÂÁ NIS+ ÎÅÄÏÓÔÕÐÎÁ ÉÌÉ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ" + +#: nis/nis_error.c:71 +msgid "Yes, 42 is the meaning of life" +msgstr "äÁ, 42 -- ÜÔÏ ÓÍÙÓÌ ÖÉÚÎÉ" + +#: nis/nis_error.c:72 +msgid "Unable to authenticate NIS+ server" +msgstr "îÅ ÕÄÁÌÏÓØ ÁÕÔÅÎÆÉÃÉÒÏ×ÁÔØ ÓÅÒ×ÅÒ NIS+" + +#: nis/nis_error.c:73 +msgid "Unable to authenticate NIS+ client" +msgstr "îÅ ÕÄÁÌÏÓØ ÁÕÔÅÎÆÉÃÉÒÏ×ÁÔØ ËÌÉÅÎÔ NIS+" + +#: nis/nis_error.c:74 +msgid "No file space on server" +msgstr "îÁ ÓÅÒ×ÅÒÅ ÎÅÔ ÄÉÓËÏ×ÏÇÏ ÐÒÏÓÔÒÁÎÓÔ×Á" + +#: nis/nis_error.c:75 +msgid "Unable to create process on server" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÐÒÏÃÅÓÓ ÎÁ ÓÅÒ×ÅÒÅ" + +#: nis/nis_error.c:76 +msgid "Master server busy, full dump rescheduled." +msgstr "íÁÓÔÅÒ-ÓÅÒ×ÅÒ ÚÁÎÑÔ, ÚÁÐÌÁÎÉÒÏ×ÁÎ ÐÏÌÎÙÊ ÄÁÍÐ." + +#: nis/nis_local_names.c:126 +#, c-format +msgid "LOCAL entry for UID %d in directory %s not unique\n" +msgstr "úÁÐÉÓØ LOCAL ÄÌÑ UID %d × ËÁÔÁÌÏÇÅ %s ÎÅ ÕÎÉËÁÌØÎÁ\n" + +#: nis/nis_print.c:51 +msgid "UNKNOWN" +msgstr "îåéú÷åóôîï" + +#: nis/nis_print.c:109 +msgid "BOGUS OBJECT\n" +msgstr "îåáäåë÷áôîùê ïâÿåëô\n" + +#: nis/nis_print.c:112 +msgid "NO OBJECT\n" +msgstr "îåô ïâÿåëôá\n" + +#: nis/nis_print.c:115 +msgid "DIRECTORY\n" +msgstr "ëáôáìïç\n" + +#: nis/nis_print.c:118 +msgid "GROUP\n" +msgstr "çòõððá\n" + +#: nis/nis_print.c:121 +msgid "TABLE\n" +msgstr "ôáâìéãá\n" + +#: nis/nis_print.c:124 +msgid "ENTRY\n" +msgstr "úáðéóø\n" + +#: nis/nis_print.c:127 +msgid "LINK\n" +msgstr "óóùìëá\n" + +#: nis/nis_print.c:130 +msgid "PRIVATE\n" +msgstr "ðòé÷áôîïå\n" + +#: nis/nis_print.c:133 +msgid "(Unknown object)\n" +msgstr "(îÅÉÚ×ÅÓÔÎÙÊ ÏÂßÅËÔ)\n" + +#: nis/nis_print.c:166 +#, c-format +msgid "Name : `%s'\n" +msgstr "éÍÑ : `%s'\n" + +#: nis/nis_print.c:167 +#, c-format +msgid "Type : %s\n" +msgstr "ôÉÐ : %s\n" + +#: nis/nis_print.c:172 +msgid "Master Server :\n" +msgstr "íÁÓÔÅÒ-ÓÅÒ×ÅÒ :\n" + +#: nis/nis_print.c:174 +msgid "Replicate :\n" +msgstr "òÅÐÌÉËÁ :\n" + +#: nis/nis_print.c:175 +#, c-format +msgid "\tName : %s\n" +msgstr "\téÍÑ : %s\n" + +#: nis/nis_print.c:176 +msgid "\tPublic Key : " +msgstr "\tðÕÂÌÉÞÎÙÊ ËÌÀÞ : " + +#: nis/nis_print.c:180 +msgid "None.\n" +msgstr "îÅÔ.\n" + +#: nis/nis_print.c:183 +#, c-format +msgid "Diffie-Hellmann (%d bits)\n" +msgstr "äÉÆÆÉ-èÅÌÍÁÎ (%d ÂÉÔ)\n" + +#: nis/nis_print.c:188 +#, c-format +msgid "RSA (%d bits)\n" +msgstr "RSA (%d ÂÉÔ)\n" + +#: nis/nis_print.c:191 +msgid "Kerberos.\n" +msgstr "ëÅÒÂÅÒÏÓ.\n" + +#: nis/nis_print.c:194 +#, c-format +msgid "Unknown (type = %d, bits = %d)\n" +msgstr "îÅÉÚ×ÅÓÔÎÏ (ÔÉÐ = %d, ÂÉÔÙ = %d)\n" + +#: nis/nis_print.c:205 +#, c-format +msgid "\tUniversal addresses (%u)\n" +msgstr "\tõÎÉ×ÅÒÓÁÌØÎÙÅ ÁÄÒÅÓÁ (%u)\n" + +#: nis/nis_print.c:227 +msgid "Time to live : " +msgstr "÷ÒÅÍÑ ÖÉÚÎÉ : " + +#: nis/nis_print.c:229 +msgid "Default Access rights :\n" +msgstr "ðÒÁ×Á ÄÏÓÔÕÐÁ ÐÏ ÕÍÏÌÞÁÎÉÀ :\n" + +#: nis/nis_print.c:238 +#, c-format +msgid "\tType : %s\n" +msgstr "\tôÉÐ : %s\n" + +#: nis/nis_print.c:239 +msgid "\tAccess rights: " +msgstr "\tðÒÁ×Á ÄÏÓÔÕÐÁ: " + +#: nis/nis_print.c:252 +msgid "Group Flags :" +msgstr "æÌÁÇÉ ÇÒÕÐÐÙ :" + +#: nis/nis_print.c:255 +msgid "" +"\n" +"Group Members :\n" +msgstr "" +"\n" +"þÌÅÎÙ ÇÒÕÐÐÙ :\n" + +#: nis/nis_print.c:266 +#, c-format +msgid "Table Type : %s\n" +msgstr "ôÉÐ ÔÁÂÌÉÃÙ : %s\n" + +#: nis/nis_print.c:267 +#, c-format +msgid "Number of Columns : %d\n" +msgstr "þÉÓÌÏ ÓÔÏÌÂÃÏ× : %d\n" + +#: nis/nis_print.c:268 +#, c-format +msgid "Character Separator : %c\n" +msgstr "úÎÁË-ÒÁÚÄÅÌÉÔÅÌØ : %c\n" + +#: nis/nis_print.c:269 +#, c-format +msgid "Search Path : %s\n" +msgstr "ðÕÔØ ÐÏÉÓËÁ : %s\n" + +#: nis/nis_print.c:270 +msgid "Columns :\n" +msgstr "óÔÏÌÂÃÙ :\n" + +#: nis/nis_print.c:273 +#, c-format +msgid "\t[%d]\tName : %s\n" +msgstr "\t[%d]\téÍÑ : %s\n" + +#: nis/nis_print.c:275 +msgid "\t\tAttributes : " +msgstr "\t\táÔÒÉÂÕÔÙ : " + +#: nis/nis_print.c:277 +msgid "\t\tAccess Rights : " +msgstr "\t\tðÒÁ×Á ÄÏÓÔÕÐÁ : " + +#: nis/nis_print.c:286 +msgid "Linked Object Type : " +msgstr "ôÉÐ ÏÂßÅËÔÁ ÐÏ ÓÓÙÌËÅ : " + +#: nis/nis_print.c:288 +#, c-format +msgid "Linked to : %s\n" +msgstr "óÓÙÌËÁ ÎÁ : %s\n" + +#: nis/nis_print.c:297 +#, c-format +msgid "\tEntry data of type %s\n" +msgstr "\täÁÎÎÙÅ ÚÁÐÉÓÉ ÔÉÐÁ %s\n" + +#: nis/nis_print.c:300 +#, c-format +msgid "\t[%u] - [%u bytes] " +msgstr "\t[%u] - [%u ÂÁÊÔ] " + +#: nis/nis_print.c:303 +msgid "Encrypted data\n" +msgstr "úÁÛÉÆÒÏ×ÁÎÎÙÅ ÄÁÎÎÙÅ\n" + +#: nis/nis_print.c:305 +msgid "Binary data\n" +msgstr "âÉÎÁÒÎÙÅ ÄÁÎÎÙÅ\n" + +#: nis/nis_print.c:320 +#, c-format +msgid "Object Name : %s\n" +msgstr "éÍÑ ÏÂßÅËÔÁ : %s\n" + +#: nis/nis_print.c:321 +#, c-format +msgid "Directory : %s\n" +msgstr "ëÁÔÁÌÏÇ : %s\n" + +#: nis/nis_print.c:322 +#, c-format +msgid "Owner : %s\n" +msgstr "÷ÌÁÄÅÌÅà : %s\n" + +#: nis/nis_print.c:323 +#, c-format +msgid "Group : %s\n" +msgstr "çÒÕÐÐÁ : %s\n" + +# ??? ÚÄÅÓØ, ÎÉÖÅ É ×ÙÛÅ -- ÒÁÓÓÔÁ×ÉÔØ ÐÒÏÂÅÌÙ ËÁË ÎÁÄÏ +#: nis/nis_print.c:324 +msgid "Access Rights : " +msgstr "ðÒÁ×Á ÄÏÓÔÕÐÁ : " + +#: nis/nis_print.c:326 +#, c-format +msgid "" +"\n" +"Time to Live : " +msgstr "" +"\n" +"÷ÒÅÍÑ ÖÉÚÎÉ : " + +#: nis/nis_print.c:329 +#, c-format +msgid "Creation Time : %s" +msgstr "÷ÒÅÍÑ ÓÏÚÄÁÎÉÑ : %s" + +#: nis/nis_print.c:331 +#, c-format +msgid "Mod. Time : %s" +msgstr "÷ÒÅÍÑ ÍÏÄÉÆÉËÁÃÉÉ : %s" + +#: nis/nis_print.c:332 +msgid "Object Type : " +msgstr "ôÉÐ ÏÂßÅËÔÁ : " + +#: nis/nis_print.c:352 +#, c-format +msgid " Data Length = %u\n" +msgstr " äÌÉÎÁ ÄÁÎÎÙÈ = %u\n" + +#: nis/nis_print.c:365 +#, c-format +msgid "Status : %s\n" +msgstr "óÔÁÔÕÓ : %s\n" + +#: nis/nis_print.c:366 +#, c-format +msgid "Number of objects : %u\n" +msgstr "þÉÓÌÏ ÏÂßÅËÔÏ× : %u\n" + +#: nis/nis_print.c:370 +#, c-format +msgid "Object #%d:\n" +msgstr "ïÂßÅËÔ #%d:\n" + +#: nis/nis_print_group_entry.c:115 +#, c-format +msgid "Group entry for \"%s.%s\" group:\n" +msgstr "úÁÐÉÓØ ÇÒÕÐÐÙ ÄÌÑ ÇÒÕÐÐÙ \"%s.%s\":\n" + +#: nis/nis_print_group_entry.c:123 +msgid " Explicit members:\n" +msgstr " ñ×ÎÙÅ ÞÌÅÎÙ:\n" + +#: nis/nis_print_group_entry.c:128 +msgid " No explicit members\n" +msgstr " îÅÔ Ñ×ÎÙÈ ÞÌÅÎÏ×\n" + +#: nis/nis_print_group_entry.c:131 +msgid " Implicit members:\n" +msgstr " îÅÑ×ÎÙÅ ÞÌÅÎÙ:\n" + +#: nis/nis_print_group_entry.c:136 +msgid " No implicit members\n" +msgstr " îÅÔ ÎÅÑ×ÎÙÈ ÞÌÅÎÏ×\n" + +#: nis/nis_print_group_entry.c:139 +msgid " Recursive members:\n" +msgstr " òÅËÕÒÓÉ×ÎÙÅ ÞÌÅÎÙ:\n" + +#: nis/nis_print_group_entry.c:144 +msgid " No recursive members\n" +msgstr " îÅÔ ÒÅËÕÒÓÉ×ÎÙÈ ÞÌÅÎÏ×\n" + +#: nis/nis_print_group_entry.c:147 nis/nis_print_group_entry.c:163 +msgid " Explicit nonmembers:\n" +msgstr " ñ×ÎÙÅ ÎÅ-ÞÌÅÎÙ:\n" + +#: nis/nis_print_group_entry.c:152 +msgid " No explicit nonmembers\n" +msgstr " îÅÔ Ñ×ÎÙÈ ÎÅ-ÞÌÅÎÏ×\n" + +#: nis/nis_print_group_entry.c:155 +msgid " Implicit nonmembers:\n" +msgstr " îÅÑ×ÎÙÅ ÎÅ-ÞÌÅÎÙ:\n" + +#: nis/nis_print_group_entry.c:160 +msgid " No implicit nonmembers\n" +msgstr " îÅÔ ÎÅÑ×ÎÙÈ ÎÅ-ÞÌÅÎÏ×\n" + +#: nis/nis_print_group_entry.c:168 +msgid " No recursive nonmembers\n" +msgstr " îÅÔ ÒÅËÕÒÓÉ×ÎÙÈ ÎÅ-ÞÌÅÎÏ×\n" + +# ??? +#: nis/nss_nisplus/nisplus-publickey.c:101 +#: nis/nss_nisplus/nisplus-publickey.c:182 +#, c-format +msgid "DES entry for netname %s not unique\n" +msgstr "úÁÐÉÓØ DES ÄÌÑ netname %s ÎÅ ÕÎÉËÁÌØÎÁ\n" + +#: nis/nss_nisplus/nisplus-publickey.c:218 +#, c-format +msgid "netname2user: missing group id list in `%s'." +msgstr "netname2user: ÐÒÏÐÕÝÅÎ ÓÐÉÓÏË ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÇÒÕÐÐ × `%s'." + +#: nis/nss_nisplus/nisplus-publickey.c:300 +#: nis/nss_nisplus/nisplus-publickey.c:306 +#: nis/nss_nisplus/nisplus-publickey.c:370 +#: nis/nss_nisplus/nisplus-publickey.c:379 +#, c-format +msgid "netname2user: (nis+ lookup): %s\n" +msgstr "netname2user: (ÐÏÉÓË × nis+): %s\n" + +#: nis/nss_nisplus/nisplus-publickey.c:319 +#, c-format +msgid "netname2user: DES entry for %s in directory %s not unique" +msgstr "netname2user: ÚÁÐÉÓØ DES ÄÌÑ %s × ËÁÔÁÌÏÇÅ %s ÎÅ ÕÎÉËÁÌØÎÁ" + +#: nis/nss_nisplus/nisplus-publickey.c:337 +#, c-format +msgid "netname2user: principal name `%s' too long" +msgstr "netname2user: ÉÍÑ ÐÒÉÎÃÉÐÁÌÁ `%s' ÓÌÉÛËÏÍ ×ÅÌÉËÏ" + +#: nis/nss_nisplus/nisplus-publickey.c:392 +#, c-format +msgid "netname2user: LOCAL entry for %s in directory %s not unique" +msgstr "netname2user: ÚÁÐÉÓØ LOCAL ÄÌÑ %s × ËÁÔÁÌÏÇÅ %s ÎÅ ÕÎÉËÁÌØÎÁ" + +#: nis/nss_nisplus/nisplus-publickey.c:399 +msgid "netname2user: should not have uid 0" +msgstr "netname2user: ÎÅ ÄÏÌÖÅÎ ÉÍÅÔØ ÎÕÌÅ×ÏÊ uid" + +#: nis/ypclnt.c:171 +#, c-format +msgid "YPBINDPROC_DOMAIN: %s\n" +msgstr "YPBINDPROC_DOMAIN: %s\n" + +#: nis/ypclnt.c:780 +msgid "Request arguments bad" +msgstr "îÅÐÒÁ×ÉÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ÚÁÐÒÏÓÁ" + +#: nis/ypclnt.c:782 +msgid "RPC failure on NIS operation" +msgstr "óÂÏÊ RPC ÐÒÉ ÏÐÅÒÁÃÉÉ NIS" + +#: nis/ypclnt.c:784 +msgid "Can't bind to server which serves this domain" +msgstr "îÅ ÕÄÁÅÔÓÑ ÓÏÅÄÉÎÉÔØÓÑ Ó ÓÅÒ×ÅÒÏÍ, ÏÂÓÌÕÖÉ×ÁÀÝÉÍ ÜÔÏÔ ÄÏÍÅÎ" + +#: nis/ypclnt.c:786 +msgid "No such map in server's domain" +msgstr "" + +#: nis/ypclnt.c:788 +msgid "No such key in map" +msgstr "" + +#: nis/ypclnt.c:790 +msgid "Internal NIS error" +msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ NIS" + +#: nis/ypclnt.c:792 +msgid "Local resource allocation failure" +msgstr "óÂÏÊ ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÌÏËÁÌØÎÏÇÏ ÒÅÓÕÒÓÁ" + +#: nis/ypclnt.c:794 +msgid "No more records in map database" +msgstr "" + +#: nis/ypclnt.c:796 +msgid "Can't communicate with portmapper" +msgstr "îÅ×ÏÚÍÏÖÎÏ Ó×ÑÚÁÔØÓÑ Ó ÏÔÏÂÒÁÖÁÔÅÌÅÍ ÐÏÒÔÏ×" + +#: nis/ypclnt.c:798 +msgid "Can't communicate with ypbind" +msgstr "îÅ×ÏÚÍÏÖÎÏ Ó×ÑÚÁÔØÓÑ Ó ypbind" + +#: nis/ypclnt.c:800 +msgid "Can't communicate with ypserv" +msgstr "îÅ×ÏÚÍÏÖÎÏ Ó×ÑÚÁÔØÓÑ Ó ypserv" + +#: nis/ypclnt.c:802 +msgid "Local domain name not set" +msgstr "ìÏËÁÌØÎÏÅ ÉÍÑ ÄÏÍÅÎÁ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÏ" + +#: nis/ypclnt.c:804 +msgid "NIS map database is bad" +msgstr "" + +#: nis/ypclnt.c:806 +msgid "NIS client/server version mismatch - can't supply service" +msgstr "îÅÓÏÏÔ×ÅÔÓÔ×ÉÅ ×ÅÒÓÉÊ ËÌÉÅÎÔÁ/ÓÅÒ×ÅÒÁ NIS -- ÎÅ×ÏÚÍÏÖÎÏ ÐÒÅÄÏÓÔÁ×ÉÔØ ÓÌÕÖÂÕ" + +#: nis/ypclnt.c:810 +msgid "Database is busy" +msgstr "âÁÚÁ ÄÁÎÎÙÈ ÚÁÎÑÔÁ" + +#: nis/ypclnt.c:812 +msgid "Unknown NIS error code" +msgstr "îÅÉÚ×ÅÓÔÎÙÊ ËÏÄ ÏÛÉÂËÉ NIS" + +#: nis/ypclnt.c:854 +msgid "Internal ypbind error" +msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ ypbind" + +#: nis/ypclnt.c:856 +msgid "Domain not bound" +msgstr "äÏÍÅÎ ÎÅ ÎÁÊÄÅÎ" + +#: nis/ypclnt.c:858 +msgid "System resource allocation failure" +msgstr "óÂÏÊ ×ÙÄÅÌÅÎÉÑ ÓÉÓÔÅÍÎÏÇÏ ÒÅÓÕÒÓÁ" + +#: nis/ypclnt.c:860 +msgid "Unknown ypbind error" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ ypbind" + +#: nis/ypclnt.c:899 +msgid "yp_update: cannot convert host to netname\n" +msgstr "yp_update: ÎÅ×ÏÚÍÏÖÎÏ ÐÒÅÏÂÒÁÚÏ×ÁÔØ ÈÏÓÔ × netname\n" + +#: nis/ypclnt.c:911 +msgid "yp_update: cannot get server address\n" +msgstr "yp_update: ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÁÄÒÅÓ ÓÅÒ×ÅÒÁ\n" + +#: nscd/cache.c:94 +msgid "while allocating hash table entry" +msgstr "ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÍÅÓÔÁ ÐÏÄ ÚÁÐÉÓØ ÈÜÛ-ÔÁÂÌÉÃÙ" + +#: nscd/cache.c:162 nscd/connections.c:184 +#, c-format +msgid "cannot stat() file `%s': %s" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat() ÄÌÑ ÆÁÊÌÁ `%s': %s" + +#: nscd/connections.c:150 +msgid "Cannot run nscd in secure mode as unprivileged user" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÐÕÓÔÉÔØ nscd × ÂÅÚÏÐÁÓÎÏÍ ÒÅÖÉÍÅ ÐÏÄ ÎÅÐÒÉ×ÅÌÉÇÅÒÏ×ÁÎÎÙÍ ÐÏÌØÚÏ×ÁÔÅÌÅÍ" + +#: nscd/connections.c:172 +#, c-format +msgid "while allocating cache: %s" +msgstr "ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÐÁÍÑÔÉ ÐÏÄ ËÜÛ: %s" + +#: nscd/connections.c:197 +#, c-format +msgid "cannot open socket: %s" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÓÏËÅÔ: %s" + +#: nscd/connections.c:215 +#, c-format +msgid "cannot enable socket to accept connections: %s" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÓÏËÅÔ ÐÒÉÎÉÍÁÀÝÉÍ ÓÏÅÄÉÎÅÎÉÑ: %s" + +#: nscd/connections.c:260 +#, c-format +msgid "cannot handle old request version %d; current version is %d" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÂÒÁÂÏÔÁÔØ ÚÁÐÒÏÓ ÓÔÁÒÏÊ ×ÅÒÓÉÉ %d; ÔÅËÕÝÁÑ ×ÅÒÓÉÑ %d" + +#: nscd/connections.c:298 nscd/connections.c:324 +#, c-format +msgid "cannot write result: %s" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÒÅÚÕÌØÔÁÔ: %s" + +#: nscd/connections.c:392 nscd/connections.c:514 +#, c-format +msgid "error getting callers id: %s" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ×ÙÚÙ×ÁÀÝÅÊ ÓÔÏÒÏÎÙ: %s" + +#: nscd/connections.c:485 +#, c-format +msgid "while accepting connection: %s" +msgstr "ÐÒÉ ÐÒÉÅÍÅ ÓÏÅÄÉÎÅÎÉÑ: %s" + +#: nscd/connections.c:498 +#, fuzzy, c-format +msgid "short read while reading request: %s" +msgstr "ÎÅÐÏÌÎÙÊ ÓÞÉÔÁÎÎÙÊ ÂÌÏË ÐÒÉ ÞÔÅÎÉÉ ÚÁÐÒÏÓÁ: %s" + +#: nscd/connections.c:542 +#, c-format +msgid "key length in request too long: %d" +msgstr "ÄÌÉÎÁ ËÌÀÞÁ × ÚÁÐÒÏÓÅ ÓÌÉÛËÏÍ ×ÅÌÉËÁ: %d" + +#: nscd/connections.c:556 +#, c-format +msgid "short read while reading request key: %s" +msgstr "" + +#: nscd/connections.c:566 +#, c-format +msgid "handle_request: request received (Version = %d) from PID %ld" +msgstr "handle_request: ÐÏÌÕÞÅÎ ÚÁÐÒÏÓ (×ÅÒÓÉÑ = %d) ÏÔ PID %ld" + +#: nscd/connections.c:571 +#, c-format +msgid "handle_request: request received (Version = %d)" +msgstr "handle_request: ÐÏÌÕÞÅÎ ÚÁÐÒÏÓ (×ÅÒÓÉÑ = %d)" + +#: nscd/connections.c:635 nscd/connections.c:636 nscd/connections.c:655 +#: nscd/connections.c:668 nscd/connections.c:674 nscd/connections.c:681 +#, c-format +msgid "Failed to run nscd as user '%s'" +msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ nscd ÏÔ ÉÍÅÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ '%s'" + +#: nscd/connections.c:656 +msgid "getgrouplist failed" +msgstr "getgrouplist ÎÅÕÓÐÅÛÎÁ" + +#: nscd/connections.c:669 +msgid "setgroups failed" +msgstr "setgroups ÎÅÕÓÐÅÛÎÁ" + +#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109 +msgid "while allocating key copy" +msgstr "ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÐÁÍÑÔÉ ÐÏÄ ËÏÐÉÀ ËÌÀÞÁ" + +#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146 +msgid "while allocating cache entry" +msgstr "ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÐÁÍÑÔÉ ÐÏÄ ÚÁÐÉÓØ ËÜÛÁ" + +#: nscd/grpcache.c:197 nscd/hstcache.c:283 nscd/pwdcache.c:193 +#, fuzzy, c-format +msgid "short write in %s: %s" +msgstr "ÎÅÐÏÌÎÁÑ ÚÁÐÉÓØ × %s: %s" + +#: nscd/grpcache.c:219 +#, c-format +msgid "Haven't found \"%s\" in group cache!" +msgstr "îÅ ÎÁÊÄÅÎÏ \"%s\" × ËÜÛÅ ÇÒÕÐÐ!" + +#: nscd/grpcache.c:285 +#, c-format +msgid "Invalid numeric gid \"%s\"!" +msgstr "îÅ×ÅÒÎÙÊ ÞÉÓÌÏ×ÏÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÇÒÕÐÐÙ \"%s\"!" + +#: nscd/grpcache.c:292 +#, c-format +msgid "Haven't found \"%d\" in group cache!" +msgstr "îÅ ÎÁÊÄÅÎÏ \"%d\" × ËÜÛÅ ÇÒÕÐÐ!" + +#: nscd/hstcache.c:305 nscd/hstcache.c:371 nscd/hstcache.c:436 +#: nscd/hstcache.c:501 +#, c-format +msgid "Haven't found \"%s\" in hosts cache!" +msgstr "îÅ ÎÁÊÄÅÎÏ \"%s\" × ËÜÛÅ ÈÏÓÔÏ×!" + +#: nscd/nscd.c:89 +msgid "Read configuration data from NAME" +msgstr "þÉÔÁÔØ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÅ ÄÁÎÎÙÅ ÉÚ æáêìá" + +#: nscd/nscd.c:91 +msgid "Do not fork and display messages on the current tty" +msgstr "îÅ ÐÏÒÏÖÄÁÔØ ÄÏÞÅÒÎÉÊ ÐÒÏÃÅÓÓ, ÐÅÞÁÔÁÔØ ÓÏÏÂÝÅÎÉÑ ÎÁ ÔÅËÕÝÉÊ ÔÅÒÍÉÎÁÌ" + +#: nscd/nscd.c:92 +msgid "NUMBER" +msgstr "þéóìï" + +#: nscd/nscd.c:92 +msgid "Start NUMBER threads" +msgstr "úÁÐÕÓÔÉÔØ ÕËÁÚÁÎÎÏÅ þéóìï ÎÉÔÅÊ" + +#: nscd/nscd.c:93 +msgid "Shut the server down" +msgstr "÷ÙËÌÀÞÉÔØ ÓÅÒ×ÅÒ" + +#: nscd/nscd.c:94 +msgid "Print current configuration statistic" +msgstr "îÁÐÅÞÁÔÁÔØ ÓÔÁÔÉÓÔÉËÕ ÐÏ ÔÅËÕÝÅÊ ËÏÎÆÉÇÕÒÁÃÉÉ" + +#: nscd/nscd.c:95 +msgid "TABLE" +msgstr "ôáâìéãá" + +#: nscd/nscd.c:96 +msgid "Invalidate the specified cache" +msgstr "ïÂßÑ×ÉÔØ ÕËÁÚÁÎÎÙÊ ËÜÛ ÎÅÄÅÊÓÔ×ÉÔÅÌØÎÙÍ" + +#: nscd/nscd.c:97 +msgid "TABLE,yes" +msgstr "ôáâìéãá,yes" + +#: nscd/nscd.c:97 +msgid "Use separate cache for each user" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÏÔÄÅÌØÎÙÊ ËÜÛ ÄÌÑ ËÁÖÄÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ" + +#: nscd/nscd.c:102 +msgid "Name Service Cache Daemon." +msgstr "äÅÍÏÎ ËÜÛÁ ÓÌÕÖÂÙ ÉÍÅÎ." + +#: nscd/nscd.c:141 +msgid "cannot read configuration file; this is fatal" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÆÁÊÌ ËÏÎÆÉÇÕÒÁÃÉÉ; ÜÔÏ ÆÁÔÁÌØÎÙÊ ÓÂÏÊ" + +#: nscd/nscd.c:152 +msgid "already running" +msgstr "ÕÖÅ ÚÁÐÕÝÅÎ" + +#: nscd/nscd.c:270 nscd/nscd.c:294 nscd/nscd_stat.c:132 +msgid "Only root is allowed to use this option!" +msgstr "ôÏÌØËÏ ÓÕÐÅÒÐÏÌØÚÏ×ÁÔÅÌØ ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÜÔÏÔ ËÌÀÞ!" + +#: nscd/nscd_conf.c:88 +#, c-format +msgid "Parse error: %s" +msgstr "ïÛÉÂËÁ ÒÁÚÂÏÒÁ: %s" + +#: nscd/nscd_conf.c:171 +#, c-format +msgid "Could not create log file \"%s\"" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÁÊÌ ÐÒÏÔÏËÏÌÁ \"%s\"" + +#: nscd/nscd_conf.c:187 +msgid "Must specify user name for server-user option" +msgstr "îÕÖÎÏ ÕËÁÚÁÔØ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ËÌÀÞÁ server-user" + +#: nscd/nscd_conf.c:194 +msgid "Must specify user name for stat-user option" +msgstr "îÕÖÎÏ ÕËÁÚÁÔØ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ËÌÀÞÁ stat-user" + +#: nscd/nscd_conf.c:205 +#, c-format +msgid "Unknown option: %s %s %s" +msgstr "îÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ: %s %s %s" + +#: nscd/nscd_stat.c:103 +#, c-format +msgid "cannot write statistics: %s" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÓÔÁÔÉÓÔÉËÕ: %s" + +#: nscd/nscd_stat.c:128 +#, c-format +msgid "Only root or %s is allowed to use this option!" +msgstr "ôÏÌØËÏ ÓÕÐÅÒÐÏÌØÚÏ×ÁÔÅÌØ ÉÌÉ %s ÍÏÇÕÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÜÔÏÔ ËÌÀÞ!" + +#: nscd/nscd_stat.c:139 +msgid "nscd not running!\n" +msgstr "nscd ÎÅ ÚÁÐÕÝÅÎ!\n" + +#: nscd/nscd_stat.c:150 +msgid "write incomplete" +msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÚÁÐÉÓØ" + +#: nscd/nscd_stat.c:162 +msgid "cannot read statistics data" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÓÔÁÔÉÓÔÉÞÅÓËÉÅ ÄÁÎÎÙÅ" + +#: nscd/nscd_stat.c:165 +#, c-format +msgid "" +"nscd configuration:\n" +"\n" +"%15d server debug level\n" +msgstr "" +"ëÏÎÆÉÇÕÒÁÃÉÑ nscd:\n" +"\n" +"%15d ÕÒÏ×ÅÎØ ÏÔÌÁÄËÉ ÓÅÒ×ÅÒÁ\n" + +#: nscd/nscd_stat.c:189 +#, c-format +msgid "%3ud %2uh %2um %2lus server runtime\n" +msgstr "%3ud %2uh %2um %2lus ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n" + +#: nscd/nscd_stat.c:192 +#, c-format +msgid " %2uh %2um %2lus server runtime\n" +msgstr " %2uh %2um %2lus ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n" + +#: nscd/nscd_stat.c:194 +#, c-format +msgid " %2um %2lus server runtime\n" +msgstr " %2um %2lus ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n" + +#: nscd/nscd_stat.c:196 +#, c-format +msgid " %2lus server runtime\n" +msgstr " %2lus ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n" + +#: nscd/nscd_stat.c:198 +#, c-format +msgid "%15lu number of times clients had to wait\n" +msgstr "%15lu ÓËÏÌØËÏ ÒÁÚ ËÌÉÅÎÔÁÍ ÐÒÉÛÌÏÓØ ÖÄÁÔØ\n" + +#: nscd/nscd_stat.c:213 nscd/nscd_stat.c:215 +msgid " no" +msgstr " ÎÅÔ" + +#: nscd/nscd_stat.c:213 nscd/nscd_stat.c:215 +msgid " yes" +msgstr " ÄÁ" + +#: nscd/nscd_stat.c:221 +#, c-format +msgid "" +"\n" +"%s cache:\n" +"\n" +"%15s cache is enabled\n" +"%15Zu suggested size\n" +"%15lu seconds time to live for positive entries\n" +"%15lu seconds time to live for negative entries\n" +"%15lu cache hits on positive entries\n" +"%15lu cache hits on negative entries\n" +"%15lu cache misses on positive entries\n" +"%15lu cache misses on negative entries\n" +"%15lu%% cache hit rate\n" +"%15lu current number of cached values\n" +"%15lu maximum number of cached values\n" +"%15lu maximum chain length searched\n" +"%15lu number of delays on rdlock\n" +"%15lu number of delays on wrlock\n" +"%15s check /etc/%s for changes\n" +msgstr "" +"\n" +"ëÜÛ %s:\n" +"\n" +"%15s ËÜÛ ÚÁÄÅÊÓÔ×Ï×ÁÎ\n" +"%15Zu ÐÒÅÄÌÁÇÁÅÍÙÊ ÒÁÚÍÅÒ\n" +"%15lu ÓÅËÕÎÄÙ ÖÉÚÎÉ ÄÌÑ ÐÏÌÏÖÉÔÅÌØÎÙÈ ÚÁÐÉÓÅÊ\n" +"%15lu ÓÅËÕÎÄÙ ÖÉÚÎÉ ÄÌÑ ÏÔÒÉÃÁÔÅÌØÎÙÈ ÚÁÐÉÓÅÊ\n" +"%15lu ÐÏÐÁÄÁÎÉÑ ÎÁ ÐÏÌÏÖÉÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n" +"%15lu ÐÏÐÁÄÁÎÉÑ ÎÁ ÏÔÒÉÃÁÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n" +"%15lu ÐÒÏÍÁÈÉ ÎÁ ÐÏÌÏÖÉÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n" +"%15lu ÐÒÏÍÁÈÉ ÎÁ ÏÔÒÉÃÁÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n" +"%15lu%% ÐÏËÁÚÁÔÅÌØ ÐÏÐÁÄÁÎÉÑ ÎÁ ËÜÛ\n" +"%15lu ÔÅËÕÝÅÅ ÞÉÓÌÏ ËÜÛÉÒÏ×ÁÎÎÙÈ ÚÎÁÞÅÎÉÊ\n" +"%15lu ÍÁËÓÉÍÁÌØÎÏÅ ÞÉÓÌÏ ËÜÛÉÒÏ×ÁÎÎÙÈ ÚÎÁÞÅÎÉÊ\n" +"%15lu ÍÁËÓÉÍÁÌØÎÁÑ ÄÌÉÎÁ ÃÅÐÏÞËÉ ÐÏÉÓËÁ\n" +"%15lu ÞÉÓÌÏ ÚÁÄÅÒÖÅË ÎÁ rdlock\n" +"%15lu ÞÉÓÌÏ ÚÁÄÅÒÖÅË ÎÁ wrlock\n" +"%15s ÏÔÓÌÅÖÉ×ÁÀÔÓÑ ÌÉ ÉÚÍÅÎÅÎÉÑ /etc/%s \n" + +#: nscd/pwdcache.c:215 +#, c-format +msgid "Haven't found \"%s\" in password cache!" +msgstr "îÅ ÎÁÊÄÅÎÏ \"%s\" × ËÜÛÅ ÐÁÒÏÌÅÊ!" + +#: nscd/pwdcache.c:281 +#, c-format +msgid "Invalid numeric uid \"%s\"!" +msgstr "îÅ×ÅÒÎÙÊ ÞÉÓÌÏ×ÏÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ \"%s\"!" + +#: nscd/pwdcache.c:288 +#, c-format +msgid "Haven't found \"%d\" in password cache!" +msgstr "îÅ ÎÁÊÄÅÎÏ \"%d\" × ËÜÛÅ ÐÁÒÏÌÅÊ!" + +#: elf/../sysdeps/generic/dl-sysdep.c:422 +msgid "cannot create capability list" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÐÉÓÏË ×ÏÚÍÏÖÎÏÓÔÅÊ" + +#: elf/../sysdeps/generic/readelflib.c:35 +#, c-format +msgid "file %s is truncated\n" +msgstr "ÆÁÊÌ %s ÕÓÅÞÅÎ\n" + +#: elf/../sysdeps/generic/readelflib.c:67 +#, c-format +msgid "%s is a 32 bit ELF file.\n" +msgstr "%s Ñ×ÌÑÅÔÓÑ 32-ÂÉÔÎÙÍ ELF-ÆÁÊÌÏÍ.\n" + +#: elf/../sysdeps/generic/readelflib.c:69 +#, c-format +msgid "%s is a 64 bit ELF file.\n" +msgstr "%s Ñ×ÌÑÅÔÓÑ 64-ÂÉÔÎÙÍ ELF-ÆÁÊÌÏÍ.\n" + +#: elf/../sysdeps/generic/readelflib.c:71 +#, c-format +msgid "Unknown ELFCLASS in file %s.\n" +msgstr "îÅÉÚ×ÅÓÔÎÙÊ ELFCLASS × ÆÁÊÌÅ %s.\n" + +#: elf/../sysdeps/generic/readelflib.c:78 +#, c-format +msgid "%s is not a shared object file (Type: %d).\n" +msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÒÁÚÄÅÌÑÅÍÙÍ ÏÂßÅËÔÎÙÍ ÆÁÊÌÏÍ (ôÉÐ: %d).\n" + +#: elf/../sysdeps/generic/readelflib.c:109 +msgid "more than one dynamic segment\n" +msgstr "ÂÏÌÅÅ ÏÄÎÏÇÏ ÄÉÎÁÍÉÞÅÓËÉÈ ÓÅÇÍÅÎÔÏ×\n" + +#: elf/../sysdeps/unix/sysv/linux/i386/readelflib.c:49 +#, c-format +msgid "%s is for unknown machine %d.\n" +msgstr "%s ÐÒÅÄÎÁÚÎÁÞÅÎ ÄÌÑ ÎÅÉÚ×ÅÓÔÎÏÊ ÍÁÛÉÎÙ %d.\n" + +#: elf/cache.c:70 +msgid "unknown" +msgstr "ÎÅÉÚ×ÅÓÔÎÏ" + +#: elf/cache.c:111 +msgid "Unknown OS" +msgstr "îÅÉÚ×ÅÓÔÎÁÑ ïó" + +#: elf/cache.c:116 +#, c-format +msgid ", OS ABI: %s %d.%d.%d" +msgstr ", ABI ïó: %s %d.%d.%d" + +#: elf/cache.c:142 elf/ldconfig.c:1078 +#, c-format +msgid "Can't open cache file %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÜÛ-ÆÁÊÌ %s\n" + +#: elf/cache.c:154 +msgid "mmap of cache file failed.\n" +msgstr "ÏÔÏÂÒÁÖÅÎÉÅ ËÜÛ-ÆÁÊÌÁ × ÐÁÍÑÔØ ÎÅ ÕÄÁÌÏÓØ.\n" + +#: elf/cache.c:158 elf/cache.c:168 +msgid "File is not a cache file.\n" +msgstr "üÔÏ ÎÅ ËÜÛ-ÆÁÊÌ.\n" + +#: elf/cache.c:201 elf/cache.c:211 +#, c-format +msgid "%d libs found in cache `%s'\n" +msgstr "%d ÂÉÂÌÉÏÔÅË ÎÁÊÄÅÎÏ × ËÜÛÅ `%s'\n" + +#: elf/cache.c:410 +#, c-format +msgid "Can't remove old temporary cache file %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÓÔÁÒÙÊ ×ÒÅÍÅÎÎÙÊ ËÜÛ-ÆÁÊÌ %s" + +#: elf/cache.c:417 +#, c-format +msgid "Can't create temporary cache file %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ËÜÛ-ÆÁÊÌ %s" + +#: elf/cache.c:425 elf/cache.c:434 elf/cache.c:438 +msgid "Writing of cache data failed" +msgstr "úÁÐÉÓØ ÄÁÎÎÙÈ ËÜÛÁ ÎÅÕÓÐÅÛÎÁ" + +#: elf/cache.c:442 +msgid "Writing of cache data failed." +msgstr "úÁÐÉÓØ ÄÁÎÎÙÈ ËÜÛÁ ÎÅÕÓÐÅÛÎÁ." + +#: elf/cache.c:449 +#, c-format +msgid "Changing access rights of %s to %#o failed" +msgstr "éÚÍÅÎÅÎÉÅ ÐÒÁ× ÄÏÓÔÕÐÁ ÄÌÑ %s ÎÁ %#o ÎÅÕÓÐÅÛÎÏ" + +#: elf/cache.c:454 +#, c-format +msgid "Renaming of %s to %s failed" +msgstr "ðÅÒÅÉÍÅÎÏ×ÁÎÉÅ %s × %s ÎÅÕÓÐÅÛÎÏ" + +#: elf/dl-close.c:128 +msgid "shared object not open" +msgstr "ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔ ÎÅ ÏÔËÒÙÔ" + +#: elf/dl-close.c:531 elf/dl-open.c:454 +msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script." +msgstr "" + +#: elf/dl-deps.c:111 elf/dl-open.c:183 +msgid "DST not allowed in SUID/SGID programs" +msgstr "DST ÎÅ ÄÏÐÕÓËÁÅÔÓÑ × ÐÒÏÇÒÁÍÍÁÈ Ó SUID/SGID" + +#: elf/dl-deps.c:124 +msgid "empty dynamics string token substitution" +msgstr "" + +#: elf/dl-deps.c:130 +#, c-format +msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n" +msgstr "" + +#: elf/dl-deps.c:461 +msgid "cannot allocate dependency list" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÓÐÉÓÏË ÚÁ×ÉÓÉÍÏÓÔÅÊ" + +#: elf/dl-deps.c:494 elf/dl-deps.c:549 +msgid "cannot allocate symbol search list" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÓÐÉÓÏË ÐÏÉÓËÁ ÓÉÍ×ÏÌÏ×" + +#: elf/dl-deps.c:534 +msgid "Filters not supported with LD_TRACE_PRELINKING" +msgstr "æÉÌØÔÒÙ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ Ó LD_TRACE_PRELINKING" + +#: elf/dl-error.c:75 +msgid "DYNAMIC LINKER BUG!!!" +msgstr "ïûéâëá äéîáíéþåóëïçï ëïíðïîï÷ýéëá!!!" + +#: elf/dl-error.c:108 +msgid "error while loading shared libraries" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁÇÒÕÚËÅ ÒÁÚÄÅÌÑÅÍÙÈ ÂÉÂÌÉÏÔÅË" + +#: elf/dl-load.c:347 +msgid "cannot allocate name record" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÚÁÐÉÓØ ÉÍÅÎÉ" + +#: elf/dl-load.c:449 elf/dl-load.c:528 elf/dl-load.c:648 elf/dl-load.c:743 +msgid "cannot create cache for search path" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÜÛ ÄÌÑ ÐÕÔÅÊ ÐÏÉÓËÁ" + +#: elf/dl-load.c:551 +msgid "cannot create RUNPATH/RPATH copy" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÏÐÉÀ RUNPATH/RPATH" + +#: elf/dl-load.c:634 +msgid "cannot create search path array" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÍÁÓÓÉ× ÐÕÔÅÊ ÐÏÉÓËÁ" + +#: elf/dl-load.c:830 +msgid "cannot stat shared object" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat ÄÌÑ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ" + +#: elf/dl-load.c:874 +msgid "cannot open zero fill device" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ-ÉÓÔÏÞÎÉË ÎÕÌÅÊ" + +#: elf/dl-load.c:883 elf/dl-load.c:1929 +msgid "cannot create shared object descriptor" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÄÅÓËÒÉÐÔÏÒ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ" + +#: elf/dl-load.c:902 elf/dl-load.c:1470 elf/dl-load.c:1553 +msgid "cannot read file data" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÄÁÎÎÙÅ ÆÁÊÌÁ" + +#: elf/dl-load.c:946 +msgid "ELF load command alignment not page-aligned" +msgstr "×ÙÒÁ×ÎÉ×ÁÎÉÅ ËÏÍÁÎÄÙ ÚÁÇÒÕÚËÉ ELF ÎÅ ×ÙÒÏ×ÎÅÎÏ ÐÏ ÓÔÒÁÎÉÃÅ" + +#: elf/dl-load.c:953 +msgid "ELF load command address/offset not properly aligned" +msgstr "ÁÄÒÅÓ/ÓÍÅÝÅÎÉÅ ËÏÍÁÎÄÙ ÚÁÇÒÕÚËÉ ELF ÎÅ ×ÙÒÏ×ÎÅÎÏ ÐÒÁ×ÉÌØÎÏ" + +#: elf/dl-load.c:1037 +msgid "cannot allocate TLS data structures for initial thread" +msgstr "" + +#: elf/dl-load.c:1061 +msgid "cannot handle TLS data" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÂÒÁÂÏÔÁÔØ ÄÁÎÎÙÅ TLS" + +#: elf/dl-load.c:1075 +msgid "object file has no loadable segments" +msgstr "× ÏÂßÅËÔÎÏÍ ÆÁÊÌÅ ÎÅÔ ÚÁÇÒÕÖÁÅÍÙÈ ÓÅÇÍÅÎÔÏ×" + +#: elf/dl-load.c:1110 +msgid "failed to map segment from shared object" +msgstr "ÓÂÏÊ ÏÔÏÂÒÁÖÅÎÉÑ ÓÅÇÍÅÎÔÁ ÉÚ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ" + +#: elf/dl-load.c:1135 +msgid "cannot dynamically load executable" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÄÉÎÁÍÉÞÅÓËÉ ÚÁÇÒÕÚÉÔØ ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ" + +#: elf/dl-load.c:1191 +msgid "cannot change memory protections" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ ÚÁÝÉÔÕ ÐÁÍÑÔÉ" + +#: elf/dl-load.c:1210 +msgid "cannot map zero-fill pages" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÒÁÎÉÃÙ ÚÁÐÏÌÎÅÎÉÑ ÎÕÌÑÍÉ" + +#: elf/dl-load.c:1228 +msgid "cannot allocate memory for program header" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÚÁÇÏÌÏ×ÏË ÐÒÏÇÒÁÍÍÙ" + +#: elf/dl-load.c:1259 +msgid "object file has no dynamic section" +msgstr "× ÏÂßÅËÔÎÏÍ ÆÁÊÌÅ ÎÅÔ ÄÉÎÁÍÉÞÅÓËÏÊ ÓÅËÃÉÉ" + +#: elf/dl-load.c:1299 +msgid "shared object cannot be dlopen()ed" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÉÍÅÎÉÔØ dlopen() Ë ÒÁÚÄÅÌÑÅÍÏÍÕ ÏÂßÅËÔÕ" + +#: elf/dl-load.c:1322 +msgid "cannot create searchlist" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÐÉÓÏË ÐÏÉÓËÁ" + +#: elf/dl-load.c:1352 +msgid "cannot enable executable stack as shared object requires" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÄÅÊÓÔ×Ï×ÁÔØ ÉÓÐÏÌÎÑÅÍÙÊ ÓÔÅË, ËÁË ÔÒÅÂÕÅÔ ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔ" + +#: elf/dl-load.c:1470 +msgid "file too short" +msgstr "ÆÁÊÌ ÓÌÉÛËÏÍ ÍÁÌ" + +#: elf/dl-load.c:1493 +msgid "invalid ELF header" +msgstr "ÎÅ×ÅÒÎÙÊ ÚÁÇÏÌÏ×ÏË ELF" + +#: elf/dl-load.c:1502 +msgid "ELF file data encoding not big-endian" +msgstr "ËÏÄÉÒÏ×ËÁ ÄÁÎÎÙÈ × ELF-ÆÁÊÌÅ ÎÅ ÔÕÐÏËÏÎÅÞÎÁÑ" + +#: elf/dl-load.c:1504 +msgid "ELF file data encoding not little-endian" +msgstr "ËÏÄÉÒÏ×ËÁ ÄÁÎÎÙÈ × ELF-ÆÁÊÌÅ ÎÅ ÏÓÔÒÏËÏÎÅÞÎÁÑ" + +#: elf/dl-load.c:1508 +msgid "ELF file version ident does not match current one" +msgstr "ÉÄÅÎÔÉÆÉËÁÔÏÒ ×ÅÒÓÉÉ ELF-ÆÁÊÌÁ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÔÅËÕÝÅÊ ×ÅÒÓÉÉ" + +#: elf/dl-load.c:1512 +msgid "ELF file OS ABI invalid" +msgstr "ÎÅ×ÅÒÎÙÊ ABI ïó ELF-ÆÁÊÌÁ" + +#: elf/dl-load.c:1514 +msgid "ELF file ABI version invalid" +msgstr "ÎÅ×ÅÒÎÁÑ ×ÅÒÓÉÑ ABI ELF-ÆÁÊÌÁ" + +#: elf/dl-load.c:1517 +msgid "internal error" +msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ" + +#: elf/dl-load.c:1524 +msgid "ELF file version does not match current one" +msgstr "×ÅÒÓÉÑ ELF-ÆÁÊÌÁ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÔÅËÕÝÅÊ ×ÅÒÓÉÉ" + +# ??? +#: elf/dl-load.c:1532 +msgid "ELF file's phentsize not the expected size" +msgstr "phentsize ELF-ÆÁÊÌÁ ÎÅ ÓÏ×ÐÁÄÁÅÔ Ó ÏÖÉÄÁÅÍÙÍ ÒÁÚÍÅÒÏÍ" + +#: elf/dl-load.c:1538 +msgid "only ET_DYN and ET_EXEC can be loaded" +msgstr "ÍÏÖÎÏ ÚÁÇÒÕÚÉÔØ ÔÏÌØËÏ ET_DYN É ET_EXEC" + +#: elf/dl-load.c:1944 +msgid "cannot open shared object file" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔÎÙÊ ÆÁÊÌ" + +#: elf/dl-lookup.c:265 elf/dl-lookup.c:443 +msgid "relocation error" +msgstr "ÏÛÉÂËÁ ÐÅÒÅÍÅÝÅÎÉÑ" + +#: elf/dl-open.c:111 +msgid "cannot extend global scope" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÒÁÓÛÉÒÉÔØ ÇÌÏÂÁÌØÎÕÀ ÏÂÌÁÓÔØ" + +#: elf/dl-open.c:214 +msgid "empty dynamic string token substitution" +msgstr "" + +#: elf/dl-open.c:361 elf/dl-open.c:372 +msgid "cannot create scope list" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÐÉÓÏË ÏÂÌÁÓÔÅÊ" + +#: elf/dl-open.c:434 +msgid "cannot create TLS data structures" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÔÒÕËÔÕÒÙ ÄÁÎÎÙÈ TLS" + +#: elf/dl-open.c:496 +msgid "invalid mode for dlopen()" +msgstr "ÎÅ×ÅÒÎÙÊ ÒÅÖÉÍ ÄÌÑ dlopen()" + +#: elf/dl-reloc.c:57 +msgid "cannot allocate memory in static TLS block" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ × ÓÔÁÔÉÞÎÏÍ ÂÌÏËÅ TLS" + +#: elf/dl-reloc.c:176 +msgid "cannot make segment writable for relocation" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÓÅÇÍÅÎÔ ÚÁÐÉÓÙ×ÁÅÍÙÍ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ" + +#: elf/dl-reloc.c:277 +#, c-format +msgid "%s: profiler found no PLTREL in object %s\n" +msgstr "%s: ÐÒÏÆÁÊÌÅÒ ÎÅ ÎÁÛÅÌ PLTREL × ÏÂßÅËÔÅ %s\n" + +#: elf/dl-reloc.c:289 +#, c-format +msgid "%s: profiler out of memory shadowing PLTREL of %s\n" +msgstr "" + +#: elf/dl-reloc.c:304 +msgid "cannot restore segment prot after reloc" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÏÓÓÔÁÎÏ×ÉÔØ ÚÁÝÉÔÕ ÓÅÇÍÅÎÔÁ ÐÏÓÌÅ ÐÅÒÅÍÅÝÅÎÉÑ" + +#: elf/dl-sym.c:74 elf/dl-sym.c:145 +msgid "RTLD_NEXT used in code not dynamically loaded" +msgstr "RTLD_NEXT ÉÓÐÏÌØÚÏ×ÁÎÏ × ÎÅ ÄÉÎÁÍÉÞÅÓËÉ ÚÁÇÒÕÖÅÎÎÏÍ ËÏÄÅ" + +#: elf/dl-version.c:303 +msgid "cannot allocate version reference table" +msgstr "" + +#: elf/ldconfig.c:122 +msgid "Print cache" +msgstr "îÁÐÅÞÁÔÁÔØ ËÜÛ" + +#: elf/ldconfig.c:123 +msgid "Generate verbose messages" +msgstr "çÅÎÅÒÉÒÏ×ÁÔØ ÐÏÄÒÏÂÎÙÅ ÓÏÏÂÝÅÎÉÑ" + +#: elf/ldconfig.c:124 +msgid "Don't build cache" +msgstr "îÅ ÓÔÒÏÉÔØ ËÜÛ" + +#: elf/ldconfig.c:125 +msgid "Don't generate links" +msgstr "îÅ ÇÅÎÅÒÉÒÏ×ÁÔØ ÓÓÙÌËÉ" + +#: elf/ldconfig.c:126 +msgid "Change to and use ROOT as root directory" +msgstr "ðÅÒÅÊÔÉ × ROOT É ÉÓÐÏÌØÚÏ×ÁÔØ ÅÇÏ ËÁË ËÏÒÎÅ×ÏÊ ËÁÔÁÌÏÇ" + +#: elf/ldconfig.c:127 +msgid "Use CACHE as cache file" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ CACHE × ËÁÞÅÓÔ×Å ËÜÛ-ÆÁÊÌÁ" + +#: elf/ldconfig.c:128 +msgid "Use CONF as configuration file" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ CONF × ËÁÞÅÓÔ×Å ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÇÏ ÆÁÊÌÁ" + +#: elf/ldconfig.c:129 +msgid "Only process directories specified on the command line. Don't build cache." +msgstr "ïÂÒÁÂÏÔÁÔØ ÔÏÌØËÏ ËÁÔÁÌÏÇÉ, ÕËÁÚÁÎÎÙÅ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ. îÅ ÓÔÒÏÉÔØ ËÜÛ." + +#: elf/ldconfig.c:130 +msgid "Manually link individual libraries." +msgstr "÷ÒÕÞÎÕÀ ÓËÏÍÐÏÎÏ×ÁÔØ ÏÔÄÅÌØÎÙÅ ÂÉÂÌÉÏÔÅËÉ." + +#: elf/ldconfig.c:131 +msgid "Format to use: new, old or compat (default)" +msgstr "éÓÐÏÌØÚÕÅÍÙÊ ÆÏÒÍÁÔ: new, old ÉÌÉ compat (ÐÏ ÕÍÏÌÞÁÎÉÀ)" + +#: elf/ldconfig.c:139 +msgid "Configure Dynamic Linker Run Time Bindings." +msgstr "ëÏÎÆÉÇÕÒÉÒÕÅÔ Ó×ÑÚÉ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ ÄÌÑ ÄÉÎÁÍÉÞÅÓËÏÇÏ ËÏÍÐÏÎÏ×ÝÉËÁ." + +#: elf/ldconfig.c:297 +#, c-format +msgid "Path `%s' given more than once" +msgstr "ðÕÔØ `%s' ÚÁÄÁÎ ÎÅÓËÏÌØËÏ ÒÁÚ" + +#: elf/ldconfig.c:341 +#, c-format +msgid "%s is not a known library type" +msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÉÚ×ÅÓÔÎÙÍ ÔÉÐÏÍ ÂÉÂÌÉÏÔÅËÉ" + +#: elf/ldconfig.c:361 +#, c-format +msgid "Can't stat %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat %s" + +#: elf/ldconfig.c:431 +#, c-format +msgid "Can't stat %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat %s\n" + +#: elf/ldconfig.c:441 +#, c-format +msgid "%s is not a symbolic link\n" +msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÓÉÍ×ÏÌØÎÏÊ ÓÓÙÌËÏÊ\n" + +#: elf/ldconfig.c:460 +#, c-format +msgid "Can't unlink %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÓÓÙÌËÕ %s" + +#: elf/ldconfig.c:466 +#, c-format +msgid "Can't link %s to %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÓÙÌËÕ Ó %s ÎÁ %s" + +#: elf/ldconfig.c:472 +msgid " (changed)\n" +msgstr " (ÉÍÅÎÅÎÏ)\n" + +#: elf/ldconfig.c:474 +msgid " (SKIPPED)\n" +msgstr " (ðòïðõýåîï)\n" + +#: elf/ldconfig.c:529 +#, c-format +msgid "Can't find %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ %s" + +#: elf/ldconfig.c:545 +#, c-format +msgid "Can't lstat %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ lstat %s" + +#: elf/ldconfig.c:552 +#, c-format +msgid "Ignored file %s since it is not a regular file." +msgstr "æÁÊÌ %s ÉÇÎÏÒÉÒÏ×ÁÎ, ÐÏÓËÏÌØËÕ ÜÔÏ ÎÅ ÏÂÙÞÎÙÊ ÆÁÊÌ" + +#: elf/ldconfig.c:560 +#, c-format +msgid "No link created since soname could not be found for %s" +msgstr "óÓÙÌËÁ ÎÅ ÓÏÚÄÁÎÁ, ÐÏÓËÏÌØËÕ ÄÌÑ %s ÎÅ ÂÙÌÏ ÎÁÊÄÅÎÏ soname" + +#: elf/ldconfig.c:651 +#, c-format +msgid "Can't open directory %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÔÁÌÏÇ %s" + +#: elf/ldconfig.c:706 elf/ldconfig.c:753 +#, c-format +msgid "Cannot lstat %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ lstat %s" + +#: elf/ldconfig.c:718 +#, c-format +msgid "Cannot stat %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat %s" + +#: elf/ldconfig.c:775 elf/readlib.c:92 +#, c-format +msgid "Input file %s not found.\n" +msgstr "÷ÈÏÄÎÏÊ ÆÁÊÌ %s ÎÅ ÎÁÊÄÅÎ.\n" + +#: elf/ldconfig.c:826 +#, c-format +msgid "libc5 library %s in wrong directory" +msgstr "libc5-ÂÉÂÌÉÏÔÅËÁ %s × ÎÅÐÒÁ×ÉÌØÎÏÍ ËÁÔÁÌÏÇÅ" + +#: elf/ldconfig.c:829 +#, c-format +msgid "libc6 library %s in wrong directory" +msgstr "libc6-ÂÉÂÌÉÏÔÅËÁ %s × ÎÅÐÒÁ×ÉÌØÎÏÍ ËÁÔÁÌÏÇÅ" + +#: elf/ldconfig.c:832 +#, c-format +msgid "libc4 library %s in wrong directory" +msgstr "libc4-ÂÉÂÌÉÏÔÅËÁ %s × ÎÅÐÒÁ×ÉÌØÎÏÍ ËÁÔÁÌÏÇÅ" + +#: elf/ldconfig.c:859 +#, c-format +msgid "libraries %s and %s in directory %s have same soname but different type." +msgstr "ÂÉÂÌÉÏÔÅËÉ %s É %s × ËÁÔÁÌÏÇÅ %s ÉÍÅÀÔ ÏÄÉÎÁËÏ×ÙÊ soname, ÎÏ ÒÁÚÎÙÅ ÔÉÐÙ." + +#: elf/ldconfig.c:962 +#, c-format +msgid "Can't open configuration file %s" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ %s" + +#: elf/ldconfig.c:1033 +#, c-format +msgid "relative path `%s' used to build cache" +msgstr "ÄÌÑ ÐÏÓÔÒÏÅÎÉÑ ËÜÛÁ ÉÓÐÏÌØÚÏ×ÁÎ ÏÔÎÏÓÉÔÅÌØÎÙÊ ÐÕÔØ `%s'" + +#: elf/ldconfig.c:1057 +msgid "Can't chdir to /" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÊÔÉ × ËÁÔÁÌÏÇ /" + +#: elf/ldconfig.c:1099 +#, c-format +msgid "Can't open cache file directory %s\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÔÁÌÏÇ ËÜÛ-ÆÁÊÌÁ %s\n" + +#: elf/readlib.c:98 +#, c-format +msgid "Cannot fstat file %s.\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ fstat ÄÌÑ ÆÁÊÌÁ %s.\n" + +#: elf/readlib.c:108 +#, c-format +msgid "File %s is too small, not checked." +msgstr "æÁÊÌ %s ÓÌÉÛËÏÍ ÍÁÌ; ÎÅ ÂÙÌ ÐÒÏ×ÅÒÅÎ." + +#: elf/readlib.c:117 +#, c-format +msgid "Cannot mmap file %s.\n" +msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ × ÐÁÍÑÔØ ÆÁÊÌ %s.\n" + +#: elf/readlib.c:155 +#, c-format +msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n" +msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ELF-ÆÁÊÌÏÍ -- Õ ÎÅÇÏ × ÎÁÞÁÌÅ ÎÅÐÒÁ×ÉÌØÎÙÅ ×ÏÌÛÅÂÎÙÅ ÂÁÊÔÙ.\n" + +#: elf/sprof.c:72 +msgid "Output selection:" +msgstr "÷ÙÂÏÒ ÔÉÐÁ ×Ù×ÏÄÁ:" + +#: elf/sprof.c:74 +msgid "print list of count paths and their number of use" +msgstr "" + +#: elf/sprof.c:76 +msgid "generate flat profile with counts and ticks" +msgstr "ÇÅÎÅÒÉÒÏ×ÁÔØ ÐÌÏÓËÉÊ ÐÒÏÆÉÌØ ÓÏ ÓÞÅÔÞÉËÁÍÉ É ÍÅÔËÁÍÉ" + +#: elf/sprof.c:77 +msgid "generate call graph" +msgstr "ÇÅÎÅÒÉÒÏ×ÁÔØ ÇÒÁÆ ×ÙÚÏ×Ï×" + +#: elf/sprof.c:84 +msgid "Read and display shared object profiling data" +msgstr "óÞÉÔÙ×ÁÅÔ É ÏÔÏÂÒÁÖÁÅÔ ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÅ ÄÁÎÎÙÅ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ" + +#: elf/sprof.c:87 +msgid "SHOBJ [PROFDATA]" +msgstr "òáúä-ïâÿåëô [ðòïæ-äáîîùå]" + +#: elf/sprof.c:398 +#, c-format +msgid "failed to load shared object `%s'" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔ `%s'" + +#: elf/sprof.c:407 +msgid "cannot create internal descriptors" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÎÕÔÒÅÎÎÉÅ ÄÅÓËÒÉÐÔÏÒÙ" + +#: elf/sprof.c:526 +#, c-format +msgid "Reopening shared object `%s' failed" +msgstr "óÂÏÊ ÐÏ×ÔÏÒÎÏÇÏ ÏÔËÒÙÔÉÑ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ `%s'" + +#: elf/sprof.c:534 +msgid "mapping of section headers failed" +msgstr "ÏÔÏÂÒÁÖÅÎÉÅ ÚÁÇÏÌÏ×ËÏ× ÓÅËÃÉÊ ÎÅÕÓÐÅÛÎÏ" + +#: elf/sprof.c:544 +msgid "mapping of section header string table failed" +msgstr "ÏÔÏÂÒÁÖÅÎÉÅ ÔÁÂÌÉÃÙ ÓÔÒÏË ÉÚ ÚÁÇÏÌÏ×ËÁ ÓÅËÃÉÉ ÎÅÕÓÐÅÛÎÏ" + +#: elf/sprof.c:564 +#, c-format +msgid "*** The file `%s' is stripped: no detailed analysis possible\n" +msgstr "*** æÁÊÌ `%s' ÏÞÉÝÅÎ: ÐÏÄÒÏÂÎÙÊ ÁÎÁÌÉÚ ÎÅ×ÏÚÍÏÖÅÎ\n" + +#: elf/sprof.c:594 +msgid "failed to load symbol data" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ ÄÁÎÎÙÅ Ï ÓÉÍ×ÏÌÁÈ" + +#: elf/sprof.c:664 +msgid "cannot load profiling data" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÅ ÄÁÎÎÙÅ" + +#: elf/sprof.c:673 +msgid "while stat'ing profiling data file" +msgstr "ÐÒÉ ÏÐÅÒÁÃÉÉ stat ÎÁÄ ÆÁÊÌÏÍ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ" + +#: elf/sprof.c:681 +#, c-format +msgid "profiling data file `%s' does not match shared object `%s'" +msgstr "ÆÁÊÌ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ `%s' ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÒÁÚÄÅÌÑÅÍÏÍÕ ÏÂßÅËÔÕ `%s'" + +#: elf/sprof.c:692 +msgid "failed to mmap the profiling data file" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÔÏÂÒÁÚÉÔØ × ÐÁÍÑÔØ ÆÁÊÌ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ" + +#: elf/sprof.c:700 +msgid "error while closing the profiling data file" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ ÆÁÊÌÁ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ" + +#: elf/sprof.c:709 elf/sprof.c:779 +msgid "cannot create internal descriptor" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÎÕÔÒÅÎÎÉÊ ÄÅÓËÒÉÐÔÏÒ" + +#: elf/sprof.c:755 +#, c-format +msgid "`%s' is no correct profile data file for `%s'" +msgstr "`%s' ÎÅ Ñ×ÌÑÅÔÓÑ ×ÅÒÎÙÍ ÆÁÊÌÏÍ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ ÄÌÑ `%s'" + +#: elf/sprof.c:936 elf/sprof.c:988 +msgid "cannot allocate symbol data" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÄÁÎÎÙÅ ÓÉÍ×ÏÌÁ" diff --git a/po/tr.po b/po/tr.po index 1e74e7c1bf..9271c3c087 100644 --- a/po/tr.po +++ b/po/tr.po @@ -1,13 +1,13 @@ # Turkish translations for GNU libc messages. -# Copyright © 2004 Free Software Foundation, Inc. -# Nilgün Belma Bugüner <nilgun@superonline.com>, 2001, ..., 2004. +# Copyright (C) 2005 Free Software Foundation, Inc. +# Nilgün Belma Bugüner <nilgun@superonline.com>, 2001, ..., 2005. # Onur Tolga ÅžehitoÄŸlu <onur@lcsl.metu.edu.tr>, 1998. # msgid "" msgstr "" "Project-Id-Version: libc 2.3.3\n" "POT-Creation-Date: 2004-08-05 09:16+0200\n" -"PO-Revision-Date: 2004-08-06 11:21+0300\n" +"PO-Revision-Date: 2005-02-27 11:10+0300\n" "Last-Translator: Nilgün Belma Bugüner <nilgun@superonline.com>\n" "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n" "MIME-Version: 1.0\n" @@ -2090,7 +2090,7 @@ msgstr "Sayısal sonuç kapsam dışı" #: stdio-common/../sysdeps/gnu/errlist.c:408 #: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:41 msgid "Resource temporarily unavailable" -msgstr "Özkaynak geçici olarak kullanışsız" +msgstr "Özkaynak geçici olarak kullanılamaz durumda" #. TRANS In the GNU C library, this is another name for @code{EAGAIN} (above). #. TRANS The values are always the same, on every operating system. diff --git a/posix/Makefile b/posix/Makefile index 3af9e6681d..f08ec9f1f8 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -28,7 +28,7 @@ headers := sys/utsname.h sys/times.h sys/wait.h sys/types.h unistd.h \ bits/local_lim.h tar.h bits/utsname.h bits/confname.h \ bits/waitflags.h bits/waitstatus.h sys/unistd.h sched.h \ bits/sched.h re_comp.h wait.h bits/environments.h cpio.h \ - sys/sysmacros.h spawn.h + sys/sysmacros.h spawn.h bits/unistd.h distribute := confstr.h TESTS TESTS2C.sed testcases.h \ PTESTS PTESTS2C.sed ptestcases.h \ @@ -83,7 +83,10 @@ tests := tstgetopt testfnm runtests runptests \ tst-nice tst-nanosleep tst-regex2 \ transbug tst-rxspencer tst-pcre tst-boost \ bug-ga1 tst-vfork1 tst-vfork2 tst-waitid \ - tst-getaddrinfo2 bug-glob1 bug-glob2 tst-sysconf + tst-getaddrinfo2 bug-glob1 bug-glob2 tst-sysconf \ + tst-execvp1 tst-execvp2 tst-execlp1 tst-execlp2 \ + tst-execv1 tst-execv2 tst-execl1 tst-execl2 \ + tst-execve1 tst-execve2 tst-execle1 tst-execle2 xtests := bug-ga2 ifeq (yes,$(build-shared)) test-srcs := globtest diff --git a/posix/bits/unistd.h b/posix/bits/unistd.h new file mode 100644 index 0000000000..215063f07d --- /dev/null +++ b/posix/bits/unistd.h @@ -0,0 +1,84 @@ +/* Checking macros for unistd functions. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _UNISTD_H +# error "Never include <bits/unistd.h> directly; use <unistd.h> instead." +#endif + +extern ssize_t __read_chk (int __fd, void *__buf, size_t __nbytes, + size_t __buflen) __wur; +#define read(fd, buf, nbytes) \ + (__bos0 (buf) != (size_t) -1 \ + && (!__builtin_constant_p (nbytes) || (nbytes) > __bos0 (buf)) \ + ? __read_chk (fd, buf, nbytes, __bos0 (buf)) \ + : read (fd, buf, nbytes)) + +#ifdef __USE_UNIX98 +extern ssize_t __pread_chk (int __fd, void *__buf, size_t __nbytes, + __off_t __offset, size_t __bufsize) __wur; +extern ssize_t __pread64_chk (int __fd, void *__buf, size_t __nbytes, + __off64_t __offset, size_t __bufsize) __wur; +# ifndef __USE_FILE_OFFSET64 +# define pread(fd, buf, nbytes, offset) \ + (__bos0 (buf) != (size_t) -1 \ + && (!__builtin_constant_p (nbytes) || (nbytes) > __bos0 (buf)) \ + ? __pread64_chk (fd, buf, nbytes, offset, __bos0 (buf)) \ + : pread (fd, buf, offset, nbytes)) +# else +# define pread(fd, buf, nbytes, offset) \ + (__bos0 (buf) != (size_t) -1 \ + && (!__builtin_constant_p (nbytes) || (nbytes) > __bos0 (buf)) \ + ? __pread_chk (fd, buf, nbytes, offset, __bos0 (buf)) \ + : pread (fd, buf, offset, nbytes)) +# endif + +# ifdef __USE_LARGEFILE64 +# define pread64(fd, buf, nbytes, offset) \ + (__bos0 (buf) != (size_t) -1 \ + && (!__builtin_constant_p (nbytes) || (nbytes) > __bos0 (buf)) \ + ? __pread64_chk (fd, buf, nbytes, offset, __bos0 (buf)) \ + : pread64 (fd, buf, offset, nbytes)) +# endif +#endif + +#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K +extern int __readlink_chk (__const char *__restrict __path, + char *__restrict __buf, size_t __len, + size_t __buflen) + __THROW __nonnull ((1, 2)) __wur; +# define readlink(path, buf, len) \ + (__bos (buf) != (size_t) -1 \ + && (!__builtin_constant_p (len) || (len) > __bos (buf)) \ + ? __readlink_chk (path, buf, len, __bos (buf)) \ + : readlink (path, buf, len)) +#endif + +extern char *__getcwd_chk (char *__buf, size_t __size, size_t __buflen) + __THROW __wur; +#define getcwd(buf, size) \ + (__bos (buf) != (size_t) -1 \ + && (!__builtin_constant_p (size) || (size) > __bos (buf)) \ + ? __getcwd_chk (buf, size, buflen) : getcwd (buf, size)) + +#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED +extern char *__getwd_chk (char *__buf, size_t buflen) + __THROW __nonnull ((1)) __attribute_deprecated__ __wur; +#define getwd(buf) \ + (__bos (buf) != (size_t) -1 ? __getwd_chk (buf, buflen) : getwd (buf)) +#endif diff --git a/posix/execvp.c b/posix/execvp.c index 9ccfd7fc22..0abfa7007c 100644 --- a/posix/execvp.c +++ b/posix/execvp.c @@ -189,7 +189,7 @@ execvp (file, argv) __set_errno (EACCES); free (script_argv); - free (name); + free (name - pathlen); if (path_malloc) free (path); } diff --git a/posix/regcomp.c b/posix/regcomp.c index 1a5f7952c3..a7112cffdd 100644 --- a/posix/regcomp.c +++ b/posix/regcomp.c @@ -1321,6 +1321,11 @@ lower_subexp (err, preg, node) bin_tree_t *op, *cls, *tree1, *tree; if (preg->no_sub + /* We do not optimize empty subexpressions, because otherwise we may + have bad CONCAT nodes with NULL children. This is obviously not + very common, so we do not lose much. An example that triggers + this case is the sed "script" /\(\)/x. */ + && node->left != NULL && (node->token.opr.idx >= 8 * sizeof (dfa->used_bkref_map) || !(dfa->used_bkref_map & (1 << node->token.opr.idx)))) return node->left; diff --git a/posix/regex_internal.h b/posix/regex_internal.h index f065cf449d..58fa749e90 100644 --- a/posix/regex_internal.h +++ b/posix/regex_internal.h @@ -60,7 +60,7 @@ # ifdef _LIBC # undef gettext # define gettext(msgid) \ - INTUSE(__dcgettext) (INTUSE(_libc_intl_domainname), msgid, LC_MESSAGES) + INTUSE(__dcgettext) (_libc_intl_domainname, msgid, LC_MESSAGES) # endif #else # define gettext(msgid) (msgid) diff --git a/posix/rxspencer/tests b/posix/rxspencer/tests index a8b6e4baa8..b84a270cda 100644 --- a/posix/rxspencer/tests +++ b/posix/rxspencer/tests @@ -376,6 +376,7 @@ a(b?c)+d - accd accd a[bc]d - xyzaaabcaababdacd abd a[ab]c - aaabc abc abc s abc abc +() s abc @abc a* & b @b # Let's have some fun -- try to match a C comment. diff --git a/posix/tst-execl1.c b/posix/tst-execl1.c new file mode 100644 index 0000000000..1cfa36df12 --- /dev/null +++ b/posix/tst-execl1.c @@ -0,0 +1,22 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> + +static int +do_test (void) +{ + static const char prog[] = "does-not-exist"; + errno = 0; + execl (prog, prog, NULL); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execl2.c b/posix/tst-execl2.c new file mode 100644 index 0000000000..5b74959ef8 --- /dev/null +++ b/posix/tst-execl2.c @@ -0,0 +1,58 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + errno = 0; + execl (copy, copy, NULL); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/tst-execle1.c b/posix/tst-execle1.c new file mode 100644 index 0000000000..adea0a8d46 --- /dev/null +++ b/posix/tst-execle1.c @@ -0,0 +1,22 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> + +static int +do_test (void) +{ + static const char prog[] = "does-not-exist"; + errno = 0; + execle (prog, prog, NULL, "FOO=BAR", NULL); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execle2.c b/posix/tst-execle2.c new file mode 100644 index 0000000000..fb9b09b423 --- /dev/null +++ b/posix/tst-execle2.c @@ -0,0 +1,58 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + errno = 0; + execle (copy, copy, NULL, "FOO=BAR", NULL); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/tst-execlp1.c b/posix/tst-execlp1.c new file mode 100644 index 0000000000..1be4dbcb1b --- /dev/null +++ b/posix/tst-execlp1.c @@ -0,0 +1,34 @@ +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +static int +do_test (void) +{ + char *cwd = get_current_dir_name (); + if (cwd == NULL) + { + puts ("get_current_dir_name failed"); + return 1; + } + + /* Make sure we do not find a binary with the name we are going to + use. */ + setenv ("PATH", cwd, 1); + + static const char prog[] = "does-not-exist"; + errno = 0; + execlp (prog, prog, NULL); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execlp2.c b/posix/tst-execlp2.c new file mode 100644 index 0000000000..81a723dda4 --- /dev/null +++ b/posix/tst-execlp2.c @@ -0,0 +1,82 @@ +#include <errno.h> +#include <libgen.h> +#undef basename +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + /* Make sure we do not find a binary with the name we are going to + use. */ + char *bindir = strdupa (copy); + bindir = canonicalize_file_name (dirname (bindir)); + if (bindir == NULL) + { + puts ("canonicalize_file_name failed"); + return 1; + } + char *path; + asprintf (&path, "%s:../libio:../elf", bindir); + if (path == NULL) + { + puts ("asprintf failed"); + return 1; + } + + setenv ("PATH", path, 1); + + char *prog = basename (copy); + errno = 0; + execlp (prog, prog, NULL); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/tst-execv1.c b/posix/tst-execv1.c new file mode 100644 index 0000000000..57ed1add6e --- /dev/null +++ b/posix/tst-execv1.c @@ -0,0 +1,22 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> + +static int +do_test (void) +{ + char *argv[] = { (char *) "does-not-exist", NULL }; + errno = 0; + execv (argv[0], argv); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execv2.c b/posix/tst-execv2.c new file mode 100644 index 0000000000..a5168a269c --- /dev/null +++ b/posix/tst-execv2.c @@ -0,0 +1,60 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + char *argv[] = { copy, NULL }; + + errno = 0; + execv (copy, argv); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/tst-execve1.c b/posix/tst-execve1.c new file mode 100644 index 0000000000..356610f635 --- /dev/null +++ b/posix/tst-execve1.c @@ -0,0 +1,23 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> + +static int +do_test (void) +{ + char *argv[] = { (char *) "does-not-exist", NULL }; + char *envp[] = { (char *) "FOO=BAR", NULL }; + errno = 0; + execve (argv[0], argv, envp); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execve2.c b/posix/tst-execve2.c new file mode 100644 index 0000000000..1a804e94fd --- /dev/null +++ b/posix/tst-execve2.c @@ -0,0 +1,61 @@ +#include <errno.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + char *argv[] = { copy, NULL }; + char *envp[] = { (char *) "FOO=BAR", NULL }; + + errno = 0; + execve (copy, argv, envp); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/tst-execvp1.c b/posix/tst-execvp1.c new file mode 100644 index 0000000000..ecc673d124 --- /dev/null +++ b/posix/tst-execvp1.c @@ -0,0 +1,34 @@ +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +static int +do_test (void) +{ + char *cwd = get_current_dir_name (); + if (cwd == NULL) + { + puts ("get_current_dir_name failed"); + return 1; + } + + /* Make sure we do not find a binary with the name we are going to + use. */ + setenv ("PATH", cwd, 1); + + char *argv[] = { (char *) "does-not-exist", NULL }; + errno = 0; + execvp (argv[0], argv); + + if (errno != ENOENT) + { + printf ("errno = %d (%m), expected ENOENT\n", errno); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/posix/tst-execvp2.c b/posix/tst-execvp2.c new file mode 100644 index 0000000000..7e0f5d882c --- /dev/null +++ b/posix/tst-execvp2.c @@ -0,0 +1,82 @@ +#include <errno.h> +#include <libgen.h> +#undef basename +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/stat.h> + + +static void prepare (int argc, char *argv[]); +static int do_test (void); +#define PREPARE(argc, argv) prepare (argc, argv) +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" + + +static char *copy; + +static void +prepare (int argc, char *argv[]) +{ + char *buf; + int off; + asprintf (&buf, "cp %s %n%s-copy", argv[0], &off, argv[0]); + if (buf == NULL) + { + puts ("asprintf failed"); + exit (1); + } + if (system (buf) != 0) + { + puts ("system failed"); + exit (1); + } + + /* Make it not executable. */ + copy = buf + off; + if (chmod (copy, 0666) != 0) + { + puts ("chmod failed"); + exit (1); + } + + add_temp_file (copy); +} + + +static int +do_test (void) +{ + /* Make sure we do not find a binary with the name we are going to + use. */ + char *bindir = strdupa (copy); + bindir = canonicalize_file_name (dirname (bindir)); + if (bindir == NULL) + { + puts ("canonicalize_file_name failed"); + return 1; + } + char *path; + asprintf (&path, "%s:../libio:../elf", bindir); + if (path == NULL) + { + puts ("asprintf failed"); + return 1; + } + + setenv ("PATH", path, 1); + + char *argv[] = { basename (copy), NULL }; + errno = 0; + execvp (argv[0], argv); + + if (errno != EACCES) + { + printf ("errno = %d (%m), expected EACCES\n", errno); + return 1; + } + + return 0; +} diff --git a/posix/unistd.h b/posix/unistd.h index 744c10c50b..d6cd152b46 100644 --- a/posix/unistd.h +++ b/posix/unistd.h @@ -734,7 +734,7 @@ extern int ttyslot (void) __THROW; extern int link (__const char *__from, __const char *__to) __THROW __nonnull ((1, 2)) __wur; -#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED +#if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K /* Make a symbolic link to FROM named TO. */ extern int symlink (__const char *__from, __const char *__to) __THROW __nonnull ((1, 2)) __wur; @@ -1046,6 +1046,12 @@ extern void swab (__const void *__restrict __from, void *__restrict __to, extern char *ctermid (char *__s) __THROW __nonnull ((1)); #endif + +/* Define some macros helping to catch buffer overflows. */ +#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus +# include <bits/unistd.h> +#endif + __END_DECLS #endif /* unistd.h */ diff --git a/resolv/nss_dns/dns-network.c b/resolv/nss_dns/dns-network.c index 6ff60f3119..97d9263895 100644 --- a/resolv/nss_dns/dns-network.c +++ b/resolv/nss_dns/dns-network.c @@ -262,14 +262,14 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result, char linebuffer[0]; } *net_data = (struct net_data *) buffer; int linebuflen = buflen - offsetof (struct net_data, linebuffer); - const char *end_of_message = &answer->buf[anslen]; + const unsigned char *end_of_message = &answer->buf[anslen]; const HEADER *header_pointer = &answer->hdr; /* #/records in the answer section. */ int answer_count = ntohs (header_pointer->ancount); /* #/entries in the question section. */ int question_count = ntohs (header_pointer->qdcount); char *bp = net_data->linebuffer; - const char *cp = &answer->buf[HFIXEDSZ]; + const unsigned char *cp = &answer->buf[HFIXEDSZ]; char **alias_pointer; int have_answer; char *ans; diff --git a/resolv/res_send.c b/resolv/res_send.c index 8fb21a9446..1a53e5be9e 100644 --- a/resolv/res_send.c +++ b/resolv/res_send.c @@ -632,7 +632,7 @@ send_vc(res_state statp, /* Are we still talking to whom we want to talk to? */ if (statp->_vcsock >= 0 && (statp->_flags & RES_F_VC) != 0) { struct sockaddr_in6 peer; - int size = sizeof peer; + socklen_t size = sizeof peer; if (getpeername(statp->_vcsock, (struct sockaddr *)&peer, &size) < 0 || @@ -809,7 +809,8 @@ send_dg(res_state statp, int ptimeout; struct sockaddr_in6 from; static int socket_pf = 0; - int fromlen, resplen, seconds, n; + socklen_t fromlen; + int resplen, seconds, n; if (EXT(statp).nssocks[ns] == -1) { /* only try IPv6 if IPv6 NS and if not failed before */ @@ -1033,6 +1034,10 @@ send_dg(res_state statp, res_nclose(statp); return (0); } + else { + /* poll should not have returned > 0 in this case. */ + abort (); + } } #ifdef DEBUG diff --git a/socket/Makefile b/socket/Makefile index 594e609db5..aa0776e5bf 100644 --- a/socket/Makefile +++ b/socket/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991,95,96,97,98,99,2000,2001 Free Software Foundation, Inc. +# Copyright (C) 1991,1995-2001,2005 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 @@ -22,7 +22,7 @@ subdir := socket headers := sys/socket.h sys/un.h bits/sockaddr.h bits/socket.h \ - sys/socketvar.h net/if.h + bits/socket2.h sys/socketvar.h net/if.h routines := accept bind connect getpeername getsockname getsockopt \ listen recv recvfrom recvmsg send sendmsg sendto \ diff --git a/socket/bits/socket2.h b/socket/bits/socket2.h new file mode 100644 index 0000000000..0ccb24ca31 --- /dev/null +++ b/socket/bits/socket2.h @@ -0,0 +1,38 @@ +/* Checking macros for socket functions. + Copyright (C) 2005 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _SYS_SOCKET_H +# error "Never include <bits/socket2.h> directly; use <sys/socket.h> instead." +#endif + +extern ssize_t __recv_chk (int __fd, void *__buf, size_t __n, size_t __buflen, + int __flags); +#define recv(fd, buf, n, flags) \ + (__bos0 (buf) != (size_t) -1 \ + ? __recv_chk (fd, buf, n, __bos0 (buf), flags) \ + : recv (fd, buf, n, flags)) + +extern ssize_t __recvfrom_chk (int __fd, void *__restrict __buf, size_t __n, + size_t __buflen, int __flags, + __SOCKADDR_ARG __addr, + socklen_t *__restrict __addr_len); +#define recvfrom(fd, buf, n, flags, addr, addr_len) \ + (__bos0 (buf) != (size_t) -1 \ + ? __recvfrom_chk (fd, buf, n, __bos0 (buf), flags, addr, addr_len) \ + : recvfrom (fd, buf, n, flags, addr, addr_len)) diff --git a/socket/sys/socket.h b/socket/sys/socket.h index 4ae1ea9808..4112852ebb 100644 --- a/socket/sys/socket.h +++ b/socket/sys/socket.h @@ -1,5 +1,5 @@ /* Declarations of socket constants, types, and functions. - Copyright (C) 1991,92,1994-2001,2003 Free Software Foundation, Inc. + Copyright (C) 1991,92,1994-2001,2003,2005 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 @@ -231,6 +231,12 @@ extern int sockatmark (int __fd) __THROW; extern int isfdtype (int __fd, int __fdtype) __THROW; #endif + +/* Define some macros helping to catch buffer overflows. */ +#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus +# include <bits/socket2.h> +#endif + __END_DECLS #endif /* sys/socket.h */ diff --git a/string/bits/string3.h b/string/bits/string3.h index 87cbe35bb1..6c027c23a0 100644 --- a/string/bits/string3.h +++ b/string/bits/string3.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. +/* Copyright (C) 2004, 2005 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 @@ -80,10 +80,19 @@ __mempcpy_ichk (void *__restrict __dest, const void *__restrict __src, #endif +/* The first two tests here help to catch a somewhat common problem + where the second and third parameter are transposed. This is + especially problematic if the intended fill value is zero. In this + case no work is done at all. We detect these problems by referring + non-existing functions. */ +__warndecl (__warn_memset_zero_len, + "memset used with constant zero length parameter; this could be due to transposed parameters"); #define memset(dest, ch, len) \ - ((__bos0 (dest) != (size_t) -1) \ - ? __builtin___memset_chk (dest, ch, len, __bos0 (dest)) \ - : __memset_ichk (dest, ch, len)) + (__builtin_constant_p (len) && (len) == 0 \ + ? (__warn_memset_zero_len (), (void) (ch), (void) (len), (void *) (dest)) \ + : ((__bos0 (dest) != (size_t) -1) \ + ? __builtin___memset_chk (dest, ch, len, __bos0 (dest)) \ + : __memset_ichk (dest, ch, len))) static __inline__ void * __attribute__ ((__always_inline__)) __memset_ichk (void *__dest, int __ch, size_t __len) diff --git a/sunrpc/Makefile b/sunrpc/Makefile index 284e355cc3..2a3a22496e 100644 --- a/sunrpc/Makefile +++ b/sunrpc/Makefile @@ -107,19 +107,19 @@ librpcsvc-inhibit-o = .os # Build no shared rpcsvc library. omit-deps = $(librpcsvc-routines) endif -CFLAGS-xbootparam_prot.c = -Wno-unused -CFLAGS-xnlm_prot.c = -Wno-unused -CFLAGS-xrstat.c = -Wno-unused -CFLAGS-xyppasswd.c = -Wno-unused -CFLAGS-xklm_prot.c = -Wno-unused -CFLAGS-xrex.c = -Wno-unused -CFLAGS-xsm_inter.c = -Wno-unused -CFLAGS-xmount.c = -Wno-unused -CFLAGS-xrusers.c = -Wno-unused -CFLAGS-xspray.c = -Wno-unused -CFLAGS-xnfs_prot.c = -Wno-unused -CFLAGS-xrquota.c = -Wno-unused -CFLAGS-xkey_prot.c = -Wno-unused +CFLAGS-xbootparam_prot.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xnlm_prot.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xrstat.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xyppasswd.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xklm_prot.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xrex.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xsm_inter.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xmount.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xrusers.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xspray.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xnfs_prot.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xrquota.c = -Wno-unused $(PIC-ccflag) +CFLAGS-xkey_prot.c = -Wno-unused $(PIC-ccflag) CFLAGS-auth_unix.c = -fexceptions CFLAGS-key_call.c = -fexceptions CFLAGS-pmap_rmt.c = -fexceptions diff --git a/sunrpc/auth_des.c b/sunrpc/auth_des.c index fc5956dcd7..7fe96ca765 100644 --- a/sunrpc/auth_des.c +++ b/sunrpc/auth_des.c @@ -107,14 +107,14 @@ authdes_create (const char *servername, u_int window, /* syncaddr - optional addr of host to sync with */ /* ckey - optional conversation key to use */ { - u_char pkey_data[1024]; + char pkey_data[1024]; netobj pkey; if (!getpublickey (servername, pkey_data)) return NULL; - pkey.n_bytes = (char *) pkey_data; - pkey.n_len = strlen ((char *) pkey_data) + 1; + pkey.n_bytes = pkey_data; + pkey.n_len = strlen (pkey_data) + 1; return INTUSE(authdes_pk_create) (servername, &pkey, window, syncaddr, ckey); } @@ -237,7 +237,7 @@ authdes_marshal (AUTH *auth, XDR *xdrs) des_block cryptbuf[2]; des_block ivec; int status; - unsigned int len; + int len; register int32_t *ixdr; struct timeval tval; diff --git a/sunrpc/create_xid.c b/sunrpc/create_xid.c index 21b83a7656..4e76918644 100644 --- a/sunrpc/create_xid.c +++ b/sunrpc/create_xid.c @@ -33,7 +33,7 @@ static struct drand48_data __rpc_lrand48_data; unsigned long _create_xid (void) { - unsigned long res; + long int res; __libc_lock_lock (createxid_lock); diff --git a/sunrpc/key_call.c b/sunrpc/key_call.c index 211f61db70..506a99767c 100644 --- a/sunrpc/key_call.c +++ b/sunrpc/key_call.c @@ -386,7 +386,7 @@ getkeyserv_handle (int vers) struct timeval wait_time; int fd; struct sockaddr_un name; - int namelen = sizeof(struct sockaddr_un); + socklen_t namelen = sizeof(struct sockaddr_un); #define TOTAL_TIMEOUT 30 /* total timeout talking to keyserver */ #define TOTAL_TRIES 5 /* Number of tries */ diff --git a/sunrpc/rtime.c b/sunrpc/rtime.c index 4996f01ba9..ff71a55aeb 100644 --- a/sunrpc/rtime.c +++ b/sunrpc/rtime.c @@ -80,7 +80,7 @@ rtime (struct sockaddr_in *addrp, struct rpc_timeval *timep, /* RFC 868 says the time is transmitted as a 32-bit value. */ uint32_t thetime; struct sockaddr_in from; - int fromlen; + socklen_t fromlen; int type; if (timeout == NULL) diff --git a/sunrpc/svcauth_des.c b/sunrpc/svcauth_des.c index 07d7bd0122..becdd5066d 100644 --- a/sunrpc/svcauth_des.c +++ b/sunrpc/svcauth_des.c @@ -315,7 +315,7 @@ _svcauth_des (register struct svc_req *rqst, register struct rpc_msg *msg) /* * xdr the timestamp before encrypting */ - ixdr = (int32_t *) cryptbuf; + ixdr = (uint32_t *) cryptbuf; IXDR_PUT_INT32 (ixdr, timestamp.tv_sec - 1); IXDR_PUT_INT32 (ixdr, timestamp.tv_usec); diff --git a/sunrpc/xdr.c b/sunrpc/xdr.c index d99a9985c4..2f894fbba7 100644 --- a/sunrpc/xdr.c +++ b/sunrpc/xdr.c @@ -225,8 +225,7 @@ INTDEF(xdr_u_long) bool_t xdr_hyper (XDR *xdrs, quad_t *llp) { - long t1; - unsigned long int t2; + long int t1, t2; if (xdrs->x_op == XDR_ENCODE) { @@ -240,7 +239,7 @@ xdr_hyper (XDR *xdrs, quad_t *llp) if (!XDR_GETLONG(xdrs, &t1) || !XDR_GETLONG(xdrs, &t2)) return FALSE; *llp = ((quad_t) t1) << 32; - *llp |= t2; + *llp |= (unsigned long int) t2; return TRUE; } @@ -259,8 +258,7 @@ INTDEF(xdr_hyper) bool_t xdr_u_hyper (XDR *xdrs, u_quad_t *ullp) { - unsigned long t1; - unsigned long t2; + long int t1, t2; if (xdrs->x_op == XDR_ENCODE) { @@ -274,7 +272,7 @@ xdr_u_hyper (XDR *xdrs, u_quad_t *ullp) if (!XDR_GETLONG(xdrs, &t1) || !XDR_GETLONG(xdrs, &t2)) return FALSE; *ullp = ((u_quad_t) t1) << 32; - *ullp |= t2; + *ullp |= (unsigned long int) t2; return TRUE; } @@ -332,7 +330,7 @@ INTDEF(xdr_short) bool_t xdr_u_short (XDR *xdrs, u_short *usp) { - u_long l; + long l; switch (xdrs->x_op) { @@ -345,7 +343,7 @@ xdr_u_short (XDR *xdrs, u_short *usp) { return FALSE; } - *usp = (u_short) l; + *usp = (u_short) (u_long) l; return TRUE; case XDR_FREE: diff --git a/sunrpc/xdr_intXX_t.c b/sunrpc/xdr_intXX_t.c index 9d2f92e10d..6c1fca2b23 100644 --- a/sunrpc/xdr_intXX_t.c +++ b/sunrpc/xdr_intXX_t.c @@ -1,4 +1,4 @@ -/* Copyright (c) 1998, 1999, 2000, 2004 Free Software Foundation, Inc. +/* Copyright (c) 1998, 1999, 2000, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1998. @@ -31,10 +31,7 @@ bool_t xdr_int64_t (XDR *xdrs, int64_t *ip) { - int32_t t1; - /* This must be unsigned, otherwise we get problems with sign - extension in the DECODE case. */ - uint32_t t2; + int32_t t1, t2; switch (xdrs->x_op) { @@ -46,7 +43,7 @@ xdr_int64_t (XDR *xdrs, int64_t *ip) if (!XDR_GETINT32(xdrs, &t1) || !XDR_GETINT32(xdrs, &t2)) return FALSE; *ip = ((int64_t) t1) << 32; - *ip |= t2; + *ip |= (uint32_t) t2; /* Avoid sign extension. */ return TRUE; case XDR_FREE: return TRUE; diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h index 761f8daeaa..e8015ac5fe 100644 --- a/sysdeps/arm/dl-machine.h +++ b/sysdeps/arm/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. ARM version. - Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 + Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -350,13 +350,14 @@ elf_machine_plt_value (struct link_map *map, const Elf32_Rel *reloc, #endif /* !dl_machine_h */ -#ifdef RESOLVE /* ARM never uses Elf32_Rela relocations for the dynamic linker. Prelinked libraries may use Elf32_Rela though. */ -# ifdef RTLD_BOOTSTRAP -# define ELF_MACHINE_NO_RELA 1 -# endif +#ifdef RTLD_BOOTSTRAP +# define ELF_MACHINE_NO_RELA 1 +#endif + +#ifdef RESOLVE /* Deal with an out-of-range PC24 reloc. */ static Elf32_Addr diff --git a/sysdeps/generic/bits/byteswap.h b/sysdeps/generic/bits/byteswap.h index 38d8540130..5f08fed613 100644 --- a/sysdeps/generic/bits/byteswap.h +++ b/sysdeps/generic/bits/byteswap.h @@ -1,5 +1,5 @@ /* Macros to swap the order of bytes in integer values. - Copyright (C) 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 1997,1998,2000,2001,2002,2005 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 @@ -29,28 +29,28 @@ # define __bswap_16(x) \ (__extension__ \ ({ unsigned short int __bsx = (x); \ - ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); })) + ((((__bsx) >> 8) & 0xffu) | (((__bsx) & 0xffu) << 8)); })) #else static __inline unsigned short int __bswap_16 (unsigned short int __bsx) { - return ((((__bsx) >> 8) & 0xff) | (((__bsx) & 0xff) << 8)); + return ((((__bsx) >> 8) & 0xffu) | (((__bsx) & 0xffu) << 8)); } #endif /* Swap bytes in 32 bit value. */ #ifdef __GNUC__ # define __bswap_32(x) \ - (__extension__ \ - ({ unsigned int __bsx = (x); \ - ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | \ - (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); })) + (__extension__ \ + ({ unsigned int __bsx = (x); \ + ((((__bsx) & 0xff000000u) >> 24) | (((__bsx) & 0x00ff0000u) >> 8) | \ + (((__bsx) & 0x0000ff00u) << 8) | (((__bsx) & 0x000000ffu) << 24)); })) #else static __inline unsigned int __bswap_32 (unsigned int __bsx) { - return ((((__bsx) & 0xff000000) >> 24) | (((__bsx) & 0x00ff0000) >> 8) | - (((__bsx) & 0x0000ff00) << 8) | (((__bsx) & 0x000000ff) << 24)); + return ((((__bsx) & 0xff000000u) >> 24) | (((__bsx) & 0x00ff0000u) >> 8) | + (((__bsx) & 0x0000ff00u) << 8) | (((__bsx) & 0x000000ffu) << 24)); } #endif diff --git a/sysdeps/generic/bits/types.h b/sysdeps/generic/bits/types.h index ce48964f14..65c8a9fe90 100644 --- a/sysdeps/generic/bits/types.h +++ b/sysdeps/generic/bits/types.h @@ -1,5 +1,5 @@ /* bits/types.h -- definitions of __*_t types underlying *_t types. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 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 @@ -114,6 +114,9 @@ typedef struct # define __ULONG32_TYPE unsigned long int # define __S64_TYPE __quad_t # define __U64_TYPE __u_quad_t +/* We want __extension__ before typedef's that use nonstandard base types + such as `long long' in C89 mode. */ +# define __STD_TYPE __extension__ typedef #elif __WORDSIZE == 64 # define __SQUAD_TYPE long int # define __UQUAD_TYPE unsigned long int @@ -123,15 +126,13 @@ typedef struct # define __ULONG32_TYPE unsigned int # define __S64_TYPE long int # define __U64_TYPE unsigned long int +/* No need to mark the typedef with __extension__. */ +# define __STD_TYPE typedef #else # error #endif #include <bits/typesizes.h> /* Defines __*_T_TYPE macros. */ -/* We want __extension__ before typedef's that use nonstandard base types - such as `long long' in C89 mode. */ -#define __STD_TYPE __extension__ typedef - __STD_TYPE __DEV_T_TYPE __dev_t; /* Type of device numbers. */ __STD_TYPE __UID_T_TYPE __uid_t; /* Type of user identifications. */ diff --git a/sysdeps/generic/dl-hash.h b/sysdeps/generic/dl-hash.h index a84bf2416d..243ae14b51 100644 --- a/sysdeps/generic/dl-hash.h +++ b/sysdeps/generic/dl-hash.h @@ -1,5 +1,5 @@ /* Compute hash value for given string according to ELF standard. - Copyright (C) 1995, 1996, 1997, 1998, 2003 Free Software Foundation, Inc. + Copyright (C) 1995,1996,1997,1998,2003,2005 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,8 +25,9 @@ first five operations no overflow is possible so we optimized it a bit. */ static unsigned int -_dl_elf_hash (const unsigned char *name) +_dl_elf_hash (const char *name_arg) { + const unsigned char *name = (const unsigned char *) name_arg; unsigned long int hash = 0; if (*name != '\0') { diff --git a/sysdeps/generic/dl-tls.c b/sysdeps/generic/dl-tls.c index 099742ceff..fdd569b587 100644 --- a/sysdeps/generic/dl-tls.c +++ b/sysdeps/generic/dl-tls.c @@ -52,7 +52,6 @@ oom (void) # endif - size_t internal_function _dl_next_tls_modid (void) @@ -98,7 +97,6 @@ _dl_next_tls_modid (void) /* The new index must indeed be exactly one higher than the previous high. */ assert (result == GL(dl_tls_max_dtv_idx) + 1); - /* There is no gap anymore. */ GL(dl_tls_dtv_gaps) = false; @@ -109,14 +107,15 @@ _dl_next_tls_modid (void) { /* No gaps, allocate a new entry. */ nogaps: + result = ++GL(dl_tls_max_dtv_idx); } return result; } -# ifdef SHARED +# ifdef SHARED void internal_function _dl_determine_tlsoffset (void) diff --git a/sysdeps/generic/libc-start.c b/sysdeps/generic/libc-start.c index 5bb8a9b352..f0d69b443b 100644 --- a/sysdeps/generic/libc-start.c +++ b/sysdeps/generic/libc-start.c @@ -81,9 +81,9 @@ STATIC int LIBC_START_MAIN (int (*main) (int, char **, char ** __attribute__ ((noreturn)); -/* Note: the fini parameter is ignored here. It used to be registered - with __cxa_atexit. This had the disadvantage that finalizers were - called in more than one place. */ +/* Note: the fini parameter is ignored here for shared library. It + is registered with __cxa_atexit. This had the disadvantage that + finalizers were called in more than one place. */ STATIC int LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), int argc, char *__unbounded *__unbounded ubp_av, @@ -98,7 +98,6 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), void (*fini) (void), void (*rtld_fini) (void), void *__unbounded stack_end) { - char *__unbounded *__unbounded ubp_ev = &ubp_av[argc + 1]; #if __BOUNDED_POINTERS__ char **argv; #else @@ -111,6 +110,8 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), __libc_multiple_libcs = &_dl_starting_up && !_dl_starting_up; #ifndef SHARED + char *__unbounded *__unbounded ubp_ev = &ubp_av[argc + 1]; + INIT_ARGV_and_ENVIRON; /* Store the lowest stack address. This is done in ld.so if this is @@ -155,14 +156,16 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), if (__builtin_expect (rtld_fini != NULL, 1)) __cxa_atexit ((void (*) (void *)) rtld_fini, NULL, NULL); +#ifndef SHARED /* Call the initializer of the libc. This is only needed here if we are compiling for the static library in which case we haven't run the constructors in `_dl_start_user'. */ -#ifndef SHARED __libc_init_first (argc, argv, __environ); -#endif -#ifndef SHARED + /* Register the destructor of the program, if any. */ + if (fini) + __cxa_atexit ((void (*) (void *)) fini, NULL, NULL); + /* Some security at this point. Prevent starting a SUID binary where the standard file descriptors are not opened. We have to do this only for statically linked applications since otherwise the dynamic @@ -238,10 +241,10 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), terminate the entire process. */ result = 0; # ifdef SHARED - int *const ptr = __libc_pthread_functions.ptr_nthreads; + unsigned int *const ptr = __libc_pthread_functions.ptr_nthreads; # else - extern int __nptl_nthreads __attribute ((weak)); - int *const ptr = &__nptl_nthreads; + extern unsigned int __nptl_nthreads __attribute ((weak)); + unsigned int *const ptr = &__nptl_nthreads; # endif if (! atomic_decrement_and_test (ptr)) diff --git a/sysdeps/generic/libc-tls.c b/sysdeps/generic/libc-tls.c index b88ede06a2..0cf884ca08 100644 --- a/sysdeps/generic/libc-tls.c +++ b/sysdeps/generic/libc-tls.c @@ -1,5 +1,5 @@ /* Initialization code for TLS in statically linked application. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 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 @@ -34,8 +34,7 @@ extern ElfW(Phdr) *_dl_phdr; extern size_t _dl_phnum; -/* DTV with just one element plus overhead. */ -static dtv_t static_dtv[3]; +static dtv_t static_dtv[2 + TLS_SLOTINFO_SURPLUS]; static struct @@ -173,7 +172,7 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign) & ~(max_align - 1)); /* Initialize the dtv. [0] is the length, [1] the generation counter. */ - static_dtv[0].counter = 1; + static_dtv[0].counter = (sizeof (static_dtv) / sizeof (static_dtv[0])) - 2; // static_dtv[1].counter = 0; would be needed if not already done /* Initialize the TLS block. */ diff --git a/sysdeps/generic/memset_chk.c b/sysdeps/generic/memset_chk.c index c311914395..d6206ffc99 100644 --- a/sysdeps/generic/memset_chk.c +++ b/sysdeps/generic/memset_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1997, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1997, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff --git a/sysdeps/generic/recv.c b/sysdeps/generic/recv.c index 9c28b4b306..62af8fedf2 100644 --- a/sysdeps/generic/recv.c +++ b/sysdeps/generic/recv.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1991,1995,1996,1997,2001,2005 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 @@ -22,7 +22,7 @@ /* Read N bytes into BUF from socket FD. Returns the number read or -1 for errors. */ ssize_t -recv (fd, buf, n, flags) +__recv (fd, buf, n, flags) int fd; void *buf; size_t n; @@ -31,7 +31,7 @@ recv (fd, buf, n, flags) __set_errno (ENOSYS); return -1; } - +weak_alias (__recv, recv) stub_warning (recv) #include <stub-tag.h> diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h index 78c083f6ab..a965a4a5fc 100644 --- a/sysdeps/i386/dl-machine.h +++ b/sysdeps/i386/dl-machine.h @@ -299,14 +299,14 @@ elf_machine_plt_value (struct link_map *map, const Elf32_Rel *reloc, #endif /* !dl_machine_h */ -#ifdef RESOLVE_MAP - /* The i386 never uses Elf32_Rela relocations for the dynamic linker. Prelinked libraries may use Elf32_Rela though. */ #ifdef RTLD_BOOTSTRAP # define ELF_MACHINE_NO_RELA 1 #endif +#ifdef RESOLVE_MAP + /* Perform the relocation specified by RELOC and SYM (which is fully resolved). MAP is the object containing the reloc. */ diff --git a/sysdeps/i386/i686/dl-hash.h b/sysdeps/i386/i686/dl-hash.h index 61183d80da..4bdd998aa8 100644 --- a/sysdeps/i386/i686/dl-hash.h +++ b/sysdeps/i386/i686/dl-hash.h @@ -1,5 +1,5 @@ /* Compute hash alue for given string according to ELF standard. - Copyright (C) 1998, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -27,7 +27,7 @@ would be much slower than the generic C implementation. So don't use it. */ static unsigned int -_dl_elf_hash (const unsigned char *name) +_dl_elf_hash (const char *name) { unsigned int result; unsigned int temp0; @@ -71,7 +71,7 @@ _dl_elf_hash (const unsigned char *name) "jnz 2b\n" "1:\t" : "=&r" (result), "=r" (name), "=&c" (temp0), "=&r" (temp1) - : "0" (0), "1" (name)); + : "0" (0), "1" ((const unsigned char *) name)); return result; } diff --git a/sysdeps/i386/i686/memset.S b/sysdeps/i386/i686/memset.S index 561188ffec..0b47547141 100644 --- a/sysdeps/i386/i686/memset.S +++ b/sysdeps/i386/i686/memset.S @@ -1,6 +1,6 @@ /* memset/bzero -- set memory area to CH/0 Highly optimized version for ix86, x>=6. - Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2003, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999. @@ -101,3 +101,9 @@ ENTRY (BP_SYM (memset)) #endif END (BP_SYM (memset)) libc_hidden_builtin_def (memset) + +#if defined PIC && !defined NOT_IN_libc && !BZERO_P +strong_alias (__memset_chk, __memset_zero_constant_len_parameter) + .section .gnu.warning.__memset_zero_constant_len_parameter + .string "memset used with constant zero length parameter; this could be due to transposed parameters" +#endif diff --git a/sysdeps/i386/i686/memset_chk.S b/sysdeps/i386/i686/memset_chk.S index d178654994..cd93d5ee10 100644 --- a/sysdeps/i386/i686/memset_chk.S +++ b/sysdeps/i386/i686/memset_chk.S @@ -1,5 +1,5 @@ -/* Checking memset for x86-64. - Copyright (C) 2004 Free Software Foundation, Inc. +/* Checking memset for i686. + Copyright (C) 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or diff --git a/sysdeps/mach/hurd/recv.c b/sysdeps/mach/hurd/recv.c index a2b8fd5be5..b001729d18 100644 --- a/sysdeps/mach/hurd/recv.c +++ b/sysdeps/mach/hurd/recv.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1997, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1994,1997,2001,2005 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 @@ -26,9 +26,8 @@ /* Read N bytes into BUF from socket FD. Returns the number read or -1 for errors. */ -/* XXX should be __recv ? */ ssize_t -recv (fd, buf, n, flags) +__recv (fd, buf, n, flags) int fd; void *buf; size_t n; @@ -62,3 +61,4 @@ recv (fd, buf, n, flags) return nread; } +weak_alias (__recv, recv) diff --git a/sysdeps/mach/hurd/setresgid.c b/sysdeps/mach/hurd/setresgid.c index d0ee412b46..5e3c7f0836 100644 --- a/sysdeps/mach/hurd/setresgid.c +++ b/sysdeps/mach/hurd/setresgid.c @@ -1,5 +1,5 @@ /* setresgid -- set effective group ID, real group ID, and saved-set group ID - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2005 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 @@ -75,3 +75,4 @@ __setresgid (gid_t egid, gid_t rgid, gid_t sgid) return err; } libc_hidden_def (__setresgid) +weak_alias (__setresgid, setresgid) diff --git a/sysdeps/mach/hurd/setresuid.c b/sysdeps/mach/hurd/setresuid.c index 2d05dbc850..f9d76a95ca 100644 --- a/sysdeps/mach/hurd/setresuid.c +++ b/sysdeps/mach/hurd/setresuid.c @@ -1,5 +1,5 @@ /* setresuid -- set effective user ID, real user ID, and saved-set user ID - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2005 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 @@ -75,3 +75,4 @@ __setresuid (uid_t euid, uid_t ruid, uid_t suid) return err; } libc_hidden_def (__setresuid) +weak_alias (__setresuid, setresuid) diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index c9081345ab..5ec7262157 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -680,7 +680,7 @@ gaih_inet (const char *name, const struct gaih_service *service, h->h_length); else { - int32_t *addr = (uint32_t *) (*pat)->addr; + uint32_t *addr = (uint32_t *) (*pat)->addr; addr[3] = *(uint32_t *) h->h_addr_list[i]; addr[2] = htonl (0xffff); addr[1] = 0; diff --git a/sysdeps/powerpc/powerpc32/dl-machine.h b/sysdeps/powerpc/powerpc32/dl-machine.h index de3b9e923a..545c19b300 100644 --- a/sysdeps/powerpc/powerpc32/dl-machine.h +++ b/sysdeps/powerpc/powerpc32/dl-machine.h @@ -204,7 +204,7 @@ extern void _dl_reloc_overflow (struct link_map *map, LOADADDR is the load address of the object; INFO is an array indexed by DT_* of the .dynamic section info. */ -inline void +auto inline void __attribute__ ((always_inline)) elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, const Elf32_Sym *sym, const struct r_found_version *version, void *const reloc_addr_arg) @@ -298,7 +298,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, } } -static inline void +auto inline void __attribute__ ((always_inline)) elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, void *const reloc_addr_arg) { @@ -306,7 +306,7 @@ elf_machine_rela_relative (Elf32_Addr l_addr, const Elf32_Rela *reloc, *reloc_addr = l_addr + reloc->r_addend; } -static inline void +auto inline void __attribute__ ((always_inline)) elf_machine_lazy_rel (struct link_map *map, Elf32_Addr l_addr, const Elf32_Rela *reloc) { diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h index 5ddc22e3c9..33fc1b6a9c 100644 --- a/sysdeps/powerpc/powerpc64/dl-machine.h +++ b/sysdeps/powerpc/powerpc64/dl-machine.h @@ -487,7 +487,7 @@ extern void _dl_reloc_overflow (struct link_map *map, const Elf64_Sym *refsym) attribute_hidden; -static inline void +auto inline void __attribute__ ((always_inline)) elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, void *const reloc_addr_arg) { @@ -497,7 +497,7 @@ elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc, #if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) /* This computes the value used by TPREL* relocs. */ -static Elf64_Addr __attribute__ ((const)) +auto inline Elf64_Addr __attribute__ ((always_inline, const)) elf_machine_tprel (struct link_map *map, struct link_map *sym_map, const Elf64_Sym *sym, @@ -518,7 +518,7 @@ elf_machine_tprel (struct link_map *map, /* Perform the relocation specified by RELOC and SYM (which is fully resolved). MAP is the object containing the reloc. */ -static inline void +auto inline void __attribute__ ((always_inline)) elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, const Elf64_Sym *sym, @@ -803,11 +803,12 @@ elf_machine_rela (struct link_map *map, MODIFIED_CODE_NOQUEUE (reloc_addr); } -static inline void +auto inline void __attribute__ ((always_inline)) elf_machine_lazy_rel (struct link_map *map, Elf64_Addr l_addr, const Elf64_Rela *reloc) { /* elf_machine_runtime_setup handles this. */ } + #endif /* RESOLVE */ diff --git a/sysdeps/sh/dl-machine.h b/sysdeps/sh/dl-machine.h index b66b4f0e42..e73c6d79c3 100644 --- a/sysdeps/sh/dl-machine.h +++ b/sysdeps/sh/dl-machine.h @@ -256,11 +256,11 @@ elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, #endif /* !dl_machine_h */ -#ifdef RESOLVE_MAP - /* SH never uses Elf32_Rel relocations. */ #define ELF_MACHINE_NO_REL 1 +#ifdef RESOLVE_MAP + /* Perform the relocation specified by RELOC and SYM (which is fully resolved). MAP is the object containing the reloc. */ diff --git a/sysdeps/unix/sysv/linux/alpha/syscalls.list b/sysdeps/unix/sysv/linux/alpha/syscalls.list index 3bbce1c6fd..7b3f233566 100644 --- a/sysdeps/unix/sysv/linux/alpha/syscalls.list +++ b/sysdeps/unix/sysv/linux/alpha/syscalls.list @@ -16,7 +16,6 @@ oldsemctl EXTRA semctl i:iiii __old_semctl semctl@GLIBC_2.0 sigstack - sigstack 2 sigstack vfork - vfork 0 __vfork vfork -getpeername - getpeername i:ipp __getpeername getpeername getpriority - getpriority i:ii __getpriority getpriority open - open Ci:siv __libc_open __open open !__libc_open64 __open64 open64 open64 open - diff --git a/sysdeps/unix/sysv/linux/ia64/syscalls.list b/sysdeps/unix/sysv/linux/ia64/syscalls.list index 31c7718d8b..c55c70ef54 100644 --- a/sysdeps/unix/sysv/linux/ia64/syscalls.list +++ b/sysdeps/unix/sysv/linux/ia64/syscalls.list @@ -2,7 +2,6 @@ umount2 - umount 2 __umount2 umount2 -getpeername - getpeername i:ipp __getpeername getpeername getpriority - getpriority i:ii __getpriority getpriority # semaphore and shm system calls diff --git a/sysdeps/unix/sysv/linux/libc_fatal.c b/sysdeps/unix/sysv/linux/libc_fatal.c index a79cfbabb9..c7fac6ab51 100644 --- a/sysdeps/unix/sysv/linux/libc_fatal.c +++ b/sysdeps/unix/sysv/linux/libc_fatal.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993-1995,1997,2000,2002-2004 Free Software Foundation, Inc. +/* Copyright (C) 1993-1995,1997,2000,2002-2005 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 @@ -27,6 +27,7 @@ #include <sysdep.h> #include <unistd.h> #include <sys/syslog.h> +#include <execinfo.h> /* Abort with an error message. */ #include <not-cancel.h> @@ -141,8 +142,33 @@ __libc_message (int do_abort, const char *fmt, ...) va_end (ap_copy); if (do_abort) - /* Terminate the process. */ - abort (); + { + if (do_abort > 1 && written) + { + void *addrs[64]; +#define naddrs (sizeof (addrs) / sizeof (addrs[0])) + int n = __backtrace (addrs, naddrs); + if (n > 2) + { +#define strnsize(str) str, strlen (str) +#define writestr(str) write_not_cancel (fd, str) + writestr (strnsize ("======= Backtrace: =========\n")); + __backtrace_symbols_fd (addrs + 1, n - 1, fd); + + writestr (strnsize ("======= Memory map: ========\n")); + int fd2 = open_not_cancel_2 ("/proc/self/maps", O_RDONLY); + char buf[1024]; + ssize_t n2; + while ((n2 = read_not_cancel (fd2, buf, sizeof (buf))) > 0) + if (write_not_cancel (fd, buf, n2) != n2) + break; + close_not_cancel_no_status (fd2); + } + } + + /* Terminate the process. */ + abort (); + } } diff --git a/sysdeps/unix/sysv/linux/mips/Makefile b/sysdeps/unix/sysv/linux/mips/Makefile index d5e4f6b72d..72fa87b3ff 100644 --- a/sysdeps/unix/sysv/linux/mips/Makefile +++ b/sysdeps/unix/sysv/linux/mips/Makefile @@ -9,11 +9,73 @@ sysdep_headers += sys/cachectl.h sys/sysmips.h sys/tas.h no_syscall_list_h = 1 -# Generate the list of SYS_* macros for the system calls (__NR_* macros). -# We generate not only SYS_<syscall>, pointing at SYS_<abi>_<syscall> if -# it exists, but also define SYS_<abi>_<syscall> for all ABIs. +# A callable macro that expands to a shell command. Preprocess file $(1) +# using ABI option $(2) and see which macros it defines. Print FOO for each +# macro of the form __NR$(3)_FOO, filtering out ABI-specific __NR macros +# that have a prefix other than $(3). +mips_list_syscalls = $(filter-out -m%,$(CC)) -E -x c $(+includes) \ + $(sysincludes) -D_LIBC -dM -mabi=$(2) $(1) | \ + sed -n 's@^\#define __NR$(3)_\([^ ]*\) .*@\1@p' | \ + sed -e '/^[ON]32_/d' -e '/^N64_/d' -e '/^64_/d' | \ + LC_ALL=C sort + +# Generate a list of SYS_* macros from the linux __NR macros. +# +# Before version 2.6, linux had separate 32-bit and 64-bit MIPS ports, +# each with its own set of headers. The ports were merged for 2.6 and +# this merged port defines the syscalls in a slightly different way. +# There are therefore three sets of headers that we need to consider: +# +# (1) Headers from the separate 32-bit MIPS port. They just define +# a single list of __NR macros. +# +# (2) Headers from the separate 64-bit MIPS port. They unconditionally +# define syscalls for all three ABIs, with o32 syscalls prefixed +# by __NR_O32, n32 syscalls prefixed by __NR_N32 and n64 syscalls +# prefixed by plain __NR. +# +# (3) Headers from the combined port. They use the _MIPS_SIM macro to +# define the right set of syscalls for the current ABI. The syscalls +# themselves have no special ABI prefix, but the headers also define: +# +# __NR_O32_Linux{,_syscalls} +# __NR_N32_Linux{,_syscalls} +# __NR_64_Linux{,_syscalls} +# +# In case (1) we just want a simple list of SYS_* macros. In cases (2) +# and (3) we want a file that will work for all three ABIs, regardless +# of which ABI we are currently using. We also want the file to work +# if the user later moves from (2) to (3). Thus the file we create +# for (2) and (3) has the form: +# +# #if _MIPS_SIM == _ABIN32 +# # ifdef __NR_N32_open +# # define SYS_n32syscall1 __NR_N32_n32syscall1 +# # ... +# # else +# # define SYS_n32syscall1 __NR_n32syscall1 +# # ... +# # endif +# #elif _MIPS_SIM == _ABI64 +# # define SYS_n64syscall1 __NR_n64syscall1 +# # ... +# #else +# # ifdef __NR_O32_open +# # define SYS_o32syscall1 __NR_O32_o32syscall1 +# # ... +# # else +# # define SYS_o32syscall1 __NR_o32syscall1 +# # ... +# # endif +# #endif +# +# Here, __NR_N32_open and __NR_O32_open are used to detect case (2) +# over case (3). The n64 SYS_* macros can always use the normal +# ABI-less names. $(objpfx)syscall-%.h $(objpfx)syscall-%.d: ../sysdeps/unix/sysv/linux/mips/sys/syscall.h $(make-target-directory) + $(CC) -E -x c $(+includes) $(sysincludes) -D_LIBC $< -MD -MP \ + -MF $(@:.h=.d)-t -MT '$(@:.d=.h) $(@:.h=.d)' > /dev/null { \ echo '/* Generated at libc build time from kernel syscall list. */';\ echo ''; \ @@ -22,28 +84,38 @@ $(objpfx)syscall-%.h $(objpfx)syscall-%.d: ../sysdeps/unix/sysv/linux/mips/sys/s echo '#endif'; \ echo ''; \ echo '#include <sgidefs.h>'; \ - rm -f $(@:.d=.h).newt; \ - $(CC) -E -MD -MP -MF $(@:.h=.d)-t -MT '$(@:.d=.h) $(@:.h=.d)' \ - -x c $(+includes) $(sysincludes) $< -D_LIBC -dM | \ - sed -n 's@^#define __NR_\([^ ]*\) .*$$@#define SYS_\1 __NR_\1@p' \ - > $(@:.d=.h).newt; \ - if grep SYS_O32_ $(@:.d=.h).newt > /dev/null; then \ + rm -f $(@:.d=.h).new32 $(@:.d=.h).newn32 $(@:.d=.h).new64; \ + $(call mips_list_syscalls,$<,n32,_N32) > $(@:.d=.h).newn32; \ + if test -s $(@:.d=.h).newn32; then \ + if grep open $(@:.d=.h).newn32 > /dev/null; then \ + $(call mips_list_syscalls,$<,32,_O32) > $(@:.d=.h).new32; \ + $(call mips_list_syscalls,$<,64,) > $(@:.d=.h).new64; \ + else \ + $(call mips_list_syscalls,$<,32,) > $(@:.d=.h).new32; \ + $(call mips_list_syscalls,$<,n32,) > $(@:.d=.h).newn32; \ + $(call mips_list_syscalls,$<,64,) > $(@:.d=.h).new64; \ + fi; \ echo '#if _MIPS_SIM == _ABIN32'; \ - sed -n 's/^\(#define SYS_\)N32_/\1/p' < $(@:.d=.h).newt | \ - LC_ALL=C sort; \ + echo '# ifdef __NR_N32_open'; \ + sed 's@\(.*\)@# define SYS_\1 __NR_N32_\1@' < $(@:.d=.h).newn32; \ + echo '# else'; \ + sed 's@\(.*\)@# define SYS_\1 __NR_\1@' < $(@:.d=.h).newn32; \ + echo '# endif'; \ echo '#elif _MIPS_SIM == _ABI64'; \ - sed -n 's/^\(#define SYS_\)N64_/\1/p' < $(@:.d=.h).newt | \ - LC_ALL=C sort; \ + sed 's@\(.*\)@# define SYS_\1 __NR_\1@' < $(@:.d=.h).new64; \ echo '#else'; \ - sed -n 's/^\(#define SYS_\)O32_/\1/p' < $(@:.d=.h).newt | \ - LC_ALL=C sort; \ + echo '# ifdef __NR_O32_open'; \ + sed 's@\(.*\)@# define SYS_\1 __NR_O32_\1@' < $(@:.d=.h).new32; \ + echo '# else'; \ + sed 's@\(.*\)@# define SYS_\1 __NR_\1@' < $(@:.d=.h).new32; \ + echo '# endif'; \ echo '#endif'; \ - sed -n '/^#define SYS_\([ON]32\|N64\)_/p' < $(@:.d=.h).newt | \ - LC_ALL=C sort +1.8; \ else \ - cat $(@:.d=.h).newt; \ + $(CC) -E -x c $(+includes) $(sysincludes) -D_LIBC -dM $< | \ + sed -n 's@^\#define __NR_\([^ ]*\) .*@\#define SYS_\1 __NR_\1@p' | \ + LC_ALL=C sort; \ fi; \ - rm $(@:.d=.h).newt; \ + rm -f $(@:.d=.h).new32 $(@:.d=.h).newn32 $(@:.d=.h).new64; \ } > $(@:.d=.h).new mv -f $(@:.d=.h).new $(@:.d=.h) ifneq (,$(objpfx)) diff --git a/sysdeps/unix/sysv/linux/mips/configure b/sysdeps/unix/sysv/linux/mips/configure index c081795aa1..4d9568f001 100755 --- a/sysdeps/unix/sysv/linux/mips/configure +++ b/sysdeps/unix/sysv/linux/mips/configure @@ -18,7 +18,7 @@ mips*64*) { echo "$as_me:$LINENO: WARNING: *** asm/unistd.h not found, it will not be pre-processed" >&5 echo "$as_me: WARNING: *** asm/unistd.h not found, it will not be pre-processed" >&2;} echo '#include <asm/unistd.h>' > asm-unistd.h - else + elif grep __NR_N32_open "$asm_unistd_h" > /dev/null; then # The point of this preprocessing is to turn __NR_<syscall> into # __NR_N64_<syscall>, as well as to define __NR_<syscall> to # __NR_<abi>_<syscall>, if __NR_<abi>_<syscall> is defined @@ -68,6 +68,8 @@ BEGIN { print "#include <sgidefs.h>"; } { print; }' + else + echo '#include <asm/unistd.h>' > asm-unistd.h fi ;; mips*) rm -f asm-unistd.h diff --git a/sysdeps/unix/sysv/linux/mips/configure.in b/sysdeps/unix/sysv/linux/mips/configure.in index 67d965dfda..e2e5d16c55 100644 --- a/sysdeps/unix/sysv/linux/mips/configure.in +++ b/sysdeps/unix/sysv/linux/mips/configure.in @@ -18,7 +18,7 @@ mips*64*) if test ! -f "$asm_unistd_h"; then AC_MSG_WARN([*** asm/unistd.h not found, it will not be pre-processed]) echo '#include <asm/unistd.h>' > asm-unistd.h - else + elif grep __NR_N32_open "$asm_unistd_h" > /dev/null; then # The point of this preprocessing is to turn __NR_<syscall> into # __NR_N64_<syscall>, as well as to define __NR_<syscall> to # __NR_<abi>_<syscall>, if __NR_<abi>_<syscall> is defined @@ -68,6 +68,8 @@ BEGIN { print "#include <sgidefs.h>"; } { print; }' + else + echo '#include <asm/unistd.h>' > asm-unistd.h fi ;; mips*) rm -f asm-unistd.h diff --git a/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h index b0316b657b..e69de29bb2 100644 --- a/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h +++ b/sysdeps/unix/sysv/linux/mips/mips32/kern64/sysdep.h @@ -1,36 +0,0 @@ -/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _LINUX_MIPS_MIPS32_KERN64_SYSDEP_H -#define _LINUX_MIPS_MIPS32_KERN64_SYSDEP_H 1 - -/* There is some commonality. */ -#include <sysdeps/unix/sysv/linux/mips/mips32/sysdep.h> - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#ifdef __STDC__ -# define SYS_ify(syscall_name) __NR_O32_##syscall_name -#else -# define SYS_ify(syscall_name) __NR_O32_/**/syscall_name -#endif - -#endif /* linux/mips/mips32/kern64/sysdep.h */ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h index be343aabca..e6013669a4 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h +++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2002, 2003, 2004, 2005 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 @@ -28,9 +28,9 @@ so we have to redefine the `SYS_ify' macro here. */ #undef SYS_ify #ifdef __STDC__ -# define SYS_ify(syscall_name) __NR_N32_##syscall_name +# define SYS_ify(syscall_name) __NR_##syscall_name #else -# define SYS_ify(syscall_name) __NR_N32_/**/syscall_name +# define SYS_ify(syscall_name) __NR_/**/syscall_name #endif #ifdef __ASSEMBLER__ diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h index f30a465081..dc0a1a0edc 100644 --- a/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h +++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2002, 2003, 2004, 2005 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 @@ -28,9 +28,9 @@ so we have to redefine the `SYS_ify' macro here. */ #undef SYS_ify #ifdef __STDC__ -# define SYS_ify(syscall_name) __NR_N64_##syscall_name +# define SYS_ify(syscall_name) __NR_##syscall_name #else -# define SYS_ify(syscall_name) __NR_N64_/**/syscall_name +# define SYS_ify(syscall_name) __NR_/**/syscall_name #endif #ifdef __ASSEMBLER__ diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h index 2ee3e60229..81f37c5103 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1992,1997-2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1992,1997-2003,2004,2005 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 @@ -109,7 +109,7 @@ # undef INTERNAL_SYSCALL_ERROR_P # define INTERNAL_SYSCALL_ERROR_P(val, err) \ - (__builtin_expect (err & (1 << 28), 0)) + ((void) (val), __builtin_expect ((err) & (1 << 28), 0)) # undef INTERNAL_SYSCALL_ERRNO # define INTERNAL_SYSCALL_ERRNO(val, err) (val) diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h index 38a376fa90..17bfa9014f 100644 --- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h +++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h @@ -1,5 +1,5 @@ -/* Copyright (C) 1992, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 - Free Software Foundation, Inc. +/* Copyright (C) 1992,1997,1998,1999,2000,2001,2002,2003,2004,2005 + 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 @@ -122,7 +122,7 @@ #undef INTERNAL_SYSCALL_ERROR_P #define INTERNAL_SYSCALL_ERROR_P(val, err) \ - (__builtin_expect (err & (1 << 28), 0)) + ((void) (err), __builtin_expect ((err) & (1 << 28), 0)) #undef INTERNAL_SYSCALL_ERRNO #define INTERNAL_SYSCALL_ERRNO(val, err) (val) diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list b/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list index 477f8a9f09..791ab9ba52 100644 --- a/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list +++ b/sysdeps/unix/sysv/linux/s390/s390-64/syscalls.list @@ -1,6 +1,5 @@ # File name Caller Syscall name # args Strong name Weak names -getpeername - getpeername i:ipp __getpeername getpeername vfork - vfork 0 __vfork vfork # semaphore and shm system calls diff --git a/sysdeps/unix/sysv/linux/sys/kd.h b/sysdeps/unix/sysv/linux/sys/kd.h index e0d2e869cf..d459c079ed 100644 --- a/sysdeps/unix/sysv/linux/sys/kd.h +++ b/sysdeps/unix/sysv/linux/sys/kd.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2005 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,15 @@ /* Make sure the <linux/types.h> header is not loaded. */ #ifndef _LINUX_TYPES_H -# define _LINUX_TYPES_H 1 +# define _LINUX_TYPES_H 1 +# define __undef_LINUX_TYPES_H #endif #include <linux/kd.h> +#ifdef __undef_LINUX_TYPES_H +# undef _LINUX_TYPES_H +# undef __undef_LINUX_TYPES_H +#endif + #endif /* sys/kd.h */ diff --git a/sysdeps/x86_64/memset.S b/sysdeps/x86_64/memset.S index 6c47f4c863..6b718b7126 100644 --- a/sysdeps/x86_64/memset.S +++ b/sysdeps/x86_64/memset.S @@ -1,6 +1,6 @@ /* memset/bzero -- set memory area to CH/0 Optimized version for x86-64. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger <aj@suse.de>. @@ -138,3 +138,9 @@ END (memset) #if !BZERO_P libc_hidden_builtin_def (memset) #endif + +#if !BZERO_P && defined PIC && !defined NOT_IN_libc +strong_alias (__memset_chk, __memset_zero_constant_len_parameter) + .section .gnu.warning.__memset_zero_constant_len_parameter + .string "memset used with constant zero length parameter; this could be due to transposed parameters" +#endif diff --git a/sysdeps/x86_64/memset_chk.S b/sysdeps/x86_64/memset_chk.S index e62cb58cc0..c1c8c23f90 100644 --- a/sysdeps/x86_64/memset_chk.S +++ b/sysdeps/x86_64/memset_chk.S @@ -1,5 +1,5 @@ /* Checking memset for x86-64. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2005 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 |