diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2007-09-12 16:26:54 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2007-09-12 16:26:54 +0000 |
commit | 83584a7af898dd93c48600fe850d150c51b10899 (patch) | |
tree | 0affa8ffee374ab83e40501d8d8967a03569c44d | |
parent | 04b4d23592609edcd19fd5a461bbe6d3cc677b5b (diff) |
Merge changes between r2424 and r3467 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@3468 7b3dc134-2b1b-0410-93df-9e9f96275f8d
651 files changed, 36277 insertions, 15465 deletions
diff --git a/libc/CONFORMANCE b/libc/CONFORMANCE index 012a487a9..68723086c 100644 --- a/libc/CONFORMANCE +++ b/libc/CONFORMANCE @@ -85,11 +85,9 @@ of the C standard (as indicated by __STDC_VERSION__): GCC options Standard version -ansi ISO/IEC 9899:1990 -std=c89 ISO/IEC 9899:1990 --std=iso9899:199409 ISO/IEC 9899:1990 as amended by Amd.1:1995 * +-std=iso9899:199409 ISO/IEC 9899:1990 as amended by Amd.1:1995 -std=c99 ISO/IEC 9899:1999 -* glibc does not support this standard version. - (Note that -std=c99 is not available in GCC 2.95.2, and that no version of GCC presently existing implements the full C99 standard.) @@ -174,25 +172,4 @@ http://sources.redhat.com/ml/libc-hacker/2000-06/msg00015.html Issues with headers =================== -There are various technical issues with the definitions contained in -glibc's headers, listed below. The list below assumes GCC 3.3.2, and -relates to i686-linux; older GCC may lead to more problems in the -headers. - -Note that the _t suffix is reserved by POSIX, but not by pure ISO C. -Also, the Single Unix Specification generally requires more types to -be included in headers (if _XOPEN_SOURCE is defined appropriately) -than ISO C permits. - -<ctype.h> should not declare size_t. - -<signal.h> should not declare size_t. - -<stdio.h> should not declare or use wchar_t or wint_t. - -<wchar.h> does not support AMD1; to support it, the functions -fwprintf, fwscanf, wprintf, wscanf, swprintf, swscanf, vfwprintf, -vwprintf, vswprintf and fwide would need to be declared when -__STDC_VERSION__ >= 199409L and not just for C99. - -<wctype.h> should not declare size_t. +None known. diff --git a/libc/ChangeLog b/libc/ChangeLog index 5845b8a95..c0b4fb50b 100644 --- a/libc/ChangeLog +++ b/libc/ChangeLog @@ -1,3 +1,1432 @@ +2007-09-11 Roland McGrath <roland@redhat.com> + + * posix/Makefile ($(objpfx)getconf.speclist): Make it empty if cross + compiling. + +2007-09-07 Samuel Thibault <samuel.thibault@ens-lyon.org> + + * sysdeps/mach/hurd/bits/ioctls.h (TAB3): New macro. + +2007-09-05 Roland McGrath <roland@redhat.com> + + * manual/signal.texi (Signaling Another Process): Typo fix. + From Karl Berry <karl@freefriends.org>. + +2007-08-29 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/check_pf.c (IFA_F_OPTIMISTIC): Define to + zero if not defined. + (make_request): Recognize optimistic addresses and treat them like + deprecated addresses. + Reported by Neil Horman <nhorman@redhat.com>. + +2007-08-28 Ulrich Drepper <drepper@redhat.com> + + * nscd/connections.c (send_ro_fd): Also transfer file size. + * nscd/nscd_helper.c (get_mapping): If nscd also transfers the + file size don't call fstat. + + * nscd/nscd_helper.c (get_mapping): Avoid the pread call, just go + ahead and map the file. This should always be correct and we can + catch problems later. + +2007-08-28 Jakub Jelinek <jakub@redhat.com> + + * libio/bits/stdio2.h (__fread_chk, __fread_unlocked_chk): New + prototypes. + (__fread_alias, __fread_unlocked_alias): New aliases. + (fread): New extern inline. + (fread_unlocked): Likewise. Undef macro before definition of + the inline function. + * debug/Makefile (routines): Add fread_chk and fread_u_chk. + (CFLAGS-fread_chk.c, CFLAGS-fread_u_chk.c): Add. + * debug/Versions (libc): Export __fread_chk@@GLIBC_2.7 + and __fread_unlocked_chk@@GLIBC_2.7. + * debug/fread_chk.c: New file. + * debug/fread_u_chk.c: New file. + * debug/tst-chk1.c (do_test): Add fread and fread_unlocked tests. + +2007-08-27 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/syscalls.list + (personality): Change caller to EXTRA. + +2007-08-25 Ulrich Drepper <drepper@redhat.com> + + * iconvdata/iso-2022-kr.c (BODY): Fake initialization of array buf + to keep gcc quiet. + * iconvdata/iso-2022-cn.c (BODY): Likewise. + + * locale/programs/ld-collate.c (collate_output): Avoid warning if + NDEBUG is defined. + + * Makerules: Use -p option with mkdir. + + * sunrpc/key_prot.c (xdr_unixcred): Work around gcc alias warning. + * nis/nis_xdr.c (_xdr_nis_server): Likewise. + (_xdr_directory_obj): Likewise. + (xdr_entry_obj): Likewise. + (xdr_group_obj): Likewise. + (xdr_link_obj): Likewise. + (xdr_table_obj): Likewise. + (_xdr_nis_result): Likewise. + (_xdr_ns_request): Likewise. + (_xdr_ib_request): Likewise. + (_xdr_nis_taglist): Likewise. + (xdr_cback_data): Likewise. + * nis/yp_xdr.c (xdr_ypmaplist): Likewise. + (xdr_ypresp_maplist): Likewise. + + * stdio-common/Makefile: Avoid format string warning for tst-sprint. + + * posix/regex_internal.h: Prevent some declarations and definitions + to be seen when used in tests. + + * posix/tst-rfc3484.c (__idna_to_unicode_lzlz): Initialize *OUTPUT. + * posix/tst-rfc3484-2.c (__idna_to_unicode_lzlz): Likewise. + + * debug/Makefile: Disable format checking when compiling tst-chk?.c. + + * config.make.in (datarootdir): Add to shut up configure. + + * sysdeps/x86_64/cacheinfo.c (handle_amd): Fix computation of + associativity for fully-associative caches. + + * sysdeps/x86_64/cacheinfo.c (handle_amd): Handle L3 cache + requests. Fill on more associativity values for L2. + Patch mostly by Evandro Menezes. + +2007-08-24 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/init-first.c + (_libc_vdso_platform_setup): Avoid using exported variable by using + alias. + + * resolv/arpa/nameser.h (NS_OPT_DNSSEC_OK): Define. + + * sysdeps/unix/sysv/linux/i386/syscalls.list: No reason to mark + fallocate64 as EXTRA. It is not referenced if the symbol isn't + defined. + +2007-08-23 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Correctly + align stack for call if pltexit is to be used. + + [BZ #3924] + * sysdeps/i386/dl-trampoline.S (_dl_runtime_profile): Correctly + align for function call in case pltexit has to be called later. + + * sysdeps/i386/dl-trampoline.S (_dl_runtime_resolve): Avoid + implicit atomic operation when storing function pointer. + (_dl_runtime_profile): Likewise. + +2007-08-17 Jakub Jelinek <jakub@redhat.com> + + * nis/nis_table.c (nis_list): Don't fail if __follow_path returned + NIS_NOTFOUND. + +2007-08-21 Ulrich Drepper <drepper@redhat.com> + + [BZ #4566] + * string/strtok.c: Fix typo in comment. + + [BZ #4582] + * debug/segfault.c: Fix typos in comments. + + [BZ #4588] + * stdio-common/tempnam.c: Fix comment, it is not checked that + TMPDIR points to a writable directory. + + [BZ #4726] + * resolv/res_send.c (__libc_res_nsend): Initialize all of the + memory allocated for the name server address. + + [BZ #4946] + * nscd/connections.c (handle_request): Using sendfile always + requires that mmap is used for the database. + Patch by Petr Baudis <pasky@suse.cz>. + + [BZ #4905] + * nscd/hstcache.c (cache_addhst): When reloading an entry which + suddenly has two or more addresses, ignore it and remove the old + entry. + + [BZ #4814] + * resolv/res_hconf.c: Prepare for compiling outside libc. + * nscd/res_hconf.c: New file. + * nscd/Makefile (nscd-modules): Add res_hconf. Add rules to build + the new file. + * nscd/gethstbynm2_r.c (NEED__RES_HCONF): Define. + * nscd/gethstbyad_r.c (NEED__RES_HCONF): Likewise. + + * nscd/hstcache.c (cache_addhst): Minimal optimization. + + [BZ #4925] + * debug/pcprofiledump.c: Turn on internationalization by calling + setlocale. Patch mostly by Benno Schulenberg. + + [BZ #4936] + * iconv/gconv.c (__gconv): If flush was successful, clear rest of + the state. + * iconvdata/Makefile: Add rules to build and run bug-iconv5. + * iconvdata/bug-iconv5.c: New file. + +2007-08-04 Carlos O'Donell <carlos@systemhalted.org> + + [BZ #4896] + * elf/elf.h: Define R_PARISC_PLABEL21L, R_PARISC_PLABEL14R, + R_PARISC_GNU_VTENTRY, R_PARISC_GNU_VTINHERIT, R_PARISC_TLS_GD21L, + R_PARISC_TLS_GD14R, R_PARISC_TLS_GDCALL, R_PARISC_TLS_LDM21L, + R_PARISC_TLS_LDM14R, R_PARISC_TLS_LDMCALL, R_PARISC_TLS_LDO21L, + R_PARISC_TLS_LDO14R, R_PARISC_TLS_DTPMOD32, R_PARISC_TLS_DTPMOD64, + R_PARISC_TLS_DTPOFF32, R_PARISC_TLS_DTPOFF64, R_PARISC_TLS_LE21L, + R_PARISC_TLS_LE14R, R_PARISC_TLS_IE21L, R_PARISC_TLS_IE14R, + R_PARISC_TLS_TPREL32, R_PARISC_TLS_TPREL64. + +2007-08-21 Ulrich Drepper <drepper@redhat.com> + + [BZ #4937] + * elf/do-lookup.h (do_lookup_x): Minimal improvement in hash + lookup loop. Suggested by John Reiser. + +2007-08-21 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/alpha/sysdep.h: Include tls.h. + +2007-08-20 Ulrich Drepper <drepper@redhat.com> + + * csu/libc-start.c: Don't handle VDSO_SETUP here. + * sysdeps/unix/sysv/linux/init-first.c: Handle it here instead. + * sysdeps/unix/sysv/linux/x86_64/libc-start.c: Renamed to... + * sysdeps/unix/sysv/linux/x86_64/init-first.c: ...this. New file. + * sysdeps/unix/sysv/linux/powerpc/libc-start.c: Move VDSO_SETUP code + to... + * sysdeps/unix/sysv/linux/x86_64/init-first.c: ...here. New file. + +2007-08-18 Ulrich Drepper <drepper@redhat.com> + + * po/nl.po: Update from translation team. + +2007-08-16 Andreas Jaeger <aj@suse.de> + + * locale/localeinfo.h: Make _nl_category_name_idxs extern. + Reported by Peter Festner <peter.festner@ewetel.net>. + +2007-08-17 Jakub Jelinek <jakub@redhat.com> + + * login/tst-grantpt.c (test_einval): Add 3rd argument to open. + +2007-08-16 Jakub Jelinek <jakub@redhat.com> + + * elf/Makefile ($(objpfx)ld.so): Use readelf -s and awk instead of nm -u + to check for undefined symbols. + + * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone): + If the syscall fails, set errno to the actual returned error number + rather than EINVAL. + * sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone): If + arguments are incorrect, set errno to EINVAL, if the syscall + fails, set errno to the actual returned error number. + + * stdlib/bits/stdlib-ldbl.h (__strtold_internal): Remove. + * wcsmbs/bits/wchar-ldbl.h (__wcstold_internal): Remove. + + * sysdeps/sparc/sparc32/sparcv9b/memcpy.S: Moved to... + * sysdeps/sparc/sparc32/sparcv9/sparcv9b/memcpy.S: ... here. New + file. + (ASI_PNF, ASI_BLK_P): Don't define. + * sysdeps/sparc/sparc32/sparcv9v/memcpy.S: Moved to... + * sysdeps/sparc/sparc32/sparcv9/sparcv9v/memcpy.S: ... here. New + file. + * sysdeps/sparc/sparc32/sparcv9v/memset.S: Moved to... + * sysdeps/sparc/sparc32/sparcv9/sparcv9v/memset.S: ... here. New + file. + +2007-08-15 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/sparc/fpu/fraiseexcpt.c (__feraiseexcept): Fix raising + FE_UNDERFLOW on Niagara CPUs. + + * sysdeps/sparc/fpu/feholdexcpt.c (feholdexcept): Clear all + exceptions. + +2007-08-14 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_runtime_setup): No + need to check GLRO(dl_hwcap) & HWCAP_SPARC_FLUSH on sparcv9. + (sparc_fixup_plt): Add do_flush argument instead of figuring whether + flush should be used or not inside of the function. + (elf_machine_fixup_plt, elf_machine_rela): Adjust caller. + + * sysdeps/unix/sysv/linux/sparc/sparc32/clone.S (__clone, + __thread_start): Use HIDDEN_JUMPTARGET. + * sysdeps/unix/sysv/linux/sparc/sparc64/clone.S (__clone, + __thread_start): Likewise. + * sysdeps/unix/sysv/linux/sparc/sysdep.h (JUMPTARGET): Define. + + * sysdeps/ieee754/ldbl-64-128/strtold_l.c (__STRTOF): Declare. + Add libc_hidden_proto. + (STRTOF): Add libc_hidden_proto. + (___new_strtold_l, ___new_wcstold_l): New weak aliases. + (strtold_l, wcstold_l): Use them as second argument for + long_double_symbol. + +2007-08-14 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-misc.c: Undo last change. The kernel won't allow it. + +2007-08-13 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * stdlib/strtold_l.c: Include wchar.h if needed. Add libc_hidden_def. + +2007-08-14 Ulrich Drepper <drepper@redhat.com> + + * po/bg.po: New file. From the translation team. + +2007-08-13 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_PSELECT, + __ASSUME_PPOLL, __ASSUME_ATFCTS, __ASSUME_SET_ROBUST_LIST, + __ASSUME_UTIMENSAT, __ASSUME_FALLOCATE): Update per-arch conditions + when each feature was introduced. + + * sysdeps/unix/sysv/linux/dl-vdso.c: Don't include dl-hash.h. + * sysdeps/unix/sysv/linux/dl-vdso.h: Don't include dl-hash.h if NDEBUG. + (CHECK_HASH): New macro. + (PREPARE_VERSION): Use it. + + * sysdeps/unix/sysv/linux/pselect.c (__generic_pselect): Only provide + prototype if not __ASSUME_PSELECT. + * sysdeps/unix/sysv/linux/ppoll.c (__generic_ppoll): Only provide + prototype if not __ASSUME_PPOLL. + + * sysdeps/unix/sysv/linux/dl-osinfo.h (ROUND): #undef after use. + + * sysdeps/unix/clock_settime.c (freq, __pthread_clock_settime, + hp_timing_settime): Don't define or declare if HANDLED_CPUTIME + is defined. + +2007-08-13 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/libc-start.c + (_libc_vdso_platform_setup): If vDSO is not available point + __vdso_gettimeofday to the vsyscall. + * sysdeps/unix/sysv/linux/x86_64/gettimeofday.S [SHARED]: Use + __vdso_gettimeofday instead of vsyscall. + +2007-08-13 Jakub Jelinek <jakub@redhat.com> + + * nscd/servicescache.c: Include kernel-features.h. + * nscd/gai.c: Likewise. + * sysdeps/unix/sysv/linux/statfs64.c: Likewise. + * sysdeps/unix/sysv/linux/fstatfs64.c: Likewise. + * sysdeps/unix/sysv/linux/fxstatat.c: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/mmap.S: Likewise. + * sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S: Likewise. + * sysdeps/unix/sysv/linux/xstatconv.c: Likewise. + * sysdeps/unix/sysv/linux/if_index.c: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c: Likewise. + * sysdeps/unix/sysv/linux/ifaddrs.c: Likewise. + +2007-08-12 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-dst.h: No need for _dl_dst_count, _dl_dst_substitute, + and _dl_get_origin defines anymore. + + * sysdeps/unix/sysv/linux/clock_gettime.c (maybe_syscall_gettime_cpu): + Build fix for systems which might lack POSIX timer support. + + * sysdeps/unix/sysv/linux/x86_64/libc-start.c + (_libc_vdso_platform_setup): Mangle function pointers before storing + them. + * sysdeps/unix/sysv/linux/x86_64/sysdep.h (INLINE_VSYSCALL): + Demangle vdso pointer before use. + (INTERNAL_VSYSCALL): Likewise. + + * elf/cache.c (primes): Mark as const. + Noted by Roland McGrath. + +2007-08-01 Andreas Jaeger <aj@suse.de> + Jakub Jelinek <jakub@redhat.com> + + * elf/ldconfig.c (opt_ignore_aux_cache): Add new option. + (options): Add option. + (parse_opt): Handle option. + (manual_link): Adjust process_file caller. Call implicit_soname. + (search_dir): Formatting. Use and populate auxiliary cache. + (main): Load and save auxiliary cache. + * elf/readlib.c (process_file): Add stat_buf argument. Pass struct + stat64 from fstat64 to caller. + (implicit_soname): New function. + * elf/readelflib.c (process_elf_file): If DT_SONAME is not present, + leave *soname as NULL. + * elf/cache.c: Include libgen.h. + (print_entry, print_cache, compare, save_cache, add_to_cache): + Formatting and cleanups. + (aux_cache_entry_id, aux_cache_entry, aux_cache_file_entry, + aux_cache_file): New structures. + (AUX_CACHEMAGIC): Define. + (primes): New array. + (aux_hash_size, aux_hash): New variables. + (aux_cache_entry_id_hash, nextprime, init_aux_cache, + search_aux_cache, insert_to_aux_cache, add_to_aux_cache, + load_aux_cache, save_aux_cache): New functions. + * sysdeps/generic/ldconfig.h (_PATH_LDCONFIG_AUX_CACHE): Define. + (init_aux_cache, search_aux_cache, add_to_aux_cache, + load_aux_cache, save_aux_cache, implicit_soname): New prototypes. + (process_file): Adjust prototype. + +2007-08-12 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h: Include stddef.h + with __need_size_t. + +2007-08-12 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/dl-vdso.c (_dl_vdso_vsym): Expect + r_found_version structure as second parameter. + * sysdeps/unix/sysv/linux/dl-vdso.h (PREPARE_VERSION): Define. + (_dl_vdso_vsym): Change type of second parameter accordingly. + * sysdeps/unix/sysv/linux/x86-64/libc-start.c + (_libc_vdso_platform_setup): Adjust. + * sysdeps/unix/sysv/linux/powerpc/libc-start.c + (_libc_vdso_platform_setup): Likewise. + + * sysdeps/unix/sysv/linux/powerpc/dl-vdso.c: Move to... + * sysdeps/unix/sysv/linux/dl-vdso.c: ...here. + * sysdeps/unix/sysv/linux/powerpc/dl-vdso.h: Move to... + * sysdeps/unix/sysv/linux/dl-vdso.h: ...here. + * csu/libc-start.c: Pretty printing. + Use VDSO_SETUP if defined. + * sysdeps/unix/sysv/linux/powerpc/libc-start.c: Define VDSO_SETUP + and let generic code call into _libc_vdso_platform_setup. + * sysdeps/unix/sysv/linux/x86_64/libc-start.c: New file. + * sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h: New file. + * sysdeps/unix/sysv/linux/x86_64/sysdep.h: Pretty printing. + Define INLINE_VSYSCALL and INTERNAL_VSYSCALL. + * sysdeps/unix/sysv/linux/x86_64/Versions: Export __vdso_clock_gettime + for GLIBC_PRIVATE. + * sysdeps/unix/sysv/linux/x86_64/Makefile [subdir=elf] + (sysdep_rountines): Add dl-vdso. + + * sysdeps/unix/sysv/linux/powerpc/Makefile: Use sysdep_routines instead + of routines. + + * sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h: Add + attribute_hidden to __vdso_gettimeofday prototype. + +2007-08-12 Roland McGrath <roland@redhat.com> + + * manual/stdio.texi (Variable Arguments Output): Fix xref to gcc manual. + From: Karl Berry <karl@freefriends.org>. + +2007-08-11 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-misc.c (_dl_sysdep_read_whole_file): We really don't need + an atime update for the files we read. + +2007-08-10 Ulrich Drepper <drepper@redhat.com> + + * shadow/lckpwdf.c (__lckpwdf): Use O_CLOEXEC if possible. + + * nscd/connections.c: Use O_CLOEXEC if possible. Use mkostemp + instead of mkstemp. + + * misc/Makefile (routines): Add mkostemp and mkostemp64. + * misc/Versions: Export mkostemp and mkostemp64 for GLIBC_2.7. + * misc/mkostemp.c: New file. + * misc/mkostemp64.c: New file. + * stdlib/stdlib.h: Declare the new functions. + * sysdeps/posix/tempname.c: Add new parameter which is added to + the flags for open. Remove __GT_BIGFILE handling. + * stdio-common/tempname.c: Likewise. + * include/stdio.h: Adjust __gen_tempname prototype. + Renumber __GT_* constants. + * libio/oldtmpfile.c: Adjust for __gen_tempname interface change. + * misc/mkdtemp.c: Likewise. + * misc/mkstemp.c: Likewise. + * misc/mkstemp64.c: Likewise. + * misc/mktemp.c: Likewise. + * stdio-common/tempnam.c: Likewise. + * stdio-common/tmpfile.c: Likewise. + * stdio-common/tmpfile64.c: Likewise. + * stdio-common/tmpnam.c: Likewise. + * stdio-common/tmpnam_r.c: Likewise. + +2007-08-10 Roland McGrath <roland@frob.com> + + * sysdeps/mach/hurd/bits/ioctls.h (NLDLY, TABDLY, BSDLY, VTDLY): + New macros. + (NLDELAY, CRDELAY, TBDELAY, BSDELAY, VTDELAY): Define to those. + Reported by Samuel Thibault <samuel.thibault@ens-lyon.org>. + +2007-08-10 Ulrich Drepper <drepper@redhat.com> + + * nss/nss_files/files-XXX.c (internal_setent): Use O_CLOEXEC if + possible. + * nss/nss_files/files-alias.c (internal_setent): Likewise. + * nss/Makefile (libnss_files-routines): Add files-have_o_cloexec. + * nss/nss_files/files-have_o_cloexec.c: New file. + + * sysdeps/unix/sysv/linux/shm_open.c (shm_open): Use O_CLOEXEC if + available. + +2007-08-10 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/ieee754/ldbl-128ibm/strtold_l.c (___new_strtold_l, + ___new_wcstold_l): New weak aliases. + (strtold_l, wcstold_l): Use them as second argument for + long_double_symbol. + +2007-08-09 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S: Use correct + register in test for error. + + * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h (O_CLOEXEC): Define. + * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h (O_CLOEXEC): Likewise. + + * po/sv.po: Update from translation team. + +2007-08-06 Roland McGrath <roland@redhat.com> + + * include/stdlib.h: Add libc_hidden_proto for strto*, __strto*_l. + Remove __strto*_l inlines. + * include/wchar.h: Add libc_hidden_proto for wcsto*, __wcsto*_l. + * stdlib/strtod.c: Add libc_hidden_def. + * stdlib/strtod_l.c: Likewise. + * stdlib/strtold.c [__LONG_DOUBLE_MATH_OPTIONAL]: Add libc_hidden_proto + for __new_strtold and __new_wcstold. + * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: Add libc_hidden_proto for + __STRTOF, STRTOF. + * stdlib/strtol.c: Add libc_hidden_def. + * stdlib/strtol_l.c: Likewise. + * sysdeps/wordsize-64/strtol.c: Add libc_hidden_ver for strtoll and + strtoq. + + * scripts/data/localplt-powerpc-linux-gnu.data: New file. + + * scripts/data/localplt-x86_64-linux-gnu.data: File renamed to ... + * scripts/data/localplt-generic.data: ... here. + * elf/Makefile (check-data): Get generic file if no other. + ($(objpfx)check-localplt.out): Make target unconditional. + + * sysdeps/unix/sysv/linux/dl-osinfo.h (_dl_discover_osversion): + Use ElfW(Nhdr). + +2007-08-05 Ulrich Drepper <drepper@redhat.com> + + * po/zh_CN.po: Updated translation from translation team. + +2007-08-05 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S (__socket): + Don't use CGOTSETUP and CGOTRESTORE macros. + +2007-08-04 Roland McGrath <roland@redhat.com> + + * posix/Makefile ($(objpfx)getconf.speclist): Fix typo. + +2007-08-04 Jakub Jelinek <jakub@redhat.com> + + * io/bits/fcntl2.h (open, open64, openat, openat64): Add + __extension__ around the whole statement expression. + +2007-08-04 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/opendir.c (__alloc_dir): Correct order of DIR + elements during initialization. + + * po/pl.po: Updated translation from translation team. + * po/tr.po: Likewise. + * po/nl.po: Likewise. + +2007-08-03 Ulrich Drepper <drepper@redhat.com> + + * rt/aio.h: Add __nonnull attributes. + +2007-08-03 Jakub Jelinek <jakub@redhat.com> + + * stdlib/strtod_l.c (____STRTOF_INTERNAL): Properly handle -0. + * stdlib/Makefile (tests): Add tst-strtod5. + (tst-strtod5-ENV): New. + * stdlib/tst-strtod5.c: New file. + + * intl/dcigettext.c (_nl_find_msg): Free encoding if __gconv_open + failed. + * intl/finddomain.c (_nl_find_domain): Free normalized_codeset + on failure. + + * elf/dl-load.c (decompose_rpath): Free copy if result couldn't be + allocated. + +2007-08-03 Jakub Jelinek <jakub@redhat.com> + + * rt/mqueue.h (mq_timedreceive, mq_timedsend): Fix nonnull argument + numbers. + +2007-08-02 Ulrich Drepper <drepper@redhat.com> + + * io/Makefile (aux): Add have_o_cloexec. + * include/fcntl.h: Declare __have_o_cloexec. + * io/have_o_cloexec.c: New file. + * sysdeps/unix/opendir.c (__opendir): Use O_CLOEXEC is available. + (__alloc_dir): If O_CLOEXEC has been used, don't duplicate the + fcntl call if not necessary. + * login/utmp_file.c (setutent_file): Use __have_o_cloexec instead + of local variable. + + * sysdeps/unix/opendir.c (__alloc_dir): Don't initialize ->data. + Avoid memset, add explicit initialization. + * sysdeps/unix/dirstream.h (struct __dirstream): Move data elemtn + to the end and change into zero-sized array. + Move lock member to fill a hole on 64-bit platforms. + + * stdlib/stdlib.h: Remove __strto*_internal prototypes and strto* + inline functions. + * include/stdlib.h: Add __strto*_internal prototypes here. + * wcsmbs/wchar.h: Remove __wcsto*_internal prototypes and wcsto* + inline functions. + * include/wchar.h: Add __wcsto*_internal prototypes. + * sysdeps/generic/inttypes.h: No need to protect the declaration + of the __strto*_internal and __wcsto*_internal members here. + + * rt/mqueue.h: Change const to __const and add nonnull attributes. + +2007-08-02 Roland McGrath <roland@redhat.com> + + * posix/Makefile ($(inst_libexecdir)/getconf): Make hard links to + $(inst_bindir)/getconf if possible. + + * posix/Makefile ($(objpfx)getconf.speclist): New target. + (generated): Add it. + ($(inst_libexecdir)/getconf): Use it. + +2007-08-01 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs): Using + /proc is faster and sufficient. /sys is still needed for + __get_nprocs_conf. + +2007-08-01 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/i386/syscalls.list (fallocate): Add fallocate + syscall as __fallocate64. + * sysdeps/unix/sysv/linux/i386/posix_fallocate.c: New file. + * sysdeps/unix/sysv/linux/i386/posix_fallocate64.c: New file. + +2007-07-30 Jakub Jelinek <jakub@redhat.com> + + * stdlib/tst-strtod2.c (do_test): Use %tu in fmt string for ptrdiff_t + value. + + * stdio-common/tst-fmemopen2.c (do_test): Avoid fmt string warning + if off_t is different rank from size_t. + + * sysdeps/generic/unwind-dw2.c (extract_cie_info, execute_cfa_program, + uw_frame_state_for): Avoid type punning warnings. + * sysdeps/generic/unwind-dw2-fde-glibc.c + (_Unwind_IteratePhdrCallback): Likewise. + * sysdeps/generic/unwind-dw2-fde.c (_Unwind_Find_FDE): Likewise. + (binary_search_single_encoding_fdes, binary_search_mixed_encoding_fdes, + get_cie_encoding, linear_search_fdes): Don't mix char and unsigned char + pointers. + +2007-07-31 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/getsysstats.c (__get_nprocs_conf): Count + total processors using sysfs. + (__get_nprocs): Use sysfs to determine which processors are online. + +2007-07-31 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/posix_fallocate.c (posix_fallocate): Fix + syscall arguments count. + + * stdio-common/tfformat.c (sprint_doubles): Add 12 new tests. + +2007-07-30 Roland McGrath <roland@redhat.com> + + * manual/libc.texinfo: Update copyrights, formatting magic, and + @dircategory. From Karl Berry <karl@freefriends.org>. + +2007-07-29 Ulrich Drepper <drepper@redhat.com> + + [BZ #4860] + * io/Makefile (headers): Add bits/fcntl2.h. + + * sysdeps/unix/sysv/linux/bits/sched.h (__CPU_ZERO_S): Optimize + using gcc builtin. + (__CPU_EQUAL_S): Likewise. + + * posix/Makefile (routines): Add sched_cpualloc and sched_cpufree. + (tests): Add tst-cpuset. + * posix/sched_cpualloc.c: New file. + * posix/sched_cpufree.c: New file. + * posix/tst-cpuset.c: New file. + * posix/Versions: Export __sched_cpualloc and __sched_cpufree for + GLIBC_2.7. + * sysdeps/unix/sysv/linux/bits/sched.h: Define __CPU_*_S macros. + * posix/sched.h: Define old CPU_* macros in temers of __CPU_*_S + macros. Define CPU_*_S macros. + +2007-07-28 Ulrich Drepper <drepper@redhat.com> + + * posix/getconf.c (vars): Add missing _SC_LEVEL4_CACHE_LINESIZE + entry. + + [BZ #4858] + * stdio-common/printf_fp.c (___printf_fp): Fix special case of + #.0g and value rounded to 1.0. + * stdio-common/tfformat.c (sprint_doubles): Add two new tests. + +2007-07-26 Jakub Jelinek <jakub@redhat.com> + + * locale/programs/ld-monetary.c (monetary_finish): Avoid range check + for int_frac_digits and frac_digits. + + * login/logout.c (logout): Avoid aliasing violation. + * login/logwtmp.c (logwtmp): Likewise. + + * libio/genops.c (_IO_un_link): Avoid aliasing violation. + + * nscd/selinux.c (preserve_capabilities): Initialize new_caps + to avoid warning. + * iconv/gconv_open.c (__gconv_open): Initialize ptr to avoid + warning. + * nis/nis_subr.c (nis_getnames): Initialize saveptr to avoid + warning. + * resolv/inet_ntop.c (inet_ntop6): Initialize best.len and cur.len + to avoid warnings. + + * nss/nsswitch.c (__nss_lookup_function): Don't cast &ni->known to + void **. + * nss/nsswitch.h (service_user): Use void * type for KNOWN field. + + * nss/nss_files/files-hosts.c (LINE_PARSER): Cast host_addr to + char * to avoid warning. + * nis/nss_nis/nis-hosts.c (LINE_PARSER): Likewise. + + * timezone/Makefile (CFLAGS-zdump.c): Add -fwrapv. + + * locale/programs/ld-ctype.c (ctype_finish, set_class_defaults, + allocate_arrays): Cast second argument to charmap_find_symbol + to char * to avoid warnings. + + * locale/programs/repertoire.c (repertoire_new_char): Change + from_nr, to_nr and cnt to unsigned long, adjust printf format + string. + + * locale/programs/ld-collate.c (insert_value, handle_ellipsis): + Cast second argument to new_element to char * to avoid warnings. + + * locale/weightwc.h (findidx): Cast &extra[-i] to const int32_t *. + + * intl/gettextP.h (struct loaded_domain): Change plural to const + struct expression *. + * intl/plural-eval.c (plural_eval): Change first argument to + const struct expression *. + * intl/plural-exp.c (EXTRACT_PLURAL_EXPRESSION): Change first + argument to const struct expression **. + * intl/plural-exp.h (EXTRACT_PLURAL_EXPRESSION, plural_eval): Adjust + prototypes. + * intl/loadmsgcat (_nl_unload_domain): Cast away const + in call to __gettext_free_exp. + + * posix/fnmatch.c (fnmatch): Rearrange code to avoid maybe + unitialized wstring/wpattern var warnings. + + * posix/runtests.c (struct a_test): Make data field const char *. + + * stdio-common/tst-sprintf2.c (main): Don't declere u, v and buf + vars if not LDBL_MANT_DIG >= 106. + + * stdio-common/Makefile (CFLAGS-vfwprintf.c): Add -Wno-unitialized. + + * stdio-common/vfprintf.c (vfprintf): Cast first arugment to + __find_specmb to avoid warning. + + * rt/tst-mqueue1.c (do_one_test): Add casts to avoid warnings. + + * debug/test-strcpy_chk.c (do_tests, do_random_tests): Add casts + to avoid warnings. + + * sysdeps/ieee754/ldbl-96/s_roundl.c (huge): Add L suffix to + initializer. + + * sysdeps/unix/clock_gettime.c (clock_gettime): Only define + tv var when it will be actually used. + + * sunrpc/rpc_cmsg.c (xdr_callmsg): Cast IXDR_PUT_* to void + to avoid warnings. + + * iconvdata/gbk.c (BODY): Make buf and cp char instead of unsigned + char array resp. pointer. + * iconvdata/iso-2022-kr.c (BODY): Make buf unsigned char instead of + char array. + * iconvdata/cns11643.h (cns11643_to_ucs4): Change first argument + to const unsigned char **. + (ucs4_to_cns11643): Change second argument to unsigned char *. + * iconvdata/euc-tw.c (BODY): Change endp type to + const unsigned char *. + * iconvdata/iso-ir-165.h (ucs4_to_isoir165): Change second argument + to unsigned char *. + * iconvdata/ibm1008_420.c (LOOP_NEED_FLAGS): Don't define. + * iconvdata/iso-2022-cn.c (BODY): Change buf to unsigned char array. + * iconvdata/iso-2022-cn-ext.c (BODY): Change buf, tmpbuf, tmp + types to unsigned char pointers/arrays instead of char. + * iconvdata/jis0201.h (ucs4_to_jisx0201): Change second argument + to unsigned char *. + * iconvdata/jis0208.h (ucs4_to_jisx0208): Likewise. + * iconvdata/jis0212.h: Include assert.h. + (ucs4_to_jisx0212): Change second argument to unsigned char *. + assert that if cp[0] is not '\0', cp[1] is not '\0' either instead + of trying to handle that. + * iconvdata/euc-kr.c (euckr_from_ucs4): Initialize also cp[1] to + shut up a warning. + * iconvdata/euc-jp-ms.c (from_ucs4_lat1, from_ucs4_greek, + from_ucs4_cjk, from_ucs4_cjkcpt, from_ucs4_extra): Change type to + two dimensional const unsigned char arrays. + (BODY): Cast "" to (const unsigned char *) for assignment to cp. + Initialize endp to inptr to shut up a warning. + +2007-07-20 Jakub Jelinek <jakub@redhat.com> + + [BZ #4772] + * time/strptime_l.c (__strptime_internal): Silently ignore + strftime modifiers and field width in recursive calls. + + * include/time.h (enum ptime_locale_status): Remove. + (__strptime_internal): Remove decided and era_cnt arguments, + add statep argument. + * time/strptime_l.c (__strptime_internal): Remove decided + and era_cnt arguments, add statep argument. Don't recompute + any fields in recursive calls, only update caller's tm + and state, if recursive call fails, don't change tm nor + any state. + (get_alt_number): Adjust. + (recursive): Adjust caller. + (strptime): Likewise. + * time/strptime.c (strptime): Likewise. + +2007-07-19 Jakub Jelinek <jakub@redhat.com> + + * iconv/gconv_int.h (__GCONV_NULCONV): New internal only error code. + * iconv/gconv_cache.c (__gconv_lookup_cache): Return __GCONV_NULCONV + if from and to charsets are the same. + * iconv/gconv_db.c (__gconv_find_transform): Likewise. + * intl/dcigettext.c (_nl_find_msg): Return NULL even if __gconv_open + returns __GCONV_NOCONV, but not for __GCONV_NULCONV. + +2007-07-17 Jakub Jelinek <jakub@redhat.com> + + * wcsmbs/wchar.h: Only define wint_t if __need_wint_t. + Don't define wint_t when __need_mbstate_t unless it + is necessary. + (__mbstate_t): Use __WINT_TYPE__ rather than wint_t + in the typedef if possible. + * wctype/wctype.h (wint_t): Define by including + wchar.h with __need_wint_t instead of including stddef.h + with __need_wint_t and as fallback definining it ourselves. + * iconv/gconv.h (__need_wint_t): Define before including + wchar.h. + * sysdeps/gnu/_G_config.h: Don't include gconv.h if not _LIBC + or _GLIBCPP_USE_WCHAR_T. + (__need_wchar_t): Don't define + if not _LIBC or _GLIBCPP_USE_WCHAR_T. + (__need_wint_t): Don't define before including stddef.h, + define before including wchar.h only if _LIBC or + _GLIBCPP_USE_WCHAR_T. + (_G_iconv_t): Don't define if not _LIBC or _GLIBCPP_USE_WCHAR_T. + * sysdeps/mach/hurd/_G_config.h: Likewise. + * sysdeps/generic/_G_config.h: Likewise. + * libio/libio.h (__wunderflow, __wuflow, __woverflow): Only + prototype if _LIBC or _GLIBCPP_USE_WCHAR_T. + (_IO_getwc_unlocked, _IO_putwc_unlocked): Only define + if _LIBC or _GLIBCPP_USE_WCHAR_T. + +2007-07-28 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/posix/posix_fallocate64.c: Undefine + __posix_fallocate64_l64 before alias handling. + * sysdeps/unix/sysv/linux/posix_fallocate.c: New file. + * sysdeps/unix/sysv/linux/posix_fallocate64.c: New file. + * sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c: New file. + * sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c: New file. + + * io/tst-posix_fallocate.c: Include <fcntl.h>. + +2007-07-23 Jakub Jelinek <jakub@redhat.com> + + * locale/programs/ld-collate.c (atwc): New variable. + (add_to_tablewc): New toplevel function, moved from collate_output. + (collate_output): Remove add_to_tablewc nested function. + + * iconv/iconvconfig.c (hash_table, hash_size): New toplevel vars. + (name_insert): New function. + (write_output): Remove hash_table and hash_size vars and name_insert + nested function. + +2007-07-24 Roland McGrath <roland@redhat.com> + + * Makerules (install-others-programs-nosubdir): New target. + (install-no-libc.a-nosubdir): Depend on it. + + * iconv/Makefile (install-others-programs): Set this instead of + install-others. + * login/Makefile (install-others-programs): Likewise. + * posix/Makefile (install-others-programs): Likewise. + + * Makerules (install-no-libc.a-nosubdir): Clean up conditional + dependencies. + +2007-07-23 Ulrich Drepper <drepper@redhat.com> + + * io/Makefile (tests): Add tst-posix_fallocate. + * io/tst-posix_fallocate.c: New file. + + * sysdeps/unix/sysv/linux/kernel-features.h: Define + __ASSUME_FALLOCATE. + +2007-07-22 Roland McGrath <roland@frob.com> + + * hurd/getdport.c: Add missing copyright year update. + + * sysdeps/mach/hurd/bits/fcntl.h [__USE_GNU] (O_CLOEXEC): New macro. + * hurd/port2fd.c (_hurd_port2fd): Implement O_CLOEXEC. + +2007-07-22 Ulrich Drepper <drepper@redhat.com> + + * login/utmp_file.c (setutent_file): Use O_CLOEXEC if possible. + + * libio/fileops.c (_IO_new_file_fopen): Recognize 'e' flag and set + O_CLOEXEC is needed. + * nis/nss_compat/compat-grp.c: Use 'e' flag when opening file. + Avoid additional fcntl to set O_CLOEXEC if not needed. + * nis/nss_compat/compat-initgroups.c: Likewise. + * nis/nss_compat/compat-pwd.c: Likewise. + * nis/nss_compat/compat-spwd.c: Likewise. + +2007-07-21 Samuel Thibault <samuel.thibault@ens-lyon.org> + + [BZ #3665] + * manual/errno.texi: Change ECANCELED value to 119. + + [BZ #4610] + * mach/lock-intern.h: Include <sys/cdefs.h>. + + [BZ #4178] + * sysdeps/mach/hurd/sigaction.c (__sigaction): Check ACT != NULL before + reading A. + + [BZ #4126] + * sysdeps/mach/hurd/sigsuspend.c (sigsuspend_not_cancel): Define alias + to __sigsuspend. + + * sysdeps/mach/i386/sysdep.h: Include <dl-sysdep.h> and <tls.h>. + +2006-06-13 Thomas Schwinge <tschwinge@gnu.org> + + * sysdeps/mach/hurd/tls.h: Change `ASSEMBLER' conditional to + `__ASSEMBLER__'. + * sysdeps/mach/hurd/i386/tls.h: Likewise. + +2007-07-21 Ulrich Drepper <drepper@redhat.com> + + * nscd/nscd_helper.c (get_mapping): Use MSG_CMSG_CLOEXEC for + descriptor received from nscd. + + * sysdeps/unix/sysv/linux/bits/socket.h: Define MSG_CMSG_CLOEXEC. + + * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Define O_CLOEXEC. + * sysdeps/unix/sysv/linux/ia64/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/s390/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/sh/bits/fcntl.h: Likewise. + * sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h: Likewise. + +2007-07-20 Jakub Jelinek <jakub@redhat.com> + + [BZ #4816] + * manual/signal.texi (Non-atomic Example): Make memory var volatile. + + [BZ #4813] + * login/forkpty.c (forkpty): Close master and slave fds on + fork failure. Patch by + Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>. + +2007-07-18 Jakub Jelinek <jakub@redhat.com> + + * include/features.h (__USE_ISOC95): New define. + * wcsmbs/wchar.h (fwprintf, fwscanf, wprintf, wscanf, swprintf, + swscanf, vfwprintf, vwprintf, vswprintf, fwide): Define even + for -std=iso9899:199409. + * CONFORMANCE: Remove comments about unsupported AMD1. + +2007-07-17 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/ia64/sched_cpucount.c: New file. + * sysdeps/powerpc/sched_cpucount.c: New file. + + * sysdeps/unix/sysv/linux/bits/sched.h (__sched_cpucount): Add + __BEGIN_DECLS/__END_DECLS around the prototype. + * bits/sched.h (__sched_cpucount): Likewise. Make second argument + pointer to const cpu_set_t. + + * bits/types.h: Don't include stddef.h, don't define __need_size_t. + * signal/signal.h <__USE_BSD || __USE_XOPEN_EXTENDED>: Define + __need_size_t and include stddef.h. + * sysvipc/sys/msg.h: Likewise. + * posix/sched.h: Likewise. + * hurd/hurd/signal.h (__need_size_t): Define. + + * CONFORMANCE: ctype.h and wctype.h no longer define size_t, + neither does signal.h in pedantic ISO C namespaces. stdio.h + no longer defines wint_t or wchar_t. + + * libio/libioP.h (_IO_acquire_lock_clear_flags2_fct): New function. + * debug/vfwprintf_chk.c (__vfwprintf_chk): Use + _IO_acquire_lock_clear_flags2 instead of _IO_acquire_lock. + * debug/vprintf_chk.c (__vprintf_chk): Likewise. + * debug/vwprintf_chk.c (__vwprintf_chk): Likewise. + * debug/vfprintf_chk.c (__vfprintf_chk): Likewise. + * debug/fwprintf_chk.c (__fwprintf_chk): Likewise. + * debug/printf_chk.c (__printf_chk): Likewise. + * debug/fprintf_chk.c (__fprintf_chk): Likewise. + * debug/wprintf_chk.c (__wprintf_chk): Likewise. + + * sysdeps/pthread/bits/stdio-lock.h (_IO_acquire_lock_clear_flags2): + Define. + + * bits/confname.h (_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS): Define. + * posix/getconf.c (vars): Add POSIX_V6_WIDTH_RESTRICTED_ENVS. + +2007-07-16 Jakub Jelinek <jakub@redhat.com> + + [BZ #4792] + * stdlib/stdlib.h (realloc): Remove __attribute_malloc__. + * malloc/malloc.h (realloc): Likewise. + + * libio/iopopen.c (_IO_new_proc_open): Don't close child_std_end + if one of proc_file_chain streams has that fileno. + * stdio-common/Makefile (tests): Add tst-popen2. + * stdio-common/tst-popen2.c: New test. + +2007-07-14 Jakub Jelinek <jakub@redhat.com> + + * elf/ldconfig.c: Allow GPLv2 or any later version. + * elf/readlib.c: Likewise. + * elf/chroot_canon.c: Likewise. + * elf/cache.c: Likewise. + * nscd/mem.c: Likewise. + * nscd/getpwuid_r.c: Likewise. + * nscd/grpcache.c: Likewise. + * nscd/aicache.c: Likewise. + * nscd/getsrvbynm_r.c: Likewise. + * nscd/nscd.c: Likewise. + * nscd/servicescache.c: Likewise. + * nscd/getsrvbypt_r.c: Likewise. + * nscd/initgrcache.c: Likewise. + * nscd/gethstbyad_r.c: Likewise. + * nscd/gethstbynm2_r.c: Likewise. + * nscd/getgrnam_r.c: Likewise. + * nscd/nscd_setup_thread.c: Likewise. + * nscd/getpwnam_r.c: Likewise. + * nscd/gai.c: Likewise. + * nscd/connections.c: Likewise. + * nscd/dbg_log.c: Likewise. + * nscd/cache.c: Likewise. + * nscd/hstcache.c: Likewise. + * nscd/nscd_conf.c: Likewise. + * nscd/getgrgid_r.c: Likewise. + * nscd/pwdcache.c: Likewise. + * catgets/gencat.c: Likewise. + * locale/programs/linereader.h: Likewise. + * locale/programs/locarchive.c: Likewise. + * locale/programs/ld-paper.c: Likewise. + * locale/programs/locfile-kw.h: Likewise. + * locale/programs/ld-address.c: Likewise. + * locale/programs/xmalloc.c: Likewise. + * locale/programs/ld-time.c: Likewise. + * locale/programs/localedef.c: Likewise. + * locale/programs/simple-hash.c: Likewise. + * locale/programs/xstrdup.c: Likewise. + * locale/programs/ld-numeric.c: Likewise. + * locale/programs/locfile-kw.gperf: Likewise. + * locale/programs/ld-collate.c: Likewise. + * locale/programs/charmap-kw.gperf: Likewise. + * locale/programs/charmap.h: Likewise. + * locale/programs/charmap-kw.h: Likewise. + * locale/programs/config.h: Likewise. + * locale/programs/locfile.c: Likewise. + * locale/programs/ld-ctype.c: Likewise. + * locale/programs/charmap.c: Likewise. + * locale/programs/ld-messages.c: Likewise. + * locale/programs/repertoire.h: Likewise. + * locale/programs/locale.c: Likewise. + * locale/programs/ld-name.c: Likewise. + * locale/programs/linereader.c: Likewise. + * locale/programs/locfile.h: Likewise. + * locale/programs/3level.h: Likewise. + * locale/programs/ld-monetary.c: Likewise. + * locale/programs/ld-measurement.c: Likewise. + * locale/programs/charmap-dir.c: Likewise. + * locale/programs/ld-identification.c: Likewise. + * locale/programs/localedef.h: Likewise. + * locale/programs/charmap-dir.h: Likewise. + * locale/programs/repertoire.c: Likewise. + * locale/programs/simple-hash.h: Likewise. + * locale/programs/ld-telephone.c: Likewise. + * locale/programs/locale-spec.c: Likewise. + * locale/programs/locfile-token.h: Likewise. + * posix/getconf.c: Likewise. + * iconv/dummy-repertoire.c: Likewise. + * iconv/iconv_charmap.c: Likewise. + * iconv/iconvconfig.c: Likewise. + * iconv/iconv_prog.c: Likewise. + * malloc/memusagestat.c: Likewise. + * sysdeps/unix/sysv/linux/nscd_setup_thread.c: Likewise. + +2007-07-06 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/sh/bsd-setjmp.S (setjmp): Use correct argument registers. + * sysdeps/sh/bsd-_setjmp.S (_setjmp): Likewise. + * sysdeps/unix/sysv/linux/sh/clone.S (__clone): Do correct sanity + check for the first argument. + +2007-07-12 Jakub Jelinek <jakub@redhat.com> + + [BZ #4775] + * math/tgmath.h (__tgmath_real_type_sub): Formatting. + (__tgmath_real_type): Fix if expr is const int or other const + qualified integral type. + (__TGMATH_UNARY_REAL_ONLY): Rewritten to avoid using statement + expressions and handle const qualified arguments. + (__TGMATH_BINARY_FIRST_REAL_ONLY, __TGMATH_UNARY_REAL_IMAG, + __TGMATH_UNARY_REAL_IMAG_RET_REAL): Likewise. + (__TGMATH_UNARY_REAL_RET_ONLY): Rewritten to avoid using + statement expressions. + (__TGMATH_BINARY_REAL_ONLY, __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY, + __TGMATH_TERNARY_REAL_ONLY, __TGMATH_BINARY_REAL_IMAG): Likewise. + (__TGMATH_UNARY_IMAG): Define. + (conj, cproj): Use __TGMATH_UNARY_IMAG macro. + * math/Makefile (tests): Add test-tgmath2. + (CFLAGS-test-tgmath2.c): Add. + * math/test-tgmath.c (fy, dy, ly, fz, dz, lz, count_cdouble, + count_cfloat, count_cldouble): New variables. + (NCCALLS): Define. + (main): Check number of complex calls as well. + (F(compile_test)): Add complex tests and tests with const qualified + arguments. + (y, z, ccount): Define. + (F(cacos), F(casin), F(catan), F(ccos), F(csin), F(ctan), F(cacosh), + F(casinh), F(catanh), F(ccosh), F(csinh), F(ctanh), F(cexp), F(clog), + F(csqrt), F(cpow), F(cabs), F(carg), F(creal), F(cimag), F(conj), + F(cproj)): New functions. + * math/test-tgmath2.c: New test. + +2007-07-11 Jakub Jelinek <jakub@redhat.com> + + [BZ #4776] + * elf/dl-load.c (_dl_rtld_di_serinfo): Output / in LD_LIBRARY_PATH, + RPATH etc. as "/" rather than "", don't segfault on empty paths, + instead output ".". + * dlfcn/Makefile (distribute): Add glreflib3.c. + (module-names): Add glreflib3. + ($(objpfx)tst-dlinfo.out): Depend on glreflib3.so rather than + glreflib1.so. + (LDFLAGS_glreflib3.so): New. + * dlfcn/tst-dlinfo.c (do_test): Load glreflib3.so instead of + glreflib1.so. + * dlfcn/glreflib3.c: New file. + + * intl/finddomain.c (_nl_find_domain): If _nl_explode_name + returned -1, return NULL. + * intl/explodename.c (_nl_explode_name): Return -1 if + _nl_normalize_codeset failed. + +2007-07-07 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/powerpc/powerpc32/power6/memset.S: Update comments. + Specify .machine power6 to get ISA-V2.0 branch hints. Unroll loops + and avoid branch misspredicts for > 31 bytes memset case. + * sysdeps/powerpc/powerpc64/power6/memset.S: Likewise. + Remove toc ref to __cache_line_size. + + * sysdeps/powerpc/powerpc32/power4/memcmp.S: Specify .machine power4 + to get ISA-V2.0 branch hints. + * sysdeps/powerpc/powerpc32/power4/memcpy.S: Likewise + * sysdeps/powerpc/powerpc32/power4/memset.S: Likewise + * sysdeps/powerpc/powerpc32/power6/memcpy.S: Likewise. + * sysdeps/powerpc/powerpc64/power4/memcmp.S: Likewise. + * sysdeps/powerpc/powerpc64/power4/memcpy.S: Likewise. + * sysdeps/powerpc/powerpc64/power4/memset.S: Likewise. + Remove toc ref to __cache_line_size. + + * sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S: + Include math_ldbl_opt.h. + +2007-07-10 Ulrich Drepper <drepper@redhat.com> + + [BZ #4773] + * time/strptime_l.c (__strptime_internal): Implement greedy + matching of weekday and month names. + +2007-07-09 Roland McGrath <roland@redhat.com> + + * elf/elf.h (NT_GNU_ABI_TAG): New macro. + (ELF_NOTE_ABI): Use it. + (NT_GNU_HWCAP, NT_GNU_BUILD_ID): New macros. + +2007-07-09 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/x86_64/cacheinfo.c (intel_02_known): Add new entries. + * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_02_known): Likewise. + +2007-07-07 Ulrich Drepper <drepper@redhat.com> + + [BZ #4745] + * stdio-common/vfscanf.c (_IO_vfscanf): Add additional test for EOF + in loop to look for conversion specifier to avoid testing of + wrong errno value. + * stdio-common/Makefile (tests): Add bug18, bug18a, bug19, bug19a. + * stdio-common/bug18.c: New file. + * stdio-common/bug18a.c: New file. + * stdio-common/bug19.c: New file. + * stdio-common/bug19a.c: New file. + +2007-07-05 Mike Frysinger <vapier@gentoo.org> + + * Makeconfig ($(common-objpfx)gnu/lib-names.stmp): Use LC_ALL=C when + running awk script. + +2007-07-01 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-sysdep.c (_dl_important_hwcaps): Add integer overflow check. + * elf/dl-minimal.c (__libc_memalign): Likewise. Handle malloc (0). + Return NULL if mmap failed instead of asserting it does not. + (calloc): Check for integer overflow. + + * elf/dl-minimal.c (__strtoul_internal): Fix parsing of numbers bigger + than LONG_MAX / 10. + +2007-07-03 Jakub Jelinek <jakub@redhat.com> + + [BZ #4702] + * nis/nss-default.c: Include errno.h. + (init): Preserve errno. + +2007-07-02 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/bits/socket.h (PF_UNIX): Update comment. + +2007-06-30 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/bits/socket.h: Add PF_RXRPC and AF_RXRPC. + +2007-06-29 Martin Schwidefsky <schwidefsky@de.ibm.com> + + * sysdeps/unix/sysv/linux/bits/socket.h: Add PF_IUCV and AF_IUCV. + +2007-06-29 Martin Schwidefsky <schwidefsky@de.ibm.com> + + * sysdeps/s390/dl-procinfo.c: New file. + * sysdeps/s390/dl-procinfo.h: New file. + * sysdeps/unix/sysv/linux/s390/dl-procinfo.h: New file. + +2007-06-29 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-load.c (open_verify): Find .note.ABI-tag notes even + in PT_NOTE segments with multiple notes. + * elf/readelflib.c (process_elf_file): Likewise. + +2007-06-22 Ulrich Drepper <drepper@redhat.com> + + * nis/nis_domain_of.c (__nis_domain_of): Make the code a bit more + ISO C compliant. + +2007-06-19 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-close.c (free_mem): Free _dl_scope_free_list. + +2007-06-13 Jakub Jelinek <jakub@redhat.com> + + * include/link.h: Don't include rtld-lowlevel.h. + (struct link_map): Remove l_scope_lock. + * sysdeps/generic/ldsodefs.h: Don't include rtld-lowlevel.h. + (_dl_scope_free_list): New field (variable) in _rtld_global. + (DL_LOOKUP_SCOPE_LOCK): Remove. + (_dl_scope_free): New prototype. + * elf/dl-runtime.c (_dl_fixup): Don't use __rtld_mrlock_*lock. + Don't pass DL_LOOKUP_SCOPE_LOCK to _dl_lookup_symbol_x. + (_dl_profile_fixup): Likewise. + * elf/dl-sym.c (do_sym): Likewise. Use wrapped _dl_lookup_symbol_x + whenever !RTLD_SINGLE_THREAD_P, use THREAD_GSCOPE_SET_FLAG and + THREAD_GSCOPE_RESET_FLAG around it. + * elf/dl-close.c (_dl_close_worker): Don't use + __rtld_mrlock_{change,done}. Call _dl_scope_free on the old + scope. Make sure THREAD_GSCOPE_WAIT () happens if any old + scopes were queued or if l_scope_mem has been abandoned. + * elf/dl-open.c (_dl_scope_free): New function. + (dl_open_worker): Use it. Don't use __rtld_mrlock_{change,done}. + * elf/dl-support.c (_dl_scope_free_list): New variable. + * elf/dl-lookup.c (add_dependency): Remove flags argument. + Remove DL_LOOKUP_SCOPE_LOCK handling. + (_dl_lookup_symbol_x): Adjust caller. Remove DL_LOOKUP_SCOPE_LOCK + handling. + * elf/dl-object.c (_dl_new_object): Don't use + __rtld_mrlock_initialize. + +2007-06-19 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/generic/ldsodefs.h (rtld_global): Reorder some elements + to fill in holes + (rtld_global_ro): Likewise. + +2007-06-18 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-addr.c (_dl_addr): Skip PT_LOAD checking if l_contiguous. + Move PT_LOAD checking to... + (_dl_addr_inside_object): ... here, new function. + * elf/dl-sym.c (do_sym): If not l_contiguous, + call _dl_addr_inside_object. + * elf/dl-iteratephdr.c (__dl_iterate_phdr): Likewise. + * dlfcn/dlinfo.c (dlinfo_doit): Likewise. + * elf/dl-open.c (dl_open_worker): Likewise. + (_dl_addr_inside_object): New function if IS_IN_rtld. + * elf/dl-load.c (_dl_map_object_from_fd): Set l_contiguous if no + holes are present or are PROT_NONE protected. + * include/link.h (struct link_map): Add l_contiguous field. + * sysdeps/generic/ldsodefs.h (_dl_addr_inside_object): New prototype. + +2007-06-18 Jakub Jelinek <jakub@redhat.com> + Tomas Janousek <tjanouse@redhat.com> + Ulrich Drepper <drepper@redhat.com> + + [BZ #4647] + * resolv/res_send.c (send_dg): Remove socket_pf. Use ipv6_unavail + member in __res_state, only convaddr4to6 if nssocks[ns] is a PF_INET6 + socket. + * resolv/resolv.h (__res_state): Add ipv6_unavail member. Make + unused member a bitmap. + * resolv/res_init.c (__res_vinit): Reset ipv6_unavail if IPv6 + servers are configured. + +2007-06-18 Jakub Jelinek <jakub@redhat.com> + + * elf/rtld.c (dl_main): Don't call init_tls more than once. + +2007-06-17 Andreas Schwab <schwab@suse.de> + + * sysdeps/generic/initfini.c: Tell gcc about the nonstandard sections. + +2007-06-16 Andreas Jaeger <aj@suse.de> + + [BZ #4125] + * sysdeps/unix/sysv/linux/sys/ptrace.h + (PTRACE_O_TRACESYSGOOD, PTRACE_O_TRACEFORK, + PTRACE_O_TRACEVFORK, PTRACE_O_TRACECLONE, PTRACE_O_TRACEEXEC, + PTRACE_O_TRACEVFORKDONE, PTRACE_O_TRACEEXIT, PTRACE_O_MASK, + PTRACE_EVENT_FORK, PTRACE_EVENT_VFORK, PTRACE_EVENT_CLONE, + PTRACE_EVENT_EXEC, PTRACE_EVENT_VFORK_DONE, PTRACE_EVENT_EXIT): + Define. + * sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/sys/ptrace.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/sys/ptrace.h: Likewise. + * sysdeps/unix/sysv/linux/s390/sys/ptrace.h: Likewise. + +2007-06-16 Ulrich Drepper <drepper@redhat.com> + + [BZ #4599] + * sysdeps/unix/sysv/linux/check_pf.c (make_request): When + determining whether there are IPv4/IPv6 addresses, ignore loopback + addresses. + +2007-06-14 Uros Bizjak <ubizjak@gmail.com> + + * soft-fp/soft-fp.h (CMPtype): Define to "int" if undefined. + * soft-fp/eqdf2.c (__eqdf2): Use CMPtype instead of int + as the return type. Change type of "r" variable to CMPtype. + * soft-fp/eqsf2.c (__eqsf2): Likewise. + * soft-fp/eqtf2.c (__eqtf2): Likewise. + * soft-fp/gedf2.c (__gedf2): Likewise. + * soft-fp/gesf2.c (__gesf2): Likewise. + * soft-fp/getf2.c (__getf2): Likewise. + * soft-fp/ledf2.c (__ledf2): Likewise. + * soft-fp/lesf2.c (__lesf2): Likewise. + * soft-fp/letf2.c (__letf2): Likewise. + * soft-fp/unorddf2 (__unorddf2): Likewise. + * soft-fp/unordsf2 (__unordsf2): Likewise. + * soft-fp/unordtf2 (__unordtf2): Likewise. + +2007-06-09 Ulrich Drepper <drepper@redhat.com> + + * elf/do-lookup.h (do_lookup_x): Read r_nlist before r_list and + make sure gcc doesn't mess around with this. + +2007-06-08 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-lookup.c (_dl_lookup_symbol_x): Remove use of r_nlist. + +2007-06-08 Jakub Jelinek <jakub@redhat.com> + + * elf/dl-close.c (_dl_close_worker): Remove all to be removed + libraries from the global scope at once and call THREAD_GSCOPE_WAIT + at most once per _dl_close_worker. + +2007-06-08 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/bits/sched.h: Make second parameter of + __sched_cpucount as const. + * posix/sched_cpucount.c: Adjust. + + * posix/sched_cpucount.c (__sched_cpucount): Allow using special + instruction for counting bits. + * sysdeps/x86_64/sched_cpucount.c: New file. + +2007-06-07 Ulrich Drepper <drepper@redhat.com> + + * configure.in: Avoid variable named BASH. + * config.make.in: Likewise. + Patch in part by Mike Frysinger. + +2007-06-06 Jakub Jelinek <jakub@redhat.com> + + [BZ #4586] + * sysdeps/i386/ldbl2mpn.c (__mpn_extract_long_double): Treat + pseudo-zeros as zero. + * sysdeps/x86_64/ldbl2mpn.c: New file. + * sysdeps/ia64/ldbl2mpn.c: New file. + +2007-06-04 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c (nextafterl): Remove + unused ily variable. Fix nextafterl on +-__LDBL_MAX__ and +-Inf. + Remove unreachable code at the end. + +2007-06-01 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c: Correct description of + ldbl-128ibm in comment. + (fpclassifyl): Correct classification of denormals. + * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c (nextafterl): Correct + return value for MIN denormal. Rewrite using long double math too + correctly handle denormals and canonicalize the results. + +2007-06-05 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c + (__mpn_construct_long_double): Fix conversion where result ought + to be smaller than __LDBL_MIN__, or the low double should be + denormal. Fix decision where to negate low double - honor round + to even rules. + * stdio-common/tst-sprintf2.c: Include string.h. + (COMPARE_LDBL): Define. + (TEST): Also test whether a string hexadecimal float representation + can be parsed back to the number. + (main): Add a couple of further tests. + 2007-06-04 Jakub Jelinek <jakub@redhat.com> * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c diff --git a/libc/Makeconfig b/libc/Makeconfig index a200aef1a..b480a5c9b 100644 --- a/libc/Makeconfig +++ b/libc/Makeconfig @@ -864,7 +864,7 @@ $(common-objpfx)gnu/lib-names.stmp: $(..)scripts/lib-names.awk \ $(common-objpfx)soversions.i $(make-target-directory) @rm -f ${@:stmp=T} $@ - $(AWK) -f $^ > ${@:stmp=T} + LC_ALL=C $(AWK) -f $^ > ${@:stmp=T} $(move-if-change) ${@:stmp=T} ${@:stmp=h} touch $@ endif diff --git a/libc/Makerules b/libc/Makerules index 72dde69d0..740386637 100644 --- a/libc/Makerules +++ b/libc/Makerules @@ -750,7 +750,9 @@ MAKEFLAGS := $(MAKEFLAGS)r # Generic rule for making directories. %/: # mkdir isn't smart enough to strip a trailing /. - mkdir $(@:%/=%) +# We always require a mkdir which supports the -p option to avoid error +# messages in case of races. + mkdir -p $(@:%/=%) # Make sure that object files are not removed # when they are intermediates between sources and library members. @@ -852,12 +854,13 @@ force-install: # $(install-lib) are installed from the object directory into $(libdir); # files in $(install-lib) matching `lib%.a' are ranlib'd after installation -# unless they also appear in $(non-lib.a). $(install-data) are installed -# as they are into $(datadir). $(headers) are installed as they are in +# unless they also appear in $(non-lib.a). $(install-data) are installed as +# they are into $(datadir). $(headers) are installed as they are in # $(includedir). $(install-bin), $(install-bin-script) and $(install-sbin) # are installed from the object directory into $(bindir), $(bindir) and -# $(sbindir), respectively. $(install-others) are absolute path names of -# files to install; rules to install them are defined elsewhere. +# $(sbindir), respectively. $(install-others) and $(install-others-programs) +# are absolute path names of files to install; rules to install them are +# defined elsewhere. # The simple library name to install libc.a under. # This could be defined by a sysdep Makefile. @@ -1162,6 +1165,7 @@ install-lib-nosubdir: $(addprefix $(inst_libdir)/,\ install-data-nosubdir: $(addprefix $(inst_datadir)/,$(install-data)) install-headers-nosubdir: $(addprefix $(inst_includedir)/,$(headers)) install-others-nosubdir: $(install-others) +install-others-programs-nosubdir: $(install-others-programs) # We need all the `-nosubdir' targets so that `install' in the parent # doesn't depend on several things which each iterate over the subdirs. @@ -1170,14 +1174,12 @@ install-others-nosubdir: $(install-others) install-%:: install-%-nosubdir ; .PHONY: install install-no-libc.a-nosubdir -ifeq ($(build-programs),yes) -install-no-libc.a-nosubdir: install-headers-nosubdir install-data-nosubdir\ - install-bin-nosubdir install-bin-script-nosubdir \ - install-lib-nosubdir install-others-nosubdir \ - install-rootsbin-nosubdir install-sbin-nosubdir -else -install-no-libc.a-nosubdir: install-headers-nosubdir install-data-nosubdir\ +install-no-libc.a-nosubdir: install-headers-nosubdir install-data-nosubdir \ install-lib-nosubdir install-others-nosubdir +ifeq ($(build-programs),yes) +install-no-libc.a-nosubdir: install-bin-nosubdir install-bin-script-nosubdir \ + install-rootsbin-nosubdir install-sbin-nosubdir \ + install-others-programs-nosubdir endif install: install-no-libc.a-nosubdir diff --git a/libc/bits/confname.h b/libc/bits/confname.h index 8947d48ed..80b51ac0b 100644 --- a/libc/bits/confname.h +++ b/libc/bits/confname.h @@ -1,5 +1,5 @@ /* `sysconf', `pathconf', and `confstr' NAME values. Generic version. - Copyright (C) 1993,1995-1998,2000,2001,2003,2004 + Copyright (C) 1993,1995-1998,2000,2001,2003,2004,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -509,7 +509,8 @@ enum #define _CS_PATH _CS_PATH _CS_V6_WIDTH_RESTRICTED_ENVS, -# define _CS_V6_WIDTH_RESTRICTED_ENVS _CS_V6_WIDTH_RESTRICTED_ENVS +#define _CS_V6_WIDTH_RESTRICTED_ENVS _CS_V6_WIDTH_RESTRICTED_ENVS +#define _CS_POSIX_V6_WIDTH_RESTRICTED_ENVS _CS_V6_WIDTH_RESTRICTED_ENVS _CS_GNU_LIBC_VERSION, #define _CS_GNU_LIBC_VERSION _CS_GNU_LIBC_VERSION diff --git a/libc/bits/sched.h b/libc/bits/sched.h index 32434a379..af92dbca3 100644 --- a/libc/bits/sched.h +++ b/libc/bits/sched.h @@ -68,7 +68,14 @@ typedef struct ((cpusetp)->__bits[__CPUELT (cpu)] &= ~__CPUMASK (cpu)) # define __CPU_ISSET(cpu, cpusetp) \ (((cpusetp)->__bits[__CPUELT (cpu)] & __CPUMASK (cpu)) != 0) -extern int __sched_cpucount (size_t __setsize, cpu_set_t *__setp) __THROW; + +__BEGIN_DECLS + +extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp) + __THROW; + +__END_DECLS + # define __CPU_COUNT(cpusetp) \ __sched_cpucount (sizeof (cpu_set_t), cpusetp) #endif diff --git a/libc/bits/types.h b/libc/bits/types.h index 65c8a9fe9..3ebe82f05 100644 --- a/libc/bits/types.h +++ b/libc/bits/types.h @@ -1,5 +1,5 @@ /* bits/types.h -- definitions of __*_t types underlying *_t types. - Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005, 2007 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,9 +27,6 @@ #include <features.h> #include <bits/wordsize.h> -#define __need_size_t -#include <stddef.h> - /* Convenience types. */ typedef unsigned char __u_char; typedef unsigned short int __u_short; diff --git a/libc/catgets/gencat.c b/libc/catgets/gencat.c index f5cbb8e1b..d8ce7af72 100644 --- a/libc/catgets/gencat.c +++ b/libc/catgets/gencat.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@redhat.com>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/config.make.in b/libc/config.make.in index 9608920a8..2d6c85b33 100644 --- a/libc/config.make.in +++ b/libc/config.make.in @@ -17,6 +17,7 @@ libexecdir = @libexecdir@ rootsbindir = @libc_cv_rootsbindir@ infodir = @infodir@ includedir = @includedir@ +datarootdir = @datarootdir@ # Should we use and build ldconfig? use-ldconfig = @use_ldconfig@ @@ -118,7 +119,7 @@ LN_S = @LN_S@ MSGFMT = @MSGFMT@ # Script execution tools. -BASH = @BASH@ +BASH = @BASH_SHELL@ KSH = @KSH@ AWK = @AWK@ PERL = @PERL@ diff --git a/libc/configure b/libc/configure index c90315502..c6854d5f1 100755 --- a/libc/configure +++ b/libc/configure @@ -313,7 +313,7 @@ ac_includes_default="\ # include <unistd.h> #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS with_fp with_cvs enable_check_abi oldest_abi bindnow force_install all_warnings build build_cpu build_vendor build_os host host_cpu host_vendor host_os subdirs add_ons add_on_subdirs base_machine submachine sysnames sysdeps_add_ons INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT BUILD_CC cross_compiling CPP CXX CXXFLAGS ac_ct_CXX AR NM OBJDUMP RANLIB ac_ct_RANLIB MIG AS LD PWD_P MAKE MSGFMT MAKEINFO SED AUTOCONF SYSINCLUDES CXX_SYSINCLUDES libc_cv_gcc_static_libgcc BASH libc_cv_have_bash2 KSH libc_cv_have_ksh AWK PERL INSTALL_INFO BISON VERSIONING libc_cv_cc_with_libunwind libc_cv_Bgroup libc_cv_libgcc_s_suffix libc_cv_as_needed ASFLAGS_config libc_cv_z_combreloc libc_cv_z_execstack libc_cv_fpie libc_cv_hashstyle fno_unit_at_a_time libc_cv_ssp libc_cv_gnu89_inline libc_cv_have_initfini no_whole_archive exceptions LIBGD have_libaudit have_libcap have_selinux EGREP sizeof_long_double libc_cv_gcc_unwind_find_fde uname_sysname uname_release uname_version old_glibc_headers libc_cv_slibdir libc_cv_localedir libc_cv_sysconfdir libc_cv_rootsbindir libc_cv_forced_unwind use_ldconfig ldd_rewrite_script elf xcoff static shared pic_default profile omitfp bounded static_nss nopic_initfini DEFINES mach_interface_list VERSION RELEASE LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS with_fp with_cvs enable_check_abi oldest_abi bindnow force_install all_warnings build build_cpu build_vendor build_os host host_cpu host_vendor host_os subdirs add_ons add_on_subdirs base_machine submachine sysnames sysdeps_add_ons INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT BUILD_CC cross_compiling CPP CXX CXXFLAGS ac_ct_CXX AR NM OBJDUMP RANLIB ac_ct_RANLIB MIG AS LD PWD_P MAKE MSGFMT MAKEINFO SED AUTOCONF SYSINCLUDES CXX_SYSINCLUDES libc_cv_gcc_static_libgcc BASH_SHELL libc_cv_have_bash2 KSH libc_cv_have_ksh AWK PERL INSTALL_INFO BISON VERSIONING libc_cv_cc_with_libunwind libc_cv_Bgroup libc_cv_libgcc_s_suffix libc_cv_as_needed ASFLAGS_config libc_cv_z_combreloc libc_cv_z_execstack libc_cv_fpie libc_cv_hashstyle fno_unit_at_a_time libc_cv_ssp libc_cv_gnu89_inline libc_cv_have_initfini no_whole_archive exceptions LIBGD have_libaudit have_libcap have_selinux EGREP sizeof_long_double libc_cv_gcc_unwind_find_fde uname_sysname uname_release uname_version old_glibc_headers libc_cv_slibdir libc_cv_localedir libc_cv_sysconfdir libc_cv_rootsbindir libc_cv_forced_unwind use_ldconfig ldd_rewrite_script elf xcoff static shared pic_default profile omitfp bounded static_nss nopic_initfini DEFINES mach_interface_list VERSION RELEASE LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -4657,12 +4657,12 @@ echo "${ECHO_T}$libc_cv_gcc_static_libgcc" >&6 set dummy bash; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_BASH+set}" = set; then +if test "${ac_cv_path_BASH_SHELL+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else - case $BASH in + case $BASH_SHELL in [\\/]* | ?:[\\/]*) - ac_cv_path_BASH="$BASH" # Let the user override the test with a path. + ac_cv_path_BASH_SHELL="$BASH_SHELL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4672,29 +4672,29 @@ do test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_BASH_SHELL="$as_dir/$ac_word$ac_exec_ext" echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done - test -z "$ac_cv_path_BASH" && ac_cv_path_BASH="no" + test -z "$ac_cv_path_BASH_SHELL" && ac_cv_path_BASH_SHELL="no" ;; esac fi -BASH=$ac_cv_path_BASH +BASH_SHELL=$ac_cv_path_BASH_SHELL -if test -n "$BASH"; then - echo "$as_me:$LINENO: result: $BASH" >&5 -echo "${ECHO_T}$BASH" >&6 +if test -n "$BASH_SHELL"; then + echo "$as_me:$LINENO: result: $BASH_SHELL" >&5 +echo "${ECHO_T}$BASH_SHELL" >&6 else echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6 fi -if test "$BASH" != no && - $BASH -c 'test "$BASH_VERSINFO" \ +if test "$BASH_SHELL" != no && + $BASH_SHELL -c 'test "$BASH_VERSINFO" \ && test "$BASH_VERSINFO" -ge 2 >&/dev/null'; then libc_cv_have_bash2=yes else @@ -4702,7 +4702,7 @@ else fi -if test "$BASH" = no; then +if test "$BASH_SHELL" = no; then # Extract the first word of "ksh", so it can be a program name with args. set dummy ksh; ac_word=$2 echo "$as_me:$LINENO: checking for $ac_word" >&5 @@ -4749,7 +4749,7 @@ fi libc_cv_have_ksh=yes fi else - KSH="$BASH" + KSH="$BASH_SHELL" libc_cv_have_ksh=yes fi @@ -8512,7 +8512,7 @@ s,@AUTOCONF@,$AUTOCONF,;t t s,@SYSINCLUDES@,$SYSINCLUDES,;t t s,@CXX_SYSINCLUDES@,$CXX_SYSINCLUDES,;t t s,@libc_cv_gcc_static_libgcc@,$libc_cv_gcc_static_libgcc,;t t -s,@BASH@,$BASH,;t t +s,@BASH_SHELL@,$BASH_SHELL,;t t s,@libc_cv_have_bash2@,$libc_cv_have_bash2,;t t s,@KSH@,$KSH,;t t s,@libc_cv_have_ksh@,$libc_cv_have_ksh,;t t diff --git a/libc/configure.in b/libc/configure.in index 1b582baa5..e6cf65a87 100644 --- a/libc/configure.in +++ b/libc/configure.in @@ -983,9 +983,9 @@ else fi]) AC_SUBST(libc_cv_gcc_static_libgcc) -AC_PATH_PROG(BASH, bash, no) -if test "$BASH" != no && - $BASH -c 'test "$BASH_VERSINFO" \ +AC_PATH_PROG(BASH_SHELL, bash, no) +if test "$BASH_SHELL" != no && + $BASH_SHELL -c 'test "$BASH_VERSINFO" \ && test "$BASH_VERSINFO" -ge 2 >&/dev/null'; then libc_cv_have_bash2=yes else @@ -994,7 +994,7 @@ fi AC_SUBST(libc_cv_have_bash2) dnl We need a ksh compatible shell for tzselect. -if test "$BASH" = no; then +if test "$BASH_SHELL" = no; then AC_PATH_PROG(KSH, ksh, no) if test "$KSH" = no; then libc_cv_have_ksh=no @@ -1002,7 +1002,7 @@ if test "$BASH" = no; then libc_cv_have_ksh=yes fi else - KSH="$BASH" + KSH="$BASH_SHELL" AC_SUBST(KSH) libc_cv_have_ksh=yes fi diff --git a/libc/csu/libc-start.c b/libc/csu/libc-start.c index 0ed993651..a14ed7161 100644 --- a/libc/csu/libc-start.c +++ b/libc/csu/libc-start.c @@ -138,16 +138,14 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL), functions are using thread functions if these are available and we need to setup errno. */ __pthread_initialize_minimal (); -#endif -# ifndef SHARED /* Set up the stack checker's canary. */ uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard (); -# ifdef THREAD_SET_STACK_GUARD +# ifdef THREAD_SET_STACK_GUARD THREAD_SET_STACK_GUARD (stack_chk_guard); -# else +# else __stack_chk_guard = stack_chk_guard; -# endif +# endif #endif /* Register the destructor of the dynamic linker if there is any. */ diff --git a/libc/debug/Makefile b/libc/debug/Makefile index 209a76893..768f55979 100644 --- a/libc/debug/Makefile +++ b/libc/debug/Makefile @@ -34,7 +34,7 @@ routines = backtrace backtracesyms backtracesymsfd noophooks \ gets_chk chk_fail readonly-area fgets_chk fgets_u_chk \ read_chk pread_chk pread64_chk recv_chk recvfrom_chk \ readlink_chk readlinkat_chk getwd_chk getcwd_chk \ - realpath_chk ptsname_r_chk \ + realpath_chk ptsname_r_chk fread_chk fread_u_chk \ wctomb_chk wcscpy_chk wmemcpy_chk wmemmove_chk wmempcpy_chk \ wcpcpy_chk wcsncpy_chk wcscat_chk wcsncat_chk wmemset_chk \ wcpncpy_chk \ @@ -61,6 +61,8 @@ 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-fread_chk.c = -D_IO_MTSAFE_IO $(exceptions) +CFLAGS-fread_u_chk.c = -D_IO_MTSAFE_IO $(exceptions) CFLAGS-swprintf_chk.c = -D_IO_MTSAFE_IO CFLAGS-vswprintf_chk.c = -D_IO_MTSAFE_IO CFLAGS-wprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions) @@ -75,6 +77,11 @@ CFLAGS-pread64_chk.c = -fexceptions -fasynchronous-unwind-tables CFLAGS-recv_chk.c = -fexceptions -fasynchronous-unwind-tables CFLAGS-recvfrom_chk.c = -fexceptions -fasynchronous-unwind-tables +# We know these tests have problems with format strings, this is what +# we are testing. Disable that warning. +CFLAGS-tst-chk1.c = -Wno-format +CFLAGS-tst-chk2.c = -Wno-format +CFLAGS-tst-chk3.c = -Wno-format tst-chk1-ENV = LOCPATH=$(common-objpfx)localedata tst-chk2-ENV = LOCPATH=$(common-objpfx)localedata tst-chk3-ENV = LOCPATH=$(common-objpfx)localedata diff --git a/libc/debug/Versions b/libc/debug/Versions index 5c87af27c..31c1e83a6 100644 --- a/libc/debug/Versions +++ b/libc/debug/Versions @@ -39,4 +39,7 @@ libc { GLIBC_2.5 { __readlinkat_chk; } + GLIBC_2.7 { + __fread_chk; __fread_unlocked_chk; + } } diff --git a/libc/debug/fprintf_chk.c b/libc/debug/fprintf_chk.c index 58b5fb2b3..77c50311f 100644 --- a/libc/debug/fprintf_chk.c +++ b/libc/debug/fprintf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2006 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -29,7 +29,7 @@ ___fprintf_chk (FILE *fp, int flag, const char *format, ...) va_list ap; int done; - _IO_acquire_lock (fp); + _IO_acquire_lock_clear_flags2 (fp); if (flag > 0) fp->_flags2 |= _IO_FLAGS2_FORTIFY; diff --git a/libc/debug/fread_chk.c b/libc/debug/fread_chk.c new file mode 100644 index 000000000..2dbe05e15 --- /dev/null +++ b/libc/debug/fread_chk.c @@ -0,0 +1,56 @@ +/* Copyright (C) 1993, 1995, 1997, 1998, 1999, 2002, 2003, 2007 + 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> + +size_t +__fread_chk (void *__restrict ptr, size_t ptrlen, + size_t size, size_t n, FILE *__restrict stream) +{ + size_t bytes_requested = size * n; + if (__builtin_expect ((n | size) + >= (((size_t) 1) << (8 * sizeof (size_t) / 2)), 0)) + { + if (size != 0 && bytes_requested / size != n) + __chk_fail (); + } + + if (__builtin_expect (bytes_requested > ptrlen, 0)) + __chk_fail (); + + CHECK_FILE (stream, 0); + if (bytes_requested == 0) + return 0; + + size_t bytes_read; + _IO_acquire_lock (stream); + bytes_read = INTUSE(_IO_sgetn) (stream, (char *) ptr, bytes_requested); + _IO_release_lock (stream); + return bytes_requested == bytes_read ? n : bytes_read / size; +} diff --git a/libc/debug/fread_u_chk.c b/libc/debug/fread_u_chk.c new file mode 100644 index 000000000..72a007e08 --- /dev/null +++ b/libc/debug/fread_u_chk.c @@ -0,0 +1,54 @@ +/* Copyright (C) 1993, 1995, 1997, 1998, 1999, 2002, 2003, 2007 + 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> + +size_t +__fread_unlocked_chk (void *__restrict ptr, size_t ptrlen, + size_t size, size_t n, FILE *__restrict stream) +{ + size_t bytes_requested = size * n; + if (__builtin_expect ((n | size) + >= (((size_t) 1) << (8 * sizeof (size_t) / 2)), 0)) + { + if (size != 0 && bytes_requested / size != n) + __chk_fail (); + } + + if (__builtin_expect (bytes_requested > ptrlen, 0)) + __chk_fail (); + + CHECK_FILE (stream, 0); + if (bytes_requested == 0) + return 0; + + size_t bytes_read + = INTUSE(_IO_sgetn) (stream, (char *) ptr, bytes_requested); + return bytes_requested == bytes_read ? n : bytes_read / size; +} diff --git a/libc/debug/fwprintf_chk.c b/libc/debug/fwprintf_chk.c index 710c89f3c..b7e3494c7 100644 --- a/libc/debug/fwprintf_chk.c +++ b/libc/debug/fwprintf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -29,7 +29,7 @@ __fwprintf_chk (FILE *fp, int flag, const wchar_t *format, ...) va_list ap; int done; - _IO_acquire_lock (fp); + _IO_acquire_lock_clear_flags2 (fp); if (flag > 0) fp->_flags2 |= _IO_FLAGS2_FORTIFY; diff --git a/libc/debug/pcprofiledump.c b/libc/debug/pcprofiledump.c index 210e5089e..62c0d73f4 100644 --- a/libc/debug/pcprofiledump.c +++ b/libc/debug/pcprofiledump.c @@ -1,5 +1,5 @@ /* Dump information generated by PC profiling. - Copyright (C) 1999, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999. @@ -37,6 +37,7 @@ #include "../version.h" +#define PACKAGE _libc_intl_domainname #ifndef _ # define _(Str) gettext (Str) @@ -75,14 +76,17 @@ static struct argp argp = int main (int argc, char *argv[]) { - int fd; - int remaining; - int must_swap; - uint32_t word; + /* Set locale via LC_ALL. */ + setlocale (LC_ALL, ""); + + /* Set the text message domain. */ + textdomain (PACKAGE); /* Parse and process arguments. */ + int remaining; argp_parse (&argp, argc, argv, 0, &remaining, NULL); + int fd; if (remaining == argc) fd = STDIN_FILENO; else if (remaining + 1 != argc) @@ -102,11 +106,12 @@ main (int argc, char *argv[]) /* Read the first 4-byte word. It contains the information about the word size and the endianess. */ + uint32_t word; if (TEMP_FAILURE_RETRY (read (fd, &word, 4)) != 4) error (EXIT_FAILURE, errno, _("cannot read header")); /* Check whether we have to swap the byte order. */ - must_swap = (word & 0xfffffff0) == bswap_32 (0xdeb00000); + int must_swap = (word & 0xfffffff0) == bswap_32 (0xdeb00000); if (must_swap) word = bswap_32 (word); diff --git a/libc/debug/printf_chk.c b/libc/debug/printf_chk.c index b8f00965d..7bea9f6b0 100644 --- a/libc/debug/printf_chk.c +++ b/libc/debug/printf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2006 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -29,7 +29,7 @@ ___printf_chk (int flag, const char *format, ...) va_list ap; int done; - _IO_acquire_lock (stdout); + _IO_acquire_lock_clear_flags2 (stdout); if (flag > 0) stdout->_flags2 |= _IO_FLAGS2_FORTIFY; diff --git a/libc/debug/segfault.c b/libc/debug/segfault.c index f141fff66..413f20720 100644 --- a/libc/debug/segfault.c +++ b/libc/debug/segfault.c @@ -1,5 +1,5 @@ /* Catch segmentation faults and print backtrace. - Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 + Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -42,7 +42,7 @@ /* Get code to possibly dump the content of all registers. */ #include <register-dump.h> -/* We'll use tis a lot. */ +/* We'll use this a lot. */ #define WRITE_STRING(s) write (fd, s, strlen (s)) /* Name of the output file. */ @@ -67,7 +67,7 @@ write_strsignal (int fd, int signal) /* This function is called when a segmentation fault is caught. The system - is in an instable state now. This means especially that malloc() might + is in an unstable state now. This means especially that malloc() might not work anymore. */ static void catch_segfault (int signal, SIGCONTEXT ctx) diff --git a/libc/debug/test-strcpy_chk.c b/libc/debug/test-strcpy_chk.c index ac9f9448c..e08141dad 100644 --- a/libc/debug/test-strcpy_chk.c +++ b/libc/debug/test-strcpy_chk.c @@ -141,8 +141,8 @@ do_test (size_t align1, size_t align2, size_t len, size_t dlen, int max_char) if (align2 + len >= page_size) return; - s1 = buf1 + align1; - s2 = buf2 + align2; + s1 = (char *) buf1 + align1; + s2 = (char *) buf2 + align2; for (i = 0; i < len; i++) s1[i] = 32 + 23 * i % (max_char - 32); @@ -233,7 +233,9 @@ do_random_tests (void) chk_fail_ok = 1; if (setjmp (chk_fail_buf) == 0) { - res = CALL (impl, p2 + align2, p1 + align1, dlen); + res = (unsigned char *) + CALL (impl, (char *) p2 + align2, + (char *) p1 + align1, dlen); printf ("Iteration %zd - did not __chk_fail\n", n); chk_fail_ok = 0; ret = 1; @@ -242,7 +244,8 @@ do_random_tests (void) continue; } memset (p2 - 64, '\1', 512 + 64); - res = CALL (impl, p2 + align2, p1 + align1, dlen); + res = (unsigned char *) + CALL (impl, (char *) p2 + align2, (char *) p1 + align1, dlen); if (res != STRCPY_RESULT (p2 + align2, len)) { printf ("\ diff --git a/libc/debug/tst-chk1.c b/libc/debug/tst-chk1.c index 993dab63b..26ace2897 100644 --- a/libc/debug/tst-chk1.c +++ b/libc/debug/tst-chk1.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. @@ -746,6 +746,75 @@ do_test (void) CHK_FAIL_END #endif + rewind (stdin); + + if (fread (buf, 1, sizeof (buf), stdin) != sizeof (buf) + || memcmp (buf, "abcdefgh\nA", 10)) + FAIL (); + if (fread (buf, sizeof (buf), 1, stdin) != 1 + || memcmp (buf, "BCDEFGHI\na", 10)) + FAIL (); + + rewind (stdin); + + if (fread (buf, l0 + 1, sizeof (buf), stdin) != sizeof (buf) + || memcmp (buf, "abcdefgh\nA", 10)) + FAIL (); + if (fread (buf, sizeof (buf), l0 + 1, stdin) != 1 + || memcmp (buf, "BCDEFGHI\na", 10)) + FAIL (); + +#if __USE_FORTIFY_LEVEL >= 1 + CHK_FAIL_START + if (fread (buf, 1, sizeof (buf) + 1, stdin) != sizeof (buf) + 1) + FAIL (); + CHK_FAIL_END + + CHK_FAIL_START + if (fread (buf, sizeof (buf) + 1, l0 + 1, stdin) != 1) + FAIL (); + CHK_FAIL_END +#endif + + rewind (stdin); + + if (fread_unlocked (buf, 1, sizeof (buf), stdin) != sizeof (buf) + || memcmp (buf, "abcdefgh\nA", 10)) + FAIL (); + if (fread_unlocked (buf, sizeof (buf), 1, stdin) != 1 + || memcmp (buf, "BCDEFGHI\na", 10)) + FAIL (); + + rewind (stdin); + + if (fread_unlocked (buf, 1, 4, stdin) != 4 + || memcmp (buf, "abcdFGHI\na", 10)) + FAIL (); + if (fread_unlocked (buf, 4, 1, stdin) != 1 + || memcmp (buf, "efghFGHI\na", 10)) + FAIL (); + + rewind (stdin); + + if (fread_unlocked (buf, l0 + 1, sizeof (buf), stdin) != sizeof (buf) + || memcmp (buf, "abcdefgh\nA", 10)) + FAIL (); + if (fread_unlocked (buf, sizeof (buf), l0 + 1, stdin) != 1 + || memcmp (buf, "BCDEFGHI\na", 10)) + FAIL (); + +#if __USE_FORTIFY_LEVEL >= 1 + CHK_FAIL_START + if (fread_unlocked (buf, 1, sizeof (buf) + 1, stdin) != sizeof (buf) + 1) + FAIL (); + CHK_FAIL_END + + CHK_FAIL_START + if (fread_unlocked (buf, sizeof (buf) + 1, l0 + 1, stdin) != 1) + FAIL (); + CHK_FAIL_END +#endif + lseek (fileno (stdin), 0, SEEK_SET); if (read (fileno (stdin), buf, sizeof (buf) - 1) != sizeof (buf) - 1 diff --git a/libc/debug/vfprintf_chk.c b/libc/debug/vfprintf_chk.c index bd2796eaf..7146986d5 100644 --- a/libc/debug/vfprintf_chk.c +++ b/libc/debug/vfprintf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005, 2006 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -28,7 +28,7 @@ ___vfprintf_chk (FILE *fp, int flag, const char *format, va_list ap) { int done; - _IO_acquire_lock (fp); + _IO_acquire_lock_clear_flags2 (fp); if (flag > 0) fp->_flags2 |= _IO_FLAGS2_FORTIFY; diff --git a/libc/debug/vfwprintf_chk.c b/libc/debug/vfwprintf_chk.c index a2612d53e..f0ae041c2 100644 --- a/libc/debug/vfwprintf_chk.c +++ b/libc/debug/vfwprintf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005, 2006 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -28,7 +28,7 @@ __vfwprintf_chk (FILE *fp, int flag, const wchar_t *format, va_list ap) { int done; - _IO_acquire_lock (fp); + _IO_acquire_lock_clear_flags2 (fp); if (flag > 0) fp->_flags2 |= _IO_FLAGS2_FORTIFY; diff --git a/libc/debug/vprintf_chk.c b/libc/debug/vprintf_chk.c index 68a63ee7f..68ff4909b 100644 --- a/libc/debug/vprintf_chk.c +++ b/libc/debug/vprintf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2006 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -28,7 +28,7 @@ ___vprintf_chk (int flag, const char *format, va_list ap) { int done; - _IO_acquire_lock (stdout); + _IO_acquire_lock_clear_flags2 (stdout); if (flag > 0) stdout->_flags2 |= _IO_FLAGS2_FORTIFY; diff --git a/libc/debug/vwprintf_chk.c b/libc/debug/vwprintf_chk.c index 3b959b296..48306a743 100644 --- a/libc/debug/vwprintf_chk.c +++ b/libc/debug/vwprintf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -29,7 +29,7 @@ __vwprintf_chk (int flag, const wchar_t *format, va_list ap) { int done; - _IO_acquire_lock (stdout); + _IO_acquire_lock_clear_flags2 (stdout); if (flag > 0) stdout->_flags2 |= _IO_FLAGS2_FORTIFY; diff --git a/libc/debug/wprintf_chk.c b/libc/debug/wprintf_chk.c index e0a82617a..ef60f8a9f 100644 --- a/libc/debug/wprintf_chk.c +++ b/libc/debug/wprintf_chk.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005 +/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -30,7 +30,7 @@ __wprintf_chk (int flag, const wchar_t *format, ...) va_list ap; int done; - _IO_acquire_lock (stdout); + _IO_acquire_lock_clear_flags2 (stdout); if (flag > 0) stdout->_flags2 |= _IO_FLAGS2_FORTIFY; diff --git a/libc/dlfcn/Makefile b/libc/dlfcn/Makefile index 468f79861..64e3fed7a 100644 --- a/libc/dlfcn/Makefile +++ b/libc/dlfcn/Makefile @@ -23,7 +23,8 @@ libdl-routines := dlopen dlclose dlsym dlvsym dlerror dladdr dladdr1 dlinfo \ dlmopen dlfcn routines := $(patsubst %,s%,$(filter-out dlfcn,$(libdl-routines))) elide-routines.os := $(routines) -distribute := dlopenold.c glreflib1.c glreflib2.c failtestmod.c \ +distribute := dlopenold.c glreflib1.c glreflib2.c glreflib3.c \ + failtestmod.c \ defaultmod1.c defaultmod2.c errmsg1mod.c modatexit.c \ modcxaatexit.c modstatic.c modstatic2.c \ bug-dlsym1-lib1.c bug-dlsym1-lib2.c bug-atexit1-lib.c \ @@ -43,8 +44,8 @@ tests = glrefmain failtest tst-dladdr default errmsg1 tstcxaatexit \ bug-dlopen1 bug-dlsym1 tst-dlinfo bug-atexit1 bug-atexit2 \ bug-atexit3 tstatexit endif -modules-names = glreflib1 glreflib2 failtestmod defaultmod1 defaultmod2 \ - errmsg1mod modatexit modcxaatexit \ +modules-names = glreflib1 glreflib2 glreflib3 failtestmod defaultmod1 \ + defaultmod2 errmsg1mod modatexit modcxaatexit \ bug-dlsym1-lib1 bug-dlsym1-lib2 bug-atexit1-lib \ bug-atexit2-lib bug-atexit3-lib @@ -85,7 +86,8 @@ $(objpfx)tst-dladdr: $(libdl) $(objpfx)tst-dladdr.out: $(objpfx)glreflib1.so $(objpfx)tst-dlinfo: $(libdl) -$(objpfx)tst-dlinfo.out: $(objpfx)glreflib1.so +$(objpfx)tst-dlinfo.out: $(objpfx)glreflib3.so +LDFLAGS-glreflib3.so = -Wl,-rpath,: LDFLAGS-default = $(LDFLAGS-rdynamic) $(objpfx)default: $(libdl) $(objpfx)defaultmod1.so $(objpfx)defaultmod2.so diff --git a/libc/dlfcn/dlinfo.c b/libc/dlfcn/dlinfo.c index 923127cbf..b3a3e1389 100644 --- a/libc/dlfcn/dlinfo.c +++ b/libc/dlfcn/dlinfo.c @@ -1,5 +1,5 @@ /* dlinfo -- Get information from the dynamic linker. - Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2006, 2007 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 @@ -56,9 +56,8 @@ dlinfo_doit (void *argsblock) /* Find the highest-addressed object that CALLER is not below. */ for (nsid = 0; nsid < DL_NNS; ++nsid) for (l = GL(dl_ns)[nsid]._ns_loaded; l != NULL; l = l->l_next) - if (caller >= l->l_map_start && caller < l->l_map_end) - /* There must be exactly one DSO for the range of the virtual - memory. Otherwise something is really broken. */ + if (caller >= l->l_map_start && caller < l->l_map_end + && (l->l_contiguous || _dl_addr_inside_object (l, caller))) break; if (l == NULL) diff --git a/libc/dlfcn/glreflib3.c b/libc/dlfcn/glreflib3.c new file mode 100644 index 000000000..5ac7befa6 --- /dev/null +++ b/libc/dlfcn/glreflib3.c @@ -0,0 +1 @@ +#include "glreflib1.c" diff --git a/libc/dlfcn/tst-dlinfo.c b/libc/dlfcn/tst-dlinfo.c index 70906ebdf..16355a1aa 100644 --- a/libc/dlfcn/tst-dlinfo.c +++ b/libc/dlfcn/tst-dlinfo.c @@ -29,7 +29,7 @@ do_test (void) { int status = 0; - void *handle = dlopen ("glreflib1.so", RTLD_NOW); + void *handle = dlopen ("glreflib3.so", RTLD_NOW); if (handle == NULL) error (EXIT_FAILURE, 0, "cannot load: glreflib1.so: %s", dlerror ()); diff --git a/libc/elf/Makefile b/libc/elf/Makefile index 16fe820b9..cafbaf3c3 100644 --- a/libc/elf/Makefile +++ b/libc/elf/Makefile @@ -308,7 +308,8 @@ $(objpfx)ld.so: $(objpfx)librtld.os $(ld-map) $(filter-out $(map-file),$^) $(load-map-file) \ -Wl,-soname=$(rtld-installed-name) -T $@.lds rm -f $@.lds - nm -u $@ | cmp -s /dev/null - + readelf -s $@ \ + | awk '($$7 ~ /^UND(|EF)$$/ && $$1 != "0:" && $$4 != "REGISTER") { print; p=1 } END { exit p != 0 }' # interp.c exists just to get this string into the libraries. CFLAGS-interp.c = -D'RUNTIME_LINKER="$(slibdir)/$(rtld-installed-name)"' \ @@ -843,28 +844,26 @@ $(objpfx)tst-dlmodcount: $(libdl) $(objpfx)tst-dlmodcount.out: $(test-modules) check-data := $(firstword $(wildcard \ - $(foreach M,$(config-machine) $(base-machine),\ - ../scripts/data/localplt-$M-$(config-os).data))) -ifneq (,$(check-data)) + $(patsubst %,../scripts/data/localplt-%.data,\ + $(addsuffix -$(config-os),\ + $(config-machine) $(base-machine))\ + generic))) tests: $(objpfx)check-localplt.out ifeq ($(have-thread-library),yes) thread-dso := $(filter-out %_nonshared.a, $(shared-thread-library)) endif -$(objpfx)check-localplt.out: $(objpfx)check-localplt $(common-objpfx)libc.so \ - $(common-objpfx)math/libm.so $(thread-dso) \ - $(common-objpfx)rt/librt.so \ - $(common-objpfx)dlfcn/libdl.so \ +$(objpfx)check-localplt.out: $(objpfx)check-localplt \ + $(common-objpfx)libc.so \ + $(common-objpfx)math/libm.so $(thread-dso) \ + $(common-objpfx)rt/librt.so \ + $(common-objpfx)dlfcn/libdl.so \ $(check-data) - $(objpfx)check-localplt $(common-objpfx)libc.so \ - $(common-objpfx)math/libm.so $(thread-dso) \ - $(common-objpfx)rt/librt.so \ - $(common-objpfx)dlfcn/libdl.so | \ + $(dir $<)$(notdir $<) $(filter-out $< $(check-data),$^) | \ LC_ALL=C sort | \ diff -u $(check-data) - > $@ endif -endif $(objpfx)tst-dlopenrpathmod.so: $(libdl) $(objpfx)tst-dlopenrpath: $(objpfx)tst-dlopenrpathmod.so $(libdl) diff --git a/libc/elf/cache.c b/libc/elf/cache.c index e18446644..9a600ea53 100644 --- a/libc/elf/cache.c +++ b/libc/elf/cache.c @@ -1,10 +1,11 @@ -/* Copyright (C) 1999-2003,2005,2006 Free Software Foundation, Inc. +/* Copyright (C) 1999-2003,2005,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger <aj@suse.de>, 1999. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -19,6 +20,7 @@ #include <error.h> #include <dirent.h> #include <inttypes.h> +#include <libgen.h> #include <libintl.h> #include <stdio.h> #include <stdlib.h> @@ -79,16 +81,16 @@ print_entry (const char *lib, int flag, unsigned int osversion, fputs (",x86-64", stdout); break; case FLAG_S390_LIB64: - fputs(",64bit", stdout); + fputs (",64bit", stdout); break; case FLAG_POWERPC_LIB64: - fputs(",64bit", stdout); + fputs (",64bit", stdout); break; case FLAG_MIPS64_LIBN32: - fputs(",N32", stdout); + fputs (",N32", stdout); break; case FLAG_MIPS64_LIBN64: - fputs(",64bit", stdout); + fputs (",64bit", stdout); case 0: break; default: @@ -127,19 +129,11 @@ print_entry (const char *lib, int flag, unsigned int osversion, void print_cache (const char *cache_name) { - size_t cache_size; - struct stat64 st; - int fd; - unsigned int i; - struct cache_file *cache; - struct cache_file_new *cache_new = NULL; - const char *cache_data; - int format = 0; - - fd = open (cache_name, O_RDONLY); + int fd = open (cache_name, O_RDONLY); if (fd < 0) error (EXIT_FAILURE, errno, _("Can't open cache file %s\n"), cache_name); + struct stat64 st; if (fstat64 (fd, &st) < 0 /* No need to map the file if it is empty. */ || st.st_size == 0) @@ -148,14 +142,19 @@ print_cache (const char *cache_name) return; } - cache = mmap (0, st.st_size, PROT_READ, MAP_SHARED, fd, 0); + struct cache_file *cache + = mmap (NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); if (cache == MAP_FAILED) error (EXIT_FAILURE, errno, _("mmap of cache file failed.\n")); - cache_size = st.st_size; + size_t cache_size = st.st_size; if (cache_size < sizeof (struct cache_file)) error (EXIT_FAILURE, 0, _("File is not a cache file.\n")); + struct cache_file_new *cache_new = NULL; + const char *cache_data; + int format = 0; + if (memcmp (cache->magic, CACHEMAGIC, sizeof CACHEMAGIC - 1)) { /* This can only be the new format without the old one. */ @@ -200,7 +199,7 @@ print_cache (const char *cache_name) printf (_("%d libs found in cache `%s'\n"), cache->nlibs, cache_name); /* Print everything. */ - for (i = 0; i < cache->nlibs; i++) + for (unsigned int i = 0; i < cache->nlibs; i++) print_entry (cache_data + cache->libs[i].key, cache->libs[i].flags, 0, 0, cache_data + cache->libs[i].value); @@ -211,7 +210,7 @@ print_cache (const char *cache_name) cache_new->nlibs, cache_name); /* Print everything. */ - for (i = 0; i < cache_new->nlibs; i++) + for (unsigned int i = 0; i < cache_new->nlibs; i++) print_entry (cache_data + cache_new->libs[i].key, cache_new->libs[i].flags, cache_new->libs[i].osversion, @@ -230,15 +229,11 @@ init_cache (void) entries = NULL; } - - -static -int compare (const struct cache_entry *e1, const struct cache_entry *e2) +static int +compare (const struct cache_entry *e1, const struct cache_entry *e2) { - int res; - /* We need to swap entries here to get the correct sort order. */ - res = _dl_cache_libcmp (e2->lib, e1->lib); + int res = _dl_cache_libcmp (e2->lib, e1->lib); if (res == 0) { if (e1->flags < e2->flags) @@ -266,29 +261,19 @@ int compare (const struct cache_entry *e1, const struct cache_entry *e2) void save_cache (const char *cache_name) { - struct cache_entry *entry; - int fd, idx_old, idx_new; - size_t total_strlen, len; - char *strings, *str, *temp_name; - struct cache_file *file_entries = NULL; - struct cache_file_new *file_entries_new = NULL; - size_t file_entries_size = 0; - size_t file_entries_new_size = 0; - unsigned int str_offset; - /* Number of cache entries. */ - int cache_entry_count = 0; - /* Number of normal cache entries. */ - int cache_entry_old_count = 0; - /* Pad for alignment of cache_file_new. */ - size_t pad; - /* The cache entries are sorted already, save them in this order. */ /* Count the length of all strings. */ /* The old format doesn't contain hwcap entries and doesn't contain libraries in subdirectories with hwcaps entries. Count therefore also all entries with hwcap == 0. */ - total_strlen = 0; + size_t total_strlen = 0; + struct cache_entry *entry; + /* Number of cache entries. */ + int cache_entry_count = 0; + /* Number of normal cache entries. */ + int cache_entry_old_count = 0; + for (entry = entries; entry != NULL; entry = entry->next) { /* Account the final NULs. */ @@ -299,8 +284,8 @@ save_cache (const char *cache_name) } /* Create the on disk cache structure. */ - /* First an array for all strings. */ - strings = (char *)xmalloc (total_strlen); + struct cache_file *file_entries = NULL; + size_t file_entries_size = 0; if (opt_format != 2) { @@ -314,25 +299,27 @@ save_cache (const char *cache_name) /* And the list of all entries in the old format. */ file_entries_size = sizeof (struct cache_file) + cache_entry_old_count * sizeof (struct file_entry); - file_entries = (struct cache_file *) xmalloc (file_entries_size); + file_entries = xmalloc (file_entries_size); /* Fill in the header. */ - memset (file_entries, 0, sizeof (struct cache_file)); + memset (file_entries, '\0', sizeof (struct cache_file)); memcpy (file_entries->magic, CACHEMAGIC, sizeof CACHEMAGIC - 1); file_entries->nlibs = cache_entry_old_count; } + struct cache_file_new *file_entries_new = NULL; + size_t file_entries_new_size = 0; + if (opt_format != 0) { /* And the list of all entries in the new format. */ file_entries_new_size = sizeof (struct cache_file_new) + cache_entry_count * sizeof (struct file_entry_new); - file_entries_new = - (struct cache_file_new *) xmalloc (file_entries_new_size); + file_entries_new = xmalloc (file_entries_new_size); /* Fill in the header. */ - memset (file_entries_new, 0, sizeof (struct cache_file_new)); + memset (file_entries_new, '\0', sizeof (struct cache_file_new)); memcpy (file_entries_new->magic, CACHEMAGIC_NEW, sizeof CACHEMAGIC_NEW - 1); memcpy (file_entries_new->version, CACHE_VERSION, @@ -342,17 +329,24 @@ save_cache (const char *cache_name) file_entries_new->len_strings = total_strlen; } - pad = ALIGN_CACHE (file_entries_size) - file_entries_size; + /* Pad for alignment of cache_file_new. */ + size_t pad = ALIGN_CACHE (file_entries_size) - file_entries_size; /* If we have both formats, we hide the new format in the strings table, we have to adjust all string indices for this so that old libc5/glibc 2 dynamic linkers just ignore them. */ + unsigned int str_offset; if (opt_format != 0) str_offset = file_entries_new_size; else str_offset = 0; - str = strings; + /* An array for all strings. */ + char *strings = xmalloc (total_strlen); + char *str = strings; + int idx_old; + int idx_new; + for (idx_old = 0, idx_new = 0, entry = entries; entry != NULL; entry = entry->next, ++idx_new) { @@ -374,21 +368,18 @@ save_cache (const char *cache_name) file_entries_new->libs[idx_new].hwcap = entry->hwcap; file_entries_new->libs[idx_new].key = str_offset; } - len = strlen (entry->lib); - str = stpcpy (str, entry->lib); - /* Account the final NUL. */ - ++str; - str_offset += len + 1; + + size_t len = strlen (entry->lib) + 1; + str = mempcpy (str, entry->lib, len); + str_offset += len; /* Then the path. */ if (opt_format != 2 && entry->hwcap == 0) file_entries->libs[idx_old].value = str_offset + pad; if (opt_format != 0) file_entries_new->libs[idx_new].value = str_offset; - len = strlen (entry->path); - str = stpcpy (str, entry->path); - /* Account the final NUL. */ - ++str; - str_offset += len + 1; + len = strlen (entry->path) + 1; + str = mempcpy (str, entry->path, len); + str_offset += len; /* Ignore entries with hwcap for old format. */ if (entry->hwcap == 0) ++idx_old; @@ -402,16 +393,12 @@ save_cache (const char *cache_name) /* Write out the cache. */ /* Write cache first to a temporary file and rename it later. */ - temp_name = xmalloc (strlen (cache_name) + 2); + char *temp_name = xmalloc (strlen (cache_name) + 2); sprintf (temp_name, "%s~", cache_name); - /* First remove an old copy if it exists. */ - if (unlink (temp_name) && errno != ENOENT) - error (EXIT_FAILURE, errno, _("Can't remove old temporary cache file %s"), - temp_name); /* Create file. */ - fd = open (temp_name, O_CREAT|O_WRONLY|O_TRUNC|O_NOFOLLOW, - S_IROTH|S_IRGRP|S_IRUSR|S_IWUSR); + int fd = open (temp_name, O_CREAT|O_WRONLY|O_TRUNC|O_NOFOLLOW, + S_IRUSR|S_IWUSR); if (fd < 0) error (EXIT_FAILURE, errno, _("Can't create temporary cache file %s"), temp_name); @@ -438,11 +425,10 @@ save_cache (const char *cache_name) error (EXIT_FAILURE, errno, _("Writing of cache data failed")); } - if (write (fd, strings, total_strlen) != (ssize_t) total_strlen) + if (write (fd, strings, total_strlen) != (ssize_t) total_strlen + || close (fd)) error (EXIT_FAILURE, errno, _("Writing of cache data failed")); - close (fd); - /* Make sure user can always read cache file */ if (chmod (temp_name, S_IROTH|S_IRGRP|S_IRUSR|S_IWUSR)) error (EXIT_FAILURE, errno, @@ -462,8 +448,6 @@ save_cache (const char *cache_name) while (entries) { entry = entries; - free (entry->path); - free (entry->lib); entries = entries->next; free (entry); } @@ -475,33 +459,29 @@ void add_to_cache (const char *path, const char *lib, int flags, unsigned int osversion, uint64_t hwcap) { - struct cache_entry *new_entry, *ptr, *prev; - char *full_path; - size_t len, i; - - new_entry = (struct cache_entry *) xmalloc (sizeof (struct cache_entry)); - - len = strlen (lib) + strlen (path) + 2; - - full_path = (char *) xmalloc (len); - snprintf (full_path, len, "%s/%s", path, lib); - - new_entry->lib = xstrdup (lib); - new_entry->path = full_path; + size_t liblen = strlen (lib) + 1; + size_t len = liblen + strlen (path) + 1; + struct cache_entry *new_entry + = xmalloc (sizeof (struct cache_entry) + liblen + len); + + new_entry->lib = memcpy ((char *) (new_entry + 1), lib, liblen); + new_entry->path = new_entry->lib + liblen; + snprintf (new_entry->path, len, "%s/%s", path, lib); new_entry->flags = flags; new_entry->osversion = osversion; new_entry->hwcap = hwcap; new_entry->bits_hwcap = 0; /* Count the number of bits set in the masked value. */ - for (i = 0; (~((1ULL << i) - 1) & hwcap) != 0 && i < 8 * sizeof (hwcap); ++i) + for (size_t i = 0; + (~((1ULL << i) - 1) & hwcap) != 0 && i < 8 * sizeof (hwcap); ++i) if ((hwcap & (1ULL << i)) != 0) ++new_entry->bits_hwcap; /* Keep the list sorted - search for right place to insert. */ - ptr = entries; - prev = entries; + struct cache_entry *ptr = entries; + struct cache_entry *prev = entries; while (ptr != NULL) { if (compare (ptr, new_entry) > 0) @@ -521,3 +501,304 @@ add_to_cache (const char *path, const char *lib, int flags, prev->next = new_entry; } } + + +/* Auxiliary cache. */ + +struct aux_cache_entry_id +{ + uint64_t ino; + uint64_t ctime; + uint64_t size; + uint64_t dev; +}; + +struct aux_cache_entry +{ + struct aux_cache_entry_id id; + int flags; + unsigned int osversion; + int used; + char *soname; + struct aux_cache_entry *next; +}; + +#define AUX_CACHEMAGIC "glibc-ld.so.auxcache-1.0" + +struct aux_cache_file_entry +{ + struct aux_cache_entry_id id; /* Unique id of entry. */ + int32_t flags; /* This is 1 for an ELF library. */ + uint32_t soname; /* String table indice. */ + uint32_t osversion; /* Required OS version. */ + int32_t pad; +}; + +/* ldconfig maintains an auxiliary cache file that allows + only reading those libraries that have changed since the last iteration. + For this for each library some information is cached in the auxiliary + cache. */ +struct aux_cache_file +{ + char magic[sizeof AUX_CACHEMAGIC - 1]; + uint32_t nlibs; /* Number of entries. */ + uint32_t len_strings; /* Size of string table. */ + struct aux_cache_file_entry libs[0]; /* Entries describing libraries. */ + /* After this the string table of size len_strings is found. */ +}; + +static const unsigned int primes[] = +{ + 1021, 2039, 4093, 8191, 16381, 32749, 65521, 131071, 262139, + 524287, 1048573, 2097143, 4194301, 8388593, 16777213, 33554393, + 67108859, 134217689, 268435399, 536870909, 1073741789, 2147483647 +}; + +static size_t aux_hash_size; +static struct aux_cache_entry **aux_hash; + +/* Simplistic hash function for aux_cache_entry_id. */ +static unsigned int +aux_cache_entry_id_hash (struct aux_cache_entry_id *id) +{ + uint64_t ret = ((id->ino * 11 + id->ctime) * 11 + id->size) * 11 + id->dev; + return ret ^ (ret >> 32); +} + +static size_t nextprime (size_t x) +{ + for (unsigned int i = 0; i < sizeof (primes) / sizeof (primes[0]); ++i) + if (primes[i] >= x) + return primes[i]; + return x; +} + +void +init_aux_cache (void) +{ + aux_hash_size = primes[3]; + aux_hash = xcalloc (aux_hash_size, sizeof (struct aux_cache_entry *)); +} + +int +search_aux_cache (struct stat64 *stat_buf, int *flags, + unsigned int *osversion, char **soname) +{ + struct aux_cache_entry_id id; + id.ino = (uint64_t) stat_buf->st_ino; + id.ctime = (uint64_t) stat_buf->st_ctime; + id.size = (uint64_t) stat_buf->st_size; + id.dev = (uint64_t) stat_buf->st_dev; + + unsigned int hash = aux_cache_entry_id_hash (&id); + struct aux_cache_entry *entry; + for (entry = aux_hash[hash % aux_hash_size]; entry; entry = entry->next) + if (id.ino == entry->id.ino + && id.ctime == entry->id.ctime + && id.size == entry->id.size + && id.dev == entry->id.dev) + { + *flags = entry->flags; + *osversion = entry->osversion; + if (entry->soname != NULL) + *soname = xstrdup (entry->soname); + else + *soname = NULL; + entry->used = 1; + return 1; + } + + return 0; +} + +static void +insert_to_aux_cache (struct aux_cache_entry_id *id, int flags, + unsigned int osversion, const char *soname, int used) +{ + size_t hash = aux_cache_entry_id_hash (id) % aux_hash_size; + struct aux_cache_entry *entry; + for (entry = aux_hash[hash]; entry; entry = entry->next) + if (id->ino == entry->id.ino + && id->ctime == entry->id.ctime + && id->size == entry->id.size + && id->dev == entry->id.dev) + abort (); + + size_t len = soname ? strlen (soname) + 1 : 0; + entry = xmalloc (sizeof (struct aux_cache_entry) + len); + entry->id = *id; + entry->flags = flags; + entry->osversion = osversion; + entry->used = used; + if (soname != NULL) + entry->soname = memcpy ((char *) (entry + 1), soname, len); + else + entry->soname = NULL; + entry->next = aux_hash[hash]; + aux_hash[hash] = entry; +} + +void +add_to_aux_cache (struct stat64 *stat_buf, int flags, + unsigned int osversion, const char *soname) +{ + struct aux_cache_entry_id id; + id.ino = (uint64_t) stat_buf->st_ino; + id.ctime = (uint64_t) stat_buf->st_ctime; + id.size = (uint64_t) stat_buf->st_size; + id.dev = (uint64_t) stat_buf->st_dev; + insert_to_aux_cache (&id, flags, osversion, soname, 1); +} + +/* Load auxiliary cache to search for unchanged entries. */ +void +load_aux_cache (const char *aux_cache_name) +{ + int fd = open (aux_cache_name, O_RDONLY); + if (fd < 0) + { + init_aux_cache (); + return; + } + + struct stat64 st; + if (fstat64 (fd, &st) < 0 || st.st_size < sizeof (struct aux_cache_file)) + { + close (fd); + init_aux_cache (); + return; + } + + size_t aux_cache_size = st.st_size; + struct aux_cache_file *aux_cache + = mmap (NULL, aux_cache_size, PROT_READ, MAP_PRIVATE, fd, 0); + if (aux_cache == MAP_FAILED + || aux_cache_size < sizeof (struct aux_cache_file) + || memcmp (aux_cache->magic, AUX_CACHEMAGIC, sizeof AUX_CACHEMAGIC - 1) + || aux_cache->nlibs < 0 + || aux_cache->nlibs >= aux_cache_size) + { + close (fd); + init_aux_cache (); + return; + } + + aux_hash_size = nextprime (aux_cache->nlibs); + aux_hash = xcalloc (aux_hash_size, sizeof (struct aux_cache_entry *)); + + const char *aux_cache_data + = (const char *) &aux_cache->libs[aux_cache->nlibs]; + for (unsigned int i = 0; i < aux_cache->nlibs; ++i) + insert_to_aux_cache (&aux_cache->libs[i].id, + aux_cache->libs[i].flags, + aux_cache->libs[i].osversion, + aux_cache->libs[i].soname == 0 + ? NULL : aux_cache_data + aux_cache->libs[i].soname, + 0); + + munmap (aux_cache, aux_cache_size); + close (fd); +} + +/* Save the contents of the auxiliary cache. */ +void +save_aux_cache (const char *aux_cache_name) +{ + /* Count the length of all sonames. We start with empty string. */ + size_t total_strlen = 1; + /* Number of cache entries. */ + int cache_entry_count = 0; + + for (size_t i = 0; i < aux_hash_size; ++i) + for (struct aux_cache_entry *entry = aux_hash[i]; + entry != NULL; entry = entry->next) + if (entry->used) + { + ++cache_entry_count; + if (entry->soname != NULL) + total_strlen += strlen (entry->soname) + 1; + } + + /* Auxiliary cache. */ + size_t file_entries_size + = sizeof (struct aux_cache_file) + + cache_entry_count * sizeof (struct aux_cache_file_entry); + struct aux_cache_file *file_entries + = xmalloc (file_entries_size + total_strlen); + + /* Fill in the header of the auxiliary cache. */ + memset (file_entries, '\0', sizeof (struct aux_cache_file)); + memcpy (file_entries->magic, AUX_CACHEMAGIC, sizeof AUX_CACHEMAGIC - 1); + + file_entries->nlibs = cache_entry_count; + file_entries->len_strings = total_strlen; + + /* Initial String offset for auxiliary cache is always after the + special empty string. */ + unsigned int str_offset = 1; + + /* An array for all strings. */ + char *str = (char *) file_entries + file_entries_size; + *str++ = '\0'; + + size_t idx = 0; + for (size_t i = 0; i < aux_hash_size; ++i) + for (struct aux_cache_entry *entry = aux_hash[i]; + entry != NULL; entry = entry->next) + if (entry->used) + { + file_entries->libs[idx].id = entry->id; + file_entries->libs[idx].flags = entry->flags; + if (entry->soname == NULL) + file_entries->libs[idx].soname = 0; + else + { + file_entries->libs[idx].soname = str_offset; + + size_t len = strlen (entry->soname) + 1; + str = mempcpy (str, entry->soname, len); + str_offset += len; + } + file_entries->libs[idx].osversion = entry->osversion; + file_entries->libs[idx++].pad = 0; + } + + /* Write out auxiliary cache file. */ + /* Write auxiliary cache first to a temporary file and rename it later. */ + + char *temp_name = xmalloc (strlen (aux_cache_name) + 2); + sprintf (temp_name, "%s~", aux_cache_name); + + /* Check that directory exists and create if needed. */ + char *dir = strdupa (aux_cache_name); + dir = dirname (dir); + + struct stat64 st; + if (stat64 (dir, &st) < 0) + { + if (mkdir (dir, 0700) < 0) + goto out_fail; + } + + /* Create file. */ + int fd = open (temp_name, O_CREAT|O_WRONLY|O_TRUNC|O_NOFOLLOW, + S_IRUSR|S_IWUSR); + if (fd < 0) + goto out_fail; + + if (write (fd, file_entries, file_entries_size + total_strlen) + != (ssize_t) (file_entries_size + total_strlen) + || close (fd)) + { + unlink (temp_name); + goto out_fail; + } + + /* Move temporary to its final location. */ + if (rename (temp_name, aux_cache_name)) + unlink (temp_name); + +out_fail: + /* Free allocated memory. */ + free (file_entries); +} diff --git a/libc/elf/chroot_canon.c b/libc/elf/chroot_canon.c index 3ef2fdf08..3c16a43eb 100644 --- a/libc/elf/chroot_canon.c +++ b/libc/elf/chroot_canon.c @@ -4,8 +4,9 @@ This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/elf/dl-addr.c b/libc/elf/dl-addr.c index e13105572..17745b55b 100644 --- a/libc/elf/dl-addr.c +++ b/libc/elf/dl-addr.c @@ -134,22 +134,12 @@ _dl_addr (const void *address, Dl_info *info, /* Find the highest-addressed object that ADDRESS is not below. */ 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) + if (addr >= l->l_map_start && addr < l->l_map_end + && (l->l_contiguous || _dl_addr_inside_object (l, addr))) { - /* Make sure it lies within one of L's segments. */ - int n = l->l_phnum; - const ElfW(Addr) reladdr = addr - l->l_addr; - while (--n >= 0) - if (l->l_phdr[n].p_type == PT_LOAD) - { - if (reladdr - l->l_phdr[n].p_vaddr >= 0 - && reladdr - l->l_phdr[n].p_vaddr < l->l_phdr[n].p_memsz) - { - determine_info (addr, l, info, mapp, symbolp); - result = 1; - goto out; - } - } + determine_info (addr, l, info, mapp, symbolp); + result = 1; + goto out; } out: @@ -158,3 +148,19 @@ _dl_addr (const void *address, Dl_info *info, return result; } libc_hidden_def (_dl_addr) + +/* Return non-zero if ADDR lies within one of L's segments. */ +int +internal_function +_dl_addr_inside_object (struct link_map *l, const ElfW(Addr) addr) +{ + int n = l->l_phnum; + const ElfW(Addr) reladdr = addr - l->l_addr; + + while (--n >= 0) + if (l->l_phdr[n].p_type == PT_LOAD + && reladdr - l->l_phdr[n].p_vaddr >= 0 + && reladdr - l->l_phdr[n].p_vaddr < l->l_phdr[n].p_memsz) + return 1; + return 0; +} diff --git a/libc/elf/dl-close.c b/libc/elf/dl-close.c index 8e5c9fc03..67188bb6c 100644 --- a/libc/elf/dl-close.c +++ b/libc/elf/dl-close.c @@ -229,6 +229,8 @@ _dl_close_worker (struct link_map *map) bool do_audit = GLRO(dl_naudit) > 0 && !ns->_ns_loaded->l_auditing; #endif bool unload_any = false; + bool scope_mem_left = false; + unsigned int unload_global = 0; unsigned int first_loaded = ~0; for (unsigned int i = 0; i < nloaded; ++i) { @@ -293,6 +295,9 @@ _dl_close_worker (struct link_map *map) /* We indeed have an object to remove. */ unload_any = true; + if (imap->l_global) + ++unload_global; + /* Remember where the first dynamically loaded object is. */ if (i < first_loaded) first_loaded = i; @@ -401,18 +406,18 @@ _dl_close_worker (struct link_map *map) struct r_scope_elem **old = imap->l_scope; - if (RTLD_SINGLE_THREAD_P) - imap->l_scope = newp; - else - { - __rtld_mrlock_change (imap->l_scope_lock); - imap->l_scope = newp; - __rtld_mrlock_done (imap->l_scope_lock); - } + imap->l_scope = newp; /* No user anymore, we can free it now. */ if (old != imap->l_scope_mem) - free (old); + { + if (_dl_scope_free (old)) + /* If _dl_scope_free used THREAD_GSCOPE_WAIT (), + no need to repeat it. */ + scope_mem_left = false; + } + else + scope_mem_left = true; imap->l_scope_max = new_size; } @@ -458,6 +463,46 @@ _dl_close_worker (struct link_map *map) r->r_state = RT_DELETE; _dl_debug_state (); + if (unload_global) + { + /* Some objects are in the global scope list. Remove them. */ + struct r_scope_elem *ns_msl = ns->_ns_main_searchlist; + unsigned int i; + unsigned int j = 0; + unsigned int cnt = ns_msl->r_nlist; + + while (cnt > 0 && ns_msl->r_list[cnt - 1]->l_removed) + --cnt; + + if (cnt + unload_global == ns_msl->r_nlist) + /* Speed up removing most recently added objects. */ + j = cnt; + else + for (i = 0; i < cnt; i++) + if (ns_msl->r_list[i]->l_removed == 0) + { + if (i != j) + ns_msl->r_list[j] = ns_msl->r_list[i]; + j++; + } + ns_msl->r_nlist = j; + } + + if (!RTLD_SINGLE_THREAD_P + && (unload_global + || scope_mem_left + || (GL(dl_scope_free_list) != NULL + && GL(dl_scope_free_list)->count))) + { + THREAD_GSCOPE_WAIT (); + + /* Now we can free any queued old scopes. */ + struct dl_scope_free_list *fsl = GL(dl_scope_free_list); + if (fsl != NULL) + while (fsl->count > 0) + free (fsl->list[--fsl->count]); + } + size_t tls_free_start; size_t tls_free_end; tls_free_start = tls_free_end = NO_TLS_OFFSET; @@ -473,25 +518,6 @@ _dl_close_worker (struct link_map *map) /* That was the last reference, and this was a dlopen-loaded object. We can unmap it. */ - if (__builtin_expect (imap->l_global, 0)) - { - /* This object is in the global scope list. Remove it. */ - struct r_scope_elem *ns_msl = ns->_ns_main_searchlist; - unsigned int cnt = ns_msl->r_nlist; - - do - --cnt; - while (ns_msl->r_list[cnt] != imap); - - /* The object was already correctly registered. */ - while (++cnt < ns_msl->r_nlist) - ns_msl->r_list[cnt - 1] = ns_msl->r_list[cnt]; - - --ns_msl->r_nlist; - - if (!RTLD_SINGLE_THREAD_P) - THREAD_GSCOPE_WAIT (); - } /* Remove the object from the dtv slotinfo array if it uses TLS. */ if (__builtin_expect (imap->l_tls_blocksize > 0, 0)) @@ -773,4 +799,8 @@ libc_freeres_fn (free_mem) malloc), and in the static library it's in .bss space. */ free_slotinfo (&GL(dl_tls_dtv_slotinfo_list)->next); } + + void *scope_free_list = GL(dl_scope_free_list); + GL(dl_scope_free_list) = NULL; + free (scope_free_list); } diff --git a/libc/elf/dl-dst.h b/libc/elf/dl-dst.h index 175b7cd19..76076a603 100644 --- a/libc/elf/dl-dst.h +++ b/libc/elf/dl-dst.h @@ -29,9 +29,6 @@ __cnt = _dl_dst_count (__sf, is_path); \ \ __cnt; }) -#ifndef IS_IN_rtld -# define _dl_dst_count GLRO(dl_dst_count) -#endif /* Guess from the number of DSTs the length of the result string. */ @@ -79,8 +76,3 @@ } \ else #endif - -#ifndef IS_IN_rtld -# define _dl_get_origin GLRO(dl_get_origin) -# define _dl_dst_substitute GLRO(dl_dst_substitute) -#endif diff --git a/libc/elf/dl-iteratephdr.c b/libc/elf/dl-iteratephdr.c index d03d8b6da..55cf10852 100644 --- a/libc/elf/dl-iteratephdr.c +++ b/libc/elf/dl-iteratephdr.c @@ -1,5 +1,5 @@ /* Get loaded objects program headers. - Copyright (C) 2001,2002,2003,2004,2006 Free Software Foundation, Inc. + Copyright (C) 2001,2002,2003,2004,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2001. @@ -54,9 +54,9 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, nloaded += GL(dl_ns)[cnt]._ns_nloaded; if (caller >= (const void *) l->l_map_start - && caller < (const void *) l->l_map_end) - /* There must be exactly one DSO for the range of the virtual - memory. Otherwise something is really broken. */ + && caller < (const void *) l->l_map_end + && (l->l_contiguous + || _dl_addr_inside_object (l, (ElfW(Addr)) caller))) ns = cnt; } diff --git a/libc/elf/dl-load.c b/libc/elf/dl-load.c index 1650ef953..98d25b827 100644 --- a/libc/elf/dl-load.c +++ b/libc/elf/dl-load.c @@ -1,5 +1,5 @@ /* Map in a shared object's segments from the file. - Copyright (C) 1995-2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2005, 2006, 2007 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 @@ -578,6 +578,7 @@ decompose_rpath (struct r_search_path_struct *sps, * sizeof (*result)); if (result == NULL) { + free (copy); errstring = N_("cannot create cache for search path"); signal_error: _dl_signal_error (ENOMEM, NULL, NULL, errstring); @@ -1223,6 +1224,8 @@ cannot allocate TLS data structures for initial thread"); loadcmds[nloadcmds - 1].mapstart - c->mapend, PROT_NONE); + l->l_contiguous = 1; + goto postmap; } @@ -1242,6 +1245,7 @@ cannot allocate TLS data structures for initial thread"); /* Remember which part of the address space this object uses. */ l->l_map_start = c->mapstart + l->l_addr; l->l_map_end = l->l_map_start + maplength; + l->l_contiguous = !has_holes; while (c < &loadcmds[nloadcmds]) { @@ -1631,7 +1635,7 @@ open_verify (const char *name, struct filebuf *fbp, struct link_map *loader, { ElfW(Ehdr) *ehdr; ElfW(Phdr) *phdr, *ph; - ElfW(Word) *abi_note, abi_note_buf[8]; + ElfW(Word) *abi_note; unsigned int osversion; size_t maplength; @@ -1748,20 +1752,37 @@ open_verify (const char *name, struct filebuf *fbp, struct link_map *loader, /* Check .note.ABI-tag if present. */ for (ph = phdr; ph < &phdr[ehdr->e_phnum]; ++ph) - if (ph->p_type == PT_NOTE && ph->p_filesz == 32 && ph->p_align >= 4) + if (ph->p_type == PT_NOTE && ph->p_filesz >= 32 && ph->p_align >= 4) { - if (ph->p_offset + 32 <= (size_t) fbp->len) + ElfW(Addr) size = ph->p_filesz; + + if (ph->p_offset + size <= (size_t) fbp->len) abi_note = (void *) (fbp->buf + ph->p_offset); else { + abi_note = alloca (size); __lseek (fd, ph->p_offset, SEEK_SET); - if (__libc_read (fd, (void *) abi_note_buf, 32) != 32) + if (__libc_read (fd, (void *) abi_note, size) != size) goto read_error; + } + + while (memcmp (abi_note, &expected_note, sizeof (expected_note))) + { +#define ROUND(len) (((len) + sizeof (ElfW(Word)) - 1) & -sizeof (ElfW(Word))) + ElfW(Addr) note_size = 3 * sizeof (ElfW(Word)) + + ROUND (abi_note[0]) + + ROUND (abi_note[1]); - abi_note = abi_note_buf; + if (size - 32 < note_size) + { + size = 0; + break; + } + size -= note_size; + abi_note = (void *) abi_note + note_size; } - if (memcmp (abi_note, &expected_note, sizeof (expected_note))) + if (size == 0) continue; osversion = (abi_note[5] & 0xff) * 65536 @@ -2253,14 +2274,17 @@ _dl_rtld_di_serinfo (struct link_map *loader, Dl_serinfo *si, bool counting) if (counting) { si->dls_cnt++; - si->dls_size += r->dirnamelen; + si->dls_size += r->dirnamelen < 2 ? r->dirnamelen : 2; } else { Dl_serpath *const sp = &si->dls_serpath[idx++]; sp->dls_name = allocptr; - allocptr = __mempcpy (allocptr, - r->dirname, r->dirnamelen - 1); + if (r->dirnamelen < 2) + *allocptr++ = r->dirnamelen ? '/' : '.'; + else + allocptr = __mempcpy (allocptr, + r->dirname, r->dirnamelen - 1); *allocptr++ = '\0'; sp->dls_flags = flags; } diff --git a/libc/elf/dl-lookup.c b/libc/elf/dl-lookup.c index a6a958419..f4e5ce805 100644 --- a/libc/elf/dl-lookup.c +++ b/libc/elf/dl-lookup.c @@ -86,7 +86,7 @@ dl_new_hash (const char *s) /* Add extra dependency on MAP to UNDEF_MAP. */ static int internal_function -add_dependency (struct link_map *undef_map, struct link_map *map, int flags) +add_dependency (struct link_map *undef_map, struct link_map *map) { struct link_map **list; struct link_map *runp; @@ -99,18 +99,8 @@ add_dependency (struct link_map *undef_map, struct link_map *map, int flags) if (undef_map == map) return 0; - /* Make sure nobody can unload the object while we are at it. - If we hold a scope lock drop it now to avoid ABBA locking problems. */ - if ((flags & DL_LOOKUP_SCOPE_LOCK) != 0 && !RTLD_SINGLE_THREAD_P) - { - __rtld_mrlock_unlock (undef_map->l_scope_lock); - - __rtld_lock_lock_recursive (GL(dl_load_lock)); - - __rtld_mrlock_lock (undef_map->l_scope_lock); - } - else - __rtld_lock_lock_recursive (GL(dl_load_lock)); + /* Make sure nobody can unload the object while we are at it. */ + __rtld_lock_lock_recursive (GL(dl_load_lock)); /* Avoid references to objects which cannot be unloaded anyway. */ if (map->l_type != lt_loaded @@ -237,20 +227,15 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map, bump_num_relocations (); - /* No other flag than DL_LOOKUP_ADD_DEPENDENCY and DL_LOOKUP_SCOPE_LOCK - is allowed if we look up a versioned symbol. */ - assert (version == NULL || (flags & ~(DL_LOOKUP_ADD_DEPENDENCY - | DL_LOOKUP_SCOPE_LOCK)) == 0); + /* No other flag than DL_LOOKUP_ADD_DEPENDENCY is allowed if we look + up a versioned symbol. */ + assert (version == NULL || (flags & ~(DL_LOOKUP_ADD_DEPENDENCY)) == 0); size_t i = 0; if (__builtin_expect (skip_map != NULL, 0)) - { - /* Search the relevant loaded objects for a definition. */ - while ((*scope)->r_list[i] != skip_map) - ++i; - - assert (i < (*scope)->r_nlist); - } + /* Search the relevant loaded objects for a definition. */ + while ((*scope)->r_list[i] != skip_map) + ++i; /* Search the relevant loaded objects for a definition. */ for (size_t start = i; *scope != NULL; start = 0, ++scope) @@ -350,13 +335,11 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map, runtime lookups. */ && (flags & DL_LOOKUP_ADD_DEPENDENCY) != 0 /* Add UNDEF_MAP to the dependencies. */ - && add_dependency (undef_map, current_value.m, flags) < 0) + && add_dependency (undef_map, current_value.m) < 0) /* Something went wrong. Perhaps the object we tried to reference was just removed. Try finding another definition. */ - return _dl_lookup_symbol_x (undef_name, undef_map, ref, - (flags & DL_LOOKUP_SCOPE_LOCK) == 0 - ? symbol_scope : undef_map->l_scope, version, - type_class, flags, skip_map); + return _dl_lookup_symbol_x (undef_name, undef_map, ref, symbol_scope, + version, type_class, flags, skip_map); /* The object is used. */ current_value.m->l_used = 1; diff --git a/libc/elf/dl-minimal.c b/libc/elf/dl-minimal.c index 45524088e..5079c449f 100644 --- a/libc/elf/dl-minimal.c +++ b/libc/elf/dl-minimal.c @@ -75,14 +75,21 @@ __libc_memalign (size_t align, size_t n) alloc_ptr = (void *) 0 + (((alloc_ptr - (void *) 0) + align - 1) & ~(align - 1)); - if (alloc_ptr + n >= alloc_end) + if (alloc_ptr + n >= alloc_end || n >= -(uintptr_t) alloc_ptr) { /* Insufficient space left; allocate another page. */ caddr_t page; size_t nup = (n + GLRO(dl_pagesize) - 1) & ~(GLRO(dl_pagesize) - 1); + if (__builtin_expect (nup == 0, 0)) + { + if (n) + return NULL; + nup = GLRO(dl_pagesize); + } page = __mmap (0, nup, PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, _dl_zerofd, 0); - assert (page != MAP_FAILED); + if (page == MAP_FAILED) + return NULL; if (page != alloc_end) alloc_ptr = page; alloc_end = page + nup; @@ -108,7 +115,14 @@ calloc (size_t nmemb, size_t size) /* New memory from the trivial malloc above is always already cleared. (We make sure that's true in the rare occasion it might not be, by clearing memory in free, below.) */ - return malloc (nmemb * size); + size_t bytes = nmemb * size; + +#define HALF_SIZE_T (((size_t) 1) << (8 * sizeof (size_t) / 2)) + if (__builtin_expect ((nmemb | size) >= HALF_SIZE_T, 0) + && size != 0 && bytes / size != nmemb) + return NULL; + + return malloc (bytes); } /* This will rarely be called. */ @@ -264,7 +278,7 @@ __strtoul_internal (const char *nptr, char **endptr, int base, int group) while (*nptr >= '0' && *nptr <= '9') { unsigned long int digval = *nptr - '0'; - if (result > LONG_MAX / 10 + if (result > ULONG_MAX / 10 || (result == ULONG_MAX / 10 && digval > ULONG_MAX % 10)) { errno = ERANGE; diff --git a/libc/elf/dl-object.c b/libc/elf/dl-object.c index 33ee860e5..22ae83239 100644 --- a/libc/elf/dl-object.c +++ b/libc/elf/dl-object.c @@ -1,5 +1,5 @@ /* Storage management for the chain of loaded shared objects. - Copyright (C) 1995-2002, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2002, 2004, 2006, 2007 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 @@ -85,11 +85,6 @@ _dl_new_object (char *realname, const char *libname, int type, new->l_scope = new->l_scope_mem; new->l_scope_max = sizeof (new->l_scope_mem) / sizeof (new->l_scope_mem[0]); - /* No need to initialize the scope lock if the initializer is zero. */ -#if _RTLD_MRLOCK_INITIALIZER != 0 - __rtld_mrlock_initialize (new->l_scope_lock); -#endif - /* Counter for the scopes we have to handle. */ idx = 0; diff --git a/libc/elf/dl-open.c b/libc/elf/dl-open.c index a043cf61b..fda3219ae 100644 --- a/libc/elf/dl-open.c +++ b/libc/elf/dl-open.c @@ -165,6 +165,40 @@ add_to_global (struct link_map *new) return 0; } +int +_dl_scope_free (struct r_scope_elem **old) +{ + struct dl_scope_free_list *fsl; +#define DL_SCOPE_FREE_LIST_SIZE (sizeof (fsl->list) / sizeof (fsl->list[0])) + + if (RTLD_SINGLE_THREAD_P) + free (old); + else if ((fsl = GL(dl_scope_free_list)) == NULL) + { + GL(dl_scope_free_list) = fsl = malloc (sizeof (*fsl)); + if (fsl == NULL) + { + THREAD_GSCOPE_WAIT (); + free (old); + return 1; + } + else + { + fsl->list[0] = old; + fsl->count = 1; + } + } + else if (fsl->count < DL_SCOPE_FREE_LIST_SIZE) + fsl->list[fsl->count++] = old; + else + { + THREAD_GSCOPE_WAIT (); + while (fsl->count > 0) + free (fsl->list[--fsl->count]); + return 1; + } + return 0; +} static void dl_open_worker (void *a) @@ -201,10 +235,10 @@ dl_open_worker (void *a) for (Lmid_t ns = 0; ns < DL_NNS; ++ns) for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l->l_next) if (caller_dlopen >= (const void *) l->l_map_start - && caller_dlopen < (const void *) l->l_map_end) + && caller_dlopen < (const void *) l->l_map_end + && (l->l_contiguous + || _dl_addr_inside_object (l, (ElfW(Addr)) caller_dlopen))) { - /* There must be exactly one DSO for the range of the virtual - memory. Otherwise something is really broken. */ assert (ns == l->l_ns); call_map = l; goto found_caller; @@ -429,17 +463,10 @@ dl_open_worker (void *a) memcpy (newp, imap->l_scope, cnt * sizeof (imap->l_scope[0])); struct r_scope_elem **old = imap->l_scope; - if (RTLD_SINGLE_THREAD_P) - imap->l_scope = newp; - else - { - __rtld_mrlock_change (imap->l_scope_lock); - imap->l_scope = newp; - __rtld_mrlock_done (imap->l_scope_lock); - } + imap->l_scope = newp; if (old != imap->l_scope_mem) - free (old); + _dl_scope_free (old); imap->l_scope_max = new_size; } @@ -662,3 +689,21 @@ show_scope (struct link_map *new) } } #endif + +#ifdef IS_IN_rtld +/* Return non-zero if ADDR lies within one of L's segments. */ +int +internal_function +_dl_addr_inside_object (struct link_map *l, const ElfW(Addr) addr) +{ + int n = l->l_phnum; + const ElfW(Addr) reladdr = addr - l->l_addr; + + while (--n >= 0) + if (l->l_phdr[n].p_type == PT_LOAD + && reladdr - l->l_phdr[n].p_vaddr >= 0 + && reladdr - l->l_phdr[n].p_vaddr < l->l_phdr[n].p_memsz) + return 1; + return 0; +} +#endif diff --git a/libc/elf/dl-runtime.c b/libc/elf/dl-runtime.c index 6add5e4ff..ee2b8b5f6 100644 --- a/libc/elf/dl-runtime.c +++ b/libc/elf/dl-runtime.c @@ -100,22 +100,11 @@ _dl_fixup ( we are not using any threads (yet). */ int flags = DL_LOOKUP_ADD_DEPENDENCY; if (!RTLD_SINGLE_THREAD_P) - { - THREAD_GSCOPE_SET_FLAG (); - - if (l->l_type == lt_loaded) - { - __rtld_mrlock_lock (l->l_scope_lock); - flags |= DL_LOOKUP_SCOPE_LOCK; - } - } + THREAD_GSCOPE_SET_FLAG (); result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, l->l_scope, version, ELF_RTYPE_CLASS_PLT, flags, NULL); - if ((flags & DL_LOOKUP_SCOPE_LOCK) != 0) - __rtld_mrlock_unlock (l->l_scope_lock); - /* We are done with the global scope. */ if (!RTLD_SINGLE_THREAD_P) THREAD_GSCOPE_RESET_FLAG (); @@ -203,23 +192,12 @@ _dl_profile_fixup ( we are not using any threads (yet). */ int flags = DL_LOOKUP_ADD_DEPENDENCY; if (!RTLD_SINGLE_THREAD_P) - { - THREAD_GSCOPE_SET_FLAG (); - - if (l->l_type == lt_loaded) - { - __rtld_mrlock_lock (l->l_scope_lock); - flags |= DL_LOOKUP_SCOPE_LOCK; - } - } + THREAD_GSCOPE_SET_FLAG (); result = _dl_lookup_symbol_x (strtab + refsym->st_name, l, &defsym, l->l_scope, version, ELF_RTYPE_CLASS_PLT, flags, NULL); - if ((flags & DL_LOOKUP_SCOPE_LOCK) != 0) - __rtld_mrlock_unlock (l->l_scope_lock); - /* We are done with the global scope. */ if (!RTLD_SINGLE_THREAD_P) THREAD_GSCOPE_RESET_FLAG (); diff --git a/libc/elf/dl-support.c b/libc/elf/dl-support.c index cecb603ae..2c11ac688 100644 --- a/libc/elf/dl-support.c +++ b/libc/elf/dl-support.c @@ -135,6 +135,8 @@ int (*_dl_make_stack_executable_hook) (void **) internal_function /* Function in libpthread to wait for termination of lookups. */ void (*_dl_wait_lookup_done) (void); +struct dl_scope_free_list *_dl_scope_free_list; + #ifdef NEED_DL_SYSINFO /* Needed for improved syscall handling on at least x86/Linux. */ uintptr_t _dl_sysinfo = DL_SYSINFO_DEFAULT; diff --git a/libc/elf/dl-sym.c b/libc/elf/dl-sym.c index 1c3ab5c87..b12ff375f 100644 --- a/libc/elf/dl-sym.c +++ b/libc/elf/dl-sym.c @@ -98,10 +98,9 @@ do_sym (void *handle, const char *name, void *who, for (Lmid_t ns = 0; ns < DL_NNS; ++ns) for (struct link_map *l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l->l_next) - if (caller >= l->l_map_start && caller < l->l_map_end) + if (caller >= l->l_map_start && caller < l->l_map_end + && (l->l_contiguous || _dl_addr_inside_object (l, caller))) { - /* There must be exactly one DSO for the range of the virtual - memory. Otherwise something is really broken. */ match = l; break; } @@ -113,29 +112,29 @@ do_sym (void *handle, const char *name, void *who, the initial binary. And then the more complex part where the object is dynamically loaded and the scope array can change. */ - if (match->l_type != lt_loaded || RTLD_SINGLE_THREAD_P) + if (RTLD_SINGLE_THREAD_P) result = GLRO(dl_lookup_symbol_x) (name, match, &ref, match->l_scope, vers, 0, flags | DL_LOOKUP_ADD_DEPENDENCY, NULL); else { - __rtld_mrlock_lock (match->l_scope_lock); - struct call_dl_lookup_args args; args.name = name; args.map = match; args.vers = vers; - args.flags = flags | DL_LOOKUP_ADD_DEPENDENCY | DL_LOOKUP_SCOPE_LOCK; + args.flags = flags | DL_LOOKUP_ADD_DEPENDENCY; args.refp = &ref; + THREAD_GSCOPE_SET_FLAG (); + const char *objname; const char *errstring = NULL; bool malloced; int err = GLRO(dl_catch_error) (&objname, &errstring, &malloced, call_dl_lookup, &args); - __rtld_mrlock_unlock (match->l_scope_lock); + THREAD_GSCOPE_RESET_FLAG (); if (__builtin_expect (errstring != NULL, 0)) { diff --git a/libc/elf/dl-sysdep.c b/libc/elf/dl-sysdep.c index d06ce1754..85e331a90 100644 --- a/libc/elf/dl-sysdep.c +++ b/libc/elf/dl-sysdep.c @@ -1,5 +1,5 @@ /* Operating system support for run-time dynamic linker. Generic Unix version. - Copyright (C) 1995-1998, 2000-2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-1998, 2000-2006, 2007 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 @@ -460,9 +460,21 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz, total = temp[0].len + 1; else { - total = (1UL << (cnt - 2)) * (temp[0].len + temp[cnt - 1].len + 2); - for (n = 1; n + 1 < cnt; ++n) - total += (1UL << (cnt - 3)) * (temp[n].len + 1); + total = temp[0].len + temp[cnt - 1].len + 2; + if (cnt > 2) + { + total <<= 1; + for (n = 1; n + 1 < cnt; ++n) + total += temp[n].len + 1; + if (cnt > 3 + && (cnt >= sizeof (size_t) * 8 + || total + (sizeof (*result) << 3) + >= (1UL << (sizeof (size_t) * 8 - cnt + 3)))) + _dl_signal_error (ENOMEM, NULL, NULL, + N_("cannot create capability list")); + + total <<= cnt - 3; + } } /* The result structure: we use a very compressed way to store the diff --git a/libc/elf/do-lookup.h b/libc/elf/do-lookup.h index 2585d8300..e17d46352 100644 --- a/libc/elf/do-lookup.h +++ b/libc/elf/do-lookup.h @@ -1,5 +1,5 @@ /* Look up a symbol in the loaded objects. - Copyright (C) 1995-2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2004, 2005, 2006, 2007 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,8 +29,13 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash, const struct r_found_version *const version, int flags, struct link_map *skip, int type_class) { - struct link_map **list = scope->r_list; size_t n = scope->r_nlist; + /* Make sure we read the value before proceeding. Otherwise we + might use r_list pointing to the initial scope and r_nlist being + the value after a resize. That is the only path in dl-open.c not + protected by GSCOPE. A read barrier here might be to expensive. */ + __asm volatile ("" : "+r" (n), "+m" (scope->r_list)); + struct link_map **list = scope->r_list; do { @@ -185,7 +190,7 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash, const Elf32_Word *hasharr = &map->l_gnu_chain_zero[bucket]; do - if ((*hasharr & ~1u) == (new_hash & ~1u)) + if (((*hasharr ^ new_hash) >> 1) == 0) { symidx = hasharr - map->l_gnu_chain_zero; sym = check_match (&symtab[symidx]); diff --git a/libc/elf/elf.h b/libc/elf/elf.h index 6c2d54c16..c541774d9 100644 --- a/libc/elf/elf.h +++ b/libc/elf/elf.h @@ -602,8 +602,8 @@ typedef struct #define NT_UTSNAME 15 /* Contains copy of utsname struct */ #define NT_LWPSTATUS 16 /* Contains copy of lwpstatus struct */ #define NT_LWPSINFO 17 /* Contains copy of lwpinfo struct */ -#define NT_PRFPXREG 20 /* Contains copy of fprxregset struct*/ -#define NT_PRXFPREG 0x46e62b7f /* Contains copy of user_fxsr_struct*/ +#define NT_PRFPXREG 20 /* Contains copy of fprxregset struct */ +#define NT_PRXFPREG 0x46e62b7f /* Contains copy of user_fxsr_struct */ /* Legal values for the note segment descriptor types for object files. */ @@ -1017,15 +1017,28 @@ typedef struct word 2: minor version of the ABI word 3: subminor version of the ABI */ -#define ELF_NOTE_ABI 1 +#define NT_GNU_ABI_TAG 1 +#define ELF_NOTE_ABI NT_GNU_ABI_TAG /* Old name. */ -/* Known OSes. These value can appear in word 0 of an ELF_NOTE_ABI - note section entry. */ +/* Known OSes. These values can appear in word 0 of an + NT_GNU_ABI_TAG note section entry. */ #define ELF_NOTE_OS_LINUX 0 #define ELF_NOTE_OS_GNU 1 #define ELF_NOTE_OS_SOLARIS2 2 #define ELF_NOTE_OS_FREEBSD 3 +/* Synthetic hwcap information. The descriptor begins with two words: + word 0: number of entries + word 1: bitmask of enabled entries + Then follow variable-length entries, one byte followed by a + '\0'-terminated hwcap name string. The byte gives the bit + number to test if enabled, (1U << bit) & bitmask. */ +#define NT_GNU_HWCAP 2 + +/* Build ID bits as generated by ld --build-id. + The descriptor consists of any nonzero number of bytes. */ +#define NT_GNU_BUILD_ID 3 + /* Move records. */ typedef struct @@ -1710,6 +1723,8 @@ typedef Elf32_Addr Elf32_Conflict; #define R_PARISC_LTOFF_FPTR14R 62 /* LT-rel. fct ptr, right 14 bits. */ #define R_PARISC_FPTR64 64 /* 64 bits function address. */ #define R_PARISC_PLABEL32 65 /* 32 bits function address. */ +#define R_PARISC_PLABEL21L 66 /* Left 21 bits of fdesc address. */ +#define R_PARISC_PLABEL14R 70 /* Right 14 bits of fdesc address. */ #define R_PARISC_PCREL64 72 /* 64 bits PC-rel. address. */ #define R_PARISC_PCREL22F 74 /* 22 bits PC-rel. address. */ #define R_PARISC_PCREL14WR 75 /* PC-rel. address, right 14 bits. */ @@ -1770,6 +1785,26 @@ typedef Elf32_Addr Elf32_Conflict; #define R_PARISC_LTOFF_TP16F 229 /* 16 bits LT-TP-rel. address. */ #define R_PARISC_LTOFF_TP16WF 230 /* 16 bits LT-TP-rel. address. */ #define R_PARISC_LTOFF_TP16DF 231 /* 16 bits LT-TP-rel. address. */ +#define R_PARISC_GNU_VTENTRY 232 +#define R_PARISC_GNU_VTINHERIT 233 +#define R_PARISC_TLS_GD21L 234 /* GD 21-bit left. */ +#define R_PARISC_TLS_GD14R 235 /* GD 14-bit right. */ +#define R_PARISC_TLS_GDCALL 236 /* GD call to __t_g_a. */ +#define R_PARISC_TLS_LDM21L 237 /* LD module 21-bit left. */ +#define R_PARISC_TLS_LDM14R 238 /* LD module 14-bit right. */ +#define R_PARISC_TLS_LDMCALL 239 /* LD module call to __t_g_a. */ +#define R_PARISC_TLS_LDO21L 240 /* LD offset 21-bit left. */ +#define R_PARISC_TLS_LDO14R 241 /* LD offset 14-bit right. */ +#define R_PARISC_TLS_DTPMOD32 242 /* DTP module 32-bit. */ +#define R_PARISC_TLS_DTPMOD64 243 /* DTP module 64-bit. */ +#define R_PARISC_TLS_DTPOFF32 244 /* DTP offset 32-bit. */ +#define R_PARISC_TLS_DTPOFF64 245 /* DTP offset 32-bit. */ +#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L +#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R +#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L +#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R +#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32 +#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64 #define R_PARISC_HIRESERVE 255 /* Legal values for p_type field of Elf32_Phdr/Elf64_Phdr. */ diff --git a/libc/elf/ldconfig.c b/libc/elf/ldconfig.c index 44ccc1a3d..31d13c480 100644 --- a/libc/elf/ldconfig.c +++ b/libc/elf/ldconfig.c @@ -3,8 +3,9 @@ Contributed by Andreas Jaeger <aj@suse.de>, 1999. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -111,6 +112,9 @@ static char *opt_chroot; /* Manually link given shared libraries. */ static int opt_manual_link; +/* Should we ignore an old auxiliary cache file? */ +static int opt_ignore_aux_cache; + /* Cache file to use. */ static char *cache_file; @@ -141,6 +145,7 @@ static const struct argp_option options[] = { NULL, 'n', NULL, 0, N_("Only process directories specified on the command line. Don't build cache."), 0}, { NULL, 'l', NULL, 0, N_("Manually link individual libraries."), 0}, { "format", 'c', N_("FORMAT"), 0, N_("Format to use: new, old or compat (default)"), 0}, + { "ignore-aux-cache", 'i', NULL, 0, N_("Ignore auxiliary cache file"), 0}, { NULL, 0, NULL, 0, NULL, 0 } }; @@ -237,10 +242,15 @@ parse_opt (int key, char *arg, struct argp_state *state) { case 'C': cache_file = arg; + /* Ignore auxiliary cache since we use non-standard cache. */ + opt_ignore_aux_cache = 1; break; case 'f': config_file = arg; break; + case 'i': + opt_ignore_aux_cache = 1; + break; case 'l': opt_manual_link = 1; break; @@ -517,7 +527,7 @@ manual_link (char *library) if (libname) { /* Successfully split names. Check if path is just "/" to avoid - an empty path. */ + an empty path. */ if (libname == path) { libname = library + 1; @@ -571,14 +581,17 @@ manual_link (char *library) free (path); return; } + if (process_file (real_library, library, libname, &flag, &osversion, - &soname, 0)) + &soname, 0, &stat_buf)) { error (0, 0, _("No link created since soname could not be found for %s"), library); free (path); return; } + if (soname == NULL) + soname = implicit_soname (libname, flag); create_links (real_path, path, libname, soname); free (soname); free (path); @@ -624,23 +637,7 @@ struct dlib_entry static void search_dir (const struct dir_entry *entry) { - DIR *dir; - struct dirent64 *direntry; - char *file_name, *dir_name, *real_file_name, *real_name; - int file_name_len, real_file_name_len, len; - char *soname; - struct dlib_entry *dlibs; - struct dlib_entry *dlib_ptr; - struct stat64 lstat_buf, stat_buf; - int is_link, is_dir; uint64_t hwcap = path_hwcap (entry->path); - unsigned int osversion; - - file_name_len = PATH_MAX; - file_name = alloca (file_name_len); - - dlibs = NULL; - if (opt_verbose) { if (hwcap != 0) @@ -649,6 +646,11 @@ search_dir (const struct dir_entry *entry) printf ("%s:\n", entry->path); } + char *dir_name; + char *real_file_name; + size_t real_file_name_len; + size_t file_name_len = PATH_MAX; + char *file_name = alloca (file_name_len); if (opt_chroot) { dir_name = chroot_canon (opt_chroot, entry->path); @@ -662,6 +664,7 @@ search_dir (const struct dir_entry *entry) real_file_name = file_name; } + DIR *dir; if (dir_name == NULL || (dir = opendir (dir_name)) == NULL) { if (opt_verbose) @@ -671,6 +674,8 @@ search_dir (const struct dir_entry *entry) return; } + struct dirent64 *direntry; + struct dlib_entry *dlibs = NULL; while ((direntry = readdir64 (dir)) != NULL) { int flag; @@ -694,7 +699,8 @@ search_dir (const struct dir_entry *entry) #endif !is_hwcap_platform (direntry->d_name))) continue; - len = strlen (direntry->d_name); + + size_t len = strlen (direntry->d_name); /* Skip temporary files created by the prelink program. Files with names like these are never really DSOs we want to look at. */ if (len >= sizeof (".#prelink#") - 1) @@ -726,7 +732,10 @@ search_dir (const struct dir_entry *entry) } sprintf (real_file_name, "%s/%s", dir_name, direntry->d_name); } + + struct stat64 lstat_buf; #ifdef _DIRENT_HAVE_D_TYPE + /* We optimize and try to do the lstat call only if needed. */ if (direntry->d_type != DT_UNKNOWN) lstat_buf.st_mode = DTTOIF (direntry->d_type); else @@ -737,9 +746,11 @@ search_dir (const struct dir_entry *entry) continue; } - is_link = S_ISLNK (lstat_buf.st_mode); + struct stat64 stat_buf; + int is_dir; + int is_link = S_ISLNK (lstat_buf.st_mode); if (is_link) - { + { /* In case of symlink, we check if the symlink refers to a directory. */ if (__builtin_expect (stat64 (real_file_name, &stat_buf), 0)) @@ -753,6 +764,12 @@ search_dir (const struct dir_entry *entry) continue; } is_dir = S_ISDIR (stat_buf.st_mode); + + /* lstat_buf is later stored, update contents. */ + lstat_buf.st_dev = stat_buf.st_dev; + lstat_buf.st_ino = stat_buf.st_ino; + lstat_buf.st_size = stat_buf.st_size; + lstat_buf.st_ctime = stat_buf.st_ctime; } else is_dir = S_ISDIR (lstat_buf.st_mode); @@ -766,36 +783,28 @@ search_dir (const struct dir_entry *entry) new_entry->path = xstrdup (file_name); new_entry->flag = entry->flag; new_entry->next = NULL; - if (is_link) +#ifdef _DIRENT_HAVE_D_TYPE + /* We have filled in lstat only #ifndef + _DIRENT_HAVE_D_TYPE. Fill it in if needed. */ + if (!is_link + && direntry->d_type != DT_UNKNOWN + && __builtin_expect (lstat64 (real_file_name, &lstat_buf), 0)) { - new_entry->ino = stat_buf.st_ino; - new_entry->dev = stat_buf.st_dev; + error (0, errno, _("Cannot lstat %s"), file_name); + free (new_entry->path); + free (new_entry); + continue; } - else - { -#ifdef _DIRENT_HAVE_D_TYPE - /* We have filled in lstat only #ifndef - _DIRENT_HAVE_D_TYPE. Fill it in if needed. */ - if (direntry->d_type != DT_UNKNOWN - && __builtin_expect (lstat64 (real_file_name, &lstat_buf), - 0)) - { - error (0, errno, _("Cannot lstat %s"), file_name); - free (new_entry->path); - free (new_entry); - continue; - } #endif - - new_entry->ino = lstat_buf.st_ino; - new_entry->dev = lstat_buf.st_dev; - } + new_entry->ino = lstat_buf.st_ino; + new_entry->dev = lstat_buf.st_dev; add_single_dir (new_entry, 0); continue; } else if (!S_ISREG (lstat_buf.st_mode) && !is_link) continue; + char *real_name; if (opt_chroot && is_link) { real_name = chroot_canon (opt_chroot, file_name); @@ -809,14 +818,36 @@ search_dir (const struct dir_entry *entry) else real_name = real_file_name; - if (process_file (real_name, file_name, direntry->d_name, &flag, - &osversion, &soname, is_link)) +#ifdef _DIRENT_HAVE_D_TYPE + /* Call lstat64 if not done yet. */ + if (!is_link + && direntry->d_type != DT_UNKNOWN + && __builtin_expect (lstat64 (real_file_name, &lstat_buf), 0)) { - if (real_name != real_file_name) - free (real_name); + error (0, errno, _("Cannot lstat %s"), file_name); continue; } +#endif + + /* First search whether the auxiliary cache contains this + library already and it's not changed. */ + char *soname; + unsigned int osversion; + if (!search_aux_cache (&lstat_buf, &flag, &osversion, &soname)) + { + if (process_file (real_name, file_name, direntry->d_name, &flag, + &osversion, &soname, is_link, &lstat_buf)) + { + if (real_name != real_file_name) + free (real_name); + continue; + } + else if (opt_build_cache) + add_to_aux_cache (&lstat_buf, flag, osversion, soname); + } + if (soname == NULL) + soname = implicit_soname (direntry->d_name, flag); /* A link may just point to itself. */ if (is_link) @@ -833,7 +864,7 @@ search_dir (const struct dir_entry *entry) || strncmp (real_base_name, soname, len) != 0) is_link = 0; } - } + } if (real_name != real_file_name) free (real_name); @@ -848,6 +879,7 @@ search_dir (const struct dir_entry *entry) && (entry->flag == FLAG_ELF_LIBC5 || entry->flag == FLAG_ELF_LIBC6)) flag = entry->flag; + /* Some sanity checks to print warnings. */ if (opt_verbose) { @@ -863,6 +895,7 @@ search_dir (const struct dir_entry *entry) } /* Add library to list. */ + struct dlib_entry *dlib_ptr; for (dlib_ptr = dlibs; dlib_ptr != NULL; dlib_ptr = dlib_ptr->next) { /* Is soname already in list? */ @@ -887,12 +920,13 @@ search_dir (const struct dir_entry *entry) dlib_ptr->flag = flag; else error (0, 0, _("libraries %s and %s in directory %s have same soname but different type."), - dlib_ptr->name, direntry->d_name, entry->path); + dlib_ptr->name, direntry->d_name, + entry->path); } free (dlib_ptr->name); - dlib_ptr->osversion = osversion; dlib_ptr->name = xstrdup (direntry->d_name); dlib_ptr->is_link = is_link; + dlib_ptr->osversion = osversion; } /* Don't add this library, abort loop. */ /* Also free soname, since it's dynamically allocated. */ @@ -905,10 +939,10 @@ search_dir (const struct dir_entry *entry) { dlib_ptr = (struct dlib_entry *)xmalloc (sizeof (struct dlib_entry)); dlib_ptr->name = xstrdup (direntry->d_name); - dlib_ptr->flag = flag; - dlib_ptr->osversion = osversion; dlib_ptr->soname = soname; + dlib_ptr->flag = flag; dlib_ptr->is_link = is_link; + dlib_ptr->osversion = osversion; /* Add at head of list. */ dlib_ptr->next = dlibs; dlibs = dlib_ptr; @@ -919,6 +953,7 @@ search_dir (const struct dir_entry *entry) /* Now dlibs contains a list of all libs - add those to the cache and created all symbolic links. */ + struct dlib_entry *dlib_ptr; for (dlib_ptr = dlibs; dlib_ptr != NULL; dlib_ptr = dlib_ptr->next) { /* Don't create links to links. */ @@ -1245,7 +1280,7 @@ main (int argc, char **argv) if (opt_chroot) { /* Canonicalize the directory name of cache_file, not cache_file, - because we'll rename a temporary cache file to it. */ + because we'll rename a temporary cache file to it. */ char *p = strrchr (cache_file, '/'); char *canon = chroot_canon (opt_chroot, p ? (*p = '\0', cache_file) : "/"); @@ -1292,10 +1327,18 @@ main (int argc, char **argv) add_system_dir (LIBDIR); } + if (! opt_ignore_aux_cache) + load_aux_cache (_PATH_LDCONFIG_AUX_CACHE); + else + init_aux_cache (); + search_dirs (); if (opt_build_cache) - save_cache (cache_file); + { + save_cache (cache_file); + save_aux_cache (_PATH_LDCONFIG_AUX_CACHE); + } return 0; } diff --git a/libc/elf/readelflib.c b/libc/elf/readelflib.c index 26444ad6b..b8f677a7b 100644 --- a/libc/elf/readelflib.c +++ b/libc/elf/readelflib.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2001, 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger <aj@suse.de>, 1999 and Jakub Jelinek <jakub@redhat.com>, 1999. @@ -127,16 +127,37 @@ process_elf_file (const char *file_name, const char *lib, int *flag, break; case PT_NOTE: - if (!*osversion && segment->p_filesz == 32 && segment->p_align >= 4) + if (!*osversion && segment->p_filesz >= 32 && segment->p_align >= 4) { ElfW(Word) *abi_note = (ElfW(Word) *) (file_contents + segment->p_offset); - if (abi_note [0] == 4 && abi_note [1] == 16 && abi_note [2] == 1 - && memcmp (abi_note + 3, "GNU", 4) == 0) - *osversion = (abi_note [4] << 24) | - ((abi_note [5] & 0xff) << 16) | - ((abi_note [6] & 0xff) << 8) | - (abi_note [7] & 0xff); + ElfW(Addr) size = segment->p_filesz; + + while (abi_note [0] != 4 || abi_note [1] != 16 + || abi_note [2] != 1 + || memcmp (abi_note + 3, "GNU", 4) != 0) + { +#define ROUND(len) (((len) + sizeof (ElfW(Word)) - 1) & -sizeof (ElfW(Word))) + ElfW(Addr) note_size = 3 * sizeof (ElfW(Word)) + + ROUND (abi_note[0]) + + ROUND (abi_note[1]); + + if (size - 32 < note_size || note_size == 0) + { + size = 0; + break; + } + size -= note_size; + abi_note = (void *) abi_note + note_size; + } + + if (size == 0) + break; + + *osversion = (abi_note [4] << 24) | + ((abi_note [5] & 0xff) << 16) | + ((abi_note [6] & 0xff) << 8) | + (abi_note [7] & 0xff); } break; @@ -210,11 +231,5 @@ process_elf_file (const char *file_name, const char *lib, int *flag, } } - /* We reach this point only if the file doesn't contain a DT_SONAME - or if we can't classify the library. If it doesn't have a - soname, return the name of the library. */ - if (*soname == NULL) - *soname = xstrdup (lib); - return 0; } diff --git a/libc/elf/readlib.c b/libc/elf/readlib.c index 8896bbdac..eb64a79f1 100644 --- a/libc/elf/readlib.c +++ b/libc/elf/readlib.c @@ -1,11 +1,12 @@ -/* Copyright (C) 1999-2003, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1999-2003, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger <aj@suse.de>, 1999 and Jakub Jelinek <jakub@redhat.com>, 1999. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -68,7 +69,7 @@ static struct known_names known_libs[] = int process_file (const char *real_file_name, const char *file_name, const char *lib, int *flag, unsigned int *osversion, - char **soname, int is_link) + char **soname, int is_link, struct stat64 *stat_buf) { FILE *file; struct stat64 statbuf; @@ -134,7 +135,7 @@ process_file (const char *real_file_name, const char *file_name, ) { /* Aout files don't have a soname, just return the name - including the major number. */ + including the major number. */ char *copy, *major, *dot; copy = xstrdup (lib); major = strstr (copy, ".so."); @@ -174,8 +175,31 @@ process_file (const char *real_file_name, const char *file_name, munmap (file_contents, statbuf.st_size); fclose (file); + *stat_buf = statbuf; return ret; } +/* Returns made up soname if lib doesn't have explicit DT_SONAME. */ + +char * +implicit_soname (const char *lib, int flag) +{ + char *soname = xstrdup (lib); + + if ((flag & FLAG_TYPE_MASK) != FLAG_LIBC4) + return soname; + + /* Aout files don't have a soname, just return the name + including the major number. */ + char *major = strstr (soname, ".so."); + if (major) + { + char *dot = strstr (major + 4, "."); + if (dot) + *dot = '\0'; + } + return soname; +} + /* Get architecture specific version of process_elf_file. */ #include <readelflib.c> diff --git a/libc/elf/rtld.c b/libc/elf/rtld.c index c57ef17e1..7612a6932 100644 --- a/libc/elf/rtld.c +++ b/libc/elf/rtld.c @@ -1400,6 +1400,11 @@ of this helper program; chances are you did not intend to run this program.\n\ /* Iterate over all entries in the list. The order is important. */ struct audit_ifaces *last_audit = NULL; struct audit_list *al = audit_list->next; + + /* Since we start using the auditing DSOs right away we need to + initialize the data structures now. */ + tcbp = init_tls (); + do { int tls_idx = GL(dl_tls_max_dtv_idx); @@ -1409,11 +1414,6 @@ of this helper program; chances are you did not intend to run this program.\n\ always allocate the static block, we never defer it even if no DF_STATIC_TLS bit is set. The reason is that we know glibc will use the static model. */ - - /* Since we start using the auditing DSOs right away we need to - initialize the data structures now. */ - tcbp = init_tls (); - struct dlmopen_args dlmargs; dlmargs.fname = al->name; dlmargs.map = NULL; diff --git a/libc/hurd/getdport.c b/libc/hurd/getdport.c index 41567d5fe..67c742ccd 100644 --- a/libc/hurd/getdport.c +++ b/libc/hurd/getdport.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1991, 1992, 1994, 1995, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991,1992,1994,1995,1997,2007 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/libc/hurd/hurd/signal.h b/libc/hurd/hurd/signal.h index c5b04f434..39fa0f857 100644 --- a/libc/hurd/hurd/signal.h +++ b/libc/hurd/hurd/signal.h @@ -26,6 +26,7 @@ #error "Must have `_GNU_SOURCE' feature test macro to use this file" #endif +#define __need_size_t #define __need_NULL #include <stddef.h> diff --git a/libc/hurd/port2fd.c b/libc/hurd/port2fd.c index 48b74f1ad..262e6d969 100644 --- a/libc/hurd/port2fd.c +++ b/libc/hurd/port2fd.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1994, 1997, 1999 Free Software Foundation, Inc. +/* Copyright (C) 1994, 1997, 1999, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -55,7 +55,7 @@ _hurd_port2fd (struct hurd_fd *d, io_t dport, int flags) mach_port_t old = _hurd_userlink_clear (&d->port.users) ? d->port.port : MACH_PORT_NULL; d->port.port = dport; - d->flags = 0; + d->flags = (flags & O_CLOEXEC) ? FD_CLOEXEC : 0; if (old != MACH_PORT_NULL) __mach_port_deallocate (__mach_task_self (), old); } diff --git a/libc/iconv/Makefile b/libc/iconv/Makefile index 29c863359..aaafdea04 100644 --- a/libc/iconv/Makefile +++ b/libc/iconv/Makefile @@ -1,4 +1,5 @@ -# Copyright (C) 1997,1998,2000-2003,2004 Free Software Foundation, Inc. +# Copyright (C) 1997,1998,2000,2001,2002,2003,2004,2007 +# Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -65,7 +66,7 @@ distribute = gconv_builtin.h gconv_int.h loop.c skeleton.c iconv_prog.h \ iconvconfig.h others = iconv_prog iconvconfig -install-others = $(inst_bindir)/iconv +install-others-programs = $(inst_bindir)/iconv install-sbin = iconvconfig CFLAGS-gconv_cache.c += -DGCONV_DIR='"$(gconvdir)"' diff --git a/libc/iconv/dummy-repertoire.c b/libc/iconv/dummy-repertoire.c index a87685c50..cae384c28 100644 --- a/libc/iconv/dummy-repertoire.c +++ b/libc/iconv/dummy-repertoire.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/iconv/gconv.c b/libc/iconv/gconv.c index cd43d3d6f..1b6445553 100644 --- a/libc/iconv/gconv.c +++ b/libc/iconv/gconv.c @@ -1,6 +1,6 @@ /* Convert characters in input buffer using conversion descriptor to output buffer. - Copyright (C) 1997-2001, 2005 Free Software Foundation, Inc. + Copyright (C) 1997-2001, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -55,11 +55,19 @@ __gconv (__gconv_t cd, const unsigned char **inbuf, #endif if (inbuf == NULL || *inbuf == NULL) - /* We just flush. */ - result = DL_CALL_FCT (fct, - (cd->__steps, cd->__data, NULL, NULL, NULL, - irreversible, - cd->__data[last_step].__outbuf == NULL ? 2 : 1, 0)); + { + /* We just flush. */ + result = DL_CALL_FCT (fct, + (cd->__steps, cd->__data, NULL, NULL, NULL, + irreversible, + cd->__data[last_step].__outbuf == NULL ? 2 : 1, + 0)); + + /* If the flush was successful clear the rest of the state. */ + if (result == __GCONV_OK) + for (size_t cnt = 0; cnt <= last_step; ++cnt) + cd->__data[cnt].__invocation_counter = 0; + } else { const unsigned char *last_start; diff --git a/libc/iconv/gconv.h b/libc/iconv/gconv.h index d8be8fa8c..2946335e5 100644 --- a/libc/iconv/gconv.h +++ b/libc/iconv/gconv.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997-1999, 2000-2002 Free Software Foundation, Inc. +/* Copyright (C) 1997-1999, 2000-2002, 2007 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,6 +25,7 @@ #include <features.h> #define __need_mbstate_t +#define __need_wint_t #include <wchar.h> #define __need_size_t #define __need_wchar_t diff --git a/libc/iconv/gconv_cache.c b/libc/iconv/gconv_cache.c index 716c384de..4fcb0bc2b 100644 --- a/libc/iconv/gconv_cache.c +++ b/libc/iconv/gconv_cache.c @@ -1,5 +1,5 @@ /* Cache handling for iconv modules. - Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 2001. @@ -285,7 +285,7 @@ __gconv_lookup_cache (const char *toset, const char *fromset, /* Avoid copy-only transformations if the user requests. */ if (__builtin_expect (flags & GCONV_AVOID_NOCONV, 0) && fromidx == toidx) - return __GCONV_NOCONV; + return __GCONV_NULCONV; /* If there are special conversions available examine them first. */ if (fromidx != 0 && toidx != 0 diff --git a/libc/iconv/gconv_db.c b/libc/iconv/gconv_db.c index 0c6dfbf1b..adeb1ab3f 100644 --- a/libc/iconv/gconv_db.c +++ b/libc/iconv/gconv_db.c @@ -1,5 +1,6 @@ /* Provide access to the collection of available transformation modules. - Copyright (C) 1997-2003, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1997-2003, 2004, 2005, 2006, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -756,7 +757,7 @@ __gconv_find_transform (const char *toset, const char *fromset, { /* Both character sets are the same. */ __libc_lock_unlock (__gconv_lock); - return __GCONV_NOCONV; + return __GCONV_NULCONV; } result = find_derivation (toset, toset_expand, fromset, fromset_expand, diff --git a/libc/iconv/gconv_int.h b/libc/iconv/gconv_int.h index 8d9cdaefc..fd112204b 100644 --- a/libc/iconv/gconv_int.h +++ b/libc/iconv/gconv_int.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997-2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1997-2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -114,6 +114,12 @@ enum GCONV_AVOID_NOCONV = 1 << 0 }; +/* When GCONV_AVOID_NOCONV is set and no conversion is needed, + __GCONV_NULCONV should be returned. */ +enum +{ + __GCONV_NULCONV = -1 +}; /* Global variables. */ diff --git a/libc/iconv/gconv_open.c b/libc/iconv/gconv_open.c index bbf27b3dc..07ebb9b95 100644 --- a/libc/iconv/gconv_open.c +++ b/libc/iconv/gconv_open.c @@ -1,5 +1,5 @@ /* Find matching transformation algorithms and initialize steps. - Copyright (C) 1997,1998,1999,2000,2001,2004,2005 + Copyright (C) 1997,1998,1999,2000,2001,2004,2005,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -56,7 +56,7 @@ __gconv_open (const char *toset, const char *fromset, __gconv_t *handle, /* Make copy without the error handling description. */ char *newtoset = (char *) alloca (errhand - toset + 1); char *tok; - char *ptr; + char *ptr = NULL /* Work around a bogus warning */; newtoset[errhand - toset] = '\0'; toset = memcpy (newtoset, toset, errhand - toset); diff --git a/libc/iconv/iconv_charmap.c b/libc/iconv/iconv_charmap.c index a54d73812..f679c64eb 100644 --- a/libc/iconv/iconv_charmap.c +++ b/libc/iconv/iconv_charmap.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/iconv/iconv_prog.c b/libc/iconv/iconv_prog.c index a783a7ecd..67312a42a 100644 --- a/libc/iconv/iconv_prog.c +++ b/libc/iconv/iconv_prog.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/iconv/iconvconfig.c b/libc/iconv/iconvconfig.c index 405ee98a9..ed72a5d4d 100644 --- a/libc/iconv/iconvconfig.c +++ b/libc/iconv/iconvconfig.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@redhat.com>, 2000. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -1011,6 +1012,34 @@ next_prime (uint32_t seed) module name offset (following last entry with step count 0) */ + +static struct hash_entry *hash_table; +static size_t hash_size; + +/* Function to insert the names. */ +static void name_insert (const void *nodep, VISIT value, int level) +{ + struct name *name; + unsigned int idx; + unsigned int hval2; + + if (value != leaf && value != postorder) + return; + + name = *(struct name **) nodep; + idx = name->hashval % hash_size; + hval2 = 1 + name->hashval % (hash_size - 2); + + while (hash_table[idx].string_offset != 0) + if ((idx += hval2) >= hash_size) + idx -= hash_size; + + hash_table[idx].string_offset = strtaboffset (name->strent); + + assert (name->module_idx != -1); + hash_table[idx].module_idx = name->module_idx; +} + static int write_output (void) { @@ -1018,8 +1047,6 @@ write_output (void) char *string_table; size_t string_table_size; struct gconvcache_header header; - struct hash_entry *hash_table; - size_t hash_size; struct module_entry *module_table; char *extra_table; char *cur_extra_table; @@ -1032,31 +1059,6 @@ write_output (void) char tmpfname[(output_file == NULL ? sizeof finalname : output_file_len + 1) + strlen (".XXXXXX")]; - /* Function to insert the names. */ - auto void - name_insert (const void *nodep, VISIT value, int level) - { - struct name *name; - unsigned int idx; - unsigned int hval2; - - if (value != leaf && value != postorder) - return; - - name = *(struct name **) nodep; - idx = name->hashval % hash_size; - hval2 = 1 + name->hashval % (hash_size - 2); - - while (hash_table[idx].string_offset != 0) - if ((idx += hval2) >= hash_size) - idx -= hash_size; - - hash_table[idx].string_offset = strtaboffset (name->strent); - - assert (name->module_idx != -1); - hash_table[idx].module_idx = name->module_idx; - } - /* Open the output file. */ if (output_file == NULL) { diff --git a/libc/iconvdata/Makefile b/libc/iconvdata/Makefile index 4ddb38a8a..a2e6651d1 100644 --- a/libc/iconvdata/Makefile +++ b/libc/iconvdata/Makefile @@ -69,7 +69,7 @@ include ../Makeconfig ifeq (yes,$(build-shared)) tests = bug-iconv1 bug-iconv2 tst-loading tst-e2big tst-iconv4 bug-iconv4 \ - tst-iconv6 + tst-iconv6 bug-iconv5 ifeq ($(have-thread-library),yes) tests += bug-iconv3 endif @@ -357,6 +357,8 @@ $(objpfx)bug-iconv2.out: $(objpfx)gconv-modules \ $(objpfx)bug-iconv3: $(libdl) $(objpfx)bug-iconv3.out: $(objpfx)gconv-modules \ $(addprefix $(objpfx),$(modules.so)) +$(objpfx)bug-iconv5.out: $(objpfx)gconv-modules \ + $(addprefix $(objpfx),$(modules.so)) $(objpfx)tst-loading.out: $(objpfx)gconv-modules \ $(addprefix $(objpfx),$(modules.so)) $(objpfx)tst-iconv4.out: $(objpfx)gconv-modules \ diff --git a/libc/iconvdata/bug-iconv5.c b/libc/iconvdata/bug-iconv5.c new file mode 100644 index 000000000..1b9f50f58 --- /dev/null +++ b/libc/iconvdata/bug-iconv5.c @@ -0,0 +1,53 @@ +#include <iconv.h> +#include <stdint.h> +#include <stdio.h> + + +static int +do_test (void) +{ + iconv_t cd = iconv_open ("utf-8", "unicode"); + if (cd == (iconv_t) -1) + { + puts ("cannot open iconv module"); + return 1; + } + + static const uint16_t us[] = { 0xfeff, 0x0041, 0x0042, 0x0043 }; + char buf[100]; + + char *inbuf; + size_t inlen; + char *outbuf; + size_t outlen; + size_t n; + + inbuf = (char *) us; + inlen = sizeof (us); + outbuf = buf; + outlen = sizeof (buf); + n = iconv (cd, &inbuf, &inlen, &outbuf, &outlen); + if (n == (size_t) -1 || inlen != 0 || outlen != sizeof (buf) - 3) + { + puts ("first conversion failed"); + return 1; + } + + iconv (cd, NULL, NULL, NULL, NULL); + + inbuf = (char *) us; + inlen = sizeof (us); + outbuf = buf; + outlen = sizeof (buf); + n = iconv (cd, &inbuf, &inlen, &outbuf, &outlen); + if (n == (size_t) -1 || inlen != 0 || outlen != sizeof (buf) - 3) + { + puts ("second conversion failed"); + return 1; + } + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/libc/iconvdata/cns11643.h b/libc/iconvdata/cns11643.h index 125f55f22..9d7968c22 100644 --- a/libc/iconvdata/cns11643.h +++ b/libc/iconvdata/cns11643.h @@ -1,5 +1,6 @@ /* Access functions for CNS 11643 handling. - Copyright (C) 1998,1999,2000,2001,2002,2003 Free Software Foundation, Inc. + Copyright (C) 1998,1999,2000,2001,2002,2003,2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -41,7 +42,7 @@ extern const uint32_t __cns11643l15_to_ucs4_tab[]; static inline uint32_t __attribute ((always_inline)) -cns11643_to_ucs4 (const char **s, size_t avail, unsigned char offset) +cns11643_to_ucs4 (const unsigned char **s, size_t avail, unsigned char offset) { unsigned char ch = *(*s); unsigned char ch2; @@ -142,7 +143,7 @@ extern const char __cns11643_from_ucs4p2c_tab[][3]; static inline size_t __attribute ((always_inline)) -ucs4_to_cns11643 (uint32_t wch, char *s, size_t avail) +ucs4_to_cns11643 (uint32_t wch, unsigned char *s, size_t avail) { unsigned int ch = (unsigned int) wch; char buf[2]; diff --git a/libc/iconvdata/euc-jp-ms.c b/libc/iconvdata/euc-jp-ms.c index 1c1cc2be3..79907bdf5 100644 --- a/libc/iconvdata/euc-jp-ms.c +++ b/libc/iconvdata/euc-jp-ms.c @@ -1,5 +1,5 @@ /* Mapping tables for EUCJP-MS handling. - Copyright (C) 1998,1999,2000,2001,2003 Free Software Foundation, Inc. + Copyright (C) 1998,1999,2000,2001,2003,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by MORIYAMA Masayuki <msyk@mtg.biglobe.ne.jp>, 2003. @@ -158,7 +158,7 @@ static const uint16_t cjk_block_ibm[268] = /* 0x8ff4fd */ 0xfa2d, 0x9ed1 }; -static const char from_ucs4_lat1[256][2] = +static const unsigned char from_ucs4_lat1[256][2] = { /* start = 0x0000, end = 0x00ff */ [ 0] = "\x00\x00", [ 1] = "\x01\x00", [ 2] = "\x02\x00", @@ -244,7 +244,7 @@ static const char from_ucs4_lat1[256][2] = [ 255] = "\xab\x73" }; -static const char from_ucs4_greek[864][2] = +static const unsigned char from_ucs4_greek[864][2] = { /* start = 0x0100, end = 0x045f */ [ 0] = "\xaa\x27", [ 1] = "\xab\x27", [ 2] = "\xaa\x25", @@ -351,7 +351,7 @@ static const char from_ucs4_greek[864][2] = [ 860] = "\xa7\x7c", [ 862] = "\xa7\x7d", [ 863] = "\xa7\x7e" }; -static const char from_ucs4_cjk[32662][2] = +static const unsigned char from_ucs4_cjk[32662][2] = { /* start = 0x2010, end = 0x9fa5 */ [ 0] = "\xa1\xbe", [ 4] = "\xa1\xbd", [ 5] = "\xa1\xbd", @@ -4556,7 +4556,7 @@ static const char from_ucs4_cjk[32662][2] = [32661] = "\xed\x63" }; -static const char from_ucs4_cjkcpt[261][2] = +static const unsigned char from_ucs4_cjkcpt[261][2] = { /* start = 0xf929, end = 0xfa2d */ [ 0] = "\xf4\x45", [ 179] = "\xf4\x72", [ 229] = "\xf4\x34", @@ -4573,7 +4573,7 @@ static const char from_ucs4_cjkcpt[261][2] = [ 260] = "\xf4\x7d" }; -static const char from_ucs4_extra[229][2] = +static const unsigned char from_ucs4_extra[229][2] = { /* start = 0xff01, end = 0xffe5 */ [ 0] = "\xa1\xaa", [ 1] = "\xf4\x2a", [ 2] = "\xa1\xf4", @@ -4719,7 +4719,7 @@ static const char from_ucs4_extra[229][2] = } \ else \ { \ - const unsigned char *endp; \ + const unsigned char *endp = inptr; \ int mblen = 1; \ \ if (__builtin_expect(ch == 0x8f, 0)) \ @@ -4758,7 +4758,7 @@ static const char from_ucs4_extra[229][2] = ch = __UNKNOWN_10646_CHAR; \ } \ else \ - ch = __UNKNOWN_10646_CHAR; \ + ch = __UNKNOWN_10646_CHAR; \ } \ else if (ch2 <= 0xfe) \ { \ @@ -4766,7 +4766,7 @@ static const char from_ucs4_extra[229][2] = endp = inptr + mblen; \ } \ else \ - ch = __UNKNOWN_10646_CHAR; \ + ch = __UNKNOWN_10646_CHAR; \ } \ } \ else if (__builtin_expect(0xa1 <= ch, 1)) \ @@ -4804,10 +4804,10 @@ static const char from_ucs4_extra[229][2] = endp = inptr + mblen; \ } \ else \ - ch = __UNKNOWN_10646_CHAR; \ + ch = __UNKNOWN_10646_CHAR; \ } \ else \ - ch = __UNKNOWN_10646_CHAR; \ + ch = __UNKNOWN_10646_CHAR; \ \ if (__builtin_expect (ch, 1) == 0) \ { \ @@ -4880,7 +4880,7 @@ static const char from_ucs4_extra[229][2] = { \ UNICODE_TAG_HANDLER (ch, 4); \ /* Illegal character. */ \ - cp = ""; \ + cp = (const unsigned char *) ""; \ } \ } \ else \ diff --git a/libc/iconvdata/euc-kr.c b/libc/iconvdata/euc-kr.c index 289ff4c41..8e9120b73 100644 --- a/libc/iconvdata/euc-kr.c +++ b/libc/iconvdata/euc-kr.c @@ -1,5 +1,6 @@ /* Mapping tables for EUC-KR handling. - Copyright (C) 1998, 1999, 2000-2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000-2002, 2003, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jungshik Shin <jshin@pantheon.yale.edu> and Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -46,7 +47,7 @@ euckr_from_ucs4 (uint32_t ch, unsigned char *cp) cp[1] |= 0x80; } else - cp[0] = '\0'; + cp[0] = cp[1] = '\0'; } else { diff --git a/libc/iconvdata/euc-tw.c b/libc/iconvdata/euc-tw.c index 7f10af8e9..e6d3e3554 100644 --- a/libc/iconvdata/euc-tw.c +++ b/libc/iconvdata/euc-tw.c @@ -1,5 +1,6 @@ /* Mapping tables for EUC-TW handling. - Copyright (C) 1998, 1999, 2000-2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000-2002, 2003, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -74,7 +75,7 @@ if (ch == 0x8e) \ { \ /* This is code set 2: CNS 11643, planes 1 to 16. */ \ - const char *endp = inptr + 1; \ + const unsigned char *endp = inptr + 1; \ \ ch = cns11643_to_ucs4 (&endp, inend - inptr - 1, 0x80); \ \ diff --git a/libc/iconvdata/gbk.c b/libc/iconvdata/gbk.c index ad8a37412..c90ad77a7 100644 --- a/libc/iconvdata/gbk.c +++ b/libc/iconvdata/gbk.c @@ -13213,8 +13213,8 @@ static const char __gbk_from_ucs4_tab12[][2] = #define BODY \ { \ uint32_t ch = get32 (inptr); \ - unsigned char buf[2]; \ - const unsigned char *cp = buf; \ + char buf[2]; \ + const char *cp = buf; \ \ if (ch <= L'\x7f') \ /* It's plain ASCII. */ \ diff --git a/libc/iconvdata/ibm1008_420.c b/libc/iconvdata/ibm1008_420.c index 7dd964ab7..0de95bf78 100644 --- a/libc/iconvdata/ibm1008_420.c +++ b/libc/iconvdata/ibm1008_420.c @@ -176,7 +176,6 @@ static const char __from_ibm420_to_ibm1008[256] = *outptr++ = ch; \ ++inptr; \ } -#define LOOP_NEED_FLAGS #include <iconv/loop.c> @@ -190,7 +189,6 @@ static const char __from_ibm420_to_ibm1008[256] = *outptr++ = ch; \ ++inptr; \ } -#define LOOP_NEED_FLAGS #include <iconv/loop.c> /* Now define the toplevel functions. */ diff --git a/libc/iconvdata/iso-2022-cn-ext.c b/libc/iconvdata/iso-2022-cn-ext.c index 3795d2411..fd02d6359 100644 --- a/libc/iconvdata/iso-2022-cn-ext.c +++ b/libc/iconvdata/iso-2022-cn-ext.c @@ -1,5 +1,5 @@ /* Conversion module for ISO-2022-CN-EXT. - Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. + Copyright (C) 2000-2002, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 2000. @@ -304,8 +304,8 @@ enum { \ /* This is a character from CNS 11643 plane 3 or higher. \ XXX Currently GB7590 and GB13132 are not supported. */ \ - char buf[3]; \ - const char *tmp = buf; \ + unsigned char buf[3]; \ + const unsigned char *tmp = buf; \ \ buf[1] = inptr[2]; \ buf[2] = inptr[3]; \ @@ -426,7 +426,7 @@ enum } \ else \ { \ - char buf[2]; \ + unsigned char buf[2]; \ int used; \ \ if (set == GB2312_set || ((ann & SO_ann) != CNS11643_1_ann \ @@ -456,7 +456,7 @@ enum used = CNS11643_2_set; \ else \ { \ - char tmpbuf[3]; \ + unsigned char tmpbuf[3]; \ \ switch (0) \ { \ diff --git a/libc/iconvdata/iso-2022-cn.c b/libc/iconvdata/iso-2022-cn.c index 4e4ae768d..1613cf232 100644 --- a/libc/iconvdata/iso-2022-cn.c +++ b/libc/iconvdata/iso-2022-cn.c @@ -1,5 +1,5 @@ /* Conversion module for ISO-2022-CN. - Copyright (C) 1999, 2000-2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2000-2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1999. @@ -263,7 +263,10 @@ enum } \ else \ { \ - char buf[2]; \ + unsigned char buf[2]; \ + /* Fake initialization to keep gcc quiet. */ \ + asm ("" : "=m" (buf)); \ + \ int used; \ size_t written = 0; \ \ diff --git a/libc/iconvdata/iso-2022-kr.c b/libc/iconvdata/iso-2022-kr.c index 8df101b22..6439b0a46 100644 --- a/libc/iconvdata/iso-2022-kr.c +++ b/libc/iconvdata/iso-2022-kr.c @@ -1,5 +1,5 @@ /* Conversion module for ISO-2022-KR. - Copyright (C) 1998, 1999, 2000-2002 Free Software Foundation, Inc. + Copyright (C) 1998, 1999, 2000-2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. @@ -200,9 +200,7 @@ enum #define LOOPFCT TO_LOOP #define BODY \ { \ - uint32_t ch; \ - \ - ch = get32 (inptr); \ + uint32_t ch = get32 (inptr); \ \ /* First see whether we can write the character using the currently \ selected character set. */ \ @@ -223,11 +221,11 @@ enum } \ else \ { \ - char buf[2]; \ - size_t written; \ - \ - written = ucs4_to_ksc5601 (ch, buf, 2); \ + unsigned char buf[2]; \ + /* Fake initialization to keep gcc quiet. */ \ + asm ("" : "=m" (buf)); \ \ + size_t written = ucs4_to_ksc5601 (ch, buf, 2); \ if (__builtin_expect (written, 0) == __UNKNOWN_10646_CHAR) \ { \ UNICODE_TAG_HANDLER (ch, 4); \ diff --git a/libc/iconvdata/iso-ir-165.h b/libc/iconvdata/iso-ir-165.h index b28e45d81..80d1a1c44 100644 --- a/libc/iconvdata/iso-ir-165.h +++ b/libc/iconvdata/iso-ir-165.h @@ -1,6 +1,6 @@ /* Tables for conversion to and from ISO-IR-165. converting from UCS using gaps. - Copyright (C) 2000, 2003 Free Software Foundation, Inc. + Copyright (C) 2000, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 2000. @@ -72,7 +72,7 @@ extern const char __isoir165_from_tab[]; static inline size_t __attribute ((always_inline)) -ucs4_to_isoir165 (uint32_t wch, char *s, size_t avail) +ucs4_to_isoir165 (uint32_t wch, unsigned char *s, size_t avail) { unsigned int ch = (unsigned int) wch; const char *cp; diff --git a/libc/iconvdata/jis0201.h b/libc/iconvdata/jis0201.h index 391e6d3f7..6719b7a54 100644 --- a/libc/iconvdata/jis0201.h +++ b/libc/iconvdata/jis0201.h @@ -1,5 +1,5 @@ /* Access functions for JISX0201 conversion. - Copyright (C) 1997, 1998, 1999, 2003 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -40,9 +40,9 @@ jisx0201_to_ucs4 (char ch) static inline size_t __attribute ((always_inline)) -ucs4_to_jisx0201 (uint32_t wch, char *s) +ucs4_to_jisx0201 (uint32_t wch, unsigned char *s) { - char ch; + unsigned char ch; if (wch == 0xa5) ch = '\x5c'; diff --git a/libc/iconvdata/jis0208.h b/libc/iconvdata/jis0208.h index 329e30f9b..134b45c74 100644 --- a/libc/iconvdata/jis0208.h +++ b/libc/iconvdata/jis0208.h @@ -1,5 +1,6 @@ /* Access functions for JISX0208 conversion. - Copyright (C) 1997,1998,1999,2000,2003,2005 Free Software Foundation, Inc. + Copyright (C) 1997,1998,1999,2000,2003,2005,2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -75,7 +76,7 @@ jisx0208_to_ucs4 (const unsigned char **s, size_t avail, unsigned char offset) static inline size_t __attribute ((always_inline)) -ucs4_to_jisx0208 (uint32_t wch, char *s, size_t avail) +ucs4_to_jisx0208 (uint32_t wch, unsigned char *s, size_t avail) { unsigned int ch = (unsigned int) wch; const char *cp; diff --git a/libc/iconvdata/jis0212.h b/libc/iconvdata/jis0212.h index ba439e53e..1f61c258a 100644 --- a/libc/iconvdata/jis0212.h +++ b/libc/iconvdata/jis0212.h @@ -1,5 +1,5 @@ /* Access functions for JISX0212 conversion. - Copyright (C) 1997, 1998, 1999, 2003 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 1999, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -21,6 +21,7 @@ #ifndef _JIS0212_H #define _JIS0212_H 1 +#include <assert.h> #include <gconv.h> #include <stdint.h> @@ -79,7 +80,7 @@ jisx0212_to_ucs4 (const unsigned char **s, size_t avail, unsigned char offset) static inline size_t __attribute ((always_inline)) -ucs4_to_jisx0212 (uint32_t wch, char *s, size_t avail) +ucs4_to_jisx0212 (uint32_t wch, unsigned char *s, size_t avail) { const struct jisx0212_idx *rp = __jisx0212_from_ucs_idx; unsigned int ch = (unsigned int) wch; @@ -98,14 +99,11 @@ ucs4_to_jisx0212 (uint32_t wch, char *s, size_t avail) return __UNKNOWN_10646_CHAR; s[0] = cp[0]; - if (cp[1] != '\0') - { - if (avail < 2) - return 0; - - s[1] = cp[1]; - } + assert (cp[1] != '\0'); + if (avail < 2) + return 0; + s[1] = cp[1]; return 2; } diff --git a/libc/include/fcntl.h b/libc/include/fcntl.h index 1e919befb..d5e5ddff0 100644 --- a/libc/include/fcntl.h +++ b/libc/include/fcntl.h @@ -41,4 +41,8 @@ extern void __atfct_seterrno_2 (int errval, int fd1, const char *buf1, /* Flag determining whether the *at system calls are available. */ extern int __have_atfcts attribute_hidden; +#ifdef O_CLOEXEC +extern int __have_o_cloexec attribute_hidden; +#endif + #endif diff --git a/libc/include/features.h b/libc/include/features.h index c80e4668a..97e65ba2d 100644 --- a/libc/include/features.h +++ b/libc/include/features.h @@ -56,6 +56,7 @@ header files to decide what to declare or define: __USE_ISOC99 Define ISO C99 things. + __USE_ISOC95 Define ISO C90 AMD1 (C95) things. __USE_POSIX Define IEEE Std 1003.1 things. __USE_POSIX2 Define IEEE Std 1003.2 things. __USE_POSIX199309 Define IEEE Std 1003.1, and .1b things. @@ -90,6 +91,7 @@ /* Undefine everything, so we get a clean slate. */ #undef __USE_ISOC99 +#undef __USE_ISOC95 #undef __USE_POSIX #undef __USE_POSIX2 #undef __USE_POSIX199309 @@ -184,6 +186,12 @@ # define __USE_ISOC99 1 #endif +/* This is to enable the ISO C90 Amendment 1:1995 extension. */ +#if (defined _ISOC99_SOURCE || defined _ISOC9X_SOURCE \ + || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199409L)) +# define __USE_ISOC95 1 +#endif + /* If none of the ANSI/POSIX macros are defined, use POSIX.1 and POSIX.2 (and IEEE Std 1003.1b-1993 unless _XOPEN_SOURCE is defined). */ #if ((!defined __STRICT_ANSI__ || (_XOPEN_SOURCE - 0) >= 500) && \ diff --git a/libc/include/link.h b/libc/include/link.h index 67d70470d..ccbbb8c45 100644 --- a/libc/include/link.h +++ b/libc/include/link.h @@ -44,7 +44,6 @@ extern unsigned int la_objopen (struct link_map *__map, Lmid_t __lmid, #include <dl-lookupcfg.h> #include <tls.h> #include <bits/libc-lock.h> -#include <rtld-lowlevel.h> /* Some internal data structures of the dynamic linker used in the @@ -187,6 +186,9 @@ struct link_map is interested in the PLT interception.*/ unsigned int l_removed:1; /* Nozero if the object cannot be used anymore since it is removed. */ + unsigned int l_contiguous:1; /* Nonzero if inter-segment holes are + mprotected or if no holes are present at + all. */ /* Collected information about own RPATH directories. */ struct r_search_path_struct l_rpath_dirs; @@ -220,8 +222,6 @@ struct link_map /* This is an array defining the lookup scope for this link map. There are initially at most three different scope lists. */ struct r_scope_elem **l_scope; - /* We need to protect using the SCOPEREC. */ - __rtld_mrlock_define (, l_scope_lock) /* A similar array, this time only with the local scope. This is used occasionally. */ diff --git a/libc/include/stdio.h b/libc/include/stdio.h index 6fe881cd9..748523d4d 100644 --- a/libc/include/stdio.h +++ b/libc/include/stdio.h @@ -54,12 +54,11 @@ extern int __path_search (char *__tmpl, size_t __tmpl_len, __const char *__dir, __const char *__pfx, int __try_tempdir); -extern int __gen_tempname (char *__tmpl, int __kind); +extern int __gen_tempname (char *__tmpl, int __flags, int __kind); /* The __kind argument to __gen_tempname may be one of: */ # define __GT_FILE 0 /* create a file */ -# define __GT_BIGFILE 1 /* create a file, using open64 */ -# define __GT_DIR 2 /* create a directory */ -# define __GT_NOCREATE 3 /* just find a name not currently in use */ +# define __GT_DIR 1 /* create a directory */ +# define __GT_NOCREATE 2 /* just find a name not currently in use */ /* Print out MESSAGE on the error output and abort. */ extern void __libc_fatal (__const char *__message) diff --git a/libc/include/stdlib.h b/libc/include/stdlib.h index 27111b8a8..a9754b71d 100644 --- a/libc/include/stdlib.h +++ b/libc/include/stdlib.h @@ -19,6 +19,13 @@ extern __typeof (strtoull_l) __strtoull_l; extern __typeof (strtod_l) __strtod_l; extern __typeof (strtof_l) __strtof_l; extern __typeof (strtold_l) __strtold_l; +libc_hidden_proto (__strtol_l) +libc_hidden_proto (__strtoul_l) +libc_hidden_proto (__strtoll_l) +libc_hidden_proto (__strtoull_l) +libc_hidden_proto (__strtod_l) +libc_hidden_proto (__strtof_l) +libc_hidden_proto (__strtold_l) libc_hidden_proto (exit) libc_hidden_proto (abort) @@ -28,13 +35,6 @@ libc_hidden_proto (qsort) libc_hidden_proto (lrand48_r) libc_hidden_proto (wctomb) libc_hidden_proto (__secure_getenv) -libc_hidden_proto (__strtof_internal) -libc_hidden_proto (__strtod_internal) -libc_hidden_proto (__strtold_internal) -libc_hidden_proto (__strtol_internal) -libc_hidden_proto (__strtoll_internal) -libc_hidden_proto (__strtoul_internal) -libc_hidden_proto (__strtoull_internal) extern long int __random (void); extern void __srandom (unsigned int __seed); @@ -100,6 +100,44 @@ extern void *__libc_memalign (size_t alignment, size_t size) extern int __libc_system (const char *line); + +extern double __strtod_internal (__const char *__restrict __nptr, + char **__restrict __endptr, int __group) + __THROW __nonnull ((1)) __wur; +extern float __strtof_internal (__const char *__restrict __nptr, + char **__restrict __endptr, int __group) + __THROW __nonnull ((1)) __wur; +extern long double __strtold_internal (__const char *__restrict __nptr, + char **__restrict __endptr, + int __group) + __THROW __nonnull ((1)) __wur; +extern long int __strtol_internal (__const char *__restrict __nptr, + char **__restrict __endptr, + int __base, int __group) + __THROW __nonnull ((1)) __wur; +extern unsigned long int __strtoul_internal (__const char *__restrict __nptr, + char **__restrict __endptr, + int __base, int __group) + __THROW __nonnull ((1)) __wur; +__extension__ +extern long long int __strtoll_internal (__const char *__restrict __nptr, + char **__restrict __endptr, + int __base, int __group) + __THROW __nonnull ((1)) __wur; +__extension__ +extern unsigned long long int __strtoull_internal (__const char * + __restrict __nptr, + char **__restrict __endptr, + int __base, int __group) + __THROW __nonnull ((1)) __wur; +libc_hidden_proto (__strtof_internal) +libc_hidden_proto (__strtod_internal) +libc_hidden_proto (__strtold_internal) +libc_hidden_proto (__strtol_internal) +libc_hidden_proto (__strtoll_internal) +libc_hidden_proto (__strtoul_internal) +libc_hidden_proto (__strtoull_internal) + extern double ____strtod_l_internal (__const char *__restrict __nptr, char **__restrict __endptr, int __group, __locale_t __loc); @@ -139,48 +177,13 @@ libc_hidden_proto (____strtoll_l_internal) libc_hidden_proto (____strtoul_l_internal) libc_hidden_proto (____strtoull_l_internal) -extern __inline double -__NTH (__strtod_l (__const char *__restrict __nptr, char **__restrict __endptr, - __locale_t __loc)) -{ - return ____strtod_l_internal (__nptr, __endptr, 0, __loc); -} -extern __inline long int -__NTH (__strtol_l (__const char *__restrict __nptr, char **__restrict __endptr, - int __base, __locale_t __loc)) -{ - return ____strtol_l_internal (__nptr, __endptr, __base, 0, __loc); -} -extern __inline unsigned long int -__NTH (__strtoul_l (__const char *__restrict __nptr, - char **__restrict __endptr, int __base, __locale_t __loc)) -{ - return ____strtoul_l_internal (__nptr, __endptr, __base, 0, __loc); -} -extern __inline float -__NTH (__strtof_l (__const char *__restrict __nptr, char **__restrict __endptr, - __locale_t __loc)) -{ - return ____strtof_l_internal (__nptr, __endptr, 0, __loc); -} -extern __inline long double -__NTH (__strtold_l (__const char *__restrict __nptr, - char **__restrict __endptr, __locale_t __loc)) -{ - return ____strtold_l_internal (__nptr, __endptr, 0, __loc); -} -__extension__ extern __inline long long int -__NTH (__strtoll_l (__const char *__restrict __nptr, - char **__restrict __endptr, int __base, __locale_t __loc)) -{ - return ____strtoll_l_internal (__nptr, __endptr, __base, 0, __loc); -} -__extension__ extern __inline unsigned long long int -__NTH (__strtoull_l (__const char * __restrict __nptr, - char **__restrict __endptr, int __base, __locale_t __loc)) -{ - return ____strtoull_l_internal (__nptr, __endptr, __base, 0, __loc); -} +libc_hidden_proto (strtof) +libc_hidden_proto (strtod) +libc_hidden_proto (strtold) +libc_hidden_proto (strtol) +libc_hidden_proto (strtoll) +libc_hidden_proto (strtoul) +libc_hidden_proto (strtoull) extern char *__ecvt (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign); diff --git a/libc/include/time.h b/libc/include/time.h index d71f98501..ed6cb3669 100644 --- a/libc/include/time.h +++ b/libc/include/time.h @@ -93,17 +93,10 @@ extern int __getclktck (void); /* strptime support. */ -/* Status of lookup: do we use the locale data or the raw data? */ -#ifndef __cplusplus -/* C++ cannot deal with using 'not'. */ -enum ptime_locale_status { not, loc, raw }; - extern char * __strptime_internal (const char *rp, const char *fmt, - struct tm *tm, - enum ptime_locale_status *decided, - int era_cnt, __locale_t locparam) + struct tm *tm, void *statep, + __locale_t locparam) internal_function; -#endif extern double __difftime (time_t time1, time_t time0); diff --git a/libc/include/wchar.h b/libc/include/wchar.h index 89e9a4f81..b5f74da0f 100644 --- a/libc/include/wchar.h +++ b/libc/include/wchar.h @@ -15,9 +15,42 @@ extern __typeof (wcstod_l) __wcstod_l; extern __typeof (wcstof_l) __wcstof_l; extern __typeof (wcstold_l) __wcstold_l; extern __typeof (wcsftime_l) __wcsftime_l; +libc_hidden_proto (__wcstol_l) +libc_hidden_proto (__wcstoul_l) +libc_hidden_proto (__wcstoll_l) +libc_hidden_proto (__wcstoull_l) +libc_hidden_proto (__wcstod_l) +libc_hidden_proto (__wcstof_l) +libc_hidden_proto (__wcstold_l) libc_hidden_proto (__wcsftime_l) +extern double __wcstod_internal (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __group) + __THROW; +extern float __wcstof_internal (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, int __group) + __THROW; +extern long double __wcstold_internal (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __group) __THROW; +extern long int __wcstol_internal (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, int __group) __THROW; +extern unsigned long int __wcstoul_internal (__const wchar_t *__restrict __npt, + wchar_t **__restrict __endptr, + int __base, int __group) __THROW; +__extension__ +extern long long int __wcstoll_internal (__const wchar_t *__restrict __nptr, + wchar_t **__restrict __endptr, + int __base, int __group) __THROW; +__extension__ +extern unsigned long long int __wcstoull_internal (__const wchar_t * + __restrict __nptr, + wchar_t ** + __restrict __endptr, + int __base, + int __group) __THROW; libc_hidden_proto (__wcstof_internal) libc_hidden_proto (__wcstod_internal) libc_hidden_proto (__wcstold_internal) @@ -25,6 +58,13 @@ libc_hidden_proto (__wcstol_internal) libc_hidden_proto (__wcstoll_internal) libc_hidden_proto (__wcstoul_internal) libc_hidden_proto (__wcstoull_internal) +libc_hidden_proto (wcstof) +libc_hidden_proto (wcstod) +libc_hidden_proto (wcstold) +libc_hidden_proto (wcstol) +libc_hidden_proto (wcstoll) +libc_hidden_proto (wcstoul) +libc_hidden_proto (wcstoull) libc_hidden_proto (__wcscasecmp_l) libc_hidden_proto (__wcsncasecmp_l) diff --git a/libc/intl/dcigettext.c b/libc/intl/dcigettext.c index 2b826582c..767e43add 100644 --- a/libc/intl/dcigettext.c +++ b/libc/intl/dcigettext.c @@ -1,5 +1,5 @@ /* Implementation of the internal dcigettext function. - Copyright (C) 1995-2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2005, 2006, 2007 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 @@ -952,8 +952,11 @@ _nl_find_msg (domain_file, domainbinding, msgid, convert, lengthp) /* If the output encoding is the same there is nothing to do. Otherwise do not use the translation at all. */ - if (__builtin_expect (r != __GCONV_NOCONV, 1)) - return NULL; + if (__builtin_expect (r != __GCONV_NULCONV, 1)) + { + free ((char *) encoding); + return NULL; + } convd->conv = (__gconv_t) -1; } diff --git a/libc/intl/explodename.c b/libc/intl/explodename.c index 8e326ead5..321204d8d 100644 --- a/libc/intl/explodename.c +++ b/libc/intl/explodename.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995-2002, 2003, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1995-2002, 2003, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. @@ -108,7 +108,9 @@ _nl_explode_name (name, language, modifier, territory, codeset, { *normalized_codeset = _nl_normalize_codeset (*codeset, cp - *codeset); - if (strcmp (*codeset, *normalized_codeset) == 0) + if (*normalized_codeset == NULL) + return -1; + else if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else mask |= XPG_NORM_CODESET; diff --git a/libc/intl/finddomain.c b/libc/intl/finddomain.c index 9806ba12c..03583b12b 100644 --- a/libc/intl/finddomain.c +++ b/libc/intl/finddomain.c @@ -1,5 +1,5 @@ /* Handle list of needed message catalogs - Copyright (C) 1995-1999, 2000, 2001, 2002, 2004, 2006 + Copyright (C) 1995-1999, 2000, 2001, 2002, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Ulrich Drepper <drepper@gnu.org>, 1995. @@ -126,6 +126,9 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ mask = _nl_explode_name (locale, &language, &modifier, &territory, &codeset, &normalized_codeset); + if (mask == -1) + /* This means we are out of core. */ + return NULL; /* We need to protect modifying the _NL_LOADED_DOMAINS data. */ __libc_rwlock_wrlock (lock); @@ -140,7 +143,7 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) if (retval == NULL) /* This means we are out of core. */ - return NULL; + goto out; if (retval->decided <= 0) _nl_load_domain (retval, domainbinding); @@ -156,6 +159,7 @@ _nl_find_domain (dirname, locale, domainname, domainbinding) } } +out: /* The space for normalized_codeset is dynamically allocated. Free it. */ if (mask & XPG_NORM_CODESET) free ((void *) normalized_codeset); diff --git a/libc/intl/gettextP.h b/libc/intl/gettextP.h index f18535a5b..f680a9a0a 100644 --- a/libc/intl/gettextP.h +++ b/libc/intl/gettextP.h @@ -1,5 +1,6 @@ /* Header describing internals of libintl library. - Copyright (C) 1995-1999, 2000, 2001, 2004-2005 Free Software Foundation, Inc. + Copyright (C) 1995-1999, 2000, 2001, 2004-2005, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Ulrich Drepper <drepper@cygnus.com>, 1995. @@ -147,7 +148,7 @@ struct loaded_domain struct converted_domain *conversions; size_t nconversions; - struct expression *plural; + const struct expression *plural; unsigned long int nplurals; }; diff --git a/libc/intl/loadmsgcat.c b/libc/intl/loadmsgcat.c index 1f5553109..1c47475ec 100644 --- a/libc/intl/loadmsgcat.c +++ b/libc/intl/loadmsgcat.c @@ -1276,7 +1276,7 @@ _nl_unload_domain (domain) size_t i; if (domain->plural != &__gettext_germanic_plural) - __gettext_free_exp (domain->plural); + __gettext_free_exp ((struct expression *) domain->plural); for (i = 0; i < domain->nconversions; i++) { diff --git a/libc/intl/plural-eval.c b/libc/intl/plural-eval.c index ed29e201b..3f01688c2 100644 --- a/libc/intl/plural-eval.c +++ b/libc/intl/plural-eval.c @@ -1,5 +1,5 @@ /* Plural expression evaluation. - Copyright (C) 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,14 +17,14 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -static unsigned long int plural_eval (struct expression *pexp, +static unsigned long int plural_eval (const struct expression *pexp, unsigned long int n) internal_function; static unsigned long int internal_function plural_eval (pexp, n) - struct expression *pexp; + const struct expression *pexp; unsigned long int n; { switch (pexp->nargs) diff --git a/libc/intl/plural-exp.c b/libc/intl/plural-exp.c index 9cb7a4540..b3eee6b43 100644 --- a/libc/intl/plural-exp.c +++ b/libc/intl/plural-exp.c @@ -1,5 +1,5 @@ /* Expression parsing for plural form selection. - Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2005, 2007 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@cygnus.com>, 2000. This file is part of the GNU C Library. @@ -99,7 +99,7 @@ void internal_function EXTRACT_PLURAL_EXPRESSION (nullentry, pluralp, npluralsp) const char *nullentry; - struct expression **pluralp; + const struct expression **pluralp; unsigned long int *npluralsp; { if (nullentry != NULL) diff --git a/libc/intl/plural-exp.h b/libc/intl/plural-exp.h index f8a5c87ff..4a7336e26 100644 --- a/libc/intl/plural-exp.h +++ b/libc/intl/plural-exp.h @@ -1,5 +1,5 @@ /* Expression parsing and evaluation for plural form selection. - Copyright (C) 2000, 2001, 2002, 2005 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2005, 2007 Free Software Foundation, Inc. Written by Ulrich Drepper <drepper@cygnus.com>, 2000. This file is part of the GNU C Library. @@ -114,13 +114,12 @@ extern void FREE_EXPRESSION PARAMS ((struct expression *exp)) internal_function; extern int PLURAL_PARSE PARAMS ((void *arg)); extern const struct expression GERMANIC_PLURAL attribute_hidden; -extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry, - struct expression **pluralp, - unsigned long int *npluralsp)) - internal_function; +extern void EXTRACT_PLURAL_EXPRESSION PARAMS + ((const char *nullentry, const struct expression **pluralp, + unsigned long int *npluralsp)) internal_function; #if !defined (_LIBC) && !defined (IN_LIBINTL) -extern unsigned long int plural_eval PARAMS ((struct expression *pexp, +extern unsigned long int plural_eval PARAMS ((const struct expression *pexp, unsigned long int n)); #endif diff --git a/libc/io/Makefile b/libc/io/Makefile index 32c3461a9..e83952e06 100644 --- a/libc/io/Makefile +++ b/libc/io/Makefile @@ -25,7 +25,7 @@ subdir := io headers := sys/stat.h bits/stat.h sys/statfs.h bits/statfs.h sys/vfs.h \ sys/statvfs.h bits/statvfs.h fcntl.h sys/fcntl.h bits/fcntl.h \ - poll.h sys/poll.h bits/poll.h \ + poll.h sys/poll.h bits/poll.h bits/fcntl2.h \ utime.h ftw.h fts.h sys/sendfile.h routines := \ @@ -57,6 +57,8 @@ routines := \ utimensat futimens routines-$(OPTION_EGLIBC_BSD) += lchmod +aux := have_o_cloexec + # These routines will be omitted from the libc shared object. # Instead the static object files will be included in a special archive # linked against when the shared library will be used. @@ -70,7 +72,8 @@ tests := test-utime test-stat test-stat2 test-lfs tst-getcwd \ tst-openat tst-unlinkat tst-fstatat tst-futimesat \ tst-renameat tst-fchownat tst-fchmodat tst-faccessat \ tst-symlinkat tst-linkat tst-readlinkat tst-mkdirat \ - tst-mknodat tst-mkfifoat tst-ttyname_r bug-ftw5 + tst-mknodat tst-mkfifoat tst-ttyname_r bug-ftw5 \ + tst-posix_fallocate distribute := ftwtest-sh diff --git a/libc/io/bits/fcntl2.h b/libc/io/bits/fcntl2.h index a1b03f619..5b9fcd5e7 100644 --- a/libc/io/bits/fcntl2.h +++ b/libc/io/bits/fcntl2.h @@ -31,70 +31,74 @@ extern int __REDIRECT (__open_2, (__const char *__file, int __oflag), #endif #define open(fname, flags, ...) \ - ({ int ___r; \ - /* If the compiler complains about an invalid type, excess elements, etc \ - in the initialization this means a parameter of the wrong type has \ - been passed to open. */ \ - int ___arr[] = { __VA_ARGS__ }; \ - if (__builtin_constant_p (flags) && ((flags) & O_CREAT) != 0) \ - { \ - /* If the compiler complains about the size of this array type the \ - mode parameter is missing since O_CREAT has been used. */ \ - typedef int __open_missing_mode[((flags) & O_CREAT) != 0 \ - ? ((long int) sizeof (___arr) \ - - (long int) sizeof (int)) : 1]; \ - } \ - if (sizeof (___arr) == 0) \ - { \ - if (__builtin_constant_p (flags) && ((flags) & O_CREAT) == 0) \ - ___r = open (fname, flags); \ - else \ - ___r = __open_2 (fname, flags); \ - } \ - else \ - { \ - /* If the compiler complains about the size of this array type too \ - many parameters have been passed to open. */ \ - typedef int __open_too_many_args[-(sizeof (___arr) > sizeof (int))]; \ - ___r = open (fname, flags, ___arr[0]); \ - } \ - ___r; \ - }) + (__extension__ \ + ({ int ___r; \ + /* If the compiler complains about an invalid type, excess elements, \ + etc. in the initialization this means a parameter of the wrong type \ + has been passed to open. */ \ + int ___arr[] = { __VA_ARGS__ }; \ + if (__builtin_constant_p (flags) && ((flags) & O_CREAT) != 0) \ + { \ + /* If the compiler complains about the size of this array type the \ + mode parameter is missing since O_CREAT has been used. */ \ + typedef int __open_missing_mode[((flags) & O_CREAT) != 0 \ + ? ((long int) sizeof (___arr) \ + - (long int) sizeof (int)) : 1];\ + } \ + if (sizeof (___arr) == 0) \ + { \ + if (__builtin_constant_p (flags) && ((flags) & O_CREAT) == 0) \ + ___r = open (fname, flags); \ + else \ + ___r = __open_2 (fname, flags); \ + } \ + else \ + { \ + /* If the compiler complains about the size of this array type too \ + many parameters have been passed to open. */ \ + typedef int __open_too_many_args[-(sizeof (___arr) \ + > sizeof (int))]; \ + ___r = open (fname, flags, ___arr[0]); \ + } \ + ___r; \ + })) #ifdef __USE_LARGEFILE64 extern int __open64_2 (__const char *__path, int __oflag) __nonnull ((1)); # define open64(fname, flags, ...) \ - ({ int ___r; \ - /* If the compiler complains about an invalid type, excess elements, etc \ - in the initialization this means a parameter of the wrong type has \ - been passed to open64. */ \ - int ___arr[] = { __VA_ARGS__ }; \ - if (__builtin_constant_p (flags) && ((flags) & O_CREAT) != 0) \ - { \ - /* If the compiler complains about the size of this array type the \ - mode parameter is missing since O_CREAT has been used. */ \ - typedef int __open_missing_mode[((flags) & O_CREAT) != 0 \ - ? ((long int) sizeof (___arr) \ - - (long int) sizeof (int)) : 1]; \ - } \ - if (sizeof (___arr) == 0) \ - { \ - if (__builtin_constant_p (flags) && ((flags) & O_CREAT) == 0) \ - ___r = open64 (fname, flags); \ - else \ - ___r = __open64_2 (fname, flags); \ - } \ - else \ - { \ - /* If the compiler complains about the size of this array type too \ - many parameters have been passed to open64. */ \ - typedef int __open_too_many_args[-(sizeof (___arr) > sizeof (int))]; \ - ___r = open64 (fname, flags, ___arr[0]); \ - } \ - ___r; \ - }) + (__extension__ \ + ({ int ___r; \ + /* If the compiler complains about an invalid type, excess elements, \ + etc. in the initialization this means a parameter of the wrong type \ + has been passed to open64. */ \ + int ___arr[] = { __VA_ARGS__ }; \ + if (__builtin_constant_p (flags) && ((flags) & O_CREAT) != 0) \ + { \ + /* If the compiler complains about the size of this array type the \ + mode parameter is missing since O_CREAT has been used. */ \ + typedef int __open_missing_mode[((flags) & O_CREAT) != 0 \ + ? ((long int) sizeof (___arr) \ + - (long int) sizeof (int)) : 1];\ + } \ + if (sizeof (___arr) == 0) \ + { \ + if (__builtin_constant_p (flags) && ((flags) & O_CREAT) == 0) \ + ___r = open64 (fname, flags); \ + else \ + ___r = __open64_2 (fname, flags); \ + } \ + else \ + { \ + /* If the compiler complains about the size of this array type too \ + many parameters have been passed to open64. */ \ + typedef int __open_too_many_args[-(sizeof (___arr) \ + > sizeof (int))]; \ + ___r = open64 (fname, flags, ___arr[0]); \ + } \ + ___r; \ + })) #endif #ifdef __USE_ATFILE @@ -108,35 +112,37 @@ extern int __REDIRECT (__openat_2, (int __fd, __const char *__file, # endif # define openat(fd, fname, flags, ...) \ - ({ int ___r; \ - /* If the compiler complains about an invalid type, excess elements, etc \ - in the initialization this means a parameter of the wrong type has \ - been passed to openat. */ \ - int ___arr[] = { __VA_ARGS__ }; \ - if (__builtin_constant_p (flags) && ((flags) & O_CREAT) != 0) \ - { \ - /* If the compiler complains about the size of this array type the \ - mode parameter is missing since O_CREAT has been used. */ \ - typedef int __open_missing_mode[((flags) & O_CREAT) != 0 \ - ? ((long int) sizeof (___arr) \ - - (long int) sizeof (int)) : 1]; \ - } \ - if (sizeof (___arr) == 0) \ - { \ - if (__builtin_constant_p (flags) && ((flags) & O_CREAT) == 0) \ - ___r = openat (fd, fname, flags); \ - else \ - ___r = __openat_2 (fd, fname, flags); \ - } \ - else \ - { \ - /* If the compiler complains about the size of this array type too \ - many parameters have been passed to openat. */ \ - typedef int __open_too_many_args[-(sizeof (___arr) > sizeof (int))]; \ - ___r = openat (fd, fname, flags, ___arr[0]); \ - } \ - ___r; \ - }) + (__extension__ \ + ({ int ___r; \ + /* If the compiler complains about an invalid type, excess elements, \ + etc. in the initialization this means a parameter of the wrong type \ + has been passed to openat. */ \ + int ___arr[] = { __VA_ARGS__ }; \ + if (__builtin_constant_p (flags) && ((flags) & O_CREAT) != 0) \ + { \ + /* If the compiler complains about the size of this array type the \ + mode parameter is missing since O_CREAT has been used. */ \ + typedef int __open_missing_mode[((flags) & O_CREAT) != 0 \ + ? ((long int) sizeof (___arr) \ + - (long int) sizeof (int)) : 1];\ + } \ + if (sizeof (___arr) == 0) \ + { \ + if (__builtin_constant_p (flags) && ((flags) & O_CREAT) == 0) \ + ___r = openat (fd, fname, flags); \ + else \ + ___r = __openat_2 (fd, fname, flags); \ + } \ + else \ + { \ + /* If the compiler complains about the size of this array type too \ + many parameters have been passed to openat. */ \ + typedef int __open_too_many_args[-(sizeof (___arr) \ + > sizeof (int))]; \ + ___r = openat (fd, fname, flags, ___arr[0]); \ + } \ + ___r; \ + })) # ifdef __USE_LARGEFILE64 @@ -144,34 +150,36 @@ extern int __openat64_2 (int __fd, __const char *__path, int __oflag) __nonnull ((2)); # define openat64(fd, fname, flags, ...) \ - ({ int ___r; \ - /* If the compiler complains about an invalid type, excess elements, etc \ - in the initialization this means a parameter of the wrong type has \ - been passed to openat64. */ \ - int ___arr[] = { __VA_ARGS__ }; \ - if (__builtin_constant_p (flags) && ((flags) & O_CREAT) != 0) \ - { \ - /* If the compiler complains about the size of this array type the \ - mode parameter is missing since O_CREAT has been used. */ \ - typedef int __open_missing_mode[((flags) & O_CREAT) != 0 \ - ? ((long int) sizeof (___arr) \ - - (long int) sizeof (int)) : 1]; \ - } \ - if (sizeof (___arr) == 0) \ - { \ - if (__builtin_constant_p (flags) && ((flags) & O_CREAT) == 0) \ - ___r = openat64 (fd, fname, flags); \ - else \ - ___r = __openat64_2 (fd, fname, flags); \ - } \ - else \ - { \ - /* If the compiler complains about the size of this array type too \ - many parameters have been passed to openat64. */ \ - typedef int __open_too_many_args[-(sizeof (___arr) > sizeof (int))]; \ - ___r = openat64 (fd, fname, flags, ___arr[0]); \ - } \ - ___r; \ - }) + (__extension__ \ + ({ int ___r; \ + /* If the compiler complains about an invalid type, excess elements, \ + etc. in the initialization this means a parameter of the wrong type \ + has been passed to openat64. */ \ + int ___arr[] = { __VA_ARGS__ }; \ + if (__builtin_constant_p (flags) && ((flags) & O_CREAT) != 0) \ + { \ + /* If the compiler complains about the size of this array type the \ + mode parameter is missing since O_CREAT has been used. */ \ + typedef int __open_missing_mode[((flags) & O_CREAT) != 0 \ + ? ((long int) sizeof (___arr) \ + - (long int) sizeof (int)) : 1];\ + } \ + if (sizeof (___arr) == 0) \ + { \ + if (__builtin_constant_p (flags) && ((flags) & O_CREAT) == 0) \ + ___r = openat64 (fd, fname, flags); \ + else \ + ___r = __openat64_2 (fd, fname, flags); \ + } \ + else \ + { \ + /* If the compiler complains about the size of this array type too \ + many parameters have been passed to openat64. */ \ + typedef int __open_too_many_args[-(sizeof (___arr) \ + > sizeof (int))]; \ + ___r = openat64 (fd, fname, flags, ___arr[0]); \ + } \ + ___r; \ + })) # endif #endif diff --git a/libc/io/have_o_cloexec.c b/libc/io/have_o_cloexec.c new file mode 100644 index 000000000..a83e8a448 --- /dev/null +++ b/libc/io/have_o_cloexec.c @@ -0,0 +1,24 @@ +/* Copyright (C) 2007 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 <fcntl.h> +#include <kernel-features.h> + +#if defined O_CLOEXEC && !defined __ASSUME_O_CLOEXEC +int __have_o_cloexec; +#endif diff --git a/libc/io/tst-posix_fallocate.c b/libc/io/tst-posix_fallocate.c new file mode 100644 index 000000000..53f0704c3 --- /dev/null +++ b/libc/io/tst-posix_fallocate.c @@ -0,0 +1,100 @@ +#include <fcntl.h> +#include <sys/stat.h> + +static void do_prepare (void); +#define PREPARE(argc, argv) do_prepare () +static int do_test (void); +#define TEST_FUNCTION do_test () +#include <test-skeleton.c> + +static int fd; + +static void +do_prepare (void) +{ + fd = create_temp_file ("tst-posix_fallocate.", NULL); + if (fd == -1) + { + printf ("cannot create temporary file: %m\n"); + exit (1); + } +} + + +static int +do_test (void) +{ + struct stat64 st; + + if (fstat64 (fd, &st) != 0) + { + puts ("1st fstat failed"); + return 1; + } + + if (st.st_size != 0) + { + puts ("file not created with size 0"); + return 1; + } + + if (posix_fallocate (fd, 512, 768) != 0) + { + puts ("1st posix_fallocate call failed"); + return 1; + } + + if (fstat64 (fd, &st) != 0) + { + puts ("2nd fstat failed"); + return 1; + } + + if (st.st_size != 512 + 768) + { + printf ("file size after first posix_fallocate call is %llu, expected %u\n", + (unsigned long long int) st.st_size, 512u + 768u); + return 1; + } + + if (posix_fallocate (fd, 0, 1024) != 0) + { + puts ("2nd posix_fallocate call failed"); + return 1; + } + + if (fstat64 (fd, &st) != 0) + { + puts ("3rd fstat failed"); + return 1; + } + + if (st.st_size != 512 + 768) + { + puts ("file size changed in second posix_fallocate"); + return 1; + } + + if (posix_fallocate (fd, 2048, 64) != 0) + { + puts ("3rd posix_fallocate call failed"); + return 1; + } + + if (fstat64 (fd, &st) != 0) + { + puts ("4th fstat failed"); + return 1; + } + + if (st.st_size != 2048 + 64) + { + printf ("file size after first posix_fallocate call is %llu, expected %u\n", + (unsigned long long int) st.st_size, 2048u + 64u); + return 1; + } + + close (fd); + + return 0; +} diff --git a/libc/libio/bits/stdio2.h b/libc/libio/bits/stdio2.h index 924a4817e..89f5770ee 100644 --- a/libc/libio/bits/stdio2.h +++ b/libc/libio/bits/stdio2.h @@ -98,6 +98,27 @@ fgets (char *__restrict __s, int __n, FILE *__restrict __stream) return __fgets_alias (__s, __n, __stream); } +extern size_t __fread_chk (void *__restrict __ptr, size_t __ptrlen, + size_t __size, size_t __n, + FILE *__restrict __stream) __wur; +extern size_t __REDIRECT (__fread_alias, + (void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream), + fread) __wur; + +__extern_always_inline __wur size_t +fread (void *__restrict __ptr, size_t __size, size_t __n, + FILE *__restrict __stream) +{ + if (__bos0 (__ptr) != (size_t) -1 + && (!__builtin_constant_p (__size) + || !__builtin_constant_p (__n) + || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)) + || __size * __n > __bos0 (__ptr))) + return __fread_chk (__ptr, __bos0 (__ptr), __size, __n, __stream); + return __fread_alias (__ptr, __size, __n, __stream); +} + #ifdef __USE_GNU extern char *__fgets_unlocked_chk (char *__restrict __s, size_t __size, int __n, FILE *__restrict __stream) __wur; @@ -114,3 +135,49 @@ fgets_unlocked (char *__restrict __s, int __n, FILE *__restrict __stream) return __fgets_unlocked_alias (__s, __n, __stream); } #endif + +#ifdef __USE_MISC +# undef fread_unlocked +extern size_t __fread_unlocked_chk (void *__restrict __ptr, size_t __ptrlen, + size_t __size, size_t __n, + FILE *__restrict __stream) __wur; +extern size_t __REDIRECT (__fread_unlocked_alias, + (void *__restrict __ptr, size_t __size, + size_t __n, FILE *__restrict __stream), + fread_unlocked) __wur; + +__extern_always_inline __wur size_t +fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n, + FILE *__restrict __stream) +{ + if (__bos0 (__ptr) != (size_t) -1 + && (!__builtin_constant_p (__size) + || !__builtin_constant_p (__n) + || (__size | __n) >= (((size_t) 1) << (8 * sizeof (size_t) / 2)) + || __size * __n > __bos0 (__ptr))) + return __fread_unlocked_chk (__ptr, __bos0 (__ptr), __size, __n, __stream); + +# ifdef __USE_EXTERN_INLINES + if (__builtin_constant_p (__size) + && __builtin_constant_p (__n) + && (__size | __n) < (((size_t) 1) << (8 * sizeof (size_t) / 2)) + && __size * __n <= 8) + { + size_t __cnt = __size * __n; + char *__cptr = (char *) __ptr; + if (__cnt == 0) + return 0; + + for (; __cnt > 0; --__cnt) + { + int __c = _IO_getc_unlocked (__stream); + if (__c == EOF) + break; + *__cptr++ = __c; + } + return (__cptr - (char *) __ptr) / __size; + } +# endif + return __fread_unlocked_alias (__ptr, __size, __n, __stream); +} +#endif diff --git a/libc/libio/fileops.c b/libc/libio/fileops.c index 886b3729c..95cd2d64c 100644 --- a/libc/libio/fileops.c +++ b/libc/libio/fileops.c @@ -320,6 +320,11 @@ _IO_new_file_fopen (fp, filename, mode, is32not64) case 'c': fp->_flags2 |= _IO_FLAGS2_NOTCANCEL; break; +#ifdef O_CLOEXEC + case 'e': + oflags |= O_CLOEXEC; + break; +#endif default: /* Ignore. */ continue; diff --git a/libc/libio/genops.c b/libc/libio/genops.c index 3f8d71a50..7005fdbd9 100644 --- a/libc/libio/genops.c +++ b/libc/libio/genops.c @@ -64,23 +64,29 @@ _IO_un_link (fp) { if (fp->file._flags & _IO_LINKED) { - struct _IO_FILE_plus **f; + struct _IO_FILE **f; #ifdef _IO_MTSAFE_IO _IO_cleanup_region_start_noarg (flush_cleanup); _IO_lock_lock (list_all_lock); run_fp = (_IO_FILE *) fp; _IO_flockfile ((_IO_FILE *) fp); #endif - for (f = &INTUSE(_IO_list_all); *f; - f = (struct _IO_FILE_plus **) &(*f)->file._chain) + if (INTUSE(_IO_list_all) == NULL) + ; + else if (fp == INTUSE(_IO_list_all)) { - if (*f == fp) + INTUSE(_IO_list_all) + = (struct _IO_FILE_plus *) INTUSE(_IO_list_all)->file._chain; + ++_IO_list_all_stamp; + } + else + for (f = &INTUSE(_IO_list_all)->file._chain; *f; f = &(*f)->_chain) + if (*f == (_IO_FILE *) fp) { - *f = (struct _IO_FILE_plus *) fp->file._chain; + *f = fp->file._chain; ++_IO_list_all_stamp; break; } - } fp->file._flags &= ~_IO_LINKED; #ifdef _IO_MTSAFE_IO _IO_funlockfile ((_IO_FILE *) fp); diff --git a/libc/libio/iopopen.c b/libc/libio/iopopen.c index 896e930f4..d5c6305b0 100644 --- a/libc/libio/iopopen.c +++ b/libc/libio/iopopen.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1993, 1997-2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1997-2002, 2003, 2004, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Per Bothner <bothner@cygnus.com>. @@ -169,7 +170,15 @@ _IO_new_proc_open (fp, command, mode) popen() calls that remain open in the parent process are closed in the new child process." */ for (p = proc_file_chain; p; p = p->next) - _IO_close (_IO_fileno ((_IO_FILE *) p)); + { + int fd = _IO_fileno ((_IO_FILE *) p); + + /* If any stream from previous popen() calls has fileno + child_std_end, it has been already closed by the dup2 syscall + above. */ + if (fd != child_std_end) + _IO_close (fd); + } _IO_execl ("/bin/sh", "sh", "-c", command, (char *) 0); _IO__exit (127); diff --git a/libc/libio/libio.h b/libc/libio/libio.h index 9df08614e..a80788385 100644 --- a/libc/libio/libio.h +++ b/libc/libio/libio.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1995,1997-2005,2006 Free Software Foundation, Inc. +/* Copyright (C) 1991-1995,1997-2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Per Bothner <bothner@cygnus.com>. @@ -413,9 +413,11 @@ extern "C" { extern int __underflow (_IO_FILE *); extern int __uflow (_IO_FILE *); extern int __overflow (_IO_FILE *, int); +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T extern _IO_wint_t __wunderflow (_IO_FILE *); extern _IO_wint_t __wuflow (_IO_FILE *); extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t); +#endif #if __GNUC__ >= 3 # define _IO_BE(expr, res) __builtin_expect ((expr), res) @@ -435,15 +437,17 @@ extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t); ? __overflow (_fp, (unsigned char) (_ch)) \ : (unsigned char) (*(_fp)->_IO_write_ptr++ = (_ch))) -#define _IO_getwc_unlocked(_fp) \ +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T +# define _IO_getwc_unlocked(_fp) \ (_IO_BE ((_fp)->_wide_data->_IO_read_ptr >= (_fp)->_wide_data->_IO_read_end,\ 0) \ ? __wuflow (_fp) : (_IO_wint_t) *(_fp)->_wide_data->_IO_read_ptr++) -#define _IO_putwc_unlocked(_wch, _fp) \ +# define _IO_putwc_unlocked(_wch, _fp) \ (_IO_BE ((_fp)->_wide_data->_IO_write_ptr \ >= (_fp)->_wide_data->_IO_write_end, 0) \ ? __woverflow (_fp, _wch) \ : (_IO_wint_t) (*(_fp)->_wide_data->_IO_write_ptr++ = (_wch))) +#endif #define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0) #define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0) diff --git a/libc/libio/libioP.h b/libc/libio/libioP.h index a574b40f7..b99b81743 100644 --- a/libc/libio/libioP.h +++ b/libc/libio/libioP.h @@ -968,3 +968,13 @@ _IO_acquire_lock_fct (_IO_FILE **p) if ((fp->_flags & _IO_USER_LOCK) == 0) _IO_funlockfile (fp); } + +static inline void +__attribute__ ((__always_inline__)) +_IO_acquire_lock_clear_flags2_fct (_IO_FILE **p) +{ + _IO_FILE *fp = *p; + fp->_flags &= ~_IO_FLAGS2_FORTIFY; + if ((fp->_flags & _IO_USER_LOCK) == 0) + _IO_funlockfile (fp); +} diff --git a/libc/libio/oldtmpfile.c b/libc/libio/oldtmpfile.c index 8631d48c0..d85467a39 100644 --- a/libc/libio/oldtmpfile.c +++ b/libc/libio/oldtmpfile.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1991,1993,1996-2000,2003,2004 Free Software Foundation, Inc. +/* Copyright (C) 1991,1993,1996-2000,2003,2004,2007 + 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 @@ -38,7 +39,7 @@ __old_tmpfile (void) if (__path_search (buf, FILENAME_MAX, NULL, "tmpf", 0)) return NULL; - fd = __gen_tempname (buf, __GT_FILE); + fd = __gen_tempname (buf, 0, __GT_FILE); if (fd < 0) return NULL; diff --git a/libc/locale/localeinfo.h b/libc/locale/localeinfo.h index 5c1f27f7e..5e3e99ca6 100644 --- a/libc/locale/localeinfo.h +++ b/libc/locale/localeinfo.h @@ -1,5 +1,5 @@ /* Declarations for internal libc locale interfaces - Copyright (C) 1995-2003, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2003, 2005, 2006, 2007 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 @@ -186,7 +186,7 @@ extern const union catnamestr_t }; char str[0]; } _nl_category_names attribute_hidden; -const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden; +extern const uint8_t _nl_category_name_idxs[__LC_LAST] attribute_hidden; extern const uint8_t _nl_category_name_sizes[__LC_LAST] attribute_hidden; /* Name of the standard locales. */ diff --git a/libc/locale/programs/3level.h b/libc/locale/programs/3level.h index eebcca413..d2a7fd07f 100644 --- a/libc/locale/programs/3level.h +++ b/libc/locale/programs/3level.h @@ -3,8 +3,9 @@ Contributed by Bruno Haible <haible@clisp.cons.org>, 2000. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/charmap-dir.c b/libc/locale/programs/charmap-dir.c index 0568ab5ca..dc14c94fc 100644 --- a/libc/locale/programs/charmap-dir.c +++ b/libc/locale/programs/charmap-dir.c @@ -2,8 +2,9 @@ This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/charmap-dir.h b/libc/locale/programs/charmap-dir.h index 256db8dc3..028f926b0 100644 --- a/libc/locale/programs/charmap-dir.h +++ b/libc/locale/programs/charmap-dir.h @@ -2,8 +2,9 @@ This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/charmap-kw.gperf b/libc/locale/programs/charmap-kw.gperf index 64f745250..03fea9484 100644 --- a/libc/locale/programs/charmap-kw.gperf +++ b/libc/locale/programs/charmap-kw.gperf @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper, <drepper@gnu.org>. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/charmap-kw.h b/libc/locale/programs/charmap-kw.h index d7d85774d..8ad642163 100644 --- a/libc/locale/programs/charmap-kw.h +++ b/libc/locale/programs/charmap-kw.h @@ -35,8 +35,9 @@ Contributed by Ulrich Drepper, <drepper@gnu.org>. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/charmap.c b/libc/locale/programs/charmap.c index dbc1101fd..ef528217f 100644 --- a/libc/locale/programs/charmap.c +++ b/libc/locale/programs/charmap.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/charmap.h b/libc/locale/programs/charmap.h index fd711f2d1..11fddd760 100644 --- a/libc/locale/programs/charmap.h +++ b/libc/locale/programs/charmap.h @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/config.h b/libc/locale/programs/config.h index 6f9bfde90..2f66997ab 100644 --- a/libc/locale/programs/config.h +++ b/libc/locale/programs/config.h @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1995. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/ld-address.c b/libc/locale/programs/ld-address.c index ae642369d..40149fde1 100644 --- a/libc/locale/programs/ld-address.c +++ b/libc/locale/programs/ld-address.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/ld-collate.c b/libc/locale/programs/ld-collate.c index f87e419be..3e2f88fe8 100644 --- a/libc/locale/programs/ld-collate.c +++ b/libc/locale/programs/ld-collate.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -996,7 +997,8 @@ insert_value (struct linereader *ldfile, const char *symstr, size_t symlen, uint32_t wcs[2] = { wc, 0 }; /* We have to allocate an entry. */ - elem = new_element (collate, seq != NULL ? seq->bytes : NULL, + elem = new_element (collate, + seq != NULL ? (char *) seq->bytes : NULL, seq != NULL ? seq->nbytes : 0, wc == ILLEGAL_CHAR_VALUE ? NULL : wcs, symstr, symlen, 1); @@ -1391,7 +1393,8 @@ order for `%.*s' already defined at %s:%Zu"), /* We have to allocate an entry. */ elem = new_element (collate, - seq != NULL ? seq->bytes : NULL, + seq != NULL + ? (char *) seq->bytes : NULL, seq != NULL ? seq->nbytes : 0, wc == ILLEGAL_CHAR_VALUE ? NULL : wcs, buf, lenfrom, 1); @@ -1940,6 +1943,137 @@ output_weightwc (struct obstack *pool, struct locale_collate_t *collate, return retval | ((elem->section->ruleidx & 0x7f) << 24); } +/* If localedef is every threaded, this would need to be __thread var. */ +static struct +{ + struct obstack *weightpool; + struct obstack *extrapool; + struct obstack *indpool; + struct locale_collate_t *collate; + struct collidx_table *tablewc; +} atwc; + +static void add_to_tablewc (uint32_t ch, struct element_t *runp); + +static void +add_to_tablewc (uint32_t ch, struct element_t *runp) +{ + if (runp->wcnext == NULL && runp->nwcs == 1) + { + int32_t weigthidx = output_weightwc (atwc.weightpool, atwc.collate, + runp); + collidx_table_add (atwc.tablewc, ch, weigthidx); + } + else + { + /* As for the singlebyte table, we recognize sequences and + compress them. */ + struct element_t *lastp; + + collidx_table_add (atwc.tablewc, ch, + -(obstack_object_size (atwc.extrapool) + / sizeof (uint32_t))); + + do + { + /* Store the current index in the weight table. We know that + the current position in the `extrapool' is aligned on a + 32-bit address. */ + int32_t weightidx; + int added; + + /* Find out wether this is a single entry or we have more than + one consecutive entry. */ + if (runp->wcnext != NULL + && runp->nwcs == runp->wcnext->nwcs + && wmemcmp_uint32 (runp->wcs, + runp->wcnext->wcs, + runp->nwcs - 1) == 0 + && (runp->wcs[runp->nwcs - 1] + == runp->wcnext->wcs[runp->nwcs - 1] + 1)) + { + int i; + struct element_t *series_startp = runp; + struct element_t *curp; + + /* Now add first the initial byte sequence. */ + added = (1 + 1 + 2 * (runp->nwcs - 1)) * sizeof (int32_t); + if (sizeof (int32_t) == sizeof (int)) + obstack_make_room (atwc.extrapool, added); + + /* More than one consecutive entry. We mark this by having + a negative index into the indirect table. */ + obstack_int32_grow_fast (atwc.extrapool, + -(obstack_object_size (atwc.indpool) + / sizeof (int32_t))); + obstack_int32_grow_fast (atwc.extrapool, runp->nwcs - 1); + + do + runp = runp->wcnext; + while (runp->wcnext != NULL + && runp->nwcs == runp->wcnext->nwcs + && wmemcmp_uint32 (runp->wcs, + runp->wcnext->wcs, + runp->nwcs - 1) == 0 + && (runp->wcs[runp->nwcs - 1] + == runp->wcnext->wcs[runp->nwcs - 1] + 1)); + + /* Now walk backward from here to the beginning. */ + curp = runp; + + for (i = 1; i < runp->nwcs; ++i) + obstack_int32_grow_fast (atwc.extrapool, curp->wcs[i]); + + /* Now find the end of the consecutive sequence and + add all the indeces in the indirect pool. */ + do + { + weightidx = output_weightwc (atwc.weightpool, atwc.collate, + curp); + obstack_int32_grow (atwc.indpool, weightidx); + + curp = curp->wclast; + } + while (curp != series_startp); + + /* Add the final weight. */ + weightidx = output_weightwc (atwc.weightpool, atwc.collate, + curp); + obstack_int32_grow (atwc.indpool, weightidx); + + /* And add the end byte sequence. Without length this + time. */ + for (i = 1; i < curp->nwcs; ++i) + obstack_int32_grow (atwc.extrapool, curp->wcs[i]); + } + else + { + /* A single entry. Simply add the index and the length and + string (except for the first character which is already + tested for). */ + int i; + + /* Output the weight info. */ + weightidx = output_weightwc (atwc.weightpool, atwc.collate, + runp); + + added = (1 + 1 + runp->nwcs - 1) * sizeof (int32_t); + if (sizeof (int) == sizeof (int32_t)) + obstack_make_room (atwc.extrapool, added); + + obstack_int32_grow_fast (atwc.extrapool, weightidx); + obstack_int32_grow_fast (atwc.extrapool, runp->nwcs - 1); + for (i = 1; i < runp->nwcs; ++i) + obstack_int32_grow_fast (atwc.extrapool, runp->wcs[i]); + } + + /* Next entry. */ + lastp = runp; + runp = runp->wcnext; + } + while (runp != NULL); + } +} void collate_output (struct localedef_t *locale, const struct charmap_t *charmap, @@ -2211,130 +2345,21 @@ collate_output (struct localedef_t *locale, const struct charmap_t *charmap, with the same wide character and add them one after the other to the table. In case we have more than one sequence starting with the same byte we have to use extra indirection. */ - { - auto void add_to_tablewc (uint32_t ch, struct element_t *runp); + tablewc.p = 6; + tablewc.q = 10; + collidx_table_init (&tablewc); - void add_to_tablewc (uint32_t ch, struct element_t *runp) - { - if (runp->wcnext == NULL && runp->nwcs == 1) - { - int32_t weigthidx = output_weightwc (&weightpool, collate, runp); - collidx_table_add (&tablewc, ch, weigthidx); - } - else - { - /* As for the singlebyte table, we recognize sequences and - compress them. */ - struct element_t *lastp; + atwc.weightpool = &weightpool; + atwc.extrapool = &extrapool; + atwc.indpool = &indirectpool; + atwc.collate = collate; + atwc.tablewc = &tablewc; - collidx_table_add (&tablewc, ch, - -(obstack_object_size (&extrapool) / sizeof (uint32_t))); + wchead_table_iterate (&collate->wcheads, add_to_tablewc); - do - { - /* Store the current index in the weight table. We know that - the current position in the `extrapool' is aligned on a - 32-bit address. */ - int32_t weightidx; - int added; - - /* Find out wether this is a single entry or we have more than - one consecutive entry. */ - if (runp->wcnext != NULL - && runp->nwcs == runp->wcnext->nwcs - && wmemcmp_uint32 (runp->wcs, - runp->wcnext->wcs, - runp->nwcs - 1) == 0 - && (runp->wcs[runp->nwcs - 1] - == runp->wcnext->wcs[runp->nwcs - 1] + 1)) - { - int i; - struct element_t *series_startp = runp; - struct element_t *curp; - - /* Now add first the initial byte sequence. */ - added = (1 + 1 + 2 * (runp->nwcs - 1)) * sizeof (int32_t); - if (sizeof (int32_t) == sizeof (int)) - obstack_make_room (&extrapool, added); - - /* More than one consecutive entry. We mark this by having - a negative index into the indirect table. */ - obstack_int32_grow_fast (&extrapool, - -(obstack_object_size (&indirectpool) - / sizeof (int32_t))); - obstack_int32_grow_fast (&extrapool, runp->nwcs - 1); - - do - runp = runp->wcnext; - while (runp->wcnext != NULL - && runp->nwcs == runp->wcnext->nwcs - && wmemcmp_uint32 (runp->wcs, - runp->wcnext->wcs, - runp->nwcs - 1) == 0 - && (runp->wcs[runp->nwcs - 1] - == runp->wcnext->wcs[runp->nwcs - 1] + 1)); - - /* Now walk backward from here to the beginning. */ - curp = runp; - - for (i = 1; i < runp->nwcs; ++i) - obstack_int32_grow_fast (&extrapool, curp->wcs[i]); - - /* Now find the end of the consecutive sequence and - add all the indeces in the indirect pool. */ - do - { - weightidx = output_weightwc (&weightpool, collate, - curp); - obstack_int32_grow (&indirectpool, weightidx); + collidx_table_finalize (&tablewc); - curp = curp->wclast; - } - while (curp != series_startp); - - /* Add the final weight. */ - weightidx = output_weightwc (&weightpool, collate, curp); - obstack_int32_grow (&indirectpool, weightidx); - - /* And add the end byte sequence. Without length this - time. */ - for (i = 1; i < curp->nwcs; ++i) - obstack_int32_grow_fast (&extrapool, curp->wcs[i]); - } - else - { - /* A single entry. Simply add the index and the length and - string (except for the first character which is already - tested for). */ - int i; - - /* Output the weight info. */ - weightidx = output_weightwc (&weightpool, collate, runp); - - added = (1 + 1 + runp->nwcs - 1) * sizeof (int32_t); - if (sizeof (int) == sizeof (int32_t)) - obstack_make_room (&extrapool, added); - - obstack_int32_grow_fast (&extrapool, weightidx); - obstack_int32_grow_fast (&extrapool, runp->nwcs - 1); - for (i = 1; i < runp->nwcs; ++i) - obstack_int32_grow_fast (&extrapool, runp->wcs[i]); - } - - /* Next entry. */ - lastp = runp; - runp = runp->wcnext; - } - while (runp != NULL); - } - } - - tablewc.p = 6; - tablewc.q = 10; - collidx_table_init (&tablewc); - - wchead_table_iterate (&collate->wcheads, add_to_tablewc); - } + memset (&atwc, 0, sizeof (atwc)); /* Now add the four tables. */ add_locale_collidx_table (&file, &tablewc); @@ -2384,7 +2409,9 @@ collate_output (struct localedef_t *locale, const struct charmap_t *charmap, uint32_t namelen = strlen (runp->name); uint32_t hash = elem_hash (runp->name, namelen); size_t idx = hash % elem_size; +#ifndef NDEBUG size_t start_idx = idx; +#endif if (elem_table[idx * 2] != 0) { diff --git a/libc/locale/programs/ld-ctype.c b/libc/locale/programs/ld-ctype.c index 2558a7617..2a4eae7f3 100644 --- a/libc/locale/programs/ld-ctype.c +++ b/libc/locale/programs/ld-ctype.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -689,7 +690,8 @@ character <SP> not defined in character map"))); /* Find the UCS value for `bytes'. */ int inner; uint32_t wch; - struct charseq *seq = charmap_find_symbol (charmap, bytes, nbytes); + struct charseq *seq + = charmap_find_symbol (charmap, (char *) bytes, nbytes); if (seq == NULL) wch = ILLEGAL_CHAR_VALUE; @@ -790,7 +792,7 @@ character <SP> not defined in character map"))); for (cnt = 0; cnt < 10; ++cnt) { ctype->mbdigits[cnt] = charmap_find_symbol (charmap, - digits + cnt, 1); + (char *) digits + cnt, 1); if (ctype->mbdigits[cnt] == NULL) { ctype->mbdigits[cnt] = charmap_find_symbol (charmap, @@ -3373,7 +3375,8 @@ set_class_defaults (struct locale_ctype_t *ctype, for (cnt = ctype->outdigits_act; cnt < 10; ++cnt) { ctype->mboutdigits[cnt] = charmap_find_symbol (charmap, - digits + cnt, 1); + (char *) digits + cnt, + 1); if (ctype->mboutdigits[cnt] == NULL) ctype->mboutdigits[cnt] = charmap_find_symbol (charmap, @@ -3879,7 +3882,7 @@ allocate_arrays (struct locale_ctype_t *ctype, const struct charmap_t *charmap, int inner; uint32_t wch; struct charseq *seq = - charmap_find_symbol (charmap, bytes, nbytes); + charmap_find_symbol (charmap, (char *) bytes, nbytes); if (seq == NULL) wch = ILLEGAL_CHAR_VALUE; diff --git a/libc/locale/programs/ld-identification.c b/libc/locale/programs/ld-identification.c index 2a0b04556..883f727fb 100644 --- a/libc/locale/programs/ld-identification.c +++ b/libc/locale/programs/ld-identification.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/ld-measurement.c b/libc/locale/programs/ld-measurement.c index 7c880b39a..3159af6a3 100644 --- a/libc/locale/programs/ld-measurement.c +++ b/libc/locale/programs/ld-measurement.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/ld-messages.c b/libc/locale/programs/ld-messages.c index 7c9399802..af87b9b9e 100644 --- a/libc/locale/programs/ld-messages.c +++ b/libc/locale/programs/ld-messages.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/ld-monetary.c b/libc/locale/programs/ld-monetary.c index 11409f090..8224fa048 100644 --- a/libc/locale/programs/ld-monetary.c +++ b/libc/locale/programs/ld-monetary.c @@ -1,10 +1,12 @@ -/* Copyright (C) 1995-1999,2000,2001,2002,2005 Free Software Foundation, Inc. +/* Copyright (C) 1995-1999,2000,2001,2002,2005,2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -278,13 +280,14 @@ not correspond to a valid name in ISO 4217"), monetary->cat = initval; \ } \ else if ((monetary->cat < min || monetary->cat > max) \ + && min < max \ && !be_quiet && !nothing) \ WITH_CUR_LOCALE (error (0, 0, _("\ %s: value for field `%s' must be in range %d...%d"), \ "LC_MONETARY", #cat, min, max)) - TEST_ELEM (int_frac_digits, -128, 127, -1); - TEST_ELEM (frac_digits, -128, 127, -1); + TEST_ELEM (int_frac_digits, 1, 0, -1); + TEST_ELEM (frac_digits, 1, 0, -1); TEST_ELEM (p_cs_precedes, -1, 1, -1); TEST_ELEM (p_sep_by_space, -1, 2, -1); TEST_ELEM (n_cs_precedes, -1, 1, -1); diff --git a/libc/locale/programs/ld-name.c b/libc/locale/programs/ld-name.c index 4b90660cd..8388741f2 100644 --- a/libc/locale/programs/ld-name.c +++ b/libc/locale/programs/ld-name.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/ld-numeric.c b/libc/locale/programs/ld-numeric.c index af255a836..ea50ce818 100644 --- a/libc/locale/programs/ld-numeric.c +++ b/libc/locale/programs/ld-numeric.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/ld-paper.c b/libc/locale/programs/ld-paper.c index e77632ec0..473e6a881 100644 --- a/libc/locale/programs/ld-paper.c +++ b/libc/locale/programs/ld-paper.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/ld-telephone.c b/libc/locale/programs/ld-telephone.c index dc3d59dc6..cc4edac72 100644 --- a/libc/locale/programs/ld-telephone.c +++ b/libc/locale/programs/ld-telephone.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/ld-time.c b/libc/locale/programs/ld-time.c index d6a1c6db1..0fdfa3a93 100644 --- a/libc/locale/programs/ld-time.c +++ b/libc/locale/programs/ld-time.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/linereader.c b/libc/locale/programs/linereader.c index 3d6d2b197..64b2f70df 100644 --- a/libc/locale/programs/linereader.c +++ b/libc/locale/programs/linereader.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/linereader.h b/libc/locale/programs/linereader.h index d4d7e830a..e0c844e5b 100644 --- a/libc/locale/programs/linereader.h +++ b/libc/locale/programs/linereader.h @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper, <drepper@gnu.org>. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/locale-spec.c b/libc/locale/programs/locale-spec.c index 6ad3d95ef..6334f4c5f 100644 --- a/libc/locale/programs/locale-spec.c +++ b/libc/locale/programs/locale-spec.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/locale.c b/libc/locale/programs/locale.c index cc3082d48..8322fc0d7 100644 --- a/libc/locale/programs/locale.c +++ b/libc/locale/programs/locale.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1995. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/localedef.c b/libc/locale/programs/localedef.c index cabc18bf4..2b544056e 100644 --- a/libc/locale/programs/localedef.c +++ b/libc/locale/programs/localedef.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1995. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/localedef.h b/libc/locale/programs/localedef.h index f8cc4ca9c..bdff9e6f2 100644 --- a/libc/locale/programs/localedef.h +++ b/libc/locale/programs/localedef.h @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/locarchive.c b/libc/locale/programs/locarchive.c index c0ab810bb..c576127b5 100644 --- a/libc/locale/programs/locarchive.c +++ b/libc/locale/programs/locarchive.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/locfile-kw.gperf b/libc/locale/programs/locfile-kw.gperf index efdb9afab..936256ab3 100644 --- a/libc/locale/programs/locfile-kw.gperf +++ b/libc/locale/programs/locfile-kw.gperf @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/locfile-kw.h b/libc/locale/programs/locfile-kw.h index 6ec2134cd..c883842b3 100644 --- a/libc/locale/programs/locfile-kw.h +++ b/libc/locale/programs/locfile-kw.h @@ -35,8 +35,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/locfile-token.h b/libc/locale/programs/locfile-token.h index beb979c63..d6db1a778 100644 --- a/libc/locale/programs/locfile-token.h +++ b/libc/locale/programs/locfile-token.h @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/locfile.c b/libc/locale/programs/locfile.c index 8ba3b7404..1f08c7c4d 100644 --- a/libc/locale/programs/locfile.c +++ b/libc/locale/programs/locfile.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/locfile.h b/libc/locale/programs/locfile.h index 5116283eb..414deeed5 100644 --- a/libc/locale/programs/locfile.h +++ b/libc/locale/programs/locfile.h @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/repertoire.c b/libc/locale/programs/repertoire.c index b6c0a6ad5..cc83374c9 100644 --- a/libc/locale/programs/repertoire.c +++ b/libc/locale/programs/repertoire.c @@ -1,10 +1,11 @@ -/* Copyright (C) 1998-2002,2004,2005 Free Software Foundation, Inc. +/* Copyright (C) 1998-2002,2004,2005,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -392,7 +393,7 @@ repertoire_new_char (struct linereader *lr, hash_table *ht, hash_table *rt, const char *cp; char *buf = NULL; int prefix_len, len1, len2; - unsigned int from_nr, to_nr, cnt; + unsigned long int from_nr, to_nr, cnt; if (to == NULL) { @@ -461,7 +462,7 @@ hexadecimal range format should use only capital characters")); { uint32_t this_value = value + (cnt - from_nr); - obstack_printf (ob, decimal_ellipsis ? "%.*s%0*d" : "%.*s%0*X", + obstack_printf (ob, decimal_ellipsis ? "%.*s%0*ld" : "%.*s%0*lX", prefix_len, from, len1 - prefix_len, cnt); obstack_1grow (ob, '\0'); diff --git a/libc/locale/programs/repertoire.h b/libc/locale/programs/repertoire.h index 75877044c..2e1f7ae19 100644 --- a/libc/locale/programs/repertoire.h +++ b/libc/locale/programs/repertoire.h @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/simple-hash.c b/libc/locale/programs/simple-hash.c index de8998cc7..5bd65f247 100644 --- a/libc/locale/programs/simple-hash.c +++ b/libc/locale/programs/simple-hash.c @@ -4,8 +4,9 @@ Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, October 1994. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/simple-hash.h b/libc/locale/programs/simple-hash.h index 7261ebc39..b41c233b0 100644 --- a/libc/locale/programs/simple-hash.h +++ b/libc/locale/programs/simple-hash.h @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/xmalloc.c b/libc/locale/programs/xmalloc.c index a95dc5a40..a2eeda79b 100644 --- a/libc/locale/programs/xmalloc.c +++ b/libc/locale/programs/xmalloc.c @@ -4,8 +4,9 @@ This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/programs/xstrdup.c b/libc/locale/programs/xstrdup.c index 12fb3a828..e6e302f41 100644 --- a/libc/locale/programs/xstrdup.c +++ b/libc/locale/programs/xstrdup.c @@ -3,8 +3,9 @@ This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/locale/weightwc.h b/libc/locale/weightwc.h index 436aa7e54..9ea1126a2 100644 --- a/libc/locale/weightwc.h +++ b/libc/locale/weightwc.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996-2001,2003,2004,2005 Free Software Foundation, Inc. +/* Copyright (C) 1996-2001,2003,2004,2005,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Ulrich Drepper, <drepper@cygnus.com>. @@ -31,7 +31,7 @@ findidx (const wint_t **cpp) /* Oh well, more than one sequence starting with this byte. Search for the correct one. */ - const int32_t *cp = &extra[-i]; + const int32_t *cp = (const int32_t *) &extra[-i]; while (1) { size_t nhere; diff --git a/libc/localedata/ChangeLog b/libc/localedata/ChangeLog index 301eabaa0..7d39671a0 100644 --- a/libc/localedata/ChangeLog +++ b/libc/localedata/ChangeLog @@ -1,3 +1,38 @@ +2007-08-24 Ulrich Drepper <drepper@redhat.com> + + [BZ #3842] + * locales/ru_RU: Use U00A0 instead of U2002 for thousands separator. + The latter might be more correct but usually cannot be displayed. + +2007-08-22 Ulrich Drepper <drepper@redhat.com> + + [BZ #4554] + * locales/wo_SN: New file. + * SUPPORTED: Add wo_SN entry. + + [BZ #4557] + * locales/as_IN: Change <UNASSIGNED-09CE> to <U09CE>. + +2007-08-03 Jakub Jelinek <jakub@redhat.com> + + * locales/translit_combining: Add U0141 and U0142. + +2007-07-30 Jakub Jelinek <jakub@redhat.com> + + * tst-strptime.c (do_test): Use %tu in fmt string for ptrdiff_t value. + +2007-07-16 Jakub Jelinek <jakub@redhat.com> + + * locales/ar_SA (d_t_fmt, d_fmt, t_fmt, t_fmt_ampm): Replace %.1d + with supported %e and %.1H with %k. + * locales/dz_BT (t_fmt): Remove whitespace between % and H. + +2007-07-10 Ulrich Drepper <drepper@redhat.com> + + [BZ #4773] + * Makefile: Add rules to build and run tst-strptime. + * tst-strptime.c: New file. + 2007-05-07 Ulrich Drepper <drepper@redhat.com> * locales/as_IN: Fix currency_symbol, abday for Sunday, abmon for diff --git a/libc/localedata/Makefile b/libc/localedata/Makefile index 31e9205da..539b1d2c6 100644 --- a/libc/localedata/Makefile +++ b/libc/localedata/Makefile @@ -108,7 +108,7 @@ locale_test_suite := tst_iswalnum tst_iswalpha tst_iswcntrl \ tests-$(OPTION_EGLIBC_LOCALE_CODE) \ += $(locale_test_suite) tst-digits tst-setlocale bug-iconv-trans \ tst-leaks tst-mbswcs6 tst-xlocale1 tst-xlocale2 bug-usesetlocale \ - tst-strfmon1 tst-sscanf + tst-strfmon1 tst-sscanf tst-strptime ifeq (yesy,$(build-shared)$(OPTION_EGLIBC_LOCALE_CODE)) ifneq (no,$(PERL)) tests: $(objpfx)mtrace-tst-leaks @@ -310,6 +310,7 @@ tst-mbswcs6-ENV = $(TEST_MBWC_ENV) tst-xlocale1-ENV = $(TEST_MBWC_ENV) tst-xlocale2-ENV = $(TEST_MBWC_ENV) tst-strfmon1-ENV = $(TEST_MBWC_ENV) +tst-strptime-ENV = $(TEST_MBWC_ENV) tst-setlocale-ENV = LOCPATH=$(common-objpfx)localedata LC_ALL=ja_JP.EUC-JP diff --git a/libc/localedata/SUPPORTED b/libc/localedata/SUPPORTED index 038964583..9e2934641 100644 --- a/libc/localedata/SUPPORTED +++ b/libc/localedata/SUPPORTED @@ -362,6 +362,7 @@ vi_VN/UTF-8 \ wa_BE/ISO-8859-1 \ wa_BE@euro/ISO-8859-15 \ wa_BE.UTF-8/UTF-8 \ +wo_SN/UTF-8 \ xh_ZA.UTF-8/UTF-8 \ xh_ZA/ISO-8859-1 \ yi_US.UTF-8/UTF-8 \ diff --git a/libc/localedata/locales/ar_SA b/libc/localedata/locales/ar_SA index f41190d52..81d8cbf02 100644 --- a/libc/localedata/locales/ar_SA +++ b/libc/localedata/locales/ar_SA @@ -294,16 +294,16 @@ END LC_NUMERIC % Set up the LC_TIME category -% d_t_fmt "%A %.1d %B %Y %.1H:%M:%S" -% d_fmt "%A %.1d %B %Y" -% t_fmt "%.1H:%M:%S" -% t_fmt_ampm "%.1H:%M:%S" +% d_t_fmt "%A %e %B %Y %k:%M:%S" +% d_fmt "%A %e %B %Y" +% t_fmt "%k:%M:%S" +% t_fmt_ampm "%k:%M:%S" LC_TIME -d_t_fmt "<U0025><U0041><U0020><U0025><U002E><U0031><U0064><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0020><U0025><U002E><U0031><U0048><U003A><U0025><U004D><U003A><U0025><U0053>" -d_fmt "<U0025><U0041><U0020><U0025><U002E><U0031><U0064><U0020><U0025><U0042><U0020><U0025><U0059>" -t_fmt "<U0025><U002E><U0031><U0048><U003A><U0025><U004D><U003A><U0025><U0053>" -t_fmt_ampm "<U0025><U002E><U0031><U0048><U003A><U0025><U004D><U003A><U0025><U0053>" +d_t_fmt "<U0025><U0041><U0020><U0025><U0065><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0020><U0025><U006B><U003A><U0025><U004D><U003A><U0025><U0053>" +d_fmt "<U0025><U0041><U0020><U0025><U0065><U0020><U0025><U0042><U0020><U0025><U0059>" +t_fmt "<U0025><U006B><U003A><U0025><U004D><U003A><U0025><U0053>" +t_fmt_ampm "<U0025><U006B><U003A><U0025><U004D><U003A><U0025><U0053>" day "<U0627><U0644><U0623><U062D><U062F>"; / "<U0627><U0644><U0625><U062B><U0646><U064A><U0646>"; / "<U0627><U0644><U062B><U0644><U0627><U062B><U0627><U0621>"; / diff --git a/libc/localedata/locales/as_IN b/libc/localedata/locales/as_IN index d3c779b7a..c61ba3046 100644 --- a/libc/localedata/locales/as_IN +++ b/libc/localedata/locales/as_IN @@ -596,7 +596,7 @@ order_start forward;forward;forward;forward <U09CC> <X689A>;<X0005>;<X0005>;IGNORE <U09CD> <X689C>;<X0005>;<X0005>;IGNORE <U09D7> <X689E>;<X0005>;<X0005>;IGNORE -<UNASSIGNED-09CE> "<XE2E9><X6B20>";<X0005>;"<X0005><X00C0>";IGNORE +<U09CE> "<XE2E9><X6B20>";<X0005>;"<X0005><X00C0>";IGNORE UNDEFINED IGNORE;IGNORE;IGNORE;%... order_end diff --git a/libc/localedata/locales/dz_BT b/libc/localedata/locales/dz_BT index a617e44ab..596573797 100644 --- a/libc/localedata/locales/dz_BT +++ b/libc/localedata/locales/dz_BT @@ -1293,7 +1293,7 @@ d_fmt "<U0F54><U0F66><U0FB1><U0F72><U0F0B><U0F63><U0F7C>%y<U0F5F>/ % Appropriate time representation "%H:%M:%S" t_fmt "<U0F46><U0F74><U0F0B><U0F5A><U0F7C><U0F51>/ -% H<U0F40><U0F66><U0F62><U0F0B><U0F58>/ +%H<U0F40><U0F66><U0F62><U0F0B><U0F58>/ %M<U0F40><U0F66><U0F62><U0F0B><U0F46>%S" % AM/PM signs diff --git a/libc/localedata/locales/ru_RU b/libc/localedata/locales/ru_RU index d00f3451d..f290f2128 100644 --- a/libc/localedata/locales/ru_RU +++ b/libc/localedata/locales/ru_RU @@ -81,7 +81,7 @@ LC_MONETARY int_curr_symbol "<U0052><U0055><U0042><U0020>" currency_symbol "<U0440><U0443><U0431>" mon_decimal_point "<U002E>" -mon_thousands_sep "<U2002>" +mon_thousands_sep "<U00A0>" mon_grouping 3;3 positive_sign "" negative_sign "<U002D>" @@ -97,7 +97,7 @@ END LC_MONETARY LC_NUMERIC decimal_point "<U002C>" -thousands_sep "<U2002>" +thousands_sep "<U00A0>" grouping 3;3 END LC_NUMERIC diff --git a/libc/localedata/locales/translit_combining b/libc/localedata/locales/translit_combining index a6d51e6c9..44c62f9d0 100644 --- a/libc/localedata/locales/translit_combining +++ b/libc/localedata/locales/translit_combining @@ -472,6 +472,10 @@ translit_start <U013D> <U004C> % LATIN SMALL LETTER L WITH CARON <U013E> <U006C> +% LATIN CAPITAL LETTER L WITH STROKE +<U0141> <U004C> +% LATIN SMALL LETTER L WITH STROKE +<U0142> <U006C> % LATIN CAPITAL LETTER N WITH ACUTE <U0143> <U004E> % LATIN SMALL LETTER N WITH ACUTE diff --git a/libc/localedata/locales/wo_SN b/libc/localedata/locales/wo_SN new file mode 100644 index 000000000..ac4e917e3 --- /dev/null +++ b/libc/localedata/locales/wo_SN @@ -0,0 +1,180 @@ +comment_char % +escape_char / +% +% Wolof locale for Senegal +% Source: The Debian Project +% Contact: Christian Perrier/Samba Ndao Diop +% Email: bubulle@debian.org/samba.ndao.diop@tiscali.fr +% Tel: +33 - 130699222 +% Language: wo +% Territory: SN +% Revision: 1.0 +% Date: 2004-09-15 +% Users: general +% Charset: UTF-8 +% Distribution and use is free, also +% for commercial purposes. + +LC_IDENTIFICATION +title "Wolof locale for Senegal" +source "The Debian Project" +address "" +contact "Christian Perrier" +email "bubulle@debian.org" +tel "" +fax "" +language "Wolof" +territory "Senegal" +revision "1.0" +date "2004-09-08" +% +category "mg_MG:2000";LC_IDENTIFICATION +category "mg_MG:2000";LC_CTYPE +category "mg_MG:2000";LC_COLLATE +category "mg_MG:2000";LC_TIME +category "mg_MG:2000";LC_NUMERIC +category "mg_MG:2000";LC_MONETARY +category "mg_MG:2000";LC_MESSAGES +category "mg_MG:2000";LC_PAPER +category "mg_MG:2000";LC_NAME +category "mg_MG:2000";LC_ADDRESS +category "mg_MG:2000";LC_TELEPHONE + +END LC_IDENTIFICATION + +LC_CTYPE +copy "i18n" + +translit_start + +% Accents are simply omitted if they cannot be represented. +include "translit_combining";"" + +translit_end + +END LC_CTYPE + +LC_COLLATE +% Copy the template from ISO/IEC 14651 +copy "iso14651_t1" +END LC_COLLATE + +LC_MESSAGES +% Yes=Waaw +% No=Déet +yesexpr "<U005E><U005B><U0077><U0057><U0079><U0059><U005D><U002E><U002A>" +noexpr "<U005E><U005B><U0064><U0044><U006E><U004E><U005D><U002E><U002A>" +END LC_MESSAGES + +LC_MONETARY +int_curr_symbol "<U0058><U004F><U0046><U0020>" +currency_symbol "<U0043><U0046><U0041>" +mon_decimal_point "<U002C>" +mon_thousands_sep "<U0020>" +mon_grouping 3;3 +positive_sign "" +negative_sign "<U002D>" +int_frac_digits 2 +frac_digits 2 +p_cs_precedes 0 +p_sep_by_space 1 +n_cs_precedes 0 +n_sep_by_space 1 +p_sign_posn 1 +n_sign_posn 1 +END LC_MONETARY + +LC_NUMERIC +decimal_point "<U002C>" +thousands_sep "" +grouping 0;0 +END LC_NUMERIC + +LC_TIME +% dib'eer (dib), altine (alt), talaata (tal), allarba (all), alxames (alx), +% ajjuma (ajj), gaawu (gaa) +% Sunday, Monday.... +abday "<U0064><U0069><U0062>";"<U0061><U006C><U0074>";/ + "<U0074><U0061><U006C>";"<U0061><U006C><U006C>";/ + "<U0061><U006C><U0078>";"<U0061><U006A><U006A>";/ + "<U0067><U0061><U0061>" +day "<U0064><U0069><U0062><U0027><U0065><U0065><U0072>";/ + "<U0061><U006C><U0074><U0069><U006E><U0065>";/ + "<U0074><U0061><U006C><U0061><U0061><U0074><U0061>";/ + "<U0061><U006C><U006C><U0061><U0072><U0062><U0061>";/ + "<U0061><U006C><U0078><U0061><U006D><U0065><U0073>";/ + "<U0061><U006A><U006A><U0075><U006D><U0061>";/ + "<U0067><U0061><U0061><U0077><U0075>" +% Sanwiy'e, feebriy'e, mars, awril, me, suwen, sulet, uut, septaambar, +% oktoobar, nowaambar, desaambar. +abmon "<U0073><U0061><U006E>";"<U0066><U0065><U0065>";/ + "<U006D><U0061><U0072>";"<U0061><U0077><U0072>";/ + "<U006D><U0065><U0020>";"<U0073><U0075><U0077>";/ + "<U0073><U0075><U006C>";"<U0075><U0075><U0074>";/ + "<U0073><U0065><U0070>";"<U006F><U006B><U0074>";/ + "<U006E><U006F><U0077>";"<U0064><U0065><U0073>" +mon "<U0073><U0061><U006E><U0077><U0069><U0079><U0027><U0065>";/ + "<U0066><U0065><U0065><U0062><U0072><U0069><U0079><U0027><U0065>";/ + "<U006D><U0061><U0072><U0073>";/ + "<U0061><U0077><U0072><U0069><U006C>";/ + "<U006D><U0065>";/ + "<U0073><U0075><U0077><U0065><U006E>";/ + "<U0073><U0075><U006C><U0065><U0074>";/ + "<U0075><U0075><U0074>";/ + "<U0073><U0065><U0070><U0074><U0061><U0061><U006D><U0062><U0061><U0072>";/ + "<U006F><U006B><U0074><U006F><U006F><U0062><U0061><U0072>";/ + "<U006E><U006F><U0077><U0061><U0061><U006D><U0062><U0061><U0072>";/ + "<U0064><U0065><U0073><U0061><U0061><U006D><U0062><U0061><U0072>" +% %a %d %b %Y %T %Z +d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>" +% %d.%m.%Y +d_fmt "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0059>" +% %T +t_fmt "<U0025><U0054>" +am_pm "";"" +t_fmt_ampm "" +% %a %b %e %H:%M:%S %Z %Y +date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/ +<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/ +<U0025><U005A><U0020><U0025><U0059>" +END LC_TIME + +LC_PAPER +height 297 +width 210 +END LC_PAPER + +LC_TELEPHONE +% +%C %a %l +tel_int_fmt "<U002B><U0025><U0063><U0020><U0025><U0061><U0020><U0025>/ +<U006C>" +% %a %l +tel_dom_fmt "<U0025><U0061><U0020><U0025><U006C>" +% 221 +int_prefix "<U0032><U0032><U0031>" +% 00 +int_select "<U0030><U0030>" +END LC_TELEPHONE + +LC_MEASUREMENT +measurement 1 +END LC_MEASUREMENT + +LC_NAME +% %d%t%g%t%m%t%f +name_fmt "<U0025><U0064><U0025><U0074><U0025><U0067><U0025><U0074>/ +<U0025><U006D><U0025><U0074><U0025><U0066>" +END LC_NAME + +LC_ADDRESS +% %f%N%a%N%d%N%b%N%s %h %e %r%N%%z %T%N%c%N +postal_fmt "<U0025><U0066><U0025><U004E><U0025><U0061><U0025><U004E>/ +<U0025><U0064><U0025><U004E><U0025><U0062><U0025><U004E><U0025><U0073>/ +<U0020><U0025><U0068><U0020><U0025><U0065><U0020><U0025><U0072><U0025>/ +<U004E><U0025><U0025><U007A><U0020><U0025><U0054><U0025>/ +<U004E><U0025><U0063><U0025><U004E>" +country_ab2 "<U004D><U0047>" +country_ab3 "<U004D><U0044><U0047>" +country_num 450 +END LC_ADDRESS + diff --git a/libc/localedata/tst-strptime.c b/libc/localedata/tst-strptime.c new file mode 100644 index 000000000..b5ab232d7 --- /dev/null +++ b/libc/localedata/tst-strptime.c @@ -0,0 +1,23 @@ +#include <locale.h> +#include <time.h> +#include <stdio.h> + +static int +do_test (void) +{ + if (setlocale (LC_ALL, "vi_VN.TCVN5712-1") == NULL) + { + puts ("cannot set locale"); + return 1; + } + struct tm tm; + /* This is November in Vietnamese encoded using TCVN5712-1. */ + static const char s[] = "\ +\x54\x68\xb8\x6e\x67\x20\x6d\xad\xea\x69\x20\x6d\xe9\x74"; + char *r = strptime (s, "%b", &tm); + printf ("r = %p, r-s = %tu, tm.tm_mon = %d\n", r, r - s, tm.tm_mon); + return r == NULL || r - s != 14 || tm.tm_mon != 10; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/libc/login/Makefile b/libc/login/Makefile index 097f84e62..3b6140c1f 100644 --- a/libc/login/Makefile +++ b/libc/login/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1996-1998,2000-2002,2003 Free Software Foundation, Inc. +# Copyright (C) 1996-1998,2000-2002,2003,2007 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,7 +34,7 @@ CFLAGS-grantpt.c = -DLIBEXECDIR='"$(libexecdir)"' others = pt_chown others-$(OPTION_EGLIBC_UTMP) += utmpdump -install-others = $(inst_libexecdir)/pt_chown +install-others-programs = $(inst_libexecdir)/pt_chown distribute := utmp-private.h utmp-equal.h pty-private.h diff --git a/libc/login/forkpty.c b/libc/login/forkpty.c index ff87fd031..ccd5dbfe0 100644 --- a/libc/login/forkpty.c +++ b/libc/login/forkpty.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998 Free Software Foundation, Inc. +/* Copyright (C) 1998, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Zack Weinberg <zack@rabi.phys.columbia.edu>, 1998. @@ -38,6 +38,8 @@ forkpty (amaster, name, termp, winp) switch (pid = fork ()) { case -1: + close (master); + close (slave); return -1; case 0: /* Child. */ diff --git a/libc/login/logout.c b/libc/login/logout.c index 020ff6189..8902036c5 100644 --- a/libc/login/logout.c +++ b/libc/login/logout.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -51,15 +51,10 @@ logout (const char *line) bzero (ut->ut_host, sizeof ut->ut_host); #endif #if _HAVE_UT_TV - 0 - if (sizeof (ut->ut_tv) == sizeof (struct timeval)) - __gettimeofday ((struct timeval *) &ut->ut_tv, NULL); - else - { struct timeval tv; __gettimeofday (&tv, NULL); ut->ut_tv.tv_sec = tv.tv_sec; ut->ut_tv.tv_usec = tv.tv_usec; - } #else ut->ut_time = time (NULL); #endif diff --git a/libc/login/logwtmp.c b/libc/login/logwtmp.c index 96ef05d79..ff2e7f988 100644 --- a/libc/login/logwtmp.c +++ b/libc/login/logwtmp.c @@ -44,15 +44,10 @@ logwtmp (const char *line, const char *name, const char *host) #endif #if _HAVE_UT_TV - 0 - if (sizeof (ut.ut_tv) == sizeof (struct timeval)) - __gettimeofday ((struct timeval *) &ut.ut_tv, NULL); - else - { - struct timeval tv; - __gettimeofday (&tv, NULL); - ut.ut_tv.tv_sec = tv.tv_sec; - ut.ut_tv.tv_usec = tv.tv_usec; - } + struct timeval tv; + __gettimeofday (&tv, NULL); + ut.ut_tv.tv_sec = tv.tv_sec; + ut.ut_tv.tv_usec = tv.tv_usec; #else ut.ut_time = time (NULL); #endif diff --git a/libc/login/tst-grantpt.c b/libc/login/tst-grantpt.c index 9b993daac..5078dac26 100644 --- a/libc/login/tst-grantpt.c +++ b/libc/login/tst-grantpt.c @@ -41,7 +41,7 @@ test_einval (void) int fd, ret, err; const char file[] = "./grantpt-einval"; - fd = open (file, O_RDWR | O_CREAT); + fd = open (file, O_RDWR | O_CREAT, 0600); if (fd == -1) { printf ("open(\"%s\", O_RDWR) failed\nerrno %d (%s)\n", diff --git a/libc/login/utmp_file.c b/libc/login/utmp_file.c index 871c85607..a1c6a2571 100644 --- a/libc/login/utmp_file.c +++ b/libc/login/utmp_file.c @@ -27,6 +27,7 @@ #include <unistd.h> #include <utmp.h> #include <not-cancel.h> +#include <kernel-features.h> #include "utmp-private.h" #include "utmp-equal.h" @@ -140,24 +141,45 @@ setutent_file (void) file_name = TRANSFORM_UTMP_FILE_NAME (__libc_utmp_file_name); - file_fd = open_not_cancel_2 (file_name, O_RDWR | O_LARGEFILE); +#ifdef O_CLOEXEC +# define O_flags O_LARGEFILE | O_CLOEXEC +#else +# define O_flags O_LARGEFILE +#endif + file_fd = open_not_cancel_2 (file_name, O_RDWR | O_flags); if (file_fd == -1) { /* Hhm, read-write access did not work. Try read-only. */ - file_fd = open_not_cancel_2 (file_name, O_RDONLY | O_LARGEFILE); + file_fd = open_not_cancel_2 (file_name, O_RDONLY | O_flags); if (file_fd == -1) return 0; } - /* We have to make sure the file is `closed on exec'. */ - result = fcntl_not_cancel (file_fd, F_GETFD, 0); - if (result >= 0) - result = fcntl_not_cancel (file_fd, F_SETFD, result | FD_CLOEXEC); - if (result == -1) +#ifndef __ASSUME_O_CLOEXEC +# ifdef O_CLOEXEC + if (__have_o_cloexec <= 0) +# endif { - close_not_cancel_no_status (file_fd); - return 0; + /* We have to make sure the file is `closed on exec'. */ + result = fcntl_not_cancel (file_fd, F_GETFD, 0); + if (result >= 0) + { +# ifdef O_CLOEXEC + if (__have_o_cloexec == 0) + __have_o_cloexec = (result & FD_CLOEXEC) ? 1 : -1; +# endif + + result = fcntl_not_cancel (file_fd, F_SETFD, + result | FD_CLOEXEC); + } + + if (result == -1) + { + close_not_cancel_no_status (file_fd); + return 0; + } } +#endif } __lseek64 (file_fd, 0, SEEK_SET); diff --git a/libc/mach/lock-intern.h b/libc/mach/lock-intern.h index d42a378f4..4aaaedc1c 100644 --- a/libc/mach/lock-intern.h +++ b/libc/mach/lock-intern.h @@ -19,6 +19,7 @@ #ifndef _LOCK_INTERN_H #define _LOCK_INTERN_H +#include <sys/cdefs.h> #include <machine-lock.h> #ifndef _EXTERN_INLINE diff --git a/libc/malloc/malloc.h b/libc/malloc/malloc.h index 1340aa15b..b6d7a8afa 100644 --- a/libc/malloc/malloc.h +++ b/libc/malloc/malloc.h @@ -1,5 +1,6 @@ /* Prototypes and definition for malloc implementation. - Copyright (C) 1996,97,99,2000,2002-2004,2005 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1999, 2000, 2002-2004, 2005, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -54,8 +55,11 @@ extern void *calloc __MALLOC_P ((size_t __nmemb, size_t __size)) /* Re-allocate the previously allocated block in __ptr, making the new block SIZE bytes long. */ +/* __attribute_malloc__ is not used, because if realloc returns + the same pointer that was passed to it, aliasing needs to be allowed + between objects pointed by the old and new pointers. */ extern void *realloc __MALLOC_P ((void *__ptr, size_t __size)) - __attribute_malloc__ __attribute_warn_unused_result__; + __attribute_warn_unused_result__; /* Free a block allocated by `malloc', `realloc' or `calloc'. */ extern void free __MALLOC_P ((void *__ptr)); diff --git a/libc/malloc/memusagestat.c b/libc/malloc/memusagestat.c index 93ac2cd74..779d5c0a5 100644 --- a/libc/malloc/memusagestat.c +++ b/libc/malloc/memusagestat.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/manual/errno.texi b/libc/manual/errno.texi index 7f96130ba..6d10f61bc 100644 --- a/libc/manual/errno.texi +++ b/libc/manual/errno.texi @@ -984,7 +984,7 @@ This error code has no purpose. @comment errno.h @comment POSIX.1: Operation canceled @deftypevr Macro int ECANCELED -@comment errno 118 +@comment errno 119 Operation canceled; an asynchronous operation was canceled before it completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel}, the normal result is for the operations affected to complete with this diff --git a/libc/manual/libc.texinfo b/libc/manual/libc.texinfo index 152044d6b..a206f2abf 100644 --- a/libc/manual/libc.texinfo +++ b/libc/manual/libc.texinfo @@ -2,10 +2,10 @@ @comment %**start of header (This is for running Texinfo on a region.) @setfilename libc.info @settitle The GNU C Library -@setchapternewpage odd +@c setchapternewpage odd @comment Tell install-info what to do. -@dircategory GNU libraries +@dircategory Software libraries @direntry * Libc: (libc). C library. @end direntry @@ -18,39 +18,33 @@ @comment %**end of header (This is for running Texinfo on a region.) @c sold 0.06/1.09, print run out 21may96 -@set EDITION 0.10 -@set VERSION 2.3.x -@set UPDATED 2001-07-06 +@set EDITION 0.11 +@set VERSION 2.6 +@set UPDATED 2006-12-03 @set ISBN 1-882114-55-8 -@ifnottex +@copying This file documents the GNU C library. This is Edition @value{EDITION}, last updated @value{UPDATED}, -of @cite{The GNU C Library Reference Manual}, for Version @value{VERSION}. +of @cite{The GNU C Library Reference Manual}, for version @value{VERSION}. -Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003 Free Software Foundation, Inc. +Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, +2003, 2007 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with the -Invariant Sections being "Free Software Needs Free Documentation" and -"GNU Lesser General Public License", the Front-Cover texts being (a) -(see below), and with the Back-Cover Texts being (b) (see below). A +Invariant Sections being ``Free Software Needs Free Documentation'' +and ``GNU Lesser General Public License'', the Front-Cover texts being +``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled "GNU Free Documentation License". - -(a) The FSF's Front-Cover Text is: - - A GNU Manual - -(b) The FSF's Back-Cover Text is: - - You have freedom to copy and modify this GNU Manual, like GNU - software. Copies published by the Free Software Foundation raise - funds for GNU development. -@end ifnottex +(a) The FSF's Back-Cover Text is: ``You are free to copy and modify +this GNU Manual. Buying copies from GNU Press supports the FSF in +developing GNU and promoting software freedom.'' +@end copying @iftex @shorttitlepage The GNU C Library Reference Manual @@ -71,37 +65,22 @@ Documentation License". @center for version @value{VERSION} @page @vskip 0pt plus 1filll -Copyright @copyright{} 1993, 1994, 1995, 1996, 1997, 1998, 2001, 2002 Free Software Foundation, Inc. +@insertcopying + @sp 2 Published by the Free Software Foundation @* 59 Temple Place -- Suite 330, @* Boston, MA 02111-1307 USA @* -ISBN @value{ISBN} @* - -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or -any later version published by the Free Software Foundation; with the -Invariant Sections being "Free Software Needs Free Documentation" and -"GNU Lesser General Public License", the Front-Cover texts being (a) -(see below), and with the Back-Cover Texts being (b) (see below). A -copy of the license is included in the section entitled "GNU Free -Documentation License". - -(a) The FSF's Front-Cover Text is: - - A GNU Manual - -(b) The FSF's Back-Cover Text is: - - You have freedom to copy and modify this GNU Manual, like GNU - software. Copies published by the Free Software Foundation raise - funds for GNU development. +@c ISBN @value{ISBN} @* +@sp 2 Cover art for the Free Software Foundation's printed edition by Etienne Suvasa. @end titlepage -@page + +@shortcontents +@contents @ifnottex @node Top, Introduction, (dir), (dir) @@ -150,6 +129,4 @@ of the GNU C Library. @printindex pg -@shortcontents -@contents @bye diff --git a/libc/manual/signal.texi b/libc/manual/signal.texi index dfaaa8895..6cdae1502 100644 --- a/libc/manual/signal.texi +++ b/libc/manual/signal.texi @@ -1966,7 +1966,7 @@ writing.) #include <signal.h> #include <stdio.h> -struct two_words @{ int a, b; @} memory; +volatile struct two_words @{ int a, b; @} memory; void handler(int signum) @@ -2317,7 +2317,7 @@ The @var{signum} argument is an invalid or unsupported number. You do not have the privilege to send a signal to the process or any of the processes in the process group named by @var{pid}. -@item ESCRH +@item ESRCH The @var{pid} argument does not refer to an existing process or group. @end table @end deftypefun diff --git a/libc/manual/stdio.texi b/libc/manual/stdio.texi index 30a6e6ebe..a39262cbc 100644 --- a/libc/manual/stdio.texi +++ b/libc/manual/stdio.texi @@ -2456,9 +2456,8 @@ For example: @end smallexample @noindent -@xref{Macro Varargs, , Macros with Variable Numbers of Arguments, -gcc.info, Using GNU CC}, for details. But this is limited to macros, -and does not apply to real functions at all. +@xref{Variadic Macros,,, cpp, The C preprocessor}, for details. +But this is limited to macros, and does not apply to real functions at all. Before calling @code{vprintf} or the other functions listed in this section, you @emph{must} call @code{va_start} (@pxref{Variadic diff --git a/libc/math/Makefile b/libc/math/Makefile index b463ec9c0..c2638017b 100644 --- a/libc/math/Makefile +++ b/libc/math/Makefile @@ -92,7 +92,7 @@ distribute += $(filter-out $(generated),$(long-m-yes:=.c) $(long-c-yes:=.c)) # Rules for the test suite. tests = test-matherr test-fenv atest-exp atest-sincos atest-exp2 basic-test \ test-misc test-fpucw tst-definitions test-tgmath test-tgmath-ret \ - bug-nextafter bug-nexttoward bug-tgmath1 test-tgmath-int + bug-nextafter bug-nexttoward bug-tgmath1 test-tgmath-int test-tgmath2 # We do the `long double' tests only if this data type is available and # distinct from `double'. test-longdouble-yes = test-ldouble test-ildoubl @@ -131,6 +131,7 @@ CFLAGS-test-float.c = -fno-inline -ffloat-store -fno-builtin CFLAGS-test-double.c = -fno-inline -ffloat-store -fno-builtin CFLAGS-test-ldouble.c = -fno-inline -ffloat-store -fno-builtin CFLAGS-test-tgmath.c = -fno-builtin +CFLAGS-test-tgmath2.c = -fno-builtin CFLAGS-test-tgmath-ret.c = -fno-builtin CPPFLAGS-test-ifloat.c = -U__LIBC_INTERNAL_MATH_INLINES -D__FAST_MATH__ \ -DTEST_FAST_MATH -fno-builtin diff --git a/libc/math/test-tgmath.c b/libc/math/test-tgmath.c index f8453d083..8ec7fc45d 100644 --- a/libc/math/test-tgmath.c +++ b/libc/math/test-tgmath.c @@ -1,5 +1,5 @@ /* Test compilation of tgmath macros. - Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2001, 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com> and Ulrich Drepper <drepper@redhat.com>, 2001. @@ -37,13 +37,23 @@ static void compile_testl (void); float fx; double dx; long double lx; +const float fy = 1.25; +const double dy = 1.25; +const long double ly = 1.25; +complex float fz; +complex double dz; +complex long double lz; int count_double; int count_float; int count_ldouble; +int count_cdouble; +int count_cfloat; +int count_cldouble; #define NCALLS 115 #define NCALLS_INT 4 +#define NCCALLS 47 int main (void) @@ -51,13 +61,14 @@ main (void) int result = 0; count_float = count_double = count_ldouble = 0; + count_cfloat = count_cdouble = count_cldouble = 0; compile_test (); - if (count_float != 0) + if (count_float != 0 || count_cfloat != 0) { puts ("float function called for double test"); result = 1; } - if (count_ldouble != 0) + if (count_ldouble != 0 || count_cldouble != 0) { puts ("long double function called for double test"); result = 1; @@ -74,15 +85,28 @@ main (void) count_double); result = 1; } + if (count_cdouble < NCCALLS) + { + printf ("double complex functions not called often enough (%d)\n", + count_cdouble); + result = 1; + } + else if (count_cdouble > NCCALLS) + { + printf ("double complex functions called too often (%d)\n", + count_cdouble); + result = 1; + } count_float = count_double = count_ldouble = 0; + count_cfloat = count_cdouble = count_cldouble = 0; compile_testf (); - if (count_double != 0) + if (count_double != 0 || count_cdouble != 0) { puts ("double function called for float test"); result = 1; } - if (count_ldouble != 0) + if (count_ldouble != 0 || count_cldouble != 0) { puts ("long double function called for float test"); result = 1; @@ -98,16 +122,29 @@ main (void) count_double); result = 1; } + if (count_cfloat < NCCALLS) + { + printf ("float complex functions not called often enough (%d)\n", + count_cfloat); + result = 1; + } + else if (count_cfloat > NCCALLS) + { + printf ("float complex functions called too often (%d)\n", + count_cfloat); + result = 1; + } #ifndef NO_LONG_DOUBLE count_float = count_double = count_ldouble = 0; + count_cfloat = count_cdouble = count_cldouble = 0; compile_testl (); - if (count_float != 0) + if (count_float != 0 || count_cfloat != 0) { puts ("float function called for long double test"); result = 1; } - if (count_double != 0) + if (count_double != 0 || count_cdouble != 0) { puts ("double function called for long double test"); result = 1; @@ -124,6 +161,18 @@ main (void) count_double); result = 1; } + if (count_cldouble < NCCALLS) + { + printf ("long double complex functions not called often enough (%d)\n", + count_cldouble); + result = 1; + } + else if (count_cldouble > NCCALLS) + { + printf ("long double complex functions called too often (%d)\n", + count_cldouble); + result = 1; + } #endif return result; @@ -136,20 +185,29 @@ main (void) #define TYPE double #define TEST_INT 1 #define x dx +#define y dy +#define z dz #define count count_double +#define ccount count_cdouble #include "test-tgmath.c" #define F(name) name##f #define TYPE float #define x fx +#define y fy +#define z fz #define count count_float +#define ccount count_cfloat #include "test-tgmath.c" #ifndef NO_LONG_DOUBLE #define F(name) name##l #define TYPE long double #define x lx +#define y ly +#define z lz #define count count_ldouble +#define ccount count_cldouble #include "test-tgmath.c" #endif @@ -165,7 +223,9 @@ static void F(compile_test) (void) { TYPE a, b, c = 1.0; + complex TYPE d; int i; + int saved_count; long int j; long long int k; @@ -228,14 +288,137 @@ F(compile_test) (void) c = fma (i, b, i); a = pow (i, c); #endif + x = a + b + c + i + j + k; + + saved_count = count; + if (ccount != 0) + ccount = -10000; + + d = cos (cos (z)); + z = acos (acos (d)); + d = sin (sin (z)); + z = asin (asin (d)); + d = tan (tan (z)); + z = atan (atan (d)); + d = cosh (cosh (z)); + z = acosh (acosh (d)); + d = sinh (sinh (z)); + z = asinh (asinh (d)); + d = tanh (tanh (z)); + z = atanh (atanh (d)); + d = exp (exp (z)); + z = log (log (d)); + d = sqrt (sqrt (z)); + z = conj (conj (d)); + d = fabs (conj (a)); + z = pow (pow (a, d), pow (b, z)); + d = cproj (cproj (z)); + z += fabs (cproj (a)); + a = carg (carg (z)); + b = creal (creal (d)); + c = cimag (cimag (z)); + x += a + b + c + i + j + k; + z += d; + + if (saved_count != count) + count = -10000; + + if (0) + { + a = cos (y); + a = acos (y); + a = sin (y); + a = asin (y); + a = tan (y); + a = atan (y); + a = atan2 (y, y); + a = cosh (y); + a = acosh (y); + a = sinh (y); + a = asinh (y); + a = tanh (y); + a = atanh (y); + a = exp (y); + a = log (y); + a = log10 (y); + a = ldexp (y, 5); + a = frexp (y, &i); + a = expm1 (y); + a = log1p (y); + a = logb (y); + a = exp2 (y); + a = log2 (y); + a = pow (y, y); + a = sqrt (y); + a = hypot (y, y); + a = cbrt (y); + a = ceil (y); + a = fabs (y); + a = floor (y); + a = fmod (y, y); + a = nearbyint (y); + a = round (y); + a = trunc (y); + a = remquo (y, y, &i); + j = lrint (y) + lround (y); + k = llrint (y) + llround (y); + a = erf (y); + a = erfc (y); + a = tgamma (y); + a = lgamma (y); + a = rint (y); + a = nextafter (y, y); + a = nexttoward (y, y); + a = remainder (y, y); + a = scalb (y, (const TYPE) (6)); + k = scalbn (y, 7) + scalbln (y, 10l); + i = ilogb (y); + a = fdim (y, y); + a = fmax (y, y); + a = fmin (y, y); + a = fma (y, y, y); + +#ifdef TEST_INT + a = atan2 (i, y); + a = remquo (i, y, &i); + a = fma (i, y, i); + a = pow (i, y); +#endif + + d = cos ((const complex TYPE) z); + d = acos ((const complex TYPE) z); + d = sin ((const complex TYPE) z); + d = asin ((const complex TYPE) z); + d = tan ((const complex TYPE) z); + d = atan ((const complex TYPE) z); + d = cosh ((const complex TYPE) z); + d = acosh ((const complex TYPE) z); + d = sinh ((const complex TYPE) z); + d = asinh ((const complex TYPE) z); + d = tanh ((const complex TYPE) z); + d = atanh ((const complex TYPE) z); + d = exp ((const complex TYPE) z); + d = log ((const complex TYPE) z); + d = sqrt ((const complex TYPE) z); + d = pow ((const complex TYPE) z, (const complex TYPE) z); + d = fabs ((const complex TYPE) z); + d = carg ((const complex TYPE) z); + d = creal ((const complex TYPE) z); + d = cimag ((const complex TYPE) z); + d = conj ((const complex TYPE) z); + d = cproj ((const complex TYPE) z); + } } #undef x +#undef y +#undef z TYPE (F(cos)) (TYPE x) { ++count; + P (); return x; } @@ -243,7 +426,7 @@ TYPE (F(acos)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -251,7 +434,7 @@ TYPE (F(sin)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -259,7 +442,7 @@ TYPE (F(asin)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -267,7 +450,7 @@ TYPE (F(tan)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -275,7 +458,7 @@ TYPE (F(atan)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -283,7 +466,7 @@ TYPE (F(atan2)) (TYPE x, TYPE y) { ++count; - P(); + P (); return x + y; } @@ -291,7 +474,7 @@ TYPE (F(cosh)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -299,7 +482,7 @@ TYPE (F(acosh)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -307,7 +490,7 @@ TYPE (F(sinh)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -315,7 +498,7 @@ TYPE (F(asinh)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -323,7 +506,7 @@ TYPE (F(tanh)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -331,7 +514,7 @@ TYPE (F(atanh)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -339,7 +522,7 @@ TYPE (F(exp)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -347,7 +530,7 @@ TYPE (F(log)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -355,7 +538,7 @@ TYPE (F(log10)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -363,23 +546,23 @@ TYPE (F(ldexp)) (TYPE x, int y) { ++count; - P(); - return x; + P (); + return x + y; } TYPE (F(frexp)) (TYPE x, int *y) { ++count; - P(); - return x; + P (); + return x + *y; } TYPE (F(expm1)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -387,7 +570,7 @@ TYPE (F(log1p)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -395,7 +578,7 @@ TYPE (F(logb)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -403,7 +586,7 @@ TYPE (F(exp2)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -411,7 +594,7 @@ TYPE (F(log2)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -419,7 +602,7 @@ TYPE (F(pow)) (TYPE x, TYPE y) { ++count; - P(); + P (); return x + y; } @@ -427,7 +610,7 @@ TYPE (F(sqrt)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -435,7 +618,7 @@ TYPE (F(hypot)) (TYPE x, TYPE y) { ++count; - P(); + P (); return x + y; } @@ -443,7 +626,7 @@ TYPE (F(cbrt)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -451,7 +634,7 @@ TYPE (F(ceil)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -459,7 +642,7 @@ TYPE (F(fabs)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -467,7 +650,7 @@ TYPE (F(floor)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -475,7 +658,7 @@ TYPE (F(fmod)) (TYPE x, TYPE y) { ++count; - P(); + P (); return x + y; } @@ -483,7 +666,7 @@ TYPE (F(nearbyint)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -491,7 +674,7 @@ TYPE (F(round)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -499,7 +682,7 @@ TYPE (F(trunc)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -507,15 +690,15 @@ TYPE (F(remquo)) (TYPE x, TYPE y, int *i) { ++count; - P(); - return x + y; + P (); + return x + y + *i; } long int (F(lrint)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -523,7 +706,7 @@ long int (F(lround)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -531,7 +714,7 @@ long long int (F(llrint)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -539,7 +722,7 @@ long long int (F(llround)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -547,7 +730,7 @@ TYPE (F(erf)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -555,7 +738,7 @@ TYPE (F(erfc)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -563,7 +746,7 @@ TYPE (F(tgamma)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -571,7 +754,7 @@ TYPE (F(lgamma)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -579,7 +762,7 @@ TYPE (F(rint)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -587,7 +770,7 @@ TYPE (F(nextafter)) (TYPE x, TYPE y) { ++count; - P(); + P (); return x + y; } @@ -595,15 +778,15 @@ TYPE (F(nexttoward)) (TYPE x, long double y) { ++count; - P(); - return x; + P (); + return x + y; } TYPE (F(remainder)) (TYPE x, TYPE y) { ++count; - P(); + P (); return x + y; } @@ -611,7 +794,7 @@ TYPE (F(scalb)) (TYPE x, TYPE y) { ++count; - P(); + P (); return x + y; } @@ -619,23 +802,23 @@ TYPE (F(scalbn)) (TYPE x, int y) { ++count; - P(); - return x; + P (); + return x + y; } TYPE (F(scalbln)) (TYPE x, long int y) { ++count; - P(); - return x; + P (); + return x + y; } int (F(ilogb)) (TYPE x) { ++count; - P(); + P (); return x; } @@ -643,7 +826,7 @@ TYPE (F(fdim)) (TYPE x, TYPE y) { ++count; - P(); + P (); return x + y; } @@ -651,7 +834,7 @@ TYPE (F(fmin)) (TYPE x, TYPE y) { ++count; - P(); + P (); return x + y; } @@ -659,7 +842,7 @@ TYPE (F(fmax)) (TYPE x, TYPE y) { ++count; - P(); + P (); return x + y; } @@ -667,12 +850,189 @@ TYPE (F(fma)) (TYPE x, TYPE y, TYPE z) { ++count; - P(); + P (); return x + y + z; } +complex TYPE +(F(cacos)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(casin)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(catan)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(ccos)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(csin)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(ctan)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(cacosh)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(casinh)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(catanh)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(ccosh)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(csinh)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(ctanh)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(cexp)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(clog)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(csqrt)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(cpow)) (complex TYPE x, complex TYPE y) +{ + ++ccount; + P (); + return x + y; +} + +TYPE +(F(cabs)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +TYPE +(F(carg)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +TYPE +(F(creal)) (complex TYPE x) +{ + ++ccount; + P (); + return __real__ x; +} + +TYPE +(F(cimag)) (complex TYPE x) +{ + ++ccount; + P (); + return __imag__ x; +} + +complex TYPE +(F(conj)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + +complex TYPE +(F(cproj)) (complex TYPE x) +{ + ++ccount; + P (); + return x; +} + #undef F #undef TYPE #undef count +#undef ccount #undef TEST_INT #endif diff --git a/libc/math/test-tgmath2.c b/libc/math/test-tgmath2.c new file mode 100644 index 000000000..edb723c95 --- /dev/null +++ b/libc/math/test-tgmath2.c @@ -0,0 +1,488 @@ +/* Test compilation of tgmath macros. + Copyright (C) 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek <jakub@redhat.com>, 2007. + + 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 HAVE_MAIN +#undef __NO_MATH_INLINES +#define __NO_MATH_INLINES 1 +#include <math.h> +#include <complex.h> +#include <stdio.h> +#include <string.h> +#include <tgmath.h> + +//#define DEBUG + +typedef complex float cfloat; +typedef complex double cdouble; +#ifndef NO_LONG_DOUBLE +typedef long double ldouble; +typedef complex long double cldouble; +#else +typedef double ldouble; +typedef complex double cldouble; +#endif + +float vfloat1, vfloat2, vfloat3; +double vdouble1, vdouble2, vdouble3; +ldouble vldouble1, vldouble2, vldouble3; +cfloat vcfloat1, vcfloat2, vcfloat3; +cdouble vcdouble1, vcdouble2, vcdouble3; +cldouble vcldouble1, vcldouble2, vcldouble4; +int vint1, vint2, vint3; +long int vlong1, vlong2, vlong3; +long long int vllong1, vllong2, vllong3; +const float Vfloat1 = 1, Vfloat2 = 2, Vfloat3 = 3; +const double Vdouble1 = 1, Vdouble2 = 2, Vdouble3 = 3; +const ldouble Vldouble1 = 1, Vldouble2 = 2, Vldouble3 = 3; +const cfloat Vcfloat1 = 1, Vcfloat2 = 2, Vcfloat3 = 3; +const cdouble Vcdouble1 = 1, Vcdouble2 = 2, Vcdouble3 = 3; +const cldouble Vcldouble1 = 1, Vcldouble2 = 2, Vcldouble4 = 3; +const int Vint1 = 1, Vint2 = 2, Vint3 = 3; +const long int Vlong1 = 1, Vlong2 = 2, Vlong3 = 3; +const long long int Vllong1 = 1, Vllong2 = 2, Vllong3 = 3; +enum + { + Tfloat = 0, + Tcfloat, + Tdouble, + Tcdouble, +#ifndef NO_LONG_DOUBLE + Tldouble, + Tcldouble, +#else + Tldouble = Tdouble, + Tcldouble = Tcdouble, +#endif + Tlast + }; +enum + { + C_cos = 0, + C_fabs, + C_cabs, + C_conj, + C_expm1, + C_lrint, + C_ldexp, + C_atan2, + C_remquo, + C_pow, + C_fma, + C_last + }; +int count; +int counts[Tlast][C_last]; + +int +test (const int Vint4, const long long int Vllong4) +{ + int result = 0; + int quo = 0; + +#define FAIL(str) \ + do \ + { \ + printf ("%s failure on line %d\n", (str), __LINE__); \ + result = 1; \ + } \ + while (0) +#define TEST_TYPE_ONLY(expr, rettype) \ + do \ + { \ + __typeof__ (expr) texpr = 0; \ + __typeof__ (rettype) ttype = 0, *ptype; \ + if (sizeof (expr) != sizeof (rettype)) \ + FAIL ("type"); \ + if (__alignof__ (expr) != __alignof__ (rettype)) \ + FAIL ("type"); \ + __asm ("" : "=r" (ptype) : "0" (&ttype), "r" (&texpr)); \ + if (&texpr == ptype) \ + FAIL ("type"); \ + } \ + while (0) +#define TEST2(expr, type, rettype, fn) \ + do \ + { \ + __typeof__ (expr) texpr = 0; \ + TEST_TYPE_ONLY (expr, rettype); \ + if (count != 0) \ + FAIL ("internal error"); \ + if (counts[T##type][C_##fn] != 0) \ + FAIL ("internal error"); \ + texpr = expr; \ + __asm __volatile ("" : : "r" (&texpr)); \ + if (count != 1 || counts[T##type][C_##fn] != 1) \ + { \ + FAIL ("wrong function called"); \ + memset (counts, 0, sizeof (counts)); \ + } \ + count = 0; \ + counts[T##type][C_##fn] = 0; \ + } \ + while (0) +#define TEST(expr, type, fn) TEST2(expr, type, type, fn) + + TEST (cos (vfloat1), float, cos); + TEST (cos (vdouble1), double, cos); + TEST (cos (vldouble1), ldouble, cos); + TEST (cos (vint1), double, cos); + TEST (cos (vllong1), double, cos); + TEST (cos (vcfloat1), cfloat, cos); + TEST (cos (vcdouble1), cdouble, cos); + TEST (cos (vcldouble1), cldouble, cos); + TEST (cos (Vfloat1), float, cos); + TEST (cos (Vdouble1), double, cos); + TEST (cos (Vldouble1), ldouble, cos); + TEST (cos (Vint1), double, cos); + TEST (cos (Vllong1), double, cos); + TEST (cos (Vcfloat1), cfloat, cos); + TEST (cos (Vcdouble1), cdouble, cos); + TEST (cos (Vcldouble1), cldouble, cos); + + TEST (fabs (vfloat1), float, fabs); + TEST (fabs (vdouble1), double, fabs); + TEST (fabs (vldouble1), ldouble, fabs); + TEST (fabs (vint1), double, fabs); + TEST (fabs (vllong1), double, fabs); + TEST (fabs (vcfloat1), float, cabs); + TEST (fabs (vcdouble1), double, cabs); + TEST (fabs (vcldouble1), ldouble, cabs); + TEST (fabs (Vfloat1), float, fabs); + TEST (fabs (Vdouble1), double, fabs); + TEST (fabs (Vldouble1), ldouble, fabs); +#ifndef __OPTIMIZE__ + /* GCC is too smart to optimize these out. */ + TEST (fabs (Vint1), double, fabs); + TEST (fabs (Vllong1), double, fabs); +#else + TEST_TYPE_ONLY (fabs (vllong1), double); + TEST_TYPE_ONLY (fabs (vllong1), double); +#endif + TEST (fabs (Vint4), double, fabs); + TEST (fabs (Vllong4), double, fabs); + TEST (fabs (Vcfloat1), float, cabs); + TEST (fabs (Vcdouble1), double, cabs); + TEST (fabs (Vcldouble1), ldouble, cabs); + + TEST (conj (vfloat1), cfloat, conj); + TEST (conj (vdouble1), cdouble, conj); + TEST (conj (vldouble1), cldouble, conj); + TEST (conj (vint1), cdouble, conj); + TEST (conj (vllong1), cdouble, conj); + TEST (conj (vcfloat1), cfloat, conj); + TEST (conj (vcdouble1), cdouble, conj); + TEST (conj (vcldouble1), cldouble, conj); + TEST (conj (Vfloat1), cfloat, conj); + TEST (conj (Vdouble1), cdouble, conj); + TEST (conj (Vldouble1), cldouble, conj); + TEST (conj (Vint1), cdouble, conj); + TEST (conj (Vllong1), cdouble, conj); + TEST (conj (Vcfloat1), cfloat, conj); + TEST (conj (Vcdouble1), cdouble, conj); + TEST (conj (Vcldouble1), cldouble, conj); + + TEST (expm1 (vfloat1), float, expm1); + TEST (expm1 (vdouble1), double, expm1); + TEST (expm1 (vldouble1), ldouble, expm1); + TEST (expm1 (vint1), double, expm1); + TEST (expm1 (vllong1), double, expm1); + TEST (expm1 (Vfloat1), float, expm1); + TEST (expm1 (Vdouble1), double, expm1); + TEST (expm1 (Vldouble1), ldouble, expm1); + TEST (expm1 (Vint1), double, expm1); + TEST (expm1 (Vllong1), double, expm1); + + TEST2 (lrint (vfloat1), float, long int, lrint); + TEST2 (lrint (vdouble1), double, long int, lrint); + TEST2 (lrint (vldouble1), ldouble, long int, lrint); + TEST2 (lrint (vint1), double, long int, lrint); + TEST2 (lrint (vllong1), double, long int, lrint); + TEST2 (lrint (Vfloat1), float, long int, lrint); + TEST2 (lrint (Vdouble1), double, long int, lrint); + TEST2 (lrint (Vldouble1), ldouble, long int, lrint); + TEST2 (lrint (Vint1), double, long int, lrint); + TEST2 (lrint (Vllong1), double, long int, lrint); + + TEST (ldexp (vfloat1, 6), float, ldexp); + TEST (ldexp (vdouble1, 6), double, ldexp); + TEST (ldexp (vldouble1, 6), ldouble, ldexp); + TEST (ldexp (vint1, 6), double, ldexp); + TEST (ldexp (vllong1, 6), double, ldexp); + TEST (ldexp (Vfloat1, 6), float, ldexp); + TEST (ldexp (Vdouble1, 6), double, ldexp); + TEST (ldexp (Vldouble1, 6), ldouble, ldexp); + TEST (ldexp (Vint1, 6), double, ldexp); + TEST (ldexp (Vllong1, 6), double, ldexp); + +#define FIRST(x, y) (y, x) +#define SECOND(x, y) (x, y) +#define NON_LDBL_TEST(fn, argm, arg, type, fnt) \ + TEST (fn argm (arg, vfloat1), type, fnt); \ + TEST (fn argm (arg, vdouble1), type, fnt); \ + TEST (fn argm (arg, vint1), type, fnt); \ + TEST (fn argm (arg, vllong1), type, fnt); \ + TEST (fn argm (arg, Vfloat1), type, fnt); \ + TEST (fn argm (arg, Vdouble1), type, fnt); \ + TEST (fn argm (arg, Vint1), type, fnt); \ + TEST (fn argm (arg, Vllong1), type, fnt); +#define NON_LDBL_CTEST(fn, argm, arg, type, fnt) \ + NON_LDBL_TEST(fn, argm, arg, type, fnt); \ + TEST (fn argm (arg, vcfloat1), type, fnt); \ + TEST (fn argm (arg, vcdouble1), type, fnt); \ + TEST (fn argm (arg, Vcfloat1), type, fnt); \ + TEST (fn argm (arg, Vcdouble1), type, fnt); +#define BINARY_TEST(fn, fnt) \ + TEST (fn (vfloat1, vfloat2), float, fnt); \ + TEST (fn (Vfloat1, vfloat2), float, fnt); \ + TEST (fn (vfloat1, Vfloat2), float, fnt); \ + TEST (fn (Vfloat1, Vfloat2), float, fnt); \ + TEST (fn (vldouble1, vldouble2), ldouble, fnt); \ + TEST (fn (Vldouble1, vldouble2), ldouble, fnt); \ + TEST (fn (vldouble1, Vldouble2), ldouble, fnt); \ + TEST (fn (Vldouble1, Vldouble2), ldouble, fnt); \ + NON_LDBL_TEST (fn, FIRST, vldouble2, ldouble, fnt); \ + NON_LDBL_TEST (fn, SECOND, vldouble2, ldouble, fnt); \ + NON_LDBL_TEST (fn, FIRST, Vldouble2, ldouble, fnt); \ + NON_LDBL_TEST (fn, SECOND, Vldouble2, ldouble, fnt); \ + NON_LDBL_TEST (fn, FIRST, vdouble2, double, fnt); \ + NON_LDBL_TEST (fn, SECOND, vdouble2, double, fnt); \ + NON_LDBL_TEST (fn, FIRST, Vdouble2, double, fnt); \ + NON_LDBL_TEST (fn, SECOND, Vdouble2, double, fnt); \ + NON_LDBL_TEST (fn, FIRST, vint2, double, fnt); \ + NON_LDBL_TEST (fn, SECOND, vint2, double, fnt); \ + NON_LDBL_TEST (fn, FIRST, Vint2, double, fnt); \ + NON_LDBL_TEST (fn, SECOND, Vint2, double, fnt); \ + NON_LDBL_TEST (fn, FIRST, vllong2, double, fnt); \ + NON_LDBL_TEST (fn, SECOND, vllong2, double, fnt); \ + NON_LDBL_TEST (fn, FIRST, Vllong2, double, fnt); \ + NON_LDBL_TEST (fn, SECOND, Vllong2, double, fnt); +#define BINARY_CTEST(fn, fnt) \ + BINARY_TEST (fn, fnt); \ + TEST (fn (vcfloat1, vfloat2), cfloat, fnt); \ + TEST (fn (Vcfloat1, vfloat2), cfloat, fnt); \ + TEST (fn (vcfloat1, Vfloat2), cfloat, fnt); \ + TEST (fn (Vcfloat1, Vfloat2), cfloat, fnt); \ + TEST (fn (vcldouble1, vldouble2), cldouble, fnt); \ + TEST (fn (Vcldouble1, vldouble2), cldouble, fnt); \ + TEST (fn (vcldouble1, Vldouble2), cldouble, fnt); \ + TEST (fn (Vcldouble1, Vldouble2), cldouble, fnt); \ + TEST (fn (vcfloat1, vfloat2), cfloat, fnt); \ + TEST (fn (Vcfloat1, vfloat2), cfloat, fnt); \ + TEST (fn (vcfloat1, Vfloat2), cfloat, fnt); \ + TEST (fn (Vcfloat1, Vfloat2), cfloat, fnt); \ + TEST (fn (vcldouble1, vldouble2), cldouble, fnt); \ + TEST (fn (Vcldouble1, vldouble2), cldouble, fnt); \ + TEST (fn (vcldouble1, Vldouble2), cldouble, fnt); \ + TEST (fn (Vcldouble1, Vldouble2), cldouble, fnt); \ + TEST (fn (vcfloat1, vcfloat2), cfloat, fnt); \ + TEST (fn (Vcfloat1, vcfloat2), cfloat, fnt); \ + TEST (fn (vcfloat1, Vcfloat2), cfloat, fnt); \ + TEST (fn (Vcfloat1, Vcfloat2), cfloat, fnt); \ + TEST (fn (vcldouble1, vcldouble2), cldouble, fnt); \ + TEST (fn (Vcldouble1, vcldouble2), cldouble, fnt); \ + TEST (fn (vcldouble1, Vcldouble2), cldouble, fnt); \ + TEST (fn (Vcldouble1, Vcldouble2), cldouble, fnt); \ + NON_LDBL_CTEST (fn, FIRST, vcldouble2, cldouble, fnt); \ + NON_LDBL_CTEST (fn, SECOND, vcldouble2, cldouble, fnt); \ + NON_LDBL_CTEST (fn, FIRST, Vcldouble2, cldouble, fnt); \ + NON_LDBL_CTEST (fn, SECOND, Vcldouble2, cldouble, fnt); \ + NON_LDBL_CTEST (fn, FIRST, vcdouble2, cdouble, fnt); \ + NON_LDBL_CTEST (fn, SECOND, vcdouble2, cdouble, fnt); \ + NON_LDBL_CTEST (fn, FIRST, Vcdouble2, cdouble, fnt); \ + NON_LDBL_CTEST (fn, SECOND, Vcdouble2, cdouble, fnt); + + BINARY_TEST (atan2, atan2); + +#define my_remquo(x, y) remquo (x, y, &quo) + BINARY_TEST (my_remquo, remquo); +#undef my_remquo + + BINARY_CTEST (pow, pow); + + /* Testing all arguments of fma would be just too expensive, + so test just some. */ +#define my_fma(x, y) fma (x, y, vfloat3) + BINARY_TEST (my_fma, fma); +#undef my_fma +#define my_fma(x, y) fma (x, vfloat3, y) + BINARY_TEST (my_fma, fma); +#undef my_fma +#define my_fma(x, y) fma (Vfloat3, x, y) + BINARY_TEST (my_fma, fma); +#undef my_fma + TEST (fma (vdouble1, Vdouble2, vllong3), double, fma); + TEST (fma (vint1, Vint2, vint3), double, fma); + TEST (fma (Vldouble1, vldouble2, Vldouble3), ldouble, fma); + TEST (fma (vldouble1, vint2, Vdouble3), ldouble, fma); + + return result; +} + +int +main (void) +{ + return test (vint1, vllong1); +} + +/* Now generate the three functions. */ +#define HAVE_MAIN + +#define F(name) name +#define TYPE double +#define CTYPE cdouble +#define T Tdouble +#define C Tcdouble +#include "test-tgmath2.c" + +#define F(name) name##f +#define TYPE float +#define CTYPE cfloat +#define T Tfloat +#define C Tcfloat +#include "test-tgmath2.c" + +#ifndef NO_LONG_DOUBLE +#define F(name) name##l +#define TYPE ldouble +#define CTYPE cldouble +#define T Tldouble +#define C Tcldouble +#include "test-tgmath2.c" +#endif + +#else + +#ifdef DEBUG +#define P() puts (__FUNCTION__); count++ +#else +#define P() count++; +#endif + +TYPE +(F(cos)) (TYPE x) +{ + counts[T][C_cos]++; + P (); + return x; +} + +CTYPE +(F(ccos)) (CTYPE x) +{ + counts[C][C_cos]++; + P (); + return x; +} + +TYPE +(F(fabs)) (TYPE x) +{ + counts[T][C_fabs]++; + P (); + return x; +} + +TYPE +(F(cabs)) (CTYPE x) +{ + counts[T][C_cabs]++; + P (); + return x; +} + +CTYPE +(F(conj)) (CTYPE x) +{ + counts[C][C_conj]++; + P (); + return x; +} + +TYPE +(F(expm1)) (TYPE x) +{ + counts[T][C_expm1]++; + P (); + return x; +} + +long int +(F(lrint)) (TYPE x) +{ + counts[T][C_lrint]++; + P (); + return x; +} + +TYPE +(F(ldexp)) (TYPE x, int y) +{ + counts[T][C_ldexp]++; + P (); + return x + y; +} + +TYPE +(F(atan2)) (TYPE x, TYPE y) +{ + counts[T][C_atan2]++; + P (); + return x + y; +} + +TYPE +(F(remquo)) (TYPE x, TYPE y, int *z) +{ + counts[T][C_remquo]++; + P (); + return x + y + *z; +} + +TYPE +(F(pow)) (TYPE x, TYPE y) +{ + counts[T][C_pow]++; + P (); + return x + y; +} + +CTYPE +(F(cpow)) (CTYPE x, CTYPE y) +{ + counts[C][C_pow]++; + P (); + return x + y; +} + +TYPE +(F(fma)) (TYPE x, TYPE y, TYPE z) +{ + counts[T][C_fma]++; + P (); + return x + y + z; +} + +#undef F +#undef TYPE +#undef CTYPE +#undef T +#undef C +#undef P +#endif diff --git a/libc/math/tgmath.h b/libc/math/tgmath.h index f3d23f6e5..4f45aaa0f 100644 --- a/libc/math/tgmath.h +++ b/libc/math/tgmath.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 +/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -53,202 +53,187 @@ /* The tgmath real type for T, where E is 0 if T is an integer type and 1 for a floating type. */ # define __tgmath_real_type_sub(T, E) \ - __typeof__(*(0 ? (__typeof__ (0 ? (double *) 0 : (void *) (E))) 0 \ - : (__typeof__ (0 ? (T *) 0 : (void *) (!(E)))) 0)) + __typeof__ (*(0 ? (__typeof__ (0 ? (double *) 0 : (void *) (E))) 0 \ + : (__typeof__ (0 ? (T *) 0 : (void *) (!(E)))) 0)) /* The tgmath real type of EXPR. */ # define __tgmath_real_type(expr) \ - __tgmath_real_type_sub(__typeof__(expr), __floating_type(__typeof__(expr))) + __tgmath_real_type_sub (__typeof__ ((__typeof__ (expr)) 0), \ + __floating_type (__typeof__ (expr))) /* We have two kinds of generic macros: to support functions which are only defined on real valued parameters and those which are defined for complex functions as well. */ # define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \ - (__extension__ ({ __tgmath_real_type (Val) __tgmres; \ - if (sizeof (Val) == sizeof (double) \ - || __builtin_classify_type (Val) != 8) \ - __tgmres = Fct (Val); \ - else if (sizeof (Val) == sizeof (float)) \ - __tgmres = Fct##f (Val); \ - else \ - __tgmres = __tgml(Fct) (Val); \ - __tgmres; })) + (__extension__ ((sizeof (Val) == sizeof (double) \ + || __builtin_classify_type (Val) != 8) \ + ? (__tgmath_real_type (Val)) Fct (Val) \ + : (sizeof (Val) == sizeof (float)) \ + ? (__tgmath_real_type (Val)) Fct##f (Val) \ + : (__tgmath_real_type (Val)) __tgml(Fct) (Val))) # define __TGMATH_UNARY_REAL_RET_ONLY(Val, RetType, Fct) \ - (__extension__ ({ RetType __tgmres; \ - if (sizeof (Val) == sizeof (double) \ - || __builtin_classify_type (Val) != 8) \ - __tgmres = Fct (Val); \ - else if (sizeof (Val) == sizeof (float)) \ - __tgmres = Fct##f (Val); \ - else \ - __tgmres = __tgml(Fct) (Val); \ - __tgmres; })) + (__extension__ ((sizeof (Val) == sizeof (double) \ + || __builtin_classify_type (Val) != 8) \ + ? (RetType) Fct (Val) \ + : (sizeof (Val) == sizeof (float)) \ + ? (RetType) Fct##f (Val) \ + : (RetType) __tgml(Fct) (Val))) # define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \ - (__extension__ ({ __tgmath_real_type (Val1) __tgmres; \ - if (sizeof (Val1) == sizeof (double) \ - || __builtin_classify_type (Val1) != 8) \ - __tgmres = Fct (Val1, Val2); \ - else if (sizeof (Val1) == sizeof (float)) \ - __tgmres = Fct##f (Val1, Val2); \ - else \ - __tgmres = __tgml(Fct) (Val1, Val2); \ - __tgmres; })) + (__extension__ ((sizeof (Val1) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8) \ + ? (__tgmath_real_type (Val1)) Fct (Val1, Val2) \ + : (sizeof (Val1) == sizeof (float)) \ + ? (__tgmath_real_type (Val1)) Fct##f (Val1, Val2) \ + : (__tgmath_real_type (Val1)) __tgml(Fct) (Val1, Val2))) # define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \ - (__extension__ ({ __typeof((__tgmath_real_type (Val1)) 0 \ - + (__tgmath_real_type (Val2)) 0) __tgmres; \ - if ((sizeof (Val1) > sizeof (double) \ - || sizeof (Val2) > sizeof (double)) \ - && __builtin_classify_type ((Val1) + (Val2)) == 8) \ - __tgmres = __tgml(Fct) (Val1, Val2); \ - else if (sizeof (Val1) == sizeof (double) \ - || sizeof (Val2) == sizeof (double) \ - || __builtin_classify_type (Val1) != 8 \ - || __builtin_classify_type (Val2) != 8) \ - __tgmres = Fct (Val1, Val2); \ - else \ - __tgmres = Fct##f (Val1, Val2); \ - __tgmres; })) + (__extension__ (((sizeof (Val1) > sizeof (double) \ + || sizeof (Val2) > sizeof (double)) \ + && __builtin_classify_type ((Val1) + (Val2)) == 8) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + __tgml(Fct) (Val1, Val2) \ + : (sizeof (Val1) == sizeof (double) \ + || sizeof (Val2) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8 \ + || __builtin_classify_type (Val2) != 8) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + Fct (Val1, Val2) \ + : (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + Fct##f (Val1, Val2))) # define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \ - (__extension__ ({ __typeof((__tgmath_real_type (Val1)) 0 \ - + (__tgmath_real_type (Val2)) 0) __tgmres; \ - if ((sizeof (Val1) > sizeof (double) \ - || sizeof (Val2) > sizeof (double)) \ - && __builtin_classify_type ((Val1) + (Val2)) == 8) \ - __tgmres = __tgml(Fct) (Val1, Val2, Val3); \ - else if (sizeof (Val1) == sizeof (double) \ - || sizeof (Val2) == sizeof (double) \ - || __builtin_classify_type (Val1) != 8 \ - || __builtin_classify_type (Val2) != 8) \ - __tgmres = Fct (Val1, Val2, Val3); \ - else \ - __tgmres = Fct##f (Val1, Val2, Val3); \ - __tgmres; })) + (__extension__ (((sizeof (Val1) > sizeof (double) \ + || sizeof (Val2) > sizeof (double)) \ + && __builtin_classify_type ((Val1) + (Val2)) == 8) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + __tgml(Fct) (Val1, Val2, Val3) \ + : (sizeof (Val1) == sizeof (double) \ + || sizeof (Val2) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8 \ + || __builtin_classify_type (Val2) != 8) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + Fct (Val1, Val2, Val3) \ + : (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + Fct##f (Val1, Val2, Val3))) # define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \ - (__extension__ ({ __typeof((__tgmath_real_type (Val1)) 0 \ - + (__tgmath_real_type (Val2)) 0 \ - + (__tgmath_real_type (Val3)) 0) __tgmres; \ - if ((sizeof (Val1) > sizeof (double) \ - || sizeof (Val2) > sizeof (double) \ - || sizeof (Val3) > sizeof (double)) \ - && __builtin_classify_type ((Val1) + (Val2) \ - + (Val3)) == 8) \ - __tgmres = __tgml(Fct) (Val1, Val2, Val3); \ - else if (sizeof (Val1) == sizeof (double) \ - || sizeof (Val2) == sizeof (double) \ - || sizeof (Val3) == sizeof (double) \ - || __builtin_classify_type (Val1) != 8 \ - || __builtin_classify_type (Val2) != 8 \ - || __builtin_classify_type (Val3) != 8) \ - __tgmres = Fct (Val1, Val2, Val3); \ - else \ - __tgmres = Fct##f (Val1, Val2, Val3); \ - __tgmres; })) + (__extension__ (((sizeof (Val1) > sizeof (double) \ + || sizeof (Val2) > sizeof (double) \ + || sizeof (Val3) > sizeof (double)) \ + && __builtin_classify_type ((Val1) + (Val2) + (Val3)) \ + == 8) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0 \ + + (__tgmath_real_type (Val3)) 0)) \ + __tgml(Fct) (Val1, Val2, Val3) \ + : (sizeof (Val1) == sizeof (double) \ + || sizeof (Val2) == sizeof (double) \ + || sizeof (Val3) == sizeof (double) \ + || __builtin_classify_type (Val1) != 8 \ + || __builtin_classify_type (Val2) != 8 \ + || __builtin_classify_type (Val3) != 8) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0 \ + + (__tgmath_real_type (Val3)) 0)) \ + Fct (Val1, Val2, Val3) \ + : (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0 \ + + (__tgmath_real_type (Val3)) 0)) \ + Fct##f (Val1, Val2, Val3))) /* XXX This definition has to be changed as soon as the compiler understands the imaginary keyword. */ # define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \ - (__extension__ ({ __tgmath_real_type (Val) __tgmres; \ - if (sizeof (__real__ (Val)) > sizeof (double) \ - && __builtin_classify_type (__real__ (Val)) == 8) \ - { \ - if (sizeof (__real__ (Val)) == sizeof (Val)) \ - __tgmres = __tgml(Fct) (Val); \ - else \ - __tgmres = __tgml(Cfct) (Val); \ - } \ - else if (sizeof (__real__ (Val)) == sizeof (double) \ - || __builtin_classify_type (__real__ (Val)) \ - != 8) \ - { \ - if (sizeof (__real__ (Val)) == sizeof (Val)) \ - __tgmres = Fct (Val); \ - else \ - __tgmres = Cfct (Val); \ - } \ - else \ - { \ - if (sizeof (__real__ (Val)) == sizeof (Val)) \ - __tgmres = Fct##f (Val); \ - else \ - __tgmres = Cfct##f (Val); \ - } \ - __tgmres; })) + (__extension__ ((sizeof (__real__ (Val)) == sizeof (double) \ + || __builtin_classify_type (__real__ (Val)) != 8) \ + ? ((sizeof (__real__ (Val)) == sizeof (Val)) \ + ? (__tgmath_real_type (Val)) Fct (Val) \ + : (__tgmath_real_type (Val)) Cfct (Val)) \ + : (sizeof (__real__ (Val)) == sizeof (float)) \ + ? ((sizeof (__real__ (Val)) == sizeof (Val)) \ + ? (__tgmath_real_type (Val)) Fct##f (Val) \ + : (__tgmath_real_type (Val)) Cfct##f (Val)) \ + : ((sizeof (__real__ (Val)) == sizeof (Val)) \ + ? (__tgmath_real_type (Val)) __tgml(Fct) (Val) \ + : (__tgmath_real_type (Val)) __tgml(Cfct) (Val)))) + +# define __TGMATH_UNARY_IMAG(Val, Cfct) \ + (__extension__ ((sizeof (__real__ (Val)) == sizeof (double) \ + || __builtin_classify_type (__real__ (Val)) != 8) \ + ? (__typeof__ ((__tgmath_real_type (Val)) 0 \ + + _Complex_I)) Cfct (Val) \ + : (sizeof (__real__ (Val)) == sizeof (float)) \ + ? (__typeof__ ((__tgmath_real_type (Val)) 0 \ + + _Complex_I)) Cfct##f (Val) \ + : (__typeof__ ((__tgmath_real_type (Val)) 0 \ + + _Complex_I)) __tgml(Cfct) (Val))) /* XXX This definition has to be changed as soon as the compiler understands the imaginary keyword. */ # define __TGMATH_UNARY_REAL_IMAG_RET_REAL(Val, Fct, Cfct) \ - (__extension__ ({ __tgmath_real_type (Val) __tgmres; \ - if (sizeof (__real__ (Val)) > sizeof (double) \ - && __builtin_classify_type (__real__ (Val)) == 8) \ - { \ - if (sizeof (__real__ (Val)) == sizeof (Val)) \ - __tgmres = __tgml(Fct) (Val); \ - else \ - __tgmres = __tgml(Cfct) (Val); \ - } \ - else if (sizeof (__real__ (Val)) == sizeof (double) \ - || __builtin_classify_type (__real__ (Val)) \ - != 8) \ - { \ - if (sizeof (__real__ (Val)) == sizeof (Val)) \ - __tgmres = Fct (Val); \ - else \ - __tgmres = Cfct (Val); \ - } \ - else \ - { \ - if (sizeof (__real__ (Val)) == sizeof (Val)) \ - __tgmres = Fct##f (Val); \ - else \ - __tgmres = Cfct##f (Val); \ - } \ - __real__ __tgmres; })) + (__extension__ ((sizeof (__real__ (Val)) == sizeof (double) \ + || __builtin_classify_type (__real__ (Val)) != 8) \ + ? ((sizeof (__real__ (Val)) == sizeof (Val)) \ + ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\ + Fct (Val) \ + : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\ + Cfct (Val)) \ + : (sizeof (__real__ (Val)) == sizeof (float)) \ + ? ((sizeof (__real__ (Val)) == sizeof (Val)) \ + ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\ + Fct##f (Val) \ + : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\ + Cfct##f (Val)) \ + : ((sizeof (__real__ (Val)) == sizeof (Val)) \ + ? (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\ + __tgml(Fct) (Val) \ + : (__typeof__ (__real__ (__tgmath_real_type (Val)) 0))\ + __tgml(Cfct) (Val)))) /* XXX This definition has to be changed as soon as the compiler understands the imaginary keyword. */ # define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \ - (__extension__ ({ __typeof((__tgmath_real_type (Val1)) 0 \ - + (__tgmath_real_type (Val2)) 0) __tgmres; \ - if ((sizeof (__real__ (Val1)) > sizeof (double) \ - || sizeof (__real__ (Val2)) > sizeof (double)) \ - && __builtin_classify_type (__real__ (Val1) \ - + __real__ (Val2)) \ - == 8) \ - { \ - if (sizeof (__real__ (Val1)) == sizeof (Val1) \ - && sizeof (__real__ (Val2)) == sizeof (Val2)) \ - __tgmres = __tgml(Fct) (Val1, Val2); \ - else \ - __tgmres = __tgml(Cfct) (Val1, Val2); \ - } \ - else if (sizeof (__real__ (Val1)) == sizeof (double) \ - || sizeof (__real__ (Val2)) == sizeof(double) \ - || (__builtin_classify_type (__real__ (Val1)) \ - != 8) \ - || (__builtin_classify_type (__real__ (Val2)) \ - != 8)) \ - { \ - if (sizeof (__real__ (Val1)) == sizeof (Val1) \ - && sizeof (__real__ (Val2)) == sizeof (Val2)) \ - __tgmres = Fct (Val1, Val2); \ - else \ - __tgmres = Cfct (Val1, Val2); \ - } \ - else \ - { \ - if (sizeof (__real__ (Val1)) == sizeof (Val1) \ - && sizeof (__real__ (Val2)) == sizeof (Val2)) \ - __tgmres = Fct##f (Val1, Val2); \ - else \ - __tgmres = Cfct##f (Val1, Val2); \ - } \ - __tgmres; })) + (__extension__ (((sizeof (__real__ (Val1)) > sizeof (double) \ + || sizeof (__real__ (Val2)) > sizeof (double)) \ + && __builtin_classify_type (__real__ (Val1) \ + + __real__ (Val2)) == 8) \ + ? ((sizeof (__real__ (Val1)) == sizeof (Val1) \ + && sizeof (__real__ (Val2)) == sizeof (Val2)) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + __tgml(Fct) (Val1, Val2) \ + : (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + __tgml(Cfct) (Val1, Val2)) \ + : (sizeof (__real__ (Val1)) == sizeof (double) \ + || sizeof (__real__ (Val2)) == sizeof (double) \ + || __builtin_classify_type (__real__ (Val1)) != 8 \ + || __builtin_classify_type (__real__ (Val2)) != 8) \ + ? ((sizeof (__real__ (Val1)) == sizeof (Val1) \ + && sizeof (__real__ (Val2)) == sizeof (Val2)) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + Fct (Val1, Val2) \ + : (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + Cfct (Val1, Val2)) \ + : ((sizeof (__real__ (Val1)) == sizeof (Val1) \ + && sizeof (__real__ (Val2)) == sizeof (Val2)) \ + ? (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + Fct##f (Val1, Val2) \ + : (__typeof ((__tgmath_real_type (Val1)) 0 \ + + (__tgmath_real_type (Val2)) 0)) \ + Cfct##f (Val1, Val2)))) #else # error "Unsupported compiler; you cannot use <tgmath.h>" #endif @@ -447,10 +432,10 @@ #define carg(Val) __TGMATH_UNARY_REAL_IMAG_RET_REAL (Val, carg, carg) /* Complex conjugate of Z. */ -#define conj(Val) __TGMATH_UNARY_REAL_IMAG (Val, conj, conj) +#define conj(Val) __TGMATH_UNARY_IMAG (Val, conj) /* Projection of Z onto the Riemann sphere. */ -#define cproj(Val) __TGMATH_UNARY_REAL_IMAG (Val, cproj, cproj) +#define cproj(Val) __TGMATH_UNARY_IMAG (Val, cproj) /* Decomposing complex values. */ diff --git a/libc/misc/Makefile b/libc/misc/Makefile index 04214d465..651eb621d 100644 --- a/libc/misc/Makefile +++ b/libc/misc/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991-2002,2003,2004,2005,2006 Free Software Foundation, Inc. +# Copyright (C) 1991-2006, 2007 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -49,6 +49,7 @@ routines := brk sbrk sstk ioctl \ gethostid sethostid \ vhangup \ swapon swapoff mktemp mkstemp mkstemp64 mkdtemp \ + mkostemp mkostemp64 \ ualarm usleep \ gtty stty \ ptrace \ diff --git a/libc/misc/Versions b/libc/misc/Versions index fdf2d9d2a..b182f1231 100644 --- a/libc/misc/Versions +++ b/libc/misc/Versions @@ -134,4 +134,7 @@ libc { futimesat; __syslog_chk; __vsyslog_chk; } + GLIBC_2.7 { + mkostemp; mkostemp64; + } } diff --git a/libc/misc/mkdtemp.c b/libc/misc/mkdtemp.c index abb9a35ce..7cd3a44f9 100644 --- a/libc/misc/mkdtemp.c +++ b/libc/misc/mkdtemp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1999 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2007 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,7 +28,7 @@ char * mkdtemp (template) char *template; { - if (__gen_tempname (template, __GT_DIR)) + if (__gen_tempname (template, 0, __GT_DIR)) return NULL; else return template; diff --git a/libc/misc/mkostemp.c b/libc/misc/mkostemp.c new file mode 100644 index 000000000..372e4f3c0 --- /dev/null +++ b/libc/misc/mkostemp.c @@ -0,0 +1,36 @@ +/* Copyright (C) 1998, 1999, 2001, 2007 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 <stdio.h> +#include <stdlib.h> + +#ifndef __GT_FILE +# define __GT_FILE 0 +#endif + +/* Generate a unique temporary file name from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the filename unique. + Then open the file and return a fd. */ +int +mkostemp (template, flags) + char *template; + int flags; +{ + return __gen_tempname (template, flags, __GT_FILE); +} diff --git a/libc/misc/mkostemp64.c b/libc/misc/mkostemp64.c new file mode 100644 index 000000000..2ae730991 --- /dev/null +++ b/libc/misc/mkostemp64.c @@ -0,0 +1,33 @@ +/* Copyright (C) 2000, 2007 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 <fcntl.h> +#include <stdio.h> +#include <stdlib.h> + +/* Generate a unique temporary file name from TEMPLATE. + The last six characters of TEMPLATE must be "XXXXXX"; + they are replaced with a string that makes the filename unique. + Then open the file and return a fd. */ +int +mkostemp64 (template, flags) + char *template; + int flags; +{ + return __gen_tempname (template, flags | O_LARGEFILE, __GT_FILE); +} diff --git a/libc/misc/mkstemp.c b/libc/misc/mkstemp.c index ff0ffa2d0..d3edca079 100644 --- a/libc/misc/mkstemp.c +++ b/libc/misc/mkstemp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2001, 2007 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,5 +31,5 @@ int mkstemp (template) char *template; { - return __gen_tempname (template, __GT_FILE); + return __gen_tempname (template, 0, __GT_FILE); } diff --git a/libc/misc/mkstemp64.c b/libc/misc/mkstemp64.c index 93c2a3ee4..400bf47d0 100644 --- a/libc/misc/mkstemp64.c +++ b/libc/misc/mkstemp64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2007 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 @@ -16,6 +16,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include <fcntl.h> #include <stdio.h> #include <stdlib.h> @@ -27,5 +28,5 @@ int mkstemp64 (template) char *template; { - return __gen_tempname (template, __GT_BIGFILE); + return __gen_tempname (template, O_LARGEFILE, __GT_FILE); } diff --git a/libc/misc/mktemp.c b/libc/misc/mktemp.c index 20dfc74e5..f600d7ea7 100644 --- a/libc/misc/mktemp.c +++ b/libc/misc/mktemp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1998, 1999, 2000, 2007 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,7 +26,7 @@ char * mktemp (template) char *template; { - if (__gen_tempname (template, __GT_NOCREATE) < 0) + if (__gen_tempname (template, 0, __GT_NOCREATE) < 0) /* We return the null string if we can't find a unique file name. */ template[0] = '\0'; diff --git a/libc/nis/nis_domain_of.c b/libc/nis/nis_domain_of.c index 4d6b48640..6f41b92bf 100644 --- a/libc/nis/nis_domain_of.c +++ b/libc/nis/nis_domain_of.c @@ -32,10 +32,10 @@ __nis_domain_of (const_nis_name name) { const_nis_name cptr = strchr (name, '.'); - if (cptr++ == NULL) + if (cptr == NULL) return ""; - if (*cptr == '\0') + if (*++cptr == '\0') return "."; return cptr; diff --git a/libc/nis/nis_subr.c b/libc/nis/nis_subr.c index c68189e54..abe51a999 100644 --- a/libc/nis/nis_subr.c +++ b/libc/nis/nis_subr.c @@ -112,7 +112,7 @@ nis_getnames (const_nis_name name) size_t name_len = strlen (name); char *path; int pos = 0; - char *saveptr; + char *saveptr = NULL; int have_point; const char *cp; const char *cp2; diff --git a/libc/nis/nis_table.c b/libc/nis/nis_table.c index 70b470141..3704b0094 100644 --- a/libc/nis/nis_table.c +++ b/libc/nis/nis_table.c @@ -372,7 +372,8 @@ nis_list (const_nis_name name, unsigned int flags, &bptr); if (clnt_status != NIS_SUCCESS) { - NIS_RES_STATUS (res) = clnt_status; + if (clnt_status == NIS_NOMEMORY) + NIS_RES_STATUS (res) = clnt_status; ++done; } else @@ -452,10 +453,14 @@ nis_list (const_nis_name name, unsigned int flags, ++done; else { - NIS_RES_STATUS (res) + clnt_status = __follow_path (&tablepath, &tableptr, ibreq, &bptr); - if (NIS_RES_STATUS (res) != NIS_SUCCESS) - ++done; + if (clnt_status != NIS_SUCCESS) + { + if (clnt_status == NIS_NOMEMORY) + NIS_RES_STATUS (res) = clnt_status; + ++done; + } } } break; diff --git a/libc/nis/nis_xdr.c b/libc/nis/nis_xdr.c index 0c6452a6a..f2d037aa6 100644 --- a/libc/nis/nis_xdr.c +++ b/libc/nis/nis_xdr.c @@ -1,4 +1,4 @@ -/* Copyright (c) 1997, 1998, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (c) 1997, 1998, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997. @@ -87,7 +87,7 @@ _xdr_nis_server (XDR *xdrs, nis_server *objp) bool_t res = xdr_nis_name (xdrs, &objp->name); if (__builtin_expect (res, TRUE)) { - res = xdr_array (xdrs, (char **) &objp->ep.ep_val, &objp->ep.ep_len, + res = xdr_array (xdrs, (void *) &objp->ep.ep_val, &objp->ep.ep_len, ~0, sizeof (endpoint), (xdrproc_t) xdr_endpoint); if (__builtin_expect (res, TRUE)) { @@ -108,7 +108,7 @@ _xdr_directory_obj (XDR *xdrs, directory_obj *objp) res = xdr_nstype (xdrs, &objp->do_type); if (__builtin_expect (res, TRUE)) { - res = xdr_array (xdrs, (char **) &objp->do_servers.do_servers_val, + res = xdr_array (xdrs, (void *) &objp->do_servers.do_servers_val, &objp->do_servers.do_servers_len, ~0, sizeof (nis_server), (xdrproc_t) _xdr_nis_server); if (__builtin_expect (res, TRUE)) @@ -116,7 +116,7 @@ _xdr_directory_obj (XDR *xdrs, directory_obj *objp) res = xdr_uint32_t (xdrs, &objp->do_ttl); if (__builtin_expect (res, TRUE)) res = xdr_array (xdrs, - (char **) &objp->do_armask.do_armask_val, + (void *) &objp->do_armask.do_armask_val, &objp->do_armask.do_armask_len, ~0, sizeof (oar_mask), (xdrproc_t) xdr_oar_mask); } @@ -140,7 +140,7 @@ xdr_entry_obj (XDR *xdrs, entry_obj *objp) { bool_t res = xdr_string (xdrs, &objp->en_type, ~0); if (__builtin_expect (res, TRUE)) - res = xdr_array (xdrs, (char **) &objp->en_cols.en_cols_val, + res = xdr_array (xdrs, (void *) &objp->en_cols.en_cols_val, &objp->en_cols.en_cols_len, ~0, sizeof (entry_col), (xdrproc_t) xdr_entry_col); return res; @@ -151,7 +151,7 @@ xdr_group_obj (XDR *xdrs, group_obj *objp) { bool_t res = xdr_u_int (xdrs, &objp->gr_flags); if (__builtin_expect (res, TRUE)) - res = xdr_array (xdrs, (char **) &objp->gr_members.gr_members_val, + res = xdr_array (xdrs, (void *) &objp->gr_members.gr_members_val, &objp->gr_members.gr_members_len, ~0, sizeof (nis_name), (xdrproc_t) _xdr_nis_name); return res; @@ -163,7 +163,7 @@ xdr_link_obj (XDR *xdrs, link_obj *objp) bool_t res = xdr_zotypes (xdrs, &objp->li_rtype); if (__builtin_expect (res, TRUE)) { - res = xdr_array (xdrs, (char **) &objp->li_attrs.li_attrs_val, + res = xdr_array (xdrs, (void *) &objp->li_attrs.li_attrs_val, &objp->li_attrs.li_attrs_len, ~0, sizeof (nis_attr), (xdrproc_t) xdr_nis_attr); if (__builtin_expect (res, TRUE)) @@ -197,7 +197,7 @@ xdr_table_obj (XDR *xdrs, table_obj *objp) res = xdr_u_char (xdrs, &objp->ta_sep); if (__builtin_expect (res, TRUE)) { - res = xdr_array (xdrs, (char **) &objp->ta_cols.ta_cols_val, + res = xdr_array (xdrs, (void *) &objp->ta_cols.ta_cols_val, &objp->ta_cols.ta_cols_len, ~0, sizeof (table_col), (xdrproc_t) xdr_table_col); if (__builtin_expect (res, TRUE)) @@ -296,7 +296,7 @@ _xdr_nis_result (XDR *xdrs, nis_result *objp) bool_t res = xdr_nis_error (xdrs, &objp->status); if (__builtin_expect (res, TRUE)) { - res = xdr_array (xdrs, (char **) &objp->objects.objects_val, + res = xdr_array (xdrs, (void *) &objp->objects.objects_val, &objp->objects.objects_len, ~0, sizeof (nis_object), (xdrproc_t) _xdr_nis_object); if (__builtin_expect (res, TRUE)) @@ -327,7 +327,7 @@ _xdr_ns_request (XDR *xdrs, ns_request *objp) { bool_t res = xdr_nis_name (xdrs, &objp->ns_name); if (__builtin_expect (res, TRUE)) - res = xdr_array (xdrs, (char **) &objp->ns_object.ns_object_val, + res = xdr_array (xdrs, (void *) &objp->ns_object.ns_object_val, &objp->ns_object.ns_object_len, 1, sizeof (nis_object), (xdrproc_t) _xdr_nis_object); return res; @@ -339,7 +339,7 @@ _xdr_ib_request (XDR *xdrs, ib_request *objp) bool_t res = xdr_nis_name (xdrs, &objp->ibr_name); if (__builtin_expect (res, TRUE)) { - res = xdr_array (xdrs, (char **) &objp->ibr_srch.ibr_srch_val, + res = xdr_array (xdrs, (void *) &objp->ibr_srch.ibr_srch_val, &objp->ibr_srch.ibr_srch_len, ~0, sizeof (nis_attr), (xdrproc_t) xdr_nis_attr); if (__builtin_expect (res, TRUE)) @@ -347,14 +347,14 @@ _xdr_ib_request (XDR *xdrs, ib_request *objp) res = xdr_u_int (xdrs, &objp->ibr_flags); if (__builtin_expect (res, TRUE)) { - res = xdr_array (xdrs, (char **) &objp->ibr_obj.ibr_obj_val, + res = xdr_array (xdrs, (void *) &objp->ibr_obj.ibr_obj_val, &objp->ibr_obj.ibr_obj_len, 1, sizeof (nis_object), (xdrproc_t) _xdr_nis_object); if (__builtin_expect (res, TRUE)) { res = xdr_array (xdrs, - (char **) &objp->ibr_cbhost.ibr_cbhost_val, + (void *) &objp->ibr_cbhost.ibr_cbhost_val, &objp->ibr_cbhost.ibr_cbhost_len, 1, sizeof (nis_server), (xdrproc_t) _xdr_nis_server); @@ -406,7 +406,7 @@ _xdr_nis_tag (XDR *xdrs, nis_tag *objp) bool_t _xdr_nis_taglist (XDR *xdrs, nis_taglist *objp) { - return xdr_array (xdrs, (char **) &objp->tags.tags_val, + return xdr_array (xdrs, (void *) &objp->tags.tags_val, &objp->tags.tags_len, ~0, sizeof (nis_tag), (xdrproc_t) _xdr_nis_tag); } @@ -452,7 +452,7 @@ libnsl_hidden_def (xdr_obj_p) bool_t xdr_cback_data (XDR *xdrs, cback_data *objp) { - return xdr_array (xdrs, (char **)&objp->entries.entries_val, + return xdr_array (xdrs, (void *) &objp->entries.entries_val, &objp->entries.entries_len, ~0, sizeof (obj_p), (xdrproc_t) xdr_obj_p); } diff --git a/libc/nis/nss-default.c b/libc/nis/nss-default.c index 577f7c2d4..046ddfee8 100644 --- a/libc/nis/nss-default.c +++ b/libc/nis/nss-default.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 2001, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1996, 2001, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,6 +17,7 @@ 02111-1307 USA. */ #include <ctype.h> +#include <errno.h> #include <stdio.h> #include <stdio_ext.h> #include <stdlib.h> @@ -54,6 +55,7 @@ static const struct static void init (void) { + int saved_errno = errno; FILE *fp = fopen (default_nss, "rc"); if (fp != NULL) { @@ -111,6 +113,7 @@ init (void) fclose (fp); } + __set_errno (saved_errno); } diff --git a/libc/nis/nss_compat/compat-grp.c b/libc/nis/nss_compat/compat-grp.c index 236c84a20..939102868 100644 --- a/libc/nis/nss_compat/compat-grp.c +++ b/libc/nis/nss_compat/compat-grp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996-1999,2001-2005,2006 Free Software Foundation, Inc. +/* Copyright (C) 1996-1999, 2001-2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996. @@ -27,6 +27,7 @@ #include <string.h> #include <rpc/types.h> #include <bits/libc-lock.h> +#include <kernel-features.h> static service_user *ni; static enum nss_status (*nss_setgrent) (int stayopen); @@ -70,6 +71,19 @@ static ent_t ext_ent = { TRUE, NSS_STATUS_SUCCESS, NULL, { NULL, 0, 0 }}; /* Protect global state against multiple changers. */ __libc_lock_define_initialized (static, lock) +/* Positive if O_CLOEXEC is supported, negative if it is not supported, + zero if it is still undecided. This variable is shared with the + other compat functions. */ +#ifdef __ASSUME_O_CLOEXEC +# define __compat_have_cloexec 1 +#else +# ifdef O_CLOEXEC +int __compat_have_cloexec; +# else +# define __compat_have_cloexec -1 +# endif +#endif + /* Prototypes for local functions. */ static void blacklist_store_name (const char *, ent_t *); static int in_blacklist (const char *, int, ent_t *); @@ -107,21 +121,36 @@ internal_setgrent (ent_t *ent, int stayopen, int needent) if (ent->stream == NULL) { - ent->stream = fopen ("/etc/group", "rm"); + ent->stream = fopen ("/etc/group", "rme"); if (ent->stream == NULL) status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; else { /* We have to make sure the file is `closed on exec'. */ - int result, flags; + int result = 0; - result = flags = fcntl (fileno_unlocked (ent->stream), F_GETFD, 0); - if (result >= 0) + if (__compat_have_cloexec <= 0) { - flags |= FD_CLOEXEC; - result = fcntl (fileno_unlocked (ent->stream), F_SETFD, flags); + int flags; + result = flags = fcntl (fileno_unlocked (ent->stream), F_GETFD, + 0); + if (result >= 0) + { +#if defined O_CLOEXEC && !defined __ASSUME_O_CLOEXEC + if (__compat_have_cloexec == 0) + __compat_have_cloexec = (flags & FD_CLOEXEC) ? 1 : -1; + + if (__compat_have_cloexec < 0) +#endif + { + flags |= FD_CLOEXEC; + result = fcntl (fileno_unlocked (ent->stream), F_SETFD, + flags); + } + } } + if (result < 0) { /* Something went wrong. Close the stream and return a diff --git a/libc/nis/nss_compat/compat-initgroups.c b/libc/nis/nss_compat/compat-initgroups.c index 70403a078..fd16475ea 100644 --- a/libc/nis/nss_compat/compat-initgroups.c +++ b/libc/nis/nss_compat/compat-initgroups.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1998-2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1998-2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998. @@ -30,6 +30,7 @@ #include <sys/param.h> #include <nsswitch.h> #include <bits/libc-lock.h> +#include <kernel-features.h> static service_user *ni; /* Type of the lookup function. */ @@ -74,6 +75,19 @@ struct ent_t typedef struct ent_t ent_t; +/* Positive if O_CLOEXEC is supported, negative if it is not supported, + zero if it is still undecided. This variable is shared with the + other compat functions. */ +#ifdef __ASSUME_O_CLOEXEC +# define __compat_have_cloexec 1 +#else +# ifdef O_CLOEXEC +extern int __compat_have_cloexec; +# else +# define __compat_have_cloexec -1 +# endif +#endif + /* Prototypes for local functions. */ static void blacklist_store_name (const char *, ent_t *); static int in_blacklist (const char *, int, ent_t *); @@ -117,21 +131,35 @@ internal_setgrent (ent_t *ent) else ent->blacklist.current = 0; - ent->stream = fopen ("/etc/group", "rm"); + ent->stream = fopen ("/etc/group", "rme"); if (ent->stream == NULL) status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; else { /* We have to make sure the file is `closed on exec'. */ - int result, flags; + int result = 0; - result = flags = fcntl (fileno_unlocked (ent->stream), F_GETFD, 0); - if (result >= 0) + if (__compat_have_cloexec <= 0) { - flags |= FD_CLOEXEC; - result = fcntl (fileno_unlocked (ent->stream), F_SETFD, flags); + int flags; + result = flags = fcntl (fileno_unlocked (ent->stream), F_GETFD, 0); + if (result >= 0) + { +#if defined O_CLOEXEC && !defined __ASSUME_O_CLOEXEC + if (__compat_have_cloexec == 0) + __compat_have_cloexec = (flags & FD_CLOEXEC) ? 1 : -1; + + if (__compat_have_cloexec < 0) +#endif + { + flags |= FD_CLOEXEC; + result = fcntl (fileno_unlocked (ent->stream), F_SETFD, + flags); + } + } } + if (result < 0) { /* Something went wrong. Close the stream and return a diff --git a/libc/nis/nss_compat/compat-pwd.c b/libc/nis/nss_compat/compat-pwd.c index ac132046d..df8f91eea 100644 --- a/libc/nis/nss_compat/compat-pwd.c +++ b/libc/nis/nss_compat/compat-pwd.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996-1999,2001-2005,2006 Free Software Foundation, Inc. +/* Copyright (C) 1996-1999, 2001-2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996. @@ -29,6 +29,7 @@ #include <rpc/types.h> #include <rpcsvc/ypclnt.h> #include <bits/libc-lock.h> +#include <kernel-features.h> #include "netgroup.h" @@ -80,6 +81,19 @@ static ent_t ext_ent = { false, false, true, NSS_STATUS_SUCCESS, NULL, /* Protect global state against multiple changers. */ __libc_lock_define_initialized (static, lock) +/* Positive if O_CLOEXEC is supported, negative if it is not supported, + zero if it is still undecided. This variable is shared with the + other compat functions. */ +#ifdef __ASSUME_O_CLOEXEC +# define __compat_have_cloexec 1 +#else +# ifdef O_CLOEXEC +extern int __compat_have_cloexec; +# else +# define __compat_have_cloexec -1 +# endif +#endif + /* Prototypes for local functions. */ static void blacklist_store_name (const char *, ent_t *); static int in_blacklist (const char *, int, ent_t *); @@ -227,21 +241,36 @@ internal_setpwent (ent_t *ent, int stayopen, int needent) if (ent->stream == NULL) { - ent->stream = fopen ("/etc/passwd", "rm"); + ent->stream = fopen ("/etc/passwd", "rme"); if (ent->stream == NULL) status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; else { /* We have to make sure the file is `closed on exec'. */ - int result, flags; + int result = 0; - result = flags = fcntl (fileno_unlocked (ent->stream), F_GETFD, 0); - if (result >= 0) + if (__compat_have_cloexec <= 0) { - flags |= FD_CLOEXEC; - result = fcntl (fileno_unlocked (ent->stream), F_SETFD, flags); + int flags; + result = flags = fcntl (fileno_unlocked (ent->stream), F_GETFD, + 0); + if (result >= 0) + { +#if defined O_CLOEXEC && !defined __ASSUME_O_CLOEXEC + if (__compat_have_cloexec == 0) + __compat_have_cloexec = (flags & FD_CLOEXEC) ? 1 : -1; + + if (__compat_have_cloexec < 0) +#endif + { + flags |= FD_CLOEXEC; + result = fcntl (fileno_unlocked (ent->stream), F_SETFD, + flags); + } + } } + if (result < 0) { /* Something went wrong. Close the stream and return a diff --git a/libc/nis/nss_compat/compat-spwd.c b/libc/nis/nss_compat/compat-spwd.c index d1de3f75b..a5977681f 100644 --- a/libc/nis/nss_compat/compat-spwd.c +++ b/libc/nis/nss_compat/compat-spwd.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996-1999,2001-2005,2006 Free Software Foundation, Inc. +/* Copyright (C) 1996-1999, 2001-2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996. @@ -29,6 +29,7 @@ #include <rpc/types.h> #include <rpcsvc/ypclnt.h> #include <bits/libc-lock.h> +#include <kernel-features.h> #include "netgroup.h" @@ -77,6 +78,19 @@ static ent_t ext_ent = { false, true, false, NSS_STATUS_SUCCESS, NULL, /* Protect global state against multiple changers. */ __libc_lock_define_initialized (static, lock) +/* Positive if O_CLOEXEC is supported, negative if it is not supported, + zero if it is still undecided. This variable is shared with the + other compat functions. */ +#ifdef __ASSUME_O_CLOEXEC +# define __compat_have_cloexec 1 +#else +# ifdef O_CLOEXEC +extern int __compat_have_cloexec; +# else +# define __compat_have_cloexec -1 +# endif +#endif + /* Prototypes for local functions. */ static void blacklist_store_name (const char *, ent_t *); static int in_blacklist (const char *, int, ent_t *); @@ -180,21 +194,36 @@ internal_setspent (ent_t *ent, int stayopen) if (ent->stream == NULL) { - ent->stream = fopen ("/etc/shadow", "rm"); + ent->stream = fopen ("/etc/shadow", "rme"); if (ent->stream == NULL) status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; else { /* We have to make sure the file is `closed on exec'. */ - int result, flags; + int result = 0; - result = flags = fcntl (fileno_unlocked (ent->stream), F_GETFD, 0); - if (result >= 0) + if (__compat_have_cloexec <= 0) { - flags |= FD_CLOEXEC; - result = fcntl (fileno_unlocked (ent->stream), F_SETFD, flags); + int flags; + result = flags = fcntl (fileno_unlocked (ent->stream), F_GETFD, + 0); + if (result >= 0) + { +#if defined O_CLOEXEC && !defined __ASSUME_O_CLOEXEC + if (__compat_have_cloexec == 0) + __compat_have_cloexec = (flags & FD_CLOEXEC) ? 1 : -1; + + if (__compat_have_cloexec < 0) +#endif + { + flags |= FD_CLOEXEC; + result = fcntl (fileno_unlocked (ent->stream), F_SETFD, + flags); + } + } } + if (result < 0) { /* Something went wrong. Close the stream and return a diff --git a/libc/nis/nss_nis/nis-hosts.c b/libc/nis/nss_nis/nis-hosts.c index bde0a3291..7bf4af786 100644 --- a/libc/nis/nss_nis/nis-hosts.c +++ b/libc/nis/nss_nis/nis-hosts.c @@ -88,7 +88,7 @@ LINE_PARSER return 0; /* Store a pointer to the address in the expected form. */ - entdata->h_addr_ptrs[0] = entdata->host_addr; + entdata->h_addr_ptrs[0] = (char *) entdata->host_addr; entdata->h_addr_ptrs[1] = NULL; result->h_addr_list = entdata->h_addr_ptrs; diff --git a/libc/nis/yp_xdr.c b/libc/nis/yp_xdr.c index b87ee0615..bdd5d8725 100644 --- a/libc/nis/yp_xdr.c +++ b/libc/nis/yp_xdr.c @@ -195,8 +195,9 @@ xdr_ypmaplist (XDR *xdrs, ypmaplist *objp) { if (!xdr_mapname (xdrs, &objp->map)) return FALSE; - return xdr_pointer (xdrs, (char **) &objp->next, sizeof (ypmaplist), - (xdrproc_t) xdr_ypmaplist); + /* Prevent gcc warning about alias violation. */ + char **tp = (void *) &objp->next; + return xdr_pointer (xdrs, tp, sizeof (ypmaplist), (xdrproc_t) xdr_ypmaplist); } libnsl_hidden_def (xdr_ypmaplist) @@ -205,8 +206,9 @@ xdr_ypresp_maplist (XDR *xdrs, ypresp_maplist *objp) { if (!xdr_ypstat (xdrs, &objp->stat)) return FALSE; - return xdr_pointer (xdrs, (char **) &objp->maps, sizeof (ypmaplist), - (xdrproc_t) xdr_ypmaplist); + /* Prevent gcc warning about alias violation. */ + char **tp = (void *) &objp->maps; + return xdr_pointer (xdrs, tp, sizeof (ypmaplist), (xdrproc_t) xdr_ypmaplist); } libnsl_hidden_def (xdr_ypresp_maplist) diff --git a/libc/nptl/ChangeLog b/libc/nptl/ChangeLog index 09a05c1fb..5d11b6ab7 100644 --- a/libc/nptl/ChangeLog +++ b/libc/nptl/ChangeLog @@ -1,3 +1,1185 @@ +2007-09-02 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S + (__pthread_cond_wait): Fix unlocking of internal lock after mutex + unlocking failed. + Patch by Luca Barbieri <luca.barbieri@gmail.com>. + +2007-08-21 Ulrich Drepper <drepper@redhat.com> + + [BZ #4938] + * allocatestack.c (__reclaim_stacks): Clear the TSD in the + reclaimed stack if necessary. + * Makefile (tests): Add tst-tsd6. + * tst-tsd6.c: New file. + +2007-08-21 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/alpha/lowlevellock.h (lll_robust_dead): + Add private argument. + +2007-08-20 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S + (__pthread_cond_timedwait): Use clock_gettime from VDSO if possible. + +2007-08-16 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/alpha/lowlevellock.h + (__lll_robust_timedlock): Pass private as last argument to + __lll_robust_timedlock_wait. + (__lll_unlock): Fix a pasto. + +2007-08-15 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/sparc/internaltypes.h (sparc_new_sem, + sparc_old_sem): New structs. + * sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c + (__sem_wait_cleanup): New function. + (__new_sem_wait): Use sparc_new_sem structure. Bump and afterwards + decrease nwaiters. Register __sem_wait_cleanup as cleanup handler. + Pass isem->private ^ FUTEX_PRIVATE_FLAG as last argument to + lll_futex_wait. + (__old_sem_wait): New function. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_wait.c: Include + nptl/sysdeps/unix/sysv/linux/sparc version. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_timedwait.c: + Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_post.c: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c + (__new_sem_trywait): Use sparc_old_sem structure. + * sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c + (sem_timedwait): Use sparc_new_sem structure. Bump and afterwards + decrease nwaiters. Register __sem_wait_cleanup as cleanup handler. + Pass isem->private ^ FUTEX_PRIVATE_FLAG as last argument to + lll_futex_timed_wait. + * sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c (__new_sem_post): + Use sparc_new_sem structure. Only wake if nwaiters > 0. Pass + isem->private ^ FUTEX_PRIVATE_FLAG as last argument to + lll_futex_wake. + (__old_sem_post): New function. + * sysdeps/unix/sysv/linux/sparc/sem_wait.c: New file. + * sysdeps/unix/sysv/linux/sparc/sem_init.c: New file. + * sysdeps/unix/sysv/linux/sparc/sem_timedwait.c: New file. + * sysdeps/unix/sysv/linux/sparc/sem_post.c: New file. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_init.c: Remove. + * sysdeps/unix/sysv/linux/sparc/sparc32/sem_init.c: Remove. + +2007-08-14 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S + (__pthread_cond_broadcast): Pass LLL_PRIVATE to lll_* and or + FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. + Don't use FUTEX_CMP_REQUEUE if dep_mutex is not process private. + * sysdeps/unix/sysv/linux/shpthread_cond_signal.S + (__pthread_cond_signal): Pass LLL_PRIVATE to lll_* and or + FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. + Use FUTEX_WAKE_OP. + * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S: Include + kernel-features.h and tcb-offsets.h. + (__pthread_cond_wait, __condvar_w_cleanup): Pass LLL_PRIVATE to + lll_* and or FUTEX_PRIVATE_FLAG into SYS_futex op if cv is + process private. + * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Include + tcb-offsets.h. + (__pthread_cond_timedwait, __condvar_tw_cleanup): Pass LLL_PRIVATE + to lll_* and or FUTEX_PRIVATE_FLAG into SYS_futex op if cv is + process private. + * sysdeps/unix/sysv/linux/sh/pthread_once.S: Use #ifdef + __ASSUME_PRIVATE_FUTEX instead of #if __ASSUME_PRIVATE_FUTEX. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S: Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S: Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S: Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S: Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S: Likewise. + +2007-08-14 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/lowlevellock.c: Comment fix. + * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c + (__lll_timedwait_tid): Pass LLL_SHARED as 4th argument to + lll_futex_timed_wait. + + * sysdeps/unix/sysv/linux/alpha/lowlevellock.h (__lll_unlock, + __lll_robust_unlock): Rewrite as macros instead of inline functions. + * sysdeps/unix/sysv/linux/s390/lowlevellock.h (__lll_unlock, + __lll_robust_unlock, __lll_wait_tid): Likewise. + +2007-08-13 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/i386/lowlevellock.h (__lll_private_flag): + Fix a pasto. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S + (__pthread_cond_broadcast): Pass LLL_PRIVATE to lll_* and or + FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. + Don't use FUTEX_CMP_REQUEUE if dep_mutex is not process private. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S + (__pthread_cond_signal): Pass LLL_PRIVATE to lll_* and or + FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Include + kernel-features.h. + (__pthread_cond_wait, __condvar_w_cleanup): Pass LLL_PRIVATE to + lll_* and or FUTEX_PRIVATE_FLAG into SYS_futex op if cv is + process private. Switch DW_CFA_advance_loc1 and some + DW_CFA_advance_loc .eh_frame opcodes to DW_CFA_advance_loc4. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S + (__pthread_cond_timedwait, __condvar_tw_cleanup): Pass LLL_PRIVATE to + lll_* and or FUTEX_PRIVATE_FLAG into SYS_futex op if cv is + process private. Switch DW_CFA_advance_loc{1,2} and some + DW_CFA_advance_loc .eh_frame opcodes to DW_CFA_advance_loc4. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Use + #ifdef __ASSUME_PRIVATE_FUTEX instead of #if __ASSUME_PRIVATE_FUTEX. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: + Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: + Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S + (__pthread_cond_broadcast): Compare %r8 instead of + dep_mutex-cond_*(%rdi) with $-1. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S + (__pthread_cond_signal): Xor FUTEX_WAKE_OP with FUTEX_WAKE instead + of oring. + +2007-08-13 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/i386/i786/Implies: New file. + +2007-08-13 Jakub Jelinek <jakub@redhat.com> + + * allocatestack.c: Include kernel-features.h. + * pthread_create.c: Likewise. + * pthread_mutex_init.c: Likewise. + * init.c: Likewise. + * pthread_cond_timedwait.c: Likewise. + * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: + Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: + Likewise. + * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Likewise. + +2007-08-12 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h + [__WORDSIZE=32] (pthread_rwlock_t): Split __flags element into four + byte elements. One of them is the new __shared element. + [__WORDSIZE=64] (pthread_rwlock_t): Renamed __pad1 element to __shared, + adjust names of other padding elements. + * sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h + [__WORDSIZE=32] (pthread_rwlock_t): Split __flags element into four + byte elements. One of them is the new __shared element. + [__WORDSIZE=64] (pthread_rwlock_t): Renamed __pad1 element to __shared, + adjust names of other padding elements. + * sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h (pthread_rwlock_t): + Renamed __pad1 element to __shared, adjust names of other padding + elements. + * sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h + (pthread_rwlock_t): Likewise. + * sysdeps/unix/sysv/linux/ia64/lowlevellock.h (__lll_lock): Fix a + typo. + +2007-08-09 Anton Blanchard <anton@samba.org> + + * sysdeps/unix/sysv/linux/powerpc/pthread_spin_unlock.c: New file. + +2007-08-12 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Include + <kernel-features.h>. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise. + +2007-08-11 Ulrich Drepper <drepper@redhat.com> + + * pthreadP.h (PTHREAD_ROBUST_MUTEX_PSHARED): Define. + * pthread_mutex_lock.c: Use it instead of PTHREAD_MUTEX_PSHARED when + dealing with robust mutexes. + * pthread_mutex_timedlock.c: Likewise. + * pthread_mutex_trylock.c: Likewise. + * pthread_mutex_unlock.c: Likewise. + * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c: Likewise. + +2007-08-06 Jakub Jelinek <jakub@redhat.com> + + * pthreadP.h (PTHREAD_MUTEX_PSHARED_BIT): Define. + (PTHREAD_MUTEX_TYPE): Mask __kind with 127. + (PTHREAD_MUTEX_PSHARED): Define. + * pthread_mutex_init.c (__pthread_mutex_init): Set + PTHREAD_MUTEX_PSHARED_BIT for pshared or robust + mutexes. + * pthread_mutex_lock.c (LLL_MUTEX_LOCK): Take mutex as argument + instead of its __data.__lock field, pass PTHREAD_MUTEX_PSHARED + as second argument to lll_lock. + (LLL_MUTEX_TRYLOCK): Take mutex as argument + instead of its __data.__lock field. + (LLL_ROBUST_MUTEX_LOCK): Take mutex as argument instead of its + __data.__lock field, pass PTHREAD_MUTEX_PSHARED as second argument + to lll_robust_lock. + (__pthread_mutex_lock): Update LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, + LLL_ROBUST_MUTEX_LOCK users, use PTHREAD_MUTEX_TYPE (mutex) + instead of mutex->__data.__kind directly, pass + PTHREAD_MUTEX_PSHARED (mutex) to lll_unlock and lll_futex_wait. + * pthread_mutex_trylock.c (__pthread_mutex_trylock): Use + PTHREAD_MUTEX_TYPE (mutex) instead of mutex->__data.__kind + directly, pass PTHREAD_MUTEX_PSHARED (mutex) to lll_unlock. + (pthread_mutex_timedlock): Pass PTHREAD_MUTEX_PSHARED (mutex) + to lll_timedlock, lll_robust_timedlock, lll_unlock and + lll_futex_timed_wait. Use PTHREAD_MUTEX_TYPE (mutex) instead + of mutex->__data.__kind directly. + * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Pass + PTHREAD_MUTEX_PSHARED (mutex) to lll_timedlock, + lll_robust_timedlock, lll_unlock and lll_futex_timed_wait. Use + PTHREAD_MUTEX_TYPE (mutex) instead of mutex->__data.__kind directly. + * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): Pass + PTHREAD_MUTEX_PSHARED (mutex) to lll_unlock, lll_robust_unlock + and lll_futex_wake. + * pthread_mutex_setprioceiling.c (pthread_mutex_setprioceiling): Pass + PTHREAD_MUTEX_PSHARED (mutex) to lll_futex_wait and lll_futex_wake. + Use PTHREAD_MUTEX_TYPE (mutex) instead of mutex->__data.__kind + directly. + * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK): + Take mutex as argument instead of its __data.__lock field, pass + PTHREAD_MUTEX_PSHARED as second argument to lll_cond_lock. + (LLL_MUTEX_TRYLOCK): Take mutex as argument instead of its + __data.__lock field. + (LLL_ROBUST_MUTEX_LOCK): Take mutex as argument instead of its + __data.__lock field, pass PTHREAD_MUTEX_PSHARED as second argument + to lll_robust_cond_lock. + * pthread_cond_broadcast.c (__pthread_cond_broadcast): Add pshared + variable, pass it to lll_lock, lll_unlock, lll_futex_requeue and + lll_futex_wake. Don't use lll_futex_requeue if dependent mutex + has PTHREAD_MUTEX_PSHARED_BIT bit set in its __data.__kind. + * pthread_cond_destroy.c (__pthread_cond_destroy): Add pshared + variable, pass it to lll_lock, lll_unlock, lll_futex_wake and + lll_futex_wait. + * pthread_cond_signal.c (__pthread_cond_signal): Add pshared + variable, pass it to lll_lock, lll_unlock, lll_futex_wake_unlock and + lll_futex_wake. + * pthread_cond_timedwait.c (__pthread_cond_wait): Add + pshared variable, pass it to lll_lock, lll_unlock, + lll_futex_timedwait and lll_futex_wake. + * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): Add + pshared variable, pass it to lll_lock, lll_unlock, lll_futex_wait + and lll_futex_wake. + * sysdeps/unix/sysv/linux/alpha/lowlevellock.h (lll_futex_requeue, + lll_futex_wake_unlock): Add private argument, use __lll_private_flag + macro. + * sysdeps/unix/sysv/linux/ia64/lowlevellock.h (lll_futex_requeue, + lll_futex_wake_unlock): Likewise. + * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h (lll_futex_requeue): + Likewise. + * sysdeps/unix/sysv/linux/sparc/lowlevellock.h (lll_futex_requeue, + lll_futex_wake_unlock): Likewise. + * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (lll_futex_requeue): + Likewise. + * sysdeps/unix/sysv/linux/s390/lowlevellock.h (lll_futex_requeue, + lll_futex_wake_unlock): Likewise. + (lll_futex_wake): Fix a typo. + * sysdeps/unix/sysv/linux/pthread-pi-defines.sym (PS_BIT): Add. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S + (__pthread_cond_broadcast): Pass LLL_PRIVATE to lll_* and or + FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. + Don't use FUTEX_CMP_REQUEUE if dep_mutex is not process private. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S + (__pthread_cond_signal): Pass LLL_PRIVATE to lll_* and or + FUTEX_PRIVATE_FLAG into SYS_futex op if cv is process private. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S + (__pthread_cond_timedwait): Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: + (__condvar_cleanup, __pthread_cond_wait): Likewise. + +2007-08-05 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h (PSEUDO): + Don't use CGOTSETUP and CGOTRESTORE macros. + (CGOTSETUP, CGOTRESTORE): Remove. + <IS_IN_rtld> (CENABLE, CDISABLE): Don't use JUMPTARGET, branch to + @local symbol. + +2007-08-01 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S: Remove + definitions for private futexes. + * sysdeps/unix/sysv/linux/sh/lowlevellock.S: Include + kernel-features.h and lowlevellock.h. Use private futexes if + they are available. + (__lll_lock_wait_private, __lll_unlock_wake_private): New. + (__lll_mutex_lock_wait): Rename to + (__lll_lock_wait): ... this. Don't compile in for libc.so. + (__lll_mutex_timedlock_wait): Rename to ... + (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. + Don't compile in for libc.so. + (__lll_mutex_unlock_wake): Rename to ... + (__lll_unlock_wake): ... this. Don't compile in for libc.so. + (__lll_timedwait_tid): Use __NR_gettimeofday. + * sysdeps/unix/sysv/linux/sh/lowlevellock.h: Allow including + the header from assembler. Renamed all lll_mutex_* resp. + lll_robust_mutex_* macros to lll_* resp. lll_robust_*. + Renamed all LLL_MUTEX_LOCK_* macros to LLL_LOCK_*. + (FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): + Define. + (__lll_lock_wait_private): Add prototype. + (__lll_lock_wait, __lll_timedlock_wait, __lll_robust_lock_wait, + __lll_robust_timedlock_wait, __lll_unlock_wake_private, + __lll_unlock_wake): Likewise. + (lll_lock): Add private argument. Call __lll_lock_wait_private + if private is constant LLL_PRIVATE. + (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, + lll_timedlock, lll_robust_timedlock): Add private argument. + (lll_unlock): Add private argument. Call __lll_unlock_wake_private + if private is constant LLL_PRIVATE. + (lll_robust_unlock, lll_robust_dead): Add private argument. + (lll_lock_t): Remove. + (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, + __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, + lll_cond_wake, lll_cond_broadcast): Remove. + * sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S: Include + kernel-features.h and lowlevellock.h. + (SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Remove. + (LOAD_FUTEX_WAIT): Define. + (__lll_robust_mutex_lock_wait): Rename to ... + (__lll_robust_lock_wait): ... this. Add private argument. + Use LOAD_FUTEX_WAIT macro. + (__lll_robust_mutex_timedlock_wait): Rename to ... + (__lll_robust_timedlock_wait): ... this. Add private argument. + Use __NR_gettimeofday. Use LOAD_FUTEX_WAIT macro. + * sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S: Include + lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Remove. + (pthread_barrier_wait): Use __lll_{lock,unlock}_* instead of + __lll_mutex_{lock,unlock}_*. + * sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S: Include + lowlevellock.h and pthread-errnos.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, + FUTEX_CMP_REQUEUE, EINVAL): Remove. + (__pthread_cond_broadcast): Use __lll_{lock,unlock}_* instead of + __lll_mutex_{lock,unlock}_*. + * sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S: Include + lowlevellock.h and pthread-errnos.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, EINVAL): Remove. + (__pthread_cond_signal): Use __lll_{lock,unlock}_* instead of + __lll_mutex_{lock,unlock}_*. + * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Include + lowlevellock.h. + (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE): Remove. + (__pthread_cond_timedwait): Use __lll_{lock,unlock}_* instead of + __lll_mutex_{lock,unlock}_*. Use __NR_gettimeofday. + (__condvar_tw_cleanup): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S: Include + lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Remove. + (__pthread_cond_wait): Use __lll_{lock,unlock}_* instead of + __lll_mutex_{lock,unlock}_*. + ( __condvar_w_cleanup): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_once.S: Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Remove. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S: Include + lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Remove. + (__pthread_rwlock_rdlock): Use __lll_{lock,unlock}_* instead of + __lll_mutex_{lock,unlock}_*. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S: Include + lowlevellock.h. + (SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, + FUTEX_PRIVATE_FLAG): Remove. + (pthread_rwlock_timedrdlock): Use __lll_{lock,unlock}_* instead of + __lll_mutex_{lock,unlock}_*. Use __NR_gettimeofday. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S: Include + lowlevellock.h. + (SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, + FUTEX_PRIVATE_FLAG): Remove. + (pthread_rwlock_timedwrlock): Use __lll_{lock,unlock}_* instead of + __lll_mutex_{lock,unlock}_*. Use __NR_gettimeofday. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S: Include + lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Remove. + (__pthread_rwlock_unlock): Use __lll_{lock,unlock}_* instead of + __lll_mutex_{lock,unlock}_*. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S: Include + lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Remove. + (__pthread_rwlock_wrlock): Use __lll_{lock,unlock}_* instead of + __lll_mutex_{lock,unlock}_*. + * sysdeps/unix/sysv/linux/sh/sem_post.S: Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Remove. + (__new_sem_post): Use standard initial exec code sequences. + * sysdeps/unix/sysv/linux/sh/sem_timedwait.S: Include + lowlevellock.h. + (SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, + FUTEX_PRIVATE_FLAG): Remove. + (sem_timedwait): Use __NR_gettimeofday. Use standard initial + exec code sequences. + * sysdeps/unix/sysv/linux/sh/sem_trywait.S: Include lowlevellock.h. + (__new_sem_trywait): Use standard initial exec code sequences. + * sysdeps/unix/sysv/linux/sh/sem_wait.S: Include lowlevellock.h. + (__new_sem_wait): Use standard initial exec code sequences. + +2007-07-31 Anton Blanchard <anton@samba.org> + + * sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): + Use __asm __volatile (__lll_acq_instr ::: "memory") instead of + atomic_full_barrier. + +2007-07-31 Jakub Jelinek <jakub@redhat.com> + + * allocatestack.c (stack_cache_lock): Change type to int. + (get_cached_stack, allocate_stack, __deallocate_stack, + __make_stacks_executable, __find_thread_by_id, __nptl_setxid, + __pthread_init_static_tls, __wait_lookup_done): Add LLL_PRIVATE + as second argument to lll_lock and lll_unlock macros on + stack_cache_lock. + * pthread_create.c (__find_in_stack_list): Likewise. + (start_thread): Similarly with pd->lock. Use lll_robust_dead + macro instead of lll_robust_mutex_dead, pass LLL_SHARED to it + as second argument. + * descr.h (struct pthread): Change lock and setxid_futex field + type to int. + * old_pthread_cond_broadcast.c (__pthread_cond_broadcast_2_0): Use + LLL_LOCK_INITIALIZER instead of LLL_MUTEX_LOCK_INITIALIZER. + * old_pthread_cond_signal.c (__pthread_cond_signal_2_0): Likewise. + * old_pthread_cond_timedwait.c (__pthread_cond_timedwait_2_0): + Likewise. + * old_pthread_cond_wait.c (__pthread_cond_wait_2_0): Likewise. + * pthread_cond_init.c (__pthread_cond_init): Likewise. + * pthreadP.h (__attr_list_lock): Change type to int. + * pthread_attr_init.c (__attr_list_lock): Likewise. + * pthread_barrier_destroy.c (pthread_barrier_destroy): Pass + ibarrier->private ^ FUTEX_PRIVATE_FLAG as second argument to + lll_{,un}lock. + * pthread_barrier_wait.c (pthread_barrier_wait): Likewise and + also for lll_futex_{wake,wait}. + * pthread_barrier_init.c (pthread_barrier_init): Make iattr + a pointer to const. + * pthread_cond_broadcast.c (__pthread_cond_broadcast): Pass + LLL_SHARED as second argument to lll_{,un}lock. + * pthread_cond_destroy.c (__pthread_cond_destroy): Likewise. + * pthread_cond_signal.c (__pthread_cond_singal): Likewise. + * pthread_cond_timedwait.c (__pthread_cond_timedwait): Likewise. + * pthread_cond_wait.c (__condvar_cleanup, __pthread_cond_wait): + Likewise. + * pthread_getattr_np.c (pthread_getattr_np): Add LLL_PRIVATE + as second argument to lll_{,un}lock macros on pd->lock. + * pthread_getschedparam.c (__pthread_getschedparam): Likewise. + * pthread_setschedparam.c (__pthread_setschedparam): Likewise. + * pthread_setschedprio.c (pthread_setschedprio): Likewise. + * tpp.c (__pthread_tpp_change_priority, __pthread_current_priority): + Likewise. + * sysdeps/pthread/createthread.c (do_clone, create_thread): + Likewise. + * pthread_once.c (once_lock): Change type to int. + (__pthread_once): Pass LLL_PRIVATE as second argument to + lll_{,un}lock macros on once_lock. + * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Use + lll_{,un}lock macros instead of lll_mutex_{,un}lock, pass + rwlock->__data.__shared as second argument to them and similarly + for lll_futex_w*. + * pthread_rwlock_timedrdlock.c (pthread_rwlock_timedrdlock): + Likewise. + * pthread_rwlock_timedwrlock.c (pthread_rwlock_timedwrlock): + Likewise. + * pthread_rwlock_tryrdlock.c (__pthread_rwlock_tryrdlock): Likewise. + * pthread_rwlock_trywrlock.c (__pthread_rwlock_trywrlock): Likewise. + * pthread_rwlock_unlock.c (__pthread_rwlock_unlock): Likewise. + * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. + * sem_close.c (sem_close): Pass LLL_PRIVATE as second argument + to lll_{,un}lock macros on __sem_mappings_lock. + * sem_open.c (check_add_mapping): Likewise. + (__sem_mappings_lock): Change type to int. + * semaphoreP.h (__sem_mappings_lock): Likewise. + * pthread_mutex_lock.c (LLL_MUTEX_LOCK, LLL_MUTEX_TRYLOCK, + LLL_ROBUST_MUTEX_LOCK): Use lll_{,try,robust_}lock macros + instead of lll_*mutex_*, pass LLL_SHARED as last + argument. + (__pthread_mutex_lock): Use lll_unlock instead of lll_mutex_unlock, + pass LLL_SHARED as last argument. + * sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c (LLL_MUTEX_LOCK, + LLL_MUTEX_TRYLOCK, LLL_ROBUST_MUTEX_LOCK): Use + lll_{cond_,cond_try,robust_cond}lock macros instead of lll_*mutex_*, + pass LLL_SHARED as last argument. + * pthread_mutex_timedlock.c (pthread_mutex_timedlock): Use + lll_{timed,try,robust_timed,un}lock instead of lll_*mutex*, pass + LLL_SHARED as last argument. + * pthread_mutex_trylock.c (__pthread_mutex_trylock): Similarly. + * pthread_mutex_unlock.c (__pthread_mutex_unlock_usercnt): + Similarly. + * sysdeps/pthread/bits/libc-lock.h (__libc_lock_lock, + __libc_lock_lock_recursive, __libc_lock_unlock, + __libc_lock_unlock_recursive): Pass LLL_PRIVATE as second + argument to lll_{,un}lock. + * sysdeps/pthread/bits/stdio-lock.h (_IO_lock_lock, + _IO_lock_unlock): Likewise. + * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Don't use + compound literal. + * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): + Pass LLL_PRIVATE as second argument to lll_{,un}lock macros on + __fork_lock. + * sysdeps/unix/sysv/linux/register-atfork.c (__register_atfork, + free_mem): Likewise. + (__fork_lock): Change type to int. + * sysdeps/unix/sysv/linux/fork.h (__fork_lock): Likewise. + * sysdeps/unix/sysv/linux/sem_post.c (__new_sem_post): Pass + isem->private ^ FUTEX_PRIVATE_FLAG as second argument to + lll_futex_wake. + * sysdeps/unix/sysv/linux/sem_timedwait.c (sem_timedwait): Likewise. + * sysdeps/unix/sysv/linux/sem_wait.c (__new_sem_wait): Likewise. + * sysdeps/unix/sysv/linux/lowlevellock.c (__lll_lock_wait_private): + New function. + (__lll_lock_wait, __lll_timedlock_wait): Add private argument and + pass it through to lll_futex_*wait, only compile in when + IS_IN_libpthread. + * sysdeps/unix/sysv/linux/lowlevelrobustlock.c + (__lll_robust_lock_wait, __lll_robust_timedlock_wait): Add private + argument and pass it through to lll_futex_*wait. + * sysdeps/unix/sysv/linux/alpha/lowlevellock.h: Renamed all + lll_mutex_* resp. lll_robust_mutex_* macros to lll_* resp. + lll_robust_*. Renamed all __lll_mutex_* resp. __lll_robust_mutex_* + inline functions to __lll_* resp. __lll_robust_*. + (LLL_MUTEX_LOCK_INITIALIZER): Remove. + (lll_mutex_dead): Add private argument. + (__lll_lock_wait_private): New prototype. + (__lll_lock_wait, __lll_robust_lock_wait, __lll_lock_timedwait, + __lll_robust_lock_timedwait): Add private argument to prototypes. + (__lll_lock): Add private argument, if it is constant LLL_PRIVATE, + call __lll_lock_wait_private, otherwise pass private to + __lll_lock_wait. + (__lll_robust_lock, __lll_cond_lock, __lll_timedlock, + __lll_robust_timedlock): Add private argument, pass it to + __lll_*wait functions. + (__lll_unlock): Add private argument, if it is constant LLL_PRIVATE, + call __lll_unlock_wake_private, otherwise pass private to + __lll_unlock_wake. + (__lll_robust_unlock): Add private argument, pass it to + __lll_robust_unlock_wake. + (lll_lock, lll_robust_lock, lll_cond_lock, lll_timedlock, + lll_robust_timedlock, lll_unlock, lll_robust_unlock): Add private + argument, pass it through to __lll_* inline function. + (__lll_mutex_unlock_force, lll_mutex_unlock_force): Remove. + (lll_lock_t): Remove. + (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, + __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, + lll_cond_wake, lll_cond_broadcast): Remove. + * sysdeps/unix/sysv/linux/ia64/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/s390/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/sparc/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Allow including + the header from assembler. Renamed all lll_mutex_* resp. + lll_robust_mutex_* macros to lll_* resp. lll_robust_*. + (LOCK, FUTEX_CMP_REQUEUE, FUTEX_WAKE_OP, + FUTEX_OP_CLEAR_WAKE_IF_GT_ONE): Define. + (LLL_MUTEX_LOCK_INITIALIZER, LLL_MUTEX_LOCK_INITIALIZER_LOCKED, + LLL_MUTEX_LOCK_INITIALIZER_WAITERS): Remove. + (__lll_mutex_lock_wait, __lll_mutex_timedlock_wait, + __lll_mutex_unlock_wake, __lll_lock_wait, __lll_unlock_wake): + Remove prototype. + (__lll_trylock_asm, __lll_lock_asm_start, __lll_unlock_asm): Define. + (lll_robust_trylock, lll_cond_trylock): Use LLL_LOCK_INITIALIZER* + rather than LLL_MUTEX_LOCK_INITIALIZER* macros. + (lll_trylock): Likewise, use __lll_trylock_asm, pass + MULTIPLE_THREADS_OFFSET as another asm operand. + (lll_lock): Add private argument, use __lll_lock_asm_start, pass + MULTIPLE_THREADS_OFFSET as last asm operand, call + __lll_lock_wait_private if private is constant LLL_PRIVATE, + otherwise pass private as another argument to __lll_lock_wait. + (lll_robust_lock, lll_cond_lock, lll_robust_cond_lock, + lll_timedlock, lll_robust_timedlock): Add private argument, pass + private as another argument to __lll_*lock_wait call. + (lll_unlock): Add private argument, use __lll_unlock_asm, pass + MULTIPLE_THREADS_OFFSET as another asm operand, call + __lll_unlock_wake_private if private is constant LLL_PRIVATE, + otherwise pass private as another argument to __lll_unlock_wake. + (lll_robust_unlock): Add private argument, pass private as another + argument to __lll_unlock_wake. + (lll_robust_dead): Add private argument, use __lll_private_flag + macro. + (lll_islocked): Use LLL_LOCK_INITIALIZER instead of + LLL_MUTEX_LOCK_INITIALIZER. + (lll_lock_t): Remove. + (LLL_LOCK_INITIALIZER_WAITERS): Define. + (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, + __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, + lll_cond_wake, lll_cond_broadcast): Remove. + * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise. + * sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S: Revert + 2007-05-2{3,9} changes. + * sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S: Include + kernel-features.h and lowlevellock.h. + (LOAD_PRIVATE_FUTEX_WAIT): Define. + (LOAD_FUTEX_WAIT): Rewritten. + (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't + define. + (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. + (__lll_mutex_lock_wait): Rename to ... + (__lll_lock_wait): ... this. Take futex addr from %edx instead of + %ecx, %ecx is now private argument. Don't compile in for libc.so. + (__lll_mutex_timedlock_wait): Rename to ... + (__lll_timedlock_wait): ... this. Use __NR_gettimeofday. %esi + contains private argument. Don't compile in for libc.so. + (__lll_mutex_unlock_wake): Rename to ... + (__lll_unlock_wake): ... this. %ecx contains private argument. + Don't compile in for libc.so. + (__lll_timedwait_tid): Use __NR_gettimeofday. + * sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S: Include + kernel-features.h and lowlevellock.h. + (LOAD_FUTEX_WAIT): Define. + (LOCK, SYS_gettimeofday, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't + define. + (__lll_robust_mutex_lock_wait): Rename to ... + (__lll_robust_lock_wait): ... this. Futex addr is now in %edx + argument, %ecx argument contains private. Use LOAD_FUTEX_WAIT + macro. + (__lll_robust_mutex_timedlock_wait): Rename to ... + (__lll_robust_timedlock_wait): ... this. Use __NR_gettimeofday. + %esi argument contains private, use LOAD_FUTEX_WAIT macro. + * sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Include + lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. + (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass + PRIVATE(%ebx) ^ LLL_SHARED as private argument in %ecx to + __lll_lock_wait and __lll_unlock_wake, pass MUTEX(%ebx) address + to __lll_lock_wait in %edx. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: + Include lowlevellock.h and pthread-errnos.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, + FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. + (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, pass + cond_lock address in %edx rather than %ecx to __lll_lock_wait, + pass LLL_SHARED in %ecx to both __lll_lock_wait and + __lll_unlock_wake. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: + Include lowlevellock.h and pthread-errnos.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, + FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. + (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, pass + cond_lock address in %edx rather than %ecx to __lll_lock_wait, + pass LLL_SHARED in %ecx to both __lll_lock_wait and + __lll_unlock_wake. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: + Include lowlevellock.h. + (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): + Don't define. + (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, pass + cond_lock address in %edx rather than %ecx to __lll_lock_wait, + pass LLL_SHARED in %ecx to both __lll_lock_wait and + __lll_unlock_wake. Use __NR_gettimeofday. + * sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. + (__pthread_cond_wait, __condvar_w_cleanup): Rename __lll_mutex_* + to __lll_*, pass cond_lock address in %edx rather than %ecx to + __lll_lock_wait, pass LLL_SHARED in %ecx to both __lll_lock_wait + and __lll_unlock_wake. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. + (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, pass + MUTEX(%ebx) address in %edx rather than %ecx to + __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait + and __lll_unlock_wake. Move return value from %ecx to %edx + register. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: + Include lowlevellock.h. + (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): + Don't define. + (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass + MUTEX(%ebp) address in %edx rather than %ecx to + __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait + and __lll_unlock_wake. Move return value from %ecx to %edx + register. Use __NR_gettimeofday. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: + Include lowlevellock.h. + (SYS_futex, SYS_gettimeofday, FUTEX_WAIT, FUTEX_WAKE, LOCK): + Don't define. + (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass + MUTEX(%ebp) address in %edx rather than %ecx to + __lll_lock_wait, pass PSHARED(%ebp) in %ecx to both __lll_lock_wait + and __lll_unlock_wake. Move return value from %ecx to %edx + register. Use __NR_gettimeofday. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. + (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, pass + MUTEX(%edi) address in %edx rather than %ecx to + __lll_lock_wait, pass PSHARED(%edi) in %ecx to both __lll_lock_wait + and __lll_unlock_wake. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. + (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, pass + MUTEX(%ebx) address in %edx rather than %ecx to + __lll_lock_wait, pass PSHARED(%ebx) in %ecx to both __lll_lock_wait + and __lll_unlock_wake. Move return value from %ecx to %edx + register. + * sysdeps/unix/sysv/linux/i386/pthread_once.S: Include + lowlevellock.h. + (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't + define. + * sysdeps/unix/sysv/linux/i386/i486/sem_post.S: Include lowlevellock.h. + (LOCK, SYS_futex, FUTEX_WAKE): Don't define. + * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S: Include + lowlevellock.h. + (LOCK, SYS_futex, SYS_gettimeofday, FUTEX_WAIT): Don't define. + (sem_timedwait): Use __NR_gettimeofday. + * sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S: Include + lowlevellock.h. + (LOCK): Don't define. + * sysdeps/unix/sysv/linux/i386/i486/sem_wait.S: Include + lowlevellock.h. + (LOCK, SYS_futex, FUTEX_WAIT): Don't define. + * sysdeps/unix/sysv/linux/powerpc/sem_post.c: Wake only when there + are waiters. + * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Revert + 2007-05-2{3,9} changes. + * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Include + kernel-features.h and lowlevellock.h. + (LOAD_PRIVATE_FUTEX_WAIT): Define. + (LOAD_FUTEX_WAIT): Rewritten. + (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. + (__lll_lock_wait_private, __lll_unlock_wake_private): New functions. + (__lll_mutex_lock_wait): Rename to ... + (__lll_lock_wait): ... this. %esi is now private argument. + Don't compile in for libc.so. + (__lll_mutex_timedlock_wait): Rename to ... + (__lll_timedlock_wait): ... this. %esi contains private argument. + Don't compile in for libc.so. + (__lll_mutex_unlock_wake): Rename to ... + (__lll_unlock_wake): ... this. %esi contains private argument. + Don't compile in for libc.so. + * sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S: Include + kernel-features.h and lowlevellock.h. + (LOAD_FUTEX_WAIT): Define. + (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE): Don't define. + (__lll_robust_mutex_lock_wait): Rename to ... + (__lll_robust_lock_wait): ... this. %esi argument contains private. + Use LOAD_FUTEX_WAIT macro. + (__lll_robust_mutex_timedlock_wait): Rename to ... + (__lll_robust_timedlock_wait): ... this. %esi argument contains + private, use LOAD_FUTEX_WAIT macro. + * sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Include + lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. + (pthread_barrier_wait): Rename __lll_mutex_* to __lll_*, pass + PRIVATE(%rdi) ^ LLL_SHARED as private argument in %esi to + __lll_lock_wait and __lll_unlock_wake. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: + Include lowlevellock.h and pthread-errnos.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_REQUEUE, + FUTEX_CMP_REQUEUE, EINVAL, LOCK): Don't define. + (__pthread_cond_broadcast): Rename __lll_mutex_* to __lll_*, + pass LLL_SHARED in %esi to both __lll_lock_wait and + __lll_unlock_wake. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: + Include lowlevellock.h and pthread-errnos.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_WAKE_OP, + FUTEX_OP_CLEAR_WAKE_IF_GT_ONE, EINVAL, LOCK): Don't define. + (__pthread_cond_signal): Rename __lll_mutex_* to __lll_*, + pass LLL_SHARED in %esi to both __lll_lock_wait and + __lll_unlock_wake. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. + (__pthread_cond_timedwait): Rename __lll_mutex_* to __lll_*, + pass LLL_SHARED in %esi to both __lll_lock_wait and + __lll_unlock_wake. + * sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, LOCK): Don't define. + (__pthread_cond_wait, __condvar_cleanup): Rename __lll_mutex_* + to __lll_*, pass LLL_SHARED in %esi to both __lll_lock_wait + and __lll_unlock_wake. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): + Don't define. + (__pthread_rwlock_rdlock): Rename __lll_mutex_* to __lll_*, + pass PSHARED(%rdi) in %esi to both __lll_lock_wait + and __lll_unlock_wake. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): + Don't define. + (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, + pass PSHARED(%rdi) in %esi to both __lll_lock_wait + and __lll_unlock_wake. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): + Don't define. + (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, + pass PSHARED(%rdi) in %esi to both __lll_lock_wait + and __lll_unlock_wake. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): + Don't define. + (__pthread_rwlock_unlock): Rename __lll_mutex_* to __lll_*, + pass PSHARED(%rdi) in %esi to both __lll_lock_wait + and __lll_unlock_wake. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: + Include lowlevellock.h. + (SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG, LOCK): + Don't define. + (__pthread_rwlock_wrlock): Rename __lll_mutex_* to __lll_*, + pass PSHARED(%rdi) in %ecx to both __lll_lock_wait + and __lll_unlock_wake. + * sysdeps/unix/sysv/linux/x86_64/pthread_once.S: Include + lowlevellock.h. + (LOCK, SYS_futex, FUTEX_WAIT, FUTEX_WAKE, FUTEX_PRIVATE_FLAG): Don't + define. + * sysdeps/unix/sysv/linux/x86_64/sem_post.S: Include lowlevellock.h. + (LOCK, SYS_futex, FUTEX_WAKE): Don't define. + * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S: Include + lowlevellock.h. + (LOCK, SYS_futex, FUTEX_WAIT): Don't define. + * sysdeps/unix/sysv/linux/x86_64/sem_trywait.S: Include + lowlevellock.h. + (LOCK): Don't define. + * sysdeps/unix/sysv/linux/x86_64/sem_wait.S: Include + lowlevellock.h. + (LOCK, SYS_futex, FUTEX_WAIT): Don't define. + * sysdeps/unix/sysv/linux/sparc/internaltypes.h: New file. + * sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c: New file. + * sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c: New file. + * sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c: New file. + * sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c + (__lll_lock_wait_private): New function. + (__lll_lock_wait, __lll_timedlock_wait): Add private argument, pass + it to lll_futex_*wait. Don't compile in for libc.so. + * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c: + Remove. + * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c + (struct sparc_pthread_barrier): Remove. + (pthread_barrier_wait): Use union sparc_pthread_barrier instead of + struct sparc_pthread_barrier. Pass + ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE to lll_{,un}lock + and lll_futex_wait macros. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c: + Remove. + * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c: + Include sparc pthread_barrier_wait.c instead of generic one. + +2007-07-30 Jakub Jelinek <jakub@redhat.com> + + * tst-rwlock14.c (do_test): Avoid warnings on 32-bit arches. + + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S + (pthread_rwlock_timedrdlock): Copy futex retval to %esi rather than + %ecx. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S + (pthread_rwlock_timedwrlock): Likewise. + * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S + (__pthread_rwlock_unlock): Fix MUTEX != 0 args to __lll_*. + +2007-07-31 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/sparc/tls.h (tcbhead_t): Add private_futex field. + +2007-07-26 Jakub Jelinek <jakub@redhat.com> + + * tst-locale2.c (useless): Add return statement. + +2007-07-24 Jakub Jelinek <jakub@redhat.com> + + * allocatestack.c (__nptl_setxid, __wait_lookup_done): Replace + lll_private_futex_* (*) with lll_futex_* (*, LLL_PRIVATE). + * pthread_create.c (start_thread): Likewise. + * init.c (sighandler_setxid): Likewise. + * sysdeps/alpha/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise. + * sysdeps/ia64/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise. + * sysdeps/i386/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise. + * sysdeps/s390/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise. + * sysdeps/powerpc/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise. + * sysdeps/x86_64/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise. + * sysdeps/sparc/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise. + * sysdeps/sh/tls.h (THREAD_GSCOPE_RESET_FLAG): Likewise. + * sysdeps/pthread/aio_misc.h (AIO_MISC_NOTIFY, AIO_MISC_WAIT): + Likewise. + * sysdeps/pthread/gai_misc.h (GAI_MISC_NOTIFY, GAI_MISC_WAIT): + Likewise. + * sysdeps/unix/sysv/linux/unregister-atfork.c (__unregister_atfork): + Likewise. + * sysdeps/unix/sysv/linux/rtld-lowlevel.h (__rtld_waitzero, + __rtld_notify): Likewise. + * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Likewise. + * sysdeps/unix/sysv/linux/powerpc/pthread_once.c (clear_once_control, + __pthread_once): Likewise. + * sysdeps/unix/sysv/linux/alpha/pthread_once.c (clear_once_control, + __pthread_once): Add LLL_PRIVATE as last argument to lll_futex_*. + * sysdeps/unix/sysv/linux/alpha/lowlevellock.h (FUTEX_PRIVATE_FLAG, + LLL_PRIVATE, LLL_SHARED, __lll_private_flag): Define. + (lll_futex_wait): Add private argument, define as wrapper around + lll_futex_timed_wait. + (lll_futex_timed_wait, lll_futex_wake): Add private argument, + use __lll_private_flag macro. + (lll_robust_mutex_dead, __lll_mutex_unlock, __lll_robust_mutex_unlock, + __lll_mutex_unlock_force): Pass LLL_SHARED as last arg to lll_futex_*. + * sysdeps/unix/sysv/linux/ia64/pthread_once.c (clear_once_control, + __pthread_once): Add LLL_PRIVATE as last argument to lll_futex_*. + * sysdeps/unix/sysv/linux/ia64/lowlevellock.h (FUTEX_PRIVATE_FLAG, + LLL_PRIVATE, LLL_SHARED, __lll_private_flag): Define. + (lll_futex_wait): Add private argument, define as wrapper around + lll_futex_timed_wait. + (lll_futex_timed_wait, lll_futex_wake): Add private argument, + use __lll_private_flag macro. + (__lll_mutex_unlock, __lll_robust_mutex_unlock, lll_wait_tid, + __lll_mutex_unlock_force): Pass LLL_SHARED as last arg to lll_futex_*. + * sysdeps/unix/sysv/linux/i386/lowlevellock.h (__lll_private_flag): + Define. + (lll_futex_timed_wait, lll_futex_wake): Use it. + (lll_private_futex_wait, lll_private_futex_timed_wait, + lll_private_futex_wake): Removed. + * sysdeps/unix/sysv/linux/s390/pthread_once.c (clear_once_control, + __pthread_once): Add LLL_PRIVATE as last argument to lll_futex_*. + * sysdeps/unix/sysv/linux/s390/lowlevellock.h (FUTEX_PRIVATE_FLAG, + LLL_PRIVATE, LLL_SHARED, __lll_private_flag): Define. + (lll_futex_wait): Add private argument, define as wrapper around + lll_futex_timed_wait. + (lll_futex_timed_wait, lll_futex_wake): Add private argument, + use __lll_private_flag macro. + (lll_robust_mutex_dead, __lll_mutex_unlock, __lll_robust_mutex_unlock, + lll_wait_tid, __lll_mutex_unlock_force): Pass LLL_SHARED as last arg + to lll_futex_*. + * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h + (lll_private_futex_wait, lll_private_futex_timed_wait, + lll_private_futex_wake): Removed. + * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (__lll_private_flag): + Fix !__ASSUME_PRIVATE_FUTEX non-constant private case. + (lll_private_futex_wait, lll_private_futex_timed_wait, + lll_private_futex_wake): Removed. + * sysdeps/unix/sysv/linux/sparc/pthread_once.c (clear_once_control, + __pthread_once): Add LLL_PRIVATE as last argument to lll_futex_*. + * sysdeps/unix/sysv/linux/sparc/lowlevellock.h (FUTEX_PRIVATE_FLAG, + LLL_PRIVATE, LLL_SHARED, __lll_private_flag): Define. + (lll_futex_wait): Add private argument, define as wrapper around + lll_futex_timed_wait. + (lll_futex_timed_wait, lll_futex_wake): Add private argument, + use __lll_private_flag macro. + (lll_robust_mutex_dead, __lll_mutex_unlock, __lll_robust_mutex_unlock, + lll_wait_tid, __lll_mutex_unlock_force): Pass LLL_SHARED as last arg + to lll_futex_*. + * sysdeps/unix/sysv/linux/sh/lowlevellock.h (__lll_private_flag): + Define. + (lll_futex_timed_wait, lll_futex_wake): Use it. + (lll_private_futex_wait, lll_private_futex_timed_wait, + lll_private_futex_wake): Removed. + +2007-07-27 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/sparc/tls.h (tcbhead_t): Move gscope_flag to the end + of the structure for sparc32. + +2007-07-26 Aurelien Jarno <aurelien@aurel32.net> + + * sysdeps/sparc/tls.h (tcbhead_t): Add gscope_flag. + +2007-07-23 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Fix + code used when private futexes are assumed. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: + Likewise. + +2007-07-23 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h + (__lll_private_flag): Define. + (lll_futex_wait): Define as a wrapper around lll_futex_timed_wait. + (lll_futex_timed_wait, lll_futex_wake, lll_futex_wake_unlock): Use + __lll_private_flag. + (lll_private_futex_wait, lll_private_futex_timedwait, + lll_private_futex_wake): Define as wrapper around non-_private + macros. + * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h + (__lll_private_flag): Define. + (lll_futex_timed_wait, lll_futex_wake): Use __lll_private_flag. + (lll_private_futex_wait, lll_private_futex_timedwait, + lll_private_futex_wake): Define as wrapper around non-_private + macros. + +2007-07-10 Steven Munroe <sjmunroe@us.ibm.com> + + * pthread_rwlock_rdlock.c (__pthread_rwlock_rdlock): Add LLL_SHARED + parameter to lll_futex_wait call. + * pthread_rwlock_wrlock.c (__pthread_rwlock_wrlock): Likewise. + + * sysdeps/unix/sysv/linux/powerpc/pthread_once.c (__pthread_once): + Replace lll_futex_wait with lll_private_futex_wait. + * sysdeps/unix/sysv/linux/powerpc/sem_post.c (__new_sem_post): + Add LLL_SHARED parameter to lll_futex_wake(). + + * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Define LLL_PRIVATE + LLL_SHARED, lll_private_futex_wait, lll_private_futex_timed_wait and + lll_private_futex_wake. + (lll_futex_wait): Add private parameter. Adjust FUTEX_PRIVATE_FLAG + bit from private parm before syscall. + (lll_futex_timed_wait): Likewise. + (lll_futex_wake): Likewise. + (lll_futex_wake_unlock): Likewise. + (lll_mutex_unlock): Add LLL_SHARED parm to lll_futex_wake call. + (lll_robust_mutex_unlock): Likewise. + (lll_mutex_unlock_force): Likewise. + (lll_wait_tid): Add LLL_SHARED parm to lll_futex_wait call. + +2007-07-23 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: Fix + compilation when unconditionally using private futexes. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: + Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Likewise. + * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Likewise. + +2007-07-17 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/pthread/bits/stdio-lock.h (_IO_acquire_lock_clear_flags2): + Define. + +2007-07-06 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/sh/tls.h: Include stdlib.h, list.h, sysdep.h and + kernel-features.h. + +2007-05-16 Roland McGrath <roland@redhat.com> + + * init.c (__nptl_initial_report_events): New variable. + (__pthread_initialize_minimal_internal): Initialize pd->report_events + to that. + +2007-06-22 Jakub Jelinek <jakub@redhat.com> + + * pthread_getattr_np.c (pthread_getattr_np): Clear cpuset and + cpusetsize if pthread_getaffinity_np failed with ENOSYS. + +2007-06-19 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/rtld-lowlevel.h: Remove mrlock + implementation. + +2007-06-18 Ulrich Drepper <drepper@redhat.com> + + * pthreadP.h: Define PTHREAD_MUTEX_TYPE. + * phtread_mutex_lock.c: Use PTHREAD_MUTEX_TYPE. + * pthread_mutex_timedlock.c: Likewise. + * pthread_mutex_trylock.c: Likewise. + * pthread_mutex_unlock.c: Likewise. + +2007-06-17 Andreas Schwab <schwab@suse.de> + + * sysdeps/pthread/pt-initfini.c: Tell gcc about the nonstandard + sections. + +2007-06-17 Ulrich Drepper <drepper@redhat.com> + + * allocatestack.c (allocate_stack): Make code compile if + __ASSUME_PRIVATE_FUTEX is set. + +2007-06-17 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S: + (__pthread_rwlock_rdlock): Don't use non SH-3/4 instruction. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S: + (__pthread_rwlock_wrlock): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S: + (pthread_rwlock_timedrdlock): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S: + (pthread_rwlock_timedwrlock): Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S: + (__pthread_rwlock_unlock): Likewise. + +2007-06-10 Kaz Kojima <kkojima@rr.iij4u.or.jp> + + * sysdeps/sh/tcb-offsets.sym: Add PRIVATE_FUTEX. + * sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h: Include endian.h. + Split __flags into __flags, __shared, __pad1 and __pad2. + * sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S: Use private + futexes if they are available. + * sysdeps/unix/sysv/linux/sh/lowlevellock.S: Adjust so that change + in libc-lowlevellock.S allow using private futexes. + * sysdeps/unix/sysv/linux/sh/lowlevellock.h: Define + FUTEX_PRIVATE_FLAG. Add additional parameter to lll_futex_wait, + lll_futex_timed_wait and lll_futex_wake. Change lll_futex_wait + to call lll_futex_timed_wait. Add lll_private_futex_wait, + lll_private_futex_timed_wait and lll_private_futex_wake. + (lll_robust_mutex_unlock): Fix typo. + * sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S: Use private + field in futex command setup. + * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Use + COND_NWAITERS_SHIFT instead of COND_CLOCK_BITS. + * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S: Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_once.S: Use private futexes + if they are available. Remove clear_once_control. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S: Use private + futexes if they are available. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S: Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S: Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S: Likewise. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S: Likewise. + * sysdeps/unix/sysv/linux/sh/sem_post.S: Add private futex support. + Wake only when there are waiters. + * sysdeps/unix/sysv/linux/sh/sem_wait.S: Add private futex + support. Indicate that there are waiters. Remove unnecessary + extra cancellation test. + * sysdeps/unix/sysv/linux/sh/sem_timedwait.S: Likewise. Removed + left-over duplication of __sem_wait_cleanup. + +2007-06-07 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Add additional + parameter to lll_futex_wait, lll_futex_timed_wait, and + lll_futex_wake. Change lll_futex_wait to call lll_futex_timed_wait. + Add lll_private_futex_wait, lll_private_futex_timed_wait, and + lll_private_futex_wake. + * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Likewise. + * allocatestack.c: Adjust use of lll_futex_* macros. + * init.c: Likewise. + * lowlevellock.h: Likewise. + * pthread_barrier_wait.c: Likewise. + * pthread_cond_broadcast.c: Likewise. + * pthread_cond_destroy.c: Likewise. + * pthread_cond_signal.c: Likewise. + * pthread_cond_timedwait.c: Likewise. + * pthread_cond_wait.c: Likewise. + * pthread_create.c: Likewise. + * pthread_mutex_lock.c: Likewise. + * pthread_mutex_setprioceiling.c: Likewise. + * pthread_mutex_timedlock.c: Likewise. + * pthread_mutex_unlock.c: Likewise. + * pthread_rwlock_timedrdlock.c: Likewise. + * pthread_rwlock_timedwrlock.c: Likewise. + * pthread_rwlock_unlock.c: Likewise. + * sysdeps/alpha/tls.h: Likewise. + * sysdeps/i386/tls.h: Likewise. + * sysdeps/ia64/tls.h: Likewise. + * sysdeps/powerpc/tls.h: Likewise. + * sysdeps/pthread/aio_misc.h: Likewise. + * sysdeps/pthread/gai_misc.h: Likewise. + * sysdeps/s390/tls.h: Likewise. + * sysdeps/sh/tls.h: Likewise. + * sysdeps/sparc/tls.h: Likewise. + * sysdeps/unix/sysv/linux/fork.c: Likewise. + * sysdeps/unix/sysv/linux/lowlevellock.c: Likewise. + * sysdeps/unix/sysv/linux/lowlevelrobustlock.c: Likewise. + * sysdeps/unix/sysv/linux/rtld-lowlevel.h: Likewise. + * sysdeps/unix/sysv/linux/sem_post.c: Likewise. + * sysdeps/unix/sysv/linux/sem_timedwait.c: Likewise. + * sysdeps/unix/sysv/linux/sem_wait.c: Likewise. + * sysdeps/unix/sysv/linux/unregister-atfork.c: Likewise. + * sysdeps/unix/sysv/linux/sparc/pthread_once.c: Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c: + Likewise. + * sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c: Likewise. + * sysdeps/x86_64/tls.h: Likewise. + 2007-05-29 Ulrich Drepper <drepper@redhat.com> * pthread_getattr_np.c: No need to install a cancellation handler, diff --git a/libc/nptl/Makefile b/libc/nptl/Makefile index 16a25388d..1faab1b79 100644 --- a/libc/nptl/Makefile +++ b/libc/nptl/Makefile @@ -234,7 +234,7 @@ tests = tst-typesizes \ tst-join1 tst-join2 tst-join3 tst-join4 tst-join5 tst-join6 \ tst-detach1 \ tst-eintr1 tst-eintr2 tst-eintr3 tst-eintr4 tst-eintr5 \ - tst-tsd1 tst-tsd2 tst-tsd3 tst-tsd4 tst-tsd5 \ + tst-tsd1 tst-tsd2 tst-tsd3 tst-tsd4 tst-tsd5 tst-tsd6 \ tst-tls1 tst-tls2 \ tst-fork1 tst-fork2 tst-fork3 tst-fork4 \ tst-atfork1 \ diff --git a/libc/nptl/allocatestack.c b/libc/nptl/allocatestack.c index c31ca808b..c894e96a2 100644 --- a/libc/nptl/allocatestack.c +++ b/libc/nptl/allocatestack.c @@ -28,6 +28,7 @@ #include <dl-sysdep.h> #include <tls.h> #include <lowlevellock.h> +#include <kernel-features.h> #ifndef NEED_SEPARATE_REGISTER_STACK @@ -103,7 +104,7 @@ static size_t stack_cache_maxsize = 40 * 1024 * 1024; /* 40MiBi by default. */ static size_t stack_cache_actsize; /* Mutex protecting this variable. */ -static lll_lock_t stack_cache_lock = LLL_LOCK_INITIALIZER; +static int stack_cache_lock = LLL_LOCK_INITIALIZER; /* List of queued stack frames. */ static LIST_HEAD (stack_cache); @@ -139,7 +140,7 @@ get_cached_stack (size_t *sizep, void **memp) struct pthread *result = NULL; list_t *entry; - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); /* Search the cache for a matching entry. We search for the smallest stack which has at least the required size. Note that @@ -172,7 +173,7 @@ get_cached_stack (size_t *sizep, void **memp) || __builtin_expect (result->stackblock_size > 4 * size, 0)) { /* Release the lock. */ - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); return NULL; } @@ -187,7 +188,7 @@ get_cached_stack (size_t *sizep, void **memp) stack_cache_actsize -= result->stackblock_size; /* Release the lock early. */ - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); /* Report size and location of the stack to the caller. */ *sizep = result->stackblock_size; @@ -400,12 +401,12 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, /* Prepare to modify global data. */ - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); /* And add to the list of stacks in use. */ list_add (&pd->list, &__stack_user); - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); } else { @@ -516,9 +517,11 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, __pthread_multiple_threads = *__libc_multiple_threads_ptr = 1; #endif +#ifndef __ASSUME_PRIVATE_FUTEX /* The thread must know when private futexes are supported. */ pd->header.private_futex = THREAD_GETMEM (THREAD_SELF, header.private_futex); +#endif #ifdef NEED_DL_SYSINFO /* Copy the sysinfo value from the parent. */ @@ -542,12 +545,12 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, /* Prepare to modify global data. */ - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); /* And add to the list of stacks in use. */ list_add (&pd->list, &stack_used); - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); /* There might have been a race. Another thread might have @@ -596,12 +599,12 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp, mprot_error: err = errno; - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); /* Remove the thread from the list. */ list_del (&pd->list); - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); /* Get rid of the TLS block we allocated. */ _dl_deallocate_tls (TLS_TPADJ (pd), false); @@ -697,7 +700,7 @@ void internal_function __deallocate_stack (struct pthread *pd) { - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); /* Remove the thread from the list of threads with user defined stacks. */ @@ -713,7 +716,7 @@ __deallocate_stack (struct pthread *pd) /* Free the memory associated with the ELF TLS. */ _dl_deallocate_tls (TLS_TPADJ (pd), false); - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); } @@ -730,7 +733,7 @@ __make_stacks_executable (void **stack_endp) const size_t pagemask = ~(__getpagesize () - 1); #endif - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); list_t *runp; list_for_each (runp, &stack_used) @@ -759,7 +762,7 @@ __make_stacks_executable (void **stack_endp) break; } - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); return err; } @@ -791,6 +794,26 @@ __reclaim_stacks (void) /* Account for the size of the stack. */ stack_cache_actsize += curp->stackblock_size; + + if (curp->specific_used) + { + /* Clear the thread-specific data. */ + memset (curp->specific_1stblock, '\0', + sizeof (curp->specific_1stblock)); + + curp->specific_used = false; + + for (size_t cnt = 1; cnt < PTHREAD_KEY_1STLEVEL_SIZE; ++cnt) + if (curp->specific[cnt] != NULL) + { + memset (curp->specific[cnt], '\0', + sizeof (curp->specific_1stblock)); + + /* We have allocated the block which we do not + free here so re-set the bit. */ + curp->specific_used = true; + } + } } } @@ -835,7 +858,7 @@ __find_thread_by_id (pid_t tid) { struct pthread *result = NULL; - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); /* Iterate over the list with system-allocated threads first. */ list_t *runp; @@ -867,7 +890,7 @@ __find_thread_by_id (pid_t tid) } out: - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); return result; } @@ -918,7 +941,7 @@ attribute_hidden __nptl_setxid (struct xid_command *cmdp) { int result; - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); __xidcmd = cmdp; cmdp->cntr = 0; @@ -949,7 +972,7 @@ __nptl_setxid (struct xid_command *cmdp) int cur = cmdp->cntr; while (cur != 0) { - lll_futex_wait (&cmdp->cntr, cur); + lll_futex_wait (&cmdp->cntr, cur, LLL_PRIVATE); cur = cmdp->cntr; } @@ -964,7 +987,7 @@ __nptl_setxid (struct xid_command *cmdp) result = -1; } - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); return result; } @@ -993,7 +1016,7 @@ void attribute_hidden __pthread_init_static_tls (struct link_map *map) { - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); /* Iterate over the list with system-allocated threads first. */ list_t *runp; @@ -1004,7 +1027,7 @@ __pthread_init_static_tls (struct link_map *map) list_for_each (runp, &__stack_user) init_one_static_tls (list_entry (runp, struct pthread, list), map); - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); } @@ -1012,7 +1035,7 @@ void attribute_hidden __wait_lookup_done (void) { - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); struct pthread *self = THREAD_SELF; @@ -1035,7 +1058,7 @@ __wait_lookup_done (void) continue; do - lll_futex_wait (gscope_flagp, THREAD_GSCOPE_FLAG_WAIT); + lll_futex_wait (gscope_flagp, THREAD_GSCOPE_FLAG_WAIT, LLL_PRIVATE); while (*gscope_flagp == THREAD_GSCOPE_FLAG_WAIT); } @@ -1057,9 +1080,9 @@ __wait_lookup_done (void) continue; do - lll_futex_wait (gscope_flagp, THREAD_GSCOPE_FLAG_WAIT); + lll_futex_wait (gscope_flagp, THREAD_GSCOPE_FLAG_WAIT, LLL_PRIVATE); while (*gscope_flagp == THREAD_GSCOPE_FLAG_WAIT); } - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); } diff --git a/libc/nptl/descr.h b/libc/nptl/descr.h index 3a3361d9e..3c00e1418 100644 --- a/libc/nptl/descr.h +++ b/libc/nptl/descr.h @@ -309,10 +309,10 @@ struct pthread int parent_cancelhandling; /* Lock to synchronize access to the descriptor. */ - lll_lock_t lock; + int lock; /* Lock for synchronizing setxid calls. */ - lll_lock_t setxid_futex; + int setxid_futex; #if HP_TIMING_AVAIL /* Offset of the CPU clock at start thread start time. */ diff --git a/libc/nptl/init.c b/libc/nptl/init.c index 43526e126..ffb50b4cc 100644 --- a/libc/nptl/init.c +++ b/libc/nptl/init.c @@ -33,6 +33,7 @@ #include <shlib-compat.h> #include <smp.h> #include <lowlevellock.h> +#include <kernel-features.h> /* Size and alignment of static TLS block. */ @@ -216,7 +217,7 @@ sighandler_setxid (int sig, siginfo_t *si, void *ctx) __xidcmd->id[1], __xidcmd->id[2]); if (atomic_decrement_val (&__xidcmd->cntr) == 0) - lll_futex_wake (&__xidcmd->cntr, 1); + lll_futex_wake (&__xidcmd->cntr, 1, LLL_PRIVATE); /* Reset the SETXID flag. */ struct pthread *self = THREAD_SELF; @@ -225,7 +226,7 @@ sighandler_setxid (int sig, siginfo_t *si, void *ctx) /* And release the futex. */ self->setxid_futex = 1; - lll_futex_wake (&self->setxid_futex, 1); + lll_futex_wake (&self->setxid_futex, 1, LLL_PRIVATE); } diff --git a/libc/nptl/lowlevellock.h b/libc/nptl/lowlevellock.h index 338da3999..0600e1794 100644 --- a/libc/nptl/lowlevellock.h +++ b/libc/nptl/lowlevellock.h @@ -1,5 +1,5 @@ /* Low level locking macros used in NPTL implementation. Stub version. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -21,16 +21,6 @@ #include <atomic.h> -/* Implement generic mutex. Basic futex syscall support is required: - - lll_futex_wait(futex, value) - call sys_futex with FUTEX_WAIT - and third parameter VALUE - - lll_futex_wake(futex, value) - call sys_futex with FUTEX_WAKE - and third parameter VALUE -*/ - - /* Mutex lock counter: bit 31 clear means unlocked; bit 31 set means locked. @@ -66,7 +56,9 @@ __generic_mutex_lock (int *mutex) if (v >= 0) continue; - lll_futex_wait (mutex, v); + lll_futex_wait (mutex, v, + // XYZ check mutex flag + LLL_SHARED); } } @@ -82,7 +74,9 @@ __generic_mutex_unlock (int *mutex) /* There are other threads waiting for this mutex, wake one of them up. */ - lll_futex_wake (mutex, 1); + lll_futex_wake (mutex, 1, + // XYZ check mutex flag + LLL_SHARED); } diff --git a/libc/nptl/old_pthread_cond_broadcast.c b/libc/nptl/old_pthread_cond_broadcast.c index 3852943fa..5ad6fa2ce 100644 --- a/libc/nptl/old_pthread_cond_broadcast.c +++ b/libc/nptl/old_pthread_cond_broadcast.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -33,7 +33,7 @@ __pthread_cond_broadcast_2_0 (cond) { pthread_cond_t *newcond; -#if LLL_MUTEX_LOCK_INITIALIZER == 0 +#if LLL_LOCK_INITIALIZER == 0 newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1); if (newcond == NULL) return ENOMEM; diff --git a/libc/nptl/old_pthread_cond_signal.c b/libc/nptl/old_pthread_cond_signal.c index 65beb0b9d..5b67f1153 100644 --- a/libc/nptl/old_pthread_cond_signal.c +++ b/libc/nptl/old_pthread_cond_signal.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -33,7 +33,7 @@ __pthread_cond_signal_2_0 (cond) { pthread_cond_t *newcond; -#if LLL_MUTEX_LOCK_INITIALIZER == 0 +#if LLL_LOCK_INITIALIZER == 0 newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1); if (newcond == NULL) return ENOMEM; diff --git a/libc/nptl/old_pthread_cond_timedwait.c b/libc/nptl/old_pthread_cond_timedwait.c index 27c10938d..2f09f3b0e 100644 --- a/libc/nptl/old_pthread_cond_timedwait.c +++ b/libc/nptl/old_pthread_cond_timedwait.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -35,7 +35,7 @@ __pthread_cond_timedwait_2_0 (cond, mutex, abstime) { pthread_cond_t *newcond; -#if LLL_MUTEX_LOCK_INITIALIZER == 0 +#if LLL_LOCK_INITIALIZER == 0 newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1); if (newcond == NULL) return ENOMEM; diff --git a/libc/nptl/old_pthread_cond_wait.c b/libc/nptl/old_pthread_cond_wait.c index 0a503a1cd..4f1caadcf 100644 --- a/libc/nptl/old_pthread_cond_wait.c +++ b/libc/nptl/old_pthread_cond_wait.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -34,7 +34,7 @@ __pthread_cond_wait_2_0 (cond, mutex) { pthread_cond_t *newcond; -#if LLL_MUTEX_LOCK_INITIALIZER == 0 +#if LLL_LOCK_INITIALIZER == 0 newcond = (pthread_cond_t *) calloc (sizeof (pthread_cond_t), 1); if (newcond == NULL) return ENOMEM; diff --git a/libc/nptl/pthreadP.h b/libc/nptl/pthreadP.h index 46e24761a..17b6492ad 100644 --- a/libc/nptl/pthreadP.h +++ b/libc/nptl/pthreadP.h @@ -96,6 +96,22 @@ enum PTHREAD_MUTEX_PP_ADAPTIVE_NP = PTHREAD_MUTEX_PRIO_PROTECT_NP | PTHREAD_MUTEX_ADAPTIVE_NP }; +#define PTHREAD_MUTEX_PSHARED_BIT 128 + +#define PTHREAD_MUTEX_TYPE(m) \ + ((m)->__data.__kind & 127) + +#if LLL_PRIVATE == 0 && LLL_SHARED == 128 +# define PTHREAD_MUTEX_PSHARED(m) \ + ((m)->__data.__kind & 128) +#else +# define PTHREAD_MUTEX_PSHARED(m) \ + (((m)->__data.__kind & 128) ? LLL_SHARED : LLL_PRIVATE) +#endif + +/* The kernel when waking robust mutexes on exit never uses + FUTEX_PRIVATE_FLAG FUTEX_WAKE. */ +#define PTHREAD_ROBUST_MUTEX_PSHARED(m) LLL_SHARED /* Ceiling in __data.__lock. __data.__lock is signed, so don't use the MSB bit in there, but in the mask also include that bit, @@ -148,7 +164,7 @@ hidden_proto (__stack_user) /* Attribute handling. */ extern struct pthread_attr *__attr_list attribute_hidden; -extern lll_lock_t __attr_list_lock attribute_hidden; +extern int __attr_list_lock attribute_hidden; /* First available RT signal. */ extern int __current_sigrtmin attribute_hidden; diff --git a/libc/nptl/pthread_attr_init.c b/libc/nptl/pthread_attr_init.c index c84b33f31..d9a309abc 100644 --- a/libc/nptl/pthread_attr_init.c +++ b/libc/nptl/pthread_attr_init.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -27,7 +27,7 @@ struct pthread_attr *__attr_list; -lll_lock_t __attr_list_lock = LLL_LOCK_INITIALIZER; +int __attr_list_lock = LLL_LOCK_INITIALIZER; int diff --git a/libc/nptl/pthread_barrier_destroy.c b/libc/nptl/pthread_barrier_destroy.c index 492b29485..4951621dd 100644 --- a/libc/nptl/pthread_barrier_destroy.c +++ b/libc/nptl/pthread_barrier_destroy.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -31,14 +31,14 @@ pthread_barrier_destroy (barrier) ibarrier = (struct pthread_barrier *) barrier; - lll_lock (ibarrier->lock); + lll_lock (ibarrier->lock, ibarrier->private ^ FUTEX_PRIVATE_FLAG); if (__builtin_expect (ibarrier->left == ibarrier->init_count, 1)) /* The barrier is not used anymore. */ result = 0; else /* Still used, return with an error. */ - lll_unlock (ibarrier->lock); + lll_unlock (ibarrier->lock, ibarrier->private ^ FUTEX_PRIVATE_FLAG); return result; } diff --git a/libc/nptl/pthread_barrier_init.c b/libc/nptl/pthread_barrier_init.c index 8dfc44496..8e6edba38 100644 --- a/libc/nptl/pthread_barrier_init.c +++ b/libc/nptl/pthread_barrier_init.c @@ -40,7 +40,7 @@ pthread_barrier_init (barrier, attr, count) if (__builtin_expect (count == 0, 0)) return EINVAL; - struct pthread_barrierattr *iattr + const struct pthread_barrierattr *iattr = (attr != NULL ? iattr = (struct pthread_barrierattr *) attr : &default_attr); diff --git a/libc/nptl/pthread_barrier_wait.c b/libc/nptl/pthread_barrier_wait.c index c6b563f24..9d80cad90 100644 --- a/libc/nptl/pthread_barrier_wait.c +++ b/libc/nptl/pthread_barrier_wait.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. @@ -32,7 +32,7 @@ pthread_barrier_wait (barrier) int result = 0; /* Make sure we are alone. */ - lll_lock (ibarrier->lock); + lll_lock (ibarrier->lock, ibarrier->private ^ FUTEX_PRIVATE_FLAG); /* One more arrival. */ --ibarrier->left; @@ -45,7 +45,8 @@ pthread_barrier_wait (barrier) ++ibarrier->curr_event; /* Wake up everybody. */ - lll_futex_wake (&ibarrier->curr_event, INT_MAX); + lll_futex_wake (&ibarrier->curr_event, INT_MAX, + ibarrier->private ^ FUTEX_PRIVATE_FLAG); /* This is the thread which finished the serialization. */ result = PTHREAD_BARRIER_SERIAL_THREAD; @@ -57,11 +58,12 @@ pthread_barrier_wait (barrier) unsigned int event = ibarrier->curr_event; /* Before suspending, make the barrier available to others. */ - lll_unlock (ibarrier->lock); + lll_unlock (ibarrier->lock, ibarrier->private ^ FUTEX_PRIVATE_FLAG); /* Wait for the event counter of the barrier to change. */ do - lll_futex_wait (&ibarrier->curr_event, event); + lll_futex_wait (&ibarrier->curr_event, event, + ibarrier->private ^ FUTEX_PRIVATE_FLAG); while (event == ibarrier->curr_event); } @@ -71,7 +73,7 @@ pthread_barrier_wait (barrier) /* If this was the last woken thread, unlock. */ if (atomic_increment_val (&ibarrier->left) == init_count) /* We are done. */ - lll_unlock (ibarrier->lock); + lll_unlock (ibarrier->lock, ibarrier->private ^ FUTEX_PRIVATE_FLAG); return result; } diff --git a/libc/nptl/pthread_cond_broadcast.c b/libc/nptl/pthread_cond_broadcast.c index 2b8b5460f..22523c297 100644 --- a/libc/nptl/pthread_cond_broadcast.c +++ b/libc/nptl/pthread_cond_broadcast.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. @@ -32,8 +32,10 @@ int __pthread_cond_broadcast (cond) pthread_cond_t *cond; { + int pshared = (cond->__data.__mutex == (void *) ~0l) + ? LLL_SHARED : LLL_PRIVATE; /* Make sure we are alone. */ - lll_mutex_lock (cond->__data.__lock); + lll_lock (cond->__data.__lock, pshared); /* Are there any waiters to be woken? */ if (cond->__data.__total_seq > cond->__data.__wakeup_seq) @@ -47,7 +49,7 @@ __pthread_cond_broadcast (cond) ++cond->__data.__broadcast_seq; /* We are done. */ - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); /* Do not use requeue for pshared condvars. */ if (cond->__data.__mutex == (void *) ~0l) @@ -57,19 +59,22 @@ __pthread_cond_broadcast (cond) pthread_mutex_t *mut = (pthread_mutex_t *) cond->__data.__mutex; /* XXX: Kernel so far doesn't support requeue to PI futex. */ - if (__builtin_expect (mut->__data.__kind & PTHREAD_MUTEX_PRIO_INHERIT_NP, - 0)) + /* XXX: Kernel so far can only requeue to the same type of futex, + in this case private (we don't requeue for pshared condvars). */ + if (__builtin_expect (mut->__data.__kind + & (PTHREAD_MUTEX_PRIO_INHERIT_NP + | PTHREAD_MUTEX_PSHARED_BIT), 0)) goto wake_all; /* lll_futex_requeue returns 0 for success and non-zero for errors. */ if (__builtin_expect (lll_futex_requeue (&cond->__data.__futex, 1, INT_MAX, &mut->__data.__lock, - futex_val), 0)) + futex_val, LLL_PRIVATE), 0)) { /* The requeue functionality is not available. */ wake_all: - lll_futex_wake (&cond->__data.__futex, INT_MAX); + lll_futex_wake (&cond->__data.__futex, INT_MAX, pshared); } /* That's all. */ @@ -77,7 +82,7 @@ __pthread_cond_broadcast (cond) } /* We are done. */ - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); return 0; } diff --git a/libc/nptl/pthread_cond_destroy.c b/libc/nptl/pthread_cond_destroy.c index 0b8d4119d..35135a68b 100644 --- a/libc/nptl/pthread_cond_destroy.c +++ b/libc/nptl/pthread_cond_destroy.c @@ -26,14 +26,17 @@ int __pthread_cond_destroy (cond) pthread_cond_t *cond; { + int pshared = (cond->__data.__mutex == (void *) ~0l) + ? LLL_SHARED : LLL_PRIVATE; + /* Make sure we are alone. */ - lll_mutex_lock (cond->__data.__lock); + lll_lock (cond->__data.__lock, pshared); if (cond->__data.__total_seq > cond->__data.__wakeup_seq) { /* If there are still some waiters which have not been woken up, this is an application bug. */ - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); return EBUSY; } @@ -59,16 +62,17 @@ __pthread_cond_destroy (cond) && cond->__data.__mutex != (void *) ~0l) { pthread_mutex_t *mut = (pthread_mutex_t *) cond->__data.__mutex; - lll_futex_wake (&mut->__data.__lock, INT_MAX); + lll_futex_wake (&mut->__data.__lock, INT_MAX, + PTHREAD_MUTEX_PSHARED (mut)); } do { - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); - lll_futex_wait (&cond->__data.__nwaiters, nwaiters); + lll_futex_wait (&cond->__data.__nwaiters, nwaiters, pshared); - lll_mutex_lock (cond->__data.__lock); + lll_lock (cond->__data.__lock, pshared); nwaiters = cond->__data.__nwaiters; } diff --git a/libc/nptl/pthread_cond_init.c b/libc/nptl/pthread_cond_init.c index 7c6d4c18f..a75b82b9c 100644 --- a/libc/nptl/pthread_cond_init.c +++ b/libc/nptl/pthread_cond_init.c @@ -28,7 +28,7 @@ __pthread_cond_init (cond, cond_attr) { struct pthread_condattr *icond_attr = (struct pthread_condattr *) cond_attr; - cond->__data.__lock = LLL_MUTEX_LOCK_INITIALIZER; + cond->__data.__lock = LLL_LOCK_INITIALIZER; cond->__data.__futex = 0; cond->__data.__nwaiters = (icond_attr != NULL && ((icond_attr->value diff --git a/libc/nptl/pthread_cond_signal.c b/libc/nptl/pthread_cond_signal.c index 5a9bbcad9..023bbb5e9 100644 --- a/libc/nptl/pthread_cond_signal.c +++ b/libc/nptl/pthread_cond_signal.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. @@ -32,8 +32,11 @@ int __pthread_cond_signal (cond) pthread_cond_t *cond; { + int pshared = (cond->__data.__mutex == (void *) ~0l) + ? LLL_SHARED : LLL_PRIVATE; + /* Make sure we are alone. */ - lll_mutex_lock (cond->__data.__lock); + lll_lock (cond->__data.__lock, pshared); /* Are there any waiters to be woken? */ if (cond->__data.__total_seq > cond->__data.__wakeup_seq) @@ -44,15 +47,15 @@ __pthread_cond_signal (cond) /* Wake one. */ if (! __builtin_expect (lll_futex_wake_unlock (&cond->__data.__futex, 1, - 1, &cond->__data.__lock), - 0)) + 1, &cond->__data.__lock, + pshared), 0)) return 0; - lll_futex_wake (&cond->__data.__futex, 1); + lll_futex_wake (&cond->__data.__futex, 1, pshared); } /* We are done. */ - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); return 0; } diff --git a/libc/nptl/pthread_cond_timedwait.c b/libc/nptl/pthread_cond_timedwait.c index 261b4484b..9d268e911 100644 --- a/libc/nptl/pthread_cond_timedwait.c +++ b/libc/nptl/pthread_cond_timedwait.c @@ -23,6 +23,7 @@ #include <lowlevellock.h> #include <pthread.h> #include <pthreadP.h> +#include <kernel-features.h> #include <shlib-compat.h> @@ -53,14 +54,17 @@ __pthread_cond_timedwait (cond, mutex, abstime) if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) return EINVAL; + int pshared = (cond->__data.__mutex == (void *) ~0l) + ? LLL_SHARED : LLL_PRIVATE; + /* Make sure we are along. */ - lll_mutex_lock (cond->__data.__lock); + lll_lock (cond->__data.__lock, pshared); /* Now we can release the mutex. */ int err = __pthread_mutex_unlock_usercnt (mutex, 0); if (err) { - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); return err; } @@ -146,20 +150,20 @@ __pthread_cond_timedwait (cond, mutex, abstime) unsigned int futex_val = cond->__data.__futex; /* Prepare to wait. Release the condvar futex. */ - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); /* Enable asynchronous cancellation. Required by the standard. */ cbuffer.oldtype = __pthread_enable_asynccancel (); /* Wait until woken by signal or broadcast. */ err = lll_futex_timed_wait (&cond->__data.__futex, - futex_val, &rt); + futex_val, &rt, pshared); /* Disable asynchronous cancellation. */ __pthread_disable_asynccancel (cbuffer.oldtype); /* We are going to look at shared data again, so get the lock. */ - lll_mutex_lock(cond->__data.__lock); + lll_lock (cond->__data.__lock, pshared); /* If a broadcast happened, we are done. */ if (cbuffer.bc_seq != cond->__data.__broadcast_seq) @@ -196,10 +200,10 @@ __pthread_cond_timedwait (cond, mutex, abstime) and it can be successfully destroyed. */ if (cond->__data.__total_seq == -1ULL && cond->__data.__nwaiters < (1 << COND_NWAITERS_SHIFT)) - lll_futex_wake (&cond->__data.__nwaiters, 1); + lll_futex_wake (&cond->__data.__nwaiters, 1, pshared); /* We are done with the condvar. */ - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); /* The cancellation handling is back to normal, remove the handler. */ __pthread_cleanup_pop (&buffer, 0); diff --git a/libc/nptl/pthread_cond_wait.c b/libc/nptl/pthread_cond_wait.c index 6e00a28f6..670fba573 100644 --- a/libc/nptl/pthread_cond_wait.c +++ b/libc/nptl/pthread_cond_wait.c @@ -43,9 +43,11 @@ __condvar_cleanup (void *arg) struct _condvar_cleanup_buffer *cbuffer = (struct _condvar_cleanup_buffer *) arg; unsigned int destroying; + int pshared = (cbuffer->cond->__data.__mutex == (void *) ~0l) + ? LLL_SHARED : LLL_PRIVATE; /* We are going to modify shared data. */ - lll_mutex_lock (cbuffer->cond->__data.__lock); + lll_lock (cbuffer->cond->__data.__lock, pshared); if (cbuffer->bc_seq == cbuffer->cond->__data.__broadcast_seq) { @@ -71,16 +73,16 @@ __condvar_cleanup (void *arg) if (cbuffer->cond->__data.__total_seq == -1ULL && cbuffer->cond->__data.__nwaiters < (1 << COND_NWAITERS_SHIFT)) { - lll_futex_wake (&cbuffer->cond->__data.__nwaiters, 1); + lll_futex_wake (&cbuffer->cond->__data.__nwaiters, 1, pshared); destroying = 1; } /* We are done. */ - lll_mutex_unlock (cbuffer->cond->__data.__lock); + lll_unlock (cbuffer->cond->__data.__lock, pshared); /* Wake everybody to make sure no condvar signal gets lost. */ if (! destroying) - lll_futex_wake (&cbuffer->cond->__data.__futex, INT_MAX); + lll_futex_wake (&cbuffer->cond->__data.__futex, INT_MAX, pshared); /* Get the mutex before returning unless asynchronous cancellation is in effect. */ @@ -96,15 +98,17 @@ __pthread_cond_wait (cond, mutex) struct _pthread_cleanup_buffer buffer; struct _condvar_cleanup_buffer cbuffer; int err; + int pshared = (cond->__data.__mutex == (void *) ~0l) + ? LLL_SHARED : LLL_PRIVATE; /* Make sure we are along. */ - lll_mutex_lock (cond->__data.__lock); + lll_lock (cond->__data.__lock, pshared); /* Now we can release the mutex. */ err = __pthread_mutex_unlock_usercnt (mutex, 0); if (__builtin_expect (err, 0)) { - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); return err; } @@ -140,19 +144,19 @@ __pthread_cond_wait (cond, mutex) unsigned int futex_val = cond->__data.__futex; /* Prepare to wait. Release the condvar futex. */ - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); /* Enable asynchronous cancellation. Required by the standard. */ cbuffer.oldtype = __pthread_enable_asynccancel (); /* Wait until woken by signal or broadcast. */ - lll_futex_wait (&cond->__data.__futex, futex_val); + lll_futex_wait (&cond->__data.__futex, futex_val, pshared); /* Disable asynchronous cancellation. */ __pthread_disable_asynccancel (cbuffer.oldtype); /* We are going to look at shared data again, so get the lock. */ - lll_mutex_lock (cond->__data.__lock); + lll_lock (cond->__data.__lock, pshared); /* If a broadcast happened, we are done. */ if (cbuffer.bc_seq != cond->__data.__broadcast_seq) @@ -175,10 +179,10 @@ __pthread_cond_wait (cond, mutex) and it can be successfully destroyed. */ if (cond->__data.__total_seq == -1ULL && cond->__data.__nwaiters < (1 << COND_NWAITERS_SHIFT)) - lll_futex_wake (&cond->__data.__nwaiters, 1); + lll_futex_wake (&cond->__data.__nwaiters, 1, pshared); /* We are done with the condvar. */ - lll_mutex_unlock (cond->__data.__lock); + lll_unlock (cond->__data.__lock, pshared); /* The cancellation handling is back to normal, remove the handler. */ __pthread_cleanup_pop (&buffer, 0); diff --git a/libc/nptl/pthread_create.c b/libc/nptl/pthread_create.c index 2e8015788..850e97c3b 100644 --- a/libc/nptl/pthread_create.c +++ b/libc/nptl/pthread_create.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002,2003,2004,2005,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -27,6 +27,7 @@ #include <atomic.h> #include <libc-internal.h> #include <resolv.h> +#include <kernel-features.h> #include <shlib-compat.h> @@ -63,7 +64,7 @@ __find_in_stack_list (pd) list_t *entry; struct pthread *result = NULL; - lll_lock (stack_cache_lock); + lll_lock (stack_cache_lock, LLL_PRIVATE); list_for_each (entry, &stack_used) { @@ -90,7 +91,7 @@ __find_in_stack_list (pd) } } - lll_unlock (stack_cache_lock); + lll_unlock (stack_cache_lock, LLL_PRIVATE); return result; } @@ -286,9 +287,9 @@ start_thread (void *arg) int oldtype = CANCEL_ASYNC (); /* Get the lock the parent locked to force synchronization. */ - lll_lock (pd->lock); + lll_lock (pd->lock, LLL_PRIVATE); /* And give it up right away. */ - lll_unlock (pd->lock); + lll_unlock (pd->lock, LLL_PRIVATE); CANCEL_RESET (oldtype); } @@ -374,7 +375,7 @@ start_thread (void *arg) # endif this->__list.__next = NULL; - lll_robust_mutex_dead (this->__lock); + lll_robust_dead (this->__lock, /* XYZ */ LLL_SHARED); } while (robust != (void *) &pd->robust_head); } @@ -389,7 +390,7 @@ start_thread (void *arg) /* Some other thread might call any of the setXid functions and expect us to reply. In this case wait until we did that. */ do - lll_futex_wait (&pd->setxid_futex, 0); + lll_futex_wait (&pd->setxid_futex, 0, LLL_PRIVATE); while (pd->cancelhandling & SETXID_BITMASK); /* Reset the value so that the stack can be reused. */ diff --git a/libc/nptl/pthread_getattr_np.c b/libc/nptl/pthread_getattr_np.c index 9c0e4ed86..9c25caff8 100644 --- a/libc/nptl/pthread_getattr_np.c +++ b/libc/nptl/pthread_getattr_np.c @@ -39,7 +39,7 @@ pthread_getattr_np (thread_id, attr) struct pthread_attr *iattr = (struct pthread_attr *) attr; int ret = 0; - lll_lock (thread->lock); + lll_lock (thread->lock, LLL_PRIVATE); /* The thread library is responsible for keeping the values in the thread desriptor up-to-date in case the user changes them. */ @@ -164,12 +164,16 @@ pthread_getattr_np (thread_id, attr) { free (cpuset); if (ret == ENOSYS) - /* There is no such functionality. */ - ret = 0; + { + /* There is no such functionality. */ + ret = 0; + iattr->cpuset = NULL; + iattr->cpusetsize = 0; + } } } - lll_unlock (thread->lock); + lll_unlock (thread->lock, LLL_PRIVATE); return ret; } diff --git a/libc/nptl/pthread_getschedparam.c b/libc/nptl/pthread_getschedparam.c index 5e8713016..d4e9459bb 100644 --- a/libc/nptl/pthread_getschedparam.c +++ b/libc/nptl/pthread_getschedparam.c @@ -38,7 +38,7 @@ __pthread_getschedparam (threadid, policy, param) int result = 0; - lll_lock (pd->lock); + lll_lock (pd->lock, LLL_PRIVATE); /* The library is responsible for maintaining the values at all times. If the user uses a interface other than @@ -68,7 +68,7 @@ __pthread_getschedparam (threadid, policy, param) memcpy (param, &pd->schedparam, sizeof (struct sched_param)); } - lll_unlock (pd->lock); + lll_unlock (pd->lock, LLL_PRIVATE); return result; } diff --git a/libc/nptl/pthread_mutex_init.c b/libc/nptl/pthread_mutex_init.c index 96f1fb00f..d9b1ef0b9 100644 --- a/libc/nptl/pthread_mutex_init.c +++ b/libc/nptl/pthread_mutex_init.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -20,6 +21,7 @@ #include <assert.h> #include <errno.h> #include <string.h> +#include <kernel-features.h> #include "pthreadP.h" static const struct pthread_mutexattr default_attr = @@ -120,6 +122,12 @@ __pthread_mutex_init (mutex, mutexattr) break; } + /* The kernel when waking robust mutexes on exit never uses + FUTEX_PRIVATE_FLAG FUTEX_WAKE. */ + if ((imutexattr->mutexkind & (PTHREAD_MUTEXATTR_FLAG_PSHARED + | PTHREAD_MUTEXATTR_FLAG_ROBUST)) != 0) + mutex->__data.__kind |= PTHREAD_MUTEX_PSHARED_BIT; + /* Default values: mutex not used yet. */ // mutex->__count = 0; already done by memset // mutex->__owner = 0; already done by memset diff --git a/libc/nptl/pthread_mutex_lock.c b/libc/nptl/pthread_mutex_lock.c index 1c3ee4fe2..ed98dfc6c 100644 --- a/libc/nptl/pthread_mutex_lock.c +++ b/libc/nptl/pthread_mutex_lock.c @@ -27,9 +27,13 @@ #ifndef LLL_MUTEX_LOCK -# define LLL_MUTEX_LOCK(mutex) lll_mutex_lock (mutex) -# define LLL_MUTEX_TRYLOCK(mutex) lll_mutex_trylock (mutex) -# define LLL_ROBUST_MUTEX_LOCK(mutex, id) lll_robust_mutex_lock (mutex, id) +# define LLL_MUTEX_LOCK(mutex) \ + lll_lock ((mutex)->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex)) +# define LLL_MUTEX_TRYLOCK(mutex) \ + lll_trylock ((mutex)->__data.__lock) +# define LLL_ROBUST_MUTEX_LOCK(mutex, id) \ + lll_robust_lock ((mutex)->__data.__lock, id, \ + PTHREAD_ROBUST_MUTEX_PSHARED (mutex)) #endif @@ -43,7 +47,8 @@ __pthread_mutex_lock (mutex) pid_t id = THREAD_GETMEM (THREAD_SELF, tid); int retval = 0; - switch (__builtin_expect (mutex->__data.__kind, PTHREAD_MUTEX_TIMED_NP)) + switch (__builtin_expect (PTHREAD_MUTEX_TYPE (mutex), + PTHREAD_MUTEX_TIMED_NP)) { /* Recursive mutex. */ case PTHREAD_MUTEX_RECURSIVE_NP: @@ -61,7 +66,7 @@ __pthread_mutex_lock (mutex) } /* We have to get the mutex. */ - LLL_MUTEX_LOCK (mutex->__data.__lock); + LLL_MUTEX_LOCK (mutex); assert (mutex->__data.__owner == 0); mutex->__data.__count = 1; @@ -78,7 +83,7 @@ __pthread_mutex_lock (mutex) case PTHREAD_MUTEX_TIMED_NP: simple: /* Normal mutex. */ - LLL_MUTEX_LOCK (mutex->__data.__lock); + LLL_MUTEX_LOCK (mutex); assert (mutex->__data.__owner == 0); break; @@ -86,7 +91,7 @@ __pthread_mutex_lock (mutex) if (! __is_smp) goto simple; - if (LLL_MUTEX_TRYLOCK (mutex->__data.__lock) != 0) + if (LLL_MUTEX_TRYLOCK (mutex) != 0) { int cnt = 0; int max_cnt = MIN (MAX_ADAPTIVE_COUNT, @@ -95,7 +100,7 @@ __pthread_mutex_lock (mutex) { if (cnt++ >= max_cnt) { - LLL_MUTEX_LOCK (mutex->__data.__lock); + LLL_MUTEX_LOCK (mutex); break; } @@ -103,7 +108,7 @@ __pthread_mutex_lock (mutex) BUSY_WAIT_NOP; #endif } - while (LLL_MUTEX_TRYLOCK (mutex->__data.__lock) != 0); + while (LLL_MUTEX_TRYLOCK (mutex) != 0); mutex->__data.__spins += (cnt - mutex->__data.__spins) / 8; } @@ -165,16 +170,15 @@ __pthread_mutex_lock (mutex) /* Check whether we already hold the mutex. */ if (__builtin_expect ((oldval & FUTEX_TID_MASK) == id, 0)) { - if (mutex->__data.__kind - == PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP) + int kind = PTHREAD_MUTEX_TYPE (mutex); + if (kind == PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP) { THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); return EDEADLK; } - if (mutex->__data.__kind - == PTHREAD_MUTEX_ROBUST_RECURSIVE_NP) + if (kind == PTHREAD_MUTEX_ROBUST_RECURSIVE_NP) { THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); @@ -190,14 +194,15 @@ __pthread_mutex_lock (mutex) } } - oldval = LLL_ROBUST_MUTEX_LOCK (mutex->__data.__lock, id); + oldval = LLL_ROBUST_MUTEX_LOCK (mutex, id); if (__builtin_expect (mutex->__data.__owner == PTHREAD_MUTEX_NOTRECOVERABLE, 0)) { /* This mutex is now not recoverable. */ mutex->__data.__count = 0; - lll_mutex_unlock (mutex->__data.__lock); + lll_unlock (mutex->__data.__lock, + PTHREAD_ROBUST_MUTEX_PSHARED (mutex)); THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); return ENOTRECOVERABLE; } @@ -408,7 +413,8 @@ __pthread_mutex_lock (mutex) break; if (oldval != ceilval) - lll_futex_wait (&mutex->__data.__lock, ceilval | 2); + lll_futex_wait (&mutex->__data.__lock, ceilval | 2, + PTHREAD_MUTEX_PSHARED (mutex)); } while (atomic_compare_and_exchange_val_acq (&mutex->__data.__lock, ceilval | 2, ceilval) diff --git a/libc/nptl/pthread_mutex_setprioceiling.c b/libc/nptl/pthread_mutex_setprioceiling.c index cd13d1c14..836c9a3e9 100644 --- a/libc/nptl/pthread_mutex_setprioceiling.c +++ b/libc/nptl/pthread_mutex_setprioceiling.c @@ -1,5 +1,5 @@ /* Set current priority ceiling of pthread_mutex_t. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2006. @@ -47,12 +47,13 @@ pthread_mutex_setprioceiling (mutex, prioceiling, old_ceiling) /* Check whether we already hold the mutex. */ bool locked = false; + int kind = PTHREAD_MUTEX_TYPE (mutex); if (mutex->__data.__owner == THREAD_GETMEM (THREAD_SELF, tid)) { - if (mutex->__data.__kind == PTHREAD_MUTEX_PP_ERRORCHECK_NP) + if (kind == PTHREAD_MUTEX_PP_ERRORCHECK_NP) return EDEADLK; - if (mutex->__data.__kind == PTHREAD_MUTEX_PP_RECURSIVE_NP) + if (kind == PTHREAD_MUTEX_PP_RECURSIVE_NP) locked = true; } @@ -80,7 +81,8 @@ pthread_mutex_setprioceiling (mutex, prioceiling, old_ceiling) break; if (oldval != ceilval) - lll_futex_wait (&mutex->__data.__lock, ceilval | 2); + lll_futex_wait (&mutex->__data.__lock, ceilval | 2, + PTHREAD_MUTEX_PSHARED (mutex)); } while (atomic_compare_and_exchange_val_acq (&mutex->__data.__lock, ceilval | 2, ceilval) @@ -110,7 +112,8 @@ pthread_mutex_setprioceiling (mutex, prioceiling, old_ceiling) | (prioceiling << PTHREAD_MUTEX_PRIO_CEILING_SHIFT); atomic_full_barrier (); - lll_futex_wake (&mutex->__data.__lock, INT_MAX); + lll_futex_wake (&mutex->__data.__lock, INT_MAX, + PTHREAD_MUTEX_PSHARED (mutex)); return 0; } diff --git a/libc/nptl/pthread_mutex_timedlock.c b/libc/nptl/pthread_mutex_timedlock.c index 8fd681c6e..4bf0efea3 100644 --- a/libc/nptl/pthread_mutex_timedlock.c +++ b/libc/nptl/pthread_mutex_timedlock.c @@ -37,7 +37,8 @@ pthread_mutex_timedlock (mutex, abstime) /* We must not check ABSTIME here. If the thread does not block abstime must not be checked for a valid value. */ - switch (__builtin_expect (mutex->__data.__kind, PTHREAD_MUTEX_TIMED_NP)) + switch (__builtin_expect (PTHREAD_MUTEX_TYPE (mutex), + PTHREAD_MUTEX_TIMED_NP)) { /* Recursive mutex. */ case PTHREAD_MUTEX_RECURSIVE_NP: @@ -55,7 +56,8 @@ pthread_mutex_timedlock (mutex, abstime) } /* We have to get the mutex. */ - result = lll_mutex_timedlock (mutex->__data.__lock, abstime); + result = lll_timedlock (mutex->__data.__lock, abstime, + PTHREAD_MUTEX_PSHARED (mutex)); if (result != 0) goto out; @@ -75,14 +77,15 @@ pthread_mutex_timedlock (mutex, abstime) case PTHREAD_MUTEX_TIMED_NP: simple: /* Normal mutex. */ - result = lll_mutex_timedlock (mutex->__data.__lock, abstime); + result = lll_timedlock (mutex->__data.__lock, abstime, + PTHREAD_MUTEX_PSHARED (mutex)); break; case PTHREAD_MUTEX_ADAPTIVE_NP: if (! __is_smp) goto simple; - if (lll_mutex_trylock (mutex->__data.__lock) != 0) + if (lll_trylock (mutex->__data.__lock) != 0) { int cnt = 0; int max_cnt = MIN (MAX_ADAPTIVE_COUNT, @@ -91,7 +94,8 @@ pthread_mutex_timedlock (mutex, abstime) { if (cnt++ >= max_cnt) { - result = lll_mutex_timedlock (mutex->__data.__lock, abstime); + result = lll_timedlock (mutex->__data.__lock, abstime, + PTHREAD_MUTEX_PSHARED (mutex)); break; } @@ -99,7 +103,7 @@ pthread_mutex_timedlock (mutex, abstime) BUSY_WAIT_NOP; #endif } - while (lll_mutex_trylock (mutex->__data.__lock) != 0); + while (lll_trylock (mutex->__data.__lock) != 0); mutex->__data.__spins += (cnt - mutex->__data.__spins) / 8; } @@ -148,16 +152,15 @@ pthread_mutex_timedlock (mutex, abstime) /* Check whether we already hold the mutex. */ if (__builtin_expect ((oldval & FUTEX_TID_MASK) == id, 0)) { - if (mutex->__data.__kind - == PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP) + int kind = PTHREAD_MUTEX_TYPE (mutex); + if (kind == PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP) { THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); return EDEADLK; } - if (mutex->__data.__kind - == PTHREAD_MUTEX_ROBUST_RECURSIVE_NP) + if (kind == PTHREAD_MUTEX_ROBUST_RECURSIVE_NP) { THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); @@ -173,15 +176,16 @@ pthread_mutex_timedlock (mutex, abstime) } } - result = lll_robust_mutex_timedlock (mutex->__data.__lock, abstime, - id); + result = lll_robust_timedlock (mutex->__data.__lock, abstime, id, + PTHREAD_ROBUST_MUTEX_PSHARED (mutex)); if (__builtin_expect (mutex->__data.__owner == PTHREAD_MUTEX_NOTRECOVERABLE, 0)) { /* This mutex is now not recoverable. */ mutex->__data.__count = 0; - lll_mutex_unlock (mutex->__data.__lock); + lll_unlock (mutex->__data.__lock, + PTHREAD_ROBUST_MUTEX_PSHARED (mutex)); THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); return ENOTRECOVERABLE; } @@ -441,7 +445,8 @@ pthread_mutex_timedlock (mutex, abstime) } lll_futex_timed_wait (&mutex->__data.__lock, - ceilval | 2, &rt); + ceilval | 2, &rt, + PTHREAD_MUTEX_PSHARED (mutex)); } } while (atomic_compare_and_exchange_val_acq (&mutex->__data.__lock, diff --git a/libc/nptl/pthread_mutex_trylock.c b/libc/nptl/pthread_mutex_trylock.c index 9db904c60..f6e24d413 100644 --- a/libc/nptl/pthread_mutex_trylock.c +++ b/libc/nptl/pthread_mutex_trylock.c @@ -31,7 +31,8 @@ __pthread_mutex_trylock (mutex) int oldval; pid_t id = THREAD_GETMEM (THREAD_SELF, tid); - switch (__builtin_expect (mutex->__data.__kind, PTHREAD_MUTEX_TIMED_NP)) + switch (__builtin_expect (PTHREAD_MUTEX_TYPE (mutex), + PTHREAD_MUTEX_TIMED_NP)) { /* Recursive mutex. */ case PTHREAD_MUTEX_RECURSIVE_NP: @@ -47,7 +48,7 @@ __pthread_mutex_trylock (mutex) return 0; } - if (lll_mutex_trylock (mutex->__data.__lock) == 0) + if (lll_trylock (mutex->__data.__lock) == 0) { /* Record the ownership. */ mutex->__data.__owner = id; @@ -61,7 +62,7 @@ __pthread_mutex_trylock (mutex) case PTHREAD_MUTEX_TIMED_NP: case PTHREAD_MUTEX_ADAPTIVE_NP: /* Normal mutex. */ - if (lll_mutex_trylock (mutex->__data.__lock) != 0) + if (lll_trylock (mutex->__data.__lock) != 0) break; /* Record the ownership. */ @@ -114,16 +115,15 @@ __pthread_mutex_trylock (mutex) /* Check whether we already hold the mutex. */ if (__builtin_expect ((oldval & FUTEX_TID_MASK) == id, 0)) { - if (mutex->__data.__kind - == PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP) + int kind = PTHREAD_MUTEX_TYPE (mutex); + if (kind == PTHREAD_MUTEX_ROBUST_ERRORCHECK_NP) { THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); return EDEADLK; } - if (mutex->__data.__kind - == PTHREAD_MUTEX_ROBUST_RECURSIVE_NP) + if (kind == PTHREAD_MUTEX_ROBUST_RECURSIVE_NP) { THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); @@ -139,7 +139,7 @@ __pthread_mutex_trylock (mutex) } } - oldval = lll_robust_mutex_trylock (mutex->__data.__lock, id); + oldval = lll_robust_trylock (mutex->__data.__lock, id); if (oldval != 0 && (oldval & FUTEX_OWNER_DIED) == 0) { THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); @@ -153,7 +153,8 @@ __pthread_mutex_trylock (mutex) /* This mutex is now not recoverable. */ mutex->__data.__count = 0; if (oldval == id) - lll_mutex_unlock (mutex->__data.__lock); + lll_unlock (mutex->__data.__lock, + PTHREAD_ROBUST_MUTEX_PSHARED (mutex)); THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); return ENOTRECOVERABLE; } diff --git a/libc/nptl/pthread_mutex_unlock.c b/libc/nptl/pthread_mutex_unlock.c index 33919d60a..d33d0593d 100644 --- a/libc/nptl/pthread_mutex_unlock.c +++ b/libc/nptl/pthread_mutex_unlock.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -31,7 +31,8 @@ __pthread_mutex_unlock_usercnt (mutex, decr) { int newowner = 0; - switch (__builtin_expect (mutex->__data.__kind, PTHREAD_MUTEX_TIMED_NP)) + switch (__builtin_expect (PTHREAD_MUTEX_TYPE (mutex), + PTHREAD_MUTEX_TIMED_NP)) { case PTHREAD_MUTEX_RECURSIVE_NP: /* Recursive mutex. */ @@ -46,7 +47,7 @@ __pthread_mutex_unlock_usercnt (mutex, decr) case PTHREAD_MUTEX_ERRORCHECK_NP: /* Error checking mutex. */ if (mutex->__data.__owner != THREAD_GETMEM (THREAD_SELF, tid) - || ! lll_mutex_islocked (mutex->__data.__lock)) + || ! lll_islocked (mutex->__data.__lock)) return EPERM; /* FALLTHROUGH */ @@ -60,7 +61,7 @@ __pthread_mutex_unlock_usercnt (mutex, decr) --mutex->__data.__nusers; /* Unlock. */ - lll_mutex_unlock (mutex->__data.__lock); + lll_unlock (mutex->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex)); break; case PTHREAD_MUTEX_ROBUST_RECURSIVE_NP: @@ -91,7 +92,7 @@ __pthread_mutex_unlock_usercnt (mutex, decr) case PTHREAD_MUTEX_ROBUST_ADAPTIVE_NP: if ((mutex->__data.__lock & FUTEX_TID_MASK) != THREAD_GETMEM (THREAD_SELF, tid) - || ! lll_mutex_islocked (mutex->__data.__lock)) + || ! lll_islocked (mutex->__data.__lock)) return EPERM; /* If the previous owner died and the caller did not succeed in @@ -114,7 +115,8 @@ __pthread_mutex_unlock_usercnt (mutex, decr) --mutex->__data.__nusers; /* Unlock. */ - lll_robust_mutex_unlock (mutex->__data.__lock); + lll_robust_unlock (mutex->__data.__lock, + PTHREAD_ROBUST_MUTEX_PSHARED (mutex)); THREAD_SETMEM (THREAD_SELF, robust_head.list_op_pending, NULL); break; @@ -160,7 +162,7 @@ __pthread_mutex_unlock_usercnt (mutex, decr) case PTHREAD_MUTEX_PI_ROBUST_ADAPTIVE_NP: if ((mutex->__data.__lock & FUTEX_TID_MASK) != THREAD_GETMEM (THREAD_SELF, tid) - || ! lll_mutex_islocked (mutex->__data.__lock)) + || ! lll_islocked (mutex->__data.__lock)) return EPERM; /* If the previous owner died and the caller did not succeed in @@ -240,7 +242,8 @@ __pthread_mutex_unlock_usercnt (mutex, decr) newval, oldval)); if ((oldval & ~PTHREAD_MUTEX_PRIO_CEILING_MASK) > 1) - lll_futex_wake (&mutex->__data.__lock, 1); + lll_futex_wake (&mutex->__data.__lock, 1, + PTHREAD_MUTEX_PSHARED (mutex)); int oldprio = newval >> PTHREAD_MUTEX_PRIO_CEILING_SHIFT; return __pthread_tpp_change_priority (oldprio, -1); diff --git a/libc/nptl/pthread_once.c b/libc/nptl/pthread_once.c index 9b2cef864..306af0a34 100644 --- a/libc/nptl/pthread_once.c +++ b/libc/nptl/pthread_once.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -22,7 +22,7 @@ -static lll_lock_t once_lock = LLL_LOCK_INITIALIZER; +static int once_lock = LLL_LOCK_INITIALIZER; int @@ -35,7 +35,7 @@ __pthread_once (once_control, init_routine) object. */ if (*once_control == PTHREAD_ONCE_INIT) { - lll_lock (once_lock); + lll_lock (once_lock, LLL_PRIVATE); /* XXX This implementation is not complete. It doesn't take cancelation and fork into account. */ @@ -46,7 +46,7 @@ __pthread_once (once_control, init_routine) *once_control = !PTHREAD_ONCE_INIT; } - lll_unlock (once_lock); + lll_unlock (once_lock, LLL_PRIVATE); } return 0; diff --git a/libc/nptl/pthread_rwlock_rdlock.c b/libc/nptl/pthread_rwlock_rdlock.c index 6764c1e9a..31eb508a0 100644 --- a/libc/nptl/pthread_rwlock_rdlock.c +++ b/libc/nptl/pthread_rwlock_rdlock.c @@ -32,7 +32,7 @@ __pthread_rwlock_rdlock (rwlock) int result = 0; /* Make sure we are along. */ - lll_mutex_lock (rwlock->__data.__lock); + lll_lock (rwlock->__data.__lock, rwlock->__data.__shared); while (1) { @@ -74,19 +74,20 @@ __pthread_rwlock_rdlock (rwlock) int waitval = rwlock->__data.__readers_wakeup; /* Free the lock. */ - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); /* Wait for the writer to finish. */ - lll_futex_wait (&rwlock->__data.__readers_wakeup, waitval); + lll_futex_wait (&rwlock->__data.__readers_wakeup, waitval, + rwlock->__data.__shared); /* Get the lock. */ - lll_mutex_lock (rwlock->__data.__lock); + lll_lock (rwlock->__data.__lock, rwlock->__data.__shared); --rwlock->__data.__nr_readers_queued; } /* We are done, free the lock. */ - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); return result; } diff --git a/libc/nptl/pthread_rwlock_timedrdlock.c b/libc/nptl/pthread_rwlock_timedrdlock.c index caff5894f..fcd10aac9 100644 --- a/libc/nptl/pthread_rwlock_timedrdlock.c +++ b/libc/nptl/pthread_rwlock_timedrdlock.c @@ -33,7 +33,7 @@ pthread_rwlock_timedrdlock (rwlock, abstime) int result = 0; /* Make sure we are along. */ - lll_mutex_lock(rwlock->__data.__lock); + lll_lock(rwlock->__data.__lock, rwlock->__data.__shared); while (1) { @@ -110,14 +110,14 @@ pthread_rwlock_timedrdlock (rwlock, abstime) int waitval = rwlock->__data.__readers_wakeup; /* Free the lock. */ - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); /* Wait for the writer to finish. */ err = lll_futex_timed_wait (&rwlock->__data.__readers_wakeup, - waitval, &rt); + waitval, &rt, rwlock->__data.__shared); /* Get the lock. */ - lll_mutex_lock (rwlock->__data.__lock); + lll_lock (rwlock->__data.__lock, rwlock->__data.__shared); --rwlock->__data.__nr_readers_queued; @@ -131,7 +131,7 @@ pthread_rwlock_timedrdlock (rwlock, abstime) } /* We are done, free the lock. */ - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); return result; } diff --git a/libc/nptl/pthread_rwlock_timedwrlock.c b/libc/nptl/pthread_rwlock_timedwrlock.c index 97c0598f9..e6283f462 100644 --- a/libc/nptl/pthread_rwlock_timedwrlock.c +++ b/libc/nptl/pthread_rwlock_timedwrlock.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. @@ -33,7 +33,7 @@ pthread_rwlock_timedwrlock (rwlock, abstime) int result = 0; /* Make sure we are along. */ - lll_mutex_lock (rwlock->__data.__lock); + lll_lock (rwlock->__data.__lock, rwlock->__data.__shared); while (1) { @@ -100,14 +100,14 @@ pthread_rwlock_timedwrlock (rwlock, abstime) int waitval = rwlock->__data.__writer_wakeup; /* Free the lock. */ - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); /* Wait for the writer or reader(s) to finish. */ err = lll_futex_timed_wait (&rwlock->__data.__writer_wakeup, - waitval, &rt); + waitval, &rt, rwlock->__data.__shared); /* Get the lock. */ - lll_mutex_lock (rwlock->__data.__lock); + lll_lock (rwlock->__data.__lock, rwlock->__data.__shared); /* To start over again, remove the thread from the writer list. */ --rwlock->__data.__nr_writers_queued; @@ -121,7 +121,7 @@ pthread_rwlock_timedwrlock (rwlock, abstime) } /* We are done, free the lock. */ - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); return result; } diff --git a/libc/nptl/pthread_rwlock_tryrdlock.c b/libc/nptl/pthread_rwlock_tryrdlock.c index df8863bcf..8461e1bdd 100644 --- a/libc/nptl/pthread_rwlock_tryrdlock.c +++ b/libc/nptl/pthread_rwlock_tryrdlock.c @@ -28,7 +28,7 @@ __pthread_rwlock_tryrdlock (rwlock) { int result = EBUSY; - lll_mutex_lock (rwlock->__data.__lock); + lll_lock (rwlock->__data.__lock, rwlock->__data.__shared); if (rwlock->__data.__writer == 0 && (rwlock->__data.__nr_writers_queued == 0 @@ -43,7 +43,7 @@ __pthread_rwlock_tryrdlock (rwlock) result = 0; } - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); return result; } diff --git a/libc/nptl/pthread_rwlock_trywrlock.c b/libc/nptl/pthread_rwlock_trywrlock.c index b754a1956..5111f9ca9 100644 --- a/libc/nptl/pthread_rwlock_trywrlock.c +++ b/libc/nptl/pthread_rwlock_trywrlock.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -28,7 +28,7 @@ __pthread_rwlock_trywrlock (rwlock) { int result = EBUSY; - lll_mutex_lock (rwlock->__data.__lock); + lll_lock (rwlock->__data.__lock, rwlock->__data.__shared); if (rwlock->__data.__writer == 0 && rwlock->__data.__nr_readers == 0) { @@ -36,7 +36,7 @@ __pthread_rwlock_trywrlock (rwlock) result = 0; } - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); return result; } diff --git a/libc/nptl/pthread_rwlock_unlock.c b/libc/nptl/pthread_rwlock_unlock.c index 9cae8b6c2..a7ef71a11 100644 --- a/libc/nptl/pthread_rwlock_unlock.c +++ b/libc/nptl/pthread_rwlock_unlock.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. @@ -27,7 +27,7 @@ int __pthread_rwlock_unlock (pthread_rwlock_t *rwlock) { - lll_mutex_lock (rwlock->__data.__lock); + lll_lock (rwlock->__data.__lock, rwlock->__data.__shared); if (rwlock->__data.__writer) rwlock->__data.__writer = 0; else @@ -37,19 +37,21 @@ __pthread_rwlock_unlock (pthread_rwlock_t *rwlock) if (rwlock->__data.__nr_writers_queued) { ++rwlock->__data.__writer_wakeup; - lll_mutex_unlock (rwlock->__data.__lock); - lll_futex_wake (&rwlock->__data.__writer_wakeup, 1); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); + lll_futex_wake (&rwlock->__data.__writer_wakeup, 1, + rwlock->__data.__shared); return 0; } else if (rwlock->__data.__nr_readers_queued) { ++rwlock->__data.__readers_wakeup; - lll_mutex_unlock (rwlock->__data.__lock); - lll_futex_wake (&rwlock->__data.__readers_wakeup, INT_MAX); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); + lll_futex_wake (&rwlock->__data.__readers_wakeup, INT_MAX, + rwlock->__data.__shared); return 0; } } - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); return 0; } diff --git a/libc/nptl/pthread_rwlock_wrlock.c b/libc/nptl/pthread_rwlock_wrlock.c index 822aeed79..64fe97012 100644 --- a/libc/nptl/pthread_rwlock_wrlock.c +++ b/libc/nptl/pthread_rwlock_wrlock.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. @@ -32,7 +32,7 @@ __pthread_rwlock_wrlock (rwlock) int result = 0; /* Make sure we are along. */ - lll_mutex_lock (rwlock->__data.__lock); + lll_lock (rwlock->__data.__lock, rwlock->__data.__shared); while (1) { @@ -65,20 +65,21 @@ __pthread_rwlock_wrlock (rwlock) int waitval = rwlock->__data.__writer_wakeup; /* Free the lock. */ - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); /* Wait for the writer or reader(s) to finish. */ - lll_futex_wait (&rwlock->__data.__writer_wakeup, waitval); + lll_futex_wait (&rwlock->__data.__writer_wakeup, waitval, + rwlock->__data.__shared); /* Get the lock. */ - lll_mutex_lock (rwlock->__data.__lock); + lll_lock (rwlock->__data.__lock, rwlock->__data.__shared); /* To start over again, remove the thread from the writer list. */ --rwlock->__data.__nr_writers_queued; } /* We are done, free the lock. */ - lll_mutex_unlock (rwlock->__data.__lock); + lll_unlock (rwlock->__data.__lock, rwlock->__data.__shared); return result; } diff --git a/libc/nptl/pthread_setschedparam.c b/libc/nptl/pthread_setschedparam.c index 8129dec82..1b0062fac 100644 --- a/libc/nptl/pthread_setschedparam.c +++ b/libc/nptl/pthread_setschedparam.c @@ -39,7 +39,7 @@ __pthread_setschedparam (threadid, policy, param) int result = 0; - lll_lock (pd->lock); + lll_lock (pd->lock, LLL_PRIVATE); struct sched_param p; const struct sched_param *orig_param = param; @@ -67,7 +67,7 @@ __pthread_setschedparam (threadid, policy, param) pd->flags |= ATTR_FLAG_SCHED_SET | ATTR_FLAG_POLICY_SET; } - lll_unlock (pd->lock); + lll_unlock (pd->lock, LLL_PRIVATE); return result; } diff --git a/libc/nptl/pthread_setschedprio.c b/libc/nptl/pthread_setschedprio.c index 59462ec2a..c99f7cec0 100644 --- a/libc/nptl/pthread_setschedprio.c +++ b/libc/nptl/pthread_setschedprio.c @@ -41,7 +41,7 @@ pthread_setschedprio (threadid, prio) struct sched_param param; param.sched_priority = prio; - lll_lock (pd->lock); + lll_lock (pd->lock, LLL_PRIVATE); /* If the thread should have higher priority because of some PTHREAD_PRIO_PROTECT mutexes it holds, adjust the priority. */ @@ -60,7 +60,7 @@ pthread_setschedprio (threadid, prio) pd->flags |= ATTR_FLAG_SCHED_SET; } - lll_unlock (pd->lock); + lll_unlock (pd->lock, LLL_PRIVATE); return result; } diff --git a/libc/nptl/sem_close.c b/libc/nptl/sem_close.c index 279522d08..9bde63d98 100644 --- a/libc/nptl/sem_close.c +++ b/libc/nptl/sem_close.c @@ -47,7 +47,7 @@ sem_close (sem) int result = 0; /* Get the lock. */ - lll_lock (__sem_mappings_lock); + lll_lock (__sem_mappings_lock, LLL_PRIVATE); /* Locate the entry for the mapping the caller provided. */ rec = NULL; @@ -75,7 +75,7 @@ sem_close (sem) } /* Release the lock. */ - lll_unlock (__sem_mappings_lock); + lll_unlock (__sem_mappings_lock, LLL_PRIVATE); return result; } diff --git a/libc/nptl/sem_open.c b/libc/nptl/sem_open.c index 27d308e92..e58dde947 100644 --- a/libc/nptl/sem_open.c +++ b/libc/nptl/sem_open.c @@ -147,7 +147,7 @@ __sem_search (const void *a, const void *b) void *__sem_mappings attribute_hidden; /* Lock to protect the search tree. */ -lll_lock_t __sem_mappings_lock attribute_hidden = LLL_LOCK_INITIALIZER; +int __sem_mappings_lock attribute_hidden = LLL_LOCK_INITIALIZER; /* Search for existing mapping and if possible add the one provided. */ @@ -161,7 +161,7 @@ check_add_mapping (const char *name, size_t namelen, int fd, sem_t *existing) if (__fxstat64 (_STAT_VER, fd, &st) == 0) { /* Get the lock. */ - lll_lock (__sem_mappings_lock); + lll_lock (__sem_mappings_lock, LLL_PRIVATE); /* Search for an existing mapping given the information we have. */ struct inuse_sem *fake; @@ -210,7 +210,7 @@ check_add_mapping (const char *name, size_t namelen, int fd, sem_t *existing) } /* Release the lock. */ - lll_unlock (__sem_mappings_lock); + lll_unlock (__sem_mappings_lock, LLL_PRIVATE); } if (result != existing && existing != SEM_FAILED && existing != MAP_FAILED) diff --git a/libc/nptl/semaphoreP.h b/libc/nptl/semaphoreP.h index 965905990..7d6fd2525 100644 --- a/libc/nptl/semaphoreP.h +++ b/libc/nptl/semaphoreP.h @@ -48,7 +48,7 @@ extern pthread_once_t __namedsem_once attribute_hidden; extern void *__sem_mappings attribute_hidden; /* Lock to protect the search tree. */ -extern lll_lock_t __sem_mappings_lock attribute_hidden; +extern int __sem_mappings_lock attribute_hidden; /* Initializer for mountpoint. */ diff --git a/libc/nptl/sysdeps/alpha/tls.h b/libc/nptl/sysdeps/alpha/tls.h index 64ddcd5c0..e77b1ffca 100644 --- a/libc/nptl/sysdeps/alpha/tls.h +++ b/libc/nptl/sysdeps/alpha/tls.h @@ -131,7 +131,7 @@ typedef struct = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ THREAD_GSCOPE_FLAG_UNUSED); \ if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ } \ while (0) #define THREAD_GSCOPE_SET_FLAG() \ diff --git a/libc/nptl/sysdeps/i386/tls.h b/libc/nptl/sysdeps/i386/tls.h index 7d3c5f97a..b5127420c 100644 --- a/libc/nptl/sysdeps/i386/tls.h +++ b/libc/nptl/sysdeps/i386/tls.h @@ -449,7 +449,7 @@ union user_desc_init : "i" (offsetof (struct pthread, header.gscope_flag)), \ "0" (THREAD_GSCOPE_FLAG_UNUSED)); \ if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ } \ while (0) #define THREAD_GSCOPE_SET_FLAG() \ diff --git a/libc/nptl/sysdeps/ia64/tls.h b/libc/nptl/sysdeps/ia64/tls.h index a144c28b0..936ff01a7 100644 --- a/libc/nptl/sysdeps/ia64/tls.h +++ b/libc/nptl/sysdeps/ia64/tls.h @@ -173,7 +173,7 @@ register struct pthread *__thread_self __asm__("r13"); = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ THREAD_GSCOPE_FLAG_UNUSED); \ if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ } \ while (0) #define THREAD_GSCOPE_SET_FLAG() \ diff --git a/libc/nptl/sysdeps/powerpc/tls.h b/libc/nptl/sysdeps/powerpc/tls.h index bd9c99e06..0f4d5290d 100644 --- a/libc/nptl/sysdeps/powerpc/tls.h +++ b/libc/nptl/sysdeps/powerpc/tls.h @@ -190,7 +190,7 @@ register void *__thread_register __asm__ ("r13"); = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ THREAD_GSCOPE_FLAG_UNUSED); \ if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ } \ while (0) #define THREAD_GSCOPE_SET_FLAG() \ diff --git a/libc/nptl/sysdeps/pthread/aio_misc.h b/libc/nptl/sysdeps/pthread/aio_misc.h index c5a11f455..f36825e06 100644 --- a/libc/nptl/sysdeps/pthread/aio_misc.h +++ b/libc/nptl/sysdeps/pthread/aio_misc.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 Free Software Foundation, Inc. +/* Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -30,7 +30,7 @@ #define AIO_MISC_NOTIFY(waitlist) \ do { \ if (*waitlist->counterp > 0 && --*waitlist->counterp == 0) \ - lll_futex_wake (waitlist->counterp, 1); \ + lll_futex_wake (waitlist->counterp, 1, LLL_PRIVATE); \ } while (0) #define AIO_MISC_WAIT(result, futex, timeout, cancel) \ @@ -49,7 +49,8 @@ int status; \ do \ { \ - status = lll_futex_timed_wait (futexaddr, oldval, timeout); \ + status = lll_futex_timed_wait (futexaddr, oldval, timeout, \ + LLL_PRIVATE); \ if (status != -EWOULDBLOCK) \ break; \ \ diff --git a/libc/nptl/sysdeps/pthread/bits/libc-lock.h b/libc/nptl/sysdeps/pthread/bits/libc-lock.h index 0c8c0ada8..45eba0613 100644 --- a/libc/nptl/sysdeps/pthread/bits/libc-lock.h +++ b/libc/nptl/sysdeps/pthread/bits/libc-lock.h @@ -228,7 +228,7 @@ typedef pthread_key_t __libc_key_t; /* Lock the named lock variable. */ #if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread) # define __libc_lock_lock(NAME) \ - ({ lll_lock (NAME); 0; }) + ({ lll_lock (NAME, LLL_PRIVATE); 0; }) #else # define __libc_lock_lock(NAME) \ __libc_maybe_call (__pthread_mutex_lock, (&(NAME)), 0) @@ -245,7 +245,7 @@ typedef pthread_key_t __libc_key_t; void *self = THREAD_SELF; \ if ((NAME).owner != self) \ { \ - lll_lock ((NAME).lock); \ + lll_lock ((NAME).lock, LLL_PRIVATE); \ (NAME).owner = self; \ } \ ++(NAME).cnt; \ @@ -299,7 +299,7 @@ typedef pthread_key_t __libc_key_t; /* Unlock the named lock variable. */ #if defined _LIBC && (!defined NOT_IN_libc || defined IS_IN_libpthread) # define __libc_lock_unlock(NAME) \ - lll_unlock (NAME) + lll_unlock (NAME, LLL_PRIVATE) #else # define __libc_lock_unlock(NAME) \ __libc_maybe_call (__pthread_mutex_unlock, (&(NAME)), 0) @@ -315,7 +315,7 @@ typedef pthread_key_t __libc_key_t; if (--(NAME).cnt == 0) \ { \ (NAME).owner = NULL; \ - lll_unlock ((NAME).lock); \ + lll_unlock ((NAME).lock, LLL_PRIVATE); \ } \ } while (0) #else diff --git a/libc/nptl/sysdeps/pthread/bits/stdio-lock.h b/libc/nptl/sysdeps/pthread/bits/stdio-lock.h index cd64bc37e..b8efdd8d5 100644 --- a/libc/nptl/sysdeps/pthread/bits/stdio-lock.h +++ b/libc/nptl/sysdeps/pthread/bits/stdio-lock.h @@ -1,5 +1,5 @@ /* Thread package specific definitions of stream lock type. NPTL version. - Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -42,7 +42,7 @@ typedef struct { int lock; int cnt; void *owner; } _IO_lock_t; void *__self = THREAD_SELF; \ if ((_name).owner != __self) \ { \ - lll_lock ((_name).lock); \ + lll_lock ((_name).lock, LLL_PRIVATE); \ (_name).owner = __self; \ } \ ++(_name).cnt; \ @@ -72,7 +72,7 @@ typedef struct { int lock; int cnt; void *owner; } _IO_lock_t; if (--(_name).cnt == 0) \ { \ (_name).owner = NULL; \ - lll_unlock ((_name).lock); \ + lll_unlock ((_name).lock, LLL_PRIVATE); \ } \ } while (0) @@ -94,9 +94,15 @@ typedef struct { int lock; int cnt; void *owner; } _IO_lock_t; __attribute__((cleanup (_IO_acquire_lock_fct))) \ = (_fp); \ _IO_flockfile (_IO_acquire_lock_file); - +# define _IO_acquire_lock_clear_flags2(_fp) \ + do { \ + _IO_FILE *_IO_acquire_lock_file \ + __attribute__((cleanup (_IO_acquire_lock_clear_flags2_fct))) \ + = (_fp); \ + _IO_flockfile (_IO_acquire_lock_file); # else # define _IO_acquire_lock(_fp) _IO_acquire_lock_needs_exceptions_enabled +# define _IO_acquire_lock_clear_flags2(_fp) _IO_acquire_lock (_fp) # endif # define _IO_release_lock(_fp) ; } while (0) diff --git a/libc/nptl/sysdeps/pthread/createthread.c b/libc/nptl/sysdeps/pthread/createthread.c index 88658a16e..66571b217 100644 --- a/libc/nptl/sysdeps/pthread/createthread.c +++ b/libc/nptl/sysdeps/pthread/createthread.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -60,7 +60,7 @@ do_clone (struct pthread *pd, const struct pthread_attr *attr, /* We Make sure the thread does not run far by forcing it to get a lock. We lock it here too so that the new thread cannot continue until we tell it to. */ - lll_lock (pd->lock); + lll_lock (pd->lock, LLL_PRIVATE); /* One more thread. We cannot have the thread do this itself, since it might exist but not have been scheduled yet by the time we've returned @@ -223,7 +223,7 @@ create_thread (struct pthread *pd, const struct pthread_attr *attr, __nptl_create_event (); /* And finally restart the new thread. */ - lll_unlock (pd->lock); + lll_unlock (pd->lock, LLL_PRIVATE); } return res; @@ -250,7 +250,7 @@ create_thread (struct pthread *pd, const struct pthread_attr *attr, if (res == 0 && stopped) /* And finally restart the new thread. */ - lll_unlock (pd->lock); + lll_unlock (pd->lock, LLL_PRIVATE); return res; } diff --git a/libc/nptl/sysdeps/pthread/gai_misc.h b/libc/nptl/sysdeps/pthread/gai_misc.h index 9f6a73dad..0a2686cb2 100644 --- a/libc/nptl/sysdeps/pthread/gai_misc.h +++ b/libc/nptl/sysdeps/pthread/gai_misc.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 Free Software Foundation, Inc. +/* Copyright (C) 2006, 2007 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,7 +31,7 @@ #define GAI_MISC_NOTIFY(waitlist) \ do { \ if (*waitlist->counterp > 0 && --*waitlist->counterp == 0) \ - lll_futex_wake (waitlist->counterp, 1); \ + lll_futex_wake (waitlist->counterp, 1, LLL_PRIVATE); \ } while (0) #define GAI_MISC_WAIT(result, futex, timeout, cancel) \ @@ -50,7 +50,8 @@ int status; \ do \ { \ - status = lll_futex_timed_wait (futexaddr, oldval, timeout); \ + status = lll_futex_timed_wait (futexaddr, oldval, timeout, \ + LLL_PRIVATE); \ if (status != -EWOULDBLOCK) \ break; \ \ diff --git a/libc/nptl/sysdeps/pthread/pt-initfini.c b/libc/nptl/sysdeps/pthread/pt-initfini.c index b4346efae..f5d4df886 100644 --- a/libc/nptl/sysdeps/pthread/pt-initfini.c +++ b/libc/nptl/sysdeps/pthread/pt-initfini.c @@ -77,7 +77,7 @@ call_initialize_minimal (void) } SECTION (".init"); -extern void _init (void); +extern void __attribute__ ((section (".init"))) _init (void); void _init (void) { @@ -98,7 +98,7 @@ asm ("\n/*@_init_EPILOG_ENDS*/"); asm ("\n/*@_fini_PROLOG_BEGINS*/"); SECTION (".fini"); -extern void _fini (void); +extern void __attribute__ ((section (".fini"))) _fini (void); void _fini (void) { diff --git a/libc/nptl/sysdeps/s390/tls.h b/libc/nptl/sysdeps/s390/tls.h index de8a81bd0..3be459e32 100644 --- a/libc/nptl/sysdeps/s390/tls.h +++ b/libc/nptl/sysdeps/s390/tls.h @@ -183,7 +183,7 @@ typedef struct = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ THREAD_GSCOPE_FLAG_UNUSED); \ if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ } \ while (0) #define THREAD_GSCOPE_SET_FLAG() \ diff --git a/libc/nptl/sysdeps/sh/tcb-offsets.sym b/libc/nptl/sysdeps/sh/tcb-offsets.sym index 4ad866335..753b72b2d 100644 --- a/libc/nptl/sysdeps/sh/tcb-offsets.sym +++ b/libc/nptl/sysdeps/sh/tcb-offsets.sym @@ -10,3 +10,6 @@ MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) TLS_PRE_TCB_SIZE sizeof (struct pthread) MUTEX_FUTEX offsetof (pthread_mutex_t, __data.__lock) POINTER_GUARD offsetof (tcbhead_t, pointer_guard) +#ifndef __ASSUME_PRIVATE_FUTEX +PRIVATE_FUTEX offsetof (struct pthread, header.private_futex) +#endif diff --git a/libc/nptl/sysdeps/sh/tls.h b/libc/nptl/sysdeps/sh/tls.h index 6d6eff665..a2d4d565f 100644 --- a/libc/nptl/sysdeps/sh/tls.h +++ b/libc/nptl/sysdeps/sh/tls.h @@ -26,6 +26,10 @@ # include <stdbool.h> # include <stddef.h> # include <stdint.h> +# include <stdlib.h> +# include <list.h> +# include <sysdep.h> +# include <kernel-features.h> /* Type for the dtv. */ typedef union dtv @@ -160,7 +164,7 @@ typedef struct = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ THREAD_GSCOPE_FLAG_UNUSED); \ if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ } \ while (0) #define THREAD_GSCOPE_SET_FLAG() \ diff --git a/libc/nptl/sysdeps/sparc/tls.h b/libc/nptl/sysdeps/sparc/tls.h index 60e52fd4e..dc1b3868c 100644 --- a/libc/nptl/sysdeps/sparc/tls.h +++ b/libc/nptl/sysdeps/sparc/tls.h @@ -27,6 +27,7 @@ # include <stdint.h> # include <stdlib.h> # include <list.h> +# include <kernel-features.h> /* Type for the dtv. */ typedef union dtv @@ -46,9 +47,18 @@ typedef struct dtv_t *dtv; void *self; int multiple_threads; +#if __WORDSIZE == 64 + int gscope_flag; +#endif uintptr_t sysinfo; uintptr_t stack_guard; uintptr_t pointer_guard; +#if __WORDSIZE != 64 + int gscope_flag; +#endif +#ifndef __ASSUME_PRIVATE_FUTEX + int private_futex; +#endif } tcbhead_t; #else /* __ASSEMBLER__ */ @@ -151,7 +161,7 @@ register struct pthread *__thread_self __asm__("%g7"); = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ THREAD_GSCOPE_FLAG_UNUSED); \ if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ } \ while (0) #define THREAD_GSCOPE_SET_FLAG() \ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h b/libc/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h index 41a54d4b0..41c0be197 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h @@ -1,5 +1,5 @@ /* Machine-specific pthread type layouts. Alpha version. - Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005, 2006, 2007 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 @@ -126,9 +126,9 @@ typedef union unsigned int __nr_readers_queued; unsigned int __nr_writers_queued; int __writer; - int __pad1; + int __shared; + unsigned long int __pad1; unsigned long int __pad2; - unsigned long int __pad3; /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ unsigned int __flags; diff --git a/libc/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h index 04ac00640..93188234c 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h @@ -24,6 +24,7 @@ #include <bits/pthreadtypes.h> #include <atomic.h> #include <sysdep.h> +#include <kernel-features.h> #define __NR_futex 394 @@ -36,65 +37,91 @@ #define FUTEX_LOCK_PI 6 #define FUTEX_UNLOCK_PI 7 #define FUTEX_TRYLOCK_PI 8 - -/* Initializer for compatibility lock. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) - -#define lll_futex_wait(futexp, val) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT, (val), 0); \ - INTERNAL_SYSCALL_ERROR_P (__ret, __err)? -__ret : __ret; \ - }) - -#define lll_futex_timed_wait(futexp, val, timespec) \ +#define FUTEX_PRIVATE_FLAG 128 + +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ + & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) +# endif +#endif + + +#define lll_futex_wait(futexp, val, private) \ + lll_futex_timed_wait (futexp, val, NULL, private) + +#define lll_futex_timed_wait(futexp, val, timespec, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT, (val), (timespec)); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAIT, private), \ + (val), (timespec)); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err)? -__ret : __ret; \ }) -#define lll_futex_wake(futexp, nr) \ +#define lll_futex_wake(futexp, nr, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAKE, (nr), 0); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAKE, private), \ + (nr), 0); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err)? -__ret : __ret; \ }) -#define lll_robust_mutex_dead(futexv) \ +#define lll_robust_dead(futexv, private) \ do \ { \ int *__futexp = &(futexv); \ atomic_or (__futexp, FUTEX_OWNER_DIED); \ - lll_futex_wake (__futexp, 1); \ + lll_futex_wake (__futexp, 1, private); \ } \ while (0) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val) \ +#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, \ - (futexp), FUTEX_CMP_REQUEUE, (nr_wake), \ - (nr_move), (mutex), (val)); \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ + (nr_wake), (nr_move), (mutex), (val)); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ }) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2) \ +#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, \ - (futexp), FUTEX_WAKE_OP, (nr_wake), \ - (nr_wake2), (futexp2), \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_WAKE_OP, private), \ + (nr_wake), (nr_wake2), (futexp2), \ FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ }) @@ -103,159 +130,140 @@ static inline int __attribute__((always_inline)) -__lll_mutex_trylock(int *futex) +__lll_trylock(int *futex) { return atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0; } -#define lll_mutex_trylock(lock) __lll_mutex_trylock (&(lock)) +#define lll_trylock(lock) __lll_trylock (&(lock)) static inline int __attribute__((always_inline)) -__lll_mutex_cond_trylock(int *futex) +__lll_cond_trylock(int *futex) { return atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0; } -#define lll_mutex_cond_trylock(lock) __lll_mutex_cond_trylock (&(lock)) +#define lll_cond_trylock(lock) __lll_cond_trylock (&(lock)) static inline int __attribute__((always_inline)) -__lll_robust_mutex_trylock(int *futex, int id) +__lll_robust_trylock(int *futex, int id) { return atomic_compare_and_exchange_val_acq (futex, id, 0) != 0; } -#define lll_robust_mutex_trylock(lock, id) \ - __lll_robust_mutex_trylock (&(lock), id) +#define lll_robust_trylock(lock, id) \ + __lll_robust_trylock (&(lock), id) -extern void __lll_lock_wait (int *futex) attribute_hidden; -extern int __lll_robust_lock_wait (int *futex) attribute_hidden; +extern void __lll_lock_wait_private (int *futex) attribute_hidden; +extern void __lll_lock_wait (int *futex, int private) attribute_hidden; +extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; static inline void __attribute__((always_inline)) -__lll_mutex_lock(int *futex) +__lll_lock(int *futex, int private) { if (atomic_compare_and_exchange_bool_acq (futex, 1, 0) != 0) - __lll_lock_wait (futex); + { + if (__builtin_constant_p (private) && private == LLL_PRIVATE) + __lll_lock_wait_private (futex); + else + __lll_lock_wait (futex, private); + } } -#define lll_mutex_lock(futex) __lll_mutex_lock (&(futex)) +#define lll_lock(futex, private) __lll_lock (&(futex), private) static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_lock (int *futex, int id) +__lll_robust_lock (int *futex, int id, int private) { int result = 0; if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_lock_wait (futex); + result = __lll_robust_lock_wait (futex, private); return result; } -#define lll_robust_mutex_lock(futex, id) \ - __lll_robust_mutex_lock (&(futex), id) +#define lll_robust_lock(futex, id, private) \ + __lll_robust_lock (&(futex), id, private) static inline void __attribute__ ((always_inline)) -__lll_mutex_cond_lock (int *futex) +__lll_cond_lock (int *futex, int private) { if (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0) - __lll_lock_wait (futex); + __lll_lock_wait (futex, private); } -#define lll_mutex_cond_lock(futex) __lll_mutex_cond_lock (&(futex)) +#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) -#define lll_robust_mutex_cond_lock(futex, id) \ - __lll_robust_mutex_lock (&(futex), (id) | FUTEX_WAITERS) +#define lll_robust_cond_lock(futex, id, private) \ + __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private) -extern int __lll_timedlock_wait (int *futex, const struct timespec *) - attribute_hidden; -extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *) - attribute_hidden; +extern int __lll_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; +extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; static inline int __attribute__ ((always_inline)) -__lll_mutex_timedlock (int *futex, const struct timespec *abstime) +__lll_timedlock (int *futex, const struct timespec *abstime, int private) { int result = 0; if (atomic_compare_and_exchange_bool_acq (futex, 1, 0) != 0) - result = __lll_timedlock_wait (futex, abstime); + result = __lll_timedlock_wait (futex, abstime, private); return result; } -#define lll_mutex_timedlock(futex, abstime) \ - __lll_mutex_timedlock (&(futex), abstime) +#define lll_timedlock(futex, abstime, private) \ + __lll_timedlock (&(futex), abstime, private) static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime, - int id) +__lll_robust_timedlock (int *futex, const struct timespec *abstime, + int id, int private) { int result = 0; if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_timedlock_wait (futex, abstime); + result = __lll_robust_timedlock_wait (futex, abstime, private); return result; } -#define lll_robust_mutex_timedlock(futex, abstime, id) \ - __lll_robust_mutex_timedlock (&(futex), abstime, id) +#define lll_robust_timedlock(futex, abstime, id, private) \ + __lll_robust_timedlock (&(futex), abstime, id, private) -static inline void __attribute__ ((always_inline)) -__lll_mutex_unlock (int *futex) -{ - int val = atomic_exchange_rel (futex, 0); - if (__builtin_expect (val > 1, 0)) - lll_futex_wake (futex, 1); -} -#define lll_mutex_unlock(futex) __lll_mutex_unlock(&(futex)) +#define __lll_unlock(futex, private) \ + (void) \ + ({ int *__futex = (futex); \ + int __oldval = atomic_exchange_rel (__futex, 0); \ + if (__builtin_expect (__oldval > 1, 0)) \ + lll_futex_wake (__futex, 1, private); \ + }) +#define lll_unlock(futex, private) __lll_unlock(&(futex), private) -static inline void __attribute__ ((always_inline)) -__lll_robust_mutex_unlock (int *futex, int mask) -{ - int val = atomic_exchange_rel (futex, 0); - if (__builtin_expect (val & mask, 0)) - lll_futex_wake (futex, 1); -} -#define lll_robust_mutex_unlock(futex) \ - __lll_robust_mutex_unlock(&(futex), FUTEX_WAITERS) +#define __lll_robust_unlock(futex, private) \ + (void) \ + ({ int *__futex = (futex); \ + int __oldval = atomic_exchange_rel (__futex, 0); \ + if (__builtin_expect (__oldval & FUTEX_WAITERS, 0)) \ + lll_futex_wake (__futex, 1, private); \ + }) +#define lll_robust_unlock(futex, private) \ + __lll_robust_unlock(&(futex), private) -static inline void __attribute__ ((always_inline)) -__lll_mutex_unlock_force (int *futex) -{ - (void) atomic_exchange_rel (futex, 0); - lll_futex_wake (futex, 1); -} -#define lll_mutex_unlock_force(futex) __lll_mutex_unlock_force(&(futex)) - - -#define lll_mutex_islocked(futex) \ +#define lll_islocked(futex) \ (futex != 0) - -/* Our internal lock implementation is identical to the binary-compatible - mutex implementation. */ - -/* Type for lock object. */ -typedef int lll_lock_t; - /* Initializers for lock. */ #define LLL_LOCK_INITIALIZER (0) #define LLL_LOCK_INITIALIZER_LOCKED (1) -/* The states of a lock are: - 0 - untaken - 1 - taken by one user - >1 - taken by more users */ - -#define lll_trylock(lock) lll_mutex_trylock (lock) -#define lll_lock(lock) lll_mutex_lock (lock) -#define lll_unlock(lock) lll_mutex_unlock (lock) -#define lll_islocked(lock) lll_mutex_islocked (lock) /* The kernel notifies a process which uses CLONE_CLEARTID via futex wakeup when the clone terminates. The memory location contains the thread ID while the clone is running and is reset to zero afterwards. */ #define lll_wait_tid(tid) \ - do { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid); \ + do { \ + __typeof (tid) __tid; \ + while ((__tid = (tid)) != 0) \ + lll_futex_wait (&(tid), __tid, LLL_SHARED); \ } while (0) extern int __lll_timedwait_tid (int *, const struct timespec *) @@ -269,26 +277,4 @@ extern int __lll_timedwait_tid (int *, const struct timespec *) __res; \ }) - -/* Conditional variable handling. */ - -extern void __lll_cond_wait (pthread_cond_t *cond) - attribute_hidden; -extern int __lll_cond_timedwait (pthread_cond_t *cond, - const struct timespec *abstime) - attribute_hidden; -extern void __lll_cond_wake (pthread_cond_t *cond) - attribute_hidden; -extern void __lll_cond_broadcast (pthread_cond_t *cond) - attribute_hidden; - -#define lll_cond_wait(cond) \ - __lll_cond_wait (cond) -#define lll_cond_timedwait(cond, abstime) \ - __lll_cond_timedwait (cond, abstime) -#define lll_cond_wake(cond) \ - __lll_cond_wake (cond) -#define lll_cond_broadcast(cond) \ - __lll_cond_broadcast (cond) - #endif /* lowlevellock.h */ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/alpha/pthread_once.c b/libc/nptl/sysdeps/unix/sysv/linux/alpha/pthread_once.c index 79a3c47ae..0e7e9790d 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/alpha/pthread_once.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/alpha/pthread_once.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 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,7 +28,7 @@ clear_once_control (void *arg) pthread_once_t *once_control = (pthread_once_t *) arg; *once_control = 0; - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); } int @@ -72,7 +72,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) break; /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, oldval); + lll_futex_wait (once_control, oldval, LLL_PRIVATE); } /* This thread is the first here. Do the initialization. @@ -88,7 +88,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) atomic_increment (once_control); /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); return 0; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/fork.c b/libc/nptl/sysdeps/unix/sysv/linux/fork.c index 98bb237c0..1683de80f 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/fork.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/fork.c @@ -183,7 +183,7 @@ __libc_fork (void) } /* Initialize the fork lock. */ - __fork_lock = (lll_lock_t) LLL_LOCK_INITIALIZER; + __fork_lock = LLL_LOCK_INITIALIZER; } else { @@ -203,7 +203,7 @@ __libc_fork (void) if (atomic_decrement_and_test (&allp->handler->refcntr) && allp->handler->need_signal) - lll_futex_wake (allp->handler->refcntr, 1); + lll_futex_wake (allp->handler->refcntr, 1, LLL_PRIVATE); allp = allp->next; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/fork.h b/libc/nptl/sysdeps/unix/sysv/linux/fork.h index 6458977b9..032b68f08 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/fork.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/fork.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -26,7 +26,7 @@ extern unsigned long int __fork_generation attribute_hidden; extern unsigned long int *__fork_generation_pointer attribute_hidden; /* Lock to protect allocation and deallocation of fork handlers. */ -extern lll_lock_t __fork_lock attribute_hidden; +extern int __fork_lock attribute_hidden; /* Elements of the fork handler lists. */ struct fork_handler diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S index 830f62857..ce8ad27aa 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S @@ -17,19 +17,4 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <kernel-features.h> - -/* All locks in libc are private. Use the kernel feature if possible. */ -#define FUTEX_PRIVATE_FLAG 128 -#ifdef __ASSUME_PRIVATE_FUTEX -# define FUTEX_WAIT (0 | FUTEX_PRIVATE_FLAG) -# define FUTEX_WAKE (1 | FUTEX_PRIVATE_FLAG) -#else -# define LOAD_FUTEX_WAIT(reg) \ - movl %gs:PRIVATE_FUTEX, reg -# define LOAD_FUTEX_WAKE(reg) \ - movl %gs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAKE, reg -#endif - #include "lowlevellock.S" diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S index cfcc7dafc..745ab9123 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S @@ -19,42 +19,53 @@ #include <sysdep.h> #include <pthread-errnos.h> +#include <kernel-features.h> +#include <lowlevellock.h> .text -#ifndef LOCK -# ifdef UP -# define LOCK +#ifdef __ASSUME_PRIVATE_FUTEX +# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ + movl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg +# define LOAD_PRIVATE_FUTEX_WAKE(reg) \ + movl $(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg +# define LOAD_FUTEX_WAIT(reg) \ + xorl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg +# define LOAD_FUTEX_WAKE(reg) \ + xorl $(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg +#else +# if FUTEX_WAIT == 0 +# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ + movl %gs:PRIVATE_FUTEX, reg # else -# define LOCK lock +# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ + movl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAIT, reg # endif -#endif - -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#ifndef FUTEX_WAIT -# define FUTEX_WAIT 0 -# define FUTEX_WAKE 1 -#endif - -#ifndef LOAD_FUTEX_WAIT +# define LOAD_PRIVATE_FUTEX_WAKE(reg) \ + movl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAKE, reg # if FUTEX_WAIT == 0 # define LOAD_FUTEX_WAIT(reg) \ - xorl reg, reg + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %gs:PRIVATE_FUTEX, reg # else # define LOAD_FUTEX_WAIT(reg) \ - movl $FUTEX_WAIT, reg + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAIT, reg # endif # define LOAD_FUTEX_WAKE(reg) \ - movl $FUTEX_WAKE, reg + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAKE, reg #endif - - .globl __lll_mutex_lock_wait - .type __lll_mutex_lock_wait,@function - .hidden __lll_mutex_lock_wait + .globl __lll_lock_wait_private + .type __lll_lock_wait_private,@function + .hidden __lll_lock_wait_private .align 16 -__lll_mutex_lock_wait: +__lll_lock_wait_private: cfi_startproc pushl %edx cfi_adjust_cfa_offset(4) @@ -69,7 +80,7 @@ __lll_mutex_lock_wait: movl $2, %edx movl %ecx, %ebx xorl %esi, %esi /* No timeout. */ - LOAD_FUTEX_WAIT (%ecx) + LOAD_PRIVATE_FUTEX_WAIT (%ecx) cmpl %edx, %eax /* NB: %edx == 2 */ jne 2f @@ -94,15 +105,60 @@ __lll_mutex_lock_wait: cfi_restore(%edx) ret cfi_endproc - .size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait - + .size __lll_lock_wait_private,.-__lll_lock_wait_private #ifdef NOT_IN_libc - .globl __lll_mutex_timedlock_wait - .type __lll_mutex_timedlock_wait,@function - .hidden __lll_mutex_timedlock_wait + .globl __lll_lock_wait + .type __lll_lock_wait,@function + .hidden __lll_lock_wait .align 16 -__lll_mutex_timedlock_wait: +__lll_lock_wait: + cfi_startproc + pushl %edx + cfi_adjust_cfa_offset(4) + pushl %ebx + cfi_adjust_cfa_offset(4) + pushl %esi + cfi_adjust_cfa_offset(4) + cfi_offset(%edx, -8) + cfi_offset(%ebx, -12) + cfi_offset(%esi, -16) + + movl %edx, %ebx + movl $2, %edx + xorl %esi, %esi /* No timeout. */ + LOAD_FUTEX_WAIT (%ecx) + + cmpl %edx, %eax /* NB: %edx == 2 */ + jne 2f + +1: movl $SYS_futex, %eax + ENTER_KERNEL + +2: movl %edx, %eax + xchgl %eax, (%ebx) /* NB: lock is implied */ + + testl %eax, %eax + jnz 1b + + popl %esi + cfi_adjust_cfa_offset(-4) + cfi_restore(%esi) + popl %ebx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ebx) + popl %edx + cfi_adjust_cfa_offset(-4) + cfi_restore(%edx) + ret + cfi_endproc + .size __lll_lock_wait,.-__lll_lock_wait + + .globl __lll_timedlock_wait + .type __lll_timedlock_wait,@function + .hidden __lll_timedlock_wait + .align 16 +__lll_timedlock_wait: cfi_startproc /* Check for a valid timeout value. */ cmpl $1000000000, 4(%edx) @@ -132,7 +188,7 @@ __lll_mutex_timedlock_wait: /* Get current time. */ movl %esp, %ebx xorl %ecx, %ecx - movl $SYS_gettimeofday, %eax + movl $__NR_gettimeofday, %eax ENTER_KERNEL /* Compute relative timeout. */ @@ -165,6 +221,7 @@ __lll_mutex_timedlock_wait: /* Futex call. */ movl %esp, %esi + movl 16(%esp), %ecx LOAD_FUTEX_WAIT (%ecx) movl $SYS_futex, %eax ENTER_KERNEL @@ -215,15 +272,51 @@ __lll_mutex_timedlock_wait: 5: movl $ETIMEDOUT, %eax jmp 6b cfi_endproc - .size __lll_mutex_timedlock_wait,.-__lll_mutex_timedlock_wait + .size __lll_timedlock_wait,.-__lll_timedlock_wait #endif + .globl __lll_unlock_wake_private + .type __lll_unlock_wake_private,@function + .hidden __lll_unlock_wake_private + .align 16 +__lll_unlock_wake_private: + cfi_startproc + pushl %ebx + cfi_adjust_cfa_offset(4) + pushl %ecx + cfi_adjust_cfa_offset(4) + pushl %edx + cfi_adjust_cfa_offset(4) + cfi_offset(%ebx, -8) + cfi_offset(%ecx, -12) + cfi_offset(%edx, -16) + + movl %eax, %ebx + movl $0, (%eax) + LOAD_PRIVATE_FUTEX_WAKE (%ecx) + movl $1, %edx /* Wake one thread. */ + movl $SYS_futex, %eax + ENTER_KERNEL + + popl %edx + cfi_adjust_cfa_offset(-4) + cfi_restore(%edx) + popl %ecx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ecx) + popl %ebx + cfi_adjust_cfa_offset(-4) + cfi_restore(%ebx) + ret + cfi_endproc + .size __lll_unlock_wake_private,.-__lll_unlock_wake_private - .globl __lll_mutex_unlock_wake - .type __lll_mutex_unlock_wake,@function - .hidden __lll_mutex_unlock_wake +#ifdef NOT_IN_libc + .globl __lll_unlock_wake + .type __lll_unlock_wake,@function + .hidden __lll_unlock_wake .align 16 -__lll_mutex_unlock_wake: +__lll_unlock_wake: cfi_startproc pushl %ebx cfi_adjust_cfa_offset(4) @@ -253,10 +346,8 @@ __lll_mutex_unlock_wake: cfi_restore(%ebx) ret cfi_endproc - .size __lll_mutex_unlock_wake,.-__lll_mutex_unlock_wake + .size __lll_unlock_wake,.-__lll_unlock_wake - -#ifdef NOT_IN_libc .globl __lll_timedwait_tid .type __lll_timedwait_tid,@function .hidden __lll_timedwait_tid @@ -274,7 +365,7 @@ __lll_timedwait_tid: /* Get current time. */ 2: movl %esp, %ebx xorl %ecx, %ecx - movl $SYS_gettimeofday, %eax + movl $__NR_gettimeofday, %eax ENTER_KERNEL /* Compute relative timeout. */ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S index 73d8bc4cc..7c2e1d135 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -19,31 +19,36 @@ #include <sysdep.h> #include <pthread-errnos.h> +#include <lowlevellock.h> #include <lowlevelrobustlock.h> +#include <kernel-features.h> .text -#ifndef LOCK -# ifdef UP -# define LOCK -# else -# define LOCK lock -# endif -#endif - -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 #define FUTEX_WAITERS 0x80000000 #define FUTEX_OWNER_DIED 0x40000000 +#ifdef __ASSUME_PRIVATE_FUTEX +# define LOAD_FUTEX_WAIT(reg) \ + xorl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg +#else +# if FUTEX_WAIT == 0 +# define LOAD_FUTEX_WAIT(reg) \ + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %gs:PRIVATE_FUTEX, reg +# else +# define LOAD_FUTEX_WAIT(reg) \ + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %gs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAIT, reg +# endif +#endif - .globl __lll_robust_mutex_lock_wait - .type __lll_robust_mutex_lock_wait,@function - .hidden __lll_robust_mutex_lock_wait + .globl __lll_robust_lock_wait + .type __lll_robust_lock_wait,@function + .hidden __lll_robust_lock_wait .align 16 -__lll_robust_mutex_lock_wait: +__lll_robust_lock_wait: cfi_startproc pushl %edx cfi_adjust_cfa_offset(4) @@ -55,9 +60,9 @@ __lll_robust_mutex_lock_wait: cfi_offset(%ebx, -12) cfi_offset(%esi, -16) - movl %ecx, %ebx + movl %edx, %ebx xorl %esi, %esi /* No timeout. */ - xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */ + LOAD_FUTEX_WAIT (%ecx) 4: movl %eax, %edx orl $FUTEX_WAITERS, %edx @@ -98,14 +103,14 @@ __lll_robust_mutex_lock_wait: cfi_restore(%edx) ret cfi_endproc - .size __lll_robust_mutex_lock_wait,.-__lll_robust_mutex_lock_wait + .size __lll_robust_lock_wait,.-__lll_robust_lock_wait - .globl __lll_robust_mutex_timedlock_wait - .type __lll_robust_mutex_timedlock_wait,@function - .hidden __lll_robust_mutex_timedlock_wait + .globl __lll_robust_timedlock_wait + .type __lll_robust_timedlock_wait,@function + .hidden __lll_robust_timedlock_wait .align 16 -__lll_robust_mutex_timedlock_wait: +__lll_robust_timedlock_wait: cfi_startproc /* Check for a valid timeout value. */ cmpl $1000000000, 4(%edx) @@ -136,7 +141,7 @@ __lll_robust_mutex_timedlock_wait: /* Get current time. */ movl %esp, %ebx xorl %ecx, %ecx - movl $SYS_gettimeofday, %eax + movl $__NR_gettimeofday, %eax ENTER_KERNEL /* Compute relative timeout. */ @@ -177,7 +182,8 @@ __lll_robust_mutex_timedlock_wait: 2: /* Futex call. */ movl %esp, %esi - xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */ + movl 20(%esp), %ecx + LOAD_FUTEX_WAIT (%ecx) movl $SYS_futex, %eax ENTER_KERNEL movl %eax, %ecx @@ -224,4 +230,4 @@ __lll_robust_mutex_timedlock_wait: 8: movl $ETIMEDOUT, %eax jmp 6b cfi_endproc - .size __lll_robust_mutex_timedlock_wait,.-__lll_robust_mutex_timedlock_wait + .size __lll_robust_timedlock_wait,.-__lll_robust_timedlock_wait diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S index 29857195f..77d252de8 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S @@ -18,19 +18,9 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelbarrier.h> -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif - - .text .globl pthread_barrier_wait @@ -152,19 +142,27 @@ pthread_barrier_wait: popl %ebx ret -1: leal MUTEX(%ebx), %ecx - call __lll_mutex_lock_wait +1: movl PRIVATE(%ebx), %ecx + leal MUTEX(%ebx), %edx + xorl $LLL_SHARED, %ecx + call __lll_lock_wait jmp 2b -4: leal MUTEX(%ebx), %eax - call __lll_mutex_unlock_wake +4: movl PRIVATE(%ebx), %ecx + leal MUTEX(%ebx), %eax + xorl $LLL_SHARED, %ecx + call __lll_unlock_wake jmp 5b -6: leal MUTEX(%ebx), %eax - call __lll_mutex_unlock_wake +6: movl PRIVATE(%ebx), %ecx + leal MUTEX(%ebx), %eax + xorl $LLL_SHARED, %ecx + call __lll_unlock_wake jmp 7b -9: leal MUTEX(%ebx), %eax - call __lll_mutex_unlock_wake +9: movl PRIVATE(%ebx), %ecx + leal MUTEX(%ebx), %eax + xorl $LLL_SHARED, %ecx + call __lll_unlock_wake jmp 10b .size pthread_barrier_wait,.-pthread_barrier_wait diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S index 56f7be824..776c47f6c 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -19,24 +19,11 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <kernel-features.h> #include <pthread-pi-defines.h> - -#ifdef UP -# define LOCK -#else -# define LOCK lock -#endif - -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_REQUEUE 3 -#define FUTEX_CMP_REQUEUE 4 - -#define EINVAL 22 - +#include <pthread-errnos.h> .text @@ -96,11 +83,18 @@ __pthread_cond_broadcast: je 9f /* XXX: The kernel so far doesn't support requeue to PI futex. */ - testl $PI_BIT, MUTEX_KIND(%edi) + /* XXX: The kernel only supports FUTEX_CMP_REQUEUE to the same + type of futex (private resp. shared). */ + testl $(PI_BIT | PS_BIT), MUTEX_KIND(%edi) jne 9f /* Wake up all threads. */ - movl $FUTEX_CMP_REQUEUE, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + movl $(FUTEX_CMP_REQUEUE|FUTEX_PRIVATE_FLAG), %ecx +#else + movl %gs:PRIVATE_FUTEX, %ecx + orl $FUTEX_CMP_REQUEUE, %ecx +#endif movl $SYS_futex, %eax movl $0x7fffffff, %esi movl $1, %edx @@ -141,26 +135,67 @@ __pthread_cond_broadcast: /* Initial locking failed. */ 1: #if cond_lock == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal cond_lock(%ebx), %ecx + leal cond_lock(%ebx), %edx +#endif +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx #endif - call __lll_mutex_lock_wait + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_lock_wait jmp 2b /* Unlock in loop requires waekup. */ 5: leal cond_lock-cond_futex(%ebx), %eax - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_futex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake jmp 6b /* Unlock in loop requires waekup. */ 7: leal cond_lock-cond_futex(%ebx), %eax - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_futex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake jmp 8b 9: /* The futex requeue functionality is not available. */ movl $0x7fffffff, %edx - movl $FUTEX_WAKE, %ecx +#if FUTEX_PRIVATE_FLAG > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_futex(%ebx) + sete %cl + subl $1, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + andl $FUTEX_PRIVATE_FLAG, %ecx +#else + andl %gs:PRIVATE_FUTEX, %ecx +#endif + addl $FUTEX_WAKE, %ecx movl $SYS_futex, %eax ENTER_KERNEL jmp 10b diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S index d0f931ff1..36a18036c 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -19,23 +19,10 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <kernel-features.h> - -#ifdef UP -# define LOCK -#else -# define LOCK lock -#endif - -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_WAKE_OP 5 - -#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) - -#define EINVAL 22 +#include <pthread-errnos.h> .text @@ -83,7 +70,18 @@ __pthread_cond_signal: /* Wake up one thread. */ pushl %esi pushl %ebp - movl $FUTEX_WAKE_OP, %ecx +#if FUTEX_PRIVATE_FLAG > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_futex(%ebx) + sete %cl + subl $1, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + andl $FUTEX_PRIVATE_FLAG, %ecx +#else + andl %gs:PRIVATE_FUTEX, %ecx +#endif + addl $FUTEX_WAKE_OP, %ecx movl $SYS_futex, %eax movl $1, %edx movl $1, %esi @@ -105,7 +103,9 @@ __pthread_cond_signal: popl %ebx ret -7: movl $FUTEX_WAKE, %ecx +7: /* %ecx should be either FUTEX_WAKE_OP or + FUTEX_WAKE_OP|FUTEX_PRIVATE_FLAG from the previous syscall. */ + xorl $(FUTEX_WAKE ^ FUTEX_WAKE_OP), %ecx movl $SYS_futex, %eax /* %edx should be 1 already from $FUTEX_WAKE_OP syscall. movl $1, %edx */ @@ -119,17 +119,37 @@ __pthread_cond_signal: /* Unlock in loop requires wakeup. */ 5: movl %edi, %eax - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_futex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake jmp 6b /* Initial locking failed. */ 1: #if cond_lock == 0 - movl %edi, %ecx + movl %edi, %edx #else - leal cond_lock(%edi), %ecx + leal cond_lock(%edi), %edx +#endif +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%edi) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx #endif - call __lll_mutex_lock_wait + call __lll_lock_wait jmp 2b .size __pthread_cond_signal, .-__pthread_cond_signal diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S index 93f4d56b3..83f8db25b 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S @@ -19,19 +19,10 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <pthread-errnos.h> - -#ifdef UP -# define LOCK -#else -# define LOCK lock -#endif - -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 +#include <kernel-features.h> .text @@ -127,7 +118,7 @@ __pthread_cond_timedwait: /* Get the current time. */ leal 4(%esp), %ebx xorl %ecx, %ecx - movl $SYS_gettimeofday, %eax + movl $__NR_gettimeofday, %eax ENTER_KERNEL movl %edx, %ebx @@ -167,7 +158,20 @@ __pthread_cond_timedwait: movl %eax, (%esp) leal 4(%esp), %esi - xorl %ecx, %ecx /* movl $FUTEX_WAIT, %ecx */ +#if FUTEX_PRIVATE_FLAG > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + sete %cl + subl $1, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + andl $FUTEX_PRIVATE_FLAG, %ecx +#else + andl %gs:PRIVATE_FUTEX, %ecx +#endif +#if FUTEX_WAIT != 0 + addl $FUTEX_WAIT, %ecx +#endif movl %edi, %edx addl $cond_futex, %ebx .Ladd_cond_futex: @@ -241,7 +245,18 @@ __pthread_cond_timedwait: addl $cond_nwaiters, %ebx movl $SYS_futex, %eax - movl $FUTEX_WAKE, %ecx +#if FUTEX_PRIVATE_FLAG > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_nwaiters(%ebx) + sete %cl + subl $1, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + andl $FUTEX_PRIVATE_FLAG, %ecx +#else + andl %gs:PRIVATE_FUTEX, %ecx +#endif + addl $FUTEX_WAKE, %ecx movl $1, %edx ENTER_KERNEL subl $cond_nwaiters, %ebx @@ -285,11 +300,21 @@ __pthread_cond_timedwait: 1: .LSbl1: #if cond_lock == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal cond_lock(%ebx), %ecx + leal cond_lock(%ebx), %edx #endif - call __lll_mutex_lock_wait +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_lock_wait jmp 2b /* Unlock in loop requires wakeup. */ @@ -300,17 +325,37 @@ __pthread_cond_timedwait: #else leal cond_lock(%ebx), %eax #endif - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake jmp 4b /* Locking in loop failed. */ 5: #if cond_lock == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal cond_lock(%ebx), %ecx + leal cond_lock(%ebx), %edx #endif - call __lll_mutex_lock_wait +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_lock_wait jmp 6b /* Unlock after loop requires wakeup. */ @@ -320,7 +365,17 @@ __pthread_cond_timedwait: #else leal cond_lock(%ebx), %eax #endif - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake jmp 11b /* The initial unlocking of the mutex failed. */ @@ -340,7 +395,17 @@ __pthread_cond_timedwait: #else leal cond_lock(%ebx), %eax #endif - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake movl %esi, %eax jmp 18b @@ -350,7 +415,7 @@ __pthread_cond_timedwait: .LSbl4: 19: leal 4(%esp), %ebx xorl %ecx, %ecx - movl $SYS_gettimeofday, %eax + movl $__NR_gettimeofday, %eax ENTER_KERNEL movl %edx, %ebx @@ -396,11 +461,21 @@ __condvar_tw_cleanup: jz 1f #if cond_lock == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal cond_lock(%ebx), %ecx + leal cond_lock(%ebx), %edx +#endif +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx #endif - call __lll_mutex_lock_wait + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_lock_wait 1: movl broadcast_seq(%ebx), %eax cmpl 20(%esp), %eax @@ -438,7 +513,18 @@ __condvar_tw_cleanup: addl $cond_nwaiters, %ebx movl $SYS_futex, %eax - movl $FUTEX_WAKE, %ecx +#if FUTEX_PRIVATE_FLAG > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_nwaiters(%ebx) + sete %cl + subl $1, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + andl $FUTEX_PRIVATE_FLAG, %ecx +#else + andl %gs:PRIVATE_FUTEX, %ecx +#endif + addl $FUTEX_WAKE, %ecx movl $1, %edx ENTER_KERNEL subl $cond_nwaiters, %ebx @@ -457,13 +543,34 @@ __condvar_tw_cleanup: #else leal cond_lock(%ebx), %eax #endif - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake /* Wake up all waiters to make sure no signal gets lost. */ 2: testl %edi, %edi jnz 5f addl $cond_futex, %ebx - movl $FUTEX_WAKE, %ecx +#if FUTEX_PRIVATE_FLAG > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_futex(%ebx) + sete %cl + subl $1, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + andl $FUTEX_PRIVATE_FLAG, %ecx +#else + andl %gs:PRIVATE_FUTEX, %ecx +#endif + addl $FUTEX_WAKE, %ecx movl $SYS_futex, %eax movl $0x7fffffff, %edx ENTER_KERNEL @@ -583,12 +690,12 @@ __condvar_tw_cleanup: .uleb128 20 .byte 0x83 # DW_CFA_offset %ebx .uleb128 5 - .byte 2 # DW_CFA_advance_loc1 - .byte .Lsubl-.Lpush_ebx + .byte 4 # DW_CFA_advance_loc4 + .4byte .Lsubl-.Lpush_ebx .byte 14 # DW_CFA_def_cfa_offset .uleb128 20+FRAME_SIZE - .byte 3 # DW_CFA_advance_loc2 - .2byte .Laddl-.Lsubl + .byte 4 # DW_CFA_advance_loc4 + .4byte .Laddl-.Lsubl .byte 14 # DW_CFA_def_cfa_offset .uleb128 20 .byte 0x40+.Lpop_ebx-.Laddl # DW_CFA_advance_loc+N @@ -610,7 +717,8 @@ __condvar_tw_cleanup: .byte 0x40+.LSbl1-.Lpop_edi # DW_CFA_advance_loc+N .byte 14 # DW_CFA_def_cfa_offset .uleb128 20 - .byte 0x40+.LSbl2-.LSbl1 # DW_CFA_advance_loc+N + .byte 4 # DW_CFA_advance_loc4 + .4byte .LSbl2-.LSbl1 .byte 14 # DW_CFA_def_cfa_offset .uleb128 20+FRAME_SIZE .byte 0x85 # DW_CFA_offset %ebp @@ -621,14 +729,15 @@ __condvar_tw_cleanup: .uleb128 4 .byte 0x83 # DW_CFA_offset %ebx .uleb128 5 - .byte 0x40+.LSbl3-.LSbl2 # DW_CFA_advance_loc+N + .byte 4 # DW_CFA_advance_loc4 + .4byte .LSbl3-.LSbl2 .byte 14 # DW_CFA_def_cfa_offset .uleb128 20 + .byte 4 # DW_CFA_advance_loc4 #if defined __NR_clock_gettime && !defined __ASSUME_POSIX_TIMERS - .byte 0x40+.LSbl4-.LSbl3 # DW_CFA_advance_loc+N + .4byte .LSbl4-.LSbl3 #else - .byte 4 # DW_CFA_advance_loc4 - .long .LSbl5-.LSbl3 + .4byte .LSbl5-.LSbl3 #endif .byte 14 # DW_CFA_def_cfa_offset .uleb128 20+FRAME_SIZE diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S index c92cfbc71..5b301979b 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S @@ -19,18 +19,10 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <tcb-offsets.h> - -#ifdef UP -# define LOCK -#else -# define LOCK lock -#endif - -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 +#include <kernel-features.h> .text @@ -109,7 +101,20 @@ __pthread_cond_wait: 4: call __pthread_enable_asynccancel movl %eax, (%esp) - movl %esi, %ecx /* movl $FUTEX_WAIT, %ecx */ +#if FUTEX_PRIVATE_FLAG > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + sete %cl + subl $1, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + andl $FUTEX_PRIVATE_FLAG, %ecx +#else + andl %gs:PRIVATE_FUTEX, %ecx +#endif +#if FUTEX_WAIT != 0 + addl $FUTEX_WAIT, %ecx +#endif movl %edi, %edx addl $cond_futex, %ebx .Ladd_cond_futex: @@ -170,7 +175,18 @@ __pthread_cond_wait: addl $cond_nwaiters, %ebx movl $SYS_futex, %eax - movl $FUTEX_WAKE, %ecx +#if FUTEX_PRIVATE_FLAG > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_nwaiters(%ebx) + sete %cl + subl $1, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + andl $FUTEX_PRIVATE_FLAG, %ecx +#else + andl %gs:PRIVATE_FUTEX, %ecx +#endif + addl $FUTEX_WAKE, %ecx movl $1, %edx ENTER_KERNEL subl $cond_nwaiters, %ebx @@ -202,11 +218,21 @@ __pthread_cond_wait: 1: .LSbl1: #if cond_lock == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal cond_lock(%ebx), %ecx + leal cond_lock(%ebx), %edx +#endif +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx #endif - call __lll_mutex_lock_wait + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_lock_wait jmp 2b /* Unlock in loop requires waekup. */ @@ -217,17 +243,37 @@ __pthread_cond_wait: #else leal cond_lock(%ebx), %eax #endif - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake jmp 4b /* Locking in loop failed. */ 5: #if cond_lock == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal cond_lock(%ebx), %ecx + leal cond_lock(%ebx), %edx +#endif +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx #endif - call __lll_mutex_lock_wait + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_lock_wait jmp 6b /* Unlock after loop requires wakeup. */ @@ -237,7 +283,17 @@ __pthread_cond_wait: #else leal cond_lock(%ebx), %eax #endif - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake jmp 11b /* The initial unlocking of the mutex failed. */ @@ -257,7 +313,17 @@ __pthread_cond_wait: #else leal cond_lock(%ebx), %eax #endif - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake movl %esi, %eax jmp 14b @@ -287,11 +353,21 @@ __condvar_w_cleanup: jz 1f #if cond_lock == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal cond_lock(%ebx), %ecx + leal cond_lock(%ebx), %edx +#endif +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx #endif - call __lll_mutex_lock_wait + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_lock_wait 1: movl broadcast_seq(%ebx), %eax cmpl 12(%esp), %eax @@ -329,7 +405,18 @@ __condvar_w_cleanup: addl $cond_nwaiters, %ebx movl $SYS_futex, %eax - movl $FUTEX_WAKE, %ecx +#if FUTEX_PRIVATE_FLAG > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_nwaiters(%ebx) + sete %cl + subl $1, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + andl $FUTEX_PRIVATE_FLAG, %ecx +#else + andl %gs:PRIVATE_FUTEX, %ecx +#endif + addl $FUTEX_WAKE, %ecx movl $1, %edx ENTER_KERNEL subl $cond_nwaiters, %ebx @@ -348,13 +435,34 @@ __condvar_w_cleanup: #else leal cond_lock(%ebx), %eax #endif - call __lll_mutex_unlock_wake +#if (LLL_SHARED-LLL_PRIVATE) > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex(%ebx) + setne %cl + subl $1, %ecx + andl $(LLL_SHARED-LLL_PRIVATE), %ecx +#if LLL_PRIVATE != 0 + addl $LLL_PRIVATE, %ecx +#endif + call __lll_unlock_wake /* Wake up all waiters to make sure no signal gets lost. */ 2: testl %edi, %edi jnz 5f addl $cond_futex, %ebx - movl $FUTEX_WAKE, %ecx +#if FUTEX_PRIVATE_FLAG > 255 + xorl %ecx, %ecx +#endif + cmpl $-1, dep_mutex-cond_futex(%ebx) + sete %cl + subl $1, %ecx +#ifdef __ASSUME_PRIVATE_FUTEX + andl $FUTEX_PRIVATE_FLAG, %ecx +#else + andl %gs:PRIVATE_FUTEX, %ecx +#endif + addl $FUTEX_WAKE, %ecx movl $SYS_futex, %eax movl $0x7fffffff, %edx ENTER_KERNEL @@ -468,12 +576,12 @@ __condvar_w_cleanup: .uleb128 16 .byte 0x83 # DW_CFA_offset %ebx .uleb128 4 - .byte 2 # DW_CFA_advance_loc1 - .byte .Lsubl-.Lpush_ebx + .byte 4 # DW_CFA_advance_loc4 + .4byte .Lsubl-.Lpush_ebx .byte 14 # DW_CFA_def_cfa_offset .uleb128 16+FRAME_SIZE - .byte 2 # DW_CFA_advance_loc1 - .byte .Laddl-.Lsubl + .byte 4 # DW_CFA_advance_loc4 + .4byte .Laddl-.Lsubl .byte 14 # DW_CFA_def_cfa_offset .uleb128 16 .byte 0x40+ .Lpop_ebx-.Laddl # DW_CFA_advance_loc+N @@ -497,13 +605,16 @@ __condvar_w_cleanup: .uleb128 3 .byte 0x83 # DW_CFA_offset %ebx .uleb128 4 - .byte 0x40+.LSbl2-.LSbl1 # DW_CFA_advance_loc+N + .byte 4 # DW_CFA_advance_loc4 + .4byte .LSbl2-.LSbl1 .byte 14 # DW_CFA_def_cfa_offset .uleb128 16+FRAME_SIZE - .byte 0x40+.LSbl3-.LSbl2 # DW_CFA_advance_loc+N + .byte 4 # DW_CFA_advance_loc4 + .4byte .LSbl3-.LSbl2 .byte 14 # DW_CFA_def_cfa_offset .uleb128 16 - .byte 0x40+.LSbl4-.LSbl3 # DW_CFA_advance_loc+N + .byte 4 # DW_CFA_advance_loc4 + .4byte .LSbl4-.LSbl3 .byte 14 # DW_CFA_def_cfa_offset .uleb128 16+FRAME_SIZE .align 4 diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S index c61c69798..d8f1bd54a 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S @@ -18,19 +18,10 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> - - -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif +#include <kernel-features.h> .text @@ -78,7 +69,7 @@ __pthread_rwlock_rdlock: jne 10f 11: -#if __ASSUME_PRIVATE_FUTEX +#ifdef __ASSUME_PRIVATE_FUTEX movzbl PSHARED(%ebx), %ecx xorl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx #else @@ -108,7 +99,7 @@ __pthread_rwlock_rdlock: 13: subl $1, READERS_QUEUED(%ebx) jmp 2b -5: xorl %ecx, %ecx +5: xorl %edx, %edx addl $1, NR_READERS(%ebx) je 8f 9: LOCK @@ -120,24 +111,25 @@ __pthread_rwlock_rdlock: jne 6f 7: - movl %ecx, %eax + movl %edx, %eax popl %ebx popl %esi ret 1: #if MUTEX == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal MUTEX(%ebx), %ecx + leal MUTEX(%ebx), %edx #endif - call __lll_mutex_lock_wait + movl PSHARED(%ebx), %ecx + call __lll_lock_wait jmp 2b 14: cmpl %gs:TID, %eax jne 3b /* Deadlock detected. */ - movl $EDEADLK, %ecx + movl $EDEADLK, %edx jmp 9b 6: @@ -146,17 +138,18 @@ __pthread_rwlock_rdlock: #else leal MUTEX(%ebx), %eax #endif - call __lll_mutex_unlock_wake + movl PSHARED(%ebx), %ecx + call __lll_unlock_wake jmp 7b /* Overflow. */ 8: subl $1, NR_READERS(%ebx) - movl $EAGAIN, %ecx + movl $EAGAIN, %edx jmp 9b /* Overflow. */ 4: subl $1, READERS_QUEUED(%ebx) - movl $EAGAIN, %ecx + movl $EAGAIN, %edx jmp 9b 10: @@ -165,16 +158,18 @@ __pthread_rwlock_rdlock: #else leal MUTEX(%ebx), %eax #endif - call __lll_mutex_unlock_wake + movl PSHARED(%ebx), %ecx + call __lll_unlock_wake jmp 11b 12: #if MUTEX == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal MUTEX(%ebx), %ecx + leal MUTEX(%ebx), %edx #endif - call __lll_mutex_lock_wait + movl PSHARED(%ebx), %ecx + call __lll_lock_wait jmp 13b .size __pthread_rwlock_rdlock,.-__pthread_rwlock_rdlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S index c6a584fed..0d96e0325 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S @@ -18,20 +18,10 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> - - -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif +#include <kernel-features.h> .text @@ -88,7 +78,7 @@ pthread_rwlock_timedrdlock: /* Get current time. */ 11: movl %esp, %ebx xorl %ecx, %ecx - movl $SYS_gettimeofday, %eax + movl $__NR_gettimeofday, %eax ENTER_KERNEL /* Compute relative timeout. */ @@ -110,7 +100,7 @@ pthread_rwlock_timedrdlock: movl %edx, 4(%esp) movl %esi, %edx -#if __ASSUME_PRIVATE_FUTEX +#ifdef __ASSUME_PRIVATE_FUTEX movzbl PSHARED(%ebp), %ecx xorl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx #else @@ -124,7 +114,7 @@ pthread_rwlock_timedrdlock: leal READERS_WAKEUP(%ebp), %ebx movl $SYS_futex, %eax ENTER_KERNEL - movl %eax, %ecx + movl %eax, %esi 17: /* Reget the lock. */ @@ -139,14 +129,14 @@ pthread_rwlock_timedrdlock: jnz 12f 13: subl $1, READERS_QUEUED(%ebp) - cmpl $-ETIMEDOUT, %ecx + cmpl $-ETIMEDOUT, %esi jne 2b -18: movl $ETIMEDOUT, %ecx +18: movl $ETIMEDOUT, %edx jmp 9f -5: xorl %ecx, %ecx +5: xorl %edx, %edx addl $1, NR_READERS(%ebp) je 8f 9: LOCK @@ -157,7 +147,7 @@ pthread_rwlock_timedrdlock: #endif jne 6f -7: movl %ecx, %eax +7: movl %edx, %eax addl $8, %esp popl %ebp @@ -168,16 +158,17 @@ pthread_rwlock_timedrdlock: 1: #if MUTEX == 0 - movl %ebp, %ecx + movl %ebp, %edx #else - leal MUTEX(%ebp), %ecx + leal MUTEX(%ebp), %edx #endif - call __lll_mutex_lock_wait + movl PSHARED(%ebp), %ecx + call __lll_lock_wait jmp 2b 14: cmpl %gs:TID, %eax jne 3b - movl $EDEADLK, %ecx + movl $EDEADLK, %edx jmp 9b 6: @@ -186,17 +177,18 @@ pthread_rwlock_timedrdlock: #else leal MUTEX(%ebp), %eax #endif - call __lll_mutex_unlock_wake + movl PSHARED(%ebp), %ecx + call __lll_unlock_wake jmp 7b /* Overflow. */ 8: subl $1, NR_READERS(%ebp) - movl $EAGAIN, %ecx + movl $EAGAIN, %edx jmp 9b /* Overflow. */ 4: subl $1, READERS_QUEUED(%ebp) - movl $EAGAIN, %ecx + movl $EAGAIN, %edx jmp 9b 10: @@ -205,21 +197,23 @@ pthread_rwlock_timedrdlock: #else leal MUTEX(%ebp), %eax #endif - call __lll_mutex_unlock_wake + movl PSHARED(%ebp), %ecx + call __lll_unlock_wake jmp 11b 12: #if MUTEX == 0 - movl %ebp, %ecx + movl %ebp, %edx #else - leal MUTEX(%ebp), %ecx + leal MUTEX(%ebp), %edx #endif - call __lll_mutex_lock_wait + movl PSHARED(%ebp), %ecx + call __lll_lock_wait jmp 13b -16: movl $-ETIMEDOUT, %ecx +16: movl $-ETIMEDOUT, %esi jmp 17b -19: movl $EINVAL, %ecx +19: movl $EINVAL, %edx jmp 9b .size pthread_rwlock_timedrdlock,.-pthread_rwlock_timedrdlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S index 5e9faf93f..e78fdf6dd 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S @@ -18,20 +18,10 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> - - -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif +#include <kernel-features.h> .text @@ -86,7 +76,7 @@ pthread_rwlock_timedwrlock: /* Get current time. */ 11: movl %esp, %ebx xorl %ecx, %ecx - movl $SYS_gettimeofday, %eax + movl $__NR_gettimeofday, %eax ENTER_KERNEL /* Compute relative timeout. */ @@ -108,7 +98,7 @@ pthread_rwlock_timedwrlock: movl %edx, 4(%esp) movl %esi, %edx -#if __ASSUME_PRIVATE_FUTEX +#ifdef __ASSUME_PRIVATE_FUTEX movzbl PSHARED(%ebp), %ecx xorl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx #else @@ -122,7 +112,7 @@ pthread_rwlock_timedwrlock: leal WRITERS_WAKEUP(%ebp), %ebx movl $SYS_futex, %eax ENTER_KERNEL - movl %eax, %ecx + movl %eax, %esi 17: /* Reget the lock. */ @@ -137,14 +127,14 @@ pthread_rwlock_timedwrlock: jnz 12f 13: subl $1, WRITERS_QUEUED(%ebp) - cmpl $-ETIMEDOUT, %ecx + cmpl $-ETIMEDOUT, %esi jne 2b -18: movl $ETIMEDOUT, %ecx +18: movl $ETIMEDOUT, %edx jmp 9f -5: xorl %ecx, %ecx +5: xorl %edx, %edx movl %gs:TID, %eax movl %eax, WRITER(%ebp) 9: LOCK @@ -155,7 +145,7 @@ pthread_rwlock_timedwrlock: #endif jne 6f -7: movl %ecx, %eax +7: movl %edx, %eax addl $8, %esp popl %ebp @@ -166,16 +156,17 @@ pthread_rwlock_timedwrlock: 1: #if MUTEX == 0 - movl %ebp, %ecx + movl %ebp, %edx #else - leal MUTEX(%ebp), %ecx + leal MUTEX(%ebp), %edx #endif - call __lll_mutex_lock_wait + movl PSHARED(%ebp), %ecx + call __lll_lock_wait jmp 2b 14: cmpl %gs:TID, %eax jne 3b -20: movl $EDEADLK, %ecx +20: movl $EDEADLK, %edx jmp 9b 6: @@ -184,12 +175,13 @@ pthread_rwlock_timedwrlock: #else leal MUTEX(%ebp), %eax #endif - call __lll_mutex_unlock_wake + movl PSHARED(%ebp), %ecx + call __lll_unlock_wake jmp 7b /* Overflow. */ 4: subl $1, WRITERS_QUEUED(%ebp) - movl $EAGAIN, %ecx + movl $EAGAIN, %edx jmp 9b 10: @@ -198,21 +190,23 @@ pthread_rwlock_timedwrlock: #else leal MUTEX(%ebp), %eax #endif - call __lll_mutex_unlock_wake + movl PSHARED(%ebp), %ecx + call __lll_unlock_wake jmp 11b 12: #if MUTEX == 0 - movl %ebp, %ecx + movl %ebp, %edx #else - leal MUTEX(%ebp), %ecx + leal MUTEX(%ebp), %edx #endif - call __lll_mutex_lock_wait + movl PSHARED(%ebp), %ecx + call __lll_lock_wait jmp 13b -16: movl $-ETIMEDOUT, %ecx +16: movl $-ETIMEDOUT, %esi jmp 17b -19: movl $EINVAL, %ecx +19: movl $EINVAL, %edx jmp 9b .size pthread_rwlock_timedwrlock,.-pthread_rwlock_timedwrlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S index 35c40c2c1..a23e1b50a 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S @@ -18,18 +18,9 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> - - -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif +#include <kernel-features.h> .text @@ -83,7 +74,7 @@ __pthread_rwlock_unlock: jne 7f 8: -#if __ASSUME_PRIVATE_FUTEX +#ifdef __ASSUME_PRIVATE_FUTEX movzbl PSHARED(%edi), %ecx xorl $FUTEX_PRIVATE_FLAG|FUTEX_WAKE, %ecx #else @@ -115,29 +106,32 @@ __pthread_rwlock_unlock: 1: #if MUTEX == 0 - movl %edi, %ecx + movl %edi, %edx #else - leal MUTEX(%edx), %ecx + leal MUTEX(%edi), %edx #endif - call __lll_mutex_lock_wait + movl PSHARED(%edi), %ecx + call __lll_lock_wait jmp 2b 3: #if MUTEX == 0 movl %edi, %eax #else - leal MUTEX(%edx), %eax + leal MUTEX(%edi), %eax #endif - call __lll_mutex_unlock_wake + movl PSHARED(%edi), %ecx + call __lll_unlock_wake jmp 4b 7: #if MUTEX == 0 movl %edi, %eax #else - leal MUTEX(%edx), %eax + leal MUTEX(%edi), %eax #endif - call __lll_mutex_unlock_wake + movl PSHARED(%edi), %ecx + call __lll_unlock_wake jmp 8b .size __pthread_rwlock_unlock,.-__pthread_rwlock_unlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S index 88044c040..65b99fe7d 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S @@ -18,19 +18,10 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> - - -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif +#include <kernel-features.h> .text @@ -76,7 +67,7 @@ __pthread_rwlock_wrlock: jne 10f 11: -#if __ASSUME_PRIVATE_FUTEX +#ifdef __ASSUME_PRIVATE_FUTEX movzbl PSHARED(%ebx), %ecx xorl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx #else @@ -106,7 +97,7 @@ __pthread_rwlock_wrlock: 13: subl $1, WRITERS_QUEUED(%ebx) jmp 2b -5: xorl %ecx, %ecx +5: xorl %edx, %edx movl %gs:TID, %eax movl %eax, WRITER(%ebx) 9: LOCK @@ -118,23 +109,24 @@ __pthread_rwlock_wrlock: jne 6f 7: - movl %ecx, %eax + movl %edx, %eax popl %ebx popl %esi ret 1: #if MUTEX == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal MUTEX(%ebx), %ecx + leal MUTEX(%ebx), %edx #endif - call __lll_mutex_lock_wait + movl PSHARED(%ebx), %ecx + call __lll_lock_wait jmp 2b 14: cmpl %gs:TID , %eax jne 3b - movl $EDEADLK, %ecx + movl $EDEADLK, %edx jmp 9b 6: @@ -143,11 +135,12 @@ __pthread_rwlock_wrlock: #else leal MUTEX(%ebx), %eax #endif - call __lll_mutex_unlock_wake + movl PSHARED(%ebx), %ecx + call __lll_unlock_wake jmp 7b 4: subl $1, WRITERS_QUEUED(%ebx) - movl $EAGAIN, %ecx + movl $EAGAIN, %edx jmp 9b 10: @@ -156,16 +149,18 @@ __pthread_rwlock_wrlock: #else leal MUTEX(%ebx), %eax #endif - call __lll_mutex_unlock_wake + movl PSHARED(%ebx), %ecx + call __lll_unlock_wake jmp 11b 12: #if MUTEX == 0 - movl %ebx, %ecx + movl %ebx, %edx #else - leal MUTEX(%ebx), %ecx + leal MUTEX(%ebx), %edx #endif - call __lll_mutex_lock_wait + movl PSHARED(%ebx), %ecx + call __lll_lock_wait jmp 13b .size __pthread_rwlock_wrlock,.-__pthread_rwlock_wrlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S index 280dc2fe2..8f656b4e0 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S @@ -21,15 +21,7 @@ #include <shlib-compat.h> #include <pthread-errnos.h> #include <structsem.h> - -#ifndef UP -# define LOCK lock -#else -# define -#endif - -#define SYS_futex 240 -#define FUTEX_WAKE 1 +#include <lowlevellock.h> .text diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S index 57b5b5818..13a36d64c 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S @@ -21,16 +21,7 @@ #include <shlib-compat.h> #include <pthread-errnos.h> #include <structsem.h> - -#ifndef UP -# define LOCK lock -#else -# define -#endif - -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 +#include <lowlevellock.h> #if VALUE != 0 @@ -82,7 +73,7 @@ sem_timedwait: 7: xorl %ecx, %ecx movl %esp, %ebx movl %ecx, %edx - movl $SYS_gettimeofday, %eax + movl $__NR_gettimeofday, %eax ENTER_KERNEL /* Compute relative timeout. */ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S index fbc3b3c93..2d49934f0 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -20,12 +20,7 @@ #include <sysdep.h> #include <shlib-compat.h> #include <pthread-errnos.h> - -#ifndef UP -# define LOCK lock -#else -# define -#endif +#include <lowlevellock.h> .text diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S index d0eef7514..93c0a64a9 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S @@ -21,15 +21,7 @@ #include <shlib-compat.h> #include <pthread-errnos.h> #include <structsem.h> - -#ifndef UP -# define LOCK lock -#else -# define -#endif - -#define SYS_futex 240 -#define FUTEX_WAIT 0 +#include <lowlevellock.h> #if VALUE != 0 diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/i786/Implies b/libc/nptl/sysdeps/unix/sysv/linux/i386/i786/Implies new file mode 100644 index 000000000..7cb7d9a67 --- /dev/null +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/i786/Implies @@ -0,0 +1,2 @@ +# The PPro and PII cores are mostly the same. +unix/sysv/linux/i386/i686 diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h index aa963f77e..8f67616af 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h @@ -20,31 +20,81 @@ #ifndef _LOWLEVELLOCK_H #define _LOWLEVELLOCK_H 1 -#include <time.h> -#include <sys/param.h> -#include <bits/pthreadtypes.h> - -#ifndef LOCK_INSTR -# ifdef UP -# define LOCK_INSTR /* nothing */ -# else -# define LOCK_INSTR "lock;" +#ifndef __ASSEMBLER__ +# include <time.h> +# include <sys/param.h> +# include <bits/pthreadtypes.h> +# include <kernel-features.h> +# include <tcb-offsets.h> + +# ifndef LOCK_INSTR +# ifdef UP +# define LOCK_INSTR /* nothing */ +# else +# define LOCK_INSTR "lock;" +# endif +# endif +#else +# ifndef LOCK +# ifdef UP +# define LOCK +# else +# define LOCK lock +# endif # endif #endif #define SYS_futex 240 #define FUTEX_WAIT 0 #define FUTEX_WAKE 1 +#define FUTEX_CMP_REQUEUE 4 +#define FUTEX_WAKE_OP 5 #define FUTEX_LOCK_PI 6 #define FUTEX_UNLOCK_PI 7 #define FUTEX_TRYLOCK_PI 8 #define FUTEX_PRIVATE_FLAG 128 +#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) + +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ({ unsigned int __fl = ((private) ^ FUTEX_PRIVATE_FLAG); \ + asm ("andl %%gs:%P1, %0" : "+r" (__fl) \ + : "i" (offsetof (struct pthread, header.private_futex))); \ + __fl | (fl); })) +# endif +#endif + +#ifndef __ASSEMBLER__ /* Initializer for compatibility lock. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) -#define LLL_MUTEX_LOCK_INITIALIZER_LOCKED (1) -#define LLL_MUTEX_LOCK_INITIALIZER_WAITERS (2) +#define LLL_LOCK_INITIALIZER (0) +#define LLL_LOCK_INITIALIZER_LOCKED (1) +#define LLL_LOCK_INITIALIZER_WAITERS (2) #ifdef PIC @@ -66,7 +116,7 @@ #endif /* Delay in spinlock loop. */ -#define BUSY_WAIT_NOP asm ("rep; nop") +#define BUSY_WAIT_NOP asm ("rep; nop") #define LLL_STUB_UNWIND_INFO_START \ @@ -145,23 +195,11 @@ LLL_STUB_UNWIND_INFO_START \ LLL_STUB_UNWIND_INFO_END -#define lll_futex_wait(futex, val) \ - ({ \ - int __status; \ - register __typeof (val) _val asm ("edx") = (val); \ - __asm __volatile (LLL_EBX_LOAD \ - LLL_ENTER_KERNEL \ - LLL_EBX_LOAD \ - : "=a" (__status) \ - : "0" (SYS_futex), LLL_EBX_REG (futex), "S" (0), \ - "c" (FUTEX_WAIT), "d" (_val), \ - "i" (offsetof (tcbhead_t, sysinfo)) \ - : "memory"); \ - __status; \ - }) +#define lll_futex_wait(futex, val, private) \ + lll_futex_timed_wait (futex, val, NULL, private) -#define lll_futex_timed_wait(futex, val, timeout) \ +#define lll_futex_timed_wait(futex, val, timeout, private) \ ({ \ int __status; \ register __typeof (val) _val asm ("edx") = (val); \ @@ -170,14 +208,14 @@ LLL_STUB_UNWIND_INFO_END LLL_EBX_LOAD \ : "=a" (__status) \ : "0" (SYS_futex), LLL_EBX_REG (futex), "S" (timeout), \ - "c" (FUTEX_WAIT), "d" (_val), \ - "i" (offsetof (tcbhead_t, sysinfo)) \ + "c" (__lll_private_flag (FUTEX_WAIT, private)), \ + "d" (_val), "i" (offsetof (tcbhead_t, sysinfo)) \ : "memory"); \ __status; \ }) -#define lll_futex_wake(futex, nr) \ +#define lll_futex_wake(futex, nr, private) \ do { \ int __ignore; \ register __typeof (nr) _nr asm ("edx") = (nr); \ @@ -186,353 +224,316 @@ LLL_STUB_UNWIND_INFO_END LLL_EBX_LOAD \ : "=a" (__ignore) \ : "0" (SYS_futex), LLL_EBX_REG (futex), \ - "c" (FUTEX_WAKE), "d" (_nr), \ + "c" (__lll_private_flag (FUTEX_WAKE, private)), \ + "d" (_nr), \ "i" (0) /* phony, to align next arg's number */, \ "i" (offsetof (tcbhead_t, sysinfo))); \ } while (0) -/* Does not preserve %eax and %ecx. */ -extern int __lll_mutex_lock_wait (int val, int *__futex) - __attribute ((regparm (2))) attribute_hidden; -/* Does not preserve %eax, %ecx, and %edx. */ -extern int __lll_mutex_timedlock_wait (int val, int *__futex, - const struct timespec *abstime) - __attribute ((regparm (3))) attribute_hidden; -/* Preserves all registers but %eax. */ -extern int __lll_mutex_unlock_wake (int *__futex) - __attribute ((regparm (1))) attribute_hidden; - - -/* NB: in the lll_mutex_trylock macro we simply return the value in %eax +/* NB: in the lll_trylock macro we simply return the value in %eax after the cmpxchg instruction. In case the operation succeded this value is zero. In case the operation failed, the cmpxchg instruction has loaded the current value of the memory work which is guaranteed to be nonzero. */ -#define lll_mutex_trylock(futex) \ +#if defined NOT_IN_libc || defined UP +# define __lll_trylock_asm LOCK_INSTR "cmpxchgl %2, %1" +#else +# define __lll_trylock_asm "cmpl $0, %%gs:%P5\n\t" \ + "je 0f\n\t" \ + "lock\n" \ + "0:\tcmpxchgl %2, %1" +#endif + +#define lll_trylock(futex) \ ({ int ret; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %2, %1" \ + __asm __volatile (__lll_trylock_asm \ : "=a" (ret), "=m" (futex) \ - : "r" (LLL_MUTEX_LOCK_INITIALIZER_LOCKED), "m" (futex),\ - "0" (LLL_MUTEX_LOCK_INITIALIZER) \ + : "r" (LLL_LOCK_INITIALIZER_LOCKED), "m" (futex), \ + "0" (LLL_LOCK_INITIALIZER), \ + "i" (MULTIPLE_THREADS_OFFSET) \ : "memory"); \ ret; }) - -#define lll_robust_mutex_trylock(futex, id) \ +#define lll_robust_trylock(futex, id) \ ({ int ret; \ __asm __volatile (LOCK_INSTR "cmpxchgl %2, %1" \ : "=a" (ret), "=m" (futex) \ : "r" (id), "m" (futex), \ - "0" (LLL_MUTEX_LOCK_INITIALIZER) \ + "0" (LLL_LOCK_INITIALIZER) \ : "memory"); \ ret; }) -#define lll_mutex_cond_trylock(futex) \ +#define lll_cond_trylock(futex) \ ({ int ret; \ __asm __volatile (LOCK_INSTR "cmpxchgl %2, %1" \ : "=a" (ret), "=m" (futex) \ - : "r" (LLL_MUTEX_LOCK_INITIALIZER_WAITERS), \ - "m" (futex), "0" (LLL_MUTEX_LOCK_INITIALIZER) \ + : "r" (LLL_LOCK_INITIALIZER_WAITERS), \ + "m" (futex), "0" (LLL_LOCK_INITIALIZER) \ : "memory"); \ ret; }) +#if defined NOT_IN_libc || defined UP +# define __lll_lock_asm_start LOCK_INSTR "cmpxchgl %1, %2\n\t" +#else +# define __lll_lock_asm_start "cmpl $0, %%gs:%P6\n\t" \ + "je 0f\n\t" \ + "lock\n" \ + "0:\tcmpxchgl %1, %2\n\t" +#endif -#define lll_mutex_lock(futex) \ - (void) ({ int ignore1, ignore2; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %1, %2\n\t" \ - "jnz _L_mutex_lock_%=\n\t" \ - ".subsection 1\n\t" \ - ".type _L_mutex_lock_%=,@function\n" \ - "_L_mutex_lock_%=:\n" \ - "1:\tleal %2, %%ecx\n" \ - "2:\tcall __lll_mutex_lock_wait\n" \ - "3:\tjmp 18f\n" \ - "4:\t.size _L_mutex_lock_%=, 4b-1b\n\t" \ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_3 \ - "18:" \ - : "=a" (ignore1), "=c" (ignore2), "=m" (futex) \ - : "0" (0), "1" (1), "m" (futex) \ - : "memory"); }) - - -#define lll_robust_mutex_lock(futex, id) \ - ({ int result, ignore; \ +#define lll_lock(futex, private) \ + (void) \ + ({ int ignore1, ignore2; \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __asm __volatile (__lll_lock_asm_start \ + "jnz _L_lock_%=\n\t" \ + ".subsection 1\n\t" \ + ".type _L_lock_%=,@function\n" \ + "_L_lock_%=:\n" \ + "1:\tleal %2, %%ecx\n" \ + "2:\tcall __lll_lock_wait_private\n" \ + "3:\tjmp 18f\n" \ + "4:\t.size _L_lock_%=, 4b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_3 \ + "18:" \ + : "=a" (ignore1), "=c" (ignore2), "=m" (futex) \ + : "0" (0), "1" (1), "m" (futex), \ + "i" (MULTIPLE_THREADS_OFFSET) \ + : "memory"); \ + else \ + { \ + int ignore3; \ + __asm __volatile (__lll_lock_asm_start \ + "jnz _L_lock_%=\n\t" \ + ".subsection 1\n\t" \ + ".type _L_lock_%=,@function\n" \ + "_L_lock_%=:\n" \ + "1:\tleal %2, %%edx\n" \ + "0:\tmovl %8, %%ecx\n" \ + "2:\tcall __lll_lock_wait\n" \ + "3:\tjmp 18f\n" \ + "4:\t.size _L_lock_%=, 4b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_4 \ + "18:" \ + : "=a" (ignore1), "=c" (ignore2), \ + "=m" (futex), "=&d" (ignore3) \ + : "1" (1), "m" (futex), \ + "i" (MULTIPLE_THREADS_OFFSET), "0" (0), \ + "g" (private) \ + : "memory"); \ + } \ + }) + +#define lll_robust_lock(futex, id, private) \ + ({ int result, ignore1, ignore2; \ __asm __volatile (LOCK_INSTR "cmpxchgl %1, %2\n\t" \ - "jnz _L_robust_mutex_lock_%=\n\t" \ + "jnz _L_robust_lock_%=\n\t" \ ".subsection 1\n\t" \ - ".type _L_robust_mutex_lock_%=,@function\n" \ - "_L_robust_mutex_lock_%=:\n" \ - "1:\tleal %2, %%ecx\n" \ - "2:\tcall __lll_robust_mutex_lock_wait\n" \ + ".type _L_robust_lock_%=,@function\n" \ + "_L_robust_lock_%=:\n" \ + "1:\tleal %2, %%edx\n" \ + "0:\tmovl %7, %%ecx\n" \ + "2:\tcall __lll_robust_lock_wait\n" \ "3:\tjmp 18f\n" \ - "4:\t.size _L_robust_mutex_lock_%=, 4b-1b\n\t" \ + "4:\t.size _L_robust_lock_%=, 4b-1b\n\t" \ ".previous\n" \ - LLL_STUB_UNWIND_INFO_3 \ + LLL_STUB_UNWIND_INFO_4 \ "18:" \ - : "=a" (result), "=c" (ignore), "=m" (futex) \ - : "0" (0), "1" (id), "m" (futex) \ + : "=a" (result), "=c" (ignore1), "=m" (futex), \ + "=&d" (ignore2) \ + : "0" (0), "1" (id), "m" (futex), "g" (private) \ : "memory"); \ result; }) -/* Special version of lll_mutex_lock which causes the unlock function to +/* Special version of lll_lock which causes the unlock function to always wakeup waiters. */ -#define lll_mutex_cond_lock(futex) \ - (void) ({ int ignore1, ignore2; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %1, %2\n\t" \ - "jnz _L_mutex_cond_lock_%=\n\t" \ - ".subsection 1\n\t" \ - ".type _L_mutex_cond_lock_%=,@function\n" \ - "_L_mutex_cond_lock_%=:\n" \ - "1:\tleal %2, %%ecx\n" \ - "2:\tcall __lll_mutex_lock_wait\n" \ - "3:\tjmp 18f\n" \ - "4:\t.size _L_mutex_cond_lock_%=, 4b-1b\n\t" \ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_3 \ - "18:" \ - : "=a" (ignore1), "=c" (ignore2), "=m" (futex) \ - : "0" (0), "1" (2), "m" (futex) \ - : "memory"); }) - - -#define lll_robust_mutex_cond_lock(futex, id) \ - ({ int result, ignore; \ +#define lll_cond_lock(futex, private) \ + (void) \ + ({ int ignore1, ignore2, ignore3; \ + __asm __volatile (LOCK_INSTR "cmpxchgl %1, %2\n\t" \ + "jnz _L_cond_lock_%=\n\t" \ + ".subsection 1\n\t" \ + ".type _L_cond_lock_%=,@function\n" \ + "_L_cond_lock_%=:\n" \ + "1:\tleal %2, %%edx\n" \ + "0:\tmovl %7, %%ecx\n" \ + "2:\tcall __lll_lock_wait\n" \ + "3:\tjmp 18f\n" \ + "4:\t.size _L_cond_lock_%=, 4b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_4 \ + "18:" \ + : "=a" (ignore1), "=c" (ignore2), "=m" (futex), \ + "=&d" (ignore3) \ + : "0" (0), "1" (2), "m" (futex), "g" (private) \ + : "memory"); \ + }) + + +#define lll_robust_cond_lock(futex, id, private) \ + ({ int result, ignore1, ignore2; \ __asm __volatile (LOCK_INSTR "cmpxchgl %1, %2\n\t" \ - "jnz _L_robust_mutex_cond_lock_%=\n\t" \ + "jnz _L_robust_cond_lock_%=\n\t" \ ".subsection 1\n\t" \ - ".type _L_robust_mutex_cond_lock_%=,@function\n" \ - "_L_robust_mutex_cond_lock_%=:\n" \ - "1:\tleal %2, %%ecx\n" \ - "2:\tcall __lll_robust_mutex_lock_wait\n" \ + ".type _L_robust_cond_lock_%=,@function\n" \ + "_L_robust_cond_lock_%=:\n" \ + "1:\tleal %2, %%edx\n" \ + "0:\tmovl %7, %%ecx\n" \ + "2:\tcall __lll_robust_lock_wait\n" \ "3:\tjmp 18f\n" \ - "4:\t.size _L_robust_mutex_cond_lock_%=, 4b-1b\n\t" \ + "4:\t.size _L_robust_cond_lock_%=, 4b-1b\n\t" \ ".previous\n" \ - LLL_STUB_UNWIND_INFO_3 \ + LLL_STUB_UNWIND_INFO_4 \ "18:" \ - : "=a" (result), "=c" (ignore), "=m" (futex) \ - : "0" (0), "1" (id | FUTEX_WAITERS), "m" (futex) \ + : "=a" (result), "=c" (ignore1), "=m" (futex), \ + "=&d" (ignore2) \ + : "0" (0), "1" (id | FUTEX_WAITERS), "m" (futex), \ + "g" (private) \ : "memory"); \ result; }) -#define lll_mutex_timedlock(futex, timeout) \ - ({ int result, ignore1, ignore2; \ +#define lll_timedlock(futex, timeout, private) \ + ({ int result, ignore1, ignore2, ignore3; \ __asm __volatile (LOCK_INSTR "cmpxchgl %1, %3\n\t" \ - "jnz _L_mutex_timedlock_%=\n\t" \ + "jnz _L_timedlock_%=\n\t" \ ".subsection 1\n\t" \ - ".type _L_mutex_timedlock_%=,@function\n" \ - "_L_mutex_timedlock_%=:\n" \ + ".type _L_timedlock_%=,@function\n" \ + "_L_timedlock_%=:\n" \ "1:\tleal %3, %%ecx\n" \ - "0:\tmovl %7, %%edx\n" \ - "2:\tcall __lll_mutex_timedlock_wait\n" \ + "0:\tmovl %8, %%edx\n" \ + "2:\tcall __lll_timedlock_wait\n" \ "3:\tjmp 18f\n" \ - "4:\t.size _L_mutex_timedlock_%=, 4b-1b\n\t" \ + "4:\t.size _L_timedlock_%=, 4b-1b\n\t" \ ".previous\n" \ LLL_STUB_UNWIND_INFO_4 \ "18:" \ : "=a" (result), "=c" (ignore1), "=&d" (ignore2), \ - "=m" (futex) \ - : "0" (0), "1" (1), "m" (futex), "m" (timeout) \ + "=m" (futex), "=S" (ignore3) \ + : "0" (0), "1" (1), "m" (futex), "m" (timeout), \ + "4" (private) \ : "memory"); \ result; }) -#define lll_robust_mutex_timedlock(futex, timeout, id) \ - ({ int result, ignore1, ignore2; \ +#define lll_robust_timedlock(futex, timeout, id, private) \ + ({ int result, ignore1, ignore2, ignore3; \ __asm __volatile (LOCK_INSTR "cmpxchgl %1, %3\n\t" \ - "jnz _L_robust_mutex_timedlock_%=\n\t" \ + "jnz _L_robust_timedlock_%=\n\t" \ ".subsection 1\n\t" \ - ".type _L_robust_mutex_timedlock_%=,@function\n" \ - "_L_robust_mutex_timedlock_%=:\n" \ + ".type _L_robust_timedlock_%=,@function\n" \ + "_L_robust_timedlock_%=:\n" \ "1:\tleal %3, %%ecx\n" \ - "0:\tmovl %7, %%edx\n" \ - "2:\tcall __lll_robust_mutex_timedlock_wait\n" \ + "0:\tmovl %8, %%edx\n" \ + "2:\tcall __lll_robust_timedlock_wait\n" \ "3:\tjmp 18f\n" \ - "4:\t.size _L_robust_mutex_timedlock_%=, 4b-1b\n\t" \ + "4:\t.size _L_robust_timedlock_%=, 4b-1b\n\t" \ ".previous\n" \ LLL_STUB_UNWIND_INFO_4 \ "18:" \ : "=a" (result), "=c" (ignore1), "=&d" (ignore2), \ - "=m" (futex) \ - : "0" (0), "1" (id), "m" (futex), "m" (timeout) \ + "=m" (futex), "=S" (ignore3) \ + : "0" (0), "1" (id), "m" (futex), "m" (timeout), \ + "4" (private) \ : "memory"); \ result; }) - -#define lll_mutex_unlock(futex) \ - (void) ({ int ignore; \ - __asm __volatile (LOCK_INSTR "subl $1, %0\n\t" \ - "jne _L_mutex_unlock_%=\n\t" \ - ".subsection 1\n\t" \ - ".type _L_mutex_unlock_%=,@function\n" \ - "_L_mutex_unlock_%=:\n" \ - "1:\tleal %0, %%eax\n" \ - "2:\tcall __lll_mutex_unlock_wake\n" \ - "3:\tjmp 18f\n" \ - "4:\t.size _L_mutex_unlock_%=, 4b-1b\n\t" \ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_3 \ - "18:" \ - : "=m" (futex), "=&a" (ignore) \ - : "m" (futex) \ - : "memory"); }) - - -#define lll_robust_mutex_unlock(futex) \ - (void) ({ int ignore; \ - __asm __volatile (LOCK_INSTR "andl %2, %0\n\t" \ - "jne _L_robust_mutex_unlock_%=\n\t" \ - ".subsection 1\n\t" \ - ".type _L_robust_mutex_unlock_%=,@function\n" \ - "_L_robust_mutex_unlock_%=:\n\t" \ - "1:\tleal %0, %%eax\n" \ - "2:\tcall __lll_mutex_unlock_wake\n" \ - "3:\tjmp 18f\n" \ - "4:\t.size _L_robust_mutex_unlock_%=, 4b-1b\n\t"\ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_3 \ - "18:" \ - : "=m" (futex), "=&a" (ignore) \ - : "i" (FUTEX_WAITERS), "m" (futex) \ - : "memory"); }) - - -#define lll_robust_mutex_dead(futex) \ - (void) ({ int __ignore; \ - register int _nr asm ("edx") = 1; \ - __asm __volatile (LOCK_INSTR "orl %5, (%2)\n\t" \ - LLL_EBX_LOAD \ - LLL_ENTER_KERNEL \ - LLL_EBX_LOAD \ - : "=a" (__ignore) \ - : "0" (SYS_futex), LLL_EBX_REG (&(futex)), \ - "c" (FUTEX_WAKE), "d" (_nr), \ - "i" (FUTEX_OWNER_DIED), \ - "i" (offsetof (tcbhead_t, sysinfo))); }) - - -#define lll_futex_wake(futex, nr) \ - do { \ - int __ignore; \ - register __typeof (nr) _nr asm ("edx") = (nr); \ - __asm __volatile (LLL_EBX_LOAD \ - LLL_ENTER_KERNEL \ - LLL_EBX_LOAD \ - : "=a" (__ignore) \ - : "0" (SYS_futex), LLL_EBX_REG (futex), \ - "c" (FUTEX_WAKE), "d" (_nr), \ - "i" (0) /* phony, to align next arg's number */, \ - "i" (offsetof (tcbhead_t, sysinfo))); \ - } while (0) - - -#define lll_mutex_islocked(futex) \ - (futex != 0) - - -/* We have a separate internal lock implementation which is not tied - to binary compatibility. */ - -/* Type for lock object. */ -typedef int lll_lock_t; - -/* Initializers for lock. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) - - -extern int __lll_lock_wait (int val, int *__futex) - __attribute ((regparm (2))) attribute_hidden; -extern int __lll_unlock_wake (int *__futex) - __attribute ((regparm (1))) attribute_hidden; - - -/* The states of a lock are: - 0 - untaken - 1 - taken by one user - 2 - taken by more users */ - - #if defined NOT_IN_libc || defined UP -# define lll_trylock(futex) lll_mutex_trylock (futex) -# define lll_lock(futex) lll_mutex_lock (futex) -# define lll_unlock(futex) lll_mutex_unlock (futex) +# define __lll_unlock_asm LOCK_INSTR "subl $1, %0\n\t" #else -/* Special versions of the macros for use in libc itself. They avoid - the lock prefix when the thread library is not used. - - XXX In future we might even want to avoid it on UP machines. */ -# include <tls.h> - -# define lll_trylock(futex) \ - ({ unsigned char ret; \ - __asm __volatile ("cmpl $0, %%gs:%P5\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgl %2, %1; setne %0" \ - : "=a" (ret), "=m" (futex) \ - : "r" (LLL_MUTEX_LOCK_INITIALIZER_LOCKED), "m" (futex),\ - "0" (LLL_MUTEX_LOCK_INITIALIZER), \ - "i" (offsetof (tcbhead_t, multiple_threads)) \ - : "memory"); \ - ret; }) - - -# define lll_lock(futex) \ - (void) ({ int ignore1, ignore2; \ - __asm __volatile ("cmpl $0, %%gs:%P6\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tcmpxchgl %1, %2\n\t" \ - "jnz _L_lock_%=\n\t" \ - ".subsection 1\n\t" \ - ".type _L_lock_%=,@function\n" \ - "_L_lock_%=:\n" \ - "1:\tleal %2, %%ecx\n" \ - "2:\tcall __lll_mutex_lock_wait\n" \ - "3:\tjmp 18f\n" \ - "4:\t.size _L_lock_%=, 4b-1b\n\t" \ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_3 \ - "18:" \ - : "=a" (ignore1), "=c" (ignore2), "=m" (futex) \ - : "0" (0), "1" (1), "m" (futex), \ - "i" (offsetof (tcbhead_t, multiple_threads)) \ - : "memory"); }) - - -# define lll_unlock(futex) \ - (void) ({ int ignore; \ - __asm __volatile ("cmpl $0, %%gs:%P3\n\t" \ - "je 0f\n\t" \ - "lock\n" \ - "0:\tsubl $1,%0\n\t" \ - "jne _L_unlock_%=\n\t" \ - ".subsection 1\n\t" \ - ".type _L_unlock_%=,@function\n" \ - "_L_unlock_%=:\n" \ - "1:\tleal %0, %%eax\n" \ - "2:\tcall __lll_mutex_unlock_wake\n" \ - "3:\tjmp 18f\n\t" \ - "4:\t.size _L_unlock_%=, 4b-1b\n\t" \ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_3 \ - "18:" \ - : "=m" (futex), "=&a" (ignore) \ - : "m" (futex), \ - "i" (offsetof (tcbhead_t, multiple_threads)) \ - : "memory"); }) +# define __lll_unlock_asm "cmpl $0, %%gs:%P3\n\t" \ + "je 0f\n\t" \ + "lock\n" \ + "0:\tsubl $1,%0\n\t" #endif +#define lll_unlock(futex, private) \ + (void) \ + ({ int ignore; \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __asm __volatile (__lll_unlock_asm \ + "jne _L_unlock_%=\n\t" \ + ".subsection 1\n\t" \ + ".type _L_unlock_%=,@function\n" \ + "_L_unlock_%=:\n" \ + "1:\tleal %0, %%eax\n" \ + "2:\tcall __lll_unlock_wake_private\n" \ + "3:\tjmp 18f\n" \ + "4:\t.size _L_unlock_%=, 4b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_3 \ + "18:" \ + : "=m" (futex), "=&a" (ignore) \ + : "m" (futex), "i" (MULTIPLE_THREADS_OFFSET) \ + : "memory"); \ + else \ + { \ + int ignore2; \ + __asm __volatile (__lll_unlock_asm \ + "jne _L_unlock_%=\n\t" \ + ".subsection 1\n\t" \ + ".type _L_unlock_%=,@function\n" \ + "_L_unlock_%=:\n" \ + "1:\tleal %0, %%eax\n" \ + "0:\tmovl %5, %%ecx\n" \ + "2:\tcall __lll_unlock_wake\n" \ + "3:\tjmp 18f\n" \ + "4:\t.size _L_unlock_%=, 4b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_4 \ + "18:" \ + : "=m" (futex), "=&a" (ignore), "=&c" (ignore2) \ + : "i" (MULTIPLE_THREADS_OFFSET), "m" (futex), \ + "g" (private) \ + : "memory"); \ + } \ + }) + +#define lll_robust_unlock(futex, private) \ + (void) \ + ({ int ignore, ignore2; \ + __asm __volatile (LOCK_INSTR "andl %3, %0\n\t" \ + "jne _L_robust_unlock_%=\n\t" \ + ".subsection 1\n\t" \ + ".type _L_robust_unlock_%=,@function\n" \ + "_L_robust_unlock_%=:\n\t" \ + "1:\tleal %0, %%eax\n" \ + "0:\tmovl %5, %%ecx\n" \ + "2:\tcall __lll_unlock_wake\n" \ + "3:\tjmp 18f\n" \ + "4:\t.size _L_robust_unlock_%=, 4b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_4 \ + "18:" \ + : "=m" (futex), "=&a" (ignore), "=&c" (ignore2) \ + : "i" (FUTEX_WAITERS), "m" (futex), "g" (private) \ + : "memory"); \ + }) + + +#define lll_robust_dead(futex, private) \ + (void) \ + ({ int __ignore; \ + register int _nr asm ("edx") = 1; \ + __asm __volatile (LOCK_INSTR "orl %5, (%2)\n\t" \ + LLL_EBX_LOAD \ + LLL_ENTER_KERNEL \ + LLL_EBX_LOAD \ + : "=a" (__ignore) \ + : "0" (SYS_futex), LLL_EBX_REG (&(futex)), \ + "c" (__lll_private_flag (FUTEX_WAKE, private)), \ + "d" (_nr), "i" (FUTEX_OWNER_DIED), \ + "i" (offsetof (tcbhead_t, sysinfo))); \ + }) #define lll_islocked(futex) \ (futex != LLL_LOCK_INITIALIZER) - /* The kernel notifies a process with uses CLONE_CLEARTID via futex wakeup when the clone terminates. The memory location contains the thread ID while the clone is running and is reset to zero @@ -571,28 +572,6 @@ extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime) } \ __result; }) - -/* Conditional variable handling. */ - -extern void __lll_cond_wait (pthread_cond_t *cond) - __attribute ((regparm (1))) attribute_hidden; -extern int __lll_cond_timedwait (pthread_cond_t *cond, - const struct timespec *abstime) - __attribute ((regparm (2))) attribute_hidden; -extern void __lll_cond_wake (pthread_cond_t *cond) - __attribute ((regparm (1))) attribute_hidden; -extern void __lll_cond_broadcast (pthread_cond_t *cond) - __attribute ((regparm (1))) attribute_hidden; - - -#define lll_cond_wait(cond) \ - __lll_cond_wait (cond) -#define lll_cond_timedwait(cond, abstime) \ - __lll_cond_timedwait (cond, abstime) -#define lll_cond_wake(cond) \ - __lll_cond_wake (cond) -#define lll_cond_broadcast(cond) \ - __lll_cond_broadcast (cond) - +#endif /* !__ASSEMBLER__ */ #endif /* lowlevellock.h */ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S b/libc/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S index 8ff0dad27..f31d968bc 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S @@ -20,19 +20,9 @@ #include <unwindbuf.h> #include <sysdep.h> #include <kernel-features.h> +#include <lowlevellock.h> -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif - -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_PRIVATE_FLAG 128 - .comm __fork_generation, 4, 4 .text diff --git a/libc/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h b/libc/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h index 892769dca..330717f07 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. @@ -126,9 +126,9 @@ typedef union unsigned int __nr_readers_queued; unsigned int __nr_writers_queued; int __writer; - int __pad1; + int __shared; + unsigned long int __pad1; unsigned long int __pad2; - unsigned long int __pad3; /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ unsigned int __flags; diff --git a/libc/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h index 17093471d..ada79851e 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h @@ -25,6 +25,7 @@ #include <bits/pthreadtypes.h> #include <ia64intrin.h> #include <atomic.h> +#include <kernel-features.h> #define __NR_futex 1230 #define FUTEX_WAIT 0 @@ -36,217 +37,243 @@ #define FUTEX_LOCK_PI 6 #define FUTEX_UNLOCK_PI 7 #define FUTEX_TRYLOCK_PI 8 +#define FUTEX_PRIVATE_FLAG 128 + +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ + & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) +# endif +#endif + /* Delay in spinlock loop. */ #define BUSY_WAIT_NOP asm ("hint @pause") -/* Initializer for compatibility lock. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) - -#define lll_futex_wait(futex, val) lll_futex_timed_wait (futex, val, 0) +#define lll_futex_wait(futex, val, private) \ + lll_futex_timed_wait (futex, val, NULL, private) -#define lll_futex_timed_wait(ftx, val, timespec) \ +#define lll_futex_timed_wait(ftx, val, timespec, private) \ ({ \ - DO_INLINE_SYSCALL(futex, 4, (long) (ftx), FUTEX_WAIT, (int) (val), \ - (long) (timespec)); \ + DO_INLINE_SYSCALL(futex, 4, (long) (ftx), \ + __lll_private_flag (FUTEX_WAIT, private), \ + (int) (val), (long) (timespec)); \ _r10 == -1 ? -_retval : _retval; \ }) -#define lll_futex_wake(ftx, nr) \ +#define lll_futex_wake(ftx, nr, private) \ ({ \ - DO_INLINE_SYSCALL(futex, 3, (long) (ftx), FUTEX_WAKE, (int) (nr)); \ + DO_INLINE_SYSCALL(futex, 3, (long) (ftx), \ + __lll_private_flag (FUTEX_WAKE, private), \ + (int) (nr)); \ _r10 == -1 ? -_retval : _retval; \ }) -#define lll_robust_mutex_dead(futexv) \ +#define lll_robust_dead(futexv, private) \ do \ { \ int *__futexp = &(futexv); \ atomic_or (__futexp, FUTEX_OWNER_DIED); \ - DO_INLINE_SYSCALL(futex, 3, (long) __futexp, FUTEX_WAKE, 1); \ + DO_INLINE_SYSCALL(futex, 3, (long) __futexp, \ + __lll_private_flag (FUTEX_WAKE, private), 1); \ } \ while (0) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(ftx, nr_wake, nr_move, mutex, val) \ +#define lll_futex_requeue(ftx, nr_wake, nr_move, mutex, val, private) \ ({ \ - DO_INLINE_SYSCALL(futex, 6, (long) (ftx), FUTEX_CMP_REQUEUE, \ + DO_INLINE_SYSCALL(futex, 6, (long) (ftx), \ + __lll_private_flag (FUTEX_CMP_REQUEUE, private), \ (int) (nr_wake), (int) (nr_move), (long) (mutex), \ (int) val); \ _r10 == -1; \ }) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(ftx, nr_wake, nr_wake2, ftx2) \ +#define lll_futex_wake_unlock(ftx, nr_wake, nr_wake2, ftx2, private) \ ({ \ - DO_INLINE_SYSCALL(futex, 6, (long) (ftx), FUTEX_WAKE_OP, \ + DO_INLINE_SYSCALL(futex, 6, (long) (ftx), \ + __lll_private_flag (FUTEX_WAKE_OP, private), \ (int) (nr_wake), (int) (nr_wake2), (long) (ftx2), \ FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ _r10 == -1; \ }) -#define __lll_mutex_trylock(futex) \ +#define __lll_trylock(futex) \ (atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0) -#define lll_mutex_trylock(futex) __lll_mutex_trylock (&(futex)) +#define lll_trylock(futex) __lll_trylock (&(futex)) -#define __lll_robust_mutex_trylock(futex, id) \ +#define __lll_robust_trylock(futex, id) \ (atomic_compare_and_exchange_val_acq (futex, id, 0) != 0) -#define lll_robust_mutex_trylock(futex, id) \ - __lll_robust_mutex_trylock (&(futex), id) +#define lll_robust_trylock(futex, id) \ + __lll_robust_trylock (&(futex), id) -#define __lll_mutex_cond_trylock(futex) \ +#define __lll_cond_trylock(futex) \ (atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0) -#define lll_mutex_cond_trylock(futex) __lll_mutex_cond_trylock (&(futex)) +#define lll_cond_trylock(futex) __lll_cond_trylock (&(futex)) -extern void __lll_lock_wait (int *futex) attribute_hidden; -extern int __lll_robust_lock_wait (int *futex) attribute_hidden; +extern void __lll_lock_wait_private (int *futex) attribute_hidden; +extern void __lll_lock_wait (int *futex, int private) attribute_hidden; +extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; -#define __lll_mutex_lock(futex) \ - ((void) ({ \ - int *__futex = (futex); \ - if (atomic_compare_and_exchange_bool_acq (__futex, 1, 0) != 0) \ - __lll_lock_wait (__futex); \ +#define __lll_lock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, \ + 1, 0), 0)) \ + { \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __lll_lock_wait_private (__futex); \ + else \ + __lll_lock_wait (__futex, private); \ + } \ })) -#define lll_mutex_lock(futex) __lll_mutex_lock (&(futex)) - - -#define __lll_robust_mutex_lock(futex, id) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (atomic_compare_and_exchange_bool_acq (__futex, id, 0) != 0) \ - __val = __lll_robust_lock_wait (__futex); \ - __val; \ +#define lll_lock(futex, private) __lll_lock (&(futex), private) + + +#define __lll_robust_lock(futex, id, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ + 0), 0)) \ + __val = __lll_robust_lock_wait (__futex, private); \ + __val; \ }) -#define lll_robust_mutex_lock(futex, id) __lll_robust_mutex_lock (&(futex), id) +#define lll_robust_lock(futex, id, private) \ + __lll_robust_lock (&(futex), id, private) -#define __lll_mutex_cond_lock(futex) \ - ((void) ({ \ - int *__futex = (futex); \ - if (atomic_compare_and_exchange_bool_acq (__futex, 2, 0) != 0) \ - __lll_lock_wait (__futex); \ +#define __lll_cond_lock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, 2, \ + 0), 0)) \ + __lll_lock_wait (__futex, private); \ })) -#define lll_mutex_cond_lock(futex) __lll_mutex_cond_lock (&(futex)) - - -#define __lll_robust_mutex_cond_lock(futex, id) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - int __id = (id) | FUTEX_WAITERS; \ - \ - if (atomic_compare_and_exchange_bool_acq (__futex, __id, 0) != 0) \ - __val = __lll_robust_lock_wait (__futex); \ - __val; \ +#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) + + +#define __lll_robust_cond_lock(futex, id, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + int __id = (id) | FUTEX_WAITERS; \ + \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, \ + __id, 0), 0)) \ + __val = __lll_robust_lock_wait (__futex, private); \ + __val; \ }) -#define lll_robust_mutex_cond_lock(futex, id) \ - __lll_robust_mutex_cond_lock (&(futex), id) +#define lll_robust_cond_lock(futex, id, private) \ + __lll_robust_cond_lock (&(futex), id, private) -extern int __lll_timedlock_wait (int *futex, const struct timespec *) - attribute_hidden; -extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *) - attribute_hidden; +extern int __lll_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; +extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; -#define __lll_mutex_timedlock(futex, abstime) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (atomic_compare_and_exchange_bool_acq (__futex, 1, 0) != 0) \ - __val = __lll_timedlock_wait (__futex, abstime); \ - __val; \ +#define __lll_timedlock(futex, abstime, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, 1, \ + 0), 0)) \ + __val = __lll_timedlock_wait (__futex, abstime, private); \ + __val; \ }) -#define lll_mutex_timedlock(futex, abstime) \ - __lll_mutex_timedlock (&(futex), abstime) - - -#define __lll_robust_mutex_timedlock(futex, abstime, id) \ - ({ \ - int *__futex = (futex); \ - int __val = 0; \ - \ - if (atomic_compare_and_exchange_bool_acq (__futex, id, 0) != 0) \ - __val = __lll_robust_timedlock_wait (__futex, abstime); \ - __val; \ +#define lll_timedlock(futex, abstime, private) \ + __lll_timedlock (&(futex), abstime, private) + + +#define __lll_robust_timedlock(futex, abstime, id, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ + 0), 0)) \ + __val = __lll_robust_timedlock_wait (__futex, abstime, private); \ + __val; \ }) -#define lll_robust_mutex_timedlock(futex, abstime, id) \ - __lll_robust_mutex_timedlock (&(futex), abstime, id) +#define lll_robust_timedlock(futex, abstime, id, private) \ + __lll_robust_timedlock (&(futex), abstime, id, private) -#define __lll_mutex_unlock(futex) \ - ((void) ({ \ - int *__futex = (futex); \ - int __val = atomic_exchange_rel (__futex, 0); \ - \ - if (__builtin_expect (__val > 1, 0)) \ - lll_futex_wake (__futex, 1); \ +#define __lll_unlock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + int __val = atomic_exchange_rel (__futex, 0); \ + \ + if (__builtin_expect (__val > 1, 0)) \ + lll_futex_wake (__futex, 1, private); \ })) -#define lll_mutex_unlock(futex) \ - __lll_mutex_unlock(&(futex)) +#define lll_unlock(futex, private) __lll_unlock(&(futex), private) -#define __lll_robust_mutex_unlock(futex) \ - ((void) ({ \ - int *__futex = (futex); \ - int __val = atomic_exchange_rel (__futex, 0); \ - \ - if (__builtin_expect (__val & FUTEX_WAITERS, 0)) \ - lll_futex_wake (__futex, 1); \ +#define __lll_robust_unlock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + int __val = atomic_exchange_rel (__futex, 0); \ + \ + if (__builtin_expect (__val & FUTEX_WAITERS, 0)) \ + lll_futex_wake (__futex, 1, private); \ })) -#define lll_robust_mutex_unlock(futex) \ - __lll_robust_mutex_unlock(&(futex)) +#define lll_robust_unlock(futex, private) \ + __lll_robust_unlock(&(futex), private) -#define __lll_mutex_unlock_force(futex) \ - ((void) ({ \ - int *__futex = (futex); \ - (void) atomic_exchange_rel (__futex, 0); \ - lll_futex_wake (__futex, 1); \ - })) -#define lll_mutex_unlock_force(futex) \ - __lll_mutex_unlock_force(&(futex)) - - -#define lll_mutex_islocked(futex) \ +#define lll_islocked(futex) \ (futex != 0) - -/* We have a separate internal lock implementation which is not tied - to binary compatibility. We can use the lll_mutex_*. */ - -/* Type for lock object. */ -typedef int lll_lock_t; - /* Initializers for lock. */ #define LLL_LOCK_INITIALIZER (0) #define LLL_LOCK_INITIALIZER_LOCKED (1) -#define lll_trylock(futex) lll_mutex_trylock (futex) -#define lll_lock(futex) lll_mutex_lock (futex) -#define lll_unlock(futex) lll_mutex_unlock (futex) -#define lll_islocked(futex) lll_mutex_islocked (futex) - - /* The kernel notifies a process with uses CLONE_CLEARTID via futex wakeup when the clone terminates. The memory location contains the thread ID while the clone is running and is reset to zero afterwards. */ #define lll_wait_tid(tid) \ - do \ - { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid); \ - } \ + do \ + { \ + __typeof (tid) __tid; \ + while ((__tid = (tid)) != 0) \ + lll_futex_wait (&(tid), __tid, LLL_SHARED); \ + } \ while (0) extern int __lll_timedwait_tid (int *, const struct timespec *) @@ -260,26 +287,4 @@ extern int __lll_timedwait_tid (int *, const struct timespec *) __res; \ }) - -/* Conditional variable handling. */ - -extern void __lll_cond_wait (pthread_cond_t *cond) - attribute_hidden; -extern int __lll_cond_timedwait (pthread_cond_t *cond, - const struct timespec *abstime) - attribute_hidden; -extern void __lll_cond_wake (pthread_cond_t *cond) - attribute_hidden; -extern void __lll_cond_broadcast (pthread_cond_t *cond) - attribute_hidden; - -#define lll_cond_wait(cond) \ - __lll_cond_wait (cond) -#define lll_cond_timedwait(cond, abstime) \ - __lll_cond_timedwait (cond, abstime) -#define lll_cond_wake(cond) \ - __lll_cond_wake (cond) -#define lll_cond_broadcast(cond) \ - __lll_cond_broadcast (cond) - #endif /* lowlevellock.h */ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c b/libc/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c index 3b07cc127..22e2dd3c0 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. @@ -30,7 +30,7 @@ clear_once_control (void *arg) pthread_once_t *once_control = (pthread_once_t *) arg; *once_control = 0; - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); } @@ -65,7 +65,7 @@ __pthread_once (once_control, init_routine) if (((oldval ^ newval) & -4) == 0) { /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, newval); + lll_futex_wait (once_control, newval, LLL_PRIVATE); continue; } } @@ -84,7 +84,7 @@ __pthread_once (once_control, init_routine) atomic_increment (once_control); /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); break; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/lowlevellock.c b/libc/nptl/sysdeps/unix/sysv/linux/lowlevellock.c index 38d78884d..f0e42957c 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/lowlevellock.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/lowlevellock.c @@ -25,20 +25,35 @@ void -__lll_lock_wait (int *futex) +__lll_lock_wait_private (int *futex) { do { int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); if (oldval != 0) - lll_futex_wait (futex, 2); + lll_futex_wait (futex, 2, LLL_PRIVATE); + } + while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); +} + + +/* These functions don't get included in libc.so */ +#ifdef IS_IN_libpthread +void +__lll_lock_wait (int *futex, int private) +{ + do + { + int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); + if (oldval != 0) + lll_futex_wait (futex, 2, private); } while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); } int -__lll_timedlock_wait (int *futex, const struct timespec *abstime) +__lll_timedlock_wait (int *futex, const struct timespec *abstime, int private) { /* Reject invalid timeouts. */ if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) @@ -68,7 +83,7 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime) /* Wait. */ int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); if (oldval != 0) - lll_futex_timed_wait (futex, 2, &rt); + lll_futex_timed_wait (futex, 2, &rt, private); } while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); @@ -76,8 +91,6 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime) } -/* This function doesn't get included in libc.so */ -#ifdef IS_IN_libpthread int __lll_timedwait_tid (int *tidp, const struct timespec *abstime) { @@ -108,8 +121,9 @@ __lll_timedwait_tid (int *tidp, const struct timespec *abstime) if (rt.tv_sec < 0) return ETIMEDOUT; - /* Wait until thread terminates. */ - if (lll_futex_timed_wait (tidp, tid, &rt) == -ETIMEDOUT) + /* Wait until thread terminates. The kernel so far does not use + the private futex operations for this. */ + if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT) return ETIMEDOUT; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c b/libc/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c index 30ef991bd..3830f94da 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c @@ -25,7 +25,7 @@ int -__lll_robust_lock_wait (int *futex) +__lll_robust_lock_wait (int *futex, int private) { int oldval = *futex; int tid = THREAD_GETMEM (THREAD_SELF, tid); @@ -44,7 +44,7 @@ __lll_robust_lock_wait (int *futex) && atomic_compare_and_exchange_bool_acq (futex, newval, oldval)) continue; - lll_futex_wait (futex, newval); + lll_futex_wait (futex, newval, private); try: ; @@ -57,7 +57,8 @@ __lll_robust_lock_wait (int *futex) int -__lll_robust_timedlock_wait (int *futex, const struct timespec *abstime) +__lll_robust_timedlock_wait (int *futex, const struct timespec *abstime, + int private) { /* Reject invalid timeouts. */ if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) @@ -100,7 +101,7 @@ __lll_robust_timedlock_wait (int *futex, const struct timespec *abstime) && atomic_compare_and_exchange_bool_acq (futex, newval, oldval)) continue; - lll_futex_timed_wait (futex, newval, &rt); + lll_futex_timed_wait (futex, newval, &rt, private); try: ; diff --git a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h index 20547f94f..80b9a4369 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h @@ -24,6 +24,7 @@ #include <sys/param.h> #include <bits/pthreadtypes.h> #include <atomic.h> +#include <kernel-features.h> #ifndef __NR_futex # define __NR_futex 221 @@ -39,76 +40,99 @@ #define FUTEX_TRYLOCK_PI 8 #define FUTEX_PRIVATE_FLAG 128 +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ + & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) +# endif +#endif -/* Initializer for compatibility lock. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) - -#define lll_futex_wait(futexp, val) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT, (val), 0); \ - INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ - }) +#define lll_futex_wait(futexp, val, private) \ + lll_futex_timed_wait (futexp, val, NULL, private) -#define lll_futex_timed_wait(futexp, val, timespec) \ +#define lll_futex_timed_wait(futexp, val, timespec, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT, (val), (timespec)); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAIT, private), \ + (val), (timespec)); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ }) -#define lll_futex_wake(futexp, nr) \ +#define lll_futex_wake(futexp, nr, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAKE, (nr), 0); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAKE, private), \ + (nr), 0); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ }) -#define lll_robust_mutex_dead(futexv) \ +#define lll_robust_dead(futexv, private) \ do \ { \ INTERNAL_SYSCALL_DECL (__err); \ int *__futexp = &(futexv); \ \ atomic_or (__futexp, FUTEX_OWNER_DIED); \ - INTERNAL_SYSCALL (futex, __err, 4, __futexp, FUTEX_WAKE, 1, 0); \ + INTERNAL_SYSCALL (futex, __err, 4, __futexp, \ + __lll_private_flag (FUTEX_WAKE, private), 1, 0); \ } \ while (0) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val) \ +#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, \ - (futexp), FUTEX_CMP_REQUEUE, (nr_wake), \ - (nr_move), (mutex), (val)); \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ + (nr_wake), (nr_move), (mutex), (val)); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ }) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2) \ +#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, \ - (futexp), FUTEX_WAKE_OP, (nr_wake), \ - (nr_wake2), (futexp2), \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_WAKE_OP, private), \ + (nr_wake), (nr_wake2), (futexp2), \ FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ }) - + + #ifdef UP # define __lll_acq_instr "" # define __lll_rel_instr "" @@ -146,119 +170,111 @@ __val; \ }) -#define lll_robust_mutex_trylock(lock, id) __lll_robust_trylock (&(lock), id) +#define lll_robust_trylock(lock, id) __lll_robust_trylock (&(lock), id) /* Set *futex to 1 if it is 0, atomically. Returns the old value */ #define __lll_trylock(futex) __lll_robust_trylock (futex, 1) -#define lll_mutex_trylock(lock) __lll_trylock (&(lock)) +#define lll_trylock(lock) __lll_trylock (&(lock)) /* Set *futex to 2 if it is 0, atomically. Returns the old value */ #define __lll_cond_trylock(futex) __lll_robust_trylock (futex, 2) -#define lll_mutex_cond_trylock(lock) __lll_cond_trylock (&(lock)) +#define lll_cond_trylock(lock) __lll_cond_trylock (&(lock)) -extern void __lll_lock_wait (int *futex) attribute_hidden; -extern int __lll_robust_lock_wait (int *futex) attribute_hidden; +extern void __lll_lock_wait_private (int *futex) attribute_hidden; +extern void __lll_lock_wait (int *futex, int private) attribute_hidden; +extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; -#define lll_mutex_lock(lock) \ +#define lll_lock(lock, private) \ (void) ({ \ int *__futex = &(lock); \ if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, 1, 0),\ 0) != 0) \ - __lll_lock_wait (__futex); \ + { \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __lll_lock_wait_private (__futex); \ + else \ + __lll_lock_wait (__futex, private); \ + } \ }) -#define lll_robust_mutex_lock(lock, id) \ +#define lll_robust_lock(lock, id, private) \ ({ \ int *__futex = &(lock); \ int __val = 0; \ if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ 0), 0)) \ - __val = __lll_robust_lock_wait (__futex); \ + __val = __lll_robust_lock_wait (__futex, private); \ __val; \ }) -#define lll_mutex_cond_lock(lock) \ +#define lll_cond_lock(lock, private) \ (void) ({ \ int *__futex = &(lock); \ if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, 2, 0),\ 0) != 0) \ - __lll_lock_wait (__futex); \ + __lll_lock_wait (__futex, private); \ }) -#define lll_robust_mutex_cond_lock(lock, id) \ +#define lll_robust_cond_lock(lock, id, private) \ ({ \ int *__futex = &(lock); \ int __val = 0; \ int __id = id | FUTEX_WAITERS; \ if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, __id,\ 0), 0)) \ - __val = __lll_robust_lock_wait (__futex); \ + __val = __lll_robust_lock_wait (__futex, private); \ __val; \ }) extern int __lll_timedlock_wait - (int *futex, const struct timespec *) attribute_hidden; + (int *futex, const struct timespec *, int private) attribute_hidden; extern int __lll_robust_timedlock_wait - (int *futex, const struct timespec *) attribute_hidden; + (int *futex, const struct timespec *, int private) attribute_hidden; -#define lll_mutex_timedlock(lock, abstime) \ +#define lll_timedlock(lock, abstime, private) \ ({ \ int *__futex = &(lock); \ int __val = 0; \ if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, 1, 0),\ 0) != 0) \ - __val = __lll_timedlock_wait (__futex, abstime); \ + __val = __lll_timedlock_wait (__futex, abstime, private); \ __val; \ }) -#define lll_robust_mutex_timedlock(lock, abstime, id) \ +#define lll_robust_timedlock(lock, abstime, id, private) \ ({ \ int *__futex = &(lock); \ int __val = 0; \ if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ 0), 0)) \ - __val = __lll_robust_timedlock_wait (__futex, abstime); \ + __val = __lll_robust_timedlock_wait (__futex, abstime, private); \ __val; \ }) -#define lll_mutex_unlock(lock) \ +#define lll_unlock(lock, private) \ ((void) ({ \ int *__futex = &(lock); \ int __val = atomic_exchange_rel (__futex, 0); \ if (__builtin_expect (__val > 1, 0)) \ - lll_futex_wake (__futex, 1); \ + lll_futex_wake (__futex, 1, private); \ })) -#define lll_robust_mutex_unlock(lock) \ +#define lll_robust_unlock(lock, private) \ ((void) ({ \ int *__futex = &(lock); \ int __val = atomic_exchange_rel (__futex, 0); \ if (__builtin_expect (__val & FUTEX_WAITERS, 0)) \ - lll_futex_wake (__futex, 1); \ - })) - -#define lll_mutex_unlock_force(lock) \ - ((void) ({ \ - int *__futex = &(lock); \ - *__futex = 0; \ - __asm __volatile (__lll_rel_instr ::: "memory"); \ - lll_futex_wake (__futex, 1); \ + lll_futex_wake (__futex, 1, private); \ })) -#define lll_mutex_islocked(futex) \ +#define lll_islocked(futex) \ (futex != 0) -/* Our internal lock implementation is identical to the binary-compatible - mutex implementation. */ - -/* Type for lock object. */ -typedef int lll_lock_t; - /* Initializers for lock. */ #define LLL_LOCK_INITIALIZER (0) #define LLL_LOCK_INITIALIZER_LOCKED (1) @@ -268,11 +284,6 @@ typedef int lll_lock_t; 1 - taken by one user >1 - taken by more users */ -#define lll_trylock(lock) lll_mutex_trylock (lock) -#define lll_lock(lock) lll_mutex_lock (lock) -#define lll_unlock(lock) lll_mutex_unlock (lock) -#define lll_islocked(lock) lll_mutex_islocked (lock) - /* The kernel notifies a process which uses CLONE_CLEARTID via futex wakeup when the clone terminates. The memory location contains the thread ID while the clone is running and is reset to zero @@ -281,7 +292,7 @@ typedef int lll_lock_t; do { \ __typeof (tid) __tid; \ while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid); \ + lll_futex_wait (&(tid), __tid, LLL_SHARED); \ } while (0) extern int __lll_timedwait_tid (int *, const struct timespec *) @@ -295,26 +306,4 @@ extern int __lll_timedwait_tid (int *, const struct timespec *) __res; \ }) - -/* Conditional variable handling. */ - -extern void __lll_cond_wait (pthread_cond_t *cond) - attribute_hidden; -extern int __lll_cond_timedwait (pthread_cond_t *cond, - const struct timespec *abstime) - attribute_hidden; -extern void __lll_cond_wake (pthread_cond_t *cond) - attribute_hidden; -extern void __lll_cond_broadcast (pthread_cond_t *cond) - attribute_hidden; - -#define lll_cond_wait(cond) \ - __lll_cond_wait (cond) -#define lll_cond_timedwait(cond, abstime) \ - __lll_cond_timedwait (cond, abstime) -#define lll_cond_wake(cond) \ - __lll_cond_wake (cond) -#define lll_cond_broadcast(cond) \ - __lll_cond_broadcast (cond) - #endif /* lowlevellock.h */ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h index 3752abc87..88b24e7d9 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h @@ -1,5 +1,5 @@ /* Cancellable system call stubs. Linux/PowerPC version. - Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003. @@ -44,7 +44,6 @@ mflr 9; \ stw 9,52(1); \ cfi_offset (lr, 4); \ - CGOTSETUP; \ DOCARGS_##args; /* save syscall args around CENABLE. */ \ CENABLE; \ stw 3,16(1); /* store CENABLE return value (MASK). */ \ @@ -58,7 +57,6 @@ lwz 4,52(1); \ lwz 0,12(1); /* restore CR/R3. */ \ lwz 3,8(1); \ - CGOTRESTORE; \ mtlr 4; \ mtcr 0; \ addi 1,1,48; @@ -84,9 +82,6 @@ # define DOCARGS_6 stw 8,40(1); DOCARGS_5 # define UNDOCARGS_6 lwz 8,40(1); UNDOCARGS_5 -# define CGOTSETUP -# define CGOTRESTORE - # ifdef IS_IN_libpthread # define CENABLE bl __pthread_enable_asynccancel@local # define CDISABLE bl __pthread_disable_asynccancel@local @@ -94,20 +89,8 @@ # define CENABLE bl __libc_enable_asynccancel@local # define CDISABLE bl __libc_disable_asynccancel@local # elif defined IS_IN_librt -# define CENABLE bl JUMPTARGET(__librt_enable_asynccancel) -# define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel) -# if defined HAVE_AS_REL16 && defined PIC -# undef CGOTSETUP -# define CGOTSETUP \ - bcl 20,31,1f; \ - 1: stw 30,44(1); \ - mflr 30; \ - addis 30,30,_GLOBAL_OFFSET_TABLE-1b@ha; \ - addi 30,30,_GLOBAL_OFFSET_TABLE-1b@l -# undef CGOTRESTORE -# define CGOTRESTORE \ - lwz 30,44(1) -# endif +# define CENABLE bl __librt_enable_asynccancel@local +# define CDISABLE bl __librt_disable_asynccancel@local # else # error Unsupported library # endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c index e1afff8a3..969078094 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. @@ -30,7 +30,7 @@ clear_once_control (void *arg) pthread_once_t *once_control = (pthread_once_t *) arg; *once_control = 0; - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); } @@ -74,7 +74,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) break; /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, oldval); + lll_futex_wait (once_control, oldval, LLL_PRIVATE); } @@ -92,7 +92,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) atomic_increment (once_control); /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); return 0; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_spin_unlock.c b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_spin_unlock.c new file mode 100644 index 000000000..90f2dc67c --- /dev/null +++ b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_spin_unlock.c @@ -0,0 +1,29 @@ +/* pthread_spin_unlock -- unlock a spin lock. PowerPC version. + Copyright (C) 2007 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 "pthreadP.h" +#include <lowlevellock.h> + +int +pthread_spin_unlock (pthread_spinlock_t *lock) +{ + __asm __volatile (__lll_rel_instr ::: "memory"); + *lock = 0; + return 0; +} diff --git a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c index 91b995518..fd92f7b32 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c @@ -1,5 +1,5 @@ /* sem_post -- post to a POSIX semaphore. Powerpc version. - Copyright (C) 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. @@ -29,11 +29,37 @@ int __new_sem_post (sem_t *sem) { + struct new_sem *isem = (struct new_sem *) sem; + + __asm __volatile (__lll_rel_instr ::: "memory"); + atomic_increment (&isem->value); + __asm __volatile (__lll_acq_instr ::: "memory"); + if (isem->nwaiters > 0) + { + int err = lll_futex_wake (&isem->value, 1, + isem->private ^ FUTEX_PRIVATE_FLAG); + if (__builtin_expect (err, 0) < 0) + { + __set_errno (-err); + return -1; + } + } + return 0; +} +versioned_symbol (libpthread, __new_sem_post, sem_post, GLIBC_2_1); + +#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1) + +int +attribute_compat_text_section +__old_sem_post (sem_t *sem) +{ int *futex = (int *) sem; __asm __volatile (__lll_rel_instr ::: "memory"); int nr = atomic_increment_val (futex); - int err = lll_futex_wake (futex, nr); + /* We always have to assume it is a shared semaphore. */ + int err = lll_futex_wake (futex, 1, LLL_SHARED); if (__builtin_expect (err, 0) < 0) { __set_errno (-err); @@ -41,8 +67,6 @@ __new_sem_post (sem_t *sem) } return 0; } -versioned_symbol (libpthread, __new_sem_post, sem_post, GLIBC_2_1); -#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1) -strong_alias (__new_sem_post, __old_sem_post) + compat_symbol (libpthread, __old_sem_post, sem_post, GLIBC_2_0); #endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym b/libc/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym index a1b679426..d985c6a79 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym +++ b/libc/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym @@ -4,3 +4,4 @@ MUTEX_KIND offsetof (pthread_mutex_t, __data.__kind) PI_BIT PTHREAD_MUTEX_PRIO_INHERIT_NP +PS_BIT PTHREAD_MUTEX_PSHARED_BIT diff --git a/libc/nptl/sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c b/libc/nptl/sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c index a97351f88..93841c5b3 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c @@ -1,8 +1,12 @@ #include <pthreadP.h> -#define LLL_MUTEX_LOCK(mutex) lll_mutex_cond_lock (mutex) -#define LLL_MUTEX_TRYLOCK(mutex) lll_mutex_cond_trylock (mutex) -#define LLL_ROBUST_MUTEX_LOCK(mutex, id) lll_robust_mutex_cond_lock (mutex, id) +#define LLL_MUTEX_LOCK(mutex) \ + lll_cond_lock ((mutex)->__data.__lock, PTHREAD_MUTEX_PSHARED (mutex)) +#define LLL_MUTEX_TRYLOCK(mutex) \ + lll_cond_trylock ((mutex)->__data.__lock) +#define LLL_ROBUST_MUTEX_LOCK(mutex, id) \ + lll_robust_cond_lock ((mutex)->__data.__lock, id, \ + PTHREAD_ROBUST_MUTEX_PSHARED (mutex)) #define __pthread_mutex_lock __pthread_mutex_cond_lock #define NO_INCR diff --git a/libc/nptl/sysdeps/unix/sysv/linux/register-atfork.c b/libc/nptl/sysdeps/unix/sysv/linux/register-atfork.c index cb5b2b832..231fc9b09 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/register-atfork.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/register-atfork.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -24,7 +24,7 @@ /* Lock to protect allocation and deallocation of fork handlers. */ -lll_lock_t __fork_lock = LLL_LOCK_INITIALIZER; +int __fork_lock = LLL_LOCK_INITIALIZER; /* Number of pre-allocated handler entries. */ @@ -85,7 +85,7 @@ __register_atfork (prepare, parent, child, dso_handle) void *dso_handle; { /* Get the lock to not conflict with other allocations. */ - lll_lock (__fork_lock); + lll_lock (__fork_lock, LLL_PRIVATE); struct fork_handler *newp = fork_handler_alloc (); @@ -102,7 +102,7 @@ __register_atfork (prepare, parent, child, dso_handle) } /* Release the lock. */ - lll_unlock (__fork_lock); + lll_unlock (__fork_lock, LLL_PRIVATE); return newp == NULL ? ENOMEM : 0; } @@ -112,7 +112,7 @@ libc_hidden_def (__register_atfork) libc_freeres_fn (free_mem) { /* Get the lock to not conflict with running forks. */ - lll_lock (__fork_lock); + lll_lock (__fork_lock, LLL_PRIVATE); /* No more fork handlers. */ __fork_handlers = NULL; @@ -123,7 +123,7 @@ libc_freeres_fn (free_mem) memset (&fork_handler_pool, '\0', sizeof (fork_handler_pool)); /* Release the lock. */ - lll_unlock (__fork_lock); + lll_unlock (__fork_lock, LLL_PRIVATE); /* We can free the memory after releasing the lock. */ while (runp != NULL) diff --git a/libc/nptl/sysdeps/unix/sysv/linux/rtld-lowlevel.h b/libc/nptl/sysdeps/unix/sysv/linux/rtld-lowlevel.h index 6b3d3682d..4a4992558 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/rtld-lowlevel.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/rtld-lowlevel.h @@ -1,5 +1,5 @@ /* Defintions for lowlevel handling in ld.so. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 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,115 +24,6 @@ #include <lowlevellock.h> -/* Special multi-reader lock used in ld.so. */ -#define __RTLD_MRLOCK_WRITER 1 -#define __RTLD_MRLOCK_RWAIT 2 -#define __RTLD_MRLOCK_WWAIT 4 -#define __RTLD_MRLOCK_RBITS \ - ~(__RTLD_MRLOCK_WRITER | __RTLD_MRLOCK_RWAIT | __RTLD_MRLOCK_WWAIT) -#define __RTLD_MRLOCK_INC 8 -#define __RTLD_MRLOCK_TRIES 5 - - -typedef int __rtld_mrlock_t; - - -#define __rtld_mrlock_define(CLASS,NAME) \ - CLASS __rtld_mrlock_t NAME; - - -#define _RTLD_MRLOCK_INITIALIZER 0 -#define __rtld_mrlock_initialize(NAME) \ - (void) ((NAME) = 0) - - -#define __rtld_mrlock_lock(lock) \ - do { \ - __label__ out; \ - while (1) \ - { \ - int oldval; \ - for (int tries = 0; tries < __RTLD_MRLOCK_TRIES; ++tries) \ - { \ - oldval = lock; \ - while (__builtin_expect ((oldval \ - & (__RTLD_MRLOCK_WRITER \ - | __RTLD_MRLOCK_WWAIT)) \ - == 0, 1)) \ - { \ - int newval = ((oldval & __RTLD_MRLOCK_RBITS) \ - + __RTLD_MRLOCK_INC); \ - int ret = atomic_compare_and_exchange_val_acq (&(lock), \ - newval, \ - oldval); \ - if (__builtin_expect (ret == oldval, 1)) \ - goto out; \ - oldval = ret; \ - } \ - atomic_delay (); \ - } \ - if ((oldval & __RTLD_MRLOCK_RWAIT) == 0) \ - { \ - atomic_or (&(lock), __RTLD_MRLOCK_RWAIT); \ - oldval |= __RTLD_MRLOCK_RWAIT; \ - } \ - lll_futex_wait (lock, oldval); \ - } \ - out:; \ - } while (0) - - -#define __rtld_mrlock_unlock(lock) \ - do { \ - int oldval = atomic_exchange_and_add (&(lock), -__RTLD_MRLOCK_INC); \ - if (__builtin_expect ((oldval \ - & (__RTLD_MRLOCK_RBITS | __RTLD_MRLOCK_WWAIT)) \ - == (__RTLD_MRLOCK_INC | __RTLD_MRLOCK_WWAIT), 0)) \ - /* We have to wake all threads since there might be some queued \ - readers already. */ \ - lll_futex_wake (&(lock), 0x7fffffff); \ - } while (0) - - -/* There can only ever be one thread trying to get the exclusive lock. */ -#define __rtld_mrlock_change(lock) \ - do { \ - __label__ out; \ - while (1) \ - { \ - int oldval; \ - for (int tries = 0; tries < __RTLD_MRLOCK_TRIES; ++tries) \ - { \ - oldval = lock; \ - while (__builtin_expect ((oldval & __RTLD_MRLOCK_RBITS) == 0, 1)) \ - { \ - int newval = ((oldval & __RTLD_MRLOCK_RWAIT) \ - + __RTLD_MRLOCK_WRITER); \ - int ret = atomic_compare_and_exchange_val_acq (&(lock), \ - newval, \ - oldval); \ - if (__builtin_expect (ret == oldval, 1)) \ - goto out; \ - oldval = ret; \ - } \ - atomic_delay (); \ - } \ - atomic_or (&(lock), __RTLD_MRLOCK_WWAIT); \ - oldval |= __RTLD_MRLOCK_WWAIT; \ - lll_futex_wait (lock, oldval); \ - } \ - out:; \ - } while (0) - - -#define __rtld_mrlock_done(lock) \ - do { \ - int oldval = atomic_exchange_and_add (&(lock), -__RTLD_MRLOCK_WRITER); \ - if (__builtin_expect ((oldval & __RTLD_MRLOCK_RWAIT) != 0, 0)) \ - lll_futex_wake (&(lock), 0x7fffffff); \ - } while (0) - - /* Function to wait for variable become zero. Used in ld.so for reference counters. */ #define __rtld_waitzero(word) \ @@ -142,12 +33,12 @@ typedef int __rtld_mrlock_t; int val = word; \ if (val == 0) \ break; \ - lll_futex_wait (&(word), val); \ + lll_futex_wait (&(word), val, LLL_PRIVATE); \ } \ } while (0) #define __rtld_notify(word) \ - lll_futex_wake (&(word), 1) + lll_futex_wake (&(word), 1, LLL_PRIVATE) #endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h b/libc/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h index c77031d7b..c7345cd9a 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. @@ -159,9 +159,9 @@ typedef union unsigned int __nr_readers_queued; unsigned int __nr_writers_queued; int __writer; - int __pad1; + int __shared; + unsigned long int __pad1; unsigned long int __pad2; - unsigned long int __pad3; /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ unsigned int __flags; @@ -175,9 +175,12 @@ typedef union unsigned int __writer_wakeup; unsigned int __nr_readers_queued; unsigned int __nr_writers_queued; + unsigned char __pad1; + unsigned char __pad2; + unsigned char __shared; /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ - unsigned int __flags; + unsigned char __flags; int __writer; } __data; # endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h index d915facba..c9347e98b 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h @@ -24,6 +24,7 @@ #include <sys/param.h> #include <bits/pthreadtypes.h> #include <atomic.h> +#include <kernel-features.h> #define SYS_futex 238 #define FUTEX_WAIT 0 @@ -35,31 +36,47 @@ #define FUTEX_LOCK_PI 6 #define FUTEX_UNLOCK_PI 7 #define FUTEX_TRYLOCK_PI 8 - -/* Initializer for compatibility lock. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) - -#define lll_futex_wait(futex, val) \ - ({ \ - register unsigned long int __r2 asm ("2") = (unsigned long int) (futex); \ - register unsigned long int __r3 asm ("3") = FUTEX_WAIT; \ - register unsigned long int __r4 asm ("4") = (unsigned long int) (val); \ - register unsigned long int __r5 asm ("5") = 0ul; \ - register unsigned long __result asm ("2"); \ - \ - __asm __volatile ("svc %b1" \ - : "=d" (__result) \ - : "i" (SYS_futex), "0" (__r2), "d" (__r3), \ - "d" (__r4), "d" (__r5) \ - : "cc", "memory" ); \ - __result; \ - }) - - -#define lll_futex_timed_wait(futex, val, timespec) \ +#define FUTEX_PRIVATE_FLAG 128 + +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ + & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) +# endif +#endif + +#define lll_futex_wait(futex, val, private) \ + lll_futex_timed_wait (futex, val, NULL, private) + +#define lll_futex_timed_wait(futex, val, timespec, private) \ ({ \ register unsigned long int __r2 asm ("2") = (unsigned long int) (futex); \ - register unsigned long int __r3 asm ("3") = FUTEX_WAIT; \ + register unsigned long int __r3 asm ("3") \ + = __lll_private_flag (FUTEX_WAIT, private); \ register unsigned long int __r4 asm ("4") = (unsigned long int) (val); \ register unsigned long int __r5 asm ("5") = (unsigned long int)(timespec);\ register unsigned long int __result asm ("2"); \ @@ -73,10 +90,11 @@ }) -#define lll_futex_wake(futex, nr) \ +#define lll_futex_wake(futex, nr, private) \ ({ \ register unsigned long int __r2 asm ("2") = (unsigned long int) (futex); \ - register unsigned long int __r3 asm ("3") = FUTEX_WAKE; \ + register unsigned long int __r3 asm ("3") \ + = __lll_private_flag (FUTEX_WAKE, private); \ register unsigned long int __r4 asm ("4") = (unsigned long int) (nr); \ register unsigned long int __result asm ("2"); \ \ @@ -88,22 +106,23 @@ }) -#define lll_robust_mutex_dead(futexv) \ +#define lll_robust_dead(futexv, private) \ do \ { \ int *__futexp = &(futexv); \ \ atomic_or (__futexp, FUTEX_OWNER_DIED); \ - lll_futex_wake (__futexp, 1); \ + lll_futex_wake (__futexp, 1, private); \ } \ while (0) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(futex, nr_wake, nr_move, mutex, val) \ +#define lll_futex_requeue(futex, nr_wake, nr_move, mutex, val, private) \ ({ \ register unsigned long int __r2 asm ("2") = (unsigned long int) (futex); \ - register unsigned long int __r3 asm ("3") = FUTEX_CMP_REQUEUE; \ + register unsigned long int __r3 asm ("3") \ + = __lll_private_flag (FUTEX_CMP_REQUEUE, private); \ register unsigned long int __r4 asm ("4") = (long int) (nr_wake); \ register unsigned long int __r5 asm ("5") = (long int) (nr_move); \ register unsigned long int __r6 asm ("6") = (unsigned long int) (mutex); \ @@ -120,10 +139,11 @@ /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(futex, nr_wake, nr_wake2, futex2) \ +#define lll_futex_wake_unlock(futex, nr_wake, nr_wake2, futex2, private) \ ({ \ register unsigned long int __r2 asm ("2") = (unsigned long int) (futex); \ - register unsigned long int __r3 asm ("3") = FUTEX_WAKE_OP; \ + register unsigned long int __r3 asm ("3") \ + = __lll_private_flag (FUTEX_WAKE_OP, private); \ register unsigned long int __r4 asm ("4") = (long int) (nr_wake); \ register unsigned long int __r5 asm ("5") = (long int) (nr_wake2); \ register unsigned long int __r6 asm ("6") = (unsigned long int) (futex2); \ @@ -155,7 +175,7 @@ static inline int __attribute__ ((always_inline)) -__lll_mutex_trylock (int *futex) +__lll_trylock (int *futex) { unsigned int old; @@ -164,12 +184,12 @@ __lll_mutex_trylock (int *futex) : "0" (0), "d" (1), "m" (*futex) : "cc", "memory" ); return old != 0; } -#define lll_mutex_trylock(futex) __lll_mutex_trylock (&(futex)) +#define lll_trylock(futex) __lll_trylock (&(futex)) static inline int __attribute__ ((always_inline)) -__lll_mutex_cond_trylock (int *futex) +__lll_cond_trylock (int *futex) { unsigned int old; @@ -178,12 +198,12 @@ __lll_mutex_cond_trylock (int *futex) : "0" (0), "d" (2), "m" (*futex) : "cc", "memory" ); return old != 0; } -#define lll_mutex_cond_trylock(futex) __lll_mutex_cond_trylock (&(futex)) +#define lll_cond_trylock(futex) __lll_cond_trylock (&(futex)) static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_trylock (int *futex, int id) +__lll_robust_trylock (int *futex, int id) { unsigned int old; @@ -192,154 +212,132 @@ __lll_robust_mutex_trylock (int *futex, int id) : "0" (0), "d" (id), "m" (*futex) : "cc", "memory" ); return old != 0; } -#define lll_robust_mutex_trylock(futex, id) \ - __lll_robust_mutex_trylock (&(futex), id) +#define lll_robust_trylock(futex, id) \ + __lll_robust_trylock (&(futex), id) -extern void __lll_lock_wait (int *futex) attribute_hidden; -extern int __lll_robust_lock_wait (int *futex) attribute_hidden; +extern void __lll_lock_wait_private (int *futex) attribute_hidden; +extern void __lll_lock_wait (int *futex, int private) attribute_hidden; +extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; static inline void __attribute__ ((always_inline)) -__lll_mutex_lock (int *futex) +__lll_lock (int *futex, int private) { - if (atomic_compare_and_exchange_bool_acq (futex, 1, 0) != 0) - __lll_lock_wait (futex); + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (futex, 1, 0), 0)) + { + if (__builtin_constant_p (private) && private == LLL_PRIVATE) + __lll_lock_wait_private (futex); + else + __lll_lock_wait (futex, private); + } } -#define lll_mutex_lock(futex) __lll_mutex_lock (&(futex)) +#define lll_lock(futex, private) __lll_lock (&(futex), private) static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_lock (int *futex, int id) +__lll_robust_lock (int *futex, int id, int private) { int result = 0; - if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_lock_wait (futex); + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (futex, id, 0), + 0)) + result = __lll_robust_lock_wait (futex, private); return result; } -#define lll_robust_mutex_lock(futex, id) __lll_robust_mutex_lock (&(futex), id) +#define lll_robust_lock(futex, id, private) \ + __lll_robust_lock (&(futex), id, private) static inline void __attribute__ ((always_inline)) -__lll_mutex_cond_lock (int *futex) +__lll_cond_lock (int *futex, int private) { - if (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0) - __lll_lock_wait (futex); + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (futex, 2, 0), 0)) + __lll_lock_wait (futex, private); } -#define lll_mutex_cond_lock(futex) __lll_mutex_cond_lock (&(futex)) +#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) -#define lll_robust_mutex_cond_lock(futex, id) \ - __lll_robust_mutex_lock (&(futex), (id) | FUTEX_WAITERS) +#define lll_robust_cond_lock(futex, id, private) \ + __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private) extern int __lll_timedlock_wait - (int *futex, const struct timespec *) attribute_hidden; + (int *futex, const struct timespec *, int private) attribute_hidden; extern int __lll_robust_timedlock_wait - (int *futex, const struct timespec *) attribute_hidden; + (int *futex, const struct timespec *, int private) attribute_hidden; static inline int __attribute__ ((always_inline)) -__lll_mutex_timedlock (int *futex, const struct timespec *abstime) +__lll_timedlock (int *futex, const struct timespec *abstime, int private) { int result = 0; - if (atomic_compare_and_exchange_bool_acq (futex, 1, 0) != 0) - result = __lll_timedlock_wait (futex, abstime); + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (futex, 1, 0), 0)) + result = __lll_timedlock_wait (futex, abstime, private); return result; } -#define lll_mutex_timedlock(futex, abstime) \ - __lll_mutex_timedlock (&(futex), abstime) +#define lll_timedlock(futex, abstime, private) \ + __lll_timedlock (&(futex), abstime, private) static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime, - int id) +__lll_robust_timedlock (int *futex, const struct timespec *abstime, + int id, int private) { int result = 0; - if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_timedlock_wait (futex, abstime); + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (futex, id, 0), + 0)) + result = __lll_robust_timedlock_wait (futex, abstime, private); return result; } -#define lll_robust_mutex_timedlock(futex, abstime, id) \ - __lll_robust_mutex_timedlock (&(futex), abstime, id) - - -static inline void -__attribute__ ((always_inline)) -__lll_mutex_unlock (int *futex) -{ - int oldval; - int newval = 0; - - lll_compare_and_swap (futex, oldval, newval, "slr %2,%2"); - if (oldval > 1) - lll_futex_wake (futex, 1); -} -#define lll_mutex_unlock(futex) \ - __lll_mutex_unlock(&(futex)) - - -static inline void -__attribute__ ((always_inline)) -__lll_robust_mutex_unlock (int *futex, int mask) -{ - int oldval; - int newval = 0; - - lll_compare_and_swap (futex, oldval, newval, "slr %2,%2"); - if (oldval & mask) - lll_futex_wake (futex, 1); -} -#define lll_robust_mutex_unlock(futex) \ - __lll_robust_mutex_unlock(&(futex), FUTEX_WAITERS) - +#define lll_robust_timedlock(futex, abstime, id, private) \ + __lll_robust_timedlock (&(futex), abstime, id, private) -static inline void -__attribute__ ((always_inline)) -__lll_mutex_unlock_force (int *futex) -{ - *futex = 0; - lll_futex_wake (futex, 1); -} -#define lll_mutex_unlock_force(futex) \ - __lll_mutex_unlock_force(&(futex)) -#define lll_mutex_islocked(futex) \ +#define __lll_unlock(futex, private) \ + (void) \ + ({ int __oldval; \ + int __newval = 0; \ + int *__futexp = (futex); \ + \ + lll_compare_and_swap (__futexp, __oldval, __newval, "slr %2,%2"); \ + if (__builtin_expect (__oldval > 1, 0)) \ + lll_futex_wake (__futexp, 1, private); \ + }) +#define lll_unlock(futex, private) __lll_unlock(&(futex), private) + + +#define __lll_robust_unlock(futex, private) \ + (void) \ + ({ int __oldval; \ + int __newval = 0; \ + int *__futexp = (futex); \ + \ + lll_compare_and_swap (__futexp, __oldval, __newval, "slr %2,%2"); \ + if (__builtin_expect (__oldval & FUTEX_WAITERS, 0)) \ + lll_futex_wake (__futexp, 1, private); \ + }) +#define lll_robust_unlock(futex, private) \ + __lll_robust_unlock(&(futex), private) + +#define lll_islocked(futex) \ (futex != 0) -/* We have a separate internal lock implementation which is not tied - to binary compatibility. We can use the lll_mutex_*. */ - -/* Type for lock object. */ -typedef int lll_lock_t; - /* Initializers for lock. */ #define LLL_LOCK_INITIALIZER (0) #define LLL_LOCK_INITIALIZER_LOCKED (1) -#define lll_trylock(futex) lll_mutex_trylock (futex) -#define lll_lock(futex) lll_mutex_lock (futex) -#define lll_unlock(futex) lll_mutex_unlock (futex) -#define lll_islocked(futex) lll_mutex_islocked (futex) - -/* The states of a lock are: - 1 - untaken - 0 - taken by one user - <0 - taken by more users */ - - /* The kernel notifies a process with uses CLONE_CLEARTID via futex wakeup when the clone terminates. The memory location contains the thread ID while the clone is running and is reset to zero afterwards. */ -static inline void -__attribute__ ((always_inline)) -__lll_wait_tid (int *ptid) -{ - int tid; - - while ((tid = *ptid) != 0) - lll_futex_wait (ptid, tid); -} +#define __lll_wait_tid(ptid) \ + do \ + { \ + int __tid; \ + \ + while ((__tid = *ptid) != 0) \ + lll_futex_wait (ptid, __tid, LLL_SHARED); \ + } \ + while (0) #define lll_wait_tid(tid) __lll_wait_tid(&(tid)) extern int __lll_timedwait_tid (int *, const struct timespec *) @@ -353,25 +351,4 @@ extern int __lll_timedwait_tid (int *, const struct timespec *) __res; \ }) -/* Conditional variable handling. */ - -extern void __lll_cond_wait (pthread_cond_t *cond) - attribute_hidden; -extern int __lll_cond_timedwait (pthread_cond_t *cond, - const struct timespec *abstime) - attribute_hidden; -extern void __lll_cond_wake (pthread_cond_t *cond) - attribute_hidden; -extern void __lll_cond_broadcast (pthread_cond_t *cond) - attribute_hidden; - -#define lll_cond_wait(cond) \ - __lll_cond_wait (cond) -#define lll_cond_timedwait(cond, abstime) \ - __lll_cond_timedwait (cond, abstime) -#define lll_cond_wake(cond) \ - __lll_cond_wake (cond) -#define lll_cond_broadcast(cond) \ - __lll_cond_broadcast (cond) - #endif /* lowlevellock.h */ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/s390/pthread_once.c b/libc/nptl/sysdeps/unix/sysv/linux/s390/pthread_once.c index f29e23fd4..0012e9ae2 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/s390/pthread_once.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/s390/pthread_once.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. @@ -30,7 +30,7 @@ clear_once_control (void *arg) pthread_once_t *once_control = (pthread_once_t *) arg; *once_control = 0; - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); } @@ -76,7 +76,7 @@ __pthread_once (once_control, init_routine) if (((oldval ^ newval) & -4) == 0) { /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, newval); + lll_futex_wait (once_control, newval, LLL_PRIVATE); continue; } } @@ -101,7 +101,7 @@ __pthread_once (once_control, init_routine) : "m" (*once_control) : "cc" ); /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); break; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sem_post.c b/libc/nptl/sysdeps/unix/sysv/linux/sem_post.c index f8bc69529..25b676fcd 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sem_post.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sem_post.c @@ -35,7 +35,8 @@ __new_sem_post (sem_t *sem) atomic_full_barrier (); if (isem->nwaiters > 0) { - int err = lll_futex_wake (&isem->value, 1); + int err = lll_futex_wake (&isem->value, 1, + isem->private ^ FUTEX_PRIVATE_FLAG); if (__builtin_expect (err, 0) < 0) { __set_errno (-err); @@ -55,7 +56,8 @@ __old_sem_post (sem_t *sem) int *futex = (int *) sem; int nr = atomic_increment_val (futex); - int err = lll_futex_wake (futex, 1); + /* We always have to assume it is a shared semaphore. */ + int err = lll_futex_wake (futex, 1, LLL_SHARED); if (__builtin_expect (err, 0) < 0) { __set_errno (-err); diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c b/libc/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c index 4c8acd093..fdf0d7401 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c @@ -84,7 +84,8 @@ sem_timedwait (sem_t *sem, const struct timespec *abstime) /* Enable asynchronous cancellation. Required by the standard. */ int oldtype = __pthread_enable_asynccancel (); - err = lll_futex_timed_wait (&isem->value, 0, &rt); + err = lll_futex_timed_wait (&isem->value, 0, &rt, + isem->private ^ FUTEX_PRIVATE_FLAG); /* Disable asynchronous cancellation. */ __pthread_disable_asynccancel (oldtype); diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sem_wait.c b/libc/nptl/sysdeps/unix/sysv/linux/sem_wait.c index 05114c970..20e2b481d 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sem_wait.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sem_wait.c @@ -56,7 +56,8 @@ __new_sem_wait (sem_t *sem) /* Enable asynchronous cancellation. Required by the standard. */ int oldtype = __pthread_enable_asynccancel (); - err = lll_futex_wait (&isem->value, 0); + err = lll_futex_wait (&isem->value, 0, + isem->private ^ FUTEX_PRIVATE_FLAG); /* Disable asynchronous cancellation. */ __pthread_disable_asynccancel (oldtype); @@ -100,7 +101,8 @@ __old_sem_wait (sem_t *sem) /* Enable asynchronous cancellation. Required by the standard. */ int oldtype = __pthread_enable_asynccancel (); - err = lll_futex_wait (futex, 0); + /* Always assume the semaphore is shared. */ + err = lll_futex_wait (futex, 0, LLL_SHARED); /* Disable asynchronous cancellation. */ __pthread_disable_asynccancel (oldtype); diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h b/libc/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h index 969686dd5..badcda570 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h @@ -1,4 +1,5 @@ -/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -20,6 +21,8 @@ #ifndef _BITS_PTHREADTYPES_H #define _BITS_PTHREADTYPES_H 1 +#include <endian.h> + #define __SIZEOF_PTHREAD_ATTR_T 36 #define __SIZEOF_PTHREAD_MUTEX_T 24 #define __SIZEOF_PTHREAD_MUTEXATTR_T 4 @@ -127,9 +130,21 @@ typedef union unsigned int __writer_wakeup; unsigned int __nr_readers_queued; unsigned int __nr_writers_queued; +#if __BYTE_ORDER == __BIG_ENDIAN + unsigned char __pad1; + unsigned char __pad2; + unsigned char __shared; + /* FLAGS must stay at this position in the structure to maintain + binary compatibility. */ + unsigned char __flags; +#else /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ - unsigned int __flags; + unsigned char __flags; + unsigned char __shared; + unsigned char __pad1; + unsigned char __pad2; +#endif pthread_t __writer; } __data; char __size[__SIZEOF_PTHREAD_RWLOCK_T]; diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S index 94a24b46e..feb82110c 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007 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/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S index 3b0b66d43..e929e2849 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S @@ -18,29 +18,112 @@ #include <sysdep.h> #include <pthread-errnos.h> +#include <kernel-features.h> +#include <lowlevellock.h> #include "lowlevel-atomic.h" .text -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - +#ifdef __ASSUME_PRIVATE_FUTEX +# define LOAD_PRIVATE_FUTEX_WAIT(reg,tmp,tmp2) \ + mov #(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg; \ + extu.b reg, reg +# define LOAD_PRIVATE_FUTEX_WAKE(reg,tmp,tmp2) \ + mov #(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg; \ + extu.b reg, reg +# define LOAD_FUTEX_WAIT(reg,tmp,tmp2) \ + mov #(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), tmp; \ + extu.b tmp, tmp; \ + xor tmp, reg +# define LOAD_FUTEX_WAKE(reg,tmp,tmp2) \ + mov #(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), tmp; \ + extu.b tmp, tmp; \ + xor tmp, reg +#else +# if FUTEX_WAIT == 0 +# define LOAD_PRIVATE_FUTEX_WAIT(reg,tmp,tmp2) \ + stc gbr, tmp ; \ + mov.w 99f, reg ; \ + add reg, tmp ; \ + bra 98f ; \ + mov.l @tmp, reg ; \ +99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ +98: +# else +# define LOAD_PRIVATE_FUTEX_WAIT(reg,tmp,tmp2) \ + stc gbr, tmp ; \ + mov.w 99f, reg ; \ + add reg, tmp ; \ + mov.l @tmp, reg ; \ + bra 98f ; \ + mov #FUTEX_WAIT, tmp ; \ +99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ +98: or tmp, reg +# endif +# define LOAD_PRIVATE_FUTEX_WAKE(reg,tmp,tmp2) \ + stc gbr, tmp ; \ + mov.w 99f, reg ; \ + add reg, tmp ; \ + mov.l @tmp, reg ; \ + bra 98f ; \ + mov #FUTEX_WAKE, tmp ; \ +99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ +98: or tmp, reg +# if FUTEX_WAIT == 0 +# define LOAD_FUTEX_WAIT(reg,tmp,tmp2) \ + stc gbr, tmp ; \ + mov.w 99f, tmp2 ; \ + add tmp2, tmp ; \ + mov.l @tmp, tmp2 ; \ + bra 98f ; \ + mov #FUTEX_PRIVATE_FLAG, tmp +99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ +98: extu.b tmp, tmp ; \ + xor tmp, reg ; \ + and tmp2, reg +# else +# define LOAD_FUTEX_WAIT(reg,tmp,tmp2) \ + stc gbr, tmp ; \ + mov.w 99f, tmp2 ; \ + add tmp2, tmp ; \ + mov.l @tmp, tmp2 ; \ + bra 98f ; \ + mov #FUTEX_PRIVATE_FLAG, tmp +99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ +98: extu.b tmp, tmp ; \ + xor tmp, reg ; \ + and tmp2, reg ; \ + mov #FUTEX_WAIT, tmp ; \ + or tmp, reg +# endif +# define LOAD_FUTEX_WAKE(reg,tmp) \ + stc gbr, tmp ; \ + mov.w 99f, tmp2 ; \ + add tmp2, tmp ; \ + mov.l @tmp, tmp2 ; \ + bra 98f ; \ + mov #FUTEX_PRIVATE_FLAG, tmp +99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ +98: extu.b tmp, tmp ; \ + xor tmp, reg ; \ + and tmp2, reg ; \ + mov #FUTEX_WAKE, tmp ; \ + or tmp, reg +#endif - .globl __lll_mutex_lock_wait - .type __lll_mutex_lock_wait,@function - .hidden __lll_mutex_lock_wait + .globl __lll_lock_wait_private + .type __lll_lock_wait_private,@function + .hidden __lll_lock_wait_private .align 5 cfi_startproc -__lll_mutex_lock_wait: +__lll_lock_wait_private: mov.l r8, @-r15 cfi_adjust_cfa_offset(4) cfi_rel_offset (r8, 0) mov r4, r6 mov r5, r8 mov #0, r7 /* No timeout. */ - mov #FUTEX_WAIT, r5 + LOAD_PRIVATE_FUTEX_WAIT (r5, r0, r1) mov #2, r4 cmp/eq r4, r6 @@ -63,22 +146,67 @@ __lll_mutex_lock_wait: ret mov r2, r0 cfi_endproc - .size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait - + .size __lll_lock_wait_private,.-__lll_lock_wait_private #ifdef NOT_IN_libc - .globl __lll_mutex_timedlock_wait - .type __lll_mutex_timedlock_wait,@function - .hidden __lll_mutex_timedlock_wait + .globl __lll_lock_wait + .type __lll_lock_wait,@function + .hidden __lll_lock_wait + .align 5 + cfi_startproc +__lll_lock_wait: + mov.l r9, @-r15 + cfi_adjust_cfa_offset(4) + cfi_rel_offset (r9, 0) + mov.l r8, @-r15 + cfi_adjust_cfa_offset(4) + cfi_rel_offset (r8, 0) + mov r6, r9 + mov r4, r6 + mov r5, r8 + mov #0, r7 /* No timeout. */ + mov r9, r5 + LOAD_FUTEX_WAIT (r5, r0, r1) + + mov #2, r4 + cmp/eq r4, r6 + bf 2f + +1: + mov r8, r4 + mov #SYS_futex, r3 + extu.b r3, r3 + trapa #0x14 + SYSCALL_INST_PAD + +2: + mov #2, r6 + XCHG (r6, @r8, r2) + tst r2, r2 + bf 1b + + mov.l @r15+, r8 + mov.l @r15+, r9 + ret + mov r2, r0 + cfi_endproc + .size __lll_lock_wait,.-__lll_lock_wait + + .globl __lll_timedlock_wait + .type __lll_timedlock_wait,@function + .hidden __lll_timedlock_wait .align 5 cfi_startproc -__lll_mutex_timedlock_wait: +__lll_timedlock_wait: /* Check for a valid timeout value. */ mov.l @(4,r6), r1 mov.l .L1g, r0 cmp/hs r0, r1 bt 3f + mov.l r11, @-r15 + cfi_adjust_cfa_offset(4) + cfi_rel_offset (r11, 0) mov.l r10, @-r15 cfi_adjust_cfa_offset(4) cfi_rel_offset (r10, 0) @@ -88,6 +216,7 @@ __lll_mutex_timedlock_wait: mov.l r8, @-r15 cfi_adjust_cfa_offset(4) cfi_rel_offset (r8, 0) + mov r7, r11 mov r4, r10 mov r6, r9 mov r5, r8 @@ -100,7 +229,7 @@ __lll_mutex_timedlock_wait: /* Get current time. */ mov r15, r4 mov #0, r5 - mov #SYS_gettimeofday, r3 + mov #__NR_gettimeofday, r3 trapa #0x12 SYSCALL_INST_PAD @@ -133,7 +262,8 @@ __lll_mutex_timedlock_wait: bt 8f mov r8, r4 - mov #FUTEX_WAIT, r5 + mov r11, r5 + LOAD_FUTEX_WAIT (r5, r0, r1) mov r10, r6 mov r15, r7 mov #SYS_futex, r3 @@ -153,8 +283,9 @@ __lll_mutex_timedlock_wait: add #8, r15 mov.l @r15+, r8 mov.l @r15+, r9 + mov.l @r15+, r10 rts - mov.l @r15+, r10 + mov.l @r15+, r11 7: /* Check whether the time expired. */ mov #-ETIMEDOUT, r1 @@ -182,17 +313,16 @@ __lll_mutex_timedlock_wait: .L1g: .long 1000000000 - .size __lll_mutex_timedlock_wait,.-__lll_mutex_timedlock_wait + .size __lll_timedlock_wait,.-__lll_timedlock_wait #endif - - .globl __lll_mutex_unlock_wake - .type __lll_mutex_unlock_wake,@function - .hidden __lll_mutex_unlock_wake + .globl __lll_unlock_wake_private + .type __lll_unlock_wake_private,@function + .hidden __lll_unlock_wake_private .align 5 cfi_startproc -__lll_mutex_unlock_wake: - mov #FUTEX_WAKE, r5 +__lll_unlock_wake_private: + LOAD_PRIVATE_FUTEX_WAKE (r5, r0, r1) mov #1, r6 /* Wake one thread. */ mov #0, r7 mov.l r7, @r4 /* Stores 0. */ @@ -203,10 +333,28 @@ __lll_mutex_unlock_wake: rts nop cfi_endproc - .size __lll_mutex_unlock_wake,.-__lll_mutex_unlock_wake - + .size __lll_unlock_wake_private,.-__lll_unlock_wake_private #ifdef NOT_IN_libc + .globl __lll_unlock_wake + .type __lll_unlock_wake,@function + .hidden __lll_unlock_wake + .align 5 + cfi_startproc +__lll_unlock_wake: + LOAD_FUTEX_WAKE (r5, r0, r1) + mov #1, r6 /* Wake one thread. */ + mov #0, r7 + mov.l r7, @r4 /* Stores 0. */ + mov #SYS_futex, r3 + extu.b r3, r3 + trapa #0x14 + SYSCALL_INST_PAD + rts + nop + cfi_endproc + .size __lll_unlock_wake,.-__lll_unlock_wake + .globl __lll_timedwait_tid .type __lll_timedwait_tid,@function .hidden __lll_timedwait_tid @@ -230,7 +378,7 @@ __lll_timedwait_tid: /* Get current time. */ mov r15, r4 mov #0, r5 - mov #SYS_gettimeofday, r3 + mov #__NR_gettimeofday, r3 trapa #0x12 SYSCALL_INST_PAD @@ -261,7 +409,10 @@ __lll_timedwait_tid: bt 4f mov r8, r4 - mov #FUTEX_WAIT, r5 + /* XXX The kernel so far uses global futex for the wakeup at + all times. */ + mov #0, r5 + extu.b r5, r5 mov r2, r6 mov r15, r7 mov #SYS_futex, r3 diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h index be8d403e2..88e94b990 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h @@ -19,31 +19,80 @@ #ifndef _LOWLEVELLOCK_H #define _LOWLEVELLOCK_H 1 +#ifndef __ASSEMBLER__ #include <time.h> #include <sys/param.h> #include <bits/pthreadtypes.h> +#include <kernel-features.h> +#endif #define SYS_futex 240 #define FUTEX_WAIT 0 #define FUTEX_WAKE 1 +#define FUTEX_CMP_REQUEUE 4 +#define FUTEX_WAKE_OP 5 #define FUTEX_LOCK_PI 6 #define FUTEX_UNLOCK_PI 7 #define FUTEX_TRYLOCK_PI 8 +#define FUTEX_PRIVATE_FLAG 128 +#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) -/* Initializer for compatibility lock. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) -#define LLL_MUTEX_LOCK_INITIALIZER_LOCKED (1) -#define LLL_MUTEX_LOCK_INITIALIZER_WAITERS (2) +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG -extern int __lll_mutex_lock_wait (int val, int *__futex) attribute_hidden; -extern int __lll_mutex_timedlock_wait (int val, int *__futex, - const struct timespec *abstime) - attribute_hidden; -extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ + & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) +# endif +#endif + +#ifndef __ASSEMBLER__ -#define lll_mutex_trylock(futex) \ +/* Initializer for compatibility lock. */ +#define LLL_LOCK_INITIALIZER (0) +#define LLL_LOCK_INITIALIZER_LOCKED (1) +#define LLL_LOCK_INITIALIZER_WAITERS (2) + +extern int __lll_lock_wait_private (int val, int *__futex) + attribute_hidden; +extern int __lll_lock_wait (int val, int *__futex, int private) + attribute_hidden; +extern int __lll_timedlock_wait (int val, int *__futex, + const struct timespec *abstime, int private) + attribute_hidden; +extern int __lll_robust_lock_wait (int val, int *__futex, int private) + attribute_hidden; +extern int __lll_robust_timedlock_wait (int val, int *__futex, + const struct timespec *abstime, + int private) + attribute_hidden; +extern int __lll_unlock_wake_private (int *__futex) attribute_hidden; +extern int __lll_unlock_wake (int *__futex, int private) attribute_hidden; + +#define lll_trylock(futex) \ ({ unsigned char __result; \ __asm __volatile ("\ .align 2\n\ @@ -60,12 +109,12 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; negc %0,%0"\ : "=r" (__result) \ : "r" (&(futex)), \ - "r" (LLL_MUTEX_LOCK_INITIALIZER_LOCKED), \ - "r" (LLL_MUTEX_LOCK_INITIALIZER) \ + "r" (LLL_LOCK_INITIALIZER_LOCKED), \ + "r" (LLL_LOCK_INITIALIZER) \ : "r0", "r1", "r2", "t", "memory"); \ __result; }) -#define lll_robust_mutex_trylock(futex, id) \ +#define lll_robust_trylock(futex, id) \ ({ unsigned char __result; \ __asm __volatile ("\ .align 2\n\ @@ -83,11 +132,11 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; : "=r" (__result) \ : "r" (&(futex)), \ "r" (id), \ - "r" (LLL_MUTEX_LOCK_INITIALIZER) \ + "r" (LLL_LOCK_INITIALIZER) \ : "r0", "r1", "r2", "t", "memory"); \ __result; }) -#define lll_mutex_cond_trylock(futex) \ +#define lll_cond_trylock(futex) \ ({ unsigned char __result; \ __asm __volatile ("\ .align 2\n\ @@ -104,13 +153,13 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; negc %0,%0"\ : "=r" (__result) \ : "r" (&(futex)), \ - "r" (LLL_MUTEX_LOCK_INITIALIZER_WAITERS), \ - "r" (LLL_MUTEX_LOCK_INITIALIZER) \ + "r" (LLL_LOCK_INITIALIZER_WAITERS), \ + "r" (LLL_LOCK_INITIALIZER) \ : "r0", "r1", "r2", "t", "memory"); \ __result; }) -#define lll_mutex_lock(futex) \ - (void) ({ int __result, val, *__futex = &(futex); \ +#define lll_lock(futex, private) \ + (void) ({ int __result, *__futex = &(futex); \ __asm __volatile ("\ .align 2\n\ mova 1f,r0\n\ @@ -125,10 +174,17 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; : "=&r" (__result) : "r" (1), "r" (__futex) \ : "r0", "r1", "t", "memory"); \ if (__result) \ - __lll_mutex_lock_wait (__result, __futex); }) - -#define lll_robust_mutex_lock(futex, id) \ - ({ int __result, val, *__futex = &(futex); \ + { \ + if (__builtin_constant_p (private) \ + && (private) == LLL_PRIVATE) \ + __lll_lock_wait_private (__result, __futex); \ + else \ + __lll_lock_wait (__result, __futex, (private)); \ + } \ + }) + +#define lll_robust_lock(futex, id, private) \ + ({ int __result, *__futex = &(futex); \ __asm __volatile ("\ .align 2\n\ mova 1f,r0\n\ @@ -143,13 +199,13 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; : "=&r" (__result) : "r" (id), "r" (__futex) \ : "r0", "r1", "t", "memory"); \ if (__result) \ - __result = __lll_robust_mutex_lock_wait (__result, __futex); \ + __result = __lll_robust_lock_wait (__result, __futex, private); \ __result; }) /* Special version of lll_mutex_lock which causes the unlock function to always wakeup waiters. */ -#define lll_mutex_cond_lock(futex) \ - (void) ({ int __result, val, *__futex = &(futex); \ +#define lll_cond_lock(futex, private) \ + (void) ({ int __result, *__futex = &(futex); \ __asm __volatile ("\ .align 2\n\ mova 1f,r0\n\ @@ -164,10 +220,10 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; : "=&r" (__result) : "r" (2), "r" (__futex) \ : "r0", "r1", "t", "memory"); \ if (__result) \ - __lll_mutex_lock_wait (__result, __futex); }) + __lll_lock_wait (__result, __futex, private); }) -#define lll_robust_mutex_cond_lock(futex, id) \ - ({ int __result, val, *__futex = &(futex); \ +#define lll_robust_cond_lock(futex, id, private) \ + ({ int __result, *__futex = &(futex); \ __asm __volatile ("\ .align 2\n\ mova 1f,r0\n\ @@ -182,11 +238,11 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; : "=&r" (__result) : "r" (id | FUTEX_WAITERS), "r" (__futex) \ : "r0", "r1", "t", "memory"); \ if (__result) \ - __result = __lll_robust_mutex_lock_wait (__result, __futex); \ + __result = __lll_robust_lock_wait (__result, __futex, private); \ __result; }) -#define lll_mutex_timedlock(futex, timeout) \ - ({ int __result, val, *__futex = &(futex); \ +#define lll_timedlock(futex, timeout, private) \ + ({ int __result, *__futex = &(futex); \ __asm __volatile ("\ .align 2\n\ mova 1f,r0\n\ @@ -201,11 +257,11 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; : "=&r" (__result) : "r" (1), "r" (__futex) \ : "r0", "r1", "t", "memory"); \ if (__result) \ - __result = __lll_mutex_timedlock_wait (__result, __futex, timeout); \ + __result = __lll_timedlock_wait (__result, __futex, timeout, private); \ __result; }) -#define lll_robust_mutex_timedlock(futex, timeout, id) \ - ({ int __result, val, *__futex = &(futex); \ +#define lll_robust_timedlock(futex, timeout, id, private) \ + ({ int __result, *__futex = &(futex); \ __asm __volatile ("\ .align 2\n\ mova 1f,r0\n\ @@ -220,11 +276,11 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; : "=&r" (__result) : "r" (id), "r" (__futex) \ : "r0", "r1", "t", "memory"); \ if (__result) \ - __result = __lll_robust_mutex_timedlock_wait (__result, __futex, \ - timeout); \ + __result = __lll_robust_timedlock_wait (__result, __futex, \ + timeout, private); \ __result; }) -#define lll_mutex_unlock(futex) \ +#define lll_unlock(futex, private) \ (void) ({ int __result, *__futex = &(futex); \ __asm __volatile ("\ .align 2\n\ @@ -238,9 +294,16 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; : "=&r" (__result) : "r" (__futex) \ : "r0", "r1", "memory"); \ if (__result) \ - __lll_mutex_unlock_wake (__futex); }) - -#define lll_robust_mutex_unlock(futex) \ + { \ + if (__builtin_constant_p (private) \ + && (private) == LLL_PRIVATE) \ + __lll_unlock_wake_private (__futex); \ + else \ + __lll_unlock_wake (__futex, (private)); \ + } \ + }) + +#define lll_robust_unlock(futex, private) \ (void) ({ int __result, *__futex = &(futex); \ __asm __volatile ("\ .align 2\n\ @@ -251,12 +314,12 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; and %2,%0\n\ mov.l %0,@%1\n\ 1: mov r1,r15"\ - : "=&r" (__result) : "r" (__futex), "r" (FUTEX_TID_MASK) \ + : "=&r" (__result) : "r" (__futex), "r" (FUTEX_WAITERS) \ : "r0", "r1", "memory"); \ if (__result) \ - __lll_mutex_unlock_wake (__futex); }) + __lll_unlock_wake (__futex, private); }) -#define lll_robust_mutex_dead(futex) \ +#define lll_robust_dead(futex, private) \ (void) ({ int __ignore, *__futex = &(futex); \ __asm __volatile ("\ .align 2\n\ @@ -269,22 +332,7 @@ extern int __lll_mutex_unlock_wake (int *__futex) attribute_hidden; 1: mov r1,r15"\ : "=&r" (__ignore) : "r" (__futex), "r" (FUTEX_OWNER_DIED) \ : "r0", "r1", "memory"); \ - lll_futex_wake (__futex, 1); }) - -#define lll_mutex_islocked(futex) \ - (futex != 0) - - -/* We have a separate internal lock implementation which is not tied - to binary compatibility. */ - -/* Type for lock object. */ -typedef int lll_lock_t; - -/* Initializers for lock. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) - + lll_futex_wake (__futex, 1, private); }) # ifdef NEED_SYSCALL_INST_PAD # define SYSCALL_WITH_INST_PAD "\ @@ -294,29 +342,17 @@ typedef int lll_lock_t; trapa #0x14" # endif -#define lll_futex_wait(futex, val) \ - ({ \ - int __status; \ - register unsigned long __r3 asm ("r3") = SYS_futex; \ - register unsigned long __r4 asm ("r4") = (unsigned long) (futex); \ - register unsigned long __r5 asm ("r5") = FUTEX_WAIT; \ - register unsigned long __r6 asm ("r6") = (unsigned long) (val); \ - register unsigned long __r7 asm ("r7") = 0; \ - __asm __volatile (SYSCALL_WITH_INST_PAD \ - : "=z" (__status) \ - : "r" (__r3), "r" (__r4), "r" (__r5), \ - "r" (__r6), "r" (__r7) \ - : "memory", "t"); \ - __status; \ - }) +#define lll_futex_wait(futex, val, private) \ + lll_futex_timed_wait (futex, val, NULL, private) -#define lll_futex_timed_wait(futex, val, timeout) \ +#define lll_futex_timed_wait(futex, val, timeout, private) \ ({ \ int __status; \ register unsigned long __r3 asm ("r3") = SYS_futex; \ register unsigned long __r4 asm ("r4") = (unsigned long) (futex); \ - register unsigned long __r5 asm ("r5") = FUTEX_WAIT; \ + register unsigned long __r5 asm ("r5") \ + = __lll_private_flag (FUTEX_WAIT, private); \ register unsigned long __r6 asm ("r6") = (unsigned long) (val); \ register unsigned long __r7 asm ("r7") = (timeout); \ __asm __volatile (SYSCALL_WITH_INST_PAD \ @@ -328,12 +364,13 @@ typedef int lll_lock_t; }) -#define lll_futex_wake(futex, nr) \ +#define lll_futex_wake(futex, nr, private) \ do { \ int __ignore; \ register unsigned long __r3 asm ("r3") = SYS_futex; \ register unsigned long __r4 asm ("r4") = (unsigned long) (futex); \ - register unsigned long __r5 asm ("r5") = FUTEX_WAKE; \ + register unsigned long __r5 asm ("r5") \ + = __lll_private_flag (FUTEX_WAKE, private); \ register unsigned long __r6 asm ("r6") = (unsigned long) (nr); \ register unsigned long __r7 asm ("r7") = 0; \ __asm __volatile (SYSCALL_WITH_INST_PAD \ @@ -344,30 +381,19 @@ typedef int lll_lock_t; } while (0) -/* The states of a lock are: - 0 - untaken - 1 - taken by one user - 2 - taken by more users */ - -#define lll_trylock(futex) lll_mutex_trylock (futex) -#define lll_lock(futex) lll_mutex_lock (futex) -#define lll_unlock(futex) lll_mutex_unlock (futex) - #define lll_islocked(futex) \ (futex != LLL_LOCK_INITIALIZER) - /* The kernel notifies a process with uses CLONE_CLEARTID via futex wakeup when the clone terminates. The memory location contains the thread ID while the clone is running and is reset to zero afterwards. */ -extern int __lll_wait_tid (int *tid) attribute_hidden; #define lll_wait_tid(tid) \ do { \ __typeof (tid) *__tid = &(tid); \ while (*__tid != 0) \ - lll_futex_wait (__tid, *__tid); \ + lll_futex_wait (__tid, *__tid, LLL_SHARED); \ } while (0) extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime) @@ -384,24 +410,6 @@ extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime) } \ __result; }) - -/* Conditional variable handling. */ - -extern void __lll_cond_wait (pthread_cond_t *cond) attribute_hidden; -extern int __lll_cond_timedwait (pthread_cond_t *cond, - const struct timespec *abstime) - attribute_hidden; -extern void __lll_cond_wake (pthread_cond_t *cond) attribute_hidden; -extern void __lll_cond_broadcast (pthread_cond_t *cond) attribute_hidden; - - -#define lll_cond_wait(cond) \ - __lll_cond_wait (cond) -#define lll_cond_timedwait(cond, abstime) \ - __lll_cond_timedwait (cond, abstime) -#define lll_cond_wake(cond) \ - __lll_cond_wake (cond) -#define lll_cond_broadcast(cond) \ - __lll_cond_broadcast (cond) +#endif /* !__ASSEMBLER__ */ #endif /* lowlevellock.h */ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S index c57d3cff1..0ebfbfe8c 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S @@ -1,4 +1,5 @@ -/* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2005, 2006, 2007 + 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 @@ -18,31 +19,64 @@ #include <sysdep.h> #include <pthread-errnos.h> +#include <lowlevellock.h> #include <lowlevelrobustlock.h> +#include <kernel-features.h> #include "lowlevel-atomic.h" .text -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 #define FUTEX_WAITERS 0x80000000 #define FUTEX_OWNER_DIED 0x40000000 +#ifdef __ASSUME_PRIVATE_FUTEX +# define LOAD_FUTEX_WAIT(reg,tmp,tmp2) \ + mov #(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), tmp; \ + extu.b tmp, tmp; \ + xor tmp, reg +#else +# if FUTEX_WAIT == 0 +# define LOAD_FUTEX_WAIT(reg,tmp,tmp2) \ + stc gbr, tmp ; \ + mov.w 99f, tmp2 ; \ + add tmp2, tmp ; \ + mov.l @tmp, tmp2 ; \ + bra 98f ; \ + mov #FUTEX_PRIVATE_FLAG, tmp +99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ +98: extu.b tmp, tmp ; \ + xor tmp, reg ; \ + and tmp2, reg +# else +# define LOAD_FUTEX_WAIT(reg,tmp,tmp2) \ + stc gbr, tmp ; \ + mov.w 99f, tmp2 ; \ + add tmp2, tmp ; \ + mov.l @tmp, tmp2 ; \ + bra 98f ; \ + mov #FUTEX_PRIVATE_FLAG, tmp +99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ +98: extu.b tmp, tmp ; \ + xor tmp, reg ; \ + and tmp2, reg ; \ + mov #FUTEX_WAIT, tmp ; \ + or tmp, reg +# endif +#endif - .globl __lll_robust_mutex_lock_wait - .type __lll_robust_mutex_lock_wait,@function - .hidden __lll_robust_mutex_lock_wait + .globl __lll_robust_lock_wait + .type __lll_robust_lock_wait,@function + .hidden __lll_robust_lock_wait .align 5 cfi_startproc -__lll_robust_mutex_lock_wait: +__lll_robust_lock_wait: mov.l r8, @-r15 cfi_adjust_cfa_offset(4) cfi_rel_offset (r8, 0) mov r5, r8 mov #0, r7 /* No timeout. */ - mov #FUTEX_WAIT, r5 + mov r6, r5 + LOAD_FUTEX_WAIT (r5, r0, r1) 4: mov r4, r6 @@ -90,21 +124,24 @@ __lll_robust_mutex_lock_wait: .long FUTEX_WAITERS .Ltidoff: .word TID - TLS_PRE_TCB_SIZE - .size __lll_robust_mutex_lock_wait,.-__lll_robust_mutex_lock_wait + .size __lll_robust_lock_wait,.-__lll_robust_lock_wait - .globl __lll_robust_mutex_timedlock_wait - .type __lll_robust_mutex_timedlock_wait,@function - .hidden __lll_robust_mutex_timedlock_wait + .globl __lll_robust_timedlock_wait + .type __lll_robust_timedlock_wait,@function + .hidden __lll_robust_timedlock_wait .align 5 cfi_startproc -__lll_robust_mutex_timedlock_wait: +__lll_robust_timedlock_wait: /* Check for a valid timeout value. */ mov.l @(4,r6), r1 mov.l .L1g, r0 cmp/hs r0, r1 bt 3f + mov.l r11, @-r15 + cfi_adjust_cfa_offset(4) + cfi_rel_offset (r11, 0) mov.l r10, @-r15 cfi_adjust_cfa_offset(4) cfi_rel_offset (r10, 0) @@ -114,6 +151,7 @@ __lll_robust_mutex_timedlock_wait: mov.l r8, @-r15 cfi_adjust_cfa_offset(4) cfi_rel_offset (r8, 0) + mov r7, r11 mov r4, r10 mov r6, r9 mov r5, r8 @@ -126,7 +164,7 @@ __lll_robust_mutex_timedlock_wait: /* Get current time. */ mov r15, r4 mov #0, r5 - mov #SYS_gettimeofday, r3 + mov #__NR_gettimeofday, r3 trapa #0x12 SYSCALL_INST_PAD @@ -167,7 +205,8 @@ __lll_robust_mutex_timedlock_wait: 2: mov r8, r4 - mov #FUTEX_WAIT, r5 + mov r11, r5 + LOAD_FUTEX_WAIT (r5, r0, r1) mov r10, r6 mov r15, r7 mov #SYS_futex, r3 @@ -196,8 +235,9 @@ __lll_robust_mutex_timedlock_wait: add #8, r15 mov.l @r15+, r8 mov.l @r15+, r9 + mov.l @r15+, r10 rts - mov.l @r15+, r10 + mov.l @r15+, r11 7: /* Check whether the time expired. */ @@ -221,4 +261,4 @@ __lll_robust_mutex_timedlock_wait: .word TID - TLS_PRE_TCB_SIZE .L1k: .word 1000 - .size __lll_robust_mutex_timedlock_wait,.-__lll_robust_mutex_timedlock_wait + .size __lll_robust_timedlock_wait,.-__lll_robust_timedlock_wait diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S index 1fbb23a5a..c7d7d2278 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,14 +17,10 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelbarrier.h> #include "lowlevel-atomic.h" -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - - .text .globl pthread_barrier_wait @@ -65,7 +61,13 @@ pthread_barrier_wait: #if CURR_EVENT != 0 add #CURR_EVENT, r4 #endif +#if FUTEX_WAIT == 0 + mov.l @(PRIVATE,r8), r5 +#else mov #FUTEX_WAIT, r5 + mov.l @(PRIVATE,r8), r0 + or r0, r5 +#endif mov #0, r7 8: mov #SYS_futex, r3 @@ -118,6 +120,8 @@ pthread_barrier_wait: #endif mov #0, r7 mov #FUTEX_WAKE, r5 + mov.l @(PRIVATE,r8), r0 + or r0, r5 mov #SYS_futex, r3 extu.b r3, r3 trapa #0x14 @@ -144,6 +148,10 @@ pthread_barrier_wait: mov.l @r15+, r9 1: + mov.l @(PRIVATE,r8), r6 + mov #LLL_SHARED, r0 + extu.b r0, r0 + xor r0, r6 mov r2, r4 mov r8, r5 mov.l .Lwait0, r1 @@ -154,6 +162,10 @@ pthread_barrier_wait: nop 4: + mov.l @(PRIVATE,r8), r5 + mov #LLL_SHARED, r0 + extu.b r0, r0 + xor r0, r5 mov r8, r4 mov.l .Lwake0, r1 bsrf r1 @@ -164,6 +176,10 @@ pthread_barrier_wait: 6: mov r6, r9 + mov.l @(PRIVATE,r8), r5 + mov #LLL_SHARED, r0 + extu.b r0, r0 + xor r0, r5 mov r8, r4 mov.l .Lwake1, r1 bsrf r1 @@ -174,6 +190,10 @@ pthread_barrier_wait: 9: mov r6, r9 + mov.l @(PRIVATE,r8), r5 + mov #LLL_SHARED, r0 + extu.b r0, r0 + xor r0, r5 mov r8, r4 mov.l .Lwake2, r1 bsrf r1 @@ -186,11 +206,11 @@ pthread_barrier_wait: .Lall: .long 0x7fffffff .Lwait0: - .long __lll_mutex_lock_wait-.Lwait0b + .long __lll_lock_wait-.Lwait0b .Lwake0: - .long __lll_mutex_unlock_wake-.Lwake0b + .long __lll_unlock_wake-.Lwake0b .Lwake1: - .long __lll_mutex_unlock_wake-.Lwake1b + .long __lll_unlock_wake-.Lwake1b .Lwake2: - .long __lll_mutex_unlock_wake-.Lwake2b + .long __lll_unlock_wake-.Lwake2b .size pthread_barrier_wait,.-pthread_barrier_wait diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S index 56f0aa95d..7dff15ac5 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2006, 2007 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 @@ -18,19 +18,13 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <kernel-features.h> #include <pthread-pi-defines.h> +#include <pthread-errnos.h> #include "lowlevel-atomic.h" -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_REQUEUE 3 -#define FUTEX_CMP_REQUEUE 4 - -#define EINVAL 22 - .text /* int pthread_cond_broadcast (pthread_cond_t *cond) */ @@ -99,13 +93,24 @@ __pthread_cond_broadcast: bt/s 9f add #cond_futex, r4 - /* XXX: The kernel so far doesn't support requeue to PI futex. */ + /* XXX: The kernel only supports FUTEX_CMP_REQUEUE to the same + type of futex (private resp. shared). */ mov.l @(MUTEX_KIND,r9), r0 - tst #PI_BIT, r0 + tst #(PI_BIT|PS_BIT), r0 bf 9f /* Wake up all threads. */ - mov #FUTEX_CMP_REQUEUE, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_CMP_REQUEUE|FUTEX_PRIVATE_FLAG), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_CMP_REQUEUE, r0 + or r0, r5 +#endif mov #1, r6 mov #-1, r7 shlr r7 /* r7 = 0x7fffffff */ @@ -162,10 +167,17 @@ __pthread_cond_broadcast: #if cond_lock != 0 add #cond_lock, r5 #endif - mov.l .Lmwait5, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r6 + mov #LLL_SHARED, r6 +99: + extu.b r6, r6 + mov.l .Lwait5, r1 bsrf r1 mov r2, r4 -.Lmwait5b: +.Lwait5b: bra 2b nop @@ -175,10 +187,16 @@ __pthread_cond_broadcast: #if cond_lock != 0 add #cond_lock, r4 #endif - mov.l .Lmwake5, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lwake5, r1 bsrf r1 - nop -.Lmwake5b: + extu.b r5, r5 +.Lwake5b: bra 6b nop @@ -188,15 +206,36 @@ __pthread_cond_broadcast: #if cond_lock != 0 add #cond_lock, r4 #endif - mov.l .Lmwake6, r1 + mov #-1, r0 + cmp/eq r0, r9 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lwake6, r1 bsrf r1 - nop -.Lmwake6b: + extu.b r5, r5 +.Lwake6b: bra 8b nop 9: - mov #FUTEX_WAKE, r5 + mov #-1, r0 + cmp/eq r0, r9 + bt/s 99f + mov #FUTEX_WAKE, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_WAKE|FUTEX_PRIVATE_FLAG), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_WAKE, r0 + or r0, r5 +#endif +99: mov #-1, r6 shlr r6 /* r6 = 0x7fffffff */ mov #0, r7 @@ -207,13 +246,18 @@ __pthread_cond_broadcast: bra 10b nop +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif + .align 2 -.Lmwait5: - .long __lll_mutex_lock_wait-.Lmwait5b -.Lmwake5: - .long __lll_mutex_unlock_wake-.Lmwake5b -.Lmwake6: - .long __lll_mutex_unlock_wake-.Lmwake6b +.Lwait5: + .long __lll_lock_wait-.Lwait5b +.Lwake5: + .long __lll_unlock_wake-.Lwake5b +.Lwake6: + .long __lll_unlock_wake-.Lwake6b .size __pthread_cond_broadcast, .-__pthread_cond_broadcast versioned_symbol (libpthread, __pthread_cond_broadcast, pthread_cond_broadcast, GLIBC_2_3_2) diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S index 8b0196fdc..9cb73a233 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 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 @@ -18,17 +18,12 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <kernel-features.h> +#include <pthread-errnos.h> #include "lowlevel-atomic.h" -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_REQUEUE 3 - -#define EINVAL 22 - .text /* int pthread_cond_signal (pthread_cond_t *cond) */ @@ -79,14 +74,63 @@ __pthread_cond_signal: /* Wake up one thread. */ mov r8, r4 add #cond_futex, r4 - mov #FUTEX_WAKE, r5 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bt/s 99f + mov #FUTEX_WAKE_OP, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_WAKE_OP|FUTEX_PRIVATE_FLAG), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_WAKE_OP, r0 + or r0, r5 +#endif +99: mov #1, r6 mov #0, r7 + mov r8, r0 + add #cond_lock, r0 + mov.l .Lfutexop, r1 mov #SYS_futex, r3 extu.b r3, r3 trapa #0x14 SYSCALL_INST_PAD + /* For any kind of error, we try again with WAKE. + The general test also covers running on old kernels. */ + mov r0, r1 + mov #-12, r2 + shad r2, r1 + not r1, r1 + tst r1, r1 + bt 7f + +6: + mov #0, r0 + lds.l @r15+, pr + rts + mov.l @r15+, r8 + +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif + .align 2 +.Lfutexop: + .long FUTEX_OP_CLEAR_WAKE_IF_GT_ONE + +7: + /* r5 should be either FUTEX_WAKE_OP or + FUTEX_WAKE_OP|FUTEX_PRIVATE_FLAG from the previous syscall. */ + mov #(FUTEX_WAKE ^ FUTEX_WAKE_OP), r0 + xor r0, r5 + trapa #0x14 + SYSCALL_INST_PAD + 4: /* Unlock. */ #if cond_lock != 0 @@ -95,12 +139,26 @@ __pthread_cond_signal: DEC (@r8, r2) #endif tst r2, r2 - bf 5f -6: - mov #0, r0 - lds.l @r15+, pr - rts - mov.l @r15+, r8 + bt 6b + +5: + /* Unlock in loop requires wakeup. */ + mov r8, r4 +#if cond_lock != 0 + add #cond_lock, r4 +#endif + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lwake4, r1 + bsrf r1 + extu.b r5, r5 +.Lwake4b: + bra 6b + nop 1: /* Initial locking failed. */ @@ -108,31 +166,25 @@ __pthread_cond_signal: #if cond_lock != 0 add #cond_lock, r5 #endif - mov.l .Lmwait4, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r6 + mov #LLL_SHARED, r6 +99: + extu.b r6, r6 + mov.l .Lwait4, r1 bsrf r1 mov r2, r4 -.Lmwait4b: +.Lwait4b: bra 2b nop -5: - /* Unlock in loop requires wakeup. */ - mov r8, r4 -#if cond_lock != 0 - add #cond_lock, r4 -#endif - mov.l .Lmwake4, r1 - bsrf r1 - nop -.Lmwake4b: - bra 6b - nop - .align 2 -.Lmwait4: - .long __lll_mutex_lock_wait-.Lmwait4b -.Lmwake4: - .long __lll_mutex_unlock_wake-.Lmwake4b +.Lwait4: + .long __lll_lock_wait-.Lwait4b +.Lwake4: + .long __lll_unlock_wake-.Lwake4b .size __pthread_cond_signal, .-__pthread_cond_signal versioned_symbol (libpthread, __pthread_cond_signal, pthread_cond_signal, GLIBC_2_3_2) diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S index 6c782c8a7..4cf0ac45c 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2006, 2007 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 @@ -18,16 +18,13 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <pthread-errnos.h> +#include <kernel-features.h> +#include <tcb-offsets.h> #include "lowlevel-atomic.h" -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - - .text /* int pthread_cond_timedwait (pthread_cond_t *cond, pthread_mutex_t *mutex, @@ -120,7 +117,7 @@ __pthread_cond_timedwait: mov.l @(cond_futex,r8), r0 add r2, r0 mov.l r0, @(cond_futex,r8) - mov #(1 << clock_bits), r2 + mov #(1 << nwaiters_shift), r2 mov.l @(cond_nwaiters,r8), r0 add r2, r0 mov.l r0, @(cond_nwaiters,r8) @@ -136,7 +133,7 @@ __pthread_cond_timedwait: #ifdef __NR_clock_gettime /* Get the clock number. */ mov.l @(cond_nwaiters,r8), r4 - mov #((1 << clock_bits) - 1), r0 + mov #((1 << nwaiters_shift) - 1), r0 and r0, r4 /* Only clocks 0 and 1 are allowed. Both are handled in the kernel. */ @@ -164,7 +161,7 @@ __pthread_cond_timedwait: mov r15, r4 add #16, r4 mov #0, r5 - mov #SYS_gettimeofday, r3 + mov #__NR_gettimeofday, r3 trapa #0x12 SYSCALL_INST_PAD @@ -182,7 +179,7 @@ __pthread_cond_timedwait: mov r15, r4 add #16, r4 mov #0, r5 - mov #SYS_gettimeofday, r3 + mov #__NR_gettimeofday, r3 trapa #0x12 SYSCALL_INST_PAD @@ -234,7 +231,22 @@ __pthread_cond_timedwait: mov r15, r7 add #16, r7 - mov #FUTEX_WAIT, r5 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bt/s 99f + mov #FUTEX_WAIT, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_WAIT|FUTEX_PRIVATE_FLAG), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_WAIT, r0 + or r0, r5 +#endif +99: mov.l @(8,r15), r6 mov r8, r4 add #cond_futex, r4 @@ -323,7 +335,7 @@ __pthread_cond_timedwait: mov.l r1,@(woken_seq+4,r8) 24: - mov #(1 << clock_bits), r2 + mov #(1 << nwaiters_shift), r2 mov.l @(cond_nwaiters,r8),r0 sub r2, r0 mov.l r0,@(cond_nwaiters,r8) @@ -335,7 +347,7 @@ __pthread_cond_timedwait: not r0, r0 cmp/eq #0, r0 bf/s 25f - mov #((1 << clock_bits) - 1), r1 + mov #((1 << nwaiters_shift) - 1), r1 not r1, r1 mov.l @(cond_nwaiters,r8),r0 tst r1, r0 @@ -343,7 +355,22 @@ __pthread_cond_timedwait: mov r8, r4 add #cond_nwaiters, r4 - mov #FUTEX_WAKE, r5 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bt/s 99f + mov #FUTEX_WAKE, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_WAKE|FUTEX_PRIVATE_FLAG), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_WAKE, r0 + or r0, r5 +#endif +99: mov #1, r6 mov #0, r7 mov #SYS_futex, r3 @@ -383,6 +410,10 @@ __pthread_cond_timedwait: rts mov.l @r15+, r8 +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif .L1k: .word 1000 .align 2 @@ -403,10 +434,17 @@ __pthread_cond_timedwait: #if cond_lock != 0 add #cond_lock, r5 #endif - mov.l .Lmwait2, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r6 + mov #LLL_SHARED, r6 +99: + extu.b r6, r6 + mov.l .Lwait2, r1 bsrf r1 mov r2, r4 -.Lmwait2b: +.Lwait2b: bra 2b nop @@ -416,10 +454,16 @@ __pthread_cond_timedwait: #if cond_lock != 0 add #cond_lock, r4 #endif - mov.l .Lmwake2, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lmwait2, r1 bsrf r1 - nop -.Lmwake2b: + extu.b r5, r5 +.Lmwait2b: bra 4b nop @@ -429,10 +473,17 @@ __pthread_cond_timedwait: #if cond_lock != 0 add #cond_lock, r5 #endif - mov.l .Lmwait3, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r6 + mov #LLL_SHARED, r6 +99: + extu.b r6, r6 + mov.l .Lwait3, r1 bsrf r1 mov r2, r4 -.Lmwait3b: +.Lwait3b: bra 6b nop @@ -442,10 +493,16 @@ __pthread_cond_timedwait: #if cond_lock != 0 add #cond_lock, r4 #endif - mov.l .Lmwake3, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lmwait3, r1 bsrf r1 - nop -.Lmwake3b: + extu.b r5, r5 +.Lmwait3b: bra 11b nop @@ -464,25 +521,31 @@ __pthread_cond_timedwait: #if cond_lock != 0 add #cond_lock, r4 #endif - mov.l .Lmwake4, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lmwait4, r1 bsrf r1 - nop -.Lmwake4b: + extu.b r5, r5 +.Lmwait4b: 17: bra 18b mov.l @(24,r15), r0 .align 2 +.Lwait2: + .long __lll_lock_wait-.Lwait2b .Lmwait2: - .long __lll_mutex_lock_wait-.Lmwait2b -.Lmwake2: - .long __lll_mutex_unlock_wake-.Lmwake2b + .long __lll_unlock_wake-.Lmwait2b +.Lwait3: + .long __lll_lock_wait-.Lwait3b .Lmwait3: - .long __lll_mutex_lock_wait-.Lmwait3b -.Lmwake3: - .long __lll_mutex_unlock_wake-.Lmwake3b -.Lmwake4: - .long __lll_mutex_unlock_wake-.Lmwake4b + .long __lll_unlock_wake-.Lmwait3b +.Lmwait4: + .long __lll_unlock_wake-.Lmwait4b .size __pthread_cond_timedwait, .-__pthread_cond_timedwait versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait, GLIBC_2_3_2) @@ -507,10 +570,17 @@ __condvar_tw_cleanup: #if cond_lock != 0 add #cond_lock, r5 #endif - mov.l .Lmwait5, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r6 + mov #LLL_SHARED, r6 +99: + extu.b r6, r6 + mov.l .Lwait5, r1 bsrf r1 mov r2, r4 -.Lmwait5b: +.Lwait5b: 1: mov.l @(broadcast_seq,r8), r0 @@ -557,7 +627,7 @@ __condvar_tw_cleanup: mov.l r1,@(woken_seq+4,r8) 3: - mov #(1 << clock_bits), r2 + mov #(1 << nwaiters_shift), r2 mov.l @(cond_nwaiters,r8),r0 sub r2, r0 mov.l r0,@(cond_nwaiters,r8) @@ -570,7 +640,7 @@ __condvar_tw_cleanup: not r0, r0 cmp/eq #0, r0 bf/s 4f - mov #((1 << clock_bits) - 1), r1 + mov #((1 << nwaiters_shift) - 1), r1 not r1, r1 mov.l @(cond_nwaiters,r8),r0 tst r1, r0 @@ -600,10 +670,16 @@ __condvar_tw_cleanup: #if cond_lock != 0 add #cond_lock, r4 #endif - mov.l .Lmwake5, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lmwait5, r1 bsrf r1 - nop -.Lmwake5b: + extu.b r5, r5 +.Lmwait5b: 2: /* Wake up all waiters to make sure no signal gets lost. */ @@ -636,10 +712,10 @@ __condvar_tw_cleanup: sleep .align 2 +.Lwait5: + .long __lll_lock_wait-.Lwait5b .Lmwait5: - .long __lll_mutex_lock_wait-.Lmwait5b -.Lmwake5: - .long __lll_mutex_unlock_wake-.Lmwake5b + .long __lll_unlock_wake-.Lmwait5b .Lmlocki5: .long __pthread_mutex_cond_lock-.Lmlocki5b .Lresume: diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S index 6c59f3e6c..eddf4c95a 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2006, 2007 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 @@ -18,14 +18,12 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> +#include <tcb-offsets.h> +#include <kernel-features.h> #include "lowlevel-atomic.h" -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - - .text /* int pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex) */ @@ -107,7 +105,7 @@ __pthread_cond_wait: mov.l @(cond_futex,r8),r0 add r2, r0 mov.l r0,@(cond_futex,r8) - mov #(1 << clock_bits), r2 + mov #(1 << nwaiters_shift), r2 mov.l @(cond_nwaiters,r8), r0 add r2, r0 mov.l r0, @(cond_nwaiters,r8) @@ -139,7 +137,22 @@ __pthread_cond_wait: mov.l r0, @r15 mov #0, r7 - mov #FUTEX_WAIT, r5 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bt/s 99f + mov #FUTEX_WAIT, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_WAIT|FUTEX_PRIVATE_FLAG), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff0, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_WAIT, r0 + or r0, r5 +#endif +99: mov.l @(8,r15), r6 mov r8, r4 add #cond_futex, r4 @@ -197,7 +210,7 @@ __pthread_cond_wait: mov.l r1,@(woken_seq+4,r8) 16: - mov #(1 << clock_bits), r2 + mov #(1 << nwaiters_shift), r2 mov.l @(cond_nwaiters,r8),r0 sub r2, r0 mov.l r0,@(cond_nwaiters,r8) @@ -209,7 +222,7 @@ __pthread_cond_wait: not r0, r0 cmp/eq #0, r0 bf/s 17f - mov #((1 << clock_bits) - 1), r1 + mov #((1 << nwaiters_shift) - 1), r1 not r1, r1 mov.l @(cond_nwaiters,r8),r0 tst r1, r0 @@ -217,7 +230,22 @@ __pthread_cond_wait: mov r8, r4 add #cond_nwaiters, r4 - mov #FUTEX_WAKE, r5 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bt/s 99f + mov #FUTEX_WAKE, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_WAKE|FUTEX_PRIVATE_FLAG), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff0, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_WAKE, r0 + or r0, r5 +#endif +99: mov #1, r6 mov #0, r7 mov #SYS_futex, r3 @@ -251,6 +279,10 @@ __pthread_cond_wait: rts mov.l @r15+, r8 +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff0: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif .align 2 .Lmunlock0: .long __pthread_mutex_unlock_usercnt-.Lmunlock0b @@ -267,10 +299,17 @@ __pthread_cond_wait: #if cond_lock != 0 add #cond_lock, r5 #endif - mov.l .Lmwait0, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r6 + mov #LLL_SHARED, r6 +99: + extu.b r6, r6 + mov.l .Lwait0, r1 bsrf r1 mov r2, r4 -.Lmwait0b: +.Lwait0b: bra 2b nop 3: @@ -279,10 +318,16 @@ __pthread_cond_wait: #if cond_lock != 0 add #cond_lock, r4 #endif - mov.l .Lmwake0, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lwake0, r1 bsrf r1 - nop -.Lmwake0b: + extu.b r5, r5 +.Lwake0b: bra 4b nop @@ -292,10 +337,17 @@ __pthread_cond_wait: #if cond_lock != 0 add #cond_lock, r5 #endif - mov.l .Lmwait1, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r6 + mov #LLL_SHARED, r6 +99: + extu.b r6, r6 + mov.l .Lwait1, r1 bsrf r1 mov r2, r4 -.Lmwait1b: +.Lwait1b: bra 6b nop @@ -305,10 +357,16 @@ __pthread_cond_wait: #if cond_lock != 0 add #cond_lock, r4 #endif - mov.l .Lmwake1, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lwake1, r1 bsrf r1 - nop -.Lmwake1b: + extu.b r5, r5 +.Lwake1b: bra 11b nop @@ -327,26 +385,32 @@ __pthread_cond_wait: #if cond_lock != 0 add #cond_lock, r4 #endif - mov.l .Lmwake2, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lwake2, r1 bsrf r1 - nop -.Lmwake2b: + extu.b r5, r5 +.Lwake2b: 13: bra 14b mov.l @(12,r15), r0 .align 2 -.Lmwait0: - .long __lll_mutex_lock_wait-.Lmwait0b -.Lmwake0: - .long __lll_mutex_unlock_wake-.Lmwake0b -.Lmwait1: - .long __lll_mutex_lock_wait-.Lmwait1b -.Lmwake1: - .long __lll_mutex_unlock_wake-.Lmwake1b -.Lmwake2: - .long __lll_mutex_unlock_wake-.Lmwake2b +.Lwait0: + .long __lll_lock_wait-.Lwait0b +.Lwake0: + .long __lll_unlock_wake-.Lwake0b +.Lwait1: + .long __lll_lock_wait-.Lwait1b +.Lwake1: + .long __lll_unlock_wake-.Lwake1b +.Lwake2: + .long __lll_unlock_wake-.Lwake2b .size __pthread_cond_wait, .-__pthread_cond_wait versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait, GLIBC_2_3_2) @@ -371,10 +435,17 @@ __condvar_w_cleanup: #if cond_lock != 0 add #cond_lock, r5 #endif - mov.l .Lmwait3, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r6 + mov #LLL_SHARED, r6 +99: + extu.b r6, r6 + mov.l .Lwait3, r1 bsrf r1 mov r2, r4 -.Lmwait3b: +.Lwait3b: 1: mov.l @(broadcast_seq,r8), r0 @@ -421,7 +492,7 @@ __condvar_w_cleanup: mov.l r1,@(woken_seq+4,r8) 3: - mov #(1 << clock_bits), r2 + mov #(1 << nwaiters_shift), r2 mov.l @(cond_nwaiters,r8),r0 sub r2, r0 mov.l r0,@(cond_nwaiters,r8) @@ -434,7 +505,7 @@ __condvar_w_cleanup: not r0, r0 cmp/eq #0, r0 bf/s 4f - mov #((1 << clock_bits) - 1), r1 + mov #((1 << nwaiters_shift) - 1), r1 not r1, r1 mov.l @(cond_nwaiters,r8),r0 tst r1, r0 @@ -442,7 +513,22 @@ __condvar_w_cleanup: mov r8, r4 add #cond_nwaiters, r4 - mov #FUTEX_WAKE, r5 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bt/s 99f + mov #FUTEX_WAKE, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_WAKE|FUTEX_PRIVATE_FLAG), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff1, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_WAKE, r0 + or r0, r5 +#endif +99: mov #1, r6 mov #0, r7 mov #SYS_futex, r3 @@ -464,10 +550,16 @@ __condvar_w_cleanup: #if cond_lock != 0 add #cond_lock, r4 #endif - mov.l .Lmwake3, r1 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bf/s 99f + mov #LLL_PRIVATE, r5 + mov #LLL_SHARED, r5 +99: + mov.l .Lwake3, r1 bsrf r1 - nop -.Lmwake3b: + extu.b r5, r5 +.Lwake3b: 2: /* Wake up all waiters to make sure no signal gets lost. */ @@ -475,7 +567,22 @@ __condvar_w_cleanup: bf/s 5f mov r8, r4 add #cond_futex, r4 - mov #FUTEX_WAKE, r5 + mov.l @(dep_mutex,r8), r0 + cmp/eq #-1, r0 + bt/s 99f + mov #FUTEX_WAKE, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_WAKE|FUTEX_PRIVATE_FLAG), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff1, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_WAKE, r0 + or r0, r5 +#endif +99: mov #-1, r6 shlr r6 /* r6 = 0x7fffffff */ mov #0, r7 @@ -499,11 +606,15 @@ __condvar_w_cleanup: mov r11, r4 sleep +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff1: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif .align 2 -.Lmwait3: - .long __lll_mutex_lock_wait-.Lmwait3b -.Lmwake3: - .long __lll_mutex_unlock_wake-.Lmwake3b +.Lwait3: + .long __lll_lock_wait-.Lwait3b +.Lwake3: + .long __lll_unlock_wake-.Lwake3b .Lmlocki3: .long __pthread_mutex_cond_lock-.Lmlocki3b .Lresume: diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S index 02af56b4c..0830cab24 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 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 @@ -18,11 +18,10 @@ #include <unwindbuf.h> #include <sysdep.h> +#include <kernel-features.h> +#include <lowlevellock.h> #include "lowlevel-atomic.h" -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 .comm __fork_generation, 4, 4 @@ -95,7 +94,19 @@ __pthread_once: bf 3f /* Different for generation -> run initializer. */ /* Somebody else got here first. Wait. */ - mov #FUTEX_WAIT, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_PRIVATE_FLAG|FUTEX_WAIT), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r5 +# if FUTEX_WAIT != 0 + mov #FUTEX_WAIT, r0 + or r0, r5 +# endif +#endif mov r3, r6 mov #0, r7 mov #SYS_futex, r3 @@ -157,7 +168,17 @@ __pthread_once: INC (@r9, r2) /* Wake up all other threads. */ mov r9, r4 - mov #FUTEX_WAKE, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_PRIVATE_FLAG|FUTEX_WAKE), r5 + extu.b r5, r5 +#else + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_WAKE, r0 + or r0, r5 +#endif mov #-1, r6 shlr r6 /* r6 = 0x7fffffff */ mov #0, r7 @@ -192,7 +213,17 @@ __pthread_once: mov #0, r7 mov.l r7, @r9 mov r9, r4 - mov #FUTEX_WAKE, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #(FUTEX_PRIVATE_FLAG|FUTEX_WAKE), r5 +#else + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r5 + mov #FUTEX_WAKE, r0 + or r0, r5 +#endif + extu.b r5, r5 mov #-1, r6 shlr r6 /* r6 = 0x7fffffff */ mov #SYS_futex, r3 @@ -208,6 +239,10 @@ __pthread_once: sleep cfi_endproc +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif .align 2 .Lsigsetjmp: .long __sigsetjmp@PLT-(.Lsigsetjmp0-.) @@ -224,23 +259,3 @@ __pthread_once_internal = __pthread_once .globl pthread_once pthread_once = __pthread_once - - - .type clear_once_control,@function - .align 5 -clear_once_control: - mov #0, r0 - mov.l r0, @r4 - - mov #FUTEX_WAKE, r5 - mov #-1, r6 - shlr r6 /* r6 = 0x7fffffff */ - mov #0, r7 - mov #SYS_futex, r3 - extu.b r3, r3 - trapa #0x14 - SYSCALL_INST_PAD - - rts - nop - .size clear_once_control,.-clear_once_control diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S index f64c7217c..b71be1d97 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,15 +17,13 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> #include <tcb-offsets.h> +#include <kernel-features.h> #include "lowlevel-atomic.h" -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - .text @@ -55,7 +53,8 @@ __pthread_rwlock_rdlock: mov.l @(WRITERS_QUEUED,r8), r0 tst r0, r0 bt 5f - mov.l @(FLAGS,r8), r0 + mov #FLAGS, r0 + mov.b @(r0,r8), r0 tst r0, r0 bt 5f 3: @@ -75,9 +74,28 @@ __pthread_rwlock_rdlock: tst r2, r2 bf 10f 11: +#ifdef __ASSUME_PRIVATE_FUTEX + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + mov #(FUTEX_PRIVATE_FLAG|FUTEX_WAIT), r0 + xor r0, r5 + extu.b r5, r5 +#else + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 +# if FUTEX_WAIT != 0 + mov #FUTEX_WAIT, r0 + or r0, r5 +# endif + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r0 + xor r0, r5 +#endif mov r8, r4 add #READERS_WAKEUP, r4 - mov #FUTEX_WAIT, r5 mov r9, r6 mov #0, r7 mov #SYS_futex, r3 @@ -124,15 +142,22 @@ __pthread_rwlock_rdlock: rts mov r3, r0 +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif + 1: mov r8, r5 #if MUTEX != 0 add #MUTEX, r5 #endif - mov r2, r4 + mov #PSHARED, r0 + mov.b @(r0,r8), r6 + extu.b r6, r6 mov.l .Lwait0, r1 bsrf r1 - nop + mov r2, r4 .Lwait0b: bra 2b nop @@ -155,6 +180,9 @@ __pthread_rwlock_rdlock: #if MUTEX != 0 add #MUTEX, r4 #endif + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 mov.l .Lwake0, r1 bsrf r1 nop @@ -183,6 +211,9 @@ __pthread_rwlock_rdlock: #if MUTEX != 0 add #MUTEX, r4 #endif + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 mov.l .Lwake1, r1 bsrf r1 nop @@ -195,23 +226,25 @@ __pthread_rwlock_rdlock: #if MUTEX != 0 add #MUTEX, r5 #endif - mov r2, r4 + mov #PSHARED, r0 + mov.b @(r0,r8), r6 + extu.b r6, r6 mov.l .Lwait1, r1 bsrf r1 - nop + mov r2, r4 .Lwait1b: bra 13b nop .align 2 .Lwait0: - .long __lll_mutex_lock_wait-.Lwait0b + .long __lll_lock_wait-.Lwait0b .Lwake0: - .long __lll_mutex_unlock_wake-.Lwake0b + .long __lll_unlock_wake-.Lwake0b .Lwait1: - .long __lll_mutex_lock_wait-.Lwait1b + .long __lll_lock_wait-.Lwait1b .Lwake1: - .long __lll_mutex_unlock_wake-.Lwake1b + .long __lll_unlock_wake-.Lwake1b .size __pthread_rwlock_rdlock,.-__pthread_rwlock_rdlock .globl pthread_rwlock_rdlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S index 633a14b1a..e40771de0 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,16 +17,13 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> #include <tcb-offsets.h> +#include <kernel-features.h> #include "lowlevel-atomic.h" -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - .text @@ -59,7 +56,8 @@ pthread_rwlock_timedrdlock: mov.l @(WRITERS_QUEUED,r8), r0 tst r0, r0 bt 5f - mov.l @(FLAGS,r8), r0 + mov #FLAGS, r0 + mov.b @(r0,r8), r0 tst r0, r0 bt 5f 3: @@ -89,7 +87,7 @@ pthread_rwlock_timedrdlock: /* Get current time. */ mov r15, r4 mov #0, r5 - mov #SYS_gettimeofday, r3 + mov #__NR_gettimeofday, r3 trapa #0x12 SYSCALL_INST_PAD @@ -117,7 +115,26 @@ pthread_rwlock_timedrdlock: /* Futex call. */ mov r15, r7 - mov #FUTEX_WAIT, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + mov #(FUTEX_PRIVATE_FLAG|FUTEX_WAIT), r0 + xor r0, r5 + extu.b r5, r5 +#else + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 +# if FUTEX_WAIT != 0 + mov #FUTEX_WAIT, r0 + or r0, r5 +# endif + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r0 + xor r0, r5 +#endif mov r10, r6 mov r8, r4 add #READERS_WAKEUP, r4 @@ -176,6 +193,10 @@ pthread_rwlock_timedrdlock: rts mov r3, r0 +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif .align 2 .L1k0: .long 1000 @@ -187,10 +208,12 @@ pthread_rwlock_timedrdlock: #if MUTEX != 0 add #MUTEX, r5 #endif - mov r2, r4 + mov #PSHARED, r0 + mov.b @(r0,r8), r6 + extu.b r6, r6 mov.l .Lwait2, r1 bsrf r1 - nop + mov r2, r4 .Lwait2b: bra 2b nop @@ -213,6 +236,9 @@ pthread_rwlock_timedrdlock: #if MUTEX != 0 add #MUTEX, r4 #endif + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 mov.l .Lwake2, r1 bsrf r1 nop @@ -241,6 +267,9 @@ pthread_rwlock_timedrdlock: #if MUTEX != 0 add #MUTEX, r4 #endif + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 mov.l .Lwake3, r1 bsrf r1 nop @@ -253,10 +282,12 @@ pthread_rwlock_timedrdlock: #if MUTEX != 0 add #MUTEX, r5 #endif - mov r2, r4 + mov #PSHARED, r0 + mov.b @(r0,r8), r6 + extu.b r6, r6 mov.l .Lwait3, r1 bsrf r1 - nop + mov r2, r4 .Lwait3b: bra 13b nop @@ -271,11 +302,11 @@ pthread_rwlock_timedrdlock: .align 2 .Lwait2: - .long __lll_mutex_lock_wait-.Lwait2b + .long __lll_lock_wait-.Lwait2b .Lwake2: - .long __lll_mutex_unlock_wake-.Lwake2b + .long __lll_unlock_wake-.Lwake2b .Lwait3: - .long __lll_mutex_lock_wait-.Lwait3b + .long __lll_lock_wait-.Lwait3b .Lwake3: - .long __lll_mutex_unlock_wake-.Lwake3b + .long __lll_unlock_wake-.Lwake3b .size pthread_rwlock_timedrdlock,.-pthread_rwlock_timedrdlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S index 29e29b6f6..dfe137973 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,16 +17,13 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> #include <tcb-offsets.h> +#include <kernel-features.h> #include "lowlevel-atomic.h" -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - .text @@ -86,7 +83,7 @@ pthread_rwlock_timedwrlock: /* Get current time. */ mov r15, r4 mov #0, r5 - mov #SYS_gettimeofday, r3 + mov #__NR_gettimeofday, r3 trapa #0x12 SYSCALL_INST_PAD @@ -114,7 +111,26 @@ pthread_rwlock_timedwrlock: /* Futex call. */ mov r15, r7 - mov #FUTEX_WAIT, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + mov #(FUTEX_PRIVATE_FLAG|FUTEX_WAIT), r0 + xor r0, r5 + extu.b r5, r5 +#else + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 +# if FUTEX_WAIT != 0 + mov #FUTEX_WAIT, r0 + or r0, r5 +# endif + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r0 + xor r0, r5 +#endif mov r10, r6 mov r8, r4 add #WRITERS_WAKEUP, r4 @@ -175,6 +191,10 @@ pthread_rwlock_timedwrlock: rts mov r3, r0 +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif .L1k1: .word 1000 .align 2 @@ -186,10 +206,12 @@ pthread_rwlock_timedwrlock: #if MUTEX != 0 add #MUTEX, r5 #endif - mov r2, r4 + mov #PSHARED, r0 + mov.b @(r0,r8), r6 + extu.b r6, r6 mov.l .Lwait6, r1 bsrf r1 - nop + mov r2, r4 .Lwait6b: bra 2b nop @@ -207,6 +229,9 @@ pthread_rwlock_timedwrlock: #if MUTEX != 0 add #MUTEX, r4 #endif + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 mov.l .Lwake6, r1 bsrf r1 nop @@ -230,6 +255,9 @@ pthread_rwlock_timedwrlock: #if MUTEX != 0 add #MUTEX, r4 #endif + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 mov.l .Lwake7, r1 bsrf r1 nop @@ -242,10 +270,12 @@ pthread_rwlock_timedwrlock: #if MUTEX != 0 add #MUTEX, r5 #endif - mov r2, r4 + mov #PSHARED, r0 + mov.b @(r0,r8), r6 + extu.b r6, r6 mov.l .Lwait7, r1 bsrf r1 - nop + mov r2, r4 .Lwait7b: bra 13b nop @@ -256,11 +286,11 @@ pthread_rwlock_timedwrlock: .align 2 .Lwait6: - .long __lll_mutex_lock_wait-.Lwait6b + .long __lll_lock_wait-.Lwait6b .Lwake6: - .long __lll_mutex_unlock_wake-.Lwake6b + .long __lll_unlock_wake-.Lwake6b .Lwait7: - .long __lll_mutex_lock_wait-.Lwait7b + .long __lll_lock_wait-.Lwait7b .Lwake7: - .long __lll_mutex_unlock_wake-.Lwake7b + .long __lll_unlock_wake-.Lwake7b .size pthread_rwlock_timedwrlock,.-pthread_rwlock_timedwrlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S index 172689bec..045b8b3b3 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,13 +17,11 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> +#include <kernel-features.h> #include "lowlevel-atomic.h" -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - .text @@ -87,7 +85,24 @@ __pthread_rwlock_unlock: bf 7f 8: - mov #FUTEX_WAKE, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + mov #(FUTEX_PRIVATE_FLAG|FUTEX_WAKE), r0 + xor r0, r5 + extu.b r5, r5 +#else + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 + mov #FUTEX_WAKE, r0 + or r0, r5 + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r0 + xor r0, r5 +#endif mov #SYS_futex, r3 mov #0, r7 extu.b r3, r3 @@ -119,10 +134,12 @@ __pthread_rwlock_unlock: #if MUTEX != 0 add #MUTEX, r5 #endif - mov r2, r4 + mov #PSHARED, r0 + mov.b @(r0,r8), r6 + extu.b r6, r6 mov.l .Lwait8, r1 bsrf r1 - nop + mov r2, r4 .Lwait8b: bra 2b nop @@ -131,6 +148,9 @@ __pthread_rwlock_unlock: #if MUTEX != 0 add #MUTEX, r4 #endif + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 mov.l .Lwake8, r1 bsrf r1 nop @@ -145,6 +165,9 @@ __pthread_rwlock_unlock: #if MUTEX != 0 add #MUTEX, r4 #endif + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 mov.l .Lwake9, r1 bsrf r1 nop @@ -154,13 +177,17 @@ __pthread_rwlock_unlock: bra 8b mov.l @r15+, r4 +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif .align 2 .Lwait8: - .long __lll_mutex_lock_wait-.Lwait8b + .long __lll_lock_wait-.Lwait8b .Lwake8: - .long __lll_mutex_unlock_wake-.Lwake8b + .long __lll_unlock_wake-.Lwake8b .Lwake9: - .long __lll_mutex_unlock_wake-.Lwake9b + .long __lll_unlock_wake-.Lwake9b .size __pthread_rwlock_unlock,.-__pthread_rwlock_unlock .globl pthread_rwlock_unlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S index 995d823e8..6de65cc64 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,15 +17,13 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> #include <tcb-offsets.h> +#include <kernel-features.h> #include "lowlevel-atomic.h" -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - .text @@ -74,7 +72,26 @@ __pthread_rwlock_wrlock: 11: mov r8, r4 add #WRITERS_WAKEUP, r4 - mov #FUTEX_WAIT, r5 +#ifdef __ASSUME_PRIVATE_FUTEX + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + mov #(FUTEX_PRIVATE_FLAG|FUTEX_WAIT), r0 + xor r0, r5 + extu.b r5, r5 +#else + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 +# if FUTEX_WAIT != 0 + mov #FUTEX_WAIT, r0 + or r0, r5 +# endif + stc gbr, r1 + mov.w .Lpfoff, r2 + add r2, r1 + mov.l @r1, r0 + xor r0, r5 +#endif mov r9, r6 mov #0, r7 mov #SYS_futex, r3 @@ -124,10 +141,12 @@ __pthread_rwlock_wrlock: #if MUTEX != 0 add #MUTEX, r5 #endif - mov r2, r4 + mov #PSHARED, r0 + mov.b @(r0,r8), r6 + extu.b r6, r6 mov.l .Lwait4, r1 bsrf r1 - nop + mov r2, r4 .Lwait4b: bra 2b nop @@ -145,6 +164,9 @@ __pthread_rwlock_wrlock: #if MUTEX != 0 add #MUTEX, r4 #endif + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 mov.l .Lwake4, r1 bsrf r1 nop @@ -152,6 +174,10 @@ __pthread_rwlock_wrlock: bra 7b mov #0, r3 +#ifndef __ASSUME_PRIVATE_FUTEX +.Lpfoff: + .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE +#endif .Ltidoff: .word TID - TLS_PRE_TCB_SIZE @@ -167,6 +193,9 @@ __pthread_rwlock_wrlock: #if MUTEX != 0 add #MUTEX, r4 #endif + mov #PSHARED, r0 + mov.b @(r0,r8), r5 + extu.b r5, r5 mov.l .Lwake5, r1 bsrf r1 nop @@ -179,23 +208,25 @@ __pthread_rwlock_wrlock: #if MUTEX != 0 add #MUTEX, r5 #endif - mov r2, r4 + mov #PSHARED, r0 + mov.b @(r0,r8), r6 + extu.b r6, r6 mov.l .Lwait5, r1 bsrf r1 - nop + mov r2, r4 .Lwait5b: bra 13b nop .align 2 .Lwait4: - .long __lll_mutex_lock_wait-.Lwait4b + .long __lll_lock_wait-.Lwait4b .Lwake4: - .long __lll_mutex_unlock_wake-.Lwake4b + .long __lll_unlock_wake-.Lwake4b .Lwait5: - .long __lll_mutex_lock_wait-.Lwait5b + .long __lll_lock_wait-.Lwait5b .Lwake5: - .long __lll_mutex_unlock_wake-.Lwake5b + .long __lll_unlock_wake-.Lwake5b .globl pthread_rwlock_wrlock pthread_rwlock_wrlock = __pthread_rwlock_wrlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S index 9bc12da7e..a3a7710ef 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -19,14 +19,11 @@ #include <sysdep.h> #include <shlib-compat.h> #include <pthread-errnos.h> +#include <structsem.h> +#include <lowlevellock.h> #include "lowlevel-atomic.h" -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - .text .globl __new_sem_post @@ -34,11 +31,14 @@ .align 5 __new_sem_post: mov #1, r3 - XADD (r3, @r4, r2) - + XADD (r3, @(VALUE,r4), r2) + mov.l @(NWAITERS,r4), r2 + tst r2, r2 + bt 2f mov #FUTEX_WAKE, r5 - mov r2, r6 - add #1, r6 + mov.l @(PRIVATE,r4), r1 + or r1, r5 + mov #1, r6 mov #0, r7 mov #SYS_futex, r3 extu.b r3, r3 @@ -47,6 +47,7 @@ __new_sem_post: cmp/pz r0 bf 1f +2: rts mov #0, r0 @@ -60,7 +61,12 @@ __new_sem_post: mov.l .Lerrno3, r0 stc gbr, r1 mov.l @(r0, r12), r0 - add r1, r0 + bra .Lexit + add r1, r0 + .align 2 +.Lerrno3: + .long errno@GOTTPOFF +.Lexit: #else mov.l .Lerrloc3, r1 bsrf r1 @@ -76,10 +82,7 @@ __new_sem_post: .align 2 .Lgot3: .long _GLOBAL_OFFSET_TABLE_ -#if USE___THREAD -.Lerrno3: - .long errno@GOTTPOFF -#else +#if !USE___THREAD .Lerrloc3: .long __errno_location@PLT-(.Lerrloc3b-.) #endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S index acb7d0f78..7924e8759 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 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,32 +20,22 @@ #include <shlib-compat.h> #include <pthread-errnos.h> #include <tcb-offsets.h> +#include <structsem.h> +#include <lowlevellock.h> #include "lowlevel-atomic.h" -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 +#if VALUE != 0 +# error "code needs to be rewritten for VALUE != 0" +#endif .text .globl sem_timedwait .type sem_timedwait,@function .align 5 - cfi_startproc sem_timedwait: - /* First check for cancellation. */ - stc gbr, r0 - mov.w .Lchand, r1 - mov.l @(r0,r1), r0 - mov #0xf9, r1 - and r1, r0 - cmp/eq #8, r0 - bf 0f - bra 10f - stc gbr, r0 -0: +.LSTARTCODE: mov.l @r4, r0 2: tst r0, r0 @@ -62,22 +52,17 @@ sem_timedwait: 1: /* Check whether the timeout value is valid. */ mov.l r8, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r8, 0) +.Lpush_r8: mov.l r9, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r9, 0) +.Lpush_r9: mov.l r10, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r10, 0) +.Lpush_r10: mov.l r12, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r12, 0) +.Lpush_r12: sts.l pr, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (pr, 0) +.Lpush_pr: add #-8, r15 - cfi_adjust_cfa_offset(8) +.Lalloc: mov r4, r8 mov r5, r9 @@ -87,17 +72,13 @@ sem_timedwait: cmp/hs r1, r0 bt/s 6f mov #EINVAL, r0 -7: - mov.l .Lenable0, r1 - bsrf r1 - nop -.Lenable0b: - mov r0, r10 + INC (@(NWAITERS,r8),r2) +7: /* Compute relative timeout. */ mov r15, r4 mov #0, r5 - mov #SYS_gettimeofday, r3 + mov #__NR_gettimeofday, r3 trapa #0x12 SYSCALL_INST_PAD @@ -124,9 +105,21 @@ sem_timedwait: mov.l r2, @r15 mov.l r3, @(4,r15) - /* Futex call. */ +.LcleanupSTART: + mov.l .Lenable0, r1 + bsrf r1 + nop +.Lenable0b: + mov r0, r10 + mov r8, r4 - mov #FUTEX_WAIT, r5 +#if FUTEX_WAIT == 0 + mov.l @(PRIVATE,r8), r5 +#else + mov.l @(PRIVATE,r8), r5 + mov #FUTEX_WAIT, r0 + or r0, r5 +#endif mov #0, r6 mov r15, r7 mov #SYS_futex, r3 @@ -140,6 +133,7 @@ sem_timedwait: mov r0, r10 .Ldisable0b: mov r10, r0 +.LcleanupEND: tst r0, r0 bt 9f @@ -158,6 +152,10 @@ sem_timedwait: bf/s 8b mov r2, r0 + DEC (@(NWAITERS,r8), r2) + mov #0, r0 + +10: add #8, r15 lds.l @r15+, pr mov.l @r15+, r12 @@ -165,12 +163,12 @@ sem_timedwait: mov.l @r15+, r9 mov.l @r15+, r8 rts - mov #0, r0 + nop 3: neg r0, r0 6: - mov r0, r8 + mov r0, r10 mova .Lgot2, r0 mov.l .Lgot2, r12 add r0, r12 @@ -179,56 +177,31 @@ sem_timedwait: mov.l .Lerrno2, r0 stc gbr, r1 mov.l @(r0, r12), r0 - add r1, r0 - mov.l r8, @r0 + bra .Lexit + add r1, r0 + .align 2 +.Lerrno2: + .long errno@GOTTPOFF +.Lexit: #else mov.l .Lerrloc2, r1 bsrf r1 nop .Lerrloc2b: - mov.l r8, @r0 #endif - add #8, r15 - lds.l @r15+, pr - mov.l @r15+, r12 - mov.l @r15+, r10 - mov.l @r15+, r9 - mov.l @r15+, r8 - rts + mov.l r10, @r0 + DEC (@(NWAITERS,r8), r2) + bra 10b mov #-1, r0 -10: - /* Canceled. */ - mov.w .Lresult, r1 - mov #-1, r2 - mov.l r2, @(r0,r1) - mov.w .Lchand, r0 - or.b #0x10, @(r0,gbr) - stc gbr, r0 - mov.w .Lclbuf, r1 - mov.l .Lunwind, r2 - braf r2 - mov.l @(r0,r1), r4 -.Lunwindb: - cfi_endproc - .L1k: .word 1000 -.Lchand: - .word CANCELHANDLING - TLS_PRE_TCB_SIZE -.Lresult: - .word RESULT - TLS_PRE_TCB_SIZE -.Lclbuf: - .word CLEANUP_JMP_BUF - TLS_PRE_TCB_SIZE .align 2 .L1g: .long 1000000000 .Lgot2: .long _GLOBAL_OFFSET_TABLE_ -#if USE___THREAD -.Lerrno2: - .long errno@GOTTPOFF -#else +#if !USE___THREAD .Lerrloc2: .long __errno_location@PLT-(.Lerrloc2b-.) #endif @@ -236,6 +209,151 @@ sem_timedwait: .long __pthread_enable_asynccancel-.Lenable0b .Ldisable0: .long __pthread_disable_asynccancel-.Ldisable0b -.Lunwind: - .long HIDDEN_JUMPTARGET (__pthread_unwind)-.Lunwindb .size sem_timedwait,.-sem_timedwait + + .type sem_wait_cleanup,@function +sem_wait_cleanup: + DEC (@(NWAITERS,r8), r2) +.LcallUR: + mov.l .Lresume, r1 +#ifdef PIC + add r12, r1 +#endif + jsr @r1 + nop + sleep + + .align 2 +.Lresume: +#ifdef PIC + .long _Unwind_Resume@GOTOFF +#else + .long _Unwind_Resume +#endif +.LENDCODE: + .size sem_wait_cleanup,.-sem_wait_cleanup + + + .section .gcc_except_table,"a",@progbits +.LexceptSTART: + .byte 0xff ! @LPStart format (omit) + .byte 0xff ! @TType format (omit) + .byte 0x01 ! call-site format + ! DW_EH_PE_uleb128 + .uleb128 .Lcstend-.Lcstbegin +.Lcstbegin: + .uleb128 .LcleanupSTART-.LSTARTCODE + .uleb128 .LcleanupEND-.LcleanupSTART + .uleb128 sem_wait_cleanup-.LSTARTCODE + .uleb128 0 + .uleb128 .LcallUR-.LSTARTCODE + .uleb128 .LENDCODE-.LcallUR + .uleb128 0 + .uleb128 0 +.Lcstend: + + + .section .eh_frame,"a",@progbits +.LSTARTFRAME: + .ualong .LENDCIE-.LSTARTCIE ! Length of the CIE. +.LSTARTCIE: + .ualong 0 ! CIE ID. + .byte 1 ! Version number. +#ifdef SHARED + .string "zPLR" ! NUL-terminated augmentation + ! string. +#else + .string "zPL" ! NUL-terminated augmentation + ! string. +#endif + .uleb128 1 ! Code alignment factor. + .sleb128 -4 ! Data alignment factor. + .byte 0x11 ! Return address register + ! column. +#ifdef SHARED + .uleb128 7 ! Augmentation value length. + .byte 0x9b ! Personality: DW_EH_PE_pcrel + ! + DW_EH_PE_sdata4 + ! + DW_EH_PE_indirect + .ualong DW.ref.__gcc_personality_v0-. + .byte 0x1b ! LSDA Encoding: DW_EH_PE_pcrel + ! + DW_EH_PE_sdata4. + .byte 0x1b ! FDE Encoding: DW_EH_PE_pcrel + ! + DW_EH_PE_sdata4. +#else + .uleb128 6 ! Augmentation value length. + .byte 0x0 ! Personality: absolute + .ualong __gcc_personality_v0 + .byte 0x0 ! LSDA Encoding: absolute +#endif + .byte 0x0c ! DW_CFA_def_cfa + .uleb128 0xf + .uleb128 0 + .align 4 +.LENDCIE: + + .ualong .LENDFDE-.LSTARTFDE ! Length of the FDE. +.LSTARTFDE: + .ualong .LSTARTFDE-.LSTARTFRAME ! CIE pointer. +#ifdef SHARED + .ualong .LSTARTCODE-. ! PC-relative start address + ! of the code. +#else + .ualong .LSTARTCODE ! Start address of the code. +#endif + .ualong .LENDCODE-.LSTARTCODE ! Length of the code. + .uleb128 4 ! Augmentation size +#ifdef SHARED + .ualong .LexceptSTART-. +#else + .ualong .LexceptSTART +#endif + + .byte 4 ! DW_CFA_advance_loc4 + .ualong .Lpush_r8-.LSTARTCODE + .byte 14 ! DW_CFA_def_cfa_offset + .uleb128 4 + .byte 0x88 ! DW_CFA_offset r8 + .uleb128 1 + .byte 4 ! DW_CFA_advance_loc4 + .ualong .Lpush_r9-.Lpush_r8 + .byte 14 ! DW_CFA_def_cfa_offset + .uleb128 8 + .byte 0x89 ! DW_CFA_offset r9 + .uleb128 2 + .byte 4 ! DW_CFA_advance_loc4 + .ualong .Lpush_r10-.Lpush_r9 + .byte 14 ! DW_CFA_def_cfa_offset + .uleb128 12 + .byte 0x8a ! DW_CFA_offset r10 + .uleb128 3 + .byte 4 ! DW_CFA_advance_loc4 + .ualong .Lpush_r12-.Lpush_r10 + .byte 14 ! DW_CFA_def_cfa_offset + .uleb128 16 + .byte 0x8c ! DW_CFA_offset r12 + .uleb128 4 + .byte 4 ! DW_CFA_advance_loc4 + .ualong .Lpush_pr-.Lpush_r12 + .byte 14 ! DW_CFA_def_cfa_offset + .uleb128 20 + .byte 0x91 ! DW_CFA_offset pr + .uleb128 5 + .byte 4 ! DW_CFA_advance_loc4 + .ualong .Lalloc-.Lpush_pr + .byte 14 ! DW_CFA_def_cfa_offset + .uleb128 28 + .align 4 +.LENDFDE: + + +#ifdef SHARED + .hidden DW.ref.__gcc_personality_v0 + .weak DW.ref.__gcc_personality_v0 + .section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits + .align 4 + .type DW.ref.__gcc_personality_v0, @object + .size DW.ref.__gcc_personality_v0, 4 +DW.ref.__gcc_personality_v0: + .long __gcc_personality_v0 +#endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S index ccdf3a0db..835e37db9 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -19,6 +19,7 @@ #include <sysdep.h> #include <shlib-compat.h> #include <pthread-errnos.h> +#include <lowlevellock.h> #include "lowlevel-atomic.h" @@ -60,15 +61,19 @@ __new_sem_trywait: mov.l .Lerrno1, r0 stc gbr, r1 mov.l @(r0, r12), r0 - add r1, r0 - mov.l r8, @r0 + bra .Lexit + add r1, r0 + .align 2 +.Lerrno1: + .long errno@GOTTPOFF +.Lexit: #else mov.l .Lerrloc1, r1 bsrf r1 nop .Lerrloc1b: - mov.l r8, @r0 #endif + mov.l r8, @r0 lds.l @r15+, pr mov.l @r15+, r8 mov.l @r15+, r12 @@ -78,10 +83,7 @@ __new_sem_trywait: .align 2 .Lgot1: .long _GLOBAL_OFFSET_TABLE_ -#if USE___THREAD -.Lerrno1: - .long errno@GOTTPOFF -#else +#if !USE___THREAD .Lerrloc1: .long __errno_location@PLT-(.Lerrloc1b-.) #endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S b/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S index 9ceb8f1c2..6ef7fcf0c 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 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,44 +20,32 @@ #include <shlib-compat.h> #include <pthread-errnos.h> #include <tcb-offsets.h> +#include <structsem.h> +#include <lowlevellock.h> #include "lowlevel-atomic.h" -#define SYS_gettimeofday __NR_gettimeofday -#define SYS_futex 240 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 +#if VALUE != 0 +# error "code needs to be rewritten for VALUE != 0" +#endif .text .globl __new_sem_wait .type __new_sem_wait,@function .align 5 - cfi_startproc __new_sem_wait: - /* First check for cancellation. */ - stc gbr, r0 - mov.w .Lchand, r1 - mov.l @(r0,r1), r0 - mov #0xf9, r1 - and r1, r0 - cmp/eq #8, r0 - bt 5f - +.LSTARTCODE: mov.l r8, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r8, 0) +.Lpush_r8: mov.l r10, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r10, 0) +.Lpush_r10: mov.l r12, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (r12, 0) +.Lpush_r12: sts.l pr, @-r15 - cfi_adjust_cfa_offset(4) - cfi_rel_offset (pr, 0) +.Lpush_pr: mov r4, r8 -3: + mov.l @r8, r0 2: tst r0, r0 @@ -68,10 +56,21 @@ __new_sem_wait: CMPXCHG (r4, @r8, r3, r2) bf/s 2b mov r2, r0 - bra 9f - mov #0, r0 +7: + mov #0, r0 +9: + lds.l @r15+, pr + mov.l @r15+, r12 + mov.l @r15+, r10 + rts + mov.l @r15+, r8 +.Lafter_ret: 1: + INC (@(NWAITERS,r8),r2) + +.LcleanupSTART: +6: mov.l .Lenable0, r1 bsrf r1 nop @@ -79,7 +78,13 @@ __new_sem_wait: mov r0, r10 mov r8, r4 - mov #FUTEX_WAIT, r5 +#if FUTEX_WAIT == 0 + mov.l @(PRIVATE,r8), r5 +#else + mov.l @(PRIVATE,r8), r5 + mov #FUTEX_WAIT, r0 + or r0, r5 +#endif mov #0, r6 mov #0, r7 mov #SYS_futex, r3 @@ -93,14 +98,35 @@ __new_sem_wait: mov r0, r10 .Ldisable0b: mov r10, r0 +.LcleanupEND: tst r0, r0 - bt 3b + bt 3f cmp/eq #-EWOULDBLOCK, r0 - bt 3b - neg r0, r0 + bf 4f + +3: + mov.l @r8, r0 +5: + tst r0, r0 + bt 6b - mov r0, r8 + mov r0, r3 + mov r0, r4 + add #-1, r3 + CMPXCHG (r4, @r8, r3, r2) + bf/s 5b + mov r2, r0 + + DEC (@(NWAITERS,r8), r2) + bra 7b + nop + +4: + neg r0, r0 + mov r0, r4 + DEC (@(NWAITERS,r8), r2) + mov r4, r8 mova .Lgot0, r0 mov.l .Lgot0, r12 add r0, r12 @@ -109,51 +135,26 @@ __new_sem_wait: mov.l .Lerrno0, r0 stc gbr, r1 mov.l @(r0, r12), r0 - add r1, r0 - mov.l r8, @r0 + bra .Lexit + add r1, r0 + .align 2 +.Lerrno0: + .long errno@GOTTPOFF +.Lexit: #else mov.l .Lerrloc0, r1 bsrf r1 nop .Lerrloc0b: - mov.l r8, @r0 #endif - mov #-1, r0 -9: - lds.l @r15+, pr - mov.l @r15+, r12 - mov.l @r15+, r10 - rts - mov.l @r15+, r8 -5: - /* Canceled. */ - stc gbr, r0 - mov.w .Lresult, r1 - mov #-1, r2 - mov.l r2, @(r0,r1) - mov.w .Lchand, r0 - or.b #0x10, @(r0,gbr) - stc gbr, r0 - mov.w .Lclbuf, r1 - mov.l .Lunwind, r2 - braf r2 - mov.l @(r0,r1), r4 -.Lunwindb: - cfi_endproc - -.Lchand: - .word CANCELHANDLING - TLS_PRE_TCB_SIZE -.Lresult: - .word RESULT - TLS_PRE_TCB_SIZE -.Lclbuf: - .word CLEANUP_JMP_BUF - TLS_PRE_TCB_SIZE + mov.l r8, @r0 + bra 9b + mov #-1, r0 + .align 2 .Lgot0: .long _GLOBAL_OFFSET_TABLE_ -#if USE___THREAD -.Lerrno0: - .long errno@GOTTPOFF -#else +#if !USE___THREAD .Lerrloc0: .long __errno_location@PLT-(.Lerrloc0b-.) #endif @@ -161,7 +162,143 @@ __new_sem_wait: .long __pthread_enable_asynccancel-.Lenable0b .Ldisable0: .long __pthread_disable_asynccancel-.Ldisable0b -.Lunwind: - .long HIDDEN_JUMPTARGET (__pthread_unwind)-.Lunwindb .size __new_sem_wait,.-__new_sem_wait versioned_symbol(libpthread, __new_sem_wait, sem_wait, GLIBC_2_1) + + + .type sem_wait_cleanup,@function +sem_wait_cleanup: + DEC (@(NWAITERS,r8), r2) +.LcallUR: + mov.l .Lresume, r1 +#ifdef PIC + add r12, r1 +#endif + jsr @r1 + nop + sleep + + .align 2 +.Lresume: +#ifdef PIC + .long _Unwind_Resume@GOTOFF +#else + .long _Unwind_Resume +#endif +.LENDCODE: + .size sem_wait_cleanup,.-sem_wait_cleanup + + + .section .gcc_except_table,"a",@progbits +.LexceptSTART: + .byte 0xff ! @LPStart format (omit) + .byte 0xff ! @TType format (omit) + .byte 0x01 ! call-site format + ! DW_EH_PE_uleb128 + .uleb128 .Lcstend-.Lcstbegin +.Lcstbegin: + .uleb128 .LcleanupSTART-.LSTARTCODE + .uleb128 .LcleanupEND-.LcleanupSTART + .uleb128 sem_wait_cleanup-.LSTARTCODE + .uleb128 0 + .uleb128 .LcallUR-.LSTARTCODE + .uleb128 .LENDCODE-.LcallUR + .uleb128 0 + .uleb128 0 +.Lcstend: + + + .section .eh_frame,"a",@progbits +.LSTARTFRAME: + .ualong .LENDCIE-.LSTARTCIE ! Length of the CIE. +.LSTARTCIE: + .ualong 0 ! CIE ID. + .byte 1 ! Version number. +#ifdef SHARED + .string "zPLR" ! NUL-terminated augmentation + ! string. +#else + .string "zPL" ! NUL-terminated augmentation + ! string. +#endif + .uleb128 1 ! Code alignment factor. + .sleb128 -4 ! Data alignment factor. + .byte 0x11 ! Return address register + ! column. +#ifdef SHARED + .uleb128 7 ! Augmentation value length. + .byte 0x9b ! Personality: DW_EH_PE_pcrel + ! + DW_EH_PE_sdata4 + ! + DW_EH_PE_indirect + .ualong DW.ref.__gcc_personality_v0-. + .byte 0x1b ! LSDA Encoding: DW_EH_PE_pcrel + ! + DW_EH_PE_sdata4. + .byte 0x1b ! FDE Encoding: DW_EH_PE_pcrel + ! + DW_EH_PE_sdata4. +#else + .uleb128 6 ! Augmentation value length. + .byte 0x0 ! Personality: absolute + .ualong __gcc_personality_v0 + .byte 0x0 ! LSDA Encoding: absolute +#endif + .byte 0x0c ! DW_CFA_def_cfa + .uleb128 0xf + .uleb128 0 + .align 4 +.LENDCIE: + + .ualong .LENDFDE-.LSTARTFDE ! Length of the FDE. +.LSTARTFDE: + .ualong .LSTARTFDE-.LSTARTFRAME ! CIE pointer. +#ifdef SHARED + .ualong .LSTARTCODE-. ! PC-relative start address + ! of the code. +#else + .ualong .LSTARTCODE ! Start address of the code. +#endif + .ualong .LENDCODE-.LSTARTCODE ! Length of the code. + .uleb128 4 ! Augmentation size +#ifdef SHARED + .ualong .LexceptSTART-. +#else + .ualong .LexceptSTART +#endif + + .byte 4 ! DW_CFA_advance_loc4 + .ualong .Lpush_r8-.LSTARTCODE + .byte 14 ! DW_CFA_def_cfa_offset + .uleb128 4 + .byte 0x88 ! DW_CFA_offset r8 + .uleb128 1 + .byte 4 ! DW_CFA_advance_loc4 + .ualong .Lpush_r10-.Lpush_r8 + .byte 14 ! DW_CFA_def_cfa_offset + .uleb128 8 + .byte 0x8a ! DW_CFA_offset r10 + .uleb128 2 + .byte 4 ! DW_CFA_advance_loc4 + .ualong .Lpush_r12-.Lpush_r10 + .byte 14 ! DW_CFA_def_cfa_offset + .uleb128 12 + .byte 0x8c ! DW_CFA_offset r12 + .uleb128 3 + .byte 4 ! DW_CFA_advance_loc4 + .ualong .Lpush_pr-.Lpush_r12 + .byte 14 ! DW_CFA_def_cfa_offset + .uleb128 16 + .byte 0x91 ! DW_CFA_offset pr + .uleb128 4 + .align 4 +.LENDFDE: + + +#ifdef SHARED + .hidden DW.ref.__gcc_personality_v0 + .weak DW.ref.__gcc_personality_v0 + .section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits + .align 4 + .type DW.ref.__gcc_personality_v0, @object + .size DW.ref.__gcc_personality_v0, 4 +DW.ref.__gcc_personality_v0: + .long __gcc_personality_v0 +#endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h b/libc/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h index e734c1205..faf058486 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h @@ -1,5 +1,5 @@ /* Machine-specific pthread type layouts. SPARC version. - Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. @@ -160,9 +160,9 @@ typedef union unsigned int __nr_readers_queued; unsigned int __nr_writers_queued; int __writer; - int __pad1; + int __shared; + unsigned long int __pad1; unsigned long int __pad2; - unsigned long int __pad3; /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ unsigned int __flags; @@ -176,9 +176,12 @@ typedef union unsigned int __writer_wakeup; unsigned int __nr_readers_queued; unsigned int __nr_writers_queued; + unsigned char __pad1; + unsigned char __pad2; + unsigned char __shared; /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ - unsigned int __flags; + unsigned char __flags; int __writer; } __data; # endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/internaltypes.h b/libc/nptl/sysdeps/unix/sysv/linux/sparc/internaltypes.h new file mode 100644 index 000000000..4f400a3fe --- /dev/null +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/internaltypes.h @@ -0,0 +1,34 @@ +#ifndef _INTERNALTYPES_H +#include "../internaltypes.h" + +union sparc_pthread_barrier +{ + struct pthread_barrier b; + struct sparc_pthread_barrier_s + { + unsigned int curr_event; + int lock; + unsigned int left; + unsigned int init_count; + unsigned char left_lock; + unsigned char pshared; + } s; +}; + +struct sparc_new_sem +{ + unsigned int value; + unsigned char lock; + unsigned char private; + unsigned char pad[2]; + unsigned long int nwaiters; +}; + +struct sparc_old_sem +{ + unsigned int value; + unsigned char lock; + unsigned char private; +}; + +#endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h index 654897066..f4512b262 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h @@ -24,6 +24,7 @@ #include <sys/param.h> #include <bits/pthreadtypes.h> #include <atomic.h> +#include <kernel-features.h> #define FUTEX_WAIT 0 @@ -35,58 +36,84 @@ #define FUTEX_LOCK_PI 6 #define FUTEX_UNLOCK_PI 7 #define FUTEX_TRYLOCK_PI 8 +#define FUTEX_PRIVATE_FLAG 128 -/* Initializer for compatibility lock. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) -#define lll_futex_wait(futexp, val) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT, (val), 0); \ - __ret; \ - }) +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ + & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) +# endif +#endif + + +#define lll_futex_wait(futexp, val, private) \ + lll_futex_timed_wait (futexp, val, NULL, private) -#define lll_futex_timed_wait(futexp, val, timespec) \ +#define lll_futex_timed_wait(futexp, val, timespec, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT, (val), (timespec)); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAIT, private), \ + (val), (timespec)); \ __ret; \ }) -#define lll_futex_wake(futexp, nr) \ +#define lll_futex_wake(futexp, nr, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAKE, (nr), 0); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAKE, private), \ + (nr), 0); \ __ret; \ }) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val) \ +#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, \ - (futexp), FUTEX_CMP_REQUEUE, (nr_wake), \ - (nr_move), (mutex), (val)); \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ + (nr_wake), (nr_move), (mutex), (val)); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ }) -#define lll_robust_mutex_dead(futexv) \ +#define lll_robust_dead(futexv, private) \ do \ { \ int *__futexp = &(futexv); \ atomic_or (__futexp, FUTEX_OWNER_DIED); \ - lll_futex_wake (__futexp, 1); \ + lll_futex_wake (__futexp, 1, private); \ } \ while (0) @@ -95,14 +122,14 @@ /* Avoid FUTEX_WAKE_OP if supporting pre-v9 CPUs. */ # define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2) 1 #else -# define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2) \ +# define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, \ - (futexp), FUTEX_WAKE_OP, (nr_wake), \ - (nr_wake2), (futexp2), \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_WAKE_OP, private), \ + (nr_wake), (nr_wake2), (futexp2), \ FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ }) @@ -110,157 +137,143 @@ static inline int __attribute__ ((always_inline)) -__lll_mutex_trylock (int *futex) +__lll_trylock (int *futex) { return atomic_compare_and_exchange_val_24_acq (futex, 1, 0) != 0; } -#define lll_mutex_trylock(futex) __lll_mutex_trylock (&(futex)) +#define lll_trylock(futex) __lll_trylock (&(futex)) static inline int __attribute__ ((always_inline)) -__lll_mutex_cond_trylock (int *futex) +__lll_cond_trylock (int *futex) { return atomic_compare_and_exchange_val_24_acq (futex, 2, 0) != 0; } -#define lll_mutex_cond_trylock(futex) __lll_mutex_cond_trylock (&(futex)) +#define lll_cond_trylock(futex) __lll_cond_trylock (&(futex)) static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_trylock (int *futex, int id) +__lll_robust_trylock (int *futex, int id) { return atomic_compare_and_exchange_val_acq (futex, id, 0) != 0; } -#define lll_robust_mutex_trylock(futex, id) \ - __lll_robust_mutex_trylock (&(futex), id) +#define lll_robust_trylock(futex, id) \ + __lll_robust_trylock (&(futex), id) -extern void __lll_lock_wait (int *futex) attribute_hidden; -extern int __lll_robust_lock_wait (int *futex) attribute_hidden; +extern void __lll_lock_wait_private (int *futex) attribute_hidden; +extern void __lll_lock_wait (int *futex, int private) attribute_hidden; +extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; static inline void __attribute__ ((always_inline)) -__lll_mutex_lock (int *futex) +__lll_lock (int *futex, int private) { int val = atomic_compare_and_exchange_val_24_acq (futex, 1, 0); if (__builtin_expect (val != 0, 0)) - __lll_lock_wait (futex); + { + if (__builtin_constant_p (private) && private == LLL_PRIVATE) + __lll_lock_wait_private (futex); + else + __lll_lock_wait (futex, private); + } } -#define lll_mutex_lock(futex) __lll_mutex_lock (&(futex)) +#define lll_lock(futex, private) __lll_lock (&(futex), private) static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_lock (int *futex, int id) +__lll_robust_lock (int *futex, int id, int private) { int result = 0; if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_lock_wait (futex); + result = __lll_robust_lock_wait (futex, private); return result; } -#define lll_robust_mutex_lock(futex, id) \ - __lll_robust_mutex_lock (&(futex), id) +#define lll_robust_lock(futex, id, private) \ + __lll_robust_lock (&(futex), id, private) static inline void __attribute__ ((always_inline)) -__lll_mutex_cond_lock (int *futex) +__lll_cond_lock (int *futex, int private) { int val = atomic_compare_and_exchange_val_24_acq (futex, 2, 0); if (__builtin_expect (val != 0, 0)) - __lll_lock_wait (futex); + __lll_lock_wait (futex, private); } -#define lll_mutex_cond_lock(futex) __lll_mutex_cond_lock (&(futex)) +#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) -#define lll_robust_mutex_cond_lock(futex, id) \ - __lll_robust_mutex_lock (&(futex), (id) | FUTEX_WAITERS) +#define lll_robust_cond_lock(futex, id, private) \ + __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private) -extern int __lll_timedlock_wait (int *futex, const struct timespec *) - attribute_hidden; -extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *) - attribute_hidden; +extern int __lll_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; +extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; static inline int __attribute__ ((always_inline)) -__lll_mutex_timedlock (int *futex, const struct timespec *abstime) +__lll_timedlock (int *futex, const struct timespec *abstime, int private) { int val = atomic_compare_and_exchange_val_24_acq (futex, 1, 0); int result = 0; if (__builtin_expect (val != 0, 0)) - result = __lll_timedlock_wait (futex, abstime); + result = __lll_timedlock_wait (futex, abstime, private); return result; } -#define lll_mutex_timedlock(futex, abstime) \ - __lll_mutex_timedlock (&(futex), abstime) +#define lll_timedlock(futex, abstime, private) \ + __lll_timedlock (&(futex), abstime, private) static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime, - int id) +__lll_robust_timedlock (int *futex, const struct timespec *abstime, + int id, int private) { int result = 0; if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_timedlock_wait (futex, abstime); + result = __lll_robust_timedlock_wait (futex, abstime, private); return result; } -#define lll_robust_mutex_timedlock(futex, abstime, id) \ - __lll_robust_mutex_timedlock (&(futex), abstime, id) +#define lll_robust_timedlock(futex, abstime, id, private) \ + __lll_robust_timedlock (&(futex), abstime, id, private) -#define lll_mutex_unlock(lock) \ +#define lll_unlock(lock, private) \ ((void) ({ \ int *__futex = &(lock); \ int __val = atomic_exchange_24_rel (__futex, 0); \ if (__builtin_expect (__val > 1, 0)) \ - lll_futex_wake (__futex, 1); \ + lll_futex_wake (__futex, 1, private); \ })) -#define lll_robust_mutex_unlock(lock) \ +#define lll_robust_unlock(lock, private) \ ((void) ({ \ int *__futex = &(lock); \ int __val = atomic_exchange_rel (__futex, 0); \ if (__builtin_expect (__val & FUTEX_WAITERS, 0)) \ - lll_futex_wake (__futex, 1); \ + lll_futex_wake (__futex, 1, private); \ })) -#define lll_mutex_unlock_force(lock) \ - ((void) ({ \ - int *__futex = &(lock); \ - (void) atomic_exchange_24_rel (__futex, 0); \ - lll_futex_wake (__futex, 1); \ - })) - -#define lll_mutex_islocked(futex) \ +#define lll_islocked(futex) \ (futex != 0) - -/* We have a separate internal lock implementation which is not tied - to binary compatibility. We can use the lll_mutex_*. */ - -/* Type for lock object. */ -typedef int lll_lock_t; - /* Initializers for lock. */ #define LLL_LOCK_INITIALIZER (0) #define LLL_LOCK_INITIALIZER_LOCKED (1) -#define lll_trylock(futex) lll_mutex_trylock (futex) -#define lll_lock(futex) lll_mutex_lock (futex) -#define lll_unlock(futex) lll_mutex_unlock (futex) -#define lll_islocked(futex) lll_mutex_islocked (futex) - - /* The kernel notifies a process with uses CLONE_CLEARTID via futex wakeup when the clone terminates. The memory location contains the thread ID while the clone is running and is reset to zero afterwards. */ #define lll_wait_tid(tid) \ - do \ - { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid); \ - } \ + do \ + { \ + __typeof (tid) __tid; \ + while ((__tid = (tid)) != 0) \ + lll_futex_wait (&(tid), __tid, LLL_SHARED); \ + } \ while (0) extern int __lll_timedwait_tid (int *, const struct timespec *) @@ -274,26 +287,4 @@ extern int __lll_timedwait_tid (int *, const struct timespec *) __res; \ }) - -/* Conditional variable handling. */ - -extern void __lll_cond_wait (pthread_cond_t *cond) - attribute_hidden; -extern int __lll_cond_timedwait (pthread_cond_t *cond, - const struct timespec *abstime) - attribute_hidden; -extern void __lll_cond_wake (pthread_cond_t *cond) - attribute_hidden; -extern void __lll_cond_broadcast (pthread_cond_t *cond) - attribute_hidden; - -#define lll_cond_wait(cond) \ - __lll_cond_wait (cond) -#define lll_cond_timedwait(cond, abstime) \ - __lll_cond_timedwait (cond, abstime) -#define lll_cond_wake(cond) \ - __lll_cond_wake (cond) -#define lll_cond_broadcast(cond) \ - __lll_cond_broadcast (cond) - #endif /* lowlevellock.h */ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c new file mode 100644 index 000000000..b677fb6cf --- /dev/null +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c @@ -0,0 +1,45 @@ +/* Copyright (C) 2002, 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. + + 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 "pthreadP.h" +#include <lowlevellock.h> + +int +pthread_barrier_destroy (barrier) + pthread_barrier_t *barrier; +{ + union sparc_pthread_barrier *ibarrier; + int result = EBUSY; + + ibarrier = (union sparc_pthread_barrier *) barrier; + + int private = ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE; + + lll_lock (ibarrier->b.lock, private); + + if (__builtin_expect (ibarrier->b.left == ibarrier->b.init_count, 1)) + /* The barrier is not used anymore. */ + result = 0; + else + /* Still used, return with an error. */ + lll_unlock (ibarrier->b.lock, private); + + return result; +} diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c index bbd08d004..0a1159cf8 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -21,20 +21,13 @@ #include "pthreadP.h" #include <lowlevellock.h> -struct sparc_pthread_barrier -{ - struct pthread_barrier b; - unsigned char left_lock; - unsigned char pshared; -}; - int pthread_barrier_init (barrier, attr, count) pthread_barrier_t *barrier; const pthread_barrierattr_t *attr; unsigned int count; { - struct sparc_pthread_barrier *ibarrier; + union sparc_pthread_barrier *ibarrier; if (__builtin_expect (count == 0, 0)) return EINVAL; @@ -48,15 +41,15 @@ pthread_barrier_init (barrier, attr, count) return EINVAL; } - ibarrier = (struct sparc_pthread_barrier *) barrier; + ibarrier = (union sparc_pthread_barrier *) barrier; /* Initialize the individual fields. */ ibarrier->b.lock = LLL_LOCK_INITIALIZER; ibarrier->b.left = count; ibarrier->b.init_count = count; ibarrier->b.curr_event = 0; - ibarrier->left_lock = 0; - ibarrier->pshared = (iattr && iattr->pshared == PTHREAD_PROCESS_SHARED); + ibarrier->s.left_lock = 0; + ibarrier->s.pshared = (iattr && iattr->pshared == PTHREAD_PROCESS_SHARED); return 0; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c new file mode 100644 index 000000000..f67785fce --- /dev/null +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c @@ -0,0 +1,78 @@ +/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. + + 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 <sysdep.h> +#include <lowlevellock.h> +#include <pthreadP.h> + +/* Wait on barrier. */ +int +pthread_barrier_wait (barrier) + pthread_barrier_t *barrier; +{ + union sparc_pthread_barrier *ibarrier + = (union sparc_pthread_barrier *) barrier; + int result = 0; + int private = ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE; + + /* Make sure we are alone. */ + lll_lock (ibarrier->b.lock, private); + + /* One more arrival. */ + --ibarrier->b.left; + + /* Are these all? */ + if (ibarrier->b.left == 0) + { + /* Yes. Increment the event counter to avoid invalid wake-ups and + tell the current waiters that it is their turn. */ + ++ibarrier->b.curr_event; + + /* Wake up everybody. */ + lll_futex_wake (&ibarrier->b.curr_event, INT_MAX, private); + + /* This is the thread which finished the serialization. */ + result = PTHREAD_BARRIER_SERIAL_THREAD; + } + else + { + /* The number of the event we are waiting for. The barrier's event + number must be bumped before we continue. */ + unsigned int event = ibarrier->b.curr_event; + + /* Before suspending, make the barrier available to others. */ + lll_unlock (ibarrier->b.lock, private); + + /* Wait for the event counter of the barrier to change. */ + do + lll_futex_wait (&ibarrier->b.curr_event, event, private); + while (event == ibarrier->b.curr_event); + } + + /* Make sure the init_count is stored locally or in a register. */ + unsigned int init_count = ibarrier->b.init_count; + + /* If this was the last woken thread, unlock. */ + if (atomic_increment_val (&ibarrier->b.left) == init_count) + /* We are done. */ + lll_unlock (ibarrier->b.lock, private); + + return result; +} diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c index 3b07cc127..22e2dd3c0 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. @@ -30,7 +30,7 @@ clear_once_control (void *arg) pthread_once_t *once_control = (pthread_once_t *) arg; *once_control = 0; - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); } @@ -65,7 +65,7 @@ __pthread_once (once_control, init_routine) if (((oldval ^ newval) & -4) == 0) { /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, newval); + lll_futex_wait (once_control, newval, LLL_PRIVATE); continue; } } @@ -84,7 +84,7 @@ __pthread_once (once_control, init_routine) atomic_increment (once_control); /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); break; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_init.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_init.c index dffd8c7ef..840032a08 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_init.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_init.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -18,20 +18,50 @@ 02111-1307 USA. */ #include <errno.h> +#include <string.h> #include <semaphore.h> #include <lowlevellock.h> #include <shlib-compat.h> #include "semaphoreP.h" +#include <kernel-features.h> -struct sparc_sem + +int +__new_sem_init (sem, pshared, value) + sem_t *sem; + int pshared; + unsigned int value; { - struct sem s; - unsigned char lock; -}; + /* Parameter sanity check. */ + if (__builtin_expect (value > SEM_VALUE_MAX, 0)) + { + __set_errno (EINVAL); + return -1; + } + /* Map to the internal type. */ + struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; + /* Use the values the user provided. */ + memset (isem, '\0', sizeof (*isem)); + isem->value = value; +#ifdef __ASSUME_PRIVATE_FUTEX + isem->private = pshared ? 0 : FUTEX_PRIVATE_FLAG; +#else + isem->private = pshared ? 0 : THREAD_GETMEM (THREAD_SELF, + header.private_futex); +#endif + + return 0; +} +versioned_symbol (libpthread, __new_sem_init, sem_init, GLIBC_2_1); + + + +#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1) int -__new_sem_init (sem, pshared, value) +attribute_compat_text_section +__old_sem_init (sem, pshared, value) sem_t *sem; int pshared; unsigned int value; @@ -44,20 +74,20 @@ __new_sem_init (sem, pshared, value) } /* Map to the internal type. */ - struct sparc_sem *isem = (struct sparc_sem *) sem; + struct sparc_old_sem *isem = (struct sparc_old_sem *) sem; /* Use the value the user provided. */ - isem->s.count = value; - - isem->lock = 0; + memset (isem, '\0', sizeof (*isem)); + isem->value = value; - /* We can completely ignore the PSHARED parameter since inter-process - use needs no special preparation. */ +#ifdef __ASSUME_PRIVATE_FUTEX + isem->private = pshared ? 0 : FUTEX_PRIVATE_FLAG; +#else + isem->private = pshared ? 0 : THREAD_GETMEM (THREAD_SELF, + header.private_futex); +#endif return 0; } -versioned_symbol (libpthread, __new_sem_init, sem_init, GLIBC_2_1); -#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1) -strong_alias (__new_sem_init, __old_sem_init) compat_symbol (libpthread, __old_sem_init, sem_init, GLIBC_2_0); #endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c new file mode 100644 index 000000000..95964d074 --- /dev/null +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c @@ -0,0 +1,69 @@ +/* sem_post -- post to a POSIX semaphore. SPARC version. + Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. + + 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 <sysdep.h> +#include <lowlevellock.h> +#include <internaltypes.h> +#include <semaphore.h> + +#include <shlib-compat.h> + +int +__new_sem_post (sem_t *sem) +{ + struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; + + int nr = atomic_increment_val (&isem->value); + atomic_full_barrier (); + if (isem->nwaiters > 0) + { + int err = lll_futex_wake (&isem->value, 1, + isem->private ^ FUTEX_PRIVATE_FLAG); + if (__builtin_expect (err, 0) < 0) + { + __set_errno (-err); + return -1; + } + } + return 0; +} +versioned_symbol (libpthread, __new_sem_post, sem_post, GLIBC_2_1); + + +#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1) +int +attribute_compat_text_section +__old_sem_post (sem_t *sem) +{ + struct sparc_old_sem *isem = (struct sparc_old_sem *) sem; + + int nr = atomic_increment_val (&isem->value); + int err = lll_futex_wake (&isem->value, 1, + isem->private ^ FUTEX_PRIVATE_FLAG); + if (__builtin_expect (err, 0) < 0) + { + __set_errno (-err); + return -1; + } + return 0; +} +compat_symbol (libpthread, __old_sem_post, sem_post, GLIBC_2_0); +#endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c new file mode 100644 index 000000000..01952f3f9 --- /dev/null +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c @@ -0,0 +1,112 @@ +/* sem_timedwait -- wait on a semaphore. Generic futex-using version. + Copyright (C) 2003, 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. + + 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 <sysdep.h> +#include <lowlevellock.h> +#include <internaltypes.h> +#include <semaphore.h> + +#include <pthreadP.h> +#include <shlib-compat.h> + + +extern void __sem_wait_cleanup (void *arg) attribute_hidden; + + +int +sem_timedwait (sem_t *sem, const struct timespec *abstime) +{ + struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; + int err; + + if (atomic_decrement_if_positive (&isem->value) > 0) + return 0; + + if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) + { + __set_errno (EINVAL); + return -1; + } + + atomic_increment (&isem->nwaiters); + + pthread_cleanup_push (__sem_wait_cleanup, isem); + + while (1) + { + struct timeval tv; + struct timespec rt; + int sec, nsec; + + /* Get the current time. */ + __gettimeofday (&tv, NULL); + + /* Compute relative timeout. */ + sec = abstime->tv_sec - tv.tv_sec; + nsec = abstime->tv_nsec - tv.tv_usec * 1000; + if (nsec < 0) + { + nsec += 1000000000; + --sec; + } + + /* Already timed out? */ + err = -ETIMEDOUT; + if (sec < 0) + { + __set_errno (ETIMEDOUT); + err = -1; + break; + } + + /* Do wait. */ + rt.tv_sec = sec; + rt.tv_nsec = nsec; + + /* Enable asynchronous cancellation. Required by the standard. */ + int oldtype = __pthread_enable_asynccancel (); + + err = lll_futex_timed_wait (&isem->value, 0, &rt, + isem->private ^ FUTEX_PRIVATE_FLAG); + + /* Disable asynchronous cancellation. */ + __pthread_disable_asynccancel (oldtype); + + if (err != 0 && err != -EWOULDBLOCK) + { + __set_errno (-err); + err = -1; + break; + } + + if (atomic_decrement_if_positive (&isem->value) > 0) + { + err = 0; + break; + } + } + + pthread_cleanup_pop (0); + + atomic_decrement (&isem->nwaiters); + + return err; +} diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c new file mode 100644 index 000000000..a846f2060 --- /dev/null +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c @@ -0,0 +1,117 @@ +/* sem_wait -- wait on a semaphore. Generic futex-using version. + Copyright (C) 2003, 2007 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. + + 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 <sysdep.h> +#include <lowlevellock.h> +#include <internaltypes.h> +#include <semaphore.h> + +#include <pthreadP.h> +#include <shlib-compat.h> + + +void +attribute_hidden +__sem_wait_cleanup (void *arg) +{ + struct sparc_new_sem *isem = (struct sparc_new_sem *) arg; + + atomic_decrement (&isem->nwaiters); +} + + +int +__new_sem_wait (sem_t *sem) +{ + struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; + int err; + + if (atomic_decrement_if_positive (&isem->value) > 0) + return 0; + + atomic_increment (&isem->nwaiters); + + pthread_cleanup_push (__sem_wait_cleanup, isem); + + while (1) + { + /* Enable asynchronous cancellation. Required by the standard. */ + int oldtype = __pthread_enable_asynccancel (); + + err = lll_futex_wait (&isem->value, 0, + isem->private ^ FUTEX_PRIVATE_FLAG); + + /* Disable asynchronous cancellation. */ + __pthread_disable_asynccancel (oldtype); + + if (err != 0 && err != -EWOULDBLOCK) + { + __set_errno (-err); + err = -1; + break; + } + + if (atomic_decrement_if_positive (&isem->value) > 0) + { + err = 0; + break; + } + } + + pthread_cleanup_pop (0); + + atomic_decrement (&isem->nwaiters); + + return err; +} +versioned_symbol (libpthread, __new_sem_wait, sem_wait, GLIBC_2_1); + + +#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1) +int +attribute_compat_text_section +__old_sem_wait (sem_t *sem) +{ + struct sparc_old_sem *isem = (struct sparc_old_sem *) sem; + int err; + + do + { + if (atomic_decrement_if_positive (&isem->value) > 0) + return 0; + + /* Enable asynchronous cancellation. Required by the standard. */ + int oldtype = __pthread_enable_asynccancel (); + + err = lll_futex_wait (&isem->value, 0, + isem->private ^ FUTEX_PRIVATE_FLAG); + + /* Disable asynchronous cancellation. */ + __pthread_disable_asynccancel (oldtype); + } + while (err == 0 || err == -EWOULDBLOCK); + + __set_errno (-err); + return -1; +} + +compat_symbol (libpthread, __old_sem_wait, sem_wait, GLIBC_2_0); +#endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c index cb9578b47..682307eef 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c @@ -25,20 +25,35 @@ void -__lll_lock_wait (int *futex) +__lll_lock_wait_private (int *futex) { do { int oldval = atomic_compare_and_exchange_val_24_acq (futex, 2, 1); if (oldval != 0) - lll_futex_wait (futex, 2); + lll_futex_wait (futex, 2, LLL_PRIVATE); + } + while (atomic_compare_and_exchange_val_24_acq (futex, 2, 0) != 0); +} + + +/* These functions don't get included in libc.so */ +#ifdef IS_IN_libpthread +void +__lll_lock_wait (int *futex, int private) +{ + do + { + int oldval = atomic_compare_and_exchange_val_24_acq (futex, 2, 1); + if (oldval != 0) + lll_futex_wait (futex, 2, private); } while (atomic_compare_and_exchange_val_24_acq (futex, 2, 0) != 0); } int -__lll_timedlock_wait (int *futex, const struct timespec *abstime) +__lll_timedlock_wait (int *futex, const struct timespec *abstime, int private) { /* Reject invalid timeouts. */ if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) @@ -68,7 +83,7 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime) /* Wait. */ int oldval = atomic_compare_and_exchange_val_24_acq (futex, 2, 1); if (oldval != 0) - lll_futex_timed_wait (futex, 2, &rt); + lll_futex_timed_wait (futex, 2, &rt, private); } while (atomic_compare_and_exchange_val_24_acq (futex, 2, 0) != 0); @@ -76,8 +91,6 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime) } -/* This function doesn't get included in libc.so */ -#ifdef IS_IN_libpthread int __lll_timedwait_tid (int *tidp, const struct timespec *abstime) { @@ -108,8 +121,9 @@ __lll_timedwait_tid (int *tidp, const struct timespec *abstime) if (rt.tv_sec < 0) return ETIMEDOUT; - /* Wait until thread terminates. */ - if (lll_futex_timed_wait (tidp, tid, &rt) == -ETIMEDOUT) + /* Wait until thread terminates. The kernel so far does not use + the private futex operations for this. */ + if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT) return ETIMEDOUT; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c index 4dfd11dcb..89a23490f 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003. @@ -22,24 +22,18 @@ #include <lowlevellock.h> #include <pthreadP.h> -struct sparc_pthread_barrier -{ - struct pthread_barrier b; - unsigned char left_lock; - unsigned char pshared; -}; - /* Wait on barrier. */ int pthread_barrier_wait (barrier) pthread_barrier_t *barrier; { - struct sparc_pthread_barrier *ibarrier - = (struct sparc_pthread_barrier *) barrier; + union sparc_pthread_barrier *ibarrier + = (union sparc_pthread_barrier *) barrier; int result = 0; + int private = ibarrier->s.pshared ? LLL_SHARED : LLL_PRIVATE; /* Make sure we are alone. */ - lll_lock (ibarrier->b.lock); + lll_lock (ibarrier->b.lock, private); /* One more arrival. */ --ibarrier->b.left; @@ -52,7 +46,7 @@ pthread_barrier_wait (barrier) ++ibarrier->b.curr_event; /* Wake up everybody. */ - lll_futex_wake (&ibarrier->b.curr_event, INT_MAX); + lll_futex_wake (&ibarrier->b.curr_event, INT_MAX, private); /* This is the thread which finished the serialization. */ result = PTHREAD_BARRIER_SERIAL_THREAD; @@ -64,11 +58,11 @@ pthread_barrier_wait (barrier) unsigned int event = ibarrier->b.curr_event; /* Before suspending, make the barrier available to others. */ - lll_unlock (ibarrier->b.lock); + lll_unlock (ibarrier->b.lock, private); /* Wait for the event counter of the barrier to change. */ do - lll_futex_wait (&ibarrier->b.curr_event, event); + lll_futex_wait (&ibarrier->b.curr_event, event, private); while (event == ibarrier->b.curr_event); } @@ -76,11 +70,11 @@ pthread_barrier_wait (barrier) unsigned int init_count = ibarrier->b.init_count; /* If this was the last woken thread, unlock. */ - if (__atomic_is_v9 || ibarrier->pshared == 0) + if (__atomic_is_v9 || ibarrier->s.pshared == 0) { if (atomic_increment_val (&ibarrier->b.left) == init_count) /* We are done. */ - lll_unlock (ibarrier->b.lock); + lll_unlock (ibarrier->b.lock, private); } else { @@ -88,12 +82,12 @@ pthread_barrier_wait (barrier) /* Slightly more complicated. On pre-v9 CPUs, atomic_increment_val is only atomic for threads within the same process, not for multiple processes. */ - __sparc32_atomic_do_lock24 (&ibarrier->left_lock); + __sparc32_atomic_do_lock24 (&ibarrier->s.left_lock); left = ++ibarrier->b.left; - __sparc32_atomic_do_unlock24 (&ibarrier->left_lock); + __sparc32_atomic_do_unlock24 (&ibarrier->s.left_lock); if (left == init_count) /* We are done. */ - lll_unlock (ibarrier->b.lock); + lll_unlock (ibarrier->b.lock, private); } return result; diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c index be1cc60b1..dbd34f221 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c @@ -1,5 +1,5 @@ /* sem_post -- post to a POSIX semaphore. SPARC version. - Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. @@ -29,17 +29,51 @@ int __new_sem_post (sem_t *sem) { - int *futex = (int *) sem, nr; + struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; + int nr; if (__atomic_is_v9) - nr = atomic_increment_val (futex); + nr = atomic_increment_val (&isem->value); else { - __sparc32_atomic_do_lock24 (futex + 1); - nr = ++*futex; - __sparc32_atomic_do_unlock24 (futex + 1); + __sparc32_atomic_do_lock24 (&isem->lock); + nr = ++(isem->value); + __sparc32_atomic_do_unlock24 (&isem->lock); } - int err = lll_futex_wake (futex, nr); + atomic_full_barrier (); + if (isem->nwaiters > 0) + { + int err = lll_futex_wake (&isem->value, 1, + isem->private ^ FUTEX_PRIVATE_FLAG); + if (__builtin_expect (err, 0) < 0) + { + __set_errno (-err); + return -1; + } + } + return 0; +} +versioned_symbol (libpthread, __new_sem_post, sem_post, GLIBC_2_1); + + +#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1) +int +attribute_compat_text_section +__old_sem_post (sem_t *sem) +{ + struct sparc_old_sem *isem = (struct sparc_old_sem *) sem; + int nr; + + if (__atomic_is_v9) + nr = atomic_increment_val (&isem->value); + else + { + __sparc32_atomic_do_lock24 (&isem->lock); + nr = ++(isem->value); + __sparc32_atomic_do_unlock24 (&isem->lock); + } + int err = lll_futex_wake (&isem->value, 1, + isem->private ^ FUTEX_PRIVATE_FLAG); if (__builtin_expect (err, 0) < 0) { __set_errno (-err); @@ -47,8 +81,5 @@ __new_sem_post (sem_t *sem) } return 0; } -versioned_symbol (libpthread, __new_sem_post, sem_post, GLIBC_2_1); -#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1) -strong_alias (__new_sem_post, __old_sem_post) compat_symbol (libpthread, __old_sem_post, sem_post, GLIBC_2_0); #endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c index efcc9e9aa..55f3e2e07 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c @@ -1,5 +1,5 @@ /* sem_timedwait -- wait on a semaphore. SPARC version. - Copyright (C) 2003, 2006 Free Software Foundation, Inc. + Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. @@ -28,37 +28,48 @@ #include <shlib-compat.h> +extern void __sem_wait_cleanup (void *arg) attribute_hidden; + + int sem_timedwait (sem_t *sem, const struct timespec *abstime) { - /* First check for cancellation. */ - CANCELLATION_P (THREAD_SELF); - - int *futex = (int *) sem; - int val; + struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; int err; + int val; - if (*futex > 0) + if (__atomic_is_v9) + val = atomic_decrement_if_positive (&isem->value); + else { - if (__atomic_is_v9) - val = atomic_decrement_if_positive (futex); - else - { - __sparc32_atomic_do_lock24 (futex + 1); - val = *futex; - if (val > 0) - *futex = val - 1; - __sparc32_atomic_do_unlock24 (futex + 1); - } + __sparc32_atomic_do_lock24 (&isem->lock); + val = isem->value; if (val > 0) - return 0; + isem->value = val - 1; + __sparc32_atomic_do_unlock24 (&isem->lock); } - err = -EINVAL; + if (val > 0) + return 0; + if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) - goto error_return; + { + __set_errno (EINVAL); + return -1; + } + + if (__atomic_is_v9) + atomic_increment (&isem->nwaiters); + else + { + __sparc32_atomic_do_lock24 (&isem->lock); + isem->nwaiters++; + __sparc32_atomic_do_unlock24 (&isem->lock); + } - do + pthread_cleanup_push (__sem_wait_cleanup, isem); + + while (1) { struct timeval tv; struct timespec rt; @@ -79,7 +90,11 @@ sem_timedwait (sem_t *sem, const struct timespec *abstime) /* Already timed out? */ err = -ETIMEDOUT; if (sec < 0) - goto error_return; + { + __set_errno (ETIMEDOUT); + err = -1; + break; + } /* Do wait. */ rt.tv_sec = sec; @@ -88,30 +103,47 @@ sem_timedwait (sem_t *sem, const struct timespec *abstime) /* Enable asynchronous cancellation. Required by the standard. */ int oldtype = __pthread_enable_asynccancel (); - err = lll_futex_timed_wait (futex, 0, &rt); + err = lll_futex_timed_wait (&isem->value, 0, &rt, + isem->private ^ FUTEX_PRIVATE_FLAG); /* Disable asynchronous cancellation. */ __pthread_disable_asynccancel (oldtype); if (err != 0 && err != -EWOULDBLOCK) - goto error_return; + { + __set_errno (-err); + err = -1; + break; + } if (__atomic_is_v9) - val = atomic_decrement_if_positive (futex); + val = atomic_decrement_if_positive (&isem->value); else { - __sparc32_atomic_do_lock24 (futex + 1); - val = *futex; + __sparc32_atomic_do_lock24 (&isem->lock); + val = isem->value; if (val > 0) - *futex = val - 1; - __sparc32_atomic_do_unlock24 (futex + 1); + isem->value = val - 1; + __sparc32_atomic_do_unlock24 (&isem->lock); + } + + if (val > 0) + { + err = 0; + break; } } - while (val <= 0); - return 0; + pthread_cleanup_pop (0); + + if (__atomic_is_v9) + atomic_decrement (&isem->nwaiters); + else + { + __sparc32_atomic_do_lock24 (&isem->lock); + isem->nwaiters--; + __sparc32_atomic_do_unlock24 (&isem->lock); + } - error_return: - __set_errno (-err); - return -1; + return err; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c index 429494e25..4db89727a 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c @@ -1,5 +1,5 @@ /* sem_trywait -- wait on a semaphore. SPARC version. - Copyright (C) 2003, 2006 Free Software Foundation, Inc. + Copyright (C) 2003, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. @@ -30,20 +30,20 @@ int __new_sem_trywait (sem_t *sem) { - int *futex = (int *) sem; + struct sparc_old_sem *isem = (struct sparc_old_sem *) sem; int val; - if (*futex > 0) + if (isem->value > 0) { if (__atomic_is_v9) - val = atomic_decrement_if_positive (futex); + val = atomic_decrement_if_positive (&isem->value); else { - __sparc32_atomic_do_lock24 (futex + 1); - val = *futex; + __sparc32_atomic_do_lock24 (&isem->lock); + val = isem->value; if (val > 0) - *futex = val - 1; - __sparc32_atomic_do_unlock24 (futex + 1); + isem->value = val - 1; + __sparc32_atomic_do_unlock24 (&isem->lock); } if (val > 0) return 0; diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c index d9fcdcd4e..3c71c969b 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c @@ -1,5 +1,5 @@ -/* sem_wait -- wait on a semaphore. SPARC version. - Copyright (C) 2003, 2006 Free Software Foundation, Inc. +/* sem_wait -- wait on a semaphore. Generic futex-using version. + Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. @@ -28,35 +28,135 @@ #include <shlib-compat.h> +void +attribute_hidden +__sem_wait_cleanup (void *arg) +{ + struct sparc_new_sem *isem = (struct sparc_new_sem *) arg; + + if (__atomic_is_v9) + atomic_decrement (&isem->nwaiters); + else + { + __sparc32_atomic_do_lock24 (&isem->lock); + isem->nwaiters--; + __sparc32_atomic_do_unlock24 (&isem->lock); + } +} + + int __new_sem_wait (sem_t *sem) { - /* First check for cancellation. */ - CANCELLATION_P (THREAD_SELF); + struct sparc_new_sem *isem = (struct sparc_new_sem *) sem; + int err; + int val; + + if (__atomic_is_v9) + val = atomic_decrement_if_positive (&isem->value); + else + { + __sparc32_atomic_do_lock24 (&isem->lock); + val = isem->value; + if (val > 0) + isem->value = val - 1; + else + isem->nwaiters++; + __sparc32_atomic_do_unlock24 (&isem->lock); + } + + if (val > 0) + return 0; + + if (__atomic_is_v9) + atomic_increment (&isem->nwaiters); + else + /* Already done above while still holding isem->lock. */; + + pthread_cleanup_push (__sem_wait_cleanup, isem); + + while (1) + { + /* Enable asynchronous cancellation. Required by the standard. */ + int oldtype = __pthread_enable_asynccancel (); + + err = lll_futex_wait (&isem->value, 0, + isem->private ^ FUTEX_PRIVATE_FLAG); + + /* Disable asynchronous cancellation. */ + __pthread_disable_asynccancel (oldtype); + + if (err != 0 && err != -EWOULDBLOCK) + { + __set_errno (-err); + err = -1; + break; + } + + if (__atomic_is_v9) + val = atomic_decrement_if_positive (&isem->value); + else + { + __sparc32_atomic_do_lock24 (&isem->lock); + val = isem->value; + if (val > 0) + isem->value = val - 1; + __sparc32_atomic_do_unlock24 (&isem->lock); + } + + if (val > 0) + { + err = 0; + break; + } + } + + pthread_cleanup_pop (0); - int *futex = (int *) sem; + if (__atomic_is_v9) + atomic_decrement (&isem->nwaiters); + else + { + __sparc32_atomic_do_lock24 (&isem->lock); + isem->nwaiters--; + __sparc32_atomic_do_unlock24 (&isem->lock); + } + + return err; +} +versioned_symbol (libpthread, __new_sem_wait, sem_wait, GLIBC_2_1); + + +#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1) +int +attribute_compat_text_section +__old_sem_wait (sem_t *sem) +{ + struct sparc_old_sem *isem = (struct sparc_old_sem *) sem; int err; + int val; do { - int val; if (__atomic_is_v9) - val = atomic_decrement_if_positive (futex); + val = atomic_decrement_if_positive (&isem->value); else { - __sparc32_atomic_do_lock24 (futex + 1); - val = *futex; + __sparc32_atomic_do_lock24 (&isem->lock); + val = isem->value; if (val > 0) - *futex = val - 1; - __sparc32_atomic_do_unlock24 (futex + 1); + isem->value = val - 1; + __sparc32_atomic_do_unlock24 (&isem->lock); } + if (val > 0) return 0; /* Enable asynchronous cancellation. Required by the standard. */ int oldtype = __pthread_enable_asynccancel (); - err = lll_futex_wait (futex, 0); + err = lll_futex_wait (futex, 0, + isem->private ^ FUTEX_PRIVATE_FLAG); /* Disable asynchronous cancellation. */ __pthread_disable_asynccancel (oldtype); @@ -67,8 +167,5 @@ __new_sem_wait (sem_t *sem) return -1; } -versioned_symbol (libpthread, __new_sem_wait, sem_wait, GLIBC_2_1); -#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1) -strong_alias (__new_sem_wait, __old_sem_wait) compat_symbol (libpthread, __old_sem_wait, sem_wait, GLIBC_2_0); #endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c deleted file mode 100644 index b2b842336..000000000 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../../../../../../pthread_barrier_init.c" diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c index 55d20eb8f..2d32e5824 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c @@ -1 +1 @@ -#include "../../../../../../../pthread_barrier_wait.c" +#include "../../pthread_barrier_wait.c" diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_init.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_init.c deleted file mode 100644 index b2ebc4cbb..000000000 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_init.c +++ /dev/null @@ -1 +0,0 @@ -#include "../../../../../../../sem_init.c" diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_post.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_post.c index 4a6eac88f..73d7c5667 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_post.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_post.c @@ -1 +1 @@ -#include "../../../sem_post.c" +#include "../../sem_post.c" diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_timedwait.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_timedwait.c index b2526db02..03945b727 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_timedwait.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_timedwait.c @@ -1 +1 @@ -#include "../../../sem_timedwait.c" +#include "../../sem_timedwait.c" diff --git a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_wait.c b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_wait.c index 31157f636..a5dbc5a4b 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_wait.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_wait.c @@ -1 +1 @@ -#include "../../../sem_wait.c" +#include "../../sem_wait.c" diff --git a/libc/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c b/libc/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c index 964f5b709..56a4f149e 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c +++ b/libc/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -54,7 +54,7 @@ __unregister_atfork (dso_handle) that there couldn't have been another thread deleting something. The __unregister_atfork function is only called from the dlclose() code which itself serializes the operations. */ - lll_lock (__fork_lock); + lll_lock (__fork_lock, LLL_PRIVATE); /* We have to create a new list with all the entries we don't remove. */ struct deleted_handler @@ -89,7 +89,7 @@ __unregister_atfork (dso_handle) while (runp != NULL); /* Release the lock. */ - lll_unlock (__fork_lock); + lll_unlock (__fork_lock, LLL_PRIVATE); /* Walk the list of all entries which have to be deleted. */ while (deleted != NULL) @@ -104,7 +104,7 @@ __unregister_atfork (dso_handle) atomic_decrement (&deleted->handler->refcntr); unsigned int val; while ((val = deleted->handler->refcntr) != 0) - lll_futex_wait (&deleted->handler->refcntr, val); + lll_futex_wait (&deleted->handler->refcntr, val, LLL_PRIVATE); deleted = deleted->next; } diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S index 3265eee0e..ce8ad27aa 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S @@ -17,19 +17,4 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <kernel-features.h> - -/* All locks in libc are private. Use the kernel feature if possible. */ -#define FUTEX_PRIVATE_FLAG 128 -#ifdef __ASSUME_PRIVATE_FUTEX -# define FUTEX_WAIT (0 | FUTEX_PRIVATE_FLAG) -# define FUTEX_WAKE (1 | FUTEX_PRIVATE_FLAG) -#else -# define LOAD_FUTEX_WAIT(reg) \ - movl %fs:PRIVATE_FUTEX, reg -# define LOAD_FUTEX_WAKE(reg) \ - movl %fs:PRIVATE_FUTEX, reg ; \ - orl $FUTEX_WAKE, reg -#endif - #include "lowlevellock.S" diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S index 502f1d442..7065cfac3 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S @@ -19,33 +19,46 @@ #include <sysdep.h> #include <pthread-errnos.h> +#include <kernel-features.h> +#include <lowlevellock.h> .text -#ifndef LOCK -# ifdef UP -# define LOCK +#ifdef __ASSUME_PRIVATE_FUTEX +# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ + movl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg +# define LOAD_PRIVATE_FUTEX_WAKE(reg) \ + movl $(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg +# define LOAD_FUTEX_WAIT(reg) \ + xorl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg +# define LOAD_FUTEX_WAKE(reg) \ + xorl $(FUTEX_WAKE | FUTEX_PRIVATE_FLAG), reg +#else +# if FUTEX_WAIT == 0 +# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ + movl %fs:PRIVATE_FUTEX, reg # else -# define LOCK lock +# define LOAD_PRIVATE_FUTEX_WAIT(reg) \ + movl %fs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAIT, reg # endif -#endif - -#define SYS_futex 202 -#ifndef FUTEX_WAIT -# define FUTEX_WAIT 0 -# define FUTEX_WAKE 1 -#endif - -#ifndef LOAD_FUTEX_WAIT +# define LOAD_PRIVATE_FUTEX_WAKE(reg) \ + movl %fs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAKE, reg # if FUTEX_WAIT == 0 # define LOAD_FUTEX_WAIT(reg) \ - xorl reg, reg + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %fs:PRIVATE_FUTEX, reg # else # define LOAD_FUTEX_WAIT(reg) \ - movl $FUTEX_WAIT, reg + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %fs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAIT, reg # endif # define LOAD_FUTEX_WAKE(reg) \ - movl $FUTEX_WAKE, reg + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %fs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAKE, reg #endif @@ -53,11 +66,11 @@ #define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000 - .globl __lll_mutex_lock_wait - .type __lll_mutex_lock_wait,@function - .hidden __lll_mutex_lock_wait + .globl __lll_lock_wait_private + .type __lll_lock_wait_private,@function + .hidden __lll_lock_wait_private .align 16 -__lll_mutex_lock_wait: +__lll_lock_wait_private: cfi_startproc pushq %r10 cfi_adjust_cfa_offset(8) @@ -67,7 +80,7 @@ __lll_mutex_lock_wait: cfi_offset(%rdx, -24) xorq %r10, %r10 /* No timeout. */ movl $2, %edx - LOAD_FUTEX_WAIT (%esi) + LOAD_PRIVATE_FUTEX_WAIT (%esi) cmpl %edx, %eax /* NB: %edx == 2 */ jne 2f @@ -89,15 +102,52 @@ __lll_mutex_lock_wait: cfi_restore(%r10) retq cfi_endproc - .size __lll_mutex_lock_wait,.-__lll_mutex_lock_wait - + .size __lll_lock_wait_private,.-__lll_lock_wait_private #ifdef NOT_IN_libc - .globl __lll_mutex_timedlock_wait - .type __lll_mutex_timedlock_wait,@function - .hidden __lll_mutex_timedlock_wait + .globl __lll_lock_wait + .type __lll_lock_wait,@function + .hidden __lll_lock_wait .align 16 -__lll_mutex_timedlock_wait: +__lll_lock_wait: + cfi_startproc + pushq %r10 + cfi_adjust_cfa_offset(8) + pushq %rdx + cfi_adjust_cfa_offset(8) + cfi_offset(%r10, -16) + cfi_offset(%rdx, -24) + xorq %r10, %r10 /* No timeout. */ + movl $2, %edx + LOAD_FUTEX_WAIT (%esi) + + cmpl %edx, %eax /* NB: %edx == 2 */ + jne 2f + +1: movl $SYS_futex, %eax + syscall + +2: movl %edx, %eax + xchgl %eax, (%rdi) /* NB: lock is implied */ + + testl %eax, %eax + jnz 1b + + popq %rdx + cfi_adjust_cfa_offset(-8) + cfi_restore(%rdx) + popq %r10 + cfi_adjust_cfa_offset(-8) + cfi_restore(%r10) + retq + cfi_endproc + .size __lll_lock_wait,.-__lll_lock_wait + + .globl __lll_timedlock_wait + .type __lll_timedlock_wait,@function + .hidden __lll_timedlock_wait + .align 16 +__lll_timedlock_wait: cfi_startproc /* Check for a valid timeout value. */ cmpq $1000000000, 8(%rdx) @@ -118,10 +168,12 @@ __lll_mutex_timedlock_wait: cfi_offset(%r12, -32) cfi_offset(%r13, -40) cfi_offset(%r14, -48) + pushq %rsi + cfi_adjust_cfa_offset(8) /* Stack frame for the timespec and timeval structs. */ - subq $16, %rsp - cfi_adjust_cfa_offset(16) + subq $24, %rsp + cfi_adjust_cfa_offset(24) movq %rdi, %r12 movq %rdx, %r13 @@ -162,6 +214,7 @@ __lll_mutex_timedlock_wait: je 8f movq %rsp, %r10 + movl 24(%rsp), %esi LOAD_FUTEX_WAIT (%esi) movq %r12, %rdi movl $SYS_futex, %eax @@ -174,8 +227,8 @@ __lll_mutex_timedlock_wait: cmpxchgl %edx, (%r12) jnz 7f -6: addq $16, %rsp - cfi_adjust_cfa_offset(-16) +6: addq $32, %rsp + cfi_adjust_cfa_offset(-32) popq %r14 cfi_adjust_cfa_offset(-8) cfi_restore(%r14) @@ -196,7 +249,7 @@ __lll_mutex_timedlock_wait: 3: movl $EINVAL, %eax retq - cfi_adjust_cfa_offset(56) + cfi_adjust_cfa_offset(72) cfi_offset(%r8, -16) cfi_offset(%r9, -24) cfi_offset(%r12, -32) @@ -216,15 +269,15 @@ __lll_mutex_timedlock_wait: 5: movl $ETIMEDOUT, %eax jmp 6b cfi_endproc - .size __lll_mutex_timedlock_wait,.-__lll_mutex_timedlock_wait + .size __lll_timedlock_wait,.-__lll_timedlock_wait #endif - .globl __lll_mutex_unlock_wake - .type __lll_mutex_unlock_wake,@function - .hidden __lll_mutex_unlock_wake + .globl __lll_unlock_wake_private + .type __lll_unlock_wake_private,@function + .hidden __lll_unlock_wake_private .align 16 -__lll_mutex_unlock_wake: +__lll_unlock_wake_private: cfi_startproc pushq %rsi cfi_adjust_cfa_offset(8) @@ -234,7 +287,7 @@ __lll_mutex_unlock_wake: cfi_offset(%rdx, -24) movl $0, (%rdi) - LOAD_FUTEX_WAKE (%esi) + LOAD_PRIVATE_FUTEX_WAKE (%esi) movl $1, %edx /* Wake one thread. */ movl $SYS_futex, %eax syscall @@ -247,10 +300,38 @@ __lll_mutex_unlock_wake: cfi_restore(%rsi) retq cfi_endproc - .size __lll_mutex_unlock_wake,.-__lll_mutex_unlock_wake - + .size __lll_unlock_wake_private,.-__lll_unlock_wake_private #ifdef NOT_IN_libc + .globl __lll_unlock_wake + .type __lll_unlock_wake,@function + .hidden __lll_unlock_wake + .align 16 +__lll_unlock_wake: + cfi_startproc + pushq %rsi + cfi_adjust_cfa_offset(8) + pushq %rdx + cfi_adjust_cfa_offset(8) + cfi_offset(%rsi, -16) + cfi_offset(%rdx, -24) + + movl $0, (%rdi) + LOAD_FUTEX_WAKE (%esi) + movl $1, %edx /* Wake one thread. */ + movl $SYS_futex, %eax + syscall + + popq %rdx + cfi_adjust_cfa_offset(-8) + cfi_restore(%rdx) + popq %rsi + cfi_adjust_cfa_offset(-8) + cfi_restore(%rsi) + retq + cfi_endproc + .size __lll_unlock_wake,.-__lll_unlock_wake + .globl __lll_timedwait_tid .type __lll_timedwait_tid,@function .hidden __lll_timedwait_tid diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h index d3055cbb2..2cd69a14c 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h @@ -20,15 +20,27 @@ #ifndef _LOWLEVELLOCK_H #define _LOWLEVELLOCK_H 1 -#include <time.h> -#include <sys/param.h> -#include <bits/pthreadtypes.h> - -#ifndef LOCK_INSTR -# ifdef UP -# define LOCK_INSTR /* nothing */ -# else -# define LOCK_INSTR "lock;" +#ifndef __ASSEMBLER__ +# include <time.h> +# include <sys/param.h> +# include <bits/pthreadtypes.h> +# include <kernel-features.h> +# include <tcb-offsets.h> + +# ifndef LOCK_INSTR +# ifdef UP +# define LOCK_INSTR /* nothing */ +# else +# define LOCK_INSTR "lock;" +# endif +# endif +#else +# ifndef LOCK +# ifdef UP +# define LOCK +# else +# define LOCK lock +# endif # endif #endif @@ -36,19 +48,55 @@ #define FUTEX_WAIT 0 #define FUTEX_WAKE 1 #define FUTEX_CMP_REQUEUE 4 +#define FUTEX_WAKE_OP 5 #define FUTEX_LOCK_PI 6 #define FUTEX_UNLOCK_PI 7 #define FUTEX_TRYLOCK_PI 8 #define FUTEX_PRIVATE_FLAG 128 +#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) + +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + +#ifndef __ASSEMBLER__ + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ({ unsigned int __fl = ((private) ^ FUTEX_PRIVATE_FLAG); \ + asm ("andl %%fs:%P1, %0" : "+r" (__fl) \ + : "i" (offsetof (struct pthread, header.private_futex))); \ + __fl | (fl); })) +# endif +#endif -/* Initializer for compatibility lock. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) -#define LLL_MUTEX_LOCK_INITIALIZER_LOCKED (1) -#define LLL_MUTEX_LOCK_INITIALIZER_WAITERS (2) +/* Initializer for lock. */ +#define LLL_LOCK_INITIALIZER (0) +#define LLL_LOCK_INITIALIZER_LOCKED (1) +#define LLL_LOCK_INITIALIZER_WAITERS (2) /* Delay in spinlock loop. */ -#define BUSY_WAIT_NOP asm ("rep; nop") +#define BUSY_WAIT_NOP asm ("rep; nop") #define LLL_STUB_UNWIND_INFO_START \ @@ -149,284 +197,343 @@ LLL_STUB_UNWIND_INFO_START \ LLL_STUB_UNWIND_INFO_END -#define lll_futex_wait(futex, val) \ - ({ \ - int __status; \ - register __typeof (val) _val __asm ("edx") = (val); \ - __asm __volatile ("xorq %%r10, %%r10\n\t" \ - "syscall" \ - : "=a" (__status) \ - : "0" (SYS_futex), "D" (futex), "S" (FUTEX_WAIT), \ - "d" (_val) \ - : "memory", "cc", "r10", "r11", "cx"); \ - __status; \ - }) +#define lll_futex_wait(futex, val, private) \ + lll_futex_timed_wait(futex, val, NULL, private) -#define lll_futex_timed_wait(futex, val, timeout) \ +#define lll_futex_timed_wait(futex, val, timeout, private) \ ({ \ register const struct timespec *__to __asm ("r10") = timeout; \ int __status; \ register __typeof (val) _val __asm ("edx") = (val); \ __asm __volatile ("syscall" \ : "=a" (__status) \ - : "0" (SYS_futex), "D" (futex), "S" (FUTEX_WAIT), \ - "d" (_val), "r" (__to) \ + : "0" (SYS_futex), "D" (futex), \ + "S" (__lll_private_flag (FUTEX_WAIT, private)), \ + "d" (_val), "r" (__to) \ : "memory", "cc", "r11", "cx"); \ __status; \ }) -#define lll_futex_wake(futex, nr) \ +#define lll_futex_wake(futex, nr, private) \ do { \ int __ignore; \ register __typeof (nr) _nr __asm ("edx") = (nr); \ __asm __volatile ("syscall" \ : "=a" (__ignore) \ - : "0" (SYS_futex), "D" (futex), "S" (FUTEX_WAKE), \ + : "0" (SYS_futex), "D" (futex), \ + "S" (__lll_private_flag (FUTEX_WAKE, private)), \ "d" (_nr) \ : "memory", "cc", "r10", "r11", "cx"); \ } while (0) -/* Does not preserve %eax and %ecx. */ -extern int __lll_mutex_lock_wait (int *__futex, int __val) attribute_hidden; -/* Does not preserver %eax, %ecx, and %edx. */ -extern int __lll_mutex_timedlock_wait (int *__futex, int __val, - const struct timespec *__abstime) - attribute_hidden; -/* Preserves all registers but %eax. */ -extern int __lll_mutex_unlock_wait (int *__futex) attribute_hidden; - - -/* NB: in the lll_mutex_trylock macro we simply return the value in %eax +/* NB: in the lll_trylock macro we simply return the value in %eax after the cmpxchg instruction. In case the operation succeded this value is zero. In case the operation failed, the cmpxchg instruction has loaded the current value of the memory work which is guaranteed to be nonzero. */ -#define lll_mutex_trylock(futex) \ +#if defined NOT_IN_libc || defined UP +# define __lll_trylock_asm LOCK_INSTR "cmpxchgl %2, %1" +#else +# define __lll_trylock_asm "cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ + "je 0f\n\t" \ + "lock; cmpxchgl %2, %1\n\t" \ + "jmp 1f\n\t" \ + "0:\tcmpxchgl %2, %1\n\t" \ + "1:" +#endif + +#define lll_trylock(futex) \ ({ int ret; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %2, %1" \ + __asm __volatile (__lll_trylock_asm \ : "=a" (ret), "=m" (futex) \ - : "r" (LLL_MUTEX_LOCK_INITIALIZER_LOCKED), "m" (futex),\ - "0" (LLL_MUTEX_LOCK_INITIALIZER) \ + : "r" (LLL_LOCK_INITIALIZER_LOCKED), "m" (futex), \ + "0" (LLL_LOCK_INITIALIZER) \ : "memory"); \ ret; }) - -#define lll_robust_mutex_trylock(futex, id) \ +#define lll_robust_trylock(futex, id) \ ({ int ret; \ __asm __volatile (LOCK_INSTR "cmpxchgl %2, %1" \ : "=a" (ret), "=m" (futex) \ - : "r" (id), "m" (futex), \ - "0" (LLL_MUTEX_LOCK_INITIALIZER) \ + : "r" (id), "m" (futex), "0" (LLL_LOCK_INITIALIZER) \ : "memory"); \ ret; }) - -#define lll_mutex_cond_trylock(futex) \ +#define lll_cond_trylock(futex) \ ({ int ret; \ __asm __volatile (LOCK_INSTR "cmpxchgl %2, %1" \ : "=a" (ret), "=m" (futex) \ - : "r" (LLL_MUTEX_LOCK_INITIALIZER_WAITERS), \ - "m" (futex), "0" (LLL_MUTEX_LOCK_INITIALIZER) \ + : "r" (LLL_LOCK_INITIALIZER_WAITERS), \ + "m" (futex), "0" (LLL_LOCK_INITIALIZER) \ : "memory"); \ ret; }) - -#define lll_mutex_lock(futex) \ - (void) ({ int ignore1, ignore2, ignore3; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %0, %2\n\t" \ +#if defined NOT_IN_libc || defined UP +# define __lll_lock_asm_start LOCK_INSTR "cmpxchgl %4, %2\n\t" \ + "jnz 1f\n\t" +#else +# define __lll_lock_asm_start "cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ + "je 0f\n\t" \ + "lock; cmpxchgl %4, %2\n\t" \ "jnz 1f\n\t" \ - ".subsection 1\n\t" \ - ".type _L_mutex_lock_%=, @function\n" \ - "_L_mutex_lock_%=:\n" \ - "1:\tleaq %2, %%rdi\n" \ - "2:\tsubq $128, %%rsp\n" \ - "3:\tcallq __lll_mutex_lock_wait\n" \ - "4:\taddq $128, %%rsp\n" \ - "5:\tjmp 24f\n" \ - "6:\t.size _L_mutex_lock_%=, 6b-1b\n\t" \ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_5 \ - "24:" \ - : "=S" (ignore1), "=&D" (ignore2), "=m" (futex),\ - "=a" (ignore3) \ - : "0" (1), "m" (futex), "3" (0) \ - : "cx", "r11", "cc", "memory"); }) - - -#define lll_robust_mutex_lock(futex, id) \ + "jmp 24f\n" \ + "0:\tcmpxchgl %4, %2\n\t" \ + "jnz 1f\n\t" +#endif + +#define lll_lock(futex, private) \ + (void) \ + ({ int ignore1, ignore2, ignore3; \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __asm __volatile (__lll_lock_asm_start \ + ".subsection 1\n\t" \ + ".type _L_lock_%=, @function\n" \ + "_L_lock_%=:\n" \ + "1:\tleaq %2, %%rdi\n" \ + "2:\tsubq $128, %%rsp\n" \ + "3:\tcallq __lll_lock_wait_private\n" \ + "4:\taddq $128, %%rsp\n" \ + "5:\tjmp 24f\n" \ + "6:\t.size _L_lock_%=, 6b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_5 \ + "24:" \ + : "=S" (ignore1), "=&D" (ignore2), "=m" (futex), \ + "=a" (ignore3) \ + : "0" (1), "m" (futex), "3" (0) \ + : "cx", "r11", "cc", "memory"); \ + else \ + __asm __volatile (__lll_lock_asm_start \ + ".subsection 1\n\t" \ + ".type _L_lock_%=, @function\n" \ + "_L_lock_%=:\n" \ + "1:\tleaq %2, %%rdi\n" \ + "2:\tsubq $128, %%rsp\n" \ + "3:\tcallq __lll_lock_wait\n" \ + "4:\taddq $128, %%rsp\n" \ + "5:\tjmp 24f\n" \ + "6:\t.size _L_lock_%=, 6b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_5 \ + "24:" \ + : "=S" (ignore1), "=D" (ignore2), "=m" (futex), \ + "=a" (ignore3) \ + : "1" (1), "m" (futex), "3" (0), "0" (private) \ + : "cx", "r11", "cc", "memory"); \ + }) \ + +#define lll_robust_lock(futex, id, private) \ ({ int result, ignore1, ignore2; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %0, %2\n\t" \ + __asm __volatile (LOCK_INSTR "cmpxchgl %4, %2\n\t" \ "jnz 1f\n\t" \ ".subsection 1\n\t" \ - ".type _L_robust_mutex_lock_%=, @function\n" \ - "_L_robust_mutex_lock_%=:\n" \ + ".type _L_robust_lock_%=, @function\n" \ + "_L_robust_lock_%=:\n" \ "1:\tleaq %2, %%rdi\n" \ "2:\tsubq $128, %%rsp\n" \ - "3:\tcallq __lll_robust_mutex_lock_wait\n" \ + "3:\tcallq __lll_robust_lock_wait\n" \ "4:\taddq $128, %%rsp\n" \ "5:\tjmp 24f\n" \ - "6:\t.size _L_robust_mutex_lock_%=, 6b-1b\n\t" \ + "6:\t.size _L_robust_lock_%=, 6b-1b\n\t" \ ".previous\n" \ LLL_STUB_UNWIND_INFO_5 \ "24:" \ - : "=S" (ignore1), "=&D" (ignore2), "=m" (futex), \ + : "=S" (ignore1), "=D" (ignore2), "=m" (futex), \ "=a" (result) \ - : "0" (id), "m" (futex), "3" (0) \ + : "1" (id), "m" (futex), "3" (0), "0" (private) \ : "cx", "r11", "cc", "memory"); \ result; }) - -#define lll_mutex_cond_lock(futex) \ - (void) ({ int ignore1, ignore2, ignore3; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %0, %2\n\t" \ - "jnz 1f\n\t" \ - ".subsection 1\n\t" \ - ".type _L_mutex_cond_lock_%=, @function\n" \ - "_L_mutex_cond_lock_%=:\n" \ - "1:\tleaq %2, %%rdi\n" \ - "2:\tsubq $128, %%rsp\n" \ - "3:\tcallq __lll_mutex_lock_wait\n" \ - "4:\taddq $128, %%rsp\n" \ - "5:\tjmp 24f\n" \ - "6:\t.size _L_mutex_cond_lock_%=, 6b-1b\n\t" \ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_5 \ - "24:" \ - : "=S" (ignore1), "=&D" (ignore2), "=m" (futex),\ - "=a" (ignore3) \ - : "0" (2), "m" (futex), "3" (0) \ - : "cx", "r11", "cc", "memory"); }) - - -#define lll_robust_mutex_cond_lock(futex, id) \ +#define lll_cond_lock(futex, private) \ + (void) \ + ({ int ignore1, ignore2, ignore3; \ + __asm __volatile (LOCK_INSTR "cmpxchgl %4, %2\n\t" \ + "jnz 1f\n\t" \ + ".subsection 1\n\t" \ + ".type _L_cond_lock_%=, @function\n" \ + "_L_cond_lock_%=:\n" \ + "1:\tleaq %2, %%rdi\n" \ + "2:\tsubq $128, %%rsp\n" \ + "3:\tcallq __lll_lock_wait\n" \ + "4:\taddq $128, %%rsp\n" \ + "5:\tjmp 24f\n" \ + "6:\t.size _L_cond_lock_%=, 6b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_5 \ + "24:" \ + : "=S" (ignore1), "=D" (ignore2), "=m" (futex), \ + "=a" (ignore3) \ + : "1" (2), "m" (futex), "3" (0), "0" (private) \ + : "cx", "r11", "cc", "memory"); \ + }) + +#define lll_robust_cond_lock(futex, id, private) \ ({ int result, ignore1, ignore2; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %0, %2\n\t" \ + __asm __volatile (LOCK_INSTR "cmpxchgl %4, %2\n\t" \ "jnz 1f\n\t" \ ".subsection 1\n\t" \ - ".type _L_robust_mutex_cond_lock_%=, @function\n" \ - "_L_robust_mutex_cond_lock_%=:\n" \ + ".type _L_robust_cond_lock_%=, @function\n" \ + "_L_robust_cond_lock_%=:\n" \ "1:\tleaq %2, %%rdi\n" \ "2:\tsubq $128, %%rsp\n" \ - "3:\tcallq __lll_robust_mutex_lock_wait\n" \ + "3:\tcallq __lll_robust_lock_wait\n" \ "4:\taddq $128, %%rsp\n" \ "5:\tjmp 24f\n" \ - "6:\t.size _L_robust_mutex_cond_lock_%=, 6b-1b\n\t" \ + "6:\t.size _L_robust_cond_lock_%=, 6b-1b\n\t" \ ".previous\n" \ LLL_STUB_UNWIND_INFO_5 \ "24:" \ - : "=S" (ignore1), "=&D" (ignore2), "=m" (futex), \ + : "=S" (ignore1), "=D" (ignore2), "=m" (futex), \ "=a" (result) \ - : "0" (id | FUTEX_WAITERS), "m" (futex), "3" (0) \ + : "1" (id | FUTEX_WAITERS), "m" (futex), "3" (0), \ + "0" (private) \ : "cx", "r11", "cc", "memory"); \ result; }) - -#define lll_mutex_timedlock(futex, timeout) \ +#define lll_timedlock(futex, timeout, private) \ ({ int result, ignore1, ignore2, ignore3; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %2, %4\n\t" \ + __asm __volatile (LOCK_INSTR "cmpxchgl %1, %4\n\t" \ "jnz 1f\n\t" \ ".subsection 1\n\t" \ - ".type _L_mutex_timedlock_%=, @function\n" \ - "_L_mutex_timedlock_%=:\n" \ + ".type _L_timedlock_%=, @function\n" \ + "_L_timedlock_%=:\n" \ "1:\tleaq %4, %%rdi\n" \ "0:\tmovq %8, %%rdx\n" \ "2:\tsubq $128, %%rsp\n" \ - "3:\tcallq __lll_mutex_timedlock_wait\n" \ + "3:\tcallq __lll_timedlock_wait\n" \ "4:\taddq $128, %%rsp\n" \ "5:\tjmp 24f\n" \ - "6:\t.size _L_mutex_timedlock_%=, 6b-1b\n\t" \ + "6:\t.size _L_timedlock_%=, 6b-1b\n\t" \ ".previous\n" \ LLL_STUB_UNWIND_INFO_6 \ "24:" \ - : "=a" (result), "=&D" (ignore1), "=S" (ignore2), \ + : "=a" (result), "=D" (ignore1), "=S" (ignore2), \ "=&d" (ignore3), "=m" (futex) \ - : "0" (0), "2" (1), "m" (futex), "m" (timeout) \ + : "0" (0), "1" (1), "m" (futex), "m" (timeout), \ + "2" (private) \ : "memory", "cx", "cc", "r10", "r11"); \ result; }) - -#define lll_robust_mutex_timedlock(futex, timeout, id) \ +#define lll_robust_timedlock(futex, timeout, id, private) \ ({ int result, ignore1, ignore2, ignore3; \ - __asm __volatile (LOCK_INSTR "cmpxchgl %2, %4\n\t" \ + __asm __volatile (LOCK_INSTR "cmpxchgl %1, %4\n\t" \ "jnz 1f\n\t" \ ".subsection 1\n\t" \ - ".type _L_robust_mutex_timedlock_%=, @function\n" \ - "_L_robust_mutex_timedlock_%=:\n" \ + ".type _L_robust_timedlock_%=, @function\n" \ + "_L_robust_timedlock_%=:\n" \ "1:\tleaq %4, %%rdi\n" \ "0:\tmovq %8, %%rdx\n" \ "2:\tsubq $128, %%rsp\n" \ - "3:\tcallq __lll_robust_mutex_timedlock_wait\n" \ + "3:\tcallq __lll_robust_timedlock_wait\n" \ "4:\taddq $128, %%rsp\n" \ "5:\tjmp 24f\n" \ - "6:\t.size _L_robust_mutex_timedlock_%=, 6b-1b\n\t" \ + "6:\t.size _L_robust_timedlock_%=, 6b-1b\n\t" \ ".previous\n" \ LLL_STUB_UNWIND_INFO_6 \ "24:" \ - : "=a" (result), "=&D" (ignore1), "=S" (ignore2), \ + : "=a" (result), "=D" (ignore1), "=S" (ignore2), \ "=&d" (ignore3), "=m" (futex) \ - : "0" (0), "2" (id), "m" (futex), "m" (timeout) \ + : "0" (0), "1" (id), "m" (futex), "m" (timeout), \ + "2" (private) \ : "memory", "cx", "cc", "r10", "r11"); \ result; }) +#if defined NOT_IN_libc || defined UP +# define __lll_unlock_asm_start LOCK_INSTR "decl %0\n\t" \ + "jne 1f\n\t" +#else +# define __lll_unlock_asm_start "cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ + "je 0f\n\t" \ + "lock; decl %0\n\t" \ + "jne 1f\n\t" \ + "jmp 24f\n\t" \ + "0:\tdecl %0\n\t" \ + "jne 1f\n\t" +#endif -#define lll_mutex_unlock(futex) \ - (void) ({ int ignore; \ - __asm __volatile (LOCK_INSTR "decl %0\n\t" \ - "jne 1f\n\t" \ - ".subsection 1\n\t" \ - ".type _L_mutex_unlock_%=, @function\n" \ - "_L_mutex_unlock_%=:\n" \ - "1:\tleaq %0, %%rdi\n" \ - "2:\tsubq $128, %%rsp\n" \ - "3:\tcallq __lll_mutex_unlock_wake\n" \ - "4:\taddq $128, %%rsp\n" \ - "5:\tjmp 24f\n" \ - "6:\t.size _L_mutex_unlock_%=, 6b-1b\n\t" \ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_5 \ - "24:" \ - : "=m" (futex), "=&D" (ignore) \ - : "m" (futex) \ - : "ax", "cx", "r11", "cc", "memory"); }) - - -#define lll_robust_mutex_unlock(futex) \ - (void) ({ int ignore; \ - __asm __volatile (LOCK_INSTR "andl %2, %0\n\t" \ - "jne 1f\n\t" \ - ".subsection 1\n\t" \ - ".type _L_robust_mutex_unlock_%=, @function\n" \ - "_L_robust_mutex_unlock_%=:\n" \ - "1:\tleaq %0, %%rdi\n" \ - "2:\tsubq $128, %%rsp\n" \ - "3:\tcallq __lll_mutex_unlock_wake\n" \ - "4:\taddq $128, %%rsp\n" \ - "5:\tjmp 24f\n" \ - "6:\t.size _L_robust_mutex_unlock_%=, 6b-1b\n\t"\ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_5 \ - "24:" \ - : "=m" (futex), "=&D" (ignore) \ - : "i" (FUTEX_WAITERS), "m" (futex) \ - : "ax", "cx", "r11", "cc", "memory"); }) - - -#define lll_robust_mutex_dead(futex) \ - (void) ({ int ignore; \ - __asm __volatile (LOCK_INSTR "orl %3, (%2)\n\t" \ - "syscall" \ - : "=m" (futex), "=a" (ignore) \ - : "D" (&(futex)), "i" (FUTEX_OWNER_DIED), \ - "S" (FUTEX_WAKE), "1" (__NR_futex), \ - "d" (1) \ - : "cx", "r11", "cc", "memory"); }) - +#define lll_unlock(futex, private) \ + (void) \ + ({ int ignore; \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __asm __volatile (__lll_unlock_asm_start \ + ".subsection 1\n\t" \ + ".type _L_unlock_%=, @function\n" \ + "_L_unlock_%=:\n" \ + "1:\tleaq %0, %%rdi\n" \ + "2:\tsubq $128, %%rsp\n" \ + "3:\tcallq __lll_unlock_wake_private\n" \ + "4:\taddq $128, %%rsp\n" \ + "5:\tjmp 24f\n" \ + "6:\t.size _L_unlock_%=, 6b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_5 \ + "24:" \ + : "=m" (futex), "=&D" (ignore) \ + : "m" (futex) \ + : "ax", "cx", "r11", "cc", "memory"); \ + else \ + __asm __volatile (__lll_unlock_asm_start \ + ".subsection 1\n\t" \ + ".type _L_unlock_%=, @function\n" \ + "_L_unlock_%=:\n" \ + "1:\tleaq %0, %%rdi\n" \ + "2:\tsubq $128, %%rsp\n" \ + "3:\tcallq __lll_unlock_wake\n" \ + "4:\taddq $128, %%rsp\n" \ + "5:\tjmp 24f\n" \ + "6:\t.size _L_unlock_%=, 6b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_5 \ + "24:" \ + : "=m" (futex), "=&D" (ignore) \ + : "m" (futex), "S" (private) \ + : "ax", "cx", "r11", "cc", "memory"); \ + }) + +#define lll_robust_unlock(futex, private) \ + do \ + { \ + int ignore; \ + __asm __volatile (LOCK_INSTR "andl %2, %0\n\t" \ + "jne 1f\n\t" \ + ".subsection 1\n\t" \ + ".type _L_robust_unlock_%=, @function\n" \ + "_L_robust_unlock_%=:\n" \ + "1:\tleaq %0, %%rdi\n" \ + "2:\tsubq $128, %%rsp\n" \ + "3:\tcallq __lll_unlock_wake\n" \ + "4:\taddq $128, %%rsp\n" \ + "5:\tjmp 24f\n" \ + "6:\t.size _L_robust_unlock_%=, 6b-1b\n\t" \ + ".previous\n" \ + LLL_STUB_UNWIND_INFO_5 \ + "24:" \ + : "=m" (futex), "=&D" (ignore) \ + : "i" (FUTEX_WAITERS), "m" (futex), \ + "S" (private) \ + : "ax", "cx", "r11", "cc", "memory"); \ + } \ + while (0) + +#define lll_robust_dead(futex, private) \ + do \ + { \ + int ignore; \ + __asm __volatile (LOCK_INSTR "orl %3, (%2)\n\t" \ + "syscall" \ + : "=m" (futex), "=a" (ignore) \ + : "D" (&(futex)), "i" (FUTEX_OWNER_DIED), \ + "S" (__lll_private_flag (FUTEX_WAKE, private)), \ + "1" (__NR_futex), "d" (1) \ + : "cx", "r11", "cc", "memory"); \ + } \ + while (0) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(ftx, nr_wake, nr_move, mutex, val) \ +#define lll_futex_requeue(ftx, nr_wake, nr_move, mutex, val, private) \ ({ int __res; \ register int __nr_move __asm ("r10") = nr_move; \ register void *__mutex __asm ("r8") = mutex; \ @@ -434,117 +541,14 @@ extern int __lll_mutex_unlock_wait (int *__futex) attribute_hidden; __asm __volatile ("syscall" \ : "=a" (__res) \ : "0" (__NR_futex), "D" ((void *) ftx), \ - "S" (FUTEX_CMP_REQUEUE), "d" (nr_wake), \ - "r" (__nr_move), "r" (__mutex), "r" (__val) \ + "S" (__lll_private_flag (FUTEX_CMP_REQUEUE, \ + private)), "d" (nr_wake), \ + "r" (__nr_move), "r" (__mutex), "r" (__val) \ : "cx", "r11", "cc", "memory"); \ __res < 0; }) - -#define lll_mutex_islocked(futex) \ - (futex != LLL_MUTEX_LOCK_INITIALIZER) - - -/* We have a separate internal lock implementation which is not tied - to binary compatibility. */ - -/* Type for lock object. */ -typedef int lll_lock_t; - -/* Initializers for lock. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) - - -/* The states of a lock are: - 0 - untaken - 1 - taken by one user - 2 - taken by more users */ - - -#if defined NOT_IN_libc || defined UP -# define lll_trylock(futex) lll_mutex_trylock (futex) -# define lll_lock(futex) lll_mutex_lock (futex) -# define lll_unlock(futex) lll_mutex_unlock (futex) -#else -/* Special versions of the macros for use in libc itself. They avoid - the lock prefix when the thread library is not used. - - The code sequence to avoid unnecessary lock prefixes is what the AMD - guys suggested. If you do not like it, bring it up with AMD. - - XXX In future we might even want to avoid it on UP machines. */ - -# define lll_trylock(futex) \ - ({ unsigned char ret; \ - __asm __volatile ("cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ - "je 0f\n\t" \ - "lock; cmpxchgl %2, %1\n\t" \ - "jmp 1f\n" \ - "0:\tcmpxchgl %2, %1\n\t" \ - "1:setne %0" \ - : "=a" (ret), "=m" (futex) \ - : "r" (LLL_MUTEX_LOCK_INITIALIZER_LOCKED), "m" (futex),\ - "0" (LLL_MUTEX_LOCK_INITIALIZER) \ - : "memory"); \ - ret; }) - - -# define lll_lock(futex) \ - (void) ({ int ignore1, ignore2, ignore3; \ - __asm __volatile ("cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ - "je 0f\n\t" \ - "lock; cmpxchgl %0, %2\n\t" \ - "jnz 1f\n\t" \ - "jmp 24f\n" \ - "0:\tcmpxchgl %0, %2\n\t" \ - "jnz 1f\n\t" \ - ".subsection 1\n\t" \ - ".type _L_lock_%=, @function\n" \ - "_L_lock_%=:\n" \ - "1:\tleaq %2, %%rdi\n" \ - "2:\tsubq $128, %%rsp\n" \ - "3:\tcallq __lll_mutex_lock_wait\n" \ - "4:\taddq $128, %%rsp\n" \ - "5:\tjmp 24f\n" \ - "6:\t.size _L_lock_%=, 6b-1b\n\t" \ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_5 \ - "24:" \ - : "=S" (ignore1), "=&D" (ignore2), "=m" (futex),\ - "=a" (ignore3) \ - : "0" (1), "m" (futex), "3" (0) \ - : "cx", "r11", "cc", "memory"); }) - - -# define lll_unlock(futex) \ - (void) ({ int ignore; \ - __asm __volatile ("cmpl $0, __libc_multiple_threads(%%rip)\n\t" \ - "je 0f\n\t" \ - "lock; decl %0\n\t" \ - "jne 1f\n\t" \ - "jmp 24f\n" \ - "0:\tdecl %0\n\t" \ - "jne 1f\n\t" \ - ".subsection 1\n\t" \ - ".type _L_unlock_%=, @function\n" \ - "_L_unlock_%=:\n" \ - "1:\tleaq %0, %%rdi\n" \ - "2:\tsubq $128, %%rsp\n" \ - "3:\tcallq __lll_mutex_unlock_wake\n" \ - "4:\taddq $128, %%rsp\n" \ - "5:\tjmp 24f\n" \ - "6:\t.size _L_unlock_%=, 6b-1b\n\t" \ - ".previous\n" \ - LLL_STUB_UNWIND_INFO_5 \ - "24:" \ - : "=m" (futex), "=&D" (ignore) \ - : "m" (futex) \ - : "ax", "cx", "r11", "cc", "memory"); }) -#endif - - #define lll_islocked(futex) \ - (futex != LLL_MUTEX_LOCK_INITIALIZER) + (futex != LLL_LOCK_INITIALIZER) /* The kernel notifies a process with uses CLONE_CLEARTID via futex @@ -583,25 +587,6 @@ extern int __lll_timedwait_tid (int *tid, const struct timespec *abstime) } \ __result; }) - -/* Conditional variable handling. */ - -extern void __lll_cond_wait (pthread_cond_t *cond) attribute_hidden; -extern int __lll_cond_timedwait (pthread_cond_t *cond, - const struct timespec *abstime) - attribute_hidden; -extern void __lll_cond_wake (pthread_cond_t *cond) attribute_hidden; -extern void __lll_cond_broadcast (pthread_cond_t *cond) attribute_hidden; - - -#define lll_cond_wait(cond) \ - __lll_cond_wait (cond) -#define lll_cond_timedwait(cond, abstime) \ - __lll_cond_timedwait (cond, abstime) -#define lll_cond_wake(cond) \ - __lll_cond_wake (cond) -#define lll_cond_broadcast(cond) \ - __lll_cond_broadcast (cond) - +#endif /* !__ASSEMBLER__ */ #endif /* lowlevellock.h */ diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S index 69243950d..fa7516ef7 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S @@ -1,4 +1,5 @@ -/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -19,33 +20,40 @@ #include <sysdep.h> #include <pthread-errnos.h> +#include <lowlevellock.h> #include <lowlevelrobustlock.h> +#include <kernel-features.h> .text -#ifndef LOCK -# ifdef UP -# define LOCK +#define FUTEX_WAITERS 0x80000000 +#define FUTEX_OWNER_DIED 0x40000000 + +#ifdef __ASSUME_PRIVATE_FUTEX +# define LOAD_FUTEX_WAIT(reg) \ + xorl $(FUTEX_WAIT | FUTEX_PRIVATE_FLAG), reg +#else +# if FUTEX_WAIT == 0 +# define LOAD_FUTEX_WAIT(reg) \ + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %fs:PRIVATE_FUTEX, reg # else -# define LOCK lock +# define LOAD_FUTEX_WAIT(reg) \ + xorl $FUTEX_PRIVATE_FLAG, reg ; \ + andl %fs:PRIVATE_FUTEX, reg ; \ + orl $FUTEX_WAIT, reg # endif #endif -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_WAITERS 0x80000000 -#define FUTEX_OWNER_DIED 0x40000000 - /* For the calculation see asm/vsyscall.h. */ #define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000 - .globl __lll_robust_mutex_lock_wait - .type __lll_robust_mutex_lock_wait,@function - .hidden __lll_robust_mutex_lock_wait + .globl __lll_robust_lock_wait + .type __lll_robust_lock_wait,@function + .hidden __lll_robust_lock_wait .align 16 -__lll_robust_mutex_lock_wait: +__lll_robust_lock_wait: cfi_startproc pushq %r10 cfi_adjust_cfa_offset(8) @@ -55,11 +63,7 @@ __lll_robust_mutex_lock_wait: cfi_offset(%rdx, -24) xorq %r10, %r10 /* No timeout. */ -#if FUTEX_WAIT == 0 - xorl %esi, %esi -#else - movl $FUTEX_WAIT, %esi -#endif + LOAD_FUTEX_WAIT (%esi) 4: movl %eax, %edx orl $FUTEX_WAITERS, %edx @@ -97,14 +101,14 @@ __lll_robust_mutex_lock_wait: cfi_restore(%r10) retq cfi_endproc - .size __lll_robust_mutex_lock_wait,.-__lll_robust_mutex_lock_wait + .size __lll_robust_lock_wait,.-__lll_robust_lock_wait - .globl __lll_robust_mutex_timedlock_wait - .type __lll_robust_mutex_timedlock_wait,@function - .hidden __lll_robust_mutex_timedlock_wait + .globl __lll_robust_timedlock_wait + .type __lll_robust_timedlock_wait,@function + .hidden __lll_robust_timedlock_wait .align 16 -__lll_robust_mutex_timedlock_wait: +__lll_robust_timedlock_wait: cfi_startproc /* Check for a valid timeout value. */ cmpq $1000000000, 8(%rdx) @@ -122,10 +126,12 @@ __lll_robust_mutex_timedlock_wait: cfi_offset(%r9, -24) cfi_offset(%r12, -32) cfi_offset(%r13, -40) + pushq %rsi + cfi_adjust_cfa_offset(8) /* Stack frame for the timespec and timeval structs. */ - subq $24, %rsp - cfi_adjust_cfa_offset(24) + subq $32, %rsp + cfi_adjust_cfa_offset(32) movq %rdi, %r12 movq %rdx, %r13 @@ -174,11 +180,8 @@ __lll_robust_mutex_timedlock_wait: jnz 5f 2: movq %rsp, %r10 -#if FUTEX_WAIT == 0 - xorl %esi, %esi -#else - movl $FUTEX_WAIT, %esi -#endif + movl 32(%rsp), %esi + LOAD_FUTEX_WAIT (%esi) movq %r12, %rdi movl $SYS_futex, %eax syscall @@ -195,8 +198,8 @@ __lll_robust_mutex_timedlock_wait: cmpxchgl %edx, (%r12) jnz 7f -6: addq $24, %rsp - cfi_adjust_cfa_offset(-24) +6: addq $40, %rsp + cfi_adjust_cfa_offset(-40) popq %r13 cfi_adjust_cfa_offset(-8) cfi_restore(%r13) @@ -214,7 +217,7 @@ __lll_robust_mutex_timedlock_wait: 3: movl $EINVAL, %eax retq - cfi_adjust_cfa_offset(56) + cfi_adjust_cfa_offset(72) cfi_offset(%r8, -16) cfi_offset(%r9, -24) cfi_offset(%r12, -32) @@ -226,4 +229,4 @@ __lll_robust_mutex_timedlock_wait: 8: movl $ETIMEDOUT, %eax jmp 6b cfi_endproc - .size __lll_robust_mutex_timedlock_wait,.-__lll_robust_mutex_timedlock_wait + .size __lll_robust_timedlock_wait,.-__lll_robust_timedlock_wait diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S index 63771b384..15ad534fa 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S @@ -18,18 +18,9 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelbarrier.h> -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif - .text @@ -142,21 +133,29 @@ pthread_barrier_wait: retq -1: addq $MUTEX, %rdi - callq __lll_mutex_lock_wait +1: movl PRIVATE(%rdi), %esi + addq $MUTEX, %rdi + xorl $LLL_SHARED, %esi + callq __lll_lock_wait subq $MUTEX, %rdi jmp 2b -4: addq $MUTEX, %rdi - callq __lll_mutex_unlock_wake +4: movl PRIVATE(%rdi), %esi + addq $MUTEX, %rdi + xorl $LLL_SHARED, %esi + callq __lll_unlock_wake jmp 5b -6: addq $MUTEX, %rdi - callq __lll_mutex_unlock_wake +6: movl PRIVATE(%rdi), %esi + addq $MUTEX, %rdi + xorl $LLL_SHARED, %esi + callq __lll_unlock_wake subq $MUTEX, %rdi jmp 7b -9: addq $MUTEX, %rdi - callq __lll_mutex_unlock_wake +9: movl PRIVATE(%rdi), %esi + addq $MUTEX, %rdi + xorl $LLL_SHARED, %esi + callq __lll_unlock_wake jmp 10b .size pthread_barrier_wait,.-pthread_barrier_wait diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S index 006de2696..6155255eb 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S @@ -1,4 +1,5 @@ -/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -19,23 +20,11 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <kernel-features.h> #include <pthread-pi-defines.h> - -#ifdef UP -# define LOCK -#else -# define LOCK lock -#endif - -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_REQUEUE 3 -#define FUTEX_CMP_REQUEUE 4 - -#define EINVAL 22 +#include <pthread-errnos.h> .text @@ -82,11 +71,18 @@ __pthread_cond_broadcast: je 9f /* XXX: The kernel so far doesn't support requeue to PI futex. */ - testl $PI_BIT, MUTEX_KIND(%r8) + /* XXX: The kernel only supports FUTEX_CMP_REQUEUE to the same + type of futex (private resp. shared). */ + testl $(PI_BIT | PS_BIT), MUTEX_KIND(%r8) jne 9f /* Wake up all threads. */ - movl $FUTEX_CMP_REQUEUE, %esi +#ifdef __ASSUME_PRIVATE_FUTEX + movl $(FUTEX_CMP_REQUEUE|FUTEX_PRIVATE_FLAG), %esi +#else + movl %fs:PRIVATE_FUTEX, %esi + orl $FUTEX_CMP_REQUEUE, %esi +#endif movl $SYS_futex, %eax movl $1, %edx movl $0x7fffffff, %r10d @@ -115,7 +111,11 @@ __pthread_cond_broadcast: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_lock_wait + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_lock_wait #if cond_lock != 0 subq $cond_lock, %rdi #endif @@ -123,18 +123,36 @@ __pthread_cond_broadcast: /* Unlock in loop requires wakeup. */ 5: addq $cond_lock-cond_futex, %rdi - callq __lll_mutex_unlock_wake + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_unlock_wake jmp 6b /* Unlock in loop requires wakeup. */ 7: addq $cond_lock-cond_futex, %rdi - callq __lll_mutex_unlock_wake + cmpq $-1, %r8 + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_unlock_wake subq $cond_lock-cond_futex, %rdi jmp 8b 9: /* The futex requeue functionality is not available. */ + cmpq $-1, %r8 movl $0x7fffffff, %edx - movl $FUTEX_WAKE, %esi +#ifdef __ASSUME_PRIVATE_FUTEX + movl $FUTEX_WAKE, %eax + movl $(FUTEX_WAKE|FUTEX_PRIVATE_FLAG), %esi + cmove %eax, %esi +#else + movl $0, %eax + movl %fs:PRIVATE_FUTEX, %esi + cmove %eax, %esi + orl $FUTEX_WAKE, %esi +#endif movl $SYS_futex, %eax syscall jmp 10b diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S index 3dbb9e81e..8f65f2cd6 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -19,23 +19,10 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <kernel-features.h> - -#ifdef UP -# define LOCK -#else -# define LOCK lock -#endif - -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_WAKE_OP 5 - -#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) - -#define EINVAL 22 +#include <pthread-errnos.h> .text @@ -68,10 +55,20 @@ __pthread_cond_signal: addl $1, (%rdi) /* Wake up one thread. */ - movl $FUTEX_WAKE_OP, %esi - movl $SYS_futex, %eax + cmpq $-1, dep_mutex(%r8) movl $1, %edx +#ifdef __ASSUME_PRIVATE_FUTEX + movl $FUTEX_WAKE_OP, %eax + movl $(FUTEX_WAKE_OP|FUTEX_PRIVATE_FLAG), %esi + cmove %eax, %esi +#else + movl $0, %eax + movl %fs:PRIVATE_FUTEX, %esi + cmove %eax, %esi + orl $FUTEX_WAKE_OP, %esi +#endif movl $1, %r10d + movl $SYS_futex, %eax #if cond_lock != 0 addq $cond_lock, %r8 #endif @@ -88,7 +85,9 @@ __pthread_cond_signal: xorl %eax, %eax retq -7: movl $FUTEX_WAKE, %esi +7: /* %esi should be either FUTEX_WAKE_OP or + FUTEX_WAKE_OP|FUTEX_PRIVATE_FLAG from the previous syscall. */ + xorl $(FUTEX_WAKE ^ FUTEX_WAKE_OP), %esi movl $SYS_futex, %eax /* %rdx should be 1 already from $FUTEX_WAKE_OP syscall. movl $1, %edx */ @@ -111,7 +110,11 @@ __pthread_cond_signal: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_lock_wait + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_lock_wait #if cond_lock != 0 subq $cond_lock, %rdi #endif @@ -120,7 +123,14 @@ __pthread_cond_signal: /* Unlock in loop requires wakeup. */ 5: movq %r8, %rdi - callq __lll_mutex_unlock_wake +#if cond_lock != 0 + addq $cond_lock, %rdi +#endif + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_unlock_wake jmp 6b .size __pthread_cond_signal, .-__pthread_cond_signal versioned_symbol (libpthread, __pthread_cond_signal, pthread_cond_signal, diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S index 2afd601b8..d730a7e12 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S @@ -19,18 +19,11 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <pthread-errnos.h> -#ifdef UP -# define LOCK -#else -# define LOCK lock -#endif - -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 +#include <kernel-features.h> /* For the calculation see asm/vsyscall.h. */ #define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000 @@ -141,8 +134,15 @@ __pthread_cond_timedwait: /* Only clocks 0 and 1 are allowed so far. Both are handled in the kernel. */ leaq 24(%rsp), %rsi - movl $__NR_clock_gettime, %eax + movq __vdso_clock_gettime@GOTPCREL(%rip), %rax + movq (%rax), %rax + PTR_DEMANGLE (%rax) + jz 26f + call *%rax + jmp 27f +26: movl $__NR_clock_gettime, %eax syscall +27: # ifndef __ASSUME_POSIX_TIMERS cmpq $-ENOSYS, %rax je 19f @@ -195,12 +195,20 @@ __pthread_cond_timedwait: movl %eax, (%rsp) leaq 24(%rsp), %r10 -#if FUTEX_WAIT == 0 - xorl %esi, %esi + cmpq $-1, dep_mutex(%rdi) + movq %r12, %rdx +#ifdef __ASSUME_PRIVATE_FUTEX + movl $FUTEX_WAIT, %eax + movl $(FUTEX_WAIT|FUTEX_PRIVATE_FLAG), %esi + cmove %eax, %esi #else - movl $FUTEX_WAIT, %esi + movl $0, %eax + movl %fs:PRIVATE_FUTEX, %esi + cmove %eax, %esi +# if FUTEX_WAIT != 0 + orl $FUTEX_WAIT, %esi +# endif #endif - movq %r12, %rdx addq $cond_futex, %rdi movl $SYS_futex, %eax syscall @@ -260,9 +268,19 @@ __pthread_cond_timedwait: jne 25f addq $cond_nwaiters, %rdi - movl $SYS_futex, %eax - movl $FUTEX_WAKE, %esi + cmpq $-1, dep_mutex-cond_nwaiters(%rdi) movl $1, %edx +#ifdef __ASSUME_PRIVATE_FUTEX + movl $FUTEX_WAKE, %eax + movl $(FUTEX_WAKE|FUTEX_PRIVATE_FLAG), %esi + cmove %eax, %esi +#else + movl $0, %eax + movl %fs:PRIVATE_FUTEX, %esi + cmove %eax, %esi + orl $FUTEX_WAKE, %esi +#endif + movl $SYS_futex, %eax syscall subq $cond_nwaiters, %rdi @@ -301,7 +319,11 @@ __pthread_cond_timedwait: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_lock_wait + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_lock_wait jmp 2b /* Unlock in loop requires wakeup. */ @@ -309,7 +331,11 @@ __pthread_cond_timedwait: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_unlock_wake + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_unlock_wake jmp 4b /* Locking in loop failed. */ @@ -317,7 +343,11 @@ __pthread_cond_timedwait: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_lock_wait + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_lock_wait #if cond_lock != 0 subq $cond_lock, %rdi #endif @@ -328,7 +358,11 @@ __pthread_cond_timedwait: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_unlock_wake + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_unlock_wake jmp 11b /* The initial unlocking of the mutex failed. */ @@ -345,7 +379,11 @@ __pthread_cond_timedwait: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_unlock_wake + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_unlock_wake 17: movq (%rsp), %rax jmp 18b diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S index aaad22e02..e5e802d53 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S @@ -19,18 +19,11 @@ #include <sysdep.h> #include <shlib-compat.h> +#include <lowlevellock.h> #include <lowlevelcond.h> #include <tcb-offsets.h> -#ifdef UP -# define LOCK -#else -# define LOCK lock -#endif - -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 +#include <kernel-features.h> .text @@ -58,7 +51,11 @@ __condvar_cleanup: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_lock_wait + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_lock_wait #if cond_lock != 0 subq $cond_lock, %rdi #endif @@ -88,9 +85,19 @@ __condvar_cleanup: jne 4f addq $cond_nwaiters, %rdi - movl $SYS_futex, %eax - movl $FUTEX_WAKE, %esi + cmpq $-1, dep_mutex-cond_nwaiters(%rdi) movl $1, %edx +#ifdef __ASSUME_PRIVATE_FUTEX + movl $FUTEX_WAKE, %eax + movl $(FUTEX_WAKE|FUTEX_PRIVATE_FLAG), %esi + cmove %eax, %esi +#else + movl $0, %eax + movl %fs:PRIVATE_FUTEX, %esi + cmove %eax, %esi + orl $FUTEX_WAKE, %esi +#endif + movl $SYS_futex, %eax syscall subq $cond_nwaiters, %rdi movl $1, %r12d @@ -105,14 +112,28 @@ __condvar_cleanup: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_unlock_wake + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_unlock_wake /* Wake up all waiters to make sure no signal gets lost. */ 2: testq %r12, %r12 jnz 5f addq $cond_futex, %rdi - movl $FUTEX_WAKE, %esi + cmpq $-1, dep_mutex-cond_futex(%rdi) movl $0x7fffffff, %edx +#ifdef __ASSUME_PRIVATE_FUTEX + movl $FUTEX_WAKE, %eax + movl $(FUTEX_WAKE|FUTEX_PRIVATE_FLAG), %esi + cmove %eax, %esi +#else + movl $0, %eax + movl %fs:PRIVATE_FUTEX, %esi + cmove %eax, %esi + orl $FUTEX_WAKE, %esi +#endif movl $SYS_futex, %eax syscall @@ -221,12 +242,20 @@ __pthread_cond_wait: xorq %r10, %r10 movq %r12, %rdx addq $cond_futex-cond_lock, %rdi - movl $SYS_futex, %eax -#if FUTEX_WAIT == 0 - xorl %esi, %esi + cmpq $-1, dep_mutex-cond_futex(%rdi) +#ifdef __ASSUME_PRIVATE_FUTEX + movl $FUTEX_WAIT, %eax + movl $(FUTEX_WAIT|FUTEX_PRIVATE_FLAG), %esi + cmove %eax, %esi #else - movl $FUTEX_WAIT, %esi + movl $FUTEX_WAIT, %eax + movl %fs:PRIVATE_FUTEX, %esi + cmove %eax, %esi +# if FUTEX_WAIT != 0 + orl $FUTEX_WAIT, %esi +# endif #endif + movl $SYS_futex, %eax syscall movl (%rsp), %edi @@ -272,9 +301,19 @@ __pthread_cond_wait: jne 17f addq $cond_nwaiters, %rdi - movl $SYS_futex, %eax - movl $FUTEX_WAKE, %esi + cmpq $-1, dep_mutex-cond_nwaiters(%rdi) movl $1, %edx +#ifdef __ASSUME_PRIVATE_FUTEX + movl $FUTEX_WAKE, %eax + movl $(FUTEX_WAKE|FUTEX_PRIVATE_FLAG), %esi + cmove %eax, %esi +#else + movl $0, %eax + movl %fs:PRIVATE_FUTEX, %esi + cmove %eax, %esi + orl $FUTEX_WAKE, %esi +#endif + movl $SYS_futex, %eax syscall subq $cond_nwaiters, %rdi @@ -307,7 +346,11 @@ __pthread_cond_wait: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_lock_wait + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_lock_wait jmp 2b /* Unlock in loop requires wakeup. */ @@ -315,7 +358,11 @@ __pthread_cond_wait: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_unlock_wake + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_unlock_wake jmp 4b /* Locking in loop failed. */ @@ -323,7 +370,11 @@ __pthread_cond_wait: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_lock_wait + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_lock_wait #if cond_lock != 0 subq $cond_lock, %rdi #endif @@ -334,7 +385,11 @@ __pthread_cond_wait: #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_unlock_wake + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_unlock_wake jmp 11b /* The initial unlocking of the mutex failed. */ @@ -346,12 +401,16 @@ __pthread_cond_wait: #else decl cond_lock(%rdi) #endif - jne 13f + je 13f #if cond_lock != 0 addq $cond_lock, %rdi #endif - callq __lll_mutex_unlock_wake + cmpq $-1, dep_mutex-cond_lock(%rdi) + movl $LLL_PRIVATE, %eax + movl $LLL_SHARED, %esi + cmovne %eax, %esi + callq __lll_unlock_wake 13: movq %r10, %rax jmp 14b diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S index 7740c599d..c3b2b51bd 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S @@ -19,17 +19,8 @@ #include <kernel-features.h> #include <tcb-offsets.h> +#include <lowlevellock.h> -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif - -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_PRIVATE_FLAG 128 .comm __fork_generation, 4, 4 diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S index da98ab3d4..80fedd4ab 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S @@ -18,23 +18,12 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> #include <kernel-features.h> -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_PRIVATE_FLAG 128 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif - - .text .globl __pthread_rwlock_rdlock @@ -76,7 +65,7 @@ __pthread_rwlock_rdlock: jne 10f 11: -#if __ASSUME_PRIVATE_FUTEX +#ifdef __ASSUME_PRIVATE_FUTEX movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %esi xorl PSHARED(%rdi), %esi #else @@ -123,11 +112,11 @@ __pthread_rwlock_rdlock: movq %rdx, %rax retq -1: +1: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_lock_wait + callq __lll_lock_wait #if MUTEX != 0 subq $MUTEX, %rdi #endif @@ -139,11 +128,11 @@ __pthread_rwlock_rdlock: movl $EDEADLK, %edx jmp 9b -6: +6: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_unlock_wake + callq __lll_unlock_wake #if MUTEX != 0 subq $MUTEX, %rdi #endif @@ -159,21 +148,21 @@ __pthread_rwlock_rdlock: movl $EAGAIN, %edx jmp 9b -10: +10: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_unlock_wake + callq __lll_unlock_wake #if MUTEX != 0 subq $MUTEX, %rdi #endif jmp 11b -12: +12: movl PSHARED(%rdi), %esi #if MUTEX == 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_lock_wait + callq __lll_lock_wait #if MUTEX != 0 subq $MUTEX, %rdi #endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S index 19ad27aab..0fa271442 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S @@ -18,25 +18,15 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> +#include <kernel-features.h> -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - /* For the calculation see asm/vsyscall.h. */ #define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif - - .text .globl pthread_rwlock_timedrdlock @@ -112,9 +102,9 @@ pthread_rwlock_timedrdlock: movq %rcx, (%rsp) /* Store relative timeout. */ movq %rdi, 8(%rsp) -#if __ASSUME_PRIVATE_FUTEX +#ifdef __ASSUME_PRIVATE_FUTEX movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %esi - xorl PSHARED(%rdi), %esi + xorl PSHARED(%r12), %esi #else # if FUTEX_WAIT == 0 movl PSHARED(%r12), %esi @@ -170,11 +160,11 @@ pthread_rwlock_timedrdlock: popq %r12 retq -1: +1: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_lock_wait + callq __lll_lock_wait jmp 2b 14: cmpl %fs:TID, %eax @@ -182,13 +172,13 @@ pthread_rwlock_timedrdlock: movl $EDEADLK, %edx jmp 9b -6: +6: movl PSHARED(%r12), %esi #if MUTEX == 0 movq %r12, %rdi #else leal MUTEX(%r12), %rdi #endif - callq __lll_mutex_unlock_wake + callq __lll_unlock_wake jmp 7b /* Overflow. */ @@ -201,22 +191,22 @@ pthread_rwlock_timedrdlock: movl $EAGAIN, %edx jmp 9b -10: +10: movl PSHARED(%r12), %esi #if MUTEX == 0 movq %r12, %rdi #else leaq MUTEX(%r12), %rdi #endif - callq __lll_mutex_unlock_wake + callq __lll_unlock_wake jmp 11b -12: +12: movl PSHARED(%r12), %esi #if MUTEX == 0 movq %r12, %rdi #else leaq MUTEX(%r12), %rdi #endif - callq __lll_mutex_lock_wait + callq __lll_lock_wait jmp 13b 16: movq $-ETIMEDOUT, %rdx diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S index 4c3e7413a..1e43933ca 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S @@ -18,24 +18,15 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> +#include <kernel-features.h> -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - /* For the calculation see asm/vsyscall.h. */ #define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000 -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif - - .text .globl pthread_rwlock_timedwrlock @@ -108,9 +99,9 @@ pthread_rwlock_timedwrlock: movq %rcx, (%rsp) /* Store relative timeout. */ movq %rdi, 8(%rsp) -#if __ASSUME_PRIVATE_FUTEX +#ifdef __ASSUME_PRIVATE_FUTEX movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %esi - xorl PSHARED(%rdi), %esi + xorl PSHARED(%r12), %esi #else # if FUTEX_WAIT == 0 movl PSHARED(%r12), %esi @@ -166,11 +157,11 @@ pthread_rwlock_timedwrlock: popq %r12 retq -1: +1: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_lock_wait + callq __lll_lock_wait jmp 2b 14: cmpl %fs:TID, %eax @@ -178,13 +169,13 @@ pthread_rwlock_timedwrlock: 20: movl $EDEADLK, %edx jmp 9b -6: +6: movl PSHARED(%r12), %esi #if MUTEX == 0 movq %r12, %rdi #else leal MUTEX(%r12), %rdi #endif - callq __lll_mutex_unlock_wake + callq __lll_unlock_wake jmp 7b /* Overflow. */ @@ -192,22 +183,22 @@ pthread_rwlock_timedwrlock: movl $EAGAIN, %edx jmp 9b -10: +10: movl PSHARED(%r12), %esi #if MUTEX == 0 movq %r12, %rdi #else leaq MUTEX(%r12), %rdi #endif - callq __lll_mutex_unlock_wake + callq __lll_unlock_wake jmp 11b -12: +12: movl PSHARED(%r12), %esi #if MUTEX == 0 movq %r12, %rdi #else leaq MUTEX(%r12), %rdi #endif - callq __lll_mutex_lock_wait + callq __lll_lock_wait jmp 13b 16: movq $-ETIMEDOUT, %rdx diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S index bf688252c..cf7f607d9 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S @@ -18,18 +18,9 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> - - -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif +#include <kernel-features.h> .text @@ -78,7 +69,7 @@ __pthread_rwlock_unlock: jne 7f 8: -#if __ASSUME_PRIVATE_FUTEX +#ifdef __ASSUME_PRIVATE_FUTEX movl $FUTEX_PRIVATE_FLAG|FUTEX_WAKE, %esi xorl PSHARED(%rdi), %esi #else @@ -105,28 +96,28 @@ __pthread_rwlock_unlock: 4: xorl %eax, %eax retq -1: +1: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_lock_wait + callq __lll_lock_wait #if MUTEX != 0 subq $MUTEX, %rdi #endif jmp 2b -3: +3: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_unlock_wake + callq __lll_unlock_wake jmp 4b -7: +7: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_unlock_wake + callq __lll_unlock_wake jmp 8b .size __pthread_rwlock_unlock,.-__pthread_rwlock_unlock diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S index 46d97e033..209c0e9a9 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S @@ -18,19 +18,10 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <lowlevelrwlock.h> #include <pthread-errnos.h> - - -#define SYS_futex 202 -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 - -#ifndef UP -# define LOCK lock -#else -# define LOCK -#endif +#include <kernel-features.h> .text @@ -72,7 +63,7 @@ __pthread_rwlock_wrlock: jne 10f 11: -#if __ASSUME_PRIVATE_FUTEX +#ifdef __ASSUME_PRIVATE_FUTEX movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %esi xorl PSHARED(%rdi), %esi #else @@ -119,11 +110,11 @@ __pthread_rwlock_wrlock: movq %rdx, %rax retq -1: +1: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_lock_wait + callq __lll_lock_wait #if MUTEX != 0 subq $MUTEX, %rdi #endif @@ -134,32 +125,32 @@ __pthread_rwlock_wrlock: movl $EDEADLK, %edx jmp 9b -6: +6: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_unlock_wake + callq __lll_unlock_wake jmp 7b 4: decl WRITERS_QUEUED(%rdi) movl $EAGAIN, %edx jmp 9b -10: +10: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_unlock_wake + callq __lll_unlock_wake #if MUTEX != 0 subq $MUTEX, %rdi #endif jmp 11b -12: +12: movl PSHARED(%rdi), %esi #if MUTEX != 0 addq $MUTEX, %rdi #endif - callq __lll_mutex_lock_wait + callq __lll_lock_wait #if MUTEX != 0 subq $MUTEX, %rdi #endif diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S index 4919c11fd..adbbcdfa7 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S @@ -18,19 +18,11 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <shlib-compat.h> #include <pthread-errnos.h> #include <structsem.h> -#ifndef UP -# define LOCK lock -#else -# define -#endif - -#define SYS_futex 202 -#define FUTEX_WAKE 1 - .text diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S index 4068a1b6b..88e99cf6a 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S @@ -18,23 +18,15 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <shlib-compat.h> #include <pthread-errnos.h> #include <structsem.h> -#ifndef UP -# define LOCK lock -#else -# define -#endif - -#define SYS_futex 202 -#define FUTEX_WAIT 0 /* For the calculation see asm/vsyscall.h. */ #define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000 - .text .globl sem_timedwait diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S index 643090f06..a5719cadd 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S @@ -18,15 +18,10 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <shlib-compat.h> #include <pthread-errnos.h> -#ifndef UP -# define LOCK lock -#else -# define -#endif - .text .globl sem_trywait diff --git a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S index e099ede02..5320a91e1 100644 --- a/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S +++ b/libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S @@ -18,19 +18,11 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <lowlevellock.h> #include <shlib-compat.h> #include <pthread-errnos.h> #include <structsem.h> -#ifndef UP -# define LOCK lock -#else -# define -#endif - -#define SYS_futex 202 -#define FUTEX_WAIT 0 - .text diff --git a/libc/nptl/sysdeps/x86_64/tls.h b/libc/nptl/sysdeps/x86_64/tls.h index f3532529b..79db61c70 100644 --- a/libc/nptl/sysdeps/x86_64/tls.h +++ b/libc/nptl/sysdeps/x86_64/tls.h @@ -355,7 +355,7 @@ typedef struct : "i" (offsetof (struct pthread, header.gscope_flag)), \ "0" (THREAD_GSCOPE_FLAG_UNUSED)); \ if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ } \ while (0) #define THREAD_GSCOPE_SET_FLAG() \ diff --git a/libc/nptl/tpp.c b/libc/nptl/tpp.c index 367dd8162..0325010b4 100644 --- a/libc/nptl/tpp.c +++ b/libc/nptl/tpp.c @@ -1,5 +1,5 @@ /* Thread Priority Protect helpers. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2006. @@ -93,7 +93,7 @@ __pthread_tpp_change_priority (int previous_prio, int new_prio) if (priomax == newpriomax) return 0; - lll_lock (self->lock); + lll_lock (self->lock, LLL_PRIVATE); tpp->priomax = newpriomax; @@ -129,7 +129,7 @@ __pthread_tpp_change_priority (int previous_prio, int new_prio) } } - lll_unlock (self->lock); + lll_unlock (self->lock, LLL_PRIVATE); return result; } @@ -144,7 +144,7 @@ __pthread_current_priority (void) int result = 0; - lll_lock (self->lock); + lll_lock (self->lock, LLL_PRIVATE); if ((self->flags & ATTR_FLAG_SCHED_SET) == 0) { @@ -166,7 +166,7 @@ __pthread_current_priority (void) if (result != -1) result = self->schedparam.sched_priority; - lll_unlock (self->lock); + lll_unlock (self->lock, LLL_PRIVATE); return result; } diff --git a/libc/nptl/tst-locale2.c b/libc/nptl/tst-locale2.c index c8821ad6b..a238209f8 100644 --- a/libc/nptl/tst-locale2.c +++ b/libc/nptl/tst-locale2.c @@ -11,4 +11,5 @@ useless (void *a) { pthread_t th; pthread_create (&th, 0, useless, a); + return NULL; } diff --git a/libc/nptl/tst-rwlock14.c b/libc/nptl/tst-rwlock14.c index fc0d3d219..00e1becbf 100644 --- a/libc/nptl/tst-rwlock14.c +++ b/libc/nptl/tst-rwlock14.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 Free Software Foundation, Inc. +/* Copyright (C) 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. @@ -130,8 +130,8 @@ do_test (void) result = 1; } - ts.tv_nsec = 0x100001000LL; - if (ts.tv_nsec != 0x100001000LL) + ts.tv_nsec = (__typeof (ts.tv_nsec)) 0x100001000LL; + if ((__typeof (ts.tv_nsec)) 0x100001000LL != 0x100001000LL) ts.tv_nsec = 2000000000; e = pthread_rwlock_timedrdlock (&r, &ts); diff --git a/libc/nptl/tst-tsd6.c b/libc/nptl/tst-tsd6.c new file mode 100644 index 000000000..debb1dd36 --- /dev/null +++ b/libc/nptl/tst-tsd6.c @@ -0,0 +1,89 @@ +#include <errno.h> +#include <pthread.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/wait.h> + +#define NKEYS 100 +static pthread_key_t keys[NKEYS]; +static pthread_barrier_t b; + + +static void * +tf (void *arg) +{ + void *res = NULL; + for (int i = 0; i < NKEYS; ++i) + { + void *p = pthread_getspecific (keys[i]); + pthread_setspecific (keys[i], (void *) 7); + if (p != NULL) + res = p; + } + if (arg != NULL) + { + pthread_barrier_wait (arg); + pthread_barrier_wait (arg); + } + return res; +} + + +static int +do_test (void) +{ + pthread_barrier_init (&b, NULL, 2); + + for (int i = 0; i < NKEYS; ++i) + if (pthread_key_create (&keys[i], NULL) != 0) + { + puts ("cannot create keys"); + return 1; + } + + pthread_t th; + if (pthread_create (&th, NULL, tf, &b) != 0) + { + puts ("cannot create thread in parent"); + return 1; + } + + pthread_barrier_wait (&b); + + pid_t pid = fork (); + if (pid == 0) + { + if (pthread_create (&th, NULL, tf, NULL) != 0) + { + puts ("cannot create thread in child"); + exit (1); + } + + void *res; + pthread_join (th, &res); + + exit (res != NULL); + } + else if (pid == -1) + { + puts ("cannot create child process"); + return 1; + } + + int s; + if (TEMP_FAILURE_RETRY (waitpid (pid, &s, 0)) != pid) + { + puts ("failing to wait for child process"); + return 1; + } + + pthread_barrier_wait (&b); + pthread_join (th, NULL); + + return !WIFEXITED (s) ? 2 : WEXITSTATUS (s); +} + + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/libc/nptl_db/ChangeLog b/libc/nptl_db/ChangeLog index 3a8c3c68e..b4e311029 100644 --- a/libc/nptl_db/ChangeLog +++ b/libc/nptl_db/ChangeLog @@ -1,3 +1,26 @@ +2007-05-16 Roland McGrath <roland@redhat.com> + + * td_thr_get_info.c: Fake the results for TH->th_unique == 0. + * td_thr_validate.c: Likewise. + * td_thr_setgregs.c: Likewise. + * td_thr_setfpregs.c: Likewise. + * td_thr_getgregs.c: Likewise. + * td_thr_getfpregs.c: Likewise. + * td_thr_tlsbase.c: Likewise. + + * structs.def: Add DB_VARIABLE (__nptl_initial_report_events). + * db_info.c: Add necessary declaration. + * td_thr_event_enable.c: Set __nptl_initial_report_events too. + + * td_ta_thr_iter.c (iterate_thread_list): Make FAKE_EMPTY bool. + Use th_unique=0 in fake descriptor before initialization. + + * td_ta_map_lwp2thr.c (__td_ta_lookup_th_unique): New function, broken + out of ... + (td_ta_map_lwp2thr): ... here, call it. But don't before __stack_user + is initialized, then fake a handle with th_unique=0. + * thread_dbP.h: Declare it. + 2006-10-26 Pete Eberlein <eberlein@us.ibm.com> * nptl_db/db_info.c [TLS_DTV_AT_TP]: Fixed size init for dtvp diff --git a/libc/nscd/Makefile b/libc/nscd/Makefile index 517cf927e..ae61ebe3d 100644 --- a/libc/nscd/Makefile +++ b/libc/nscd/Makefile @@ -38,7 +38,7 @@ nscd-modules := nscd connections pwdcache getpwnam_r getpwuid_r grpcache \ getgrnam_r getgrgid_r hstcache gethstbyad_r gethstbynm2_r \ getsrvbynm_r getsrvbypt_r servicescache \ dbg_log nscd_conf nscd_stat cache mem nscd_setup_thread \ - xmalloc xstrdup aicache initgrcache gai + xmalloc xstrdup aicache initgrcache gai res_hconf ifneq (y,$(OPTION_EGLIBC_NIS)) # If we haven't build libnsl.so, then we'll need to include our # own copy of nis_hash. @@ -130,6 +130,7 @@ CFLAGS-gai.c += $(nscd-cflags) CFLAGS-servicescache.c += $(nscd-cflags) CFLAGS-getsrvbynm_r.c += $(nscd-cflags) CFLAGS-getsrvbypt_r.c += $(nscd-cflags) +CFLAGS-res_hconf.c += $(nscd-cflags) ifeq (yesyes,$(have-fpie)$(build-shared)) relro-LDFLAGS += -Wl,-z,now diff --git a/libc/nscd/aicache.c b/libc/nscd/aicache.c index bccac3abb..0dc892bc7 100644 --- a/libc/nscd/aicache.c +++ b/libc/nscd/aicache.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/cache.c b/libc/nscd/cache.c index 73e7902ca..56198f6b6 100644 --- a/libc/nscd/cache.c +++ b/libc/nscd/cache.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/connections.c b/libc/nscd/connections.c index 1328dc055..11fbc0349 100644 --- a/libc/nscd/connections.c +++ b/libc/nscd/connections.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -467,6 +468,13 @@ fail: } +#ifdef O_CLOEXEC +# define EXTRA_O_FLAGS O_CLOEXEC +#else +# define EXTRA_O_FLAGS 0 +#endif + + /* Initialize database information structures. */ void nscd_init (void) @@ -489,7 +497,7 @@ nscd_init (void) if (dbs[cnt].persistent) { /* Try to open the appropriate file on disk. */ - int fd = open (dbs[cnt].db_filename, O_RDWR); + int fd = open (dbs[cnt].db_filename, O_RDWR | EXTRA_O_FLAGS); if (fd != -1) { struct stat64 st; @@ -568,7 +576,8 @@ nscd_init (void) /* We also need a read-only descriptor. */ if (dbs[cnt].shared) { - dbs[cnt].ro_fd = open (dbs[cnt].db_filename, O_RDONLY); + dbs[cnt].ro_fd = open (dbs[cnt].db_filename, + O_RDONLY | EXTRA_O_FLAGS); if (dbs[cnt].ro_fd == -1) dbg_log (_("\ cannot create read-only descriptor for \"%s\"; no mmap"), @@ -605,22 +614,23 @@ cannot create read-only descriptor for \"%s\"; no mmap"), if (dbs[cnt].persistent) { fd = open (dbs[cnt].db_filename, - O_RDWR | O_CREAT | O_EXCL | O_TRUNC, + O_RDWR | O_CREAT | O_EXCL | O_TRUNC | EXTRA_O_FLAGS, S_IRUSR | S_IWUSR); if (fd != -1 && dbs[cnt].shared) - ro_fd = open (dbs[cnt].db_filename, O_RDONLY); + ro_fd = open (dbs[cnt].db_filename, + O_RDONLY | EXTRA_O_FLAGS); } else { char fname[] = _PATH_NSCD_XYZ_DB_TMP; - fd = mkstemp (fname); + fd = mkostemp (fname, EXTRA_O_FLAGS); /* We do not need the file name anymore after we opened another file descriptor in read-only mode. */ if (fd != -1) { if (dbs[cnt].shared) - ro_fd = open (fname, O_RDONLY); + ro_fd = open (fname, O_RDONLY | EXTRA_O_FLAGS); unlink (fname); } @@ -739,6 +749,11 @@ cannot create read-only descriptor for \"%s\"; no mmap"), } } +#if !defined O_CLOEXEC || !defined __ASSUME_O_CLOEXEC + /* We do not check here whether the O_CLOEXEC provided to the + open call was successful or not. The two fcntl calls are + only performed once each per process start-up and therefore + is not noticeable at all. */ if (paranoia && ((dbs[cnt].wr_fd != -1 && fcntl (dbs[cnt].wr_fd, F_SETFD, FD_CLOEXEC) == -1) @@ -750,6 +765,7 @@ cannot set socket to close on exec: %s; disabling paranoia mode"), strerror (errno)); paranoia = 0; } +#endif if (dbs[cnt].head == NULL) { @@ -891,9 +907,14 @@ send_ro_fd (struct database_dyn *db, char *key, int fd) return; /* We need to send some data along with the descriptor. */ - struct iovec iov[1]; + uint64_t mapsize = (db->head->data_size + + roundup (db->head->module * sizeof (ref_t), ALIGN) + + sizeof (struct database_pers_head)); + struct iovec iov[2]; iov[0].iov_base = key; iov[0].iov_len = strlen (key) + 1; + iov[1].iov_base = &mapsize; + iov[1].iov_len = sizeof (mapsize); /* Prepare the control message to transfer the descriptor. */ union @@ -901,7 +922,7 @@ send_ro_fd (struct database_dyn *db, char *key, int fd) struct cmsghdr hdr; char bytes[CMSG_SPACE (sizeof (int))]; } buf; - struct msghdr msg = { .msg_iov = iov, .msg_iovlen = 1, + struct msghdr msg = { .msg_iov = iov, .msg_iovlen = 2, .msg_control = buf.bytes, .msg_controllen = sizeof (buf) }; struct cmsghdr *cmsg = CMSG_FIRSTHDR (&msg); @@ -1000,7 +1021,7 @@ cannot handle old request version %d; current version is %d"), ssize_t nwritten; #ifdef HAVE_SENDFILE - if (db->mmap_used || !cached->notfound) + if (__builtin_expect (db->mmap_used, 1)) { assert (db->wr_fd != -1); assert ((char *) cached->data > (char *) db->data); diff --git a/libc/nscd/dbg_log.c b/libc/nscd/dbg_log.c index d64afc7e8..5e192c97d 100644 --- a/libc/nscd/dbg_log.c +++ b/libc/nscd/dbg_log.c @@ -3,8 +3,9 @@ Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/gai.c b/libc/nscd/gai.c index 123359040..f2db5299a 100644 --- a/libc/nscd/gai.c +++ b/libc/nscd/gai.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 2004. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -16,6 +17,8 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include <alloca.h> +#include <kernel-features.h> + /* This file uses the getaddrinfo code but it compiles it without NSCD support. We just need a few symbol renames. */ #define __inet_aton inet_aton diff --git a/libc/nscd/getgrgid_r.c b/libc/nscd/getgrgid_r.c index 037509d8a..297ebe769 100644 --- a/libc/nscd/getgrgid_r.c +++ b/libc/nscd/getgrgid_r.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/getgrnam_r.c b/libc/nscd/getgrnam_r.c index 8fc74dcba..55e69d0e0 100644 --- a/libc/nscd/getgrnam_r.c +++ b/libc/nscd/getgrnam_r.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/gethstbyad_r.c b/libc/nscd/gethstbyad_r.c index 4c0249210..e2e8dfe2c 100644 --- a/libc/nscd/gethstbyad_r.c +++ b/libc/nscd/gethstbyad_r.c @@ -1,10 +1,11 @@ -/* Copyright (C) 1996,1997,1998,1999,2000,2005 Free Software Foundation, Inc. +/* Copyright (C) 1996-2000, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -25,5 +26,6 @@ #define ADD_VARIABLES addr, len, type #define NEED_H_ERRNO 1 #define NEED__RES 1 +#define NEED__RES_HCONF 1 #include "../nss/getXXbyYY_r.c" diff --git a/libc/nscd/gethstbynm2_r.c b/libc/nscd/gethstbynm2_r.c index 416b5ceaf..85e95d4a6 100644 --- a/libc/nscd/gethstbynm2_r.c +++ b/libc/nscd/gethstbynm2_r.c @@ -1,10 +1,11 @@ -/* Copyright (C) 1996, 1997, 1998, 2000, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1996-1998, 2000, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -29,6 +30,7 @@ #define ADD_PARAMS const char *name, int af #define ADD_VARIABLES name, af #define NEED_H_ERRNO 1 +#define NEED__RES_HCONF 1 #define HANDLE_DIGITS_DOTS 1 #define HAVE_LOOKUP_BUFFER 1 diff --git a/libc/nscd/getpwnam_r.c b/libc/nscd/getpwnam_r.c index c92209a0c..a1f7c3c87 100644 --- a/libc/nscd/getpwnam_r.c +++ b/libc/nscd/getpwnam_r.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/getpwuid_r.c b/libc/nscd/getpwuid_r.c index f68951511..501c605b5 100644 --- a/libc/nscd/getpwuid_r.c +++ b/libc/nscd/getpwuid_r.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/getsrvbynm_r.c b/libc/nscd/getsrvbynm_r.c index fb60f4802..ebd344ac5 100644 --- a/libc/nscd/getsrvbynm_r.c +++ b/libc/nscd/getsrvbynm_r.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/getsrvbypt_r.c b/libc/nscd/getsrvbypt_r.c index fd5b11bc3..69abee15d 100644 --- a/libc/nscd/getsrvbypt_r.c +++ b/libc/nscd/getsrvbypt_r.c @@ -3,8 +3,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/grpcache.c b/libc/nscd/grpcache.c index 3852e8ca7..9cb6105f3 100644 --- a/libc/nscd/grpcache.c +++ b/libc/nscd/grpcache.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/hstcache.c b/libc/nscd/hstcache.c index ad2e323ea..54222a340 100644 --- a/libc/nscd/hstcache.c +++ b/libc/nscd/hstcache.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -195,7 +196,7 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req, /* Determine the number of addresses. */ h_addr_list_cnt = 0; - for (cnt = 0; hst->h_addr_list[cnt]; ++cnt) + while (hst->h_addr_list[h_addr_list_cnt] != NULL) ++h_addr_list_cnt; if (h_addr_list_cnt == 0) @@ -220,7 +221,7 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req, the current cache handling cannot handle and it is more than questionable whether it is worthwhile complicating the cache handling just for handling such a special case. */ - if (he == NULL && hst->h_addr_list[1] == NULL) + if (he == NULL && h_addr_list_cnt == 1) { dataset = (struct dataset *) mempool_alloc (db, total + req->key_len); @@ -297,25 +298,31 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req, /* The data has not changed. We will just bump the timeout value. Note that the new record has been allocated on the stack and need not be freed. */ + assert (h_addr_list_cnt == 1); dh->timeout = dataset->head.timeout; ++dh->nreloads; } else { - /* We have to create a new record. Just allocate - appropriate memory and copy it. */ - struct dataset *newp - = (struct dataset *) mempool_alloc (db, total + req->key_len); - if (newp != NULL) + if (h_addr_list_cnt == 1) { - /* Adjust pointers into the memory block. */ - addresses = (char *) newp + (addresses - (char *) dataset); - aliases = (char *) newp + (aliases - (char *) dataset); - assert (key_copy != NULL); - key_copy = (char *) newp + (key_copy - (char *) dataset); - - dataset = memcpy (newp, dataset, total + req->key_len); - alloca_used = false; + /* We have to create a new record. Just allocate + appropriate memory and copy it. */ + struct dataset *newp + = (struct dataset *) mempool_alloc (db, + total + req->key_len); + if (newp != NULL) + { + /* Adjust pointers into the memory block. */ + addresses = (char *) newp + (addresses + - (char *) dataset); + aliases = (char *) newp + (aliases - (char *) dataset); + assert (key_copy != NULL); + key_copy = (char *) newp + (key_copy - (char *) dataset); + + dataset = memcpy (newp, dataset, total + req->key_len); + alloca_used = false; + } } /* Mark the old record as obsolete. */ diff --git a/libc/nscd/initgrcache.c b/libc/nscd/initgrcache.c index f1f859c55..bb4ac37ef 100644 --- a/libc/nscd/initgrcache.c +++ b/libc/nscd/initgrcache.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/mem.c b/libc/nscd/mem.c index 5206c5af3..d7c59244a 100644 --- a/libc/nscd/mem.c +++ b/libc/nscd/mem.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/nscd.c b/libc/nscd/nscd.c index ec7fceb3f..e00769421 100644 --- a/libc/nscd/nscd.c +++ b/libc/nscd/nscd.c @@ -3,8 +3,9 @@ Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/nscd_conf.c b/libc/nscd/nscd_conf.c index e724c6bd5..0d5a5f2d8 100644 --- a/libc/nscd/nscd_conf.c +++ b/libc/nscd/nscd_conf.c @@ -3,8 +3,9 @@ Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/nscd_helper.c b/libc/nscd/nscd_helper.c index 79644a4da..5f3d54efc 100644 --- a/libc/nscd/nscd_helper.c +++ b/libc/nscd/nscd_helper.c @@ -238,16 +238,19 @@ get_mapping (request_type type, const char *key, /* Room for the data sent along with the file descriptor. We expect the key name back. */ - struct iovec iov[1]; + uint64_t mapsize; + struct iovec iov[2]; iov[0].iov_base = resdata; iov[0].iov_len = keylen; + iov[1].iov_base = &mapsize; + iov[1].iov_len = sizeof (mapsize); union { struct cmsghdr hdr; char bytes[CMSG_SPACE (sizeof (int))]; } buf; - struct msghdr msg = { .msg_iov = iov, .msg_iovlen = 1, + struct msghdr msg = { .msg_iov = iov, .msg_iovlen = 2, .msg_control = buf.bytes, .msg_controllen = sizeof (buf) }; struct cmsghdr *cmsg = CMSG_FIRSTHDR (&msg); @@ -265,9 +268,10 @@ get_mapping (request_type type, const char *key, if (wait_on_socket (sock) <= 0) goto out_close2; - if (__builtin_expect (TEMP_FAILURE_RETRY (__recvmsg (sock, &msg, 0)) - != keylen, 0)) - goto out_close2; +# ifndef MSG_CMSG_CLOEXEC +# define MSG_CMSG_CLOEXEC 0 +# endif + ssize_t n = TEMP_FAILURE_RETRY (__recvmsg (sock, &msg, MSG_CMSG_CLOEXEC)); if (__builtin_expect (CMSG_FIRSTHDR (&msg) == NULL || (CMSG_FIRSTHDR (&msg)->cmsg_len @@ -276,51 +280,61 @@ get_mapping (request_type type, const char *key, mapfd = *(int *) CMSG_DATA (cmsg); - struct stat64 st; - if (__builtin_expect (strcmp (resdata, key) != 0, 0) - || __builtin_expect (fstat64 (mapfd, &st) != 0, 0) - || __builtin_expect (st.st_size < sizeof (struct database_pers_head), 0)) - goto out_close; - - struct database_pers_head head; - if (__builtin_expect (TEMP_FAILURE_RETRY (__pread (mapfd, &head, - sizeof (head), 0)) - != sizeof (head), 0)) + if (__builtin_expect (n != keylen && n != keylen + sizeof (mapsize), 0)) goto out_close; - if (__builtin_expect (head.version != DB_VERSION, 0) - || __builtin_expect (head.header_size != sizeof (head), 0) - /* This really should not happen but who knows, maybe the update - thread got stuck. */ - || __builtin_expect (! head.nscd_certainly_running - && head.timestamp + MAPPING_TIMEOUT < time (NULL), - 0)) + if (__builtin_expect (strcmp (resdata, key) != 0, 0)) goto out_close; - size_t size = (sizeof (head) + roundup (head.module * sizeof (ref_t), ALIGN) - + head.data_size); + if (__builtin_expect (n == keylen, 0)) + { + struct stat64 st; + if (__builtin_expect (fstat64 (mapfd, &st) != 0, 0) + || __builtin_expect (st.st_size < sizeof (struct database_pers_head), + 0)) + goto out_close; - if (__builtin_expect (st.st_size < size, 0)) - goto out_close; + mapsize = st.st_size; + } /* The file is large enough, map it now. */ - void *mapping = __mmap (NULL, size, PROT_READ, MAP_SHARED, mapfd, 0); + void *mapping = __mmap (NULL, mapsize, PROT_READ, MAP_SHARED, mapfd, 0); if (__builtin_expect (mapping != MAP_FAILED, 1)) { - /* Allocate a record for the mapping. */ - struct mapped_database *newp = malloc (sizeof (*newp)); - if (newp == NULL) + /* Check whether the database is correct and up-to-date. */ + struct database_pers_head *head = mapping; + + if (__builtin_expect (head->version != DB_VERSION, 0) + || __builtin_expect (head->header_size != sizeof (*head), 0) + /* This really should not happen but who knows, maybe the update + thread got stuck. */ + || __builtin_expect (! head->nscd_certainly_running + && (head->timestamp + MAPPING_TIMEOUT + < time (NULL)), 0)) { - /* Ugh, after all we went through the memory allocation failed. */ - __munmap (mapping, size); + out_unmap: + __munmap (mapping, mapsize); goto out_close; } + size_t size = (sizeof (*head) + roundup (head->module * sizeof (ref_t), + ALIGN) + + head->data_size); + + if (__builtin_expect (mapsize < size, 0)) + goto out_unmap; + + /* Allocate a record for the mapping. */ + struct mapped_database *newp = malloc (sizeof (*newp)); + if (newp == NULL) + /* Ugh, after all we went through the memory allocation failed. */ + goto out_unmap; + newp->head = mapping; - newp->data = ((char *) mapping + head.header_size - + roundup (head.module * sizeof (ref_t), ALIGN)); + newp->data = ((char *) mapping + head->header_size + + roundup (head->module * sizeof (ref_t), ALIGN)); newp->mapsize = size; - newp->datasize = head.data_size; + newp->datasize = head->data_size; /* Set counter to 1 to show it is usable. */ newp->counter = 1; diff --git a/libc/nscd/nscd_setup_thread.c b/libc/nscd/nscd_setup_thread.c index 32bfe0700..c17fbd563 100644 --- a/libc/nscd/nscd_setup_thread.c +++ b/libc/nscd/nscd_setup_thread.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/pwdcache.c b/libc/nscd/pwdcache.c index ab41bcc0d..51ea11347 100644 --- a/libc/nscd/pwdcache.c +++ b/libc/nscd/pwdcache.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/nscd/res_hconf.c b/libc/nscd/res_hconf.c new file mode 100644 index 000000000..14b0e300b --- /dev/null +++ b/libc/nscd/res_hconf.c @@ -0,0 +1,13 @@ +/* Add the include here so that we can redefine __fxprintf. */ +#include <stdio.h> + +/* Rename symbols for protected names used in libc itself. */ +#define __ioctl ioctl +#define __socket socket +#define __strchrnul strchrnul +#define __strncasecmp strncasecmp + +#define __fxprintf(args...) /* ignore */ + + +#include "../resolv/res_hconf.c" diff --git a/libc/nscd/selinux.c b/libc/nscd/selinux.c index f2dbceeea..6cbcbea19 100644 --- a/libc/nscd/selinux.c +++ b/libc/nscd/selinux.c @@ -180,7 +180,7 @@ preserve_capabilities (void) } cap_t tmp_caps = cap_init (); - cap_t new_caps; + cap_t new_caps = NULL; if (tmp_caps != NULL) new_caps = cap_init (); diff --git a/libc/nscd/servicescache.c b/libc/nscd/servicescache.c index 8c3a9516b..d6bf51d29 100644 --- a/libc/nscd/servicescache.c +++ b/libc/nscd/servicescache.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@drepper.com>, 2007. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -23,6 +24,7 @@ #include <netdb.h> #include <unistd.h> #include <sys/mman.h> +#include <kernel-features.h> #include "nscd.h" #include "dbg_log.h" diff --git a/libc/nss/Makefile b/libc/nss/Makefile index 77651eb55..13cd7daef 100644 --- a/libc/nss/Makefile +++ b/libc/nss/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1996,1997,1998,2000,2001,2002 Free Software Foundation, Inc. +# Copyright (C) 1996-1998,2000,2001,2002,2007 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 @@ -69,7 +69,8 @@ subdir-dirs = $(services:%=nss_%) vpath %.c $(subdir-dirs) -libnss_files-routines := $(addprefix files-,$(databases-y)) +libnss_files-routines := $(addprefix files-,$(databases-y)) \ + files-have_o_cloexec distribute += files-XXX.c files-parse.c diff --git a/libc/nss/nss_files/files-XXX.c b/libc/nss/nss_files/files-XXX.c index fb13fbe2b..2149d1c40 100644 --- a/libc/nss/nss_files/files-XXX.c +++ b/libc/nss/nss_files/files-XXX.c @@ -1,5 +1,5 @@ /* Common code for file-based databases in nss_files module. - Copyright (C) 1996-1999,2001,2002,2004 Free Software Foundation, Inc. + Copyright (C) 1996-1999,2001,2002,2004,2007 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,6 +24,8 @@ #include <bits/libc-lock.h> #include "nsswitch.h" +#include <kernel-features.h> + /* These symbols are defined by the including source file: ENTNAME -- database name of the structure and functions (hostent, pwent). @@ -74,29 +76,44 @@ internal_setent (int stayopen) if (stream == NULL) { - stream = fopen (DATAFILE, "r"); + stream = fopen (DATAFILE, "re"); if (stream == NULL) status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; else { - /* We have to make sure the file is `closed on exec'. */ - int result, flags; - - result = flags = fcntl (fileno (stream), F_GETFD, 0); - if (result >= 0) +#if !defined O_CLOEXEC || !defined __ASSUME_O_CLOEXEC +# ifdef O_CLOEXEC + if (__have_o_cloexec <= 0) +# endif { - flags |= FD_CLOEXEC; - result = fcntl (fileno (stream), F_SETFD, flags); - } - if (result < 0) - { - /* Something went wrong. Close the stream and return a - failure. */ - fclose (stream); - stream = NULL; - status = NSS_STATUS_UNAVAIL; + /* We have to make sure the file is `closed on exec'. */ + int result; + int flags; + + result = flags = fcntl (fileno (stream), F_GETFD, 0); + if (result >= 0) + { +# ifdef O_CLOEXEC + if (__have_o_cloexec == 0) + __have_o_cloexec = (flags & FD_CLOEXEC) == 0 ? -1 : 1; + if (__have_o_cloexec < 0) +# endif + { + flags |= FD_CLOEXEC; + result = fcntl (fileno (stream), F_SETFD, flags); + } + } + if (result < 0) + { + /* Something went wrong. Close the stream and return a + failure. */ + fclose (stream); + stream = NULL; + status = NSS_STATUS_UNAVAIL; + } } +#endif } } else diff --git a/libc/nss/nss_files/files-alias.c b/libc/nss/nss_files/files-alias.c index c4717e124..57cc982f7 100644 --- a/libc/nss/nss_files/files-alias.c +++ b/libc/nss/nss_files/files-alias.c @@ -1,5 +1,5 @@ /* Mail alias file parser in nss_files module. - Copyright (C) 1996,97,98,99,2002,2006 Free Software Foundation, Inc. + Copyright (C) 1996,97,98,99,2002,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -27,6 +27,8 @@ #include <stdio.h> #include <string.h> +#include <kernel-features.h> + #include "nsswitch.h" /* Locks the static variables in this file. */ @@ -46,29 +48,44 @@ internal_setent (void) if (stream == NULL) { - stream = fopen ("/etc/aliases", "r"); + stream = fopen ("/etc/aliases", "re"); if (stream == NULL) status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; else { - /* We have to make sure the file is `closed on exec'. */ - int result, flags; - - result = flags = fcntl (fileno (stream), F_GETFD, 0); - if (result >= 0) - { - flags |= FD_CLOEXEC; - result = fcntl (fileno (stream), F_SETFD, flags); - } - if (result < 0) +#if !defined O_CLOEXEC || !defined __ASSUME_O_CLOEXEC +# ifdef O_CLOEXEC + if (__have_o_cloexec <= 0) +# endif { - /* Something went wrong. Close the stream and return a - failure. */ - fclose (stream); - stream = NULL; - status = NSS_STATUS_UNAVAIL; + /* We have to make sure the file is `closed on exec'. */ + int result; + int flags; + + result = flags = fcntl (fileno (stream), F_GETFD, 0); + if (result >= 0) + { +# ifdef O_CLOEXEC + if (__have_o_cloexec == 0) + __have_o_cloexec = (flags & FD_CLOEXEC) == 0 ? -1 : 1; + if (__have_o_cloexec < 0) +# endif + { + flags |= FD_CLOEXEC; + result = fcntl (fileno (stream), F_SETFD, flags); + } + } + if (result < 0) + { + /* Something went wrong. Close the stream and return a + failure. */ + fclose (stream); + stream = NULL; + status = NSS_STATUS_UNAVAIL; + } } +#endif } } else diff --git a/libc/nss/nss_files/files-have_o_cloexec.c b/libc/nss/nss_files/files-have_o_cloexec.c new file mode 100644 index 000000000..a83e8a448 --- /dev/null +++ b/libc/nss/nss_files/files-have_o_cloexec.c @@ -0,0 +1,24 @@ +/* Copyright (C) 2007 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 <fcntl.h> +#include <kernel-features.h> + +#if defined O_CLOEXEC && !defined __ASSUME_O_CLOEXEC +int __have_o_cloexec; +#endif diff --git a/libc/nss/nss_files/files-hosts.c b/libc/nss/nss_files/files-hosts.c index 7b7aadeaa..b06467225 100644 --- a/libc/nss/nss_files/files-hosts.c +++ b/libc/nss/nss_files/files-hosts.c @@ -86,7 +86,7 @@ LINE_PARSER result->h_length = af == AF_INET ? INADDRSZ : IN6ADDRSZ; /* Store a pointer to the address in the expected form. */ - entdata->h_addr_ptrs[0] = entdata->host_addr; + entdata->h_addr_ptrs[0] = (char *) entdata->host_addr; entdata->h_addr_ptrs[1] = NULL; result->h_addr_list = entdata->h_addr_ptrs; diff --git a/libc/nss/nsswitch.h b/libc/nss/nsswitch.h index 6eb0ed0c1..1154db8b4 100644 --- a/libc/nss/nsswitch.h +++ b/libc/nss/nsswitch.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1996-1999,2001,2002,2003,2004 Free Software Foundation, Inc. +/* Copyright (C) 1996-1999,2001,2002,2003,2004,2007 + 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/libc/po/bg.po b/libc/po/bg.po new file mode 100644 index 000000000..279476dd2 --- /dev/null +++ b/libc/po/bg.po @@ -0,0 +1,6464 @@ +# translation of libc.bg.po to Bulgarian +# Copyright (C) 2007 Free Software Foundation, Inc. +# This file is distributed under the same license as the glibc package +# Anton Zinoviev <zinoviev@debian.org>, 2007 +# +# I have translated only the messages in sysdeps/gnu/errlist.c +# +# This file should be sent to robot@translationproject.org with the +# following subject line: TP-Robot libc-2.6.1.bg.po +msgid "" +msgstr "" +"Project-Id-Version: libc 2.6.1\n" +"POT-Creation-Date: 2007-08-04 11:37+0200\n" +"PO-Revision-Date: 2007-08-14 10:01+0300\n" +"Last-Translator: Anton Zinoviev <zinoviev@debian.org>\n" +"Language-Team: Bulgarian <dict@fsa-bg.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: argp/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "" + +#: argp/argp-help.c:238 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "" + +#: argp/argp-help.c:251 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "" + +#: argp/argp-help.c:1215 +msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." +msgstr "" + +#: argp/argp-help.c:1601 +msgid "Usage:" +msgstr "" + +#: argp/argp-help.c:1605 +msgid " or: " +msgstr "" + +#: argp/argp-help.c:1617 +msgid " [OPTION...]" +msgstr "" + +#: argp/argp-help.c:1644 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "" + +#: argp/argp-help.c:1672 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "" + +#: argp/argp-parse.c:102 +msgid "Give this help list" +msgstr "" + +#: argp/argp-parse.c:103 +msgid "Give a short usage message" +msgstr "" + +#: argp/argp-parse.c:104 +msgid "Set the program name" +msgstr "" + +#: argp/argp-parse.c:106 +msgid "Hang for SECS seconds (default 3600)" +msgstr "" + +#: argp/argp-parse.c:167 +#, fuzzy +msgid "Print program version" +msgstr "Ðеправилна верÑÐ¸Ñ Ð½Ð° RPC-програма" + +#: argp/argp-parse.c:183 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "" + +#: argp/argp-parse.c:623 +#, fuzzy, c-format +msgid "%s: Too many arguments\n" +msgstr "Твърде много потребители" + +#: argp/argp-parse.c:766 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "" + +#: assert/assert-perr.c:57 +#, c-format +msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n" +msgstr "" + +#: assert/assert.c:57 +#, c-format +msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" +msgstr "" + +#: catgets/gencat.c:110 catgets/gencat.c:114 nscd/nscd.c:97 nss/makedb.c:61 +msgid "NAME" +msgstr "" + +#: catgets/gencat.c:111 +msgid "Create C header file NAME containing symbol definitions" +msgstr "" + +#: catgets/gencat.c:113 +msgid "Do not use existing catalog, force new output file" +msgstr "" + +#: catgets/gencat.c:114 nss/makedb.c:61 +msgid "Write output to file NAME" +msgstr "" + +#: catgets/gencat.c:119 +msgid "" +"Generate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" +"is -, output is written to standard output.\n" +msgstr "" + +#: catgets/gencat.c:124 +msgid "" +"-o OUTPUT-FILE [INPUT-FILE]...\n" +"[OUTPUT-FILE [INPUT-FILE]...]" +msgstr "" + +#: catgets/gencat.c:232 debug/pcprofiledump.c:199 iconv/iconv_prog.c:411 +#: iconv/iconvconfig.c:380 locale/programs/localedef.c:371 +#: login/programs/pt_chown.c:88 malloc/memusagestat.c:526 nss/makedb.c:231 +msgid "" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" + +#: catgets/gencat.c:246 debug/xtrace.sh:64 elf/ldconfig.c:287 +#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:426 +#: iconv/iconvconfig.c:395 locale/programs/locale.c:275 +#: locale/programs/localedef.c:387 login/programs/pt_chown.c:59 +#: malloc/memusage.sh:71 nscd/nscd.c:406 nss/getent.c:83 nss/makedb.c:245 +#: posix/getconf.c:1012 +#, 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 "" + +#: catgets/gencat.c:251 debug/xtrace.sh:68 elf/ldconfig.c:292 elf/sprof.c:361 +#: iconv/iconv_prog.c:431 iconv/iconvconfig.c:400 locale/programs/locale.c:280 +#: locale/programs/localedef.c:392 malloc/memusage.sh:75 nscd/nscd.c:411 +#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1017 +#, c-format +msgid "Written by %s.\n" +msgstr "" + +#: catgets/gencat.c:282 +msgid "*standard input*" +msgstr "" + +#: catgets/gencat.c:288 iconv/iconv_charmap.c:158 iconv/iconv_prog.c:298 +#: nss/makedb.c:170 +#, c-format +msgid "cannot open input file `%s'" +msgstr "" + +#: catgets/gencat.c:417 catgets/gencat.c:494 +#, fuzzy +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 "" + +#: catgets/gencat.c:563 +#, fuzzy +msgid "invalid quote character" +msgstr "Ðеправилен обмен" + +#: catgets/gencat.c:576 +#, c-format +msgid "unknown directive `%s': line ignored" +msgstr "" + +#: 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 +#, fuzzy +msgid "invalid line" +msgstr "Ðеправилен Ñлот" + +#: catgets/gencat.c:828 +msgid "malformed line ignored" +msgstr "" + +#: catgets/gencat.c:992 catgets/gencat.c:1033 nss/makedb.c:183 +#, c-format +msgid "cannot open output file `%s'" +msgstr "" + +#: catgets/gencat.c:1195 locale/programs/linereader.c:560 +#, fuzzy +msgid "invalid escape sequence" +msgstr "Ðеправилен обмен" + +#: catgets/gencat.c:1217 +#, fuzzy +msgid "unterminated message" +msgstr "Лошо Ñъобщение" + +#: catgets/gencat.c:1241 +#, c-format +msgid "while opening old catalog file" +msgstr "" + +#: catgets/gencat.c:1332 +#, fuzzy, c-format +msgid "conversion modules not available" +msgstr "ÐедоÑтъпен протокол" + +#: catgets/gencat.c:1358 +#, c-format +msgid "cannot determine escape character" +msgstr "" + +#: debug/pcprofiledump.c:52 +msgid "Don't buffer output" +msgstr "" + +#: debug/pcprofiledump.c:57 +msgid "Dump information generated by PC profiling." +msgstr "" + +#: debug/pcprofiledump.c:60 +msgid "[FILE]" +msgstr "" + +#: debug/pcprofiledump.c:100 +#, c-format +msgid "cannot open input file" +msgstr "" + +#: debug/pcprofiledump.c:106 +#, c-format +msgid "cannot read header" +msgstr "" + +#: debug/pcprofiledump.c:170 +#, c-format +msgid "invalid pointer size" +msgstr "" + +#: debug/xtrace.sh:27 debug/xtrace.sh:45 +msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n" +msgstr "" + +#: debug/xtrace.sh:33 +msgid "Try \\`xtrace --help' for more information.\\n" +msgstr "" + +#: debug/xtrace.sh:39 +msgid "xtrace: option \\`$1' requires an argument.\\n" +msgstr "" + +#: debug/xtrace.sh:46 +msgid "" +"Trace execution of program by printing currently executed function.\n" +"\n" +" --data=FILE Don't run the program, just print the data from FILE.\n" +"\n" +" -?,--help Print this help and exit\n" +" --usage Give a short usage message\n" +" -V,--version Print version information and exit\n" +"\n" +"Mandatory arguments to long options are also mandatory for any corresponding\n" +"short options.\n" +"\n" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\\n" +msgstr "" + +#: debug/xtrace.sh:125 +msgid "xtrace: unrecognized option \\`$1'\\n" +msgstr "" + +#: debug/xtrace.sh:138 +msgid "No program name given\\n" +msgstr "" + +#: debug/xtrace.sh:146 +#, sh-format +msgid "executable \\`$program' not found\\n" +msgstr "" + +#: debug/xtrace.sh:150 +#, sh-format +msgid "\\`$program' is no executable\\n" +msgstr "" + +#: dlfcn/dlinfo.c:64 +msgid "RTLD_SELF used in code not dynamically loaded" +msgstr "" + +#: dlfcn/dlinfo.c:73 +msgid "unsupported dlinfo request" +msgstr "" + +#: dlfcn/dlmopen.c:64 +#, fuzzy +msgid "invalid namespace" +msgstr "Ðеправилен аргумент" + +#: dlfcn/dlmopen.c:69 +#, fuzzy +msgid "invalid mode" +msgstr "Ðеправилен Ñлот" + +#: dlfcn/dlopen.c:64 +#, fuzzy +msgid "invalid mode parameter" +msgstr "Ðеправилен аргумент" + +#: elf/cache.c:68 +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 "" + +#: elf/cache.c:142 elf/ldconfig.c:1236 +#, c-format +msgid "Can't open cache file %s\n" +msgstr "" + +#: elf/cache.c:154 +#, c-format +msgid "mmap of cache file failed.\n" +msgstr "" + +#: elf/cache.c:158 elf/cache.c:168 +#, c-format +msgid "File is not a cache file.\n" +msgstr "" + +#: elf/cache.c:201 elf/cache.c:211 +#, c-format +msgid "%d libs found in cache `%s'\n" +msgstr "" + +#: elf/cache.c:410 +#, c-format +msgid "Can't remove old temporary cache file %s" +msgstr "" + +#: elf/cache.c:417 +#, c-format +msgid "Can't create temporary cache file %s" +msgstr "" + +#: elf/cache.c:425 elf/cache.c:435 elf/cache.c:439 elf/cache.c:443 +#, c-format +msgid "Writing of cache data failed" +msgstr "" + +#: elf/cache.c:450 +#, c-format +msgid "Changing access rights of %s to %#o failed" +msgstr "" + +#: elf/cache.c:455 +#, c-format +msgid "Renaming of %s to %s failed" +msgstr "" + +#: elf/dl-close.c:378 elf/dl-open.c:460 +msgid "cannot create scope list" +msgstr "" + +#: elf/dl-close.c:724 +msgid "shared object not open" +msgstr "" + +#: elf/dl-deps.c:112 +msgid "DST not allowed in SUID/SGID programs" +msgstr "" + +#: elf/dl-deps.c:125 elf/dl-open.c:282 +msgid "empty dynamic string token substitution" +msgstr "" + +#: elf/dl-deps.c:131 +#, c-format +msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n" +msgstr "" + +#: elf/dl-deps.c:472 +#, fuzzy +msgid "cannot allocate dependency list" +msgstr "Ðе може да Ñе задели памет" + +#: elf/dl-deps.c:505 elf/dl-deps.c:560 +#, fuzzy +msgid "cannot allocate symbol search list" +msgstr "Ðе може да Ñе задели памет" + +#: elf/dl-deps.c:545 +msgid "Filters not supported with LD_TRACE_PRELINKING" +msgstr "" + +#: elf/dl-error.c:77 +msgid "DYNAMIC LINKER BUG!!!" +msgstr "" + +#: elf/dl-error.c:124 +#, fuzzy +msgid "error while loading shared libraries" +msgstr "Опитва Ñе Ñвързване в твърде много Ñподелени библиотеки" + +#: elf/dl-fptr.c:88 +msgid "cannot map pages for fdesc table" +msgstr "" + +#: elf/dl-fptr.c:192 +msgid "cannot map pages for fptr table" +msgstr "" + +#: elf/dl-fptr.c:221 +msgid "internal error: symidx out of range of fptr table" +msgstr "" + +#: elf/dl-load.c:372 +#, fuzzy +msgid "cannot allocate name record" +msgstr "Ðе може да Ñе задели памет" + +#: elf/dl-load.c:474 elf/dl-load.c:582 elf/dl-load.c:667 elf/dl-load.c:780 +msgid "cannot create cache for search path" +msgstr "" + +#: elf/dl-load.c:565 +msgid "cannot create RUNPATH/RPATH copy" +msgstr "" + +#: elf/dl-load.c:653 +msgid "cannot create search path array" +msgstr "" + +#: elf/dl-load.c:864 +#, fuzzy +msgid "cannot stat shared object" +msgstr "Ðе може да Ñе изпълнÑва директно Ñподелена библиотека" + +#: elf/dl-load.c:934 +msgid "cannot open zero fill device" +msgstr "" + +#: elf/dl-load.c:979 elf/dl-load.c:2224 +msgid "cannot create shared object descriptor" +msgstr "" + +#: elf/dl-load.c:998 elf/dl-load.c:1656 elf/dl-load.c:1748 +msgid "cannot read file data" +msgstr "" + +#: elf/dl-load.c:1042 +msgid "ELF load command alignment not page-aligned" +msgstr "" + +#: elf/dl-load.c:1049 +msgid "ELF load command address/offset not properly aligned" +msgstr "" + +#: elf/dl-load.c:1132 +msgid "cannot allocate TLS data structures for initial thread" +msgstr "" + +#: elf/dl-load.c:1155 +msgid "cannot handle TLS data" +msgstr "" + +#: elf/dl-load.c:1174 +msgid "object file has no loadable segments" +msgstr "" + +#: elf/dl-load.c:1210 +msgid "failed to map segment from shared object" +msgstr "" + +#: elf/dl-load.c:1236 +msgid "cannot dynamically load executable" +msgstr "" + +#: elf/dl-load.c:1298 +msgid "cannot change memory protections" +msgstr "" + +#: elf/dl-load.c:1317 +msgid "cannot map zero-fill pages" +msgstr "" + +#: elf/dl-load.c:1331 +msgid "object file has no dynamic section" +msgstr "" + +#: elf/dl-load.c:1354 +msgid "shared object cannot be dlopen()ed" +msgstr "" + +#: elf/dl-load.c:1367 +#, fuzzy +msgid "cannot allocate memory for program header" +msgstr "Ðе може да Ñе задели памет" + +#: elf/dl-load.c:1384 elf/dl-open.c:218 +#, fuzzy +msgid "invalid caller" +msgstr "Ðеправилен обмен" + +#: elf/dl-load.c:1423 +msgid "cannot enable executable stack as shared object requires" +msgstr "" + +#: elf/dl-load.c:1436 +#, fuzzy +msgid "cannot close file descriptor" +msgstr "Ðеправилен файлов деÑкриптор" + +#: elf/dl-load.c:1478 +msgid "cannot create searchlist" +msgstr "" + +#: elf/dl-load.c:1656 +#, fuzzy +msgid "file too short" +msgstr "Твърде голÑм файл" + +#: elf/dl-load.c:1685 +msgid "invalid ELF header" +msgstr "" + +#: elf/dl-load.c:1697 +msgid "ELF file data encoding not big-endian" +msgstr "" + +#: elf/dl-load.c:1699 +msgid "ELF file data encoding not little-endian" +msgstr "" + +#: elf/dl-load.c:1703 +msgid "ELF file version ident does not match current one" +msgstr "" + +#: elf/dl-load.c:1707 +msgid "ELF file OS ABI invalid" +msgstr "" + +#: elf/dl-load.c:1709 +msgid "ELF file ABI version invalid" +msgstr "" + +#: elf/dl-load.c:1712 +msgid "internal error" +msgstr "" + +#: elf/dl-load.c:1719 +msgid "ELF file version does not match current one" +msgstr "" + +#: elf/dl-load.c:1727 +msgid "only ET_DYN and ET_EXEC can be loaded" +msgstr "" + +#: elf/dl-load.c:1733 +msgid "ELF file's phentsize not the expected size" +msgstr "" + +#: elf/dl-load.c:2240 +msgid "wrong ELF class: ELFCLASS64" +msgstr "" + +#: elf/dl-load.c:2241 +msgid "wrong ELF class: ELFCLASS32" +msgstr "" + +#: elf/dl-load.c:2244 +msgid "cannot open shared object file" +msgstr "" + +#: elf/dl-lookup.c:261 +#, fuzzy +msgid "relocation error" +msgstr "Грешка при удоÑтоверÑване (authentication)" + +#: elf/dl-lookup.c:289 +msgid "symbol lookup error" +msgstr "" + +#: elf/dl-open.c:114 +msgid "cannot extend global scope" +msgstr "" + +#: elf/dl-open.c:512 +msgid "TLS generation counter wrapped! Please report this." +msgstr "" + +#: elf/dl-open.c:549 +msgid "invalid mode for dlopen()" +msgstr "" + +#: elf/dl-open.c:566 +msgid "no more namespaces available for dlmopen()" +msgstr "" + +#: elf/dl-open.c:579 +msgid "invalid target namespace in dlmopen()" +msgstr "" + +#: elf/dl-reloc.c:54 +#, fuzzy +msgid "cannot allocate memory in static TLS block" +msgstr "Ðе може да Ñе задели памет" + +#: elf/dl-reloc.c:196 +msgid "cannot make segment writable for relocation" +msgstr "" + +#: elf/dl-reloc.c:277 +#, c-format +msgid "%s: no PLTREL found in object %s\n" +msgstr "" + +#: elf/dl-reloc.c:288 +#, c-format +msgid "%s: out of memory to store relocation results for %s\n" +msgstr "" + +#: elf/dl-reloc.c:304 +msgid "cannot restore segment prot after reloc" +msgstr "" + +#: elf/dl-reloc.c:329 +msgid "cannot apply additional memory protection after relocation" +msgstr "" + +#: elf/dl-sym.c:161 +msgid "RTLD_NEXT used in code not dynamically loaded" +msgstr "" + +#: elf/dl-sysdep.c:474 elf/dl-sysdep.c:486 +msgid "cannot create capability list" +msgstr "" + +#: elf/dl-tls.c:825 +msgid "cannot create TLS data structures" +msgstr "" + +#: elf/dl-version.c:303 +msgid "cannot allocate version reference table" +msgstr "" + +#: elf/ldconfig.c:135 +msgid "Print cache" +msgstr "" + +#: elf/ldconfig.c:136 +msgid "Generate verbose messages" +msgstr "" + +#: elf/ldconfig.c:137 +msgid "Don't build cache" +msgstr "" + +#: elf/ldconfig.c:138 +msgid "Don't generate links" +msgstr "" + +#: elf/ldconfig.c:139 +msgid "Change to and use ROOT as root directory" +msgstr "" + +#: elf/ldconfig.c:139 +msgid "ROOT" +msgstr "" + +#: elf/ldconfig.c:140 +msgid "CACHE" +msgstr "" + +#: elf/ldconfig.c:140 +msgid "Use CACHE as cache file" +msgstr "" + +#: elf/ldconfig.c:141 +msgid "CONF" +msgstr "" + +#: elf/ldconfig.c:141 +msgid "Use CONF as configuration file" +msgstr "" + +#: elf/ldconfig.c:142 +msgid "Only process directories specified on the command line. Don't build cache." +msgstr "" + +#: elf/ldconfig.c:143 +msgid "Manually link individual libraries." +msgstr "" + +#: elf/ldconfig.c:144 +msgid "FORMAT" +msgstr "" + +#: elf/ldconfig.c:144 +msgid "Format to use: new, old or compat (default)" +msgstr "" + +#: elf/ldconfig.c:152 +msgid "Configure Dynamic Linker Run Time Bindings." +msgstr "" + +#: elf/ldconfig.c:310 +#, c-format +msgid "Path `%s' given more than once" +msgstr "" + +#: elf/ldconfig.c:350 +#, c-format +msgid "%s is not a known library type" +msgstr "" + +#: elf/ldconfig.c:375 +#, c-format +msgid "Can't stat %s" +msgstr "" + +#: elf/ldconfig.c:449 +#, c-format +msgid "Can't stat %s\n" +msgstr "" + +#: elf/ldconfig.c:459 +#, fuzzy, c-format +msgid "%s is not a symbolic link\n" +msgstr "Твърде много нива от Ñимволни връзки" + +#: elf/ldconfig.c:478 +#, c-format +msgid "Can't unlink %s" +msgstr "" + +#: elf/ldconfig.c:484 +#, c-format +msgid "Can't link %s to %s" +msgstr "" + +#: elf/ldconfig.c:490 +msgid " (changed)\n" +msgstr "" + +#: elf/ldconfig.c:492 +msgid " (SKIPPED)\n" +msgstr "" + +#: elf/ldconfig.c:547 +#, c-format +msgid "Can't find %s" +msgstr "" + +#: elf/ldconfig.c:563 elf/ldconfig.c:737 elf/ldconfig.c:784 +#, c-format +msgid "Cannot lstat %s" +msgstr "" + +#: elf/ldconfig.c:570 +#, c-format +msgid "Ignored file %s since it is not a regular file." +msgstr "" + +#: elf/ldconfig.c:578 +#, c-format +msgid "No link created since soname could not be found for %s" +msgstr "" + +#: elf/ldconfig.c:669 +#, fuzzy, c-format +msgid "Can't open directory %s" +msgstr "Ðе е директориÑ" + +#: elf/ldconfig.c:749 +#, c-format +msgid "Cannot stat %s" +msgstr "" + +#: elf/ldconfig.c:806 elf/readlib.c:91 +#, c-format +msgid "Input file %s not found.\n" +msgstr "" + +#: elf/ldconfig.c:857 +#, c-format +msgid "libc5 library %s in wrong directory" +msgstr "" + +#: elf/ldconfig.c:860 +#, c-format +msgid "libc6 library %s in wrong directory" +msgstr "" + +#: elf/ldconfig.c:863 +#, c-format +msgid "libc4 library %s in wrong directory" +msgstr "" + +#: elf/ldconfig.c:890 +#, c-format +msgid "libraries %s and %s in directory %s have same soname but different type." +msgstr "" + +#: elf/ldconfig.c:997 +#, c-format +msgid "Can't open configuration file %s" +msgstr "" + +#: elf/ldconfig.c:1061 +#, c-format +msgid "%s:%u: bad syntax in hwcap line" +msgstr "" + +#: elf/ldconfig.c:1067 +#, c-format +msgid "%s:%u: hwcap index %lu above maximum %u" +msgstr "" + +#: elf/ldconfig.c:1074 elf/ldconfig.c:1082 +#, c-format +msgid "%s:%u: hwcap index %lu already defined as %s" +msgstr "" + +#: elf/ldconfig.c:1085 +#, c-format +msgid "%s:%u: duplicate hwcap %lu %s" +msgstr "" + +#: elf/ldconfig.c:1107 +#, c-format +msgid "need absolute file name for configuration file when using -r" +msgstr "" + +#: elf/ldconfig.c:1114 locale/programs/xmalloc.c:70 malloc/obstack.c:434 +#: malloc/obstack.c:436 posix/getconf.c:985 posix/getconf.c:1163 +#, c-format +msgid "memory exhausted" +msgstr "" + +#: elf/ldconfig.c:1144 +#, fuzzy, c-format +msgid "%s:%u: cannot read directory %s" +msgstr "Ðе е директориÑ" + +#: elf/ldconfig.c:1189 +#, c-format +msgid "relative path `%s' used to build cache" +msgstr "" + +#: elf/ldconfig.c:1215 +#, c-format +msgid "Can't chdir to /" +msgstr "" + +#: elf/ldconfig.c:1257 +#, fuzzy, c-format +msgid "Can't open cache file directory %s\n" +msgstr "ÐÑма такъв файл или директориÑ" + +#: elf/ldd.bash.in:43 +msgid "Written by %s and %s.\n" +msgstr "" + +#: elf/ldd.bash.in:48 +msgid "" +"Usage: ldd [OPTION]... FILE...\n" +" --help print this help and exit\n" +" --version print version information and exit\n" +" -d, --data-relocs process data relocations\n" +" -r, --function-relocs process data and function relocations\n" +" -u, --unused print unused direct dependencies\n" +" -v, --verbose print all information\n" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>." +msgstr "" + +#: elf/ldd.bash.in:80 +msgid "ldd: option \\`$1' is ambiguous" +msgstr "" + +#: elf/ldd.bash.in:87 +msgid "unrecognized option" +msgstr "" + +#: elf/ldd.bash.in:88 elf/ldd.bash.in:126 +msgid "Try \\`ldd --help' for more information." +msgstr "" + +#: elf/ldd.bash.in:125 +msgid "missing file arguments" +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. +#: elf/ldd.bash.in:148 sysdeps/gnu/errlist.c:36 +msgid "No such file or directory" +msgstr "ÐÑма такъв файл или директориÑ" + +#: elf/ldd.bash.in:151 inet/rcmd.c:483 +msgid "not regular file" +msgstr "" + +#: elf/ldd.bash.in:154 +msgid "warning: you do not have execution permission for" +msgstr "" + +#: elf/ldd.bash.in:183 +msgid "\tnot a dynamic executable" +msgstr "" + +#: elf/ldd.bash.in:191 +msgid "exited with unknown exit code" +msgstr "" + +#: elf/ldd.bash.in:196 +msgid "error: you do not have read permission for" +msgstr "" + +#: elf/readelflib.c:35 +#, c-format +msgid "file %s is truncated\n" +msgstr "" + +#: elf/readelflib.c:67 +#, c-format +msgid "%s is a 32 bit ELF file.\n" +msgstr "" + +#: elf/readelflib.c:69 +#, c-format +msgid "%s is a 64 bit ELF file.\n" +msgstr "" + +#: elf/readelflib.c:71 +#, c-format +msgid "Unknown ELFCLASS in file %s.\n" +msgstr "" + +#: elf/readelflib.c:78 +#, c-format +msgid "%s is not a shared object file (Type: %d).\n" +msgstr "" + +#: elf/readelflib.c:109 +#, c-format +msgid "more than one dynamic segment\n" +msgstr "" + +#: elf/readlib.c:97 +#, c-format +msgid "Cannot fstat file %s.\n" +msgstr "" + +#: elf/readlib.c:108 +#, c-format +msgid "File %s is empty, not checked." +msgstr "" + +#: elf/readlib.c:114 +#, c-format +msgid "File %s is too small, not checked." +msgstr "" + +#: elf/readlib.c:124 +#, c-format +msgid "Cannot mmap file %s.\n" +msgstr "" + +#: elf/readlib.c:162 +#, c-format +msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n" +msgstr "" + +#: elf/sprof.c:77 +msgid "Output selection:" +msgstr "" + +#: elf/sprof.c:79 +msgid "print list of count paths and their number of use" +msgstr "" + +#: elf/sprof.c:81 +msgid "generate flat profile with counts and ticks" +msgstr "" + +#: elf/sprof.c:82 +msgid "generate call graph" +msgstr "" + +#: elf/sprof.c:89 +msgid "" +"Read and display shared object profiling data.\vFor bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" + +#: elf/sprof.c:94 +msgid "SHOBJ [PROFDATA]" +msgstr "" + +#: elf/sprof.c:400 +#, c-format +msgid "failed to load shared object `%s'" +msgstr "" + +#: elf/sprof.c:409 +#, c-format +msgid "cannot create internal descriptors" +msgstr "" + +#: elf/sprof.c:528 +#, c-format +msgid "Reopening shared object `%s' failed" +msgstr "" + +#: elf/sprof.c:535 elf/sprof.c:629 +#, c-format +msgid "reading of section headers failed" +msgstr "" + +#: elf/sprof.c:543 elf/sprof.c:637 +#, c-format +msgid "reading of section header string table failed" +msgstr "" + +#: elf/sprof.c:569 +#, c-format +msgid "*** Cannot read debuginfo file name: %m\n" +msgstr "" + +#: elf/sprof.c:589 +#, c-format +msgid "cannot determine file name" +msgstr "" + +#: elf/sprof.c:622 +#, c-format +msgid "reading of ELF header failed" +msgstr "" + +#: elf/sprof.c:658 +#, c-format +msgid "*** The file `%s' is stripped: no detailed analysis possible\n" +msgstr "" + +#: elf/sprof.c:688 +#, c-format +msgid "failed to load symbol data" +msgstr "" + +#: elf/sprof.c:755 +#, c-format +msgid "cannot load profiling data" +msgstr "" + +#: elf/sprof.c:764 +#, c-format +msgid "while stat'ing profiling data file" +msgstr "" + +#: elf/sprof.c:772 +#, c-format +msgid "profiling data file `%s' does not match shared object `%s'" +msgstr "" + +#: elf/sprof.c:783 +#, c-format +msgid "failed to mmap the profiling data file" +msgstr "" + +#: elf/sprof.c:791 +#, c-format +msgid "error while closing the profiling data file" +msgstr "" + +#: elf/sprof.c:800 elf/sprof.c:870 +#, c-format +msgid "cannot create internal descriptor" +msgstr "" + +#: elf/sprof.c:846 +#, c-format +msgid "`%s' is no correct profile data file for `%s'" +msgstr "" + +#: elf/sprof.c:1027 elf/sprof.c:1085 +#, fuzzy, c-format +msgid "cannot allocate symbol data" +msgstr "Ðе може да Ñе задели памет" + +#: iconv/iconv_charmap.c:176 iconv/iconv_prog.c:316 +#, c-format +msgid "error while closing input `%s'" +msgstr "" + +#: iconv/iconv_charmap.c:450 +#, c-format +msgid "illegal input sequence at position %Zd" +msgstr "" + +#: iconv/iconv_charmap.c:469 iconv/iconv_prog.c:526 +#, c-format +msgid "incomplete character or shift sequence at end of buffer" +msgstr "" + +#: iconv/iconv_charmap.c:514 iconv/iconv_charmap.c:550 iconv/iconv_prog.c:569 +#: iconv/iconv_prog.c:605 +#, c-format +msgid "error while reading the input" +msgstr "" + +#: iconv/iconv_charmap.c:532 iconv/iconv_prog.c:587 +#, c-format +msgid "unable to allocate buffer for input" +msgstr "" + +#: iconv/iconv_prog.c:60 +msgid "Input/Output format specification:" +msgstr "" + +#: iconv/iconv_prog.c:61 +msgid "encoding of original text" +msgstr "" + +#: iconv/iconv_prog.c:62 +msgid "encoding for output" +msgstr "" + +#: iconv/iconv_prog.c:63 +msgid "Information:" +msgstr "" + +#: iconv/iconv_prog.c:64 +msgid "list all known coded character sets" +msgstr "" + +#: iconv/iconv_prog.c:65 locale/programs/localedef.c:127 +msgid "Output control:" +msgstr "" + +#: iconv/iconv_prog.c:66 +msgid "omit invalid characters from output" +msgstr "" + +#: iconv/iconv_prog.c:67 +msgid "output file" +msgstr "" + +#: iconv/iconv_prog.c:68 +msgid "suppress warnings" +msgstr "" + +#: iconv/iconv_prog.c:69 +msgid "print progress information" +msgstr "" + +#: iconv/iconv_prog.c:74 +msgid "Convert encoding of given files from one encoding to another." +msgstr "" + +#: iconv/iconv_prog.c:78 +msgid "[FILE...]" +msgstr "" + +#: iconv/iconv_prog.c:200 +#, c-format +msgid "cannot open output file" +msgstr "" + +#: iconv/iconv_prog.c:242 +#, c-format +msgid "conversions from `%s' and to `%s' are not supported" +msgstr "" + +#: iconv/iconv_prog.c:247 +#, fuzzy, c-format +msgid "conversion from `%s' is not supported" +msgstr "Ðеподдържана операциÑ" + +#: iconv/iconv_prog.c:254 +#, fuzzy, c-format +msgid "conversion to `%s' is not supported" +msgstr "Ðеподдържана операциÑ" + +#: iconv/iconv_prog.c:258 +#, c-format +msgid "conversion from `%s' to `%s' is not supported" +msgstr "" + +#: iconv/iconv_prog.c:268 +#, c-format +msgid "failed to start conversion processing" +msgstr "" + +#: iconv/iconv_prog.c:362 +#, c-format +msgid "error while closing output file" +msgstr "" + +#: iconv/iconv_prog.c:471 iconv/iconv_prog.c:497 +#, c-format +msgid "conversion stopped due to problem in writing the output" +msgstr "" + +#: iconv/iconv_prog.c:522 +#, c-format +msgid "illegal input sequence at position %ld" +msgstr "" + +#: iconv/iconv_prog.c:530 +#, c-format +msgid "internal error (illegal descriptor)" +msgstr "" + +#: iconv/iconv_prog.c:533 +#, c-format +msgid "unknown iconv() error %d" +msgstr "" + +#: iconv/iconv_prog.c:779 +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 "" + +#: iconv/iconvconfig.c:110 +msgid "Create fastloading iconv module configuration file." +msgstr "" + +#: iconv/iconvconfig.c:114 +msgid "[DIR...]" +msgstr "" + +#: iconv/iconvconfig.c:127 +msgid "Prefix used for all file accesses" +msgstr "" + +#: iconv/iconvconfig.c:128 +msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)" +msgstr "" + +#: iconv/iconvconfig.c:132 +msgid "Do not search standard directories, only those on the command line" +msgstr "" + +#: iconv/iconvconfig.c:301 +#, c-format +msgid "Directory arguments required when using --nostdlib" +msgstr "" + +#: iconv/iconvconfig.c:343 locale/programs/localedef.c:291 +#, c-format +msgid "no output file produced because warnings were issued" +msgstr "" + +#: iconv/iconvconfig.c:429 +#, c-format +msgid "while inserting in search tree" +msgstr "" + +#: iconv/iconvconfig.c:1238 +#, c-format +msgid "cannot generate output file" +msgstr "" + +#: inet/rcmd.c:157 +#, fuzzy +msgid "rcmd: Cannot allocate memory\n" +msgstr "Ðе може да Ñе задели памет" + +#: inet/rcmd.c:172 +msgid "rcmd: socket: All ports in use\n" +msgstr "" + +#: inet/rcmd.c:200 +#, c-format +msgid "connect to address %s: " +msgstr "" + +#: inet/rcmd.c:213 +#, c-format +msgid "Trying %s...\n" +msgstr "" + +#: inet/rcmd.c:249 +#, c-format +msgid "rcmd: write (setting up stderr): %m\n" +msgstr "" + +#: inet/rcmd.c:265 +#, c-format +msgid "rcmd: poll (setting up stderr): %m\n" +msgstr "" + +#: inet/rcmd.c:268 +msgid "poll: protocol failure in circuit setup\n" +msgstr "" + +#: inet/rcmd.c:301 +msgid "socket: protocol failure in circuit setup\n" +msgstr "" + +#: inet/rcmd.c:325 +#, c-format +msgid "rcmd: %s: short read" +msgstr "" + +#: inet/rcmd.c:481 +msgid "lstat failed" +msgstr "" + +#: inet/rcmd.c:488 +msgid "cannot open" +msgstr "" + +#: inet/rcmd.c:490 +msgid "fstat failed" +msgstr "" + +#: inet/rcmd.c:492 +msgid "bad owner" +msgstr "" + +#: inet/rcmd.c:494 +msgid "writeable by other than owner" +msgstr "" + +#: inet/rcmd.c:496 +msgid "hard linked somewhere" +msgstr "" + +#: inet/ruserpass.c:170 inet/ruserpass.c:193 +#, fuzzy +msgid "out of memory" +msgstr "Ðе може да Ñе задели памет" + +#: inet/ruserpass.c:184 +msgid "Error: .netrc file is readable by others." +msgstr "" + +#: 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 "" + +#: libidn/nfkc.c:464 +#, fuzzy +msgid "Character out of range for UTF-8" +msgstr "Ðомер на канал извън диапазона" + +#: locale/programs/charmap-dir.c:58 +#, c-format +msgid "cannot read character map directory `%s'" +msgstr "" + +#: locale/programs/charmap.c:138 +#, c-format +msgid "character map file `%s' not found" +msgstr "" + +#: locale/programs/charmap.c:195 +#, c-format +msgid "default character map file `%s' not found" +msgstr "" + +#: locale/programs/charmap.c:258 +#, c-format +msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n" +msgstr "" + +#: locale/programs/charmap.c:337 +#, c-format +msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n" +msgstr "" + +#: locale/programs/charmap.c:357 locale/programs/charmap.c:374 +#: locale/programs/repertoire.c:175 +#, c-format +msgid "syntax error in prolog: %s" +msgstr "" + +#: locale/programs/charmap.c:358 +msgid "invalid definition" +msgstr "" + +#: locale/programs/charmap.c:375 locale/programs/locfile.c:126 +#: locale/programs/locfile.c:153 locale/programs/repertoire.c:176 +#, fuzzy +msgid "bad argument" +msgstr "Ðеправилен аргумент" + +#: locale/programs/charmap.c:403 +#, c-format +msgid "duplicate definition of <%s>" +msgstr "" + +#: locale/programs/charmap.c:410 +#, c-format +msgid "value for <%s> must be 1 or greater" +msgstr "" + +#: locale/programs/charmap.c:422 +#, c-format +msgid "value of <%s> must be greater or equal than the value of <%s>" +msgstr "" + +#: locale/programs/charmap.c:445 locale/programs/repertoire.c:184 +#, c-format +msgid "argument to <%s> must be a single character" +msgstr "" + +#: locale/programs/charmap.c:471 +msgid "character sets with locking states are not supported" +msgstr "" + +#: locale/programs/charmap.c:498 locale/programs/charmap.c:552 +#: locale/programs/charmap.c:584 locale/programs/charmap.c:678 +#: locale/programs/charmap.c:733 locale/programs/charmap.c:774 +#: locale/programs/charmap.c:815 +#, c-format +msgid "syntax error in %s definition: %s" +msgstr "" + +#: locale/programs/charmap.c:499 locale/programs/charmap.c:679 +#: locale/programs/charmap.c:775 locale/programs/repertoire.c:231 +msgid "no symbolic name given" +msgstr "" + +#: locale/programs/charmap.c:553 +#, fuzzy +msgid "invalid encoding given" +msgstr "Ðеправилен обмен" + +#: locale/programs/charmap.c:562 +msgid "too few bytes in character encoding" +msgstr "" + +#: locale/programs/charmap.c:564 +msgid "too many bytes in character encoding" +msgstr "" + +#: locale/programs/charmap.c:586 locale/programs/charmap.c:734 +#: locale/programs/charmap.c:817 locale/programs/repertoire.c:297 +msgid "no symbolic name given for end of range" +msgstr "" + +#: locale/programs/charmap.c:610 locale/programs/ld-address.c:600 +#: locale/programs/ld-collate.c:2677 locale/programs/ld-collate.c:3828 +#: locale/programs/ld-ctype.c:2232 locale/programs/ld-ctype.c:2984 +#: locale/programs/ld-identification.c:452 +#: locale/programs/ld-measurement.c:238 locale/programs/ld-messages.c:332 +#: locale/programs/ld-monetary.c:943 locale/programs/ld-name.c:307 +#: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:241 +#: locale/programs/ld-telephone.c:313 locale/programs/ld-time.c:1221 +#: locale/programs/repertoire.c:314 +#, c-format +msgid "%1$s: definition does not end with `END %1$s'" +msgstr "" + +#: locale/programs/charmap.c:643 +msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" +msgstr "" + +#: locale/programs/charmap.c:651 locale/programs/charmap.c:714 +#, c-format +msgid "value for %s must be an integer" +msgstr "" + +#: locale/programs/charmap.c:842 +#, c-format +msgid "%s: error in state machine" +msgstr "" + +#: locale/programs/charmap.c:850 locale/programs/ld-address.c:616 +#: locale/programs/ld-collate.c:2674 locale/programs/ld-collate.c:3844 +#: locale/programs/ld-ctype.c:2229 locale/programs/ld-ctype.c:3001 +#: locale/programs/ld-identification.c:468 +#: locale/programs/ld-measurement.c:254 locale/programs/ld-messages.c:348 +#: locale/programs/ld-monetary.c:959 locale/programs/ld-name.c:323 +#: locale/programs/ld-numeric.c:384 locale/programs/ld-paper.c:257 +#: locale/programs/ld-telephone.c:329 locale/programs/ld-time.c:1237 +#: locale/programs/locfile.c:826 locale/programs/repertoire.c:325 +#, c-format +msgid "%s: premature end of file" +msgstr "" + +#: locale/programs/charmap.c:869 locale/programs/charmap.c:880 +#, c-format +msgid "unknown character `%s'" +msgstr "" + +#: locale/programs/charmap.c:888 +#, c-format +msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d" +msgstr "" + +#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:2957 +#: locale/programs/repertoire.c:420 +msgid "invalid names for character range" +msgstr "" + +#: locale/programs/charmap.c:1005 locale/programs/repertoire.c:432 +msgid "hexadecimal range format should use only capital characters" +msgstr "" + +#: locale/programs/charmap.c:1023 locale/programs/repertoire.c:450 +#, c-format +msgid "<%s> and <%s> are invalid names for range" +msgstr "" + +#: locale/programs/charmap.c:1029 locale/programs/repertoire.c:457 +msgid "upper limit in range is smaller than lower limit" +msgstr "" + +#: locale/programs/charmap.c:1087 +msgid "resulting bytes for range not representable." +msgstr "" + +#: locale/programs/ld-address.c:133 locale/programs/ld-collate.c:1536 +#: locale/programs/ld-ctype.c:420 locale/programs/ld-identification.c:133 +#: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97 +#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:94 +#: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91 +#: locale/programs/ld-telephone.c:94 locale/programs/ld-time.c:159 +#, c-format +msgid "No definition for %s category found" +msgstr "" + +#: locale/programs/ld-address.c:144 locale/programs/ld-address.c:182 +#: locale/programs/ld-address.c:200 locale/programs/ld-address.c:229 +#: locale/programs/ld-address.c:301 locale/programs/ld-address.c:320 +#: locale/programs/ld-address.c:333 locale/programs/ld-identification.c:146 +#: locale/programs/ld-measurement.c:105 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:105 +#: locale/programs/ld-name.c:142 locale/programs/ld-numeric.c:112 +#: locale/programs/ld-numeric.c:126 locale/programs/ld-paper.c:102 +#: locale/programs/ld-paper.c:111 locale/programs/ld-telephone.c:105 +#: locale/programs/ld-telephone.c:162 locale/programs/ld-time.c:175 +#: locale/programs/ld-time.c:196 +#, c-format +msgid "%s: field `%s' not defined" +msgstr "" + +#: locale/programs/ld-address.c:156 locale/programs/ld-address.c:208 +#: locale/programs/ld-address.c:238 locale/programs/ld-address.c:276 +#: locale/programs/ld-name.c:117 locale/programs/ld-telephone.c:117 +#, c-format +msgid "%s: field `%s' must not be empty" +msgstr "" + +#: locale/programs/ld-address.c:168 +#, c-format +msgid "%s: invalid escape `%%%c' sequence in field `%s'" +msgstr "" + +#: locale/programs/ld-address.c:219 +#, c-format +msgid "%s: terminology language code `%s' not defined" +msgstr "" + +#: locale/programs/ld-address.c:244 +#, c-format +msgid "%s: field `%s' must not be defined" +msgstr "" + +#: locale/programs/ld-address.c:258 locale/programs/ld-address.c:287 +#, c-format +msgid "%s: language abbreviation `%s' not defined" +msgstr "" + +#: locale/programs/ld-address.c:265 locale/programs/ld-address.c:293 +#: locale/programs/ld-address.c:327 locale/programs/ld-address.c:339 +#, c-format +msgid "%s: `%s' value does not match `%s' value" +msgstr "" + +#: locale/programs/ld-address.c:312 +#, c-format +msgid "%s: numeric country code `%d' not valid" +msgstr "" + +#: locale/programs/ld-address.c:508 locale/programs/ld-address.c:545 +#: locale/programs/ld-address.c:583 locale/programs/ld-ctype.c:2608 +#: locale/programs/ld-identification.c:364 +#: locale/programs/ld-measurement.c:221 locale/programs/ld-messages.c:301 +#: locale/programs/ld-monetary.c:701 locale/programs/ld-monetary.c:736 +#: locale/programs/ld-monetary.c:777 locale/programs/ld-name.c:280 +#: locale/programs/ld-numeric.c:263 locale/programs/ld-paper.c:224 +#: locale/programs/ld-telephone.c:288 locale/programs/ld-time.c:1126 +#: locale/programs/ld-time.c:1168 +#, c-format +msgid "%s: field `%s' declared more than once" +msgstr "" + +#: locale/programs/ld-address.c:512 locale/programs/ld-address.c:550 +#: locale/programs/ld-identification.c:368 locale/programs/ld-messages.c:311 +#: locale/programs/ld-monetary.c:705 locale/programs/ld-monetary.c:740 +#: locale/programs/ld-name.c:284 locale/programs/ld-numeric.c:267 +#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:1020 +#: locale/programs/ld-time.c:1089 locale/programs/ld-time.c:1131 +#, c-format +msgid "%s: unknown character in field `%s'" +msgstr "" + +#: locale/programs/ld-address.c:597 locale/programs/ld-collate.c:3826 +#: locale/programs/ld-ctype.c:2981 locale/programs/ld-identification.c:449 +#: locale/programs/ld-measurement.c:235 locale/programs/ld-messages.c:330 +#: locale/programs/ld-monetary.c:941 locale/programs/ld-name.c:305 +#: locale/programs/ld-numeric.c:366 locale/programs/ld-paper.c:239 +#: locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1219 +#, c-format +msgid "%s: incomplete `END' line" +msgstr "" + +#: locale/programs/ld-address.c:607 locale/programs/ld-collate.c:522 +#: locale/programs/ld-collate.c:574 locale/programs/ld-collate.c:870 +#: locale/programs/ld-collate.c:883 locale/programs/ld-collate.c:2664 +#: locale/programs/ld-collate.c:3835 locale/programs/ld-ctype.c:1960 +#: locale/programs/ld-ctype.c:2219 locale/programs/ld-ctype.c:2806 +#: locale/programs/ld-ctype.c:2992 locale/programs/ld-identification.c:459 +#: locale/programs/ld-measurement.c:245 locale/programs/ld-messages.c:339 +#: locale/programs/ld-monetary.c:950 locale/programs/ld-name.c:314 +#: locale/programs/ld-numeric.c:375 locale/programs/ld-paper.c:248 +#: locale/programs/ld-telephone.c:320 locale/programs/ld-time.c:1228 +#, c-format +msgid "%s: syntax error" +msgstr "" + +#: locale/programs/ld-collate.c:397 +#, c-format +msgid "`%.*s' already defined in charmap" +msgstr "" + +#: locale/programs/ld-collate.c:406 +#, c-format +msgid "`%.*s' already defined in repertoire" +msgstr "" + +#: locale/programs/ld-collate.c:413 +#, c-format +msgid "`%.*s' already defined as collating symbol" +msgstr "" + +#: locale/programs/ld-collate.c:420 +#, c-format +msgid "`%.*s' already defined as collating element" +msgstr "" + +#: locale/programs/ld-collate.c:451 locale/programs/ld-collate.c:477 +#, c-format +msgid "%s: `forward' and `backward' are mutually excluding each other" +msgstr "" + +#: locale/programs/ld-collate.c:461 locale/programs/ld-collate.c:487 +#: locale/programs/ld-collate.c:503 +#, c-format +msgid "%s: `%s' mentioned more than once in definition of weight %d" +msgstr "" + +#: locale/programs/ld-collate.c:559 +#, c-format +msgid "%s: too many rules; first entry only had %d" +msgstr "" + +#: locale/programs/ld-collate.c:595 +#, c-format +msgid "%s: not enough sorting rules" +msgstr "" + +#: locale/programs/ld-collate.c:760 +#, c-format +msgid "%s: empty weight string not allowed" +msgstr "" + +#: locale/programs/ld-collate.c:855 +#, c-format +msgid "%s: weights must use the same ellipsis symbol as the name" +msgstr "" + +#: locale/programs/ld-collate.c:911 +#, fuzzy, c-format +msgid "%s: too many values" +msgstr "Твърде много потребители" + +#: locale/programs/ld-collate.c:1031 locale/programs/ld-collate.c:1206 +#, c-format +msgid "order for `%.*s' already defined at %s:%Zu" +msgstr "" + +#: locale/programs/ld-collate.c:1081 +#, c-format +msgid "%s: the start and the end symbol of a range must stand for characters" +msgstr "" + +#: locale/programs/ld-collate.c:1108 +#, c-format +msgid "%s: byte sequences of first and last character must have the same length" +msgstr "" + +#: locale/programs/ld-collate.c:1150 +#, c-format +msgid "%s: byte sequence of first character of range is not lower than that of the last character" +msgstr "" + +#: locale/programs/ld-collate.c:1275 +#, c-format +msgid "%s: symbolic range ellipsis must not directly follow `order_start'" +msgstr "" + +#: locale/programs/ld-collate.c:1279 +#, c-format +msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'" +msgstr "" + +#: locale/programs/ld-collate.c:1299 locale/programs/ld-ctype.c:1477 +#, c-format +msgid "`%s' and `%.*s' are not valid names for symbolic range" +msgstr "" + +#: locale/programs/ld-collate.c:1349 locale/programs/ld-collate.c:3763 +#, c-format +msgid "%s: order for `%.*s' already defined at %s:%Zu" +msgstr "" + +#: locale/programs/ld-collate.c:1358 +#, c-format +msgid "%s: `%s' must be a character" +msgstr "" + +#: locale/programs/ld-collate.c:1552 +#, c-format +msgid "%s: `position' must be used for a specific level in all sections or none" +msgstr "" + +#: locale/programs/ld-collate.c:1577 +#, c-format +msgid "symbol `%s' not defined" +msgstr "" + +#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759 +#, c-format +msgid "symbol `%s' has the same encoding as" +msgstr "" + +#: locale/programs/ld-collate.c:1657 locale/programs/ld-collate.c:1763 +#, c-format +msgid "symbol `%s'" +msgstr "" + +#: locale/programs/ld-collate.c:1805 +#, c-format +msgid "no definition of `UNDEFINED'" +msgstr "" + +#: locale/programs/ld-collate.c:1834 +#, c-format +msgid "too many errors; giving up" +msgstr "" + +#: locale/programs/ld-collate.c:2762 +#, c-format +msgid "%s: duplicate definition of `%s'" +msgstr "" + +#: locale/programs/ld-collate.c:2798 +#, c-format +msgid "%s: duplicate declaration of section `%s'" +msgstr "" + +#: locale/programs/ld-collate.c:2937 +#, c-format +msgid "%s: unknown character in collating symbol name" +msgstr "" + +#: locale/programs/ld-collate.c:3069 +#, c-format +msgid "%s: unknown character in equivalent definition name" +msgstr "" + +#: locale/programs/ld-collate.c:3082 +#, c-format +msgid "%s: unknown character in equivalent definition value" +msgstr "" + +#: locale/programs/ld-collate.c:3092 +#, c-format +msgid "%s: unknown symbol `%s' in equivalent definition" +msgstr "" + +#: locale/programs/ld-collate.c:3101 +msgid "error while adding equivalent collating symbol" +msgstr "" + +#: locale/programs/ld-collate.c:3131 +#, c-format +msgid "duplicate definition of script `%s'" +msgstr "" + +#: locale/programs/ld-collate.c:3179 +#, c-format +msgid "%s: unknown section name `%.*s'" +msgstr "" + +#: locale/programs/ld-collate.c:3208 +#, c-format +msgid "%s: multiple order definitions for section `%s'" +msgstr "" + +#: locale/programs/ld-collate.c:3233 +#, c-format +msgid "%s: invalid number of sorting rules" +msgstr "" + +#: locale/programs/ld-collate.c:3260 +#, c-format +msgid "%s: multiple order definitions for unnamed section" +msgstr "" + +#: locale/programs/ld-collate.c:3314 locale/programs/ld-collate.c:3442 +#: locale/programs/ld-collate.c:3804 +#, c-format +msgid "%s: missing `order_end' keyword" +msgstr "" + +#: locale/programs/ld-collate.c:3375 +#, c-format +msgid "%s: order for collating symbol %.*s not yet defined" +msgstr "" + +#: locale/programs/ld-collate.c:3393 +#, c-format +msgid "%s: order for collating element %.*s not yet defined" +msgstr "" + +#: locale/programs/ld-collate.c:3404 +#, c-format +msgid "%s: cannot reorder after %.*s: symbol not known" +msgstr "" + +#: locale/programs/ld-collate.c:3456 locale/programs/ld-collate.c:3816 +#, c-format +msgid "%s: missing `reorder-end' keyword" +msgstr "" + +#: locale/programs/ld-collate.c:3490 locale/programs/ld-collate.c:3688 +#, c-format +msgid "%s: section `%.*s' not known" +msgstr "" + +#: locale/programs/ld-collate.c:3555 +#, c-format +msgid "%s: bad symbol <%.*s>" +msgstr "" + +#: locale/programs/ld-collate.c:3751 +#, c-format +msgid "%s: cannot have `%s' as end of ellipsis range" +msgstr "" + +#: locale/programs/ld-collate.c:3800 +#, c-format +msgid "%s: empty category description not allowed" +msgstr "" + +#: locale/programs/ld-collate.c:3819 +#, c-format +msgid "%s: missing `reorder-sections-end' keyword" +msgstr "" + +#: locale/programs/ld-ctype.c:439 +#, c-format +msgid "No character set name specified in charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:468 +#, c-format +msgid "character L'\\u%0*x' in class `%s' must be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:483 +#, c-format +msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:497 locale/programs/ld-ctype.c:555 +#, c-format +msgid "internal error in %s, line %u" +msgstr "" + +#: locale/programs/ld-ctype.c:526 +#, c-format +msgid "character '%s' in class `%s' must be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:542 +#, c-format +msgid "character '%s' in class `%s' must not be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:572 locale/programs/ld-ctype.c:610 +#, c-format +msgid "<SP> character not in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:584 locale/programs/ld-ctype.c:621 +#, c-format +msgid "<SP> character must not be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:599 +#, c-format +msgid "character <SP> not defined in character map" +msgstr "" + +#: locale/programs/ld-ctype.c:714 +#, c-format +msgid "`digit' category has not entries in groups of ten" +msgstr "" + +#: locale/programs/ld-ctype.c:763 +#, c-format +msgid "no input digits defined and none of the standard names in the charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:828 +#, c-format +msgid "not all characters used in `outdigit' are available in the charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:845 +#, c-format +msgid "not all characters used in `outdigit' are available in the repertoire" +msgstr "" + +#: locale/programs/ld-ctype.c:1245 +#, c-format +msgid "character class `%s' already defined" +msgstr "" + +#: locale/programs/ld-ctype.c:1251 +#, c-format +msgid "implementation limit: no more than %Zd character classes allowed" +msgstr "" + +#: locale/programs/ld-ctype.c:1277 +#, c-format +msgid "character map `%s' already defined" +msgstr "" + +#: locale/programs/ld-ctype.c:1283 +#, c-format +msgid "implementation limit: no more than %d character maps allowed" +msgstr "" + +#: locale/programs/ld-ctype.c:1548 locale/programs/ld-ctype.c:1673 +#: locale/programs/ld-ctype.c:1779 locale/programs/ld-ctype.c:2471 +#: locale/programs/ld-ctype.c:3467 +#, c-format +msgid "%s: field `%s' does not contain exactly ten entries" +msgstr "" + +#: locale/programs/ld-ctype.c:1576 locale/programs/ld-ctype.c:2150 +#, c-format +msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>" +msgstr "" + +#: locale/programs/ld-ctype.c:1703 +msgid "start and end character sequence of range must have the same length" +msgstr "" + +#: locale/programs/ld-ctype.c:1710 +msgid "to-value character sequence is smaller than from-value sequence" +msgstr "" + +#: locale/programs/ld-ctype.c:2070 locale/programs/ld-ctype.c:2121 +msgid "premature end of `translit_ignore' definition" +msgstr "" + +# TODO +#: locale/programs/ld-ctype.c:2076 locale/programs/ld-ctype.c:2127 +#: locale/programs/ld-ctype.c:2169 +#, fuzzy +msgid "syntax error" +msgstr "Грешка при srmount" + +#: locale/programs/ld-ctype.c:2303 +#, c-format +msgid "%s: syntax error in definition of new character class" +msgstr "" + +#: locale/programs/ld-ctype.c:2318 +#, c-format +msgid "%s: syntax error in definition of new character map" +msgstr "" + +#: locale/programs/ld-ctype.c:2493 +msgid "ellipsis range must be marked by two operands of same type" +msgstr "" + +#: locale/programs/ld-ctype.c:2502 +msgid "with symbolic name range values the absolute ellipsis `...' must not be used" +msgstr "" + +#: locale/programs/ld-ctype.c:2517 +msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'" +msgstr "" + +#: locale/programs/ld-ctype.c:2531 +msgid "with character code range values one must use the absolute ellipsis `...'" +msgstr "" + +#: locale/programs/ld-ctype.c:2682 +#, c-format +msgid "duplicated definition for mapping `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:2768 locale/programs/ld-ctype.c:2912 +#, c-format +msgid "%s: `translit_start' section does not end with `translit_end'" +msgstr "" + +#: locale/programs/ld-ctype.c:2863 +#, c-format +msgid "%s: duplicate `default_missing' definition" +msgstr "" + +#: locale/programs/ld-ctype.c:2868 +msgid "previous definition was here" +msgstr "" + +#: locale/programs/ld-ctype.c:2890 +#, c-format +msgid "%s: no representable `default_missing' definition found" +msgstr "" + +#: locale/programs/ld-ctype.c:3043 locale/programs/ld-ctype.c:3127 +#: locale/programs/ld-ctype.c:3147 locale/programs/ld-ctype.c:3168 +#: locale/programs/ld-ctype.c:3189 locale/programs/ld-ctype.c:3210 +#: locale/programs/ld-ctype.c:3231 locale/programs/ld-ctype.c:3271 +#: locale/programs/ld-ctype.c:3292 locale/programs/ld-ctype.c:3359 +#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426 +#, c-format +msgid "%s: character `%s' not defined while needed as default value" +msgstr "" + +#: locale/programs/ld-ctype.c:3048 locale/programs/ld-ctype.c:3132 +#: locale/programs/ld-ctype.c:3152 locale/programs/ld-ctype.c:3173 +#: locale/programs/ld-ctype.c:3194 locale/programs/ld-ctype.c:3215 +#: locale/programs/ld-ctype.c:3236 locale/programs/ld-ctype.c:3276 +#: locale/programs/ld-ctype.c:3297 locale/programs/ld-ctype.c:3364 +#, c-format +msgid "%s: character `%s' in charmap not representable with one byte" +msgstr "" + +#: locale/programs/ld-ctype.c:3408 locale/programs/ld-ctype.c:3433 +#, c-format +msgid "%s: character `%s' needed as default value not representable with one byte" +msgstr "" + +#: locale/programs/ld-ctype.c:3489 +#, c-format +msgid "no output digits defined and none of the standard names in the charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:3780 +#, c-format +msgid "%s: transliteration data from locale `%s' not available" +msgstr "" + +#: locale/programs/ld-ctype.c:3881 +#, c-format +msgid "%s: table for class \"%s\": %lu bytes\n" +msgstr "" + +#: locale/programs/ld-ctype.c:3950 +#, c-format +msgid "%s: table for map \"%s\": %lu bytes\n" +msgstr "" + +#: locale/programs/ld-ctype.c:4083 +#, c-format +msgid "%s: table for width: %lu bytes\n" +msgstr "" + +#: locale/programs/ld-identification.c:170 +#, c-format +msgid "%s: no identification for category `%s'" +msgstr "" + +#: locale/programs/ld-identification.c:435 +#, c-format +msgid "%s: duplicate category version definition" +msgstr "" + +#: locale/programs/ld-measurement.c:113 +#, c-format +msgid "%s: invalid value for field `%s'" +msgstr "" + +#: locale/programs/ld-messages.c:114 locale/programs/ld-messages.c:148 +#, c-format +msgid "%s: field `%s' undefined" +msgstr "" + +#: locale/programs/ld-messages.c:121 locale/programs/ld-messages.c:155 +#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:118 +#, c-format +msgid "%s: value for field `%s' must not be an empty string" +msgstr "" + +#: locale/programs/ld-messages.c:137 locale/programs/ld-messages.c:171 +#, c-format +msgid "%s: no correct regular expression for field `%s': %s" +msgstr "" + +#: locale/programs/ld-monetary.c:224 +#, c-format +msgid "%s: value of field `int_curr_symbol' has wrong length" +msgstr "" + +#: 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 "" + +#: locale/programs/ld-monetary.c:285 locale/programs/ld-monetary.c:315 +#, c-format +msgid "%s: value for field `%s' must be in range %d...%d" +msgstr "" + +#: locale/programs/ld-monetary.c:747 locale/programs/ld-numeric.c:274 +#, c-format +msgid "%s: value for field `%s' must be a single character" +msgstr "" + +#: locale/programs/ld-monetary.c:844 locale/programs/ld-numeric.c:318 +#, c-format +msgid "%s: `-1' must be last entry in `%s' field" +msgstr "" + +#: locale/programs/ld-monetary.c:866 locale/programs/ld-numeric.c:335 +#, c-format +msgid "%s: values for field `%s' must be smaller than 127" +msgstr "" + +#: locale/programs/ld-monetary.c:909 +msgid "conversion rate value cannot be zero" +msgstr "" + +#: locale/programs/ld-name.c:129 locale/programs/ld-telephone.c:126 +#: locale/programs/ld-telephone.c:149 +#, c-format +msgid "%s: invalid escape sequence in field `%s'" +msgstr "" + +#: locale/programs/ld-time.c:247 +#, c-format +msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'" +msgstr "" + +#: locale/programs/ld-time.c:258 +#, c-format +msgid "%s: direction flag in string %Zd in `era' field is not a single character" +msgstr "" + +#: locale/programs/ld-time.c:271 +#, c-format +msgid "%s: invalid number for offset in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:279 +#, c-format +msgid "%s: garbage at end of offset value in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:330 +#, c-format +msgid "%s: invalid starting date in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:339 +#, c-format +msgid "%s: garbage at end of starting date in string %Zd in `era' field " +msgstr "" + +#: locale/programs/ld-time.c:358 +#, c-format +msgid "%s: starting date is invalid in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:407 +#, c-format +msgid "%s: invalid stopping date in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:416 +#, c-format +msgid "%s: garbage at end of stopping date in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:435 +#, c-format +msgid "%s: stopping date is invalid in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:444 +#, c-format +msgid "%s: missing era name in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:456 +#, c-format +msgid "%s: missing era format in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:497 +#, c-format +msgid "%s: third operand for value of field `%s' must not be larger than %d" +msgstr "" + +#: locale/programs/ld-time.c:505 locale/programs/ld-time.c:513 +#: locale/programs/ld-time.c:521 +#, c-format +msgid "%s: values for field `%s' must not be larger than %d" +msgstr "" + +#: locale/programs/ld-time.c:1004 +#, c-format +msgid "%s: too few values for field `%s'" +msgstr "" + +#: locale/programs/ld-time.c:1049 +msgid "extra trailing semicolon" +msgstr "" + +#: locale/programs/ld-time.c:1052 +#, c-format +msgid "%s: too many values for field `%s'" +msgstr "" + +#: locale/programs/linereader.c:130 +msgid "trailing garbage at end of line" +msgstr "" + +#: locale/programs/linereader.c:298 +msgid "garbage at end of number" +msgstr "" + +#: locale/programs/linereader.c:410 +msgid "garbage at end of character code specification" +msgstr "" + +#: locale/programs/linereader.c:496 +msgid "unterminated symbolic name" +msgstr "" + +#: locale/programs/linereader.c:623 +msgid "illegal escape sequence at end of string" +msgstr "" + +#: locale/programs/linereader.c:627 locale/programs/linereader.c:855 +msgid "unterminated string" +msgstr "" + +#: locale/programs/linereader.c:669 +msgid "non-symbolic character value should not be used" +msgstr "" + +#: locale/programs/linereader.c:816 +#, c-format +msgid "symbol `%.*s' not in charmap" +msgstr "" + +#: locale/programs/linereader.c:837 +#, c-format +msgid "symbol `%.*s' not in repertoire map" +msgstr "" + +#: locale/programs/locale.c:74 +msgid "System information:" +msgstr "" + +#: locale/programs/locale.c:76 +msgid "Write names of available locales" +msgstr "" + +#: locale/programs/locale.c:78 +msgid "Write names of available charmaps" +msgstr "" + +#: locale/programs/locale.c:79 +msgid "Modify output format:" +msgstr "" + +#: locale/programs/locale.c:80 +msgid "Write names of selected categories" +msgstr "" + +#: locale/programs/locale.c:81 +msgid "Write names of selected keywords" +msgstr "" + +#: locale/programs/locale.c:82 +msgid "Print more information" +msgstr "" + +#: locale/programs/locale.c:87 +msgid "" +"Get locale-specific information.\vFor bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" + +#: locale/programs/locale.c:92 +msgid "" +"NAME\n" +"[-a|-m]" +msgstr "" + +#: locale/programs/locale.c:193 +#, c-format +msgid "Cannot set LC_CTYPE to default locale" +msgstr "" + +#: locale/programs/locale.c:195 +#, c-format +msgid "Cannot set LC_MESSAGES to default locale" +msgstr "" + +#: locale/programs/locale.c:208 +#, c-format +msgid "Cannot set LC_COLLATE to default locale" +msgstr "" + +#: locale/programs/locale.c:224 +#, c-format +msgid "Cannot set LC_ALL to default locale" +msgstr "" + +#: locale/programs/locale.c:500 +#, c-format +msgid "while preparing output" +msgstr "" + +#: locale/programs/localedef.c:120 +msgid "Input Files:" +msgstr "" + +#: locale/programs/localedef.c:122 +msgid "Symbolic character names defined in FILE" +msgstr "" + +#: locale/programs/localedef.c:123 +msgid "Source definitions are found in FILE" +msgstr "" + +#: locale/programs/localedef.c:125 +msgid "FILE contains mapping from symbolic names to UCS4 values" +msgstr "" + +#: locale/programs/localedef.c:129 +msgid "Create output even if warning messages were issued" +msgstr "" + +#: locale/programs/localedef.c:130 +msgid "Create old-style tables" +msgstr "" + +#: locale/programs/localedef.c:131 +msgid "Optional output file prefix" +msgstr "" + +#: locale/programs/localedef.c:132 +msgid "Be strictly POSIX conform" +msgstr "" + +#: locale/programs/localedef.c:134 +msgid "Suppress warnings and information messages" +msgstr "" + +#: locale/programs/localedef.c:135 +msgid "Print more messages" +msgstr "" + +#: locale/programs/localedef.c:136 +msgid "Archive control:" +msgstr "" + +#: locale/programs/localedef.c:138 +msgid "Don't add new data to archive" +msgstr "" + +#: locale/programs/localedef.c:140 +msgid "Add locales named by parameters to archive" +msgstr "" + +#: locale/programs/localedef.c:141 +msgid "Replace existing archive content" +msgstr "" + +#: locale/programs/localedef.c:143 +msgid "Remove locales named by parameters from archive" +msgstr "" + +#: locale/programs/localedef.c:144 +msgid "List content of archive" +msgstr "" + +#: locale/programs/localedef.c:146 +msgid "locale.alias file to consult when making archive" +msgstr "" + +#: locale/programs/localedef.c:151 +msgid "Compile locale specification" +msgstr "" + +#: locale/programs/localedef.c:154 +msgid "" +"NAME\n" +"[--add-to-archive|--delete-from-archive] FILE...\n" +"--list-archive [FILE]" +msgstr "" + +#: locale/programs/localedef.c:232 +#, c-format +msgid "cannot create directory for output files" +msgstr "" + +#: locale/programs/localedef.c:243 +#, c-format +msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" +msgstr "" + +#: locale/programs/localedef.c:257 locale/programs/localedef.c:273 +#: locale/programs/localedef.c:599 locale/programs/localedef.c:619 +#, c-format +msgid "cannot open locale definition file `%s'" +msgstr "" + +#: locale/programs/localedef.c:285 +#, c-format +msgid "cannot write output files to `%s'" +msgstr "" + +#: locale/programs/localedef.c:366 +#, 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 +#, c-format +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 "" + +#: locale/programs/locarchive.c:88 locale/programs/locarchive.c:261 +#, fuzzy, c-format +msgid "cannot create temporary file" +msgstr "Ðе може да Ñе задели памет" + +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:307 +#, c-format +msgid "cannot initialize archive file" +msgstr "" + +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:314 +#, c-format +msgid "cannot resize archive file" +msgstr "" + +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:323 +#: locale/programs/locarchive.c:527 +#, c-format +msgid "cannot map archive header" +msgstr "" + +#: locale/programs/locarchive.c:156 +#, c-format +msgid "failed to create new locale archive" +msgstr "" + +#: locale/programs/locarchive.c:168 +#, c-format +msgid "cannot change mode of new locale archive" +msgstr "" + +#: locale/programs/locarchive.c:255 +#, c-format +msgid "cannot map locale archive file" +msgstr "" + +#: locale/programs/locarchive.c:331 +#, c-format +msgid "cannot lock new archive" +msgstr "" + +#: locale/programs/locarchive.c:396 +#, c-format +msgid "cannot extend locale archive file" +msgstr "" + +#: locale/programs/locarchive.c:405 +#, c-format +msgid "cannot change mode of resized locale archive" +msgstr "" + +#: locale/programs/locarchive.c:413 +#, c-format +msgid "cannot rename new archive" +msgstr "" + +#: locale/programs/locarchive.c:466 +#, c-format +msgid "cannot open locale archive \"%s\"" +msgstr "" + +#: locale/programs/locarchive.c:471 +#, c-format +msgid "cannot stat locale archive \"%s\"" +msgstr "" + +#: locale/programs/locarchive.c:490 +#, c-format +msgid "cannot lock locale archive \"%s\"" +msgstr "" + +#: locale/programs/locarchive.c:513 +#, c-format +msgid "cannot read archive header" +msgstr "" + +#: locale/programs/locarchive.c:573 +#, c-format +msgid "locale '%s' already exists" +msgstr "" + +#: locale/programs/locarchive.c:804 locale/programs/locarchive.c:819 +#: locale/programs/locarchive.c:831 locale/programs/locarchive.c:843 +#: locale/programs/locfile.c:344 +#, c-format +msgid "cannot add to locale archive" +msgstr "" + +#: locale/programs/locarchive.c:998 +#, c-format +msgid "locale alias file `%s' not found" +msgstr "" + +#: locale/programs/locarchive.c:1142 +#, c-format +msgid "Adding %s\n" +msgstr "" + +#: locale/programs/locarchive.c:1148 +#, c-format +msgid "stat of \"%s\" failed: %s: ignored" +msgstr "" + +#: locale/programs/locarchive.c:1154 +#, c-format +msgid "\"%s\" is no directory; ignored" +msgstr "" + +#: locale/programs/locarchive.c:1161 +#, c-format +msgid "cannot open directory \"%s\": %s: ignored" +msgstr "" + +#: locale/programs/locarchive.c:1233 +#, c-format +msgid "incomplete set of locale files in \"%s\"" +msgstr "" + +#: locale/programs/locarchive.c:1297 +#, c-format +msgid "cannot read all files in \"%s\": ignored" +msgstr "" + +#: locale/programs/locarchive.c:1367 +#, c-format +msgid "locale \"%s\" not in archive" +msgstr "" + +#: locale/programs/locfile.c:132 +#, c-format +msgid "argument to `%s' must be a single character" +msgstr "" + +#: locale/programs/locfile.c:252 +msgid "syntax error: not inside a locale definition section" +msgstr "" + +#: locale/programs/locfile.c:626 +#, c-format +msgid "cannot open output file `%s' for category `%s'" +msgstr "" + +#: locale/programs/locfile.c:650 +#, c-format +msgid "failure while writing data for category `%s'" +msgstr "" + +#: locale/programs/locfile.c:746 +#, c-format +msgid "cannot create output file `%s' for category `%s'" +msgstr "" + +#: locale/programs/locfile.c:782 +msgid "expect string argument for `copy'" +msgstr "" + +#: locale/programs/locfile.c:786 +msgid "locale name should consist only of portable characters" +msgstr "" + +#: locale/programs/locfile.c:805 +msgid "no other keyword shall be specified when `copy' is used" +msgstr "" + +#: locale/programs/locfile.c:819 +#, c-format +msgid "`%1$s' definition does not end with `END %1$s'" +msgstr "" + +#: 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 "" + +#: locale/programs/repertoire.c:332 +#, c-format +msgid "cannot save new repertoire map" +msgstr "" + +#: locale/programs/repertoire.c:343 +#, c-format +msgid "repertoire map file `%s' not found" +msgstr "" + +#: login/programs/pt_chown.c:74 +#, c-format +msgid "Set the owner, group and access permission of the slave pseudo terminal corresponding to the master pseudo terminal passed on file descriptor `%d'. This is the helper program for the `grantpt' function. It is not intended to be run directly from the command line.\n" +msgstr "" + +#: login/programs/pt_chown.c:84 +#, c-format +msgid "" +"The owner is set to the current user, the group is set to `%s', and the access permission is set to `%o'.\n" +"\n" +"%s" +msgstr "" + +#: login/programs/pt_chown.c:161 +#, fuzzy, c-format +msgid "too many arguments" +msgstr "Твърде много потребители" + +#: login/programs/pt_chown.c:169 +#, c-format +msgid "needs to be installed setuid `root'" +msgstr "" + +#: malloc/mcheck.c:330 +msgid "memory is consistent, library is buggy\n" +msgstr "" + +#: malloc/mcheck.c:333 +msgid "memory clobbered before allocated block\n" +msgstr "" + +#: malloc/mcheck.c:336 +msgid "memory clobbered past end of allocated block\n" +msgstr "" + +#: malloc/mcheck.c:339 +msgid "block freed twice\n" +msgstr "" + +#: malloc/mcheck.c:342 +msgid "bogus mcheck_status, library is buggy\n" +msgstr "" + +#: malloc/memusage.sh:27 +msgid "Try \\`memusage --help' for more information." +msgstr "" + +#: malloc/memusage.sh:33 +msgid "memusage: option \\`$1' requires an argument" +msgstr "" + +#: malloc/memusage.sh:39 +msgid "" +"Usage: memusage [OPTION]... PROGRAM [PROGRAMOPTION]...\n" +"Profile memory usage of PROGRAM.\n" +"\n" +" -n,--progname=NAME Name of the program file to profile\n" +" -p,--png=FILE Generate PNG graphic and store it in FILE\n" +" -d,--data=FILE Generate binary data file and store it in FILE\n" +" -u,--unbuffered Don't buffer output\n" +" -b,--buffer=SIZE Collect SIZE entries before writing them out\n" +" --no-timer Don't collect additional information through timer\n" +" -m,--mmap Also trace mmap & friends\n" +"\n" +" -?,--help Print this help and exit\n" +" --usage Give a short usage message\n" +" -V,--version Print version information and exit\n" +"\n" +" The following options only apply when generating graphical output:\n" +" -t,--time-based Make graph linear in time\n" +" -T,--total Also draw graph of total memory use\n" +" --title=STRING Use STRING as title of the graph\n" +" -x,--x-size=SIZE Make graphic SIZE pixels wide\n" +" -y,--y-size=SIZE Make graphic SIZE pixels high\n" +"\n" +"Mandatory arguments to long options are also mandatory for any corresponding\n" +"short options.\n" +"\n" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>." +msgstr "" + +#: malloc/memusage.sh:99 +msgid "" +"Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]\n" +" [--buffer=SIZE] [--no-timer] [--time-based] [--total]\n" +" [--title=STRING] [--x-size=SIZE] [--y-size=SIZE]\n" +" PROGRAM [PROGRAMOPTION]..." +msgstr "" + +#: malloc/memusage.sh:191 +msgid "memusage: option \\`${1##*=}' is ambiguous" +msgstr "" + +#: malloc/memusage.sh:200 +msgid "memusage: unrecognized option \\`$1'" +msgstr "" + +#: malloc/memusage.sh:213 +msgid "No program name given" +msgstr "" + +#: malloc/memusagestat.c:54 +#, fuzzy +msgid "Name output file" +msgstr "Именован типов файл е" + +#: malloc/memusagestat.c:55 +msgid "Title string used in output graphic" +msgstr "" + +#: malloc/memusagestat.c:56 +msgid "Generate output linear to time (default is linear to number of function calls)" +msgstr "" + +#: malloc/memusagestat.c:58 +msgid "Also draw graph for total memory consumption" +msgstr "" + +#: malloc/memusagestat.c:59 +msgid "Make output graphic VALUE pixels wide" +msgstr "" + +#: malloc/memusagestat.c:60 +msgid "Make output graphic VALUE pixels high" +msgstr "" + +#: malloc/memusagestat.c:65 +msgid "Generate graphic from memory profiling data" +msgstr "" + +#: malloc/memusagestat.c:68 +msgid "DATAFILE [OUTFILE]" +msgstr "" + +#: misc/error.c:118 timezone/zic.c:417 +msgid "Unknown system error" +msgstr "" + +#: nis/nis_callback.c:189 +#, fuzzy +msgid "unable to free arguments" +msgstr "Ðеправилен аргумент" + +#: nis/nis_error.h:1 nis/ypclnt.c:822 nis/ypclnt.c:910 posix/regcomp.c:132 +#: sysdeps/gnu/errlist.c:20 +msgid "Success" +msgstr "УÑпешно" + +#: nis/nis_error.h:2 +msgid "Probable success" +msgstr "" + +#: nis/nis_error.h:3 +#, fuzzy +msgid "Not found" +msgstr "Ðе е открит ноÑител" + +#: nis/nis_error.h:4 +msgid "Probably not found" +msgstr "" + +#: nis/nis_error.h:5 +#, fuzzy +msgid "Cache expired" +msgstr "Изтекъл таймер" + +# TODO +#: nis/nis_error.h:6 +#, fuzzy +msgid "NIS+ servers unreachable" +msgstr "Мрежата е недоÑтъпна" + +#: nis/nis_error.h:7 +msgid "Unknown object" +msgstr "" + +#: nis/nis_error.h:8 +msgid "Server busy, try again" +msgstr "" + +# TODO +#: nis/nis_error.h:9 +#, fuzzy +msgid "Generic system error" +msgstr "Грешка при оÑведомÑване" + +#: nis/nis_error.h:10 +msgid "First/next chain broken" +msgstr "" + +#. TRANS Permission denied; the file permissions do not allow the attempted operation. +#: nis/nis_error.h:11 nis/ypclnt.c:867 sysdeps/gnu/errlist.c:157 +msgid "Permission denied" +msgstr "Отказан доÑтъп" + +#: nis/nis_error.h:12 +msgid "Not owner" +msgstr "" + +#: nis/nis_error.h:13 +msgid "Name not served by this server" +msgstr "" + +#: nis/nis_error.h:14 +msgid "Server out of memory" +msgstr "" + +#: nis/nis_error.h:15 +msgid "Object with same name exists" +msgstr "" + +#: nis/nis_error.h:16 +msgid "Not master server for this domain" +msgstr "" + +#: nis/nis_error.h:17 +msgid "Invalid object for operation" +msgstr "" + +#: nis/nis_error.h:18 +msgid "Malformed name, or illegal name" +msgstr "" + +#: nis/nis_error.h:19 +msgid "Unable to create callback" +msgstr "" + +#: nis/nis_error.h:20 +msgid "Results sent to callback proc" +msgstr "" + +#: nis/nis_error.h:21 +msgid "Not found, no such name" +msgstr "" + +#: nis/nis_error.h:22 +msgid "Name/entry isn't unique" +msgstr "" + +#: nis/nis_error.h:23 +msgid "Modification failed" +msgstr "" + +#: nis/nis_error.h:24 +msgid "Database for table does not exist" +msgstr "" + +#: nis/nis_error.h:25 +msgid "Entry/table type mismatch" +msgstr "" + +#: nis/nis_error.h:26 +msgid "Link points to illegal name" +msgstr "" + +#: nis/nis_error.h:27 +msgid "Partial success" +msgstr "" + +#: nis/nis_error.h:28 +#, fuzzy +msgid "Too many attributes" +msgstr "Твърде много потребители" + +#: nis/nis_error.h:29 +msgid "Error in RPC subsystem" +msgstr "" + +#: nis/nis_error.h:30 +msgid "Missing or malformed attribute" +msgstr "" + +# TODO +#: nis/nis_error.h:31 +#, fuzzy +msgid "Named object is not searchable" +msgstr "Мрежата е недоÑтъпна" + +#: nis/nis_error.h:32 +msgid "Error while talking to callback proc" +msgstr "" + +#: nis/nis_error.h:33 +msgid "Non NIS+ namespace encountered" +msgstr "" + +#: nis/nis_error.h:34 +msgid "Illegal object type for operation" +msgstr "" + +#: nis/nis_error.h:35 +msgid "Passed object is not the same object on server" +msgstr "" + +#: nis/nis_error.h:36 +#, fuzzy +msgid "Modify operation failed" +msgstr "Отменена операциÑ" + +#: nis/nis_error.h:37 +msgid "Query illegal for named table" +msgstr "" + +#: nis/nis_error.h:38 +msgid "Attempt to remove a non-empty table" +msgstr "" + +#: nis/nis_error.h:39 +msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?" +msgstr "" + +#: nis/nis_error.h:40 +#, fuzzy +msgid "Full resync required for directory" +msgstr "ÐÑма такъв файл или директориÑ" + +#: nis/nis_error.h:41 +#, fuzzy +msgid "NIS+ operation failed" +msgstr "Отменена операциÑ" + +#: nis/nis_error.h:42 +msgid "NIS+ service is unavailable or not installed" +msgstr "" + +#: nis/nis_error.h:43 +msgid "Yes, 42 is the meaning of life" +msgstr "" + +#: nis/nis_error.h:44 +msgid "Unable to authenticate NIS+ server" +msgstr "" + +#: nis/nis_error.h:45 +msgid "Unable to authenticate NIS+ client" +msgstr "" + +#: nis/nis_error.h:46 +#, fuzzy +msgid "No file space on server" +msgstr "ÐÑма Ñвободно мÑÑто на уÑтройÑтвото" + +#: nis/nis_error.h:47 +msgid "Unable to create process on server" +msgstr "" + +#: nis/nis_error.h:48 +msgid "Master server busy, full dump rescheduled." +msgstr "" + +#: nis/nis_local_names.c:122 +#, c-format +msgid "LOCAL entry for UID %d in directory %s not unique\n" +msgstr "" + +#: nis/nis_print.c:51 +msgid "UNKNOWN" +msgstr "" + +#: nis/nis_print.c:109 +msgid "BOGUS OBJECT\n" +msgstr "" + +#: nis/nis_print.c:112 +msgid "NO OBJECT\n" +msgstr "" + +#: nis/nis_print.c:115 +msgid "DIRECTORY\n" +msgstr "" + +#: nis/nis_print.c:118 +msgid "GROUP\n" +msgstr "" + +#: nis/nis_print.c:121 +msgid "TABLE\n" +msgstr "" + +#: nis/nis_print.c:124 +msgid "ENTRY\n" +msgstr "" + +#: nis/nis_print.c:127 +msgid "LINK\n" +msgstr "" + +#: nis/nis_print.c:130 +msgid "PRIVATE\n" +msgstr "" + +#: nis/nis_print.c:133 +msgid "(Unknown object)\n" +msgstr "" + +#: nis/nis_print.c:167 +#, c-format +msgid "Name : `%s'\n" +msgstr "" + +#: nis/nis_print.c:168 +#, c-format +msgid "Type : %s\n" +msgstr "" + +#: nis/nis_print.c:173 +msgid "Master Server :\n" +msgstr "" + +#: nis/nis_print.c:175 +msgid "Replicate :\n" +msgstr "" + +#: nis/nis_print.c:176 +#, c-format +msgid "\tName : %s\n" +msgstr "" + +#: nis/nis_print.c:177 +msgid "\tPublic Key : " +msgstr "" + +#: nis/nis_print.c:181 +msgid "None.\n" +msgstr "" + +#: nis/nis_print.c:184 +#, c-format +msgid "Diffie-Hellmann (%d bits)\n" +msgstr "" + +#: nis/nis_print.c:189 +#, c-format +msgid "RSA (%d bits)\n" +msgstr "" + +#: nis/nis_print.c:192 +msgid "Kerberos.\n" +msgstr "" + +#: nis/nis_print.c:195 +#, c-format +msgid "Unknown (type = %d, bits = %d)\n" +msgstr "" + +#: nis/nis_print.c:206 +#, c-format +msgid "\tUniversal addresses (%u)\n" +msgstr "" + +#: nis/nis_print.c:228 +msgid "Time to live : " +msgstr "" + +#: nis/nis_print.c:230 +msgid "Default Access rights :\n" +msgstr "" + +#: nis/nis_print.c:239 +#, c-format +msgid "\tType : %s\n" +msgstr "" + +#: nis/nis_print.c:240 +msgid "\tAccess rights: " +msgstr "" + +#: nis/nis_print.c:254 +msgid "Group Flags :" +msgstr "" + +#: nis/nis_print.c:257 +msgid "" +"\n" +"Group Members :\n" +msgstr "" + +#: nis/nis_print.c:269 +#, c-format +msgid "Table Type : %s\n" +msgstr "" + +#: nis/nis_print.c:270 +#, c-format +msgid "Number of Columns : %d\n" +msgstr "" + +#: nis/nis_print.c:271 +#, c-format +msgid "Character Separator : %c\n" +msgstr "" + +#: nis/nis_print.c:272 +#, c-format +msgid "Search Path : %s\n" +msgstr "" + +#: nis/nis_print.c:273 +msgid "Columns :\n" +msgstr "" + +#: nis/nis_print.c:276 +#, c-format +msgid "\t[%d]\tName : %s\n" +msgstr "" + +#: nis/nis_print.c:278 +msgid "\t\tAttributes : " +msgstr "" + +#: nis/nis_print.c:280 +msgid "\t\tAccess Rights : " +msgstr "" + +#: nis/nis_print.c:290 +msgid "Linked Object Type : " +msgstr "" + +#: nis/nis_print.c:292 +#, c-format +msgid "Linked to : %s\n" +msgstr "" + +#: nis/nis_print.c:302 +#, c-format +msgid "\tEntry data of type %s\n" +msgstr "" + +#: nis/nis_print.c:305 +#, c-format +msgid "\t[%u] - [%u bytes] " +msgstr "" + +#: nis/nis_print.c:308 +msgid "Encrypted data\n" +msgstr "" + +#: nis/nis_print.c:310 +msgid "Binary data\n" +msgstr "" + +#: nis/nis_print.c:326 +#, c-format +msgid "Object Name : %s\n" +msgstr "" + +#: nis/nis_print.c:327 +#, c-format +msgid "Directory : %s\n" +msgstr "" + +#: nis/nis_print.c:328 +#, c-format +msgid "Owner : %s\n" +msgstr "" + +#: nis/nis_print.c:329 +#, c-format +msgid "Group : %s\n" +msgstr "" + +#: nis/nis_print.c:330 +msgid "Access Rights : " +msgstr "" + +#: nis/nis_print.c:332 +#, c-format +msgid "" +"\n" +"Time to Live : " +msgstr "" + +#: nis/nis_print.c:335 +#, c-format +msgid "Creation Time : %s" +msgstr "" + +#: nis/nis_print.c:337 +#, c-format +msgid "Mod. Time : %s" +msgstr "" + +#: nis/nis_print.c:338 +msgid "Object Type : " +msgstr "" + +#: nis/nis_print.c:358 +#, c-format +msgid " Data Length = %u\n" +msgstr "" + +#: nis/nis_print.c:372 +#, c-format +msgid "Status : %s\n" +msgstr "" + +#: nis/nis_print.c:373 +#, c-format +msgid "Number of objects : %u\n" +msgstr "" + +#: nis/nis_print.c:377 +#, c-format +msgid "Object #%d:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:117 +#, c-format +msgid "Group entry for \"%s.%s\" group:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:125 +msgid " Explicit members:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:130 +msgid " No explicit members\n" +msgstr "" + +#: nis/nis_print_group_entry.c:133 +msgid " Implicit members:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:138 +msgid " No implicit members\n" +msgstr "" + +#: nis/nis_print_group_entry.c:141 +msgid " Recursive members:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:146 +msgid " No recursive members\n" +msgstr "" + +#: nis/nis_print_group_entry.c:149 +msgid " Explicit nonmembers:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:154 +msgid " No explicit nonmembers\n" +msgstr "" + +#: nis/nis_print_group_entry.c:157 +msgid " Implicit nonmembers:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:162 +msgid " No implicit nonmembers\n" +msgstr "" + +#: nis/nis_print_group_entry.c:165 +msgid " Recursive nonmembers:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:170 +msgid " No recursive nonmembers\n" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:101 +#: nis/nss_nisplus/nisplus-publickey.c:183 +#, c-format +msgid "DES entry for netname %s not unique\n" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:220 +#, c-format +msgid "netname2user: missing group id list in `%s'" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:302 +#: nis/nss_nisplus/nisplus-publickey.c:308 +#: nis/nss_nisplus/nisplus-publickey.c:373 +#: nis/nss_nisplus/nisplus-publickey.c:382 +#, c-format +msgid "netname2user: (nis+ lookup): %s\n" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:321 +#, c-format +msgid "netname2user: DES entry for %s in directory %s not unique" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:339 +#, c-format +msgid "netname2user: principal name `%s' too long" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:395 +#, c-format +msgid "netname2user: LOCAL entry for %s in directory %s not unique" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:402 +msgid "netname2user: should not have uid 0" +msgstr "" + +#: nis/ypclnt.c:825 +msgid "Request arguments bad" +msgstr "" + +#: nis/ypclnt.c:828 +msgid "RPC failure on NIS operation" +msgstr "" + +#: nis/ypclnt.c:831 +msgid "Can't bind to server which serves this domain" +msgstr "" + +#: nis/ypclnt.c:834 +msgid "No such map in server's domain" +msgstr "" + +#: nis/ypclnt.c:837 +#, fuzzy +msgid "No such key in map" +msgstr "ÐÑма такова уÑтройÑтво" + +#: nis/ypclnt.c:840 +msgid "Internal NIS error" +msgstr "" + +#: nis/ypclnt.c:843 +msgid "Local resource allocation failure" +msgstr "" + +#: nis/ypclnt.c:846 +msgid "No more records in map database" +msgstr "" + +#: nis/ypclnt.c:849 +msgid "Can't communicate with portmapper" +msgstr "" + +#: nis/ypclnt.c:852 +msgid "Can't communicate with ypbind" +msgstr "" + +#: nis/ypclnt.c:855 +msgid "Can't communicate with ypserv" +msgstr "" + +#: nis/ypclnt.c:858 +msgid "Local domain name not set" +msgstr "" + +#: nis/ypclnt.c:861 +msgid "NIS map database is bad" +msgstr "" + +#: nis/ypclnt.c:864 +msgid "NIS client/server version mismatch - can't supply service" +msgstr "" + +#: nis/ypclnt.c:870 +msgid "Database is busy" +msgstr "" + +#: nis/ypclnt.c:873 +msgid "Unknown NIS error code" +msgstr "" + +#: nis/ypclnt.c:913 +#, fuzzy +msgid "Internal ypbind error" +msgstr "Канална грешка при потоци" + +#: nis/ypclnt.c:916 +msgid "Domain not bound" +msgstr "" + +#: nis/ypclnt.c:919 +msgid "System resource allocation failure" +msgstr "" + +#: nis/ypclnt.c:922 +msgid "Unknown ypbind error" +msgstr "" + +#: nis/ypclnt.c:963 +msgid "yp_update: cannot convert host to netname\n" +msgstr "" + +#: nis/ypclnt.c:981 +msgid "yp_update: cannot get server address\n" +msgstr "" + +#: nscd/aicache.c:77 nscd/hstcache.c:462 +#, c-format +msgid "Haven't found \"%s\" in hosts cache!" +msgstr "" + +#: nscd/aicache.c:79 nscd/hstcache.c:464 +#, c-format +msgid "Reloading \"%s\" in hosts cache!" +msgstr "" + +#: nscd/cache.c:146 +#, c-format +msgid "add new entry \"%s\" of type %s for %s to cache%s" +msgstr "" + +#: nscd/cache.c:148 +msgid " (first)" +msgstr "" + +#: nscd/cache.c:256 nscd/connections.c:786 +#, c-format +msgid "cannot stat() file `%s': %s" +msgstr "" + +#: nscd/cache.c:285 +#, c-format +msgid "pruning %s cache; time %ld" +msgstr "" + +#: nscd/cache.c:312 +#, c-format +msgid "considering %s entry \"%s\", timeout %<PRIu64>" +msgstr "" + +#: nscd/connections.c:505 nscd/connections.c:517 nscd/connections.c:529 +#: nscd/connections.c:548 +#, c-format +msgid "invalid persistent database file \"%s\": %s" +msgstr "" + +#: nscd/connections.c:519 +msgid "header size does not match" +msgstr "" + +#: nscd/connections.c:531 +msgid "file size does not match" +msgstr "" + +#: nscd/connections.c:550 +#, fuzzy +msgid "verification failed" +msgstr "Отменена операциÑ" + +#: nscd/connections.c:564 +#, c-format +msgid "suggested size of table for database %s larger than the persistent database's table" +msgstr "" + +#: nscd/connections.c:574 nscd/connections.c:655 +#, c-format +msgid "cannot create read-only descriptor for \"%s\"; no mmap" +msgstr "" + +#: nscd/connections.c:634 +#, c-format +msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart" +msgstr "" + +#: nscd/connections.c:641 +#, c-format +msgid "cannot create %s; no persistent database used" +msgstr "" + +#: nscd/connections.c:644 +#, c-format +msgid "cannot create %s; no sharing possible" +msgstr "" + +#: nscd/connections.c:715 +#, c-format +msgid "cannot write to database file %s: %s" +msgstr "" + +#: nscd/connections.c:749 +#, c-format +msgid "cannot set socket to close on exec: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:799 +#, c-format +msgid "cannot open socket: %s" +msgstr "" + +#: nscd/connections.c:816 +#, c-format +msgid "cannot change socket to nonblocking mode: %s" +msgstr "" + +#: nscd/connections.c:824 +#, c-format +msgid "cannot set socket to close on exec: %s" +msgstr "" + +#: nscd/connections.c:835 +#, c-format +msgid "cannot enable socket to accept connections: %s" +msgstr "" + +#: nscd/connections.c:926 +#, c-format +msgid "provide access to FD %d, for %s" +msgstr "" + +#: nscd/connections.c:938 +#, c-format +msgid "cannot handle old request version %d; current version is %d" +msgstr "" + +#: nscd/connections.c:980 nscd/connections.c:1033 +#, c-format +msgid "cannot write result: %s" +msgstr "" + +#: nscd/connections.c:1116 +#, c-format +msgid "error getting caller's id: %s" +msgstr "" + +#: nscd/connections.c:1175 +#, c-format +msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1189 +#, c-format +msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1229 +#, c-format +msgid "cannot change to old UID: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1239 +#, c-format +msgid "cannot change to old GID: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1252 +#, c-format +msgid "cannot change to old working directory: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1280 +#, c-format +msgid "re-exec failed: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1289 +#, c-format +msgid "cannot change current working directory to \"/\": %s" +msgstr "" + +#: nscd/connections.c:1407 +#, c-format +msgid "short read while reading request: %s" +msgstr "" + +#: nscd/connections.c:1438 +#, c-format +msgid "key length in request too long: %d" +msgstr "" + +#: nscd/connections.c:1451 +#, c-format +msgid "short read while reading request key: %s" +msgstr "" + +#: nscd/connections.c:1460 +#, c-format +msgid "handle_request: request received (Version = %d) from PID %ld" +msgstr "" + +#: nscd/connections.c:1465 +#, c-format +msgid "handle_request: request received (Version = %d)" +msgstr "" + +#: nscd/connections.c:1826 +#, c-format +msgid "could only start %d threads; terminating" +msgstr "" + +#: nscd/connections.c:1874 nscd/connections.c:1875 nscd/connections.c:1892 +#: nscd/connections.c:1901 nscd/connections.c:1919 nscd/connections.c:1930 +#: nscd/connections.c:1941 +#, c-format +msgid "Failed to run nscd as user '%s'" +msgstr "" + +#: nscd/connections.c:1893 +#, c-format +msgid "initial getgrouplist failed" +msgstr "" + +#: nscd/connections.c:1902 +#, c-format +msgid "getgrouplist failed" +msgstr "" + +#: nscd/connections.c:1920 +#, c-format +msgid "setgroups failed" +msgstr "" + +#: nscd/grpcache.c:402 nscd/hstcache.c:412 nscd/initgrcache.c:412 +#: nscd/pwdcache.c:397 nscd/servicescache.c:342 +#, c-format +msgid "short write in %s: %s" +msgstr "" + +#: nscd/grpcache.c:445 nscd/initgrcache.c:78 +#, c-format +msgid "Haven't found \"%s\" in group cache!" +msgstr "" + +#: nscd/grpcache.c:447 nscd/initgrcache.c:80 +#, c-format +msgid "Reloading \"%s\" in group cache!" +msgstr "" + +#: nscd/grpcache.c:524 +#, c-format +msgid "Invalid numeric gid \"%s\"!" +msgstr "" + +#: nscd/mem.c:383 +#, c-format +msgid "freed %zu bytes in %s cache" +msgstr "" + +#: nscd/mem.c:512 +#, c-format +msgid "no more memory for database '%s'" +msgstr "" + +#: nscd/nscd.c:98 +msgid "Read configuration data from NAME" +msgstr "" + +#: nscd/nscd.c:100 +msgid "Do not fork and display messages on the current tty" +msgstr "" + +#: nscd/nscd.c:101 +msgid "NUMBER" +msgstr "" + +#: nscd/nscd.c:101 +msgid "Start NUMBER threads" +msgstr "" + +#: nscd/nscd.c:102 +msgid "Shut the server down" +msgstr "" + +#: nscd/nscd.c:103 +msgid "Print current configuration statistic" +msgstr "" + +#: nscd/nscd.c:104 +msgid "TABLE" +msgstr "" + +#: nscd/nscd.c:105 +msgid "Invalidate the specified cache" +msgstr "" + +#: nscd/nscd.c:106 +msgid "TABLE,yes" +msgstr "" + +#: nscd/nscd.c:107 +msgid "Use separate cache for each user" +msgstr "" + +#: nscd/nscd.c:112 +msgid "Name Service Cache Daemon." +msgstr "" + +#: nscd/nscd.c:144 nss/getent.c:858 nss/makedb.c:123 +#, fuzzy, c-format +msgid "wrong number of arguments" +msgstr "Ðомер на връзка извън диапазона" + +#: nscd/nscd.c:154 +#, c-format +msgid "failure while reading configuration file; this is fatal" +msgstr "" + +#: nscd/nscd.c:163 +#, c-format +msgid "already running" +msgstr "" + +#: nscd/nscd.c:178 nscd/nscd.c:233 +#, c-format +msgid "cannot fork" +msgstr "" + +#: nscd/nscd.c:241 +#, c-format +msgid "cannot change current working directory to \"/\"" +msgstr "" + +#: nscd/nscd.c:249 +msgid "Could not create log file" +msgstr "" + +#: nscd/nscd.c:302 nscd/nscd.c:327 nscd/nscd_stat.c:172 +#, c-format +msgid "Only root is allowed to use this option!" +msgstr "" + +#: nscd/nscd.c:364 nscd/nscd_stat.c:191 +#, c-format +msgid "write incomplete" +msgstr "" + +#: nscd/nscd.c:375 +#, c-format +msgid "cannot read invalidate ACK" +msgstr "" + +#: nscd/nscd.c:381 +#, c-format +msgid "invalidation failed" +msgstr "" + +#: nscd/nscd.c:391 +#, c-format +msgid "secure services not implemented anymore" +msgstr "" + +#: nscd/nscd_conf.c:57 +#, fuzzy, c-format +msgid "database %s is not supported" +msgstr "Ðеподдържана операциÑ" + +# TODO +#: nscd/nscd_conf.c:108 +#, fuzzy, c-format +msgid "Parse error: %s" +msgstr "Грешка при оÑведомÑване" + +#: nscd/nscd_conf.c:193 +#, c-format +msgid "Must specify user name for server-user option" +msgstr "" + +#: nscd/nscd_conf.c:200 +#, c-format +msgid "Must specify user name for stat-user option" +msgstr "" + +#: nscd/nscd_conf.c:244 +#, c-format +msgid "invalid value for 'reload-count': %u" +msgstr "" + +#: nscd/nscd_conf.c:259 +#, c-format +msgid "Must specify value for restart-interval option" +msgstr "" + +#: nscd/nscd_conf.c:273 +#, c-format +msgid "Unknown option: %s %s %s" +msgstr "" + +#: nscd/nscd_conf.c:286 +#, c-format +msgid "cannot get current working directory: %s; disabling paranoia mode" +msgstr "" + +#: nscd/nscd_conf.c:306 +#, c-format +msgid "maximum file size for %s database too small" +msgstr "" + +#: nscd/nscd_stat.c:141 +#, c-format +msgid "cannot write statistics: %s" +msgstr "" + +#: nscd/nscd_stat.c:156 +msgid "yes" +msgstr "" + +#: nscd/nscd_stat.c:157 +msgid "no" +msgstr "" + +#: nscd/nscd_stat.c:168 +#, c-format +msgid "Only root or %s is allowed to use this option!" +msgstr "" + +#: nscd/nscd_stat.c:179 +#, c-format +msgid "nscd not running!\n" +msgstr "" + +#: nscd/nscd_stat.c:203 +#, c-format +msgid "cannot read statistics data" +msgstr "" + +#: nscd/nscd_stat.c:206 +#, c-format +msgid "" +"nscd configuration:\n" +"\n" +"%15d server debug level\n" +msgstr "" + +#: nscd/nscd_stat.c:230 +#, c-format +msgid "%3ud %2uh %2um %2lus server runtime\n" +msgstr "" + +#: nscd/nscd_stat.c:233 +#, c-format +msgid " %2uh %2um %2lus server runtime\n" +msgstr "" + +#: nscd/nscd_stat.c:235 +#, c-format +msgid " %2um %2lus server runtime\n" +msgstr "" + +#: nscd/nscd_stat.c:237 +#, c-format +msgid " %2lus server runtime\n" +msgstr "" + +#: nscd/nscd_stat.c:239 +#, c-format +msgid "" +"%15d current number of threads\n" +"%15d maximum number of threads\n" +"%15lu number of times clients had to wait\n" +"%15s paranoia mode enabled\n" +"%15lu restart internal\n" +msgstr "" + +#: nscd/nscd_stat.c:273 +#, c-format +msgid "" +"\n" +"%s cache:\n" +"\n" +"%15s cache is enabled\n" +"%15s cache is persistent\n" +"%15s cache is shared\n" +"%15zu suggested size\n" +"%15zu total data pool size\n" +"%15zu used data pool size\n" +"%15lu seconds time to live for positive entries\n" +"%15lu seconds time to live for negative entries\n" +"%15<PRIuMAX> cache hits on positive entries\n" +"%15<PRIuMAX> cache hits on negative entries\n" +"%15<PRIuMAX> cache misses on positive entries\n" +"%15<PRIuMAX> cache misses on negative entries\n" +"%15lu%% cache hit rate\n" +"%15zu current number of cached values\n" +"%15zu maximum number of cached values\n" +"%15zu maximum chain length searched\n" +"%15<PRIuMAX> number of delays on rdlock\n" +"%15<PRIuMAX> number of delays on wrlock\n" +"%15<PRIuMAX> memory allocations failed\n" +"%15s check /etc/%s for changes\n" +msgstr "" + +#: nscd/pwdcache.c:440 +#, c-format +msgid "Haven't found \"%s\" in password cache!" +msgstr "" + +#: nscd/pwdcache.c:442 +#, c-format +msgid "Reloading \"%s\" in password cache!" +msgstr "" + +#: nscd/pwdcache.c:520 +#, c-format +msgid "Invalid numeric uid \"%s\"!" +msgstr "" + +#: nscd/selinux.c:156 +#, c-format +msgid "Failed opening connection to the audit subsystem: %m" +msgstr "" + +#: nscd/selinux.c:177 +msgid "Failed to set keep-capabilities" +msgstr "" + +#: nscd/selinux.c:178 nscd/selinux.c:241 +#, c-format +msgid "prctl(KEEPCAPS) failed" +msgstr "" + +#: nscd/selinux.c:192 +msgid "Failed to initialize drop of capabilities" +msgstr "" + +#: nscd/selinux.c:193 +#, c-format +msgid "cap_init failed" +msgstr "" + +#: nscd/selinux.c:214 nscd/selinux.c:231 +msgid "Failed to drop capabilities" +msgstr "" + +#: nscd/selinux.c:215 nscd/selinux.c:232 +#, c-format +msgid "cap_set_proc failed" +msgstr "" + +#: nscd/selinux.c:240 +msgid "Failed to unset keep-capabilities" +msgstr "" + +#: nscd/selinux.c:256 +msgid "Failed to determine if kernel supports SELinux" +msgstr "" + +#: nscd/selinux.c:271 +#, c-format +msgid "Failed to start AVC thread" +msgstr "" + +#: nscd/selinux.c:293 +#, c-format +msgid "Failed to create AVC lock" +msgstr "" + +#: nscd/selinux.c:333 +#, fuzzy, c-format +msgid "Failed to start AVC" +msgstr "Твърде голÑм файл" + +#: nscd/selinux.c:335 +msgid "Access Vector Cache (AVC) started" +msgstr "" + +#: nscd/selinux.c:356 +msgid "Error getting context of socket peer" +msgstr "" + +#: nscd/selinux.c:361 +msgid "Error getting context of nscd" +msgstr "" + +#: nscd/selinux.c:367 +msgid "Error getting sid from context" +msgstr "" + +#: nscd/selinux.c:399 +#, c-format +msgid "" +"\n" +"SELinux AVC Statistics:\n" +"\n" +"%15u entry lookups\n" +"%15u entry hits\n" +"%15u entry misses\n" +"%15u entry discards\n" +"%15u CAV lookups\n" +"%15u CAV hits\n" +"%15u CAV probes\n" +"%15u CAV misses\n" +msgstr "" + +#: nscd/servicescache.c:389 +#, c-format +msgid "Haven't found \"%s\" in services cache!" +msgstr "" + +#: nscd/servicescache.c:391 +#, c-format +msgid "Reloading \"%s\" in services cache!" +msgstr "" + +#: nss/getent.c:52 +msgid "database [key ...]" +msgstr "" + +#: nss/getent.c:57 +msgid "Service configuration to be used" +msgstr "" + +#: nss/getent.c:62 +msgid "" +"Get entries from administrative database.\vFor bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" + +#: nss/getent.c:145 nss/getent.c:394 +#, fuzzy, c-format +msgid "Enumeration not supported on %s\n" +msgstr "Ðеподдържана операциÑ" + +#: nss/getent.c:782 +#, c-format +msgid "Unknown database name" +msgstr "" + +#: nss/getent.c:808 +msgid "Supported databases:\n" +msgstr "" + +#: nss/getent.c:868 +#, c-format +msgid "Unknown database: %s\n" +msgstr "" + +#: nss/makedb.c:60 +msgid "Convert key to lower case" +msgstr "" + +#: nss/makedb.c:63 +msgid "Do not print messages while building database" +msgstr "" + +#: nss/makedb.c:65 +msgid "Print content of database file, one entry a line" +msgstr "" + +#: nss/makedb.c:70 +msgid "Create simple DB database from textual input." +msgstr "" + +#: nss/makedb.c:73 +msgid "" +"INPUT-FILE OUTPUT-FILE\n" +"-o OUTPUT-FILE INPUT-FILE\n" +"-u INPUT-FILE" +msgstr "" + +#: nss/makedb.c:142 +#, c-format +msgid "No usable database library found." +msgstr "" + +#: nss/makedb.c:149 +#, c-format +msgid "cannot open database file `%s': %s" +msgstr "" + +#: nss/makedb.c:151 +msgid "incorrectly formatted file" +msgstr "" + +#: nss/makedb.c:331 +msgid "duplicate key" +msgstr "" + +#: nss/makedb.c:337 +#, c-format +msgid "while writing database file" +msgstr "" + +#: nss/makedb.c:348 +#, c-format +msgid "problems while reading `%s'" +msgstr "" + +#: nss/makedb.c:368 nss/makedb.c:385 +#, c-format +msgid "while reading database" +msgstr "" + +#: posix/getconf.c:945 +#, c-format +msgid "Usage: %s [-v specification] variable_name [pathname]\n" +msgstr "" + +#: posix/getconf.c:948 +#, c-format +msgid " %s -a [pathname]\n" +msgstr "" + +#: posix/getconf.c:1067 +#, c-format +msgid "unknown specification \"%s\"" +msgstr "" + +#: posix/getconf.c:1095 +#, c-format +msgid "Couldn't execute %s" +msgstr "" + +#: posix/getconf.c:1135 posix/getconf.c:1151 +msgid "undefined" +msgstr "" + +#: posix/getconf.c:1173 +#, c-format +msgid "Unrecognized variable `%s'" +msgstr "" + +#: posix/getopt.c:571 posix/getopt.c:587 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "" + +#: posix/getopt.c:620 posix/getopt.c:624 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "" + +#: posix/getopt.c:633 posix/getopt.c:638 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "" + +#: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016 +#: posix/getopt.c:1035 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "" + +#: posix/getopt.c:738 posix/getopt.c:741 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "" + +#: posix/getopt.c:749 posix/getopt.c:752 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "" + +#: posix/getopt.c:804 posix/getopt.c:807 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "" + +#: posix/getopt.c:813 posix/getopt.c:816 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "" + +#: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088 +#: posix/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "" + +#: posix/getopt.c:937 posix/getopt.c:953 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "" + +#: posix/getopt.c:977 posix/getopt.c:995 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "" + +#: posix/regcomp.c:135 +msgid "No match" +msgstr "" + +#: posix/regcomp.c:138 +#, fuzzy +msgid "Invalid regular expression" +msgstr "Ðеправилен аргумент" + +#: posix/regcomp.c:141 +#, fuzzy +msgid "Invalid collation character" +msgstr "Ðеправилен или непълен многобайтов или широк пиÑмен знак" + +#: posix/regcomp.c:144 +msgid "Invalid character class name" +msgstr "" + +#: posix/regcomp.c:147 +msgid "Trailing backslash" +msgstr "" + +#: posix/regcomp.c:150 +#, fuzzy +msgid "Invalid back reference" +msgstr "Ðеправилен аргумент" + +#: posix/regcomp.c:153 +msgid "Unmatched [ or [^" +msgstr "" + +#: posix/regcomp.c:156 +msgid "Unmatched ( or \\(" +msgstr "" + +#: posix/regcomp.c:159 +msgid "Unmatched \\{" +msgstr "" + +#: posix/regcomp.c:162 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: posix/regcomp.c:165 +#, fuzzy +msgid "Invalid range end" +msgstr "Ðеправилен аргумент" + +#: posix/regcomp.c:168 +msgid "Memory exhausted" +msgstr "" + +#: posix/regcomp.c:171 +msgid "Invalid preceding regular expression" +msgstr "" + +#: posix/regcomp.c:174 +msgid "Premature end of regular expression" +msgstr "" + +#: posix/regcomp.c:177 +msgid "Regular expression too big" +msgstr "" + +#: posix/regcomp.c:180 +msgid "Unmatched ) or \\)" +msgstr "" + +#: posix/regcomp.c:660 +msgid "No previous regular expression" +msgstr "" + +#: posix/wordexp.c:1798 +msgid "parameter null or not set" +msgstr "" + +#: resolv/herror.c:68 +msgid "Resolver Error 0 (no error)" +msgstr "" + +#: 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:107 +msgid "Resolver internal error" +msgstr "" + +#: resolv/herror.c:110 +msgid "Unknown resolver error" +msgstr "" + +#: resolv/res_hconf.c:124 +#, c-format +msgid "%s: line %d: cannot specify more than %d trim domains" +msgstr "" + +#: resolv/res_hconf.c:145 +#, c-format +msgid "%s: line %d: list delimiter not followed by domain" +msgstr "" + +#: resolv/res_hconf.c:204 +#, c-format +msgid "%s: line %d: expected `on' or `off', found `%s'\n" +msgstr "" + +#: resolv/res_hconf.c:247 +#, c-format +msgid "%s: line %d: bad command `%s'\n" +msgstr "" + +#: resolv/res_hconf.c:282 +#, c-format +msgid "%s: line %d: ignoring trailing garbage `%s'\n" +msgstr "" + +#: stdio-common/psignal.c:51 +#, c-format +msgid "%s%sUnknown signal %d\n" +msgstr "" + +#: stdio-common/psignal.c:52 +msgid "Unknown signal" +msgstr "" + +#: string/_strerror.c:45 sysdeps/mach/_strerror.c:87 +msgid "Unknown error " +msgstr "" + +# TODO +#: string/strerror.c:43 +#, fuzzy +msgid "Unknown error" +msgstr "Грешка при srmount" + +#: string/strsignal.c:65 +#, c-format +msgid "Real-time signal %d" +msgstr "" + +#: string/strsignal.c:69 +#, c-format +msgid "Unknown signal %d" +msgstr "" + +#: sunrpc/auth_unix.c:114 +msgid "authunix_create: out of memory\n" +msgstr "" + +#: sunrpc/auth_unix.c:350 +msgid "auth_unix.c: Fatal marshalling problem" +msgstr "" + +#: sunrpc/clnt_perr.c:118 sunrpc/clnt_perr.c:139 +#, c-format +msgid "; low version = %lu, high version = %lu" +msgstr "" + +#: sunrpc/clnt_perr.c:125 +msgid "; why = " +msgstr "" + +#: sunrpc/clnt_perr.c:132 +#, fuzzy, c-format +msgid "(unknown authentication error - %d)" +msgstr "Грешка при удоÑтоверÑване (authentication)" + +#: sunrpc/clnt_perr.c:172 +#, fuzzy +msgid "RPC: Success" +msgstr "УÑпешно" + +#: sunrpc/clnt_perr.c:175 +msgid "RPC: Can't encode arguments" +msgstr "" + +#: sunrpc/clnt_perr.c:179 +msgid "RPC: Can't decode result" +msgstr "" + +#: sunrpc/clnt_perr.c:183 +msgid "RPC: Unable to send" +msgstr "" + +#: sunrpc/clnt_perr.c:187 +msgid "RPC: Unable to receive" +msgstr "" + +#: sunrpc/clnt_perr.c:191 +msgid "RPC: Timed out" +msgstr "" + +#: sunrpc/clnt_perr.c:195 +msgid "RPC: Incompatible versions of RPC" +msgstr "" + +#: sunrpc/clnt_perr.c:199 +#, fuzzy +msgid "RPC: Authentication error" +msgstr "Грешка при удоÑтоверÑване (authentication)" + +#: sunrpc/clnt_perr.c:203 +#, fuzzy +msgid "RPC: Program unavailable" +msgstr "ÐедоÑтъпна RPC-програма" + +#: sunrpc/clnt_perr.c:207 +#, fuzzy +msgid "RPC: Program/version mismatch" +msgstr "Ðеправилна верÑÐ¸Ñ Ð½Ð° RPC-програма" + +#: sunrpc/clnt_perr.c:211 +#, fuzzy +msgid "RPC: Procedure unavailable" +msgstr "ÐедоÑтъпна RPC-програма" + +#: sunrpc/clnt_perr.c:215 +msgid "RPC: Server can't decode arguments" +msgstr "" + +#: sunrpc/clnt_perr.c:219 +#, fuzzy +msgid "RPC: Remote system error" +msgstr "Отдалечена входно-изходна грешка" + +#: sunrpc/clnt_perr.c:223 +msgid "RPC: Unknown host" +msgstr "" + +#: sunrpc/clnt_perr.c:227 +msgid "RPC: Unknown protocol" +msgstr "" + +#: sunrpc/clnt_perr.c:231 +msgid "RPC: Port mapper failure" +msgstr "" + +#: sunrpc/clnt_perr.c:235 +#, fuzzy +msgid "RPC: Program not registered" +msgstr "ÐедоÑтъпна RPC-програма" + +#: sunrpc/clnt_perr.c:239 +#, fuzzy +msgid "RPC: Failed (unspecified error)" +msgstr "RFS-грешка" + +#: sunrpc/clnt_perr.c:280 +msgid "RPC: (unknown error code)" +msgstr "" + +#: sunrpc/clnt_perr.c:342 +#, fuzzy +msgid "Authentication OK" +msgstr "Грешка при удоÑтоверÑване (authentication)" + +#: sunrpc/clnt_perr.c:345 +#, fuzzy +msgid "Invalid client credential" +msgstr "Ðеправилен код на заÑвка" + +#: sunrpc/clnt_perr.c:349 +msgid "Server rejected credential" +msgstr "" + +#: sunrpc/clnt_perr.c:353 +#, fuzzy +msgid "Invalid client verifier" +msgstr "Ðеправилен деÑкриптор на заÑвка" + +#: sunrpc/clnt_perr.c:357 +msgid "Server rejected verifier" +msgstr "" + +#: sunrpc/clnt_perr.c:361 +msgid "Client credential too weak" +msgstr "" + +#: sunrpc/clnt_perr.c:365 +#, fuzzy +msgid "Invalid server verifier" +msgstr "Ðеправилен деÑкриптор на заÑвка" + +#: sunrpc/clnt_perr.c:369 +#, fuzzy +msgid "Failed (unspecified error)" +msgstr "RFS-грешка" + +#: sunrpc/clnt_raw.c:117 +msgid "clnt_raw.c: fatal header serialization error" +msgstr "" + +#: sunrpc/clnt_tcp.c:131 +msgid "clnttcp_create: out of memory\n" +msgstr "" + +#: sunrpc/clnt_udp.c:139 +msgid "clntudp_create: out of memory\n" +msgstr "" + +#: sunrpc/clnt_unix.c:128 +msgid "clntunix_create: out of memory\n" +msgstr "" + +#: sunrpc/pm_getmaps.c:83 +msgid "pmap_getmaps.c: rpc problem" +msgstr "" + +#: sunrpc/pmap_clnt.c:129 +msgid "Cannot register service" +msgstr "" + +#: sunrpc/pmap_rmt.c:248 +msgid "Cannot create socket for broadcast rpc" +msgstr "" + +#: sunrpc/pmap_rmt.c:255 +msgid "Cannot set socket option SO_BROADCAST" +msgstr "" + +#: sunrpc/pmap_rmt.c:307 +msgid "Cannot send broadcast packet" +msgstr "" + +#: sunrpc/pmap_rmt.c:332 +msgid "Broadcast poll problem" +msgstr "" + +#: sunrpc/pmap_rmt.c:345 +msgid "Cannot receive reply to broadcast" +msgstr "" + +#: sunrpc/rpc_main.c:286 +#, c-format +msgid "%s: output would overwrite %s\n" +msgstr "" + +#: sunrpc/rpc_main.c:293 +#, c-format +msgid "%s: unable to open %s: %m\n" +msgstr "" + +#: sunrpc/rpc_main.c:305 +#, c-format +msgid "%s: while writing output %s: %m" +msgstr "" + +#: sunrpc/rpc_main.c:340 +#, c-format +msgid "cannot find C preprocessor: %s \n" +msgstr "" + +#: sunrpc/rpc_main.c:348 +msgid "cannot find any C preprocessor (cpp)\n" +msgstr "" + +#: sunrpc/rpc_main.c:417 +#, c-format +msgid "%s: C preprocessor failed with signal %d\n" +msgstr "" + +#: sunrpc/rpc_main.c:420 +#, c-format +msgid "%s: C preprocessor failed with exit code %d\n" +msgstr "" + +#: sunrpc/rpc_main.c:460 +#, c-format +msgid "illegal nettype: `%s'\n" +msgstr "" + +#: sunrpc/rpc_main.c:1122 +#, c-format +msgid "rpcgen: too many defines\n" +msgstr "" + +#: sunrpc/rpc_main.c:1134 +#, c-format +msgid "rpcgen: arglist coding error\n" +msgstr "" + +#. TRANS: the file will not be removed; this is an +#. TRANS: informative message. +#: sunrpc/rpc_main.c:1167 +#, c-format +msgid "file `%s' already exists and may be overwritten\n" +msgstr "" + +#: sunrpc/rpc_main.c:1212 +#, c-format +msgid "Cannot specify more than one input file!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1382 +msgid "This implementation doesn't support newstyle or MT-safe code!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1391 +#, c-format +msgid "Cannot use netid flag with inetd flag!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1403 +msgid "Cannot use netid flag without TIRPC!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1410 +msgid "Cannot use table flags with newstyle!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1429 +#, c-format +msgid "\"infile\" is required for template generation flags.\n" +msgstr "" + +#: sunrpc/rpc_main.c:1434 +#, c-format +msgid "Cannot have more than one file generation flag!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1443 +#, c-format +msgid "usage: %s infile\n" +msgstr "" + +#: sunrpc/rpc_main.c:1444 +#, c-format +msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n" +msgstr "" + +#: sunrpc/rpc_main.c:1446 +#, c-format +msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n" +msgstr "" + +#: sunrpc/rpc_main.c:1448 +#, c-format +msgid "\t%s [-s nettype]* [-o outfile] [infile]\n" +msgstr "" + +#: sunrpc/rpc_main.c:1449 +#, c-format +msgid "\t%s [-n netid]* [-o outfile] [infile]\n" +msgstr "" + +#: sunrpc/rpc_scan.c:114 +msgid "constant or identifier expected" +msgstr "" + +#: sunrpc/rpc_scan.c:310 +msgid "illegal character in file: " +msgstr "" + +#: sunrpc/rpc_scan.c:349 sunrpc/rpc_scan.c:375 +msgid "unterminated string constant" +msgstr "" + +#: sunrpc/rpc_scan.c:381 +msgid "empty char string" +msgstr "" + +#: sunrpc/rpc_scan.c:523 sunrpc/rpc_scan.c:533 +#, fuzzy +msgid "preprocessor error" +msgstr "Протоколна грешка" + +#: sunrpc/rpcinfo.c:237 sunrpc/rpcinfo.c:383 +#, fuzzy, c-format +msgid "program %lu is not available\n" +msgstr "ÐедоÑтъпна RPC-програма" + +#: 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 +#, fuzzy, c-format +msgid "program %lu version %lu is not available\n" +msgstr "ÐедоÑтъпна RPC-програма" + +#: sunrpc/rpcinfo.c:515 +#, c-format +msgid "program %lu version %lu ready and waiting\n" +msgstr "" + +#: sunrpc/rpcinfo.c:556 sunrpc/rpcinfo.c:563 +msgid "rpcinfo: can't contact portmapper" +msgstr "" + +#: sunrpc/rpcinfo.c:570 +msgid "No remote programs registered.\n" +msgstr "" + +#: sunrpc/rpcinfo.c:574 +msgid " program vers proto port\n" +msgstr "" + +#: sunrpc/rpcinfo.c:613 +msgid "(unknown)" +msgstr "" + +#: sunrpc/rpcinfo.c:637 +#, c-format +msgid "rpcinfo: broadcast failed: %s\n" +msgstr "" + +#: sunrpc/rpcinfo.c:658 +msgid "Sorry. You are not root\n" +msgstr "" + +#: sunrpc/rpcinfo.c:665 +#, c-format +msgid "rpcinfo: Could not delete registration for prog %s version %s\n" +msgstr "" + +#: sunrpc/rpcinfo.c:674 +msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n" +msgstr "" + +#: sunrpc/rpcinfo.c:676 +msgid " rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n" +msgstr "" + +#: sunrpc/rpcinfo.c:678 +msgid " rpcinfo -p [ host ]\n" +msgstr "" + +#: sunrpc/rpcinfo.c:679 +msgid " rpcinfo -b prognum versnum\n" +msgstr "" + +#: sunrpc/rpcinfo.c:680 +msgid " rpcinfo -d prognum versnum\n" +msgstr "" + +#: sunrpc/rpcinfo.c:695 +#, c-format +msgid "rpcinfo: %s is unknown service\n" +msgstr "" + +#: sunrpc/rpcinfo.c:732 +#, c-format +msgid "rpcinfo: %s is unknown host\n" +msgstr "" + +#: sunrpc/svc_run.c:70 +msgid "svc_run: - out of memory" +msgstr "" + +#: sunrpc/svc_run.c:90 +msgid "svc_run: - poll failed" +msgstr "" + +#: sunrpc/svc_simple.c:87 +#, c-format +msgid "can't reassign procedure number %ld\n" +msgstr "" + +#: sunrpc/svc_simple.c:97 +msgid "couldn't create an rpc server\n" +msgstr "" + +#: sunrpc/svc_simple.c:105 +#, c-format +msgid "couldn't register prog %ld vers %ld\n" +msgstr "" + +#: sunrpc/svc_simple.c:113 +msgid "registerrpc: out of memory\n" +msgstr "" + +#: sunrpc/svc_simple.c:173 +#, c-format +msgid "trouble replying to prog %d\n" +msgstr "" + +#: sunrpc/svc_simple.c:182 +#, c-format +msgid "never registered prog %d\n" +msgstr "" + +#: sunrpc/svc_tcp.c:155 +msgid "svc_tcp.c - tcp socket creation problem" +msgstr "" + +#: sunrpc/svc_tcp.c:170 +msgid "svc_tcp.c - cannot getsockname or listen" +msgstr "" + +#: sunrpc/svc_tcp.c:179 +msgid "svctcp_create: out of memory\n" +msgstr "" + +#: sunrpc/svc_tcp.c:218 +msgid "svc_tcp: makefd_xprt: out of memory\n" +msgstr "" + +#: sunrpc/svc_udp.c:128 +msgid "svcudp_create: socket creation problem" +msgstr "" + +#: sunrpc/svc_udp.c:142 +msgid "svcudp_create - cannot getsockname" +msgstr "" + +#: sunrpc/svc_udp.c:152 +msgid "svcudp_create: out of memory\n" +msgstr "" + +#: sunrpc/svc_udp.c:174 +msgid "svcudp_create: xp_pad is too small for IP_PKTINFO\n" +msgstr "" + +#: sunrpc/svc_udp.c:474 +msgid "enablecache: cache already enabled" +msgstr "" + +#: sunrpc/svc_udp.c:480 +msgid "enablecache: could not allocate cache" +msgstr "" + +#: sunrpc/svc_udp.c:489 +msgid "enablecache: could not allocate cache data" +msgstr "" + +#: sunrpc/svc_udp.c:497 +msgid "enablecache: could not allocate cache fifo" +msgstr "" + +#: sunrpc/svc_udp.c:532 +msgid "cache_set: victim not found" +msgstr "" + +#: sunrpc/svc_udp.c:543 +msgid "cache_set: victim alloc failed" +msgstr "" + +#: sunrpc/svc_udp.c:550 +msgid "cache_set: could not allocate new rpc_buffer" +msgstr "" + +#: sunrpc/svc_unix.c:150 +msgid "svc_unix.c - AF_UNIX socket creation problem" +msgstr "" + +#: sunrpc/svc_unix.c:166 +msgid "svc_unix.c - cannot getsockname or listen" +msgstr "" + +#: sunrpc/svc_unix.c:176 +msgid "svcunix_create: out of memory\n" +msgstr "" + +#: sunrpc/svc_unix.c:215 +msgid "svc_unix: makefd_xprt: out of memory\n" +msgstr "" + +#: sunrpc/xdr.c:566 +msgid "xdr_bytes: out of memory\n" +msgstr "" + +#: sunrpc/xdr.c:718 +msgid "xdr_string: out of memory\n" +msgstr "" + +#: sunrpc/xdr_array.c:106 +msgid "xdr_array: out of memory\n" +msgstr "" + +#: sunrpc/xdr_rec.c:156 +msgid "xdrrec_create: out of memory\n" +msgstr "" + +#: sunrpc/xdr_ref.c:86 +msgid "xdr_reference: out of memory\n" +msgstr "" + +#: sysdeps/generic/siglist.h:29 sysdeps/unix/siglist.c:27 +msgid "Hangup" +msgstr "" + +#: sysdeps/generic/siglist.h:30 sysdeps/unix/siglist.c:28 +msgid "Interrupt" +msgstr "" + +#: sysdeps/generic/siglist.h:31 sysdeps/unix/siglist.c:29 +msgid "Quit" +msgstr "" + +#: sysdeps/generic/siglist.h:32 sysdeps/unix/siglist.c:30 +msgid "Illegal instruction" +msgstr "" + +#: sysdeps/generic/siglist.h:33 sysdeps/unix/siglist.c:31 +msgid "Trace/breakpoint trap" +msgstr "" + +#: sysdeps/generic/siglist.h:34 +msgid "Aborted" +msgstr "" + +#: sysdeps/generic/siglist.h:35 sysdeps/unix/siglist.c:34 +msgid "Floating point exception" +msgstr "" + +#: sysdeps/generic/siglist.h:36 sysdeps/unix/siglist.c:35 +msgid "Killed" +msgstr "" + +# TODO +#: sysdeps/generic/siglist.h:37 sysdeps/unix/siglist.c:36 +#, fuzzy +msgid "Bus error" +msgstr "Безпричинна грешка" + +#: sysdeps/generic/siglist.h:38 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 sysdeps/gnu/errlist.c:359 +#: sysdeps/unix/siglist.c:39 +msgid "Broken pipe" +msgstr "ПрекъÑнат канал" + +#: sysdeps/generic/siglist.h:40 sysdeps/unix/siglist.c:40 +msgid "Alarm clock" +msgstr "" + +#: sysdeps/generic/siglist.h:41 sysdeps/unix/siglist.c:41 +msgid "Terminated" +msgstr "" + +#: sysdeps/generic/siglist.h:42 sysdeps/unix/siglist.c:42 +msgid "Urgent I/O condition" +msgstr "" + +#: sysdeps/generic/siglist.h:43 sysdeps/unix/siglist.c:43 +msgid "Stopped (signal)" +msgstr "" + +#: sysdeps/generic/siglist.h:44 sysdeps/unix/siglist.c:44 +msgid "Stopped" +msgstr "" + +#: sysdeps/generic/siglist.h:45 sysdeps/unix/siglist.c:45 +#, fuzzy +msgid "Continued" +msgstr "Отказано Ñвързване" + +#: sysdeps/generic/siglist.h:46 sysdeps/unix/siglist.c:46 +#, fuzzy +msgid "Child exited" +msgstr "Файлът ÑъщеÑтвува" + +#: sysdeps/generic/siglist.h:47 sysdeps/unix/siglist.c:47 +msgid "Stopped (tty input)" +msgstr "" + +#: sysdeps/generic/siglist.h:48 sysdeps/unix/siglist.c:48 +msgid "Stopped (tty output)" +msgstr "" + +#: sysdeps/generic/siglist.h:49 sysdeps/unix/siglist.c:49 +msgid "I/O possible" +msgstr "" + +#: sysdeps/generic/siglist.h:50 sysdeps/unix/siglist.c:50 +msgid "CPU time limit exceeded" +msgstr "" + +#: sysdeps/generic/siglist.h:51 sysdeps/unix/siglist.c:51 +#, fuzzy +msgid "File size limit exceeded" +msgstr "Ðадвишена диÑкова квота" + +#: sysdeps/generic/siglist.h:52 sysdeps/unix/siglist.c:52 +#, fuzzy +msgid "Virtual timer expired" +msgstr "Изтекъл таймер" + +#: sysdeps/generic/siglist.h:53 sysdeps/unix/siglist.c:53 +#, fuzzy +msgid "Profiling timer expired" +msgstr "Изтекъл таймер" + +#: sysdeps/generic/siglist.h:54 sysdeps/unix/siglist.c:54 +#, fuzzy +msgid "Window changed" +msgstr "Ðеправилен обмен" + +#: sysdeps/generic/siglist.h:55 sysdeps/unix/siglist.c:56 +msgid "User defined signal 1" +msgstr "" + +#: sysdeps/generic/siglist.h:56 sysdeps/unix/siglist.c:57 +msgid "User defined signal 2" +msgstr "" + +#: sysdeps/generic/siglist.h:60 sysdeps/unix/siglist.c:33 +msgid "EMT trap" +msgstr "" + +#: sysdeps/generic/siglist.h:63 sysdeps/unix/siglist.c:38 +#, fuzzy +msgid "Bad system call" +msgstr "ПрекъÑнато ÑиÑтемно извикване" + +#: sysdeps/generic/siglist.h:66 +msgid "Stack fault" +msgstr "" + +#: sysdeps/generic/siglist.h:69 +#, fuzzy +msgid "Information request" +msgstr "Ðеправилен код на заÑвка" + +#: sysdeps/generic/siglist.h:71 +msgid "Power failure" +msgstr "" + +#: sysdeps/generic/siglist.h:74 sysdeps/unix/siglist.c:55 +msgid "Resource lost" +msgstr "" + +#. TRANS Operation not permitted; only the owner of the file (or other resource) +#. TRANS or processes with special privileges can perform the operation. +#: sysdeps/gnu/errlist.c:25 +msgid "Operation not permitted" +msgstr "ДейÑтвието не е позволено" + +#. TRANS No process matches the specified process ID. +#: sysdeps/gnu/errlist.c:45 +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}. +#: sysdeps/gnu/errlist.c:60 +msgid "Interrupted system call" +msgstr "ПрекъÑнато ÑиÑтемно извикване" + +#. TRANS Input/output error; usually used for physical read or write errors. +#: sysdeps/gnu/errlist.c:69 +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. +#: sysdeps/gnu/errlist.c:82 +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. +#: sysdeps/gnu/errlist.c:94 +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}. +#: sysdeps/gnu/errlist.c:104 +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). +#: sysdeps/gnu/errlist.c:115 +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. +#: sysdeps/gnu/errlist.c:126 +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. +#: sysdeps/gnu/errlist.c:138 +msgid "Resource deadlock avoided" +msgstr "Избегнато безизходно положение при заделÑне на реÑурÑи" + +#. TRANS No memory available. The system cannot allocate more virtual memory +#. TRANS because its capacity is full. +#: sysdeps/gnu/errlist.c:148 +msgid "Cannot allocate memory" +msgstr "Ðе може да Ñе задели памет" + +#. TRANS Bad address; an invalid pointer was detected. +#. TRANS In the GNU system, this error never happens; you get a signal instead. +#: sysdeps/gnu/errlist.c:167 +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. +#: sysdeps/gnu/errlist.c:178 +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. +#: sysdeps/gnu/errlist.c:189 +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. +#: sysdeps/gnu/errlist.c:199 +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}). +#: sysdeps/gnu/errlist.c:210 +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. +#: sysdeps/gnu/errlist.c:220 +msgid "No such device" +msgstr "ÐÑма такова уÑтройÑтво" + +#. TRANS A file that isn't a directory was specified when a directory is required. +#: sysdeps/gnu/errlist.c:229 +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. +#: sysdeps/gnu/errlist.c:239 +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. +#: sysdeps/gnu/errlist.c:249 +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}. +#: sysdeps/gnu/errlist.c:264 +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. +#: sysdeps/gnu/errlist.c:275 +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. +#: sysdeps/gnu/errlist.c:285 +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. +#: sysdeps/gnu/errlist.c:298 +msgid "Text file busy" +msgstr "Зает текÑтов файл" + +#. TRANS File too big; the size of a file would be larger than allowed by the system. +#: sysdeps/gnu/errlist.c:307 +msgid "File too large" +msgstr "Твърде голÑм файл" + +#. TRANS No space left on device; write operation on a file failed because the +#. TRANS disk is full. +#: sysdeps/gnu/errlist.c:317 +msgid "No space left on device" +msgstr "ÐÑма Ñвободно мÑÑто на уÑтройÑтвото" + +#. TRANS Invalid seek operation (such as on a pipe). +#: sysdeps/gnu/errlist.c:326 +msgid "Illegal seek" +msgstr "Ðеправилно позициониране" + +#. TRANS An attempt was made to modify something on a read-only file system. +#: sysdeps/gnu/errlist.c:335 +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}). +#: sysdeps/gnu/errlist.c:346 +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. +#: sysdeps/gnu/errlist.c:369 +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. +#: sysdeps/gnu/errlist.c:379 +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 +#: sysdeps/gnu/errlist.c:416 +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. +#: sysdeps/gnu/errlist.c:429 +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}. +#: sysdeps/gnu/errlist.c:445 +msgid "Operation now in progress" +msgstr "ОперациÑта Ñе изпълнÑва" + +#. TRANS An operation is already in progress on an object that has non-blocking +#. TRANS mode selected. +#: sysdeps/gnu/errlist.c:455 +msgid "Operation already in progress" +msgstr "ОперациÑта вече Ñе изпълнÑва" + +#. TRANS A file that isn't a socket was specified when a socket is required. +#: sysdeps/gnu/errlist.c:464 +msgid "Socket operation on non-socket" +msgstr "ОперациÑта може да Ñе изпълнÑва Ñамо за гнездо (socket)" + +#. TRANS The size of a message sent on a socket was larger than the supported +#. TRANS maximum size. +#: sysdeps/gnu/errlist.c:474 +msgid "Message too long" +msgstr "Твърде дълго Ñъобщение" + +#. TRANS The socket type does not support the requested communications protocol. +#: sysdeps/gnu/errlist.c:483 +msgid "Protocol wrong type for socket" +msgstr "Ðеправилен тип протокол за гнездото (socket)" + +#. TRANS You specified a socket option that doesn't make sense for the +#. TRANS particular protocol being used by the socket. @xref{Socket Options}. +#: sysdeps/gnu/errlist.c:493 +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}. +#: sysdeps/gnu/errlist.c:504 +msgid "Protocol not supported" +msgstr "Ðеподдържан протокол" + +#. TRANS The socket type is not supported. +#: sysdeps/gnu/errlist.c:513 +msgid "Socket type not supported" +msgstr "Ðеподдържан тип гнездо (socket)" + +#. 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. +#: sysdeps/gnu/errlist.c:527 +msgid "Operation not supported" +msgstr "Ðеподдържана операциÑ" + +#. TRANS The socket communications protocol family you requested is not supported. +#: sysdeps/gnu/errlist.c:536 +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}. +#: sysdeps/gnu/errlist.c:546 +msgid "Address family not supported by protocol" +msgstr "Ðеподдържано адреÑно ÑемейÑтво от протокола" + +#. TRANS The requested socket address is already in use. @xref{Socket Addresses}. +#: sysdeps/gnu/errlist.c:555 +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}. +#: sysdeps/gnu/errlist.c:566 +msgid "Cannot assign requested address" +msgstr "ÐедоÑтъпен Ð°Ð´Ñ€ÐµÑ Ð½Ð° гнездо (socket)" + +# TODO +#. TRANS A socket operation failed because the network was down. +#: sysdeps/gnu/errlist.c:575 +msgid "Network is down" +msgstr "Мрежата е изключена" + +# TODO +#. TRANS A socket operation failed because the subnet containing the remote host +#. TRANS was unreachable. +#: sysdeps/gnu/errlist.c:585 +msgid "Network is unreachable" +msgstr "Мрежата е недоÑтъпна" + +#. TRANS A network connection was reset because the remote host crashed. +#: sysdeps/gnu/errlist.c:594 +msgid "Network dropped connection on reset" +msgstr "ПрекъÑнато мрежова връзка поради реÑтартиране" + +#. TRANS A network connection was aborted locally. +#: sysdeps/gnu/errlist.c:603 +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. +#: sysdeps/gnu/errlist.c:614 +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. +#: sysdeps/gnu/errlist.c:625 +msgid "No buffer space available" +msgstr "ÐÑма Ñвободно мÑÑто за буфер" + +#. TRANS You tried to connect a socket that is already connected. +#. TRANS @xref{Connecting}. +#: sysdeps/gnu/errlist.c:635 +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. +#: sysdeps/gnu/errlist.c:647 +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}. +#: sysdeps/gnu/errlist.c:658 +msgid "Destination address required" +msgstr "Ðеобходим е целеви адреÑ" + +# TODO +#. TRANS The socket has already been shut down. +#: sysdeps/gnu/errlist.c:667 +msgid "Cannot send after transport endpoint shutdown" +msgstr "Ðе може да Ñе изпраща Ñлед изключване на крайната точка на транÑпорта" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:676 +msgid "Too many references: cannot splice" +msgstr "Твърде много препратки: не могат да Ñе наÑтавÑÑ‚" + +#. TRANS A socket operation with a specified timeout received no response during +#. TRANS the timeout period. +#: sysdeps/gnu/errlist.c:686 +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). +#: sysdeps/gnu/errlist.c:696 +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. +#: sysdeps/gnu/errlist.c:706 +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}). +#: sysdeps/gnu/errlist.c:717 +msgid "File name too long" +msgstr "Твърде дълго файлово име" + +#. TRANS The remote host for a requested network connection is down. +#: sysdeps/gnu/errlist.c:726 +msgid "Host is down" +msgstr "ХоÑÑ‚ÑŠÑ‚ е изключен" + +#. TRANS The remote host for a requested network connection is not reachable. +#: sysdeps/gnu/errlist.c:735 +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. +#: sysdeps/gnu/errlist.c:745 +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. +#: sysdeps/gnu/errlist.c:756 +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. +#: sysdeps/gnu/errlist.c:766 +msgid "Too many users" +msgstr "Твърде много потребители" + +#. TRANS The user's disk quota was exceeded. +#: sysdeps/gnu/errlist.c:775 +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. +#: sysdeps/gnu/errlist.c:787 +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.) +#: sysdeps/gnu/errlist.c:799 +msgid "Object is remote" +msgstr "Обектът е отдалечен" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:808 +msgid "RPC struct is bad" +msgstr "Ðеправилна RPC-Ñтруктура" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:817 +msgid "RPC version wrong" +msgstr "Ðеправилна верÑÐ¸Ñ Ð½Ð° RPC" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:826 +msgid "RPC program not available" +msgstr "ÐедоÑтъпна RPC-програма" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:835 +msgid "RPC program version wrong" +msgstr "Ðеправилна верÑÐ¸Ñ Ð½Ð° RPC-програма" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:844 +msgid "RPC bad procedure for program" +msgstr "Ðеправилна процедура за програма (RPC)" + +#. 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. +#: sysdeps/gnu/errlist.c:856 +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}. +#: sysdeps/gnu/errlist.c:869 +msgid "Inappropriate file type or format" +msgstr "ÐеподходÑщ файлов тип или формат" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:878 +msgid "Authentication error" +msgstr "Грешка при удоÑтоверÑване (authentication)" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:887 +msgid "Need authenticator" +msgstr "Ðеобходим е удоÑтоверител (authenticator)" + +#. 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. +#: sysdeps/gnu/errlist.c:900 +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. +#: sysdeps/gnu/errlist.c:920 +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. +#: sysdeps/gnu/errlist.c:930 +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. +#: sysdeps/gnu/errlist.c:944 +msgid "Inappropriate operation for background process" +msgstr "ÐеподходÑща Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð·Ð° фонов процеÑ" + +# TODO +#. 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. +#: sysdeps/gnu/errlist.c:955 +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. +#: sysdeps/gnu/errlist.c:966 +msgid "?" +msgstr "?" + +#. TRANS You did @strong{what}? +#: sysdeps/gnu/errlist.c:975 +msgid "You really blew it this time" +msgstr "Този път наиÑтина Ñе издънихте" + +# TODO: +# умрÑ, почина, Ñе помина, Ñе Ñпомина, загина, Ñи отиде, Ñи замина, +# пукна, Ñе гътна, геберÑÑа +# +# Има и евфемизми, но вÑичките ми звучат грозно и миÑлÑ, че Ñа +# неподходÑщи. (Ð.З.) +#. TRANS Go home and have a glass of warm, dairy-fresh milk. +#: sysdeps/gnu/errlist.c:984 +msgid "Computer bought the farm" +msgstr "Компютърът Ñе Ñпомина" + +# TODO +#. TRANS This error code has no purpose. +#: sysdeps/gnu/errlist.c:993 +msgid "Gratuitous error" +msgstr "Безпричинна грешка" + +#: sysdeps/gnu/errlist.c:1001 +msgid "Bad message" +msgstr "Лошо Ñъобщение" + +#: sysdeps/gnu/errlist.c:1009 +msgid "Identifier removed" +msgstr "ОтÑтранен идентификатор" + +# TODO +#: sysdeps/gnu/errlist.c:1017 +msgid "Multihop attempted" +msgstr "Опитва Ñе multihop" + +#: sysdeps/gnu/errlist.c:1025 +msgid "No data available" +msgstr "ÐÑма налични данни" + +#: sysdeps/gnu/errlist.c:1033 +msgid "Link has been severed" +msgstr "Връзката Ñе разпадна" + +#: sysdeps/gnu/errlist.c:1041 +msgid "No message of desired type" +msgstr "ÐÑма Ñъобщение от Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¸Ñ Ð²Ð¸Ð´" + +#: sysdeps/gnu/errlist.c:1049 +msgid "Out of streams resources" +msgstr "Изчерпване на реÑурÑите за потоци" + +#: sysdeps/gnu/errlist.c:1057 +msgid "Device not a stream" +msgstr "УÑтройÑтвото не е поток" + +#: sysdeps/gnu/errlist.c:1065 +msgid "Value too large for defined data type" +msgstr "Твърде голÑма ÑтойноÑÑ‚ за Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿ данни" + +#: sysdeps/gnu/errlist.c:1073 +msgid "Protocol error" +msgstr "Протоколна грешка" + +#: sysdeps/gnu/errlist.c:1081 +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}. +#: sysdeps/gnu/errlist.c:1093 +msgid "Operation canceled" +msgstr "Отменена операциÑ" + +#: sysdeps/gnu/errlist.c:1101 +msgid "Interrupted system call should be restarted" +msgstr "ПрекъÑнатото ÑиÑтемно извикване Ñ‚Ñ€Ñбва да бъде реÑтартирано" + +#: sysdeps/gnu/errlist.c:1109 +msgid "Channel number out of range" +msgstr "Ðомер на канал извън диапазона" + +#: sysdeps/gnu/errlist.c:1117 +msgid "Level 2 not synchronized" +msgstr "Ðиво 2 — Ñинхронизирано" + +#: sysdeps/gnu/errlist.c:1125 +msgid "Level 3 halted" +msgstr "Ðиво 3 — преуÑтановено" + +#: sysdeps/gnu/errlist.c:1133 +msgid "Level 3 reset" +msgstr "Ðиво 3 — реÑтартирано" + +#: sysdeps/gnu/errlist.c:1141 +msgid "Link number out of range" +msgstr "Ðомер на връзка извън диапазона" + +#: sysdeps/gnu/errlist.c:1149 +msgid "Protocol driver not attached" +msgstr "ÐеÑвързан протоколен драйвер" + +#: sysdeps/gnu/errlist.c:1157 +msgid "No CSI structure available" +msgstr "Ðе е налична CSI-Ñтруктура" + +#: sysdeps/gnu/errlist.c:1165 +msgid "Level 2 halted" +msgstr "Ðиво 2 — преуÑтановено" + +#: sysdeps/gnu/errlist.c:1173 +msgid "Invalid exchange" +msgstr "Ðеправилен обмен" + +#: sysdeps/gnu/errlist.c:1181 +msgid "Invalid request descriptor" +msgstr "Ðеправилен деÑкриптор на заÑвка" + +# TODO +#: sysdeps/gnu/errlist.c:1189 +msgid "Exchange full" +msgstr "Пълен обмен" + +#: sysdeps/gnu/errlist.c:1197 +msgid "No anode" +msgstr "ÐÑма анод" + +#: sysdeps/gnu/errlist.c:1205 +msgid "Invalid request code" +msgstr "Ðеправилен код на заÑвка" + +#: sysdeps/gnu/errlist.c:1213 +msgid "Invalid slot" +msgstr "Ðеправилен Ñлот" + +#: sysdeps/gnu/errlist.c:1221 +msgid "File locking deadlock error" +msgstr "Грешка от безизходно положение при заключване на файлове" + +#: sysdeps/gnu/errlist.c:1229 +msgid "Bad font file format" +msgstr "Ðеправилен формат на шрифтов файл" + +#: sysdeps/gnu/errlist.c:1237 +msgid "Machine is not on the network" +msgstr "Машината не е в мрежа" + +#: sysdeps/gnu/errlist.c:1245 +msgid "Package not installed" +msgstr "Пакетът не е инÑталиран" + +# TODO +#: sysdeps/gnu/errlist.c:1253 +msgid "Advertise error" +msgstr "Грешка при оÑведомÑване" + +# TODO +#: sysdeps/gnu/errlist.c:1261 +msgid "Srmount error" +msgstr "Грешка при srmount" + +#: sysdeps/gnu/errlist.c:1269 +msgid "Communication error on send" +msgstr "Комуникационна грешка при изпращане" + +#: sysdeps/gnu/errlist.c:1277 +msgid "RFS specific error" +msgstr "RFS-грешка" + +#: sysdeps/gnu/errlist.c:1285 +msgid "Name not unique on network" +msgstr "Името не е уникално в мрежата" + +#: sysdeps/gnu/errlist.c:1293 +msgid "File descriptor in bad state" +msgstr "ФайловиÑÑ‚ деÑкриптор е в лошо ÑÑŠÑтоÑние" + +#: sysdeps/gnu/errlist.c:1301 +msgid "Remote address changed" +msgstr "ОтдалечениÑÑ‚ Ð°Ð´Ñ€ÐµÑ Ðµ Ñменен" + +#: sysdeps/gnu/errlist.c:1309 +msgid "Can not access a needed shared library" +msgstr "Ðе може да бъде доÑтъпена необходима Ñподелена библиотека" + +#: sysdeps/gnu/errlist.c:1317 +msgid "Accessing a corrupted shared library" +msgstr "ДоÑтъпва Ñе повредена Ñподелена библиотека" + +#: sysdeps/gnu/errlist.c:1325 +msgid ".lib section in a.out corrupted" +msgstr "Повреден .lib-раздел в a.out" + +#: sysdeps/gnu/errlist.c:1333 +msgid "Attempting to link in too many shared libraries" +msgstr "Опитва Ñе Ñвързване в твърде много Ñподелени библиотеки" + +#: sysdeps/gnu/errlist.c:1341 +msgid "Cannot exec a shared library directly" +msgstr "Ðе може да Ñе изпълнÑва директно Ñподелена библиотека" + +#: sysdeps/gnu/errlist.c:1349 +msgid "Streams pipe error" +msgstr "Канална грешка при потоци" + +#: sysdeps/gnu/errlist.c:1357 +msgid "Structure needs cleaning" +msgstr "Структурата Ñе нуждае от почиÑтване" + +# TODO +#: sysdeps/gnu/errlist.c:1365 +msgid "Not a XENIX named type file" +msgstr "Ðе е XENIX-именован типов файл" + +#: sysdeps/gnu/errlist.c:1373 +msgid "No XENIX semaphores available" +msgstr "ÐÑма налични XENIX-Ñемафори" + +#: sysdeps/gnu/errlist.c:1381 +msgid "Is a named type file" +msgstr "Именован типов файл е" + +#: sysdeps/gnu/errlist.c:1389 +msgid "Remote I/O error" +msgstr "Отдалечена входно-изходна грешка" + +#: sysdeps/gnu/errlist.c:1397 +msgid "No medium found" +msgstr "Ðе е открит ноÑител" + +#: sysdeps/gnu/errlist.c:1405 +msgid "Wrong medium type" +msgstr "Ðеправилен тип на ноÑител" + +#: sysdeps/gnu/errlist.c:1413 +msgid "Required key not available" +msgstr "Ðеобходим ключ не е наличен" + +#: sysdeps/gnu/errlist.c:1421 +msgid "Key has expired" +msgstr "Ключът е Ñ Ð¸Ð·Ñ‚ÐµÐºÑŠÐ» Ñрок" + +#: sysdeps/gnu/errlist.c:1429 +msgid "Key has been revoked" +msgstr "Ключът е бил анулиран" + +#: sysdeps/gnu/errlist.c:1437 +msgid "Key was rejected by service" +msgstr "Ключът е отказан от уÑлугата" + +#: sysdeps/gnu/errlist.c:1445 +msgid "Owner died" +msgstr "СобÑтвеникът умрÑ" + +#: sysdeps/gnu/errlist.c:1453 +msgid "State not recoverable" +msgstr "СъÑтоÑнието не възÑтановимо" + +#: sysdeps/mach/_strerror.c:57 +msgid "Error in unknown error system: " +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:1 +#, fuzzy +msgid "Address family for hostname not supported" +msgstr "Ðеподдържано адреÑно ÑемейÑтво от протокола" + +#: sysdeps/posix/gai_strerror-strs.h:2 +msgid "Temporary failure in name resolution" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:3 +msgid "Bad value for ai_flags" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:4 +msgid "Non-recoverable failure in name resolution" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:5 +#, fuzzy +msgid "ai_family not supported" +msgstr "Ðеподдържано ÑемейÑтво протоколи" + +#: sysdeps/posix/gai_strerror-strs.h:6 +msgid "Memory allocation failure" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:7 +msgid "No address associated with hostname" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:8 +msgid "Name or service not known" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:9 +msgid "Servname not supported for ai_socktype" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:10 +#, fuzzy +msgid "ai_socktype not supported" +msgstr "Ðеподдържан тип гнездо (socket)" + +#: sysdeps/posix/gai_strerror-strs.h:11 +#, fuzzy +msgid "System error" +msgstr "Канална грешка при потоци" + +#: sysdeps/posix/gai_strerror-strs.h:12 +#, fuzzy +msgid "Processing request in progress" +msgstr "ОперациÑта вече Ñе изпълнÑва" + +#: sysdeps/posix/gai_strerror-strs.h:13 +#, fuzzy +msgid "Request canceled" +msgstr "Отменена операциÑ" + +#: sysdeps/posix/gai_strerror-strs.h:14 +#, fuzzy +msgid "Request not canceled" +msgstr "Отменена операциÑ" + +#: sysdeps/posix/gai_strerror-strs.h:15 +#, fuzzy +msgid "All requests done" +msgstr "Ðеправилен код на заÑвка" + +#: sysdeps/posix/gai_strerror-strs.h:16 +#, fuzzy +msgid "Interrupted by a signal" +msgstr "ПрекъÑнато ÑиÑтемно извикване" + +#: sysdeps/posix/gai_strerror-strs.h:17 +msgid "Parameter string not correctly encoded" +msgstr "" + +#: sysdeps/unix/siglist.c:26 +msgid "Signal 0" +msgstr "" + +#: sysdeps/unix/siglist.c:32 +msgid "IOT trap" +msgstr "" + +#: sysdeps/unix/sysv/linux/i386/readelflib.c:49 +#, c-format +msgid "%s is for unknown machine %d.\n" +msgstr "" + +#: sysdeps/unix/sysv/linux/ia64/makecontext.c:63 +#, c-format +msgid "makecontext: does not know how to handle more than 8 arguments\n" +msgstr "" + +#: sysdeps/unix/sysv/linux/lddlibc4.c:64 +#, c-format +msgid "cannot open `%s'" +msgstr "" + +#: sysdeps/unix/sysv/linux/lddlibc4.c:68 +#, c-format +msgid "cannot read header from `%s'" +msgstr "" + +#: timezone/zdump.c:211 +msgid "lacks alphabetic at start" +msgstr "" + +#: timezone/zdump.c:213 +msgid "has fewer than 3 alphabetics" +msgstr "" + +#: timezone/zdump.c:215 +msgid "has more than 6 alphabetics" +msgstr "" + +#: timezone/zdump.c:223 +msgid "differs from POSIX standard" +msgstr "" + +#: timezone/zdump.c:229 +#, c-format +msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n" +msgstr "" + +#: timezone/zdump.c:280 +#, c-format +msgid "%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n" +msgstr "" + +#: timezone/zdump.c:297 +#, c-format +msgid "%s: wild -c argument %s\n" +msgstr "" + +#: timezone/zdump.c:388 +msgid "Error writing to standard output" +msgstr "" + +#: timezone/zdump.c:411 +#, c-format +msgid "%s: use of -v on system with floating time_t other than float or double\n" +msgstr "" + +#: timezone/zic.c:392 +#, c-format +msgid "%s: Memory exhausted: %s\n" +msgstr "" + +#: timezone/zic.c:451 +#, c-format +msgid "\"%s\", line %d: %s" +msgstr "" + +#: timezone/zic.c:454 +#, c-format +msgid " (rule from \"%s\", line %d)" +msgstr "" + +#: timezone/zic.c:466 +msgid "warning: " +msgstr "" + +#: timezone/zic.c:476 +#, c-format +msgid "" +"%s: usage is %s [ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" +"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" +msgstr "" + +#: timezone/zic.c:511 +msgid "wild compilation-time specification of zic_t" +msgstr "" + +#: timezone/zic.c:528 +#, c-format +msgid "%s: More than one -d option specified\n" +msgstr "" + +#: timezone/zic.c:538 +#, c-format +msgid "%s: More than one -l option specified\n" +msgstr "" + +#: timezone/zic.c:548 +#, c-format +msgid "%s: More than one -p option specified\n" +msgstr "" + +#: timezone/zic.c:558 +#, c-format +msgid "%s: More than one -y option specified\n" +msgstr "" + +#: timezone/zic.c:568 +#, c-format +msgid "%s: More than one -L option specified\n" +msgstr "" + +#: timezone/zic.c:617 +msgid "link to link" +msgstr "" + +#: timezone/zic.c:682 +msgid "hard link failed, symbolic link used" +msgstr "" + +#: timezone/zic.c:690 +#, c-format +msgid "%s: Can't link from %s to %s: %s\n" +msgstr "" + +#: timezone/zic.c:762 timezone/zic.c:764 +#, fuzzy +msgid "same rule name in multiple files" +msgstr "Именован типов файл е" + +#: timezone/zic.c:805 +msgid "unruly zone" +msgstr "" + +#: timezone/zic.c:812 +#, c-format +msgid "%s in ruleless zone" +msgstr "" + +#: timezone/zic.c:833 +msgid "standard input" +msgstr "" + +#: timezone/zic.c:838 +#, c-format +msgid "%s: Can't open %s: %s\n" +msgstr "" + +#: timezone/zic.c:849 +#, fuzzy +msgid "line too long" +msgstr "Твърде дълго файлово име" + +#: timezone/zic.c:869 +msgid "input line of unknown type" +msgstr "" + +#: timezone/zic.c:885 +#, c-format +msgid "%s: Leap line in non leap seconds file %s\n" +msgstr "" + +#: timezone/zic.c:892 timezone/zic.c:1323 timezone/zic.c:1345 +#, c-format +msgid "%s: panic: Invalid l_value %d\n" +msgstr "" + +#: timezone/zic.c:900 +#, c-format +msgid "%s: Error reading %s\n" +msgstr "" + +#: timezone/zic.c:907 +#, c-format +msgid "%s: Error closing %s: %s\n" +msgstr "" + +#: timezone/zic.c:912 +msgid "expected continuation line not found" +msgstr "" + +#: timezone/zic.c:956 +msgid "24:00 not handled by pre-1998 versions of zic" +msgstr "" + +#: timezone/zic.c:970 +msgid "wrong number of fields on Rule line" +msgstr "" + +#: timezone/zic.c:974 +msgid "nameless rule" +msgstr "" + +#: timezone/zic.c:979 +#, fuzzy +msgid "invalid saved time" +msgstr "Ðеправилен Ñлот" + +#: timezone/zic.c:1000 +msgid "wrong number of fields on Zone line" +msgstr "" + +#: timezone/zic.c:1006 +#, c-format +msgid "\"Zone %s\" line and -l option are mutually exclusive" +msgstr "" + +#: timezone/zic.c:1014 +#, c-format +msgid "\"Zone %s\" line and -p option are mutually exclusive" +msgstr "" + +#: timezone/zic.c:1026 +#, c-format +msgid "duplicate zone name %s (file \"%s\", line %d)" +msgstr "" + +#: timezone/zic.c:1042 +msgid "wrong number of fields on Zone continuation line" +msgstr "" + +#: timezone/zic.c:1082 +#, fuzzy +msgid "invalid UTC offset" +msgstr "Ðеправилен Ñлот" + +#: timezone/zic.c:1085 +msgid "invalid abbreviation format" +msgstr "" + +#: timezone/zic.c:1114 +msgid "Zone continuation line end time is not after end time of previous line" +msgstr "" + +#: timezone/zic.c:1142 +msgid "wrong number of fields on Leap line" +msgstr "" + +#: timezone/zic.c:1151 +#, fuzzy +msgid "invalid leaping year" +msgstr "Ðеправилен обмен" + +#: timezone/zic.c:1171 timezone/zic.c:1277 +#, fuzzy +msgid "invalid month name" +msgstr "Ðеправилен Ñлот" + +#: timezone/zic.c:1184 timezone/zic.c:1390 timezone/zic.c:1404 +#, fuzzy +msgid "invalid day of month" +msgstr "Ðеправилен аргумент" + +#: timezone/zic.c:1189 +msgid "time before zero" +msgstr "" + +#: timezone/zic.c:1193 +msgid "time too small" +msgstr "" + +#: timezone/zic.c:1197 +#, fuzzy +msgid "time too large" +msgstr "Твърде голÑм файл" + +#: timezone/zic.c:1201 timezone/zic.c:1306 +msgid "invalid time of day" +msgstr "" + +#: timezone/zic.c:1220 +msgid "illegal CORRECTION field on Leap line" +msgstr "" + +#: timezone/zic.c:1225 +msgid "illegal Rolling/Stationary field on Leap line" +msgstr "" + +#: timezone/zic.c:1241 +msgid "wrong number of fields on Link line" +msgstr "" + +#: timezone/zic.c:1245 +msgid "blank FROM field on Link line" +msgstr "" + +#: timezone/zic.c:1249 +msgid "blank TO field on Link line" +msgstr "" + +#: timezone/zic.c:1327 +msgid "invalid starting year" +msgstr "" + +#: timezone/zic.c:1349 +#, fuzzy +msgid "invalid ending year" +msgstr "Ðеправилен обмен" + +#: timezone/zic.c:1353 +msgid "starting year greater than ending year" +msgstr "" + +#: timezone/zic.c:1360 +msgid "typed single year" +msgstr "" + +#: timezone/zic.c:1395 +#, fuzzy +msgid "invalid weekday name" +msgstr "Ðеправилен обмен" + +#: timezone/zic.c:1573 +#, c-format +msgid "%s: Can't remove %s: %s\n" +msgstr "" + +#: timezone/zic.c:1583 +#, c-format +msgid "%s: Can't create %s: %s\n" +msgstr "" + +#: timezone/zic.c:1733 +#, c-format +msgid "%s: Error writing %s\n" +msgstr "" + +#: timezone/zic.c:2025 +msgid "no POSIX environment variable for zone" +msgstr "" + +#: timezone/zic.c:2179 +msgid "can't determine time zone abbreviation to use just after until time" +msgstr "" + +#: timezone/zic.c:2225 +#, fuzzy +msgid "too many transitions?!" +msgstr "Твърде много връзки" + +#: timezone/zic.c:2244 +msgid "internal error - addtype called with bad isdst" +msgstr "" + +#: timezone/zic.c:2248 +msgid "internal error - addtype called with bad ttisstd" +msgstr "" + +#: timezone/zic.c:2252 +msgid "internal error - addtype called with bad ttisgmt" +msgstr "" + +#: timezone/zic.c:2271 +#, fuzzy +msgid "too many local time types" +msgstr "Твърде много процеÑи" + +#: timezone/zic.c:2299 +#, fuzzy +msgid "too many leap seconds" +msgstr "Твърде много връзки" + +#: timezone/zic.c:2305 +msgid "repeated leap second moment" +msgstr "" + +#: timezone/zic.c:2357 +msgid "Wild result from command execution" +msgstr "" + +#: timezone/zic.c:2358 +#, c-format +msgid "%s: command was '%s', result was %d\n" +msgstr "" + +#: timezone/zic.c:2456 +msgid "Odd number of quotation marks" +msgstr "" + +#: timezone/zic.c:2479 timezone/zic.c:2498 +msgid "time overflow" +msgstr "" + +#: timezone/zic.c:2545 +msgid "use of 2/29 in non leap-year" +msgstr "" + +#: timezone/zic.c:2580 +msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic" +msgstr "" + +#: timezone/zic.c:2612 +msgid "time zone abbreviation lacks alphabetic at start" +msgstr "" + +#: timezone/zic.c:2614 +msgid "time zone abbreviation has more than 3 alphabetics" +msgstr "" + +#: timezone/zic.c:2616 +msgid "time zone abbreviation has too many alphabetics" +msgstr "" + +#: timezone/zic.c:2626 +msgid "time zone abbreviation differs from POSIX standard" +msgstr "" + +#: timezone/zic.c:2638 +msgid "too many, or too long, time zone abbreviations" +msgstr "" + +#: timezone/zic.c:2679 +#, c-format +msgid "%s: Can't create directory %s: %s\n" +msgstr "" + +#: timezone/zic.c:2701 +#, c-format +msgid "%s: %d did not sign extend correctly\n" +msgstr "" diff --git a/libc/po/nl.po b/libc/po/nl.po index 2ce78d8e6..d4f4518bc 100644 --- a/libc/po/nl.po +++ b/libc/po/nl.po @@ -1,66 +1,66 @@ -# Translation of libc-2.5 to Dutch. -# Copyright (C) 2004, 2006 Free Software Foundation, Inc. +# Translation of libc-2.6.1 to Dutch. +# Copyright (C) 2004, 2006, 2007 Free Software Foundation, Inc. # Elros Cyriatan <cyriatan@fastmail.fm>, 2004. -# Benno Schulenberg <benno@nietvergeten.nl>, 2006. +# Benno Schulenberg <benno@vertaalt.nl>, 2006, 2007. # msgid "" msgstr "" -"Project-Id-Version: libc 2.5\n" +"Project-Id-Version: libc 2.6.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-09-29 11:38-0700\n" -"PO-Revision-Date: 2006-11-14 19:50+0100\n" -"Last-Translator: Benno Schulenberg <benno@nietvergeten.nl>\n" +"POT-Creation-Date: 2007-08-04 11:37+0200\n" +"PO-Revision-Date: 2007-08-15 22:44+0200\n" +"Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n" "Language-Team: Dutch <vertaling@vrijschrift.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.11.4\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: argp/argp-help.c:227 +#: argp/argp-help.c:228 #, c-format msgid "%.*s: ARGP_HELP_FMT parameter requires a value" -msgstr "%.*s: Parameter van ARGP_HELP_FMT vereist een waarde" +msgstr "%.*s: Parameter in ARGP_HELP_FMT vereist een waarde" -#: argp/argp-help.c:237 +#: argp/argp-help.c:238 #, c-format msgid "%.*s: Unknown ARGP_HELP_FMT parameter" -msgstr "%.*s: Onbekende parameter van ARGP_HELP_FMT" +msgstr "%.*s: Onbekende parameter in ARGP_HELP_FMT" -#: argp/argp-help.c:250 +#: argp/argp-help.c:251 #, c-format msgid "Garbage in ARGP_HELP_FMT: %s" msgstr "Rommel in ARGP_HELP_FMT: %s" -#: argp/argp-help.c:1214 +#: argp/argp-help.c:1215 msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." msgstr "" "Een argument dat verplicht of optioneel is voor een lange optie, is dat\n" "ook voor de overeenkomstige korte optie." -#: argp/argp-help.c:1600 +#: argp/argp-help.c:1601 msgid "Usage:" msgstr "Gebruik: " -#: argp/argp-help.c:1604 +#: argp/argp-help.c:1605 msgid " or: " msgstr " of: " -#: argp/argp-help.c:1616 +#: argp/argp-help.c:1617 msgid " [OPTION...]" msgstr " [OPTIE...]" -#: argp/argp-help.c:1643 +#: argp/argp-help.c:1644 #, c-format msgid "Try `%s --help' or `%s --usage' for more information.\n" -msgstr "Probeer '%s --help' of '%s --usage' voor meer informatie.\n" +msgstr "Typ '%s --help' of '%s --usage' voor meer informatie.\n" -#: argp/argp-help.c:1671 +#: argp/argp-help.c:1672 #, c-format msgid "Report bugs to %s.\n" msgstr "" -"Rapporteer fouten in het programma aan %s,\n" -"en gebreken in de vertaling aan <vertaling@vrijschrift.org>.\n" +"Rapporteer gebreken in het programma aan %s;\n" +"meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" #: argp/argp-parse.c:102 msgid "Give this help list" @@ -68,7 +68,7 @@ msgstr "deze hulptekst tonen" #: argp/argp-parse.c:103 msgid "Give a short usage message" -msgstr "een kort gebruiksbericht tonen" +msgstr "een korte gebruikssamenvatting tonen" #: argp/argp-parse.c:104 msgid "Set the program name" @@ -105,33 +105,32 @@ msgstr "%s%s%s:%u: %s%sOnverwachte fout: %s.\n" msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" msgstr "%s%s%s:%u: %s%sControletest '%s' faalt.\n" -#: catgets/gencat.c:109 catgets/gencat.c:113 nscd/nscd.c:96 nss/makedb.c:61 +#: catgets/gencat.c:110 catgets/gencat.c:114 nscd/nscd.c:97 nss/makedb.c:61 msgid "NAME" msgstr "NAAM" -#: catgets/gencat.c:110 +#: catgets/gencat.c:111 msgid "Create C header file NAME containing symbol definitions" msgstr "headerbestand met symbooldefinities aanmaken" -#: catgets/gencat.c:112 +#: catgets/gencat.c:113 msgid "Do not use existing catalog, force new output file" msgstr "bestaande catalogus niet gebruiken; een nieuw uitvoerbestand afdwingen" -#: catgets/gencat.c:113 nss/makedb.c:61 +#: catgets/gencat.c:114 nss/makedb.c:61 msgid "Write output to file NAME" msgstr "uitvoer naar dit bestand schrijven" -#: catgets/gencat.c:118 +#: catgets/gencat.c:119 msgid "" -"Generate message catalog.If INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" +"Generate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" "is -, output is written to standard output.\n" msgstr "" -"Een berichtencatalogus genereren.\n" -"\n" -"Als INVOERBESTAND '-' is, wordt van standaardinvoer gelezen.\n" +" \n" +"Een berichtencatalogus genereren.\vAls INVOERBESTAND '-' is, wordt van standaardinvoer gelezen.\n" "Als UITVOERBESTAND '-' is, wordt naar standaarduitvoer geschreven.\n" -#: catgets/gencat.c:123 +#: catgets/gencat.c:124 msgid "" "-o OUTPUT-FILE [INPUT-FILE]...\n" "[OUTPUT-FILE [INPUT-FILE]...]" @@ -139,9 +138,9 @@ msgstr "" "-o UITVOERBESTAND [INVOERBESTAND...]\n" "[UITVOERBESTAND [INVOERBESTAND...]]" -#: catgets/gencat.c:231 debug/pcprofiledump.c:199 iconv/iconv_prog.c:410 -#: iconv/iconvconfig.c:379 locale/programs/localedef.c:370 -#: login/programs/pt_chown.c:88 malloc/memusagestat.c:525 nss/makedb.c:231 +#: catgets/gencat.c:232 debug/pcprofiledump.c:199 iconv/iconv_prog.c:411 +#: iconv/iconvconfig.c:380 locale/programs/localedef.c:371 +#: login/programs/pt_chown.c:88 malloc/memusagestat.c:526 nss/makedb.c:231 msgid "" "For bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" @@ -149,12 +148,12 @@ msgstr "" "Voor het rapporteren van fouten, zie:\n" " <http://www.gnu.org/software/libc/bugs.html>.\n" -#: catgets/gencat.c:245 debug/xtrace.sh:64 elf/ldconfig.c:285 -#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:425 -#: iconv/iconvconfig.c:394 locale/programs/locale.c:274 -#: locale/programs/localedef.c:386 login/programs/pt_chown.c:59 -#: malloc/memusage.sh:71 nscd/nscd.c:401 nss/getent.c:83 nss/makedb.c:245 -#: posix/getconf.c:1007 +#: catgets/gencat.c:246 debug/xtrace.sh:64 elf/ldconfig.c:287 +#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:426 +#: iconv/iconvconfig.c:395 locale/programs/locale.c:275 +#: locale/programs/localedef.c:387 login/programs/pt_chown.c:59 +#: malloc/memusage.sh:71 nscd/nscd.c:406 nss/getent.c:83 nss/makedb.c:245 +#: posix/getconf.c:1012 #, c-format msgid "" "Copyright (C) %s Free Software Foundation, Inc.\n" @@ -166,94 +165,94 @@ msgstr "" "Er is GEEN garantie; zelfs niet van VERKOOPBAARHEID of GESCHIKTHEID\n" "VOOR EEN BEPAALD DOEL.\n" -#: catgets/gencat.c:250 debug/xtrace.sh:68 elf/ldconfig.c:290 elf/sprof.c:361 -#: iconv/iconv_prog.c:430 iconv/iconvconfig.c:399 locale/programs/locale.c:279 -#: locale/programs/localedef.c:391 malloc/memusage.sh:75 nscd/nscd.c:406 -#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1012 +#: catgets/gencat.c:251 debug/xtrace.sh:68 elf/ldconfig.c:292 elf/sprof.c:361 +#: iconv/iconv_prog.c:431 iconv/iconvconfig.c:400 locale/programs/locale.c:280 +#: locale/programs/localedef.c:392 malloc/memusage.sh:75 nscd/nscd.c:411 +#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1017 #, c-format msgid "Written by %s.\n" msgstr "Geschreven door %s.\n" -#: catgets/gencat.c:281 +#: catgets/gencat.c:282 msgid "*standard input*" msgstr "*standaardinvoer*" -#: catgets/gencat.c:287 iconv/iconv_charmap.c:157 iconv/iconv_prog.c:297 +#: catgets/gencat.c:288 iconv/iconv_charmap.c:158 iconv/iconv_prog.c:298 #: nss/makedb.c:170 #, c-format msgid "cannot open input file `%s'" msgstr "kan invoerbestand '%s' niet openen" -#: catgets/gencat.c:416 catgets/gencat.c:493 +#: catgets/gencat.c:417 catgets/gencat.c:494 msgid "illegal set number" msgstr "ongeldig verzamelingsnummer" -#: catgets/gencat.c:443 +#: catgets/gencat.c:444 msgid "duplicate set definition" msgstr "dubbele verzamelingsdefinitie" -#: catgets/gencat.c:445 catgets/gencat.c:622 catgets/gencat.c:676 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677 msgid "this is the first definition" msgstr "dit is de eerste definitie" -#: catgets/gencat.c:521 +#: catgets/gencat.c:522 #, c-format msgid "unknown set `%s'" msgstr "onbekende verzameling '%s'" -#: catgets/gencat.c:562 +#: catgets/gencat.c:563 msgid "invalid quote character" msgstr "ongeldig aanhalingsteken" -#: catgets/gencat.c:575 +#: catgets/gencat.c:576 #, c-format msgid "unknown directive `%s': line ignored" msgstr "onbekende richting '%s'; regel is genegeerd" -#: catgets/gencat.c:620 +#: catgets/gencat.c:621 msgid "duplicated message number" msgstr "dubbel berichtnummer" -#: catgets/gencat.c:673 +#: catgets/gencat.c:674 msgid "duplicated message identifier" msgstr "dubbele berichtnaam" -#: catgets/gencat.c:730 +#: catgets/gencat.c:731 msgid "invalid character: message ignored" msgstr "ongeldig teken; bericht is genegeerd" -#: catgets/gencat.c:773 +#: catgets/gencat.c:774 msgid "invalid line" msgstr "ongeldige regel" -#: catgets/gencat.c:827 +#: catgets/gencat.c:828 msgid "malformed line ignored" msgstr "ongeldige regel is genegeerd" -#: catgets/gencat.c:991 catgets/gencat.c:1032 nss/makedb.c:183 +#: catgets/gencat.c:992 catgets/gencat.c:1033 nss/makedb.c:183 #, c-format msgid "cannot open output file `%s'" msgstr "kan uitvoerbestand '%s' niet openen" -#: catgets/gencat.c:1194 locale/programs/linereader.c:559 +#: catgets/gencat.c:1195 locale/programs/linereader.c:560 msgid "invalid escape sequence" msgstr "ongeldige stuurcode" -#: catgets/gencat.c:1216 +#: catgets/gencat.c:1217 msgid "unterminated message" msgstr "onafgesloten bericht" -#: catgets/gencat.c:1240 +#: catgets/gencat.c:1241 #, c-format msgid "while opening old catalog file" msgstr "bij openen van oude catalogusbestand" -#: catgets/gencat.c:1331 +#: catgets/gencat.c:1332 #, c-format msgid "conversion modules not available" msgstr "conversiemodules zijn niet beschikbaar" -#: catgets/gencat.c:1357 +#: catgets/gencat.c:1358 #, c-format msgid "cannot determine escape character" msgstr "kan niet bepalen wat het escapeteken is" @@ -264,7 +263,9 @@ msgstr "uitvoer niet bufferen" #: debug/pcprofiledump.c:57 msgid "Dump information generated by PC profiling." -msgstr "Door prestatie-analyse gegenereerde informatie weergeven." +msgstr "" +" \n" +"Door prestatie-analyse gegenereerde informatie weergeven." #: debug/pcprofiledump.c:60 msgid "[FILE]" @@ -290,11 +291,11 @@ msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n" msgstr "Gebruik: xtrace [OPTIE]... PROGRAMMA [PROGRAMMA-OPTIE]...\\n" #: debug/xtrace.sh:33 -msgid "Try `xtrace --help' for more information.\\n" -msgstr "Probeer 'xtrace --help' voor meer informatie.\\n" +msgid "Try \\`xtrace --help' for more information.\\n" +msgstr "Typ 'xtrace --help' voor meer informatie.\\n" #: debug/xtrace.sh:39 -msgid "xtrace: option `$1' requires an argument.\\n" +msgid "xtrace: option \\`$1' requires an argument.\\n" msgstr "xtrace: optie '$1' vereist een argument\\n" #: debug/xtrace.sh:46 @@ -313,20 +314,21 @@ msgid "" "For bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\\n" msgstr "" +" \n" "De uitvoering van een programma volgen door steeds de naam van\n" "de uitgevoerde functie te printen.\n" "\n" " --data=BESTAND geen programma uitvoeren; gegevens uit BESTAND printen\n" "\n" " -?,--help deze hulptekst tonen\n" -" --usage een kort gebruiksbericht tonen\n" +" --usage een korte gebruikssamenvatting tonen\n" " -V,--version versie-informatie tonen\n" "\n" -"Voor het rapporteren van fouten in dit programma, zie:\n" +"Voor het rapporteren van gebreken in dit programma, zie:\n" " <http://www.gnu.org/software/libc/bugs.html>.\\n" #: debug/xtrace.sh:125 -msgid "xtrace: unrecognized option `$1'\\n" +msgid "xtrace: unrecognized option \\`$1'\\n" msgstr "xtrace: onbekende optie '$1'\\n" #: debug/xtrace.sh:138 @@ -335,19 +337,19 @@ msgstr "Geen programmanaam gegeven\\n" #: debug/xtrace.sh:146 #, sh-format -msgid "executable `$program' not found\\n" +msgid "executable \\`$program' not found\\n" msgstr "Geen uitvoerbaar bestand '$program' gevonden\\n" #: debug/xtrace.sh:150 #, sh-format -msgid "`$program' is no executable\\n" +msgid "\\`$program' is no executable\\n" msgstr "'$program' is niet uitvoerbaar\\n" -#: dlfcn/dlinfo.c:67 +#: dlfcn/dlinfo.c:64 msgid "RTLD_SELF used in code not dynamically loaded" msgstr "RTLD_SELF is gebruikt in code die niet dynamisch geladen is" -#: dlfcn/dlinfo.c:76 +#: dlfcn/dlinfo.c:73 msgid "unsupported dlinfo request" msgstr "niet-ondersteund 'dlinfo'-verzoek" @@ -363,70 +365,69 @@ msgstr "ongeldige modus" msgid "invalid mode parameter" msgstr "ongeldige modusparameter" -#: elf/cache.c:67 +#: elf/cache.c:68 msgid "unknown" msgstr "onbekend" -#: elf/cache.c:110 +#: elf/cache.c:111 msgid "Unknown OS" msgstr "onbekend besturingssysteem" -#: elf/cache.c:115 +#: elf/cache.c:116 #, c-format msgid ", OS ABI: %s %d.%d.%d" msgstr ", OS-ABI: %s %d.%d.%d" -#: elf/cache.c:141 elf/ldconfig.c:1231 +#: elf/cache.c:142 elf/ldconfig.c:1236 #, c-format msgid "Can't open cache file %s\n" msgstr "Kan cachebestand %s niet openen\n" -#: elf/cache.c:153 +#: elf/cache.c:154 #, c-format msgid "mmap of cache file failed.\n" msgstr "mmap() van cachebestand is mislukt\n" -#: elf/cache.c:157 elf/cache.c:167 +#: elf/cache.c:158 elf/cache.c:168 #, c-format msgid "File is not a cache file.\n" msgstr "Bestand is geen cachebestand\n" -#: elf/cache.c:200 elf/cache.c:210 +#: elf/cache.c:201 elf/cache.c:211 #, c-format msgid "%d libs found in cache `%s'\n" msgstr "%d bibliotheken gevonden in cache '%s'\n" -#: elf/cache.c:409 +#: elf/cache.c:410 #, c-format msgid "Can't remove old temporary cache file %s" msgstr "Kan oud tijdelijk cachebestand %s niet verwijderen" -#: elf/cache.c:416 +#: elf/cache.c:417 #, c-format msgid "Can't create temporary cache file %s" msgstr "Kan tijdelijk cachebestand %s niet aanmaken" -#: elf/cache.c:424 elf/cache.c:434 elf/cache.c:438 +#: elf/cache.c:425 elf/cache.c:435 elf/cache.c:439 elf/cache.c:443 #, c-format msgid "Writing of cache data failed" msgstr "Schrijven van cachegegevens is mislukt" -#: elf/cache.c:442 -#, c-format -msgid "Writing of cache data failed." -msgstr "Schrijven van cachegegevens is mislukt" - -#: elf/cache.c:449 +#: elf/cache.c:450 #, c-format msgid "Changing access rights of %s to %#o failed" msgstr "Wijzigen van toegangsrechten van %s naar %#o is mislukt" -#: elf/cache.c:454 +#: elf/cache.c:455 #, c-format msgid "Renaming of %s to %s failed" msgstr "Naamswijziging van %s naar %s is mislukt" -#: elf/dl-close.c:116 +#: elf/dl-close.c:378 elf/dl-open.c:460 +msgid "cannot create scope list" +msgstr "kan lijst voor geldigheidsbereik niet aanmaken" + +#: elf/dl-close.c:724 msgid "shared object not open" msgstr "gedeeld object is niet open" @@ -434,8 +435,8 @@ msgstr "gedeeld object is niet open" msgid "DST not allowed in SUID/SGID programs" msgstr "DST is niet toegestaan in SUID/SGID-programma's" -#: elf/dl-deps.c:125 -msgid "empty dynamics string token substitution" +#: elf/dl-deps.c:125 elf/dl-open.c:282 +msgid "empty dynamic string token substitution" msgstr "lege vervanging van DST" #: elf/dl-deps.c:131 @@ -479,151 +480,151 @@ msgstr "**interne fout**: 'symidx' buiten bereik van 'fptr'-tabel" msgid "cannot allocate name record" msgstr "kan geen geheugen reserveren voor naamrecord" -#: elf/dl-load.c:474 elf/dl-load.c:553 elf/dl-load.c:673 elf/dl-load.c:786 +#: elf/dl-load.c:474 elf/dl-load.c:582 elf/dl-load.c:667 elf/dl-load.c:780 msgid "cannot create cache for search path" msgstr "kan cache voor zoekpad niet aanmaken" -#: elf/dl-load.c:576 +#: elf/dl-load.c:565 msgid "cannot create RUNPATH/RPATH copy" msgstr "kan geen kopie van RUNPATH/RPATH maken" -#: elf/dl-load.c:659 +#: elf/dl-load.c:653 msgid "cannot create search path array" msgstr "kan zoekpad-array niet aanmaken" -#: elf/dl-load.c:870 +#: elf/dl-load.c:864 msgid "cannot stat shared object" msgstr "kan gedeeld object niet vinden" -#: elf/dl-load.c:940 +#: elf/dl-load.c:934 msgid "cannot open zero fill device" msgstr "kan nullenapparaat niet openen" -#: elf/dl-load.c:985 elf/dl-load.c:2215 +#: elf/dl-load.c:979 elf/dl-load.c:2224 msgid "cannot create shared object descriptor" msgstr "kan descriptor voor gedeeld object niet aanmaken" -#: elf/dl-load.c:1004 elf/dl-load.c:1663 elf/dl-load.c:1755 +#: elf/dl-load.c:998 elf/dl-load.c:1656 elf/dl-load.c:1748 msgid "cannot read file data" msgstr "kan bestandsgegevens niet lezen" -#: elf/dl-load.c:1048 +#: elf/dl-load.c:1042 msgid "ELF load command alignment not page-aligned" msgstr "uitlijning in ELF-laadopdracht ligt niet op een paginagrens" -#: elf/dl-load.c:1055 +#: elf/dl-load.c:1049 msgid "ELF load command address/offset not properly aligned" msgstr "adres/positie in ELF-laadopdracht is niet correct uitgelijnd" -#: elf/dl-load.c:1139 +#: elf/dl-load.c:1132 msgid "cannot allocate TLS data structures for initial thread" msgstr "kan geen geheugen reserveren voor TLS-gegevensstructuren van initiële thread" -#: elf/dl-load.c:1163 +#: elf/dl-load.c:1155 msgid "cannot handle TLS data" msgstr "kan TLS-gegevens niet verwerken" -#: elf/dl-load.c:1182 +#: elf/dl-load.c:1174 msgid "object file has no loadable segments" msgstr "objectbestand heeft geen laadbare segmenten" -#: elf/dl-load.c:1218 +#: elf/dl-load.c:1210 msgid "failed to map segment from shared object" msgstr "kan segment van gedeeld object niet in het geheugen plaatsen" -#: elf/dl-load.c:1242 +#: elf/dl-load.c:1236 msgid "cannot dynamically load executable" msgstr "kan uitvoerbaar bestand niet dynamisch laden" -#: elf/dl-load.c:1303 +#: elf/dl-load.c:1298 msgid "cannot change memory protections" msgstr "kan geheugenbeschermingen niet veranderen" -#: elf/dl-load.c:1322 +#: elf/dl-load.c:1317 msgid "cannot map zero-fill pages" msgstr "kan nul-gevulde pagina's niet in het geheugen plaatsen" -#: elf/dl-load.c:1336 +#: elf/dl-load.c:1331 msgid "object file has no dynamic section" msgstr "objectbestand heeft geen dynamische sectie" -#: elf/dl-load.c:1359 +#: elf/dl-load.c:1354 msgid "shared object cannot be dlopen()ed" msgstr "gedeeld object kan niet met dlopen() geopend worden -- heeft DF_1_NOOPEN-vlag" -#: elf/dl-load.c:1372 +#: elf/dl-load.c:1367 msgid "cannot allocate memory for program header" msgstr "kan geen geheugen reserveren voor programmakop" -#: elf/dl-load.c:1389 elf/dl-open.c:174 +#: elf/dl-load.c:1384 elf/dl-open.c:218 msgid "invalid caller" msgstr "ongeldige aanroeper" -#: elf/dl-load.c:1428 +#: elf/dl-load.c:1423 msgid "cannot enable executable stack as shared object requires" msgstr "kan uitvoerbare stack niet aanzetten zoals gedeeld object vereist" -#: elf/dl-load.c:1443 +#: elf/dl-load.c:1436 msgid "cannot close file descriptor" msgstr "kan bestandsdescriptor niet sluiten" -#: elf/dl-load.c:1485 +#: elf/dl-load.c:1478 msgid "cannot create searchlist" msgstr "kan zoeklijst niet aanmaken" -#: elf/dl-load.c:1663 +#: elf/dl-load.c:1656 msgid "file too short" msgstr "bestand is te kort" -#: elf/dl-load.c:1692 +#: elf/dl-load.c:1685 msgid "invalid ELF header" msgstr "ongeldige ELF-header" -#: elf/dl-load.c:1704 +#: elf/dl-load.c:1697 msgid "ELF file data encoding not big-endian" msgstr "gegevenscodering van ELF-bestand is niet big-endian" -#: elf/dl-load.c:1706 +#: elf/dl-load.c:1699 msgid "ELF file data encoding not little-endian" msgstr "gegevenscodering van ELF-bestand is niet little-endian" -#: elf/dl-load.c:1710 +#: elf/dl-load.c:1703 msgid "ELF file version ident does not match current one" msgstr "ELF-bestands-identversie komt niet overeen met huidige" -#: elf/dl-load.c:1714 +#: elf/dl-load.c:1707 msgid "ELF file OS ABI invalid" msgstr "OS-ABI van ELF-bestand is ongeldig" -#: elf/dl-load.c:1716 +#: elf/dl-load.c:1709 msgid "ELF file ABI version invalid" msgstr "ABI-versie van ELF-bestand is ongeldig" -#: elf/dl-load.c:1719 +#: elf/dl-load.c:1712 msgid "internal error" msgstr "**interne fout**" -#: elf/dl-load.c:1726 +#: elf/dl-load.c:1719 msgid "ELF file version does not match current one" msgstr "ELF-bestandsversie komt niet overeen met huidige" -#: elf/dl-load.c:1734 +#: elf/dl-load.c:1727 msgid "only ET_DYN and ET_EXEC can be loaded" msgstr "alleen ET_DYN en ET_EXEC kunnen worden geladen" -#: elf/dl-load.c:1740 +#: elf/dl-load.c:1733 msgid "ELF file's phentsize not the expected size" msgstr "'phentsize' van ELF-bestand heeft niet de verwachte grootte" -#: elf/dl-load.c:2231 +#: elf/dl-load.c:2240 msgid "wrong ELF class: ELFCLASS64" msgstr "verkeerde ELF-klasse: ELFCLASS64" -#: elf/dl-load.c:2232 +#: elf/dl-load.c:2241 msgid "wrong ELF class: ELFCLASS32" msgstr "verkeerde ELF-klasse: ELFCLASS32" -#: elf/dl-load.c:2235 +#: elf/dl-load.c:2244 msgid "cannot open shared object file" msgstr "kan gedeeld objectbestand niet openen" @@ -635,71 +636,63 @@ msgstr "verplaatsingsfout" msgid "symbol lookup error" msgstr "opzoekfout voor symbool" -#: elf/dl-open.c:112 +#: elf/dl-open.c:114 msgid "cannot extend global scope" msgstr "kan globaal geldigheidsbereik niet uitbreiden" -#: elf/dl-open.c:237 -msgid "empty dynamic string token substitution" -msgstr "lege vervanging van DST" - -#: elf/dl-open.c:406 elf/dl-open.c:417 elf/dl-open.c:425 -msgid "cannot create scope list" -msgstr "kan lijst voor geldigheidsbereik niet aanmaken" - -#: elf/dl-open.c:470 +#: elf/dl-open.c:512 msgid "TLS generation counter wrapped! Please report this." msgstr "" "De TLS-generatieteller is opnieuw bij nul begonnen!\n" "Rapporteer deze programmafout met het 'glibcbug' script." -#: elf/dl-open.c:508 +#: elf/dl-open.c:549 msgid "invalid mode for dlopen()" msgstr "ongeldige modus voor dlopen()" -#: elf/dl-open.c:525 +#: elf/dl-open.c:566 msgid "no more namespaces available for dlmopen()" msgstr "geen naamsruimten meer beschikbaar voor dlmopen()" -#: elf/dl-open.c:538 +#: elf/dl-open.c:579 msgid "invalid target namespace in dlmopen()" msgstr "ongeldige doelnaamsruimte in dlmopen()" -#: elf/dl-reloc.c:55 +#: elf/dl-reloc.c:54 msgid "cannot allocate memory in static TLS block" msgstr "kan geen geheugen reserveren binnen statisch TLS-blok" -#: elf/dl-reloc.c:198 +#: elf/dl-reloc.c:196 msgid "cannot make segment writable for relocation" msgstr "kan segment niet schrijfbaar maken voor verplaatsing" -#: elf/dl-reloc.c:279 +#: elf/dl-reloc.c:277 #, c-format msgid "%s: no PLTREL found in object %s\n" msgstr "%s: geen PLTREL in object %s gevonden\n" -#: elf/dl-reloc.c:290 +#: elf/dl-reloc.c:288 #, c-format msgid "%s: out of memory to store relocation results for %s\n" msgstr "%s: onvoldoende geheugen om verplaatsingsresultaten van %s op te slaan\n" -#: elf/dl-reloc.c:306 +#: elf/dl-reloc.c:304 msgid "cannot restore segment prot after reloc" msgstr "kan segmentbescherming niet herstellen na verplaatsing" -#: elf/dl-reloc.c:331 +#: elf/dl-reloc.c:329 msgid "cannot apply additional memory protection after relocation" msgstr "kan extra geheugenbescherming niet toepassen na verplaatsing" -#: elf/dl-sym.c:98 +#: elf/dl-sym.c:161 msgid "RTLD_NEXT used in code not dynamically loaded" msgstr "RTLD_NEXT is gebruikt in code die niet dynamisch geladen is" -#: elf/dl-sysdep.c:495 +#: elf/dl-sysdep.c:474 elf/dl-sysdep.c:486 msgid "cannot create capability list" msgstr "kan privilegeslijst niet aanmaken" -#: elf/dl-tls.c:829 +#: elf/dl-tls.c:825 msgid "cannot create TLS data structures" msgstr "kan TLS-gegevensstructuren niet aanmaken" @@ -707,223 +700,220 @@ msgstr "kan TLS-gegevensstructuren niet aanmaken" msgid "cannot allocate version reference table" msgstr "kan geen geheugen reserveren voor tabel met versieverwijzingen" -#: elf/ldconfig.c:133 +#: elf/ldconfig.c:135 msgid "Print cache" msgstr "inhoud van de cache weergeven" -#: elf/ldconfig.c:134 +#: elf/ldconfig.c:136 msgid "Generate verbose messages" msgstr "breedsprakige uitvoer" -#: elf/ldconfig.c:135 +#: elf/ldconfig.c:137 msgid "Don't build cache" msgstr "geen cache opbouwen" -#: elf/ldconfig.c:136 +#: elf/ldconfig.c:138 msgid "Don't generate links" msgstr "geen koppelingen genereren" -#: elf/ldconfig.c:137 +#: elf/ldconfig.c:139 msgid "Change to and use ROOT as root directory" msgstr "naar deze map gaan en als hoofdmap gebruiken" -#: elf/ldconfig.c:137 +#: elf/ldconfig.c:139 msgid "ROOT" msgstr "BASISMAP" -#: elf/ldconfig.c:138 +#: elf/ldconfig.c:140 msgid "CACHE" msgstr "CACHE-BESTAND" -#: elf/ldconfig.c:138 +#: elf/ldconfig.c:140 msgid "Use CACHE as cache file" msgstr "dit cachebestand gebruiken" -#: elf/ldconfig.c:139 +#: elf/ldconfig.c:141 msgid "CONF" msgstr "CONFIG-BESTAND" -#: elf/ldconfig.c:139 +#: elf/ldconfig.c:141 msgid "Use CONF as configuration file" msgstr "dit configuratiebestand gebruiken" -#: elf/ldconfig.c:140 +#: elf/ldconfig.c:142 msgid "Only process directories specified on the command line. Don't build cache." msgstr "alleen de mappen op de opdrachtregel verwerken; geen cache opbouwen" -#: elf/ldconfig.c:141 +#: elf/ldconfig.c:143 msgid "Manually link individual libraries." msgstr "individuele bibliotheken handmatig koppelen" -#: elf/ldconfig.c:142 +#: elf/ldconfig.c:144 msgid "FORMAT" msgstr "INDELING" -#: elf/ldconfig.c:142 +#: elf/ldconfig.c:144 msgid "Format to use: new, old or compat (default)" msgstr "te gebruiken indeling: 'compat' (standaard), 'new', of 'old'" -#: elf/ldconfig.c:150 +#: elf/ldconfig.c:152 msgid "Configure Dynamic Linker Run Time Bindings." -msgstr "Configureren van de dynamische linker." +msgstr "" +" \n" +"Configureren van de dynamische linker." -#: elf/ldconfig.c:308 +#: elf/ldconfig.c:310 #, c-format msgid "Path `%s' given more than once" msgstr "Pad '%s' is meerdere malen opgegeven" -#: elf/ldconfig.c:348 +#: elf/ldconfig.c:350 #, c-format msgid "%s is not a known library type" msgstr "%s is geen bekende bibliotheeksoort" -#: elf/ldconfig.c:373 +#: elf/ldconfig.c:375 #, c-format msgid "Can't stat %s" msgstr "Kan status van %s niet opvragen" -#: elf/ldconfig.c:447 +#: elf/ldconfig.c:449 #, c-format msgid "Can't stat %s\n" msgstr "Kan status van %s niet opvragen\n" -#: elf/ldconfig.c:457 +#: elf/ldconfig.c:459 #, c-format msgid "%s is not a symbolic link\n" msgstr "%s is geen symbolische koppeling\n" -#: elf/ldconfig.c:476 +#: elf/ldconfig.c:478 #, c-format msgid "Can't unlink %s" msgstr "Kan %s niet ontkoppelen" -#: elf/ldconfig.c:482 +#: elf/ldconfig.c:484 #, c-format msgid "Can't link %s to %s" msgstr "Kan %s niet aan %s koppelen" -#: elf/ldconfig.c:488 +#: elf/ldconfig.c:490 msgid " (changed)\n" msgstr " (gewijzigd)\n" -#: elf/ldconfig.c:490 +#: elf/ldconfig.c:492 msgid " (SKIPPED)\n" msgstr " (OVERGESLAGEN)\n" -#: elf/ldconfig.c:545 +#: elf/ldconfig.c:547 #, c-format msgid "Can't find %s" msgstr "Kan %s niet vinden" -#: elf/ldconfig.c:561 +#: elf/ldconfig.c:563 elf/ldconfig.c:737 elf/ldconfig.c:784 #, c-format -msgid "Can't lstat %s" +msgid "Cannot lstat %s" msgstr "Kan status van link %s niet opvragen" -#: elf/ldconfig.c:568 +#: elf/ldconfig.c:570 #, c-format msgid "Ignored file %s since it is not a regular file." msgstr "Bestand %s wordt genegeerd omdat het geen gewoon bestand is." -#: elf/ldconfig.c:576 +#: elf/ldconfig.c:578 #, c-format msgid "No link created since soname could not be found for %s" msgstr "" "Geen koppeling aangemaakt, want kan van %s de 'soname'\n" "(de naam van het gedeelde object) niet vinden" -#: elf/ldconfig.c:667 +#: elf/ldconfig.c:669 #, c-format msgid "Can't open directory %s" msgstr "Kan map %s niet openen" -#: elf/ldconfig.c:735 elf/ldconfig.c:782 -#, c-format -msgid "Cannot lstat %s" -msgstr "Kan status van link %s niet opvragen" - -#: elf/ldconfig.c:747 +#: elf/ldconfig.c:749 #, c-format msgid "Cannot stat %s" msgstr "Kan status van %s niet opvragen" -#: elf/ldconfig.c:804 elf/readlib.c:90 +#: elf/ldconfig.c:806 elf/readlib.c:91 #, c-format msgid "Input file %s not found.\n" msgstr "Kan invoerbestand %s niet vinden\n" -#: elf/ldconfig.c:855 +#: elf/ldconfig.c:857 #, c-format msgid "libc5 library %s in wrong directory" msgstr "libc5-bibliotheek %s zit in verkeerde map" -#: elf/ldconfig.c:858 +#: elf/ldconfig.c:860 #, c-format msgid "libc6 library %s in wrong directory" msgstr "libc6-bibliotheek %s zit in verkeerde map" -#: elf/ldconfig.c:861 +#: elf/ldconfig.c:863 #, c-format msgid "libc4 library %s in wrong directory" msgstr "libc4-bibliotheek %s zit in verkeerde map" -#: elf/ldconfig.c:888 +#: elf/ldconfig.c:890 #, c-format msgid "libraries %s and %s in directory %s have same soname but different type." msgstr "Bibliotheken %s en %s in map %s hebben dezelfde 'soname' maar een verschillende soort" -#: elf/ldconfig.c:995 +#: elf/ldconfig.c:997 #, c-format msgid "Can't open configuration file %s" msgstr "Kan configuratiebestand %s niet openen" -#: elf/ldconfig.c:1059 +#: elf/ldconfig.c:1061 #, c-format msgid "%s:%u: bad syntax in hwcap line" msgstr "%s:%u: onjuiste syntax in 'hwcap'-regel" -#: elf/ldconfig.c:1065 +#: elf/ldconfig.c:1067 #, c-format msgid "%s:%u: hwcap index %lu above maximum %u" msgstr "%s:%u: 'hwcap'-index %lu overschrijdt maximum %u" -#: elf/ldconfig.c:1072 elf/ldconfig.c:1080 +#: elf/ldconfig.c:1074 elf/ldconfig.c:1082 #, c-format msgid "%s:%u: hwcap index %lu already defined as %s" msgstr "%s:%u: 'hwcap'-index %lu is al gedefinieerd als %s" -#: elf/ldconfig.c:1083 +#: elf/ldconfig.c:1085 #, c-format msgid "%s:%u: duplicate hwcap %lu %s" msgstr "%s:%u: dubbele 'hwcap' %lu %s" -#: elf/ldconfig.c:1105 +#: elf/ldconfig.c:1107 #, c-format msgid "need absolute file name for configuration file when using -r" msgstr "bij gebruik van '-r' is voor het configuratiebestand een absoluut pad vereist" -#: elf/ldconfig.c:1112 locale/programs/xmalloc.c:69 malloc/obstack.c:434 -#: malloc/obstack.c:436 posix/getconf.c:980 posix/getconf.c:1158 +#: elf/ldconfig.c:1114 locale/programs/xmalloc.c:70 malloc/obstack.c:434 +#: malloc/obstack.c:436 posix/getconf.c:985 posix/getconf.c:1163 #, c-format msgid "memory exhausted" -msgstr "onvoldoende geheugen" +msgstr "onvoldoende geheugen beschikbaar" -#: elf/ldconfig.c:1142 +#: elf/ldconfig.c:1144 #, c-format msgid "%s:%u: cannot read directory %s" msgstr "%s:%u: kan map %s niet lezen" -#: elf/ldconfig.c:1182 +#: elf/ldconfig.c:1189 #, c-format msgid "relative path `%s' used to build cache" msgstr "relatief pad '%s' wordt gebruikt bij opbouwen van cache" -#: elf/ldconfig.c:1210 +#: elf/ldconfig.c:1215 #, c-format msgid "Can't chdir to /" msgstr "Kan niet naar hoofdmap ('/') gaan" -#: elf/ldconfig.c:1252 +#: elf/ldconfig.c:1257 #, c-format msgid "Can't open cache file directory %s\n" msgstr "Kan map %s voor cachebestand niet openen\n" @@ -958,7 +948,7 @@ msgstr "" " <http://www.gnu.org/software/libc/bugs.html>." #: elf/ldd.bash.in:80 -msgid "ldd: option `$1' is ambiguous" +msgid "ldd: option \\`$1' is ambiguous" msgstr "ldd: optie '$1' is niet eenduidig" #: elf/ldd.bash.in:87 @@ -966,8 +956,8 @@ msgid "unrecognized option" msgstr "onbekende optie" #: elf/ldd.bash.in:88 elf/ldd.bash.in:126 -msgid "Try `ldd --help' for more information." -msgstr "Probeer 'ldd --help' voor meer informatie." +msgid "Try \\`ldd --help' for more information." +msgstr "Typ 'ldd --help' voor meer informatie." #: elf/ldd.bash.in:125 msgid "missing file arguments" @@ -1030,27 +1020,27 @@ msgstr "%s is niet een gedeeld objectbestand (type = %d)\n" msgid "more than one dynamic segment\n" msgstr "meer dan één dynamisch segment\n" -#: elf/readlib.c:96 +#: elf/readlib.c:97 #, c-format msgid "Cannot fstat file %s.\n" msgstr "Kan status van %s niet opvragen\n" -#: elf/readlib.c:107 +#: elf/readlib.c:108 #, c-format msgid "File %s is empty, not checked." msgstr "Bestand %s is leeg; niet gecontroleerd" -#: elf/readlib.c:113 +#: elf/readlib.c:114 #, c-format msgid "File %s is too small, not checked." msgstr "Bestand %s is te klein; niet gecontroleerd" -#: elf/readlib.c:123 +#: elf/readlib.c:124 #, c-format msgid "Cannot mmap file %s.\n" msgstr "Kan bestand %s niet geheel in het geheugen plaatsen\n" -#: elf/readlib.c:161 +#: elf/readlib.c:162 #, c-format msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n" msgstr "%s is geen ELF-bestand -- het heeft de verkeerde magische bytes aan het begin\n" @@ -1073,10 +1063,11 @@ msgstr "een aanroepengrafiek genereren" #: elf/sprof.c:89 msgid "" -"Read and display shared object profiling data.For bug reporting instructions, please see:\n" +"Read and display shared object profiling data.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" -"Gegevens van prestatie-analyse inlezen en afbeelden.Voor het rapporteren van fouten, zie:\n" +" \n" +"Gegevens van prestatie-analyse inlezen en afbeelden.\vVoor het rapporteren van fouten, zie:\n" " <http://www.gnu.org/software/libc/bugs.html>.\n" #: elf/sprof.c:94 @@ -1175,137 +1166,139 @@ msgstr "'%s' is geen correct bestand met analysegegevens voor '%s'" msgid "cannot allocate symbol data" msgstr "kan geen geheugen reserveren voor symboolgegevens" -#: iconv/iconv_charmap.c:175 iconv/iconv_prog.c:315 +#: iconv/iconv_charmap.c:176 iconv/iconv_prog.c:316 #, c-format msgid "error while closing input `%s'" msgstr "fout bij sluiten van invoer '%s'" -#: iconv/iconv_charmap.c:449 +#: iconv/iconv_charmap.c:450 #, c-format msgid "illegal input sequence at position %Zd" msgstr "ongeldige invoerreeks op positie %Zd" -#: iconv/iconv_charmap.c:468 iconv/iconv_prog.c:525 +#: iconv/iconv_charmap.c:469 iconv/iconv_prog.c:526 #, c-format msgid "incomplete character or shift sequence at end of buffer" msgstr "onvolledige teken- of schuifreeks aan einde van buffer" -#: iconv/iconv_charmap.c:513 iconv/iconv_charmap.c:549 iconv/iconv_prog.c:568 -#: iconv/iconv_prog.c:604 +#: iconv/iconv_charmap.c:514 iconv/iconv_charmap.c:550 iconv/iconv_prog.c:569 +#: iconv/iconv_prog.c:605 #, c-format msgid "error while reading the input" msgstr "fout bij lezen van de invoer" -#: iconv/iconv_charmap.c:531 iconv/iconv_prog.c:586 +#: iconv/iconv_charmap.c:532 iconv/iconv_prog.c:587 #, c-format msgid "unable to allocate buffer for input" msgstr "kan geen geheugen reserveren voor invoerbuffer" -#: iconv/iconv_prog.c:59 +#: iconv/iconv_prog.c:60 msgid "Input/Output format specification:" msgstr "Specificatie van in- en uitvoercodering:" -#: iconv/iconv_prog.c:60 +#: iconv/iconv_prog.c:61 msgid "encoding of original text" msgstr "codering van oorspronkelijke tekst" -#: iconv/iconv_prog.c:61 +#: iconv/iconv_prog.c:62 msgid "encoding for output" msgstr "codering van uitvoer" -#: iconv/iconv_prog.c:62 +#: iconv/iconv_prog.c:63 msgid "Information:" msgstr "Informatie:" -#: iconv/iconv_prog.c:63 +#: iconv/iconv_prog.c:64 msgid "list all known coded character sets" msgstr "alle bekende gecodeerde tekensets opsommen" -#: iconv/iconv_prog.c:64 locale/programs/localedef.c:126 +#: iconv/iconv_prog.c:65 locale/programs/localedef.c:127 msgid "Output control:" msgstr "Uitvoerbeheer:" -#: iconv/iconv_prog.c:65 +#: iconv/iconv_prog.c:66 msgid "omit invalid characters from output" msgstr "ongeldige tekens in uitvoer overslaan" -#: iconv/iconv_prog.c:66 +#: iconv/iconv_prog.c:67 msgid "output file" msgstr "uitvoerbestand" -#: iconv/iconv_prog.c:67 +#: iconv/iconv_prog.c:68 msgid "suppress warnings" msgstr "waarschuwingen onderdrukken" -#: iconv/iconv_prog.c:68 +#: iconv/iconv_prog.c:69 msgid "print progress information" msgstr "voortgangsinformatie tonen" -#: iconv/iconv_prog.c:73 +#: iconv/iconv_prog.c:74 msgid "Convert encoding of given files from one encoding to another." -msgstr "Bestanden converteren van ene codering naar andere." +msgstr "" +" \n" +"Bestanden converteren van ene codering naar andere." -#: iconv/iconv_prog.c:77 +#: iconv/iconv_prog.c:78 msgid "[FILE...]" msgstr "[BESTAND...]" -#: iconv/iconv_prog.c:199 +#: iconv/iconv_prog.c:200 #, c-format msgid "cannot open output file" msgstr "kan uitvoerbestand niet openen" -#: iconv/iconv_prog.c:241 +#: iconv/iconv_prog.c:242 #, c-format msgid "conversions from `%s' and to `%s' are not supported" msgstr "conversie vanuit '%s' en conversie naar '%s' worden niet ondersteund" -#: iconv/iconv_prog.c:246 +#: iconv/iconv_prog.c:247 #, c-format msgid "conversion from `%s' is not supported" msgstr "conversie vanuit '%s' wordt niet ondersteund" -#: iconv/iconv_prog.c:253 +#: iconv/iconv_prog.c:254 #, c-format msgid "conversion to `%s' is not supported" msgstr "conversie naar '%s' wordt niet ondersteund" -#: iconv/iconv_prog.c:257 +#: iconv/iconv_prog.c:258 #, c-format msgid "conversion from `%s' to `%s' is not supported" msgstr "conversie van '%s' naar '%s' wordt niet ondersteund" -#: iconv/iconv_prog.c:267 +#: iconv/iconv_prog.c:268 #, c-format msgid "failed to start conversion processing" msgstr "beginnen van conversieproces is mislukt" -#: iconv/iconv_prog.c:361 +#: iconv/iconv_prog.c:362 #, c-format msgid "error while closing output file" msgstr "fout bij sluiten van uitvoerbestand" -#: iconv/iconv_prog.c:470 iconv/iconv_prog.c:496 +#: iconv/iconv_prog.c:471 iconv/iconv_prog.c:497 #, c-format msgid "conversion stopped due to problem in writing the output" msgstr "conversie is gestopt vanwege probleem bij schrijven van de uitvoer" -#: iconv/iconv_prog.c:521 +#: iconv/iconv_prog.c:522 #, c-format msgid "illegal input sequence at position %ld" msgstr "ongeldige invoerreeks op positie %ld" -#: iconv/iconv_prog.c:529 +#: iconv/iconv_prog.c:530 #, c-format msgid "internal error (illegal descriptor)" msgstr "**interne fout**: ongeldige descriptor" -#: iconv/iconv_prog.c:532 +#: iconv/iconv_prog.c:533 #, c-format msgid "unknown iconv() error %d" msgstr "onbekende iconv()-fout %d" # ###XXX ->contains -#: iconv/iconv_prog.c:778 +#: iconv/iconv_prog.c:779 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" @@ -1321,42 +1314,42 @@ msgstr "" "\n" " " -#: iconv/iconvconfig.c:109 +#: iconv/iconvconfig.c:110 msgid "Create fastloading iconv module configuration file." msgstr "Een snelladend configuratiebestand voor een iconv-module maken." -#: iconv/iconvconfig.c:113 +#: iconv/iconvconfig.c:114 msgid "[DIR...]" msgstr "[MAP...]" -#: iconv/iconvconfig.c:126 +#: iconv/iconvconfig.c:127 msgid "Prefix used for all file accesses" msgstr "te gebruiken voorvoegsel voor alle bestandstoegangen" -#: iconv/iconvconfig.c:127 +#: iconv/iconvconfig.c:128 msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)" msgstr "uitvoer in BESTAND opslaan in plaats van op eigen locatie (--prefix geldt niet voor BESTAND)" -#: iconv/iconvconfig.c:131 +#: iconv/iconvconfig.c:132 msgid "Do not search standard directories, only those on the command line" msgstr "standaardmappen niet doorzoeken, alleen die op de opdrachtregel" -#: iconv/iconvconfig.c:300 +#: iconv/iconvconfig.c:301 #, c-format msgid "Directory arguments required when using --nostdlib" msgstr "Mapargumenten zijn vereist bij gebruik van '--nostdlib'" -#: iconv/iconvconfig.c:342 locale/programs/localedef.c:290 +#: iconv/iconvconfig.c:343 locale/programs/localedef.c:291 #, c-format msgid "no output file produced because warnings were issued" msgstr "geen uitvoerbestand aangemaakt omdat er waarschuwingen werden gegeven" -#: iconv/iconvconfig.c:428 +#: iconv/iconvconfig.c:429 #, c-format msgid "while inserting in search tree" msgstr "bij invoegen in zoekboom" -#: iconv/iconvconfig.c:1236 +#: iconv/iconvconfig.c:1238 #, c-format msgid "cannot generate output file" msgstr "kan geen uitvoerbestand genereren" @@ -1428,7 +1421,7 @@ msgstr "ergens hard gekoppeld" #: inet/ruserpass.c:170 inet/ruserpass.c:193 msgid "out of memory" -msgstr "onvoldoende geheugen" +msgstr "onvoldoende geheugen beschikbaar" #: inet/ruserpass.c:184 msgid "Error: .netrc file is readable by others." @@ -1447,991 +1440,971 @@ msgstr "Onbekend .netrc-sleutelwoord %s" msgid "Character out of range for UTF-8" msgstr "Teken ligt buiten bereik voor UTF-8" -#: locale/programs/charmap-dir.c:57 +#: locale/programs/charmap-dir.c:58 #, c-format msgid "cannot read character map directory `%s'" msgstr "kan tekenskaartmap '%s' niet lezen" -#: locale/programs/charmap.c:137 +#: locale/programs/charmap.c:138 #, c-format msgid "character map file `%s' not found" msgstr "kan tekenskaartbestand '%s' niet vinden" -#: locale/programs/charmap.c:194 +#: locale/programs/charmap.c:195 #, c-format msgid "default character map file `%s' not found" msgstr "kan standaard-tekenskaartbestand '%s' niet vinden" -#: locale/programs/charmap.c:257 +#: locale/programs/charmap.c:258 #, c-format msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n" msgstr "" "tekenskaart '%s' is niet ASCII-compatibel;\n" "de locale voldoet niet aan ISO C\n" -#: locale/programs/charmap.c:336 +#: locale/programs/charmap.c:337 #, c-format msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n" msgstr "%s: <mb_cur_max> moet groter zijn dan <mb_cur_min>\n" -#: locale/programs/charmap.c:356 locale/programs/charmap.c:373 -#: locale/programs/repertoire.c:174 +#: locale/programs/charmap.c:357 locale/programs/charmap.c:374 +#: locale/programs/repertoire.c:175 #, c-format msgid "syntax error in prolog: %s" msgstr "syntaxfout in proloog: %s" -#: locale/programs/charmap.c:357 +#: locale/programs/charmap.c:358 msgid "invalid definition" msgstr "ongeldige definitie" -#: locale/programs/charmap.c:374 locale/programs/locfile.c:125 -#: locale/programs/locfile.c:152 locale/programs/repertoire.c:175 +#: locale/programs/charmap.c:375 locale/programs/locfile.c:126 +#: locale/programs/locfile.c:153 locale/programs/repertoire.c:176 msgid "bad argument" msgstr "onjuist argument" -#: locale/programs/charmap.c:402 +#: locale/programs/charmap.c:403 #, c-format msgid "duplicate definition of <%s>" msgstr "dubbele definitie van <%s>" -#: locale/programs/charmap.c:409 +#: locale/programs/charmap.c:410 #, c-format msgid "value for <%s> must be 1 or greater" msgstr "waarde van <%s> moet groter of gelijk aan 1 zijn" -#: locale/programs/charmap.c:421 +#: locale/programs/charmap.c:422 #, c-format msgid "value of <%s> must be greater or equal than the value of <%s>" msgstr "waarde van <%s> moet groter of gelijk aan de waarde van <%s> zijn" -#: locale/programs/charmap.c:444 locale/programs/repertoire.c:183 +#: locale/programs/charmap.c:445 locale/programs/repertoire.c:184 #, c-format msgid "argument to <%s> must be a single character" msgstr "argument van <%s> moet een enkel teken zijn" -#: locale/programs/charmap.c:470 +#: locale/programs/charmap.c:471 msgid "character sets with locking states are not supported" msgstr "tekensets met blokkerende toestanden worden niet ondersteund" -#: 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 +#: locale/programs/charmap.c:498 locale/programs/charmap.c:552 +#: locale/programs/charmap.c:584 locale/programs/charmap.c:678 +#: locale/programs/charmap.c:733 locale/programs/charmap.c:774 +#: locale/programs/charmap.c:815 #, c-format msgid "syntax error in %s definition: %s" msgstr "syntaxfout in definitie van %s: %s" -#: locale/programs/charmap.c:498 locale/programs/charmap.c:678 -#: locale/programs/charmap.c:774 locale/programs/repertoire.c:230 +#: locale/programs/charmap.c:499 locale/programs/charmap.c:679 +#: locale/programs/charmap.c:775 locale/programs/repertoire.c:231 msgid "no symbolic name given" msgstr "geen symbolische naam gegeven" -#: locale/programs/charmap.c:552 +#: locale/programs/charmap.c:553 msgid "invalid encoding given" msgstr "ongeldige codering gegeven" -#: locale/programs/charmap.c:561 +#: locale/programs/charmap.c:562 msgid "too few bytes in character encoding" msgstr "te weinig bytes in tekencodering" -#: locale/programs/charmap.c:563 +#: locale/programs/charmap.c:564 msgid "too many bytes in character encoding" msgstr "te veel bytes in tekencodering" -#: locale/programs/charmap.c:585 locale/programs/charmap.c:733 -#: locale/programs/charmap.c:816 locale/programs/repertoire.c:296 +#: locale/programs/charmap.c:586 locale/programs/charmap.c:734 +#: locale/programs/charmap.c:817 locale/programs/repertoire.c:297 msgid "no symbolic name given for end of range" msgstr "geen symbolische naam gegeven voor einde-van-bereik" -#: locale/programs/charmap.c:609 locale/programs/locfile.c:818 -#: locale/programs/repertoire.c:313 +#: locale/programs/charmap.c:610 locale/programs/ld-address.c:600 +#: locale/programs/ld-collate.c:2677 locale/programs/ld-collate.c:3828 +#: locale/programs/ld-ctype.c:2232 locale/programs/ld-ctype.c:2984 +#: locale/programs/ld-identification.c:452 +#: locale/programs/ld-measurement.c:238 locale/programs/ld-messages.c:332 +#: locale/programs/ld-monetary.c:943 locale/programs/ld-name.c:307 +#: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:241 +#: locale/programs/ld-telephone.c:313 locale/programs/ld-time.c:1221 +#: locale/programs/repertoire.c:314 #, c-format -msgid "`%1$s' definition does not end with `END %1$s'" +msgid "%1$s: definition does not end with `END %1$s'" msgstr "%1$s: definitie eindigt niet met 'END %1$s'" -#: locale/programs/charmap.c:642 +#: locale/programs/charmap.c:643 msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" msgstr "na de definitie van CHARMAP zijn alleen definities van WIDTH toegestaan" -#: locale/programs/charmap.c:650 locale/programs/charmap.c:713 +#: locale/programs/charmap.c:651 locale/programs/charmap.c:714 #, c-format msgid "value for %s must be an integer" msgstr "de waarde van %s moet een geheel getal zijn" -#: locale/programs/charmap.c:841 +#: locale/programs/charmap.c:842 #, c-format msgid "%s: error in state machine" msgstr "%s: **interne fout** in toestandsmachine" -#: locale/programs/charmap.c:849 locale/programs/ld-address.c:615 -#: locale/programs/ld-collate.c:2650 locale/programs/ld-collate.c:3820 -#: locale/programs/ld-ctype.c:2224 locale/programs/ld-ctype.c:2996 -#: locale/programs/ld-identification.c:467 -#: locale/programs/ld-measurement.c:253 locale/programs/ld-messages.c:347 -#: locale/programs/ld-monetary.c:956 locale/programs/ld-name.c:322 -#: locale/programs/ld-numeric.c:383 locale/programs/ld-paper.c:256 -#: locale/programs/ld-telephone.c:328 locale/programs/ld-time.c:1236 -#: locale/programs/locfile.c:825 locale/programs/repertoire.c:324 +#: locale/programs/charmap.c:850 locale/programs/ld-address.c:616 +#: locale/programs/ld-collate.c:2674 locale/programs/ld-collate.c:3844 +#: locale/programs/ld-ctype.c:2229 locale/programs/ld-ctype.c:3001 +#: locale/programs/ld-identification.c:468 +#: locale/programs/ld-measurement.c:254 locale/programs/ld-messages.c:348 +#: locale/programs/ld-monetary.c:959 locale/programs/ld-name.c:323 +#: locale/programs/ld-numeric.c:384 locale/programs/ld-paper.c:257 +#: locale/programs/ld-telephone.c:329 locale/programs/ld-time.c:1237 +#: locale/programs/locfile.c:826 locale/programs/repertoire.c:325 #, c-format msgid "%s: premature end of file" msgstr "%s: voortijdig einde van bestand" -#: locale/programs/charmap.c:868 locale/programs/charmap.c:879 +#: locale/programs/charmap.c:869 locale/programs/charmap.c:880 #, c-format msgid "unknown character `%s'" msgstr "onbekend teken '%s'" -#: locale/programs/charmap.c:887 +#: locale/programs/charmap.c:888 #, c-format msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d" msgstr "het aantal bytes in de bytereeks is voor begin en einde van het bereik niet hetzelfde: %d tegenover %d" -#: locale/programs/charmap.c:992 locale/programs/ld-collate.c:2933 -#: locale/programs/repertoire.c:419 +#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:2957 +#: locale/programs/repertoire.c:420 msgid "invalid names for character range" msgstr "ongeldige namen voor tekenbereik" -#: locale/programs/charmap.c:1004 locale/programs/repertoire.c:431 +#: locale/programs/charmap.c:1005 locale/programs/repertoire.c:432 msgid "hexadecimal range format should use only capital characters" msgstr "hexadecimale bereikopgave mag alleen hoofdletters bevatten" -#: locale/programs/charmap.c:1022 +#: locale/programs/charmap.c:1023 locale/programs/repertoire.c:450 #, c-format -msgid "<%s> and <%s> are illegal names for range" +msgid "<%s> and <%s> are invalid names for range" msgstr "<%s> en <%s> zijn ongeldige namen voor een bereik" -#: locale/programs/charmap.c:1028 -msgid "upper limit in range is not higher then lower limit" +#: locale/programs/charmap.c:1029 locale/programs/repertoire.c:457 +msgid "upper limit in range is smaller than lower limit" msgstr "bovengrens in bereik is kleiner dan ondergrens" -#: locale/programs/charmap.c:1086 +#: locale/programs/charmap.c:1087 msgid "resulting bytes for range not representable." msgstr "resulterende bytes voor bereik zijn niet te representeren" -#: locale/programs/ld-address.c:132 locale/programs/ld-collate.c:1532 -#: locale/programs/ld-ctype.c:419 locale/programs/ld-identification.c:132 -#: locale/programs/ld-measurement.c:93 locale/programs/ld-messages.c:96 -#: locale/programs/ld-monetary.c:192 locale/programs/ld-name.c:93 -#: locale/programs/ld-numeric.c:97 locale/programs/ld-paper.c:90 -#: locale/programs/ld-telephone.c:93 locale/programs/ld-time.c:158 +#: locale/programs/ld-address.c:133 locale/programs/ld-collate.c:1536 +#: locale/programs/ld-ctype.c:420 locale/programs/ld-identification.c:133 +#: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97 +#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:94 +#: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91 +#: locale/programs/ld-telephone.c:94 locale/programs/ld-time.c:159 #, c-format msgid "No definition for %s category found" msgstr "Geen definitie gevonden voor %s-categorie" -#: locale/programs/ld-address.c:143 locale/programs/ld-address.c:181 -#: locale/programs/ld-address.c:199 locale/programs/ld-address.c:228 -#: locale/programs/ld-address.c:300 locale/programs/ld-address.c:319 -#: locale/programs/ld-address.c:332 locale/programs/ld-identification.c:145 -#: locale/programs/ld-measurement.c:104 locale/programs/ld-monetary.c:204 -#: locale/programs/ld-monetary.c:248 locale/programs/ld-monetary.c:264 -#: locale/programs/ld-monetary.c:276 locale/programs/ld-name.c:104 -#: locale/programs/ld-name.c:141 locale/programs/ld-numeric.c:111 -#: locale/programs/ld-numeric.c:125 locale/programs/ld-paper.c:101 -#: locale/programs/ld-paper.c:110 locale/programs/ld-telephone.c:104 -#: locale/programs/ld-telephone.c:161 locale/programs/ld-time.c:174 -#: locale/programs/ld-time.c:195 +#: locale/programs/ld-address.c:144 locale/programs/ld-address.c:182 +#: locale/programs/ld-address.c:200 locale/programs/ld-address.c:229 +#: locale/programs/ld-address.c:301 locale/programs/ld-address.c:320 +#: locale/programs/ld-address.c:333 locale/programs/ld-identification.c:146 +#: locale/programs/ld-measurement.c:105 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:105 +#: locale/programs/ld-name.c:142 locale/programs/ld-numeric.c:112 +#: locale/programs/ld-numeric.c:126 locale/programs/ld-paper.c:102 +#: locale/programs/ld-paper.c:111 locale/programs/ld-telephone.c:105 +#: locale/programs/ld-telephone.c:162 locale/programs/ld-time.c:175 +#: locale/programs/ld-time.c:196 #, c-format msgid "%s: field `%s' not defined" msgstr "%s: het veld '%s' is niet gedefinieerd" -#: locale/programs/ld-address.c:155 locale/programs/ld-address.c:207 -#: locale/programs/ld-address.c:237 locale/programs/ld-address.c:275 -#: locale/programs/ld-name.c:116 locale/programs/ld-telephone.c:116 +#: locale/programs/ld-address.c:156 locale/programs/ld-address.c:208 +#: locale/programs/ld-address.c:238 locale/programs/ld-address.c:276 +#: locale/programs/ld-name.c:117 locale/programs/ld-telephone.c:117 #, c-format msgid "%s: field `%s' must not be empty" msgstr "%s: het veld '%s' mag niet leeg zijn" -#: locale/programs/ld-address.c:167 +#: locale/programs/ld-address.c:168 #, c-format msgid "%s: invalid escape `%%%c' sequence in field `%s'" msgstr "%s: ongeldige stuurcode '%%%c' in het veld '%s'" -#: locale/programs/ld-address.c:218 +#: locale/programs/ld-address.c:219 #, c-format msgid "%s: terminology language code `%s' not defined" msgstr "%s: terminologiecode '%s' is niet gedefinieerd" -#: locale/programs/ld-address.c:243 +#: locale/programs/ld-address.c:244 #, c-format msgid "%s: field `%s' must not be defined" msgstr "%s: het veld '%s' mag niet gedefinieerd zijn" -#: locale/programs/ld-address.c:257 locale/programs/ld-address.c:286 +#: locale/programs/ld-address.c:258 locale/programs/ld-address.c:287 #, c-format msgid "%s: language abbreviation `%s' not defined" msgstr "%s: taalafkorting '%s' is niet gedefinieerd" -#: locale/programs/ld-address.c:264 locale/programs/ld-address.c:292 -#: locale/programs/ld-address.c:326 locale/programs/ld-address.c:338 +#: locale/programs/ld-address.c:265 locale/programs/ld-address.c:293 +#: locale/programs/ld-address.c:327 locale/programs/ld-address.c:339 #, c-format msgid "%s: `%s' value does not match `%s' value" msgstr "%s: waarde van '%s' komt niet overeen met waarde van '%s'" -#: locale/programs/ld-address.c:311 +#: locale/programs/ld-address.c:312 #, c-format msgid "%s: numeric country code `%d' not valid" msgstr "%s: numerieke landcode '%d' is ongeldig" -#: locale/programs/ld-address.c:507 locale/programs/ld-address.c:544 -#: locale/programs/ld-address.c:582 locale/programs/ld-ctype.c:2603 -#: locale/programs/ld-identification.c:363 -#: locale/programs/ld-measurement.c:220 locale/programs/ld-messages.c:300 -#: locale/programs/ld-monetary.c:698 locale/programs/ld-monetary.c:733 -#: locale/programs/ld-monetary.c:774 locale/programs/ld-name.c:279 -#: locale/programs/ld-numeric.c:262 locale/programs/ld-paper.c:223 -#: locale/programs/ld-telephone.c:287 locale/programs/ld-time.c:1125 -#: locale/programs/ld-time.c:1167 +#: locale/programs/ld-address.c:508 locale/programs/ld-address.c:545 +#: locale/programs/ld-address.c:583 locale/programs/ld-ctype.c:2608 +#: locale/programs/ld-identification.c:364 +#: locale/programs/ld-measurement.c:221 locale/programs/ld-messages.c:301 +#: locale/programs/ld-monetary.c:701 locale/programs/ld-monetary.c:736 +#: locale/programs/ld-monetary.c:777 locale/programs/ld-name.c:280 +#: locale/programs/ld-numeric.c:263 locale/programs/ld-paper.c:224 +#: locale/programs/ld-telephone.c:288 locale/programs/ld-time.c:1126 +#: locale/programs/ld-time.c:1168 #, c-format msgid "%s: field `%s' declared more than once" msgstr "%s: het veld '%s' is meerdere keren gedeclareerd" -#: locale/programs/ld-address.c:511 locale/programs/ld-address.c:549 -#: locale/programs/ld-identification.c:367 locale/programs/ld-messages.c:310 -#: locale/programs/ld-monetary.c:702 locale/programs/ld-monetary.c:737 -#: locale/programs/ld-name.c:283 locale/programs/ld-numeric.c:266 -#: locale/programs/ld-telephone.c:291 locale/programs/ld-time.c:1019 -#: locale/programs/ld-time.c:1088 locale/programs/ld-time.c:1130 +#: locale/programs/ld-address.c:512 locale/programs/ld-address.c:550 +#: locale/programs/ld-identification.c:368 locale/programs/ld-messages.c:311 +#: locale/programs/ld-monetary.c:705 locale/programs/ld-monetary.c:740 +#: locale/programs/ld-name.c:284 locale/programs/ld-numeric.c:267 +#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:1020 +#: locale/programs/ld-time.c:1089 locale/programs/ld-time.c:1131 #, c-format msgid "%s: unknown character in field `%s'" msgstr "%s: onbekend teken in het veld '%s'" -#: locale/programs/ld-address.c:596 locale/programs/ld-collate.c:3802 -#: locale/programs/ld-ctype.c:2976 locale/programs/ld-identification.c:448 -#: locale/programs/ld-measurement.c:234 locale/programs/ld-messages.c:329 -#: locale/programs/ld-monetary.c:938 locale/programs/ld-name.c:304 -#: locale/programs/ld-numeric.c:365 locale/programs/ld-paper.c:238 -#: locale/programs/ld-telephone.c:310 locale/programs/ld-time.c:1218 +#: locale/programs/ld-address.c:597 locale/programs/ld-collate.c:3826 +#: locale/programs/ld-ctype.c:2981 locale/programs/ld-identification.c:449 +#: locale/programs/ld-measurement.c:235 locale/programs/ld-messages.c:330 +#: locale/programs/ld-monetary.c:941 locale/programs/ld-name.c:305 +#: locale/programs/ld-numeric.c:366 locale/programs/ld-paper.c:239 +#: locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1219 #, c-format msgid "%s: incomplete `END' line" msgstr "%s: onvolledige 'END'-regel" -#: locale/programs/ld-address.c:599 locale/programs/ld-collate.c:2653 -#: locale/programs/ld-collate.c:3804 locale/programs/ld-ctype.c:2227 -#: locale/programs/ld-ctype.c:2979 locale/programs/ld-identification.c:451 -#: locale/programs/ld-measurement.c:237 locale/programs/ld-messages.c:331 -#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:306 -#: locale/programs/ld-numeric.c:367 locale/programs/ld-paper.c:240 -#: locale/programs/ld-telephone.c:312 locale/programs/ld-time.c:1220 -#, c-format -msgid "%1$s: definition does not end with `END %1$s'" -msgstr "%1$s: definitie eindigt niet met 'END %1$s'" - -#: locale/programs/ld-address.c:606 locale/programs/ld-collate.c:521 -#: locale/programs/ld-collate.c:573 locale/programs/ld-collate.c:869 -#: locale/programs/ld-collate.c:882 locale/programs/ld-collate.c:2640 -#: locale/programs/ld-collate.c:3811 locale/programs/ld-ctype.c:1955 -#: locale/programs/ld-ctype.c:2214 locale/programs/ld-ctype.c:2801 -#: locale/programs/ld-ctype.c:2987 locale/programs/ld-identification.c:458 -#: locale/programs/ld-measurement.c:244 locale/programs/ld-messages.c:338 -#: locale/programs/ld-monetary.c:947 locale/programs/ld-name.c:313 -#: locale/programs/ld-numeric.c:374 locale/programs/ld-paper.c:247 -#: locale/programs/ld-telephone.c:319 locale/programs/ld-time.c:1227 +#: locale/programs/ld-address.c:607 locale/programs/ld-collate.c:522 +#: locale/programs/ld-collate.c:574 locale/programs/ld-collate.c:870 +#: locale/programs/ld-collate.c:883 locale/programs/ld-collate.c:2664 +#: locale/programs/ld-collate.c:3835 locale/programs/ld-ctype.c:1960 +#: locale/programs/ld-ctype.c:2219 locale/programs/ld-ctype.c:2806 +#: locale/programs/ld-ctype.c:2992 locale/programs/ld-identification.c:459 +#: locale/programs/ld-measurement.c:245 locale/programs/ld-messages.c:339 +#: locale/programs/ld-monetary.c:950 locale/programs/ld-name.c:314 +#: locale/programs/ld-numeric.c:375 locale/programs/ld-paper.c:248 +#: locale/programs/ld-telephone.c:320 locale/programs/ld-time.c:1228 #, c-format msgid "%s: syntax error" msgstr "%s: syntaxfout" -#: locale/programs/ld-collate.c:396 +#: locale/programs/ld-collate.c:397 #, c-format msgid "`%.*s' already defined in charmap" msgstr "'%.*s' is al gedefinieerd in tekenskaart" -#: locale/programs/ld-collate.c:405 +#: locale/programs/ld-collate.c:406 #, c-format msgid "`%.*s' already defined in repertoire" msgstr "`%.*s' is al gedefinieerd in repertoire" -#: locale/programs/ld-collate.c:412 +#: locale/programs/ld-collate.c:413 #, c-format msgid "`%.*s' already defined as collating symbol" msgstr "'%.*s' is al gedefinieerd als sorteringssymbool" -#: locale/programs/ld-collate.c:419 +#: locale/programs/ld-collate.c:420 #, c-format msgid "`%.*s' already defined as collating element" msgstr "'%.*s' is al gedefinieerd als sorteringselement" -#: locale/programs/ld-collate.c:450 locale/programs/ld-collate.c:476 +#: locale/programs/ld-collate.c:451 locale/programs/ld-collate.c:477 #, c-format msgid "%s: `forward' and `backward' are mutually excluding each other" msgstr "%s: 'forward' en 'backward' sluiten elkaar uit" -#: locale/programs/ld-collate.c:460 locale/programs/ld-collate.c:486 -#: locale/programs/ld-collate.c:502 +#: locale/programs/ld-collate.c:461 locale/programs/ld-collate.c:487 +#: locale/programs/ld-collate.c:503 #, c-format msgid "%s: `%s' mentioned more than once in definition of weight %d" msgstr "%s: '%s' wordt meerdere keren genoemd in definitie van gewicht %d" -#: locale/programs/ld-collate.c:558 +#: locale/programs/ld-collate.c:559 #, c-format msgid "%s: too many rules; first entry only had %d" msgstr "%s: te veel voorschriften; het eerste item had er slechts %d" -#: locale/programs/ld-collate.c:594 +#: locale/programs/ld-collate.c:595 #, c-format msgid "%s: not enough sorting rules" msgstr "%s: niet genoeg sorteervoorschriften" -#: locale/programs/ld-collate.c:759 +#: locale/programs/ld-collate.c:760 #, c-format msgid "%s: empty weight string not allowed" msgstr "%s: lege gewichtstekenreeks is niet toegestaan" -#: locale/programs/ld-collate.c:854 +#: locale/programs/ld-collate.c:855 #, c-format msgid "%s: weights must use the same ellipsis symbol as the name" msgstr "%s: gewichten moeten hetzelfde beletselteken gebruiken als de naam" -#: locale/programs/ld-collate.c:910 +#: locale/programs/ld-collate.c:911 #, c-format msgid "%s: too many values" msgstr "%s: te veel waarden" -#: locale/programs/ld-collate.c:1029 locale/programs/ld-collate.c:1204 +#: locale/programs/ld-collate.c:1031 locale/programs/ld-collate.c:1206 #, c-format msgid "order for `%.*s' already defined at %s:%Zu" msgstr "sorteervolgorde voor '%.*s' is al gedefinieerd in %s:%Zu" -#: locale/programs/ld-collate.c:1079 +#: 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: het begin- en eindsymbool van een bereik moeten enkele tekens aanduiden" -#: locale/programs/ld-collate.c:1106 +#: locale/programs/ld-collate.c:1108 #, c-format msgid "%s: byte sequences of first and last character must have the same length" msgstr "%s: de bytereeksen van het eerste en laatste bereikteken moeten dezelfde lengte hebben" -#: locale/programs/ld-collate.c:1148 +#: 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: de bytereeks van het eerste bereikteken is niet kleiner dan de bytereeks van het laatste bereikteken" +msgid "%s: byte sequence of first character of range is not lower than that of the last character" +msgstr "%s: de bytereeks van het eerste bereikteken is niet kleiner dan die van het laatste" -#: locale/programs/ld-collate.c:1273 +#: locale/programs/ld-collate.c:1275 #, c-format msgid "%s: symbolic range ellipsis must not directly follow `order_start'" msgstr "%s: beletselteken van symbolenbereik mag niet direct na 'order_start' staan" -#: locale/programs/ld-collate.c:1277 +#: locale/programs/ld-collate.c:1279 #, c-format msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'" msgstr "%s: beletselteken van symbolenbereik mag niet direct voor 'order_end' staan" -#: locale/programs/ld-collate.c:1297 locale/programs/ld-ctype.c:1475 +#: locale/programs/ld-collate.c:1299 locale/programs/ld-ctype.c:1477 #, c-format msgid "`%s' and `%.*s' are not valid names for symbolic range" msgstr "'%s' en '%.*s' zijn geen geldige namen voor een symbolenbereik" -#: locale/programs/ld-collate.c:1346 locale/programs/ld-collate.c:3739 +#: locale/programs/ld-collate.c:1349 locale/programs/ld-collate.c:3763 #, c-format msgid "%s: order for `%.*s' already defined at %s:%Zu" msgstr "%s: sorteervolgorde van '%.*s' is al gedefinieerd in %s:%Zu" -#: locale/programs/ld-collate.c:1355 +#: locale/programs/ld-collate.c:1358 #, c-format msgid "%s: `%s' must be a character" msgstr "%s: '%s' moet een teken zijn" -#: locale/programs/ld-collate.c:1548 +#: locale/programs/ld-collate.c:1552 #, c-format msgid "%s: `position' must be used for a specific level in all sections or none" msgstr "%s: 'position' moet voor een specifiek niveau gebruikt worden ofwel in alle secties ofwel in geen" -#: locale/programs/ld-collate.c:1573 +#: locale/programs/ld-collate.c:1577 #, c-format msgid "symbol `%s' not defined" msgstr "symbool '%s' is niet gedefinieerd" -#: locale/programs/ld-collate.c:1649 locale/programs/ld-collate.c:1755 +#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759 #, c-format msgid "symbol `%s' has the same encoding as" msgstr "symbool '%s' heeft dezelfde codering als" -#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759 +#: locale/programs/ld-collate.c:1657 locale/programs/ld-collate.c:1763 #, c-format msgid "symbol `%s'" msgstr "symbool '%s'" -#: locale/programs/ld-collate.c:1801 +#: locale/programs/ld-collate.c:1805 #, c-format msgid "no definition of `UNDEFINED'" msgstr "geen definitie van 'UNDEFINED'" -#: locale/programs/ld-collate.c:1830 +#: locale/programs/ld-collate.c:1834 #, c-format msgid "too many errors; giving up" msgstr "te veel fouten -- gestopt" -#: locale/programs/ld-collate.c:2738 +#: locale/programs/ld-collate.c:2762 #, c-format msgid "%s: duplicate definition of `%s'" msgstr "%s: dubbele definitie van '%s'" -#: locale/programs/ld-collate.c:2774 +#: locale/programs/ld-collate.c:2798 #, c-format msgid "%s: duplicate declaration of section `%s'" msgstr "%s: dubbele declaratie van sectie '%s'" -#: locale/programs/ld-collate.c:2913 +#: locale/programs/ld-collate.c:2937 #, c-format msgid "%s: unknown character in collating symbol name" msgstr "%s: onbekend teken in naam van sorteringssymbool" -#: locale/programs/ld-collate.c:3045 +#: locale/programs/ld-collate.c:3069 #, c-format msgid "%s: unknown character in equivalent definition name" msgstr "%s: onbekend teken in naam van equivalentiedefinitie" -#: locale/programs/ld-collate.c:3058 +#: locale/programs/ld-collate.c:3082 #, c-format msgid "%s: unknown character in equivalent definition value" msgstr "%s: onbekend teken in waarde van equivalentiedefinitie" -#: locale/programs/ld-collate.c:3068 +#: locale/programs/ld-collate.c:3092 #, c-format msgid "%s: unknown symbol `%s' in equivalent definition" msgstr "%s: onbekend symbool '%s' in equivalentiedefinitie" -#: locale/programs/ld-collate.c:3077 +#: locale/programs/ld-collate.c:3101 msgid "error while adding equivalent collating symbol" msgstr "fout bij toevoegen van equivalent sorteringssymbool" -#: locale/programs/ld-collate.c:3107 +#: locale/programs/ld-collate.c:3131 #, c-format msgid "duplicate definition of script `%s'" msgstr "dubbele definitie van script '%s'" -#: locale/programs/ld-collate.c:3155 +#: locale/programs/ld-collate.c:3179 #, c-format -msgid "%s: unknown section name `%s'" -msgstr "%s: onbekende sectienaam '%s'" +msgid "%s: unknown section name `%.*s'" +msgstr "%s: onbekende sectienaam '%.*s'" -#: locale/programs/ld-collate.c:3183 +#: locale/programs/ld-collate.c:3208 #, c-format msgid "%s: multiple order definitions for section `%s'" msgstr "%s: meerdere sorteervolgorde-definities voor sectie '%s'" -#: locale/programs/ld-collate.c:3208 +#: locale/programs/ld-collate.c:3233 #, c-format msgid "%s: invalid number of sorting rules" msgstr "%s: ongeldig aantal sorteervoorschriften" -#: locale/programs/ld-collate.c:3235 +#: locale/programs/ld-collate.c:3260 #, c-format msgid "%s: multiple order definitions for unnamed section" msgstr "%s: meerdere sorteervolgorde-definities voor naamloze sectie" -#: locale/programs/ld-collate.c:3289 locale/programs/ld-collate.c:3417 -#: locale/programs/ld-collate.c:3780 +#: locale/programs/ld-collate.c:3314 locale/programs/ld-collate.c:3442 +#: locale/programs/ld-collate.c:3804 #, c-format msgid "%s: missing `order_end' keyword" msgstr "%s: ontbrekend sleutelwoord 'order_end'" -#: locale/programs/ld-collate.c:3350 +#: locale/programs/ld-collate.c:3375 #, c-format msgid "%s: order for collating symbol %.*s not yet defined" msgstr "%s: sorteervolgorde voor symbool '%.*s' is nog niet gedefinieerd" -#: locale/programs/ld-collate.c:3368 +#: locale/programs/ld-collate.c:3393 #, c-format msgid "%s: order for collating element %.*s not yet defined" msgstr "%s: sorteervolgorde voor element '%.*s' is nog niet gedefinieerd" -#: locale/programs/ld-collate.c:3379 +#: locale/programs/ld-collate.c:3404 #, c-format msgid "%s: cannot reorder after %.*s: symbol not known" msgstr "%s: kan niet herordenen na '%.*s': dit symbool is onbekend" -#: locale/programs/ld-collate.c:3431 locale/programs/ld-collate.c:3792 +#: locale/programs/ld-collate.c:3456 locale/programs/ld-collate.c:3816 #, c-format msgid "%s: missing `reorder-end' keyword" msgstr "%s: ontbrekend sleutelwoord 'reorder-end'" -#: locale/programs/ld-collate.c:3465 locale/programs/ld-collate.c:3664 +#: locale/programs/ld-collate.c:3490 locale/programs/ld-collate.c:3688 #, c-format msgid "%s: section `%.*s' not known" msgstr "%s: sectie '%.*s' is onbekend" -#: locale/programs/ld-collate.c:3530 +#: locale/programs/ld-collate.c:3555 #, c-format msgid "%s: bad symbol <%.*s>" msgstr "%s: onjuist symbool <%.*s>" -#: locale/programs/ld-collate.c:3727 +#: locale/programs/ld-collate.c:3751 #, c-format msgid "%s: cannot have `%s' as end of ellipsis range" msgstr "%s: '%s' kan geen einde van bereik zijn" -#: locale/programs/ld-collate.c:3776 +#: locale/programs/ld-collate.c:3800 #, c-format msgid "%s: empty category description not allowed" msgstr "%s: lege categoriebeschrijving is niet toegestaan" -#: locale/programs/ld-collate.c:3795 +#: locale/programs/ld-collate.c:3819 #, c-format msgid "%s: missing `reorder-sections-end' keyword" msgstr "%s: ontbrekend sleutelwoord 'reorder-sections-end'" -#: locale/programs/ld-ctype.c:438 +#: locale/programs/ld-ctype.c:439 #, c-format msgid "No character set name specified in charmap" msgstr "Geen tekensetnaam aangegeven in tekenskaart" -#: locale/programs/ld-ctype.c:467 +#: locale/programs/ld-ctype.c:468 #, c-format msgid "character L'\\u%0*x' in class `%s' must be in class `%s'" msgstr "teken L'\\u%0*x' in klasse '%s' moet in klasse '%s' zitten" -#: locale/programs/ld-ctype.c:482 +#: locale/programs/ld-ctype.c:483 #, c-format msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'" msgstr "teken L'\\u%0*x' in klasse '%s' mag niet in klasse '%s' zitten" -#: locale/programs/ld-ctype.c:496 locale/programs/ld-ctype.c:554 +#: locale/programs/ld-ctype.c:497 locale/programs/ld-ctype.c:555 #, c-format msgid "internal error in %s, line %u" msgstr "**interne fout** in %s, regel %u" -#: locale/programs/ld-ctype.c:525 +#: locale/programs/ld-ctype.c:526 #, c-format msgid "character '%s' in class `%s' must be in class `%s'" msgstr "teken '%s' in klasse '%s' moet in klasse '%s' zitten" -#: locale/programs/ld-ctype.c:541 +#: locale/programs/ld-ctype.c:542 #, c-format msgid "character '%s' in class `%s' must not be in class `%s'" msgstr "teken '%s' in klasse '%s' mag niet in klasse '%s' zitten" -#: locale/programs/ld-ctype.c:571 locale/programs/ld-ctype.c:609 +#: locale/programs/ld-ctype.c:572 locale/programs/ld-ctype.c:610 #, c-format msgid "<SP> character not in class `%s'" msgstr "<SP>-teken zit niet in klasse '%s'" -#: locale/programs/ld-ctype.c:583 locale/programs/ld-ctype.c:620 +#: locale/programs/ld-ctype.c:584 locale/programs/ld-ctype.c:621 #, c-format msgid "<SP> character must not be in class `%s'" msgstr "<SP>-teken mag niet in klasse '%s' zitten" -#: locale/programs/ld-ctype.c:598 +#: locale/programs/ld-ctype.c:599 #, c-format msgid "character <SP> not defined in character map" msgstr "<SP>-teken is niet gedefinieerd in tekenskaart" -#: locale/programs/ld-ctype.c:712 +#: locale/programs/ld-ctype.c:714 #, c-format msgid "`digit' category has not entries in groups of ten" msgstr "het aantal items in de cijferscategorie is geen veelvoud van tien" -#: locale/programs/ld-ctype.c:761 +#: locale/programs/ld-ctype.c:763 #, c-format msgid "no input digits defined and none of the standard names in the charmap" msgstr "er zijn geen invoercijfers gedefinieerd en geen van de standaardnamen zit in de tekenskaart" -#: locale/programs/ld-ctype.c:826 +#: locale/programs/ld-ctype.c:828 #, c-format msgid "not all characters used in `outdigit' are available in the charmap" msgstr "niet alle tekens gebruikt in 'outdigit' zijn beschikbaar in de tekenskaart" -#: locale/programs/ld-ctype.c:843 +#: locale/programs/ld-ctype.c:845 #, c-format msgid "not all characters used in `outdigit' are available in the repertoire" msgstr "niet alle tekens gebruikt in 'outdigit' zijn beschikbaar in het repertoire" -#: locale/programs/ld-ctype.c:1243 +#: locale/programs/ld-ctype.c:1245 #, c-format msgid "character class `%s' already defined" msgstr "tekenklasse '%s' is al gedefinieerd" -#: locale/programs/ld-ctype.c:1249 +#: locale/programs/ld-ctype.c:1251 #, c-format msgid "implementation limit: no more than %Zd character classes allowed" msgstr "implementatiegrens: er zijn niet meer dan %Zd tekenklasses toegestaan" -#: locale/programs/ld-ctype.c:1275 +#: locale/programs/ld-ctype.c:1277 #, c-format msgid "character map `%s' already defined" msgstr "tekenskaart '%s' is al gedefinieerd" -#: locale/programs/ld-ctype.c:1281 +#: locale/programs/ld-ctype.c:1283 #, c-format msgid "implementation limit: no more than %d character maps allowed" msgstr "implementatiegrens: er zijn niet meer dan %d tekenskaarten toegestaan" -#: locale/programs/ld-ctype.c:1546 locale/programs/ld-ctype.c:1671 -#: locale/programs/ld-ctype.c:1777 locale/programs/ld-ctype.c:2466 -#: locale/programs/ld-ctype.c:3462 +#: locale/programs/ld-ctype.c:1548 locale/programs/ld-ctype.c:1673 +#: locale/programs/ld-ctype.c:1779 locale/programs/ld-ctype.c:2471 +#: locale/programs/ld-ctype.c:3467 #, c-format msgid "%s: field `%s' does not contain exactly ten entries" msgstr "%s: het veld '%s' bevat niet precies tien items" -#: locale/programs/ld-ctype.c:1574 locale/programs/ld-ctype.c:2145 +#: locale/programs/ld-ctype.c:1576 locale/programs/ld-ctype.c:2150 #, c-format msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>" msgstr "eindwaarde <U%0*X> van bereik is kleiner dan beginwaarde <U%0*X>" -#: locale/programs/ld-ctype.c:1701 +#: locale/programs/ld-ctype.c:1703 msgid "start and end character sequence of range must have the same length" msgstr "begin- en eindbytereeks van bereik moeten dezelfde lengte hebben" -#: locale/programs/ld-ctype.c:1708 +#: locale/programs/ld-ctype.c:1710 msgid "to-value character sequence is smaller than from-value sequence" msgstr "eindwaarde is kleiner dan beginwaarde" -#: locale/programs/ld-ctype.c:2065 locale/programs/ld-ctype.c:2116 +#: locale/programs/ld-ctype.c:2070 locale/programs/ld-ctype.c:2121 msgid "premature end of `translit_ignore' definition" msgstr "voortijdig einde van definitie van 'translit_ignore'" -#: locale/programs/ld-ctype.c:2071 locale/programs/ld-ctype.c:2122 -#: locale/programs/ld-ctype.c:2164 +#: locale/programs/ld-ctype.c:2076 locale/programs/ld-ctype.c:2127 +#: locale/programs/ld-ctype.c:2169 msgid "syntax error" msgstr "syntaxfout" -#: locale/programs/ld-ctype.c:2298 +#: locale/programs/ld-ctype.c:2303 #, c-format msgid "%s: syntax error in definition of new character class" msgstr "%s: syntaxfout in definitie van nieuwe tekenklasse" -#: locale/programs/ld-ctype.c:2313 +#: locale/programs/ld-ctype.c:2318 #, c-format msgid "%s: syntax error in definition of new character map" msgstr "%s: syntaxfout in definitie van nieuwe tekenskaart" -#: locale/programs/ld-ctype.c:2488 +#: locale/programs/ld-ctype.c:2493 msgid "ellipsis range must be marked by two operands of same type" msgstr "een bereik met een beletselteken moet twee parameters van dezelfde soort bevatten" -#: locale/programs/ld-ctype.c:2497 +#: locale/programs/ld-ctype.c:2502 msgid "with symbolic name range values the absolute ellipsis `...' must not be used" msgstr "in een bereik met symbolische namen mag het absolute beletselteken '...' niet gebruikt worden" -#: locale/programs/ld-ctype.c:2512 +#: locale/programs/ld-ctype.c:2517 msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'" msgstr "in een bereik met UCS-waarden moet het hexadecimale symbolische beletselsteken '..' gebruikt worden" -#: locale/programs/ld-ctype.c:2526 +#: locale/programs/ld-ctype.c:2531 msgid "with character code range values one must use the absolute ellipsis `...'" msgstr "in een bereik met tekencodes moet het absolute beletselteken '...' gebruikt worden" -#: locale/programs/ld-ctype.c:2677 +#: locale/programs/ld-ctype.c:2682 #, c-format msgid "duplicated definition for mapping `%s'" msgstr "dubbele definitie van afbeelding '%s'" -#: locale/programs/ld-ctype.c:2763 locale/programs/ld-ctype.c:2907 +#: locale/programs/ld-ctype.c:2768 locale/programs/ld-ctype.c:2912 #, c-format msgid "%s: `translit_start' section does not end with `translit_end'" msgstr "%s: sectie 'translit_start' eindigt niet met 'translit_end'" -#: locale/programs/ld-ctype.c:2858 +#: locale/programs/ld-ctype.c:2863 #, c-format msgid "%s: duplicate `default_missing' definition" msgstr "%s: dubbele definitie van 'default_missing'" -#: locale/programs/ld-ctype.c:2863 +#: locale/programs/ld-ctype.c:2868 msgid "previous definition was here" msgstr "de vorige definitie was hier" -#: locale/programs/ld-ctype.c:2885 +#: locale/programs/ld-ctype.c:2890 #, c-format msgid "%s: no representable `default_missing' definition found" msgstr "%s: geen representeerbare definitie van 'default_missing' gevonden" -#: locale/programs/ld-ctype.c:3038 -#, c-format -msgid "%s: character `%s' not defined in charmap while needed as default value" -msgstr "%s: teken '%s' is niet gedefinieerd maar is nodig als standaardwaarde" - #: locale/programs/ld-ctype.c:3043 locale/programs/ld-ctype.c:3127 #: locale/programs/ld-ctype.c:3147 locale/programs/ld-ctype.c:3168 #: locale/programs/ld-ctype.c:3189 locale/programs/ld-ctype.c:3210 #: locale/programs/ld-ctype.c:3231 locale/programs/ld-ctype.c:3271 #: locale/programs/ld-ctype.c:3292 locale/programs/ld-ctype.c:3359 -#, c-format -msgid "%s: character `%s' in charmap not representable with one byte" -msgstr "%s: teken '%s' in de tekenskaart is niet te representeren met één byte" - -#: locale/programs/ld-ctype.c:3122 locale/programs/ld-ctype.c:3142 -#: locale/programs/ld-ctype.c:3184 locale/programs/ld-ctype.c:3205 -#: locale/programs/ld-ctype.c:3226 locale/programs/ld-ctype.c:3266 -#: locale/programs/ld-ctype.c:3287 locale/programs/ld-ctype.c:3354 -#: locale/programs/ld-ctype.c:3396 locale/programs/ld-ctype.c:3421 +#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426 #, c-format msgid "%s: character `%s' not defined while needed as default value" msgstr "%s: teken '%s' is niet gedefinieerd maar is nodig als standaardwaarde" -#: locale/programs/ld-ctype.c:3163 +#: locale/programs/ld-ctype.c:3048 locale/programs/ld-ctype.c:3132 +#: locale/programs/ld-ctype.c:3152 locale/programs/ld-ctype.c:3173 +#: locale/programs/ld-ctype.c:3194 locale/programs/ld-ctype.c:3215 +#: locale/programs/ld-ctype.c:3236 locale/programs/ld-ctype.c:3276 +#: locale/programs/ld-ctype.c:3297 locale/programs/ld-ctype.c:3364 #, c-format -msgid "character `%s' not defined while needed as default value" -msgstr "teken '%s' is niet gedefinieerd maar is nodig als standaardwaarde" +msgid "%s: character `%s' in charmap not representable with one byte" +msgstr "%s: teken '%s' in de tekenskaart is niet te representeren met één byte" -#: locale/programs/ld-ctype.c:3403 locale/programs/ld-ctype.c:3428 +#: locale/programs/ld-ctype.c:3408 locale/programs/ld-ctype.c:3433 #, c-format msgid "%s: character `%s' needed as default value not representable with one byte" msgstr "%s: teken '%s' is nodig als standaardwaarde maar niet te representeren met één byte" -#: locale/programs/ld-ctype.c:3483 +#: locale/programs/ld-ctype.c:3489 #, c-format msgid "no output digits defined and none of the standard names in the charmap" msgstr "er zijn geen uitvoercijfers gedefinieerd en geen van de standaardnamen zit in de tekenskaart" -#: locale/programs/ld-ctype.c:3774 +#: locale/programs/ld-ctype.c:3780 #, c-format msgid "%s: transliteration data from locale `%s' not available" msgstr "%s: transliteratiegegevens van locale '%s' zijn niet beschikbaar" -#: locale/programs/ld-ctype.c:3875 +#: locale/programs/ld-ctype.c:3881 #, c-format msgid "%s: table for class \"%s\": %lu bytes\n" msgstr "%s: tabel voor klasse \"%s\": %lu bytes\n" -#: locale/programs/ld-ctype.c:3944 +#: locale/programs/ld-ctype.c:3950 #, c-format msgid "%s: table for map \"%s\": %lu bytes\n" msgstr "%s: tabel voor kaart \"%s\": %lu bytes\n" -#: locale/programs/ld-ctype.c:4077 +#: locale/programs/ld-ctype.c:4083 #, c-format msgid "%s: table for width: %lu bytes\n" msgstr "%s: tabel voor breedte: %lu bytes\n" -#: locale/programs/ld-identification.c:169 +#: locale/programs/ld-identification.c:170 #, c-format msgid "%s: no identification for category `%s'" msgstr "%s: geen identificatie voor categorie '%s'" -#: locale/programs/ld-identification.c:434 +#: locale/programs/ld-identification.c:435 #, c-format msgid "%s: duplicate category version definition" msgstr "%s: dubbele definitie van categorieversie" -#: locale/programs/ld-measurement.c:112 +#: locale/programs/ld-measurement.c:113 #, c-format msgid "%s: invalid value for field `%s'" msgstr "%s: ongeldige waarde voor het veld '%s'" -#: locale/programs/ld-messages.c:113 locale/programs/ld-messages.c:147 +#: locale/programs/ld-messages.c:114 locale/programs/ld-messages.c:148 #, c-format msgid "%s: field `%s' undefined" msgstr "%s: het veld '%s' is ongedefinieerd" -#: locale/programs/ld-messages.c:120 locale/programs/ld-messages.c:154 +#: locale/programs/ld-messages.c:121 locale/programs/ld-messages.c:155 +#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:118 #, c-format msgid "%s: value for field `%s' must not be an empty string" msgstr "%s: de waarde voor het veld '%s' mag geen lege tekenreeks zijn" -#: locale/programs/ld-messages.c:136 locale/programs/ld-messages.c:170 +#: locale/programs/ld-messages.c:137 locale/programs/ld-messages.c:171 #, c-format msgid "%s: no correct regular expression for field `%s': %s" msgstr "%s: geen juiste reguliere expressie voor het veld '%s': %s" -#: locale/programs/ld-monetary.c:222 +#: locale/programs/ld-monetary.c:224 #, c-format msgid "%s: value of field `int_curr_symbol' has wrong length" msgstr "%s: de waarde van het veld 'int_curr_symbol' heeft een verkeerde lengte" -#: locale/programs/ld-monetary.c:235 +#: 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: de waarde van het veld 'int_curr_symbol' is geen geldige naam uit ISO 4217" -#: locale/programs/ld-monetary.c:254 locale/programs/ld-numeric.c:117 -#, c-format -msgid "%s: value for field `%s' must not be the empty string" -msgstr "%s: de waarde voor het veld '%s' mag geen lege tekenreeks zijn" - -#: locale/programs/ld-monetary.c:282 locale/programs/ld-monetary.c:312 +#: locale/programs/ld-monetary.c:285 locale/programs/ld-monetary.c:315 #, c-format msgid "%s: value for field `%s' must be in range %d...%d" msgstr "%s: de waarde voor het veld '%s' moet binnen het bereik %d...%d liggen" -#: locale/programs/ld-monetary.c:744 locale/programs/ld-numeric.c:273 +#: locale/programs/ld-monetary.c:747 locale/programs/ld-numeric.c:274 #, c-format msgid "%s: value for field `%s' must be a single character" msgstr "%s: de waarde voor het veld '%s' moet een enkel teken zijn" -#: locale/programs/ld-monetary.c:841 locale/programs/ld-numeric.c:317 +#: locale/programs/ld-monetary.c:844 locale/programs/ld-numeric.c:318 #, c-format msgid "%s: `-1' must be last entry in `%s' field" msgstr "%s: '-1' moet het laatste item in het veld '%s' zijn" -#: locale/programs/ld-monetary.c:863 locale/programs/ld-numeric.c:334 +#: locale/programs/ld-monetary.c:866 locale/programs/ld-numeric.c:335 #, c-format msgid "%s: values for field `%s' must be smaller than 127" msgstr "%s: de waarden in het veld '%s' moeten kleiner zijn dan 127" -#: locale/programs/ld-monetary.c:906 +#: locale/programs/ld-monetary.c:909 msgid "conversion rate value cannot be zero" msgstr "waarde van conversiekoers kan niet nul zijn" -#: locale/programs/ld-name.c:128 locale/programs/ld-telephone.c:125 -#: locale/programs/ld-telephone.c:148 +#: locale/programs/ld-name.c:129 locale/programs/ld-telephone.c:126 +#: locale/programs/ld-telephone.c:149 #, c-format msgid "%s: invalid escape sequence in field `%s'" msgstr "%s: ongeldige stuurcode in het veld '%s'" -#: locale/programs/ld-time.c:246 +#: locale/programs/ld-time.c:247 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'" msgstr "%s: de richtingsaanduiding in tekenreeks %Zd in het veld 'era' is niet '+' of '-'" -#: locale/programs/ld-time.c:257 +#: locale/programs/ld-time.c:258 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not a single character" msgstr "%s: de richtingsaanduiding in tekenreeks %Zd in het veld 'era' is niet een enkel teken" -#: locale/programs/ld-time.c:270 +#: locale/programs/ld-time.c:271 #, c-format msgid "%s: invalid number for offset in string %Zd in `era' field" msgstr "%s: ongeldig getal voor verplaatsing in tekenreeks %Zd in het veld 'era'" -#: locale/programs/ld-time.c:278 +#: locale/programs/ld-time.c:279 #, c-format msgid "%s: garbage at end of offset value in string %Zd in `era' field" msgstr "%s: rommel aan het einde van verplaatsingswaarde in tekenreeks %Zd in het veld 'era'" -#: locale/programs/ld-time.c:329 +#: locale/programs/ld-time.c:330 #, c-format msgid "%s: invalid starting date in string %Zd in `era' field" msgstr "%s: ongeldige begindatum in tekenreeks %Zd in het veld 'era'" -#: locale/programs/ld-time.c:338 +#: locale/programs/ld-time.c:339 #, c-format msgid "%s: garbage at end of starting date in string %Zd in `era' field " msgstr "%s: rommel aan het einde van de begindatum in tekenreeks %Zd in het veld 'era'" -#: locale/programs/ld-time.c:357 +#: locale/programs/ld-time.c:358 #, c-format msgid "%s: starting date is invalid in string %Zd in `era' field" msgstr "%s: begindatum is ongeldig in tekenreeks %Zd in het veld 'era'" -#: locale/programs/ld-time.c:406 +#: locale/programs/ld-time.c:407 #, c-format msgid "%s: invalid stopping date in string %Zd in `era' field" msgstr "%s: ongeldige einddatum in tekenreeks %Zd in het veld 'era'" -#: locale/programs/ld-time.c:415 +#: locale/programs/ld-time.c:416 #, c-format msgid "%s: garbage at end of stopping date in string %Zd in `era' field" msgstr "%s: rommel aan het einde van de einddatum in tekenreeks %Zd in het veld 'era'" -#: locale/programs/ld-time.c:434 +#: locale/programs/ld-time.c:435 #, c-format msgid "%s: stopping date is invalid in string %Zd in `era' field" msgstr "%s: einddatum is ongeldig in tekenreeks %Zd in het veld 'era'" -#: locale/programs/ld-time.c:443 +#: locale/programs/ld-time.c:444 #, c-format msgid "%s: missing era name in string %Zd in `era' field" msgstr "%s: ontbrekende tijdperknaam in tekenreeks %Zd in het veld 'era'" -#: locale/programs/ld-time.c:455 +#: locale/programs/ld-time.c:456 #, c-format msgid "%s: missing era format in string %Zd in `era' field" msgstr "%s: ontbrekende tijdperk-opmaak in tekenreeks %Zd in het veld 'era'" -#: locale/programs/ld-time.c:496 +#: locale/programs/ld-time.c:497 #, c-format msgid "%s: third operand for value of field `%s' must not be larger than %d" msgstr "%s: derde parameter voor de waarde van het veld '%s' mag niet groter zijn dan %d" -#: locale/programs/ld-time.c:504 locale/programs/ld-time.c:512 -#, c-format -msgid "%s: values of field `%s' must not be larger than %d" -msgstr "%s: waarden in het veld '%s' mogen niet groter zijn dan %d" - -#: locale/programs/ld-time.c:520 +#: locale/programs/ld-time.c:505 locale/programs/ld-time.c:513 +#: locale/programs/ld-time.c:521 #, c-format msgid "%s: values for field `%s' must not be larger than %d" msgstr "%s: waarden in het veld '%s' mogen niet groter zijn dan %d" -#: locale/programs/ld-time.c:1003 +#: locale/programs/ld-time.c:1004 #, c-format msgid "%s: too few values for field `%s'" msgstr "%s: te weinig waarden voor het veld '%s'" -#: locale/programs/ld-time.c:1048 +#: locale/programs/ld-time.c:1049 msgid "extra trailing semicolon" msgstr "een extra puntkomma aan het einde" -#: locale/programs/ld-time.c:1051 +#: locale/programs/ld-time.c:1052 #, c-format msgid "%s: too many values for field `%s'" msgstr "%s: te veel waarden voor het veld '%s'" -#: locale/programs/linereader.c:129 +#: locale/programs/linereader.c:130 msgid "trailing garbage at end of line" msgstr "rommel aan het einde van de regel" -#: locale/programs/linereader.c:297 +#: locale/programs/linereader.c:298 msgid "garbage at end of number" msgstr "rommel aan het einde van getal" -#: locale/programs/linereader.c:409 +#: locale/programs/linereader.c:410 msgid "garbage at end of character code specification" msgstr "rommel aan het einde van tekencode-specificatie" -#: locale/programs/linereader.c:495 +#: locale/programs/linereader.c:496 msgid "unterminated symbolic name" msgstr "onafgesloten symbolische naam" -#: locale/programs/linereader.c:622 +#: locale/programs/linereader.c:623 msgid "illegal escape sequence at end of string" msgstr "ongeldige stuurcode aan het einde van tekenreeks" -#: locale/programs/linereader.c:626 locale/programs/linereader.c:854 +#: locale/programs/linereader.c:627 locale/programs/linereader.c:855 msgid "unterminated string" msgstr "onafgesloten tekenreeks" -#: locale/programs/linereader.c:668 +#: locale/programs/linereader.c:669 msgid "non-symbolic character value should not be used" msgstr "niet-symbolische tekenwaarden zouden niet gebruikt moeten worden" -#: locale/programs/linereader.c:815 +#: locale/programs/linereader.c:816 #, c-format msgid "symbol `%.*s' not in charmap" msgstr "symbool '%.*s' zit niet in de tekenskaart" -#: locale/programs/linereader.c:836 +#: locale/programs/linereader.c:837 #, c-format msgid "symbol `%.*s' not in repertoire map" msgstr "symbool '%.*s' zit niet in de repertoire-kaart" -#: locale/programs/locale.c:73 +#: locale/programs/locale.c:74 msgid "System information:" msgstr "Systeeminformatie:" -#: locale/programs/locale.c:75 +#: locale/programs/locale.c:76 msgid "Write names of available locales" msgstr "namen van beschikbare locales tonen" -#: locale/programs/locale.c:77 +#: locale/programs/locale.c:78 msgid "Write names of available charmaps" msgstr "namen van beschikbare tekenskaarten tonen" -#: locale/programs/locale.c:78 +#: locale/programs/locale.c:79 msgid "Modify output format:" msgstr "Aanpassing van uitvoer:" -#: locale/programs/locale.c:79 +#: locale/programs/locale.c:80 msgid "Write names of selected categories" msgstr "namen van geselecteerde categorieën tonen" -#: locale/programs/locale.c:80 +#: locale/programs/locale.c:81 msgid "Write names of selected keywords" msgstr "namen van geselecteerde sleutelwoorden tonen" -#: locale/programs/locale.c:81 +#: locale/programs/locale.c:82 msgid "Print more information" msgstr "breedsprakige uitvoer" -#: locale/programs/locale.c:86 +#: locale/programs/locale.c:87 msgid "" -"Get locale-specific information.For bug reporting instructions, please see:\n" +"Get locale-specific information.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" -"Informatie over locales weergeven.Voor het rapporteren van fouten, zie:\n" +" \n" +"Informatie over locales weergeven.\vVoor het rapporteren van fouten, zie:\n" " <http://www.gnu.org/software/libc/bugs.html>.\n" -#: locale/programs/locale.c:91 +#: locale/programs/locale.c:92 msgid "" "NAME\n" "[-a|-m]" @@ -2439,104 +2412,106 @@ msgstr "" "NAAM\n" "[-a|-m]" -#: locale/programs/locale.c:192 +#: locale/programs/locale.c:193 #, c-format msgid "Cannot set LC_CTYPE to default locale" msgstr "Kan LC_TYPE niet op de standaard-locale instellen" -#: locale/programs/locale.c:194 +#: locale/programs/locale.c:195 #, c-format msgid "Cannot set LC_MESSAGES to default locale" msgstr "Kan LC_MESSAGES niet op de standaard-locale instellen" -#: locale/programs/locale.c:207 +#: locale/programs/locale.c:208 #, c-format msgid "Cannot set LC_COLLATE to default locale" msgstr "Kan LC_COLLATE niet op de standaard-locale instellen" -#: locale/programs/locale.c:223 +#: locale/programs/locale.c:224 #, c-format msgid "Cannot set LC_ALL to default locale" msgstr "Kan LC_ALL niet op de standaard-locale instellen" -#: locale/programs/locale.c:499 +#: locale/programs/locale.c:500 #, c-format msgid "while preparing output" msgstr "tijdens voorbereiden van uitvoer" -#: locale/programs/localedef.c:119 +#: locale/programs/localedef.c:120 msgid "Input Files:" msgstr "Invoerbestanden:" -#: locale/programs/localedef.c:121 +#: locale/programs/localedef.c:122 msgid "Symbolic character names defined in FILE" msgstr "bestand dat tekennamen op codes afbeeldt" -#: locale/programs/localedef.c:122 +#: locale/programs/localedef.c:123 msgid "Source definitions are found in FILE" msgstr "bestand met brondefinities" -#: locale/programs/localedef.c:124 +#: locale/programs/localedef.c:125 msgid "FILE contains mapping from symbolic names to UCS4 values" msgstr "bestand dat tekennamen op UCS4-waarden afbeeldt" -#: locale/programs/localedef.c:128 +#: locale/programs/localedef.c:129 msgid "Create output even if warning messages were issued" msgstr "ook uitvoer genereren na waarschuwingen" -#: locale/programs/localedef.c:129 +#: locale/programs/localedef.c:130 msgid "Create old-style tables" msgstr "tabellen in oude stijl maken" -#: locale/programs/localedef.c:130 +#: locale/programs/localedef.c:131 msgid "Optional output file prefix" msgstr "optioneel voorvoegsel voor uitvoerbestand" -#: locale/programs/localedef.c:131 +#: locale/programs/localedef.c:132 msgid "Be strictly POSIX conform" msgstr "strict de POSIX-voorschriften volgen" -#: locale/programs/localedef.c:133 +#: locale/programs/localedef.c:134 msgid "Suppress warnings and information messages" msgstr "waarschuwingen en meldingen onderdrukken" -#: locale/programs/localedef.c:134 +#: locale/programs/localedef.c:135 msgid "Print more messages" msgstr "breedsprakige uitvoer" -#: locale/programs/localedef.c:135 +#: locale/programs/localedef.c:136 msgid "Archive control:" msgstr "Archiefbeheer:" -#: locale/programs/localedef.c:137 +#: locale/programs/localedef.c:138 msgid "Don't add new data to archive" msgstr "geen nieuwe gegevens aan archief toevoegen" -#: locale/programs/localedef.c:139 +#: locale/programs/localedef.c:140 msgid "Add locales named by parameters to archive" msgstr "genoemde locales aan archief toevoegen" -#: locale/programs/localedef.c:140 +#: locale/programs/localedef.c:141 msgid "Replace existing archive content" msgstr "bestaande inhoud van archief vervangen" -#: locale/programs/localedef.c:142 +#: locale/programs/localedef.c:143 msgid "Remove locales named by parameters from archive" msgstr "genoemde locales uit archief verwijderen" -#: locale/programs/localedef.c:143 +#: locale/programs/localedef.c:144 msgid "List content of archive" msgstr "inhoud van archief weergeven" -#: locale/programs/localedef.c:145 +#: locale/programs/localedef.c:146 msgid "locale.alias file to consult when making archive" msgstr "te raadplegen aliassenbestand" -#: locale/programs/localedef.c:150 +#: locale/programs/localedef.c:151 msgid "Compile locale specification" -msgstr "Een locale-specificatie compileren." +msgstr "" +" \n" +"Een locale-specificatie compileren." -#: locale/programs/localedef.c:153 +#: locale/programs/localedef.c:154 msgid "" "NAME\n" "[--add-to-archive|--delete-from-archive] FILE...\n" @@ -2546,28 +2521,28 @@ msgstr "" "[--add-to-archive|--delete-from-archive] BESTAND...\n" "--list-archive [BESTAND]" -#: locale/programs/localedef.c:231 +#: locale/programs/localedef.c:232 #, c-format msgid "cannot create directory for output files" msgstr "kan map voor uitvoerbestanden niet aanmaken" -#: locale/programs/localedef.c:242 +#: locale/programs/localedef.c:243 #, c-format msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" msgstr "FATAAL: systeem definieert '_POSIX2_LOCALEDEF' niet" -#: locale/programs/localedef.c:256 locale/programs/localedef.c:272 -#: locale/programs/localedef.c:598 locale/programs/localedef.c:618 +#: locale/programs/localedef.c:257 locale/programs/localedef.c:273 +#: locale/programs/localedef.c:599 locale/programs/localedef.c:619 #, c-format msgid "cannot open locale definition file `%s'" msgstr "kan locale-definitiebestand '%s' niet openen" -#: locale/programs/localedef.c:284 +#: locale/programs/localedef.c:285 #, c-format msgid "cannot write output files to `%s'" msgstr "kan uitvoerbestanden niet naar '%s' schrijven" -#: locale/programs/localedef.c:365 +#: locale/programs/localedef.c:366 #, c-format msgid "" "System's directory for character maps : %s\n" @@ -2581,209 +2556,205 @@ msgstr "" "\n" "%s" -#: locale/programs/localedef.c:566 +#: locale/programs/localedef.c:567 #, c-format msgid "circular dependencies between locale definitions" msgstr "circulaire afhankelijkheid tussen locale-definities" -#: locale/programs/localedef.c:572 +#: locale/programs/localedef.c:573 #, c-format msgid "cannot add already read locale `%s' a second time" msgstr "kan de reeds gelezen locale '%s' niet nogmaals toevoegen" -#: locale/programs/locarchive.c:87 locale/programs/locarchive.c:256 +#: locale/programs/locarchive.c:88 locale/programs/locarchive.c:261 #, c-format msgid "cannot create temporary file" msgstr "kan tijdelijk bestand niet aanmaken" -#: locale/programs/locarchive.c:116 locale/programs/locarchive.c:302 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:307 #, c-format msgid "cannot initialize archive file" msgstr "kan archiefbestand niet initialiseren" -#: locale/programs/locarchive.c:123 locale/programs/locarchive.c:309 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:314 #, c-format msgid "cannot resize archive file" msgstr "kan grootte van archiefbestand niet aanpassen" -#: locale/programs/locarchive.c:132 locale/programs/locarchive.c:318 -#: locale/programs/locarchive.c:506 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:323 +#: locale/programs/locarchive.c:527 #, c-format msgid "cannot map archive header" msgstr "kan archiefkop niet in het geheugen plaatsen" -#: locale/programs/locarchive.c:154 +#: locale/programs/locarchive.c:156 #, c-format msgid "failed to create new locale archive" msgstr "aanmaken van een nieuw locale-archief is mislukt" -#: locale/programs/locarchive.c:166 +#: locale/programs/locarchive.c:168 #, c-format msgid "cannot change mode of new locale archive" msgstr "kan modus van het nieuwe locale-archief niet wijzigen" -#: locale/programs/locarchive.c:250 +#: locale/programs/locarchive.c:255 #, c-format msgid "cannot map locale archive file" msgstr "kan locale-archief niet in het geheugen plaatsen" -#: locale/programs/locarchive.c:326 +#: locale/programs/locarchive.c:331 #, c-format msgid "cannot lock new archive" msgstr "kan nieuwe archief niet vergrendelen" -#: locale/programs/locarchive.c:375 +#: locale/programs/locarchive.c:396 #, c-format msgid "cannot extend locale archive file" msgstr "kan locale-archiefbestand niet uitbreiden" -#: locale/programs/locarchive.c:384 +#: locale/programs/locarchive.c:405 #, c-format msgid "cannot change mode of resized locale archive" msgstr "kan modus van aangepast locale-archief niet wijzigen" -#: locale/programs/locarchive.c:392 +#: locale/programs/locarchive.c:413 #, c-format msgid "cannot rename new archive" msgstr "kan nieuwe archief niet hernoemen" -#: locale/programs/locarchive.c:445 +#: locale/programs/locarchive.c:466 #, c-format msgid "cannot open locale archive \"%s\"" msgstr "kan locale-archief '%s' niet openen" -#: locale/programs/locarchive.c:450 +#: locale/programs/locarchive.c:471 #, c-format msgid "cannot stat locale archive \"%s\"" msgstr "kan status van locale-archief '%s' niet opvragen" -#: locale/programs/locarchive.c:469 +#: locale/programs/locarchive.c:490 #, c-format msgid "cannot lock locale archive \"%s\"" msgstr "kan locale-archief '%s' niet vergrendelen" -#: locale/programs/locarchive.c:492 +#: locale/programs/locarchive.c:513 #, c-format msgid "cannot read archive header" msgstr "kan archiefkop niet lezen" -#: locale/programs/locarchive.c:552 +#: locale/programs/locarchive.c:573 #, c-format msgid "locale '%s' already exists" msgstr "locale '%s' bestaat al" -#: locale/programs/locarchive.c:783 locale/programs/locarchive.c:798 -#: locale/programs/locarchive.c:810 locale/programs/locarchive.c:822 -#: locale/programs/locfile.c:343 +#: locale/programs/locarchive.c:804 locale/programs/locarchive.c:819 +#: locale/programs/locarchive.c:831 locale/programs/locarchive.c:843 +#: locale/programs/locfile.c:344 #, c-format msgid "cannot add to locale archive" msgstr "kan niet aan locale-archief toevoegen" -#: locale/programs/locarchive.c:977 +#: locale/programs/locarchive.c:998 #, c-format msgid "locale alias file `%s' not found" msgstr "kan locale-aliassenbestand '%s' niet vinden" -#: locale/programs/locarchive.c:1121 +#: locale/programs/locarchive.c:1142 #, c-format msgid "Adding %s\n" msgstr "Toevoegen van %s\n" -#: locale/programs/locarchive.c:1127 +#: locale/programs/locarchive.c:1148 #, c-format msgid "stat of \"%s\" failed: %s: ignored" msgstr "kan status van '%s' niet opvragen: %s -- genegeerd" -#: locale/programs/locarchive.c:1133 +#: locale/programs/locarchive.c:1154 #, c-format msgid "\"%s\" is no directory; ignored" msgstr "'%s' is geen map -- genegeerd" -#: locale/programs/locarchive.c:1140 +#: locale/programs/locarchive.c:1161 #, c-format msgid "cannot open directory \"%s\": %s: ignored" msgstr "kan map '%s' niet openen: %s -- genegeerd" -#: locale/programs/locarchive.c:1212 +#: locale/programs/locarchive.c:1233 #, c-format msgid "incomplete set of locale files in \"%s\"" msgstr "onvolledige verzameling van locale-bestanden in '%s'" -#: locale/programs/locarchive.c:1276 +#: locale/programs/locarchive.c:1297 #, c-format msgid "cannot read all files in \"%s\": ignored" msgstr "kan niet alle bestanden in '%s' lezen -- genegeerd" -#: locale/programs/locarchive.c:1346 +#: locale/programs/locarchive.c:1367 #, c-format msgid "locale \"%s\" not in archive" msgstr "locale '%s' zit niet in archief" -#: locale/programs/locfile.c:131 +#: locale/programs/locfile.c:132 #, c-format msgid "argument to `%s' must be a single character" msgstr "argument van '%s' moet een enkel teken zijn" -#: locale/programs/locfile.c:251 +#: locale/programs/locfile.c:252 msgid "syntax error: not inside a locale definition section" msgstr "syntaxfout: niet binnen een locale-definitie-sectie" -#: locale/programs/locfile.c:625 +#: locale/programs/locfile.c:626 #, c-format msgid "cannot open output file `%s' for category `%s'" msgstr "kan uitvoerbestand '%s' niet openen voor categorie '%s'" -#: locale/programs/locfile.c:649 +#: locale/programs/locfile.c:650 #, c-format msgid "failure while writing data for category `%s'" msgstr "fout bij schrijven van gegevens voor categorie '%s'" -#: locale/programs/locfile.c:745 +#: locale/programs/locfile.c:746 #, c-format msgid "cannot create output file `%s' for category `%s'" msgstr "kan uitvoerbestand '%s' niet aanmaken voor categorie '%s'" -#: locale/programs/locfile.c:781 +#: locale/programs/locfile.c:782 msgid "expect string argument for `copy'" msgstr "argument van 'copy' dient een tekenreeks te zijn" -#: locale/programs/locfile.c:785 +#: locale/programs/locfile.c:786 msgid "locale name should consist only of portable characters" msgstr "een locale-naam mag alleen uit overdraagbare tekens bestaan" -#: locale/programs/locfile.c:804 +#: locale/programs/locfile.c:805 msgid "no other keyword shall be specified when `copy' is used" msgstr "als 'copy' gebruikt wordt, zijn geen andere sleutelwoorden toegestaan" -#: locale/programs/repertoire.c:229 locale/programs/repertoire.c:270 -#: locale/programs/repertoire.c:295 +#: locale/programs/locfile.c:819 +#, c-format +msgid "`%1$s' definition does not end with `END %1$s'" +msgstr "%1$s: definitie eindigt niet met 'END %1$s'" + +#: 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 "syntaxfout in repertoire-kaart-definitie: %s" -#: locale/programs/repertoire.c:271 +#: locale/programs/repertoire.c:272 msgid "no <Uxxxx> or <Uxxxxxxxx> value given" msgstr "geen waarde <Uxxxx> of <Uxxxxxxxx> gegeven" -#: locale/programs/repertoire.c:331 +#: locale/programs/repertoire.c:332 #, c-format msgid "cannot save new repertoire map" msgstr "kan nieuwe repertoire-kaart niet opslaan" -#: locale/programs/repertoire.c:342 +#: locale/programs/repertoire.c:343 #, c-format msgid "repertoire map file `%s' not found" msgstr "kan repertoire-kaart '%s' niet vinden" -#: locale/programs/repertoire.c:449 -#, c-format -msgid "<%s> and <%s> are invalid names for range" -msgstr "<%s> en <%s> zijn ongeldige namen voor een bereik" - -#: locale/programs/repertoire.c:456 -msgid "upper limit in range is not smaller then lower limit" -msgstr "bovengrens in bereik is kleiner dan ondergrens" - # ###XXX slaaf/meester? #: login/programs/pt_chown.c:74 #, c-format @@ -2817,32 +2788,32 @@ msgstr "te veel argumenten" msgid "needs to be installed setuid `root'" msgstr "moet als setuid(root) geïnstalleerd zijn" -#: malloc/mcheck.c:324 +#: malloc/mcheck.c:330 msgid "memory is consistent, library is buggy\n" msgstr "geheugentoestand is wel consistent -- **programmafout** in de bibliotheek\n" -#: malloc/mcheck.c:327 +#: malloc/mcheck.c:333 msgid "memory clobbered before allocated block\n" msgstr "geheugen vóór toegewezen blok is overschreven\n" -#: malloc/mcheck.c:330 +#: malloc/mcheck.c:336 msgid "memory clobbered past end of allocated block\n" msgstr "geheugen na toegewezen blok is overschreven\n" -#: malloc/mcheck.c:333 +#: malloc/mcheck.c:339 msgid "block freed twice\n" msgstr "blok is tweemaal vrijgegeven\n" -#: malloc/mcheck.c:336 +#: malloc/mcheck.c:342 msgid "bogus mcheck_status, library is buggy\n" msgstr "onjuiste 'mcheck_status' -- **programmafout** in de bibliotheek\n" #: malloc/memusage.sh:27 -msgid "Try `memusage --help' for more information." -msgstr "Probeer 'memusage --help' voor meer informatie." +msgid "Try \\`memusage --help' for more information." +msgstr "Typ 'memusage --help' voor meer informatie." #: malloc/memusage.sh:33 -msgid "memusage: option `$1' requires an argument" +msgid "memusage: option \\`$1' requires an argument" msgstr "memusage: optie '$1' vereist een argument" #: malloc/memusage.sh:39 @@ -2855,7 +2826,7 @@ msgid "" " -d,--data=FILE Generate binary data file and store it in FILE\n" " -u,--unbuffered Don't buffer output\n" " -b,--buffer=SIZE Collect SIZE entries before writing them out\n" -" --no-timer Don't collect additional information though timer\n" +" --no-timer Don't collect additional information through timer\n" " -m,--mmap Also trace mmap & friends\n" "\n" " -?,--help Print this help and exit\n" @@ -2888,7 +2859,7 @@ msgstr "" " -m,--mmap ook mmap() en dergelijke observeren\n" "\n" " -?,--help deze hulptekst tonen\n" -" --usage een kort gebruiksbericht tonen\n" +" --usage een korte gebruikssamenvatting tonen\n" " -V,--version versie-informatie tonen\n" "\n" " De volgende opties zijn alleen bij grafische uitvoer van toepassing:\n" @@ -2901,10 +2872,10 @@ msgstr "" "Een argument dat verplicht of optioneel is voor een lange optie, is dat\n" "ook voor de overeenkomstige korte optie.\n" "\n" -"Voor het rapporteren van fouten in dit programma, zie:\n" +"Voor het rapporteren van gebreken in dit programma, zie:\n" " <http://www.gnu.org/software/libc/bugs.html>." -#: malloc/memusage.sh:90 +#: malloc/memusage.sh:99 msgid "" "Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]\n" " [--buffer=SIZE] [--no-timer] [--time-based] [--total]\n" @@ -2916,51 +2887,51 @@ msgstr "" " [--total] [--title=TEKST] [--x-size=GETAL] [--y-size=GETAL]\n" " PROGRAMMA [PROGRAMMA-OPTIE]..." -#: malloc/memusage.sh:182 -msgid "memusage: option `${1##*=}' is ambiguous" +#: malloc/memusage.sh:191 +msgid "memusage: option \\`${1##*=}' is ambiguous" msgstr "memusage: optie '${1##*=}' is niet eenduidig" -#: malloc/memusage.sh:191 -msgid "memusage: unrecognized option `$1'" +#: malloc/memusage.sh:200 +msgid "memusage: unrecognized option \\`$1'" msgstr "memusage: onbekende optie '$1'" -#: malloc/memusage.sh:204 +#: malloc/memusage.sh:213 msgid "No program name given" msgstr "Geen programmanaam gegeven" -#: malloc/memusagestat.c:53 +#: malloc/memusagestat.c:54 msgid "Name output file" msgstr "naam van uitvoerbestand" -#: malloc/memusagestat.c:54 +#: malloc/memusagestat.c:55 msgid "Title string used in output graphic" msgstr "tekenreeks gebruikt als titel van uitvoergrafiek" -#: malloc/memusagestat.c:55 +#: malloc/memusagestat.c:56 msgid "Generate output linear to time (default is linear to number of function calls)" msgstr "de uitvoer lineair in de tijd maken (standaard is lineair in het aantal functie-aanroepen)" -#: malloc/memusagestat.c:57 +#: malloc/memusagestat.c:58 msgid "Also draw graph for total memory consumption" msgstr "ook een grafiek maken van totale geheugengebruik" -#: malloc/memusagestat.c:58 -msgid "make output graphic VALUE pixel wide" +#: malloc/memusagestat.c:59 +msgid "Make output graphic VALUE pixels wide" msgstr "uitvoergrafiek dit aantal beeldpunten breed maken" -#: malloc/memusagestat.c:59 -msgid "make output graphic VALUE pixel high" +#: malloc/memusagestat.c:60 +msgid "Make output graphic VALUE pixels high" msgstr "uitvoergrafiek dit aantal beeldpunten hoog maken" -#: malloc/memusagestat.c:64 +#: malloc/memusagestat.c:65 msgid "Generate graphic from memory profiling data" msgstr "Een grafiek maken van geheugenanalyse-gegevens." -#: malloc/memusagestat.c:67 +#: malloc/memusagestat.c:68 msgid "DATAFILE [OUTFILE]" msgstr "GEGEVENSBESTAND [UITVOERBESTAND]" -#: misc/error.c:118 timezone/zic.c:396 +#: misc/error.c:118 timezone/zic.c:417 msgid "Unknown system error" msgstr "Onbekende systeemfout" @@ -3024,7 +2995,7 @@ msgstr "Naam wordt door deze server niet aangeboden" #: nis/nis_error.h:14 msgid "Server out of memory" -msgstr "Server heeft onvoldoende geheugen" +msgstr "Server heeft onvoldoende geheugen beschikbaar" #: nis/nis_error.h:15 msgid "Object with same name exists" @@ -3144,11 +3115,11 @@ msgstr "Dat is waar, 42 is de zin van het leven..." #: nis/nis_error.h:44 msgid "Unable to authenticate NIS+ server" -msgstr "Kan de NIS+-server niet authentificeren" +msgstr "Kan de NIS+-server niet authenticeren" #: nis/nis_error.h:45 msgid "Unable to authenticate NIS+ client" -msgstr "Kan de NIS+-client niet authentificeren" +msgstr "Kan de NIS+-client niet authenticeren" #: nis/nis_error.h:46 msgid "No file space on server" @@ -3451,7 +3422,7 @@ msgstr " Recursieve leden:\n" msgid " No recursive members\n" msgstr " Geen recursieve leden\n" -#: nis/nis_print_group_entry.c:149 nis/nis_print_group_entry.c:165 +#: nis/nis_print_group_entry.c:149 msgid " Explicit nonmembers:\n" msgstr " Expliciete niet-leden:\n" @@ -3467,6 +3438,10 @@ msgstr " Impliciete niet-leden:\n" msgid " No implicit nonmembers\n" msgstr " Geen impliciete niet-leden\n" +#: nis/nis_print_group_entry.c:165 +msgid " Recursive nonmembers:\n" +msgstr " Recursieve niet-leden:\n" + #: nis/nis_print_group_entry.c:170 msgid " No recursive nonmembers\n" msgstr " Geen recursieve niet-leden\n" @@ -3479,7 +3454,7 @@ msgstr "DES-item voor netnaam %s is niet uniek\n" #: nis/nss_nisplus/nisplus-publickey.c:220 #, c-format -msgid "netname2user: missing group id list in `%s'." +msgid "netname2user: missing group id list in `%s'" msgstr "netname2user: ontbrekende groeps-ID-lijst in '%s'" #: nis/nss_nisplus/nisplus-publickey.c:302 @@ -3597,381 +3572,392 @@ msgstr "yp_update: kan host niet converteren naar netnaam\n" msgid "yp_update: cannot get server address\n" msgstr "yp_update: kan server-adres niet opvragen\n" -#: nscd/aicache.c:76 nscd/hstcache.c:461 +#: nscd/aicache.c:77 nscd/hstcache.c:462 #, c-format msgid "Haven't found \"%s\" in hosts cache!" msgstr "Item \"%s\" niet gevonden in hosts-cache!" -#: nscd/aicache.c:78 nscd/hstcache.c:463 +#: nscd/aicache.c:79 nscd/hstcache.c:464 #, c-format msgid "Reloading \"%s\" in hosts cache!" msgstr "Herladen van \"%s\" in hosts-cache!" -#: nscd/cache.c:126 +#: nscd/cache.c:146 #, c-format msgid "add new entry \"%s\" of type %s for %s to cache%s" msgstr "toevoegen van nieuw item \"%s\" van type %s voor %s aan cache%s" -#: nscd/cache.c:233 nscd/connections.c:750 +#: nscd/cache.c:148 +msgid " (first)" +msgstr " (eerste)" + +#: nscd/cache.c:256 nscd/connections.c:786 #, c-format msgid "cannot stat() file `%s': %s" msgstr "kan status van bestand '%s' niet opvragen: %s" -#: nscd/cache.c:262 +#: nscd/cache.c:285 #, c-format msgid "pruning %s cache; time %ld" msgstr "snoeien van cache %s; tijd %ld" -#: nscd/cache.c:289 +#: nscd/cache.c:312 #, c-format msgid "considering %s entry \"%s\", timeout %<PRIu64>" msgstr "overwegen van %s-item \"%s\", tijdslimiet %<PRIu64>" -#: nscd/connections.c:469 nscd/connections.c:481 nscd/connections.c:493 -#: nscd/connections.c:512 +#: nscd/connections.c:505 nscd/connections.c:517 nscd/connections.c:529 +#: nscd/connections.c:548 #, c-format msgid "invalid persistent database file \"%s\": %s" msgstr "ongeldig persistent gegevensbestand '%s': %s" -#: nscd/connections.c:483 +#: nscd/connections.c:519 msgid "header size does not match" msgstr "grootte van de kop klopt niet" -#: nscd/connections.c:495 +#: nscd/connections.c:531 msgid "file size does not match" msgstr "bestandsgrootte klopt niet" -#: nscd/connections.c:514 +#: nscd/connections.c:550 msgid "verification failed" msgstr "gegevenscontrole is mislukt" -#: nscd/connections.c:528 +#: nscd/connections.c:564 #, c-format msgid "suggested size of table for database %s larger than the persistent database's table" msgstr "de aangeraden tabelgrootte voor gegevensbestand '%s' is groter dan de tabelgrootte van het persistente gegevensbestand" -#: nscd/connections.c:538 nscd/connections.c:619 +#: nscd/connections.c:574 nscd/connections.c:655 #, c-format msgid "cannot create read-only descriptor for \"%s\"; no mmap" msgstr "kan geen alleen-lezen-descriptor voor '%s' aanmaken; geen mmap()" -#: nscd/connections.c:598 +#: nscd/connections.c:634 #, c-format msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart" msgstr "gegevensbestand voor %s is beschadigd of wordt al gebruikt; verwijder %s zo nodig handmatig en herstart" -#: nscd/connections.c:605 +#: nscd/connections.c:641 #, c-format msgid "cannot create %s; no persistent database used" msgstr "kan %s niet aanmaken; geen persistent gegevensbestand gebruikt" -#: nscd/connections.c:608 +#: nscd/connections.c:644 #, c-format msgid "cannot create %s; no sharing possible" msgstr "kan %s niet aanmaken; bestandsdeling is niet mogelijk" -#: nscd/connections.c:679 +#: nscd/connections.c:715 #, c-format msgid "cannot write to database file %s: %s" msgstr "kan niet naar gegevensbestand %s schrijven: %s" -#: nscd/connections.c:713 +#: nscd/connections.c:749 #, c-format msgid "cannot set socket to close on exec: %s; disabling paranoia mode" msgstr "kan socket niet op sluiten-bij-exec instellen: %s -- paranoia-modus is uitgeschakeld" -#: nscd/connections.c:763 +#: nscd/connections.c:799 #, c-format msgid "cannot open socket: %s" msgstr "kan socket niet openen: %s" -#: nscd/connections.c:780 +#: nscd/connections.c:816 #, c-format msgid "cannot change socket to nonblocking mode: %s" msgstr "kan socket niet omschakelen naar niet-blokkerende modus: %s" -#: nscd/connections.c:788 +#: nscd/connections.c:824 #, c-format msgid "cannot set socket to close on exec: %s" msgstr "kan socket niet op sluiten-bij-exec instellen: %s" -#: nscd/connections.c:799 +#: nscd/connections.c:835 #, c-format msgid "cannot enable socket to accept connections: %s" msgstr "kan socket geen verbindingen laten accepteren: %s" -#: nscd/connections.c:892 +#: nscd/connections.c:926 #, c-format msgid "provide access to FD %d, for %s" msgstr "toegang verleend aan bestandsdescriptor %d, voor %s" -#: nscd/connections.c:904 +#: nscd/connections.c:938 #, c-format msgid "cannot handle old request version %d; current version is %d" msgstr "kan verzoek voor oude versie %d niet behandelen; huidige versie is %d" -#: nscd/connections.c:954 nscd/connections.c:1007 +#: nscd/connections.c:980 nscd/connections.c:1033 #, c-format msgid "cannot write result: %s" msgstr "kan resultaat niet schrijven: %s" -#: nscd/connections.c:1082 +#: nscd/connections.c:1116 #, c-format msgid "error getting caller's id: %s" msgstr "fout bij opvragen van ID van aanroeper: %s" -#: nscd/connections.c:1140 nscd/connections.c:1154 +#: nscd/connections.c:1175 #, c-format msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode" msgstr "kan '/proc/self/cmdline' niet openen: %s -- paranoia-modus is uitgeschakeld" -#: nscd/connections.c:1194 +#: nscd/connections.c:1189 +#, c-format +msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode" +msgstr "kan '/proc/self/cmdline' niet openen: %s -- paranoia-modus wordt uitgeschakeld" + +#: nscd/connections.c:1229 #, c-format msgid "cannot change to old UID: %s; disabling paranoia mode" msgstr "kan niet overschakelen naar oude UID: %s -- paranoia-modus is uitgeschakeld" -#: nscd/connections.c:1204 +#: nscd/connections.c:1239 #, c-format msgid "cannot change to old GID: %s; disabling paranoia mode" msgstr "kan niet overschakelen naar oude GID: %s -- paranoia-modus is uitgeschakeld" -#: nscd/connections.c:1217 +#: nscd/connections.c:1252 #, c-format msgid "cannot change to old working directory: %s; disabling paranoia mode" msgstr "kan niet overschakelen naar oude werkmap: %s -- paranoia-modus is uitgeschakeld" -#: nscd/connections.c:1245 +#: nscd/connections.c:1280 #, c-format msgid "re-exec failed: %s; disabling paranoia mode" msgstr "her-exec() is mislukt: %s -- paranoia-modus is uitgeschakeld" -#: nscd/connections.c:1254 +#: nscd/connections.c:1289 #, c-format msgid "cannot change current working directory to \"/\": %s" msgstr "kan huidige werkmap niet overschakelen naar '/': %s" -#: nscd/connections.c:1372 +#: nscd/connections.c:1407 #, c-format msgid "short read while reading request: %s" msgstr "te weinig gelezen bij lezen van verzoek: %s" -#: nscd/connections.c:1404 +#: nscd/connections.c:1438 #, c-format msgid "key length in request too long: %d" msgstr "sleutellengte in verzoek is te lang: %d" -#: nscd/connections.c:1417 +#: nscd/connections.c:1451 #, c-format msgid "short read while reading request key: %s" msgstr "te weinig gelezen bij lezen van verzoeksleutel: %s" -#: nscd/connections.c:1426 +#: nscd/connections.c:1460 #, c-format msgid "handle_request: request received (Version = %d) from PID %ld" msgstr "handle_request(): verzoek ontvangen (versie = %d) van PID %ld" -#: nscd/connections.c:1431 +#: nscd/connections.c:1465 #, c-format msgid "handle_request: request received (Version = %d)" msgstr "handle_request(): verzoek ontvangen (versie = %d)" -#: nscd/connections.c:1792 +#: nscd/connections.c:1826 #, c-format msgid "could only start %d threads; terminating" msgstr "kan slechts %d threads starten -- gestopt" -#: nscd/connections.c:1840 nscd/connections.c:1841 nscd/connections.c:1858 -#: nscd/connections.c:1867 nscd/connections.c:1885 nscd/connections.c:1896 -#: nscd/connections.c:1907 +#: nscd/connections.c:1874 nscd/connections.c:1875 nscd/connections.c:1892 +#: nscd/connections.c:1901 nscd/connections.c:1919 nscd/connections.c:1930 +#: nscd/connections.c:1941 #, c-format msgid "Failed to run nscd as user '%s'" msgstr "uitvoeren van nscd als gebruiker '%s' is mislukt" -#: nscd/connections.c:1859 +#: nscd/connections.c:1893 #, c-format msgid "initial getgrouplist failed" msgstr "eerste getgrouplist() is mislukt" -#: nscd/connections.c:1868 +#: nscd/connections.c:1902 #, c-format msgid "getgrouplist failed" msgstr "getgrouplist() is mislukt" -#: nscd/connections.c:1886 +#: nscd/connections.c:1920 #, c-format msgid "setgroups failed" msgstr "setgroups() is mislukt" -#: nscd/grpcache.c:400 nscd/hstcache.c:411 nscd/initgrcache.c:411 -#: nscd/pwdcache.c:395 +#: nscd/grpcache.c:402 nscd/hstcache.c:412 nscd/initgrcache.c:412 +#: nscd/pwdcache.c:397 nscd/servicescache.c:342 #, c-format msgid "short write in %s: %s" msgstr "te weinig geschreven in %s: %s" -#: nscd/grpcache.c:443 nscd/initgrcache.c:77 +#: nscd/grpcache.c:445 nscd/initgrcache.c:78 #, c-format msgid "Haven't found \"%s\" in group cache!" msgstr "Item \"%s\" niet gevonden in groeps-cache!" -#: nscd/grpcache.c:445 nscd/initgrcache.c:79 +#: nscd/grpcache.c:447 nscd/initgrcache.c:80 #, c-format msgid "Reloading \"%s\" in group cache!" msgstr "Herladen van \"%s\" in groeps-cache!" -#: nscd/grpcache.c:536 +#: nscd/grpcache.c:524 #, c-format msgid "Invalid numeric gid \"%s\"!" msgstr "Ongeldig numeriek GID '%s'!" -#: nscd/mem.c:382 +#: nscd/mem.c:383 #, c-format msgid "freed %zu bytes in %s cache" msgstr "%zu bytes in cache %s vrijgegeven" -#: nscd/mem.c:511 +#: nscd/mem.c:512 #, c-format msgid "no more memory for database '%s'" -msgstr "onvoldoende geheugen voor gegevensbank '%s'" +msgstr "onvoldoende geheugen beschikbaar voor gegevensbank '%s'" -#: nscd/nscd.c:97 +#: nscd/nscd.c:98 msgid "Read configuration data from NAME" msgstr "configuratiegegevens lezen uit dit bestand" -#: nscd/nscd.c:99 +#: nscd/nscd.c:100 msgid "Do not fork and display messages on the current tty" msgstr "niet naar de achtergrond gaan; berichten op huidige TTY weergeven" -#: nscd/nscd.c:100 +#: nscd/nscd.c:101 msgid "NUMBER" msgstr "GETAL" -#: nscd/nscd.c:100 +#: nscd/nscd.c:101 msgid "Start NUMBER threads" msgstr "dit aantal threads starten" -#: nscd/nscd.c:101 +#: nscd/nscd.c:102 msgid "Shut the server down" msgstr "de server afsluiten" -#: nscd/nscd.c:102 +#: nscd/nscd.c:103 msgid "Print current configuration statistic" msgstr "huidige configuratiestatistieken weergeven" -#: nscd/nscd.c:103 +#: nscd/nscd.c:104 msgid "TABLE" msgstr "TABEL" -#: nscd/nscd.c:104 +#: nscd/nscd.c:105 msgid "Invalidate the specified cache" msgstr "genoemde cache ongeldig maken" -#: nscd/nscd.c:105 +#: nscd/nscd.c:106 msgid "TABLE,yes" msgstr "TABEL,ja" -#: nscd/nscd.c:106 +#: nscd/nscd.c:107 msgid "Use separate cache for each user" msgstr "aparte cache gebruiken voor elke gebruiker" -#: nscd/nscd.c:111 +#: nscd/nscd.c:112 msgid "Name Service Cache Daemon." -msgstr "Daemon voor namen-cache." +msgstr "" +" \n" +"Daemon voor namen-cache." -#: nscd/nscd.c:143 nss/getent.c:858 nss/makedb.c:123 +#: nscd/nscd.c:144 nss/getent.c:858 nss/makedb.c:123 #, c-format msgid "wrong number of arguments" msgstr "Verkeerd aantal argumenten" -#: nscd/nscd.c:153 +#: nscd/nscd.c:154 #, c-format msgid "failure while reading configuration file; this is fatal" msgstr "kan configuratiebestand niet lezen -- server wordt niet gestart" -#: nscd/nscd.c:162 +#: nscd/nscd.c:163 #, c-format msgid "already running" msgstr "wordt al uitgevoerd" -#: nscd/nscd.c:177 nscd/nscd.c:232 +#: nscd/nscd.c:178 nscd/nscd.c:233 #, c-format msgid "cannot fork" msgstr "kan geen nieuw proces starten" -#: nscd/nscd.c:240 +#: nscd/nscd.c:241 #, c-format msgid "cannot change current working directory to \"/\"" -msgstr "kan huidige werkmap niet overschakelen naar '/'" +msgstr "kan '/' niet de huidige werkmap maken" -#: nscd/nscd.c:248 +#: nscd/nscd.c:249 msgid "Could not create log file" msgstr "Kan geen logbestand aanmaken" -#: nscd/nscd.c:301 nscd/nscd.c:326 nscd/nscd_stat.c:172 +#: nscd/nscd.c:302 nscd/nscd.c:327 nscd/nscd_stat.c:172 #, c-format msgid "Only root is allowed to use this option!" msgstr "Alleen root mag deze optie gebruiken!" -#: nscd/nscd.c:359 nscd/nscd_stat.c:191 +#: nscd/nscd.c:364 nscd/nscd_stat.c:191 #, c-format msgid "write incomplete" msgstr "ongeldigmakingsopdracht is onvolledig geschreven" -#: nscd/nscd.c:370 +#: nscd/nscd.c:375 #, c-format msgid "cannot read invalidate ACK" msgstr "geen ongeldigheidsbevestiging ontvangen" -#: nscd/nscd.c:376 +#: nscd/nscd.c:381 #, c-format msgid "invalidation failed" msgstr "het ongeldigmaken is mislukt" -#: nscd/nscd.c:386 +#: nscd/nscd.c:391 #, c-format msgid "secure services not implemented anymore" msgstr "beveiligde services worden niet langer ondersteund" -#: nscd/nscd_conf.c:55 +#: nscd/nscd_conf.c:57 #, c-format -msgid "database %s is not supported\n" -msgstr "gegevensbank '%s' wordt niet ondersteund\n" +msgid "database %s is not supported" +msgstr "gegevensbank '%s' wordt niet ondersteund" -#: nscd/nscd_conf.c:106 +#: nscd/nscd_conf.c:108 #, c-format msgid "Parse error: %s" msgstr "Ontledingsfout: %s" -#: nscd/nscd_conf.c:191 +#: nscd/nscd_conf.c:193 #, c-format msgid "Must specify user name for server-user option" msgstr "De optie 'server-user' vereist een gebruikersnaam als argument" -#: nscd/nscd_conf.c:198 +#: nscd/nscd_conf.c:200 #, c-format msgid "Must specify user name for stat-user option" msgstr "De optie 'stat-user' vereist een gebruikersnaam als argument" -#: nscd/nscd_conf.c:242 +#: nscd/nscd_conf.c:244 #, c-format msgid "invalid value for 'reload-count': %u" msgstr "Ongeldige waarde voor 'reload-count': %u" -#: nscd/nscd_conf.c:257 +#: nscd/nscd_conf.c:259 #, c-format msgid "Must specify value for restart-interval option" msgstr "De optie 'restart-interval' vereist een waarde als argument" -#: nscd/nscd_conf.c:271 +#: nscd/nscd_conf.c:273 #, c-format msgid "Unknown option: %s %s %s" msgstr "Onbekende optie: %s %s %s" -#: nscd/nscd_conf.c:284 +#: nscd/nscd_conf.c:286 #, c-format msgid "cannot get current working directory: %s; disabling paranoia mode" msgstr "Kan huidige werkmap niet bepalen: %s -- paranoia-modus is uitgeschakeld" -#: nscd/nscd_conf.c:304 +#: nscd/nscd_conf.c:306 #, c-format msgid "maximum file size for %s database too small" msgstr "Maximum bestandsgrootte voor %s-gegevensbank is te klein" @@ -4101,97 +4087,93 @@ msgstr "" "%15<PRIuMAX> aantal mislukte geheugenreserveringen\n" "%15s /etc/%s controleren op wijzigingen\n" -#: nscd/pwdcache.c:438 +#: nscd/pwdcache.c:440 #, c-format msgid "Haven't found \"%s\" in password cache!" msgstr "Item \"%s\" niet gevonden in wachtwoorden-cache!" -#: nscd/pwdcache.c:440 +#: nscd/pwdcache.c:442 #, c-format msgid "Reloading \"%s\" in password cache!" msgstr "Herladen van \"%s\" in wachtwoorden-cache!" -#: nscd/pwdcache.c:532 +#: nscd/pwdcache.c:520 #, c-format msgid "Invalid numeric uid \"%s\"!" msgstr "Ongeldig numeriek UID '%s'!" -#: nscd/selinux.c:151 +#: nscd/selinux.c:156 #, c-format msgid "Failed opening connection to the audit subsystem: %m" msgstr "Kan geen verbinding maken met audit-subsysteem: %m" -#: nscd/selinux.c:172 +#: nscd/selinux.c:177 msgid "Failed to set keep-capabilities" msgstr "Kan 'keep-capabilities' (privilegesbehoud) niet inschakelen" -#: nscd/selinux.c:173 nscd/selinux.c:232 +#: nscd/selinux.c:178 nscd/selinux.c:241 #, c-format msgid "prctl(KEEPCAPS) failed" msgstr "prctl(KEEPCAPS) is mislukt" -#: nscd/selinux.c:187 +#: nscd/selinux.c:192 msgid "Failed to initialize drop of capabilities" msgstr "Privilegesvermindering werkt niet" -#: nscd/selinux.c:188 +#: nscd/selinux.c:193 #, c-format msgid "cap_init failed" msgstr "cap_init() is mislukt" -#: nscd/selinux.c:205 -msgid "Failed to drop capabilities\n" -msgstr "Verminderen van privileges is mislukt\n" +#: nscd/selinux.c:214 nscd/selinux.c:231 +msgid "Failed to drop capabilities" +msgstr "Verminderen van privileges is mislukt" -#: nscd/selinux.c:206 nscd/selinux.c:223 +#: nscd/selinux.c:215 nscd/selinux.c:232 #, c-format msgid "cap_set_proc failed" msgstr "cap_set_proc() is mislukt" -#: nscd/selinux.c:222 -msgid "Failed to drop capabilities" -msgstr "Verminderen van privileges is mislukt" - -#: nscd/selinux.c:231 +#: nscd/selinux.c:240 msgid "Failed to unset keep-capabilities" msgstr "Kan 'keep-capabilities' (privilegesbehoud) niet uitschakelen" -#: nscd/selinux.c:247 +#: nscd/selinux.c:256 msgid "Failed to determine if kernel supports SELinux" msgstr "Kan niet bepalen of de kernel SELinux ondersteunt" -#: nscd/selinux.c:262 +#: nscd/selinux.c:271 #, c-format msgid "Failed to start AVC thread" msgstr "Kan geen AVC-thread starten" -#: nscd/selinux.c:284 +#: nscd/selinux.c:293 #, c-format msgid "Failed to create AVC lock" msgstr "Kan geen AVC-grendel aanmaken" -#: nscd/selinux.c:324 +#: nscd/selinux.c:333 #, c-format msgid "Failed to start AVC" msgstr "Kan AVC niet starten" -#: nscd/selinux.c:326 +#: nscd/selinux.c:335 msgid "Access Vector Cache (AVC) started" msgstr "AVC (Access Vector Cache) is gestart" -#: nscd/selinux.c:347 +#: nscd/selinux.c:356 msgid "Error getting context of socket peer" msgstr "Kan geen context voor partnersocket verkrijgen" -#: nscd/selinux.c:352 +#: nscd/selinux.c:361 msgid "Error getting context of nscd" msgstr "Kan geen context voor nscd verkrijgen" -#: nscd/selinux.c:358 +#: nscd/selinux.c:367 msgid "Error getting sid from context" msgstr "Kan uit de context geen SID verkrijgen" -#: nscd/selinux.c:390 +#: nscd/selinux.c:399 #, c-format msgid "" "\n" @@ -4218,6 +4200,16 @@ msgstr "" "%15u CAV-peilingen\n" "%15u CAV-missers\n" +#: nscd/servicescache.c:389 +#, c-format +msgid "Haven't found \"%s\" in services cache!" +msgstr "Item \"%s\" niet gevonden in diensten-cache!" + +#: nscd/servicescache.c:391 +#, c-format +msgid "Reloading \"%s\" in services cache!" +msgstr "Herladen van \"%s\" in diensten-cache!" + #: nss/getent.c:52 msgid "database [key ...]" msgstr "gegevensbank [sleutel...]" @@ -4228,10 +4220,11 @@ msgstr "te gebruiken configuratie" #: nss/getent.c:62 msgid "" -"Get entries from administrative database.For bug reporting instructions, please see:\n" +"Get entries from administrative database.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" -"Items uit een gegevensbank weergeven.Voor het rapporteren van fouten, zie:\n" +" \n" +"Items uit een gegevensbank weergeven.\vVoor het rapporteren van fouten, zie:\n" " <http://www.gnu.org/software/libc/bugs.html>.\n" #: nss/getent.c:145 nss/getent.c:394 @@ -4312,31 +4305,31 @@ msgstr "problemen tijdens lezen van '%s'" msgid "while reading database" msgstr "tijdens lezen van gegevensbestand" -#: posix/getconf.c:940 +#: posix/getconf.c:945 #, c-format msgid "Usage: %s [-v specification] variable_name [pathname]\n" msgstr "Gebruik: %s [-v specificatie] naam_van_variabele [padnaam]\n" -#: posix/getconf.c:943 +#: posix/getconf.c:948 #, c-format msgid " %s -a [pathname]\n" msgstr " %s -a [padnaam]\n" -#: posix/getconf.c:1062 +#: posix/getconf.c:1067 #, c-format msgid "unknown specification \"%s\"" msgstr "onbekende specificatie '%s'" -#: posix/getconf.c:1090 +#: posix/getconf.c:1095 #, c-format msgid "Couldn't execute %s" msgstr "Kan %s niet uitvoeren" -#: posix/getconf.c:1130 posix/getconf.c:1146 +#: posix/getconf.c:1135 posix/getconf.c:1151 msgid "undefined" msgstr "ongedefinieerd" -#: posix/getconf.c:1168 +#: posix/getconf.c:1173 #, c-format msgid "Unrecognized variable `%s'" msgstr "Onbekende variabele '%s'" @@ -4416,7 +4409,7 @@ msgstr "Ongeldige tekenklassenaam" #: posix/regcomp.c:147 msgid "Trailing backslash" -msgstr "Backslash aan einde" +msgstr "Backslash aan het eind" #: posix/regcomp.c:150 msgid "Invalid back reference" @@ -4444,7 +4437,7 @@ msgstr "Ongeldig bereikeinde" #: posix/regcomp.c:168 msgid "Memory exhausted" -msgstr "Onvoldoende geheugen" +msgstr "Onvoldoende geheugen beschikbaar" #: posix/regcomp.c:171 msgid "Invalid preceding regular expression" @@ -4555,8 +4548,8 @@ msgid "authunix_create: out of memory\n" msgstr "authunix_create(): onvoldoende geheugen\n" #: sunrpc/auth_unix.c:350 -msgid "auth_none.c - Fatal marshalling problem" -msgstr "Fataal marshallingprobleem (in auth_unix.c)" +msgid "auth_unix.c: Fatal marshalling problem" +msgstr "auth_unix.c: Fataal marshallingprobleem " #: sunrpc/clnt_perr.c:118 sunrpc/clnt_perr.c:139 #, c-format @@ -4570,7 +4563,7 @@ msgstr "; reden = " #: sunrpc/clnt_perr.c:132 #, c-format msgid "(unknown authentication error - %d)" -msgstr "(onbekende authentificatiefout -- %d)" +msgstr "(onbekende authenticatiefout -- %d)" #: sunrpc/clnt_perr.c:172 msgid "RPC: Success" @@ -4602,7 +4595,7 @@ msgstr "RPC: Incompatibele versies van RPC" #: sunrpc/clnt_perr.c:199 msgid "RPC: Authentication error" -msgstr "RPC: Authentificatiefout" +msgstr "RPC: Authenticatiefout" #: sunrpc/clnt_perr.c:203 msgid "RPC: Program unavailable" @@ -4650,7 +4643,7 @@ msgstr "RPC: (onbekende foutcode)" #: sunrpc/clnt_perr.c:342 msgid "Authentication OK" -msgstr "Authentificatie is gelukt" +msgstr "Authenticatie is gelukt" #: sunrpc/clnt_perr.c:345 msgid "Invalid client credential" @@ -4681,7 +4674,7 @@ msgid "Failed (unspecified error)" msgstr "Mislukt (ongespecificeerde fout)" #: sunrpc/clnt_raw.c:117 -msgid "clnt_raw.c - Fatal header serialization error." +msgid "clnt_raw.c: fatal header serialization error" msgstr "clnt_raw.c: fatale serialisatiefout van de kop" #: sunrpc/clnt_tcp.c:131 @@ -4697,7 +4690,7 @@ msgid "clntunix_create: out of memory\n" msgstr "clntunix_create(): onvoldoende geheugen\n" #: sunrpc/pm_getmaps.c:83 -msgid "pmap_getmaps rpc problem" +msgid "pmap_getmaps.c: rpc problem" msgstr "pmap_getmaps.c: RPC-probleem" #: sunrpc/pmap_clnt.c:129 @@ -4760,7 +4753,7 @@ msgstr "%s: C-voorverwerking is mislukt met afsluitwaarde %d\n" #: sunrpc/rpc_main.c:460 #, c-format -msgid "illegal nettype :`%s'\n" +msgid "illegal nettype: `%s'\n" msgstr "ongeldige netsoort: '%s'\n" #: sunrpc/rpc_main.c:1122 @@ -4938,7 +4931,11 @@ msgstr "rpcinfo: %s is een onbekende dienst\n" msgid "rpcinfo: %s is unknown host\n" msgstr "rpcinfo: %s is een onbekende host\n" -#: sunrpc/svc_run.c:76 +#: sunrpc/svc_run.c:70 +msgid "svc_run: - out of memory" +msgstr "svc_run.c: onvoldoende geheugen" + +#: sunrpc/svc_run.c:90 msgid "svc_run: - poll failed" msgstr "svc_run.c: polsen is mislukt" @@ -5190,7 +5187,7 @@ msgstr "EMT-instructie" #: sysdeps/generic/siglist.h:63 sysdeps/unix/siglist.c:38 msgid "Bad system call" -msgstr "Ongeldige systeemaanroep" +msgstr "Onjuiste systeemaanroep" #: sysdeps/generic/siglist.h:66 msgid "Stack fault" @@ -5270,7 +5267,7 @@ msgstr "Ongeldige bestandsdescriptor" #. TRANS to manipulate. #: sysdeps/gnu/errlist.c:126 msgid "No child processes" -msgstr "Geen kindprocessen" +msgstr "Geen dochterprocessen" #. TRANS Deadlock avoided; allocating a system resource would have resulted in a #. TRANS deadlock situation. The system does not guarantee that it will notice @@ -5284,7 +5281,7 @@ msgstr "Volledige blokkering van hulpbron is omzeild" #. TRANS because its capacity is full. #: sysdeps/gnu/errlist.c:148 msgid "Cannot allocate memory" -msgstr "Kan geen geheugen meer reserveren" +msgstr "Onvoldoende geheugen beschikbaar" #. TRANS Bad address; an invalid pointer was detected. #. TRANS In the GNU system, this error never happens; you get a signal instead. @@ -5728,12 +5725,12 @@ msgstr "Ongepast bestandstype" #. TRANS ??? #: sysdeps/gnu/errlist.c:878 msgid "Authentication error" -msgstr "Authentificatiefout" +msgstr "Authenticatiefout" #. TRANS ??? #: sysdeps/gnu/errlist.c:887 msgid "Need authenticator" -msgstr "Authentificator vereist" +msgstr "Authenticator vereist" #. 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 @@ -6055,7 +6052,7 @@ msgstr "Ongeldige waarde voor 'ai_flags'" #: sysdeps/posix/gai_strerror-strs.h:4 msgid "Non-recoverable failure in name resolution" -msgstr "Niet-herstelbare mislukking in naamsherleiding" +msgstr "Onherstelbare mislukking in naamsherleiding" #: sysdeps/posix/gai_strerror-strs.h:5 msgid "ai_family not supported" @@ -6063,11 +6060,11 @@ msgstr "'ai_family' wordt niet ondersteund" #: sysdeps/posix/gai_strerror-strs.h:6 msgid "Memory allocation failure" -msgstr "Onvoldoende geheugen" +msgstr "Onvoldoende geheugen beschikbaar" #: sysdeps/posix/gai_strerror-strs.h:7 msgid "No address associated with hostname" -msgstr "Geen adres geassocieerd met hostnaam" +msgstr "Aan hostnaam is geen adres verbonden" #: sysdeps/posix/gai_strerror-strs.h:8 msgid "Name or service not known" @@ -6107,7 +6104,7 @@ msgstr "Onderbroken door een signaal" #: sysdeps/posix/gai_strerror-strs.h:17 msgid "Parameter string not correctly encoded" -msgstr "Parameter-tekenreeks is niet juist gecodeerd" +msgstr "Parametertekst is niet juist gecodeerd" #: sysdeps/unix/siglist.c:26 msgid "Signal 0" @@ -6137,406 +6134,398 @@ msgstr "kan '%s' niet openen" msgid "cannot read header from `%s'" msgstr "kan kop van '%s' niet lezen" -#: timezone/zdump.c:215 +#: timezone/zdump.c:211 msgid "lacks alphabetic at start" msgstr "begint niet met een letter" -#: timezone/zdump.c:217 +#: timezone/zdump.c:213 msgid "has fewer than 3 alphabetics" msgstr "heeft minder dan drie letters" -#: timezone/zdump.c:219 +#: timezone/zdump.c:215 msgid "has more than 6 alphabetics" msgstr "heeft meer dan zes letters" -#: timezone/zdump.c:227 +#: timezone/zdump.c:223 msgid "differs from POSIX standard" msgstr "verschilt van de POSIX-standaard" -#: timezone/zdump.c:233 +#: timezone/zdump.c:229 #, c-format msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n" msgstr "%s: Waarschuwing: zone \"%s\", afkorting \"%s\" %s\n" -#: timezone/zdump.c:284 +#: timezone/zdump.c:280 #, c-format msgid "%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n" msgstr "" "Gebruik: %s [-v] [-c [ondergrens,]bovengrens] zonenaam...\n" " %s --version\n" -#: timezone/zdump.c:301 +#: timezone/zdump.c:297 #, c-format msgid "%s: wild -c argument %s\n" msgstr "%s: extra argument %s bij optie -c\n" -#: timezone/zdump.c:392 +#: timezone/zdump.c:388 msgid "Error writing to standard output" msgstr "Fout tijdens schrijven naar standaarduitvoer" -#: timezone/zdump.c:415 +#: timezone/zdump.c:411 #, c-format msgid "%s: use of -v on system with floating time_t other than float or double\n" msgstr "%s: Optie -v is gebruikt op een systeem zonder een adequaat drijvende-kommatype voor 'time_t'\n" -#: timezone/zic.c:371 +#: timezone/zic.c:392 #, c-format msgid "%s: Memory exhausted: %s\n" -msgstr "%s: Onvoldoende geheugen: %s\n" +msgstr "%s: Onvoldoende geheugen beschikbaar: %s\n" -#: timezone/zic.c:430 +#: timezone/zic.c:451 #, c-format msgid "\"%s\", line %d: %s" msgstr "\"%s\", regel %d: %s" -#: timezone/zic.c:433 +#: timezone/zic.c:454 #, c-format msgid " (rule from \"%s\", line %d)" msgstr " (voorschrift uit \"%s\", regel %d)" -#: timezone/zic.c:445 +#: timezone/zic.c:466 msgid "warning: " msgstr "waarschuwing: " -#: timezone/zic.c:455 +#: timezone/zic.c:476 #, c-format msgid "" -"%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" +"%s: usage is %s [ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" "\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" msgstr "" -"Gebruik: %s [-s] [-v] [-l lokale_tijd] [-p posixvoorschriften] [-d map] \\\n" -" [-L schrikkelseconden] [-y jaar_is_soort] [bestandsnaam...]\n" +"Gebruik: %s [-v] [-d map] [-l lokale_tijdzone] [-p posixvoorschriften-zone] \\\n" +" [-L schrikkelsecondenbestand] [-y jaarsoortopdracht] [bestand...]\n" " %s --version\n" -#: timezone/zic.c:503 +#: timezone/zic.c:511 +msgid "wild compilation-time specification of zic_t" +msgstr "compilatiefout: type 'zic_t' heeft te weinig bits" + +#: timezone/zic.c:528 #, c-format msgid "%s: More than one -d option specified\n" msgstr "%s: Optie -d is meermaals gegeven\n" -#: timezone/zic.c:513 +#: timezone/zic.c:538 #, c-format msgid "%s: More than one -l option specified\n" msgstr "%s: Optie -l is meermaals gegeven\n" -#: timezone/zic.c:523 +#: timezone/zic.c:548 #, c-format msgid "%s: More than one -p option specified\n" msgstr "%s: Optie -p is meermaals gegeven\n" -#: timezone/zic.c:533 +#: timezone/zic.c:558 #, c-format msgid "%s: More than one -y option specified\n" msgstr "%s: Optie -y is meermaals gegeven\n" -#: timezone/zic.c:543 +#: timezone/zic.c:568 #, c-format msgid "%s: More than one -L option specified\n" msgstr "%s: Optie -L is meermaals gegeven\n" -#: timezone/zic.c:592 +#: timezone/zic.c:617 msgid "link to link" msgstr "koppeling naar een andere koppeling" -#: timezone/zic.c:657 +#: timezone/zic.c:682 msgid "hard link failed, symbolic link used" msgstr "harde koppeling is mislukt; symbolische wordt gebruikt" -#: timezone/zic.c:665 +#: timezone/zic.c:690 #, c-format msgid "%s: Can't link from %s to %s: %s\n" msgstr "%s: Kan geen koppeling maken van %s naar %s: %s\n" -#: timezone/zic.c:774 timezone/zic.c:776 +#: timezone/zic.c:762 timezone/zic.c:764 msgid "same rule name in multiple files" msgstr "dezelfde voorschriftnaam in meerdere bestanden" -#: timezone/zic.c:817 +#: timezone/zic.c:805 msgid "unruly zone" msgstr "onhandelbare zone" -#: timezone/zic.c:824 +#: timezone/zic.c:812 #, c-format msgid "%s in ruleless zone" msgstr "%s in voorschriftloze zone" -#: timezone/zic.c:845 +#: timezone/zic.c:833 msgid "standard input" msgstr "standaardinvoer" -#: timezone/zic.c:850 +#: timezone/zic.c:838 #, c-format msgid "%s: Can't open %s: %s\n" msgstr "%s: Kan %s niet openen: %s\n" -#: timezone/zic.c:861 +#: timezone/zic.c:849 msgid "line too long" msgstr "regel is te lang" -#: timezone/zic.c:881 +#: timezone/zic.c:869 msgid "input line of unknown type" msgstr "invoerregel is van onbekende soort" -#: timezone/zic.c:897 +#: timezone/zic.c:885 #, c-format msgid "%s: Leap line in non leap seconds file %s\n" msgstr "%s: Schrikkelregel in niet-schrikkelbestand %s\n" -#: timezone/zic.c:904 timezone/zic.c:1325 timezone/zic.c:1350 +#: timezone/zic.c:892 timezone/zic.c:1323 timezone/zic.c:1345 #, c-format msgid "%s: panic: Invalid l_value %d\n" msgstr "%s: **interne fout** -- ongeldige regelcode %d\n" -#: timezone/zic.c:912 +#: timezone/zic.c:900 #, c-format msgid "%s: Error reading %s\n" msgstr "%s: Fout bij lezen van %s\n" -#: timezone/zic.c:919 +#: timezone/zic.c:907 #, c-format msgid "%s: Error closing %s: %s\n" msgstr "%s: Fout bij sluiten van %s: %s\n" -#: timezone/zic.c:924 +#: timezone/zic.c:912 msgid "expected continuation line not found" msgstr "verwachte regelcontinuering is niet gevonden" -#: timezone/zic.c:968 +#: timezone/zic.c:956 msgid "24:00 not handled by pre-1998 versions of zic" msgstr "versies van 'zic' van voor 1998 kunnen '24:00' niet aan" -#: timezone/zic.c:982 +#: timezone/zic.c:970 msgid "wrong number of fields on Rule line" msgstr "verkeerd aantal velden op 'Rule'-regel" -#: timezone/zic.c:986 +#: timezone/zic.c:974 msgid "nameless rule" msgstr "naamloos voorschrift" -#: timezone/zic.c:991 +#: timezone/zic.c:979 msgid "invalid saved time" msgstr "ongeldige opgeslagen tijd" -#: timezone/zic.c:1010 +#: timezone/zic.c:1000 msgid "wrong number of fields on Zone line" msgstr "verkeerd aantal velden op 'Zone'-regel" -#: timezone/zic.c:1016 +#: timezone/zic.c:1006 #, c-format msgid "\"Zone %s\" line and -l option are mutually exclusive" msgstr "De regel \"Zone %s\" en optie -l sluiten elkaar uit" -#: timezone/zic.c:1024 +#: timezone/zic.c:1014 #, c-format msgid "\"Zone %s\" line and -p option are mutually exclusive" msgstr "De regel \"Zone %s\" en optie -p sluiten elkaar uit" -#: timezone/zic.c:1036 +#: timezone/zic.c:1026 #, c-format msgid "duplicate zone name %s (file \"%s\", line %d)" msgstr "dubbele zonenaam '%s' (in bestand %s, regel %d)" -#: timezone/zic.c:1052 +#: timezone/zic.c:1042 msgid "wrong number of fields on Zone continuation line" msgstr "verkeerd aantal velden op 'Zone'-continueringsregel" -#: timezone/zic.c:1092 +#: timezone/zic.c:1082 msgid "invalid UTC offset" msgstr "ongeldige positie ten opzichte van UTC" -#: timezone/zic.c:1095 +#: timezone/zic.c:1085 msgid "invalid abbreviation format" msgstr "ongeldige opmaak voor afkorting" -#: timezone/zic.c:1122 +#: timezone/zic.c:1114 msgid "Zone continuation line end time is not after end time of previous line" msgstr "'Zone'-continueringsregel: eindtijd ligt niet na eindtijd van vorige regel" -#: timezone/zic.c:1150 +#: timezone/zic.c:1142 msgid "wrong number of fields on Leap line" msgstr "verkeerd aantal velden op 'Leap'-regel" -#: timezone/zic.c:1159 +#: timezone/zic.c:1151 msgid "invalid leaping year" msgstr "ongeldig schrikkeljaar" -#: timezone/zic.c:1174 timezone/zic.c:1280 +#: timezone/zic.c:1171 timezone/zic.c:1277 msgid "invalid month name" msgstr "ongeldige maandnaam" -#: timezone/zic.c:1187 timezone/zic.c:1402 timezone/zic.c:1416 +#: timezone/zic.c:1184 timezone/zic.c:1390 timezone/zic.c:1404 msgid "invalid day of month" msgstr "ongeldige dag van maand" -#: timezone/zic.c:1192 +#: timezone/zic.c:1189 msgid "time before zero" msgstr "tijdswaarde is kleiner dan nul" -#: timezone/zic.c:1196 +#: timezone/zic.c:1193 msgid "time too small" msgstr "tijdswaarde is te klein" -#: timezone/zic.c:1200 +#: timezone/zic.c:1197 msgid "time too large" msgstr "tijdswaarde is te groot" -#: timezone/zic.c:1204 timezone/zic.c:1309 +#: timezone/zic.c:1201 timezone/zic.c:1306 msgid "invalid time of day" msgstr "ongeldige tijd van de dag" -#: timezone/zic.c:1223 +#: timezone/zic.c:1220 msgid "illegal CORRECTION field on Leap line" msgstr "ongeldig CORRECTION-veld op 'Leap'-regel" -#: timezone/zic.c:1228 +#: timezone/zic.c:1225 msgid "illegal Rolling/Stationary field on Leap line" msgstr "ongeldig 'Rolling'/'Stationary'-veld op 'Leap'-regel" -#: timezone/zic.c:1244 +#: timezone/zic.c:1241 msgid "wrong number of fields on Link line" msgstr "verkeerd aantal velden op 'Link'-regel" -#: timezone/zic.c:1248 +#: timezone/zic.c:1245 msgid "blank FROM field on Link line" msgstr "leeg FROM-veld op 'Link'-regel" -#: timezone/zic.c:1252 +#: timezone/zic.c:1249 msgid "blank TO field on Link line" msgstr "leeg TO-veld op 'Link'-regel" -#: timezone/zic.c:1329 +#: timezone/zic.c:1327 msgid "invalid starting year" msgstr "ongeldig beginjaar" -#: timezone/zic.c:1333 -msgid "starting year too low to be represented" -msgstr "beginjaar is te vroeg om te kunnen representeren" - -#: timezone/zic.c:1335 -msgid "starting year too high to be represented" -msgstr "beginjaar is te laat om te kunnen representeren" - -#: timezone/zic.c:1354 +#: timezone/zic.c:1349 msgid "invalid ending year" msgstr "ongeldig eindjaar" -#: timezone/zic.c:1358 -msgid "ending year too low to be represented" -msgstr "eindjaar is te vroeg om te kunnen representeren" - -#: timezone/zic.c:1360 -msgid "ending year too high to be represented" -msgstr "eindjaar is te laat om te kunnen representeren" - -#: timezone/zic.c:1363 +#: timezone/zic.c:1353 msgid "starting year greater than ending year" msgstr "beginjaar is groter dan eindjaar" -#: timezone/zic.c:1370 +#: timezone/zic.c:1360 msgid "typed single year" -msgstr "beginjaar en eindjaar zijn gelijk" +msgstr "begin- en eindjaar zijn gelijk" -#: timezone/zic.c:1407 +#: timezone/zic.c:1395 msgid "invalid weekday name" msgstr "ongeldige naam voor weekdag" -#: timezone/zic.c:1521 +#: timezone/zic.c:1573 #, c-format msgid "%s: Can't remove %s: %s\n" msgstr "%s: Kan %s niet verwijderen: %s\n" -#: timezone/zic.c:1531 +#: timezone/zic.c:1583 #, c-format msgid "%s: Can't create %s: %s\n" msgstr "%s: Kan %s niet aanmaken: %s\n" -#: timezone/zic.c:1598 +#: timezone/zic.c:1733 #, c-format msgid "%s: Error writing %s\n" msgstr "%s: Fout bij schrijven van %s\n" -#: timezone/zic.c:1789 +#: timezone/zic.c:2025 +msgid "no POSIX environment variable for zone" +msgstr "geen POSIX-omgevingsvariabele voor tijdzone" + +#: timezone/zic.c:2179 msgid "can't determine time zone abbreviation to use just after until time" msgstr "kan tijdzone-afkorting voor gebruik na een tot-tijd niet bepalen" -#: timezone/zic.c:1832 +#: timezone/zic.c:2225 msgid "too many transitions?!" msgstr "te veel overgangen!?" -#: timezone/zic.c:1851 +#: timezone/zic.c:2244 msgid "internal error - addtype called with bad isdst" msgstr "**interne fout** -- addtype() aangeroepen met onjuiste 'isdst'" -#: timezone/zic.c:1855 +#: timezone/zic.c:2248 msgid "internal error - addtype called with bad ttisstd" msgstr "**interne fout** -- addtype() aangeroepen met onjuiste 'ttisstd'" -#: timezone/zic.c:1859 +#: timezone/zic.c:2252 msgid "internal error - addtype called with bad ttisgmt" msgstr "**interne fout** -- addtype() aangeroepen met onjuiste 'ttisgmt'" -#: timezone/zic.c:1878 +#: timezone/zic.c:2271 msgid "too many local time types" msgstr "te veel soorten lokale tijd" -#: timezone/zic.c:1906 +#: timezone/zic.c:2299 msgid "too many leap seconds" msgstr "te veel schrikkelseconden" -#: timezone/zic.c:1912 +#: timezone/zic.c:2305 msgid "repeated leap second moment" msgstr "herhaald schrikkelseconde-moment" -#: timezone/zic.c:1964 +#: timezone/zic.c:2357 msgid "Wild result from command execution" msgstr "Vreemd resultaat van uitgevoerde opdracht" -#: timezone/zic.c:1965 +#: timezone/zic.c:2358 #, c-format msgid "%s: command was '%s', result was %d\n" msgstr "%s: opdracht was '%s', resultaat was %d\n" -#: timezone/zic.c:2062 +#: timezone/zic.c:2456 msgid "Odd number of quotation marks" msgstr "Oneven aantal aanhalingstekens" -#: timezone/zic.c:2083 timezone/zic.c:2102 +#: timezone/zic.c:2479 timezone/zic.c:2498 msgid "time overflow" msgstr "tijdsoverloop" -#: timezone/zic.c:2149 +#: timezone/zic.c:2545 msgid "use of 2/29 in non leap-year" msgstr "'29-2' gebruikt in een niet-schrikkeljaar" -#: timezone/zic.c:2184 +#: timezone/zic.c:2580 msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic" msgstr "voorschrift gaat voorbij begin of einde van maand -- dit werkt niet met versies van 'zic' van voor 2004" -#: timezone/zic.c:2218 +#: timezone/zic.c:2612 msgid "time zone abbreviation lacks alphabetic at start" msgstr "tijdzone-afkorting begint niet met een letter" -#: timezone/zic.c:2220 +#: timezone/zic.c:2614 msgid "time zone abbreviation has more than 3 alphabetics" msgstr "tijdzone-afkorting heeft meer dan drie letters" -#: timezone/zic.c:2222 +#: timezone/zic.c:2616 msgid "time zone abbreviation has too many alphabetics" msgstr "tijdzone-afkorting heeft te veel letters" -#: timezone/zic.c:2232 +#: timezone/zic.c:2626 msgid "time zone abbreviation differs from POSIX standard" msgstr "tijdzone-afkorting verschilt van de POSIX-standaard" -#: timezone/zic.c:2244 +#: timezone/zic.c:2638 msgid "too many, or too long, time zone abbreviations" msgstr "te veel of te lange tijdzone-afkortingen" -#: timezone/zic.c:2285 +#: timezone/zic.c:2679 #, c-format msgid "%s: Can't create directory %s: %s\n" msgstr "%s: Kan map %s niet aanmaken: %s\n" -#: timezone/zic.c:2307 +#: timezone/zic.c:2701 #, c-format msgid "%s: %d did not sign extend correctly\n" msgstr "%s: %d is niet correct omgezet naar een grotere precisie\n" diff --git a/libc/po/pl.po b/libc/po/pl.po index 2928cdcdc..316bbaaf2 100644 --- a/libc/po/pl.po +++ b/libc/po/pl.po @@ -1,56 +1,56 @@ # Polish translation for GNU libc. -# Copyright (C) 1996, 1997, 1998, 1999, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. # Pawe³ Krawczyk <kravietz@ceti.pl>, 1996,97,98,99. -# Jakub Bogusz <qboosh@pld-linux.org>, 2002-2006. +# Jakub Bogusz <qboosh@pld-linux.org>, 2002-2007. # msgid "" msgstr "" -"Project-Id-Version: libc 2.5\n" -"POT-Creation-Date: 2006-09-29 11:38-0700\n" -"PO-Revision-Date: 2006-10-05 20:01+0200\n" +"Project-Id-Version: libc 2.6.1\n" +"POT-Creation-Date: 2007-08-04 11:37+0200\n" +"PO-Revision-Date: 2007-08-04 12:50+0200\n" "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" -#: argp/argp-help.c:227 +#: argp/argp-help.c:228 #, c-format msgid "%.*s: ARGP_HELP_FMT parameter requires a value" msgstr "%.*s: parametr ARGP_HELP_FMT wymaga podania warto¶ci" -#: argp/argp-help.c:237 +#: argp/argp-help.c:238 #, c-format msgid "%.*s: Unknown ARGP_HELP_FMT parameter" msgstr "%.*s: Nieznany parametr ARGP_HELP_FMT" -#: argp/argp-help.c:250 +#: argp/argp-help.c:251 #, c-format msgid "Garbage in ARGP_HELP_FMT: %s" msgstr "B³êdne dane w ARGP_HELP_FMT: %s" -#: argp/argp-help.c:1214 +#: argp/argp-help.c:1215 msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." msgstr "Argumenty obowi±zkowe lub opcjonalne dla d³ugich opcji s± równie¿ obowi±zkowe lub opcjonalne dla odpowiednich krótkich opcji." -#: argp/argp-help.c:1600 +#: argp/argp-help.c:1601 msgid "Usage:" msgstr "Sk³adnia:" -#: argp/argp-help.c:1604 +#: argp/argp-help.c:1605 msgid " or: " msgstr " lub: " -#: argp/argp-help.c:1616 +#: argp/argp-help.c:1617 msgid " [OPTION...]" msgstr " [OPCJA...]" -#: argp/argp-help.c:1643 +#: argp/argp-help.c:1644 #, c-format msgid "Try `%s --help' or `%s --usage' for more information.\n" msgstr "Polecenie `%s --help' lub `%s --usage' pozwoli uzyskaæ wiêcej informacji.\n" -#: argp/argp-help.c:1671 +#: argp/argp-help.c:1672 #, c-format msgid "Report bugs to %s.\n" msgstr "Prosimy zg³aszaæ b³êdy na adres %s.\n" @@ -98,31 +98,31 @@ msgstr "%s%s%s:%u %s%sNiespodziewany b³±d: %s.\n" msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" msgstr "%s%s%s:%u: %s%sWarunek zapewnienia `%s' nie zosta³ spe³niony.\n" -#: catgets/gencat.c:109 catgets/gencat.c:113 nscd/nscd.c:96 nss/makedb.c:61 +#: catgets/gencat.c:110 catgets/gencat.c:114 nscd/nscd.c:97 nss/makedb.c:61 msgid "NAME" msgstr "NAZWA" -#: catgets/gencat.c:110 +#: catgets/gencat.c:111 msgid "Create C header file NAME containing symbol definitions" msgstr "Tworzenie pliku nag³ówkowego C o tej NAZWIE zawieraj±cego definicje symboli" -#: catgets/gencat.c:112 +#: catgets/gencat.c:113 msgid "Do not use existing catalog, force new output file" msgstr "Zamiast do istniej±cego katalogu, zapisanie do nowego pliku" -#: catgets/gencat.c:113 nss/makedb.c:61 +#: catgets/gencat.c:114 nss/makedb.c:61 msgid "Write output to file NAME" msgstr "Zapisanie wyników do pliku NAZWA" -#: catgets/gencat.c:118 +#: catgets/gencat.c:119 msgid "" -"Generate message catalog.If INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" +"Generate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" "is -, output is written to standard output.\n" msgstr "" -"Generowanie katalogu komunikatów.Je¶li PLIK-WE to -, dane s± czytane ze standardowego wej¶cia. Je¶li PLIK-WY\n" +"Generowanie katalogu komunikatów.\vJe¶li PLIK-WE to -, dane s± czytane ze standardowego wej¶cia. Je¶li PLIK-WY\n" "to -, dane s± zapisywane na standardowe wyj¶cie.\n" -#: catgets/gencat.c:123 +#: catgets/gencat.c:124 msgid "" "-o OUTPUT-FILE [INPUT-FILE]...\n" "[OUTPUT-FILE [INPUT-FILE]...]" @@ -130,9 +130,9 @@ msgstr "" "-o PLIK-WY [PLIK-WE]...\n" "[PLIK-WY [PLIK-WE]...]" -#: catgets/gencat.c:231 debug/pcprofiledump.c:199 iconv/iconv_prog.c:410 -#: iconv/iconvconfig.c:379 locale/programs/localedef.c:370 -#: login/programs/pt_chown.c:88 malloc/memusagestat.c:525 nss/makedb.c:231 +#: catgets/gencat.c:232 debug/pcprofiledump.c:199 iconv/iconv_prog.c:411 +#: iconv/iconvconfig.c:380 locale/programs/localedef.c:371 +#: login/programs/pt_chown.c:88 malloc/memusagestat.c:526 nss/makedb.c:231 msgid "" "For bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" @@ -140,12 +140,12 @@ msgstr "" "Instrukcje dotycz±ce zg³aszania b³êdów znajduj± siê pod adresem:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" -#: catgets/gencat.c:245 debug/xtrace.sh:64 elf/ldconfig.c:285 -#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:425 -#: iconv/iconvconfig.c:394 locale/programs/locale.c:274 -#: locale/programs/localedef.c:386 login/programs/pt_chown.c:59 -#: malloc/memusage.sh:71 nscd/nscd.c:401 nss/getent.c:83 nss/makedb.c:245 -#: posix/getconf.c:1007 +#: catgets/gencat.c:246 debug/xtrace.sh:64 elf/ldconfig.c:287 +#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:426 +#: iconv/iconvconfig.c:395 locale/programs/locale.c:275 +#: locale/programs/localedef.c:387 login/programs/pt_chown.c:59 +#: malloc/memusage.sh:71 nscd/nscd.c:406 nss/getent.c:83 nss/makedb.c:245 +#: posix/getconf.c:1012 #, c-format msgid "" "Copyright (C) %s Free Software Foundation, Inc.\n" @@ -158,94 +158,94 @@ msgstr "" "SPRZEDA¯Y lub PRZYDATNO¦CI DO KONKRETNYCH ZASTOSOWAÑ.\n" # w %s wchodzi nazwisko autora danego programu/procedury -PK -#: catgets/gencat.c:250 debug/xtrace.sh:68 elf/ldconfig.c:290 elf/sprof.c:361 -#: iconv/iconv_prog.c:430 iconv/iconvconfig.c:399 locale/programs/locale.c:279 -#: locale/programs/localedef.c:391 malloc/memusage.sh:75 nscd/nscd.c:406 -#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1012 +#: catgets/gencat.c:251 debug/xtrace.sh:68 elf/ldconfig.c:292 elf/sprof.c:361 +#: iconv/iconv_prog.c:431 iconv/iconvconfig.c:400 locale/programs/locale.c:280 +#: locale/programs/localedef.c:392 malloc/memusage.sh:75 nscd/nscd.c:411 +#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1017 #, c-format msgid "Written by %s.\n" msgstr "Autorem jest %s.\n" -#: catgets/gencat.c:281 +#: catgets/gencat.c:282 msgid "*standard input*" msgstr "*standardowe wej¶cie*" -#: catgets/gencat.c:287 iconv/iconv_charmap.c:157 iconv/iconv_prog.c:297 +#: catgets/gencat.c:288 iconv/iconv_charmap.c:158 iconv/iconv_prog.c:298 #: nss/makedb.c:170 #, c-format msgid "cannot open input file `%s'" msgstr "nie mo¿na otworzyæ pliku wej¶ciowego `%s'" -#: catgets/gencat.c:416 catgets/gencat.c:493 +#: catgets/gencat.c:417 catgets/gencat.c:494 msgid "illegal set number" msgstr "b³êdny numer zbioru" -#: catgets/gencat.c:443 +#: catgets/gencat.c:444 msgid "duplicate set definition" msgstr "powtórzona definicja zbioru" -#: catgets/gencat.c:445 catgets/gencat.c:622 catgets/gencat.c:676 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677 msgid "this is the first definition" msgstr "to pierwsza definicja" -#: catgets/gencat.c:521 +#: catgets/gencat.c:522 #, c-format msgid "unknown set `%s'" msgstr "nieznany zbiór `%s'" -#: catgets/gencat.c:562 +#: catgets/gencat.c:563 msgid "invalid quote character" msgstr "niepoprawny znak cudzys³owu" -#: catgets/gencat.c:575 +#: catgets/gencat.c:576 #, c-format msgid "unknown directive `%s': line ignored" msgstr "nieznana dyrektywa `%s': linia zignorowana" -#: catgets/gencat.c:620 +#: catgets/gencat.c:621 msgid "duplicated message number" msgstr "powtórzony numer komunikatu" -#: catgets/gencat.c:673 +#: catgets/gencat.c:674 msgid "duplicated message identifier" msgstr "powtórzony identyfikator komunikatu" -#: catgets/gencat.c:730 +#: catgets/gencat.c:731 msgid "invalid character: message ignored" msgstr "niepoprawny znak: komunikat zignorowany" -#: catgets/gencat.c:773 +#: catgets/gencat.c:774 msgid "invalid line" msgstr "niepoprawna linia" -#: catgets/gencat.c:827 +#: catgets/gencat.c:828 msgid "malformed line ignored" msgstr "b³êdnie sformu³owana linia zosta³a pominiêta" -#: catgets/gencat.c:991 catgets/gencat.c:1032 nss/makedb.c:183 +#: catgets/gencat.c:992 catgets/gencat.c:1033 nss/makedb.c:183 #, c-format msgid "cannot open output file `%s'" msgstr "nie mo¿na otworzyæ pliku wyj¶ciowego `%s'" -#: catgets/gencat.c:1194 locale/programs/linereader.c:559 +#: catgets/gencat.c:1195 locale/programs/linereader.c:560 msgid "invalid escape sequence" msgstr "b³êdna sekwencja escape" -#: catgets/gencat.c:1216 +#: catgets/gencat.c:1217 msgid "unterminated message" msgstr "nie zakoñczony komunikat" -#: catgets/gencat.c:1240 +#: catgets/gencat.c:1241 #, c-format msgid "while opening old catalog file" msgstr "podczas otwierania starego pliku katalogu" -#: catgets/gencat.c:1331 +#: catgets/gencat.c:1332 #, c-format msgid "conversion modules not available" msgstr "modu³y konwersji niedostêpny" -#: catgets/gencat.c:1357 +#: catgets/gencat.c:1358 #, c-format msgid "cannot determine escape character" msgstr "nie mo¿na okre¶liæ znaku escape" @@ -282,13 +282,11 @@ msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n" msgstr "Sk³adnia: xtrace [OPCJA]... PROGRAM [OPCJA-PROGRAMU]...\\n" #: debug/xtrace.sh:33 -#, fuzzy -msgid "Try `xtrace --help' for more information.\\n" +msgid "Try \\`xtrace --help' for more information.\\n" msgstr "Polecenie \\`xtrace --help' pozwoli uzyskaæ wiêcej informacji.\\n" #: debug/xtrace.sh:39 -#, fuzzy -msgid "xtrace: option `$1' requires an argument.\\n" +msgid "xtrace: option \\`$1' requires an argument.\\n" msgstr "xtrace: opcja \\`$1' musi mieæ argument.\\n" #: debug/xtrace.sh:46 @@ -323,8 +321,7 @@ msgstr "" "<http://www.gnu.org/software/libc/bugs.html>.\\n" #: debug/xtrace.sh:125 -#, fuzzy -msgid "xtrace: unrecognized option `$1'\\n" +msgid "xtrace: unrecognized option \\`$1'\\n" msgstr "xtrace: nieznana opcja \\`$1'\\n" #: debug/xtrace.sh:138 @@ -332,20 +329,20 @@ msgid "No program name given\\n" msgstr "Nie podano nazwy programu\\n" #: debug/xtrace.sh:146 -#, fuzzy, sh-format -msgid "executable `$program' not found\\n" +#, sh-format +msgid "executable \\`$program' not found\\n" msgstr "nie znaleziono programu wykonywalnego \\`$program'\\n" #: debug/xtrace.sh:150 -#, fuzzy, sh-format -msgid "`$program' is no executable\\n" +#, sh-format +msgid "\\`$program' is no executable\\n" msgstr "\\`$program' nie jest wykonywalny\\n" -#: dlfcn/dlinfo.c:67 +#: dlfcn/dlinfo.c:64 msgid "RTLD_SELF used in code not dynamically loaded" msgstr "RTLD_SELF wyst±pi³o w kodzie nie ³adowanym dynamicznie" -#: dlfcn/dlinfo.c:76 +#: dlfcn/dlinfo.c:73 msgid "unsupported dlinfo request" msgstr "nieobs³ugiwane ¿±danie dlinfo" @@ -361,70 +358,69 @@ msgstr "niepoprawny tryb" msgid "invalid mode parameter" msgstr "niepoprawny parametr trybu" -#: elf/cache.c:67 +#: elf/cache.c:68 msgid "unknown" msgstr "nieznany" -#: elf/cache.c:110 +#: elf/cache.c:111 msgid "Unknown OS" msgstr "Nieznany system" -#: elf/cache.c:115 +#: elf/cache.c:116 #, c-format msgid ", OS ABI: %s %d.%d.%d" msgstr ", ABI systemu: %s %d.%d.%d" -#: elf/cache.c:141 elf/ldconfig.c:1231 +#: elf/cache.c:142 elf/ldconfig.c:1236 #, c-format msgid "Can't open cache file %s\n" msgstr "Nie mo¿na otworzyæ pliku bufora %s\n" -#: elf/cache.c:153 +#: elf/cache.c:154 #, c-format msgid "mmap of cache file failed.\n" msgstr "mmap pliku bufora nie powiod³o siê.\n" -#: elf/cache.c:157 elf/cache.c:167 +#: elf/cache.c:158 elf/cache.c:168 #, c-format msgid "File is not a cache file.\n" msgstr "Plik nie jest plikiem bufora.\n" -#: elf/cache.c:200 elf/cache.c:210 +#: elf/cache.c:201 elf/cache.c:211 #, c-format msgid "%d libs found in cache `%s'\n" msgstr "Znaleziono %d bibliotek w buforze `%s'\n" -#: elf/cache.c:409 +#: elf/cache.c:410 #, c-format msgid "Can't remove old temporary cache file %s" msgstr "Nie mo¿na usun±æ starego tymczasowego pliku bufora %s" -#: elf/cache.c:416 +#: elf/cache.c:417 #, c-format msgid "Can't create temporary cache file %s" msgstr "Nie mo¿na utworzyæ tymczasowego pliku bufora %s" -#: elf/cache.c:424 elf/cache.c:434 elf/cache.c:438 +#: elf/cache.c:425 elf/cache.c:435 elf/cache.c:439 elf/cache.c:443 #, c-format msgid "Writing of cache data failed" msgstr "Zapis danych bufora nie powiód³ siê" -#: elf/cache.c:442 -#, c-format -msgid "Writing of cache data failed." -msgstr "Zapis danych bufora nie powiód³ siê." - -#: elf/cache.c:449 +#: elf/cache.c:450 #, c-format msgid "Changing access rights of %s to %#o failed" msgstr "Zmiana praw dostêpu %s na %#o nie powiod³a siê" -#: elf/cache.c:454 +#: elf/cache.c:455 #, c-format msgid "Renaming of %s to %s failed" msgstr "Zmiana nazwy %s na %s nie powiod³a siê" -#: elf/dl-close.c:116 +#: elf/dl-close.c:378 elf/dl-open.c:460 +msgid "cannot create scope list" +msgstr "nie mo¿na utworzyæ listy zakresów" + +#: elf/dl-close.c:724 msgid "shared object not open" msgstr "obiekt dzielony nie jest otwarty" @@ -432,8 +428,8 @@ msgstr "obiekt dzielony nie jest otwarty" msgid "DST not allowed in SUID/SGID programs" msgstr "DST nie dozwolone dla programów SUID/SGID" -#: elf/dl-deps.c:125 -msgid "empty dynamics string token substitution" +#: elf/dl-deps.c:125 elf/dl-open.c:282 +msgid "empty dynamic string token substitution" msgstr "puste dynamiczne podstawienie znaku ³añcucha" #: elf/dl-deps.c:131 @@ -477,151 +473,151 @@ msgstr "b³±d wewnêtrzny: symidx spoza zakresu tablicy fptr" msgid "cannot allocate name record" msgstr "nie mo¿na przydzieliæ pamiêci dla rekordu nazwy" -#: elf/dl-load.c:474 elf/dl-load.c:553 elf/dl-load.c:673 elf/dl-load.c:786 +#: elf/dl-load.c:474 elf/dl-load.c:582 elf/dl-load.c:667 elf/dl-load.c:780 msgid "cannot create cache for search path" msgstr "nie mo¿na utworzyæ bufora dla ¶cie¿ki przeszukiwania" -#: elf/dl-load.c:576 +#: elf/dl-load.c:565 msgid "cannot create RUNPATH/RPATH copy" msgstr "nie mo¿na utworzyæ kopii RUNPATH/RPATH" -#: elf/dl-load.c:659 +#: elf/dl-load.c:653 msgid "cannot create search path array" msgstr "nie mo¿na utworzyæ tablicy ¶cie¿ki przeszukiwania" -#: elf/dl-load.c:870 +#: elf/dl-load.c:864 msgid "cannot stat shared object" msgstr "nie mo¿na wykonaæ stat na obiekcie dzielonym" -#: elf/dl-load.c:940 +#: elf/dl-load.c:934 msgid "cannot open zero fill device" msgstr "nie mo¿na otworzyæ urz±dzenia wype³niaj±cego zerami" -#: elf/dl-load.c:985 elf/dl-load.c:2215 +#: elf/dl-load.c:979 elf/dl-load.c:2224 msgid "cannot create shared object descriptor" msgstr "nie mo¿na utworzyæ deskryptora obiektu dzielonego" -#: elf/dl-load.c:1004 elf/dl-load.c:1663 elf/dl-load.c:1755 +#: elf/dl-load.c:998 elf/dl-load.c:1656 elf/dl-load.c:1748 msgid "cannot read file data" msgstr "nie mo¿na odczytaæ danych z pliku" -#: elf/dl-load.c:1048 +#: elf/dl-load.c:1042 msgid "ELF load command alignment not page-aligned" msgstr "wyrównanie polecenia wczytania ELF nie wyrównane do granicy stron" -#: elf/dl-load.c:1055 +#: elf/dl-load.c:1049 msgid "ELF load command address/offset not properly aligned" msgstr "adres/przesuniêcie polecenia wczytania ELF niew³a¶ciwie wyrównane" -#: elf/dl-load.c:1139 +#: elf/dl-load.c:1132 msgid "cannot allocate TLS data structures for initial thread" msgstr "nie mo¿na przydzieliæ struktur danych TLS dla pocz±tkowego w±tku" -#: elf/dl-load.c:1163 +#: elf/dl-load.c:1155 msgid "cannot handle TLS data" msgstr "nie mo¿na obs³u¿yæ danych TLS" -#: elf/dl-load.c:1182 +#: elf/dl-load.c:1174 msgid "object file has no loadable segments" msgstr "plik obiektu nie ma segmentów ³adowalnych" -#: elf/dl-load.c:1218 +#: elf/dl-load.c:1210 msgid "failed to map segment from shared object" msgstr "odwzorowanie segmentu z obiektu dzielonego nie powiod³o siê" -#: elf/dl-load.c:1242 +#: elf/dl-load.c:1236 msgid "cannot dynamically load executable" msgstr "nie mo¿na dynamicznie wczytaæ pliku wykonywalnego" -#: elf/dl-load.c:1303 +#: elf/dl-load.c:1298 msgid "cannot change memory protections" msgstr "nie mo¿na zmieniæ ochrony pamiêci" -#: elf/dl-load.c:1322 +#: elf/dl-load.c:1317 msgid "cannot map zero-fill pages" msgstr "nie mo¿na odwzorowaæ stron wype³nionych zerami" -#: elf/dl-load.c:1336 +#: elf/dl-load.c:1331 msgid "object file has no dynamic section" msgstr "plik obiektu nie ma sekcji dynamicznej" -#: elf/dl-load.c:1359 +#: elf/dl-load.c:1354 msgid "shared object cannot be dlopen()ed" msgstr "obiekt dzielony nie mo¿e byæ otwarty przez dlopen()" -#: elf/dl-load.c:1372 +#: elf/dl-load.c:1367 msgid "cannot allocate memory for program header" msgstr "nie mo¿na przydzieliæ pamiêci na nag³ówek programu" -#: elf/dl-load.c:1389 elf/dl-open.c:174 +#: elf/dl-load.c:1384 elf/dl-open.c:218 msgid "invalid caller" msgstr "niepoprawny wywo³uj±cy" -#: elf/dl-load.c:1428 +#: elf/dl-load.c:1423 msgid "cannot enable executable stack as shared object requires" msgstr "nie mo¿na w³±czyæ wykonywalnego stosu wymaganego przez obiekt dzielony" -#: elf/dl-load.c:1443 +#: elf/dl-load.c:1436 msgid "cannot close file descriptor" msgstr "nie mo¿na zamkn±æ deskryptora pliku" -#: elf/dl-load.c:1485 +#: elf/dl-load.c:1478 msgid "cannot create searchlist" msgstr "nie mo¿na utworzyæ listy przeszukiwañ" -#: elf/dl-load.c:1663 +#: elf/dl-load.c:1656 msgid "file too short" msgstr "plik za krótki" -#: elf/dl-load.c:1692 +#: elf/dl-load.c:1685 msgid "invalid ELF header" msgstr "nieprawid³owy nag³ówek ELF" -#: elf/dl-load.c:1704 +#: elf/dl-load.c:1697 msgid "ELF file data encoding not big-endian" msgstr "kodowanie danych w pliku ELF nie jest big-endian" -#: elf/dl-load.c:1706 +#: elf/dl-load.c:1699 msgid "ELF file data encoding not little-endian" msgstr "kodowanie danych w pliku ELF nie jest little-endian" -#: elf/dl-load.c:1710 +#: elf/dl-load.c:1703 msgid "ELF file version ident does not match current one" msgstr "identyfikator wersji pliku ELF nie zgadza siê z aktualnym" -#: elf/dl-load.c:1714 +#: elf/dl-load.c:1707 msgid "ELF file OS ABI invalid" msgstr "niepoprawne ABI systemu w pliku ELF" -#: elf/dl-load.c:1716 +#: elf/dl-load.c:1709 msgid "ELF file ABI version invalid" msgstr "niepoprawna wersja ABI w pliku ELF" -#: elf/dl-load.c:1719 +#: elf/dl-load.c:1712 msgid "internal error" msgstr "b³±d wewnêtrzny" -#: elf/dl-load.c:1726 +#: elf/dl-load.c:1719 msgid "ELF file version does not match current one" msgstr "wersja pliku ELF nie zgadza siê z aktualn±" -#: elf/dl-load.c:1734 +#: elf/dl-load.c:1727 msgid "only ET_DYN and ET_EXEC can be loaded" msgstr "tylko ET_DYN i ET_EXEC mog± byæ wczytane" -#: elf/dl-load.c:1740 +#: elf/dl-load.c:1733 msgid "ELF file's phentsize not the expected size" msgstr "phentsize w pliku ELF nie jest oczekiwanym rozmiarem" -#: elf/dl-load.c:2231 +#: elf/dl-load.c:2240 msgid "wrong ELF class: ELFCLASS64" msgstr "niew³a¶ciwa klasa ELF: ELFCLASS64" -#: elf/dl-load.c:2232 +#: elf/dl-load.c:2241 msgid "wrong ELF class: ELFCLASS32" msgstr "niew³a¶ciwa klasa ELF: ELFCLASS32" -#: elf/dl-load.c:2235 +#: elf/dl-load.c:2244 msgid "cannot open shared object file" msgstr "nie mo¿na otworzyæ pliku obiektu dzielonego" @@ -633,69 +629,61 @@ msgstr "b³±d relokacji" msgid "symbol lookup error" msgstr "b³±d poszukiwania symbolu" -#: elf/dl-open.c:112 +#: elf/dl-open.c:114 msgid "cannot extend global scope" msgstr "nie mo¿na rozszerzyæ zakresu globalnego" -#: elf/dl-open.c:237 -msgid "empty dynamic string token substitution" -msgstr "puste dynamiczne podstawienie znaku ³añcucha" - -#: elf/dl-open.c:406 elf/dl-open.c:417 elf/dl-open.c:425 -msgid "cannot create scope list" -msgstr "nie mo¿na utworzyæ listy zakresów" - -#: elf/dl-open.c:470 +#: elf/dl-open.c:512 msgid "TLS generation counter wrapped! Please report this." msgstr "Licznik generacji TLS przekrêci³ siê! Proszê to zg³osiæ." -#: elf/dl-open.c:508 +#: elf/dl-open.c:549 msgid "invalid mode for dlopen()" msgstr "b³êdny typ dla dlopen()" -#: elf/dl-open.c:525 +#: elf/dl-open.c:566 msgid "no more namespaces available for dlmopen()" msgstr "nie ma wiêcej dostêpnych przestrzeni nazw dla dlmopen()" -#: elf/dl-open.c:538 +#: elf/dl-open.c:579 msgid "invalid target namespace in dlmopen()" msgstr "b³êdna przestrzeñ nazw dla celu w dlmopen()" -#: elf/dl-reloc.c:55 +#: elf/dl-reloc.c:54 msgid "cannot allocate memory in static TLS block" msgstr "nie mo¿na przydzieliæ pamiêci w statycznym bloku TLS" -#: elf/dl-reloc.c:198 +#: elf/dl-reloc.c:196 msgid "cannot make segment writable for relocation" msgstr "nie mo¿na uczyniæ segmentu zapisywalnym w celu relokacji" -#: elf/dl-reloc.c:279 +#: elf/dl-reloc.c:277 #, c-format msgid "%s: no PLTREL found in object %s\n" msgstr "%s: nie znaleziono PLTREL w obiekcie %s\n" -#: elf/dl-reloc.c:290 +#: elf/dl-reloc.c:288 #, c-format msgid "%s: out of memory to store relocation results for %s\n" msgstr "%s: brak pamiêci na zapisanie wyników relokacji dla %s\n" -#: elf/dl-reloc.c:306 +#: elf/dl-reloc.c:304 msgid "cannot restore segment prot after reloc" msgstr "nie mo¿na odtworzyæ ochrony segmentu po relokacji" -#: elf/dl-reloc.c:331 +#: elf/dl-reloc.c:329 msgid "cannot apply additional memory protection after relocation" msgstr "nie mo¿na na³o¿yæ dodatkowej ochrony pamiêci po relokacji" -#: elf/dl-sym.c:98 +#: elf/dl-sym.c:161 msgid "RTLD_NEXT used in code not dynamically loaded" msgstr "RTLD_NEXT wyst±pi³o w kodzie nie ³adowanym dynamicznie" -#: elf/dl-sysdep.c:495 +#: elf/dl-sysdep.c:474 elf/dl-sysdep.c:486 msgid "cannot create capability list" msgstr "nie mo¿na utworzyæ listy uprawnieñ" -#: elf/dl-tls.c:829 +#: elf/dl-tls.c:825 msgid "cannot create TLS data structures" msgstr "nie mo¿na utworzyæ struktur danych TLS" @@ -703,221 +691,216 @@ msgstr "nie mo¿na utworzyæ struktur danych TLS" msgid "cannot allocate version reference table" msgstr "nie mo¿na przydzieliæ tablicy odniesieñ do wersji" -#: elf/ldconfig.c:133 +#: elf/ldconfig.c:135 msgid "Print cache" msgstr "Wypisanie zawarto¶ci bufora" -#: elf/ldconfig.c:134 +#: elf/ldconfig.c:136 msgid "Generate verbose messages" msgstr "Wy¶wietlanie wiêkszej liczby komunikatów" -#: elf/ldconfig.c:135 +#: elf/ldconfig.c:137 msgid "Don't build cache" msgstr "Nie budowanie bufora" -#: elf/ldconfig.c:136 +#: elf/ldconfig.c:138 msgid "Don't generate links" msgstr "Nie tworzenie dowi±zañ" -#: elf/ldconfig.c:137 +#: elf/ldconfig.c:139 msgid "Change to and use ROOT as root directory" msgstr "Przej¶cie do i u¿ywanie KATALOGU jako g³ównego katalogu" -#: elf/ldconfig.c:137 +#: elf/ldconfig.c:139 msgid "ROOT" msgstr "KATALOG" -#: elf/ldconfig.c:138 +#: elf/ldconfig.c:140 msgid "CACHE" msgstr "BUFOR" -#: elf/ldconfig.c:138 +#: elf/ldconfig.c:140 msgid "Use CACHE as cache file" msgstr "U¿ycie BUFORA jako pliku bufora" -#: elf/ldconfig.c:139 +#: elf/ldconfig.c:141 msgid "CONF" msgstr "KONF" -#: elf/ldconfig.c:139 +#: elf/ldconfig.c:141 msgid "Use CONF as configuration file" msgstr "U¿ycie KONF jako pliku konfiguracyjnego" -#: elf/ldconfig.c:140 +#: elf/ldconfig.c:142 msgid "Only process directories specified on the command line. Don't build cache." msgstr "Przetwarzanie wy³±cznie katalogów podanych z linii poleceñ; nie budowanie bufora." -#: elf/ldconfig.c:141 +#: elf/ldconfig.c:143 msgid "Manually link individual libraries." msgstr "Rêczne tworzenie dowi±zañ do pojedynczych bibliotek." -#: elf/ldconfig.c:142 +#: elf/ldconfig.c:144 msgid "FORMAT" msgstr "FORMAT" -#: elf/ldconfig.c:142 +#: elf/ldconfig.c:144 msgid "Format to use: new, old or compat (default)" msgstr "U¿ywany format: new, old lub compat (domy¶lny)" -#: elf/ldconfig.c:150 +#: elf/ldconfig.c:152 msgid "Configure Dynamic Linker Run Time Bindings." msgstr "Konfiguracja powi±zañ dynamicznego linkera." -#: elf/ldconfig.c:308 +#: elf/ldconfig.c:310 #, c-format msgid "Path `%s' given more than once" msgstr "¦cie¿ka `%s' podana wiêcej ni¿ raz" -#: elf/ldconfig.c:348 +#: elf/ldconfig.c:350 #, c-format msgid "%s is not a known library type" msgstr "%s nie jest znanym rodzajem biblioteki" -#: elf/ldconfig.c:373 +#: elf/ldconfig.c:375 #, c-format msgid "Can't stat %s" msgstr "Nie mo¿na wykonaæ stat na %s" -#: elf/ldconfig.c:447 +#: elf/ldconfig.c:449 #, c-format msgid "Can't stat %s\n" msgstr "Nie mo¿na wykonaæ stat na %s\n" -#: elf/ldconfig.c:457 +#: elf/ldconfig.c:459 #, c-format msgid "%s is not a symbolic link\n" msgstr "%s nie jest dowi±zaniem symbolicznym\n" -#: elf/ldconfig.c:476 +#: elf/ldconfig.c:478 #, c-format msgid "Can't unlink %s" msgstr "Nie mo¿na usun±æ %s" -#: elf/ldconfig.c:482 +#: elf/ldconfig.c:484 #, c-format msgid "Can't link %s to %s" msgstr "Nie mo¿na dowi±zaæ %s do %s" -#: elf/ldconfig.c:488 +#: elf/ldconfig.c:490 msgid " (changed)\n" msgstr " (zmieniono)\n" -#: elf/ldconfig.c:490 +#: elf/ldconfig.c:492 msgid " (SKIPPED)\n" msgstr " (POMINIÊTO)\n" -#: elf/ldconfig.c:545 +#: elf/ldconfig.c:547 #, c-format msgid "Can't find %s" msgstr "Nie mo¿na znale¼æ %s" -#: elf/ldconfig.c:561 +#: elf/ldconfig.c:563 elf/ldconfig.c:737 elf/ldconfig.c:784 #, c-format -msgid "Can't lstat %s" +msgid "Cannot lstat %s" msgstr "Nie mo¿na wykonaæ lstat na %s" -#: elf/ldconfig.c:568 +#: elf/ldconfig.c:570 #, c-format msgid "Ignored file %s since it is not a regular file." msgstr "Zignorowano plik %s poniewa¿ nie jest zwyk³ym plikiem." -#: elf/ldconfig.c:576 +#: elf/ldconfig.c:578 #, c-format msgid "No link created since soname could not be found for %s" msgstr "Nie utworzono dowi±zania poniewa¿ nie znaleziono soname dla %s" -#: elf/ldconfig.c:667 +#: elf/ldconfig.c:669 #, c-format msgid "Can't open directory %s" msgstr "Nie mo¿na otworzyæ katalogu %s" -#: elf/ldconfig.c:735 elf/ldconfig.c:782 -#, c-format -msgid "Cannot lstat %s" -msgstr "Nie mo¿na wykonaæ lstat na %s" - -#: elf/ldconfig.c:747 +#: elf/ldconfig.c:749 #, c-format msgid "Cannot stat %s" msgstr "Nie mo¿na wykonaæ stat na %s" -#: elf/ldconfig.c:804 elf/readlib.c:90 +#: elf/ldconfig.c:806 elf/readlib.c:91 #, c-format msgid "Input file %s not found.\n" msgstr "Nie znaleziono pliku wej¶ciowego %s.\n" -#: elf/ldconfig.c:855 +#: elf/ldconfig.c:857 #, c-format msgid "libc5 library %s in wrong directory" msgstr "biblioteka libc5 %s w z³ym katalogu" -#: elf/ldconfig.c:858 +#: elf/ldconfig.c:860 #, c-format msgid "libc6 library %s in wrong directory" msgstr "biblioteka libc6 %s w z³ym katalogu" -#: elf/ldconfig.c:861 +#: elf/ldconfig.c:863 #, c-format msgid "libc4 library %s in wrong directory" msgstr "biblioteka libc4 %s w z³ym katalogu" -#: elf/ldconfig.c:888 +#: elf/ldconfig.c:890 #, c-format msgid "libraries %s and %s in directory %s have same soname but different type." msgstr "biblioteki %s i %s w katalogu %s maj± to samo soname ale inny rodzaj." -#: elf/ldconfig.c:995 +#: elf/ldconfig.c:997 #, c-format msgid "Can't open configuration file %s" msgstr "Nie mo¿na otworzyæ pliku konfiguracyjnego %s" -#: elf/ldconfig.c:1059 +#: elf/ldconfig.c:1061 #, c-format msgid "%s:%u: bad syntax in hwcap line" msgstr "%s:%u: b³êdna sk³adnia w linii hwcap" -#: elf/ldconfig.c:1065 +#: elf/ldconfig.c:1067 #, c-format msgid "%s:%u: hwcap index %lu above maximum %u" msgstr "%s:%u: indeks hwcap %lu powy¿ej maksymalnego %u" -#: elf/ldconfig.c:1072 elf/ldconfig.c:1080 +#: elf/ldconfig.c:1074 elf/ldconfig.c:1082 #, c-format msgid "%s:%u: hwcap index %lu already defined as %s" msgstr "%s:%u: indeks hwcap %lu ju¿ zdefiniowany jako %s" -#: elf/ldconfig.c:1083 +#: elf/ldconfig.c:1085 #, c-format msgid "%s:%u: duplicate hwcap %lu %s" msgstr "%s:%u: powtórzony hwcap %lu %s" -#: elf/ldconfig.c:1105 +#: elf/ldconfig.c:1107 #, c-format msgid "need absolute file name for configuration file when using -r" msgstr "opcja -r wymaga bezwzglêdnej ¶cie¿ki pliku konfiguracyjnego" -#: elf/ldconfig.c:1112 locale/programs/xmalloc.c:69 malloc/obstack.c:434 -#: malloc/obstack.c:436 posix/getconf.c:980 posix/getconf.c:1158 +#: elf/ldconfig.c:1114 locale/programs/xmalloc.c:70 malloc/obstack.c:434 +#: malloc/obstack.c:436 posix/getconf.c:985 posix/getconf.c:1163 #, c-format msgid "memory exhausted" msgstr "pamiêæ wyczerpana" -#: elf/ldconfig.c:1142 +#: elf/ldconfig.c:1144 #, c-format msgid "%s:%u: cannot read directory %s" msgstr "%s:%u: nie mo¿na odczytaæ %s" -#: elf/ldconfig.c:1182 +#: elf/ldconfig.c:1189 #, c-format msgid "relative path `%s' used to build cache" msgstr "u¿yto wzglêdnej ¶cie¿ki `%s' do utworzenia bufora" -#: elf/ldconfig.c:1210 +#: elf/ldconfig.c:1215 #, c-format msgid "Can't chdir to /" msgstr "Nie mo¿na przej¶æ do katalogu /" -#: elf/ldconfig.c:1252 +#: elf/ldconfig.c:1257 #, c-format msgid "Can't open cache file directory %s\n" msgstr "Nie mo¿na otworzyæ katalogu pliku bufora %s\n" @@ -949,8 +932,7 @@ msgstr "" "<http://www.gnu.org/software/libc/bugs.html>." #: elf/ldd.bash.in:80 -#, fuzzy -msgid "ldd: option `$1' is ambiguous" +msgid "ldd: option \\`$1' is ambiguous" msgstr "ldd: opcja \\`$1' jest niejednoznaczna" #: elf/ldd.bash.in:87 @@ -958,8 +940,7 @@ msgid "unrecognized option" msgstr "nieznana opcja" #: elf/ldd.bash.in:88 elf/ldd.bash.in:126 -#, fuzzy -msgid "Try `ldd --help' for more information." +msgid "Try \\`ldd --help' for more information." msgstr "Polecenie \\`ldd --help' pozwoli uzyskaæ wiêcej informacji." #: elf/ldd.bash.in:125 @@ -1023,27 +1004,27 @@ msgstr "%s nie jest plikiem obiektu dzielonego (Typ: %d).\n" msgid "more than one dynamic segment\n" msgstr "wiêcej ni¿ jeden segment dynamiczny\n" -#: elf/readlib.c:96 +#: elf/readlib.c:97 #, c-format msgid "Cannot fstat file %s.\n" msgstr "Nie mo¿na wykonaæ fstat na pliku %s.\n" -#: elf/readlib.c:107 +#: elf/readlib.c:108 #, c-format msgid "File %s is empty, not checked." msgstr "Plik %s jest pusty, nie sprawdzony." -#: elf/readlib.c:113 +#: elf/readlib.c:114 #, c-format msgid "File %s is too small, not checked." msgstr "Plik %s jest za ma³y, nie sprawdzony." -#: elf/readlib.c:123 +#: elf/readlib.c:124 #, c-format msgid "Cannot mmap file %s.\n" msgstr "Nie mo¿na wykonaæ mmap pliku %s.\n" -#: elf/readlib.c:161 +#: elf/readlib.c:162 #, c-format msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n" msgstr "%s nie jest plikiem ELF - ma z³e bajty magiczne na pocz±tku.\n" @@ -1067,10 +1048,10 @@ msgstr "generowanie wykresu wywo³añ" #: elf/sprof.c:89 msgid "" -"Read and display shared object profiling data.For bug reporting instructions, please see:\n" +"Read and display shared object profiling data.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" -"Odczyt i wy¶wietlanie danych profiluj±cych dla obiektów wspó³dzielonych.Instrukcje dotycz±ce zg³aszania b³êdów znajduj± siê pod adresem:\n" +"Odczyt i wy¶wietlanie danych profiluj±cych dla obiektów wspó³dzielonych.\vInstrukcje dotycz±ce zg³aszania b³êdów znajduj± siê pod adresem:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" #: elf/sprof.c:94 @@ -1167,136 +1148,136 @@ msgstr "`%s' nie jest poprawnym plikiem danych profiluj±cych dla `%s'" msgid "cannot allocate symbol data" msgstr "nie mo¿na przydzieliæ pamiêci dla symboli" -#: iconv/iconv_charmap.c:175 iconv/iconv_prog.c:315 +#: iconv/iconv_charmap.c:176 iconv/iconv_prog.c:316 #, c-format msgid "error while closing input `%s'" msgstr "b³±d podczas zamykania wej¶cia `%s'" -#: iconv/iconv_charmap.c:449 +#: iconv/iconv_charmap.c:450 #, c-format msgid "illegal input sequence at position %Zd" msgstr "b³êdna sekwencja wej¶ciowa na pozycji %Zd" -#: iconv/iconv_charmap.c:468 iconv/iconv_prog.c:525 +#: iconv/iconv_charmap.c:469 iconv/iconv_prog.c:526 #, c-format msgid "incomplete character or shift sequence at end of buffer" msgstr "niekompletny znak lub sekwencja steruj±ca na koñcu bufora" -#: iconv/iconv_charmap.c:513 iconv/iconv_charmap.c:549 iconv/iconv_prog.c:568 -#: iconv/iconv_prog.c:604 +#: iconv/iconv_charmap.c:514 iconv/iconv_charmap.c:550 iconv/iconv_prog.c:569 +#: iconv/iconv_prog.c:605 #, c-format msgid "error while reading the input" msgstr "b³±d podczas czytania danych wej¶ciowych" -#: iconv/iconv_charmap.c:531 iconv/iconv_prog.c:586 +#: iconv/iconv_charmap.c:532 iconv/iconv_prog.c:587 #, c-format msgid "unable to allocate buffer for input" msgstr "przydzielenie bufora dla danych wej¶ciowych by³o niemo¿liwe" -#: iconv/iconv_prog.c:59 +#: iconv/iconv_prog.c:60 msgid "Input/Output format specification:" msgstr "Specyfikacja formatu wej¶cia/wyj¶cia:" -#: iconv/iconv_prog.c:60 +#: iconv/iconv_prog.c:61 msgid "encoding of original text" msgstr "kodowanie oryginalnego tekstu" -#: iconv/iconv_prog.c:61 +#: iconv/iconv_prog.c:62 msgid "encoding for output" msgstr "kodowanie wyników" -#: iconv/iconv_prog.c:62 +#: iconv/iconv_prog.c:63 msgid "Information:" msgstr "Informacje:" -#: iconv/iconv_prog.c:63 +#: iconv/iconv_prog.c:64 msgid "list all known coded character sets" msgstr "wy¶wietlenie wszystkich znanych zestawów znaków" -#: iconv/iconv_prog.c:64 locale/programs/localedef.c:126 +#: iconv/iconv_prog.c:65 locale/programs/localedef.c:127 msgid "Output control:" msgstr "Kontrola wyj¶cia:" -#: iconv/iconv_prog.c:65 +#: iconv/iconv_prog.c:66 msgid "omit invalid characters from output" msgstr "pominiêcie nieprawid³owych znaków z wyj¶cia" -#: iconv/iconv_prog.c:66 +#: iconv/iconv_prog.c:67 msgid "output file" msgstr "plik wynikowy" -#: iconv/iconv_prog.c:67 +#: iconv/iconv_prog.c:68 msgid "suppress warnings" msgstr "nie wypisywanie ostrze¿eñ" -#: iconv/iconv_prog.c:68 +#: iconv/iconv_prog.c:69 msgid "print progress information" msgstr "wy¶wietlanie informacji o postêpie konwersji" -#: iconv/iconv_prog.c:73 +#: iconv/iconv_prog.c:74 msgid "Convert encoding of given files from one encoding to another." msgstr "Konwersja podanych plików miêdzy ró¿nymi metodami kodowania." -#: iconv/iconv_prog.c:77 +#: iconv/iconv_prog.c:78 msgid "[FILE...]" msgstr "[PLIK...]" -#: iconv/iconv_prog.c:199 +#: iconv/iconv_prog.c:200 #, c-format msgid "cannot open output file" msgstr "nie mo¿na otworzyæ pliku wyj¶ciowego" -#: iconv/iconv_prog.c:241 +#: iconv/iconv_prog.c:242 #, c-format msgid "conversions from `%s' and to `%s' are not supported" msgstr "konwersje z `%s' oraz do `%s' nie s± obs³ugiwane" -#: iconv/iconv_prog.c:246 +#: iconv/iconv_prog.c:247 #, c-format msgid "conversion from `%s' is not supported" msgstr "konwersja z `%s' nie jest obs³ugiwana" -#: iconv/iconv_prog.c:253 +#: iconv/iconv_prog.c:254 #, c-format msgid "conversion to `%s' is not supported" msgstr "konwersja do `%s' nie jest obs³ugiwana" -#: iconv/iconv_prog.c:257 +#: iconv/iconv_prog.c:258 #, c-format msgid "conversion from `%s' to `%s' is not supported" msgstr "konwersja z `%s' do `%s' nie jest obs³ugiwana" -#: iconv/iconv_prog.c:267 +#: iconv/iconv_prog.c:268 #, c-format msgid "failed to start conversion processing" msgstr "nie uda³o siê rozpocz±æ konwersji" -#: iconv/iconv_prog.c:361 +#: iconv/iconv_prog.c:362 #, c-format msgid "error while closing output file" msgstr "b³±d podczas zamykania pliku wyj¶ciowego" -#: iconv/iconv_prog.c:470 iconv/iconv_prog.c:496 +#: iconv/iconv_prog.c:471 iconv/iconv_prog.c:497 #, c-format msgid "conversion stopped due to problem in writing the output" msgstr "konwersja przerwana z powodu problemu z zapisaniem wyników" -#: iconv/iconv_prog.c:521 +#: iconv/iconv_prog.c:522 #, c-format msgid "illegal input sequence at position %ld" msgstr "b³êdna sekwencja wej¶ciowa na pozycji %ld" -#: iconv/iconv_prog.c:529 +#: iconv/iconv_prog.c:530 #, c-format msgid "internal error (illegal descriptor)" msgstr "b³±d wewnêtrzny (nieprawid³owy deskryptor)" -#: iconv/iconv_prog.c:532 +#: iconv/iconv_prog.c:533 #, c-format msgid "unknown iconv() error %d" msgstr "nieznany b³±d iconv() %d" -#: iconv/iconv_prog.c:778 +#: iconv/iconv_prog.c:779 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" @@ -1312,42 +1293,42 @@ msgstr "" "\n" " " -#: iconv/iconvconfig.c:109 +#: iconv/iconvconfig.c:110 msgid "Create fastloading iconv module configuration file." msgstr "Tworzenie pliku konfiguracyjnego do szybkiego wczytywania modu³ów iconv." -#: iconv/iconvconfig.c:113 +#: iconv/iconvconfig.c:114 msgid "[DIR...]" msgstr "[KATALOG...]" -#: iconv/iconvconfig.c:126 +#: iconv/iconvconfig.c:127 msgid "Prefix used for all file accesses" msgstr "Prefiks u¿ywany przy ka¿dym dostêpie do pliku" -#: iconv/iconvconfig.c:127 +#: iconv/iconvconfig.c:128 msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)" msgstr "Umieszczenie wyj¶cia w PLIKU zamiast miejsca instalacji (--prefix nie wp³ywa na PLIK)" -#: iconv/iconvconfig.c:131 +#: iconv/iconvconfig.c:132 msgid "Do not search standard directories, only those on the command line" msgstr "Nie przeszukiwanie standardowych katalogów, a wy³±cznie podanych z linii poleceñ" -#: iconv/iconvconfig.c:300 +#: iconv/iconvconfig.c:301 #, c-format msgid "Directory arguments required when using --nostdlib" msgstr "W przypadku u¿ycia --nostdlib wymagane jest podanie katalogów jako argumentów" -#: iconv/iconvconfig.c:342 locale/programs/localedef.c:290 +#: iconv/iconvconfig.c:343 locale/programs/localedef.c:291 #, c-format msgid "no output file produced because warnings were issued" msgstr "nie utworzono pliku wyj¶ciowego, poniewa¿ wyst±pi³y ostrze¿enia" -#: iconv/iconvconfig.c:428 +#: iconv/iconvconfig.c:429 #, c-format msgid "while inserting in search tree" msgstr "b³±d podczas wstawiania do drzewa wyszukiwañ" -#: iconv/iconvconfig.c:1236 +#: iconv/iconvconfig.c:1238 #, c-format msgid "cannot generate output file" msgstr "nie mo¿na wygenerowaæ pliku wyj¶ciowego" @@ -1438,993 +1419,972 @@ msgstr "Nieznane s³owo kluczowe w .netrc: %s" msgid "Character out of range for UTF-8" msgstr "Znak spoza zakresu UTF-8" -#: locale/programs/charmap-dir.c:57 +#: locale/programs/charmap-dir.c:58 #, c-format msgid "cannot read character map directory `%s'" msgstr "nie mo¿na odczytaæ katalogu mapy znaków `%s'" -#: locale/programs/charmap.c:137 +#: locale/programs/charmap.c:138 #, c-format msgid "character map file `%s' not found" msgstr "nie znaleziono pliku tablicy znaków `%s'" -#: locale/programs/charmap.c:194 +#: locale/programs/charmap.c:195 #, c-format msgid "default character map file `%s' not found" msgstr "nie znaleziono domy¶lnej tablicy znaków `%s'" -#: locale/programs/charmap.c:257 +#: locale/programs/charmap.c:258 #, c-format msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n" msgstr "tablica znaków `%s' niekompatybilna z ASCII, lokalizacja niekompatybilna z ISO C\n" -#: locale/programs/charmap.c:336 +#: locale/programs/charmap.c:337 #, c-format msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n" msgstr "%s: <mb_cur_max> musi byæ wiêkszy ni¿ <mb_cur_min>\n" -#: locale/programs/charmap.c:356 locale/programs/charmap.c:373 -#: locale/programs/repertoire.c:174 +#: locale/programs/charmap.c:357 locale/programs/charmap.c:374 +#: locale/programs/repertoire.c:175 #, c-format msgid "syntax error in prolog: %s" msgstr "b³±d sk³adni w prologu: %s" -#: locale/programs/charmap.c:357 +#: locale/programs/charmap.c:358 msgid "invalid definition" msgstr "niepoprawna definicja" -#: locale/programs/charmap.c:374 locale/programs/locfile.c:125 -#: locale/programs/locfile.c:152 locale/programs/repertoire.c:175 +#: locale/programs/charmap.c:375 locale/programs/locfile.c:126 +#: locale/programs/locfile.c:153 locale/programs/repertoire.c:176 msgid "bad argument" msgstr "b³êdny argument" -#: locale/programs/charmap.c:402 +#: locale/programs/charmap.c:403 #, c-format msgid "duplicate definition of <%s>" msgstr "powtórzona definicja <%s>" -#: locale/programs/charmap.c:409 +#: locale/programs/charmap.c:410 #, c-format msgid "value for <%s> must be 1 or greater" msgstr "warto¶æ <%s> musi wynosiæ 1 lub wiêcej" -#: locale/programs/charmap.c:421 +#: locale/programs/charmap.c:422 #, c-format msgid "value of <%s> must be greater or equal than the value of <%s>" msgstr "warto¶æ <%s> musi byæ wiêksza lub równa warto¶ci <%s>" -#: locale/programs/charmap.c:444 locale/programs/repertoire.c:183 +#: locale/programs/charmap.c:445 locale/programs/repertoire.c:184 #, c-format msgid "argument to <%s> must be a single character" msgstr "argument <%s> musi byæ pojedynczym znakiem" -#: locale/programs/charmap.c:470 +#: locale/programs/charmap.c:471 msgid "character sets with locking states are not supported" msgstr "zestawy znaków ze stanami blokowania nie s± obs³ugiwane" -#: 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 +#: locale/programs/charmap.c:498 locale/programs/charmap.c:552 +#: locale/programs/charmap.c:584 locale/programs/charmap.c:678 +#: locale/programs/charmap.c:733 locale/programs/charmap.c:774 +#: locale/programs/charmap.c:815 #, c-format msgid "syntax error in %s definition: %s" msgstr "b³±d sk³adni w definicji %s: %s" -#: locale/programs/charmap.c:498 locale/programs/charmap.c:678 -#: locale/programs/charmap.c:774 locale/programs/repertoire.c:230 +#: locale/programs/charmap.c:499 locale/programs/charmap.c:679 +#: locale/programs/charmap.c:775 locale/programs/repertoire.c:231 msgid "no symbolic name given" msgstr "brak nazwy symbolicznej" -#: locale/programs/charmap.c:552 +#: locale/programs/charmap.c:553 msgid "invalid encoding given" msgstr "niepoprawne kodowanie" -#: locale/programs/charmap.c:561 +#: locale/programs/charmap.c:562 msgid "too few bytes in character encoding" msgstr "za ma³o bajtów w kodzie znaku" -#: locale/programs/charmap.c:563 +#: locale/programs/charmap.c:564 msgid "too many bytes in character encoding" msgstr "za du¿o bajtów w kodzie znaku" -#: locale/programs/charmap.c:585 locale/programs/charmap.c:733 -#: locale/programs/charmap.c:816 locale/programs/repertoire.c:296 +#: locale/programs/charmap.c:586 locale/programs/charmap.c:734 +#: locale/programs/charmap.c:817 locale/programs/repertoire.c:297 msgid "no symbolic name given for end of range" msgstr "brak nazwy symbolicznej dla koñca przedzia³u" -#: locale/programs/charmap.c:609 locale/programs/locfile.c:818 -#: locale/programs/repertoire.c:313 +#: locale/programs/charmap.c:610 locale/programs/ld-address.c:600 +#: locale/programs/ld-collate.c:2677 locale/programs/ld-collate.c:3828 +#: locale/programs/ld-ctype.c:2232 locale/programs/ld-ctype.c:2984 +#: locale/programs/ld-identification.c:452 +#: locale/programs/ld-measurement.c:238 locale/programs/ld-messages.c:332 +#: locale/programs/ld-monetary.c:943 locale/programs/ld-name.c:307 +#: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:241 +#: locale/programs/ld-telephone.c:313 locale/programs/ld-time.c:1221 +#: locale/programs/repertoire.c:314 #, c-format -msgid "`%1$s' definition does not end with `END %1$s'" -msgstr "definicja `%1$s' musi koñczyæ siê wyra¿eniem `END %1$s'" +msgid "%1$s: definition does not end with `END %1$s'" +msgstr "%1$s: definicja nie koñczy siê przez `END %1$s'" -#: locale/programs/charmap.c:642 +#: locale/programs/charmap.c:643 msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" msgstr "po definicji CHARMAP mog± wystêpowaæ tylko definicje WIDTH" -#: locale/programs/charmap.c:650 locale/programs/charmap.c:713 +#: locale/programs/charmap.c:651 locale/programs/charmap.c:714 #, c-format msgid "value for %s must be an integer" msgstr "warto¶æ %s musi byæ liczb± ca³kowit±" # state machine = finite state machine = # automat skoñczony -PK -#: locale/programs/charmap.c:841 +#: locale/programs/charmap.c:842 #, c-format msgid "%s: error in state machine" msgstr "%s: b³±d w automacie skoñczonym" -#: locale/programs/charmap.c:849 locale/programs/ld-address.c:615 -#: locale/programs/ld-collate.c:2650 locale/programs/ld-collate.c:3820 -#: locale/programs/ld-ctype.c:2224 locale/programs/ld-ctype.c:2996 -#: locale/programs/ld-identification.c:467 -#: locale/programs/ld-measurement.c:253 locale/programs/ld-messages.c:347 -#: locale/programs/ld-monetary.c:956 locale/programs/ld-name.c:322 -#: locale/programs/ld-numeric.c:383 locale/programs/ld-paper.c:256 -#: locale/programs/ld-telephone.c:328 locale/programs/ld-time.c:1236 -#: locale/programs/locfile.c:825 locale/programs/repertoire.c:324 +#: locale/programs/charmap.c:850 locale/programs/ld-address.c:616 +#: locale/programs/ld-collate.c:2674 locale/programs/ld-collate.c:3844 +#: locale/programs/ld-ctype.c:2229 locale/programs/ld-ctype.c:3001 +#: locale/programs/ld-identification.c:468 +#: locale/programs/ld-measurement.c:254 locale/programs/ld-messages.c:348 +#: locale/programs/ld-monetary.c:959 locale/programs/ld-name.c:323 +#: locale/programs/ld-numeric.c:384 locale/programs/ld-paper.c:257 +#: locale/programs/ld-telephone.c:329 locale/programs/ld-time.c:1237 +#: locale/programs/locfile.c:826 locale/programs/repertoire.c:325 #, c-format msgid "%s: premature end of file" msgstr "%s: przedwczesny koniec pliku" -#: locale/programs/charmap.c:868 locale/programs/charmap.c:879 +#: locale/programs/charmap.c:869 locale/programs/charmap.c:880 #, c-format msgid "unknown character `%s'" msgstr "nieznany znak `%s'" -#: locale/programs/charmap.c:887 +#: locale/programs/charmap.c:888 #, c-format msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d" msgstr "liczba bajtów dla sekwencji bajtów pocz±tku i koñca przedzia³u jest ró¿na: %d i %d" -#: locale/programs/charmap.c:992 locale/programs/ld-collate.c:2933 -#: locale/programs/repertoire.c:419 +#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:2957 +#: locale/programs/repertoire.c:420 msgid "invalid names for character range" msgstr "nieprawid³owe nazwy dla przedzia³u znaków" -#: locale/programs/charmap.c:1004 locale/programs/repertoire.c:431 +#: locale/programs/charmap.c:1005 locale/programs/repertoire.c:432 msgid "hexadecimal range format should use only capital characters" msgstr "w szesnastkowym formacie przedzia³u powinny byæ u¿ywane wielkie litery" -#: locale/programs/charmap.c:1022 +#: locale/programs/charmap.c:1023 locale/programs/repertoire.c:450 #, c-format -msgid "<%s> and <%s> are illegal names for range" -msgstr "<%s> i <%s> nie s± poprawnymi nazwami dla przedzia³u" +msgid "<%s> and <%s> are invalid names for range" +msgstr "<%s> i <%s> s± niepoprawnymi nazwami dla przedzia³u" -#: locale/programs/charmap.c:1028 -msgid "upper limit in range is not higher then lower limit" -msgstr "górna granica przedzia³u nie jest wiêksza ni¿ dolna" +#: locale/programs/charmap.c:1029 locale/programs/repertoire.c:457 +msgid "upper limit in range is smaller than lower limit" +msgstr "górna granica przedzia³u nie jest mniejsza ni¿ dolna" -#: locale/programs/charmap.c:1086 +#: locale/programs/charmap.c:1087 msgid "resulting bytes for range not representable." msgstr "wynikowe bajty dla przedzia³u nie mog± zostaæ wyra¿one." -#: locale/programs/ld-address.c:132 locale/programs/ld-collate.c:1532 -#: locale/programs/ld-ctype.c:419 locale/programs/ld-identification.c:132 -#: locale/programs/ld-measurement.c:93 locale/programs/ld-messages.c:96 -#: locale/programs/ld-monetary.c:192 locale/programs/ld-name.c:93 -#: locale/programs/ld-numeric.c:97 locale/programs/ld-paper.c:90 -#: locale/programs/ld-telephone.c:93 locale/programs/ld-time.c:158 +#: locale/programs/ld-address.c:133 locale/programs/ld-collate.c:1536 +#: locale/programs/ld-ctype.c:420 locale/programs/ld-identification.c:133 +#: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97 +#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:94 +#: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91 +#: locale/programs/ld-telephone.c:94 locale/programs/ld-time.c:159 #, c-format msgid "No definition for %s category found" msgstr "Nie znaleziono definicji dla kategorii %s" -#: locale/programs/ld-address.c:143 locale/programs/ld-address.c:181 -#: locale/programs/ld-address.c:199 locale/programs/ld-address.c:228 -#: locale/programs/ld-address.c:300 locale/programs/ld-address.c:319 -#: locale/programs/ld-address.c:332 locale/programs/ld-identification.c:145 -#: locale/programs/ld-measurement.c:104 locale/programs/ld-monetary.c:204 -#: locale/programs/ld-monetary.c:248 locale/programs/ld-monetary.c:264 -#: locale/programs/ld-monetary.c:276 locale/programs/ld-name.c:104 -#: locale/programs/ld-name.c:141 locale/programs/ld-numeric.c:111 -#: locale/programs/ld-numeric.c:125 locale/programs/ld-paper.c:101 -#: locale/programs/ld-paper.c:110 locale/programs/ld-telephone.c:104 -#: locale/programs/ld-telephone.c:161 locale/programs/ld-time.c:174 -#: locale/programs/ld-time.c:195 +#: locale/programs/ld-address.c:144 locale/programs/ld-address.c:182 +#: locale/programs/ld-address.c:200 locale/programs/ld-address.c:229 +#: locale/programs/ld-address.c:301 locale/programs/ld-address.c:320 +#: locale/programs/ld-address.c:333 locale/programs/ld-identification.c:146 +#: locale/programs/ld-measurement.c:105 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:105 +#: locale/programs/ld-name.c:142 locale/programs/ld-numeric.c:112 +#: locale/programs/ld-numeric.c:126 locale/programs/ld-paper.c:102 +#: locale/programs/ld-paper.c:111 locale/programs/ld-telephone.c:105 +#: locale/programs/ld-telephone.c:162 locale/programs/ld-time.c:175 +#: locale/programs/ld-time.c:196 #, c-format msgid "%s: field `%s' not defined" msgstr "%s: pole `%s' nie jest zdefiniowane" -#: locale/programs/ld-address.c:155 locale/programs/ld-address.c:207 -#: locale/programs/ld-address.c:237 locale/programs/ld-address.c:275 -#: locale/programs/ld-name.c:116 locale/programs/ld-telephone.c:116 +#: locale/programs/ld-address.c:156 locale/programs/ld-address.c:208 +#: locale/programs/ld-address.c:238 locale/programs/ld-address.c:276 +#: locale/programs/ld-name.c:117 locale/programs/ld-telephone.c:117 #, c-format msgid "%s: field `%s' must not be empty" msgstr "%s: pole `%s' nie mo¿e byæ puste" -#: locale/programs/ld-address.c:167 +#: locale/programs/ld-address.c:168 #, c-format msgid "%s: invalid escape `%%%c' sequence in field `%s'" msgstr "%s: niepoprawna sekwencja escape `%%%c' w polu `%s'" -#: locale/programs/ld-address.c:218 +#: locale/programs/ld-address.c:219 #, c-format msgid "%s: terminology language code `%s' not defined" msgstr "%s: kod jêzyka terminologii `%s' nie jest zdefiniowany" -#: locale/programs/ld-address.c:243 +#: locale/programs/ld-address.c:244 #, c-format msgid "%s: field `%s' must not be defined" msgstr "%s: pole `%s' nie mo¿e byæ zdefiniowane" -#: locale/programs/ld-address.c:257 locale/programs/ld-address.c:286 +#: locale/programs/ld-address.c:258 locale/programs/ld-address.c:287 #, c-format msgid "%s: language abbreviation `%s' not defined" msgstr "%s: skrót jêzyka `%s' nie jest zdefiniowany" -#: locale/programs/ld-address.c:264 locale/programs/ld-address.c:292 -#: locale/programs/ld-address.c:326 locale/programs/ld-address.c:338 +#: locale/programs/ld-address.c:265 locale/programs/ld-address.c:293 +#: locale/programs/ld-address.c:327 locale/programs/ld-address.c:339 #, c-format msgid "%s: `%s' value does not match `%s' value" msgstr "%s: warto¶æ `%s' nie pasuje do warto¶ci `%s'" -#: locale/programs/ld-address.c:311 +#: locale/programs/ld-address.c:312 #, c-format msgid "%s: numeric country code `%d' not valid" msgstr "%s: liczbowy kod kraju `%d' jest niepoprawny" -#: locale/programs/ld-address.c:507 locale/programs/ld-address.c:544 -#: locale/programs/ld-address.c:582 locale/programs/ld-ctype.c:2603 -#: locale/programs/ld-identification.c:363 -#: locale/programs/ld-measurement.c:220 locale/programs/ld-messages.c:300 -#: locale/programs/ld-monetary.c:698 locale/programs/ld-monetary.c:733 -#: locale/programs/ld-monetary.c:774 locale/programs/ld-name.c:279 -#: locale/programs/ld-numeric.c:262 locale/programs/ld-paper.c:223 -#: locale/programs/ld-telephone.c:287 locale/programs/ld-time.c:1125 -#: locale/programs/ld-time.c:1167 +#: locale/programs/ld-address.c:508 locale/programs/ld-address.c:545 +#: locale/programs/ld-address.c:583 locale/programs/ld-ctype.c:2608 +#: locale/programs/ld-identification.c:364 +#: locale/programs/ld-measurement.c:221 locale/programs/ld-messages.c:301 +#: locale/programs/ld-monetary.c:701 locale/programs/ld-monetary.c:736 +#: locale/programs/ld-monetary.c:777 locale/programs/ld-name.c:280 +#: locale/programs/ld-numeric.c:263 locale/programs/ld-paper.c:224 +#: locale/programs/ld-telephone.c:288 locale/programs/ld-time.c:1126 +#: locale/programs/ld-time.c:1168 #, c-format msgid "%s: field `%s' declared more than once" msgstr "%s: pole `%s' zadeklarowane wiêcej ni¿ raz" -#: locale/programs/ld-address.c:511 locale/programs/ld-address.c:549 -#: locale/programs/ld-identification.c:367 locale/programs/ld-messages.c:310 -#: locale/programs/ld-monetary.c:702 locale/programs/ld-monetary.c:737 -#: locale/programs/ld-name.c:283 locale/programs/ld-numeric.c:266 -#: locale/programs/ld-telephone.c:291 locale/programs/ld-time.c:1019 -#: locale/programs/ld-time.c:1088 locale/programs/ld-time.c:1130 +#: locale/programs/ld-address.c:512 locale/programs/ld-address.c:550 +#: locale/programs/ld-identification.c:368 locale/programs/ld-messages.c:311 +#: locale/programs/ld-monetary.c:705 locale/programs/ld-monetary.c:740 +#: locale/programs/ld-name.c:284 locale/programs/ld-numeric.c:267 +#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:1020 +#: locale/programs/ld-time.c:1089 locale/programs/ld-time.c:1131 #, c-format msgid "%s: unknown character in field `%s'" msgstr "%s: nieznany znak w polu `%s'" -#: locale/programs/ld-address.c:596 locale/programs/ld-collate.c:3802 -#: locale/programs/ld-ctype.c:2976 locale/programs/ld-identification.c:448 -#: locale/programs/ld-measurement.c:234 locale/programs/ld-messages.c:329 -#: locale/programs/ld-monetary.c:938 locale/programs/ld-name.c:304 -#: locale/programs/ld-numeric.c:365 locale/programs/ld-paper.c:238 -#: locale/programs/ld-telephone.c:310 locale/programs/ld-time.c:1218 +#: locale/programs/ld-address.c:597 locale/programs/ld-collate.c:3826 +#: locale/programs/ld-ctype.c:2981 locale/programs/ld-identification.c:449 +#: locale/programs/ld-measurement.c:235 locale/programs/ld-messages.c:330 +#: locale/programs/ld-monetary.c:941 locale/programs/ld-name.c:305 +#: locale/programs/ld-numeric.c:366 locale/programs/ld-paper.c:239 +#: locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1219 #, c-format msgid "%s: incomplete `END' line" msgstr "%s: niekompletna linia `END'" -#: locale/programs/ld-address.c:599 locale/programs/ld-collate.c:2653 -#: locale/programs/ld-collate.c:3804 locale/programs/ld-ctype.c:2227 -#: locale/programs/ld-ctype.c:2979 locale/programs/ld-identification.c:451 -#: locale/programs/ld-measurement.c:237 locale/programs/ld-messages.c:331 -#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:306 -#: locale/programs/ld-numeric.c:367 locale/programs/ld-paper.c:240 -#: locale/programs/ld-telephone.c:312 locale/programs/ld-time.c:1220 -#, c-format -msgid "%1$s: definition does not end with `END %1$s'" -msgstr "%1$s: definicja nie koñczy siê przez `END %1$s'" - -#: locale/programs/ld-address.c:606 locale/programs/ld-collate.c:521 -#: locale/programs/ld-collate.c:573 locale/programs/ld-collate.c:869 -#: locale/programs/ld-collate.c:882 locale/programs/ld-collate.c:2640 -#: locale/programs/ld-collate.c:3811 locale/programs/ld-ctype.c:1955 -#: locale/programs/ld-ctype.c:2214 locale/programs/ld-ctype.c:2801 -#: locale/programs/ld-ctype.c:2987 locale/programs/ld-identification.c:458 -#: locale/programs/ld-measurement.c:244 locale/programs/ld-messages.c:338 -#: locale/programs/ld-monetary.c:947 locale/programs/ld-name.c:313 -#: locale/programs/ld-numeric.c:374 locale/programs/ld-paper.c:247 -#: locale/programs/ld-telephone.c:319 locale/programs/ld-time.c:1227 +#: locale/programs/ld-address.c:607 locale/programs/ld-collate.c:522 +#: locale/programs/ld-collate.c:574 locale/programs/ld-collate.c:870 +#: locale/programs/ld-collate.c:883 locale/programs/ld-collate.c:2664 +#: locale/programs/ld-collate.c:3835 locale/programs/ld-ctype.c:1960 +#: locale/programs/ld-ctype.c:2219 locale/programs/ld-ctype.c:2806 +#: locale/programs/ld-ctype.c:2992 locale/programs/ld-identification.c:459 +#: locale/programs/ld-measurement.c:245 locale/programs/ld-messages.c:339 +#: locale/programs/ld-monetary.c:950 locale/programs/ld-name.c:314 +#: locale/programs/ld-numeric.c:375 locale/programs/ld-paper.c:248 +#: locale/programs/ld-telephone.c:320 locale/programs/ld-time.c:1228 #, c-format msgid "%s: syntax error" msgstr "%s: b³±d sk³adni" -#: locale/programs/ld-collate.c:396 +#: locale/programs/ld-collate.c:397 #, c-format msgid "`%.*s' already defined in charmap" msgstr "`%.*s' ju¿ zdefiniowany w tablicy znaków" -#: locale/programs/ld-collate.c:405 +#: locale/programs/ld-collate.c:406 #, c-format msgid "`%.*s' already defined in repertoire" msgstr "`%.*s' ju¿ zdefiniowany w repertuarze" -#: locale/programs/ld-collate.c:412 +#: locale/programs/ld-collate.c:413 #, c-format msgid "`%.*s' already defined as collating symbol" msgstr "`%.*s' ju¿ zdefiniowany jako symbol scalaj±cy" -#: locale/programs/ld-collate.c:419 +#: locale/programs/ld-collate.c:420 #, c-format msgid "`%.*s' already defined as collating element" msgstr "`%.*s' ju¿ zdefiniowany jako element scalaj±cy" -#: locale/programs/ld-collate.c:450 locale/programs/ld-collate.c:476 +#: locale/programs/ld-collate.c:451 locale/programs/ld-collate.c:477 #, c-format msgid "%s: `forward' and `backward' are mutually excluding each other" msgstr "%s: porz±dki `forward' i `backward' wykluczaj± siê wzajemnie" -#: locale/programs/ld-collate.c:460 locale/programs/ld-collate.c:486 -#: locale/programs/ld-collate.c:502 +#: locale/programs/ld-collate.c:461 locale/programs/ld-collate.c:487 +#: locale/programs/ld-collate.c:503 #, c-format msgid "%s: `%s' mentioned more than once in definition of weight %d" msgstr "%s: `%s' wyst±pi³o wiêcej ni¿ raz w definicji wagi %d" -#: locale/programs/ld-collate.c:558 +#: locale/programs/ld-collate.c:559 #, c-format msgid "%s: too many rules; first entry only had %d" msgstr "%s: zbyt du¿o regu³; pierwszy wpis mia³ tylko %d" -#: locale/programs/ld-collate.c:594 +#: locale/programs/ld-collate.c:595 #, c-format msgid "%s: not enough sorting rules" msgstr "%s: za ma³o regu³ sortowania" -#: locale/programs/ld-collate.c:759 +#: locale/programs/ld-collate.c:760 #, c-format msgid "%s: empty weight string not allowed" msgstr "%s: pusty ³añcuch wagi jest niedozwolony" # ellipsis = wyrzutnia jezykowa - sprawdzilem. nawet pamietam ze cos takiego # istnieje ze szkoly, ale za cholere nie pamietam co to jest ;) -PK -#: locale/programs/ld-collate.c:854 +#: locale/programs/ld-collate.c:855 #, c-format msgid "%s: weights must use the same ellipsis symbol as the name" msgstr "%s: wagi musz± u¿ywaæ jako nazwy tego samego symbolu wyrzutni" -#: locale/programs/ld-collate.c:910 +#: locale/programs/ld-collate.c:911 #, c-format msgid "%s: too many values" msgstr "%s: zbyt du¿o warto¶ci" -#: locale/programs/ld-collate.c:1029 locale/programs/ld-collate.c:1204 +#: locale/programs/ld-collate.c:1031 locale/programs/ld-collate.c:1206 #, c-format msgid "order for `%.*s' already defined at %s:%Zu" msgstr "porz±dek dla `%.*s' zosta³ ju¿ zdefiniowany w %s:%Zu" -#: locale/programs/ld-collate.c:1079 +#: 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: pocz±tkowy i koñcowy symbol przedzia³u musz± byæ znakami" -#: locale/programs/ld-collate.c:1106 +#: locale/programs/ld-collate.c:1108 #, c-format msgid "%s: byte sequences of first and last character must have the same length" msgstr "%s: sekwencje bajtów pierwszego i ostatniego znaku musz± mieæ tê sam± d³ugo¶æ" -#: locale/programs/ld-collate.c:1148 +#: 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: sekwencja bajtów pierwszego znaku sekwencji nie jest mniejsza ni¿ ostatniego znaku" +msgid "%s: byte sequence of first character of range is not lower than that of the last character" +msgstr "%s: sekwencja bajtów pierwszego znaku przedzia³u nie jest mniejsza ni¿ sekwencja ostatniego znaku" -#: locale/programs/ld-collate.c:1273 +#: locale/programs/ld-collate.c:1275 #, c-format msgid "%s: symbolic range ellipsis must not directly follow `order_start'" msgstr "%s: wyrzutnia symbolicznego przedzia³u nie mo¿e byæ bezpo¶rednio po `order_start'" -#: locale/programs/ld-collate.c:1277 +#: locale/programs/ld-collate.c:1279 #, c-format msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'" msgstr "%s: wyrzutnia symbolicznego przedzia³u nie mo¿e byæ bezpo¶rednio przed `order_end'" -#: locale/programs/ld-collate.c:1297 locale/programs/ld-ctype.c:1475 +#: locale/programs/ld-collate.c:1299 locale/programs/ld-ctype.c:1477 #, c-format msgid "`%s' and `%.*s' are not valid names for symbolic range" msgstr "`%s' i `%.*s' nie s± poprawnymi nazwami dla symbolicznego przedzia³u" -#: locale/programs/ld-collate.c:1346 locale/programs/ld-collate.c:3739 +#: locale/programs/ld-collate.c:1349 locale/programs/ld-collate.c:3763 #, c-format msgid "%s: order for `%.*s' already defined at %s:%Zu" msgstr "%s: porz±dek dla `%.*s' zosta³ ju¿ zdefiniowany w %s:%Zu" -#: locale/programs/ld-collate.c:1355 +#: locale/programs/ld-collate.c:1358 #, c-format msgid "%s: `%s' must be a character" msgstr "%s: `%s' musi byæ znakiem" -#: locale/programs/ld-collate.c:1548 +#: locale/programs/ld-collate.c:1552 #, c-format msgid "%s: `position' must be used for a specific level in all sections or none" msgstr "%s: `position' musi byæ u¿yte dla konkretnego poziomu we wszystkich sekcjach lub ¿adnej" -#: locale/programs/ld-collate.c:1573 +#: locale/programs/ld-collate.c:1577 #, c-format msgid "symbol `%s' not defined" msgstr "nie zdefiniowany symbol `%s'" -#: locale/programs/ld-collate.c:1649 locale/programs/ld-collate.c:1755 +#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759 #, c-format msgid "symbol `%s' has the same encoding as" msgstr "symbol `%s' ma to samo kodowanie co" -#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759 +#: locale/programs/ld-collate.c:1657 locale/programs/ld-collate.c:1763 #, c-format msgid "symbol `%s'" msgstr "symbol `%s'" -#: locale/programs/ld-collate.c:1801 +#: locale/programs/ld-collate.c:1805 #, c-format msgid "no definition of `UNDEFINED'" msgstr "brak definicji `UNDEFINED'" -#: locale/programs/ld-collate.c:1830 +#: locale/programs/ld-collate.c:1834 #, c-format msgid "too many errors; giving up" msgstr "zbyt du¿o b³êdów; poddajê siê" -#: locale/programs/ld-collate.c:2738 +#: locale/programs/ld-collate.c:2762 #, c-format msgid "%s: duplicate definition of `%s'" msgstr "%s: powtórzona definicja `%s'" -#: locale/programs/ld-collate.c:2774 +#: locale/programs/ld-collate.c:2798 #, c-format msgid "%s: duplicate declaration of section `%s'" msgstr "%s: powtórzona deklaracja sekcji `%s'" -#: locale/programs/ld-collate.c:2913 +#: locale/programs/ld-collate.c:2937 #, c-format msgid "%s: unknown character in collating symbol name" msgstr "%s: nieznany znak w nazwie symbolu scalaj±cego" -#: locale/programs/ld-collate.c:3045 +#: locale/programs/ld-collate.c:3069 #, c-format msgid "%s: unknown character in equivalent definition name" msgstr "%s: nieznany znak w nazwie definicji równowa¿no¶ci" -#: locale/programs/ld-collate.c:3058 +#: locale/programs/ld-collate.c:3082 #, c-format msgid "%s: unknown character in equivalent definition value" msgstr "%s: nieznany znak w warto¶ci definicji równowa¿no¶ci" -#: locale/programs/ld-collate.c:3068 +#: locale/programs/ld-collate.c:3092 #, c-format msgid "%s: unknown symbol `%s' in equivalent definition" msgstr "%s: nieznany symbol `%s' w definicji równowa¿no¶ci" -#: locale/programs/ld-collate.c:3077 +#: locale/programs/ld-collate.c:3101 msgid "error while adding equivalent collating symbol" msgstr "b³±d podczas dodawania równowa¿nego symbolu scalaj±cego" -#: locale/programs/ld-collate.c:3107 +#: locale/programs/ld-collate.c:3131 #, c-format msgid "duplicate definition of script `%s'" msgstr "powtórzona definicja skryptu `%s'" -#: locale/programs/ld-collate.c:3155 +#: locale/programs/ld-collate.c:3179 #, c-format -msgid "%s: unknown section name `%s'" -msgstr "%s: nieznana nazwa sekcji `%s'" +msgid "%s: unknown section name `%.*s'" +msgstr "%s: nieznana nazwa sekcji `%.*s'" -#: locale/programs/ld-collate.c:3183 +#: locale/programs/ld-collate.c:3208 #, c-format msgid "%s: multiple order definitions for section `%s'" msgstr "%s: wielokrotna definicja porz±dku dla sekcji `%s'" -#: locale/programs/ld-collate.c:3208 +#: locale/programs/ld-collate.c:3233 #, c-format msgid "%s: invalid number of sorting rules" msgstr "%s: b³êdna liczba regu³ sortowania" -#: locale/programs/ld-collate.c:3235 +#: locale/programs/ld-collate.c:3260 #, c-format msgid "%s: multiple order definitions for unnamed section" msgstr "%s: wielokrotna definicja porz±dku dla nie nazwanej sekcji" -#: locale/programs/ld-collate.c:3289 locale/programs/ld-collate.c:3417 -#: locale/programs/ld-collate.c:3780 +#: locale/programs/ld-collate.c:3314 locale/programs/ld-collate.c:3442 +#: locale/programs/ld-collate.c:3804 #, c-format msgid "%s: missing `order_end' keyword" msgstr "%s: brak s³owa kluczowego `order_end'" -#: locale/programs/ld-collate.c:3350 +#: locale/programs/ld-collate.c:3375 #, c-format msgid "%s: order for collating symbol %.*s not yet defined" msgstr "%s: porz±dek dla symbolu scalaj±cego %.*s jeszcze nie zdefiniowany" -#: locale/programs/ld-collate.c:3368 +#: locale/programs/ld-collate.c:3393 #, c-format msgid "%s: order for collating element %.*s not yet defined" msgstr "%s: porz±dek dla elementu scalaj±cego %.*s jeszcze nie zdefiniowany" -#: locale/programs/ld-collate.c:3379 +#: locale/programs/ld-collate.c:3404 #, c-format msgid "%s: cannot reorder after %.*s: symbol not known" msgstr "%s: nie mo¿na zmieniæ porz±dku po %.*s: nieznany symbol" -#: locale/programs/ld-collate.c:3431 locale/programs/ld-collate.c:3792 +#: locale/programs/ld-collate.c:3456 locale/programs/ld-collate.c:3816 #, c-format msgid "%s: missing `reorder-end' keyword" msgstr "%s: brak s³owa kluczowego `reorder-end'" -#: locale/programs/ld-collate.c:3465 locale/programs/ld-collate.c:3664 +#: locale/programs/ld-collate.c:3490 locale/programs/ld-collate.c:3688 #, c-format msgid "%s: section `%.*s' not known" msgstr "%s: nieznana sekcja `%.*s'" -#: locale/programs/ld-collate.c:3530 +#: locale/programs/ld-collate.c:3555 #, c-format msgid "%s: bad symbol <%.*s>" msgstr "%s: b³êdny symbol <%.*s>" -#: locale/programs/ld-collate.c:3727 +#: locale/programs/ld-collate.c:3751 #, c-format msgid "%s: cannot have `%s' as end of ellipsis range" msgstr "%s: nie mo¿na u¿yæ `%s' jako koñca przedzia³u wyrzutni" -#: locale/programs/ld-collate.c:3776 +#: locale/programs/ld-collate.c:3800 #, c-format msgid "%s: empty category description not allowed" msgstr "%s: pusty opis kategorii niedozwolony" -#: locale/programs/ld-collate.c:3795 +#: locale/programs/ld-collate.c:3819 #, c-format msgid "%s: missing `reorder-sections-end' keyword" msgstr "%s: brak s³owa kluczowego `reorder-sections-end'" -#: locale/programs/ld-ctype.c:438 +#: locale/programs/ld-ctype.c:439 #, c-format msgid "No character set name specified in charmap" msgstr "Brak nazwy zestawu znaków w tablicy znaków" -#: locale/programs/ld-ctype.c:467 +#: locale/programs/ld-ctype.c:468 #, c-format msgid "character L'\\u%0*x' in class `%s' must be in class `%s'" msgstr "znak L'\\u%0*x' z klasy `%s' musi byæ w klasie `%s'" -#: locale/programs/ld-ctype.c:482 +#: locale/programs/ld-ctype.c:483 #, c-format msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'" msgstr "znak L'\\u%0*x' z klasy `%s' nie mo¿e byæ w klasie `%s'" -#: locale/programs/ld-ctype.c:496 locale/programs/ld-ctype.c:554 +#: locale/programs/ld-ctype.c:497 locale/programs/ld-ctype.c:555 #, c-format msgid "internal error in %s, line %u" msgstr "b³±d wewnêtrzny w %s, linia %u" -#: locale/programs/ld-ctype.c:525 +#: locale/programs/ld-ctype.c:526 #, c-format msgid "character '%s' in class `%s' must be in class `%s'" msgstr "znak '%s' z klasy `%s' musi byæ w klasie `%s'" -#: locale/programs/ld-ctype.c:541 +#: locale/programs/ld-ctype.c:542 #, c-format msgid "character '%s' in class `%s' must not be in class `%s'" msgstr "znak '%s' z klasy `%s' nie mo¿e byæ w klasie `%s'" -#: locale/programs/ld-ctype.c:571 locale/programs/ld-ctype.c:609 +#: locale/programs/ld-ctype.c:572 locale/programs/ld-ctype.c:610 #, c-format msgid "<SP> character not in class `%s'" msgstr "znak <SP> nie jest w klasie `%s'" -#: locale/programs/ld-ctype.c:583 locale/programs/ld-ctype.c:620 +#: locale/programs/ld-ctype.c:584 locale/programs/ld-ctype.c:621 #, c-format msgid "<SP> character must not be in class `%s'" msgstr "znak <SP> nie mo¿e byæ w klasie `%s'" -#: locale/programs/ld-ctype.c:598 +#: locale/programs/ld-ctype.c:599 #, c-format msgid "character <SP> not defined in character map" msgstr "znak <SP> nie zdefiniowany w tablicy znaków" -#: locale/programs/ld-ctype.c:712 +#: locale/programs/ld-ctype.c:714 #, c-format msgid "`digit' category has not entries in groups of ten" msgstr "kategoria `digit' nie ma wpisów w grupach po dziesiêæ" -#: locale/programs/ld-ctype.c:761 +#: locale/programs/ld-ctype.c:763 #, c-format msgid "no input digits defined and none of the standard names in the charmap" msgstr "brak cyfr wej¶ciowych ani ¿adnej ze standardowych nazw w tablicy znaków" -#: locale/programs/ld-ctype.c:826 +#: locale/programs/ld-ctype.c:828 #, c-format msgid "not all characters used in `outdigit' are available in the charmap" msgstr "nie wszystkie znaki u¿yte w `outdigit' s± dostêpne w tablicy znaków" -#: locale/programs/ld-ctype.c:843 +#: locale/programs/ld-ctype.c:845 #, c-format msgid "not all characters used in `outdigit' are available in the repertoire" msgstr "nie wszystkie znaki u¿yte w `outdigit' s± dostêpne w repertuarze" -#: locale/programs/ld-ctype.c:1243 +#: locale/programs/ld-ctype.c:1245 #, c-format msgid "character class `%s' already defined" msgstr "klasa znaków `%s' jest ju¿ zdefiniowana" -#: locale/programs/ld-ctype.c:1249 +#: locale/programs/ld-ctype.c:1251 #, c-format msgid "implementation limit: no more than %Zd character classes allowed" msgstr "ograniczenie implementacji: dozwolone maksymalnie %Zd klas znaków" -#: locale/programs/ld-ctype.c:1275 +#: locale/programs/ld-ctype.c:1277 #, c-format msgid "character map `%s' already defined" msgstr "tablica znaków `%s' jest ju¿ zdefiniowana" -#: locale/programs/ld-ctype.c:1281 +#: locale/programs/ld-ctype.c:1283 #, c-format msgid "implementation limit: no more than %d character maps allowed" msgstr "ograniczenie implementacji: dozwolone maksymalnie %d tablic znaków" -#: locale/programs/ld-ctype.c:1546 locale/programs/ld-ctype.c:1671 -#: locale/programs/ld-ctype.c:1777 locale/programs/ld-ctype.c:2466 -#: locale/programs/ld-ctype.c:3462 +#: locale/programs/ld-ctype.c:1548 locale/programs/ld-ctype.c:1673 +#: locale/programs/ld-ctype.c:1779 locale/programs/ld-ctype.c:2471 +#: locale/programs/ld-ctype.c:3467 #, c-format msgid "%s: field `%s' does not contain exactly ten entries" msgstr "%s: pole `%s' nie zawiera dok³adnie dziesiêciu elementów" -#: locale/programs/ld-ctype.c:1574 locale/programs/ld-ctype.c:2145 +#: locale/programs/ld-ctype.c:1576 locale/programs/ld-ctype.c:2150 #, c-format msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>" msgstr "warto¶æ-do <U%0*X> przedzia³u jest mniejsza ni¿ warto¶æ-od <U%0*X>" -#: locale/programs/ld-ctype.c:1701 +#: locale/programs/ld-ctype.c:1703 msgid "start and end character sequence of range must have the same length" msgstr "pocz±tkowa i koñcowa sekwencja znaków przedzia³u musz± mieæ tê sam± d³ugo¶æ" -#: locale/programs/ld-ctype.c:1708 +#: locale/programs/ld-ctype.c:1710 msgid "to-value character sequence is smaller than from-value sequence" msgstr "sekwencja znaków warto¶æ-do jest mniejsza ni¿ sekwencja warto¶æ-od" -#: locale/programs/ld-ctype.c:2065 locale/programs/ld-ctype.c:2116 +#: locale/programs/ld-ctype.c:2070 locale/programs/ld-ctype.c:2121 msgid "premature end of `translit_ignore' definition" msgstr "przedwczesny koniec definicji `translit_ignore'" -#: locale/programs/ld-ctype.c:2071 locale/programs/ld-ctype.c:2122 -#: locale/programs/ld-ctype.c:2164 +#: locale/programs/ld-ctype.c:2076 locale/programs/ld-ctype.c:2127 +#: locale/programs/ld-ctype.c:2169 msgid "syntax error" msgstr "b³±d sk³adni" -#: locale/programs/ld-ctype.c:2298 +#: locale/programs/ld-ctype.c:2303 #, c-format msgid "%s: syntax error in definition of new character class" msgstr "%s: b³±d sk³adni w definicji nowej klasy znaków" -#: locale/programs/ld-ctype.c:2313 +#: locale/programs/ld-ctype.c:2318 #, c-format msgid "%s: syntax error in definition of new character map" msgstr "%s: b³±d sk³adni w definicji nowej tablicy znaków" -#: locale/programs/ld-ctype.c:2488 +#: locale/programs/ld-ctype.c:2493 msgid "ellipsis range must be marked by two operands of same type" msgstr "przedzia³ wyrzutni musi byæ oznaczony dwoma argumentami tego samego typu" -#: locale/programs/ld-ctype.c:2497 +#: locale/programs/ld-ctype.c:2502 msgid "with symbolic name range values the absolute ellipsis `...' must not be used" msgstr "dla warto¶ci przedzia³u bêd±cych nazwami nie mo¿na u¿yæ bezwzglêdnej wyrzutni `...'" -#: locale/programs/ld-ctype.c:2512 +#: locale/programs/ld-ctype.c:2517 msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'" msgstr "dla warto¶ci przedzia³u w kodzie UCS trzeba u¿yæ wyrzutni szesnastkowej `..'" -#: locale/programs/ld-ctype.c:2526 +#: locale/programs/ld-ctype.c:2531 msgid "with character code range values one must use the absolute ellipsis `...'" msgstr "dla warto¶ci przedzia³u z kodami znaków trzeba u¿yæ bezwzglêdnej wyrzutni `...'" -#: locale/programs/ld-ctype.c:2677 +#: locale/programs/ld-ctype.c:2682 #, c-format msgid "duplicated definition for mapping `%s'" msgstr "powtórzona definicja odwzorowania `%s'" -#: locale/programs/ld-ctype.c:2763 locale/programs/ld-ctype.c:2907 +#: locale/programs/ld-ctype.c:2768 locale/programs/ld-ctype.c:2912 #, c-format msgid "%s: `translit_start' section does not end with `translit_end'" msgstr "%s: sekcja `translit_start' nie koñczy siê przez `translit_end'" -#: locale/programs/ld-ctype.c:2858 +#: locale/programs/ld-ctype.c:2863 #, c-format msgid "%s: duplicate `default_missing' definition" msgstr "%s: powtórzona definicja `default_missing'" -#: locale/programs/ld-ctype.c:2863 +#: locale/programs/ld-ctype.c:2868 msgid "previous definition was here" msgstr "tutaj by³a poprzednia definicja" -#: locale/programs/ld-ctype.c:2885 +#: locale/programs/ld-ctype.c:2890 #, c-format msgid "%s: no representable `default_missing' definition found" msgstr "%s: nie znaleziono daj±cej siê wyraziæ definicji `default_missing'" -#: locale/programs/ld-ctype.c:3038 -#, c-format -msgid "%s: character `%s' not defined in charmap while needed as default value" -msgstr "%s: znak `%s', wymagany jako domy¶lny, nie zosta³ zdefiniowany w tablicy znaków" - #: locale/programs/ld-ctype.c:3043 locale/programs/ld-ctype.c:3127 #: locale/programs/ld-ctype.c:3147 locale/programs/ld-ctype.c:3168 #: locale/programs/ld-ctype.c:3189 locale/programs/ld-ctype.c:3210 #: locale/programs/ld-ctype.c:3231 locale/programs/ld-ctype.c:3271 #: locale/programs/ld-ctype.c:3292 locale/programs/ld-ctype.c:3359 -#, c-format -msgid "%s: character `%s' in charmap not representable with one byte" -msgstr "%s: znak `%s' z tablicy znaków nie mo¿e byæ wyra¿ony w jednym bajcie" - -#: locale/programs/ld-ctype.c:3122 locale/programs/ld-ctype.c:3142 -#: locale/programs/ld-ctype.c:3184 locale/programs/ld-ctype.c:3205 -#: locale/programs/ld-ctype.c:3226 locale/programs/ld-ctype.c:3266 -#: locale/programs/ld-ctype.c:3287 locale/programs/ld-ctype.c:3354 -#: locale/programs/ld-ctype.c:3396 locale/programs/ld-ctype.c:3421 +#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426 #, c-format msgid "%s: character `%s' not defined while needed as default value" msgstr "%s: znak `%s', wymagany jako domy¶lny, nie zosta³ zdefiniowany" -#: locale/programs/ld-ctype.c:3163 +#: locale/programs/ld-ctype.c:3048 locale/programs/ld-ctype.c:3132 +#: locale/programs/ld-ctype.c:3152 locale/programs/ld-ctype.c:3173 +#: locale/programs/ld-ctype.c:3194 locale/programs/ld-ctype.c:3215 +#: locale/programs/ld-ctype.c:3236 locale/programs/ld-ctype.c:3276 +#: locale/programs/ld-ctype.c:3297 locale/programs/ld-ctype.c:3364 #, c-format -msgid "character `%s' not defined while needed as default value" -msgstr "znak `%s', wymagany jako domy¶lny, nie zosta³ zdefiniowany" +msgid "%s: character `%s' in charmap not representable with one byte" +msgstr "%s: znak `%s' z tablicy znaków nie mo¿e byæ wyra¿ony w jednym bajcie" -#: locale/programs/ld-ctype.c:3403 locale/programs/ld-ctype.c:3428 +#: locale/programs/ld-ctype.c:3408 locale/programs/ld-ctype.c:3433 #, c-format msgid "%s: character `%s' needed as default value not representable with one byte" msgstr "%s: znak `%s', wymagany jako domy¶lny, nie mo¿e byæ wyra¿ony w jednym bajcie" -#: locale/programs/ld-ctype.c:3483 +#: locale/programs/ld-ctype.c:3489 #, c-format msgid "no output digits defined and none of the standard names in the charmap" msgstr "brak definicji cyfr wyj¶ciowych ani ¿adnej standardowej nazwy w tablicy znaków" -#: locale/programs/ld-ctype.c:3774 +#: locale/programs/ld-ctype.c:3780 #, c-format msgid "%s: transliteration data from locale `%s' not available" msgstr "%s: dane do transliteracji z lokalizacji `%s' niedostêpne" -#: locale/programs/ld-ctype.c:3875 +#: locale/programs/ld-ctype.c:3881 #, c-format msgid "%s: table for class \"%s\": %lu bytes\n" msgstr "%s: tablica dla klasy \"%s\": %lu bajtów\n" -#: locale/programs/ld-ctype.c:3944 +#: locale/programs/ld-ctype.c:3950 #, c-format msgid "%s: table for map \"%s\": %lu bytes\n" msgstr "%s: tablica dla odwzorowania \"%s\": %lu bajtów\n" -#: locale/programs/ld-ctype.c:4077 +#: locale/programs/ld-ctype.c:4083 #, c-format msgid "%s: table for width: %lu bytes\n" msgstr "%s: tablica dla szeroko¶ci: %lu bajtów\n" -#: locale/programs/ld-identification.c:169 +#: locale/programs/ld-identification.c:170 #, c-format msgid "%s: no identification for category `%s'" msgstr "%s: brak identyfikacji dla kategorii `%s'" -#: locale/programs/ld-identification.c:434 +#: locale/programs/ld-identification.c:435 #, c-format msgid "%s: duplicate category version definition" msgstr "%s: powtórzona definicja wersji kategorii" -#: locale/programs/ld-measurement.c:112 +#: locale/programs/ld-measurement.c:113 #, c-format msgid "%s: invalid value for field `%s'" msgstr "%s: b³êdna warto¶æ dla pola `%s'" -#: locale/programs/ld-messages.c:113 locale/programs/ld-messages.c:147 +#: locale/programs/ld-messages.c:114 locale/programs/ld-messages.c:148 #, c-format msgid "%s: field `%s' undefined" msgstr "%s: pole `%s' nie zdefiniowane" -#: locale/programs/ld-messages.c:120 locale/programs/ld-messages.c:154 +#: locale/programs/ld-messages.c:121 locale/programs/ld-messages.c:155 +#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:118 #, c-format msgid "%s: value for field `%s' must not be an empty string" msgstr "%s: warto¶æ pola `%s' nie mo¿e byæ ³añcuchem pustym" -#: locale/programs/ld-messages.c:136 locale/programs/ld-messages.c:170 +#: locale/programs/ld-messages.c:137 locale/programs/ld-messages.c:171 #, c-format msgid "%s: no correct regular expression for field `%s': %s" msgstr "%s: brak poprawnego wyra¿enia regularnego dla pola `%s': %s" -#: locale/programs/ld-monetary.c:222 +#: locale/programs/ld-monetary.c:224 #, c-format msgid "%s: value of field `int_curr_symbol' has wrong length" msgstr "%s: warto¶æ pola `int_curr_symbol' ma z³± d³ugo¶æ" -#: locale/programs/ld-monetary.c:235 +#: 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: warto¶æ pola `int_curr_symbol' nie jest zgodna z nazwami ISO 4217" -#: locale/programs/ld-monetary.c:254 locale/programs/ld-numeric.c:117 -#, c-format -msgid "%s: value for field `%s' must not be the empty string" -msgstr "%s: warto¶æ pola `%s' nie mo¿e byæ ³añcuchem pustym" - -#: locale/programs/ld-monetary.c:282 locale/programs/ld-monetary.c:312 +#: locale/programs/ld-monetary.c:285 locale/programs/ld-monetary.c:315 #, c-format msgid "%s: value for field `%s' must be in range %d...%d" msgstr "%s: warto¶æ pola `%s' musi mie¶ciæ siê w przedziale %d...%d" -#: locale/programs/ld-monetary.c:744 locale/programs/ld-numeric.c:273 +#: locale/programs/ld-monetary.c:747 locale/programs/ld-numeric.c:274 #, c-format msgid "%s: value for field `%s' must be a single character" msgstr "%s: warto¶æ pola `%s' musi byæ pojedynczym znakiem" -#: locale/programs/ld-monetary.c:841 locale/programs/ld-numeric.c:317 +#: locale/programs/ld-monetary.c:844 locale/programs/ld-numeric.c:318 #, c-format msgid "%s: `-1' must be last entry in `%s' field" msgstr "%s: `-1' musi byæ ostatnim elementem w polu `%s'" -#: locale/programs/ld-monetary.c:863 locale/programs/ld-numeric.c:334 +#: locale/programs/ld-monetary.c:866 locale/programs/ld-numeric.c:335 #, c-format msgid "%s: values for field `%s' must be smaller than 127" msgstr "%s: warto¶ci pola `%s' musz± byæ mniejsze ni¿ 127" -#: locale/programs/ld-monetary.c:906 +#: locale/programs/ld-monetary.c:909 msgid "conversion rate value cannot be zero" msgstr "warto¶æ stopnia konwersji nie mo¿e byæ zerem" -#: locale/programs/ld-name.c:128 locale/programs/ld-telephone.c:125 -#: locale/programs/ld-telephone.c:148 +#: locale/programs/ld-name.c:129 locale/programs/ld-telephone.c:126 +#: locale/programs/ld-telephone.c:149 #, c-format msgid "%s: invalid escape sequence in field `%s'" msgstr "%s: niepoprawna sekwencja escape w polu `%s'" -#: locale/programs/ld-time.c:246 +#: locale/programs/ld-time.c:247 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'" msgstr "%s: znacznik kierunku w ³añcuchu %Zd w polu `era' nie jest '+' ani '-'" -#: locale/programs/ld-time.c:257 +#: locale/programs/ld-time.c:258 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not a single character" msgstr "%s: znacznik kierunku w ³añcuchu %Zd w polu `era' nie jest pojedynczym znakiem" -#: locale/programs/ld-time.c:270 +#: locale/programs/ld-time.c:271 #, c-format msgid "%s: invalid number for offset in string %Zd in `era' field" msgstr "%s: niepoprawna warto¶æ przesuniêcia w ³añcuchu %Zd w polu `era'" -#: locale/programs/ld-time.c:278 +#: locale/programs/ld-time.c:279 #, c-format msgid "%s: garbage at end of offset value in string %Zd in `era' field" msgstr "%s: ¶mieci na koñcu warto¶ci przesuniêcia w ³añcuchu %Zd w polu `era'" -#: locale/programs/ld-time.c:329 +#: locale/programs/ld-time.c:330 #, c-format msgid "%s: invalid starting date in string %Zd in `era' field" msgstr "%s: niepoprawna data pocz±tkowa w ³añcuchu %Zd w polu `era'" -#: locale/programs/ld-time.c:338 +#: locale/programs/ld-time.c:339 #, c-format msgid "%s: garbage at end of starting date in string %Zd in `era' field " msgstr "%s: ¶mieci na koñcu daty pocz±tkowej w ³añcuchu %Zd w polu `era' " -#: locale/programs/ld-time.c:357 +#: locale/programs/ld-time.c:358 #, c-format msgid "%s: starting date is invalid in string %Zd in `era' field" msgstr "%s: niepoprawna data pocz±tkowa w ³añcuchu %Zd w polu `era'" -#: locale/programs/ld-time.c:406 +#: locale/programs/ld-time.c:407 #, c-format msgid "%s: invalid stopping date in string %Zd in `era' field" msgstr "%s: niepoprawna data koñcowa w ³añcuchu %Zd w polu `era'" -#: locale/programs/ld-time.c:415 +#: locale/programs/ld-time.c:416 #, c-format msgid "%s: garbage at end of stopping date in string %Zd in `era' field" msgstr "%s: ¶mieci na koñcu daty koñcowej w ³añcuchu %Zd w polu `era'" -#: locale/programs/ld-time.c:434 +#: locale/programs/ld-time.c:435 #, c-format msgid "%s: stopping date is invalid in string %Zd in `era' field" msgstr "%s: niepoprawna data koñcowa w ³añcuchu %Zd w polu `era'" -#: locale/programs/ld-time.c:443 +#: locale/programs/ld-time.c:444 #, c-format msgid "%s: missing era name in string %Zd in `era' field" msgstr "%s: brak nazwy ery w ³añcuchu %Zd w polu `era'" -#: locale/programs/ld-time.c:455 +#: locale/programs/ld-time.c:456 #, c-format msgid "%s: missing era format in string %Zd in `era' field" msgstr "%s: brak formatu ery w ³añcuchu %Zd w polu `era'" -#: locale/programs/ld-time.c:496 +#: locale/programs/ld-time.c:497 #, c-format msgid "%s: third operand for value of field `%s' must not be larger than %d" msgstr "%s: warto¶æ trzeciego argumentu pola `%s' nie mo¿e byæ wiêksza ni¿ %d" -#: locale/programs/ld-time.c:504 locale/programs/ld-time.c:512 -#, c-format -msgid "%s: values of field `%s' must not be larger than %d" -msgstr "%s: warto¶ci pola `%s' nie mog± byæ wiêksze ni¿ %d" - -#: locale/programs/ld-time.c:520 +#: locale/programs/ld-time.c:505 locale/programs/ld-time.c:513 +#: locale/programs/ld-time.c:521 #, c-format msgid "%s: values for field `%s' must not be larger than %d" msgstr "%s: warto¶ci w polu `%s' nie mog± byæ wiêksze ni¿ %d" -#: locale/programs/ld-time.c:1003 +#: locale/programs/ld-time.c:1004 #, c-format msgid "%s: too few values for field `%s'" msgstr "%s: zbyt ma³o warto¶ci w polu `%s'" -#: locale/programs/ld-time.c:1048 +#: locale/programs/ld-time.c:1049 msgid "extra trailing semicolon" msgstr "nadmiarowy ¶rednik na koñcu" -#: locale/programs/ld-time.c:1051 +#: locale/programs/ld-time.c:1052 #, c-format msgid "%s: too many values for field `%s'" msgstr "%s: zbyt du¿o warto¶ci w polu `%s'" -#: locale/programs/linereader.c:129 +#: locale/programs/linereader.c:130 msgid "trailing garbage at end of line" msgstr "¶mieci na koñcu linii" -#: locale/programs/linereader.c:297 +#: locale/programs/linereader.c:298 msgid "garbage at end of number" msgstr "¶mieci na koñcu liczby" -#: locale/programs/linereader.c:409 +#: locale/programs/linereader.c:410 msgid "garbage at end of character code specification" msgstr "¶mieci na koñcu specyfikacji kodu znaku" -#: locale/programs/linereader.c:495 +#: locale/programs/linereader.c:496 msgid "unterminated symbolic name" msgstr "nie zakoñczona nazwa symboliczna" -#: locale/programs/linereader.c:622 +#: locale/programs/linereader.c:623 msgid "illegal escape sequence at end of string" msgstr "niepoprawna sekwencja escape na koñcu ³añcucha" -#: locale/programs/linereader.c:626 locale/programs/linereader.c:854 +#: locale/programs/linereader.c:627 locale/programs/linereader.c:855 msgid "unterminated string" msgstr "nie zakoñczony ³añcuch" -#: locale/programs/linereader.c:668 +#: locale/programs/linereader.c:669 msgid "non-symbolic character value should not be used" msgstr "nie symboliczna warto¶æ znaku nie powinna byæ u¿yta" -#: locale/programs/linereader.c:815 +#: locale/programs/linereader.c:816 #, c-format msgid "symbol `%.*s' not in charmap" msgstr "brak symbolu `%.*s' w tablicy znaków" -#: locale/programs/linereader.c:836 +#: locale/programs/linereader.c:837 #, c-format msgid "symbol `%.*s' not in repertoire map" msgstr "brak symbolu `%.*s' w tablicy repertuaru" -#: locale/programs/locale.c:73 +#: locale/programs/locale.c:74 msgid "System information:" msgstr "Informacja o systemie:" -#: locale/programs/locale.c:75 +#: locale/programs/locale.c:76 msgid "Write names of available locales" msgstr "Wypisanie nazw dostêpnych lokalizacji" -#: locale/programs/locale.c:77 +#: locale/programs/locale.c:78 msgid "Write names of available charmaps" msgstr "Wypisanie nazw dostêpnych tablic znaków" -#: locale/programs/locale.c:78 +#: locale/programs/locale.c:79 msgid "Modify output format:" msgstr "Modyfikacja formatu wyj¶ciowego:" -#: locale/programs/locale.c:79 +#: locale/programs/locale.c:80 msgid "Write names of selected categories" msgstr "Wypisanie nazw wybranych kategorii" -#: locale/programs/locale.c:80 +#: locale/programs/locale.c:81 msgid "Write names of selected keywords" msgstr "Wypisanie nazw wybranych s³ów kluczowych" -#: locale/programs/locale.c:81 +#: locale/programs/locale.c:82 msgid "Print more information" msgstr "Wypisanie wiêkszej ilo¶ci informacji" -#: locale/programs/locale.c:86 +#: locale/programs/locale.c:87 msgid "" -"Get locale-specific information.For bug reporting instructions, please see:\n" +"Get locale-specific information.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" -"Pobranie informacji dotycz±cych lokalizacji.Instrukcje dotycz±ce zg³aszania b³êdów znajduj± siê pod adresem:\n" +"Pobranie informacji dotycz±cych lokalizacji.\vInstrukcje dotycz±ce zg³aszania b³êdów znajduj± siê pod adresem:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" -#: locale/programs/locale.c:91 +#: locale/programs/locale.c:92 msgid "" "NAME\n" "[-a|-m]" @@ -2432,104 +2392,104 @@ msgstr "" "NAZWA\n" "[-a|-m]" -#: locale/programs/locale.c:192 +#: locale/programs/locale.c:193 #, c-format msgid "Cannot set LC_CTYPE to default locale" msgstr "Nie mo¿na ustawiæ LC_CTYPE na domy¶ln± lokalizacjê" -#: locale/programs/locale.c:194 +#: locale/programs/locale.c:195 #, c-format msgid "Cannot set LC_MESSAGES to default locale" msgstr "Nie mo¿na ustawiæ LC_MESSAGES na domy¶ln± lokalizacjê" -#: locale/programs/locale.c:207 +#: locale/programs/locale.c:208 #, c-format msgid "Cannot set LC_COLLATE to default locale" msgstr "Nie mo¿na ustawiæ LC_COLLATE na domy¶ln± lokalizacjê" -#: locale/programs/locale.c:223 +#: locale/programs/locale.c:224 #, c-format msgid "Cannot set LC_ALL to default locale" msgstr "Nie mo¿na ustawiæ LC_ALL na domy¶ln± lokalizacjê" -#: locale/programs/locale.c:499 +#: locale/programs/locale.c:500 #, c-format msgid "while preparing output" msgstr "podczas przygotowywania wyników" -#: locale/programs/localedef.c:119 +#: locale/programs/localedef.c:120 msgid "Input Files:" msgstr "Pliki wej¶ciowe:" -#: locale/programs/localedef.c:121 +#: locale/programs/localedef.c:122 msgid "Symbolic character names defined in FILE" msgstr "Nazwy symboliczne znaków s± zdefiniowane w PLIKU" -#: locale/programs/localedef.c:122 +#: locale/programs/localedef.c:123 msgid "Source definitions are found in FILE" msgstr "Definicje ¼ród³owe znajduj± siê w PLIKU" -#: locale/programs/localedef.c:124 +#: locale/programs/localedef.c:125 msgid "FILE contains mapping from symbolic names to UCS4 values" msgstr "PLIK zawiera odwzorowania nazw symbolicznych na warto¶ci UCS4" -#: locale/programs/localedef.c:128 +#: locale/programs/localedef.c:129 msgid "Create output even if warning messages were issued" msgstr "Tworzenie pliku wyj¶ciowego nawet je¶li wyst±pi³y ostrze¿enia" -#: locale/programs/localedef.c:129 +#: locale/programs/localedef.c:130 msgid "Create old-style tables" msgstr "Tworzenie tablic w starym stylu" -#: locale/programs/localedef.c:130 +#: locale/programs/localedef.c:131 msgid "Optional output file prefix" msgstr "Opcjonalny prefiks plików wyj¶ciowych" -#: locale/programs/localedef.c:131 +#: locale/programs/localedef.c:132 msgid "Be strictly POSIX conform" msgstr "¦cis³e przestrzeganie POSIX" -#: locale/programs/localedef.c:133 +#: locale/programs/localedef.c:134 msgid "Suppress warnings and information messages" msgstr "Pominiêcie wy¶wietlania ostrze¿eñ i informacji" -#: locale/programs/localedef.c:134 +#: locale/programs/localedef.c:135 msgid "Print more messages" msgstr "Wy¶wietlanie wiêcej liczby komunikatów" -#: locale/programs/localedef.c:135 +#: locale/programs/localedef.c:136 msgid "Archive control:" msgstr "Kontrola archiwum:" -#: locale/programs/localedef.c:137 +#: locale/programs/localedef.c:138 msgid "Don't add new data to archive" msgstr "Nie dodawanie nowych danych do archiwum" -#: locale/programs/localedef.c:139 +#: locale/programs/localedef.c:140 msgid "Add locales named by parameters to archive" msgstr "Dodanie do archiwum lokalizacji okre¶lonych parametrami" -#: locale/programs/localedef.c:140 +#: locale/programs/localedef.c:141 msgid "Replace existing archive content" msgstr "Zast±pienie aktualnej zawarto¶ci archiwum" -#: locale/programs/localedef.c:142 +#: locale/programs/localedef.c:143 msgid "Remove locales named by parameters from archive" msgstr "Usuniêcie z archiwum lokalizacji okre¶lonych parametrami" -#: locale/programs/localedef.c:143 +#: locale/programs/localedef.c:144 msgid "List content of archive" msgstr "Lista zawarto¶ci archiwum" -#: locale/programs/localedef.c:145 +#: locale/programs/localedef.c:146 msgid "locale.alias file to consult when making archive" msgstr "Plik locale.alias u¿ywany przy tworzeniu archiwum" -#: locale/programs/localedef.c:150 +#: locale/programs/localedef.c:151 msgid "Compile locale specification" msgstr "Kompilowanie specyfikacji lokalizacji" -#: locale/programs/localedef.c:153 +#: locale/programs/localedef.c:154 msgid "" "NAME\n" "[--add-to-archive|--delete-from-archive] FILE...\n" @@ -2539,30 +2499,28 @@ msgstr "" "[--add-to-archive|--delete-from-archive] PLIK...\n" "--list-archive [PLIK]" -#: locale/programs/localedef.c:231 +#: locale/programs/localedef.c:232 #, c-format msgid "cannot create directory for output files" msgstr "nie mo¿na utworzyæ katalogu na pliki wyj¶ciowe" -#: locale/programs/localedef.c:242 +#: locale/programs/localedef.c:243 #, c-format msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" msgstr "OSTATECZNE: system nie definiuje `_POSIX2_LOCALEDEF'" -#: locale/programs/localedef.c:256 locale/programs/localedef.c:272 -#: locale/programs/localedef.c:598 locale/programs/localedef.c:618 +#: locale/programs/localedef.c:257 locale/programs/localedef.c:273 +#: locale/programs/localedef.c:599 locale/programs/localedef.c:619 #, c-format msgid "cannot open locale definition file `%s'" msgstr "nie mo¿na otworzyæ pliku definicji lokalizacji `%s'" -#: locale/programs/localedef.c:284 +#: locale/programs/localedef.c:285 #, c-format msgid "cannot write output files to `%s'" msgstr "nie mo¿na zapisaæ plików wyj¶ciowych do `%s'" -# wyjatkowo nieladne tlumaczenia repertoire i locale -PK -# XXX -#: locale/programs/localedef.c:365 +#: locale/programs/localedef.c:366 #, c-format msgid "" "System's directory for character maps : %s\n" @@ -2575,209 +2533,205 @@ msgstr "" " ¶cie¿ka lokalizacji: %s\n" "%s" -#: locale/programs/localedef.c:566 +#: locale/programs/localedef.c:567 #, c-format msgid "circular dependencies between locale definitions" msgstr "zapêtlone zale¿no¶ci pomiêdzy definicjami lokalizacji" -#: locale/programs/localedef.c:572 +#: locale/programs/localedef.c:573 #, c-format msgid "cannot add already read locale `%s' a second time" msgstr "nie mo¿na dodaæ po raz drugi ju¿ odczytanej lokalizacji `%s'" -#: locale/programs/locarchive.c:87 locale/programs/locarchive.c:256 +#: locale/programs/locarchive.c:88 locale/programs/locarchive.c:261 #, c-format msgid "cannot create temporary file" msgstr "nie mo¿na utworzyæ pliku tymczasowego" -#: locale/programs/locarchive.c:116 locale/programs/locarchive.c:302 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:307 #, c-format msgid "cannot initialize archive file" msgstr "nie mo¿na zainicjowaæ pliku archiwum" -#: locale/programs/locarchive.c:123 locale/programs/locarchive.c:309 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:314 #, c-format msgid "cannot resize archive file" msgstr "nie mo¿na zmieniæ rozmiaru pliku archiwum" -#: locale/programs/locarchive.c:132 locale/programs/locarchive.c:318 -#: locale/programs/locarchive.c:506 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:323 +#: locale/programs/locarchive.c:527 #, c-format msgid "cannot map archive header" msgstr "nie mo¿na odwzorowaæ nag³ówka archiwum" -#: locale/programs/locarchive.c:154 +#: locale/programs/locarchive.c:156 #, c-format msgid "failed to create new locale archive" msgstr "tworzenie nowego archiwum lokalizacji nie powiod³o siê" -#: locale/programs/locarchive.c:166 +#: locale/programs/locarchive.c:168 #, c-format msgid "cannot change mode of new locale archive" msgstr "nie mo¿na zmieniæ uprawnieñ nowego archiwum lokalizacji" -#: locale/programs/locarchive.c:250 +#: locale/programs/locarchive.c:255 #, c-format msgid "cannot map locale archive file" msgstr "nie mo¿na odwzorowaæ pliku archiwum lokalizacji" -#: locale/programs/locarchive.c:326 +#: locale/programs/locarchive.c:331 #, c-format msgid "cannot lock new archive" msgstr "nie mo¿na zablokowaæ nowego archiwum" -#: locale/programs/locarchive.c:375 +#: locale/programs/locarchive.c:396 #, c-format msgid "cannot extend locale archive file" msgstr "nie mo¿na rozszerzyæ pliku archiwum lokalizacji" -#: locale/programs/locarchive.c:384 +#: locale/programs/locarchive.c:405 #, c-format msgid "cannot change mode of resized locale archive" msgstr "nie mo¿na zmieniæ uprawnieñ archiwum lokalizacji po zmianie rozmiaru" -#: locale/programs/locarchive.c:392 +#: locale/programs/locarchive.c:413 #, c-format msgid "cannot rename new archive" msgstr "nie mo¿na zmieniæ nazwy nowego archiwum" -#: locale/programs/locarchive.c:445 +#: locale/programs/locarchive.c:466 #, c-format msgid "cannot open locale archive \"%s\"" msgstr "nie mo¿na otworzyæ archiwum lokalizacji \"%s\"" -#: locale/programs/locarchive.c:450 +#: locale/programs/locarchive.c:471 #, c-format msgid "cannot stat locale archive \"%s\"" msgstr "nie mo¿na wykonaæ stat na archiwum lokalizacji \"%s\"" -#: locale/programs/locarchive.c:469 +#: locale/programs/locarchive.c:490 #, c-format msgid "cannot lock locale archive \"%s\"" msgstr "nie mo¿na zablokowaæ archiwum lokalizacji \"%s\"" -#: locale/programs/locarchive.c:492 +#: locale/programs/locarchive.c:513 #, c-format msgid "cannot read archive header" msgstr "nie mo¿na odczytaæ nag³ówka archiwum" -#: locale/programs/locarchive.c:552 +#: locale/programs/locarchive.c:573 #, c-format msgid "locale '%s' already exists" msgstr "lokalizacja '%s' ju¿ istnieje" -#: locale/programs/locarchive.c:783 locale/programs/locarchive.c:798 -#: locale/programs/locarchive.c:810 locale/programs/locarchive.c:822 -#: locale/programs/locfile.c:343 +#: locale/programs/locarchive.c:804 locale/programs/locarchive.c:819 +#: locale/programs/locarchive.c:831 locale/programs/locarchive.c:843 +#: locale/programs/locfile.c:344 #, c-format msgid "cannot add to locale archive" msgstr "nie mo¿na dodaæ do archiwum lokalizacji" -#: locale/programs/locarchive.c:977 +#: locale/programs/locarchive.c:998 #, c-format msgid "locale alias file `%s' not found" msgstr "nie znaleziono pliku aliasów lokalizacji `%s'" -#: locale/programs/locarchive.c:1121 +#: locale/programs/locarchive.c:1142 #, c-format msgid "Adding %s\n" msgstr "Dodawanie %s\n" -#: locale/programs/locarchive.c:1127 +#: locale/programs/locarchive.c:1148 #, c-format msgid "stat of \"%s\" failed: %s: ignored" msgstr "stat na \"%s\" nie powiod³o siê: %s: zignorowano" -#: locale/programs/locarchive.c:1133 +#: locale/programs/locarchive.c:1154 #, c-format msgid "\"%s\" is no directory; ignored" msgstr "\"%s\" nie jest katalogiem; zignorowano" -#: locale/programs/locarchive.c:1140 +#: locale/programs/locarchive.c:1161 #, c-format msgid "cannot open directory \"%s\": %s: ignored" msgstr "nie mo¿na otworzyæ katalogu \"%s\": %s: zignorowano" -#: locale/programs/locarchive.c:1212 +#: locale/programs/locarchive.c:1233 #, c-format msgid "incomplete set of locale files in \"%s\"" msgstr "niekompletny zestaw plików lokalizacji w \"%s\"" -#: locale/programs/locarchive.c:1276 +#: locale/programs/locarchive.c:1297 #, c-format msgid "cannot read all files in \"%s\": ignored" msgstr "nie mo¿na przeczytaæ wszystkich plików w \"%s\": zignorowano" -#: locale/programs/locarchive.c:1346 +#: locale/programs/locarchive.c:1367 #, c-format msgid "locale \"%s\" not in archive" msgstr "lokalizacji \"%s\" nie ma w archiwum" -#: locale/programs/locfile.c:131 +#: locale/programs/locfile.c:132 #, c-format msgid "argument to `%s' must be a single character" msgstr "argument `%s' musi byæ pojedynczym znakiem" -#: locale/programs/locfile.c:251 +#: locale/programs/locfile.c:252 msgid "syntax error: not inside a locale definition section" msgstr "b³±d sk³adni: poza sekcj± definicji lokalizacji" -#: locale/programs/locfile.c:625 +#: locale/programs/locfile.c:626 #, c-format msgid "cannot open output file `%s' for category `%s'" msgstr "nie mo¿na otworzyæ pliku wyj¶ciowego `%s' dla kategorii `%s'" -#: locale/programs/locfile.c:649 +#: locale/programs/locfile.c:650 #, c-format msgid "failure while writing data for category `%s'" msgstr "niepowodzenie podczas zapisu danych dla kategorii `%s'" -#: locale/programs/locfile.c:745 +#: locale/programs/locfile.c:746 #, c-format msgid "cannot create output file `%s' for category `%s'" msgstr "nie mo¿na utworzyæ pliku wyj¶ciowego `%s' dla kategorii `%s'" -#: locale/programs/locfile.c:781 +#: locale/programs/locfile.c:782 msgid "expect string argument for `copy'" msgstr "spodziewanym argumentem dla `copy' jest ³añcuch" -#: locale/programs/locfile.c:785 +#: locale/programs/locfile.c:786 msgid "locale name should consist only of portable characters" msgstr "nazwa lokalizacji powinna sk³adaæ siê wy³±cznie ze znaków przeno¶nych" -#: locale/programs/locfile.c:804 +#: locale/programs/locfile.c:805 msgid "no other keyword shall be specified when `copy' is used" msgstr "¿adne inne s³owo kluczowe nie powinno wystêpowaæ razem z `copy'" -#: locale/programs/repertoire.c:229 locale/programs/repertoire.c:270 -#: locale/programs/repertoire.c:295 +#: locale/programs/locfile.c:819 +#, c-format +msgid "`%1$s' definition does not end with `END %1$s'" +msgstr "definicja `%1$s' musi koñczyæ siê wyra¿eniem `END %1$s'" + +#: 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 "b³±d sk³adni w definicji tablicy repertuaru: %s" -#: locale/programs/repertoire.c:271 +#: locale/programs/repertoire.c:272 msgid "no <Uxxxx> or <Uxxxxxxxx> value given" msgstr "nie podano ¿adnych warto¶ci <Uxxxx> lub <Uxxxxxxxx>" -#: locale/programs/repertoire.c:331 +#: locale/programs/repertoire.c:332 #, c-format msgid "cannot save new repertoire map" msgstr "nie mo¿na zachowaæ nowej tablicy repertuaru" -#: locale/programs/repertoire.c:342 +#: locale/programs/repertoire.c:343 #, c-format msgid "repertoire map file `%s' not found" msgstr "nie znaleziono pliku tablicy repertuaru `%s'" -#: locale/programs/repertoire.c:449 -#, c-format -msgid "<%s> and <%s> are invalid names for range" -msgstr "<%s> i <%s> s± niepoprawnymi nazwami dla przedzia³u" - -#: locale/programs/repertoire.c:456 -msgid "upper limit in range is not smaller then lower limit" -msgstr "górna granica przedzia³u nie jest mniejsza ni¿ dolna" - #: login/programs/pt_chown.c:74 #, c-format msgid "Set the owner, group and access permission of the slave pseudo terminal corresponding to the master pseudo terminal passed on file descriptor `%d'. This is the helper program for the `grantpt' function. It is not intended to be run directly from the command line.\n" @@ -2804,34 +2758,32 @@ msgstr "za du¿o argumentów" msgid "needs to be installed setuid `root'" msgstr "musi byæ zainstalowany jako setuid `root'" -#: malloc/mcheck.c:324 +#: malloc/mcheck.c:330 msgid "memory is consistent, library is buggy\n" msgstr "pamiêæ jest spójna, biblioteka zawiera b³êdy\n" -#: malloc/mcheck.c:327 +#: malloc/mcheck.c:333 msgid "memory clobbered before allocated block\n" msgstr "pamiêæ zosta³a uszkodzona przed przydzielonym blokiem\n" -#: malloc/mcheck.c:330 +#: malloc/mcheck.c:336 msgid "memory clobbered past end of allocated block\n" msgstr "pamiêæ zosta³a uszkodzona za przydzielonym blokiem\n" -#: malloc/mcheck.c:333 +#: malloc/mcheck.c:339 msgid "block freed twice\n" msgstr "blok zwalniany dwa razy\n" -#: malloc/mcheck.c:336 +#: malloc/mcheck.c:342 msgid "bogus mcheck_status, library is buggy\n" msgstr "b³êdny mcheck_status, biblioteka zawiera b³êdy\n" #: malloc/memusage.sh:27 -#, fuzzy -msgid "Try `memusage --help' for more information." +msgid "Try \\`memusage --help' for more information." msgstr "Polecenie \\`memusage --help' pozwoli uzyskaæ wiêcej informacji." #: malloc/memusage.sh:33 -#, fuzzy -msgid "memusage: option `$1' requires an argument" +msgid "memusage: option \\`$1' requires an argument" msgstr "memusage: opcja \\`$1' musi mieæ argument" #: malloc/memusage.sh:39 @@ -2844,7 +2796,7 @@ msgid "" " -d,--data=FILE Generate binary data file and store it in FILE\n" " -u,--unbuffered Don't buffer output\n" " -b,--buffer=SIZE Collect SIZE entries before writing them out\n" -" --no-timer Don't collect additional information though timer\n" +" --no-timer Don't collect additional information through timer\n" " -m,--mmap Also trace mmap & friends\n" "\n" " -?,--help Print this help and exit\n" @@ -2890,9 +2842,9 @@ msgstr "" "krótkich opcji.\n" "\n" "Informacje na temat zg³aszania b³êdów mo¿na znale¼æ pod adresem:\n" -"<http://www.gnu.org/software/libc/bugs.html>.\\n" +"<http://www.gnu.org/software/libc/bugs.html>." -#: malloc/memusage.sh:90 +#: malloc/memusage.sh:99 msgid "" "Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]\n" " [--buffer=SIZE] [--no-timer] [--time-based] [--total]\n" @@ -2904,53 +2856,51 @@ msgstr "" " [--title=£AÑCUCH] [--x-size=ROZMIAR] [--y-size=ROZMIAR]\n" " PROGRAM [OPCJA-PROGRAMU]..." -#: malloc/memusage.sh:182 -#, fuzzy -msgid "memusage: option `${1##*=}' is ambiguous" +#: malloc/memusage.sh:191 +msgid "memusage: option \\`${1##*=}' is ambiguous" msgstr "memusage: opcja \\`${1##*=}' jest niejednoznaczna" -#: malloc/memusage.sh:191 -#, fuzzy -msgid "memusage: unrecognized option `$1'" +#: malloc/memusage.sh:200 +msgid "memusage: unrecognized option \\`$1'" msgstr "memusage: nieznana opcja \\`$1'" -#: malloc/memusage.sh:204 +#: malloc/memusage.sh:213 msgid "No program name given" msgstr "Nie podano nazwy programu" -#: malloc/memusagestat.c:53 +#: malloc/memusagestat.c:54 msgid "Name output file" msgstr "Nazwa pliku wyj¶ciowego" -#: malloc/memusagestat.c:54 +#: malloc/memusagestat.c:55 msgid "Title string used in output graphic" msgstr "£añcuch tytu³owy u¿ywany w wynikowym wykresie" -#: malloc/memusagestat.c:55 +#: malloc/memusagestat.c:56 msgid "Generate output linear to time (default is linear to number of function calls)" msgstr "Generowanie wyj¶cia liniowo po czasie (domy¶lnie: liniowo po liczbie wywo³añ funkcji)" -#: malloc/memusagestat.c:57 +#: malloc/memusagestat.c:58 msgid "Also draw graph for total memory consumption" msgstr "Narysowanie tak¿e wykresu ca³kowitego u¿ycia pamiêci" -#: malloc/memusagestat.c:58 -msgid "make output graphic VALUE pixel wide" -msgstr "stworzenie wykresu szeroko¶ci VALUE pikseli" - #: malloc/memusagestat.c:59 -msgid "make output graphic VALUE pixel high" -msgstr "stworzenie wykresu szeroko¶ci VALUE pikseli" +msgid "Make output graphic VALUE pixels wide" +msgstr "Stworzenie wykresu szeroko¶ci VALUE pikseli" + +#: malloc/memusagestat.c:60 +msgid "Make output graphic VALUE pixels high" +msgstr "Stworzenie wykresu szeroko¶ci VALUE pikseli" -#: malloc/memusagestat.c:64 +#: malloc/memusagestat.c:65 msgid "Generate graphic from memory profiling data" msgstr "Wygenerowanie wykresu z danych profilowania pamiêci" -#: malloc/memusagestat.c:67 +#: malloc/memusagestat.c:68 msgid "DATAFILE [OUTFILE]" msgstr "PLIK-DANYCH [PLIK-WYJ¦CIOWY]" -#: misc/error.c:118 timezone/zic.c:396 +#: misc/error.c:118 timezone/zic.c:417 msgid "Unknown system error" msgstr "Nieznany b³±d systemowy" @@ -3443,7 +3393,7 @@ msgstr " Cz³onkowie rekursywni:\n" msgid " No recursive members\n" msgstr " Brak rekursywnych cz³onków\n" -#: nis/nis_print_group_entry.c:149 nis/nis_print_group_entry.c:165 +#: nis/nis_print_group_entry.c:149 msgid " Explicit nonmembers:\n" msgstr " Nie-cz³onkowie zadeklarowani:\n" @@ -3459,6 +3409,10 @@ msgstr " Nie-cz³onkowie domniemani:\n" msgid " No implicit nonmembers\n" msgstr " Brak domniemanych nie-cz³onków\n" +#: nis/nis_print_group_entry.c:165 +msgid " Recursive nonmembers:\n" +msgstr " Nie-cz³onkowie rekursywni:\n" + #: nis/nis_print_group_entry.c:170 msgid " No recursive nonmembers\n" msgstr " Brak rekursywnych nie-cz³onków\n" @@ -3471,8 +3425,8 @@ msgstr "Pozycja DES dla sieci %s nie jest unikalna\n" #: nis/nss_nisplus/nisplus-publickey.c:220 #, c-format -msgid "netname2user: missing group id list in `%s'." -msgstr "netname2user: brak listy identyfikatorów grup w `%s'." +msgid "netname2user: missing group id list in `%s'" +msgstr "netname2user: brak listy identyfikatorów grup w `%s'" #: nis/nss_nisplus/nisplus-publickey.c:302 #: nis/nss_nisplus/nisplus-publickey.c:308 @@ -3590,382 +3544,391 @@ msgstr "yp_update: nie mo¿na przekonwertowaæ nazwy hosta na nazwê sieci\n" msgid "yp_update: cannot get server address\n" msgstr "yp_update: nie mo¿na uzyskaæ adresu serwera\n" -#: nscd/aicache.c:76 nscd/hstcache.c:461 +#: nscd/aicache.c:77 nscd/hstcache.c:462 #, c-format msgid "Haven't found \"%s\" in hosts cache!" msgstr "Nie znaleziono \"%s\" w buforze hostów!" -#: nscd/aicache.c:78 nscd/hstcache.c:463 +#: nscd/aicache.c:79 nscd/hstcache.c:464 #, c-format msgid "Reloading \"%s\" in hosts cache!" msgstr "Prze³adowywanie \"%s\" w buforze hostów!" -#: nscd/cache.c:126 +#: nscd/cache.c:146 #, c-format msgid "add new entry \"%s\" of type %s for %s to cache%s" msgstr "dodanie nowego wpisu \"%s\" typu %s dla %s do bufora%s" -#: nscd/cache.c:233 nscd/connections.c:750 +#: nscd/cache.c:148 +msgid " (first)" +msgstr " (pierwszy)" + +#: nscd/cache.c:256 nscd/connections.c:786 #, c-format msgid "cannot stat() file `%s': %s" msgstr "znalezienie pliku bazy danych `%s' jest niemo¿liwe: %s" -#: nscd/cache.c:262 +#: nscd/cache.c:285 #, c-format msgid "pruning %s cache; time %ld" msgstr "czyszczenie bufora %s; czas %ld" -#: nscd/cache.c:289 +#: nscd/cache.c:312 #, c-format msgid "considering %s entry \"%s\", timeout %<PRIu64>" msgstr "rozwa¿anie wpisu %s \"%s\", limit czasu %<PRIu64>" -#: nscd/connections.c:469 nscd/connections.c:481 nscd/connections.c:493 -#: nscd/connections.c:512 +#: nscd/connections.c:505 nscd/connections.c:517 nscd/connections.c:529 +#: nscd/connections.c:548 #, c-format msgid "invalid persistent database file \"%s\": %s" msgstr "nieprawid³owy plik trwa³ej bazy danych \"%s\": %s" -#: nscd/connections.c:483 +#: nscd/connections.c:519 msgid "header size does not match" msgstr "rozmiar nag³ówka siê nie zgadza" -#: nscd/connections.c:495 +#: nscd/connections.c:531 msgid "file size does not match" msgstr "rozmiar pliku siê nie zgadza" -#: nscd/connections.c:514 +#: nscd/connections.c:550 msgid "verification failed" msgstr "weryfikacja nie powiod³a siê" -#: nscd/connections.c:528 +#: nscd/connections.c:564 #, c-format msgid "suggested size of table for database %s larger than the persistent database's table" msgstr "sugerowany rozmiar tablicy dla bazy danych %s wiêkszy od bufora trwa³ej bazy danych" -#: nscd/connections.c:538 nscd/connections.c:619 +#: nscd/connections.c:574 nscd/connections.c:655 #, c-format msgid "cannot create read-only descriptor for \"%s\"; no mmap" msgstr "nie mo¿na utworzyæ deskryptora tylko dla odczytu dla \"%s\"; brak mmap" -#: nscd/connections.c:598 +#: nscd/connections.c:634 #, c-format msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart" msgstr "baza danych dla %s uszkodzona lub jednocze¶nie u¿ywana; w razie potrzeby trzeba rêcznie usun±æ %s i zrestartowaæ" -#: nscd/connections.c:605 +#: nscd/connections.c:641 #, c-format msgid "cannot create %s; no persistent database used" msgstr "nie mo¿na utworzyæ %s; trwa³a baza danych nie u¿ywana" -#: nscd/connections.c:608 +#: nscd/connections.c:644 #, c-format msgid "cannot create %s; no sharing possible" msgstr "nie mo¿na utworzyæ %s; wspó³dzielenie niemo¿liwe" -#: nscd/connections.c:679 +#: nscd/connections.c:715 #, c-format msgid "cannot write to database file %s: %s" msgstr "nie mo¿na zapisaæ do pliku bazy danych %s: %s" -#: nscd/connections.c:713 +#: nscd/connections.c:749 #, c-format msgid "cannot set socket to close on exec: %s; disabling paranoia mode" msgstr "nie mo¿na ustawiæ gniazda do zamkniêcia przy exec: %s; wy³±czono tryb paranoiczny" -#: nscd/connections.c:763 +#: nscd/connections.c:799 #, c-format msgid "cannot open socket: %s" msgstr "nie mo¿na otworzyæ gniazda: %s" -#: nscd/connections.c:780 +#: nscd/connections.c:816 #, c-format msgid "cannot change socket to nonblocking mode: %s" msgstr "nie mo¿na przestawiæ gniazda w tryb nieblokuj±cy: %s" -#: nscd/connections.c:788 +#: nscd/connections.c:824 #, c-format msgid "cannot set socket to close on exec: %s" msgstr "nie mo¿na ustawiæ gniazda do zamkniêcia przy exec: %s" -#: nscd/connections.c:799 +#: nscd/connections.c:835 #, c-format msgid "cannot enable socket to accept connections: %s" msgstr "nie mo¿na otworzyæ gniazda do przyjmowania po³±czeñ: %s" -#: nscd/connections.c:892 +#: nscd/connections.c:926 #, c-format msgid "provide access to FD %d, for %s" msgstr "udostêpnianie FD %d dla %s" -#: nscd/connections.c:904 +#: nscd/connections.c:938 #, c-format msgid "cannot handle old request version %d; current version is %d" msgstr "nie mo¿na obs³u¿yæ ¿±dañ w starej wersji %d; aktualna wersja to %d" -#: nscd/connections.c:954 nscd/connections.c:1007 +#: nscd/connections.c:980 nscd/connections.c:1033 #, c-format msgid "cannot write result: %s" msgstr "nie mo¿na zapisaæ wyniku: %s" -#: nscd/connections.c:1082 +#: nscd/connections.c:1116 #, c-format msgid "error getting caller's id: %s" msgstr "b³±d podczas pobierania identyfikatorów wywo³uj±cych: %s" -#: nscd/connections.c:1140 nscd/connections.c:1154 +#: nscd/connections.c:1175 #, c-format msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode" msgstr "nie mo¿na otworzyæ /proc/self/cmdline: %s; wy³±czono tryb paranoiczny" -#: nscd/connections.c:1194 +#: nscd/connections.c:1189 +#, c-format +msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode" +msgstr "nie mo¿na odczytaæ /proc/self/cmdline: %s; wy³±czono tryb paranoiczny" + +#: nscd/connections.c:1229 #, c-format msgid "cannot change to old UID: %s; disabling paranoia mode" msgstr "nie mo¿na zmieniæ na stary UID: %s; wy³±czono tryb paranoiczny" -#: nscd/connections.c:1204 +#: nscd/connections.c:1239 #, c-format msgid "cannot change to old GID: %s; disabling paranoia mode" msgstr "nie mo¿na zmieniæ na stary GID: %s; wy³±czono tryb paranoiczny" -#: nscd/connections.c:1217 +#: nscd/connections.c:1252 #, c-format msgid "cannot change to old working directory: %s; disabling paranoia mode" msgstr "nie mo¿na przej¶æ do starego katalog roboczego: %s; wy³±czono tryb paranoiczny" -#: nscd/connections.c:1245 +#: nscd/connections.c:1280 #, c-format msgid "re-exec failed: %s; disabling paranoia mode" msgstr "ponowne wywo³anie nie powiod³o siê: %s; wy³±czono tryb paranoiczny" -#: nscd/connections.c:1254 +#: nscd/connections.c:1289 #, c-format msgid "cannot change current working directory to \"/\": %s" msgstr "nie mo¿na zmieniæ bie¿±cego katalogu na \"/\": %s" -#: nscd/connections.c:1372 +#: nscd/connections.c:1407 #, c-format msgid "short read while reading request: %s" msgstr "skrócony odczyt podczas czytania ¿±dania: `%s'" -#: nscd/connections.c:1404 +#: nscd/connections.c:1438 #, c-format msgid "key length in request too long: %d" msgstr "d³ugo¶æ klucza w ¿±daniu zbyt du¿a: %d" -#: nscd/connections.c:1417 +#: nscd/connections.c:1451 #, c-format msgid "short read while reading request key: %s" msgstr "skrócony odczyt podczas czytania klucza ¿±dania: %s" -#: nscd/connections.c:1426 +#: nscd/connections.c:1460 #, c-format msgid "handle_request: request received (Version = %d) from PID %ld" msgstr "handle_request: odebrano ¿±danie (Wersja = %d) od procesu %ld" -#: nscd/connections.c:1431 +#: nscd/connections.c:1465 #, c-format msgid "handle_request: request received (Version = %d)" msgstr "handle_request: odebrano ¿±danie (Wersja = %d)" -#: nscd/connections.c:1792 +#: nscd/connections.c:1826 #, c-format msgid "could only start %d threads; terminating" msgstr "mo¿na uruchomiæ tylko %d w±tków; zakoñczenie" -#: nscd/connections.c:1840 nscd/connections.c:1841 nscd/connections.c:1858 -#: nscd/connections.c:1867 nscd/connections.c:1885 nscd/connections.c:1896 -#: nscd/connections.c:1907 +#: nscd/connections.c:1874 nscd/connections.c:1875 nscd/connections.c:1892 +#: nscd/connections.c:1901 nscd/connections.c:1919 nscd/connections.c:1930 +#: nscd/connections.c:1941 #, c-format msgid "Failed to run nscd as user '%s'" msgstr "Uruchomienie nscd jako u¿ytkownik '%s' nie powiod³o siê" -#: nscd/connections.c:1859 +#: nscd/connections.c:1893 #, c-format msgid "initial getgrouplist failed" msgstr "pocz±tkowe getgrouplist nie powiod³o siê" -#: nscd/connections.c:1868 +#: nscd/connections.c:1902 #, c-format msgid "getgrouplist failed" msgstr "getgrouplist nie powiod³o siê" -#: nscd/connections.c:1886 +#: nscd/connections.c:1920 #, c-format msgid "setgroups failed" msgstr "setgroups nie powiod³o siê" -#: nscd/grpcache.c:400 nscd/hstcache.c:411 nscd/initgrcache.c:411 -#: nscd/pwdcache.c:395 +#: nscd/grpcache.c:402 nscd/hstcache.c:412 nscd/initgrcache.c:412 +#: nscd/pwdcache.c:397 nscd/servicescache.c:342 #, c-format msgid "short write in %s: %s" msgstr "b³±d zapisu w %s: %s" -#: nscd/grpcache.c:443 nscd/initgrcache.c:77 +#: nscd/grpcache.c:445 nscd/initgrcache.c:78 #, c-format msgid "Haven't found \"%s\" in group cache!" msgstr "Nie znaleziono \"%s\" w buforze grup!" -#: nscd/grpcache.c:445 nscd/initgrcache.c:79 +#: nscd/grpcache.c:447 nscd/initgrcache.c:80 #, c-format msgid "Reloading \"%s\" in group cache!" msgstr "Prze³adowywanie \"%s\" w buforze grup!" -#: nscd/grpcache.c:536 +#: nscd/grpcache.c:524 #, c-format msgid "Invalid numeric gid \"%s\"!" msgstr "Nieprawid³owy liczbowy gid \"%s\"!" -#: nscd/mem.c:382 +#: nscd/mem.c:383 #, c-format msgid "freed %zu bytes in %s cache" msgstr "zwolniono %zu bajtów w buforze %s" -#: nscd/mem.c:511 +#: nscd/mem.c:512 #, c-format msgid "no more memory for database '%s'" msgstr "nie ma wiêcej pamiêci dla bazy danych '%s'" -#: nscd/nscd.c:97 +#: nscd/nscd.c:98 msgid "Read configuration data from NAME" msgstr "Odczyt konfiguracji z pliku NAZWA" -#: nscd/nscd.c:99 +#: nscd/nscd.c:100 msgid "Do not fork and display messages on the current tty" msgstr "Nie przechodzenie w t³o i wy¶wietlanie komunikatów na bie¿±cym terminalu" -#: nscd/nscd.c:100 +#: nscd/nscd.c:101 msgid "NUMBER" msgstr "LICZBA" -#: nscd/nscd.c:100 +#: nscd/nscd.c:101 msgid "Start NUMBER threads" msgstr "Uruchomienie takiej LICZBY w±tków" -#: nscd/nscd.c:101 +#: nscd/nscd.c:102 msgid "Shut the server down" msgstr "Zakoñczenie pracy serwera" -#: nscd/nscd.c:102 +#: nscd/nscd.c:103 msgid "Print current configuration statistic" msgstr "Wy¶wietlenie aktualnych statystyk konfiguracji" -#: nscd/nscd.c:103 +#: nscd/nscd.c:104 msgid "TABLE" msgstr "TABLICA" -#: nscd/nscd.c:104 +#: nscd/nscd.c:105 msgid "Invalidate the specified cache" msgstr "Uniewa¿nienie podanego bufora" -#: nscd/nscd.c:105 +#: nscd/nscd.c:106 msgid "TABLE,yes" msgstr "TABLICA,yes" -#: nscd/nscd.c:106 +#: nscd/nscd.c:107 msgid "Use separate cache for each user" msgstr "U¿ycie oddzielnego bufora dla ka¿dego u¿ytkownika" # XXX moze zostawic oryginal albo zrobic ladniej -PK -#: nscd/nscd.c:111 +#: nscd/nscd.c:112 msgid "Name Service Cache Daemon." msgstr "Demon buforuj±cy us³ugi odwzorowania nazw." -#: nscd/nscd.c:143 nss/getent.c:858 nss/makedb.c:123 +#: nscd/nscd.c:144 nss/getent.c:858 nss/makedb.c:123 #, c-format msgid "wrong number of arguments" msgstr "z³a liczba argumentów" -#: nscd/nscd.c:153 +#: nscd/nscd.c:154 #, c-format msgid "failure while reading configuration file; this is fatal" msgstr "niepowodzenie podczas odczytu pliku konfiguracyjnego; koniec pracy" -#: nscd/nscd.c:162 +#: nscd/nscd.c:163 #, c-format msgid "already running" msgstr "jest ju¿ uruchomiony" -#: nscd/nscd.c:177 nscd/nscd.c:232 +#: nscd/nscd.c:178 nscd/nscd.c:233 #, c-format msgid "cannot fork" msgstr "nie mo¿na wykonaæ fork" -#: nscd/nscd.c:240 +#: nscd/nscd.c:241 #, c-format -msgid "cannot change current working cirectory to \"/\"" +msgid "cannot change current working directory to \"/\"" msgstr "nie mo¿na zmieniæ bie¿±cego katalogu na \"/\"" -#: nscd/nscd.c:248 +#: nscd/nscd.c:249 msgid "Could not create log file" msgstr "Nie mo¿na utworzyæ pliku dziennika" -#: nscd/nscd.c:301 nscd/nscd.c:326 nscd/nscd_stat.c:172 +#: nscd/nscd.c:302 nscd/nscd.c:327 nscd/nscd_stat.c:172 #, c-format msgid "Only root is allowed to use this option!" msgstr "Tylko root mo¿e u¿ywaæ tej opcji!" -#: nscd/nscd.c:359 nscd/nscd_stat.c:191 +#: nscd/nscd.c:364 nscd/nscd_stat.c:191 #, c-format msgid "write incomplete" msgstr "zapis nie by³ kompletny" -#: nscd/nscd.c:370 +#: nscd/nscd.c:375 #, c-format msgid "cannot read invalidate ACK" msgstr "nie mo¿na odczytaæ ACK dla uniewa¿nienia" -#: nscd/nscd.c:376 +#: nscd/nscd.c:381 #, c-format msgid "invalidation failed" msgstr "uniewa¿nienie nie powiod³o siê" -#: nscd/nscd.c:386 +#: nscd/nscd.c:391 #, c-format msgid "secure services not implemented anymore" msgstr "bezpieczne us³ugi nie s± ju¿ zaimplementowane" -#: nscd/nscd_conf.c:55 +#: nscd/nscd_conf.c:57 #, c-format -msgid "database %s is not supported\n" -msgstr "baza danych %s nie jest obs³ugiwana\n" +msgid "database %s is not supported" +msgstr "baza danych %s nie jest obs³ugiwana" -#: nscd/nscd_conf.c:106 +#: nscd/nscd_conf.c:108 #, c-format msgid "Parse error: %s" msgstr "B³±d analizowania: %s" -#: nscd/nscd_conf.c:191 +#: nscd/nscd_conf.c:193 #, c-format msgid "Must specify user name for server-user option" msgstr "Trzeba podaæ nazwê u¿ytkownika dla opcji server-user" -#: nscd/nscd_conf.c:198 +#: nscd/nscd_conf.c:200 #, c-format msgid "Must specify user name for stat-user option" msgstr "Trzeba podaæ nazwê u¿ytkownika dla opcji stat-user" -#: nscd/nscd_conf.c:242 +#: nscd/nscd_conf.c:244 #, c-format msgid "invalid value for 'reload-count': %u" msgstr "b³êdna warto¶æ dla 'reload-count': %u" -#: nscd/nscd_conf.c:257 +#: nscd/nscd_conf.c:259 #, c-format msgid "Must specify value for restart-interval option" msgstr "Trzeba podaæ warto¶æ dla opcji restart-interval" -#: nscd/nscd_conf.c:271 +#: nscd/nscd_conf.c:273 #, c-format msgid "Unknown option: %s %s %s" msgstr "Nieznana opcja: %s %s %s" -#: nscd/nscd_conf.c:284 +#: nscd/nscd_conf.c:286 #, c-format msgid "cannot get current working directory: %s; disabling paranoia mode" msgstr "nie mo¿na pobraæ bie¿±cego katalogu: %s; wy³±czono tryb paranoiczny" -#: nscd/nscd_conf.c:304 +#: nscd/nscd_conf.c:306 #, c-format msgid "maximum file size for %s database too small" msgstr "maksymalny rozmiar pliku dla bazy danych %s jest zbyt ma³y" @@ -4095,97 +4058,93 @@ msgstr "" "%15<PRIuMAX> przydzieleñ pamiêci nie powiod³o siê\n" "%15s sprawdzanie zmian w /etc/%s\n" -#: nscd/pwdcache.c:438 +#: nscd/pwdcache.c:440 #, c-format msgid "Haven't found \"%s\" in password cache!" msgstr "Nie znaleziono \"%s\" w buforze hase³!" -#: nscd/pwdcache.c:440 +#: nscd/pwdcache.c:442 #, c-format msgid "Reloading \"%s\" in password cache!" msgstr "Prze³adowywanie \"%s\" w buforze hase³!" -#: nscd/pwdcache.c:532 +#: nscd/pwdcache.c:520 #, c-format msgid "Invalid numeric uid \"%s\"!" msgstr "Nieprawid³owy liczbowy uid \"%s\"!" -#: nscd/selinux.c:151 +#: nscd/selinux.c:156 #, c-format msgid "Failed opening connection to the audit subsystem: %m" msgstr "Nie uda³o siê otworzyæ po³±czenia do podsystemu audytu: %m" -#: nscd/selinux.c:172 +#: nscd/selinux.c:177 msgid "Failed to set keep-capabilities" msgstr "Nie uda³o siê ustawiæ keep-capabilities" -#: nscd/selinux.c:173 nscd/selinux.c:232 +#: nscd/selinux.c:178 nscd/selinux.c:241 #, c-format msgid "prctl(KEEPCAPS) failed" msgstr "prctl(KEEPCAPS) nie powiod³o siê" -#: nscd/selinux.c:187 +#: nscd/selinux.c:192 msgid "Failed to initialize drop of capabilities" msgstr "Nie uda³o siê zainicjowaæ porzucenia capabilities" -#: nscd/selinux.c:188 +#: nscd/selinux.c:193 #, c-format msgid "cap_init failed" msgstr "cap_init nie powiod³o siê" -#: nscd/selinux.c:205 -msgid "Failed to drop capabilities\n" -msgstr "Nie uda³o siê porzuciæ capabilities\n" +#: nscd/selinux.c:214 nscd/selinux.c:231 +msgid "Failed to drop capabilities" +msgstr "Nie uda³o siê porzuciæ capabilities" -#: nscd/selinux.c:206 nscd/selinux.c:223 +#: nscd/selinux.c:215 nscd/selinux.c:232 #, c-format msgid "cap_set_proc failed" msgstr "cap_set_proc nie powiod³o siê" -#: nscd/selinux.c:222 -msgid "Failed to drop capabilities" -msgstr "Nie uda³o siê porzuciæ capabilities" - -#: nscd/selinux.c:231 +#: nscd/selinux.c:240 msgid "Failed to unset keep-capabilities" msgstr "Nie uda³o siê wy³±czyæ keep-capabilities" -#: nscd/selinux.c:247 +#: nscd/selinux.c:256 msgid "Failed to determine if kernel supports SELinux" msgstr "Nie uda³o siê okre¶liæ, czy j±dro obs³uguje SELinuksa" -#: nscd/selinux.c:262 +#: nscd/selinux.c:271 #, c-format msgid "Failed to start AVC thread" msgstr "Nie uda³o siê uruchomiæ w±tku AVC" -#: nscd/selinux.c:284 +#: nscd/selinux.c:293 #, c-format msgid "Failed to create AVC lock" msgstr "Nie uda³o siê utworzyæ blokady AVC" -#: nscd/selinux.c:324 +#: nscd/selinux.c:333 #, c-format msgid "Failed to start AVC" msgstr "Nie uda³o siê uruchomiæ AVC" -#: nscd/selinux.c:326 +#: nscd/selinux.c:335 msgid "Access Vector Cache (AVC) started" msgstr "Access Vector Cache (AVC) uruchomione" -#: nscd/selinux.c:347 +#: nscd/selinux.c:356 msgid "Error getting context of socket peer" msgstr "B³±d podczas pobierania kontekstu drugiej strony gniazda" -#: nscd/selinux.c:352 +#: nscd/selinux.c:361 msgid "Error getting context of nscd" msgstr "B³±d podczas pobierania kontekstu nscd" -#: nscd/selinux.c:358 +#: nscd/selinux.c:367 msgid "Error getting sid from context" msgstr "B³±d podczas pobierania sid z kontekstu" -#: nscd/selinux.c:390 +#: nscd/selinux.c:399 #, c-format msgid "" "\n" @@ -4212,6 +4171,16 @@ msgstr "" "%15u prób CAV\n" "%15u CAV nie trafionych\n" +#: nscd/servicescache.c:389 +#, c-format +msgid "Haven't found \"%s\" in services cache!" +msgstr "Nie znaleziono \"%s\" w buforze us³ug!" + +#: nscd/servicescache.c:391 +#, c-format +msgid "Reloading \"%s\" in services cache!" +msgstr "Prze³adowywanie \"%s\" w buforze us³ug!" + #: nss/getent.c:52 msgid "database [key ...]" msgstr "baza [klucz ...]" @@ -4222,10 +4191,10 @@ msgstr "U¿ycie tej konfiguracji us³ugi rozwi±zywania nazw" #: nss/getent.c:62 msgid "" -"Get entries from administrative database.For bug reporting instructions, please see:\n" +"Get entries from administrative database.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" -"Pobranie wpisów z administracyjnej bazy danych.Instrukcje dotycz±ce zg³aszania b³êdów znajduj± siê pod adresem:\n" +"Pobranie wpisów z administracyjnej bazy danych.\vInstrukcje dotycz±ce zg³aszania b³êdów znajduj± siê pod adresem:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" #: nss/getent.c:145 nss/getent.c:394 @@ -4306,31 +4275,31 @@ msgstr "problemy podczas odczytu `%s'" msgid "while reading database" msgstr "podczas odczytu bazy danych" -#: posix/getconf.c:940 +#: posix/getconf.c:945 #, c-format msgid "Usage: %s [-v specification] variable_name [pathname]\n" msgstr "Sk³adnia: %s [-v specyfikacja] nazwa_zmiennej [¶cie¿ka]\n" -#: posix/getconf.c:943 +#: posix/getconf.c:948 #, c-format msgid " %s -a [pathname]\n" msgstr " %s -a [¶cie¿ka]\n" -#: posix/getconf.c:1062 +#: posix/getconf.c:1067 #, c-format msgid "unknown specification \"%s\"" msgstr "nieznana specyfikacja \"%s\"" -#: posix/getconf.c:1090 +#: posix/getconf.c:1095 #, c-format msgid "Couldn't execute %s" msgstr "Nie mo¿na wykonaæ %s" -#: posix/getconf.c:1130 posix/getconf.c:1146 +#: posix/getconf.c:1135 posix/getconf.c:1151 msgid "undefined" msgstr "niezdefiniowana" -#: posix/getconf.c:1168 +#: posix/getconf.c:1173 #, c-format msgid "Unrecognized variable `%s'" msgstr "Nierozpoznana zmienna `%s'" @@ -4549,8 +4518,8 @@ msgid "authunix_create: out of memory\n" msgstr "authunix_create: brak pamiêci\n" #: sunrpc/auth_unix.c:350 -msgid "auth_none.c - Fatal marshalling problem" -msgstr "auth_none.c - Krytyczny problem z prze³±czaniem" +msgid "auth_unix.c: Fatal marshalling problem" +msgstr "auth_unix.c: Krytyczny problem z prze³±czaniem" #: sunrpc/clnt_perr.c:118 sunrpc/clnt_perr.c:139 #, c-format @@ -4675,8 +4644,8 @@ msgid "Failed (unspecified error)" msgstr "Nieudane (nieustalony b³±d)" #: sunrpc/clnt_raw.c:117 -msgid "clnt_raw.c - Fatal header serialization error." -msgstr "clnt_raw.c - Krytyczny b³±d serializacji nag³ówka." +msgid "clnt_raw.c: fatal header serialization error" +msgstr "clnt_raw.c: krytyczny b³±d serializacji nag³ówka" #: sunrpc/clnt_tcp.c:131 msgid "clnttcp_create: out of memory\n" @@ -4691,8 +4660,8 @@ msgid "clntunix_create: out of memory\n" msgstr "clntunix_create: brak pamiêci\n" #: sunrpc/pm_getmaps.c:83 -msgid "pmap_getmaps rpc problem" -msgstr "problem rpc pmap_getmaps" +msgid "pmap_getmaps.c: rpc problem" +msgstr "pmap_getmaps.c: problem rpc" #: sunrpc/pmap_clnt.c:129 msgid "Cannot register service" @@ -4754,8 +4723,8 @@ msgstr "%s: preprocesor C zakoñczy³ pracê z kodem wyj¶cia %d\n" #: sunrpc/rpc_main.c:460 #, c-format -msgid "illegal nettype :`%s'\n" -msgstr "b³êdny typ sieci :'%s'\n" +msgid "illegal nettype: `%s'\n" +msgstr "b³êdny typ sieci: '%s'\n" #: sunrpc/rpc_main.c:1122 #, c-format @@ -4931,7 +4900,11 @@ msgstr "rpcinfo: nieznana us³uga %s\n" msgid "rpcinfo: %s is unknown host\n" msgstr "rpcinfo: nieznany host %s\n" -#: sunrpc/svc_run.c:76 +#: sunrpc/svc_run.c:70 +msgid "svc_run: - out of memory" +msgstr "svc_run - brak pamiêci" + +#: sunrpc/svc_run.c:90 msgid "svc_run: - poll failed" msgstr "svc_run - poll nie powiod³o siê" @@ -6134,405 +6107,396 @@ msgstr "nie mo¿na otworzyæ `%s'" msgid "cannot read header from `%s'" msgstr "nie mo¿na przeczytaæ nag³ówka z `%s'" -#: timezone/zdump.c:215 +#: timezone/zdump.c:211 msgid "lacks alphabetic at start" msgstr "nie zaczyna siê od litery" -#: timezone/zdump.c:217 +#: timezone/zdump.c:213 msgid "has fewer than 3 alphabetics" msgstr "ma mniej ni¿ 3 litery" -#: timezone/zdump.c:219 +#: timezone/zdump.c:215 msgid "has more than 6 alphabetics" msgstr "ma wiêcej ni¿ 6 liter" -#: timezone/zdump.c:227 +#: timezone/zdump.c:223 msgid "differs from POSIX standard" msgstr "ró¿ni siê od standardu POSIX" -#: timezone/zdump.c:233 +#: timezone/zdump.c:229 #, c-format msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n" msgstr "%s: uwaga: skrót strefy \"%s\" \"%s\" %s\n" -#: timezone/zdump.c:284 +#: timezone/zdump.c:280 #, c-format msgid "%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n" msgstr "%s: sk³adnia: %s [ --version ] [ -v ] [ -c [rokpocz,]rokkoñc ] nazwa_strefy...\n" -#: timezone/zdump.c:301 +#: timezone/zdump.c:297 #, c-format msgid "%s: wild -c argument %s\n" msgstr "%s: niepoprawny argument -c %s\n" -#: timezone/zdump.c:392 +#: timezone/zdump.c:388 msgid "Error writing to standard output" msgstr "B³±d podczas pisania na standardowe wyj¶cie" -#: timezone/zdump.c:415 +#: timezone/zdump.c:411 #, c-format msgid "%s: use of -v on system with floating time_t other than float or double\n" msgstr "%s: u¿ycie -v na systemie ze zmiennoprzecinkowym time_t innym ni¿ float lub double\n" -#: timezone/zic.c:371 +#: timezone/zic.c:392 #, c-format msgid "%s: Memory exhausted: %s\n" msgstr "%s: Brak pamiêci: %s\n" -#: timezone/zic.c:430 +#: timezone/zic.c:451 #, c-format msgid "\"%s\", line %d: %s" msgstr "\"%s\", linia %d: %s" -#: timezone/zic.c:433 +#: timezone/zic.c:454 #, c-format msgid " (rule from \"%s\", line %d)" msgstr " (regu³a z \"%s\", linia %d)" -#: timezone/zic.c:445 +#: timezone/zic.c:466 msgid "warning: " msgstr "uwaga: " -#: timezone/zic.c:455 +#: timezone/zic.c:476 #, c-format msgid "" -"%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" +"%s: usage is %s [ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" "\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" msgstr "" -"%s: sk³adnia: %s [ --version ] [ -s ] [ -v ] [ -l czas_lokalny ] \\\n" -"\t[ -p regu³y_POSIX ] [ -d katalog ] [ -L sek_przestêpne ] \\\n" -"\t[ -y yearistype ] [ plik ...]\n" +"%s: sk³adnia: %s [ --version ] [ -v ] [ -l czas_lokalny ] [ -p regu³y_POSIX ] \\\n" +"\t[ -d katalog ] [ -L sek_przestêpne ] [ -y yearistype ] [ plik ...]\n" + +#: timezone/zic.c:511 +msgid "wild compilation-time specification of zic_t" +msgstr "niepoprawna specyfikacja zic_t w czasie kompilacji" -#: timezone/zic.c:503 +#: timezone/zic.c:528 #, c-format msgid "%s: More than one -d option specified\n" msgstr "%s: Podano wiêcej ni¿ jedn± opcjê -d\n" -#: timezone/zic.c:513 +#: timezone/zic.c:538 #, c-format msgid "%s: More than one -l option specified\n" msgstr "%s: Podano wiêcej ni¿ jedn± opcjê -l\n" -#: timezone/zic.c:523 +#: timezone/zic.c:548 #, c-format msgid "%s: More than one -p option specified\n" msgstr "%s: Podano wiêcej ni¿ jedn± opcjê -p\n" -#: timezone/zic.c:533 +#: timezone/zic.c:558 #, c-format msgid "%s: More than one -y option specified\n" msgstr "%s: Podano wiêcej ni¿ jedn± opcjê -y\n" -#: timezone/zic.c:543 +#: timezone/zic.c:568 #, c-format msgid "%s: More than one -L option specified\n" msgstr "%s: Podano wiêcej ni¿ jedn± opcjê -L\n" -#: timezone/zic.c:592 +#: timezone/zic.c:617 msgid "link to link" msgstr "dowi±zanie do dowi±zania" -#: timezone/zic.c:657 +#: timezone/zic.c:682 msgid "hard link failed, symbolic link used" msgstr "stworzenie dowi±zania zwyk³ego nie powiod³o siê, u¿yto symbolicznego" -#: timezone/zic.c:665 +#: timezone/zic.c:690 #, c-format msgid "%s: Can't link from %s to %s: %s\n" msgstr "%s: Nie mo¿na dowi±zaæ %s do %s: %s\n" -#: timezone/zic.c:774 timezone/zic.c:776 +#: timezone/zic.c:762 timezone/zic.c:764 msgid "same rule name in multiple files" msgstr "ta sama nazwa nazwa regu³y w ró¿nych plikach" -#: timezone/zic.c:817 +#: timezone/zic.c:805 msgid "unruly zone" msgstr "strefa bez regu³" -#: timezone/zic.c:824 +#: timezone/zic.c:812 #, c-format msgid "%s in ruleless zone" msgstr "%s w strefie dla której nie zdefiniowano regu³" -#: timezone/zic.c:845 +#: timezone/zic.c:833 msgid "standard input" msgstr "standardowe wej¶cie" -#: timezone/zic.c:850 +#: timezone/zic.c:838 #, c-format msgid "%s: Can't open %s: %s\n" msgstr "%s: Nie mo¿na otworzyæ %s: %s\n" -#: timezone/zic.c:861 +#: timezone/zic.c:849 msgid "line too long" msgstr "za d³uga linia" -#: timezone/zic.c:881 +#: timezone/zic.c:869 msgid "input line of unknown type" msgstr "nieznany typ linii wej¶ciowej" -#: timezone/zic.c:897 +#: timezone/zic.c:885 #, c-format msgid "%s: Leap line in non leap seconds file %s\n" msgstr "%s: linia Leap nie znajduje siê w pliku sekund przestêpnych %s\n" -#: timezone/zic.c:904 timezone/zic.c:1325 timezone/zic.c:1350 +#: timezone/zic.c:892 timezone/zic.c:1323 timezone/zic.c:1345 #, c-format msgid "%s: panic: Invalid l_value %d\n" msgstr "%s: panika: B³êdna l-warto¶æ %d\n" -#: timezone/zic.c:912 +#: timezone/zic.c:900 #, c-format msgid "%s: Error reading %s\n" msgstr "%s: B³±d odczytu %s\n" -#: timezone/zic.c:919 +#: timezone/zic.c:907 #, c-format msgid "%s: Error closing %s: %s\n" msgstr "%s: B³±d podczas zamykania %s: %s\n" -#: timezone/zic.c:924 +#: timezone/zic.c:912 msgid "expected continuation line not found" msgstr "brak spodziewanej linii kontynuacji" -#: timezone/zic.c:968 +#: timezone/zic.c:956 msgid "24:00 not handled by pre-1998 versions of zic" msgstr "24:00 nie by³a obs³ugiwana przez wersje zic sprzed 1998 roku" -#: timezone/zic.c:982 +#: timezone/zic.c:970 msgid "wrong number of fields on Rule line" msgstr "z³a liczba pól w linii Rule" -#: timezone/zic.c:986 +#: timezone/zic.c:974 msgid "nameless rule" msgstr "bezimienna regu³a" -#: timezone/zic.c:991 +#: timezone/zic.c:979 msgid "invalid saved time" msgstr "b³êdny czas oszczêdno¶ci" -#: timezone/zic.c:1010 +#: timezone/zic.c:1000 msgid "wrong number of fields on Zone line" msgstr "z³a liczba pól w linii Zone" -#: timezone/zic.c:1016 +#: timezone/zic.c:1006 #, c-format msgid "\"Zone %s\" line and -l option are mutually exclusive" msgstr "Linia \"Zone %s\" i opcja -l wykluczaj± siê wzajemnie" -#: timezone/zic.c:1024 +#: timezone/zic.c:1014 #, c-format msgid "\"Zone %s\" line and -p option are mutually exclusive" msgstr "Linia \"Zone %s\" i opcja -p wykluczaj± siê wzajemnie" -#: timezone/zic.c:1036 +#: timezone/zic.c:1026 #, c-format msgid "duplicate zone name %s (file \"%s\", line %d)" msgstr "powtórzona nazwa strefy %s (plik \"%s\", linia %d)" -#: timezone/zic.c:1052 +#: timezone/zic.c:1042 msgid "wrong number of fields on Zone continuation line" msgstr "z³a liczba pól w linii kontynuacji Zone" -#: timezone/zic.c:1092 +#: timezone/zic.c:1082 msgid "invalid UTC offset" msgstr "nieprawid³owe przesuniêcie UTC" -#: timezone/zic.c:1095 +#: timezone/zic.c:1085 msgid "invalid abbreviation format" msgstr "nieprawid³owy format skrótu" -#: timezone/zic.c:1122 +#: timezone/zic.c:1114 msgid "Zone continuation line end time is not after end time of previous line" msgstr "Czas koñcowy linii kontynuacji Zone nie jest po czasie koñcowym poprzedniej linii" -#: timezone/zic.c:1150 +#: timezone/zic.c:1142 msgid "wrong number of fields on Leap line" msgstr "z³a liczba pól w linii Leap" -#: timezone/zic.c:1159 +#: timezone/zic.c:1151 msgid "invalid leaping year" msgstr "nieprawid³owy rok przestêpny" -#: timezone/zic.c:1174 timezone/zic.c:1280 +#: timezone/zic.c:1171 timezone/zic.c:1277 msgid "invalid month name" msgstr "nieprawid³owa nazwa miesi±ca" -#: timezone/zic.c:1187 timezone/zic.c:1402 timezone/zic.c:1416 +#: timezone/zic.c:1184 timezone/zic.c:1390 timezone/zic.c:1404 msgid "invalid day of month" msgstr "nieprawid³owy dzieñ miesi±ca" -#: timezone/zic.c:1192 +#: timezone/zic.c:1189 msgid "time before zero" msgstr "czas przed zerem" -#: timezone/zic.c:1196 +#: timezone/zic.c:1193 msgid "time too small" msgstr "czas zbyt ma³y" -#: timezone/zic.c:1200 +#: timezone/zic.c:1197 msgid "time too large" msgstr "czas zbyt du¿y" -#: timezone/zic.c:1204 timezone/zic.c:1309 +#: timezone/zic.c:1201 timezone/zic.c:1306 msgid "invalid time of day" msgstr "nieprawid³owa pora dnia" -#: timezone/zic.c:1223 +#: timezone/zic.c:1220 msgid "illegal CORRECTION field on Leap line" msgstr "b³êdne pole CORRECTION w linii Leap" -#: timezone/zic.c:1228 +#: timezone/zic.c:1225 msgid "illegal Rolling/Stationary field on Leap line" msgstr "b³êdne pole Rolling/Stationary w linii Leap" -#: timezone/zic.c:1244 +#: timezone/zic.c:1241 msgid "wrong number of fields on Link line" msgstr "z³a liczba pól w linii Link" -#: timezone/zic.c:1248 +#: timezone/zic.c:1245 msgid "blank FROM field on Link line" msgstr "puste pole FROM w linii Link" -#: timezone/zic.c:1252 +#: timezone/zic.c:1249 msgid "blank TO field on Link line" msgstr "puste pole TO w linii Link" -#: timezone/zic.c:1329 +#: timezone/zic.c:1327 msgid "invalid starting year" msgstr "nieprawid³owy rok pocz±tkowy" -#: timezone/zic.c:1333 -msgid "starting year too low to be represented" -msgstr "rok pocz±tkowy jest zbyt ma³y" - -#: timezone/zic.c:1335 -msgid "starting year too high to be represented" -msgstr "rok pocz±tkowy jest zbyt du¿y" - -#: timezone/zic.c:1354 +#: timezone/zic.c:1349 msgid "invalid ending year" msgstr "nieprawid³owy rok koñcowy" -#: timezone/zic.c:1358 -msgid "ending year too low to be represented" -msgstr "rok koñcowy jest zbyt ma³y" - -#: timezone/zic.c:1360 -msgid "ending year too high to be represented" -msgstr "rok koñcowy jest zbyt du¿y" - -#: timezone/zic.c:1363 +#: timezone/zic.c:1353 msgid "starting year greater than ending year" msgstr "rok pocz±tkowy jest pó¼niejszy ni¿ koñcowy" -#: timezone/zic.c:1370 +#: timezone/zic.c:1360 msgid "typed single year" msgstr "podano pojedynczy rok" -#: timezone/zic.c:1407 +#: timezone/zic.c:1395 msgid "invalid weekday name" msgstr "nieprawid³owa nazwa dnia tygodnia" -#: timezone/zic.c:1521 +#: timezone/zic.c:1573 #, c-format msgid "%s: Can't remove %s: %s\n" msgstr "%s: Nie mo¿na usun±æ %s: %s\n" -#: timezone/zic.c:1531 +#: timezone/zic.c:1583 #, c-format msgid "%s: Can't create %s: %s\n" msgstr "%s: Nie mo¿na utworzyæ %s: %s\n" -#: timezone/zic.c:1598 +#: timezone/zic.c:1733 #, c-format msgid "%s: Error writing %s\n" msgstr "%s: B³±d podczas zapisu do %s\n" +#: timezone/zic.c:2025 +msgid "no POSIX environment variable for zone" +msgstr "brak zmiennej ¶rodowiskowej POSIX dla strefy" + # jak ladnie przetlumaczyc ten until time? -PK -#: timezone/zic.c:1789 +#: timezone/zic.c:2179 msgid "can't determine time zone abbreviation to use just after until time" msgstr "nie mo¿na okre¶liæ skrótu strefy czasowej po koñcu przedzia³u czasu" -#: timezone/zic.c:1832 +#: timezone/zic.c:2225 msgid "too many transitions?!" msgstr "za du¿o konwersji?!" -#: timezone/zic.c:1851 +#: timezone/zic.c:2244 msgid "internal error - addtype called with bad isdst" msgstr "b³±d wewnêtrzny - addtype wywo³ane z b³êdnym isdst" -#: timezone/zic.c:1855 +#: timezone/zic.c:2248 msgid "internal error - addtype called with bad ttisstd" msgstr "b³±d wewnêtrzny - addtype wywo³ane z b³êdnym ttisstd" -#: timezone/zic.c:1859 +#: timezone/zic.c:2252 msgid "internal error - addtype called with bad ttisgmt" msgstr "b³±d wewnêtrzny - addtype wywo³ane z b³êdnym ttisgmt" -#: timezone/zic.c:1878 +#: timezone/zic.c:2271 msgid "too many local time types" msgstr "za du¿o lokalnych typów czasu" -#: timezone/zic.c:1906 +#: timezone/zic.c:2299 msgid "too many leap seconds" msgstr "za du¿o sekund przestêpnych" -#: timezone/zic.c:1912 +#: timezone/zic.c:2305 msgid "repeated leap second moment" msgstr "powtórzona chwila wystêpowania sekund przestêpnych" -#: timezone/zic.c:1964 +#: timezone/zic.c:2357 msgid "Wild result from command execution" msgstr "Osobliwy wynik wykonania polecenia" -#: timezone/zic.c:1965 +#: timezone/zic.c:2358 #, c-format msgid "%s: command was '%s', result was %d\n" msgstr "%s: polecenie `%s' zwróci³o %d\n" -#: timezone/zic.c:2062 +#: timezone/zic.c:2456 msgid "Odd number of quotation marks" msgstr "Nieparzysta liczba cudzys³owów" -#: timezone/zic.c:2083 timezone/zic.c:2102 +#: timezone/zic.c:2479 timezone/zic.c:2498 msgid "time overflow" msgstr "przepe³nienie czasu" -#: timezone/zic.c:2149 +#: timezone/zic.c:2545 msgid "use of 2/29 in non leap-year" msgstr "u¿ycie 2/29 w roku nieprzestêpnym" -#: timezone/zic.c:2184 +#: timezone/zic.c:2580 msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic" msgstr "regu³a przekracza pocz±tek/koniec miesi±ca - nie zadzia³a z wersjami zic sprzed 2004 roku" -#: timezone/zic.c:2218 +#: timezone/zic.c:2612 msgid "time zone abbreviation lacks alphabetic at start" msgstr "skrót nazwy strefy czasowej nie zaczyna siê od litery" -#: timezone/zic.c:2220 +#: timezone/zic.c:2614 msgid "time zone abbreviation has more than 3 alphabetics" msgstr "skrót nazwy strefy czasowej ma mniej ni¿ 3 litery" -#: timezone/zic.c:2222 +#: timezone/zic.c:2616 msgid "time zone abbreviation has too many alphabetics" msgstr "skrót nazwy strefy czasowej ma zbyt du¿o liter" -#: timezone/zic.c:2232 +#: timezone/zic.c:2626 msgid "time zone abbreviation differs from POSIX standard" msgstr "skrót nazwy strefy czasowej ró¿ni siê od standardu POSIX" -#: timezone/zic.c:2244 +#: timezone/zic.c:2638 msgid "too many, or too long, time zone abbreviations" msgstr "za d³ugie lub za du¿o skrótów stref czasowych" -#: timezone/zic.c:2285 +#: timezone/zic.c:2679 #, c-format msgid "%s: Can't create directory %s: %s\n" msgstr "%s: Nie mo¿na utworzyæ katalogu %s: %s\n" -#: timezone/zic.c:2307 +#: timezone/zic.c:2701 #, c-format msgid "%s: %d did not sign extend correctly\n" msgstr "%s: %d niepoprawnie rozszerzy³ znak\n" diff --git a/libc/po/sv.po b/libc/po/sv.po index 07d28095b..fca08f39a 100644 --- a/libc/po/sv.po +++ b/libc/po/sv.po @@ -1,56 +1,56 @@ # GNU libc message catalog for swedish # Copyright © 1996, 1998, 2001, 2002, 2003, 2006 Free Software Foundation, Inc. -# Jan Djärv <jan.h.d@swipnet.se>, 1996, 1998, 2001, 2002, 2003, 2006. -# Revision: 1.54 +# Jan Djärv <jan.h.d@swipnet.se>, 1996, 1998, 2001, 2002, 2003, 2006, 2007. +# Revision: 1.55 # msgid "" msgstr "" -"Project-Id-Version: libc 2.5\n" -"POT-Creation-Date: 2006-09-29 11:38-0700\n" -"PO-Revision-Date: 2006-12-30 18:53+0100\n" +"Project-Id-Version: libc 2.6.1\n" +"POT-Creation-Date: 2007-08-04 11:37+0200\n" +"PO-Revision-Date: 2007-08-07 18:31+0200\n" "Last-Translator: Jan Djärv <jan.h.d@swipnet.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: argp/argp-help.c:227 +#: argp/argp-help.c:228 #, c-format msgid "%.*s: ARGP_HELP_FMT parameter requires a value" msgstr "%.*s: parameter till ARGP_HELP_FMT kräver ett värde" -#: argp/argp-help.c:237 +#: argp/argp-help.c:238 #, c-format msgid "%.*s: Unknown ARGP_HELP_FMT parameter" msgstr "%.*s: Parameter till ARGP_HELP_FMT okänd" -#: argp/argp-help.c:250 +#: argp/argp-help.c:251 #, c-format msgid "Garbage in ARGP_HELP_FMT: %s" msgstr "Skräp i ARGP_HELP_FMT: %s" -#: argp/argp-help.c:1214 +#: argp/argp-help.c:1215 msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." msgstr "Obligatoriska respektive valfria argument för lÃ¥nga flaggor är obligatoriska repektive valfria även för korta." -#: argp/argp-help.c:1600 +#: argp/argp-help.c:1601 msgid "Usage:" msgstr "Användning:" -#: argp/argp-help.c:1604 +#: argp/argp-help.c:1605 msgid " or: " msgstr " eller: " -#: argp/argp-help.c:1616 +#: argp/argp-help.c:1617 msgid " [OPTION...]" msgstr " [FLAGGA...]" -#: argp/argp-help.c:1643 +#: argp/argp-help.c:1644 #, c-format msgid "Try `%s --help' or `%s --usage' for more information.\n" msgstr "Försök med \"%s --help\" eller \"%s --usage\" för mer information\n" -#: argp/argp-help.c:1671 +#: argp/argp-help.c:1672 #, c-format msgid "Report bugs to %s.\n" msgstr "" @@ -100,31 +100,31 @@ msgstr "%s%s%s:%u: %s%sOväntat fel: %s.\n" msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" msgstr "%s%s%s:%u: %s%sFörsäkran \"%s\" falsk.\n" -#: catgets/gencat.c:109 catgets/gencat.c:113 nscd/nscd.c:96 nss/makedb.c:61 +#: catgets/gencat.c:110 catgets/gencat.c:114 nscd/nscd.c:97 nss/makedb.c:61 msgid "NAME" msgstr "NAMN" -#: catgets/gencat.c:110 +#: catgets/gencat.c:111 msgid "Create C header file NAME containing symbol definitions" msgstr "Skapa C-huvudfil NAMN innehÃ¥llande symboldefinitioner" -#: catgets/gencat.c:112 +#: catgets/gencat.c:113 msgid "Do not use existing catalog, force new output file" msgstr "Använd inte existerande katalog, gör en ny utfil" -#: catgets/gencat.c:113 nss/makedb.c:61 +#: catgets/gencat.c:114 nss/makedb.c:61 msgid "Write output to file NAME" msgstr "Skriv resultatet till NAMN" -#: catgets/gencat.c:118 +#: catgets/gencat.c:119 msgid "" -"Generate message catalog.If INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" +"Generate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" "is -, output is written to standard output.\n" msgstr "" -"Skapa meddelandekatalog.Om INFIL är - sÃ¥ läses standard in. Om UTFIL\n" +"Skapa meddelandekatalog.\vOm INFIL är - sÃ¥ läses standard in. Om UTFIL\n" "är - sÃ¥ skrivs resultatet till standard ut.\n" -#: catgets/gencat.c:123 +#: catgets/gencat.c:124 msgid "" "-o OUTPUT-FILE [INPUT-FILE]...\n" "[OUTPUT-FILE [INPUT-FILE]...]" @@ -132,9 +132,9 @@ msgstr "" "-o UTFIL [INFIL]...\n" "[UTFIL [INFIL]...]" -#: catgets/gencat.c:231 debug/pcprofiledump.c:199 iconv/iconv_prog.c:410 -#: iconv/iconvconfig.c:379 locale/programs/localedef.c:370 -#: login/programs/pt_chown.c:88 malloc/memusagestat.c:525 nss/makedb.c:231 +#: catgets/gencat.c:232 debug/pcprofiledump.c:199 iconv/iconv_prog.c:411 +#: iconv/iconvconfig.c:380 locale/programs/localedef.c:371 +#: login/programs/pt_chown.c:88 malloc/memusagestat.c:526 nss/makedb.c:231 msgid "" "For bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" @@ -143,12 +143,12 @@ msgstr "" "<http://www.gnu.org/software/libc/bugs.html>.\n" "Rapportera fel eller synpunkter pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>.\n" -#: catgets/gencat.c:245 debug/xtrace.sh:64 elf/ldconfig.c:285 -#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:425 -#: iconv/iconvconfig.c:394 locale/programs/locale.c:274 -#: locale/programs/localedef.c:386 login/programs/pt_chown.c:59 -#: malloc/memusage.sh:71 nscd/nscd.c:401 nss/getent.c:83 nss/makedb.c:245 -#: posix/getconf.c:1007 +#: catgets/gencat.c:246 debug/xtrace.sh:64 elf/ldconfig.c:287 +#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:426 +#: iconv/iconvconfig.c:395 locale/programs/locale.c:275 +#: locale/programs/localedef.c:387 login/programs/pt_chown.c:59 +#: malloc/memusage.sh:71 nscd/nscd.c:406 nss/getent.c:83 nss/makedb.c:245 +#: posix/getconf.c:1012 #, c-format msgid "" "Copyright (C) %s Free Software Foundation, Inc.\n" @@ -160,94 +160,94 @@ msgstr "" "INGEN garanti; inte ens för SÄLJBARHET eller LÄMPLIGHET FÖR NÃ…GOT SPECIELLT\n" "ÄNDAMÃ…L.\n" -#: catgets/gencat.c:250 debug/xtrace.sh:68 elf/ldconfig.c:290 elf/sprof.c:361 -#: iconv/iconv_prog.c:430 iconv/iconvconfig.c:399 locale/programs/locale.c:279 -#: locale/programs/localedef.c:391 malloc/memusage.sh:75 nscd/nscd.c:406 -#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1012 +#: catgets/gencat.c:251 debug/xtrace.sh:68 elf/ldconfig.c:292 elf/sprof.c:361 +#: iconv/iconv_prog.c:431 iconv/iconvconfig.c:400 locale/programs/locale.c:280 +#: locale/programs/localedef.c:392 malloc/memusage.sh:75 nscd/nscd.c:411 +#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1017 #, c-format msgid "Written by %s.\n" msgstr "Skrivet av %s.\n" -#: catgets/gencat.c:281 +#: catgets/gencat.c:282 msgid "*standard input*" msgstr "*standard in*" -#: catgets/gencat.c:287 iconv/iconv_charmap.c:157 iconv/iconv_prog.c:297 +#: catgets/gencat.c:288 iconv/iconv_charmap.c:158 iconv/iconv_prog.c:298 #: nss/makedb.c:170 #, c-format msgid "cannot open input file `%s'" msgstr "kan inte öppna infil \"%s\"" -#: catgets/gencat.c:416 catgets/gencat.c:493 +#: catgets/gencat.c:417 catgets/gencat.c:494 msgid "illegal set number" msgstr "otillÃ¥tet tal för mängd" -#: catgets/gencat.c:443 +#: catgets/gencat.c:444 msgid "duplicate set definition" msgstr "dubblerad definition av mängd" -#: catgets/gencat.c:445 catgets/gencat.c:622 catgets/gencat.c:676 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677 msgid "this is the first definition" msgstr "detta är den första definitionen" -#: catgets/gencat.c:521 +#: catgets/gencat.c:522 #, c-format msgid "unknown set `%s'" msgstr "okänd mängd \"%s\"" -#: catgets/gencat.c:562 +#: catgets/gencat.c:563 msgid "invalid quote character" msgstr "ogiltigt citattecken" -#: catgets/gencat.c:575 +#: catgets/gencat.c:576 #, c-format msgid "unknown directive `%s': line ignored" msgstr "okänt direktiv \"%s\": rad ignorerad" -#: catgets/gencat.c:620 +#: catgets/gencat.c:621 msgid "duplicated message number" msgstr "dubblerat meddelandenummer" -#: catgets/gencat.c:673 +#: catgets/gencat.c:674 msgid "duplicated message identifier" msgstr "dubblerad meddelandeidentifierare" -#: catgets/gencat.c:730 +#: catgets/gencat.c:731 msgid "invalid character: message ignored" msgstr "ogiltigt tecken: meddelandet ignorerat" -#: catgets/gencat.c:773 +#: catgets/gencat.c:774 msgid "invalid line" msgstr "ogiltig rad" -#: catgets/gencat.c:827 +#: catgets/gencat.c:828 msgid "malformed line ignored" msgstr "felaktig rad ignorerad" -#: catgets/gencat.c:991 catgets/gencat.c:1032 nss/makedb.c:183 +#: catgets/gencat.c:992 catgets/gencat.c:1033 nss/makedb.c:183 #, c-format msgid "cannot open output file `%s'" msgstr "kan inte öppna utfil \"%s\"" -#: catgets/gencat.c:1194 locale/programs/linereader.c:559 +#: catgets/gencat.c:1195 locale/programs/linereader.c:560 msgid "invalid escape sequence" msgstr "ogiltig kontrollsekvens" -#: catgets/gencat.c:1216 +#: catgets/gencat.c:1217 msgid "unterminated message" msgstr "oavslutat meddelande" -#: catgets/gencat.c:1240 +#: catgets/gencat.c:1241 #, c-format msgid "while opening old catalog file" msgstr "när gammal katalogfil öppnades" -#: catgets/gencat.c:1331 +#: catgets/gencat.c:1332 #, c-format msgid "conversion modules not available" msgstr "konverteringsmoduler inte tillgängliga" -#: catgets/gencat.c:1357 +#: catgets/gencat.c:1358 #, c-format msgid "cannot determine escape character" msgstr "kan inte avgöra kontrolltecken" @@ -284,12 +284,12 @@ msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n" msgstr "Användning: xtrace [FLAGGA]... PROGRAM [PROGRAMFLAGGA}...\\n" #: debug/xtrace.sh:33 -msgid "Try `xtrace --help' for more information.\\n" -msgstr "Försök med \"xtrace --help\" för mer information\\n" +msgid "Try \\`xtrace --help' for more information.\\n" +msgstr "Försök med \\\"xtrace --help\\\" för mer information\\n" #: debug/xtrace.sh:39 -msgid "xtrace: option `$1' requires an argument.\\n" -msgstr "xtrace: flaggan \"$1\" behöver ett argument\\n" +msgid "xtrace: option \\`$1' requires an argument.\\n" +msgstr "xtrace: flaggan \\\"$1\\\" behöver ett argument\\n" #: debug/xtrace.sh:46 msgid "" @@ -323,8 +323,8 @@ msgstr "" "Rapportera fel eller synpunkter pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>.\\n" #: debug/xtrace.sh:125 -msgid "xtrace: unrecognized option `$1'\\n" -msgstr "xtrace: okänd flagga `$1'\\n" +msgid "xtrace: unrecognized option \\`$1'\\n" +msgstr "xtrace: okänd flagga \\\"$1\\\"\\n" #: debug/xtrace.sh:138 msgid "No program name given\\n" @@ -332,19 +332,19 @@ msgstr "Inget programnamn givet\\n" #: debug/xtrace.sh:146 #, sh-format -msgid "executable `$program' not found\\n" -msgstr "program \"$program\" hittades inte\\n" +msgid "executable \\`$program' not found\\n" +msgstr "program \\\"$program\\\" hittades inte\\n" #: debug/xtrace.sh:150 #, sh-format -msgid "`$program' is no executable\\n" -msgstr "`$program' är inte en körbar binär\\n" +msgid "\\`$program' is no executable\\n" +msgstr "\\\"$program\\\" är inte en körbar binär\\n" -#: dlfcn/dlinfo.c:67 +#: dlfcn/dlinfo.c:64 msgid "RTLD_SELF used in code not dynamically loaded" msgstr "RTLD_SELF används i kod som inte är dynamiskt laddad" -#: dlfcn/dlinfo.c:76 +#: dlfcn/dlinfo.c:73 msgid "unsupported dlinfo request" msgstr "dlinfo-begäran som inte stöds" @@ -360,70 +360,69 @@ msgstr "ogiltigt läge" msgid "invalid mode parameter" msgstr "ogiltig lägesparameter" -#: elf/cache.c:67 +#: elf/cache.c:68 msgid "unknown" msgstr "okänt" -#: elf/cache.c:110 +#: elf/cache.c:111 msgid "Unknown OS" msgstr "Okänt OS" -#: elf/cache.c:115 +#: elf/cache.c:116 #, c-format msgid ", OS ABI: %s %d.%d.%d" msgstr ", OS ABI: %s %d.%d.%d" -#: elf/cache.c:141 elf/ldconfig.c:1231 +#: elf/cache.c:142 elf/ldconfig.c:1236 #, c-format msgid "Can't open cache file %s\n" msgstr "Kan inte öppna cache-fil \"%s\"\n" -#: elf/cache.c:153 +#: elf/cache.c:154 #, c-format msgid "mmap of cache file failed.\n" msgstr "minnesmappning av cache-fil misslyckades.\n" -#: elf/cache.c:157 elf/cache.c:167 +#: elf/cache.c:158 elf/cache.c:168 #, c-format msgid "File is not a cache file.\n" msgstr "Filen är inte en cache-fil.\n" -#: elf/cache.c:200 elf/cache.c:210 +#: elf/cache.c:201 elf/cache.c:211 #, c-format msgid "%d libs found in cache `%s'\n" msgstr "%d bibliotek hittades i cache \"%s\"\n" -#: elf/cache.c:409 +#: elf/cache.c:410 #, c-format msgid "Can't remove old temporary cache file %s" msgstr "Kan inte ta bort gammal temporär cache-fil %s" -#: elf/cache.c:416 +#: elf/cache.c:417 #, c-format msgid "Can't create temporary cache file %s" msgstr "Kan inte skapa temporär cache-fil \"%s\"" -#: elf/cache.c:424 elf/cache.c:434 elf/cache.c:438 +#: elf/cache.c:425 elf/cache.c:435 elf/cache.c:439 elf/cache.c:443 #, c-format msgid "Writing of cache data failed" msgstr "Skrivning av cache-data misslyckades" -#: elf/cache.c:442 -#, c-format -msgid "Writing of cache data failed." -msgstr "Skrivning av cache-data misslyckades." - -#: elf/cache.c:449 +#: elf/cache.c:450 #, c-format msgid "Changing access rights of %s to %#o failed" msgstr "Misslyckades med att byta Ã¥tkomsträttigheter för %s till %#o" -#: elf/cache.c:454 +#: elf/cache.c:455 #, c-format msgid "Renaming of %s to %s failed" msgstr "Namnbyte pÃ¥ %s till %s misslyckades" -#: elf/dl-close.c:116 +#: elf/dl-close.c:378 elf/dl-open.c:460 +msgid "cannot create scope list" +msgstr "kan inte skapa omfÃ¥ngslista" + +#: elf/dl-close.c:724 msgid "shared object not open" msgstr "delat objekt är inte öppnat" @@ -431,8 +430,8 @@ msgstr "delat objekt är inte öppnat" msgid "DST not allowed in SUID/SGID programs" msgstr "DST inte tillÃ¥ten i SUID/SGID-program" -#: elf/dl-deps.c:125 -msgid "empty dynamics string token substitution" +#: elf/dl-deps.c:125 elf/dl-open.c:282 +msgid "empty dynamic string token substitution" msgstr "substitution av \"dynamic string token\" är tom" #: elf/dl-deps.c:131 @@ -478,151 +477,151 @@ msgstr "internt fel: symidx är utanför intervallet för fptr-tabellen" msgid "cannot allocate name record" msgstr "kan inte allokera namnpost" -#: elf/dl-load.c:474 elf/dl-load.c:553 elf/dl-load.c:673 elf/dl-load.c:786 +#: elf/dl-load.c:474 elf/dl-load.c:582 elf/dl-load.c:667 elf/dl-load.c:780 msgid "cannot create cache for search path" msgstr "kan inte skapa cache för sökväg" -#: elf/dl-load.c:576 +#: elf/dl-load.c:565 msgid "cannot create RUNPATH/RPATH copy" msgstr "kan inte skapa kopia av RUNPATH/RPATH" -#: elf/dl-load.c:659 +#: elf/dl-load.c:653 msgid "cannot create search path array" msgstr "kan inte skapa sökvägslista" -#: elf/dl-load.c:870 +#: elf/dl-load.c:864 msgid "cannot stat shared object" msgstr "kan inte ta status pÃ¥ delat objekt" -#: elf/dl-load.c:940 +#: elf/dl-load.c:934 msgid "cannot open zero fill device" msgstr "kan inte öppna nollfyllnadsenhet" -#: elf/dl-load.c:985 elf/dl-load.c:2215 +#: elf/dl-load.c:979 elf/dl-load.c:2224 msgid "cannot create shared object descriptor" msgstr "kan inte skapa delad objektdeskriptor" -#: elf/dl-load.c:1004 elf/dl-load.c:1663 elf/dl-load.c:1755 +#: elf/dl-load.c:998 elf/dl-load.c:1656 elf/dl-load.c:1748 msgid "cannot read file data" msgstr "kan inte läsa fildata" -#: elf/dl-load.c:1048 +#: elf/dl-load.c:1042 msgid "ELF load command alignment not page-aligned" msgstr "ELF-laddkommando är inte pÃ¥ sidgräns" -#: elf/dl-load.c:1055 +#: elf/dl-load.c:1049 msgid "ELF load command address/offset not properly aligned" msgstr "Address/position för ELF-laddkommando är inte pÃ¥ rätt bytegräns" -#: elf/dl-load.c:1139 +#: elf/dl-load.c:1132 msgid "cannot allocate TLS data structures for initial thread" msgstr "kan inte skapa TLS-datastrukturer för första trÃ¥den" -#: elf/dl-load.c:1163 +#: elf/dl-load.c:1155 msgid "cannot handle TLS data" msgstr "kan inte hantera TLS-data" -#: elf/dl-load.c:1182 +#: elf/dl-load.c:1174 msgid "object file has no loadable segments" msgstr "objektfilen har inga laddbara segment" -#: elf/dl-load.c:1218 +#: elf/dl-load.c:1210 msgid "failed to map segment from shared object" msgstr "misslyckades att mappa segment frÃ¥n delat objekt" -#: elf/dl-load.c:1242 +#: elf/dl-load.c:1236 msgid "cannot dynamically load executable" msgstr "kan inte ladda exekverbar fil dynamiskt" -#: elf/dl-load.c:1303 +#: elf/dl-load.c:1298 msgid "cannot change memory protections" msgstr "kan inte ändra minnesskydd" -#: elf/dl-load.c:1322 +#: elf/dl-load.c:1317 msgid "cannot map zero-fill pages" msgstr "kan inte mappa nollfyllda sidor" -#: elf/dl-load.c:1336 +#: elf/dl-load.c:1331 msgid "object file has no dynamic section" msgstr "objektfilen har ingen dynamisk sektion" -#: elf/dl-load.c:1359 +#: elf/dl-load.c:1354 msgid "shared object cannot be dlopen()ed" msgstr "delat objekt kan inte göras dlopen() pÃ¥" -#: elf/dl-load.c:1372 +#: elf/dl-load.c:1367 msgid "cannot allocate memory for program header" msgstr "kan inte allokera minne för programhuvud" -#: elf/dl-load.c:1389 elf/dl-open.c:174 +#: elf/dl-load.c:1384 elf/dl-open.c:218 msgid "invalid caller" msgstr "ogiltig anropare" -#: elf/dl-load.c:1428 +#: elf/dl-load.c:1423 msgid "cannot enable executable stack as shared object requires" msgstr "kan inte skapa exekverbar stack som delat objekt kräver" -#: elf/dl-load.c:1443 +#: elf/dl-load.c:1436 msgid "cannot close file descriptor" msgstr "kan inte stänga filidentifierare" -#: elf/dl-load.c:1485 +#: elf/dl-load.c:1478 msgid "cannot create searchlist" msgstr "kan inte skapa söklista" -#: elf/dl-load.c:1663 +#: elf/dl-load.c:1656 msgid "file too short" msgstr "fil för kort" -#: elf/dl-load.c:1692 +#: elf/dl-load.c:1685 msgid "invalid ELF header" msgstr "ogiltigt ELF-huvud" -#: elf/dl-load.c:1704 +#: elf/dl-load.c:1697 msgid "ELF file data encoding not big-endian" msgstr "Kodning för ELF-fildata är inte rak byteordning" -#: elf/dl-load.c:1706 +#: elf/dl-load.c:1699 msgid "ELF file data encoding not little-endian" msgstr "Kodning för ELF-fildata är inte omvänd byteordning" -#: elf/dl-load.c:1710 +#: elf/dl-load.c:1703 msgid "ELF file version ident does not match current one" msgstr "ELF-filens versionsidentitet stämmer inte med nuvarande" -#: elf/dl-load.c:1714 +#: elf/dl-load.c:1707 msgid "ELF file OS ABI invalid" msgstr "ELF-fil har felaktig version pÃ¥ OS-ABI" -#: elf/dl-load.c:1716 +#: elf/dl-load.c:1709 msgid "ELF file ABI version invalid" msgstr "ELF-fil har felaktig version pÃ¥ ABI" -#: elf/dl-load.c:1719 +#: elf/dl-load.c:1712 msgid "internal error" msgstr "internt fel" -#: elf/dl-load.c:1726 +#: elf/dl-load.c:1719 msgid "ELF file version does not match current one" msgstr "ELF-filens version stämmer inte med nuvarande" -#: elf/dl-load.c:1734 +#: elf/dl-load.c:1727 msgid "only ET_DYN and ET_EXEC can be loaded" msgstr "bara ET_DYN och ET_EXEC kan laddas" -#: elf/dl-load.c:1740 +#: elf/dl-load.c:1733 msgid "ELF file's phentsize not the expected size" msgstr "ELF-filens värde pÃ¥ \"phentsize\" är inte den förväntade" -#: elf/dl-load.c:2231 +#: elf/dl-load.c:2240 msgid "wrong ELF class: ELFCLASS64" msgstr "fel ELF-klass: ELFCLASS64" -#: elf/dl-load.c:2232 +#: elf/dl-load.c:2241 msgid "wrong ELF class: ELFCLASS32" msgstr "fel ELF-klass: ELFCLASS32" -#: elf/dl-load.c:2235 +#: elf/dl-load.c:2244 msgid "cannot open shared object file" msgstr "kan inte öppna delad objektfil" @@ -634,69 +633,61 @@ msgstr "fel vid relokering" msgid "symbol lookup error" msgstr "fel vid symboluppslagning" -#: elf/dl-open.c:112 +#: elf/dl-open.c:114 msgid "cannot extend global scope" msgstr "kan inte utöka globalt omrÃ¥de" -#: elf/dl-open.c:237 -msgid "empty dynamic string token substitution" -msgstr "substitution av \"dynamic string token\" är tom" - -#: elf/dl-open.c:406 elf/dl-open.c:417 elf/dl-open.c:425 -msgid "cannot create scope list" -msgstr "kan inte skapa omfÃ¥ngslista" - -#: elf/dl-open.c:470 +#: elf/dl-open.c:512 msgid "TLS generation counter wrapped! Please report this." msgstr "Generationsräknare för TLS slog runt! Var snäll och rapportera detta." -#: elf/dl-open.c:508 +#: elf/dl-open.c:549 msgid "invalid mode for dlopen()" msgstr "ogiltiga flaggor för dlopen()" -#: elf/dl-open.c:525 +#: elf/dl-open.c:566 msgid "no more namespaces available for dlmopen()" msgstr "inga fler namnrymder tillgängliga för dlmopen()" -#: elf/dl-open.c:538 +#: elf/dl-open.c:579 msgid "invalid target namespace in dlmopen()" msgstr "ogiltig mÃ¥lnamnrymd för dlmopen()" -#: elf/dl-reloc.c:55 +#: elf/dl-reloc.c:54 msgid "cannot allocate memory in static TLS block" msgstr "kan inte allokera minne i statiskt TLS-block" -#: elf/dl-reloc.c:198 +#: elf/dl-reloc.c:196 msgid "cannot make segment writable for relocation" msgstr "kan inte göra segment skrivbart för relokering" -#: elf/dl-reloc.c:279 +#: elf/dl-reloc.c:277 #, c-format msgid "%s: no PLTREL found in object %s\n" msgstr "%s: hittade inga PLTREL i objekt %s\n" -#: elf/dl-reloc.c:290 +#: elf/dl-reloc.c:288 #, c-format msgid "%s: out of memory to store relocation results for %s\n" msgstr "%s: slut pÃ¥ minne för att lagra relokeringsresultat för %s\n" -#: elf/dl-reloc.c:306 +#: elf/dl-reloc.c:304 msgid "cannot restore segment prot after reloc" msgstr "kan inte Ã¥terställa segmenträttigheter efter relokering" -#: elf/dl-reloc.c:331 +#: elf/dl-reloc.c:329 msgid "cannot apply additional memory protection after relocation" msgstr "kan inte applicera extra minnesskydd efter relokering" -#: elf/dl-sym.c:98 +#: elf/dl-sym.c:161 msgid "RTLD_NEXT used in code not dynamically loaded" msgstr "RTLD_NEXT används i kod som inte är dynamiskt laddad" -#: elf/dl-sysdep.c:495 +#: elf/dl-sysdep.c:474 elf/dl-sysdep.c:486 msgid "cannot create capability list" msgstr "kan inte skapa egenskapslista" -#: elf/dl-tls.c:829 +#: elf/dl-tls.c:825 msgid "cannot create TLS data structures" msgstr "kan inte skapa datastrukturer för TLS" @@ -704,221 +695,216 @@ msgstr "kan inte skapa datastrukturer för TLS" msgid "cannot allocate version reference table" msgstr "kan inte allokera tabell för versionsreferenser" -#: elf/ldconfig.c:133 +#: elf/ldconfig.c:135 msgid "Print cache" msgstr "Visa cache" -#: elf/ldconfig.c:134 +#: elf/ldconfig.c:136 msgid "Generate verbose messages" msgstr "Använd utförligare meddelanden" -#: elf/ldconfig.c:135 +#: elf/ldconfig.c:137 msgid "Don't build cache" msgstr "Bygg inte cache" -#: elf/ldconfig.c:136 +#: elf/ldconfig.c:138 msgid "Don't generate links" msgstr "Generera inte länkar" -#: elf/ldconfig.c:137 +#: elf/ldconfig.c:139 msgid "Change to and use ROOT as root directory" msgstr "Byt till och använd ROT som rotkatalog" -#: elf/ldconfig.c:137 +#: elf/ldconfig.c:139 msgid "ROOT" msgstr "ROT" -#: elf/ldconfig.c:138 +#: elf/ldconfig.c:140 msgid "CACHE" msgstr "CACHE" -#: elf/ldconfig.c:138 +#: elf/ldconfig.c:140 msgid "Use CACHE as cache file" msgstr "Använd CACHE som cache-fil" -#: elf/ldconfig.c:139 +#: elf/ldconfig.c:141 msgid "CONF" msgstr "CONF" -#: elf/ldconfig.c:139 +#: elf/ldconfig.c:141 msgid "Use CONF as configuration file" msgstr "Använd CONF som konfigurationsfil" -#: elf/ldconfig.c:140 +#: elf/ldconfig.c:142 msgid "Only process directories specified on the command line. Don't build cache." msgstr "Behandla endast kataloger givna som argument. Bygg inte cache." -#: elf/ldconfig.c:141 +#: elf/ldconfig.c:143 msgid "Manually link individual libraries." msgstr "Länka enskilda bibliotek manuellt." -#: elf/ldconfig.c:142 +#: elf/ldconfig.c:144 msgid "FORMAT" msgstr "FORMAT" -#: elf/ldconfig.c:142 +#: elf/ldconfig.c:144 msgid "Format to use: new, old or compat (default)" msgstr "Format att använda: \"new\", \"old\" eller \"compat\" (standardvärde)" -#: elf/ldconfig.c:150 +#: elf/ldconfig.c:152 msgid "Configure Dynamic Linker Run Time Bindings." msgstr "Konfigurera bindningar för den dynamiska länkaren." -#: elf/ldconfig.c:308 +#: elf/ldconfig.c:310 #, c-format msgid "Path `%s' given more than once" msgstr "Sökväg \"%s\" given mer än en gÃ¥ng" -#: elf/ldconfig.c:348 +#: elf/ldconfig.c:350 #, c-format msgid "%s is not a known library type" msgstr "%s är inte en känd bibliotekstyp" -#: elf/ldconfig.c:373 +#: elf/ldconfig.c:375 #, c-format msgid "Can't stat %s" msgstr "Kan inte ta status pÃ¥ %s" -#: elf/ldconfig.c:447 +#: elf/ldconfig.c:449 #, c-format msgid "Can't stat %s\n" msgstr "Kan inte ta status pÃ¥ %s\n" -#: elf/ldconfig.c:457 +#: elf/ldconfig.c:459 #, c-format msgid "%s is not a symbolic link\n" msgstr "%s är inte en symbolisk länk\n" -#: elf/ldconfig.c:476 +#: elf/ldconfig.c:478 #, c-format msgid "Can't unlink %s" msgstr "Kan inte ta bort (unlink) %s" -#: elf/ldconfig.c:482 +#: elf/ldconfig.c:484 #, c-format msgid "Can't link %s to %s" msgstr "Kan inte länka %s till %s" -#: elf/ldconfig.c:488 +#: elf/ldconfig.c:490 msgid " (changed)\n" msgstr " (ändrad)\n" -#: elf/ldconfig.c:490 +#: elf/ldconfig.c:492 msgid " (SKIPPED)\n" msgstr " (HOPPAR ÖVER)\n" -#: elf/ldconfig.c:545 +#: elf/ldconfig.c:547 #, c-format msgid "Can't find %s" msgstr "Kan inte hitta %s" -#: elf/ldconfig.c:561 +#: elf/ldconfig.c:563 elf/ldconfig.c:737 elf/ldconfig.c:784 #, c-format -msgid "Can't lstat %s" -msgstr "Kan inte ta länkstatus pÃ¥ %s" +msgid "Cannot lstat %s" +msgstr "Kan inte ta status (lstat) pÃ¥ %s" -#: elf/ldconfig.c:568 +#: elf/ldconfig.c:570 #, c-format msgid "Ignored file %s since it is not a regular file." msgstr "Ignorerar fil %s eftersom den inte är en vanlig fil" -#: elf/ldconfig.c:576 +#: elf/ldconfig.c:578 #, c-format msgid "No link created since soname could not be found for %s" msgstr "Ingen länk skapad eftersom \"soname\" inte hittades för %s" -#: elf/ldconfig.c:667 +#: elf/ldconfig.c:669 #, c-format msgid "Can't open directory %s" msgstr "Kan inte öppna katalog %s" -#: elf/ldconfig.c:735 elf/ldconfig.c:782 -#, c-format -msgid "Cannot lstat %s" -msgstr "Kan inte ta status (lstat) pÃ¥ %s" - -#: elf/ldconfig.c:747 +#: elf/ldconfig.c:749 #, c-format msgid "Cannot stat %s" msgstr "Kan inte ta status pÃ¥ %s" -#: elf/ldconfig.c:804 elf/readlib.c:90 +#: elf/ldconfig.c:806 elf/readlib.c:91 #, c-format msgid "Input file %s not found.\n" msgstr "Hittar inte infil %s.\n" -#: elf/ldconfig.c:855 +#: elf/ldconfig.c:857 #, c-format msgid "libc5 library %s in wrong directory" msgstr "libc5-bibliotek %s i fel katalog" -#: elf/ldconfig.c:858 +#: elf/ldconfig.c:860 #, c-format msgid "libc6 library %s in wrong directory" msgstr "libc6-bibliotek %s i fel katalog" -#: elf/ldconfig.c:861 +#: elf/ldconfig.c:863 #, c-format msgid "libc4 library %s in wrong directory" msgstr "libc4-bibliotek %s i fel katalog" -#: elf/ldconfig.c:888 +#: elf/ldconfig.c:890 #, c-format msgid "libraries %s and %s in directory %s have same soname but different type." msgstr "bibliotek %s och %s i katalog %s har samma \"soname\" men olika typ." -#: elf/ldconfig.c:995 +#: elf/ldconfig.c:997 #, c-format msgid "Can't open configuration file %s" msgstr "Kan inte öppna konfigurationsfil %s" -#: elf/ldconfig.c:1059 +#: elf/ldconfig.c:1061 #, c-format msgid "%s:%u: bad syntax in hwcap line" msgstr "%s:%u: ogiltig syntax pÃ¥ hwcap-raden" -#: elf/ldconfig.c:1065 +#: elf/ldconfig.c:1067 #, c-format msgid "%s:%u: hwcap index %lu above maximum %u" msgstr "%s:%u: hwcap-index %lu är större än maximum %u" -#: elf/ldconfig.c:1072 elf/ldconfig.c:1080 +#: elf/ldconfig.c:1074 elf/ldconfig.c:1082 #, c-format msgid "%s:%u: hwcap index %lu already defined as %s" msgstr "%s:%u: hwcap-index %lu redan definierat som %s" -#: elf/ldconfig.c:1083 +#: elf/ldconfig.c:1085 #, c-format msgid "%s:%u: duplicate hwcap %lu %s" msgstr "%s:%u: duplicerad hwcap %lu %s" -#: elf/ldconfig.c:1105 +#: elf/ldconfig.c:1107 #, c-format msgid "need absolute file name for configuration file when using -r" msgstr "behöver absolut filnamn för konfigurationsfil när -r används" -#: elf/ldconfig.c:1112 locale/programs/xmalloc.c:69 malloc/obstack.c:434 -#: malloc/obstack.c:436 posix/getconf.c:980 posix/getconf.c:1158 +#: elf/ldconfig.c:1114 locale/programs/xmalloc.c:70 malloc/obstack.c:434 +#: malloc/obstack.c:436 posix/getconf.c:985 posix/getconf.c:1163 #, c-format msgid "memory exhausted" msgstr "minne slut" -#: elf/ldconfig.c:1142 +#: elf/ldconfig.c:1144 #, c-format msgid "%s:%u: cannot read directory %s" msgstr "%s:%u: kan inte läsa katalog %s" -#: elf/ldconfig.c:1182 +#: elf/ldconfig.c:1189 #, c-format msgid "relative path `%s' used to build cache" msgstr "relativ sökväg \"%s\" använd för att bygga cache" -#: elf/ldconfig.c:1210 +#: elf/ldconfig.c:1215 #, c-format msgid "Can't chdir to /" msgstr "Kan inte byta katalog till /" -#: elf/ldconfig.c:1252 +#: elf/ldconfig.c:1257 #, c-format msgid "Can't open cache file directory %s\n" msgstr "Kan inte läsa cache-filkatalog \"%s\"\n" @@ -951,16 +937,16 @@ msgstr "" "Rapportera fel eller synpunkter pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>." #: elf/ldd.bash.in:80 -msgid "ldd: option `$1' is ambiguous" -msgstr "ldd: flaggan \"$1\" är tvetydig" +msgid "ldd: option \\`$1' is ambiguous" +msgstr "ldd: flaggan \\\"$1\\\" är tvetydig" #: elf/ldd.bash.in:87 msgid "unrecognized option" msgstr "okänd flagga" #: elf/ldd.bash.in:88 elf/ldd.bash.in:126 -msgid "Try `ldd --help' for more information." -msgstr "Försök med \"ldd --help\" för mer information" +msgid "Try \\`ldd --help' for more information." +msgstr "Försök med \\\"ldd --help\\\" för mer information" #: elf/ldd.bash.in:125 msgid "missing file arguments" @@ -1023,27 +1009,27 @@ msgstr "%s är inte en delad objektfil (typ: %d).\n" msgid "more than one dynamic segment\n" msgstr "fler än ett dynamiskt segment\n" -#: elf/readlib.c:96 +#: elf/readlib.c:97 #, c-format msgid "Cannot fstat file %s.\n" msgstr "Kan inte ta status (fstat) pÃ¥ fil %s.\n" -#: elf/readlib.c:107 +#: elf/readlib.c:108 #, c-format msgid "File %s is empty, not checked." msgstr "Fil %s är tom, inte kontrollerad." -#: elf/readlib.c:113 +#: elf/readlib.c:114 #, c-format msgid "File %s is too small, not checked." msgstr "Fil %s är för liten, inte kontrollerad." -#: elf/readlib.c:123 +#: elf/readlib.c:124 #, c-format msgid "Cannot mmap file %s.\n" msgstr "Kan inte minnesmappa (mmap) fil %s.\n" -#: elf/readlib.c:161 +#: elf/readlib.c:162 #, c-format msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n" msgstr "%s är inte en ELF-fil, den har inte rätt magiskt tal i början.\n" @@ -1066,10 +1052,10 @@ msgstr "generera anropsgraf" #: elf/sprof.c:89 msgid "" -"Read and display shared object profiling data.For bug reporting instructions, please see:\n" +"Read and display shared object profiling data.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" -"Läs och visa profildata för delat objekt.För felrapporteringsinstruktioner, se:\n" +"Läs och visa profildata för delat objekt.\vFör felrapporteringsinstruktioner, se:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" "Rapportera fel eller synpunkter pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>.\n" @@ -1167,136 +1153,136 @@ msgstr "\"%s\" är inte en korrekt profildatafil för \"%s\"" msgid "cannot allocate symbol data" msgstr "kan inte allokera symboldata" -#: iconv/iconv_charmap.c:175 iconv/iconv_prog.c:315 +#: iconv/iconv_charmap.c:176 iconv/iconv_prog.c:316 #, c-format msgid "error while closing input `%s'" msgstr "fel vid stängning av indata \"%s\"" -#: iconv/iconv_charmap.c:449 +#: iconv/iconv_charmap.c:450 #, c-format msgid "illegal input sequence at position %Zd" msgstr "otillÃ¥ten indatasekvens vid position %Zd" -#: iconv/iconv_charmap.c:468 iconv/iconv_prog.c:525 +#: iconv/iconv_charmap.c:469 iconv/iconv_prog.c:526 #, c-format msgid "incomplete character or shift sequence at end of buffer" msgstr "ofullständigt tecken eller skift-sekvens i slutet pÃ¥ buffert" -#: iconv/iconv_charmap.c:513 iconv/iconv_charmap.c:549 iconv/iconv_prog.c:568 -#: iconv/iconv_prog.c:604 +#: iconv/iconv_charmap.c:514 iconv/iconv_charmap.c:550 iconv/iconv_prog.c:569 +#: iconv/iconv_prog.c:605 #, c-format msgid "error while reading the input" msgstr "fel när indata lästes" -#: iconv/iconv_charmap.c:531 iconv/iconv_prog.c:586 +#: iconv/iconv_charmap.c:532 iconv/iconv_prog.c:587 #, c-format msgid "unable to allocate buffer for input" msgstr "kan inte allokera buffert för indata" -#: iconv/iconv_prog.c:59 +#: iconv/iconv_prog.c:60 msgid "Input/Output format specification:" msgstr "In/ut formatspecifikation:" -#: iconv/iconv_prog.c:60 +#: iconv/iconv_prog.c:61 msgid "encoding of original text" msgstr "kodning av originaltexten" -#: iconv/iconv_prog.c:61 +#: iconv/iconv_prog.c:62 msgid "encoding for output" msgstr "kodning för resultatet" -#: iconv/iconv_prog.c:62 +#: iconv/iconv_prog.c:63 msgid "Information:" msgstr "Information:" -#: iconv/iconv_prog.c:63 +#: iconv/iconv_prog.c:64 msgid "list all known coded character sets" msgstr "visa alla kända teckenuppsättningar" -#: iconv/iconv_prog.c:64 locale/programs/localedef.c:126 +#: iconv/iconv_prog.c:65 locale/programs/localedef.c:127 msgid "Output control:" msgstr "Val av utdata:" -#: iconv/iconv_prog.c:65 +#: iconv/iconv_prog.c:66 msgid "omit invalid characters from output" msgstr "visa inte ogiltiga tecken i utdata" -#: iconv/iconv_prog.c:66 +#: iconv/iconv_prog.c:67 msgid "output file" msgstr "resultatfil" -#: iconv/iconv_prog.c:67 +#: iconv/iconv_prog.c:68 msgid "suppress warnings" msgstr "utelämna varningar" -#: iconv/iconv_prog.c:68 +#: iconv/iconv_prog.c:69 msgid "print progress information" msgstr "skriv information om körning" -#: iconv/iconv_prog.c:73 +#: iconv/iconv_prog.c:74 msgid "Convert encoding of given files from one encoding to another." msgstr "Konvertera kodning i angivna infiler frÃ¥n en kodning till en annan." -#: iconv/iconv_prog.c:77 +#: iconv/iconv_prog.c:78 msgid "[FILE...]" msgstr "[FIL...]" -#: iconv/iconv_prog.c:199 +#: iconv/iconv_prog.c:200 #, c-format msgid "cannot open output file" msgstr "kan inte öppna utfil" -#: iconv/iconv_prog.c:241 +#: iconv/iconv_prog.c:242 #, c-format msgid "conversions from `%s' and to `%s' are not supported" msgstr "konvertering frÃ¥n \"%s\" och till \"%s\" stöds ej" -#: iconv/iconv_prog.c:246 +#: iconv/iconv_prog.c:247 #, c-format msgid "conversion from `%s' is not supported" msgstr "konvertering frÃ¥n \"%s\" stöds ej" -#: iconv/iconv_prog.c:253 +#: iconv/iconv_prog.c:254 #, c-format msgid "conversion to `%s' is not supported" msgstr "konvertering till \"%s\" stöds ej" -#: iconv/iconv_prog.c:257 +#: iconv/iconv_prog.c:258 #, c-format msgid "conversion from `%s' to `%s' is not supported" msgstr "konvertering frÃ¥n \"%s\" till \"%s\" stöds ej" -#: iconv/iconv_prog.c:267 +#: iconv/iconv_prog.c:268 #, c-format msgid "failed to start conversion processing" msgstr "misslyckades att starta konverteringsprocessen" -#: iconv/iconv_prog.c:361 +#: iconv/iconv_prog.c:362 #, c-format msgid "error while closing output file" msgstr "fel vid stängning av utfilen" -#: iconv/iconv_prog.c:470 iconv/iconv_prog.c:496 +#: iconv/iconv_prog.c:471 iconv/iconv_prog.c:497 #, c-format msgid "conversion stopped due to problem in writing the output" msgstr "konvertering avslutades pÃ¥ grund av problem med att skriva resultatet" -#: iconv/iconv_prog.c:521 +#: iconv/iconv_prog.c:522 #, c-format msgid "illegal input sequence at position %ld" msgstr "otillÃ¥ten indatasekvens vid position %ld" -#: iconv/iconv_prog.c:529 +#: iconv/iconv_prog.c:530 #, c-format msgid "internal error (illegal descriptor)" msgstr "internt fel (otillÃ¥ten deskriptor)" -#: iconv/iconv_prog.c:532 +#: iconv/iconv_prog.c:533 #, c-format msgid "unknown iconv() error %d" msgstr "okänt fel frÃ¥n iconv() %d" -#: iconv/iconv_prog.c:778 +#: iconv/iconv_prog.c:779 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" @@ -1312,42 +1298,42 @@ msgstr "" "\n" " " -#: iconv/iconvconfig.c:109 +#: iconv/iconvconfig.c:110 msgid "Create fastloading iconv module configuration file." msgstr "Skapa en snabbladdande modulkonfigurationsfil för iconv." -#: iconv/iconvconfig.c:113 +#: iconv/iconvconfig.c:114 msgid "[DIR...]" msgstr "[KATALOG...]" -#: iconv/iconvconfig.c:126 +#: iconv/iconvconfig.c:127 msgid "Prefix used for all file accesses" msgstr "Prefix att använda för alla filÃ¥tkomster" -#: iconv/iconvconfig.c:127 +#: iconv/iconvconfig.c:128 msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)" msgstr "Spara utdata i FIL istället för installationsplatsen (--prefix gäller inte för FIL)" -#: iconv/iconvconfig.c:131 +#: iconv/iconvconfig.c:132 msgid "Do not search standard directories, only those on the command line" msgstr "Sök inte i standardkatalogerna, bara i de som ges pÃ¥ kommandoraden" -#: iconv/iconvconfig.c:300 +#: iconv/iconvconfig.c:301 #, c-format msgid "Directory arguments required when using --nostdlib" msgstr "Katalogargument krävs när --nostdlib används" -#: iconv/iconvconfig.c:342 locale/programs/localedef.c:290 +#: iconv/iconvconfig.c:343 locale/programs/localedef.c:291 #, c-format msgid "no output file produced because warnings were issued" msgstr "ingen utfil skapad pÃ¥ grund av varningar" -#: iconv/iconvconfig.c:428 +#: iconv/iconvconfig.c:429 #, c-format msgid "while inserting in search tree" msgstr "vid insättning i sökträd" -#: iconv/iconvconfig.c:1236 +#: iconv/iconvconfig.c:1238 #, c-format msgid "cannot generate output file" msgstr "kan inte generera utfil" @@ -1438,992 +1424,971 @@ msgstr "Okänt .netrc-nyckelord %s" msgid "Character out of range for UTF-8" msgstr "Tecken utanför intervallet för UTF-8" -#: locale/programs/charmap-dir.c:57 +#: locale/programs/charmap-dir.c:58 #, c-format msgid "cannot read character map directory `%s'" msgstr "kan inte läsa teckenuppsättningskatalog \"%s\"" -#: locale/programs/charmap.c:137 +#: locale/programs/charmap.c:138 #, c-format msgid "character map file `%s' not found" msgstr "teckenuppsättningsfil \"%s\" finns inte" -#: locale/programs/charmap.c:194 +#: locale/programs/charmap.c:195 #, c-format msgid "default character map file `%s' not found" msgstr "standardteckenuppsättningsfil \"%s\" finns inte" -#: locale/programs/charmap.c:257 +#: locale/programs/charmap.c:258 #, c-format msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n" msgstr "teckenuppsättning \"%s\" är inte ASCII-kompatibel, lokal är inte ISO C-kompatibel\n" -#: locale/programs/charmap.c:336 +#: locale/programs/charmap.c:337 #, c-format msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n" msgstr "%s: <mb_cur_max> mÃ¥ste vara större än <mb_cur_min>\n" -#: locale/programs/charmap.c:356 locale/programs/charmap.c:373 -#: locale/programs/repertoire.c:174 +#: locale/programs/charmap.c:357 locale/programs/charmap.c:374 +#: locale/programs/repertoire.c:175 #, c-format msgid "syntax error in prolog: %s" msgstr "syntaxfel i prolog: %s" -#: locale/programs/charmap.c:357 +#: locale/programs/charmap.c:358 msgid "invalid definition" msgstr "ogiltig definition" -#: locale/programs/charmap.c:374 locale/programs/locfile.c:125 -#: locale/programs/locfile.c:152 locale/programs/repertoire.c:175 +#: locale/programs/charmap.c:375 locale/programs/locfile.c:126 +#: locale/programs/locfile.c:153 locale/programs/repertoire.c:176 msgid "bad argument" msgstr "dÃ¥ligt argument" -#: locale/programs/charmap.c:402 +#: locale/programs/charmap.c:403 #, c-format msgid "duplicate definition of <%s>" msgstr "dubblerad definition av <%s>" -#: locale/programs/charmap.c:409 +#: locale/programs/charmap.c:410 #, c-format msgid "value for <%s> must be 1 or greater" msgstr "värdet pÃ¥ <%s> mÃ¥ste vara 1 eller större" -#: locale/programs/charmap.c:421 +#: locale/programs/charmap.c:422 #, c-format msgid "value of <%s> must be greater or equal than the value of <%s>" msgstr "värdet pÃ¥ <%s> mÃ¥ste vara större eller lika med värdet pÃ¥ <%s>" -#: locale/programs/charmap.c:444 locale/programs/repertoire.c:183 +#: locale/programs/charmap.c:445 locale/programs/repertoire.c:184 #, c-format msgid "argument to <%s> must be a single character" msgstr "argumentet till <%s> mÃ¥ste vara ett enskilt tecken" -#: locale/programs/charmap.c:470 +#: locale/programs/charmap.c:471 msgid "character sets with locking states are not supported" msgstr "teckenuppsättningar med lÃ¥sta tillstÃ¥nd stöds ej" -#: 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 +#: locale/programs/charmap.c:498 locale/programs/charmap.c:552 +#: locale/programs/charmap.c:584 locale/programs/charmap.c:678 +#: locale/programs/charmap.c:733 locale/programs/charmap.c:774 +#: locale/programs/charmap.c:815 #, c-format msgid "syntax error in %s definition: %s" msgstr "syntaxfel i definition av %s: %s" -#: locale/programs/charmap.c:498 locale/programs/charmap.c:678 -#: locale/programs/charmap.c:774 locale/programs/repertoire.c:230 +#: locale/programs/charmap.c:499 locale/programs/charmap.c:679 +#: locale/programs/charmap.c:775 locale/programs/repertoire.c:231 msgid "no symbolic name given" msgstr "inget symboliskt namn givet" -#: locale/programs/charmap.c:552 +#: locale/programs/charmap.c:553 msgid "invalid encoding given" msgstr "ogiltig kodning given" -#: locale/programs/charmap.c:561 +#: locale/programs/charmap.c:562 msgid "too few bytes in character encoding" msgstr "för fÃ¥ byte i teckenkodning" -#: locale/programs/charmap.c:563 +#: locale/programs/charmap.c:564 msgid "too many bytes in character encoding" msgstr "för mÃ¥nga tecken i teckenkodning" -#: locale/programs/charmap.c:585 locale/programs/charmap.c:733 -#: locale/programs/charmap.c:816 locale/programs/repertoire.c:296 +#: locale/programs/charmap.c:586 locale/programs/charmap.c:734 +#: locale/programs/charmap.c:817 locale/programs/repertoire.c:297 msgid "no symbolic name given for end of range" msgstr "inget symboliskt namn givet för slutet av intervallet" -#: locale/programs/charmap.c:609 locale/programs/locfile.c:818 -#: locale/programs/repertoire.c:313 +#: locale/programs/charmap.c:610 locale/programs/ld-address.c:600 +#: locale/programs/ld-collate.c:2677 locale/programs/ld-collate.c:3828 +#: locale/programs/ld-ctype.c:2232 locale/programs/ld-ctype.c:2984 +#: locale/programs/ld-identification.c:452 +#: locale/programs/ld-measurement.c:238 locale/programs/ld-messages.c:332 +#: locale/programs/ld-monetary.c:943 locale/programs/ld-name.c:307 +#: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:241 +#: locale/programs/ld-telephone.c:313 locale/programs/ld-time.c:1221 +#: locale/programs/repertoire.c:314 #, c-format -msgid "`%1$s' definition does not end with `END %1$s'" -msgstr "definition av \"%1$s\" slutar inte med \"END %1$s\"" +msgid "%1$s: definition does not end with `END %1$s'" +msgstr "%1$s: definition slutar inte med \"END %1$s\"" -#: locale/programs/charmap.c:642 +#: locale/programs/charmap.c:643 msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" msgstr "endast definition av \"WIDTH\" fÃ¥r komma efter definitionen av \"CHARMAP\"" -#: locale/programs/charmap.c:650 locale/programs/charmap.c:713 +#: locale/programs/charmap.c:651 locale/programs/charmap.c:714 #, c-format msgid "value for %s must be an integer" msgstr "värdet pÃ¥ %s mÃ¥ste vara heltal" -#: locale/programs/charmap.c:841 +#: locale/programs/charmap.c:842 #, c-format msgid "%s: error in state machine" msgstr "%s: fel i tillstÃ¥ndsmaskin" -#: locale/programs/charmap.c:849 locale/programs/ld-address.c:615 -#: locale/programs/ld-collate.c:2650 locale/programs/ld-collate.c:3820 -#: locale/programs/ld-ctype.c:2224 locale/programs/ld-ctype.c:2996 -#: locale/programs/ld-identification.c:467 -#: locale/programs/ld-measurement.c:253 locale/programs/ld-messages.c:347 -#: locale/programs/ld-monetary.c:956 locale/programs/ld-name.c:322 -#: locale/programs/ld-numeric.c:383 locale/programs/ld-paper.c:256 -#: locale/programs/ld-telephone.c:328 locale/programs/ld-time.c:1236 -#: locale/programs/locfile.c:825 locale/programs/repertoire.c:324 +#: locale/programs/charmap.c:850 locale/programs/ld-address.c:616 +#: locale/programs/ld-collate.c:2674 locale/programs/ld-collate.c:3844 +#: locale/programs/ld-ctype.c:2229 locale/programs/ld-ctype.c:3001 +#: locale/programs/ld-identification.c:468 +#: locale/programs/ld-measurement.c:254 locale/programs/ld-messages.c:348 +#: locale/programs/ld-monetary.c:959 locale/programs/ld-name.c:323 +#: locale/programs/ld-numeric.c:384 locale/programs/ld-paper.c:257 +#: locale/programs/ld-telephone.c:329 locale/programs/ld-time.c:1237 +#: locale/programs/locfile.c:826 locale/programs/repertoire.c:325 #, c-format msgid "%s: premature end of file" msgstr "%s: för tidigt filslut" -#: locale/programs/charmap.c:868 locale/programs/charmap.c:879 +#: locale/programs/charmap.c:869 locale/programs/charmap.c:880 #, c-format msgid "unknown character `%s'" msgstr "okänt tecken \"%s\"" -#: locale/programs/charmap.c:887 +#: locale/programs/charmap.c:888 #, c-format msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d" msgstr "" "antal byte för bytesekvens angivet i början respektive slutet av intervallet\n" "skiljer sig: %d respektive %d" -#: locale/programs/charmap.c:992 locale/programs/ld-collate.c:2933 -#: locale/programs/repertoire.c:419 +#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:2957 +#: locale/programs/repertoire.c:420 msgid "invalid names for character range" msgstr "ogiltiga namn för teckenintervall" -#: locale/programs/charmap.c:1004 locale/programs/repertoire.c:431 +#: locale/programs/charmap.c:1005 locale/programs/repertoire.c:432 msgid "hexadecimal range format should use only capital characters" msgstr "hexadecimalt intervallformat bör endast använda versaler" -#: locale/programs/charmap.c:1022 +#: locale/programs/charmap.c:1023 locale/programs/repertoire.c:450 #, c-format -msgid "<%s> and <%s> are illegal names for range" -msgstr "<%s> och <%s> är otillÃ¥tna namn för intervall" +msgid "<%s> and <%s> are invalid names for range" +msgstr "<%s> och <%s> är ogiltiga namn för intervall" -#: locale/programs/charmap.c:1028 -msgid "upper limit in range is not higher then lower limit" -msgstr "övre gräns i intervall är inte större än undre gräns" +#: locale/programs/charmap.c:1029 locale/programs/repertoire.c:457 +msgid "upper limit in range is smaller than lower limit" +msgstr "övre gräns i intervall är mindre än undre gräns" -#: locale/programs/charmap.c:1086 +#: locale/programs/charmap.c:1087 msgid "resulting bytes for range not representable." msgstr "resulterande byte för intervall är inte representerbara." -#: locale/programs/ld-address.c:132 locale/programs/ld-collate.c:1532 -#: locale/programs/ld-ctype.c:419 locale/programs/ld-identification.c:132 -#: locale/programs/ld-measurement.c:93 locale/programs/ld-messages.c:96 -#: locale/programs/ld-monetary.c:192 locale/programs/ld-name.c:93 -#: locale/programs/ld-numeric.c:97 locale/programs/ld-paper.c:90 -#: locale/programs/ld-telephone.c:93 locale/programs/ld-time.c:158 +#: locale/programs/ld-address.c:133 locale/programs/ld-collate.c:1536 +#: locale/programs/ld-ctype.c:420 locale/programs/ld-identification.c:133 +#: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97 +#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:94 +#: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91 +#: locale/programs/ld-telephone.c:94 locale/programs/ld-time.c:159 #, c-format msgid "No definition for %s category found" msgstr "Hittade ingen definition för kategori %s" -#: locale/programs/ld-address.c:143 locale/programs/ld-address.c:181 -#: locale/programs/ld-address.c:199 locale/programs/ld-address.c:228 -#: locale/programs/ld-address.c:300 locale/programs/ld-address.c:319 -#: locale/programs/ld-address.c:332 locale/programs/ld-identification.c:145 -#: locale/programs/ld-measurement.c:104 locale/programs/ld-monetary.c:204 -#: locale/programs/ld-monetary.c:248 locale/programs/ld-monetary.c:264 -#: locale/programs/ld-monetary.c:276 locale/programs/ld-name.c:104 -#: locale/programs/ld-name.c:141 locale/programs/ld-numeric.c:111 -#: locale/programs/ld-numeric.c:125 locale/programs/ld-paper.c:101 -#: locale/programs/ld-paper.c:110 locale/programs/ld-telephone.c:104 -#: locale/programs/ld-telephone.c:161 locale/programs/ld-time.c:174 -#: locale/programs/ld-time.c:195 +#: locale/programs/ld-address.c:144 locale/programs/ld-address.c:182 +#: locale/programs/ld-address.c:200 locale/programs/ld-address.c:229 +#: locale/programs/ld-address.c:301 locale/programs/ld-address.c:320 +#: locale/programs/ld-address.c:333 locale/programs/ld-identification.c:146 +#: locale/programs/ld-measurement.c:105 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:105 +#: locale/programs/ld-name.c:142 locale/programs/ld-numeric.c:112 +#: locale/programs/ld-numeric.c:126 locale/programs/ld-paper.c:102 +#: locale/programs/ld-paper.c:111 locale/programs/ld-telephone.c:105 +#: locale/programs/ld-telephone.c:162 locale/programs/ld-time.c:175 +#: locale/programs/ld-time.c:196 #, c-format msgid "%s: field `%s' not defined" msgstr "%s: fält \"%s\" är inte definierat" -#: locale/programs/ld-address.c:155 locale/programs/ld-address.c:207 -#: locale/programs/ld-address.c:237 locale/programs/ld-address.c:275 -#: locale/programs/ld-name.c:116 locale/programs/ld-telephone.c:116 +#: locale/programs/ld-address.c:156 locale/programs/ld-address.c:208 +#: locale/programs/ld-address.c:238 locale/programs/ld-address.c:276 +#: locale/programs/ld-name.c:117 locale/programs/ld-telephone.c:117 #, c-format msgid "%s: field `%s' must not be empty" msgstr "%s: fält \"%s\" fÃ¥r inte vara tomt" -#: locale/programs/ld-address.c:167 +#: locale/programs/ld-address.c:168 #, c-format msgid "%s: invalid escape `%%%c' sequence in field `%s'" msgstr "%s: ogiltig kontrollsekvens \"%%%c\" i fält \"%s\" " -#: locale/programs/ld-address.c:218 +#: locale/programs/ld-address.c:219 #, c-format msgid "%s: terminology language code `%s' not defined" msgstr "%s: terminologisprÃ¥kkod \"%s\" inte definierad" -#: locale/programs/ld-address.c:243 +#: locale/programs/ld-address.c:244 #, c-format msgid "%s: field `%s' must not be defined" msgstr "%s: fält \"%s\" fÃ¥r inte definieras" -#: locale/programs/ld-address.c:257 locale/programs/ld-address.c:286 +#: locale/programs/ld-address.c:258 locale/programs/ld-address.c:287 #, c-format msgid "%s: language abbreviation `%s' not defined" msgstr "%s: sprÃ¥kförkortning \"%s\" inte definierad" -#: locale/programs/ld-address.c:264 locale/programs/ld-address.c:292 -#: locale/programs/ld-address.c:326 locale/programs/ld-address.c:338 +#: locale/programs/ld-address.c:265 locale/programs/ld-address.c:293 +#: locale/programs/ld-address.c:327 locale/programs/ld-address.c:339 #, c-format msgid "%s: `%s' value does not match `%s' value" msgstr "%s: värdet pÃ¥ \"%s\" stämmer inte med värdet pÃ¥ \"%s\"" -#: locale/programs/ld-address.c:311 +#: locale/programs/ld-address.c:312 #, c-format msgid "%s: numeric country code `%d' not valid" msgstr "%s: numerisk landkod \"%d\" är inte giltig" -#: locale/programs/ld-address.c:507 locale/programs/ld-address.c:544 -#: locale/programs/ld-address.c:582 locale/programs/ld-ctype.c:2603 -#: locale/programs/ld-identification.c:363 -#: locale/programs/ld-measurement.c:220 locale/programs/ld-messages.c:300 -#: locale/programs/ld-monetary.c:698 locale/programs/ld-monetary.c:733 -#: locale/programs/ld-monetary.c:774 locale/programs/ld-name.c:279 -#: locale/programs/ld-numeric.c:262 locale/programs/ld-paper.c:223 -#: locale/programs/ld-telephone.c:287 locale/programs/ld-time.c:1125 -#: locale/programs/ld-time.c:1167 +#: locale/programs/ld-address.c:508 locale/programs/ld-address.c:545 +#: locale/programs/ld-address.c:583 locale/programs/ld-ctype.c:2608 +#: locale/programs/ld-identification.c:364 +#: locale/programs/ld-measurement.c:221 locale/programs/ld-messages.c:301 +#: locale/programs/ld-monetary.c:701 locale/programs/ld-monetary.c:736 +#: locale/programs/ld-monetary.c:777 locale/programs/ld-name.c:280 +#: locale/programs/ld-numeric.c:263 locale/programs/ld-paper.c:224 +#: locale/programs/ld-telephone.c:288 locale/programs/ld-time.c:1126 +#: locale/programs/ld-time.c:1168 #, c-format msgid "%s: field `%s' declared more than once" msgstr "%s: fält \"%s\" är deklarerad mer än en gÃ¥ng" -#: locale/programs/ld-address.c:511 locale/programs/ld-address.c:549 -#: locale/programs/ld-identification.c:367 locale/programs/ld-messages.c:310 -#: locale/programs/ld-monetary.c:702 locale/programs/ld-monetary.c:737 -#: locale/programs/ld-name.c:283 locale/programs/ld-numeric.c:266 -#: locale/programs/ld-telephone.c:291 locale/programs/ld-time.c:1019 -#: locale/programs/ld-time.c:1088 locale/programs/ld-time.c:1130 +#: locale/programs/ld-address.c:512 locale/programs/ld-address.c:550 +#: locale/programs/ld-identification.c:368 locale/programs/ld-messages.c:311 +#: locale/programs/ld-monetary.c:705 locale/programs/ld-monetary.c:740 +#: locale/programs/ld-name.c:284 locale/programs/ld-numeric.c:267 +#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:1020 +#: locale/programs/ld-time.c:1089 locale/programs/ld-time.c:1131 #, c-format msgid "%s: unknown character in field `%s'" msgstr "%s: okänt tecken i fält \"%s\"" -#: locale/programs/ld-address.c:596 locale/programs/ld-collate.c:3802 -#: locale/programs/ld-ctype.c:2976 locale/programs/ld-identification.c:448 -#: locale/programs/ld-measurement.c:234 locale/programs/ld-messages.c:329 -#: locale/programs/ld-monetary.c:938 locale/programs/ld-name.c:304 -#: locale/programs/ld-numeric.c:365 locale/programs/ld-paper.c:238 -#: locale/programs/ld-telephone.c:310 locale/programs/ld-time.c:1218 +#: locale/programs/ld-address.c:597 locale/programs/ld-collate.c:3826 +#: locale/programs/ld-ctype.c:2981 locale/programs/ld-identification.c:449 +#: locale/programs/ld-measurement.c:235 locale/programs/ld-messages.c:330 +#: locale/programs/ld-monetary.c:941 locale/programs/ld-name.c:305 +#: locale/programs/ld-numeric.c:366 locale/programs/ld-paper.c:239 +#: locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1219 #, c-format msgid "%s: incomplete `END' line" msgstr "%s: ofullständig \"END\"-rad" -#: locale/programs/ld-address.c:599 locale/programs/ld-collate.c:2653 -#: locale/programs/ld-collate.c:3804 locale/programs/ld-ctype.c:2227 -#: locale/programs/ld-ctype.c:2979 locale/programs/ld-identification.c:451 -#: locale/programs/ld-measurement.c:237 locale/programs/ld-messages.c:331 -#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:306 -#: locale/programs/ld-numeric.c:367 locale/programs/ld-paper.c:240 -#: locale/programs/ld-telephone.c:312 locale/programs/ld-time.c:1220 -#, c-format -msgid "%1$s: definition does not end with `END %1$s'" -msgstr "%1$s: definition slutar inte med \"END %1$s\"" - -#: locale/programs/ld-address.c:606 locale/programs/ld-collate.c:521 -#: locale/programs/ld-collate.c:573 locale/programs/ld-collate.c:869 -#: locale/programs/ld-collate.c:882 locale/programs/ld-collate.c:2640 -#: locale/programs/ld-collate.c:3811 locale/programs/ld-ctype.c:1955 -#: locale/programs/ld-ctype.c:2214 locale/programs/ld-ctype.c:2801 -#: locale/programs/ld-ctype.c:2987 locale/programs/ld-identification.c:458 -#: locale/programs/ld-measurement.c:244 locale/programs/ld-messages.c:338 -#: locale/programs/ld-monetary.c:947 locale/programs/ld-name.c:313 -#: locale/programs/ld-numeric.c:374 locale/programs/ld-paper.c:247 -#: locale/programs/ld-telephone.c:319 locale/programs/ld-time.c:1227 +#: locale/programs/ld-address.c:607 locale/programs/ld-collate.c:522 +#: locale/programs/ld-collate.c:574 locale/programs/ld-collate.c:870 +#: locale/programs/ld-collate.c:883 locale/programs/ld-collate.c:2664 +#: locale/programs/ld-collate.c:3835 locale/programs/ld-ctype.c:1960 +#: locale/programs/ld-ctype.c:2219 locale/programs/ld-ctype.c:2806 +#: locale/programs/ld-ctype.c:2992 locale/programs/ld-identification.c:459 +#: locale/programs/ld-measurement.c:245 locale/programs/ld-messages.c:339 +#: locale/programs/ld-monetary.c:950 locale/programs/ld-name.c:314 +#: locale/programs/ld-numeric.c:375 locale/programs/ld-paper.c:248 +#: locale/programs/ld-telephone.c:320 locale/programs/ld-time.c:1228 #, c-format msgid "%s: syntax error" msgstr "%s: syntaxfel" -#: locale/programs/ld-collate.c:396 +#: locale/programs/ld-collate.c:397 #, c-format msgid "`%.*s' already defined in charmap" msgstr "\"%.*s\" redan definerad i teckenuppsättning" -#: locale/programs/ld-collate.c:405 +#: locale/programs/ld-collate.c:406 #, c-format msgid "`%.*s' already defined in repertoire" msgstr "\"%.*s\" redan definierad i repertoar" -#: locale/programs/ld-collate.c:412 +#: locale/programs/ld-collate.c:413 #, c-format msgid "`%.*s' already defined as collating symbol" msgstr "\"%.*s\" redan definierad som ett kollationssymbol" -#: locale/programs/ld-collate.c:419 +#: locale/programs/ld-collate.c:420 #, c-format msgid "`%.*s' already defined as collating element" msgstr "\"%.*s\" redan definierad som ett kollationselement" -#: locale/programs/ld-collate.c:450 locale/programs/ld-collate.c:476 +#: locale/programs/ld-collate.c:451 locale/programs/ld-collate.c:477 #, c-format msgid "%s: `forward' and `backward' are mutually excluding each other" msgstr "%s: sorteringsordning \"forward\" och \"backward\" är ömsesidigt uteslutande" -#: locale/programs/ld-collate.c:460 locale/programs/ld-collate.c:486 -#: locale/programs/ld-collate.c:502 +#: locale/programs/ld-collate.c:461 locale/programs/ld-collate.c:487 +#: locale/programs/ld-collate.c:503 #, c-format msgid "%s: `%s' mentioned more than once in definition of weight %d" msgstr "%s: \"%s\" är nämnd fler än en gÃ¥ng i definitionen av vikt %d" -#: locale/programs/ld-collate.c:558 +#: locale/programs/ld-collate.c:559 #, c-format msgid "%s: too many rules; first entry only had %d" msgstr "%s: för mÃ¥nga regler, första delen hade bara %d" -#: locale/programs/ld-collate.c:594 +#: locale/programs/ld-collate.c:595 #, c-format msgid "%s: not enough sorting rules" msgstr "%s: inte tillräckligt med sorteringsregler" -#: locale/programs/ld-collate.c:759 +#: locale/programs/ld-collate.c:760 #, c-format msgid "%s: empty weight string not allowed" msgstr "%s: tomt viktnamn är inte tillÃ¥tet" -#: locale/programs/ld-collate.c:854 +#: locale/programs/ld-collate.c:855 #, c-format msgid "%s: weights must use the same ellipsis symbol as the name" msgstr "%s: vikter mÃ¥ste använda samma intervallsymbol som namn" -#: locale/programs/ld-collate.c:910 +#: locale/programs/ld-collate.c:911 #, c-format msgid "%s: too many values" msgstr "%s: för mÃ¥nga värden" -#: locale/programs/ld-collate.c:1029 locale/programs/ld-collate.c:1204 +#: locale/programs/ld-collate.c:1031 locale/programs/ld-collate.c:1206 #, c-format msgid "order for `%.*s' already defined at %s:%Zu" msgstr "ordningsföljd för \"%.*s\" redan definierad vid %s:%Zu" -#: locale/programs/ld-collate.c:1079 +#: 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: start- och slut-symbol i ett intervall mÃ¥ste representera tecken" -#: locale/programs/ld-collate.c:1106 +#: locale/programs/ld-collate.c:1108 #, c-format msgid "%s: byte sequences of first and last character must have the same length" msgstr "%s: bytesekvens för första och sista tecknet mÃ¥ste ha samma längd" -#: locale/programs/ld-collate.c:1148 +#: 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: bytesekvens för första tecknet är inte mindre än den för sista tecknet" +msgid "%s: byte sequence of first character of range is not lower than that of the last character" +msgstr "%s: bytesekvens för första tecknet i intervallet är inte mindre än den för sista tecknet" -#: locale/programs/ld-collate.c:1273 +#: locale/programs/ld-collate.c:1275 #, c-format msgid "%s: symbolic range ellipsis must not directly follow `order_start'" msgstr "%s: symboliskt intervall fÃ¥r inte vara omedelbart efter \"order_start\"" -#: locale/programs/ld-collate.c:1277 +#: locale/programs/ld-collate.c:1279 #, c-format msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'" msgstr "%s: symboliskt intervall fÃ¥r inte omedelbart följas av \"order_end\"" -#: locale/programs/ld-collate.c:1297 locale/programs/ld-ctype.c:1475 +#: locale/programs/ld-collate.c:1299 locale/programs/ld-ctype.c:1477 #, c-format msgid "`%s' and `%.*s' are not valid names for symbolic range" msgstr "\"%s\" och \"%.*s\" är otillÃ¥tna namn för symboliskt intervall" -#: locale/programs/ld-collate.c:1346 locale/programs/ld-collate.c:3739 +#: locale/programs/ld-collate.c:1349 locale/programs/ld-collate.c:3763 #, c-format msgid "%s: order for `%.*s' already defined at %s:%Zu" msgstr "%s: ordningsföljd för \"%.*s\" redan definierad i %s:%Zu" -#: locale/programs/ld-collate.c:1355 +#: locale/programs/ld-collate.c:1358 #, c-format msgid "%s: `%s' must be a character" msgstr "%s: \"%s\" mÃ¥ste vara ett enskilt tecken" -#: locale/programs/ld-collate.c:1548 +#: locale/programs/ld-collate.c:1552 #, c-format msgid "%s: `position' must be used for a specific level in all sections or none" msgstr "%s: \"position\" mÃ¥ste användas för en given nivÃ¥ i alla sektioner eller inte alls" -#: locale/programs/ld-collate.c:1573 +#: locale/programs/ld-collate.c:1577 #, c-format msgid "symbol `%s' not defined" msgstr "symbol \"%s\" inte definierad" -#: locale/programs/ld-collate.c:1649 locale/programs/ld-collate.c:1755 +#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759 #, c-format msgid "symbol `%s' has the same encoding as" msgstr "symbol \"%s\" har samma värde som" -#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759 +#: locale/programs/ld-collate.c:1657 locale/programs/ld-collate.c:1763 #, c-format msgid "symbol `%s'" msgstr "symbol \"%s\"" -#: locale/programs/ld-collate.c:1801 +#: locale/programs/ld-collate.c:1805 #, c-format msgid "no definition of `UNDEFINED'" msgstr "ingen definition av \"UNDEFINED\"" -#: locale/programs/ld-collate.c:1830 +#: locale/programs/ld-collate.c:1834 #, c-format msgid "too many errors; giving up" msgstr "för mÃ¥nga fel, ger upp" -#: locale/programs/ld-collate.c:2738 +#: locale/programs/ld-collate.c:2762 #, c-format msgid "%s: duplicate definition of `%s'" msgstr "%s: dubbla definitioner av \"%s\"" -#: locale/programs/ld-collate.c:2774 +#: locale/programs/ld-collate.c:2798 #, c-format msgid "%s: duplicate declaration of section `%s'" msgstr "%s: dubbla deklarationer för sektion \"%s\"" -#: locale/programs/ld-collate.c:2913 +#: locale/programs/ld-collate.c:2937 #, c-format msgid "%s: unknown character in collating symbol name" msgstr "%s: okänt tecken i namn för kollationssymbol" -#: locale/programs/ld-collate.c:3045 +#: locale/programs/ld-collate.c:3069 #, c-format msgid "%s: unknown character in equivalent definition name" msgstr "%s: okänt tecken i namnet i ekvivalensdefinitionen" -#: locale/programs/ld-collate.c:3058 +#: locale/programs/ld-collate.c:3082 #, c-format msgid "%s: unknown character in equivalent definition value" msgstr "%s: okänt tecken i värdet i ekvivalensdefinitionen" -#: locale/programs/ld-collate.c:3068 +#: locale/programs/ld-collate.c:3092 #, c-format msgid "%s: unknown symbol `%s' in equivalent definition" msgstr "%s: okänd symbol \"%s\" i ekvivalensdefinition" -#: locale/programs/ld-collate.c:3077 +#: locale/programs/ld-collate.c:3101 msgid "error while adding equivalent collating symbol" msgstr "fel när ekvivalent kollationssymbol lades till" -#: locale/programs/ld-collate.c:3107 +#: locale/programs/ld-collate.c:3131 #, c-format msgid "duplicate definition of script `%s'" msgstr "dubblerad definition för skript \"%s\"" -#: locale/programs/ld-collate.c:3155 +#: locale/programs/ld-collate.c:3179 #, c-format -msgid "%s: unknown section name `%s'" -msgstr "%s: okänt sektionsnamn \"%s\"" +msgid "%s: unknown section name `%.*s'" +msgstr "%s: okänt sektionsnamn \"%.*s\"" -#: locale/programs/ld-collate.c:3183 +#: locale/programs/ld-collate.c:3208 #, c-format msgid "%s: multiple order definitions for section `%s'" msgstr "%s: dubbla definitioner av ordningsföljd i sektion \"%s\"" -#: locale/programs/ld-collate.c:3208 +#: locale/programs/ld-collate.c:3233 #, c-format msgid "%s: invalid number of sorting rules" msgstr "%s: ogiltigt antal sorteringsregler" -#: locale/programs/ld-collate.c:3235 +#: locale/programs/ld-collate.c:3260 #, c-format msgid "%s: multiple order definitions for unnamed section" msgstr "%s: flera definitioner av ordningsföljd i namnlös sektion" -#: locale/programs/ld-collate.c:3289 locale/programs/ld-collate.c:3417 -#: locale/programs/ld-collate.c:3780 +#: locale/programs/ld-collate.c:3314 locale/programs/ld-collate.c:3442 +#: locale/programs/ld-collate.c:3804 #, c-format msgid "%s: missing `order_end' keyword" msgstr "%s: nyckelord \"order_end\" saknas" -#: locale/programs/ld-collate.c:3350 +#: locale/programs/ld-collate.c:3375 #, c-format msgid "%s: order for collating symbol %.*s not yet defined" msgstr "%s: ordningsföljd för kollationssymbol %.*s är inte definierad ännu" -#: locale/programs/ld-collate.c:3368 +#: locale/programs/ld-collate.c:3393 #, c-format msgid "%s: order for collating element %.*s not yet defined" msgstr "%s: ordningsföljd för kollationselement %.*s är inte definierad ännu" -#: locale/programs/ld-collate.c:3379 +#: locale/programs/ld-collate.c:3404 #, c-format msgid "%s: cannot reorder after %.*s: symbol not known" msgstr "%s: kan inte byta ordning efter %.*s: okänd symbol" -#: locale/programs/ld-collate.c:3431 locale/programs/ld-collate.c:3792 +#: locale/programs/ld-collate.c:3456 locale/programs/ld-collate.c:3816 #, c-format msgid "%s: missing `reorder-end' keyword" msgstr "%s: nyckelord \"reorder-end\" saknas" -#: locale/programs/ld-collate.c:3465 locale/programs/ld-collate.c:3664 +#: locale/programs/ld-collate.c:3490 locale/programs/ld-collate.c:3688 #, c-format msgid "%s: section `%.*s' not known" msgstr "%s: sektion \"%.*s\" okänd" -#: locale/programs/ld-collate.c:3530 +#: locale/programs/ld-collate.c:3555 #, c-format msgid "%s: bad symbol <%.*s>" msgstr "%s: ogiltig symbol: <%.*s>" -#: locale/programs/ld-collate.c:3727 +#: locale/programs/ld-collate.c:3751 #, c-format msgid "%s: cannot have `%s' as end of ellipsis range" msgstr "%s: kan inte ha \"%s\" som ändpunkt pÃ¥ ellips" -#: locale/programs/ld-collate.c:3776 +#: locale/programs/ld-collate.c:3800 #, c-format msgid "%s: empty category description not allowed" msgstr "%s: tom kategoribeskrivning är inte tillÃ¥tet" -#: locale/programs/ld-collate.c:3795 +#: locale/programs/ld-collate.c:3819 #, c-format msgid "%s: missing `reorder-sections-end' keyword" msgstr "%s: nyckelord \"reorder-sections-end\" saknas" -#: locale/programs/ld-ctype.c:438 +#: locale/programs/ld-ctype.c:439 #, c-format msgid "No character set name specified in charmap" msgstr "Inget namn definierat i teckenuppsättning" -#: locale/programs/ld-ctype.c:467 +#: locale/programs/ld-ctype.c:468 #, c-format msgid "character L'\\u%0*x' in class `%s' must be in class `%s'" msgstr "tecken L\"\\u%0*x\" i klass \"%s\" mÃ¥ste vara i klass \"%s\"" -#: locale/programs/ld-ctype.c:482 +#: locale/programs/ld-ctype.c:483 #, c-format msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'" msgstr "tecken L\"\\u%0*x\" i klass \"%s\" fÃ¥r inte vara i klass \"%s\"" -#: locale/programs/ld-ctype.c:496 locale/programs/ld-ctype.c:554 +#: locale/programs/ld-ctype.c:497 locale/programs/ld-ctype.c:555 #, c-format msgid "internal error in %s, line %u" msgstr "internt fel i %s, rad %u" -#: locale/programs/ld-ctype.c:525 +#: locale/programs/ld-ctype.c:526 #, c-format msgid "character '%s' in class `%s' must be in class `%s'" msgstr "tecken \"%s\" i klass \"%s\" mÃ¥ste vara i klass \"%s\"" -#: locale/programs/ld-ctype.c:541 +#: locale/programs/ld-ctype.c:542 #, c-format msgid "character '%s' in class `%s' must not be in class `%s'" msgstr "tecken \"%s\" i klass \"%s\" fÃ¥r inte vara i klass \"%s\"" -#: locale/programs/ld-ctype.c:571 locale/programs/ld-ctype.c:609 +#: locale/programs/ld-ctype.c:572 locale/programs/ld-ctype.c:610 #, c-format msgid "<SP> character not in class `%s'" msgstr "<SP>-tecknet är inte i klass \"%s\"" -#: locale/programs/ld-ctype.c:583 locale/programs/ld-ctype.c:620 +#: locale/programs/ld-ctype.c:584 locale/programs/ld-ctype.c:621 #, c-format msgid "<SP> character must not be in class `%s'" msgstr "<SP>-tecknet fÃ¥r inte vara i klass \"%s\"" -#: locale/programs/ld-ctype.c:598 +#: locale/programs/ld-ctype.c:599 #, c-format msgid "character <SP> not defined in character map" msgstr "tecken <SP> inte definierat i teckenuppsättning" -#: locale/programs/ld-ctype.c:712 +#: locale/programs/ld-ctype.c:714 #, c-format msgid "`digit' category has not entries in groups of ten" msgstr "\"digit\"-kategori har inte poster i grupper av tio" -#: locale/programs/ld-ctype.c:761 +#: locale/programs/ld-ctype.c:763 #, c-format msgid "no input digits defined and none of the standard names in the charmap" msgstr "inga siffror för indata definierade och inga standardnamn finns i teckenuppsättningen" -#: locale/programs/ld-ctype.c:826 +#: locale/programs/ld-ctype.c:828 #, c-format msgid "not all characters used in `outdigit' are available in the charmap" msgstr "alla tecken i \"outdigit\" är inte tillgängliga i teckenuppsättningen" -#: locale/programs/ld-ctype.c:843 +#: locale/programs/ld-ctype.c:845 #, c-format msgid "not all characters used in `outdigit' are available in the repertoire" msgstr "alla tecken i \"outdigit\" är inte tillgängliga i repertoaren" -#: locale/programs/ld-ctype.c:1243 +#: locale/programs/ld-ctype.c:1245 #, c-format msgid "character class `%s' already defined" msgstr "teckenklass \"%s\" redan definierad" -#: locale/programs/ld-ctype.c:1249 +#: locale/programs/ld-ctype.c:1251 #, c-format msgid "implementation limit: no more than %Zd character classes allowed" msgstr "implementationsbegränsning: inte fler än %Zd teckenklasser tillÃ¥tna" -#: locale/programs/ld-ctype.c:1275 +#: locale/programs/ld-ctype.c:1277 #, c-format msgid "character map `%s' already defined" msgstr "teckenuppsättning \"%s\" redan definierad" -#: locale/programs/ld-ctype.c:1281 +#: locale/programs/ld-ctype.c:1283 #, c-format msgid "implementation limit: no more than %d character maps allowed" msgstr "implementationsbegränsning: inte fler än %d teckenuppsättningar tillÃ¥tet" -#: locale/programs/ld-ctype.c:1546 locale/programs/ld-ctype.c:1671 -#: locale/programs/ld-ctype.c:1777 locale/programs/ld-ctype.c:2466 -#: locale/programs/ld-ctype.c:3462 +#: locale/programs/ld-ctype.c:1548 locale/programs/ld-ctype.c:1673 +#: locale/programs/ld-ctype.c:1779 locale/programs/ld-ctype.c:2471 +#: locale/programs/ld-ctype.c:3467 #, c-format msgid "%s: field `%s' does not contain exactly ten entries" msgstr "%s: fält \"%s\" innehÃ¥ller inte exakt tio poster" -#: locale/programs/ld-ctype.c:1574 locale/programs/ld-ctype.c:2145 +#: locale/programs/ld-ctype.c:1576 locale/programs/ld-ctype.c:2150 #, c-format msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>" msgstr "tillvärdet <U%0*X> i intervallet är mindre än frÃ¥nvärdet <U%0*X>" -#: locale/programs/ld-ctype.c:1701 +#: locale/programs/ld-ctype.c:1703 msgid "start and end character sequence of range must have the same length" msgstr "start- och slutteckensekvens för intervall mÃ¥ste ha samma längd" -#: locale/programs/ld-ctype.c:1708 +#: locale/programs/ld-ctype.c:1710 msgid "to-value character sequence is smaller than from-value sequence" msgstr "tillvärdets teckensekvens är mindre än frÃ¥nvärdets sekvens" -#: locale/programs/ld-ctype.c:2065 locale/programs/ld-ctype.c:2116 +#: locale/programs/ld-ctype.c:2070 locale/programs/ld-ctype.c:2121 msgid "premature end of `translit_ignore' definition" msgstr "för tidigt slut pÃ¥ definition för \"translit_ignore\"" -#: locale/programs/ld-ctype.c:2071 locale/programs/ld-ctype.c:2122 -#: locale/programs/ld-ctype.c:2164 +#: locale/programs/ld-ctype.c:2076 locale/programs/ld-ctype.c:2127 +#: locale/programs/ld-ctype.c:2169 msgid "syntax error" msgstr "syntaxfel" -#: locale/programs/ld-ctype.c:2298 +#: locale/programs/ld-ctype.c:2303 #, c-format msgid "%s: syntax error in definition of new character class" msgstr "%s: syntaxfel i definition av ny teckenklass" -#: locale/programs/ld-ctype.c:2313 +#: locale/programs/ld-ctype.c:2318 #, c-format msgid "%s: syntax error in definition of new character map" msgstr "%s: syntaxfel i definition av ny teckenuppsättning" -#: locale/programs/ld-ctype.c:2488 +#: locale/programs/ld-ctype.c:2493 msgid "ellipsis range must be marked by two operands of same type" msgstr "intervall mÃ¥ste markeras med tvÃ¥ operander av samma typ" -#: locale/programs/ld-ctype.c:2497 +#: locale/programs/ld-ctype.c:2502 msgid "with symbolic name range values the absolute ellipsis `...' must not be used" msgstr "med symboliska namn som intervallvärden kan inte absoluta intervallet \"...\" användas" -#: locale/programs/ld-ctype.c:2512 +#: locale/programs/ld-ctype.c:2517 msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'" msgstr "med UCS som intervallvärden mÃ¥ste man använda symboliska hexadecimala intervallet \"..\"" -#: locale/programs/ld-ctype.c:2526 +#: locale/programs/ld-ctype.c:2531 msgid "with character code range values one must use the absolute ellipsis `...'" msgstr "med teckenkoder som intervallvärden mÃ¥ste man använda absoluta intervallet \"...\"" -#: locale/programs/ld-ctype.c:2677 +#: locale/programs/ld-ctype.c:2682 #, c-format msgid "duplicated definition for mapping `%s'" msgstr "dubblerad definition för mappning \"%s\"" -#: locale/programs/ld-ctype.c:2763 locale/programs/ld-ctype.c:2907 +#: locale/programs/ld-ctype.c:2768 locale/programs/ld-ctype.c:2912 #, c-format msgid "%s: `translit_start' section does not end with `translit_end'" msgstr "%s: sektion \"translit_start\" avslutas inte med \"translit_end\"" -#: locale/programs/ld-ctype.c:2858 +#: locale/programs/ld-ctype.c:2863 #, c-format msgid "%s: duplicate `default_missing' definition" msgstr "%s: dubbla definitioner av \"default_missing\"" -#: locale/programs/ld-ctype.c:2863 +#: locale/programs/ld-ctype.c:2868 msgid "previous definition was here" msgstr "här var föregÃ¥ende definition" -#: locale/programs/ld-ctype.c:2885 +#: locale/programs/ld-ctype.c:2890 #, c-format msgid "%s: no representable `default_missing' definition found" msgstr "%s: ingen representerbar definition av \"default_missing\" hittades" -#: locale/programs/ld-ctype.c:3038 -#, c-format -msgid "%s: character `%s' not defined in charmap while needed as default value" -msgstr "%s: tecken \"%s\" inte definierat i teckenuppsättningen men behövs som standardvärde" - #: locale/programs/ld-ctype.c:3043 locale/programs/ld-ctype.c:3127 #: locale/programs/ld-ctype.c:3147 locale/programs/ld-ctype.c:3168 #: locale/programs/ld-ctype.c:3189 locale/programs/ld-ctype.c:3210 #: locale/programs/ld-ctype.c:3231 locale/programs/ld-ctype.c:3271 #: locale/programs/ld-ctype.c:3292 locale/programs/ld-ctype.c:3359 -#, c-format -msgid "%s: character `%s' in charmap not representable with one byte" -msgstr "%s: tecken \"%s\" i teckenuppsättning kan inte representeras med en byte" - -#: locale/programs/ld-ctype.c:3122 locale/programs/ld-ctype.c:3142 -#: locale/programs/ld-ctype.c:3184 locale/programs/ld-ctype.c:3205 -#: locale/programs/ld-ctype.c:3226 locale/programs/ld-ctype.c:3266 -#: locale/programs/ld-ctype.c:3287 locale/programs/ld-ctype.c:3354 -#: locale/programs/ld-ctype.c:3396 locale/programs/ld-ctype.c:3421 +#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426 #, c-format msgid "%s: character `%s' not defined while needed as default value" msgstr "%s: tecken \"%s\" inte definierat men behövs som standardvärde" -#: locale/programs/ld-ctype.c:3163 +#: locale/programs/ld-ctype.c:3048 locale/programs/ld-ctype.c:3132 +#: locale/programs/ld-ctype.c:3152 locale/programs/ld-ctype.c:3173 +#: locale/programs/ld-ctype.c:3194 locale/programs/ld-ctype.c:3215 +#: locale/programs/ld-ctype.c:3236 locale/programs/ld-ctype.c:3276 +#: locale/programs/ld-ctype.c:3297 locale/programs/ld-ctype.c:3364 #, c-format -msgid "character `%s' not defined while needed as default value" -msgstr "tecken \"%s\" inte definierat men behövs som standardvärde" +msgid "%s: character `%s' in charmap not representable with one byte" +msgstr "%s: tecken \"%s\" i teckenuppsättning kan inte representeras med en byte" -#: locale/programs/ld-ctype.c:3403 locale/programs/ld-ctype.c:3428 +#: locale/programs/ld-ctype.c:3408 locale/programs/ld-ctype.c:3433 #, c-format msgid "%s: character `%s' needed as default value not representable with one byte" msgstr "%s: tecken \"%s\" som behövs som standardvärde kan inte representeras med en byte" -#: locale/programs/ld-ctype.c:3483 +#: locale/programs/ld-ctype.c:3489 #, c-format msgid "no output digits defined and none of the standard names in the charmap" msgstr "inga siffror för utdata definierade och inga standardnamn finns i teckenuppsättningen" -#: locale/programs/ld-ctype.c:3774 +#: locale/programs/ld-ctype.c:3780 #, c-format msgid "%s: transliteration data from locale `%s' not available" msgstr "%s: transkriberingsdata för lokal \"%s\" är inte tillgänglig" -#: locale/programs/ld-ctype.c:3875 +#: locale/programs/ld-ctype.c:3881 #, c-format msgid "%s: table for class \"%s\": %lu bytes\n" msgstr "%s: tabell för klass \"%s\": %lu byte\n" -#: locale/programs/ld-ctype.c:3944 +#: locale/programs/ld-ctype.c:3950 #, c-format msgid "%s: table for map \"%s\": %lu bytes\n" msgstr "%s: tabell för \"%s\": %lu byte\n" -#: locale/programs/ld-ctype.c:4077 +#: locale/programs/ld-ctype.c:4083 #, c-format msgid "%s: table for width: %lu bytes\n" msgstr "%s: tabell för teckenstorlek: %lu byte\n" -#: locale/programs/ld-identification.c:169 +#: locale/programs/ld-identification.c:170 #, c-format msgid "%s: no identification for category `%s'" msgstr "%s: ingen idenitifikation för kategori \"%s\"" -#: locale/programs/ld-identification.c:434 +#: locale/programs/ld-identification.c:435 #, c-format msgid "%s: duplicate category version definition" msgstr "%s: dubbla definitioner av kategori" -#: locale/programs/ld-measurement.c:112 +#: locale/programs/ld-measurement.c:113 #, c-format msgid "%s: invalid value for field `%s'" msgstr "%s: ogiltigt värde för fält \"%s\"" -#: locale/programs/ld-messages.c:113 locale/programs/ld-messages.c:147 +#: locale/programs/ld-messages.c:114 locale/programs/ld-messages.c:148 #, c-format msgid "%s: field `%s' undefined" msgstr "%s: fält \"%s\" är odefinierat" -#: locale/programs/ld-messages.c:120 locale/programs/ld-messages.c:154 +#: locale/programs/ld-messages.c:121 locale/programs/ld-messages.c:155 +#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:118 #, c-format msgid "%s: value for field `%s' must not be an empty string" msgstr "%s: värde pÃ¥ fält \"%s\" fÃ¥r inte vara en tom sträng" -#: locale/programs/ld-messages.c:136 locale/programs/ld-messages.c:170 +#: locale/programs/ld-messages.c:137 locale/programs/ld-messages.c:171 #, c-format msgid "%s: no correct regular expression for field `%s': %s" msgstr "%s: felaktigt reguljärt uttryck för fält \"%s\": %s" -#: locale/programs/ld-monetary.c:222 +#: locale/programs/ld-monetary.c:224 #, c-format msgid "%s: value of field `int_curr_symbol' has wrong length" msgstr "%s: värdet pÃ¥ fält \"int_curr_symbol\" har fel längd" -#: locale/programs/ld-monetary.c:235 +#: 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: värdet pÃ¥ fält \"int_curr_symbol\" stämmer inte med giltiga namn i ISO 4217" -#: locale/programs/ld-monetary.c:254 locale/programs/ld-numeric.c:117 -#, c-format -msgid "%s: value for field `%s' must not be the empty string" -msgstr "%s: värde pÃ¥ fält \"%s\" fÃ¥r inte vara tom sträng" - -#: locale/programs/ld-monetary.c:282 locale/programs/ld-monetary.c:312 +#: locale/programs/ld-monetary.c:285 locale/programs/ld-monetary.c:315 #, c-format msgid "%s: value for field `%s' must be in range %d...%d" msgstr "%s: värden pÃ¥ fält \"%s\" mÃ¥ste vara i intervallet %d...%d" -#: locale/programs/ld-monetary.c:744 locale/programs/ld-numeric.c:273 +#: locale/programs/ld-monetary.c:747 locale/programs/ld-numeric.c:274 #, c-format msgid "%s: value for field `%s' must be a single character" msgstr "%s: värdet för fält \"%s\" mÃ¥ste vara ett enskilt tecken" -#: locale/programs/ld-monetary.c:841 locale/programs/ld-numeric.c:317 +#: locale/programs/ld-monetary.c:844 locale/programs/ld-numeric.c:318 #, c-format msgid "%s: `-1' must be last entry in `%s' field" msgstr "%s: \"-1\" mÃ¥ste vara sista post i fält \"%s\"" -#: locale/programs/ld-monetary.c:863 locale/programs/ld-numeric.c:334 +#: locale/programs/ld-monetary.c:866 locale/programs/ld-numeric.c:335 #, c-format msgid "%s: values for field `%s' must be smaller than 127" msgstr "%s: värden pÃ¥ fält \"%s\" mÃ¥ste vara mindre än 127" -#: locale/programs/ld-monetary.c:906 +#: locale/programs/ld-monetary.c:909 msgid "conversion rate value cannot be zero" msgstr "omvandlingsvärde kan inte vara noll" -#: locale/programs/ld-name.c:128 locale/programs/ld-telephone.c:125 -#: locale/programs/ld-telephone.c:148 +#: locale/programs/ld-name.c:129 locale/programs/ld-telephone.c:126 +#: locale/programs/ld-telephone.c:149 #, c-format msgid "%s: invalid escape sequence in field `%s'" msgstr "%s: ogiltig kontrollsekvens i fält \"%s\"" -#: locale/programs/ld-time.c:246 +#: locale/programs/ld-time.c:247 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'" msgstr "%s: riktningsflagga i sträng %Zd i \"era\"-fält är varken \"+\" eller \"-\"" -#: locale/programs/ld-time.c:257 +#: locale/programs/ld-time.c:258 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not a single character" msgstr "%s: riktningsflagga i sträng %Zd i \"era\"-fält är inte ett enskilt tecken" -#: locale/programs/ld-time.c:270 +#: locale/programs/ld-time.c:271 #, c-format msgid "%s: invalid number for offset in string %Zd in `era' field" msgstr "%s: ogiltigt tal för tilläggsvärde i sträng %Zd i \"era\"-fält" -#: locale/programs/ld-time.c:278 +#: locale/programs/ld-time.c:279 #, c-format msgid "%s: garbage at end of offset value in string %Zd in `era' field" msgstr "%s: skräp i slutet av tilläggsvärde i sträng %Zd i \"era\"-fält" -#: locale/programs/ld-time.c:329 +#: locale/programs/ld-time.c:330 #, c-format msgid "%s: invalid starting date in string %Zd in `era' field" msgstr "%s: ogiltigt startdatum i sträng %Zd i \"era\"-fält" -#: locale/programs/ld-time.c:338 +#: locale/programs/ld-time.c:339 #, c-format msgid "%s: garbage at end of starting date in string %Zd in `era' field " msgstr "%s: skräp i slutet av startdatum i sträng %Zd i \"era\"-fält" -#: locale/programs/ld-time.c:357 +#: locale/programs/ld-time.c:358 #, c-format msgid "%s: starting date is invalid in string %Zd in `era' field" msgstr "%s: startdatum är ogiltigt i sträng %Zd i \"era\"-fält" -#: locale/programs/ld-time.c:406 +#: locale/programs/ld-time.c:407 #, c-format msgid "%s: invalid stopping date in string %Zd in `era' field" msgstr "%s: ogiltigt slutdatum i sträng %Zd i \"era\"-fält" -#: locale/programs/ld-time.c:415 +#: locale/programs/ld-time.c:416 #, c-format msgid "%s: garbage at end of stopping date in string %Zd in `era' field" msgstr "%s: skräp i slutet av slutdatum i sträng %Zd i \"era\"-fält" -#: locale/programs/ld-time.c:434 +#: locale/programs/ld-time.c:435 #, c-format msgid "%s: stopping date is invalid in string %Zd in `era' field" msgstr "%s: slutdatum är ogiltigt i sträng %Zd i \"era\"-fält" -#: locale/programs/ld-time.c:443 +#: locale/programs/ld-time.c:444 #, c-format msgid "%s: missing era name in string %Zd in `era' field" msgstr "%s: eranamn i sträng %Zd i \"era\"-fält saknas" -#: locale/programs/ld-time.c:455 +#: locale/programs/ld-time.c:456 #, c-format msgid "%s: missing era format in string %Zd in `era' field" msgstr "%s: eraformat i sträng %Zd i \"era\"-fält saknas" -#: locale/programs/ld-time.c:496 +#: locale/programs/ld-time.c:497 #, c-format msgid "%s: third operand for value of field `%s' must not be larger than %d" msgstr "%s: tredje operanden för värdet av fält \"%s\" kan inte vara större än %d" -#: locale/programs/ld-time.c:504 locale/programs/ld-time.c:512 -#, c-format -msgid "%s: values of field `%s' must not be larger than %d" -msgstr "%s: värden pÃ¥ fält \"%s\" fÃ¥r inte vara större än %d" - -#: locale/programs/ld-time.c:520 +#: locale/programs/ld-time.c:505 locale/programs/ld-time.c:513 +#: locale/programs/ld-time.c:521 #, c-format msgid "%s: values for field `%s' must not be larger than %d" msgstr "%s: värden pÃ¥ fält \"%s\" fÃ¥r inte vara större än %d" -#: locale/programs/ld-time.c:1003 +#: locale/programs/ld-time.c:1004 #, c-format msgid "%s: too few values for field `%s'" msgstr "%s: för fÃ¥ värden för fält \"%s\"" -#: locale/programs/ld-time.c:1048 +#: locale/programs/ld-time.c:1049 msgid "extra trailing semicolon" msgstr "extra avslutande semikolon" -#: locale/programs/ld-time.c:1051 +#: locale/programs/ld-time.c:1052 #, c-format msgid "%s: too many values for field `%s'" msgstr "%s: för mÃ¥nga värden för fält \"%s\"" -#: locale/programs/linereader.c:129 +#: locale/programs/linereader.c:130 msgid "trailing garbage at end of line" msgstr "avslutande skräp vid radslutet" -#: locale/programs/linereader.c:297 +#: locale/programs/linereader.c:298 msgid "garbage at end of number" msgstr "skräp i slutet av tal" -#: locale/programs/linereader.c:409 +#: locale/programs/linereader.c:410 msgid "garbage at end of character code specification" msgstr "skräp i slutet av teckenkodsspecifikation" -#: locale/programs/linereader.c:495 +#: locale/programs/linereader.c:496 msgid "unterminated symbolic name" msgstr "oavslutat symboliskt namn" -#: locale/programs/linereader.c:622 +#: locale/programs/linereader.c:623 msgid "illegal escape sequence at end of string" msgstr "otillÃ¥ten teckensekvens vid strängslut" -#: locale/programs/linereader.c:626 locale/programs/linereader.c:854 +#: locale/programs/linereader.c:627 locale/programs/linereader.c:855 msgid "unterminated string" msgstr "oavslutad sträng" -#: locale/programs/linereader.c:668 +#: locale/programs/linereader.c:669 msgid "non-symbolic character value should not be used" msgstr "icke-symboliskt teckenvärde bör inte användas" -#: locale/programs/linereader.c:815 +#: locale/programs/linereader.c:816 #, c-format msgid "symbol `%.*s' not in charmap" msgstr "symbol \"%.*s\" finns inte i teckenuppsättning" -#: locale/programs/linereader.c:836 +#: locale/programs/linereader.c:837 #, c-format msgid "symbol `%.*s' not in repertoire map" msgstr "symbol \"%.*s\" finns inte i repertoartabell" -#: locale/programs/locale.c:73 +#: locale/programs/locale.c:74 msgid "System information:" msgstr "Systeminformation:" -#: locale/programs/locale.c:75 +#: locale/programs/locale.c:76 msgid "Write names of available locales" msgstr "Skriv namn pÃ¥ tillgängliga lokaler" -#: locale/programs/locale.c:77 +#: locale/programs/locale.c:78 msgid "Write names of available charmaps" msgstr "Skriv namn pÃ¥ tillgängliga teckenuppsättningar" -#: locale/programs/locale.c:78 +#: locale/programs/locale.c:79 msgid "Modify output format:" msgstr "Ändra utdataformat:" -#: locale/programs/locale.c:79 +#: locale/programs/locale.c:80 msgid "Write names of selected categories" msgstr "Skriv namn pÃ¥ valda kategorier" -#: locale/programs/locale.c:80 +#: locale/programs/locale.c:81 msgid "Write names of selected keywords" msgstr "Skriv namn pÃ¥ valda nyckelord" -#: locale/programs/locale.c:81 +#: locale/programs/locale.c:82 msgid "Print more information" msgstr "Skriv mer information" -#: locale/programs/locale.c:86 +#: locale/programs/locale.c:87 msgid "" -"Get locale-specific information.For bug reporting instructions, please see:\n" +"Get locale-specific information.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" -"Hämta lokalspecifik information.För felrapporteringsinstruktioner, se:\n" +"Hämta lokalspecifik information.\vFör felrapporteringsinstruktioner, se:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" "Rapportera fel eller synpunkter pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>.\n" -#: locale/programs/locale.c:91 +#: locale/programs/locale.c:92 msgid "" "NAME\n" "[-a|-m]" @@ -2431,104 +2396,104 @@ msgstr "" "NAMN\n" "[-a|-m]" -#: locale/programs/locale.c:192 +#: locale/programs/locale.c:193 #, c-format msgid "Cannot set LC_CTYPE to default locale" msgstr "Kan inte sätta LC_CTYPE till standardlokalen" -#: locale/programs/locale.c:194 +#: locale/programs/locale.c:195 #, c-format msgid "Cannot set LC_MESSAGES to default locale" msgstr "Kan inte sätta LC_MESSAGES till standardlokalen" -#: locale/programs/locale.c:207 +#: locale/programs/locale.c:208 #, c-format msgid "Cannot set LC_COLLATE to default locale" msgstr "Kan inte sätta LC_COLLATE till standardlokalen" -#: locale/programs/locale.c:223 +#: locale/programs/locale.c:224 #, c-format msgid "Cannot set LC_ALL to default locale" msgstr "Kan inte sätta LC_ALL till standardlokalen" -#: locale/programs/locale.c:499 +#: locale/programs/locale.c:500 #, c-format msgid "while preparing output" msgstr "när utdata förbereddes" -#: locale/programs/localedef.c:119 +#: locale/programs/localedef.c:120 msgid "Input Files:" msgstr "Infiler:" -#: locale/programs/localedef.c:121 +#: locale/programs/localedef.c:122 msgid "Symbolic character names defined in FILE" msgstr "Symboliska teckennamn definierade i FILE" -#: locale/programs/localedef.c:122 +#: locale/programs/localedef.c:123 msgid "Source definitions are found in FILE" msgstr "Källdefinitioner finns i FILE" -#: locale/programs/localedef.c:124 +#: locale/programs/localedef.c:125 msgid "FILE contains mapping from symbolic names to UCS4 values" msgstr "FIL innehÃ¥ller avbildning frÃ¥n symboliska namn till UCS4-värden" -#: locale/programs/localedef.c:128 +#: locale/programs/localedef.c:129 msgid "Create output even if warning messages were issued" msgstr "Skapa utfil även om varningsmeddelanden genererades" -#: locale/programs/localedef.c:129 +#: locale/programs/localedef.c:130 msgid "Create old-style tables" msgstr "Skapa tabeller i gammal stil" -#: locale/programs/localedef.c:130 +#: locale/programs/localedef.c:131 msgid "Optional output file prefix" msgstr "Valfri utfilsprefix" -#: locale/programs/localedef.c:131 +#: locale/programs/localedef.c:132 msgid "Be strictly POSIX conform" msgstr "Var strikt POSIX-konform" -#: locale/programs/localedef.c:133 +#: locale/programs/localedef.c:134 msgid "Suppress warnings and information messages" msgstr "Undertryck varningar och informationsmeddelanden" -#: locale/programs/localedef.c:134 +#: locale/programs/localedef.c:135 msgid "Print more messages" msgstr "Skriv mer meddelanden" -#: locale/programs/localedef.c:135 +#: locale/programs/localedef.c:136 msgid "Archive control:" msgstr "Arkivkontroll:" -#: locale/programs/localedef.c:137 +#: locale/programs/localedef.c:138 msgid "Don't add new data to archive" msgstr "Lägg inte till nya data till arkivet" -#: locale/programs/localedef.c:139 +#: locale/programs/localedef.c:140 msgid "Add locales named by parameters to archive" msgstr "Lägg till lokaler namngivna av parametrar till arkivet" -#: locale/programs/localedef.c:140 +#: locale/programs/localedef.c:141 msgid "Replace existing archive content" msgstr "Ersätt befintligt arkivinnehÃ¥ll" -#: locale/programs/localedef.c:142 +#: locale/programs/localedef.c:143 msgid "Remove locales named by parameters from archive" msgstr "Ta bort lokaler namngivna av parametrar frÃ¥n arkivet" -#: locale/programs/localedef.c:143 +#: locale/programs/localedef.c:144 msgid "List content of archive" msgstr "Visa innehÃ¥llet i arkivet" -#: locale/programs/localedef.c:145 +#: locale/programs/localedef.c:146 msgid "locale.alias file to consult when making archive" msgstr "locale.alias-fil som ska användas när arkivet skapas" -#: locale/programs/localedef.c:150 +#: locale/programs/localedef.c:151 msgid "Compile locale specification" msgstr "Kompilera lokalspecifikation" -#: locale/programs/localedef.c:153 +#: locale/programs/localedef.c:154 msgid "" "NAME\n" "[--add-to-archive|--delete-from-archive] FILE...\n" @@ -2538,28 +2503,28 @@ msgstr "" "[--add-to-archive|--delete-from-archive] FIL...\n" "--list-archive [FIL]" -#: locale/programs/localedef.c:231 +#: locale/programs/localedef.c:232 #, c-format msgid "cannot create directory for output files" msgstr "kan inte skapa katalog för utfiler" -#: locale/programs/localedef.c:242 +#: locale/programs/localedef.c:243 #, c-format msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" msgstr "FATALT: systemet definierar inte \"_POSIX2_LOCALEDEF\"" -#: locale/programs/localedef.c:256 locale/programs/localedef.c:272 -#: locale/programs/localedef.c:598 locale/programs/localedef.c:618 +#: locale/programs/localedef.c:257 locale/programs/localedef.c:273 +#: locale/programs/localedef.c:599 locale/programs/localedef.c:619 #, c-format msgid "cannot open locale definition file `%s'" msgstr "kan inte öppna lokaldefinitionsfil \"%s\"" -#: locale/programs/localedef.c:284 +#: locale/programs/localedef.c:285 #, c-format msgid "cannot write output files to `%s'" msgstr "kan inte skriva utfiler till \"%s\"" -#: locale/programs/localedef.c:365 +#: locale/programs/localedef.c:366 #, c-format msgid "" "System's directory for character maps : %s\n" @@ -2572,209 +2537,205 @@ msgstr "" " lokal-sökväg : %s\n" "%s" -#: locale/programs/localedef.c:566 +#: locale/programs/localedef.c:567 #, c-format msgid "circular dependencies between locale definitions" msgstr "cirkulärt beroende mellan lokaldefinitioner" -#: locale/programs/localedef.c:572 +#: locale/programs/localedef.c:573 #, c-format msgid "cannot add already read locale `%s' a second time" msgstr "kan inte lägga till en redan inläst lokal \"%s\" en andra gÃ¥ng" -#: locale/programs/locarchive.c:87 locale/programs/locarchive.c:256 +#: locale/programs/locarchive.c:88 locale/programs/locarchive.c:261 #, c-format msgid "cannot create temporary file" msgstr "kan inte skapa temporärfil" -#: locale/programs/locarchive.c:116 locale/programs/locarchive.c:302 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:307 #, c-format msgid "cannot initialize archive file" msgstr "kan inte initiera arkivfil" -#: locale/programs/locarchive.c:123 locale/programs/locarchive.c:309 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:314 #, c-format msgid "cannot resize archive file" msgstr "kan inte byta storlek pÃ¥ arkivfil" -#: locale/programs/locarchive.c:132 locale/programs/locarchive.c:318 -#: locale/programs/locarchive.c:506 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:323 +#: locale/programs/locarchive.c:527 #, c-format msgid "cannot map archive header" msgstr "kan inte läsa arkivhuvud med mmap" -#: locale/programs/locarchive.c:154 +#: locale/programs/locarchive.c:156 #, c-format msgid "failed to create new locale archive" msgstr "misslyckades med att skapa nytt lokalarkiv" -#: locale/programs/locarchive.c:166 +#: locale/programs/locarchive.c:168 #, c-format msgid "cannot change mode of new locale archive" msgstr "kan inte ändra Ã¥tkomstläge pÃ¥ nytt lokalarkiv" -#: locale/programs/locarchive.c:250 +#: locale/programs/locarchive.c:255 #, c-format msgid "cannot map locale archive file" msgstr "kan inte öppna lokalarkivfil med mmap" -#: locale/programs/locarchive.c:326 +#: locale/programs/locarchive.c:331 #, c-format msgid "cannot lock new archive" msgstr "kan inte lÃ¥sa nytt arkiv" -#: locale/programs/locarchive.c:375 +#: locale/programs/locarchive.c:396 #, c-format msgid "cannot extend locale archive file" msgstr "kan inte utöka lokalarkivfil" -#: locale/programs/locarchive.c:384 +#: locale/programs/locarchive.c:405 #, c-format msgid "cannot change mode of resized locale archive" msgstr "kan inte ändra Ã¥tkomstläge pÃ¥ storleksändrat lokalarkiv" -#: locale/programs/locarchive.c:392 +#: locale/programs/locarchive.c:413 #, c-format msgid "cannot rename new archive" msgstr "kan inte byta namn pÃ¥ nytt arkiv" -#: locale/programs/locarchive.c:445 +#: locale/programs/locarchive.c:466 #, c-format msgid "cannot open locale archive \"%s\"" msgstr "kan inte öppna lokalarkiv \"%s\"" -#: locale/programs/locarchive.c:450 +#: locale/programs/locarchive.c:471 #, c-format msgid "cannot stat locale archive \"%s\"" msgstr "kan inte ta status pÃ¥ lokalarkiv \"%s\"" -#: locale/programs/locarchive.c:469 +#: locale/programs/locarchive.c:490 #, c-format msgid "cannot lock locale archive \"%s\"" msgstr "kan inte lÃ¥sa lokalarkiv \"%s\"" -#: locale/programs/locarchive.c:492 +#: locale/programs/locarchive.c:513 #, c-format msgid "cannot read archive header" msgstr "kan inte läsa arkivhuvud" -#: locale/programs/locarchive.c:552 +#: locale/programs/locarchive.c:573 #, c-format msgid "locale '%s' already exists" msgstr "lokal \"%s\" finns redan" -#: locale/programs/locarchive.c:783 locale/programs/locarchive.c:798 -#: locale/programs/locarchive.c:810 locale/programs/locarchive.c:822 -#: locale/programs/locfile.c:343 +#: locale/programs/locarchive.c:804 locale/programs/locarchive.c:819 +#: locale/programs/locarchive.c:831 locale/programs/locarchive.c:843 +#: locale/programs/locfile.c:344 #, c-format msgid "cannot add to locale archive" msgstr "kan inte lägga till till lokalarkiv" -#: locale/programs/locarchive.c:977 +#: locale/programs/locarchive.c:998 #, c-format msgid "locale alias file `%s' not found" msgstr "fil \"%s\" för lokalalias finns inte" -#: locale/programs/locarchive.c:1121 +#: locale/programs/locarchive.c:1142 #, c-format msgid "Adding %s\n" msgstr "Lägger till %s\n" -#: locale/programs/locarchive.c:1127 +#: locale/programs/locarchive.c:1148 #, c-format msgid "stat of \"%s\" failed: %s: ignored" msgstr "ta status pÃ¥ \"%s\" misslyckades: %s: ignorerad" -#: locale/programs/locarchive.c:1133 +#: locale/programs/locarchive.c:1154 #, c-format msgid "\"%s\" is no directory; ignored" msgstr "\"%s\" är inte en katalog, ignorerad" -#: locale/programs/locarchive.c:1140 +#: locale/programs/locarchive.c:1161 #, c-format msgid "cannot open directory \"%s\": %s: ignored" msgstr "kan inte öppna katalog \"%s\": %s: ignorerad" -#: locale/programs/locarchive.c:1212 +#: locale/programs/locarchive.c:1233 #, c-format msgid "incomplete set of locale files in \"%s\"" msgstr "ofullständig uppsättning av lokalfiler i \"%s\"" -#: locale/programs/locarchive.c:1276 +#: locale/programs/locarchive.c:1297 #, c-format msgid "cannot read all files in \"%s\": ignored" msgstr "kan inte läsa alla filer i \"%s\": ignorerad" -#: locale/programs/locarchive.c:1346 +#: locale/programs/locarchive.c:1367 #, c-format msgid "locale \"%s\" not in archive" msgstr "lokal \"%s\" finns inte i arkivet" -#: locale/programs/locfile.c:131 +#: locale/programs/locfile.c:132 #, c-format msgid "argument to `%s' must be a single character" msgstr "argumentet till \"%s\" mÃ¥ste vara ett enskilt tecken" -#: locale/programs/locfile.c:251 +#: locale/programs/locfile.c:252 msgid "syntax error: not inside a locale definition section" msgstr "syntaxfel: inte inne i en lokalsektion" -#: locale/programs/locfile.c:625 +#: locale/programs/locfile.c:626 #, c-format msgid "cannot open output file `%s' for category `%s'" msgstr "kan inte öppna utfil \"%s\" för kategori \"%s\"" -#: locale/programs/locfile.c:649 +#: locale/programs/locfile.c:650 #, c-format msgid "failure while writing data for category `%s'" msgstr "misslyckades skriva data för kategori \"%s\"" -#: locale/programs/locfile.c:745 +#: locale/programs/locfile.c:746 #, c-format msgid "cannot create output file `%s' for category `%s'" msgstr "kan inte skapa utfil \"%s\" för kategori \"%s\"" -#: locale/programs/locfile.c:781 +#: locale/programs/locfile.c:782 msgid "expect string argument for `copy'" msgstr "förväntar strängargument för \"copy\"" -#: locale/programs/locfile.c:785 +#: locale/programs/locfile.c:786 msgid "locale name should consist only of portable characters" msgstr "lokalnamn fÃ¥r endast bestÃ¥ av portabla tecken" -#: locale/programs/locfile.c:804 +#: locale/programs/locfile.c:805 msgid "no other keyword shall be specified when `copy' is used" msgstr "inget annat nyckelord fÃ¥r anges när \"copy\" används" -#: locale/programs/repertoire.c:229 locale/programs/repertoire.c:270 -#: locale/programs/repertoire.c:295 +#: locale/programs/locfile.c:819 +#, c-format +msgid "`%1$s' definition does not end with `END %1$s'" +msgstr "definition av \"%1$s\" slutar inte med \"END %1$s\"" + +#: 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 "syntaxfel i repertoartabellsdefinition: %s" -#: locale/programs/repertoire.c:271 +#: locale/programs/repertoire.c:272 msgid "no <Uxxxx> or <Uxxxxxxxx> value given" msgstr "inget <Uxxxx> eller <Uxxxxxxxx> värde angivet" -#: locale/programs/repertoire.c:331 +#: locale/programs/repertoire.c:332 #, c-format msgid "cannot save new repertoire map" msgstr "kan inte spara ny repertoartabell" -#: locale/programs/repertoire.c:342 +#: locale/programs/repertoire.c:343 #, c-format msgid "repertoire map file `%s' not found" msgstr "hittar inte repertoarfiltabell \"%s\"" -#: locale/programs/repertoire.c:449 -#, c-format -msgid "<%s> and <%s> are invalid names for range" -msgstr "<%s> och <%s> är ogiltiga namn för intervall" - -#: locale/programs/repertoire.c:456 -msgid "upper limit in range is not smaller then lower limit" -msgstr "övre gräns i intervall är inte mindre än undre gräns" - #: login/programs/pt_chown.c:74 #, c-format msgid "Set the owner, group and access permission of the slave pseudo terminal corresponding to the master pseudo terminal passed on file descriptor `%d'. This is the helper program for the `grantpt' function. It is not intended to be run directly from the command line.\n" @@ -2801,33 +2762,33 @@ msgstr "för mÃ¥nga argument" msgid "needs to be installed setuid `root'" msgstr "behöver installeras \"setuid root\"" -#: malloc/mcheck.c:324 +#: malloc/mcheck.c:330 msgid "memory is consistent, library is buggy\n" msgstr "minnet är konsistent, biblioteket är felaktigt\n" -#: malloc/mcheck.c:327 +#: malloc/mcheck.c:333 msgid "memory clobbered before allocated block\n" msgstr "minnet förstört före allokerat block\n" -#: malloc/mcheck.c:330 +#: malloc/mcheck.c:336 msgid "memory clobbered past end of allocated block\n" msgstr "minnet förstört efter slutet pÃ¥ allokerat block\n" -#: malloc/mcheck.c:333 +#: malloc/mcheck.c:339 msgid "block freed twice\n" msgstr "block frigjort tvÃ¥ gÃ¥nger\n" -#: malloc/mcheck.c:336 +#: malloc/mcheck.c:342 msgid "bogus mcheck_status, library is buggy\n" msgstr "felaktig mcheck_status, biblioteket är felaktigt\n" #: malloc/memusage.sh:27 -msgid "Try `memusage --help' for more information." -msgstr "Försök med \"memusage --help\" för mer information" +msgid "Try \\`memusage --help' for more information." +msgstr "Försök med \\\"memusage --help\\\" för mer information" #: malloc/memusage.sh:33 -msgid "memusage: option `$1' requires an argument" -msgstr "memusage: flaggan \"$1\" behöver ett argument" +msgid "memusage: option \\`$1' requires an argument" +msgstr "memusage: flaggan \\\"$1\\\" behöver ett argument" #: malloc/memusage.sh:39 msgid "" @@ -2839,7 +2800,7 @@ msgid "" " -d,--data=FILE Generate binary data file and store it in FILE\n" " -u,--unbuffered Don't buffer output\n" " -b,--buffer=SIZE Collect SIZE entries before writing them out\n" -" --no-timer Don't collect additional information though timer\n" +" --no-timer Don't collect additional information through timer\n" " -m,--mmap Also trace mmap & friends\n" "\n" " -?,--help Print this help and exit\n" @@ -2881,14 +2842,14 @@ msgstr "" " -x,--x-size=ANTAL Gör grafiken ANTAL pixlar bred\n" " -y,--y-size=ANTAL Gör grafiken ANTAL pixlar hög\n" "\n" -"Obligatoriska argument för lÃ¥nga flaggor är obligatoriska även för\n" +"Obligatoriska argument för lÃ¥nga flaggor är obligatoriska även för\n" "motsvarande korta.\n" "\n" "För felrapporteringsinstruktioner, se:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" "Rapportera fel eller synpunkter pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>." -#: malloc/memusage.sh:90 +#: malloc/memusage.sh:99 msgid "" "Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]\n" " [--buffer=SIZE] [--no-timer] [--time-based] [--total]\n" @@ -2900,51 +2861,51 @@ msgstr "" " [--title=STRÄNG] [--x-size=ANTAL] [--y-size=ANTAL]\n" " PROGRAM [PROGRAMFLAGGA]..." -#: malloc/memusage.sh:182 -msgid "memusage: option `${1##*=}' is ambiguous" -msgstr "memusage: flaggan \"${1##*=}\" är tvetydig" - #: malloc/memusage.sh:191 -msgid "memusage: unrecognized option `$1'" -msgstr "memusage: okänd flagga \"$1\"" +msgid "memusage: option \\`${1##*=}' is ambiguous" +msgstr "memusage: flaggan \\\"${1##*=}\\\" är tvetydig" + +#: malloc/memusage.sh:200 +msgid "memusage: unrecognized option \\`$1'" +msgstr "memusage: okänd flagga \\\"$1\\\"" -#: malloc/memusage.sh:204 +#: malloc/memusage.sh:213 msgid "No program name given" msgstr "Inget programnamn givet" -#: malloc/memusagestat.c:53 +#: malloc/memusagestat.c:54 msgid "Name output file" msgstr "Namnresultatfil" -#: malloc/memusagestat.c:54 +#: malloc/memusagestat.c:55 msgid "Title string used in output graphic" msgstr "Titelsträng att använda i resultatgrafiken" -#: malloc/memusagestat.c:55 +#: malloc/memusagestat.c:56 msgid "Generate output linear to time (default is linear to number of function calls)" msgstr "Generera utdata linjär i tiden (standardvärde är linjär mot antal funktionsanrop)" -#: malloc/memusagestat.c:57 +#: malloc/memusagestat.c:58 msgid "Also draw graph for total memory consumption" msgstr "Visa ocksÃ¥ en graf av totala minnesÃ¥tgÃ¥ngen" -#: malloc/memusagestat.c:58 -msgid "make output graphic VALUE pixel wide" -msgstr "gör resultatgrafiken ANTAL pixlar bred" - #: malloc/memusagestat.c:59 -msgid "make output graphic VALUE pixel high" -msgstr "gör resultatgrafiken ANTAL pixlar hög" +msgid "Make output graphic VALUE pixels wide" +msgstr "Gör resultatgrafiken ANTAL pixlar bred" -#: malloc/memusagestat.c:64 +#: malloc/memusagestat.c:60 +msgid "Make output graphic VALUE pixels high" +msgstr "Gör resultatgrafiken ANTAL pixlar hög" + +#: malloc/memusagestat.c:65 msgid "Generate graphic from memory profiling data" msgstr "Generera grafik frÃ¥n data frÃ¥n minnesprofilering" -#: malloc/memusagestat.c:67 +#: malloc/memusagestat.c:68 msgid "DATAFILE [OUTFILE]" msgstr "DATAFIL [UTFIL]" -#: misc/error.c:118 timezone/zic.c:396 +#: misc/error.c:118 timezone/zic.c:417 msgid "Unknown system error" msgstr "Okänt systemfel" @@ -3435,7 +3396,7 @@ msgstr " Rekursiva medlemmar:\n" msgid " No recursive members\n" msgstr " Inga rekursiva medlemmar\n" -#: nis/nis_print_group_entry.c:149 nis/nis_print_group_entry.c:165 +#: nis/nis_print_group_entry.c:149 msgid " Explicit nonmembers:\n" msgstr " Explicita icke-medlemmar:\n" @@ -3451,6 +3412,10 @@ msgstr " Implicita icke-medlemmar:\n" msgid " No implicit nonmembers\n" msgstr " Inga implicita icke-medlemmar\n" +#: nis/nis_print_group_entry.c:165 +msgid " Recursive nonmembers:\n" +msgstr " Rekursiva icke-medlemmar:\n" + #: nis/nis_print_group_entry.c:170 msgid " No recursive nonmembers\n" msgstr " Inga rekursiva icke-medlemmar\n" @@ -3463,7 +3428,7 @@ msgstr "DES-post för nätnamn %s är inte unikt\n" #: nis/nss_nisplus/nisplus-publickey.c:220 #, c-format -msgid "netname2user: missing group id list in `%s'." +msgid "netname2user: missing group id list in `%s'" msgstr "netname2user: gruppid-lista saknas i \"%s\"." #: nis/nss_nisplus/nisplus-publickey.c:302 @@ -3581,381 +3546,390 @@ msgstr "yp_update: kan inte omvandla värd till nätnamn\n" msgid "yp_update: cannot get server address\n" msgstr "yp_update: kan inte hämta serveradress\n" -#: nscd/aicache.c:76 nscd/hstcache.c:461 +#: nscd/aicache.c:77 nscd/hstcache.c:462 #, c-format msgid "Haven't found \"%s\" in hosts cache!" msgstr "Hittar inte \"%s\" i värdcache!" -#: nscd/aicache.c:78 nscd/hstcache.c:463 +#: nscd/aicache.c:79 nscd/hstcache.c:464 #, c-format msgid "Reloading \"%s\" in hosts cache!" msgstr "Omladdar \"%s\" i värdcache!" -#: nscd/cache.c:126 +#: nscd/cache.c:146 #, c-format msgid "add new entry \"%s\" of type %s for %s to cache%s" msgstr "lägg till ny post \"%s\" av typen %s för %s till cache%s" -#: nscd/cache.c:233 nscd/connections.c:750 +#: nscd/cache.c:148 +msgid " (first)" +msgstr " (första)" + +#: nscd/cache.c:256 nscd/connections.c:786 #, c-format msgid "cannot stat() file `%s': %s" msgstr "kan inte ta status pÃ¥ fil \"%s\": %s" -#: nscd/cache.c:262 +#: nscd/cache.c:285 #, c-format msgid "pruning %s cache; time %ld" msgstr "beskär %s cache; tid %ld" -#: nscd/cache.c:289 +#: nscd/cache.c:312 #, c-format msgid "considering %s entry \"%s\", timeout %<PRIu64>" msgstr "överväger %s-post \"%s\", tidsgräns %<PRIu64>" -#: nscd/connections.c:469 nscd/connections.c:481 nscd/connections.c:493 -#: nscd/connections.c:512 +#: nscd/connections.c:505 nscd/connections.c:517 nscd/connections.c:529 +#: nscd/connections.c:548 #, c-format msgid "invalid persistent database file \"%s\": %s" msgstr "ogiltig persistent databasfil \"%s\": %s" -#: nscd/connections.c:483 +#: nscd/connections.c:519 msgid "header size does not match" msgstr "huvudstorlek stämmer inte" -#: nscd/connections.c:495 +#: nscd/connections.c:531 msgid "file size does not match" msgstr "filstorlek stämmer inte" -#: nscd/connections.c:514 +#: nscd/connections.c:550 msgid "verification failed" msgstr "verifikation misslyckades" -#: nscd/connections.c:528 +#: nscd/connections.c:564 #, c-format msgid "suggested size of table for database %s larger than the persistent database's table" msgstr "föreslagen storlek pÃ¥ tabellen för databas %s är större än den persistenta databasens tabell" -#: nscd/connections.c:538 nscd/connections.c:619 +#: nscd/connections.c:574 nscd/connections.c:655 #, c-format msgid "cannot create read-only descriptor for \"%s\"; no mmap" msgstr "kan inte skapa läsbar filidentifierare för \"%s\", ingen mmap" -#: nscd/connections.c:598 +#: nscd/connections.c:634 #, c-format msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart" msgstr "databas för %s korrupt eller använd av flera samtidigt; ta bort %s manuellt om det behövs och starta om" -#: nscd/connections.c:605 +#: nscd/connections.c:641 #, c-format msgid "cannot create %s; no persistent database used" msgstr "kan inte skapa %s; ingen persistent databas används" -#: nscd/connections.c:608 +#: nscd/connections.c:644 #, c-format msgid "cannot create %s; no sharing possible" msgstr "kan inte skapa %s; ingen delning möjlig" -#: nscd/connections.c:679 +#: nscd/connections.c:715 #, c-format msgid "cannot write to database file %s: %s" msgstr "kan inte skriva till databasfil %s: %s" -#: nscd/connections.c:713 +#: nscd/connections.c:749 #, c-format msgid "cannot set socket to close on exec: %s; disabling paranoia mode" msgstr "kan inte sätta uttag (socket) att stängas vid programstart: %s; kopplar ur paranoialäge" -#: nscd/connections.c:763 +#: nscd/connections.c:799 #, c-format msgid "cannot open socket: %s" msgstr "kan inte öppna uttag (socket): %s" -#: nscd/connections.c:780 +#: nscd/connections.c:816 #, c-format msgid "cannot change socket to nonblocking mode: %s" msgstr "kan inte ändra uttag (socket) till icke-blockerande: %s" -#: nscd/connections.c:788 +#: nscd/connections.c:824 #, c-format msgid "cannot set socket to close on exec: %s" msgstr "kan inte sätta uttag (socket) att stängas vid programstart: %s" -#: nscd/connections.c:799 +#: nscd/connections.c:835 #, c-format msgid "cannot enable socket to accept connections: %s" msgstr "kan inte fÃ¥ uttag (socket) att acceptera förbindelser: %s" -#: nscd/connections.c:892 +#: nscd/connections.c:926 #, c-format msgid "provide access to FD %d, for %s" msgstr "ge Ã¥tkomst till FD %d, för %s" -#: nscd/connections.c:904 +#: nscd/connections.c:938 #, c-format msgid "cannot handle old request version %d; current version is %d" msgstr "kan inte hantera äldre förfrÃ¥gansversion %d, nuvarande version är %d" -#: nscd/connections.c:954 nscd/connections.c:1007 +#: nscd/connections.c:980 nscd/connections.c:1033 #, c-format msgid "cannot write result: %s" msgstr "kan inte skriva resultat: %s" -#: nscd/connections.c:1082 +#: nscd/connections.c:1116 #, c-format msgid "error getting caller's id: %s" msgstr "kunde inte hämta anropandes identitet: %s" -#: nscd/connections.c:1140 nscd/connections.c:1154 +#: nscd/connections.c:1175 #, c-format msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode" msgstr "kan inte öppna /proc/slef/cmdline: %s, kopplar ur paranoialäge" -#: nscd/connections.c:1194 +#: nscd/connections.c:1189 +#, c-format +msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode" +msgstr "kan inte läsa /proc/self/cmdline: %s, kopplar ur paranoialäge" + +#: nscd/connections.c:1229 #, c-format msgid "cannot change to old UID: %s; disabling paranoia mode" msgstr "kan inte byta till föregÃ¥ende UID: %s; kopplar ur paranoialäge" -#: nscd/connections.c:1204 +#: nscd/connections.c:1239 #, c-format msgid "cannot change to old GID: %s; disabling paranoia mode" msgstr "kan inte byta till föregÃ¥ende GID: %s; kopplar ur paranoialäge" -#: nscd/connections.c:1217 +#: nscd/connections.c:1252 #, c-format msgid "cannot change to old working directory: %s; disabling paranoia mode" msgstr "kan inte byta till föregÃ¥ende arbetskatalog: %s; kopplar ur paranoialäge" -#: nscd/connections.c:1245 +#: nscd/connections.c:1280 #, c-format msgid "re-exec failed: %s; disabling paranoia mode" msgstr "Ã¥terstart misslyckades: %s; kopplar ur paranoialäge" -#: nscd/connections.c:1254 +#: nscd/connections.c:1289 #, c-format msgid "cannot change current working directory to \"/\": %s" msgstr "kan inte byta aktuell katalog to \"/\": %s" -#: nscd/connections.c:1372 +#: nscd/connections.c:1407 #, c-format msgid "short read while reading request: %s" msgstr "fattas data vid läsning av begäran: %s" -#: nscd/connections.c:1404 +#: nscd/connections.c:1438 #, c-format msgid "key length in request too long: %d" msgstr "nyckellängd i begäran för lÃ¥ng: %d" -#: nscd/connections.c:1417 +#: nscd/connections.c:1451 #, c-format msgid "short read while reading request key: %s" msgstr "fattas data vid läsning av begäransnyckel: %s" -#: nscd/connections.c:1426 +#: nscd/connections.c:1460 #, c-format msgid "handle_request: request received (Version = %d) from PID %ld" msgstr "handle_request: begäran mottagen (Version = %d) frÃ¥n PID %ld" -#: nscd/connections.c:1431 +#: nscd/connections.c:1465 #, c-format msgid "handle_request: request received (Version = %d)" msgstr "handle_request: begäran mottagen (Version = %d)" -#: nscd/connections.c:1792 +#: nscd/connections.c:1826 #, c-format msgid "could only start %d threads; terminating" msgstr "kunde bara starta %d trÃ¥dar; avslutar" -#: nscd/connections.c:1840 nscd/connections.c:1841 nscd/connections.c:1858 -#: nscd/connections.c:1867 nscd/connections.c:1885 nscd/connections.c:1896 -#: nscd/connections.c:1907 +#: nscd/connections.c:1874 nscd/connections.c:1875 nscd/connections.c:1892 +#: nscd/connections.c:1901 nscd/connections.c:1919 nscd/connections.c:1930 +#: nscd/connections.c:1941 #, c-format msgid "Failed to run nscd as user '%s'" msgstr "Misslyckades att köra nscd som användare \"%s\"" -#: nscd/connections.c:1859 +#: nscd/connections.c:1893 #, c-format msgid "initial getgrouplist failed" msgstr "första getgrouplist misslyckades" -#: nscd/connections.c:1868 +#: nscd/connections.c:1902 #, c-format msgid "getgrouplist failed" msgstr "getgrouplist misslyckades" -#: nscd/connections.c:1886 +#: nscd/connections.c:1920 #, c-format msgid "setgroups failed" msgstr "setgroups misslyckades" -#: nscd/grpcache.c:400 nscd/hstcache.c:411 nscd/initgrcache.c:411 -#: nscd/pwdcache.c:395 +#: nscd/grpcache.c:402 nscd/hstcache.c:412 nscd/initgrcache.c:412 +#: nscd/pwdcache.c:397 nscd/servicescache.c:342 #, c-format msgid "short write in %s: %s" msgstr "ofullständig skrivning i %s: %s" -#: nscd/grpcache.c:443 nscd/initgrcache.c:77 +#: nscd/grpcache.c:445 nscd/initgrcache.c:78 #, c-format msgid "Haven't found \"%s\" in group cache!" msgstr "Hittar inte \"%s\" i gruppcache!" -#: nscd/grpcache.c:445 nscd/initgrcache.c:79 +#: nscd/grpcache.c:447 nscd/initgrcache.c:80 #, c-format msgid "Reloading \"%s\" in group cache!" msgstr "Omladdar \"%s\" i gruppcache!" -#: nscd/grpcache.c:536 +#: nscd/grpcache.c:524 #, c-format msgid "Invalid numeric gid \"%s\"!" msgstr "Ogiltigt numeriskt gruppid (gid) \"%s\"!" -#: nscd/mem.c:382 +#: nscd/mem.c:383 #, c-format msgid "freed %zu bytes in %s cache" msgstr "frigorde %zu byte i %s cache" -#: nscd/mem.c:511 +#: nscd/mem.c:512 #, c-format msgid "no more memory for database '%s'" msgstr "inget mer minne för databas \"%s\"" -#: nscd/nscd.c:97 +#: nscd/nscd.c:98 msgid "Read configuration data from NAME" msgstr "Läs konfigurationsdata frÃ¥n NAMN" -#: nscd/nscd.c:99 +#: nscd/nscd.c:100 msgid "Do not fork and display messages on the current tty" msgstr "Skapa inte barnprocess, visa meddelanden pÃ¥ nuvarande tty" -#: nscd/nscd.c:100 +#: nscd/nscd.c:101 msgid "NUMBER" msgstr "ANTAL" -#: nscd/nscd.c:100 +#: nscd/nscd.c:101 msgid "Start NUMBER threads" msgstr "Starta ANTAL trÃ¥dar" -#: nscd/nscd.c:101 +#: nscd/nscd.c:102 msgid "Shut the server down" msgstr "Avsluta servern" -#: nscd/nscd.c:102 +#: nscd/nscd.c:103 msgid "Print current configuration statistic" msgstr "Skriv ut nuvarande konfigurationsstatistik" -#: nscd/nscd.c:103 +#: nscd/nscd.c:104 msgid "TABLE" msgstr "TABELL" -#: nscd/nscd.c:104 +#: nscd/nscd.c:105 msgid "Invalidate the specified cache" msgstr "Invalidera den angivna cachen" -#: nscd/nscd.c:105 +#: nscd/nscd.c:106 msgid "TABLE,yes" msgstr "TABELL,ja" -#: nscd/nscd.c:106 +#: nscd/nscd.c:107 msgid "Use separate cache for each user" msgstr "Använd separat cache för varje användare" -#: nscd/nscd.c:111 +#: nscd/nscd.c:112 msgid "Name Service Cache Daemon." msgstr "Namntjänst cache-demon" -#: nscd/nscd.c:143 nss/getent.c:858 nss/makedb.c:123 +#: nscd/nscd.c:144 nss/getent.c:858 nss/makedb.c:123 #, c-format msgid "wrong number of arguments" msgstr "fel antal argument" -#: nscd/nscd.c:153 +#: nscd/nscd.c:154 #, c-format msgid "failure while reading configuration file; this is fatal" msgstr "kan inte läsa konfigurationsdata, detta är fatalt" -#: nscd/nscd.c:162 +#: nscd/nscd.c:163 #, c-format msgid "already running" msgstr "kör redan" -#: nscd/nscd.c:177 nscd/nscd.c:232 +#: nscd/nscd.c:178 nscd/nscd.c:233 #, c-format msgid "cannot fork" msgstr "kan inte skapa barnprocess" -#: nscd/nscd.c:240 +#: nscd/nscd.c:241 #, c-format msgid "cannot change current working directory to \"/\"" msgstr "kan inte byta aktuell katalog till \"/\"" -#: nscd/nscd.c:248 +#: nscd/nscd.c:249 msgid "Could not create log file" msgstr "Kunde inte skapa loggfil" -#: nscd/nscd.c:301 nscd/nscd.c:326 nscd/nscd_stat.c:172 +#: nscd/nscd.c:302 nscd/nscd.c:327 nscd/nscd_stat.c:172 #, c-format msgid "Only root is allowed to use this option!" msgstr "Bara root har tillÃ¥telse att använda denna operation!" -#: nscd/nscd.c:359 nscd/nscd_stat.c:191 +#: nscd/nscd.c:364 nscd/nscd_stat.c:191 #, c-format msgid "write incomplete" msgstr "ofullständing skrivning" -#: nscd/nscd.c:370 +#: nscd/nscd.c:375 #, c-format msgid "cannot read invalidate ACK" msgstr "kan inte läsa ogiltigförklarings-ACK" -#: nscd/nscd.c:376 +#: nscd/nscd.c:381 #, c-format msgid "invalidation failed" msgstr "ogiltigförklaring misslyckades" -#: nscd/nscd.c:386 +#: nscd/nscd.c:391 #, c-format msgid "secure services not implemented anymore" msgstr "säkra tjänster är inte implementerade längre" -#: nscd/nscd_conf.c:55 +#: nscd/nscd_conf.c:57 #, c-format -msgid "database %s is not supported\n" -msgstr "databas \"%s\" stöds ej\n" +msgid "database %s is not supported" +msgstr "databas \"%s\" stöds ej" -#: nscd/nscd_conf.c:106 +#: nscd/nscd_conf.c:108 #, c-format msgid "Parse error: %s" msgstr "Parsfel: %s" -#: nscd/nscd_conf.c:191 +#: nscd/nscd_conf.c:193 #, c-format msgid "Must specify user name for server-user option" msgstr "Användarnamn krävs för \"server-user\"-flaggan" -#: nscd/nscd_conf.c:198 +#: nscd/nscd_conf.c:200 #, c-format msgid "Must specify user name for stat-user option" msgstr "Användarnamn krävs för \"stat-user\"-flaggan" -#: nscd/nscd_conf.c:242 +#: nscd/nscd_conf.c:244 #, c-format msgid "invalid value for 'reload-count': %u" msgstr "ogiltigt värde för \"reload-count\": %u" -#: nscd/nscd_conf.c:257 +#: nscd/nscd_conf.c:259 #, c-format msgid "Must specify value for restart-interval option" msgstr "MÃ¥ste ge värde för \"restart-interval\"-flaggan" -#: nscd/nscd_conf.c:271 +#: nscd/nscd_conf.c:273 #, c-format msgid "Unknown option: %s %s %s" msgstr "Okänd flagga: %s %s %s" -#: nscd/nscd_conf.c:284 +#: nscd/nscd_conf.c:286 #, c-format msgid "cannot get current working directory: %s; disabling paranoia mode" msgstr "kan inte hämta aktuell katalog: %s; kopplar ut paranoialäge" -#: nscd/nscd_conf.c:304 +#: nscd/nscd_conf.c:306 #, c-format msgid "maximum file size for %s database too small" msgstr "maximal filstorlek för \"%s\"-databasen är för liten" @@ -4085,97 +4059,93 @@ msgstr "" "%15<PRIuMAX> antal misslyckade minnesallokeringar\n" "%15s kontrollera /etc/%s för ändringar\n" -#: nscd/pwdcache.c:438 +#: nscd/pwdcache.c:440 #, c-format msgid "Haven't found \"%s\" in password cache!" msgstr "Hittar inte \"%s\" i lösenordscache!" -#: nscd/pwdcache.c:440 +#: nscd/pwdcache.c:442 #, c-format msgid "Reloading \"%s\" in password cache!" msgstr "Omladdar \"%s\" i lösenordscache!" -#: nscd/pwdcache.c:532 +#: nscd/pwdcache.c:520 #, c-format msgid "Invalid numeric uid \"%s\"!" msgstr "Ogiltigt numeriskt användarid (uid) \"%s\"!" -#: nscd/selinux.c:151 +#: nscd/selinux.c:156 #, c-format msgid "Failed opening connection to the audit subsystem: %m" msgstr "Misslyckades med att öppna en förbindelse till undersystemet för granskning (audit): %m" -#: nscd/selinux.c:172 +#: nscd/selinux.c:177 msgid "Failed to set keep-capabilities" msgstr "Misslyckades med att sätta \"keep\"-kapabiliteter" -#: nscd/selinux.c:173 nscd/selinux.c:232 +#: nscd/selinux.c:178 nscd/selinux.c:241 #, c-format msgid "prctl(KEEPCAPS) failed" msgstr "prctl(KEEPCAPS) misslyckades" -#: nscd/selinux.c:187 +#: nscd/selinux.c:192 msgid "Failed to initialize drop of capabilities" msgstr "Misslyckades med att initiera borttagning av kapabiliteter" -#: nscd/selinux.c:188 +#: nscd/selinux.c:193 #, c-format msgid "cap_init failed" msgstr "cap_init misslyckades" -#: nscd/selinux.c:205 -msgid "Failed to drop capabilities\n" -msgstr "Misslyckades med att ta bort kapabiliteter\n" +#: nscd/selinux.c:214 nscd/selinux.c:231 +msgid "Failed to drop capabilities" +msgstr "Misslyckades med att ta bort kapabiliteter" -#: nscd/selinux.c:206 nscd/selinux.c:223 +#: nscd/selinux.c:215 nscd/selinux.c:232 #, c-format msgid "cap_set_proc failed" msgstr "cap_set_proc misslyckades" -#: nscd/selinux.c:222 -msgid "Failed to drop capabilities" -msgstr "Misslyckades med att ta bort kapabiliteter" - -#: nscd/selinux.c:231 +#: nscd/selinux.c:240 msgid "Failed to unset keep-capabilities" msgstr "Misslyckades med att ta bort \"keep\"-kapabiliteter" -#: nscd/selinux.c:247 +#: nscd/selinux.c:256 msgid "Failed to determine if kernel supports SELinux" msgstr "Misslyckades med att ta reda pÃ¥ om kärnan stödjer SELinux" -#: nscd/selinux.c:262 +#: nscd/selinux.c:271 #, c-format msgid "Failed to start AVC thread" msgstr "Misslyckades med att starta AVC-trÃ¥d" -#: nscd/selinux.c:284 +#: nscd/selinux.c:293 #, c-format msgid "Failed to create AVC lock" msgstr "Misslyckade med att skapa AVC-lÃ¥s" -#: nscd/selinux.c:324 +#: nscd/selinux.c:333 #, c-format msgid "Failed to start AVC" msgstr "Misslyckades med att starta AVC" -#: nscd/selinux.c:326 +#: nscd/selinux.c:335 msgid "Access Vector Cache (AVC) started" msgstr "Access Vector Cache (AVC) startad" -#: nscd/selinux.c:347 +#: nscd/selinux.c:356 msgid "Error getting context of socket peer" msgstr "Kunde inte hämta kontext för uttagsparter (socket peer)" -#: nscd/selinux.c:352 +#: nscd/selinux.c:361 msgid "Error getting context of nscd" msgstr "Kunde inte hämta kontext för nscd" -#: nscd/selinux.c:358 +#: nscd/selinux.c:367 msgid "Error getting sid from context" msgstr "Kunde inte hämta \"sid\" frÃ¥n kontext" -#: nscd/selinux.c:390 +#: nscd/selinux.c:399 #, c-format msgid "" "\n" @@ -4202,6 +4172,16 @@ msgstr "" "%15u CAV-sonderingar\n" "%15u CAV-missar\n" +#: nscd/servicescache.c:389 +#, c-format +msgid "Haven't found \"%s\" in services cache!" +msgstr "Hittar inte \"%s\" i servicecache!" + +#: nscd/servicescache.c:391 +#, c-format +msgid "Reloading \"%s\" in services cache!" +msgstr "Omladdar \"%s\" i servicecache!" + #: nss/getent.c:52 msgid "database [key ...]" msgstr "databas [nyckel ...]" @@ -4212,10 +4192,10 @@ msgstr "Tjänstekonfiguration som ska användas" #: nss/getent.c:62 msgid "" -"Get entries from administrative database.For bug reporting instructions, please see:\n" +"Get entries from administrative database.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" -"Hämta poster frÃ¥n den administrativa databasenFör felrapporteringsinstruktioner, se:\n" +"Hämta poster frÃ¥n den administrativa databasen\vFör felrapporteringsinstruktioner, se:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" "Rapportera fel eller synpunkter pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>.\n" @@ -4297,31 +4277,31 @@ msgstr "problem när \"%s\" lästes" msgid "while reading database" msgstr "när databasen lästes" -#: posix/getconf.c:940 +#: posix/getconf.c:945 #, c-format msgid "Usage: %s [-v specification] variable_name [pathname]\n" msgstr "Användning: %s [-v specifikation] variabelnamn [sökväg]\n" -#: posix/getconf.c:943 +#: posix/getconf.c:948 #, c-format msgid " %s -a [pathname]\n" msgstr " %s -a [sökväg]\n" -#: posix/getconf.c:1062 +#: posix/getconf.c:1067 #, c-format msgid "unknown specification \"%s\"" msgstr "okänd specifikation \"%s\"" -#: posix/getconf.c:1090 +#: posix/getconf.c:1095 #, c-format msgid "Couldn't execute %s" msgstr "Kunde inte exekvera %s" -#: posix/getconf.c:1130 posix/getconf.c:1146 +#: posix/getconf.c:1135 posix/getconf.c:1151 msgid "undefined" msgstr "odefinierad" -#: posix/getconf.c:1168 +#: posix/getconf.c:1173 #, c-format msgid "Unrecognized variable `%s'" msgstr "Okänd variabel \"%s\"" @@ -4540,8 +4520,8 @@ msgid "authunix_create: out of memory\n" msgstr "authunix_create: minnet slut\n" #: sunrpc/auth_unix.c:350 -msgid "auth_none.c - Fatal marshalling problem" -msgstr "auth_none.c - Fatalt kodningsproblem" +msgid "auth_unix.c: Fatal marshalling problem" +msgstr "auth_unix.c - Fatalt kodningsproblem" #: sunrpc/clnt_perr.c:118 sunrpc/clnt_perr.c:139 #, c-format @@ -4666,8 +4646,8 @@ msgid "Failed (unspecified error)" msgstr "Misslyckades (ospecificerat fel)" #: sunrpc/clnt_raw.c:117 -msgid "clnt_raw.c - Fatal header serialization error." -msgstr "clnt_raw.c - Fatalt fel vid serialisering" +msgid "clnt_raw.c: fatal header serialization error" +msgstr "clnt_raw.c: fatalt fel vid serialisering" #: sunrpc/clnt_tcp.c:131 msgid "clnttcp_create: out of memory\n" @@ -4682,8 +4662,8 @@ msgid "clntunix_create: out of memory\n" msgstr "clntunix_create: minnet slut\n" #: sunrpc/pm_getmaps.c:83 -msgid "pmap_getmaps rpc problem" -msgstr "pmap_getmaps rpc problem" +msgid "pmap_getmaps.c: rpc problem" +msgstr "pmap_getmaps.c rpc problem" #: sunrpc/pmap_clnt.c:129 msgid "Cannot register service" @@ -4745,8 +4725,8 @@ msgstr "%s: C preprocessorn avslutades med slutstatus %d\n" #: sunrpc/rpc_main.c:460 #, c-format -msgid "illegal nettype :`%s'\n" -msgstr "otillÃ¥ten nättyp: \"%s\"\n" +msgid "illegal nettype: `%s'\n" +msgstr "ogiltig nättyp: \"%s\"\n" #: sunrpc/rpc_main.c:1122 #, c-format @@ -4919,7 +4899,11 @@ msgstr "rpcinfo: %s är en okänd tjänst\n" msgid "rpcinfo: %s is unknown host\n" msgstr "rpcinfo: %s är en okänd värd\n" -#: sunrpc/svc_run.c:76 +#: sunrpc/svc_run.c:70 +msgid "svc_run: - out of memory" +msgstr "svc_run: - minnet slut" + +#: sunrpc/svc_run.c:90 msgid "svc_run: - poll failed" msgstr "svc_run: - poll misslyckades" @@ -6118,403 +6102,395 @@ msgstr "kan inte öppna \"%s\"" msgid "cannot read header from `%s'" msgstr "kan inte läsa huvud frÃ¥n \"%s\"" -#: timezone/zdump.c:215 +#: timezone/zdump.c:211 msgid "lacks alphabetic at start" msgstr "saknar alfabetiskt tecken i början" -#: timezone/zdump.c:217 +#: timezone/zdump.c:213 msgid "has fewer than 3 alphabetics" msgstr "har färre än 3 alfabetiska tecken" -#: timezone/zdump.c:219 +#: timezone/zdump.c:215 msgid "has more than 6 alphabetics" msgstr "har fler än 6 alfabetiska tecken" -#: timezone/zdump.c:227 +#: timezone/zdump.c:223 msgid "differs from POSIX standard" msgstr "skiljer sig frÃ¥n POSIX-standard" -#: timezone/zdump.c:233 +#: timezone/zdump.c:229 #, c-format msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n" msgstr "%s: varning: zon \"%s\" förkortning \"%s\": %s\n" -#: timezone/zdump.c:284 +#: timezone/zdump.c:280 #, c-format msgid "%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n" msgstr "%s: användning är %s [ --version ] [ -v ] [ -c [startÃ¥r,}slutÃ¥r ] zonnamn ...\n" -#: timezone/zdump.c:301 +#: timezone/zdump.c:297 #, c-format msgid "%s: wild -c argument %s\n" msgstr "%s: argument \"%s\" till flaggan -c har fel format\n" -#: timezone/zdump.c:392 +#: timezone/zdump.c:388 msgid "Error writing to standard output" msgstr "Fel vid skrivning till standard ut" -#: timezone/zdump.c:415 +#: timezone/zdump.c:411 #, c-format msgid "%s: use of -v on system with floating time_t other than float or double\n" msgstr "%s: använder -v pÃ¥ ett system där time_t är ett annat flyttal än \"float\" eller \"double\"\n" -#: timezone/zic.c:371 +#: timezone/zic.c:392 #, c-format msgid "%s: Memory exhausted: %s\n" msgstr "%s: Minnet slut: %s\n" -#: timezone/zic.c:430 +#: timezone/zic.c:451 #, c-format msgid "\"%s\", line %d: %s" msgstr "\"%s\", rad %d: %s" -#: timezone/zic.c:433 +#: timezone/zic.c:454 #, c-format msgid " (rule from \"%s\", line %d)" msgstr " (regel frÃ¥n \"%s\", rad %d)" -#: timezone/zic.c:445 +#: timezone/zic.c:466 msgid "warning: " msgstr "varning: " -#: timezone/zic.c:455 +#: timezone/zic.c:476 #, c-format msgid "" -"%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" +"%s: usage is %s [ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" "\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" msgstr "" -"%s: användning är %s [ --version ] [ -s ] [ -v ] [ -l lokaltid ] [ -p posixregler ] \\\n" +"%s: användning är %s [ --version ] [ -v ] [ -l lokaltid ] [ -p posixregler ] \\\n" "\t[ -d katalog ] [ -L skottsekunder ] [ -y Ã¥rkontrollprogram ] [ filnamn ... ]\n" -#: timezone/zic.c:503 +#: timezone/zic.c:511 +msgid "wild compilation-time specification of zic_t" +msgstr "definitionen av zic_t vid kompilering är orimlig" + +#: timezone/zic.c:528 #, c-format msgid "%s: More than one -d option specified\n" msgstr "%s: Flaggan -d given mer än en gÃ¥ng\n" -#: timezone/zic.c:513 +#: timezone/zic.c:538 #, c-format msgid "%s: More than one -l option specified\n" msgstr "%s: Flaggan -l given mer än en gÃ¥ng\n" -#: timezone/zic.c:523 +#: timezone/zic.c:548 #, c-format msgid "%s: More than one -p option specified\n" msgstr "%s: Flaggan -p given mer än en gÃ¥ng\n" -#: timezone/zic.c:533 +#: timezone/zic.c:558 #, c-format msgid "%s: More than one -y option specified\n" msgstr "%s: Flaggan -y given mer än en gÃ¥ng\n" -#: timezone/zic.c:543 +#: timezone/zic.c:568 #, c-format msgid "%s: More than one -L option specified\n" msgstr "%s: Flaggan -L given mer än en gÃ¥ng\n" -#: timezone/zic.c:592 +#: timezone/zic.c:617 msgid "link to link" msgstr "länk till länk" -#: timezone/zic.c:657 +#: timezone/zic.c:682 msgid "hard link failed, symbolic link used" msgstr "hÃ¥rd länk misslyckades, använder symbolisk länk" -#: timezone/zic.c:665 +#: timezone/zic.c:690 #, c-format msgid "%s: Can't link from %s to %s: %s\n" msgstr "%s: Kan inte länka frÃ¥n %s till %s: %s\n" -#: timezone/zic.c:774 timezone/zic.c:776 +#: timezone/zic.c:762 timezone/zic.c:764 msgid "same rule name in multiple files" msgstr "samma regelnamn i flera filer" -#: timezone/zic.c:817 +#: timezone/zic.c:805 msgid "unruly zone" msgstr "besvärlig zon" -#: timezone/zic.c:824 +#: timezone/zic.c:812 #, c-format msgid "%s in ruleless zone" msgstr "%s i zon utan regler" -#: timezone/zic.c:845 +#: timezone/zic.c:833 msgid "standard input" msgstr "standard in" -#: timezone/zic.c:850 +#: timezone/zic.c:838 #, c-format msgid "%s: Can't open %s: %s\n" msgstr "%s: Kan inte öppna %s: %s\n" -#: timezone/zic.c:861 +#: timezone/zic.c:849 msgid "line too long" msgstr "för lÃ¥ng rad" -#: timezone/zic.c:881 +#: timezone/zic.c:869 msgid "input line of unknown type" msgstr "inrad av okänd typ" -#: timezone/zic.c:897 +#: timezone/zic.c:885 #, c-format msgid "%s: Leap line in non leap seconds file %s\n" msgstr "%s: \"Leap\"-rad i fil %s som inte är skottsekundsfil\n" -#: timezone/zic.c:904 timezone/zic.c:1325 timezone/zic.c:1350 +#: timezone/zic.c:892 timezone/zic.c:1323 timezone/zic.c:1345 #, c-format msgid "%s: panic: Invalid l_value %d\n" msgstr "%s: panik: Ogiltigt l_value %d\n" -#: timezone/zic.c:912 +#: timezone/zic.c:900 #, c-format msgid "%s: Error reading %s\n" msgstr "%s: Fel vid läsning frÃ¥n %s\n" -#: timezone/zic.c:919 +#: timezone/zic.c:907 #, c-format msgid "%s: Error closing %s: %s\n" msgstr "%s: Fel vid stängning av %s: %s\n" -#: timezone/zic.c:924 +#: timezone/zic.c:912 msgid "expected continuation line not found" msgstr "förväntad fortsättningsrad inte funnen" -#: timezone/zic.c:968 +#: timezone/zic.c:956 msgid "24:00 not handled by pre-1998 versions of zic" msgstr "24:00 hanteras inte av zic-versioner före 1998" -#: timezone/zic.c:982 +#: timezone/zic.c:970 msgid "wrong number of fields on Rule line" msgstr "fel antal fält pÃ¥ \"Rule\"-rad" -#: timezone/zic.c:986 +#: timezone/zic.c:974 msgid "nameless rule" msgstr "namnlös regel" -#: timezone/zic.c:991 +#: timezone/zic.c:979 msgid "invalid saved time" msgstr "ogiltig sparad tid" -#: timezone/zic.c:1010 +#: timezone/zic.c:1000 msgid "wrong number of fields on Zone line" msgstr "fel antal fält pÃ¥ \"Zone\"-rad" -#: timezone/zic.c:1016 +#: timezone/zic.c:1006 #, c-format msgid "\"Zone %s\" line and -l option are mutually exclusive" msgstr "\"Zone %s\"-rad och flaggan -l är ömsesidigt uteslutande" -#: timezone/zic.c:1024 +#: timezone/zic.c:1014 #, c-format msgid "\"Zone %s\" line and -p option are mutually exclusive" msgstr "\"Zone %s\"-rad och flaggan -p är ömsesidigt uteslutande" -#: timezone/zic.c:1036 +#: timezone/zic.c:1026 #, c-format msgid "duplicate zone name %s (file \"%s\", line %d)" msgstr "dubblerat zonnamn %s (fil \"%s\", rad %d)" -#: timezone/zic.c:1052 +#: timezone/zic.c:1042 msgid "wrong number of fields on Zone continuation line" msgstr "fel antal fält pÃ¥ \"Zone\"-fortsättningsrad" -#: timezone/zic.c:1092 +#: timezone/zic.c:1082 msgid "invalid UTC offset" msgstr "ogiltigt UTC-tillägg" -#: timezone/zic.c:1095 +#: timezone/zic.c:1085 msgid "invalid abbreviation format" msgstr "ogiltigt förkortningsformat" -#: timezone/zic.c:1122 +#: timezone/zic.c:1114 msgid "Zone continuation line end time is not after end time of previous line" msgstr "Zon-fortsättningsradens sluttid är inte efter sluttiden pÃ¥ föregÃ¥ende rad" -#: timezone/zic.c:1150 +#: timezone/zic.c:1142 msgid "wrong number of fields on Leap line" msgstr "fel antal fält pÃ¥ \"Leap\"-rad" -#: timezone/zic.c:1159 +#: timezone/zic.c:1151 msgid "invalid leaping year" msgstr "ogiltigt skottÃ¥r" -#: timezone/zic.c:1174 timezone/zic.c:1280 +#: timezone/zic.c:1171 timezone/zic.c:1277 msgid "invalid month name" msgstr "ogiltigt mÃ¥nadsnamn" -#: timezone/zic.c:1187 timezone/zic.c:1402 timezone/zic.c:1416 +#: timezone/zic.c:1184 timezone/zic.c:1390 timezone/zic.c:1404 msgid "invalid day of month" msgstr "ogiltig dag i mÃ¥naden" -#: timezone/zic.c:1192 +#: timezone/zic.c:1189 msgid "time before zero" msgstr "tid före noll" -#: timezone/zic.c:1196 +#: timezone/zic.c:1193 msgid "time too small" msgstr "tid för kort" -#: timezone/zic.c:1200 +#: timezone/zic.c:1197 msgid "time too large" msgstr "tid för lÃ¥ng" -#: timezone/zic.c:1204 timezone/zic.c:1309 +#: timezone/zic.c:1201 timezone/zic.c:1306 msgid "invalid time of day" msgstr "ogiltig tid pÃ¥ dagen" -#: timezone/zic.c:1223 +#: timezone/zic.c:1220 msgid "illegal CORRECTION field on Leap line" msgstr "otillÃ¥tet \"CORRECTION\"-fält pÃ¥ \"Leap\"-rad" -#: timezone/zic.c:1228 +#: timezone/zic.c:1225 msgid "illegal Rolling/Stationary field on Leap line" msgstr "otillÃ¥tet \"Rolling/Stationary\"-fält pÃ¥ \"Leap\"-rad" -#: timezone/zic.c:1244 +#: timezone/zic.c:1241 msgid "wrong number of fields on Link line" msgstr "fel antal fält pÃ¥ \"Link\"-rad" -#: timezone/zic.c:1248 +#: timezone/zic.c:1245 msgid "blank FROM field on Link line" msgstr "tomt \"FROM\"-fält pÃ¥ \"Link\"-rad" -#: timezone/zic.c:1252 +#: timezone/zic.c:1249 msgid "blank TO field on Link line" msgstr "tomt \"TO\"-fält pÃ¥ \"Link\"-rad" -#: timezone/zic.c:1329 +#: timezone/zic.c:1327 msgid "invalid starting year" msgstr "ogiltigt startÃ¥r" -#: timezone/zic.c:1333 -msgid "starting year too low to be represented" -msgstr "startÃ¥r för litet för att kunna representeras" - -#: timezone/zic.c:1335 -msgid "starting year too high to be represented" -msgstr "startÃ¥r för stort för att kunna representeras" - -#: timezone/zic.c:1354 +#: timezone/zic.c:1349 msgid "invalid ending year" msgstr "ogiltigt slutÃ¥r" -#: timezone/zic.c:1358 -msgid "ending year too low to be represented" -msgstr "slutÃ¥r för litet för att kunna representeras" - -#: timezone/zic.c:1360 -msgid "ending year too high to be represented" -msgstr "slutÃ¥r för stort för att kunna representeras" - -#: timezone/zic.c:1363 +#: timezone/zic.c:1353 msgid "starting year greater than ending year" msgstr "startÃ¥r är större än slutÃ¥r" -#: timezone/zic.c:1370 +#: timezone/zic.c:1360 msgid "typed single year" msgstr "satte typ pÃ¥ endast ett Ã¥r" -#: timezone/zic.c:1407 +#: timezone/zic.c:1395 msgid "invalid weekday name" msgstr "ogiltigt veckodagsnamn" -#: timezone/zic.c:1521 +#: timezone/zic.c:1573 #, c-format msgid "%s: Can't remove %s: %s\n" msgstr "%s: Kan inte ta bort %s: %s\n" -#: timezone/zic.c:1531 +#: timezone/zic.c:1583 #, c-format msgid "%s: Can't create %s: %s\n" msgstr "%s: Kan inte skapa %s: %s\n" -#: timezone/zic.c:1598 +#: timezone/zic.c:1733 #, c-format msgid "%s: Error writing %s\n" msgstr "%s: Fel vid skrivning till %s\n" -#: timezone/zic.c:1789 +#: timezone/zic.c:2025 +msgid "no POSIX environment variable for zone" +msgstr "ingen POSIX-miljövariabel för zon" + +#: timezone/zic.c:2179 msgid "can't determine time zone abbreviation to use just after until time" msgstr "kan inte avgöra tidszonsförkortning att använda just efter \"until\"-tid" -#: timezone/zic.c:1832 +#: timezone/zic.c:2225 msgid "too many transitions?!" msgstr "för mÃ¥nga övergÃ¥ngar?!" -#: timezone/zic.c:1851 +#: timezone/zic.c:2244 msgid "internal error - addtype called with bad isdst" msgstr "internt fel - addtype anropad med felaktig isdst" -#: timezone/zic.c:1855 +#: timezone/zic.c:2248 msgid "internal error - addtype called with bad ttisstd" msgstr "internt fel - addtype anropad med felaktig ttisstd" -#: timezone/zic.c:1859 +#: timezone/zic.c:2252 msgid "internal error - addtype called with bad ttisgmt" msgstr "internt fel - addtype anropad med felaktig ttisgmt" -#: timezone/zic.c:1878 +#: timezone/zic.c:2271 msgid "too many local time types" msgstr "för mÃ¥nga lokala tidstyper" -#: timezone/zic.c:1906 +#: timezone/zic.c:2299 msgid "too many leap seconds" msgstr "för mÃ¥nga skottsekunder" -#: timezone/zic.c:1912 +#: timezone/zic.c:2305 msgid "repeated leap second moment" msgstr "upprepat skottsekundstillfälle" -#: timezone/zic.c:1964 +#: timezone/zic.c:2357 msgid "Wild result from command execution" msgstr "Vilt resultat frÃ¥n kommandokörning" -#: timezone/zic.c:1965 +#: timezone/zic.c:2358 #, c-format msgid "%s: command was '%s', result was %d\n" msgstr "%s: kommandot var \"%s\", resultatet blev %d\n" -#: timezone/zic.c:2062 +#: timezone/zic.c:2456 msgid "Odd number of quotation marks" msgstr "Ojämnt antal citationstecken" -#: timezone/zic.c:2083 timezone/zic.c:2102 +#: timezone/zic.c:2479 timezone/zic.c:2498 msgid "time overflow" msgstr "för stort tidsvärde" -#: timezone/zic.c:2149 +#: timezone/zic.c:2545 msgid "use of 2/29 in non leap-year" msgstr "använder 29/2 i icke-skottÃ¥r" -#: timezone/zic.c:2184 +#: timezone/zic.c:2580 msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic" msgstr "regeln gÃ¥r utanför start/slut pÃ¥ mÃ¥nad, fungerar inte pÃ¥ zic-versioner före 2004" -#: timezone/zic.c:2218 +#: timezone/zic.c:2612 msgid "time zone abbreviation lacks alphabetic at start" msgstr "tidszonsförkortning saknar alfabetiskt tecken i början" -#: timezone/zic.c:2220 +#: timezone/zic.c:2614 msgid "time zone abbreviation has more than 3 alphabetics" msgstr "tidszonsförkortning har fler än 3 alafabetiska tecken" -#: timezone/zic.c:2222 +#: timezone/zic.c:2616 msgid "time zone abbreviation has too many alphabetics" msgstr "tidszonsförkortning har för mÃ¥nga alabetiska tecken" -#: timezone/zic.c:2232 +#: timezone/zic.c:2626 msgid "time zone abbreviation differs from POSIX standard" msgstr "tidszonsförkortning skiljer sig frÃ¥n POSIX-standarden" -#: timezone/zic.c:2244 +#: timezone/zic.c:2638 msgid "too many, or too long, time zone abbreviations" msgstr "för mÃ¥nga eller för lÃ¥nga tidszonförkortningar" -#: timezone/zic.c:2285 +#: timezone/zic.c:2679 #, c-format msgid "%s: Can't create directory %s: %s\n" msgstr "%s: Kan inte skapa katalog %s: %s\n" -#: timezone/zic.c:2307 +#: timezone/zic.c:2701 #, c-format msgid "%s: %d did not sign extend correctly\n" msgstr "%s: %d teckenexpanderades inte korrekt\n" diff --git a/libc/po/tr.po b/libc/po/tr.po index 23bca1cf0..5a480d6fd 100644 --- a/libc/po/tr.po +++ b/libc/po/tr.po @@ -1,63 +1,63 @@ # Turkish translations for GNU libc messages. -# Copyright (C) 2006 Free Software Foundation, Inc. -# Onur Tolga ÅžehitoÄŸlu <onur@lcsl.metu.edu.tr>, 1998. -# Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2001, ..., 2006. +# Copyright (C) 2007 Free Software Foundation, Inc. # +# Nilgün Belma Bugüner <nilgun@buguner.name.tr>, 2001, ..., 2006, 2007. +# Onur Tolga ÅžehitoÄŸlu <onur@lcsl.metu.edu.tr>, 1998. msgid "" msgstr "" -"Project-Id-Version: libc 2.5\n" -"POT-Creation-Date: 2006-09-29 11:38-0700\n" -"PO-Revision-Date: 2006-10-07 19:03+0300\n" +"Project-Id-Version: libc 2.6.1\n" +"POT-Creation-Date: 2007-08-04 11:37+0200\n" +"PO-Revision-Date: 2007-08-04 16:10+0300\n" "Last-Translator: Nilgün Belma Bugüner <nilgun@buguner.name.tr>\n" "Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 1.9.1\n" +"X-Generator: KBabel 1.11.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: argp/argp-help.c:227 +#: argp/argp-help.c:228 #, c-format msgid "%.*s: ARGP_HELP_FMT parameter requires a value" msgstr "%.*s: ARGP_HELP_FMT parametresi ile bir deÄŸer vermek gerekir" -#: argp/argp-help.c:237 +#: argp/argp-help.c:238 #, c-format msgid "%.*s: Unknown ARGP_HELP_FMT parameter" msgstr "%.*s: ARGP_HELP_FMT parametresi bilinmiyor" -#: argp/argp-help.c:250 +#: argp/argp-help.c:251 #, c-format msgid "Garbage in ARGP_HELP_FMT: %s" msgstr "ARGP_HELP_FMT içinde bozulma saptandı: %s" -#: argp/argp-help.c:1214 +#: argp/argp-help.c:1215 msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." msgstr "Uzun seçeneklerdeki argümanlar zorunlu olsun olmasın kısa seçeneklerde de geçerlidir." -#: argp/argp-help.c:1600 +#: argp/argp-help.c:1601 msgid "Usage:" msgstr "Kullanımı:" -#: argp/argp-help.c:1604 +#: argp/argp-help.c:1605 msgid " or: " msgstr " veya: " -#: argp/argp-help.c:1616 +#: argp/argp-help.c:1617 msgid " [OPTION...]" msgstr " [SEÇENEK...]" -#: argp/argp-help.c:1643 +#: argp/argp-help.c:1644 #, c-format msgid "Try `%s --help' or `%s --usage' for more information.\n" msgstr "Daha fazla bilgi için `%s --help' veya `%s --usage' yazınız.\n" -#: argp/argp-help.c:1671 +#: argp/argp-help.c:1672 #, c-format msgid "Report bugs to %s.\n" msgstr "" "Yazılım hatalarını %s adresine\n" -"çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n" +"çeviri hatalarını <nilgun@belgeler.org> adresine bildiriniz.\n" #: argp/argp-parse.c:102 msgid "Give this help list" @@ -102,31 +102,31 @@ msgstr "%s%s%s:%u: %s%sUmulmadık hata: %s.\n" msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" msgstr "%s%s%s:%u: %s%sSav `%s' baÅŸarısızlığa uÄŸradı.\n" -#: catgets/gencat.c:109 catgets/gencat.c:113 nscd/nscd.c:96 nss/makedb.c:61 +#: catgets/gencat.c:110 catgets/gencat.c:114 nscd/nscd.c:97 nss/makedb.c:61 msgid "NAME" msgstr "Ä°SÄ°M" -#: catgets/gencat.c:110 +#: catgets/gencat.c:111 msgid "Create C header file NAME containing symbol definitions" msgstr "Sembol tanımlarını içeren C baÅŸlık dosyası Ä°SÄ°M'i oluÅŸturur" -#: catgets/gencat.c:112 +#: catgets/gencat.c:113 msgid "Do not use existing catalog, force new output file" msgstr "Mevcut kataloÄŸu kullanmaz, yeni çıktı dosyasını zorlar" -#: catgets/gencat.c:113 nss/makedb.c:61 +#: catgets/gencat.c:114 nss/makedb.c:61 msgid "Write output to file NAME" msgstr "Çıktıyı Ä°SÄ°M dosyasına yazar" -#: catgets/gencat.c:118 +#: catgets/gencat.c:119 msgid "" -"Generate message catalog.If INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" +"Generate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" "is -, output is written to standard output.\n" msgstr "" "Ä°leti kataloÄŸu üretilir. GÄ°RDÄ°-DOSYASI - verilirse standart girdi okunur.\n" "ÇIKTI-DOSYASI - verilirse standart çıktıya yazılır.\n" -#: catgets/gencat.c:123 +#: catgets/gencat.c:124 msgid "" "-o OUTPUT-FILE [INPUT-FILE]...\n" "[OUTPUT-FILE [INPUT-FILE]...]" @@ -134,23 +134,23 @@ msgstr "" "-o ÇIKTI-DOSYASI [GÄ°RDÄ°-DOSYASI]...\n" "[ÇIKTI-DOSYASI [GÄ°RDÄ°-DOSYASI]...]" -#: catgets/gencat.c:231 debug/pcprofiledump.c:199 iconv/iconv_prog.c:410 -#: iconv/iconvconfig.c:379 locale/programs/localedef.c:370 -#: login/programs/pt_chown.c:88 malloc/memusagestat.c:525 nss/makedb.c:231 +#: catgets/gencat.c:232 debug/pcprofiledump.c:199 iconv/iconv_prog.c:411 +#: iconv/iconvconfig.c:380 locale/programs/localedef.c:371 +#: login/programs/pt_chown.c:88 malloc/memusagestat.c:526 nss/makedb.c:231 msgid "" "For bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" "Yazılım hatalarını raporlama iÅŸlemleri için,\n" "<http://www.gnu.org/software/libc/bugs.html> adresine bakınız.\n" -"Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n" +"Çeviri hatalarını <nilgun@belgeler.org> adresine bildiriniz.\n" -#: catgets/gencat.c:245 debug/xtrace.sh:64 elf/ldconfig.c:285 -#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:425 -#: iconv/iconvconfig.c:394 locale/programs/locale.c:274 -#: locale/programs/localedef.c:386 login/programs/pt_chown.c:59 -#: malloc/memusage.sh:71 nscd/nscd.c:401 nss/getent.c:83 nss/makedb.c:245 -#: posix/getconf.c:1007 +#: catgets/gencat.c:246 debug/xtrace.sh:64 elf/ldconfig.c:287 +#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:426 +#: iconv/iconvconfig.c:395 locale/programs/locale.c:275 +#: locale/programs/localedef.c:387 login/programs/pt_chown.c:59 +#: malloc/memusage.sh:71 nscd/nscd.c:406 nss/getent.c:83 nss/makedb.c:245 +#: posix/getconf.c:1012 #, c-format msgid "" "Copyright (C) %s Free Software Foundation, Inc.\n" @@ -162,94 +162,94 @@ msgstr "" "HİÇBÄ°R garanti yoktur; hatta SATILABÄ°LÄ°RLİĞİ veya ÅžAHSÄ° KULLANIMINIZA\n" "UYGUNLUÄžU için bile garanti verilmez.\n" -#: catgets/gencat.c:250 debug/xtrace.sh:68 elf/ldconfig.c:290 elf/sprof.c:361 -#: iconv/iconv_prog.c:430 iconv/iconvconfig.c:399 locale/programs/locale.c:279 -#: locale/programs/localedef.c:391 malloc/memusage.sh:75 nscd/nscd.c:406 -#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1012 +#: catgets/gencat.c:251 debug/xtrace.sh:68 elf/ldconfig.c:292 elf/sprof.c:361 +#: iconv/iconv_prog.c:431 iconv/iconvconfig.c:400 locale/programs/locale.c:280 +#: locale/programs/localedef.c:392 malloc/memusage.sh:75 nscd/nscd.c:411 +#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1017 #, c-format msgid "Written by %s.\n" msgstr "%s tarafından yazıldı.\n" -#: catgets/gencat.c:281 +#: catgets/gencat.c:282 msgid "*standard input*" msgstr "*standart girdi*" -#: catgets/gencat.c:287 iconv/iconv_charmap.c:157 iconv/iconv_prog.c:297 +#: catgets/gencat.c:288 iconv/iconv_charmap.c:158 iconv/iconv_prog.c:298 #: nss/makedb.c:170 #, c-format msgid "cannot open input file `%s'" msgstr "`%s' girdi dosyası açılamıyor" -#: catgets/gencat.c:416 catgets/gencat.c:493 +#: catgets/gencat.c:417 catgets/gencat.c:494 msgid "illegal set number" msgstr "küme sayısı kuraldışı" -#: catgets/gencat.c:443 +#: catgets/gencat.c:444 msgid "duplicate set definition" msgstr "küme ataması tekrarlanmış" -#: catgets/gencat.c:445 catgets/gencat.c:622 catgets/gencat.c:676 +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677 msgid "this is the first definition" msgstr "bu ilk tanım" -#: catgets/gencat.c:521 +#: catgets/gencat.c:522 #, c-format msgid "unknown set `%s'" msgstr "`%s' kümesi bilinmiyor" -#: catgets/gencat.c:562 +#: catgets/gencat.c:563 msgid "invalid quote character" msgstr "tırnak iÅŸareti geçersiz" -#: catgets/gencat.c:575 +#: catgets/gencat.c:576 #, c-format msgid "unknown directive `%s': line ignored" msgstr "bilinmeyen `%s' yönergesi: satır yoksayıldı" -#: catgets/gencat.c:620 +#: catgets/gencat.c:621 msgid "duplicated message number" msgstr "tekrarlanmış ileti numarası" -#: catgets/gencat.c:673 +#: catgets/gencat.c:674 msgid "duplicated message identifier" msgstr "ileti tanıtıcı tekrarlanmış" -#: catgets/gencat.c:730 +#: catgets/gencat.c:731 msgid "invalid character: message ignored" msgstr "geçersiz karakter: ileti yoksayıldı" -#: catgets/gencat.c:773 +#: catgets/gencat.c:774 msgid "invalid line" msgstr "satır geçersiz" -#: catgets/gencat.c:827 +#: catgets/gencat.c:828 msgid "malformed line ignored" msgstr "hatalı satır yoksayıldı" -#: catgets/gencat.c:991 catgets/gencat.c:1032 nss/makedb.c:183 +#: catgets/gencat.c:992 catgets/gencat.c:1033 nss/makedb.c:183 #, c-format msgid "cannot open output file `%s'" msgstr "`%s' çıktı dosyası açılamıyor" -#: catgets/gencat.c:1194 locale/programs/linereader.c:559 +#: catgets/gencat.c:1195 locale/programs/linereader.c:560 msgid "invalid escape sequence" msgstr "geçersiz escape dizisi" -#: catgets/gencat.c:1216 +#: catgets/gencat.c:1217 msgid "unterminated message" msgstr "sonlandırılmamış ileti" -#: catgets/gencat.c:1240 +#: catgets/gencat.c:1241 #, c-format msgid "while opening old catalog file" msgstr "eski katalog dosyası açılırken" -#: catgets/gencat.c:1331 +#: catgets/gencat.c:1332 #, c-format msgid "conversion modules not available" msgstr "dönüşüm modülleri yok" -#: catgets/gencat.c:1357 +#: catgets/gencat.c:1358 #, c-format msgid "cannot determine escape character" msgstr "öncelem karakteri saptanamıyor" @@ -286,12 +286,12 @@ msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n" msgstr "Kullanımı: xtrace [SEÇENEK]... PROGRAM [PROGRAMSEÇENEĞİ]...\\n" #: debug/xtrace.sh:33 -msgid "Try `xtrace --help' for more information.\\n" -msgstr "Daha fazla bilgi için `xtrace --help' yazınız.\\n" +msgid "Try \\`xtrace --help' for more information.\\n" +msgstr "Daha fazla bilgi için \\`xtrace --help' yazınız.\\n" #: debug/xtrace.sh:39 -msgid "xtrace: option `$1' requires an argument.\\n" -msgstr "xtrace: `$1' seçeneÄŸi bir argümanla kullanılır\\n" +msgid "xtrace: option \\`$1' requires an argument.\\n" +msgstr "xtrace: \\`$1' seçeneÄŸi bir argümanla kullanılır\\n" #: debug/xtrace.sh:46 msgid "" @@ -321,11 +321,11 @@ msgstr "" "\n" "Yazılım hatalarını bildirme iÅŸlemleri için,\n" "<http://www.gnu.org/software/libc/bugs.html> adresine bakınız.\n" -"Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\\n" +"Çeviri hatalarını <nilgun@belgeler.org> adresine bildiriniz.\\n" #: debug/xtrace.sh:125 -msgid "xtrace: unrecognized option `$1'\\n" -msgstr "xtrace: tanınmayan seçenek `$1'\\n" +msgid "xtrace: unrecognized option \\`$1'\\n" +msgstr "xtrace: tanınmayan seçenek \\`$1'\\n" #: debug/xtrace.sh:138 msgid "No program name given\\n" @@ -333,19 +333,19 @@ msgstr "Program ismi verilmemiÅŸ\\n" #: debug/xtrace.sh:146 #, sh-format -msgid "executable `$program' not found\\n" -msgstr "çalıştırılabilir `$program' ortalarda yok\\n" +msgid "executable \\`$program' not found\\n" +msgstr "çalıştırılabilir \\`$program' ortalarda yok\\n" #: debug/xtrace.sh:150 #, sh-format -msgid "`$program' is no executable\\n" -msgstr "`$program' çalışkan deÄŸil\\n" +msgid "\\`$program' is no executable\\n" +msgstr "\\`$program' çalışkan deÄŸil\\n" -#: dlfcn/dlinfo.c:67 +#: dlfcn/dlinfo.c:64 msgid "RTLD_SELF used in code not dynamically loaded" msgstr "RTLD_SELF kullanılan kod dinamik olarak yüklenmedi" -#: dlfcn/dlinfo.c:76 +#: dlfcn/dlinfo.c:73 msgid "unsupported dlinfo request" msgstr "dlinfo isteÄŸi desteklenmiyor" @@ -361,70 +361,69 @@ msgstr "geçersiz kip" msgid "invalid mode parameter" msgstr "kip parametresi geçersiz" -#: elf/cache.c:67 +#: elf/cache.c:68 msgid "unknown" msgstr "bilinmiyor" -#: elf/cache.c:110 +#: elf/cache.c:111 msgid "Unknown OS" msgstr "Bilinmeyen iÅŸletim sistemi" -#: elf/cache.c:115 +#: elf/cache.c:116 #, c-format msgid ", OS ABI: %s %d.%d.%d" msgstr ", OS ABI: %s %d.%d.%d" -#: elf/cache.c:141 elf/ldconfig.c:1231 +#: elf/cache.c:142 elf/ldconfig.c:1236 #, c-format msgid "Can't open cache file %s\n" msgstr "Arabellek dosyası %s açılamıyor\n" -#: elf/cache.c:153 +#: elf/cache.c:154 #, c-format msgid "mmap of cache file failed.\n" msgstr "arabellek dosyasının mmap'lenmesi baÅŸarısız\n" -#: elf/cache.c:157 elf/cache.c:167 +#: elf/cache.c:158 elf/cache.c:168 #, c-format msgid "File is not a cache file.\n" msgstr "Bir arabellek dosyası deÄŸil.\n" -#: elf/cache.c:200 elf/cache.c:210 +#: elf/cache.c:201 elf/cache.c:211 #, c-format msgid "%d libs found in cache `%s'\n" msgstr "%d kitaplık, `%s' arabelleÄŸinde bulundu\n" -#: elf/cache.c:409 +#: elf/cache.c:410 #, c-format msgid "Can't remove old temporary cache file %s" msgstr "eski geçici arabellek dosyası %s silinemiyor" -#: elf/cache.c:416 +#: elf/cache.c:417 #, c-format msgid "Can't create temporary cache file %s" msgstr "Geçici arabellek dosyası %s oluÅŸturulamıyor" -#: elf/cache.c:424 elf/cache.c:434 elf/cache.c:438 +#: elf/cache.c:425 elf/cache.c:435 elf/cache.c:439 elf/cache.c:443 #, c-format msgid "Writing of cache data failed" msgstr "Arabellek verisini yazmada hata" -#: elf/cache.c:442 -#, c-format -msgid "Writing of cache data failed." -msgstr "Arabellek verisi yazılamadı." - -#: elf/cache.c:449 +#: elf/cache.c:450 #, c-format msgid "Changing access rights of %s to %#o failed" msgstr "%s eriÅŸim hakları %#o olarak deÄŸiÅŸtirilemedi" -#: elf/cache.c:454 +#: elf/cache.c:455 #, c-format msgid "Renaming of %s to %s failed" msgstr "%s'in ismi %s olarak deÄŸiÅŸtirilemedi" -#: elf/dl-close.c:116 +#: elf/dl-close.c:378 elf/dl-open.c:460 +msgid "cannot create scope list" +msgstr "etki alanı listesi oluÅŸturulamıyor" + +#: elf/dl-close.c:724 msgid "shared object not open" msgstr "paylaşımlı nesne açık deÄŸil" @@ -432,8 +431,8 @@ msgstr "paylaşımlı nesne açık deÄŸil" msgid "DST not allowed in SUID/SGID programs" msgstr "SUID/SGID programlarda DST'ye izin verilmez" -#: elf/dl-deps.c:125 -msgid "empty dynamics string token substitution" +#: elf/dl-deps.c:125 elf/dl-open.c:282 +msgid "empty dynamic string token substitution" msgstr "boÅŸ dinamik dizge simge ikamesi" #: elf/dl-deps.c:131 @@ -477,151 +476,151 @@ msgstr "dahili hata: fptr tablosundaki symidx aralık dışında" msgid "cannot allocate name record" msgstr "isim kaydı ayrılamadı" -#: elf/dl-load.c:474 elf/dl-load.c:553 elf/dl-load.c:673 elf/dl-load.c:786 +#: elf/dl-load.c:474 elf/dl-load.c:582 elf/dl-load.c:667 elf/dl-load.c:780 msgid "cannot create cache for search path" msgstr "dosya arama yolu için arabellek oluÅŸturulamıyor" -#: elf/dl-load.c:576 +#: elf/dl-load.c:565 msgid "cannot create RUNPATH/RPATH copy" msgstr "RUNPATH/RPATH kopyası oluÅŸturulamıyor" -#: elf/dl-load.c:659 +#: elf/dl-load.c:653 msgid "cannot create search path array" msgstr "dosya arama yolu dizisi oluÅŸturulamıyor" -#: elf/dl-load.c:870 +#: elf/dl-load.c:864 msgid "cannot stat shared object" msgstr "paylaşımlı nesne durumlanamıyor" -#: elf/dl-load.c:940 +#: elf/dl-load.c:934 msgid "cannot open zero fill device" msgstr "sıfırlar içeren aygıt açılamaz" -#: elf/dl-load.c:985 elf/dl-load.c:2215 +#: elf/dl-load.c:979 elf/dl-load.c:2224 msgid "cannot create shared object descriptor" msgstr "paylaşımlı nesne tanımlayıcı oluÅŸturulamıyor" -#: elf/dl-load.c:1004 elf/dl-load.c:1663 elf/dl-load.c:1755 +#: elf/dl-load.c:998 elf/dl-load.c:1656 elf/dl-load.c:1748 msgid "cannot read file data" msgstr "dosya verisi okunamıyor" -#: elf/dl-load.c:1048 +#: elf/dl-load.c:1042 msgid "ELF load command alignment not page-aligned" msgstr "ELF yükleme komutu hizalaması sayfa-hizalamalı deÄŸil" -#: elf/dl-load.c:1055 +#: elf/dl-load.c:1049 msgid "ELF load command address/offset not properly aligned" msgstr "ELF yükleme komutu adresi/baÅŸvurusu gereÄŸi gibi hizalanamıyor" -#: elf/dl-load.c:1139 +#: elf/dl-load.c:1132 msgid "cannot allocate TLS data structures for initial thread" msgstr "ilk kanak için TLS veri yapıları oluÅŸturulamıyor" -#: elf/dl-load.c:1163 +#: elf/dl-load.c:1155 msgid "cannot handle TLS data" msgstr "TLS verisi alınamıyor" -#: elf/dl-load.c:1182 +#: elf/dl-load.c:1174 msgid "object file has no loadable segments" msgstr "nesne dosyasının yüklenebilir segmanı yok" -#: elf/dl-load.c:1218 +#: elf/dl-load.c:1210 msgid "failed to map segment from shared object" msgstr "parça paylaşımlı nesneden eÅŸleÅŸtirilemedi" -#: elf/dl-load.c:1242 +#: elf/dl-load.c:1236 msgid "cannot dynamically load executable" msgstr "çalıştırılabilir dosya dinamik olarak yüklenemiyor" -#: elf/dl-load.c:1303 +#: elf/dl-load.c:1298 msgid "cannot change memory protections" msgstr "bellek korumaları deÄŸiÅŸtirilemiyor" -#: elf/dl-load.c:1322 +#: elf/dl-load.c:1317 msgid "cannot map zero-fill pages" msgstr "sıfırlar içeren sayfalar eÅŸleÅŸtirilemez" -#: elf/dl-load.c:1336 +#: elf/dl-load.c:1331 msgid "object file has no dynamic section" msgstr "nesne dosyasının dinamik bölümü yok" -#: elf/dl-load.c:1359 +#: elf/dl-load.c:1354 msgid "shared object cannot be dlopen()ed" msgstr "paylaşımlı nesne dlopen()'lanamıyor" -#: elf/dl-load.c:1372 +#: elf/dl-load.c:1367 msgid "cannot allocate memory for program header" msgstr "uygulama baÅŸlığı için bellek ayrılamadı" -#: elf/dl-load.c:1389 elf/dl-open.c:174 +#: elf/dl-load.c:1384 elf/dl-open.c:218 msgid "invalid caller" msgstr "çaÄŸrıcı geçersiz" -#: elf/dl-load.c:1428 +#: elf/dl-load.c:1423 msgid "cannot enable executable stack as shared object requires" msgstr "paylaşımlı nesnenin gerektirdiÄŸi çalıştırılabilir yığıt etkinleÅŸtirilemiyor" -#: elf/dl-load.c:1443 +#: elf/dl-load.c:1436 msgid "cannot close file descriptor" msgstr "dosya tanıtıcı kapatılamıyor" -#: elf/dl-load.c:1485 +#: elf/dl-load.c:1478 msgid "cannot create searchlist" msgstr "arama listesi oluÅŸturulamıyor" -#: elf/dl-load.c:1663 +#: elf/dl-load.c:1656 msgid "file too short" msgstr "dosya çok küçük" -#: elf/dl-load.c:1692 +#: elf/dl-load.c:1685 msgid "invalid ELF header" msgstr "ELF baÅŸlığı geçersiz" -#: elf/dl-load.c:1704 +#: elf/dl-load.c:1697 msgid "ELF file data encoding not big-endian" msgstr "ELF dosyası verisinin kodlaması en-kıymetli-bayt-ilk (big-endian) deÄŸil" -#: elf/dl-load.c:1706 +#: elf/dl-load.c:1699 msgid "ELF file data encoding not little-endian" msgstr "ELF dosyası verisinin kodlaması en-kıymetli-bayt-son (little-endian) deÄŸil" -#: elf/dl-load.c:1710 +#: elf/dl-load.c:1703 msgid "ELF file version ident does not match current one" msgstr "ELF dosyası sürüm kimliÄŸi mevcut biriyle eÅŸleÅŸmiyor" -#: elf/dl-load.c:1714 +#: elf/dl-load.c:1707 msgid "ELF file OS ABI invalid" msgstr "ELF dosyası OS ABI geçersiz" -#: elf/dl-load.c:1716 +#: elf/dl-load.c:1709 msgid "ELF file ABI version invalid" msgstr "ELF dosyası ABI sürümü geçersiz" -#: elf/dl-load.c:1719 +#: elf/dl-load.c:1712 msgid "internal error" msgstr "iç hata" -#: elf/dl-load.c:1726 +#: elf/dl-load.c:1719 msgid "ELF file version does not match current one" msgstr "ELF dosyası sürümü mevcut biriyle eÅŸleÅŸmiyor" -#: elf/dl-load.c:1734 +#: elf/dl-load.c:1727 msgid "only ET_DYN and ET_EXEC can be loaded" msgstr "sadece ET_DYN ve ET_EXEC yüklü olabilir" -#: elf/dl-load.c:1740 +#: elf/dl-load.c:1733 msgid "ELF file's phentsize not the expected size" msgstr "ELF dosyasının phent uzunluÄŸu beklenen uzunlukta deÄŸil" -#: elf/dl-load.c:2231 +#: elf/dl-load.c:2240 msgid "wrong ELF class: ELFCLASS64" msgstr "yanlış ELF sınıfı: ELFCLASS64" -#: elf/dl-load.c:2232 +#: elf/dl-load.c:2241 msgid "wrong ELF class: ELFCLASS32" msgstr "yanlış ELF sınıfı: ELFCLASS32" -#: elf/dl-load.c:2235 +#: elf/dl-load.c:2244 msgid "cannot open shared object file" msgstr "paylaşımlı nesne dosyası açılamıyor" @@ -633,69 +632,61 @@ msgstr "yeniden konumlama hatası" msgid "symbol lookup error" msgstr "simge arama hatası" -#: elf/dl-open.c:112 +#: elf/dl-open.c:114 msgid "cannot extend global scope" msgstr "genel kapsam geniÅŸletilemiyor" -#: elf/dl-open.c:237 -msgid "empty dynamic string token substitution" -msgstr "boÅŸ dinamik dizge simge ikamesi" - -#: elf/dl-open.c:406 elf/dl-open.c:417 elf/dl-open.c:425 -msgid "cannot create scope list" -msgstr "etki alanı listesi oluÅŸturulamıyor" - -#: elf/dl-open.c:470 +#: elf/dl-open.c:512 msgid "TLS generation counter wrapped! Please report this." msgstr "TLS üretecinin sayacı baÅŸa döndü! Bunu lütfen bildirin." -#: elf/dl-open.c:508 +#: elf/dl-open.c:549 msgid "invalid mode for dlopen()" msgstr "dlopen() için kip geçersiz" -#: elf/dl-open.c:525 +#: elf/dl-open.c:566 msgid "no more namespaces available for dlmopen()" msgstr "dlmopen() için artık isim alanı kalmadı" -#: elf/dl-open.c:538 +#: elf/dl-open.c:579 msgid "invalid target namespace in dlmopen()" msgstr "dlmopen() için hedef isim alanı geçersiz" -#: elf/dl-reloc.c:55 +#: elf/dl-reloc.c:54 msgid "cannot allocate memory in static TLS block" msgstr "duraÄŸan TLS bloÄŸunda bellek ayrılamıyor" -#: elf/dl-reloc.c:198 +#: elf/dl-reloc.c:196 msgid "cannot make segment writable for relocation" msgstr "yeniden konumlama için parça yazılabilir yapılamıyor" -#: elf/dl-reloc.c:279 +#: elf/dl-reloc.c:277 #, c-format msgid "%s: no PLTREL found in object %s\n" msgstr "%s: %s nesnesinde PLTREL yok\n" -#: elf/dl-reloc.c:290 +#: elf/dl-reloc.c:288 #, c-format msgid "%s: out of memory to store relocation results for %s\n" msgstr "%s: %s için yeniden ayırma iÅŸleminin sonuçlarını saklamak için bellek yetersiz\n" -#: elf/dl-reloc.c:306 +#: elf/dl-reloc.c:304 msgid "cannot restore segment prot after reloc" msgstr "reloc iÅŸleminden sonra prot segmanı eski haline getirilemedi" -#: elf/dl-reloc.c:331 +#: elf/dl-reloc.c:329 msgid "cannot apply additional memory protection after relocation" msgstr "yeniden ayırma iÅŸleminden sonra ek bellek koruması uygulanamaz" -#: elf/dl-sym.c:98 +#: elf/dl-sym.c:161 msgid "RTLD_NEXT used in code not dynamically loaded" msgstr "RTLD_NEXT kullanılan kod dinamik olarak yüklenmedi" -#: elf/dl-sysdep.c:495 +#: elf/dl-sysdep.c:474 elf/dl-sysdep.c:486 msgid "cannot create capability list" msgstr "yetenek listesi oluÅŸturulamıyor" -#: elf/dl-tls.c:829 +#: elf/dl-tls.c:825 msgid "cannot create TLS data structures" msgstr "TLS veri yapıları oluÅŸturulamıyor" @@ -703,221 +694,216 @@ msgstr "TLS veri yapıları oluÅŸturulamıyor" msgid "cannot allocate version reference table" msgstr "sürüm baÅŸvuru tablosu ayrılamadı" -#: elf/ldconfig.c:133 +#: elf/ldconfig.c:135 msgid "Print cache" msgstr "Yazıcı ön belleÄŸi" -#: elf/ldconfig.c:134 +#: elf/ldconfig.c:136 msgid "Generate verbose messages" msgstr "Çok detaylı iletiler üretilir" -#: elf/ldconfig.c:135 +#: elf/ldconfig.c:137 msgid "Don't build cache" msgstr "Arabellek oluÅŸturulamıyor" -#: elf/ldconfig.c:136 +#: elf/ldconfig.c:138 msgid "Don't generate links" msgstr "BaÄŸlar üretilemiyor" -#: elf/ldconfig.c:137 +#: elf/ldconfig.c:139 msgid "Change to and use ROOT as root directory" msgstr "Dizine geçilir ve kök dizin olarak ROOT kullanır" -#: elf/ldconfig.c:137 +#: elf/ldconfig.c:139 msgid "ROOT" msgstr "KÖK" -#: elf/ldconfig.c:138 +#: elf/ldconfig.c:140 msgid "CACHE" msgstr "ARABELLEK" -#: elf/ldconfig.c:138 +#: elf/ldconfig.c:140 msgid "Use CACHE as cache file" msgstr "Arabellek dosyası olarak ARABELLEK kullanılır" -#: elf/ldconfig.c:139 +#: elf/ldconfig.c:141 msgid "CONF" msgstr "YAPL" -#: elf/ldconfig.c:139 +#: elf/ldconfig.c:141 msgid "Use CONF as configuration file" msgstr "Yapılandırma dosyası olarak YAPD kullanılır" -#: elf/ldconfig.c:140 +#: elf/ldconfig.c:142 msgid "Only process directories specified on the command line. Don't build cache." msgstr "Komut satırında sadece süreç dizinleri belirtilmiÅŸ. Önbellek oluÅŸturulamadı." -#: elf/ldconfig.c:141 +#: elf/ldconfig.c:143 msgid "Manually link individual libraries." msgstr "Her bir kitaplığı kendiniz baÄŸlayın." -#: elf/ldconfig.c:142 +#: elf/ldconfig.c:144 msgid "FORMAT" msgstr "BİÇİM" -#: elf/ldconfig.c:142 +#: elf/ldconfig.c:144 msgid "Format to use: new, old or compat (default)" msgstr "Kullanılacak biçem: new, old ya da compat (öntanımlı)" -#: elf/ldconfig.c:150 +#: elf/ldconfig.c:152 msgid "Configure Dynamic Linker Run Time Bindings." msgstr "Dinamik BaÄŸlayıcının Ä°cra Zamanı Bağıntılarını Yapılandırır." -#: elf/ldconfig.c:308 +#: elf/ldconfig.c:310 #, c-format msgid "Path `%s' given more than once" msgstr "`%s' dosya yolu birden fazla verilmiÅŸ" -#: elf/ldconfig.c:348 +#: elf/ldconfig.c:350 #, c-format msgid "%s is not a known library type" msgstr "%s bilinen bir kitaplık türü deÄŸil" -#: elf/ldconfig.c:373 +#: elf/ldconfig.c:375 #, c-format msgid "Can't stat %s" msgstr "stat %s yapılamıyor" -#: elf/ldconfig.c:447 +#: elf/ldconfig.c:449 #, c-format msgid "Can't stat %s\n" msgstr "stat %s yapılamıyor\n" -#: elf/ldconfig.c:457 +#: elf/ldconfig.c:459 #, c-format msgid "%s is not a symbolic link\n" msgstr "%s bir sembolik baÄŸ deÄŸil\n" -#: elf/ldconfig.c:476 +#: elf/ldconfig.c:478 #, c-format msgid "Can't unlink %s" msgstr "%s bağı kaldırılamadı" -#: elf/ldconfig.c:482 +#: elf/ldconfig.c:484 #, c-format msgid "Can't link %s to %s" msgstr "%s den %s'e baÄŸ yapılamıyor" -#: elf/ldconfig.c:488 +#: elf/ldconfig.c:490 msgid " (changed)\n" msgstr " (deÄŸiÅŸti)\n" -#: elf/ldconfig.c:490 +#: elf/ldconfig.c:492 msgid " (SKIPPED)\n" msgstr " (ATLANDI)\n" -#: elf/ldconfig.c:545 +#: elf/ldconfig.c:547 #, c-format msgid "Can't find %s" msgstr "%s bulunamıyor" -#: elf/ldconfig.c:561 +#: elf/ldconfig.c:563 elf/ldconfig.c:737 elf/ldconfig.c:784 #, c-format -msgid "Can't lstat %s" +msgid "Cannot lstat %s" msgstr "lstat %s yapılamıyor" -#: elf/ldconfig.c:568 +#: elf/ldconfig.c:570 #, c-format msgid "Ignored file %s since it is not a regular file." msgstr "Normal bir dosya olmadığından %s dosyası yoksayıldı" -#: elf/ldconfig.c:576 +#: elf/ldconfig.c:578 #, c-format msgid "No link created since soname could not be found for %s" msgstr "%s için kitaplık ismi bulunamadığından baÄŸ oluÅŸturulmadı" -#: elf/ldconfig.c:667 +#: elf/ldconfig.c:669 #, c-format msgid "Can't open directory %s" msgstr "%s dizini açılamıyor" -#: elf/ldconfig.c:735 elf/ldconfig.c:782 -#, c-format -msgid "Cannot lstat %s" -msgstr "lstat %s yapılamıyor" - -#: elf/ldconfig.c:747 +#: elf/ldconfig.c:749 #, c-format msgid "Cannot stat %s" msgstr "stat %s yapılamıyor" -#: elf/ldconfig.c:804 elf/readlib.c:90 +#: elf/ldconfig.c:806 elf/readlib.c:91 #, c-format msgid "Input file %s not found.\n" msgstr "Girdi dosyası %s bulunamadı.\n" -#: elf/ldconfig.c:855 +#: elf/ldconfig.c:857 #, c-format msgid "libc5 library %s in wrong directory" msgstr "libc5 kitaplığı %s yanlış dizinde" -#: elf/ldconfig.c:858 +#: elf/ldconfig.c:860 #, c-format msgid "libc6 library %s in wrong directory" msgstr "libc6 kitaplığı %s yanlış dizinde" -#: elf/ldconfig.c:861 +#: elf/ldconfig.c:863 #, c-format msgid "libc4 library %s in wrong directory" msgstr "libc4 kitaplığı %s yanlış dizinde" -#: elf/ldconfig.c:888 +#: elf/ldconfig.c:890 #, c-format msgid "libraries %s and %s in directory %s have same soname but different type." msgstr "%s ve %s kitaplıkları %s dizininde ve aynı isme sahip oldukları halde farklı türde." -#: elf/ldconfig.c:995 +#: elf/ldconfig.c:997 #, c-format msgid "Can't open configuration file %s" msgstr "Yapılandırma dosyası %s açılamıyor" -#: elf/ldconfig.c:1059 +#: elf/ldconfig.c:1061 #, c-format msgid "%s:%u: bad syntax in hwcap line" msgstr "%s:%u: hwcap satırında sözdizimi hatası" -#: elf/ldconfig.c:1065 +#: elf/ldconfig.c:1067 #, c-format msgid "%s:%u: hwcap index %lu above maximum %u" msgstr "%s:%u: hwcap indisi %lu > azami indis %u" -#: elf/ldconfig.c:1072 elf/ldconfig.c:1080 +#: elf/ldconfig.c:1074 elf/ldconfig.c:1082 #, c-format msgid "%s:%u: hwcap index %lu already defined as %s" msgstr "%s:%u: hwcap indisi %lu zaten %s olarak tanımlı" -#: elf/ldconfig.c:1083 +#: elf/ldconfig.c:1085 #, c-format msgid "%s:%u: duplicate hwcap %lu %s" msgstr "%s:%u: hwcap %lu %s yinelenmiÅŸ" -#: elf/ldconfig.c:1105 +#: elf/ldconfig.c:1107 #, c-format msgid "need absolute file name for configuration file when using -r" msgstr "-r kullanılırken yapılandırma dosyası için soyut dosya ismi gerekir" -#: elf/ldconfig.c:1112 locale/programs/xmalloc.c:69 malloc/obstack.c:434 -#: malloc/obstack.c:436 posix/getconf.c:980 posix/getconf.c:1158 +#: elf/ldconfig.c:1114 locale/programs/xmalloc.c:70 malloc/obstack.c:434 +#: malloc/obstack.c:436 posix/getconf.c:985 posix/getconf.c:1163 #, c-format msgid "memory exhausted" msgstr "bellek tükendi" -#: elf/ldconfig.c:1142 +#: elf/ldconfig.c:1144 #, c-format msgid "%s:%u: cannot read directory %s" msgstr "%s:%u: %s dizini okunamıyor" -#: elf/ldconfig.c:1182 +#: elf/ldconfig.c:1189 #, c-format msgid "relative path `%s' used to build cache" msgstr "arabelleÄŸin oluÅŸturulduÄŸu göreli yol `%s'" -#: elf/ldconfig.c:1210 +#: elf/ldconfig.c:1215 #, c-format msgid "Can't chdir to /" msgstr "/ dizinine geçilemiyor" -#: elf/ldconfig.c:1252 +#: elf/ldconfig.c:1257 #, c-format msgid "Can't open cache file directory %s\n" msgstr "Arabellek dosyasının dizini %s açılamıyor\n" @@ -947,19 +933,19 @@ msgstr "" " -v, --verbose tüm bilgileri basar\n" "Yazılım hatalarını bildirme iÅŸlemleri için,\n" "<http://www.gnu.org/software/libc/bugs.html> adresine bakınız.\n" -"Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz." +"Çeviri hatalarını <nilgun@belgeler.org> adresine bildiriniz." #: elf/ldd.bash.in:80 -msgid "ldd: option `$1' is ambiguous" -msgstr "ldd: `$1' seçeneÄŸi burada belirsiz" +msgid "ldd: option \\`$1' is ambiguous" +msgstr "ldd: \\`$1' seçeneÄŸi burada belirsiz" #: elf/ldd.bash.in:87 msgid "unrecognized option" msgstr "tanınmayan seçenek" #: elf/ldd.bash.in:88 elf/ldd.bash.in:126 -msgid "Try `ldd --help' for more information." -msgstr "Daha fazla bilgi için `ldd --help' yazınız." +msgid "Try \\`ldd --help' for more information." +msgstr "Daha fazla bilgi için \\`ldd --help' yazınız." #: elf/ldd.bash.in:125 msgid "missing file arguments" @@ -1022,27 +1008,27 @@ msgstr "%s paylaşımlı nesne dosyası deÄŸil (Tür: %d).\n" msgid "more than one dynamic segment\n" msgstr "bir dinamik parçadan fazla\n" -#: elf/readlib.c:96 +#: elf/readlib.c:97 #, c-format msgid "Cannot fstat file %s.\n" msgstr "%s dosyası fstat yapılamıyor.\n" -#: elf/readlib.c:107 +#: elf/readlib.c:108 #, c-format msgid "File %s is empty, not checked." msgstr "%s dosyası boÅŸ olduÄŸundan denetlenemiyor." -#: elf/readlib.c:113 +#: elf/readlib.c:114 #, c-format msgid "File %s is too small, not checked." msgstr "%s dosyası çok küçük, kontrol edilemedi." -#: elf/readlib.c:123 +#: elf/readlib.c:124 #, c-format msgid "Cannot mmap file %s.\n" msgstr "%s dosyası mmap yapılamıyor.\n" -#: elf/readlib.c:161 +#: elf/readlib.c:162 #, c-format msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n" msgstr "%s bir ELF dosyası deÄŸil - BaÅŸlangıcındaki dosya tanımı hatalı.\n" @@ -1065,13 +1051,13 @@ msgstr "çaÄŸrı grafiÄŸi üretir" #: elf/sprof.c:89 msgid "" -"Read and display shared object profiling data.For bug reporting instructions, please see:\n" +"Read and display shared object profiling data.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" "Paylaşımlı nesne profili oluÅŸturma verisini okur ve gösterir.\n" "Yazılım hatalarını bildirme iÅŸlemleri için,\n" "<http://www.gnu.org/software/libc/bugs.html> adresine bakınız.\n" -"Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n" +"Çeviri hatalarını <nilgun@belgeler.org> adresine bildiriniz.\n" #: elf/sprof.c:94 msgid "SHOBJ [PROFDATA]" @@ -1167,136 +1153,136 @@ msgstr "`%s' `%s' için doÄŸru olmayan ÅŸekillendirici verisi dosyası" msgid "cannot allocate symbol data" msgstr "sembol verisi ayrılamadı" -#: iconv/iconv_charmap.c:175 iconv/iconv_prog.c:315 +#: iconv/iconv_charmap.c:176 iconv/iconv_prog.c:316 #, c-format msgid "error while closing input `%s'" msgstr "`%s' girdisi kapatılırken hata" -#: iconv/iconv_charmap.c:449 +#: iconv/iconv_charmap.c:450 #, c-format msgid "illegal input sequence at position %Zd" msgstr "%Zd konumunda uygun olmayan girdi dizgesi" -#: iconv/iconv_charmap.c:468 iconv/iconv_prog.c:525 +#: iconv/iconv_charmap.c:469 iconv/iconv_prog.c:526 #, c-format msgid "incomplete character or shift sequence at end of buffer" msgstr "tampon bellek sonunda eksik karakter ya da shift dizisi" -#: iconv/iconv_charmap.c:513 iconv/iconv_charmap.c:549 iconv/iconv_prog.c:568 -#: iconv/iconv_prog.c:604 +#: iconv/iconv_charmap.c:514 iconv/iconv_charmap.c:550 iconv/iconv_prog.c:569 +#: iconv/iconv_prog.c:605 #, c-format msgid "error while reading the input" msgstr "girdi okunurken hata" -#: iconv/iconv_charmap.c:531 iconv/iconv_prog.c:586 +#: iconv/iconv_charmap.c:532 iconv/iconv_prog.c:587 #, c-format msgid "unable to allocate buffer for input" msgstr "girdi için tampon ayrılamadı" -#: iconv/iconv_prog.c:59 +#: iconv/iconv_prog.c:60 msgid "Input/Output format specification:" msgstr "Girdi/Çıktı biçem özellikleri:" -#: iconv/iconv_prog.c:60 +#: iconv/iconv_prog.c:61 msgid "encoding of original text" msgstr "özgün metin kodlaması" -#: iconv/iconv_prog.c:61 +#: iconv/iconv_prog.c:62 msgid "encoding for output" msgstr "çıktı için kodlama" -#: iconv/iconv_prog.c:62 +#: iconv/iconv_prog.c:63 msgid "Information:" msgstr "Bilgi:" -#: iconv/iconv_prog.c:63 +#: iconv/iconv_prog.c:64 msgid "list all known coded character sets" msgstr "tüm bilinen kodlu karakter kümelerini listeler" -#: iconv/iconv_prog.c:64 locale/programs/localedef.c:126 +#: iconv/iconv_prog.c:65 locale/programs/localedef.c:127 msgid "Output control:" msgstr "Çıktı kontrolu:" -#: iconv/iconv_prog.c:65 +#: iconv/iconv_prog.c:66 msgid "omit invalid characters from output" msgstr "geçersiz karakterleri çıktıya yazmaz" -#: iconv/iconv_prog.c:66 +#: iconv/iconv_prog.c:67 msgid "output file" msgstr "çıktı dosyası" -#: iconv/iconv_prog.c:67 +#: iconv/iconv_prog.c:68 msgid "suppress warnings" msgstr "uyarıları engeller" -#: iconv/iconv_prog.c:68 +#: iconv/iconv_prog.c:69 msgid "print progress information" msgstr "geliÅŸim bilgisi gösterir" -#: iconv/iconv_prog.c:73 +#: iconv/iconv_prog.c:74 msgid "Convert encoding of given files from one encoding to another." msgstr "Verilen dosyaların kodlamasını dönüştürür" -#: iconv/iconv_prog.c:77 +#: iconv/iconv_prog.c:78 msgid "[FILE...]" msgstr "[DOSYA...]" -#: iconv/iconv_prog.c:199 +#: iconv/iconv_prog.c:200 #, c-format msgid "cannot open output file" msgstr "çıktı dosyası açılamıyor" -#: iconv/iconv_prog.c:241 +#: iconv/iconv_prog.c:242 #, c-format msgid "conversions from `%s' and to `%s' are not supported" msgstr "`%s'den ve `%s'e dönüşümler desteklenmiyor" -#: iconv/iconv_prog.c:246 +#: iconv/iconv_prog.c:247 #, c-format msgid "conversion from `%s' is not supported" msgstr "`%s' den dönüşüm desteklenmiyor" -#: iconv/iconv_prog.c:253 +#: iconv/iconv_prog.c:254 #, c-format msgid "conversion to `%s' is not supported" msgstr "`%s' e dönüşüm desteklenmiyor" -#: iconv/iconv_prog.c:257 +#: iconv/iconv_prog.c:258 #, c-format msgid "conversion from `%s' to `%s' is not supported" msgstr "`%s' den `%s' e dönüşüm desteklenmiyor" -#: iconv/iconv_prog.c:267 +#: iconv/iconv_prog.c:268 #, c-format msgid "failed to start conversion processing" msgstr "dönüşüm iÅŸlemi baÅŸlatılamadı" -#: iconv/iconv_prog.c:361 +#: iconv/iconv_prog.c:362 #, c-format msgid "error while closing output file" msgstr "çıktı dosyası kapatılırken hata" -#: iconv/iconv_prog.c:470 iconv/iconv_prog.c:496 +#: iconv/iconv_prog.c:471 iconv/iconv_prog.c:497 #, c-format msgid "conversion stopped due to problem in writing the output" msgstr "çıktıyı yazarken bir problemden dolayı dönüştürme durdu" -#: iconv/iconv_prog.c:521 +#: iconv/iconv_prog.c:522 #, c-format msgid "illegal input sequence at position %ld" msgstr "%ld konumunda uygun olmayan girdi dizgesi" -#: iconv/iconv_prog.c:529 +#: iconv/iconv_prog.c:530 #, c-format msgid "internal error (illegal descriptor)" msgstr "iç hata (kuraldışı tanımlayıcı)" -#: iconv/iconv_prog.c:532 +#: iconv/iconv_prog.c:533 #, c-format msgid "unknown iconv() error %d" msgstr "bilinmeyen iconv() hatası %d" -#: iconv/iconv_prog.c:778 +#: iconv/iconv_prog.c:779 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" @@ -1312,42 +1298,42 @@ msgstr "" "\n" " " -#: iconv/iconvconfig.c:109 +#: iconv/iconvconfig.c:110 msgid "Create fastloading iconv module configuration file." msgstr "Hızlı yükleme iconv modülü yapılandırma dosyası oluÅŸturulur." -#: iconv/iconvconfig.c:113 +#: iconv/iconvconfig.c:114 msgid "[DIR...]" msgstr "[DÄ°ZÄ°N...]" -#: iconv/iconvconfig.c:126 +#: iconv/iconvconfig.c:127 msgid "Prefix used for all file accesses" msgstr "Tüm dosya eriÅŸimlerinde kullanılan önek" -#: iconv/iconvconfig.c:127 +#: iconv/iconvconfig.c:128 msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)" msgstr "Kurulum yerine deÄŸil DOSYAya çıktılar (--prefix argümanı DOSYAya uygulanmaz)" -#: iconv/iconvconfig.c:131 +#: iconv/iconvconfig.c:132 msgid "Do not search standard directories, only those on the command line" msgstr "Standart dizinleri araÅŸtırmaz, bu sadece komut satırında kalır" -#: iconv/iconvconfig.c:300 +#: iconv/iconvconfig.c:301 #, c-format msgid "Directory arguments required when using --nostdlib" msgstr "--nostdlib kullanılırken dizinleri belirtmek gerekir" -#: iconv/iconvconfig.c:342 locale/programs/localedef.c:290 +#: iconv/iconvconfig.c:343 locale/programs/localedef.c:291 #, c-format msgid "no output file produced because warnings were issued" msgstr "uyarılardan dolayı bir çıktı dosyası üretilmedi" -#: iconv/iconvconfig.c:428 +#: iconv/iconvconfig.c:429 #, c-format msgid "while inserting in search tree" msgstr "arama aÄŸacına eklenirken" -#: iconv/iconvconfig.c:1236 +#: iconv/iconvconfig.c:1238 #, c-format msgid "cannot generate output file" msgstr "çıktı dosyası üretilemiyor" @@ -1438,991 +1424,970 @@ msgstr "Bilinmeyen .netrc anahtar kelimesi %s" msgid "Character out of range for UTF-8" msgstr "UTF-8 için karakter kapsam dışı" -#: locale/programs/charmap-dir.c:57 +#: locale/programs/charmap-dir.c:58 #, c-format msgid "cannot read character map directory `%s'" msgstr "karakter eÅŸlem dizini `%s' okunamıyor" -#: locale/programs/charmap.c:137 +#: locale/programs/charmap.c:138 #, c-format msgid "character map file `%s' not found" msgstr "`%s' karakter eÅŸlem dosyası bulunamadı" -#: locale/programs/charmap.c:194 +#: locale/programs/charmap.c:195 #, c-format msgid "default character map file `%s' not found" msgstr "öntanımlı karakter eÅŸlem dosyası `%s' bulunamadı" -#: locale/programs/charmap.c:257 +#: locale/programs/charmap.c:258 #, c-format msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n" msgstr "`%s' karakter eÅŸlemi ASCII uyumlu deÄŸil, yerel de ISO C uyumlu deÄŸil\n" -#: locale/programs/charmap.c:336 +#: locale/programs/charmap.c:337 #, c-format msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n" msgstr "%s: <mb_cur_max>, <mb_cur_min> den daha büyük olmalı\n" -#: locale/programs/charmap.c:356 locale/programs/charmap.c:373 -#: locale/programs/repertoire.c:174 +#: locale/programs/charmap.c:357 locale/programs/charmap.c:374 +#: locale/programs/repertoire.c:175 #, c-format msgid "syntax error in prolog: %s" msgstr "prolog içinde sözdizimi hatası: %s" -#: locale/programs/charmap.c:357 +#: locale/programs/charmap.c:358 msgid "invalid definition" msgstr "geçersiz atama" -#: locale/programs/charmap.c:374 locale/programs/locfile.c:125 -#: locale/programs/locfile.c:152 locale/programs/repertoire.c:175 +#: locale/programs/charmap.c:375 locale/programs/locfile.c:126 +#: locale/programs/locfile.c:153 locale/programs/repertoire.c:176 msgid "bad argument" msgstr "argüman hatalı" -#: locale/programs/charmap.c:402 +#: locale/programs/charmap.c:403 #, c-format msgid "duplicate definition of <%s>" msgstr "<%s> tanımı tekrarlanmış" -#: locale/programs/charmap.c:409 +#: locale/programs/charmap.c:410 #, c-format msgid "value for <%s> must be 1 or greater" msgstr "<%s> için deÄŸer 1 ya da daha büyük olmalı" -#: locale/programs/charmap.c:421 +#: locale/programs/charmap.c:422 #, c-format msgid "value of <%s> must be greater or equal than the value of <%s>" msgstr "<%s> deÄŸeri <%s> deÄŸerinden daha büyük ya da eÅŸit olmalı" -#: locale/programs/charmap.c:444 locale/programs/repertoire.c:183 +#: locale/programs/charmap.c:445 locale/programs/repertoire.c:184 #, c-format msgid "argument to <%s> must be a single character" msgstr "<%s>in argümanı bir tek karakter olmalı" -#: locale/programs/charmap.c:470 +#: locale/programs/charmap.c:471 msgid "character sets with locking states are not supported" msgstr "tuÅŸ kilitlemeli karakter kümeleri desteklenmiyor" -#: 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 +#: locale/programs/charmap.c:498 locale/programs/charmap.c:552 +#: locale/programs/charmap.c:584 locale/programs/charmap.c:678 +#: locale/programs/charmap.c:733 locale/programs/charmap.c:774 +#: locale/programs/charmap.c:815 #, c-format msgid "syntax error in %s definition: %s" msgstr "%s tanımında sözdizimi hatası: %s" -#: locale/programs/charmap.c:498 locale/programs/charmap.c:678 -#: locale/programs/charmap.c:774 locale/programs/repertoire.c:230 +#: locale/programs/charmap.c:499 locale/programs/charmap.c:679 +#: locale/programs/charmap.c:775 locale/programs/repertoire.c:231 msgid "no symbolic name given" msgstr "sembolik isim verilmemiÅŸ" -#: locale/programs/charmap.c:552 +#: locale/programs/charmap.c:553 msgid "invalid encoding given" msgstr "geçersiz kodlama verilmiÅŸ" -#: locale/programs/charmap.c:561 +#: locale/programs/charmap.c:562 msgid "too few bytes in character encoding" msgstr "karakter kodlamada bayt sayısı çok az" -#: locale/programs/charmap.c:563 +#: locale/programs/charmap.c:564 msgid "too many bytes in character encoding" msgstr "karakter kodlamada bayt sayısı çok fazla" -#: locale/programs/charmap.c:585 locale/programs/charmap.c:733 -#: locale/programs/charmap.c:816 locale/programs/repertoire.c:296 +#: locale/programs/charmap.c:586 locale/programs/charmap.c:734 +#: locale/programs/charmap.c:817 locale/programs/repertoire.c:297 msgid "no symbolic name given for end of range" msgstr "kapsam sonu için sembolik isim verilmemiÅŸ" -#: locale/programs/charmap.c:609 locale/programs/locfile.c:818 -#: locale/programs/repertoire.c:313 +#: locale/programs/charmap.c:610 locale/programs/ld-address.c:600 +#: locale/programs/ld-collate.c:2677 locale/programs/ld-collate.c:3828 +#: locale/programs/ld-ctype.c:2232 locale/programs/ld-ctype.c:2984 +#: locale/programs/ld-identification.c:452 +#: locale/programs/ld-measurement.c:238 locale/programs/ld-messages.c:332 +#: locale/programs/ld-monetary.c:943 locale/programs/ld-name.c:307 +#: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:241 +#: locale/programs/ld-telephone.c:313 locale/programs/ld-time.c:1221 +#: locale/programs/repertoire.c:314 #, c-format -msgid "`%1$s' definition does not end with `END %1$s'" -msgstr "`%1$s' tanımı `END %1$s' ile bitmiyor" +msgid "%1$s: definition does not end with `END %1$s'" +msgstr "%1$s: tanım `END %1$s' ile bitmiyor" -#: locale/programs/charmap.c:642 +#: locale/programs/charmap.c:643 msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" msgstr "CHARMAP tanımını sadece geniÅŸlik tanımları izleyebilir" -#: locale/programs/charmap.c:650 locale/programs/charmap.c:713 +#: locale/programs/charmap.c:651 locale/programs/charmap.c:714 #, c-format msgid "value for %s must be an integer" msgstr "%s için deÄŸer bir tamsayı olmalı" -#: locale/programs/charmap.c:841 +#: locale/programs/charmap.c:842 #, c-format msgid "%s: error in state machine" msgstr "%s: durum motorunda hata" -#: locale/programs/charmap.c:849 locale/programs/ld-address.c:615 -#: locale/programs/ld-collate.c:2650 locale/programs/ld-collate.c:3820 -#: locale/programs/ld-ctype.c:2224 locale/programs/ld-ctype.c:2996 -#: locale/programs/ld-identification.c:467 -#: locale/programs/ld-measurement.c:253 locale/programs/ld-messages.c:347 -#: locale/programs/ld-monetary.c:956 locale/programs/ld-name.c:322 -#: locale/programs/ld-numeric.c:383 locale/programs/ld-paper.c:256 -#: locale/programs/ld-telephone.c:328 locale/programs/ld-time.c:1236 -#: locale/programs/locfile.c:825 locale/programs/repertoire.c:324 +#: locale/programs/charmap.c:850 locale/programs/ld-address.c:616 +#: locale/programs/ld-collate.c:2674 locale/programs/ld-collate.c:3844 +#: locale/programs/ld-ctype.c:2229 locale/programs/ld-ctype.c:3001 +#: locale/programs/ld-identification.c:468 +#: locale/programs/ld-measurement.c:254 locale/programs/ld-messages.c:348 +#: locale/programs/ld-monetary.c:959 locale/programs/ld-name.c:323 +#: locale/programs/ld-numeric.c:384 locale/programs/ld-paper.c:257 +#: locale/programs/ld-telephone.c:329 locale/programs/ld-time.c:1237 +#: locale/programs/locfile.c:826 locale/programs/repertoire.c:325 #, c-format msgid "%s: premature end of file" msgstr "%s: dosya sonu erken geldi" -#: locale/programs/charmap.c:868 locale/programs/charmap.c:879 +#: locale/programs/charmap.c:869 locale/programs/charmap.c:880 #, c-format msgid "unknown character `%s'" msgstr "`%s' karakteri bilinmiyor" -#: locale/programs/charmap.c:887 +#: locale/programs/charmap.c:888 #, c-format msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d" msgstr "aralığın başındaki ve sonundaki bayt dizilerideki baytların sayısı aynı deÄŸil: %d ve %d" -#: locale/programs/charmap.c:992 locale/programs/ld-collate.c:2933 -#: locale/programs/repertoire.c:419 +#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:2957 +#: locale/programs/repertoire.c:420 msgid "invalid names for character range" msgstr "karakter kapsamı için geçersiz isimler" -#: locale/programs/charmap.c:1004 locale/programs/repertoire.c:431 +#: locale/programs/charmap.c:1005 locale/programs/repertoire.c:432 msgid "hexadecimal range format should use only capital characters" msgstr "onaltılık kapsam biçimi sadece büyük harfleri kullanacaktır" -#: locale/programs/charmap.c:1022 +#: locale/programs/charmap.c:1023 locale/programs/repertoire.c:450 #, c-format -msgid "<%s> and <%s> are illegal names for range" -msgstr "<%s> ve <%s> kapsam için uygun isimler deÄŸil" +msgid "<%s> and <%s> are invalid names for range" +msgstr "<%s> ve <%s> kapsam için geçersiz isimler" -#: locale/programs/charmap.c:1028 -msgid "upper limit in range is not higher then lower limit" -msgstr "kapsamdaki üst sınır alt sınırdan büyük deÄŸil" +#: locale/programs/charmap.c:1029 locale/programs/repertoire.c:457 +msgid "upper limit in range is smaller than lower limit" +msgstr "aralığın üst sınırı alt sınırdan küçük" -#: locale/programs/charmap.c:1086 +#: locale/programs/charmap.c:1087 msgid "resulting bytes for range not representable." msgstr "sonuçlanan baytlar kapsam için gösterilebilir deÄŸil." -#: locale/programs/ld-address.c:132 locale/programs/ld-collate.c:1532 -#: locale/programs/ld-ctype.c:419 locale/programs/ld-identification.c:132 -#: locale/programs/ld-measurement.c:93 locale/programs/ld-messages.c:96 -#: locale/programs/ld-monetary.c:192 locale/programs/ld-name.c:93 -#: locale/programs/ld-numeric.c:97 locale/programs/ld-paper.c:90 -#: locale/programs/ld-telephone.c:93 locale/programs/ld-time.c:158 +#: locale/programs/ld-address.c:133 locale/programs/ld-collate.c:1536 +#: locale/programs/ld-ctype.c:420 locale/programs/ld-identification.c:133 +#: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97 +#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:94 +#: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91 +#: locale/programs/ld-telephone.c:94 locale/programs/ld-time.c:159 #, c-format msgid "No definition for %s category found" msgstr "%s kategorisi için atama bulunamadı" -#: locale/programs/ld-address.c:143 locale/programs/ld-address.c:181 -#: locale/programs/ld-address.c:199 locale/programs/ld-address.c:228 -#: locale/programs/ld-address.c:300 locale/programs/ld-address.c:319 -#: locale/programs/ld-address.c:332 locale/programs/ld-identification.c:145 -#: locale/programs/ld-measurement.c:104 locale/programs/ld-monetary.c:204 -#: locale/programs/ld-monetary.c:248 locale/programs/ld-monetary.c:264 -#: locale/programs/ld-monetary.c:276 locale/programs/ld-name.c:104 -#: locale/programs/ld-name.c:141 locale/programs/ld-numeric.c:111 -#: locale/programs/ld-numeric.c:125 locale/programs/ld-paper.c:101 -#: locale/programs/ld-paper.c:110 locale/programs/ld-telephone.c:104 -#: locale/programs/ld-telephone.c:161 locale/programs/ld-time.c:174 -#: locale/programs/ld-time.c:195 +#: locale/programs/ld-address.c:144 locale/programs/ld-address.c:182 +#: locale/programs/ld-address.c:200 locale/programs/ld-address.c:229 +#: locale/programs/ld-address.c:301 locale/programs/ld-address.c:320 +#: locale/programs/ld-address.c:333 locale/programs/ld-identification.c:146 +#: locale/programs/ld-measurement.c:105 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:105 +#: locale/programs/ld-name.c:142 locale/programs/ld-numeric.c:112 +#: locale/programs/ld-numeric.c:126 locale/programs/ld-paper.c:102 +#: locale/programs/ld-paper.c:111 locale/programs/ld-telephone.c:105 +#: locale/programs/ld-telephone.c:162 locale/programs/ld-time.c:175 +#: locale/programs/ld-time.c:196 #, c-format msgid "%s: field `%s' not defined" msgstr "%s: `%s' alanı tanımlı deÄŸil" -#: locale/programs/ld-address.c:155 locale/programs/ld-address.c:207 -#: locale/programs/ld-address.c:237 locale/programs/ld-address.c:275 -#: locale/programs/ld-name.c:116 locale/programs/ld-telephone.c:116 +#: locale/programs/ld-address.c:156 locale/programs/ld-address.c:208 +#: locale/programs/ld-address.c:238 locale/programs/ld-address.c:276 +#: locale/programs/ld-name.c:117 locale/programs/ld-telephone.c:117 #, c-format msgid "%s: field `%s' must not be empty" msgstr "%s: `%s' alanı boÅŸ olmamalı" -#: locale/programs/ld-address.c:167 +#: locale/programs/ld-address.c:168 #, c-format msgid "%s: invalid escape `%%%c' sequence in field `%s'" msgstr "%s: `%%%c' önceleme dizisi `%s' alanında geçersiz" -#: locale/programs/ld-address.c:218 +#: locale/programs/ld-address.c:219 #, c-format msgid "%s: terminology language code `%s' not defined" msgstr "%s: terminoloji dil kodu `%s' atanmamış" -#: locale/programs/ld-address.c:243 +#: locale/programs/ld-address.c:244 #, c-format msgid "%s: field `%s' must not be defined" msgstr "%s: `%s' alanı tanımlanmamalı" -#: locale/programs/ld-address.c:257 locale/programs/ld-address.c:286 +#: locale/programs/ld-address.c:258 locale/programs/ld-address.c:287 #, c-format msgid "%s: language abbreviation `%s' not defined" msgstr "%s: dil kısaltması `%s' atanmamış" -#: locale/programs/ld-address.c:264 locale/programs/ld-address.c:292 -#: locale/programs/ld-address.c:326 locale/programs/ld-address.c:338 +#: locale/programs/ld-address.c:265 locale/programs/ld-address.c:293 +#: locale/programs/ld-address.c:327 locale/programs/ld-address.c:339 #, c-format msgid "%s: `%s' value does not match `%s' value" msgstr "%s: `%s' deÄŸeri `%s' deÄŸeriyle eÅŸleÅŸmiyor" -#: locale/programs/ld-address.c:311 +#: locale/programs/ld-address.c:312 #, c-format msgid "%s: numeric country code `%d' not valid" msgstr "%s: sayısal ülke kodu `%d' geçersiz" -#: locale/programs/ld-address.c:507 locale/programs/ld-address.c:544 -#: locale/programs/ld-address.c:582 locale/programs/ld-ctype.c:2603 -#: locale/programs/ld-identification.c:363 -#: locale/programs/ld-measurement.c:220 locale/programs/ld-messages.c:300 -#: locale/programs/ld-monetary.c:698 locale/programs/ld-monetary.c:733 -#: locale/programs/ld-monetary.c:774 locale/programs/ld-name.c:279 -#: locale/programs/ld-numeric.c:262 locale/programs/ld-paper.c:223 -#: locale/programs/ld-telephone.c:287 locale/programs/ld-time.c:1125 -#: locale/programs/ld-time.c:1167 +#: locale/programs/ld-address.c:508 locale/programs/ld-address.c:545 +#: locale/programs/ld-address.c:583 locale/programs/ld-ctype.c:2608 +#: locale/programs/ld-identification.c:364 +#: locale/programs/ld-measurement.c:221 locale/programs/ld-messages.c:301 +#: locale/programs/ld-monetary.c:701 locale/programs/ld-monetary.c:736 +#: locale/programs/ld-monetary.c:777 locale/programs/ld-name.c:280 +#: locale/programs/ld-numeric.c:263 locale/programs/ld-paper.c:224 +#: locale/programs/ld-telephone.c:288 locale/programs/ld-time.c:1126 +#: locale/programs/ld-time.c:1168 #, c-format msgid "%s: field `%s' declared more than once" msgstr "%s: `%s' alanı bir kereden fazla bildirilmiÅŸ" -#: locale/programs/ld-address.c:511 locale/programs/ld-address.c:549 -#: locale/programs/ld-identification.c:367 locale/programs/ld-messages.c:310 -#: locale/programs/ld-monetary.c:702 locale/programs/ld-monetary.c:737 -#: locale/programs/ld-name.c:283 locale/programs/ld-numeric.c:266 -#: locale/programs/ld-telephone.c:291 locale/programs/ld-time.c:1019 -#: locale/programs/ld-time.c:1088 locale/programs/ld-time.c:1130 +#: locale/programs/ld-address.c:512 locale/programs/ld-address.c:550 +#: locale/programs/ld-identification.c:368 locale/programs/ld-messages.c:311 +#: locale/programs/ld-monetary.c:705 locale/programs/ld-monetary.c:740 +#: locale/programs/ld-name.c:284 locale/programs/ld-numeric.c:267 +#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:1020 +#: locale/programs/ld-time.c:1089 locale/programs/ld-time.c:1131 #, c-format msgid "%s: unknown character in field `%s'" msgstr "%s: `%s' alanında bilinmeyen karakter" -#: locale/programs/ld-address.c:596 locale/programs/ld-collate.c:3802 -#: locale/programs/ld-ctype.c:2976 locale/programs/ld-identification.c:448 -#: locale/programs/ld-measurement.c:234 locale/programs/ld-messages.c:329 -#: locale/programs/ld-monetary.c:938 locale/programs/ld-name.c:304 -#: locale/programs/ld-numeric.c:365 locale/programs/ld-paper.c:238 -#: locale/programs/ld-telephone.c:310 locale/programs/ld-time.c:1218 +#: locale/programs/ld-address.c:597 locale/programs/ld-collate.c:3826 +#: locale/programs/ld-ctype.c:2981 locale/programs/ld-identification.c:449 +#: locale/programs/ld-measurement.c:235 locale/programs/ld-messages.c:330 +#: locale/programs/ld-monetary.c:941 locale/programs/ld-name.c:305 +#: locale/programs/ld-numeric.c:366 locale/programs/ld-paper.c:239 +#: locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1219 #, c-format msgid "%s: incomplete `END' line" msgstr "%s: tamamlanmamış `END' satırı" -#: locale/programs/ld-address.c:599 locale/programs/ld-collate.c:2653 -#: locale/programs/ld-collate.c:3804 locale/programs/ld-ctype.c:2227 -#: locale/programs/ld-ctype.c:2979 locale/programs/ld-identification.c:451 -#: locale/programs/ld-measurement.c:237 locale/programs/ld-messages.c:331 -#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:306 -#: locale/programs/ld-numeric.c:367 locale/programs/ld-paper.c:240 -#: locale/programs/ld-telephone.c:312 locale/programs/ld-time.c:1220 -#, c-format -msgid "%1$s: definition does not end with `END %1$s'" -msgstr "%1$s: tanım `END %1$s' ile bitmiyor" - -#: locale/programs/ld-address.c:606 locale/programs/ld-collate.c:521 -#: locale/programs/ld-collate.c:573 locale/programs/ld-collate.c:869 -#: locale/programs/ld-collate.c:882 locale/programs/ld-collate.c:2640 -#: locale/programs/ld-collate.c:3811 locale/programs/ld-ctype.c:1955 -#: locale/programs/ld-ctype.c:2214 locale/programs/ld-ctype.c:2801 -#: locale/programs/ld-ctype.c:2987 locale/programs/ld-identification.c:458 -#: locale/programs/ld-measurement.c:244 locale/programs/ld-messages.c:338 -#: locale/programs/ld-monetary.c:947 locale/programs/ld-name.c:313 -#: locale/programs/ld-numeric.c:374 locale/programs/ld-paper.c:247 -#: locale/programs/ld-telephone.c:319 locale/programs/ld-time.c:1227 +#: locale/programs/ld-address.c:607 locale/programs/ld-collate.c:522 +#: locale/programs/ld-collate.c:574 locale/programs/ld-collate.c:870 +#: locale/programs/ld-collate.c:883 locale/programs/ld-collate.c:2664 +#: locale/programs/ld-collate.c:3835 locale/programs/ld-ctype.c:1960 +#: locale/programs/ld-ctype.c:2219 locale/programs/ld-ctype.c:2806 +#: locale/programs/ld-ctype.c:2992 locale/programs/ld-identification.c:459 +#: locale/programs/ld-measurement.c:245 locale/programs/ld-messages.c:339 +#: locale/programs/ld-monetary.c:950 locale/programs/ld-name.c:314 +#: locale/programs/ld-numeric.c:375 locale/programs/ld-paper.c:248 +#: locale/programs/ld-telephone.c:320 locale/programs/ld-time.c:1228 #, c-format msgid "%s: syntax error" msgstr "%s: sözdizimi hatası" -#: locale/programs/ld-collate.c:396 +#: locale/programs/ld-collate.c:397 #, c-format msgid "`%.*s' already defined in charmap" msgstr "`%.*s' karakter eÅŸlem olarak zaten atanmış" -#: locale/programs/ld-collate.c:405 +#: locale/programs/ld-collate.c:406 #, c-format msgid "`%.*s' already defined in repertoire" msgstr "`%.*s' repertuvar olarak zaten atanmış" -#: locale/programs/ld-collate.c:412 +#: locale/programs/ld-collate.c:413 #, c-format msgid "`%.*s' already defined as collating symbol" msgstr "`%.*s' karşılaÅŸtırma sembolü olarak zaten atanmış" -#: locale/programs/ld-collate.c:419 +#: locale/programs/ld-collate.c:420 #, c-format msgid "`%.*s' already defined as collating element" msgstr "`%.*s' karşılaÅŸtırma elemanı olarak zaten atanmış" -#: locale/programs/ld-collate.c:450 locale/programs/ld-collate.c:476 +#: locale/programs/ld-collate.c:451 locale/programs/ld-collate.c:477 #, c-format msgid "%s: `forward' and `backward' are mutually excluding each other" msgstr "%s: `forward' ve `backward' karşılıklı olarak bir diÄŸerini dışlar" -#: locale/programs/ld-collate.c:460 locale/programs/ld-collate.c:486 -#: locale/programs/ld-collate.c:502 +#: locale/programs/ld-collate.c:461 locale/programs/ld-collate.c:487 +#: locale/programs/ld-collate.c:503 #, c-format msgid "%s: `%s' mentioned more than once in definition of weight %d" msgstr "%s:`%s' %d ağırlıklı tanımda bir kereden fazla anıldı" -#: locale/programs/ld-collate.c:558 +#: locale/programs/ld-collate.c:559 #, c-format msgid "%s: too many rules; first entry only had %d" msgstr "%s: çok fazla kural var; sadece ilk girdide kural sayısı %d" -#: locale/programs/ld-collate.c:594 +#: locale/programs/ld-collate.c:595 #, c-format msgid "%s: not enough sorting rules" msgstr "%s: sıralama kuralları yetersiz" -#: locale/programs/ld-collate.c:759 +#: locale/programs/ld-collate.c:760 #, c-format msgid "%s: empty weight string not allowed" msgstr "%s: boÅŸ ağırlık dizgesine izin verilmez" -#: locale/programs/ld-collate.c:854 +#: locale/programs/ld-collate.c:855 #, c-format msgid "%s: weights must use the same ellipsis symbol as the name" msgstr "%s: ağırlıklar isim olarak aynı elips sembolünü kullanmalıdır" -#: locale/programs/ld-collate.c:910 +#: locale/programs/ld-collate.c:911 #, c-format msgid "%s: too many values" msgstr "%s: çok fazla deÄŸer var" -#: locale/programs/ld-collate.c:1029 locale/programs/ld-collate.c:1204 +#: 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' için sıralama zaten %s:%Zu içinde atanmış" -#: locale/programs/ld-collate.c:1079 +#: 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: bir kapsamın baÅŸlangıç ve bitiÅŸ sembolleri, karakterleri temsil etmelidir" -#: locale/programs/ld-collate.c:1106 +#: locale/programs/ld-collate.c:1108 #, c-format msgid "%s: byte sequences of first and last character must have the same length" msgstr "%s: ilk ve son karakterin bayt serisi aynı uzunlukta olmalı" -#: locale/programs/ld-collate.c:1148 +#: 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: serinin ilk karakterinin bayt serisi son karakterininkinden daha az deÄŸildir" +msgid "%s: byte sequence of first character of range is not lower than that of the last character" +msgstr "%s: aralığın ilk karakterinin bayt dizisi son karakterininkinden daha düşük deÄŸil" -#: locale/programs/ld-collate.c:1273 +#: locale/programs/ld-collate.c:1275 #, c-format msgid "%s: symbolic range ellipsis must not directly follow `order_start'" msgstr "%s: sembolik kapsam elipsleri `order_start' ın hemen ardından gelmemelidir" -#: locale/programs/ld-collate.c:1277 +#: locale/programs/ld-collate.c:1279 #, c-format msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'" msgstr "%s: sembolik kapsam elipslerinin hemen ardından `order_end' gelmemelidir" -#: locale/programs/ld-collate.c:1297 locale/programs/ld-ctype.c:1475 +#: locale/programs/ld-collate.c:1299 locale/programs/ld-ctype.c:1477 #, c-format msgid "`%s' and `%.*s' are not valid names for symbolic range" msgstr "`%s' ve `%.*s' simgesel aralık için geçerli isimler deÄŸil" -#: locale/programs/ld-collate.c:1346 locale/programs/ld-collate.c:3739 +#: locale/programs/ld-collate.c:1349 locale/programs/ld-collate.c:3763 #, c-format msgid "%s: order for `%.*s' already defined at %s:%Zu" msgstr "%s: `%.*s' için abecesel sıra zaten %s:%Zu içinde atanmış" -#: locale/programs/ld-collate.c:1355 +#: locale/programs/ld-collate.c:1358 #, c-format msgid "%s: `%s' must be a character" msgstr "%s: `%s' bir karakter olmalı" -#: locale/programs/ld-collate.c:1548 +#: locale/programs/ld-collate.c:1552 #, c-format msgid "%s: `position' must be used for a specific level in all sections or none" msgstr "%s: `position' tüm alt bölümlerde özel bir düzey için kullanılmış olmalı ya da hiç bulunmamalı" -#: locale/programs/ld-collate.c:1573 +#: locale/programs/ld-collate.c:1577 #, c-format msgid "symbol `%s' not defined" msgstr "`%s' sembolü atanmamış" -#: locale/programs/ld-collate.c:1649 locale/programs/ld-collate.c:1755 +#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759 #, c-format msgid "symbol `%s' has the same encoding as" msgstr "`%s' sembolü bununla aynı kodlamaya sahip:" -#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759 +#: locale/programs/ld-collate.c:1657 locale/programs/ld-collate.c:1763 #, c-format msgid "symbol `%s'" msgstr "`%s' sembolü" -#: locale/programs/ld-collate.c:1801 +#: locale/programs/ld-collate.c:1805 #, c-format msgid "no definition of `UNDEFINED'" msgstr "`UNDEFINED' tanımı yok" -#: locale/programs/ld-collate.c:1830 +#: locale/programs/ld-collate.c:1834 #, c-format msgid "too many errors; giving up" msgstr "çok fazla hata: bırakılıyor" -#: locale/programs/ld-collate.c:2738 +#: locale/programs/ld-collate.c:2762 #, c-format msgid "%s: duplicate definition of `%s'" msgstr "%s: `%s' tanımı tekrarlanmış" -#: locale/programs/ld-collate.c:2774 +#: locale/programs/ld-collate.c:2798 #, c-format msgid "%s: duplicate declaration of section `%s'" msgstr "%s: `%s' bölüm bildirimi tekrarlanmış" -#: locale/programs/ld-collate.c:2913 +#: locale/programs/ld-collate.c:2937 #, c-format msgid "%s: unknown character in collating symbol name" msgstr "%s: karşılaÅŸtırma sembolü isminde bilinmeyen karakter" -#: locale/programs/ld-collate.c:3045 +#: locale/programs/ld-collate.c:3069 #, c-format msgid "%s: unknown character in equivalent definition name" msgstr "%s: eÅŸdeÄŸer tanımlama isminde bilinmeyen karakter" -#: locale/programs/ld-collate.c:3058 +#: locale/programs/ld-collate.c:3082 #, c-format msgid "%s: unknown character in equivalent definition value" msgstr "%s: eÅŸdeÄŸer tanımlama deÄŸerinde bilinmeyen karakter" -#: locale/programs/ld-collate.c:3068 +#: locale/programs/ld-collate.c:3092 #, c-format msgid "%s: unknown symbol `%s' in equivalent definition" msgstr "%s: eÅŸdeÄŸer tanımlamada bilinmeyen sembol: `%s'" -#: locale/programs/ld-collate.c:3077 +#: locale/programs/ld-collate.c:3101 msgid "error while adding equivalent collating symbol" msgstr "eÅŸdeÄŸer karşılaÅŸtırma sembolünü eklerken hata" -#: locale/programs/ld-collate.c:3107 +#: locale/programs/ld-collate.c:3131 #, c-format msgid "duplicate definition of script `%s'" msgstr "`%s' betiÄŸinin ataması tekrarlanmış" -#: locale/programs/ld-collate.c:3155 +#: locale/programs/ld-collate.c:3179 #, c-format -msgid "%s: unknown section name `%s'" -msgstr "%s: bölüm ismi `%s' bilinmiyor" +msgid "%s: unknown section name `%.*s'" +msgstr "%s: bölüm ismi `%.*s' bilinmiyor" -#: locale/programs/ld-collate.c:3183 +#: locale/programs/ld-collate.c:3208 #, c-format msgid "%s: multiple order definitions for section `%s'" msgstr "%s: `%s' alt bölümünde çok sayıda sıralama tanımı" -#: locale/programs/ld-collate.c:3208 +#: locale/programs/ld-collate.c:3233 #, c-format msgid "%s: invalid number of sorting rules" msgstr "%s: sıralama kurallarının sayısı geçersiz" -#: locale/programs/ld-collate.c:3235 +#: locale/programs/ld-collate.c:3260 #, c-format msgid "%s: multiple order definitions for unnamed section" msgstr "%s: isimsiz alt bölümde çok sayıda sıralama tanımı" -#: locale/programs/ld-collate.c:3289 locale/programs/ld-collate.c:3417 -#: locale/programs/ld-collate.c:3780 +#: locale/programs/ld-collate.c:3314 locale/programs/ld-collate.c:3442 +#: locale/programs/ld-collate.c:3804 #, c-format msgid "%s: missing `order_end' keyword" msgstr "%s: `order_end' anahtar-sözcüğü kayıp" -#: locale/programs/ld-collate.c:3350 +#: locale/programs/ld-collate.c:3375 #, c-format msgid "%s: order for collating symbol %.*s not yet defined" msgstr "%s: karşılaÅŸtırma sembolü %.*s için abecesel sıra henüz atanmamış" -#: locale/programs/ld-collate.c:3368 +#: locale/programs/ld-collate.c:3393 #, c-format msgid "%s: order for collating element %.*s not yet defined" msgstr "%s: karşılaÅŸtırma elemanı %.*s için abecesel sıra henüz atanmamış" -#: locale/programs/ld-collate.c:3379 +#: locale/programs/ld-collate.c:3404 #, c-format msgid "%s: cannot reorder after %.*s: symbol not known" msgstr "%s: %.*s sembolünden sonra tekrar sıralanamıyor: sembol bilinmiyor" -#: locale/programs/ld-collate.c:3431 locale/programs/ld-collate.c:3792 +#: locale/programs/ld-collate.c:3456 locale/programs/ld-collate.c:3816 #, c-format msgid "%s: missing `reorder-end' keyword" msgstr "%s: `reorder_end' anahtar-sözcüğü kayıp" -#: locale/programs/ld-collate.c:3465 locale/programs/ld-collate.c:3664 +#: locale/programs/ld-collate.c:3490 locale/programs/ld-collate.c:3688 #, c-format msgid "%s: section `%.*s' not known" msgstr "%s: `%.*s' alt bölümü bilinmiyor" -#: locale/programs/ld-collate.c:3530 +#: locale/programs/ld-collate.c:3555 #, c-format msgid "%s: bad symbol <%.*s>" msgstr "%s: hatalı sembol <%.*s>" -#: locale/programs/ld-collate.c:3727 +#: locale/programs/ld-collate.c:3751 #, c-format msgid "%s: cannot have `%s' as end of ellipsis range" msgstr "%s: `%s' elips kapsamının sonu olamıyor" -#: locale/programs/ld-collate.c:3776 +#: locale/programs/ld-collate.c:3800 #, c-format msgid "%s: empty category description not allowed" msgstr "%s: boÅŸ kategori açıklamasına izin verilmez" -#: locale/programs/ld-collate.c:3795 +#: locale/programs/ld-collate.c:3819 #, c-format msgid "%s: missing `reorder-sections-end' keyword" msgstr "%s: `reorder_section_end' anahtar-sözcüğü kayıp" -#: locale/programs/ld-ctype.c:438 +#: locale/programs/ld-ctype.c:439 #, c-format msgid "No character set name specified in charmap" msgstr "Karakter eÅŸleÅŸme listesinde karakter kümesi ismi belirtilmemiÅŸ" -#: locale/programs/ld-ctype.c:467 +#: locale/programs/ld-ctype.c:468 #, c-format msgid "character L'\\u%0*x' in class `%s' must be in class `%s'" msgstr "L'\\u%0*x' karakteri `%s' sınıfında, `%s' sınıfında olmalı" -#: locale/programs/ld-ctype.c:482 +#: locale/programs/ld-ctype.c:483 #, c-format msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'" msgstr "L'\\u%0*x' karakteri `%s' sınıfında, `%s' sınıfında olmamalı" -#: locale/programs/ld-ctype.c:496 locale/programs/ld-ctype.c:554 +#: locale/programs/ld-ctype.c:497 locale/programs/ld-ctype.c:555 #, c-format msgid "internal error in %s, line %u" msgstr "%s, %u satırında içsel hata" -#: locale/programs/ld-ctype.c:525 +#: locale/programs/ld-ctype.c:526 #, c-format msgid "character '%s' in class `%s' must be in class `%s'" msgstr "`%s' karakteri `%s' sınıfı yerine `%s' sınıfında olmalı" -#: locale/programs/ld-ctype.c:541 +#: locale/programs/ld-ctype.c:542 #, c-format msgid "character '%s' in class `%s' must not be in class `%s'" msgstr "`%s' karakteri `%s' sınıfında ama `%s' sınıfında olmamalı" -#: locale/programs/ld-ctype.c:571 locale/programs/ld-ctype.c:609 +#: locale/programs/ld-ctype.c:572 locale/programs/ld-ctype.c:610 #, c-format msgid "<SP> character not in class `%s'" msgstr "<SP> karakteri `%s' sınıfında deÄŸil" -#: locale/programs/ld-ctype.c:583 locale/programs/ld-ctype.c:620 +#: locale/programs/ld-ctype.c:584 locale/programs/ld-ctype.c:621 #, c-format msgid "<SP> character must not be in class `%s'" msgstr "<SP> karakteri `%s' sınıfında olmamalı" -#: locale/programs/ld-ctype.c:598 +#: locale/programs/ld-ctype.c:599 #, c-format msgid "character <SP> not defined in character map" msgstr "<SP> karakteri karakter eÅŸlemde atanmamış" -#: locale/programs/ld-ctype.c:712 +#: locale/programs/ld-ctype.c:714 #, c-format msgid "`digit' category has not entries in groups of ten" msgstr "`digit' kategorisi 10 gruptan hiç birinde girdiye sahip deÄŸil" -#: locale/programs/ld-ctype.c:761 +#: locale/programs/ld-ctype.c:763 #, c-format msgid "no input digits defined and none of the standard names in the charmap" msgstr "karakter eÅŸleÅŸme listesinde standart isimlerin hiç biri ve atanmış girdi rakamları yok" -#: locale/programs/ld-ctype.c:826 +#: locale/programs/ld-ctype.c:828 #, c-format msgid "not all characters used in `outdigit' are available in the charmap" msgstr "`outdigit' içinde kullanılan karakterlerin bir kısmı karakter eÅŸleÅŸme listesinde mevcut" -#: locale/programs/ld-ctype.c:843 +#: locale/programs/ld-ctype.c:845 #, c-format msgid "not all characters used in `outdigit' are available in the repertoire" msgstr "`outdigit' içinde kullanılan karakterlerin bir kısmı repertuvarda mevcut" -#: locale/programs/ld-ctype.c:1243 +#: locale/programs/ld-ctype.c:1245 #, c-format msgid "character class `%s' already defined" msgstr "`%s' karakter sınıfı zaten atanmış" -#: locale/programs/ld-ctype.c:1249 +#: locale/programs/ld-ctype.c:1251 #, c-format msgid "implementation limit: no more than %Zd character classes allowed" msgstr "tamamlama sınırı: %Zd karakterden fazla olmayan sınıflara izin verilmedi" -#: locale/programs/ld-ctype.c:1275 +#: locale/programs/ld-ctype.c:1277 #, c-format msgid "character map `%s' already defined" msgstr "`%s' karakter eÅŸlem zaten atanmış" -#: locale/programs/ld-ctype.c:1281 +#: locale/programs/ld-ctype.c:1283 #, c-format msgid "implementation limit: no more than %d character maps allowed" msgstr "tamamlama sınırı: %d karakterden fazla olmayan karakter eÅŸleÅŸme listesine izin verilmedi" -#: locale/programs/ld-ctype.c:1546 locale/programs/ld-ctype.c:1671 -#: locale/programs/ld-ctype.c:1777 locale/programs/ld-ctype.c:2466 -#: locale/programs/ld-ctype.c:3462 +#: locale/programs/ld-ctype.c:1548 locale/programs/ld-ctype.c:1673 +#: locale/programs/ld-ctype.c:1779 locale/programs/ld-ctype.c:2471 +#: locale/programs/ld-ctype.c:3467 #, c-format msgid "%s: field `%s' does not contain exactly ten entries" msgstr "%s: `%s' alanı tamı tamına 10 girdi içeremez" -#: locale/programs/ld-ctype.c:1574 locale/programs/ld-ctype.c:2145 +#: locale/programs/ld-ctype.c:1576 locale/programs/ld-ctype.c:2150 #, c-format msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>" msgstr "kapsamdaki <U%0*X> `to' deÄŸeri <U%0*X> `from' deÄŸerinden daha küçük" -#: locale/programs/ld-ctype.c:1701 +#: locale/programs/ld-ctype.c:1703 msgid "start and end character sequence of range must have the same length" msgstr "kapsamın baÅŸlangıç ve bitiÅŸ karakter zincirleri aynı uzunlukta olmalı" -#: locale/programs/ld-ctype.c:1708 +#: locale/programs/ld-ctype.c:1710 msgid "to-value character sequence is smaller than from-value sequence" msgstr "karakter dizisindeki `to' deÄŸeri `from' deÄŸerinden daha küçük" -#: locale/programs/ld-ctype.c:2065 locale/programs/ld-ctype.c:2116 +#: locale/programs/ld-ctype.c:2070 locale/programs/ld-ctype.c:2121 msgid "premature end of `translit_ignore' definition" msgstr "`translit_ignore' tanımının sonu eksik" -#: locale/programs/ld-ctype.c:2071 locale/programs/ld-ctype.c:2122 -#: locale/programs/ld-ctype.c:2164 +#: locale/programs/ld-ctype.c:2076 locale/programs/ld-ctype.c:2127 +#: locale/programs/ld-ctype.c:2169 msgid "syntax error" msgstr "sözdizimi hatası" -#: locale/programs/ld-ctype.c:2298 +#: locale/programs/ld-ctype.c:2303 #, c-format msgid "%s: syntax error in definition of new character class" msgstr "%s: yeni karakter sınıfının tanımında sözdizimi hatası" -#: locale/programs/ld-ctype.c:2313 +#: locale/programs/ld-ctype.c:2318 #, c-format msgid "%s: syntax error in definition of new character map" msgstr "%s: yeni karakter eÅŸlemleri tanımında sözdizimi hatası" -#: locale/programs/ld-ctype.c:2488 +#: locale/programs/ld-ctype.c:2493 msgid "ellipsis range must be marked by two operands of same type" msgstr "elips kapsamı aynı türde iki veri öğesi ile sınırlanmış olmalıdır" -#: locale/programs/ld-ctype.c:2497 +#: locale/programs/ld-ctype.c:2502 msgid "with symbolic name range values the absolute ellipsis `...' must not be used" msgstr "mutlak elips `...' sembolik isim kapsamındaki deÄŸerlerle kullanılmamalı" -#: locale/programs/ld-ctype.c:2512 +#: locale/programs/ld-ctype.c:2517 msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'" msgstr "onaltılık sembolik elips `..' UCS kapsam deÄŸerlerinden biriyle kullanılmalı" -#: locale/programs/ld-ctype.c:2526 +#: locale/programs/ld-ctype.c:2531 msgid "with character code range values one must use the absolute ellipsis `...'" msgstr "mutlak elips `...' karakter kod deÄŸerlerinden biriyle kullanılmalı" -#: locale/programs/ld-ctype.c:2677 +#: locale/programs/ld-ctype.c:2682 #, c-format msgid "duplicated definition for mapping `%s'" msgstr "`%s' eÅŸlemi için atama tekrarlanmış" -#: locale/programs/ld-ctype.c:2763 locale/programs/ld-ctype.c:2907 +#: locale/programs/ld-ctype.c:2768 locale/programs/ld-ctype.c:2912 #, c-format msgid "%s: `translit_start' section does not end with `translit_end'" msgstr "%s: `translit_start' bölümü `translit_end' ile bitmiyor" -#: locale/programs/ld-ctype.c:2858 +#: locale/programs/ld-ctype.c:2863 #, c-format msgid "%s: duplicate `default_missing' definition" msgstr "%s: `default_missing' tanımı tekrarlanmış" -#: locale/programs/ld-ctype.c:2863 +#: locale/programs/ld-ctype.c:2868 msgid "previous definition was here" msgstr "önceki tanım burasıydı" -#: locale/programs/ld-ctype.c:2885 +#: locale/programs/ld-ctype.c:2890 #, c-format msgid "%s: no representable `default_missing' definition found" msgstr "%s: temsil edilebilir `default_missing' ataması bulunamadı" -#: locale/programs/ld-ctype.c:3038 -#, c-format -msgid "%s: character `%s' not defined in charmap while needed as default value" -msgstr "%s: karakter eÅŸlem listesinde öntanımlı deÄŸer olarak gerekli olmasına raÄŸmen `%s' karakteri atanmamış" - #: locale/programs/ld-ctype.c:3043 locale/programs/ld-ctype.c:3127 #: locale/programs/ld-ctype.c:3147 locale/programs/ld-ctype.c:3168 #: locale/programs/ld-ctype.c:3189 locale/programs/ld-ctype.c:3210 #: locale/programs/ld-ctype.c:3231 locale/programs/ld-ctype.c:3271 #: locale/programs/ld-ctype.c:3292 locale/programs/ld-ctype.c:3359 -#, c-format -msgid "%s: character `%s' in charmap not representable with one byte" -msgstr "%s: karakter eÅŸlem listesinde `%s' karakteri bir bayt ile temsil edilemez" - -#: locale/programs/ld-ctype.c:3122 locale/programs/ld-ctype.c:3142 -#: locale/programs/ld-ctype.c:3184 locale/programs/ld-ctype.c:3205 -#: locale/programs/ld-ctype.c:3226 locale/programs/ld-ctype.c:3266 -#: locale/programs/ld-ctype.c:3287 locale/programs/ld-ctype.c:3354 -#: locale/programs/ld-ctype.c:3396 locale/programs/ld-ctype.c:3421 +#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426 #, c-format msgid "%s: character `%s' not defined while needed as default value" msgstr "%s: öntanımlı deÄŸer olarak gerekli olmasına raÄŸmen `%s' karakteri atanmamış" -#: locale/programs/ld-ctype.c:3163 +#: locale/programs/ld-ctype.c:3048 locale/programs/ld-ctype.c:3132 +#: locale/programs/ld-ctype.c:3152 locale/programs/ld-ctype.c:3173 +#: locale/programs/ld-ctype.c:3194 locale/programs/ld-ctype.c:3215 +#: locale/programs/ld-ctype.c:3236 locale/programs/ld-ctype.c:3276 +#: locale/programs/ld-ctype.c:3297 locale/programs/ld-ctype.c:3364 #, c-format -msgid "character `%s' not defined while needed as default value" -msgstr "Öntanımlı deÄŸer olması gereken `%s' karakteri atanmamış" +msgid "%s: character `%s' in charmap not representable with one byte" +msgstr "%s: karakter eÅŸlem listesinde `%s' karakteri bir bayt ile temsil edilemez" -#: locale/programs/ld-ctype.c:3403 locale/programs/ld-ctype.c:3428 +#: locale/programs/ld-ctype.c:3408 locale/programs/ld-ctype.c:3433 #, c-format msgid "%s: character `%s' needed as default value not representable with one byte" msgstr "%s: öntanımlı deÄŸer olarak gerekli olan `%s' karakteri tek bayt ile temsil edilemez" -#: locale/programs/ld-ctype.c:3483 +#: locale/programs/ld-ctype.c:3489 #, c-format msgid "no output digits defined and none of the standard names in the charmap" msgstr "karakter eÅŸleÅŸme listesinde standart isimlerin hiç biri ve atanmış çıktı rakamları yok" -#: locale/programs/ld-ctype.c:3774 +#: locale/programs/ld-ctype.c:3780 #, c-format msgid "%s: transliteration data from locale `%s' not available" msgstr "%s: `%s' yerelinden baÅŸka bir dilin alfabesinde yazma verisi yok" -#: locale/programs/ld-ctype.c:3875 +#: locale/programs/ld-ctype.c:3881 #, c-format msgid "%s: table for class \"%s\": %lu bytes\n" msgstr "%s: \"%s\" sınıfının tablosu: %lu bayt\n" -#: locale/programs/ld-ctype.c:3944 +#: locale/programs/ld-ctype.c:3950 #, c-format msgid "%s: table for map \"%s\": %lu bytes\n" msgstr "%s: \"%s\" eÅŸlemlerinin tablosu: %lu bayt\n" -#: locale/programs/ld-ctype.c:4077 +#: locale/programs/ld-ctype.c:4083 #, c-format msgid "%s: table for width: %lu bytes\n" msgstr "%s: geniÅŸlik için tablo: %lu bayt\n" -#: locale/programs/ld-identification.c:169 +#: locale/programs/ld-identification.c:170 #, c-format msgid "%s: no identification for category `%s'" msgstr "%s: `%s' kategorisi için hiç identification satırı yok" -#: locale/programs/ld-identification.c:434 +#: locale/programs/ld-identification.c:435 #, c-format msgid "%s: duplicate category version definition" msgstr "%s kategori sürümü tanımı tekrarlanmış" -#: locale/programs/ld-measurement.c:112 +#: locale/programs/ld-measurement.c:113 #, c-format msgid "%s: invalid value for field `%s'" msgstr "%s: `%s' alanındaki deÄŸer geçersiz" -#: locale/programs/ld-messages.c:113 locale/programs/ld-messages.c:147 +#: locale/programs/ld-messages.c:114 locale/programs/ld-messages.c:148 #, c-format msgid "%s: field `%s' undefined" msgstr "%s: `%s' alanı tanımsız" -#: locale/programs/ld-messages.c:120 locale/programs/ld-messages.c:154 +#: locale/programs/ld-messages.c:121 locale/programs/ld-messages.c:155 +#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:118 #, c-format msgid "%s: value for field `%s' must not be an empty string" msgstr "%s: `%s' alanının deÄŸeri boÅŸ bir dizge olmamalı" -#: locale/programs/ld-messages.c:136 locale/programs/ld-messages.c:170 +#: locale/programs/ld-messages.c:137 locale/programs/ld-messages.c:171 #, c-format msgid "%s: no correct regular expression for field `%s': %s" msgstr "%s: `%s' alanında doÄŸru bir düzenli ifade yok: %s" -#: locale/programs/ld-monetary.c:222 +#: locale/programs/ld-monetary.c:224 #, c-format msgid "%s: value of field `int_curr_symbol' has wrong length" msgstr "%s: `int_curr_symbol' alanındaki deÄŸer yanlış uzunlukta" -#: locale/programs/ld-monetary.c:235 +#: 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' alanının deÄŸeri ISO 4217'deki geçerli isimlerden biri deÄŸil" -#: locale/programs/ld-monetary.c:254 locale/programs/ld-numeric.c:117 -#, c-format -msgid "%s: value for field `%s' must not be the empty string" -msgstr "%s: `%s' alanının deÄŸeri boÅŸ dizge olmamalı" - -#: locale/programs/ld-monetary.c:282 locale/programs/ld-monetary.c:312 +#: locale/programs/ld-monetary.c:285 locale/programs/ld-monetary.c:315 #, c-format msgid "%s: value for field `%s' must be in range %d...%d" msgstr "%s: `%s' alanındaki deÄŸer %d...%d aralığında olmalı" -#: locale/programs/ld-monetary.c:744 locale/programs/ld-numeric.c:273 +#: locale/programs/ld-monetary.c:747 locale/programs/ld-numeric.c:274 #, c-format msgid "%s: value for field `%s' must be a single character" msgstr "%s: `%s' alanındaki deÄŸer tek karakter olmalı" -#: locale/programs/ld-monetary.c:841 locale/programs/ld-numeric.c:317 +#: locale/programs/ld-monetary.c:844 locale/programs/ld-numeric.c:318 #, c-format msgid "%s: `-1' must be last entry in `%s' field" msgstr "%s: `%s' alanında `-1' son girdi olmalı" -#: locale/programs/ld-monetary.c:863 locale/programs/ld-numeric.c:334 +#: locale/programs/ld-monetary.c:866 locale/programs/ld-numeric.c:335 #, c-format msgid "%s: values for field `%s' must be smaller than 127" msgstr "%s: `%s' alanındaki deÄŸer 127 den küçük olmalı" -#: locale/programs/ld-monetary.c:906 +#: locale/programs/ld-monetary.c:909 msgid "conversion rate value cannot be zero" msgstr "dönüştürme oranı sıfır olamaz" -#: locale/programs/ld-name.c:128 locale/programs/ld-telephone.c:125 -#: locale/programs/ld-telephone.c:148 +#: locale/programs/ld-name.c:129 locale/programs/ld-telephone.c:126 +#: locale/programs/ld-telephone.c:149 #, c-format msgid "%s: invalid escape sequence in field `%s'" msgstr "%s: `%s' alanında geçersiz önceleme dizisi" -#: locale/programs/ld-time.c:246 +#: locale/programs/ld-time.c:247 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'" msgstr "%s: `era' alanındaki %Zd dizgesinin yön flaması '+' ya da '-' deÄŸil" -#: locale/programs/ld-time.c:257 +#: locale/programs/ld-time.c:258 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not a single character" msgstr "%s: `era' alanındaki %Zd dizgesinin yön flaması tek karakter deÄŸil" -#: locale/programs/ld-time.c:270 +#: locale/programs/ld-time.c:271 #, c-format msgid "%s: invalid number for offset in string %Zd in `era' field" msgstr "%s: `era' alanındaki %Zd dizgesinde dengeleme deÄŸeri olarak geçersiz sayı" -#: locale/programs/ld-time.c:278 +#: locale/programs/ld-time.c:279 #, c-format msgid "%s: garbage at end of offset value in string %Zd in `era' field" msgstr "%s: `era' alanındaki %Zd dizgesinin dengeleme deÄŸerinin sonunda bozulma saptandı" -#: locale/programs/ld-time.c:329 +#: locale/programs/ld-time.c:330 #, c-format msgid "%s: invalid starting date in string %Zd in `era' field" msgstr "%s: `era' alanındaki %Zd dizgesinde baÅŸlangıç tarihi geçersiz" -#: locale/programs/ld-time.c:338 +#: locale/programs/ld-time.c:339 #, c-format msgid "%s: garbage at end of starting date in string %Zd in `era' field " msgstr "%s: `era' alanındaki %Zd dizgesinde baÅŸlangıç tarihinin sonunda bozulma saptandı" -#: locale/programs/ld-time.c:357 +#: locale/programs/ld-time.c:358 #, c-format msgid "%s: starting date is invalid in string %Zd in `era' field" msgstr "%s: `era' alanındaki %Zd dizgesinde baÅŸlangıç tarihi geçersiz" -#: locale/programs/ld-time.c:406 +#: locale/programs/ld-time.c:407 #, c-format msgid "%s: invalid stopping date in string %Zd in `era' field" msgstr "%s: `era' alanındaki %Zd dizgesinde bitiÅŸ tarihi geçersiz" -#: locale/programs/ld-time.c:415 +#: locale/programs/ld-time.c:416 #, c-format msgid "%s: garbage at end of stopping date in string %Zd in `era' field" msgstr "%s: `era' alanındaki %Zd dizgesinde bitiÅŸ tarihinin sonunda bozulma saptandı" -#: locale/programs/ld-time.c:434 +#: locale/programs/ld-time.c:435 #, c-format msgid "%s: stopping date is invalid in string %Zd in `era' field" msgstr "%s: `era' alanındaki %Zd dizgesinde bitiÅŸ tarihi geçersiz" -#: locale/programs/ld-time.c:443 +#: locale/programs/ld-time.c:444 #, c-format msgid "%s: missing era name in string %Zd in `era' field" msgstr "%s: `era' alanındaki %Zd dizgesinde dönem ismi eksik" -#: locale/programs/ld-time.c:455 +#: locale/programs/ld-time.c:456 #, c-format msgid "%s: missing era format in string %Zd in `era' field" msgstr "%s: `era' alanındaki %Zd dizgesinde dönemsellik biçemi eksik" -#: locale/programs/ld-time.c:496 +#: locale/programs/ld-time.c:497 #, c-format msgid "%s: third operand for value of field `%s' must not be larger than %d" msgstr "%s: `%s' alanının deÄŸerindeki üçüncü veri öğesi en fazla %d olabilir" -#: locale/programs/ld-time.c:504 locale/programs/ld-time.c:512 -#, c-format -msgid "%s: values of field `%s' must not be larger than %d" -msgstr "%s: `%s' alanındaki deÄŸer %d den büyük olmamalı" - -#: locale/programs/ld-time.c:520 +#: locale/programs/ld-time.c:505 locale/programs/ld-time.c:513 +#: locale/programs/ld-time.c:521 #, c-format msgid "%s: values for field `%s' must not be larger than %d" msgstr "%s: `%s' alanındaki deÄŸer %d den büyük olmalı" -#: locale/programs/ld-time.c:1003 +#: locale/programs/ld-time.c:1004 #, c-format msgid "%s: too few values for field `%s'" msgstr "%s: `%s' alanındaki deÄŸerler çok az" -#: locale/programs/ld-time.c:1048 +#: locale/programs/ld-time.c:1049 msgid "extra trailing semicolon" msgstr "fazladan ; var" -#: locale/programs/ld-time.c:1051 +#: locale/programs/ld-time.c:1052 #, c-format msgid "%s: too many values for field `%s'" msgstr "%s: `%s' alanındaki deÄŸerler çok fazla" -#: locale/programs/linereader.c:129 +#: locale/programs/linereader.c:130 msgid "trailing garbage at end of line" msgstr "satır sonu bozuk" -#: locale/programs/linereader.c:297 +#: locale/programs/linereader.c:298 msgid "garbage at end of number" msgstr "numaranın sonunda bozulma" -#: locale/programs/linereader.c:409 +#: locale/programs/linereader.c:410 msgid "garbage at end of character code specification" msgstr "karakter kodu özelliklerinin sonunda bozulma" -#: locale/programs/linereader.c:495 +#: locale/programs/linereader.c:496 msgid "unterminated symbolic name" msgstr "sonlandırılmamış sembolik isim" -#: locale/programs/linereader.c:622 +#: locale/programs/linereader.c:623 msgid "illegal escape sequence at end of string" msgstr "karakter dizisinin sonunda uygun olmayan escape dizisi" -#: locale/programs/linereader.c:626 locale/programs/linereader.c:854 +#: locale/programs/linereader.c:627 locale/programs/linereader.c:855 msgid "unterminated string" msgstr "sonlandırılmamış dizge" -#: locale/programs/linereader.c:668 +#: locale/programs/linereader.c:669 msgid "non-symbolic character value should not be used" msgstr "sembolik olmayan karakter deÄŸeri kullanılmış olmayacaktı" -#: locale/programs/linereader.c:815 +#: locale/programs/linereader.c:816 #, c-format msgid "symbol `%.*s' not in charmap" msgstr "`%.*s' sembolü CHARMAP içinde deÄŸil" -#: locale/programs/linereader.c:836 +#: locale/programs/linereader.c:837 #, c-format msgid "symbol `%.*s' not in repertoire map" msgstr "`%.*s' sembolü repertuar eÅŸlem içinde deÄŸil" -#: locale/programs/locale.c:73 +#: locale/programs/locale.c:74 msgid "System information:" msgstr "Sistem bilgileri:" -#: locale/programs/locale.c:75 +#: locale/programs/locale.c:76 msgid "Write names of available locales" msgstr "Mevcut yerellerin isimlerini yazar" -#: locale/programs/locale.c:77 +#: locale/programs/locale.c:78 msgid "Write names of available charmaps" msgstr "Mevcut karakter eÅŸlemlerin isimlerini yazar" -#: locale/programs/locale.c:78 +#: locale/programs/locale.c:79 msgid "Modify output format:" msgstr "DeÄŸiÅŸtirme çıktı biçemi:" -#: locale/programs/locale.c:79 +#: locale/programs/locale.c:80 msgid "Write names of selected categories" msgstr "SeçilmiÅŸ kategorilerin isimlerini yazar" -#: locale/programs/locale.c:80 +#: locale/programs/locale.c:81 msgid "Write names of selected keywords" msgstr "SeçilmiÅŸ anahtar kelimelerin isimlerini yazar" -#: locale/programs/locale.c:81 +#: locale/programs/locale.c:82 msgid "Print more information" msgstr "Daha fazla ileti basar" -#: locale/programs/locale.c:86 +#: locale/programs/locale.c:87 msgid "" -"Get locale-specific information.For bug reporting instructions, please see:\n" +"Get locale-specific information.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" "Yerele özgü bilgileri gösterir.\n" "Yazılım hatalarını bildirme iÅŸlemleri için,\n" "<http://www.gnu.org/software/libc/bugs.html> adresine bakınız.\n" -"Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n" +"Çeviri hatalarını <nilgun@belgeler.org> adresine bildiriniz.\n" -#: locale/programs/locale.c:91 +#: locale/programs/locale.c:92 msgid "" "NAME\n" "[-a|-m]" @@ -2430,104 +2395,104 @@ msgstr "" "Ä°SÄ°M\n" "[-a|-m]" -#: locale/programs/locale.c:192 +#: locale/programs/locale.c:193 #, c-format msgid "Cannot set LC_CTYPE to default locale" msgstr "LC_CTYPE deÄŸiÅŸkenine öntanımlı yerel atanamaz" -#: locale/programs/locale.c:194 +#: locale/programs/locale.c:195 #, c-format msgid "Cannot set LC_MESSAGES to default locale" msgstr "LC_MESSAGES deÄŸiÅŸkenine öntanımlı yerel atanamaz" -#: locale/programs/locale.c:207 +#: locale/programs/locale.c:208 #, c-format msgid "Cannot set LC_COLLATE to default locale" msgstr "LC_COLLATE deÄŸiÅŸkenine öntanımlı yerel atanamaz" -#: locale/programs/locale.c:223 +#: locale/programs/locale.c:224 #, c-format msgid "Cannot set LC_ALL to default locale" msgstr "LC_ALL deÄŸiÅŸkenine öntanımlı yerel atanamaz" -#: locale/programs/locale.c:499 +#: locale/programs/locale.c:500 #, c-format msgid "while preparing output" msgstr "çıktıyı hazırlarken" -#: locale/programs/localedef.c:119 +#: locale/programs/localedef.c:120 msgid "Input Files:" msgstr "Girdi Dosyaları:" -#: locale/programs/localedef.c:121 +#: locale/programs/localedef.c:122 msgid "Symbolic character names defined in FILE" msgstr "Sembolik karakter isimleri DOSYA dosyasında atandı" -#: locale/programs/localedef.c:122 +#: locale/programs/localedef.c:123 msgid "Source definitions are found in FILE" msgstr "Kaynak tanımları DOSYA da bulunur" -#: locale/programs/localedef.c:124 +#: locale/programs/localedef.c:125 msgid "FILE contains mapping from symbolic names to UCS4 values" msgstr "DOSYA sembolik isimlerden UCS4 deÄŸerlere eÅŸlemler içerir" -#: locale/programs/localedef.c:128 +#: locale/programs/localedef.c:129 msgid "Create output even if warning messages were issued" msgstr "Uyarı iletileri yayınlansa bile çıktı dosyasını oluÅŸturur" -#: locale/programs/localedef.c:129 +#: locale/programs/localedef.c:130 msgid "Create old-style tables" msgstr "Eski tarz tablolar oluÅŸturur" -#: locale/programs/localedef.c:130 +#: locale/programs/localedef.c:131 msgid "Optional output file prefix" msgstr "Çıktı dosyası öneki isteÄŸe baÄŸlı" -#: locale/programs/localedef.c:131 +#: locale/programs/localedef.c:132 msgid "Be strictly POSIX conform" msgstr "Kesinlikle POSIX-uygun olur" -#: locale/programs/localedef.c:133 +#: locale/programs/localedef.c:134 msgid "Suppress warnings and information messages" msgstr "Uyarıları ve bilgilendirme iletilerini bastırır" -#: locale/programs/localedef.c:134 +#: locale/programs/localedef.c:135 msgid "Print more messages" msgstr "Daha fazla ileti basar" -#: locale/programs/localedef.c:135 +#: locale/programs/localedef.c:136 msgid "Archive control:" msgstr "ArÅŸiv denetimi:" -#: locale/programs/localedef.c:137 +#: locale/programs/localedef.c:138 msgid "Don't add new data to archive" msgstr "ArÅŸive yeni veri eklenmez" -#: locale/programs/localedef.c:139 +#: locale/programs/localedef.c:140 msgid "Add locales named by parameters to archive" msgstr "Parametrelerde isimleri belirtilen yerelleri arÅŸive ekler" -#: locale/programs/localedef.c:140 +#: locale/programs/localedef.c:141 msgid "Replace existing archive content" msgstr "Mevcut arÅŸiv içeriÄŸiyle deÄŸiÅŸtirilir " -#: locale/programs/localedef.c:142 +#: locale/programs/localedef.c:143 msgid "Remove locales named by parameters from archive" msgstr "Parametrelerde isimleri belirtilen yerelleri arÅŸivden siler" -#: locale/programs/localedef.c:143 +#: locale/programs/localedef.c:144 msgid "List content of archive" msgstr "ArÅŸivin içindekiler" -#: locale/programs/localedef.c:145 +#: locale/programs/localedef.c:146 msgid "locale.alias file to consult when making archive" msgstr "arÅŸiv oluÅŸturulurken baÅŸvurulacak locale.alias dosyası" -#: locale/programs/localedef.c:150 +#: locale/programs/localedef.c:151 msgid "Compile locale specification" msgstr "Dil karakteristiklerini derler" -#: locale/programs/localedef.c:153 +#: locale/programs/localedef.c:154 msgid "" "NAME\n" "[--add-to-archive|--delete-from-archive] FILE...\n" @@ -2537,28 +2502,28 @@ msgstr "" "[--add-to-archive|--delete-from-archive] DOSYA...\n" "--list-archive [DOSYA]" -#: locale/programs/localedef.c:231 +#: locale/programs/localedef.c:232 #, c-format msgid "cannot create directory for output files" msgstr "çıktı dosyaları için dizin oluÅŸturulamıyor" -#: locale/programs/localedef.c:242 +#: locale/programs/localedef.c:243 #, c-format msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" msgstr "ÖLÃœMCÃœL: sistem `_POSIX2_LOCALEDEF' atamıyor" -#: locale/programs/localedef.c:256 locale/programs/localedef.c:272 -#: locale/programs/localedef.c:598 locale/programs/localedef.c:618 +#: locale/programs/localedef.c:257 locale/programs/localedef.c:273 +#: locale/programs/localedef.c:599 locale/programs/localedef.c:619 #, c-format msgid "cannot open locale definition file `%s'" msgstr "Dil karakteristikleri tanımlama dosyası `%s' açılamıyor" -#: locale/programs/localedef.c:284 +#: locale/programs/localedef.c:285 #, c-format msgid "cannot write output files to `%s'" msgstr "çıktı dosyaları `%s' dizinine yazılamıyor" -#: locale/programs/localedef.c:365 +#: locale/programs/localedef.c:366 #, c-format msgid "" "System's directory for character maps : %s\n" @@ -2571,209 +2536,205 @@ msgstr "" " Dil karakteristikleri dizini: %s\n" "%s" -#: locale/programs/localedef.c:566 +#: locale/programs/localedef.c:567 #, c-format msgid "circular dependencies between locale definitions" msgstr "Dil karakteristikleri tanımları arasında bağımlılıklar kısır döngülü" -#: locale/programs/localedef.c:572 +#: locale/programs/localedef.c:573 #, c-format msgid "cannot add already read locale `%s' a second time" msgstr "Zaten okunan `%s' dil karakteristikleri ikinci bir kez eklenemez" -#: locale/programs/locarchive.c:87 locale/programs/locarchive.c:256 +#: locale/programs/locarchive.c:88 locale/programs/locarchive.c:261 #, c-format msgid "cannot create temporary file" msgstr "geçici dosya oluÅŸturulamıyor" -#: locale/programs/locarchive.c:116 locale/programs/locarchive.c:302 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:307 #, c-format msgid "cannot initialize archive file" msgstr "arÅŸiv dosyası ilklendirilemiyor" -#: locale/programs/locarchive.c:123 locale/programs/locarchive.c:309 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:314 #, c-format msgid "cannot resize archive file" msgstr "arÅŸiv dosyasının boyutu deÄŸiÅŸtirilemiyor" -#: locale/programs/locarchive.c:132 locale/programs/locarchive.c:318 -#: locale/programs/locarchive.c:506 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:323 +#: locale/programs/locarchive.c:527 #, c-format msgid "cannot map archive header" msgstr "arÅŸiv baÅŸlığı eÅŸlenemiyor" -#: locale/programs/locarchive.c:154 +#: locale/programs/locarchive.c:156 #, c-format msgid "failed to create new locale archive" msgstr "yeni yerel arÅŸivi oluÅŸturulamadı" -#: locale/programs/locarchive.c:166 +#: locale/programs/locarchive.c:168 #, c-format msgid "cannot change mode of new locale archive" msgstr "yeni yerel arÅŸivinin kipi deÄŸiÅŸtirilemiyor" -#: locale/programs/locarchive.c:250 +#: locale/programs/locarchive.c:255 #, c-format msgid "cannot map locale archive file" msgstr "yerel arÅŸiv dosyası eÅŸlenemiyor" -#: locale/programs/locarchive.c:326 +#: locale/programs/locarchive.c:331 #, c-format msgid "cannot lock new archive" msgstr "yeni arÅŸiv kilitlenemiyor" -#: locale/programs/locarchive.c:375 +#: locale/programs/locarchive.c:396 #, c-format msgid "cannot extend locale archive file" msgstr "yerel arÅŸiv dosyası geniÅŸletilemiyor" -#: locale/programs/locarchive.c:384 +#: locale/programs/locarchive.c:405 #, c-format msgid "cannot change mode of resized locale archive" msgstr "boyutu deÄŸiÅŸtirilen yerel arÅŸivin kipi deÄŸiÅŸtirilemiyor" -#: locale/programs/locarchive.c:392 +#: locale/programs/locarchive.c:413 #, c-format msgid "cannot rename new archive" msgstr "yeni arÅŸivin ismi deÄŸiÅŸtirilemiyor" -#: locale/programs/locarchive.c:445 +#: locale/programs/locarchive.c:466 #, c-format msgid "cannot open locale archive \"%s\"" msgstr "yerel arÅŸiv `%s' açılamıyor" -#: locale/programs/locarchive.c:450 +#: locale/programs/locarchive.c:471 #, c-format msgid "cannot stat locale archive \"%s\"" msgstr "\"%s\" yerel arÅŸivi durumlanamıyor" -#: locale/programs/locarchive.c:469 +#: locale/programs/locarchive.c:490 #, c-format msgid "cannot lock locale archive \"%s\"" msgstr "\"%s\" yerel arÅŸivi kilitlenemiyor" -#: locale/programs/locarchive.c:492 +#: locale/programs/locarchive.c:513 #, c-format msgid "cannot read archive header" msgstr "arÅŸiv baÅŸlığı okunamıyor" -#: locale/programs/locarchive.c:552 +#: locale/programs/locarchive.c:573 #, c-format msgid "locale '%s' already exists" msgstr "`%s' yereli zaten var" -#: locale/programs/locarchive.c:783 locale/programs/locarchive.c:798 -#: locale/programs/locarchive.c:810 locale/programs/locarchive.c:822 -#: locale/programs/locfile.c:343 +#: locale/programs/locarchive.c:804 locale/programs/locarchive.c:819 +#: locale/programs/locarchive.c:831 locale/programs/locarchive.c:843 +#: locale/programs/locfile.c:344 #, c-format msgid "cannot add to locale archive" msgstr "yerel arÅŸive ekleme yapılamıyor" -#: locale/programs/locarchive.c:977 +#: locale/programs/locarchive.c:998 #, c-format msgid "locale alias file `%s' not found" msgstr "`%s' yerel isim dosyası bulunamadı" -#: locale/programs/locarchive.c:1121 +#: locale/programs/locarchive.c:1142 #, c-format msgid "Adding %s\n" msgstr "%s ekleniyor\n" -#: locale/programs/locarchive.c:1127 +#: locale/programs/locarchive.c:1148 #, c-format msgid "stat of \"%s\" failed: %s: ignored" msgstr "\"%s\" durumlaması baÅŸarısız: %s: yoksayıldı" -#: locale/programs/locarchive.c:1133 +#: locale/programs/locarchive.c:1154 #, c-format msgid "\"%s\" is no directory; ignored" msgstr "\"%s\" dizinsiz; yoksayıldı" -#: locale/programs/locarchive.c:1140 +#: locale/programs/locarchive.c:1161 #, c-format msgid "cannot open directory \"%s\": %s: ignored" msgstr "\"%s\" dizini açılamıyor: %s: yoksayıldı" -#: locale/programs/locarchive.c:1212 +#: locale/programs/locarchive.c:1233 #, c-format msgid "incomplete set of locale files in \"%s\"" msgstr "\"%s\" içindeki yerel dosyaları kümesi tamamlanmamış" -#: locale/programs/locarchive.c:1276 +#: locale/programs/locarchive.c:1297 #, c-format msgid "cannot read all files in \"%s\": ignored" msgstr "\"%s\" içindeki hiçbir dosya okunamıyor: yoksayıldı" -#: locale/programs/locarchive.c:1346 +#: locale/programs/locarchive.c:1367 #, c-format msgid "locale \"%s\" not in archive" msgstr "\"%s\" yeri arÅŸivde deÄŸil" -#: locale/programs/locfile.c:131 +#: locale/programs/locfile.c:132 #, c-format msgid "argument to `%s' must be a single character" msgstr "%s'in argümanı bir tek karakter olmalı" -#: locale/programs/locfile.c:251 +#: locale/programs/locfile.c:252 msgid "syntax error: not inside a locale definition section" msgstr "sözdizimi hatası: bir yerel tanımlama bölümü içinde deÄŸil" -#: locale/programs/locfile.c:625 +#: locale/programs/locfile.c:626 #, c-format msgid "cannot open output file `%s' for category `%s'" msgstr "çıktı dosyası `%s' açılamadı; `%s' kategorisi için." -#: locale/programs/locfile.c:649 +#: locale/programs/locfile.c:650 #, c-format msgid "failure while writing data for category `%s'" msgstr "`%s' kategorisi için veri yazılırken hata oluÅŸtu" -#: locale/programs/locfile.c:745 +#: locale/programs/locfile.c:746 #, c-format msgid "cannot create output file `%s' for category `%s'" msgstr "çıktı dosyası `%s' `%s' kategorisi için oluÅŸturulamıyor" -#: locale/programs/locfile.c:781 +#: locale/programs/locfile.c:782 msgid "expect string argument for `copy'" msgstr "`copy' için dizge argüman gerekli" -#: locale/programs/locfile.c:785 +#: locale/programs/locfile.c:786 msgid "locale name should consist only of portable characters" msgstr "yer isimlerinin karakterleri ascii 127 içinden seçilmiÅŸ olmalı" -#: locale/programs/locfile.c:804 +#: locale/programs/locfile.c:805 msgid "no other keyword shall be specified when `copy' is used" msgstr "`copy' kullanıldığında belirtilmiÅŸ olacak diÄŸer anahtar kelime yok" -#: locale/programs/repertoire.c:229 locale/programs/repertoire.c:270 -#: locale/programs/repertoire.c:295 +#: locale/programs/locfile.c:819 +#, c-format +msgid "`%1$s' definition does not end with `END %1$s'" +msgstr "`%1$s' tanımı `END %1$s' ile bitmiyor" + +#: 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 "repertuar eÅŸlem tanımı içinde sözdizimi hatası: %s" -#: locale/programs/repertoire.c:271 +#: locale/programs/repertoire.c:272 msgid "no <Uxxxx> or <Uxxxxxxxx> value given" msgstr "<Uxxxx> ya da <Uxxxxxxxx> deÄŸeri verilmeliydi" -#: locale/programs/repertoire.c:331 +#: locale/programs/repertoire.c:332 #, c-format msgid "cannot save new repertoire map" msgstr "yeni repertuvar eÅŸlemi kaydedilemiyor" -#: locale/programs/repertoire.c:342 +#: locale/programs/repertoire.c:343 #, c-format msgid "repertoire map file `%s' not found" msgstr "`%s' repertuar eÅŸlem dosyası bulunamadı" -#: locale/programs/repertoire.c:449 -#, c-format -msgid "<%s> and <%s> are invalid names for range" -msgstr "<%s> ve <%s> kapsam için geçersiz isimler" - -#: locale/programs/repertoire.c:456 -msgid "upper limit in range is not smaller then lower limit" -msgstr "kapsamdaki üst sınır alt sınırdan küçük deÄŸil" - #: login/programs/pt_chown.c:74 #, c-format msgid "Set the owner, group and access permission of the slave pseudo terminal corresponding to the master pseudo terminal passed on file descriptor `%d'. This is the helper program for the `grantpt' function. It is not intended to be run directly from the command line.\n" @@ -2800,33 +2761,33 @@ msgstr "çok fazla argüman var" msgid "needs to be installed setuid `root'" msgstr "setuid `root' olarak kurulu olması gerekir" -#: malloc/mcheck.c:324 +#: malloc/mcheck.c:330 msgid "memory is consistent, library is buggy\n" msgstr "bellek tutarlı, kitaplık hatalı\n" -#: malloc/mcheck.c:327 +#: malloc/mcheck.c:333 msgid "memory clobbered before allocated block\n" msgstr "bellek ayrılmış bloÄŸun öncesine taÅŸtı\n" -#: malloc/mcheck.c:330 +#: malloc/mcheck.c:336 msgid "memory clobbered past end of allocated block\n" msgstr "bellek ayrılmış bloÄŸun sonrasına taÅŸtı\n" -#: malloc/mcheck.c:333 +#: malloc/mcheck.c:339 msgid "block freed twice\n" msgstr "blok iki kere serbest bırakıldı\n" -#: malloc/mcheck.c:336 +#: malloc/mcheck.c:342 msgid "bogus mcheck_status, library is buggy\n" msgstr "mcheck_status sahte, kitaplık hatalı\n" #: malloc/memusage.sh:27 -msgid "Try `memusage --help' for more information." -msgstr "Daha fazla bilgi için `memusage --help' yazınız." +msgid "Try \\`memusage --help' for more information." +msgstr "Daha fazla bilgi için \\`memusage --help' yazınız." #: malloc/memusage.sh:33 -msgid "memusage: option `$1' requires an argument" -msgstr "memusage: `$1' seçeneÄŸi bir argümanla kullanılır" +msgid "memusage: option \\`$1' requires an argument" +msgstr "memusage: \\`$1' seçeneÄŸi bir argümanla kullanılır" #: malloc/memusage.sh:39 msgid "" @@ -2838,7 +2799,7 @@ msgid "" " -d,--data=FILE Generate binary data file and store it in FILE\n" " -u,--unbuffered Don't buffer output\n" " -b,--buffer=SIZE Collect SIZE entries before writing them out\n" -" --no-timer Don't collect additional information though timer\n" +" --no-timer Don't collect additional information through timer\n" " -m,--mmap Also trace mmap & friends\n" "\n" " -?,--help Print this help and exit\n" @@ -2859,14 +2820,14 @@ msgid "" "<http://www.gnu.org/software/libc/bugs.html>." msgstr "" "Kullanımı: memusage [SEÇENEK]... PROGRAM [PROGRAMSEÇENEĞİ]...\n" -"PROGRAMın bellek kullanım porofilini çıkarır.\n" +"PROGRAMın bellek kullanım profilini çıkarır.\n" "\n" " -n,--progname=Ä°SÄ°M profili çıkarılacak programın ismi\n" " -p,--png=DOSYA PNG üretir ve DOSYAya yazar\n" " -d,--data=DOSYA ikil veri dosyası üretir ve DOSYAya yazar\n" " -u,--unbuffered tamponlama yapmaz\n" -" -b,--buffer=BOYUT yazmak için önce BOYUT girdiyi toplar\n" -" --no-timer zamanlayıcıya raÄŸmen ek bilgi toplamaz\n" +" -b,--buffer=BOYUT yazmadan önce BOYUT girdiyi toplar\n" +" --no-timer zamanlayıcıdan ek bilgi toplamaz\n" " -m,--mmap ayrıca mmap ve şürekasını da izler\n" "\n" " -?,--help bu yardım metnini basar ve çıkar\n" @@ -2885,9 +2846,9 @@ msgstr "" "\n" "Yazılım hatalarını bildirme iÅŸlemleri için,\n" "<http://www.gnu.org/software/libc/bugs.html> adresine bakınız.\n" -"Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz." +"Çeviri hatalarını <nilgun@belgeler.org> adresine bildiriniz." -#: malloc/memusage.sh:90 +#: malloc/memusage.sh:99 msgid "" "Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]\n" " [--buffer=SIZE] [--no-timer] [--time-based] [--total]\n" @@ -2899,53 +2860,53 @@ msgstr "" " [--total] [--title=DÄ°ZGE] [--x-size=BOYUT] [--y-size=BOYUT] \\\n" " PROGRAM [PROGRAMSEÇENEĞİ]..." -#: malloc/memusage.sh:182 -msgid "memusage: option `${1##*=}' is ambiguous" -msgstr "memusage: `${1##*=}' seçeneÄŸi burada belirsiz" - #: malloc/memusage.sh:191 -msgid "memusage: unrecognized option `$1'" -msgstr "memusage: tanınmayan seçenek `$1'" +msgid "memusage: option \\`${1##*=}' is ambiguous" +msgstr "memusage: \\`${1##*=}' seçeneÄŸi burada belirsiz" + +#: malloc/memusage.sh:200 +msgid "memusage: unrecognized option \\`$1'" +msgstr "memusage: tanınmayan seçenek \\`$1'" -#: malloc/memusage.sh:204 +#: malloc/memusage.sh:213 msgid "No program name given" msgstr "Program ismi verilmemiÅŸ" -#: malloc/memusagestat.c:53 +#: malloc/memusagestat.c:54 msgid "Name output file" msgstr "Ä°sim çıktı dosyası" -#: malloc/memusagestat.c:54 +#: malloc/memusagestat.c:55 msgid "Title string used in output graphic" msgstr "Çıktı grafiÄŸinde kullanılan baÅŸlık dizgesi" -#: malloc/memusagestat.c:55 +#: malloc/memusagestat.c:56 msgid "Generate output linear to time (default is linear to number of function calls)" msgstr "" "Zamanla düzgün deÄŸiÅŸen çıktı üretilir. \n" "(iÅŸlev çaÄŸrılarının sayısıyla düzgün deÄŸiÅŸen çıktı üretimi öntanımlıdır)" -#: malloc/memusagestat.c:57 +#: malloc/memusagestat.c:58 msgid "Also draw graph for total memory consumption" msgstr "Ãœstelik toplam bellek tüketimi grafiÄŸini çizerken" -#: malloc/memusagestat.c:58 -msgid "make output graphic VALUE pixel wide" -msgstr "çıktı grafik DEÄžERini piksel geniÅŸliÄŸi yapar" - #: malloc/memusagestat.c:59 -msgid "make output graphic VALUE pixel high" -msgstr "çıktı grafik DEÄžERini piksel yüksekliÄŸi yapar" +msgid "Make output graphic VALUE pixels wide" +msgstr "Çizgeyi DEÄžER piksel geniÅŸlikte çıktılar" + +#: malloc/memusagestat.c:60 +msgid "Make output graphic VALUE pixels high" +msgstr "Çizgeyi DEÄžER piksel yükseklikte çıktılar" -#: malloc/memusagestat.c:64 +#: malloc/memusagestat.c:65 msgid "Generate graphic from memory profiling data" msgstr "Bellek profili verisinden grafik üretir" -#: malloc/memusagestat.c:67 +#: malloc/memusagestat.c:68 msgid "DATAFILE [OUTFILE]" msgstr "VERÄ°DOSYASI [ÇIKTIDOSYASI]" -#: misc/error.c:118 timezone/zic.c:396 +#: misc/error.c:118 timezone/zic.c:417 msgid "Unknown system error" msgstr "Bilinmeyen sistem hatası" @@ -3436,7 +3397,7 @@ msgstr " Ardışık üyeler:\n" msgid " No recursive members\n" msgstr " Ardışık üye yok\n" -#: nis/nis_print_group_entry.c:149 nis/nis_print_group_entry.c:165 +#: nis/nis_print_group_entry.c:149 msgid " Explicit nonmembers:\n" msgstr " DoÄŸrudan üye olmayanlar:\n" @@ -3452,6 +3413,10 @@ msgstr " Dolaylı üye olmayanlar:\n" msgid " No implicit nonmembers\n" msgstr " Dolaylı üye olmayan yok\n" +#: nis/nis_print_group_entry.c:165 +msgid " Recursive nonmembers:\n" +msgstr " Ardışık üye olmayanlar:\n" + #: nis/nis_print_group_entry.c:170 msgid " No recursive nonmembers\n" msgstr " Ardışık üye olmayan yok\n" @@ -3464,8 +3429,8 @@ msgstr "AÄŸ ismi %s için DES giriÅŸi eÅŸsiz deÄŸil\n" #: nis/nss_nisplus/nisplus-publickey.c:220 #, c-format -msgid "netname2user: missing group id list in `%s'." -msgstr "netname2user: `%s' içinde grup kimlikleri listesi yok." +msgid "netname2user: missing group id list in `%s'" +msgstr "netname2user: `%s' içinde grup kimlikleri listesi yok" #: nis/nss_nisplus/nisplus-publickey.c:302 #: nis/nss_nisplus/nisplus-publickey.c:308 @@ -3582,381 +3547,390 @@ msgstr "yp_update: makina ismi aÄŸ ismine dönüştürülemiyor\n" msgid "yp_update: cannot get server address\n" msgstr "yp_update: sunucu adresi alınamıyor\n" -#: nscd/aicache.c:76 nscd/hstcache.c:461 +#: nscd/aicache.c:77 nscd/hstcache.c:462 #, c-format msgid "Haven't found \"%s\" in hosts cache!" msgstr "\"%s\" makinalar arabelleÄŸinde yok!" -#: nscd/aicache.c:78 nscd/hstcache.c:463 +#: nscd/aicache.c:79 nscd/hstcache.c:464 #, c-format msgid "Reloading \"%s\" in hosts cache!" msgstr "\"%s\" hosts arabelleÄŸine yeniden yükleniyor!" -#: nscd/cache.c:126 +#: nscd/cache.c:146 #, c-format msgid "add new entry \"%s\" of type %s for %s to cache%s" msgstr "%3$s için %2$s türündeki yeni girdi \"%1$s\" %4$s arabelleÄŸine eklenir" -#: nscd/cache.c:233 nscd/connections.c:750 +#: nscd/cache.c:148 +msgid " (first)" +msgstr " (ilk)" + +#: nscd/cache.c:256 nscd/connections.c:786 #, c-format msgid "cannot stat() file `%s': %s" msgstr "`%s' dosyası stat() olamıyor: %s" -#: nscd/cache.c:262 +#: nscd/cache.c:285 #, c-format msgid "pruning %s cache; time %ld" msgstr "%s arabelleÄŸi budanıyor; süre %ld" -#: nscd/cache.c:289 +#: nscd/cache.c:312 #, c-format msgid "considering %s entry \"%s\", timeout %<PRIu64>" msgstr "girdi \"%2$s\" %1$s olarak ele elınıyor, zamanaşımı %3$<PRIu64>" -#: nscd/connections.c:469 nscd/connections.c:481 nscd/connections.c:493 -#: nscd/connections.c:512 +#: nscd/connections.c:505 nscd/connections.c:517 nscd/connections.c:529 +#: nscd/connections.c:548 #, c-format msgid "invalid persistent database file \"%s\": %s" msgstr "kalıcı veritabanı dosyası \"%s\" geçersiz: %s" -#: nscd/connections.c:483 +#: nscd/connections.c:519 msgid "header size does not match" msgstr "baÅŸlık boyutu uyumsuz" -#: nscd/connections.c:495 +#: nscd/connections.c:531 msgid "file size does not match" msgstr "dosya boyutu uyumsuz" -#: nscd/connections.c:514 +#: nscd/connections.c:550 msgid "verification failed" msgstr "doÄŸrulanamadı" -#: nscd/connections.c:528 +#: nscd/connections.c:564 #, c-format msgid "suggested size of table for database %s larger than the persistent database's table" msgstr "%s veritabanı için önerilen tablo boyutu kalıcı veritabanı tablosundan büyük" -#: nscd/connections.c:538 nscd/connections.c:619 +#: nscd/connections.c:574 nscd/connections.c:655 #, c-format msgid "cannot create read-only descriptor for \"%s\"; no mmap" msgstr "\"%s\" için salt-okunur tanıtıcı oluÅŸturulamıyor; mmap yok" -#: nscd/connections.c:598 +#: nscd/connections.c:634 #, c-format msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart" msgstr "%s için ya veritabanı yok ya da ÅŸu an kullanımda; gerekiyorsa %s'i kendiniz silip yeniden baÅŸlatın" -#: nscd/connections.c:605 +#: nscd/connections.c:641 #, c-format msgid "cannot create %s; no persistent database used" msgstr "%s oluÅŸturulamıyor; kullanımda bir kalıcı veritabanı yok" -#: nscd/connections.c:608 +#: nscd/connections.c:644 #, c-format msgid "cannot create %s; no sharing possible" msgstr "%s oluÅŸturulamıyor; paylaşım mümkün deÄŸil" -#: nscd/connections.c:679 +#: nscd/connections.c:715 #, c-format msgid "cannot write to database file %s: %s" msgstr "veritabanı dosyası %s yazılamıyor: %s" -#: nscd/connections.c:713 +#: nscd/connections.c:749 #, c-format msgid "cannot set socket to close on exec: %s; disabling paranoia mode" msgstr "exec üzerinde kapatılacak soket atanamadı: %s; paranoya kipi iptal ediliyor" -#: nscd/connections.c:763 +#: nscd/connections.c:799 #, c-format msgid "cannot open socket: %s" msgstr "soket açılamıyor: %s" -#: nscd/connections.c:780 +#: nscd/connections.c:816 #, c-format msgid "cannot change socket to nonblocking mode: %s" msgstr "engellenmeyen kipte soket deÄŸiÅŸtirilemez: %s" -#: nscd/connections.c:788 +#: nscd/connections.c:824 #, c-format msgid "cannot set socket to close on exec: %s" msgstr "exec üzerinde kapatılacak soket atanamadı: %s" -#: nscd/connections.c:799 +#: nscd/connections.c:835 #, c-format msgid "cannot enable socket to accept connections: %s" msgstr "baÄŸlantıları kabul etmek üzere soket etkinleÅŸtirilemiyor: %s" -#: nscd/connections.c:892 +#: nscd/connections.c:926 #, c-format msgid "provide access to FD %d, for %s" msgstr "%2$s için dosya tanıtıcı %1$d'ye eriÅŸim saÄŸlar" -#: nscd/connections.c:904 +#: nscd/connections.c:938 #, c-format msgid "cannot handle old request version %d; current version is %d" msgstr "eski istem sürümü %d elde edilemedi; mevcut sürüm %d" -#: nscd/connections.c:954 nscd/connections.c:1007 +#: nscd/connections.c:980 nscd/connections.c:1033 #, c-format msgid "cannot write result: %s" msgstr "sonuç yazılamıyor: %s" -#: nscd/connections.c:1082 +#: nscd/connections.c:1116 #, c-format msgid "error getting caller's id: %s" msgstr "çaÄŸrıcı kimliÄŸi alınırken hata: %s" -#: nscd/connections.c:1140 nscd/connections.c:1154 +#: nscd/connections.c:1175 #, c-format msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode" msgstr "/proc/self/cmdline açılamadı: %s; paranoya kipi iptal ediliyor" -#: nscd/connections.c:1194 +#: nscd/connections.c:1189 +#, c-format +msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode" +msgstr "/proc/self/cmdline okunamadı: %s; paranoya kipi iptal ediliyor" + +#: nscd/connections.c:1229 #, c-format msgid "cannot change to old UID: %s; disabling paranoia mode" msgstr "eski UID'e dönülemedi: %s; paranoya kipi iptal ediliyor" -#: nscd/connections.c:1204 +#: nscd/connections.c:1239 #, c-format msgid "cannot change to old GID: %s; disabling paranoia mode" msgstr "eski GID'e dönülemedi: %s; paranoya kipi iptal ediliyor" -#: nscd/connections.c:1217 +#: nscd/connections.c:1252 #, c-format msgid "cannot change to old working directory: %s; disabling paranoia mode" msgstr "eski çalışma dizinine dönülemiyor: %s; paranoya kipi iptal ediliyor" -#: nscd/connections.c:1245 +#: nscd/connections.c:1280 #, c-format msgid "re-exec failed: %s; disabling paranoia mode" msgstr "re-exec baÅŸarısız: %s; paranoya kipi iptal ediliyor" -#: nscd/connections.c:1254 +#: nscd/connections.c:1289 #, c-format msgid "cannot change current working directory to \"/\": %s" msgstr "çalışma dizini \"/\" yapılamadı: %s" -#: nscd/connections.c:1372 +#: nscd/connections.c:1407 #, c-format msgid "short read while reading request: %s" msgstr "istenen okuma kısa: %s" -#: nscd/connections.c:1404 +#: nscd/connections.c:1438 #, c-format msgid "key length in request too long: %d" msgstr "istenen anahtar/tuÅŸ uzunluÄŸu fazla: %d" -#: nscd/connections.c:1417 +#: nscd/connections.c:1451 #, c-format msgid "short read while reading request key: %s" msgstr "istenen anahtar/tuÅŸ okunurken kısa okuma: %s" -#: nscd/connections.c:1426 +#: nscd/connections.c:1460 #, c-format msgid "handle_request: request received (Version = %d) from PID %ld" msgstr "handle_request: %2$ld numaralı süreçden istek alındı (Sürüm = %1$d)" -#: nscd/connections.c:1431 +#: nscd/connections.c:1465 #, c-format msgid "handle_request: request received (Version = %d)" msgstr "handle_request: istek alındı (Sürüm = %d)" -#: nscd/connections.c:1792 +#: nscd/connections.c:1826 #, c-format msgid "could only start %d threads; terminating" msgstr "sadece %d evre baÅŸlatılabilir; sonlanıyor" -#: nscd/connections.c:1840 nscd/connections.c:1841 nscd/connections.c:1858 -#: nscd/connections.c:1867 nscd/connections.c:1885 nscd/connections.c:1896 -#: nscd/connections.c:1907 +#: nscd/connections.c:1874 nscd/connections.c:1875 nscd/connections.c:1892 +#: nscd/connections.c:1901 nscd/connections.c:1919 nscd/connections.c:1930 +#: nscd/connections.c:1941 #, c-format msgid "Failed to run nscd as user '%s'" msgstr "nscd '%s' kullanıcısı olarak çalıştırılamadı" -#: nscd/connections.c:1859 +#: nscd/connections.c:1893 #, c-format msgid "initial getgrouplist failed" msgstr "ilk getgrouplist baÅŸarısız" -#: nscd/connections.c:1868 +#: nscd/connections.c:1902 #, c-format msgid "getgrouplist failed" msgstr "getgrouplist baÅŸarısız" -#: nscd/connections.c:1886 +#: nscd/connections.c:1920 #, c-format msgid "setgroups failed" msgstr "setgroups baÅŸarısız" -#: nscd/grpcache.c:400 nscd/hstcache.c:411 nscd/initgrcache.c:411 -#: nscd/pwdcache.c:395 +#: nscd/grpcache.c:402 nscd/hstcache.c:412 nscd/initgrcache.c:412 +#: nscd/pwdcache.c:397 nscd/servicescache.c:342 #, c-format msgid "short write in %s: %s" msgstr "%s içinde kısa yazma: %s" -#: nscd/grpcache.c:443 nscd/initgrcache.c:77 +#: nscd/grpcache.c:445 nscd/initgrcache.c:78 #, c-format msgid "Haven't found \"%s\" in group cache!" msgstr "\"%s\" grup arabelleÄŸinde yok!" -#: nscd/grpcache.c:445 nscd/initgrcache.c:79 +#: nscd/grpcache.c:447 nscd/initgrcache.c:80 #, c-format msgid "Reloading \"%s\" in group cache!" msgstr "\"%s\" grup arabelleÄŸine yeniden yükleniyor!" -#: nscd/grpcache.c:536 +#: nscd/grpcache.c:524 #, c-format msgid "Invalid numeric gid \"%s\"!" msgstr "\"%s\" grup numarası geçersiz!" -#: nscd/mem.c:382 +#: nscd/mem.c:383 #, c-format msgid "freed %zu bytes in %s cache" msgstr "%2$s arabelleÄŸinde %1$zu bayt serbest bırakıldı" -#: nscd/mem.c:511 +#: nscd/mem.c:512 #, c-format msgid "no more memory for database '%s'" msgstr "veritabanı '%s' için bellek kalmadı" -#: nscd/nscd.c:97 +#: nscd/nscd.c:98 msgid "Read configuration data from NAME" msgstr "Yapılandırma verisini Ä°SÄ°M den okur" -#: nscd/nscd.c:99 +#: nscd/nscd.c:100 msgid "Do not fork and display messages on the current tty" msgstr "Ãœzerinde çalışılan tty de iletiler ayrılmaz ve gösterilir" -#: nscd/nscd.c:100 +#: nscd/nscd.c:101 msgid "NUMBER" msgstr "SAYI" -#: nscd/nscd.c:100 +#: nscd/nscd.c:101 msgid "Start NUMBER threads" msgstr "SAYIlı baÅŸlıkları baÅŸlatır" -#: nscd/nscd.c:101 +#: nscd/nscd.c:102 msgid "Shut the server down" msgstr "Sunucuyu indirir" -#: nscd/nscd.c:102 +#: nscd/nscd.c:103 msgid "Print current configuration statistic" msgstr "Åžu anki yapılandırma istatistiklerini basar" -#: nscd/nscd.c:103 +#: nscd/nscd.c:104 msgid "TABLE" msgstr "TABLO" -#: nscd/nscd.c:104 +#: nscd/nscd.c:105 msgid "Invalidate the specified cache" msgstr "Belirtilen arabellek geçersiz kılındı" -#: nscd/nscd.c:105 +#: nscd/nscd.c:106 msgid "TABLE,yes" msgstr "TABLO,evet" -#: nscd/nscd.c:106 +#: nscd/nscd.c:107 msgid "Use separate cache for each user" msgstr "Her kullanıcı için ayrı arabellek kullanılır" -#: nscd/nscd.c:111 +#: nscd/nscd.c:112 msgid "Name Service Cache Daemon." msgstr "Name Service Cache Daemon." -#: nscd/nscd.c:143 nss/getent.c:858 nss/makedb.c:123 +#: nscd/nscd.c:144 nss/getent.c:858 nss/makedb.c:123 #, c-format msgid "wrong number of arguments" msgstr "argüman sayısı hatalı" -#: nscd/nscd.c:153 +#: nscd/nscd.c:154 #, c-format msgid "failure while reading configuration file; this is fatal" msgstr "yapılandırma dosyası okunurken hata; bu ölümcül bir hata" -#: nscd/nscd.c:162 +#: nscd/nscd.c:163 #, c-format msgid "already running" msgstr "Zaten çalışıyor" -#: nscd/nscd.c:177 nscd/nscd.c:232 +#: nscd/nscd.c:178 nscd/nscd.c:233 #, c-format msgid "cannot fork" msgstr "çatallanamıyor" -#: nscd/nscd.c:240 +#: nscd/nscd.c:241 #, c-format msgid "cannot change current working directory to \"/\"" -msgstr "çalışma dizini \"/\" yapılamıyor" +msgstr "çalışma dizini \"/\" yapılamaz" -#: nscd/nscd.c:248 +#: nscd/nscd.c:249 msgid "Could not create log file" msgstr "Günlük dosyası oluÅŸturulamadı" -#: nscd/nscd.c:301 nscd/nscd.c:326 nscd/nscd_stat.c:172 +#: nscd/nscd.c:302 nscd/nscd.c:327 nscd/nscd_stat.c:172 #, c-format msgid "Only root is allowed to use this option!" msgstr "Bu seçenek sadece root tarafından kullanılabilir!" -#: nscd/nscd.c:359 nscd/nscd_stat.c:191 +#: nscd/nscd.c:364 nscd/nscd_stat.c:191 #, c-format msgid "write incomplete" msgstr "yazma tamamlanamıyor" -#: nscd/nscd.c:370 +#: nscd/nscd.c:375 #, c-format msgid "cannot read invalidate ACK" msgstr "geçersizleÅŸtirme ACK'sı okunamıyor" -#: nscd/nscd.c:376 +#: nscd/nscd.c:381 #, c-format msgid "invalidation failed" msgstr "geçersizleÅŸtirme baÅŸarısız" -#: nscd/nscd.c:386 +#: nscd/nscd.c:391 #, c-format msgid "secure services not implemented anymore" msgstr "güvenli hizmetler artık gerçeklenmiyor" -#: nscd/nscd_conf.c:55 +#: nscd/nscd_conf.c:57 #, c-format -msgid "database %s is not supported\n" -msgstr "veritabanı %s desteklenmiyor\n" +msgid "database %s is not supported" +msgstr "veritabanı %s desteklenmiyor" -#: nscd/nscd_conf.c:106 +#: nscd/nscd_conf.c:108 #, c-format msgid "Parse error: %s" msgstr "Çözümleme hatası: %s" -#: nscd/nscd_conf.c:191 +#: nscd/nscd_conf.c:193 #, c-format msgid "Must specify user name for server-user option" msgstr "server-user seçeneÄŸi için kullanıcı ismi belirtilmelidir" -#: nscd/nscd_conf.c:198 +#: nscd/nscd_conf.c:200 #, c-format msgid "Must specify user name for stat-user option" msgstr "stat-user seçeneÄŸi için kullanıcı ismi belirtilmelidir" -#: nscd/nscd_conf.c:242 +#: nscd/nscd_conf.c:244 #, c-format msgid "invalid value for 'reload-count': %u" msgstr "'reload-count' için deÄŸer geçersiz: %u" -#: nscd/nscd_conf.c:257 +#: nscd/nscd_conf.c:259 #, c-format msgid "Must specify value for restart-interval option" msgstr "restart-interval seçeneÄŸi için deÄŸer belirtilmelidir" -#: nscd/nscd_conf.c:271 +#: nscd/nscd_conf.c:273 #, c-format msgid "Unknown option: %s %s %s" msgstr "Bilinmeyen seçenek: %s %s %s" -#: nscd/nscd_conf.c:284 +#: nscd/nscd_conf.c:286 #, c-format msgid "cannot get current working directory: %s; disabling paranoia mode" msgstr "çalışılmakta olan dizin alınamıyor: %s; paranoya kipi iptal ediliyor" -#: nscd/nscd_conf.c:304 +#: nscd/nscd_conf.c:306 #, c-format msgid "maximum file size for %s database too small" msgstr "%s veritabanı için azami dosya boyu çok küçük" @@ -4086,97 +4060,93 @@ msgstr "" "%15<PRIuMAX> bellek ayırma baÅŸarısız\n" "%15s /etc/%s'de deÄŸiÅŸiklikler için yapılan denetim sayısı\n" -#: nscd/pwdcache.c:438 +#: nscd/pwdcache.c:440 #, c-format msgid "Haven't found \"%s\" in password cache!" msgstr "\"%s\" parola arabelleÄŸinde yok!" -#: nscd/pwdcache.c:440 +#: nscd/pwdcache.c:442 #, c-format msgid "Reloading \"%s\" in password cache!" msgstr "\"%s\" parola arabelleÄŸine yeriden yükleniyor!" -#: nscd/pwdcache.c:532 +#: nscd/pwdcache.c:520 #, c-format msgid "Invalid numeric uid \"%s\"!" msgstr "\"%s\" kullanıcı numarası geçersiz!" -#: nscd/selinux.c:151 +#: nscd/selinux.c:156 #, c-format msgid "Failed opening connection to the audit subsystem: %m" msgstr "denetim altsistemine baÄŸlantı kurulamadı: %m" -#: nscd/selinux.c:172 +#: nscd/selinux.c:177 msgid "Failed to set keep-capabilities" msgstr "Tutma yetenekleri ayarlanamadı" -#: nscd/selinux.c:173 nscd/selinux.c:232 +#: nscd/selinux.c:178 nscd/selinux.c:241 #, c-format msgid "prctl(KEEPCAPS) failed" msgstr "prctl(KEEPCAPS) baÅŸarısız" -#: nscd/selinux.c:187 +#: nscd/selinux.c:192 msgid "Failed to initialize drop of capabilities" msgstr "yeteneklerin kaldırılması baÅŸlatılamadı" -#: nscd/selinux.c:188 +#: nscd/selinux.c:193 #, c-format msgid "cap_init failed" msgstr "cap_init baÅŸarısız" -#: nscd/selinux.c:205 -msgid "Failed to drop capabilities\n" -msgstr "yetenekler kaldırılamadı\n" +#: nscd/selinux.c:214 nscd/selinux.c:231 +msgid "Failed to drop capabilities" +msgstr "Yetenekler kaldırılamadı" -#: nscd/selinux.c:206 nscd/selinux.c:223 +#: nscd/selinux.c:215 nscd/selinux.c:232 #, c-format msgid "cap_set_proc failed" msgstr "cap_set_proc baÅŸarısız" -#: nscd/selinux.c:222 -msgid "Failed to drop capabilities" -msgstr "Yetenekler kaldırılamadı" - -#: nscd/selinux.c:231 +#: nscd/selinux.c:240 msgid "Failed to unset keep-capabilities" msgstr "Tutma yetenekleri kaldırılamadı" -#: nscd/selinux.c:247 +#: nscd/selinux.c:256 msgid "Failed to determine if kernel supports SELinux" msgstr "Çekirdek SELinux'u destekliyor mu, saptanamadı." -#: nscd/selinux.c:262 +#: nscd/selinux.c:271 #, c-format msgid "Failed to start AVC thread" msgstr "EVA evresi baÅŸlatılamadı" -#: nscd/selinux.c:284 +#: nscd/selinux.c:293 #, c-format msgid "Failed to create AVC lock" msgstr "EVA kilidi oluÅŸturulamadı" -#: nscd/selinux.c:324 +#: nscd/selinux.c:333 #, c-format msgid "Failed to start AVC" msgstr "EVA baÅŸlatılamadı" -#: nscd/selinux.c:326 +#: nscd/selinux.c:335 msgid "Access Vector Cache (AVC) started" msgstr "EriÅŸim Vektörleri ArabelleÄŸi (EVA) baÅŸlatıldı" -#: nscd/selinux.c:347 +#: nscd/selinux.c:356 msgid "Error getting context of socket peer" msgstr "soket çifti baÄŸlamı alınırken hata" -#: nscd/selinux.c:352 +#: nscd/selinux.c:361 msgid "Error getting context of nscd" msgstr "nscd baÄŸlamı alınırken hata" -#: nscd/selinux.c:358 +#: nscd/selinux.c:367 msgid "Error getting sid from context" msgstr "BaÄŸlamdan sid alınırken hata" -#: nscd/selinux.c:390 +#: nscd/selinux.c:399 #, c-format msgid "" "\n" @@ -4203,6 +4173,16 @@ msgstr "" "%15u vektör algılandı\n" "%15u vektör kayıp\n" +#: nscd/servicescache.c:389 +#, c-format +msgid "Haven't found \"%s\" in services cache!" +msgstr "\"%s\" services arabelleÄŸinde yok!" + +#: nscd/servicescache.c:391 +#, c-format +msgid "Reloading \"%s\" in services cache!" +msgstr "\"%s\" services arabelleÄŸine yeniden yükleniyor!" + #: nss/getent.c:52 msgid "database [key ...]" msgstr "veritabanı [anahtar/tuÅŸ ...]" @@ -4213,13 +4193,13 @@ msgstr "Kullanılacak yapılandırmayı hizmete alır" #: nss/getent.c:62 msgid "" -"Get entries from administrative database.For bug reporting instructions, please see:\n" +"Get entries from administrative database.\vFor bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" msgstr "" "Yönetimsel veritabanındaki girdileri gösterir.\n" "Yazılım hatalarını bildirme iÅŸlemleri için,\n" "<http://www.gnu.org/software/libc/bugs.html> adresine bakınız.\n" -"Çeviri hatalarını <gnu-tr@belgeler.org> adresine bildiriniz.\n" +"Çeviri hatalarını <nilgun@belgeler.org> adresine bildiriniz.\n" #: nss/getent.c:145 nss/getent.c:394 #, c-format @@ -4299,31 +4279,31 @@ msgstr "`%s' okunurken sorunlar" msgid "while reading database" msgstr "veritabanı okunurken" -#: posix/getconf.c:940 +#: posix/getconf.c:945 #, c-format msgid "Usage: %s [-v specification] variable_name [pathname]\n" msgstr "Kullanımı: %s [-v özellik] deÄŸiÅŸken_ismi [dosyayolu_ismi]\n" -#: posix/getconf.c:943 +#: posix/getconf.c:948 #, c-format msgid " %s -a [pathname]\n" msgstr " %s -a [yolismi]\n" -#: posix/getconf.c:1062 +#: posix/getconf.c:1067 #, c-format msgid "unknown specification \"%s\"" msgstr "Özellik \"%s\" bilinmiyor" -#: posix/getconf.c:1090 +#: posix/getconf.c:1095 #, c-format msgid "Couldn't execute %s" msgstr "%s çalıştırılamadı" -#: posix/getconf.c:1130 posix/getconf.c:1146 +#: posix/getconf.c:1135 posix/getconf.c:1151 msgid "undefined" msgstr "atanmamış" -#: posix/getconf.c:1168 +#: posix/getconf.c:1173 #, c-format msgid "Unrecognized variable `%s'" msgstr "Tanınmayan deÄŸiÅŸken `%s'" @@ -4542,8 +4522,8 @@ msgid "authunix_create: out of memory\n" msgstr "authunix_create: bellek yetersiz\n" #: sunrpc/auth_unix.c:350 -msgid "auth_none.c - Fatal marshalling problem" -msgstr "auth_none.c - Ölümcül dizme sorunu" +msgid "auth_unix.c: Fatal marshalling problem" +msgstr "auth_unix.c - Ölümcül dizme sorunu" #: sunrpc/clnt_perr.c:118 sunrpc/clnt_perr.c:139 #, c-format @@ -4668,8 +4648,8 @@ msgid "Failed (unspecified error)" msgstr "BaÅŸarılamadı (belirlenmemiÅŸ hata)" #: sunrpc/clnt_raw.c:117 -msgid "clnt_raw.c - Fatal header serialization error." -msgstr "clnt_raw.c - Ölümcül baÅŸlık sıralama hatası." +msgid "clnt_raw.c: fatal header serialization error" +msgstr "clnt_raw.c - Ölümcül baÅŸlık sıralama hatası" #: sunrpc/clnt_tcp.c:131 msgid "clnttcp_create: out of memory\n" @@ -4684,8 +4664,8 @@ msgid "clntunix_create: out of memory\n" msgstr "clntunix_create: bellek yetersiz\n" #: sunrpc/pm_getmaps.c:83 -msgid "pmap_getmaps rpc problem" -msgstr "pmap_getmaps rpc problem" +msgid "pmap_getmaps.c: rpc problem" +msgstr "pmap_getmaps rpc sorunu" #: sunrpc/pmap_clnt.c:129 msgid "Cannot register service" @@ -4747,7 +4727,7 @@ msgstr "%s: C öniÅŸlemcisi %d çıkış kodu vererek baÅŸarısız oldu\n" #: sunrpc/rpc_main.c:460 #, c-format -msgid "illegal nettype :`%s'\n" +msgid "illegal nettype: `%s'\n" msgstr "kuraldışı aÄŸ türü: `%s'\n" #: sunrpc/rpc_main.c:1122 @@ -4921,7 +4901,11 @@ msgstr "rpcinfo: %s servisi bilinmiyor\n" msgid "rpcinfo: %s is unknown host\n" msgstr "rpcinfo: %s makinası bilinmiyor\n" -#: sunrpc/svc_run.c:76 +#: sunrpc/svc_run.c:70 +msgid "svc_run: - out of memory" +msgstr "svc_run: - bellek yetersiz" + +#: sunrpc/svc_run.c:90 msgid "svc_run: - poll failed" msgstr "svc_run: - poll baÅŸarısız" @@ -6120,703 +6104,398 @@ msgstr "`%s' açılamıyor" msgid "cannot read header from `%s'" msgstr "baÅŸlık `%s'den okunamıyor" -#: timezone/zdump.c:215 +#: timezone/zdump.c:211 msgid "lacks alphabetic at start" msgstr "baÅŸlangıcı alfabetik deÄŸil" -#: timezone/zdump.c:217 +#: timezone/zdump.c:213 msgid "has fewer than 3 alphabetics" msgstr "3 harften az" -#: timezone/zdump.c:219 +#: timezone/zdump.c:215 msgid "has more than 6 alphabetics" msgstr "6 harften az" -#: timezone/zdump.c:227 +#: timezone/zdump.c:223 msgid "differs from POSIX standard" msgstr "POSIX standardından farklar" -#: timezone/zdump.c:233 +#: timezone/zdump.c:229 #, c-format msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n" msgstr "%s: uyarı: zaman dilimi \"%s\" kısaltma \"%s\" %s\n" -#: timezone/zdump.c:284 +#: timezone/zdump.c:280 #, c-format msgid "%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n" msgstr "" "%s: kullanımı şöyledir: %s [ --version ] [ -v ] [ -c [ düşükyıl, ] yüksekyıl ]\n" "zamanDilimiÄ°smi ...\n" -#: timezone/zdump.c:301 +#: timezone/zdump.c:297 #, c-format msgid "%s: wild -c argument %s\n" msgstr "%s: ilkel -c argümanı %s\n" -#: timezone/zdump.c:392 +#: timezone/zdump.c:388 msgid "Error writing to standard output" msgstr "Standart çıktıya yazarken hata" -#: timezone/zdump.c:415 +#: timezone/zdump.c:411 #, c-format msgid "%s: use of -v on system with floating time_t other than float or double\n" msgstr "%s: sistem üzerinde float veya double'dan baÅŸka gerçel time_t'li -v kullanımı\n" -#: timezone/zic.c:371 +#: timezone/zic.c:392 #, c-format msgid "%s: Memory exhausted: %s\n" msgstr "%s: Bellek tükendi: %s\n" -#: timezone/zic.c:430 +#: timezone/zic.c:451 #, c-format msgid "\"%s\", line %d: %s" msgstr "\"%s\", satır %d: %s" -#: timezone/zic.c:433 +#: timezone/zic.c:454 #, c-format msgid " (rule from \"%s\", line %d)" msgstr " (\"%s\", %d satırından kural)" -#: timezone/zic.c:445 +#: timezone/zic.c:466 msgid "warning: " msgstr "uyarı: " -#: timezone/zic.c:455 +#: timezone/zic.c:476 #, c-format msgid "" -"%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" +"%s: usage is %s [ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" "\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" msgstr "" -"%s: kullanımı: %s [ --version ] [ -s ] [ -v ] \\\n" -"\t[ -l yerelZaman ] [ -p posixKuralları ] [ -d dizin ] \\\n" -"\t[ -L artıkSaniyeler ] [ -y yıltürü ] [ dosyaismi ... ]\n" +"%s: kullanımı: %s [ --version ] [ -v ] [ -l yerelZaman ]\n" +"\t[ -p posixKuralları ] [ -d dizin ] [ -L artıkSaniyeler ]\n" +"\t[ -y yıltürü ] [ dosyaismi ... ]\n" -#: timezone/zic.c:503 +#: timezone/zic.c:511 +msgid "wild compilation-time specification of zic_t" +msgstr "zic_t'nin derleme zamanı belirtimine güvenilmez" + +#: timezone/zic.c:528 #, c-format msgid "%s: More than one -d option specified\n" msgstr "%s: Birden fazla -d seçeneÄŸi belirtilmiÅŸ\n" -#: timezone/zic.c:513 +#: timezone/zic.c:538 #, c-format msgid "%s: More than one -l option specified\n" msgstr "%s: Birden fazla -l seçeneÄŸi belirtilmiÅŸ\n" -#: timezone/zic.c:523 +#: timezone/zic.c:548 #, c-format msgid "%s: More than one -p option specified\n" msgstr "%s: Birden fazla -p seçeneÄŸi belirtilmiÅŸ\n" -#: timezone/zic.c:533 +#: timezone/zic.c:558 #, c-format msgid "%s: More than one -y option specified\n" msgstr "%s: Birden fazla -y seçeneÄŸi belirtilmiÅŸ\n" -#: timezone/zic.c:543 +#: timezone/zic.c:568 #, c-format msgid "%s: More than one -L option specified\n" msgstr "%s: Birden fazla -L seçeneÄŸi belirtilmiÅŸ\n" -#: timezone/zic.c:592 +#: timezone/zic.c:617 msgid "link to link" msgstr "baÄŸlantıdan baÄŸlantıya" -#: timezone/zic.c:657 +#: timezone/zic.c:682 msgid "hard link failed, symbolic link used" msgstr "sabit baÄŸ baÅŸarısız, sembolik baÄŸ kullanıldı" -#: timezone/zic.c:665 +#: timezone/zic.c:690 #, c-format msgid "%s: Can't link from %s to %s: %s\n" msgstr "%s: %s den %s e baÄŸ kurulamıyor: %s\n" -#: timezone/zic.c:774 timezone/zic.c:776 +#: timezone/zic.c:762 timezone/zic.c:764 msgid "same rule name in multiple files" msgstr "bir çok dosyada aynı kural ismi var" -#: timezone/zic.c:817 +#: timezone/zic.c:805 msgid "unruly zone" msgstr "kuralsız dilim" -#: timezone/zic.c:824 +#: timezone/zic.c:812 #, c-format msgid "%s in ruleless zone" msgstr "%s kuralsız zaman diliminde" -#: timezone/zic.c:845 +#: timezone/zic.c:833 msgid "standard input" msgstr "standart girdi" -#: timezone/zic.c:850 +#: timezone/zic.c:838 #, c-format msgid "%s: Can't open %s: %s\n" msgstr "%s: %s açılamıyor: %s\n" -#: timezone/zic.c:861 +#: timezone/zic.c:849 msgid "line too long" msgstr "satır çok uzun" -#: timezone/zic.c:881 +#: timezone/zic.c:869 msgid "input line of unknown type" msgstr "girdi satırının türü bilinmiyor" -#: timezone/zic.c:897 +#: timezone/zic.c:885 #, c-format msgid "%s: Leap line in non leap seconds file %s\n" msgstr "%s: artık saniyeler olmayan %s dosyasında `Leap' satırı\n" -#: timezone/zic.c:904 timezone/zic.c:1325 timezone/zic.c:1350 +#: timezone/zic.c:892 timezone/zic.c:1323 timezone/zic.c:1345 #, c-format msgid "%s: panic: Invalid l_value %d\n" msgstr "%s: panik: sol deÄŸer (l_value) %d geçersiz\n" -#: timezone/zic.c:912 +#: timezone/zic.c:900 #, c-format msgid "%s: Error reading %s\n" msgstr "%s: %s okunurken hata\n" -#: timezone/zic.c:919 +#: timezone/zic.c:907 #, c-format msgid "%s: Error closing %s: %s\n" msgstr "%s: %s kapatılırken hata: %s\n" -#: timezone/zic.c:924 +#: timezone/zic.c:912 msgid "expected continuation line not found" msgstr "gereken süreklilik satırı bulunamadı" -#: timezone/zic.c:968 +#: timezone/zic.c:956 msgid "24:00 not handled by pre-1998 versions of zic" msgstr "zic'in 1998 öncesi sürümlerinde 24:00 elde edilemez" -#: timezone/zic.c:982 +#: timezone/zic.c:970 msgid "wrong number of fields on Rule line" msgstr "`Rule' satırının alanları eksik ya da fazla" -#: timezone/zic.c:986 +#: timezone/zic.c:974 msgid "nameless rule" msgstr "adsız kural" -#: timezone/zic.c:991 +#: timezone/zic.c:979 msgid "invalid saved time" msgstr "kazanılmış zaman geçersiz" -#: timezone/zic.c:1010 +#: timezone/zic.c:1000 msgid "wrong number of fields on Zone line" msgstr "`Zone' satırının alanları eksik ya da fazla" -#: timezone/zic.c:1016 +#: timezone/zic.c:1006 #, c-format msgid "\"Zone %s\" line and -l option are mutually exclusive" msgstr "\"Zone %s\" satırı ve -l seçeneÄŸi çeliÅŸiyor" -#: timezone/zic.c:1024 +#: timezone/zic.c:1014 #, c-format msgid "\"Zone %s\" line and -p option are mutually exclusive" msgstr "\"Zone %s\" satırı ve -p seçeneÄŸi çeliÅŸiyor" -#: timezone/zic.c:1036 +#: timezone/zic.c:1026 #, c-format msgid "duplicate zone name %s (file \"%s\", line %d)" msgstr "dilim ismi %s tekrarlanmış (dosya \"%s\", satır %d)" -#: timezone/zic.c:1052 +#: timezone/zic.c:1042 msgid "wrong number of fields on Zone continuation line" msgstr "`Zone' devam satırının alanları eksik ya da fazla" -#: timezone/zic.c:1092 +#: timezone/zic.c:1082 msgid "invalid UTC offset" msgstr "UTC offset geçersiz" -#: timezone/zic.c:1095 +#: timezone/zic.c:1085 msgid "invalid abbreviation format" msgstr "kısaltma biçemi geçersiz" -#: timezone/zic.c:1122 +#: timezone/zic.c:1114 msgid "Zone continuation line end time is not after end time of previous line" msgstr "`Zone' devamlılık satırının bitiÅŸ zamanı önceki satırın bitiÅŸ zamanından sonra deÄŸil" -#: timezone/zic.c:1150 +#: timezone/zic.c:1142 msgid "wrong number of fields on Leap line" msgstr "`Leap' satırının alanları eksik ya da fazla" -#: timezone/zic.c:1159 +#: timezone/zic.c:1151 msgid "invalid leaping year" msgstr "artık yıl geçersiz" -#: timezone/zic.c:1174 timezone/zic.c:1280 +#: timezone/zic.c:1171 timezone/zic.c:1277 msgid "invalid month name" msgstr "ay ismi geçersiz" -#: timezone/zic.c:1187 timezone/zic.c:1402 timezone/zic.c:1416 +#: timezone/zic.c:1184 timezone/zic.c:1390 timezone/zic.c:1404 msgid "invalid day of month" msgstr "ayın günü geçersiz" -#: timezone/zic.c:1192 +#: timezone/zic.c:1189 msgid "time before zero" msgstr "sıfırdan önceki zaman" -#: timezone/zic.c:1196 +#: timezone/zic.c:1193 msgid "time too small" msgstr "süre çok kısa" -#: timezone/zic.c:1200 +#: timezone/zic.c:1197 msgid "time too large" msgstr "süre çok uzun" -#: timezone/zic.c:1204 timezone/zic.c:1309 +#: timezone/zic.c:1201 timezone/zic.c:1306 msgid "invalid time of day" msgstr "günün tarihi geçersiz" -#: timezone/zic.c:1223 +#: timezone/zic.c:1220 msgid "illegal CORRECTION field on Leap line" msgstr "`Leap' satırında kuraldışı CORRECTION alanı" -#: timezone/zic.c:1228 +#: timezone/zic.c:1225 msgid "illegal Rolling/Stationary field on Leap line" msgstr "`Leap' satırında kuraldışı Rolling/Stationary alanı" -#: timezone/zic.c:1244 +#: timezone/zic.c:1241 msgid "wrong number of fields on Link line" msgstr "`Link' satırının alanları eksik ya da fazla" -#: timezone/zic.c:1248 +#: timezone/zic.c:1245 msgid "blank FROM field on Link line" msgstr "`Link' satırında FROM alanı boÅŸ" -#: timezone/zic.c:1252 +#: timezone/zic.c:1249 msgid "blank TO field on Link line" msgstr "`Link' satırında TO alanı boÅŸ" -#: timezone/zic.c:1329 +#: timezone/zic.c:1327 msgid "invalid starting year" msgstr "baÅŸlangıç yılı geçersiz" -#: timezone/zic.c:1333 -msgid "starting year too low to be represented" -msgstr "baÅŸlangıç yılı gösterilemeyecek kadar küçük" - -#: timezone/zic.c:1335 -msgid "starting year too high to be represented" -msgstr "baÅŸlangıç yılı gösterilemeyecek kadar büyük" - -#: timezone/zic.c:1354 +#: timezone/zic.c:1349 msgid "invalid ending year" msgstr "bitiÅŸ yılı geçersiz" -#: timezone/zic.c:1358 -msgid "ending year too low to be represented" -msgstr "bitiÅŸ yılı gösterilemeyecek kadar küçük" - -#: timezone/zic.c:1360 -msgid "ending year too high to be represented" -msgstr "bitiÅŸ yılı gösterilemeyecek kadar büyük" - -#: timezone/zic.c:1363 +#: timezone/zic.c:1353 msgid "starting year greater than ending year" msgstr "baÅŸlangıç yılı bitiÅŸ yılından büyük" -#: timezone/zic.c:1370 +#: timezone/zic.c:1360 msgid "typed single year" msgstr "türünde tek yıl" -#: timezone/zic.c:1407 +#: timezone/zic.c:1395 msgid "invalid weekday name" msgstr "gün ismi geçersiz" -#: timezone/zic.c:1521 +#: timezone/zic.c:1573 #, c-format msgid "%s: Can't remove %s: %s\n" msgstr "%s: %s silinemiyor: %s\n" -#: timezone/zic.c:1531 +#: timezone/zic.c:1583 #, c-format msgid "%s: Can't create %s: %s\n" msgstr "%s: %s oluÅŸturulamıyor: %s\n" -#: timezone/zic.c:1598 +#: timezone/zic.c:1733 #, c-format msgid "%s: Error writing %s\n" msgstr "%s: %s yazılırken hata oluÅŸtu\n" -#: timezone/zic.c:1789 +#: timezone/zic.c:2025 +msgid "no POSIX environment variable for zone" +msgstr "zaman dilimi için POSIX ortam deÄŸiÅŸkeni yok" + +#: timezone/zic.c:2179 msgid "can't determine time zone abbreviation to use just after until time" msgstr "süreye deÄŸinden hemen sonra kullanılacak zaman dilimi kısaltması saptanamadı" -#: timezone/zic.c:1832 +#: timezone/zic.c:2225 msgid "too many transitions?!" msgstr "çok fazla geçiÅŸ?!" -#: timezone/zic.c:1851 +#: timezone/zic.c:2244 msgid "internal error - addtype called with bad isdst" msgstr "iç hata -- addtype hatalı isdst ile çaÄŸrıldı" -#: timezone/zic.c:1855 +#: timezone/zic.c:2248 msgid "internal error - addtype called with bad ttisstd" msgstr "iç hata -- addtype hatalı ttisstd ile çaÄŸrıldı" -#: timezone/zic.c:1859 +#: timezone/zic.c:2252 msgid "internal error - addtype called with bad ttisgmt" msgstr "iç hata -- addtype hatalı ttisgmt ile çaÄŸrıldı" -#: timezone/zic.c:1878 +#: timezone/zic.c:2271 msgid "too many local time types" msgstr "yerel zaman türleri çok fazla" -#: timezone/zic.c:1906 +#: timezone/zic.c:2299 msgid "too many leap seconds" msgstr "çok fazla artık saniye" -#: timezone/zic.c:1912 +#: timezone/zic.c:2305 msgid "repeated leap second moment" msgstr "tekrarlanan artık saniye anı" -#: timezone/zic.c:1964 +#: timezone/zic.c:2357 msgid "Wild result from command execution" msgstr "Komut icrasından alınan sonuç garip" -#: timezone/zic.c:1965 +#: timezone/zic.c:2358 #, c-format msgid "%s: command was '%s', result was %d\n" msgstr "%s: komut `%s' idi, sonuç %d oldu\n" -#: timezone/zic.c:2062 +#: timezone/zic.c:2456 msgid "Odd number of quotation marks" msgstr "Tırnak iÅŸaretleri tek sayıda" -#: timezone/zic.c:2083 timezone/zic.c:2102 +#: timezone/zic.c:2479 timezone/zic.c:2498 msgid "time overflow" msgstr "zaman taÅŸması" -#: timezone/zic.c:2149 +#: timezone/zic.c:2545 msgid "use of 2/29 in non leap-year" msgstr "artık olmayan yıl içinde 2/29 kullanımı" -#: timezone/zic.c:2184 +#: timezone/zic.c:2580 msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic" msgstr "ayın başına/sonuna giden kural zic'in 2004 öncesi sürümlerinde çalışmaz" -#: timezone/zic.c:2218 +#: timezone/zic.c:2612 msgid "time zone abbreviation lacks alphabetic at start" msgstr "zaman dilimi kısaltması bir harfle baÅŸlamıyor" -#: timezone/zic.c:2220 +#: timezone/zic.c:2614 msgid "time zone abbreviation has more than 3 alphabetics" msgstr "zaman dilimi kısaltmasında 3 harften az harf var" -#: timezone/zic.c:2222 +#: timezone/zic.c:2616 msgid "time zone abbreviation has too many alphabetics" msgstr "zaman dilimi kısaltmasında çok fazla harf var" -#: timezone/zic.c:2232 +#: timezone/zic.c:2626 msgid "time zone abbreviation differs from POSIX standard" msgstr "zaman dilimi kısaltması POSIX standardından farklı" -#: timezone/zic.c:2244 +#: timezone/zic.c:2638 msgid "too many, or too long, time zone abbreviations" msgstr "çok fazla ya da çok uzun zaman dilimi kısaltmaları" -#: timezone/zic.c:2285 +#: timezone/zic.c:2679 #, c-format msgid "%s: Can't create directory %s: %s\n" msgstr "%s: %s dizini oluÅŸturulamıyor: %s\n" -#: timezone/zic.c:2307 +#: timezone/zic.c:2701 #, c-format msgid "%s: %d did not sign extend correctly\n" msgstr "%s: %d ölçüyü tutturamadı\n" - -#~ msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n" -#~ msgstr "" -#~ "Çeviri hatalarını <gnu-tr@belgeler.org> adresine, diÄŸerlerini\n" -#~ "ise `glibcbug' betiÄŸini kullanarak oluÅŸturacağınız hata raporuyla\n" -#~ "<bugs@gnu.org> adresine bildiriniz.\n" - -#~ msgid "Get locale-specific information." -#~ msgstr "Dile özel bilgiler alınır" - -#~ msgid "cheese" -#~ msgstr "mükemmel" - -#~ msgid "First string for testing." -#~ msgstr "Test edilecek ilk dizge." - -#~ msgid "Another string for testing." -#~ msgstr "Test edilecek diÄŸer dizge." - -#~ msgid "Error 0" -#~ msgstr "Hata 0" - -#~ msgid "I/O error" -#~ msgstr "G/Ç hatası" - -#~ msgid "Arg list too long" -#~ msgstr "Arg listesi çok uzun" - -#~ msgid "Bad file number" -#~ msgstr "Dosya numarası hatalı" - -#~ msgid "Not enough space" -#~ msgstr "alan yetersiz" - -#~ msgid "Device busy" -#~ msgstr "Aygıt meÅŸgul" - -#~ msgid "Cross-device link" -#~ msgstr "Çapraz-aygıt bağı" - -#~ msgid "File table overflow" -#~ msgstr "Dosya tablosu taÅŸtı" - -#~ msgid "Argument out of domain" -#~ msgstr "Argüman alan dışı" - -#~ msgid "Result too large" -#~ msgstr "Sonuç çok büyük" - -#~ msgid "Deadlock situation detected/avoided" -#~ msgstr "ÖlüKilit konumu saptandı/engellendi" - -#~ msgid "No record locks available" -#~ msgstr "Ä°ÅŸe yarar kayıt kilitleri yok" - -#~ msgid "Disc quota exceeded" -#~ msgstr "Disk kotası aşıldı" - -#~ msgid "Bad exchange descriptor" -#~ msgstr "DeÄŸiÅŸ tokuÅŸ betimleyici hatalı" - -#~ msgid "Bad request descriptor" -#~ msgstr "Ä°stek betimleyici hatalı" - -#~ msgid "Message tables full" -#~ msgstr "Ä°leti tablosunda yer yok" - -#~ msgid "Anode table overflow" -#~ msgstr "A-düğüm tablosu taÅŸtı" - -#~ msgid "Bad request code" -#~ msgstr "Ä°stek kodu hatalı" - -#~ msgid "File locking deadlock" -#~ msgstr "Dosya kilitlemede ölükilit" - -#~ msgid "Error 58" -#~ msgstr "Hata 58" - -#~ msgid "Error 59" -#~ msgstr "Hata 59" - -#~ msgid "Not a stream device" -#~ msgstr "Veri alışveriÅŸi yapılabilecek bir aygıt deÄŸil" - -#~ msgid "Out of stream resources" -#~ msgstr "Veri akımı özkaynakları yetersiz" - -#~ msgid "Error 72" -#~ msgstr "Hata 72" - -#~ msgid "Error 73" -#~ msgstr "Hata 73" - -#~ msgid "Error 75" -#~ msgstr "Hata 75" - -#~ msgid "Error 76" -#~ msgstr "Hata 76" - -#~ msgid "Not a data message" -#~ msgstr "Bir veri iletisi deÄŸil" - -#~ msgid "Attempting to link in more shared libraries than system limit" -#~ msgstr "Sistem sınırlarından daha fazla sayıdaki paylaşımlı kitaplıkta baÄŸ kurulmaya çalışılıyor" - -#~ msgid "Can not exec a shared library directly" -#~ msgstr "Bir paylaşımlı kitaplık doÄŸrudan icra edilemez" - -#~ msgid "Illegal byte sequence" -#~ msgstr "Bayt serisi kuraldışı" - -#~ msgid "Operation not applicable" -#~ msgstr "Ä°ÅŸlem uygulanabilir deÄŸil" - -#~ msgid "Number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS" -#~ msgstr "Dosya yolu izlenirken saptanan sembolik baÄŸların sayısı MAXSYMLINKS sayısını aşıyor" - -#~ msgid "Error 91" -#~ msgstr "Hata 91" - -#~ msgid "Error 92" -#~ msgstr "Hata 92" - -#~ msgid "Option not supported by protocol" -#~ msgstr "Protokol iÅŸlemi desteklemedi" - -#~ msgid "Error 100" -#~ msgstr "Hata 100" - -#~ msgid "Error 101" -#~ msgstr "Hata 101" - -#~ msgid "Error 102" -#~ msgstr "Hata 102" - -#~ msgid "Error 103" -#~ msgstr "Hata 103" - -#~ msgid "Error 104" -#~ msgstr "Hata 104" - -#~ msgid "Error 105" -#~ msgstr "Hata 105" - -#~ msgid "Error 106" -#~ msgstr "Hata 106" - -#~ msgid "Error 107" -#~ msgstr "Hata 107" - -#~ msgid "Error 108" -#~ msgstr "Hata 108" - -#~ msgid "Error 109" -#~ msgstr "Hata 109" - -#~ msgid "Error 110" -#~ msgstr "Hata 110" - -#~ msgid "Error 111" -#~ msgstr "Hata 111" - -#~ msgid "Error 112" -#~ msgstr "Hata 112" - -#~ msgid "Error 113" -#~ msgstr "Hata 113" - -#~ msgid "Error 114" -#~ msgstr "Hata 114" - -#~ msgid "Error 115" -#~ msgstr "Hata 115" - -#~ msgid "Error 116" -#~ msgstr "Hata 116" - -#~ msgid "Error 117" -#~ msgstr "Hata 117" - -#~ msgid "Error 118" -#~ msgstr "Hata 118" - -#~ msgid "Error 119" -#~ msgstr "Hata 119" - -#~ msgid "Operation not supported on transport endpoint" -#~ msgstr "Nakil hattının diÄŸer ucunda iÅŸlem desteklenmedi" - -#~ msgid "Address family not supported by protocol family" -#~ msgstr "Adres ailesi protokol ailesi tarafından desteklenmiyor" - -#~ msgid "Network dropped connection because of reset" -#~ msgstr "Yeniden baÅŸlatma nedeniyle aÄŸ baÄŸlantısı kesildi" - -#~ msgid "Error 136" -#~ msgstr "Hata 136" - -#~ msgid "Not available" -#~ msgstr "Ä°ÅŸe yaramaz" - -#~ msgid "Is a name file" -#~ msgstr "Bir \"name\" dosyası" - -#~ msgid "Reserved for future use" -#~ msgstr "Ä°lerde kullanmak üzere ayrıldı" - -#~ msgid "Error 142" -#~ msgstr "Hata 142" - -#~ msgid "Cannot send after socket shutdown" -#~ msgstr "Soket kapandıktan sonra yollanamaz" - -#~ msgid "%s: Can't unlink %s: %s\n" -#~ msgstr "%s: %s bağı kaldırılamıyor: %s\n" - -#~ msgid "no day in month matches rule" -#~ msgstr "ay içinde kurala uyan gün yok" - -#~ msgid "%s: line %d: expected service, found `%s'\n" -#~ msgstr "%s: satır %d: `%s' bir servis olmalıydı\n" - -#~ msgid "%s: line %d: cannot specify more than %d services" -#~ msgstr "%s: satır %d: en çok %d servis belirtilebilir" - -#~ msgid "%s: line %d: list delimiter not followed by keyword" -#~ msgstr "%s: satır %d: liste ayracından sonra bir anahtar sözcük gelmemeli" - -#~ msgid "getent - get entries from administrative database." -#~ msgstr "getent - yönetim veritabanından girdiler alınıyor." - -#~ msgid "get_myaddress: ioctl (get interface configuration)" -#~ msgstr "get_myaddress: ioctl (arayüz yapılandırması alır)" - -#~ msgid "__get_myaddress: ioctl (get interface configuration)" -#~ msgstr "__get_myaddress: ioctl (arayüz yapılandırmasını alır)" - -#~ msgid "broadcast: ioctl (get interface configuration)" -#~ msgstr "broadcast: ioctl (arayüz yapılandırmasını alır)" - -#~ msgid "broadcast: ioctl (get interface flags)" -#~ msgstr "broadcast: ioctl (arayüz flamalarını alır)" - -#~ msgid "YPBINDPROC_DOMAIN: %s\n" -#~ msgstr "YPBINDPROC_DOMAIN: %s\n" - -#~ msgid "while allocating hash table entry" -#~ msgstr "arama (hash) tablosu girdisi ayrılırken" - -#~ msgid "Cannot run nscd in secure mode as unprivileged user" -#~ msgstr "nscd güvenli kipte yetkisiz kullanıcı olarak çalıştırılamaz" - -#~ msgid "while allocating cache: %s" -#~ msgstr "arabellek girdisi ayrılırken: %s" - -#~ msgid "while accepting connection: %s" -#~ msgstr "baÄŸlantı kabul edilirken: %s" - -#~ msgid "while allocating key copy" -#~ msgstr "tuÅŸ kopyası ayrılırken" - -#~ msgid "while allocating cache entry" -#~ msgstr "arabellek girdisi ayrılırken" - -#~ msgid "Haven't found \"%d\" in group cache!" -#~ msgstr "\"%d\" grup arabelleÄŸinde yok!" - -#~ msgid "%15lu number of times clients had to wait\n" -#~ msgstr "%15lu kere istemciler beklemeye alındı\n" - -#~ msgid " no" -#~ msgstr " hayır" - -#~ msgid " yes" -#~ msgstr " evet" - -#~ msgid "Haven't found \"%d\" in password cache!" -#~ msgstr "\"%d\" parola arabelleÄŸinde yok!" - -#~ msgid "%s: profiler out of memory shadowing PLTREL of %s\n" -#~ msgstr "%s: %s PLTREL gölgelenirken profiler bellekdışı\n" - -#~ msgid "Read and display shared object profiling data" -#~ msgstr "Paylaşımlı nesne ÅŸekillendirici verisini okur ve gösterir" - -#~ msgid "shared object cannot be dlopen()ed: static TLS memory too small" -#~ msgstr "paylaşımlı nesne dlopen()'lanamıyor: statik TLS belleÄŸi çok küçük" - -#~ msgid "\t\t\t\t\t\t\t %s: value for field `%s' must be in range %d...%d" -#~ msgstr "\t\t\t\t\t\t\t %s: `%s' alanındaki deÄŸer %d ...%d aralığında olmalı" - -#~ msgid "Failed to look up user '%s' to run server as" -#~ msgstr "Sunucuyu adıyla çalıştırmak için '%s' kullanıcısına bakılırken hata oluÅŸtu" - -#~ msgid "no filename for profiling data given and shared object `%s' has no soname" -#~ msgstr "ÅŸekillendirici veri için dosya ismi verilmemiÅŸ ve `%s' paylaşımlı nesnesi için bir kitaplık dosya ismi yok" diff --git a/libc/po/zh_CN.po b/libc/po/zh_CN.po index 30f272207..a0c6150b6 100644 --- a/libc/po/zh_CN.po +++ b/libc/po/zh_CN.po @@ -1,334 +1,1248 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) 2002 Free Software Foundation, Inc. +# Copyright (C) 2002, 2007 Free Software Foundation, Inc. +# LI Daobing <lidaobing@gmail.com>, 2007. # Wang Li <charles@linux.net.cn>, 2002. # msgid "" msgstr "" -"Project-Id-Version: libc 2.3.2\n" -"POT-Creation-Date: 2003-02-22 15:34-0800\n" -"PO-Revision-Date: 2003-06-06 15:10+0800\n" -"Last-Translator: Wang Li <charles@linux.net.cn>\n" -"Language-Team: Chinese (simplified) <i18n-translation@lists.linux.net.cn>\n" +"Project-Id-Version: libc 2.6.1\n" +"POT-Creation-Date: 2007-08-04 11:37+0200\n" +"PO-Revision-Date: 2007-08-05 16:31+0800\n" +"Last-Translator: LI Daobing <lidaobing@gmail.com>\n" +"Language-Team: Chinese (simplified) <translation-team-zh-cn@lists.sourceforge.net>\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=gb2312\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: sysdeps/generic/siglist.h:29 stdio-common/../sysdeps/unix/siglist.c:27 -msgid "Hangup" -msgstr "¹ÒÆð" +#: argp/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s:å‚æ•° ARGP_HELP_FMT 需è¦ä¸€ä¸ªå€¼" -#: sysdeps/generic/siglist.h:30 stdio-common/../sysdeps/unix/siglist.c:28 -msgid "Interrupt" -msgstr "ÖжÏ" +#: argp/argp-help.c:238 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s:未知的 ARGP_HELP_FMT å‚æ•°" -#: sysdeps/generic/siglist.h:31 stdio-common/../sysdeps/unix/siglist.c:29 -msgid "Quit" -msgstr "Í˳ö" +#: argp/argp-help.c:251 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "ARGP_HELP_FMT ä¸æœ‰åžƒåœ¾: %s" -#: sysdeps/generic/siglist.h:32 stdio-common/../sysdeps/unix/siglist.c:30 -msgid "Illegal instruction" -msgstr "·Ç·¨Ö¸Áî" +#: argp/argp-help.c:1215 +msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." +msgstr "长选项的强制或å¯é€‰å‚数对对应的çŸé€‰é¡¹ä¹Ÿæ˜¯å¼ºåˆ¶æˆ–å¯é€‰çš„。" -#: sysdeps/generic/siglist.h:33 stdio-common/../sysdeps/unix/siglist.c:31 -msgid "Trace/breakpoint trap" +#: argp/argp-help.c:1601 +msgid "Usage:" +msgstr "用法:" + +#: argp/argp-help.c:1605 +msgid " or: " +msgstr " 或:" + +#: argp/argp-help.c:1617 +msgid " [OPTION...]" +msgstr " [选项...]" + +#: argp/argp-help.c:1644 +#, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "试用“%s --helpâ€æˆ–“%s --usageâ€ä»¥èŽ·å–更多信æ¯ã€‚\n" + +#: argp/argp-help.c:1672 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "将错误报告给 %s。\n" + +#: argp/argp-parse.c:102 +msgid "Give this help list" +msgstr "给出该系统求助列表" + +#: argp/argp-parse.c:103 +msgid "Give a short usage message" +msgstr "给出简è¦çš„用法信æ¯" + +#: argp/argp-parse.c:104 +msgid "Set the program name" +msgstr "设定程åºå" + +#: argp/argp-parse.c:106 +msgid "Hang for SECS seconds (default 3600)" +msgstr "挂起 SECS 秒 (默认 3600)" + +#: argp/argp-parse.c:167 +msgid "Print program version" +msgstr "打å°ç¨‹åºç‰ˆæœ¬å·" + +#: argp/argp-parse.c:183 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(程åºé”™è¯¯) ä¸çŸ¥é“版本å·ï¼ï¼Ÿ" + +#: argp/argp-parse.c:623 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s:过多的选项\n" + +#: argp/argp-parse.c:766 +msgid "(PROGRAM ERROR) Option should have been recognized!?" +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:57 +#, c-format +msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" +msgstr "%s%s%s:%u:%s%sæ–言“%sâ€å¤±è´¥ã€‚\n" + +#: catgets/gencat.c:110 catgets/gencat.c:114 nscd/nscd.c:97 nss/makedb.c:61 +msgid "NAME" +msgstr "å称" + +#: catgets/gencat.c:111 +msgid "Create C header file NAME containing symbol definitions" +msgstr "创建å«æœ‰ç¬¦å·å®šä¹‰çš„给定å称的 C 头文件" + +#: catgets/gencat.c:113 +msgid "Do not use existing catalog, force new output file" +msgstr "ä¸ä½¿ç”¨çŽ°æœ‰çš„分类,强制创建新输出文件" + +#: catgets/gencat.c:114 nss/makedb.c:61 +msgid "Write output to file NAME" +msgstr "将输出写入到指定文件ä¸" + +#: catgets/gencat.c:119 +msgid "" +"Generate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" +"is -, output is written to standard output.\n" msgstr "" -#: sysdeps/generic/siglist.h:34 -msgid "Aborted" -msgstr "ÒÑ·ÅÆú" +#: catgets/gencat.c:124 +msgid "" +"-o OUTPUT-FILE [INPUT-FILE]...\n" +"[OUTPUT-FILE [INPUT-FILE]...]" +msgstr "" +"-o 输出文件 [输入文件]...\n" +"[输出文件 [输入文件]...]" -#: sysdeps/generic/siglist.h:35 stdio-common/../sysdeps/unix/siglist.c:34 -msgid "Floating point exception" -msgstr "¸¡µãÊýÀýÍâ" +#: catgets/gencat.c:232 debug/pcprofiledump.c:199 iconv/iconv_prog.c:411 +#: iconv/iconvconfig.c:380 locale/programs/localedef.c:371 +#: login/programs/pt_chown.c:88 malloc/memusagestat.c:526 nss/makedb.c:231 +msgid "" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" -#: sysdeps/generic/siglist.h:36 stdio-common/../sysdeps/unix/siglist.c:35 -msgid "Killed" -msgstr "ÒÑɱËÀ" +#: catgets/gencat.c:246 debug/xtrace.sh:64 elf/ldconfig.c:287 +#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:426 +#: iconv/iconvconfig.c:395 locale/programs/locale.c:275 +#: locale/programs/localedef.c:387 login/programs/pt_chown.c:59 +#: malloc/memusage.sh:71 nscd/nscd.c:406 nss/getent.c:83 nss/makedb.c:245 +#: posix/getconf.c:1012 +#, 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 "" -#: sysdeps/generic/siglist.h:37 stdio-common/../sysdeps/unix/siglist.c:36 -msgid "Bus error" -msgstr "×ÜÏß´íÎó" +#: catgets/gencat.c:251 debug/xtrace.sh:68 elf/ldconfig.c:292 elf/sprof.c:361 +#: iconv/iconv_prog.c:431 iconv/iconvconfig.c:400 locale/programs/locale.c:280 +#: locale/programs/localedef.c:392 malloc/memusage.sh:75 nscd/nscd.c:411 +#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1017 +#, c-format +msgid "Written by %s.\n" +msgstr "ç”± %s 编写。\n" -#: sysdeps/generic/siglist.h:38 stdio-common/../sysdeps/unix/siglist.c:37 -msgid "Segmentation fault" -msgstr "¶Î´íÎó" +#: catgets/gencat.c:282 +msgid "*standard input*" +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 "¶Ï¿ªµÄ¹ÜµÀ" +#: catgets/gencat.c:288 iconv/iconv_charmap.c:158 iconv/iconv_prog.c:298 +#: nss/makedb.c:170 +#, c-format +msgid "cannot open input file `%s'" +msgstr "æ— æ³•æ‰“å¼€è¾“å…¥æ–‡ä»¶â€œ%sâ€" -#: sysdeps/generic/siglist.h:40 stdio-common/../sysdeps/unix/siglist.c:40 -msgid "Alarm clock" -msgstr "ÄÖÖÓ" +#: catgets/gencat.c:417 catgets/gencat.c:494 +msgid "illegal set number" +msgstr "éžæ³•çš„集åˆç¼–å·" -#: sysdeps/generic/siglist.h:41 stdio-common/../sysdeps/unix/siglist.c:41 -msgid "Terminated" -msgstr "ÒÑÖÕÖ¹" +#: catgets/gencat.c:444 +msgid "duplicate set definition" +msgstr "é‡å¤çš„集åˆå®šä¹‰" -#: sysdeps/generic/siglist.h:42 stdio-common/../sysdeps/unix/siglist.c:42 -msgid "Urgent I/O condition" +#: 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 "" -#: sysdeps/generic/siglist.h:43 stdio-common/../sysdeps/unix/siglist.c:43 -msgid "Stopped (signal)" -msgstr "Í£Ö¹ (ÐźÅ)" +#: catgets/gencat.c:992 catgets/gencat.c:1033 nss/makedb.c:183 +#, c-format +msgid "cannot open output file `%s'" +msgstr "æ— æ³•æ‰“å¼€è¾“å‡ºæ–‡ä»¶â€œ%sâ€" -#: sysdeps/generic/siglist.h:44 stdio-common/../sysdeps/unix/siglist.c:44 -msgid "Stopped" -msgstr "Í£Ö¹" +#: catgets/gencat.c:1195 locale/programs/linereader.c:560 +msgid "invalid escape sequence" +msgstr "æ— æ•ˆçš„è½¬ä¹‰åºåˆ—" -#: sysdeps/generic/siglist.h:45 stdio-common/../sysdeps/unix/siglist.c:45 -msgid "Continued" -msgstr "¼ÌÐø" +#: catgets/gencat.c:1217 +msgid "unterminated message" +msgstr "未终æ¢çš„消æ¯" -#: sysdeps/generic/siglist.h:46 stdio-common/../sysdeps/unix/siglist.c:46 -msgid "Child exited" -msgstr "×Ó½ø³ÌÒÑÍ˳ö" +#: catgets/gencat.c:1241 +#, c-format +msgid "while opening old catalog file" +msgstr "在打开旧分类文件时" -#: sysdeps/generic/siglist.h:47 stdio-common/../sysdeps/unix/siglist.c:47 -msgid "Stopped (tty input)" -msgstr "Í£Ö¹ (tty ÊäÈë)" +#: catgets/gencat.c:1332 +#, c-format +msgid "conversion modules not available" +msgstr "转æ¢æ¨¡å—ä¸å¯ç”¨" -#: sysdeps/generic/siglist.h:48 stdio-common/../sysdeps/unix/siglist.c:48 -msgid "Stopped (tty output)" -msgstr "Í£Ö¹ (tty Êä³ö)" +#: catgets/gencat.c:1358 +#, c-format +msgid "cannot determine escape character" +msgstr "æ— æ³•ç¡®å®šè½¬ä¹‰å—符" -#: sysdeps/generic/siglist.h:49 stdio-common/../sysdeps/unix/siglist.c:49 -msgid "I/O possible" +#: debug/pcprofiledump.c:52 +msgid "Don't buffer output" +msgstr "ä¸è¦å¯¹è¾“出进行缓冲" + +#: debug/pcprofiledump.c:57 +msgid "Dump information generated by PC profiling." msgstr "" -#: sysdeps/generic/siglist.h:50 stdio-common/../sysdeps/unix/siglist.c:50 -msgid "CPU time limit exceeded" -msgstr "³¬³ö CPU ʱÏÞ" +#: debug/pcprofiledump.c:60 +msgid "[FILE]" +msgstr "[文件]" -#: sysdeps/generic/siglist.h:51 stdio-common/../sysdeps/unix/siglist.c:51 -msgid "File size limit exceeded" -msgstr "Îļþ´óС³¬³öÏÞÖÆ" +#: debug/pcprofiledump.c:100 +#, c-format +msgid "cannot open input file" +msgstr "æ— æ³•æ‰“å¼€è¾“å…¥æ–‡ä»¶" -#: sysdeps/generic/siglist.h:52 stdio-common/../sysdeps/unix/siglist.c:52 -msgid "Virtual timer expired" -msgstr "ÐéÄâ¼ÆʱÆ÷³¬Ê±" +#: debug/pcprofiledump.c:106 +#, c-format +msgid "cannot read header" +msgstr "æ— æ³•è¯»å…¥å¤´" -#: sysdeps/generic/siglist.h:53 stdio-common/../sysdeps/unix/siglist.c:53 -msgid "Profiling timer expired" +#: debug/pcprofiledump.c:170 +#, c-format +msgid "invalid pointer size" +msgstr "æ— æ•ˆçš„æŒ‡é’ˆå¤§å°" + +#: debug/xtrace.sh:27 debug/xtrace.sh:45 +msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n" msgstr "" -#: sysdeps/generic/siglist.h:54 stdio-common/../sysdeps/unix/siglist.c:54 -msgid "Window changed" +#: debug/xtrace.sh:33 +msgid "Try \\`xtrace --help' for more information.\\n" +msgstr "试用“xtrace --helpâ€ä»¥èŽ·å–更多信æ¯ã€‚\\n" + +#: debug/xtrace.sh:39 +msgid "xtrace: option \\`$1' requires an argument.\\n" +msgstr "xtrace: 选项“$1â€éœ€è¦ä¸€ä¸ªå‚æ•°\\n" + +#: debug/xtrace.sh:46 +msgid "" +"Trace execution of program by printing currently executed function.\n" +"\n" +" --data=FILE Don't run the program, just print the data from FILE.\n" +"\n" +" -?,--help Print this help and exit\n" +" --usage Give a short usage message\n" +" -V,--version Print version information and exit\n" +"\n" +"Mandatory arguments to long options are also mandatory for any corresponding\n" +"short options.\n" +"\n" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\\n" msgstr "" -#: sysdeps/generic/siglist.h:55 stdio-common/../sysdeps/unix/siglist.c:56 -msgid "User defined signal 1" -msgstr "Óû§¶¨ÒåÐźŠ1" +#: debug/xtrace.sh:125 +msgid "xtrace: unrecognized option \\`$1'\\n" +msgstr "xtraceï¼šæ— æ³•è¯†åˆ«çš„é€‰é¡¹â€œ$1â€\\n" -#: sysdeps/generic/siglist.h:56 stdio-common/../sysdeps/unix/siglist.c:57 -msgid "User defined signal 2" -msgstr "Óû§¶¨ÒåÐźŠ2" +#: debug/xtrace.sh:138 +msgid "No program name given\\n" +msgstr "未指定程åºå" -#: sysdeps/generic/siglist.h:60 stdio-common/../sysdeps/unix/siglist.c:33 -msgid "EMT trap" +#: debug/xtrace.sh:146 +#, sh-format +msgid "executable \\`$program' not found\\n" msgstr "" -#: sysdeps/generic/siglist.h:63 stdio-common/../sysdeps/unix/siglist.c:38 -msgid "Bad system call" -msgstr "´íÎóµÄϵͳµ÷ÓÃ" +#: debug/xtrace.sh:150 +#, sh-format +msgid "\\`$program' is no executable\\n" +msgstr "“$programâ€ä¸å¯æ‰§è¡Œ\\n" -#: sysdeps/generic/siglist.h:66 -msgid "Stack fault" -msgstr "ջʧЧ" +#: dlfcn/dlinfo.c:64 +msgid "RTLD_SELF used in code not dynamically loaded" +msgstr "" -#: sysdeps/generic/siglist.h:69 -msgid "Information request" -msgstr "ÐÅÏ¢ÇëÇó" +#: dlfcn/dlinfo.c:73 +msgid "unsupported dlinfo request" +msgstr "ä¸æ”¯æŒçš„ dlinfo 请求" -#: sysdeps/generic/siglist.h:71 -msgid "Power failure" -msgstr "µçԴʧЧ" +#: dlfcn/dlmopen.c:64 +msgid "invalid namespace" +msgstr "æ— æ•ˆçš„åå—空间" -#: sysdeps/generic/siglist.h:74 stdio-common/../sysdeps/unix/siglist.c:55 -msgid "Resource lost" -msgstr "×ÊÔ´¶ªÊ§" +#: dlfcn/dlmopen.c:69 +msgid "invalid mode" +msgstr "æ— æ•ˆçš„æ¨¡å¼" -#: sysdeps/mach/hurd/mips/dl-machine.c:68 -#: string/../sysdeps/mach/_strerror.c:57 -msgid "Error in unknown error system: " -msgstr "δ֪µÄ´íÎóϵͳÖгö´í£º" +#: dlfcn/dlopen.c:64 +msgid "invalid mode parameter" +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 "δ֪µÄ´íÎó " +#: elf/cache.c:68 +msgid "unknown" +msgstr "未知" -#: sysdeps/unix/sysv/linux/lddlibc4.c:64 +#: elf/cache.c:111 +msgid "Unknown OS" +msgstr "未知的æ“作系统" + +#: elf/cache.c:116 #, c-format -msgid "cannot open `%s'" -msgstr "ÎÞ·¨´ò¿ª¡°%s¡±" +msgid ", OS ABI: %s %d.%d.%d" +msgstr ", OS ABI: %s %d.%d.%d" -#: sysdeps/unix/sysv/linux/lddlibc4.c:68 +#: elf/cache.c:142 elf/ldconfig.c:1236 #, c-format -msgid "cannot read header from `%s'" -msgstr "ÎÞ·¨´Ó¡°%s¡±ÖжÁÈëÍ·" +msgid "Can't open cache file %s\n" +msgstr "æ— æ³•æ‰“å¼€ç¼“å†²æ–‡ä»¶ %s\n" -#: iconv/iconv_charmap.c:159 iconv/iconv_prog.c:293 catgets/gencat.c:288 +#: elf/cache.c:154 #, c-format -msgid "cannot open input file `%s'" -msgstr "ÎÞ·¨´ò¿ªÊäÈëÎļþ¡°%s¡±" +msgid "mmap of cache file failed.\n" +msgstr "缓冲文件的 mmap 失败。\n" + +#: elf/cache.c:158 elf/cache.c:168 +#, c-format +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 "在缓冲区“%2$sâ€ä¸æ‰¾åˆ° %1$d 个库\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:435 elf/cache.c:439 elf/cache.c:443 +#, c-format +msgid "Writing of cache data failed" +msgstr "写缓冲数æ®å¤±è´¥" + +#: elf/cache.c:450 +#, c-format +msgid "Changing access rights of %s to %#o failed" +msgstr "å°† %s 的访问æƒé™æ”¹å˜ä¸º %#o 失败" + +#: elf/cache.c:455 +#, c-format +msgid "Renaming of %s to %s failed" +msgstr "å°† %s 改å为 %s 失败" + +#: elf/dl-close.c:378 elf/dl-open.c:460 +msgid "cannot create scope list" +msgstr "æ— æ³•åˆ›å»ºèŒƒå›´åˆ—è¡¨" + +#: elf/dl-close.c:724 +msgid "shared object not open" +msgstr "共享库未打开" + +#: elf/dl-deps.c:112 +msgid "DST not allowed in SUID/SGID programs" +msgstr "在 SUID/SGID 程åºä¸ä¸å…许 DST" + +#: elf/dl-deps.c:125 elf/dl-open.c:282 +msgid "empty dynamic string token substitution" +msgstr "空动æ€å—符串替æ¢" + +#: elf/dl-deps.c:131 +#, c-format +msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n" +msgstr "" + +#: elf/dl-deps.c:472 +msgid "cannot allocate dependency list" +msgstr "æ— æ³•åˆ†é…倚赖列表" + +#: elf/dl-deps.c:505 elf/dl-deps.c:560 +msgid "cannot allocate symbol search list" +msgstr "æ— æ³•åˆ†é…符å·æœç´¢åˆ—表" + +#: elf/dl-deps.c:545 +msgid "Filters not supported with LD_TRACE_PRELINKING" +msgstr "" + +#: elf/dl-error.c:77 +msgid "DYNAMIC LINKER BUG!!!" +msgstr "动æ€é“¾æŽ¥å™¨ BUG!!!" + +#: elf/dl-error.c:124 +msgid "error while loading shared libraries" +msgstr "装入共享库时出错" + +#: elf/dl-fptr.c:88 +msgid "cannot map pages for fdesc table" +msgstr "æ— æ³•ä¸º fdesc è¡¨æ˜ å°„é¡µ" + +#: elf/dl-fptr.c:192 +msgid "cannot map pages for fptr table" +msgstr "æ— æ³•ä¸º fptr è¡¨æ˜ å°„é¡µ" + +#: elf/dl-fptr.c:221 +msgid "internal error: symidx out of range of fptr table" +msgstr "内部错误: symidx 超出 fptr 表的范围" + +#: elf/dl-load.c:372 +msgid "cannot allocate name record" +msgstr "æ— æ³•åˆ†é…å记录" + +#: elf/dl-load.c:474 elf/dl-load.c:582 elf/dl-load.c:667 elf/dl-load.c:780 +msgid "cannot create cache for search path" +msgstr "æ— æ³•åˆ›å»ºæœç´¢è·¯å¾„缓冲器" + +#: elf/dl-load.c:565 +msgid "cannot create RUNPATH/RPATH copy" +msgstr "æ— æ³•åˆ›å»º RUNPATH/RPATH 的副本" + +#: elf/dl-load.c:653 +msgid "cannot create search path array" +msgstr "æ— æ³•åˆ›å»ºæœç´¢è·¯å¾„数组" + +#: elf/dl-load.c:864 +msgid "cannot stat shared object" +msgstr "æ— æ³•å¯¹å…±äº«ç›®æ ‡è¿›è¡Œ stat æ“作" + +#: elf/dl-load.c:934 +msgid "cannot open zero fill device" +msgstr "æ— æ³•æ‰“å¼€é›¶å¡«å……è®¾å¤‡" + +#: elf/dl-load.c:979 elf/dl-load.c:2224 +msgid "cannot create shared object descriptor" +msgstr "æ— æ³•åˆ›å»ºå…±äº«å¯¹è±¡æ述符" + +#: elf/dl-load.c:998 elf/dl-load.c:1656 elf/dl-load.c:1748 +msgid "cannot read file data" +msgstr "æ— æ³•è¯»å…¥æ–‡ä»¶æ•°æ®" + +#: elf/dl-load.c:1042 +msgid "ELF load command alignment not page-aligned" +msgstr "ELF åŠ è½½å‘½ä»¤å¯¹é½ä¸æ˜¯æŒ‰é¡µå¯¹é½çš„" + +#: elf/dl-load.c:1049 +msgid "ELF load command address/offset not properly aligned" +msgstr "ELF 装入命令的地å€/å移é‡æ²¡æœ‰æ£ç¡®åœ°å¯¹é½" + +#: elf/dl-load.c:1132 +msgid "cannot allocate TLS data structures for initial thread" +msgstr "" + +#: elf/dl-load.c:1155 +msgid "cannot handle TLS data" +msgstr "æ— æ³•å¤„ç† TLS æ•°æ®" + +#: elf/dl-load.c:1174 +msgid "object file has no loadable segments" +msgstr "ç›®æ ‡æ–‡ä»¶æ²¡æœ‰å¯åŠ 载段" + +#: elf/dl-load.c:1210 +msgid "failed to map segment from shared object" +msgstr "æ— æ³•ä»Žå…±äº«ç›®æ ‡ä¸æ˜ 射段" + +#: elf/dl-load.c:1236 +msgid "cannot dynamically load executable" +msgstr "æ— æ³•åŠ¨æ€è£…å…¥å¯æ‰§è¡Œæ–‡ä»¶" + +#: elf/dl-load.c:1298 +msgid "cannot change memory protections" +msgstr "æ— æ³•æ”¹å˜å†…å˜ä¿æŠ¤" + +#: elf/dl-load.c:1317 +msgid "cannot map zero-fill pages" +msgstr "æ— æ³•æ˜ å°„ç”¨é›¶å¡«å……çš„é¡µ" + +#: elf/dl-load.c:1331 +msgid "object file has no dynamic section" +msgstr "ç›®æ ‡æ–‡ä»¶æ²¡æœ‰åŠ¨æ€èŠ‚" + +#: elf/dl-load.c:1354 +msgid "shared object cannot be dlopen()ed" +msgstr "æ— æ³•ç”¨ dlopen() 打开共享库" + +#: elf/dl-load.c:1367 +msgid "cannot allocate memory for program header" +msgstr "æ— æ³•ä¸ºç¨‹åºå¤´åˆ†é…内å˜" + +#: elf/dl-load.c:1384 elf/dl-open.c:218 +msgid "invalid caller" +msgstr "æ— æ•ˆçš„è°ƒç”¨è€…" + +#: elf/dl-load.c:1423 +msgid "cannot enable executable stack as shared object requires" +msgstr "æ— æ³•å¯ç”¨å…±äº«ç›®æ ‡éœ€è¦çš„æ‰§è¡Œæ ˆ" + +#: elf/dl-load.c:1436 +msgid "cannot close file descriptor" +msgstr "æ— æ³•å…³é—文件æ述符" + +#: elf/dl-load.c:1478 +msgid "cannot create searchlist" +msgstr "æ— æ³•åˆ›å»ºæœç´¢åˆ—表" + +#: elf/dl-load.c:1656 +msgid "file too short" +msgstr "文件过çŸ" + +#: elf/dl-load.c:1685 +msgid "invalid ELF header" +msgstr "æ— æ•ˆçš„ ELF 头" + +#: elf/dl-load.c:1697 +msgid "ELF file data encoding not big-endian" +msgstr "ELF 文件数æ®ç¼–ç ä¸æ˜¯ big-endian" + +#: elf/dl-load.c:1699 +msgid "ELF file data encoding not little-endian" +msgstr "ELF 文件数æ®ç¼–ç ä¸æ˜¯ little-endian" + +#: elf/dl-load.c:1703 +msgid "ELF file version ident does not match current one" +msgstr "" + +#: elf/dl-load.c:1707 +msgid "ELF file OS ABI invalid" +msgstr "ELF 文件 OS ABI æ— æ•ˆ" + +#: elf/dl-load.c:1709 +msgid "ELF file ABI version invalid" +msgstr "ELF 文件 ABI ç‰ˆæœ¬æ— æ•ˆ" + +#: elf/dl-load.c:1712 +msgid "internal error" +msgstr "内部错误" + +#: elf/dl-load.c:1719 +msgid "ELF file version does not match current one" +msgstr "ELF 文件版本与当å‰ç‰ˆæœ¬ä¸åŒ¹é…" + +#: elf/dl-load.c:1727 +msgid "only ET_DYN and ET_EXEC can be loaded" +msgstr "" + +#: elf/dl-load.c:1733 +msgid "ELF file's phentsize not the expected size" +msgstr "" + +#: elf/dl-load.c:2240 +msgid "wrong ELF class: ELFCLASS64" +msgstr "错误 ELF ç±»: ELFCLASS64" + +#: elf/dl-load.c:2241 +msgid "wrong ELF class: ELFCLASS32" +msgstr "错误 ELF ç±»: ELFCLASS32" + +#: elf/dl-load.c:2244 +msgid "cannot open shared object file" +msgstr "æ— æ³•æ‰“å¼€å…±äº«å¯¹è±¡æ–‡ä»¶" + +#: elf/dl-lookup.c:261 +msgid "relocation error" +msgstr "é‡å®šä½é”™è¯¯" + +#: elf/dl-lookup.c:289 +msgid "symbol lookup error" +msgstr "符å·æŸ¥è¯¢é”™è¯¯" + +#: elf/dl-open.c:114 +msgid "cannot extend global scope" +msgstr "æ— æ³•æ‰©å±•å…¨å±€èŒƒå›´" + +#: elf/dl-open.c:512 +msgid "TLS generation counter wrapped! Please report this." +msgstr "" + +#: elf/dl-open.c:549 +msgid "invalid mode for dlopen()" +msgstr "æ— æ•ˆçš„ dlopen() 模å¼" + +#: elf/dl-open.c:566 +msgid "no more namespaces available for dlmopen()" +msgstr "" + +#: elf/dl-open.c:579 +msgid "invalid target namespace in dlmopen()" +msgstr "dlmopen() ä¸æ— æ•ˆçš„ç›®æ ‡åå—空间" + +#: elf/dl-reloc.c:54 +msgid "cannot allocate memory in static TLS block" +msgstr "æ— æ³•åœ¨é™æ€ TLS å—ä¸åˆ†é…内å˜" + +#: elf/dl-reloc.c:196 +msgid "cannot make segment writable for relocation" +msgstr "" + +#: elf/dl-reloc.c:277 +#, c-format +msgid "%s: no PLTREL found in object %s\n" +msgstr "" + +#: elf/dl-reloc.c:288 +#, c-format +msgid "%s: out of memory to store relocation results for %s\n" +msgstr "" + +#: elf/dl-reloc.c:304 +msgid "cannot restore segment prot after reloc" +msgstr "é‡å®šä½åŽæ— 法æ¢å¤æ®µ prot" + +#: elf/dl-reloc.c:329 +msgid "cannot apply additional memory protection after relocation" +msgstr "æ— æ³•åœ¨é‡å®šä½åŽåº”用é¢å¤–的内å˜ä¿æŠ¤" + +#: elf/dl-sym.c:161 +msgid "RTLD_NEXT used in code not dynamically loaded" +msgstr "" + +#: elf/dl-sysdep.c:474 elf/dl-sysdep.c:486 +msgid "cannot create capability list" +msgstr "æ— æ³•åˆ›å»ºåŠŸèƒ½åˆ—è¡¨" + +#: elf/dl-tls.c:825 +msgid "cannot create TLS data structures" +msgstr "æ— æ³•åˆ›å»º TLS æ•°æ®ç»“æž„" + +#: elf/dl-version.c:303 +msgid "cannot allocate version reference table" +msgstr "æ— æ³•åˆ†é…ç‰ˆæœ¬å¼•ç”¨è¡¨æ ¼" + +#: elf/ldconfig.c:135 +msgid "Print cache" +msgstr "打å°ç¼“冲区" + +#: elf/ldconfig.c:136 +msgid "Generate verbose messages" +msgstr "生æˆè¯¦ç»†æ¶ˆæ¯" + +#: elf/ldconfig.c:137 +msgid "Don't build cache" +msgstr "ä¸è¦åˆ›å»ºç¼“冲区" + +#: elf/ldconfig.c:138 +msgid "Don't generate links" +msgstr "ä¸è¦ç”Ÿæˆè¿žæŽ¥" + +#: elf/ldconfig.c:139 +msgid "Change to and use ROOT as root directory" +msgstr "进入 ROOT ç›®å½•å¹¶å°†å…¶ä½œä¸ºæ ¹ç›®å½•" + +#: elf/ldconfig.c:139 +msgid "ROOT" +msgstr "ROOT" + +#: elf/ldconfig.c:140 +msgid "CACHE" +msgstr "CACHE" + +#: elf/ldconfig.c:140 +msgid "Use CACHE as cache file" +msgstr "å°† CACHE 用作缓冲区文件" + +#: elf/ldconfig.c:141 +msgid "CONF" +msgstr "CONF" + +#: elf/ldconfig.c:141 +msgid "Use CONF as configuration file" +msgstr "å°† CONF 用作é…置文件" + +#: elf/ldconfig.c:142 +msgid "Only process directories specified on the command line. Don't build cache." +msgstr "åªåœ¨å‘½ä»¤è¡Œä¸ç»™å‡ºäº†è¿›ç¨‹ç›®å½•ã€‚未创建缓冲区。" + +#: elf/ldconfig.c:143 +msgid "Manually link individual libraries." +msgstr "手工连接独立的库。" + +#: elf/ldconfig.c:144 +msgid "FORMAT" +msgstr "FORMAT" + +#: elf/ldconfig.c:144 +msgid "Format to use: new, old or compat (default)" +msgstr "é‡‡ç”¨çš„æ ¼å¼ï¼šæ–°ã€æ—§æˆ–兼容(默认)" + +#: elf/ldconfig.c:152 +msgid "Configure Dynamic Linker Run Time Bindings." +msgstr "" + +#: elf/ldconfig.c:310 +#, c-format +msgid "Path `%s' given more than once" +msgstr "多次给出路径“%sâ€" + +#: elf/ldconfig.c:350 +#, c-format +msgid "%s is not a known library type" +msgstr "%s ä¸æ˜¯å·²çŸ¥ç±»åž‹çš„库" -#: iconv/iconv_charmap.c:177 iconv/iconv_prog.c:311 +#: elf/ldconfig.c:375 +#, c-format +msgid "Can't stat %s" +msgstr "æ— æ³•å¯¹ %s 进行 stat æ“作" + +#: elf/ldconfig.c:449 +#, c-format +msgid "Can't stat %s\n" +msgstr "æ— æ³•å¯¹ %s 进行 stat æ“作\n" + +#: elf/ldconfig.c:459 +#, c-format +msgid "%s is not a symbolic link\n" +msgstr "%s ä¸æ˜¯ç¬¦å·è¿žæŽ¥\n" + +#: elf/ldconfig.c:478 +#, c-format +msgid "Can't unlink %s" +msgstr "" + +#: elf/ldconfig.c:484 +#, c-format +msgid "Can't link %s to %s" +msgstr "æ— æ³•å°† %s 连接到 %s" + +#: elf/ldconfig.c:490 +msgid " (changed)\n" +msgstr " (改å˜)\n" + +#: elf/ldconfig.c:492 +msgid " (SKIPPED)\n" +msgstr " (跳过)\n" + +#: elf/ldconfig.c:547 +#, c-format +msgid "Can't find %s" +msgstr "æ— æ³•æ‰¾åˆ° %s" + +#: elf/ldconfig.c:563 elf/ldconfig.c:737 elf/ldconfig.c:784 +#, c-format +msgid "Cannot lstat %s" +msgstr "æ— æ³•å¯¹ %s 进行 lstat æ“作" + +#: elf/ldconfig.c:570 +#, c-format +msgid "Ignored file %s since it is not a regular file." +msgstr "由于ä¸æ˜¯ä¸€ä¸ªæ™®é€šæ–‡ä»¶ï¼Œå¿½ç•¥æ–‡ä»¶ %s" + +#: elf/ldconfig.c:578 +#, c-format +msgid "No link created since soname could not be found for %s" +msgstr "æœªåˆ›å»ºé“¾æŽ¥ï¼Œå› ä¸º %s æ— æ³•æ‰¾åˆ° soname" + +#: elf/ldconfig.c:669 +#, c-format +msgid "Can't open directory %s" +msgstr "æ— æ³•æ‰“å¼€ç›®å½• %s" + +#: elf/ldconfig.c:749 +#, c-format +msgid "Cannot stat %s" +msgstr "æ— æ³•å¯¹ %s 进行 stat æ“作" + +#: elf/ldconfig.c:806 elf/readlib.c:91 +#, c-format +msgid "Input file %s not found.\n" +msgstr "未找到输入文件 %s。\n" + +#: elf/ldconfig.c:857 +#, c-format +msgid "libc5 library %s in wrong directory" +msgstr "libc5 的库 %s 处于错误的目录ä¸" + +#: elf/ldconfig.c:860 +#, c-format +msgid "libc6 library %s in wrong directory" +msgstr "libc5 的库 %s 处于错误的目录ä¸" + +#: elf/ldconfig.c:863 +#, c-format +msgid "libc4 library %s in wrong directory" +msgstr "libc4 的库 %s 处于错误的目录ä¸" + +#: elf/ldconfig.c:890 +#, c-format +msgid "libraries %s and %s in directory %s have same soname but different type." +msgstr "目录 %3$s ä¸çš„ %1$s å’Œ %2$s çš„ so å称相åŒä½†ç±»åž‹ä¸åŒã€‚" + +#: elf/ldconfig.c:997 +#, c-format +msgid "Can't open configuration file %s" +msgstr "æ— æ³•æ‰“å¼€é…置文件 %s" + +#: elf/ldconfig.c:1061 +#, c-format +msgid "%s:%u: bad syntax in hwcap line" +msgstr "" + +#: elf/ldconfig.c:1067 +#, c-format +msgid "%s:%u: hwcap index %lu above maximum %u" +msgstr "" + +#: elf/ldconfig.c:1074 elf/ldconfig.c:1082 +#, c-format +msgid "%s:%u: hwcap index %lu already defined as %s" +msgstr "" + +#: elf/ldconfig.c:1085 +#, c-format +msgid "%s:%u: duplicate hwcap %lu %s" +msgstr "" + +#: elf/ldconfig.c:1107 +#, c-format +msgid "need absolute file name for configuration file when using -r" +msgstr "" + +#: elf/ldconfig.c:1114 locale/programs/xmalloc.c:70 malloc/obstack.c:434 +#: malloc/obstack.c:436 posix/getconf.c:985 posix/getconf.c:1163 +#, c-format +msgid "memory exhausted" +msgstr "内å˜è€—å°½" + +#: elf/ldconfig.c:1144 +#, c-format +msgid "%s:%u: cannot read directory %s" +msgstr "%s:%u: æ— æ³•è¯»å–目录 %s" + +#: elf/ldconfig.c:1189 +#, c-format +msgid "relative path `%s' used to build cache" +msgstr "" + +#: elf/ldconfig.c:1215 +#, c-format +msgid "Can't chdir to /" +msgstr "æ— æ³•æ”¹å˜ç›®å½•åˆ° /" + +#: elf/ldconfig.c:1257 +#, c-format +msgid "Can't open cache file directory %s\n" +msgstr "æ— æ³•æ‰“å¼€ç¼“å†²æ–‡ä»¶ç›®å½• %s\n" + +#: elf/ldd.bash.in:43 +msgid "Written by %s and %s.\n" +msgstr "ç”± %s å’Œ %s 编写。\n" + +#: elf/ldd.bash.in:48 +msgid "" +"Usage: ldd [OPTION]... FILE...\n" +" --help print this help and exit\n" +" --version print version information and exit\n" +" -d, --data-relocs process data relocations\n" +" -r, --function-relocs process data and function relocations\n" +" -u, --unused print unused direct dependencies\n" +" -v, --verbose print all information\n" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>." +msgstr "" + +#: elf/ldd.bash.in:80 +msgid "ldd: option \\`$1' is ambiguous" +msgstr "ldd: 选项“$1â€å…·æœ‰äºŒä¹‰æ€§" + +#: elf/ldd.bash.in:87 +msgid "unrecognized option" +msgstr "æ— æ³•è¯†åˆ«çš„é€‰é¡¹" + +#: elf/ldd.bash.in:88 elf/ldd.bash.in:126 +msgid "Try \\`ldd --help' for more information." +msgstr "试用“ldd --helpâ€ä»¥èŽ·å–更多信æ¯ã€‚" + +#: elf/ldd.bash.in:125 +msgid "missing file arguments" +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. +#: elf/ldd.bash.in:148 sysdeps/gnu/errlist.c:36 +msgid "No such file or directory" +msgstr "没有那个文件或目录" + +#: elf/ldd.bash.in:151 inet/rcmd.c:483 +msgid "not regular file" +msgstr "ä¸æ˜¯æ™®é€šæ–‡ä»¶" + +#: elf/ldd.bash.in:154 +msgid "warning: you do not have execution permission for" +msgstr "è¦å‘Š: ä½ æ²¡æœ‰æ‰§è¡Œæƒé™ " + +#: elf/ldd.bash.in:183 +msgid "\tnot a dynamic executable" +msgstr "\tä¸æ˜¯åŠ¨æ€å¯æ‰§è¡Œæ–‡ä»¶" + +#: elf/ldd.bash.in:191 +msgid "exited with unknown exit code" +msgstr "以未知的退出ç 退出" + +#: elf/ldd.bash.in:196 +msgid "error: you do not have read permission for" +msgstr "错误: ä½ æ²¡æœ‰è¯»æƒé™ " + +#: elf/readelflib.c:35 +#, c-format +msgid "file %s is truncated\n" +msgstr "文件 %s 己被截æ–\n" + +#: elf/readelflib.c:67 +#, c-format +msgid "%s is a 32 bit ELF file.\n" +msgstr "%s 是一个 32 ä½ ELF 文件。\n" + +#: elf/readelflib.c:69 +#, c-format +msgid "%s is a 64 bit ELF file.\n" +msgstr "%s 是一个 64 ä½ ELF 文件。\n" + +#: elf/readelflib.c:71 +#, c-format +msgid "Unknown ELFCLASS in file %s.\n" +msgstr "文件 %s ä¸æœªçŸ¥çš„ ELFCLASS。\n" + +#: elf/readelflib.c:78 +#, c-format +msgid "%s is not a shared object file (Type: %d).\n" +msgstr "%s ä¸æ˜¯å…±äº«ç›®æ ‡æ–‡ä»¶ (类型:%d)。\n" + +#: elf/readelflib.c:109 +#, c-format +msgid "more than one dynamic segment\n" +msgstr "多于一个动æ€æ®µ\n" + +#: elf/readlib.c:97 +#, c-format +msgid "Cannot fstat file %s.\n" +msgstr "æ— æ³•å¯¹æ–‡ä»¶ %s 进行 fstat æ“作。\n" + +#: elf/readlib.c:108 +#, c-format +msgid "File %s is empty, not checked." +msgstr "文件 %s 为空,未检查。" + +#: elf/readlib.c:114 +#, c-format +msgid "File %s is too small, not checked." +msgstr "文件 %s 过å°ï¼Œæœªæ£€æŸ¥ã€‚" + +#: elf/readlib.c:124 +#, c-format +msgid "Cannot mmap file %s.\n" +msgstr "æ— æ³•å¯¹æ–‡ä»¶ %s 进行 mmap æ“作。\n" + +#: elf/readlib.c:162 +#, 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:77 +msgid "Output selection:" +msgstr "输出选择:" + +#: elf/sprof.c:79 +msgid "print list of count paths and their number of use" +msgstr "打å°å½“å‰è·¯å¾„的列表和他们的使用次数" + +#: elf/sprof.c:81 +msgid "generate flat profile with counts and ticks" +msgstr "" + +#: elf/sprof.c:82 +msgid "generate call graph" +msgstr "生æˆè°ƒç”¨å›¾" + +#: elf/sprof.c:89 +msgid "" +"Read and display shared object profiling data.\vFor bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" + +#: elf/sprof.c:94 +msgid "SHOBJ [PROFDATA]" +msgstr "SHOBJ [PROFDATA]" + +#: elf/sprof.c:400 +#, c-format +msgid "failed to load shared object `%s'" +msgstr "è£…å…¥å…±äº«ç›®æ ‡æ–‡ä»¶â€œ%sâ€å¤±è´¥" + +#: elf/sprof.c:409 +#, c-format +msgid "cannot create internal descriptors" +msgstr "æ— æ³•åˆ›å»ºå†…éƒ¨æ述符" + +#: elf/sprof.c:528 +#, c-format +msgid "Reopening shared object `%s' failed" +msgstr "é‡çŽ°æ‰“开共享对象“%sâ€å¤±è´¥" + +#: elf/sprof.c:535 elf/sprof.c:629 +#, c-format +msgid "reading of section headers failed" +msgstr "读å–节头部失败" + +#: elf/sprof.c:543 elf/sprof.c:637 +#, c-format +msgid "reading of section header string table failed" +msgstr "读å–节头部å—符串表失败" + +#: elf/sprof.c:569 +#, c-format +msgid "*** Cannot read debuginfo file name: %m\n" +msgstr "*** æ— æ³•è¯»å–调试信æ¯æ–‡ä»¶å: %m\n" + +#: elf/sprof.c:589 +#, c-format +msgid "cannot determine file name" +msgstr "æ— æ³•ç¡®å®šæ–‡ä»¶å" + +#: elf/sprof.c:622 +#, c-format +msgid "reading of ELF header failed" +msgstr "è¯»å– ELF 头部失败" + +#: elf/sprof.c:658 +#, c-format +msgid "*** The file `%s' is stripped: no detailed analysis possible\n" +msgstr "*** 文件“%sâ€å·²å‰¥ç¦»ï¼šä¸å¯èƒ½è¿›è¡Œç»†èŠ‚分æž\n" + +#: elf/sprof.c:688 +#, c-format +msgid "failed to load symbol data" +msgstr "装入符å·æ•°æ®å¤±è´¥" + +#: elf/sprof.c:755 +#, c-format +msgid "cannot load profiling data" +msgstr "æ— æ³•åŠ è½½ profile æ•°æ®" + +#: elf/sprof.c:764 +#, c-format +msgid "while stat'ing profiling data file" +msgstr "å½“åˆ†æž profile æ•°æ®æ–‡ä»¶" + +#: elf/sprof.c:772 +#, c-format +msgid "profiling data file `%s' does not match shared object `%s'" +msgstr "" + +#: elf/sprof.c:783 +#, c-format +msgid "failed to mmap the profiling data file" +msgstr "" + +#: elf/sprof.c:791 +#, c-format +msgid "error while closing the profiling data file" +msgstr "" + +#: elf/sprof.c:800 elf/sprof.c:870 +#, c-format +msgid "cannot create internal descriptor" +msgstr "æ— æ³•åˆ›å»ºå†…éƒ¨æ述符" + +#: elf/sprof.c:846 +#, c-format +msgid "`%s' is no correct profile data file for `%s'" +msgstr "" + +#: elf/sprof.c:1027 elf/sprof.c:1085 +#, c-format +msgid "cannot allocate symbol data" +msgstr "æ— æ³•åˆ†é…符å·æ•°æ®" + +#: iconv/iconv_charmap.c:176 iconv/iconv_prog.c:316 #, c-format msgid "error while closing input `%s'" -msgstr "¹Ø±ÕÊäÈë¡°%s¡±Ê±³ö´í" +msgstr "å…³é—输入“%sâ€æ—¶å‡ºé”™" -#: iconv/iconv_charmap.c:443 +#: iconv/iconv_charmap.c:450 #, c-format msgid "illegal input sequence at position %Zd" -msgstr "λÓÚ %Zd µÄ·Ç·¨ÊäÈëÐòÁÐ" +msgstr "ä½äºŽ %Zd çš„éžæ³•è¾“å…¥åºåˆ—" -#: iconv/iconv_charmap.c:462 iconv/iconv_prog.c:503 +#: iconv/iconv_charmap.c:469 iconv/iconv_prog.c:526 +#, c-format msgid "incomplete character or shift sequence at end of buffer" -msgstr "λÓÚ»º³åÇøĩβµÄ²»ÍêÕû×Ö·û»òתÒåÐòÁÐ" +msgstr "ä½äºŽç¼“冲区末尾的ä¸å®Œæ•´å—符或转义åºåˆ—" -#: iconv/iconv_charmap.c:507 iconv/iconv_charmap.c:543 iconv/iconv_prog.c:546 -#: iconv/iconv_prog.c:582 +#: iconv/iconv_charmap.c:514 iconv/iconv_charmap.c:550 iconv/iconv_prog.c:569 +#: iconv/iconv_prog.c:605 +#, c-format msgid "error while reading the input" -msgstr "¶ÁÈ¡ÊäÈëʱ³ö´í" +msgstr "读å–输入时出错" -#: iconv/iconv_charmap.c:525 iconv/iconv_prog.c:564 +#: iconv/iconv_charmap.c:532 iconv/iconv_prog.c:587 +#, c-format msgid "unable to allocate buffer for input" -msgstr "ÎÞ·¨ÎªÊäÈë·ÖÅ仺³åÇø" +msgstr "æ— æ³•ä¸ºè¾“å…¥åˆ†é…缓冲区" -#: iconv/iconv_prog.c:61 +#: iconv/iconv_prog.c:60 msgid "Input/Output format specification:" -msgstr "ÊäÈë/Êä³ö¸ñʽ¹æ·¶£º" +msgstr "输入/è¾“å‡ºæ ¼å¼è§„范:" -#: iconv/iconv_prog.c:62 +#: iconv/iconv_prog.c:61 msgid "encoding of original text" -msgstr "ÔʼÎı¾±àÂë" +msgstr "原始文本编ç " -#: iconv/iconv_prog.c:63 +#: iconv/iconv_prog.c:62 msgid "encoding for output" -msgstr "Êä³ö±àÂë" +msgstr "输出编ç " -#: iconv/iconv_prog.c:64 +#: iconv/iconv_prog.c:63 msgid "Information:" -msgstr "ÐÅÏ¢£º" +msgstr "ä¿¡æ¯ï¼š" -#: iconv/iconv_prog.c:65 +#: iconv/iconv_prog.c:64 msgid "list all known coded character sets" -msgstr "ÁоÙËùÓÐÒÑÖªµÄ×Ö·û¼¯" +msgstr "列举所有已知的å—符集" -#: iconv/iconv_prog.c:66 locale/programs/localedef.c:128 +#: iconv/iconv_prog.c:65 locale/programs/localedef.c:127 msgid "Output control:" -msgstr "Êä³ö¿ØÖÆ£º" +msgstr "输出控制:" -#: iconv/iconv_prog.c:67 +#: iconv/iconv_prog.c:66 msgid "omit invalid characters from output" -msgstr "´ÓÊä³öÖкöÂÔÎÞЧµÄ×Ö·û" +msgstr "从输出ä¸å¿½ç•¥æ— 效的å—符" -#: iconv/iconv_prog.c:68 +#: iconv/iconv_prog.c:67 msgid "output file" -msgstr "Êä³öÎļþ" +msgstr "输出文件" -#: iconv/iconv_prog.c:69 +#: iconv/iconv_prog.c:68 msgid "suppress warnings" -msgstr "¹Ø±Õ¾¯¸æ" +msgstr "å…³é—è¦å‘Š" -#: iconv/iconv_prog.c:70 +#: iconv/iconv_prog.c:69 msgid "print progress information" -msgstr "´òÓ¡½ø¶ÈÐÅÏ¢" +msgstr "打å°è¿›åº¦ä¿¡æ¯" -#: iconv/iconv_prog.c:75 +#: iconv/iconv_prog.c:74 msgid "Convert encoding of given files from one encoding to another." -msgstr "ת»»¸ø¶¨ÎļþµÄ±àÂë¡£" +msgstr "转æ¢ç»™å®šæ–‡ä»¶çš„ç¼–ç 。" -#: iconv/iconv_prog.c:79 +#: iconv/iconv_prog.c:78 msgid "[FILE...]" -msgstr "[Îļþ...]" +msgstr "[文件...]" -#: iconv/iconv_prog.c:199 +#: iconv/iconv_prog.c:200 +#, c-format msgid "cannot open output file" -msgstr "ÎÞ·¨´ò¿ªÊä³öÎļþ" +msgstr "æ— æ³•æ‰“å¼€è¾“å‡ºæ–‡ä»¶" -#: iconv/iconv_prog.c:241 +#: iconv/iconv_prog.c:242 #, c-format msgid "conversions from `%s' and to `%s' are not supported" -msgstr "²»Ö§³Ö´Ó¡°%s¡±µ½¡°%s¡±µÄת»»" +msgstr "ä¸æ”¯æŒä»Žâ€œ%sâ€åˆ°â€œ%sâ€çš„转æ¢" -#: iconv/iconv_prog.c:246 +#: iconv/iconv_prog.c:247 #, c-format msgid "conversion from `%s' is not supported" -msgstr "²»Ö§³ÖÒÔ¡°%s¡±ÎªÔ´Í·µÄת»»" +msgstr "ä¸æ”¯æŒä»¥â€œ%sâ€ä¸ºæºå¤´çš„转æ¢" -#: iconv/iconv_prog.c:253 +#: iconv/iconv_prog.c:254 #, c-format msgid "conversion to `%s' is not supported" -msgstr "²»Ö§³ÖÒÔ¡°%s¡±ÎªÄ¿±êµÄת»»" +msgstr "ä¸æ”¯æŒä»¥â€œ%sâ€ä¸ºç›®æ ‡çš„转æ¢" -#: iconv/iconv_prog.c:257 +#: iconv/iconv_prog.c:258 #, c-format msgid "conversion from `%s' to `%s' is not supported" -msgstr "²»Ö§³Ö´Ó¡°%s¡±µ½¡°%s¡±µÄת»»" +msgstr "ä¸æ”¯æŒä»Žâ€œ%sâ€åˆ°â€œ%sâ€çš„转æ¢" -#: iconv/iconv_prog.c:263 +#: iconv/iconv_prog.c:268 +#, c-format msgid "failed to start conversion processing" -msgstr "Æô¶¯×ª»»´¦Àíʧ°Ü" - -#: iconv/iconv_prog.c:358 -msgid "error while closing output file" -msgstr "¹Ø±ÕÊä³öÎļþʱ³ö´í" +msgstr "å¯åŠ¨è½¬æ¢å¤„ç†å¤±è´¥" -#: iconv/iconv_prog.c:407 iconv/iconvconfig.c:357 locale/programs/locale.c:274 -#: 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:421 iconv/iconvconfig.c:371 locale/programs/locale.c:287 -#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:910 -#: nss/getent.c:74 nscd/nscd.c:330 nscd/nscd_nischeck.c:90 elf/ldconfig.c:271 -#: elf/sprof.c:349 +#: iconv/iconv_prog.c:362 #, 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 "" +msgid "error while closing output file" +msgstr "å…³é—输出文件时出错" -#: iconv/iconv_prog.c:426 iconv/iconvconfig.c:376 locale/programs/locale.c:292 -#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:915 -#: nss/getent.c:79 nscd/nscd.c:335 nscd/nscd_nischeck.c:95 elf/ldconfig.c:276 -#: elf/sprof.c:355 +#: iconv/iconv_prog.c:471 iconv/iconv_prog.c:497 #, c-format -msgid "Written by %s.\n" -msgstr "ÓÉ %s ±àд¡£\n" - -#: iconv/iconv_prog.c:456 iconv/iconv_prog.c:482 msgid "conversion stopped due to problem in writing the output" -msgstr "ÓÉÓÚдÈëÊä³öʱ³öÏÖµÄÎÊÌâת»»Í£Ö¹" +msgstr "由于写入输出时出现的问题转æ¢åœæ¢" -#: iconv/iconv_prog.c:499 +#: iconv/iconv_prog.c:522 #, c-format msgid "illegal input sequence at position %ld" -msgstr "δ֪ %ld ´¦µÄ·Ç·¨ÊäÈëÐòÁÐ" +msgstr "未知 %ld 处的éžæ³•è¾“å…¥åºåˆ—" -#: iconv/iconv_prog.c:507 +#: iconv/iconv_prog.c:530 +#, c-format msgid "internal error (illegal descriptor)" -msgstr "ÄÚ²¿´íÎó (·Ç·¨µÄÃèÊö·û)" +msgstr "内部错误 (éžæ³•çš„æ述符)" -#: iconv/iconv_prog.c:510 +#: iconv/iconv_prog.c:533 #, c-format msgid "unknown iconv() error %d" -msgstr "δ֪µÄ iconv() ´íÎó %d" +msgstr "未知的 iconv() 错误 %d" -#: iconv/iconv_prog.c:753 +#: iconv/iconv_prog.c:779 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" @@ -340,1110 +1254,1225 @@ msgstr "" #: iconv/iconvconfig.c:110 msgid "Create fastloading iconv module configuration file." -msgstr "´´½¨¿ìËÙ×°Èë iconv Ä£¿éÅäÖÃÎļþ¡£" +msgstr "创建快速装入 iconv 模å—é…置文件。" #: iconv/iconvconfig.c:114 msgid "[DIR...]" -msgstr "[Ŀ¼...]" +msgstr "[目录...]" -#: iconv/iconvconfig.c:126 +#: iconv/iconvconfig.c:127 msgid "Prefix used for all file accesses" -msgstr "ÓÃÓÚËùÓÐÎļþ·ÃÎʵÄǰ׺" +msgstr "用于所有文件访问的å‰ç¼€" + +#: iconv/iconvconfig.c:128 +msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)" +msgstr "" -#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292 +#: iconv/iconvconfig.c:132 +msgid "Do not search standard directories, only those on the command line" +msgstr "" + +#: iconv/iconvconfig.c:301 +#, c-format +msgid "Directory arguments required when using --nostdlib" +msgstr "" + +#: iconv/iconvconfig.c:343 locale/programs/localedef.c:291 +#, c-format msgid "no output file produced because warnings were issued" -msgstr "ÓÉÓÚ³öÏÖ¾¯¸æ¶øδÉú³ÉÊä³öÎļþ" +msgstr "由于出现è¦å‘Šè€Œæœªç”Ÿæˆè¾“出文件" -#: iconv/iconvconfig.c:405 +#: iconv/iconvconfig.c:429 +#, c-format msgid "while inserting in search tree" -msgstr "²åÈëËÑË÷Ê÷ʱ" +msgstr "æ’å…¥æœç´¢æ ‘æ—¶" -#: iconv/iconvconfig.c:1204 +#: iconv/iconvconfig.c:1238 +#, c-format msgid "cannot generate output file" -msgstr "ÎÞ·¨Éú³ÉÊä³öÎļþ" +msgstr "æ— æ³•ç”Ÿæˆè¾“出文件" + +#: inet/rcmd.c:157 +msgid "rcmd: Cannot allocate memory\n" +msgstr "rcmdï¼šæ— æ³•åˆ†é…内å˜\n" -#: locale/programs/charmap-dir.c:59 +#: inet/rcmd.c:172 +msgid "rcmd: socket: All ports in use\n" +msgstr "rcmd:socket:所有端å£éƒ½å·²åœ¨ä½¿ç”¨äº†\n" + +#: inet/rcmd.c:200 +#, c-format +msgid "connect to address %s: " +msgstr "è¿žæŽ¥åˆ°åœ°å€ %s:" + +#: inet/rcmd.c:213 +#, c-format +msgid "Trying %s...\n" +msgstr "æ£åœ¨å°è¯• %s...\n" + +#: inet/rcmd.c:249 +#, c-format +msgid "rcmd: write (setting up stderr): %m\n" +msgstr "" + +#: inet/rcmd.c:265 +#, c-format +msgid "rcmd: poll (setting up stderr): %m\n" +msgstr "" + +#: inet/rcmd.c:268 +msgid "poll: protocol failure in circuit setup\n" +msgstr "" + +#: inet/rcmd.c:301 +msgid "socket: protocol failure in circuit setup\n" +msgstr "" + +#: inet/rcmd.c:325 +#, c-format +msgid "rcmd: %s: short read" +msgstr "" + +#: inet/rcmd.c:481 +msgid "lstat failed" +msgstr "lstat æ“作失败" + +#: inet/rcmd.c:488 +msgid "cannot open" +msgstr "æ— æ³•æ‰“å¼€" + +#: inet/rcmd.c:490 +msgid "fstat failed" +msgstr "fstat 失败" + +#: inet/rcmd.c:492 +msgid "bad owner" +msgstr "错误的拥有者" + +#: inet/rcmd.c:494 +msgid "writeable by other than owner" +msgstr "å¯ç”±é™¤æ‰€æœ‰è€…之外的人写入" + +#: inet/rcmd.c:496 +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 "åˆ é™¤ä¸èƒ½ç”±å…¶å®ƒäººè¯»å…¥çš„å£ä»¤æˆ– make 文件" + +#: inet/ruserpass.c:277 +#, c-format +msgid "Unknown .netrc keyword %s" +msgstr "未知的 .netrc å…³é”®å— %s" + +#: libidn/nfkc.c:464 +msgid "Character out of range for UTF-8" +msgstr "å—符超出 UTF-8 的范围" + +#: locale/programs/charmap-dir.c:58 #, c-format msgid "cannot read character map directory `%s'" -msgstr "ÎÞ·¨¶ÁÈë×ÖĸӳÉäĿ¼¡°%s¡±" +msgstr "æ— æ³•è¯»å…¥å—æ¯æ˜ 射目录“%sâ€" -#: locale/programs/charmap.c:135 +#: locale/programs/charmap.c:138 #, c-format msgid "character map file `%s' not found" -msgstr "ÕÒ²»µ½×Ö·ûÓ³ÉäÎļþ¡°%s¡±" +msgstr "找ä¸åˆ°å—ç¬¦æ˜ å°„æ–‡ä»¶â€œ%sâ€" -#: locale/programs/charmap.c:193 +#: locale/programs/charmap.c:195 #, c-format msgid "default character map file `%s' not found" -msgstr "ÕÒ²»µ½Ä¬ÈÏ×Ö·ûÓ³ÉäÎļþ¡°%s¡±" +msgstr "找ä¸åˆ°é»˜è®¤å—ç¬¦æ˜ å°„æ–‡ä»¶â€œ%sâ€" -#: locale/programs/charmap.c:255 +#: locale/programs/charmap.c:258 #, c-format msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n" msgstr "" -#: locale/programs/charmap.c:332 +#: locale/programs/charmap.c:337 #, c-format msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n" -msgstr "%s£º<mb_cur_max> ±ØÐë´óÓÚ <mb_cur_min>\n" +msgstr "%s:<mb_cur_max> 必须大于 <mb_cur_min>\n" -#: locale/programs/charmap.c:352 locale/programs/charmap.c:369 +#: locale/programs/charmap.c:357 locale/programs/charmap.c:374 #: locale/programs/repertoire.c:175 #, c-format msgid "syntax error in prolog: %s" -msgstr "ÐòÑÔÖÐÓï·¨´íÎó£º%s" +msgstr "åºè¨€ä¸è¯æ³•é”™è¯¯ï¼š%s" -#: locale/programs/charmap.c:353 +#: locale/programs/charmap.c:358 msgid "invalid definition" -msgstr "ÎÞЧµÄ¶¨Òå" +msgstr "æ— æ•ˆçš„å®šä¹‰" -#: locale/programs/charmap.c:370 locale/programs/locfile.c:126 +#: locale/programs/charmap.c:375 locale/programs/locfile.c:126 #: locale/programs/locfile.c:153 locale/programs/repertoire.c:176 msgid "bad argument" -msgstr "´íÎóµÄ²ÎÊý" +msgstr "错误的å‚æ•°" -#: locale/programs/charmap.c:398 +#: locale/programs/charmap.c:403 #, c-format msgid "duplicate definition of <%s>" -msgstr "Öظ´¶¨Òå <%s>" +msgstr "é‡å¤å®šä¹‰ <%s>" -#: locale/programs/charmap.c:405 +#: locale/programs/charmap.c:410 #, c-format msgid "value for <%s> must be 1 or greater" -msgstr "<%s>µÄÖµ±ØÐëÊÇ 1 »ò¸ü´ó" +msgstr "<%s>的值必须是 1 或更大" -#: locale/programs/charmap.c:417 +#: locale/programs/charmap.c:422 #, c-format msgid "value of <%s> must be greater or equal than the value of <%s>" -msgstr "<%s> µÄÖµ±ØÐë´óÓÚµÈÓÚ <%s> µÄÖµ" +msgstr "<%s> 的值必须大于ç‰äºŽ <%s> 的值" -#: locale/programs/charmap.c:440 locale/programs/repertoire.c:184 +#: locale/programs/charmap.c:445 locale/programs/repertoire.c:184 #, c-format msgid "argument to <%s> must be a single character" -msgstr "<%s>µÄ²ÎÊý±ØÐëÊǵ¥¸ö×Ö·û" +msgstr "<%s>çš„å‚数必须是å•ä¸ªå—符" -#: locale/programs/charmap.c:466 +#: locale/programs/charmap.c:471 msgid "character sets with locking states are not supported" -msgstr "²»Ö§³Ö´øÓÐËø¶¨×´Ì¬µÄ×Ö·û¼¯" +msgstr "ä¸æ”¯æŒå¸¦æœ‰é”定状æ€çš„å—符集" -#: locale/programs/charmap.c:493 locale/programs/charmap.c:547 -#: locale/programs/charmap.c:579 locale/programs/charmap.c:673 -#: locale/programs/charmap.c:728 locale/programs/charmap.c:769 -#: locale/programs/charmap.c:810 +#: locale/programs/charmap.c:498 locale/programs/charmap.c:552 +#: locale/programs/charmap.c:584 locale/programs/charmap.c:678 +#: locale/programs/charmap.c:733 locale/programs/charmap.c:774 +#: locale/programs/charmap.c:815 #, c-format msgid "syntax error in %s definition: %s" -msgstr "%s µÄ¶¨ÒåÖеÄÓï·¨´íÎó£º%s" +msgstr "%s 的定义ä¸çš„è¯æ³•é”™è¯¯ï¼š%s" -#: locale/programs/charmap.c:494 locale/programs/charmap.c:674 -#: locale/programs/charmap.c:770 locale/programs/repertoire.c:231 +#: locale/programs/charmap.c:499 locale/programs/charmap.c:679 +#: locale/programs/charmap.c:775 locale/programs/repertoire.c:231 msgid "no symbolic name given" -msgstr "ûÓиø³ö·ûºÅÃû" +msgstr "没有给出符å·å" -#: locale/programs/charmap.c:548 +#: locale/programs/charmap.c:553 msgid "invalid encoding given" -msgstr "¸ø³öÎÞЧµÄ±àÂë" +msgstr "ç»™å‡ºæ— æ•ˆçš„ç¼–ç " -#: locale/programs/charmap.c:557 +#: locale/programs/charmap.c:562 msgid "too few bytes in character encoding" -msgstr "×Ö·û±àÂëÖÐ×Ö½ÚÊý¹ýÉÙ" +msgstr "å—符编ç ä¸å—节数过少" -#: locale/programs/charmap.c:559 +#: locale/programs/charmap.c:564 msgid "too many bytes in character encoding" -msgstr "×Ö·û±àÂëÖÐ×Ö½ÚÊý¹ý¶à" +msgstr "å—符编ç ä¸å—节数过多" -#: locale/programs/charmap.c:581 locale/programs/charmap.c:729 -#: locale/programs/charmap.c:812 locale/programs/repertoire.c:297 +#: locale/programs/charmap.c:586 locale/programs/charmap.c:734 +#: locale/programs/charmap.c:817 locale/programs/repertoire.c:297 msgid "no symbolic name given for end of range" -msgstr "ûÓÐΪ·¶Î§µÄ½áÊø¸ø³ö·ûºÅ»¯µÄÃû³Æ" - -#: locale/programs/charmap.c:605 locale/programs/locfile.h:96 +msgstr "没有为范围的结æŸç»™å‡ºç¬¦å·åŒ–çš„å称" + +#: locale/programs/charmap.c:610 locale/programs/ld-address.c:600 +#: locale/programs/ld-collate.c:2677 locale/programs/ld-collate.c:3828 +#: locale/programs/ld-ctype.c:2232 locale/programs/ld-ctype.c:2984 +#: locale/programs/ld-identification.c:452 +#: locale/programs/ld-measurement.c:238 locale/programs/ld-messages.c:332 +#: locale/programs/ld-monetary.c:943 locale/programs/ld-name.c:307 +#: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:241 +#: locale/programs/ld-telephone.c:313 locale/programs/ld-time.c:1221 #: locale/programs/repertoire.c:314 #, c-format -msgid "`%1$s' definition does not end with `END %1$s'" -msgstr "¶Ô¡°%1$s¡±µÄ¶¨Òå²¢²»ÒÔ¡°END %1%s¡±½áÊø" +msgid "%1$s: definition does not end with `END %1$s'" +msgstr "%1$s:定义ä¸ä»¥â€œEND %1$sâ€ç»“å°¾" -#: locale/programs/charmap.c:638 +#: locale/programs/charmap.c:643 msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" msgstr "" -#: locale/programs/charmap.c:646 locale/programs/charmap.c:709 +#: locale/programs/charmap.c:651 locale/programs/charmap.c:714 #, c-format msgid "value for %s must be an integer" -msgstr "%s µÄÖµ±ØÐëΪÕûÊý" +msgstr "%s 的值必须为整数" -#: locale/programs/charmap.c:837 +#: locale/programs/charmap.c:842 #, c-format msgid "%s: error in state machine" -msgstr "%s£º×´Ì¬»ú³ö´í" - -#: locale/programs/charmap.c:845 locale/programs/ld-address.c:605 -#: locale/programs/ld-collate.c:2635 locale/programs/ld-collate.c:3793 -#: locale/programs/ld-ctype.c:2216 locale/programs/ld-ctype.c:2977 -#: locale/programs/ld-identification.c:469 -#: locale/programs/ld-measurement.c:255 locale/programs/ld-messages.c:349 -#: locale/programs/ld-monetary.c:952 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:1217 -#: locale/programs/locfile.h:103 locale/programs/repertoire.c:325 +msgstr "%s:状æ€æœºå‡ºé”™" + +#: locale/programs/charmap.c:850 locale/programs/ld-address.c:616 +#: locale/programs/ld-collate.c:2674 locale/programs/ld-collate.c:3844 +#: locale/programs/ld-ctype.c:2229 locale/programs/ld-ctype.c:3001 +#: locale/programs/ld-identification.c:468 +#: locale/programs/ld-measurement.c:254 locale/programs/ld-messages.c:348 +#: locale/programs/ld-monetary.c:959 locale/programs/ld-name.c:323 +#: locale/programs/ld-numeric.c:384 locale/programs/ld-paper.c:257 +#: locale/programs/ld-telephone.c:329 locale/programs/ld-time.c:1237 +#: locale/programs/locfile.c:826 locale/programs/repertoire.c:325 #, c-format msgid "%s: premature end of file" -msgstr "%s£ºÎļþ²»ÍêÕû" +msgstr "%s:文件ä¸å®Œæ•´" -#: locale/programs/charmap.c:864 locale/programs/charmap.c:875 +#: locale/programs/charmap.c:869 locale/programs/charmap.c:880 #, c-format msgid "unknown character `%s'" -msgstr "δ֪µÄ×Ö·û¡°%s¡±" +msgstr "未知的å—符“%sâ€" -#: locale/programs/charmap.c:883 +#: locale/programs/charmap.c:888 #, c-format msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d" msgstr "" -#: locale/programs/charmap.c:987 locale/programs/ld-collate.c:2915 +#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:2957 #: locale/programs/repertoire.c:420 msgid "invalid names for character range" msgstr "" -#: locale/programs/charmap.c:999 locale/programs/repertoire.c:432 +#: locale/programs/charmap.c:1005 locale/programs/repertoire.c:432 msgid "hexadecimal range format should use only capital characters" msgstr "" -#: locale/programs/charmap.c:1017 +#: locale/programs/charmap.c:1023 locale/programs/repertoire.c:450 #, c-format -msgid "<%s> and <%s> are illegal names for range" -msgstr "<%s> ºÍ <%s> ÊÇ·Ç·¨µÄ·¶Î§Ãû" +msgid "<%s> and <%s> are invalid names for range" +msgstr "<%s> å’Œ <%s> æ˜¯æ— æ•ˆçš„èŒƒå›´å" -#: locale/programs/charmap.c:1023 -msgid "upper limit in range is not higher then lower limit" -msgstr "·¶Î§µÄÉÏÏÞ²¢²»¸ßÓÚÏÂÏÞ" +#: locale/programs/charmap.c:1029 locale/programs/repertoire.c:457 +msgid "upper limit in range is smaller than lower limit" +msgstr "范围的上é™å°äºŽä¸‹é™" -#: locale/programs/charmap.c:1081 +#: locale/programs/charmap.c:1087 msgid "resulting bytes for range not representable." msgstr "" -#: locale/programs/ld-address.c:134 locale/programs/ld-collate.c:1519 -#: locale/programs/ld-ctype.c:416 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 +#: locale/programs/ld-address.c:133 locale/programs/ld-collate.c:1536 +#: locale/programs/ld-ctype.c:420 locale/programs/ld-identification.c:133 +#: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97 +#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:94 +#: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91 +#: locale/programs/ld-telephone.c:94 locale/programs/ld-time.c:159 #, c-format msgid "No definition for %s category found" msgstr "" -#: 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:244 locale/programs/ld-monetary.c:260 -#: locale/programs/ld-monetary.c:272 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 +#: locale/programs/ld-address.c:144 locale/programs/ld-address.c:182 +#: locale/programs/ld-address.c:200 locale/programs/ld-address.c:229 +#: locale/programs/ld-address.c:301 locale/programs/ld-address.c:320 +#: locale/programs/ld-address.c:333 locale/programs/ld-identification.c:146 +#: locale/programs/ld-measurement.c:105 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:105 +#: locale/programs/ld-name.c:142 locale/programs/ld-numeric.c:112 +#: locale/programs/ld-numeric.c:126 locale/programs/ld-paper.c:102 +#: locale/programs/ld-paper.c:111 locale/programs/ld-telephone.c:105 +#: locale/programs/ld-telephone.c:162 locale/programs/ld-time.c:175 +#: locale/programs/ld-time.c:196 #, c-format msgid "%s: field `%s' not defined" -msgstr "%s£ºÓò¡°%s¡±Î´¶¨Òå" +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 +#: locale/programs/ld-address.c:156 locale/programs/ld-address.c:208 +#: locale/programs/ld-address.c:238 locale/programs/ld-address.c:276 +#: locale/programs/ld-name.c:117 locale/programs/ld-telephone.c:117 #, c-format msgid "%s: field `%s' must not be empty" -msgstr "%s£ºÓò¡°%s¡±²»ÄÜΪ¿Õ" +msgstr "%s:域“%sâ€ä¸èƒ½ä¸ºç©º" -#: locale/programs/ld-address.c:169 +#: locale/programs/ld-address.c:168 #, c-format msgid "%s: invalid escape `%%%c' sequence in field `%s'" -msgstr "%1$s£ºÓò¡°%3$s¡±ÖÐÎÞЧµÄתÒå¡°%%%2$c¡±ÐòÁÐ" +msgstr "%1$s:域“%3$sâ€ä¸æ— 效的转义“%%%2$câ€åºåˆ—" -#: locale/programs/ld-address.c:220 +#: locale/programs/ld-address.c:219 #, c-format msgid "%s: terminology language code `%s' not defined" msgstr "" -#: locale/programs/ld-address.c:247 locale/programs/ld-address.c:276 +#: locale/programs/ld-address.c:244 +#, c-format +msgid "%s: field `%s' must not be defined" +msgstr "%s:域“%sâ€å¿…须未定义" + +#: locale/programs/ld-address.c:258 locale/programs/ld-address.c:287 #, c-format msgid "%s: language abbreviation `%s' not defined" -msgstr "%s£ºÎ´¶¨ÒåµÄÓïÑÔËõд¡°%s¡±" +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 +#: locale/programs/ld-address.c:265 locale/programs/ld-address.c:293 +#: locale/programs/ld-address.c:327 locale/programs/ld-address.c:339 #, c-format msgid "%s: `%s' value does not match `%s' value" -msgstr "%s£º¡°%s¡±µÄÖµ²»ÄÜÆ¥Åä¡°%s¡±µÄÖµ" +msgstr "%s:“%sâ€çš„值ä¸èƒ½åŒ¹é…“%sâ€çš„值" -#: locale/programs/ld-address.c:301 +#: locale/programs/ld-address.c:312 #, 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:2592 -#: locale/programs/ld-identification.c:365 -#: locale/programs/ld-measurement.c:222 locale/programs/ld-messages.c:302 -#: locale/programs/ld-monetary.c:694 locale/programs/ld-monetary.c:729 -#: locale/programs/ld-monetary.c:770 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:1106 -#: locale/programs/ld-time.c:1148 +msgstr "%s:数值国家编ç “%dâ€æ— 效" + +#: locale/programs/ld-address.c:508 locale/programs/ld-address.c:545 +#: locale/programs/ld-address.c:583 locale/programs/ld-ctype.c:2608 +#: locale/programs/ld-identification.c:364 +#: locale/programs/ld-measurement.c:221 locale/programs/ld-messages.c:301 +#: locale/programs/ld-monetary.c:701 locale/programs/ld-monetary.c:736 +#: locale/programs/ld-monetary.c:777 locale/programs/ld-name.c:280 +#: locale/programs/ld-numeric.c:263 locale/programs/ld-paper.c:224 +#: locale/programs/ld-telephone.c:288 locale/programs/ld-time.c:1126 +#: locale/programs/ld-time.c:1168 #, c-format msgid "%s: field `%s' declared more than once" -msgstr "%s£º¶à´ÎÉùÃ÷Óò¡°%s¡±" +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:698 locale/programs/ld-monetary.c:733 -#: locale/programs/ld-name.c:285 locale/programs/ld-numeric.c:268 -#: locale/programs/ld-telephone.c:293 locale/programs/ld-time.c:1000 -#: locale/programs/ld-time.c:1069 locale/programs/ld-time.c:1111 +#: locale/programs/ld-address.c:512 locale/programs/ld-address.c:550 +#: locale/programs/ld-identification.c:368 locale/programs/ld-messages.c:311 +#: locale/programs/ld-monetary.c:705 locale/programs/ld-monetary.c:740 +#: locale/programs/ld-name.c:284 locale/programs/ld-numeric.c:267 +#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:1020 +#: locale/programs/ld-time.c:1089 locale/programs/ld-time.c:1131 #, c-format msgid "%s: unknown character in field `%s'" -msgstr "%s£ºÓò¡°%s¡±Öк¬ÓÐδ֪×Ö·û" +msgstr "%s:域“%sâ€ä¸å«æœ‰æœªçŸ¥å—符" -#: locale/programs/ld-address.c:586 locale/programs/ld-collate.c:3775 -#: locale/programs/ld-ctype.c:2957 locale/programs/ld-identification.c:450 -#: locale/programs/ld-measurement.c:236 locale/programs/ld-messages.c:331 -#: locale/programs/ld-monetary.c:934 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:1199 +#: locale/programs/ld-address.c:597 locale/programs/ld-collate.c:3826 +#: locale/programs/ld-ctype.c:2981 locale/programs/ld-identification.c:449 +#: locale/programs/ld-measurement.c:235 locale/programs/ld-messages.c:330 +#: locale/programs/ld-monetary.c:941 locale/programs/ld-name.c:305 +#: locale/programs/ld-numeric.c:366 locale/programs/ld-paper.c:239 +#: locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1219 #, c-format msgid "%s: incomplete `END' line" -msgstr "%s£º²»ÍêÕûµÄ¡°END¡±ÐÐ" - -#: locale/programs/ld-address.c:589 locale/programs/ld-collate.c:2638 -#: locale/programs/ld-collate.c:3777 locale/programs/ld-ctype.c:2219 -#: locale/programs/ld-ctype.c:2960 locale/programs/ld-identification.c:453 -#: locale/programs/ld-measurement.c:239 locale/programs/ld-messages.c:333 -#: locale/programs/ld-monetary.c:936 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:1201 -#, 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:520 -#: locale/programs/ld-collate.c:572 locale/programs/ld-collate.c:869 -#: locale/programs/ld-collate.c:882 locale/programs/ld-collate.c:2625 -#: locale/programs/ld-collate.c:3784 locale/programs/ld-ctype.c:1947 -#: locale/programs/ld-ctype.c:2206 locale/programs/ld-ctype.c:2782 -#: locale/programs/ld-ctype.c:2968 locale/programs/ld-identification.c:460 -#: locale/programs/ld-measurement.c:246 locale/programs/ld-messages.c:340 -#: locale/programs/ld-monetary.c:943 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:1208 +msgstr "%s:ä¸å®Œæ•´çš„“ENDâ€è¡Œ" + +#: locale/programs/ld-address.c:607 locale/programs/ld-collate.c:522 +#: locale/programs/ld-collate.c:574 locale/programs/ld-collate.c:870 +#: locale/programs/ld-collate.c:883 locale/programs/ld-collate.c:2664 +#: locale/programs/ld-collate.c:3835 locale/programs/ld-ctype.c:1960 +#: locale/programs/ld-ctype.c:2219 locale/programs/ld-ctype.c:2806 +#: locale/programs/ld-ctype.c:2992 locale/programs/ld-identification.c:459 +#: locale/programs/ld-measurement.c:245 locale/programs/ld-messages.c:339 +#: locale/programs/ld-monetary.c:950 locale/programs/ld-name.c:314 +#: locale/programs/ld-numeric.c:375 locale/programs/ld-paper.c:248 +#: locale/programs/ld-telephone.c:320 locale/programs/ld-time.c:1228 #, c-format msgid "%s: syntax error" -msgstr "%s£ºÓï·¨´íÎó" +msgstr "%s:è¯æ³•é”™è¯¯" -#: locale/programs/ld-collate.c:395 +#: locale/programs/ld-collate.c:397 #, c-format msgid "`%.*s' already defined in charmap" -msgstr "ÒѾÔÚ×Ö·ûÓ³Éä±íÖж¨ÒåÁË¡°%.*s¡±" +msgstr "å·²ç»åœ¨å—ç¬¦æ˜ å°„è¡¨ä¸å®šä¹‰äº†â€œ%.*sâ€" -#: locale/programs/ld-collate.c:404 +#: locale/programs/ld-collate.c:406 #, c-format msgid "`%.*s' already defined in repertoire" -msgstr "ÒѾÔÚÖ¸Áî±íÖж¨ÒåÁË¡°%.*s¡±" +msgstr "å·²ç»åœ¨æŒ‡ä»¤è¡¨ä¸å®šä¹‰äº†â€œ%.*sâ€" -#: locale/programs/ld-collate.c:411 +#: locale/programs/ld-collate.c:413 #, c-format msgid "`%.*s' already defined as collating symbol" msgstr "" -#: locale/programs/ld-collate.c:418 +#: locale/programs/ld-collate.c:420 #, c-format msgid "`%.*s' already defined as collating element" msgstr "" -#: locale/programs/ld-collate.c:449 locale/programs/ld-collate.c:475 +#: locale/programs/ld-collate.c:451 locale/programs/ld-collate.c:477 #, c-format msgid "%s: `forward' and `backward' are mutually excluding each other" -msgstr "%s£º¡°forward¡±ºÍ¡°backward¡±ÊÇ»¥³âµÄ" +msgstr "%s:“forwardâ€å’Œâ€œbackwardâ€æ˜¯äº’斥的" -#: locale/programs/ld-collate.c:459 locale/programs/ld-collate.c:485 -#: locale/programs/ld-collate.c:501 +#: locale/programs/ld-collate.c:461 locale/programs/ld-collate.c:487 +#: locale/programs/ld-collate.c:503 #, c-format msgid "%s: `%s' mentioned more than once in definition of weight %d" msgstr "" -#: locale/programs/ld-collate.c:557 +#: locale/programs/ld-collate.c:559 #, c-format msgid "%s: too many rules; first entry only had %d" -msgstr "%s£º¹æÔò¹ý¶à£»µÚÒ»¸öÌõÄ¿Ö»º¬ÓÐ %d" +msgstr "%s:规则过多;第一个æ¡ç›®åªå«æœ‰ %d" -#: locale/programs/ld-collate.c:593 +#: locale/programs/ld-collate.c:595 #, c-format msgid "%s: not enough sorting rules" -msgstr "%s£ºÅÅÐò¹æÔò²»×ã" +msgstr "%s:排åºè§„则ä¸è¶³" -#: locale/programs/ld-collate.c:759 +#: locale/programs/ld-collate.c:760 #, c-format msgid "%s: empty weight string not allowed" -msgstr "%s£º²»ÔÊÐí¿ÕȨ×Ö·û´®" +msgstr "%s:ä¸å…许空æƒå—符串" -#: locale/programs/ld-collate.c:854 +#: locale/programs/ld-collate.c:855 #, c-format msgid "%s: weights must use the same ellipsis symbol as the name" msgstr "" -#: locale/programs/ld-collate.c:910 +#: locale/programs/ld-collate.c:911 #, c-format msgid "%s: too many values" -msgstr "%s£ºÖµ¹ý¶à" +msgstr "%s:值过多" -#: locale/programs/ld-collate.c:1023 locale/programs/ld-collate.c:1194 +#: locale/programs/ld-collate.c:1031 locale/programs/ld-collate.c:1206 #, c-format msgid "order for `%.*s' already defined at %s:%Zu" msgstr "" -#: locale/programs/ld-collate.c:1073 +#: locale/programs/ld-collate.c:1081 #, c-format msgid "%s: the start and the end symbol of a range must stand for characters" msgstr "" -#: locale/programs/ld-collate.c:1100 +#: locale/programs/ld-collate.c:1108 #, c-format msgid "%s: byte sequences of first and last character must have the same length" -msgstr "%s£º×Ö½ÚÐòÁеĵÚÒ»¸öºÍ×îºóÒ»¸ö×Ö·ûµÄ³Ì¶È±ØÐëÏàͬ" +msgstr "%s:å—节åºåˆ—的第一个和最åŽä¸€ä¸ªå—符的长度必须相åŒ" -#: locale/programs/ld-collate.c:1142 +#: 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 "" +msgid "%s: byte sequence of first character of range is not lower than that of the last character" +msgstr "%s:范围的å—节åºåˆ—的第一个å—符ä¸å°äºŽæœ€åŽä¸€ä¸ªå—符" -#: locale/programs/ld-collate.c:1263 +#: locale/programs/ld-collate.c:1275 #, c-format msgid "%s: symbolic range ellipsis must not directly follow `order_start'" msgstr "" -#: locale/programs/ld-collate.c:1267 +#: locale/programs/ld-collate.c:1279 #, c-format msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'" msgstr "" -#: locale/programs/ld-collate.c:1287 locale/programs/ld-ctype.c:1467 +#: locale/programs/ld-collate.c:1299 locale/programs/ld-ctype.c:1477 #, c-format msgid "`%s' and `%.*s' are not valid names for symbolic range" -msgstr "" +msgstr "“%sâ€å’Œâ€œ%.*sâ€æ˜¯æ— 效的符å·èŒƒå›´å" -#: locale/programs/ld-collate.c:1333 locale/programs/ld-collate.c:3712 +#: locale/programs/ld-collate.c:1349 locale/programs/ld-collate.c:3763 #, c-format msgid "%s: order for `%.*s' already defined at %s:%Zu" msgstr "" -#: locale/programs/ld-collate.c:1342 +#: locale/programs/ld-collate.c:1358 #, c-format msgid "%s: `%s' must be a character" -msgstr "%s£º¡°%s¡±±ØÐëÊÇÒ»¸ö×Ö·û" +msgstr "%s:“%sâ€å¿…须是一个å—符" -#: locale/programs/ld-collate.c:1535 +#: locale/programs/ld-collate.c:1552 #, c-format msgid "%s: `position' must be used for a specific level in all sections or none" msgstr "" -#: locale/programs/ld-collate.c:1560 +#: locale/programs/ld-collate.c:1577 #, c-format msgid "symbol `%s' not defined" -msgstr "·ûºÅ¡°%s¡±Î´¶¨Òå" +msgstr "符å·â€œ%sâ€æœªå®šä¹‰" -#: locale/programs/ld-collate.c:1636 locale/programs/ld-collate.c:1742 +#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759 #, c-format msgid "symbol `%s' has the same encoding as" msgstr "" -#: locale/programs/ld-collate.c:1640 locale/programs/ld-collate.c:1746 +#: locale/programs/ld-collate.c:1657 locale/programs/ld-collate.c:1763 #, c-format msgid "symbol `%s'" -msgstr "·ûºÅ¡°%s¡±" +msgstr "符å·â€œ%sâ€" -#: locale/programs/ld-collate.c:1788 +#: locale/programs/ld-collate.c:1805 +#, c-format msgid "no definition of `UNDEFINED'" -msgstr "ûÓйØÓÚ¡°UNDEFINIED¡±µÄ¶¨Òå" +msgstr "没有关于“UNDEFINIEDâ€çš„定义" -#: locale/programs/ld-collate.c:1817 +#: locale/programs/ld-collate.c:1834 +#, c-format msgid "too many errors; giving up" -msgstr "´íÎó¹ý¶à£»·ÅÆú" +msgstr "错误过多;放弃" -#: locale/programs/ld-collate.c:2720 +#: locale/programs/ld-collate.c:2762 #, c-format msgid "%s: duplicate definition of `%s'" -msgstr "%s£ºÖظ´¶¨Òå¡°%s¡±" +msgstr "%s:é‡å¤å®šä¹‰â€œ%sâ€" -#: locale/programs/ld-collate.c:2756 +#: locale/programs/ld-collate.c:2798 #, c-format msgid "%s: duplicate declaration of section `%s'" -msgstr "%s£ºÖظ´ÉùÃ÷½Ú¡°%s¡±" +msgstr "%s:é‡å¤å£°æ˜ŽèŠ‚“%sâ€" -#: locale/programs/ld-collate.c:2895 +#: locale/programs/ld-collate.c:2937 #, c-format msgid "%s: unknown character in collating symbol name" msgstr "" -#: locale/programs/ld-collate.c:3027 +#: locale/programs/ld-collate.c:3069 #, c-format msgid "%s: unknown character in equivalent definition name" -msgstr "%s£ºµÈ¼Û¶¨ÒåÃûÖÐδ֪µÄ×Ö·û" +msgstr "%s:ç‰ä»·å®šä¹‰åä¸æœªçŸ¥çš„å—符" -#: locale/programs/ld-collate.c:3040 +#: locale/programs/ld-collate.c:3082 #, c-format msgid "%s: unknown character in equivalent definition value" -msgstr "%s£ºµÈ¼Û¶¨ÒåÖµÖÐδ֪µÄ×Ö·û" +msgstr "%s:ç‰ä»·å®šä¹‰å€¼ä¸æœªçŸ¥çš„å—符" -#: locale/programs/ld-collate.c:3050 +#: locale/programs/ld-collate.c:3092 #, c-format msgid "%s: unknown symbol `%s' in equivalent definition" -msgstr "%s£ºµÈ¼Û¶¨ÒåÖÐδ֪µÄ·ûºÅ¡°%s¡±" +msgstr "%s:ç‰ä»·å®šä¹‰ä¸æœªçŸ¥çš„符å·â€œ%sâ€" -#: locale/programs/ld-collate.c:3059 +#: locale/programs/ld-collate.c:3101 msgid "error while adding equivalent collating symbol" msgstr "" -#: locale/programs/ld-collate.c:3089 +#: locale/programs/ld-collate.c:3131 #, c-format msgid "duplicate definition of script `%s'" -msgstr "Öظ´¶¨Òå½Å±¾¡°%s¡±" +msgstr "é‡å¤å®šä¹‰è„šæœ¬â€œ%sâ€" -#: locale/programs/ld-collate.c:3137 +#: locale/programs/ld-collate.c:3179 #, c-format -msgid "%s: unknown section name `%s'" -msgstr "%s£ºÎ´ÖªµÄ½ÚÃû¡°%s¡±" +msgid "%s: unknown section name `%.*s'" +msgstr "%s:未知的节å“%.*sâ€" -#: locale/programs/ld-collate.c:3165 +#: locale/programs/ld-collate.c:3208 #, c-format msgid "%s: multiple order definitions for section `%s'" -msgstr "%s£º¹ØÓÚ¡°%s¡±½Ú³öÏÖ¶à¸ö˳Ðò¶¨Òå" +msgstr "%s:关于“%sâ€èŠ‚出现多个顺åºå®šä¹‰" -#: locale/programs/ld-collate.c:3190 +#: locale/programs/ld-collate.c:3233 #, c-format msgid "%s: invalid number of sorting rules" -msgstr "%s£ºÅÅÐò¹æÔòµÄÊýÁ¿ÎÞЧ" +msgstr "%s:排åºè§„则的数é‡æ— 效" -#: locale/programs/ld-collate.c:3217 +#: locale/programs/ld-collate.c:3260 #, c-format msgid "%s: multiple order definitions for unnamed section" -msgstr "%s£º¹ØÓÚδÃüÃû½Ú³öÏÖ¶à¸ö˳Ðò¶¨Òå" +msgstr "%s:关于未命å节出现多个顺åºå®šä¹‰" -#: locale/programs/ld-collate.c:3271 locale/programs/ld-collate.c:3394 -#: locale/programs/ld-collate.c:3753 +#: locale/programs/ld-collate.c:3314 locale/programs/ld-collate.c:3442 +#: locale/programs/ld-collate.c:3804 #, c-format msgid "%s: missing `order_end' keyword" -msgstr "%s£ºÒÅ©¹Ø¼ü×Ö¡°order_end¡±" +msgstr "%s:é—æ¼å…³é”®å—“order_endâ€" -#: locale/programs/ld-collate.c:3329 +#: locale/programs/ld-collate.c:3375 #, c-format msgid "%s: order for collating symbol %.*s not yet defined" msgstr "" -#: locale/programs/ld-collate.c:3345 +#: locale/programs/ld-collate.c:3393 #, c-format msgid "%s: order for collating element %.*s not yet defined" msgstr "" -#: locale/programs/ld-collate.c:3356 +#: locale/programs/ld-collate.c:3404 #, c-format msgid "%s: cannot reorder after %.*s: symbol not known" msgstr "" -#: locale/programs/ld-collate.c:3408 locale/programs/ld-collate.c:3765 +#: locale/programs/ld-collate.c:3456 locale/programs/ld-collate.c:3816 #, c-format msgid "%s: missing `reorder-end' keyword" -msgstr "%s£ºÒÔºó¹Ø¼ü×Ö¡°reorder-end¡±" +msgstr "%s:以åŽå…³é”®å—“reorder-endâ€" -#: locale/programs/ld-collate.c:3442 locale/programs/ld-collate.c:3637 +#: locale/programs/ld-collate.c:3490 locale/programs/ld-collate.c:3688 #, c-format msgid "%s: section `%.*s' not known" -msgstr "%s£ºÎ´ÖªµÄ½Ú¡°%.*s¡±" +msgstr "%s:未知的节“%.*sâ€" -#: locale/programs/ld-collate.c:3507 +#: locale/programs/ld-collate.c:3555 #, c-format msgid "%s: bad symbol <%.*s>" msgstr "" -#: locale/programs/ld-collate.c:3700 +#: locale/programs/ld-collate.c:3751 #, c-format msgid "%s: cannot have `%s' as end of ellipsis range" msgstr "" -#: locale/programs/ld-collate.c:3749 +#: locale/programs/ld-collate.c:3800 #, c-format msgid "%s: empty category description not allowed" -msgstr "%s£º²»ÔÊÐí¿Õ·¶³ëÃèÊö" +msgstr "%s:ä¸å…许空范畴æè¿°" -#: locale/programs/ld-collate.c:3768 +#: locale/programs/ld-collate.c:3819 #, c-format msgid "%s: missing `reorder-sections-end' keyword" -msgstr "%s£ºÒÅ©¹Ø¼ü×Ö¡°reorder-sections-end¡±" +msgstr "%s:é—æ¼å…³é”®å—“reorder-sections-endâ€" -#: locale/programs/ld-ctype.c:435 +#: locale/programs/ld-ctype.c:439 +#, c-format msgid "No character set name specified in charmap" -msgstr "×Ö·ûÓ³Éä±íÖÐδ¸ø³ö×Ö·û¼¯Ãû³Æ" +msgstr "å—ç¬¦æ˜ å°„è¡¨ä¸æœªç»™å‡ºå—符集å称" -#: locale/programs/ld-ctype.c:464 +#: locale/programs/ld-ctype.c:468 #, c-format msgid "character L'\\u%0*x' in class `%s' must be in class `%s'" msgstr "" -# msgstr "Àà¡°%2$s¡±ÖеÄ×Ö·û L'\\u%0*x' ±ØÐëÊôÓÚÀà¡°%3$s¡±" -#: locale/programs/ld-ctype.c:479 +# msgstr "类“%2$sâ€ä¸çš„å—符 L'\\u%0*x' 必须属于类“%3$sâ€" +#: locale/programs/ld-ctype.c:483 #, c-format msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'" msgstr "" -#: locale/programs/ld-ctype.c:493 locale/programs/ld-ctype.c:551 +#: locale/programs/ld-ctype.c:497 locale/programs/ld-ctype.c:555 #, c-format msgid "internal error in %s, line %u" -msgstr "ÔÚ %s µÄµÚ %u ÐгöÏÖÄÚ²¿´íÎó" +msgstr "在 %s 的第 %u 行出现内部错误" -#: locale/programs/ld-ctype.c:522 +#: locale/programs/ld-ctype.c:526 #, c-format msgid "character '%s' in class `%s' must be in class `%s'" -msgstr "Àà¡°%2$s¡±ÖеÄ×Ö·û¡°%1$s¡±±ØÐëÊôÓÚÀà¡°%3$s¡±" +msgstr "类“%2$sâ€ä¸çš„å—符“%1$sâ€å¿…须属于类“%3$sâ€" -#: locale/programs/ld-ctype.c:538 +#: locale/programs/ld-ctype.c:542 #, c-format msgid "character '%s' in class `%s' must not be in class `%s'" -msgstr "Àà¡°%2$s¡±ÖеÄ×Ö·û¡°%1$s¡±²»µÃÊôÓÚÀà¡°%3$s¡±" +msgstr "类“%2$sâ€ä¸çš„å—符“%1$sâ€ä¸å¾—属于类“%3$sâ€" -#: locale/programs/ld-ctype.c:568 locale/programs/ld-ctype.c:606 +#: locale/programs/ld-ctype.c:572 locale/programs/ld-ctype.c:610 #, c-format msgid "<SP> character not in class `%s'" -msgstr "×Ö·û <SP> ²»ÔÚÀà¡°%s¡±ÖÐ" +msgstr "å—符 <SP> ä¸åœ¨ç±»â€œ%sâ€ä¸" -#: locale/programs/ld-ctype.c:580 locale/programs/ld-ctype.c:617 +#: locale/programs/ld-ctype.c:584 locale/programs/ld-ctype.c:621 #, c-format msgid "<SP> character must not be in class `%s'" -msgstr "×Ö·û <SP> ²»ÄÜÊôÓÚÀà¡°%s¡±" +msgstr "å—符 <SP> ä¸èƒ½å±žäºŽç±»â€œ%sâ€" -#: locale/programs/ld-ctype.c:595 +#: locale/programs/ld-ctype.c:599 +#, c-format msgid "character <SP> not defined in character map" -msgstr "×Ö·ûÓ³ÉäÖÐ䶨Òå×Ö·û <SP>" +msgstr "å—ç¬¦æ˜ å°„ä¸æœªå®šä¹‰å—符 <SP>" -#: locale/programs/ld-ctype.c:709 +#: locale/programs/ld-ctype.c:714 +#, c-format msgid "`digit' category has not entries in groups of ten" msgstr "" -#: locale/programs/ld-ctype.c:758 +#: locale/programs/ld-ctype.c:763 +#, c-format msgid "no input digits defined and none of the standard names in the charmap" msgstr "" -#: locale/programs/ld-ctype.c:823 +#: locale/programs/ld-ctype.c:828 +#, c-format msgid "not all characters used in `outdigit' are available in the charmap" msgstr "" -#: locale/programs/ld-ctype.c:840 +#: locale/programs/ld-ctype.c:845 +#, c-format msgid "not all characters used in `outdigit' are available in the repertoire" msgstr "" -#: locale/programs/ld-ctype.c:1235 +#: locale/programs/ld-ctype.c:1245 #, c-format msgid "character class `%s' already defined" -msgstr "×Ö·ûÀà¡°%s¡±ÒѶ¨Òå" +msgstr "å—符类“%sâ€å·²å®šä¹‰" -#: locale/programs/ld-ctype.c:1241 +#: locale/programs/ld-ctype.c:1251 #, c-format msgid "implementation limit: no more than %Zd character classes allowed" msgstr "" -#: locale/programs/ld-ctype.c:1267 +#: locale/programs/ld-ctype.c:1277 #, c-format msgid "character map `%s' already defined" msgstr "" -#: locale/programs/ld-ctype.c:1273 +#: locale/programs/ld-ctype.c:1283 #, c-format msgid "implementation limit: no more than %d character maps allowed" -msgstr "ʵÏÖÏÞÖÆ£º²»µÃ¶àÓÚ %d ¸ö×Ö·ûÓ³Éä±í" +msgstr "实现é™åˆ¶ï¼šä¸å¾—多于 %d 个å—ç¬¦æ˜ å°„è¡¨" -#: locale/programs/ld-ctype.c:1538 locale/programs/ld-ctype.c:1663 -#: locale/programs/ld-ctype.c:1769 locale/programs/ld-ctype.c:2455 -#: locale/programs/ld-ctype.c:3443 +#: locale/programs/ld-ctype.c:1548 locale/programs/ld-ctype.c:1673 +#: locale/programs/ld-ctype.c:1779 locale/programs/ld-ctype.c:2471 +#: locale/programs/ld-ctype.c:3467 #, c-format msgid "%s: field `%s' does not contain exactly ten entries" -msgstr "%s£ºÓò¡°%s¡±º¬ÓÐÌõÄ¿µÄ¸öÊý²»ÊÇÊ®¸ö" +msgstr "%s:域“%sâ€å«æœ‰æ¡ç›®çš„个数ä¸æ˜¯å个" -#: locale/programs/ld-ctype.c:1566 locale/programs/ld-ctype.c:2137 +#: locale/programs/ld-ctype.c:1576 locale/programs/ld-ctype.c:2150 #, c-format msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>" msgstr "" -#: locale/programs/ld-ctype.c:1693 +#: locale/programs/ld-ctype.c:1703 msgid "start and end character sequence of range must have the same length" -msgstr "·¶Î§µÄÆðʼºÍÖÕÖ¹×Ö·ûÐòÁбØÐë¾ßÓÐÏàͬµÄ³¤¶È" +msgstr "范围的起始和终æ¢å—符åºåˆ—必须具有相åŒçš„长度" -#: locale/programs/ld-ctype.c:1700 +#: locale/programs/ld-ctype.c:1710 msgid "to-value character sequence is smaller than from-value sequence" msgstr "" -#: locale/programs/ld-ctype.c:2057 locale/programs/ld-ctype.c:2108 +#: locale/programs/ld-ctype.c:2070 locale/programs/ld-ctype.c:2121 msgid "premature end of `translit_ignore' definition" msgstr "" -#: locale/programs/ld-ctype.c:2063 locale/programs/ld-ctype.c:2114 -#: locale/programs/ld-ctype.c:2156 +#: locale/programs/ld-ctype.c:2076 locale/programs/ld-ctype.c:2127 +#: locale/programs/ld-ctype.c:2169 msgid "syntax error" -msgstr "Óï·¨´íÎó" +msgstr "è¯æ³•é”™è¯¯" -#: locale/programs/ld-ctype.c:2287 +#: locale/programs/ld-ctype.c:2303 #, c-format msgid "%s: syntax error in definition of new character class" -msgstr "%s£ºÔÚ¶¨ÒåÐÂ×Ö·û¼¯ºÏÖгöÏÖÓï·¨´íÎó" +msgstr "%s:在定义新å—符集åˆä¸å‡ºçŽ°è¯æ³•é”™è¯¯" -#: locale/programs/ld-ctype.c:2302 +#: locale/programs/ld-ctype.c:2318 #, c-format msgid "%s: syntax error in definition of new character map" -msgstr "%s£ºÔÚÐÂ×Ö·ûÓ³ÉäÖгöÏÖÓï·¨´íÎó" +msgstr "%s:在新å—ç¬¦æ˜ å°„ä¸å‡ºçŽ°è¯æ³•é”™è¯¯" -#: locale/programs/ld-ctype.c:2477 +#: locale/programs/ld-ctype.c:2493 msgid "ellipsis range must be marked by two operands of same type" msgstr "" -#: locale/programs/ld-ctype.c:2486 +#: locale/programs/ld-ctype.c:2502 msgid "with symbolic name range values the absolute ellipsis `...' must not be used" msgstr "" -#: locale/programs/ld-ctype.c:2501 +#: locale/programs/ld-ctype.c:2517 msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'" msgstr "" -#: locale/programs/ld-ctype.c:2515 +#: locale/programs/ld-ctype.c:2531 msgid "with character code range values one must use the absolute ellipsis `...'" msgstr "" -#: locale/programs/ld-ctype.c:2666 +#: locale/programs/ld-ctype.c:2682 #, c-format msgid "duplicated definition for mapping `%s'" -msgstr "Öظ´¶¨ÒåÓ³Éä¡°%s¡±" +msgstr "é‡å¤å®šä¹‰æ˜ 射“%sâ€" -#: locale/programs/ld-ctype.c:2744 locale/programs/ld-ctype.c:2888 +#: locale/programs/ld-ctype.c:2768 locale/programs/ld-ctype.c:2912 #, c-format msgid "%s: `translit_start' section does not end with `translit_end'" -msgstr "%s£º¡°translit_start¡±½Ú²»ÒÔ¡°translit_end¡±½áÊø" +msgstr "%s:“translit_startâ€èŠ‚ä¸ä»¥â€œtranslit_endâ€ç»“æŸ" -#: locale/programs/ld-ctype.c:2839 +#: locale/programs/ld-ctype.c:2863 #, c-format msgid "%s: duplicate `default_missing' definition" -msgstr "%s£ºÖظ´¶¨Òå¡°default_missing¡±" +msgstr "%s:é‡å¤å®šä¹‰â€œdefault_missingâ€" -#: locale/programs/ld-ctype.c:2844 +#: locale/programs/ld-ctype.c:2868 msgid "previous definition was here" -msgstr "Ç°Ò»¸ö¶¨ÒåÔÚÕâÀï" +msgstr "å‰ä¸€ä¸ªå®šä¹‰åœ¨è¿™é‡Œ" -#: locale/programs/ld-ctype.c:2866 +#: locale/programs/ld-ctype.c:2890 #, c-format msgid "%s: no representable `default_missing' definition found" msgstr "" -#: locale/programs/ld-ctype.c:3019 -#, c-format -msgid "%s: character `%s' not defined in charmap while needed as default value" -msgstr "" - -#: locale/programs/ld-ctype.c:3024 locale/programs/ld-ctype.c:3108 -#: locale/programs/ld-ctype.c:3128 locale/programs/ld-ctype.c:3149 -#: locale/programs/ld-ctype.c:3170 locale/programs/ld-ctype.c:3191 -#: locale/programs/ld-ctype.c:3212 locale/programs/ld-ctype.c:3252 -#: locale/programs/ld-ctype.c:3273 locale/programs/ld-ctype.c:3340 -#, c-format -msgid "%s: character `%s' in charmap not representable with one byte" -msgstr "" - -#: locale/programs/ld-ctype.c:3103 locale/programs/ld-ctype.c:3123 -#: locale/programs/ld-ctype.c:3165 locale/programs/ld-ctype.c:3186 -#: locale/programs/ld-ctype.c:3207 locale/programs/ld-ctype.c:3247 -#: locale/programs/ld-ctype.c:3268 locale/programs/ld-ctype.c:3335 -#: locale/programs/ld-ctype.c:3377 locale/programs/ld-ctype.c:3402 +#: locale/programs/ld-ctype.c:3043 locale/programs/ld-ctype.c:3127 +#: locale/programs/ld-ctype.c:3147 locale/programs/ld-ctype.c:3168 +#: locale/programs/ld-ctype.c:3189 locale/programs/ld-ctype.c:3210 +#: locale/programs/ld-ctype.c:3231 locale/programs/ld-ctype.c:3271 +#: locale/programs/ld-ctype.c:3292 locale/programs/ld-ctype.c:3359 +#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426 #, c-format msgid "%s: character `%s' not defined while needed as default value" msgstr "" -# msgstr "Àà¡°%s¡±ÖеÄ×Ö·û L'\\u%0*x' ²»µÃÊôÓÚÀà¡°%s¡±" -#: locale/programs/ld-ctype.c:3144 +#: locale/programs/ld-ctype.c:3048 locale/programs/ld-ctype.c:3132 +#: locale/programs/ld-ctype.c:3152 locale/programs/ld-ctype.c:3173 +#: locale/programs/ld-ctype.c:3194 locale/programs/ld-ctype.c:3215 +#: locale/programs/ld-ctype.c:3236 locale/programs/ld-ctype.c:3276 +#: locale/programs/ld-ctype.c:3297 locale/programs/ld-ctype.c:3364 #, c-format -msgid "character `%s' not defined while needed as default value" +msgid "%s: character `%s' in charmap not representable with one byte" msgstr "" -#: locale/programs/ld-ctype.c:3384 locale/programs/ld-ctype.c:3409 +#: locale/programs/ld-ctype.c:3408 locale/programs/ld-ctype.c:3433 #, c-format msgid "%s: character `%s' needed as default value not representable with one byte" -msgstr "%s£ºÐèÒª×÷ΪĬÈÏÖµµÄ×Ö·û¡°%s¡±ÎÞ·¨ÒÔµ¥¸ö×Ö½ÚÀ´±íʾ" +msgstr "%s:需è¦ä½œä¸ºé»˜è®¤å€¼çš„å—符“%sâ€æ— 法以å•ä¸ªå—节æ¥è¡¨ç¤º" -#: locale/programs/ld-ctype.c:3464 +#: locale/programs/ld-ctype.c:3489 +#, c-format msgid "no output digits defined and none of the standard names in the charmap" msgstr "" -#: locale/programs/ld-ctype.c:3755 +#: locale/programs/ld-ctype.c:3780 #, c-format msgid "%s: transliteration data from locale `%s' not available" msgstr "" -#: locale/programs/ld-ctype.c:3851 +#: locale/programs/ld-ctype.c:3881 #, c-format msgid "%s: table for class \"%s\": %lu bytes\n" msgstr "" -#: locale/programs/ld-ctype.c:3920 +#: locale/programs/ld-ctype.c:3950 #, c-format msgid "%s: table for map \"%s\": %lu bytes\n" msgstr "" -#: locale/programs/ld-ctype.c:4053 +#: locale/programs/ld-ctype.c:4083 #, c-format msgid "%s: table for width: %lu bytes\n" msgstr "" -#: locale/programs/ld-identification.c:171 +#: locale/programs/ld-identification.c:170 #, c-format msgid "%s: no identification for category `%s'" msgstr "" -#: locale/programs/ld-identification.c:436 +#: locale/programs/ld-identification.c:435 #, c-format msgid "%s: duplicate category version definition" msgstr "" -#: locale/programs/ld-measurement.c:114 +#: locale/programs/ld-measurement.c:113 #, c-format msgid "%s: invalid value for field `%s'" -msgstr "%s£ºÓò¡°%s¡±ÖеÄÖµÎÞЧ" +msgstr "%s:域“%sâ€ä¸çš„å€¼æ— æ•ˆ" -#: locale/programs/ld-messages.c:115 locale/programs/ld-messages.c:149 +#: locale/programs/ld-messages.c:114 locale/programs/ld-messages.c:148 #, c-format msgid "%s: field `%s' undefined" -msgstr "%s£º½â³ýÓò¡°%s¡±µÄ¶¨Òå" +msgstr "%s:解除域“%sâ€çš„定义" -#: locale/programs/ld-messages.c:122 locale/programs/ld-messages.c:156 +#: locale/programs/ld-messages.c:121 locale/programs/ld-messages.c:155 +#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:118 #, c-format msgid "%s: value for field `%s' must not be an empty string" -msgstr "%s£ºÓò¡°%s¡±µÄÖµ²»ÄÜÊÇ¿Õ×Ö·û´®" +msgstr "%s:域“%sâ€çš„值ä¸èƒ½æ˜¯ç©ºå—符串" -#: locale/programs/ld-messages.c:138 locale/programs/ld-messages.c:172 +#: locale/programs/ld-messages.c:137 locale/programs/ld-messages.c:171 #, c-format msgid "%s: no correct regular expression for field `%s': %s" -msgstr "%s£ºÓò¡°%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¡±µÄÖµµÄ³¤¶È´íÎó" +msgstr "%s:域“int_curr_symbolâ€çš„值的长度错误" -#: locale/programs/ld-monetary.c:232 +#: 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:250 locale/programs/ld-numeric.c:119 -#, c-format -msgid "%s: value for field `%s' must not be the empty string" -msgstr "%s£ºÓò¡°%s¡±µÄÖµ²»ÄÜÊÇ¿Õ×Ö·û´®" +msgstr "%s:域“int_curr_symbolâ€çš„值于 ISO 4217 ä¸ä»»ä½•ä¸€ä¸ªåˆæ³•çš„å称都ä¸å¯¹åº”" -#: locale/programs/ld-monetary.c:278 locale/programs/ld-monetary.c:308 +#: locale/programs/ld-monetary.c:285 locale/programs/ld-monetary.c:315 #, c-format msgid "%s: value for field `%s' must be in range %d...%d" -msgstr "%s£º¡°%s¡±ÓòµÄÖµ±ØÐëÔÚ %d...%d µÄ·¶Î§ÄÚ" +msgstr "%s:“%sâ€åŸŸçš„值必须在 %d...%d 的范围内" -#: locale/programs/ld-monetary.c:740 locale/programs/ld-numeric.c:275 +#: locale/programs/ld-monetary.c:747 locale/programs/ld-numeric.c:274 #, c-format msgid "%s: value for field `%s' must be a single character" -msgstr "%s£º¡°%s¡±ÓòµÄÖµ±ØÐëÊǵ¥¸ö×Ö·û" +msgstr "%s:“%sâ€åŸŸçš„值必须是å•ä¸ªå—符" -#: locale/programs/ld-monetary.c:837 locale/programs/ld-numeric.c:319 +#: locale/programs/ld-monetary.c:844 locale/programs/ld-numeric.c:318 #, c-format msgid "%s: `-1' must be last entry in `%s' field" -msgstr "%s£º¡°-1¡±±ØÐëÊÇ¡°%s¡±ÓòÖеÄ×îºóÒ»¸öÌõÄ¿" +msgstr "%s:“-1â€å¿…须是“%sâ€åŸŸä¸çš„最åŽä¸€ä¸ªæ¡ç›®" -#: locale/programs/ld-monetary.c:859 locale/programs/ld-numeric.c:340 +#: locale/programs/ld-monetary.c:866 locale/programs/ld-numeric.c:335 #, c-format msgid "%s: values for field `%s' must be smaller than 127" -msgstr "%s£ºÓò¡°%s¡±µÄÖµ±ØÐëСÓÚ 127" +msgstr "%s:域“%sâ€çš„值必须å°äºŽ 127" -#: locale/programs/ld-monetary.c:902 +#: locale/programs/ld-monetary.c:909 msgid "conversion rate value cannot be zero" -msgstr "ת»»ÂʵÄÖµ²»ÄÜΪ 0" +msgstr "转æ¢çŽ‡çš„值ä¸èƒ½ä¸º 0" -#: locale/programs/ld-name.c:130 locale/programs/ld-telephone.c:127 -#: locale/programs/ld-telephone.c:150 +#: locale/programs/ld-name.c:129 locale/programs/ld-telephone.c:126 +#: locale/programs/ld-telephone.c:149 #, c-format msgid "%s: invalid escape sequence in field `%s'" -msgstr "%s£ºÓò¡°%s¡±Öк¬ÓÐÎÞЧתÒåÐòÁÐ" +msgstr "%s:域“%sâ€ä¸å«æœ‰æ— 效转义åºåˆ—" -#: locale/programs/ld-time.c:248 +#: locale/programs/ld-time.c:247 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'" msgstr "" -#: locale/programs/ld-time.c:259 +#: locale/programs/ld-time.c:258 #, c-format msgid "%s: direction flag in string %Zd in `era' field is not a single character" msgstr "" -#: locale/programs/ld-time.c:272 +#: locale/programs/ld-time.c:271 #, c-format msgid "%s: invalid number for offset in string %Zd in `era' field" msgstr "" -#: locale/programs/ld-time.c:280 +#: locale/programs/ld-time.c:279 #, c-format msgid "%s: garbage at end of offset value in string %Zd in `era' field" msgstr "" -#: locale/programs/ld-time.c:331 +#: locale/programs/ld-time.c:330 #, c-format msgid "%s: invalid starting date in string %Zd in `era' field" msgstr "" -#: locale/programs/ld-time.c:340 +#: locale/programs/ld-time.c:339 #, c-format msgid "%s: garbage at end of starting date in string %Zd in `era' field " msgstr "" -#: locale/programs/ld-time.c:359 +#: locale/programs/ld-time.c:358 #, c-format msgid "%s: starting date is invalid in string %Zd in `era' field" msgstr "" -#: locale/programs/ld-time.c:408 +#: locale/programs/ld-time.c:407 #, c-format msgid "%s: invalid stopping date in string %Zd in `era' field" msgstr "" -#: locale/programs/ld-time.c:417 +#: locale/programs/ld-time.c:416 #, c-format msgid "%s: garbage at end of stopping date in string %Zd in `era' field" msgstr "" -#: locale/programs/ld-time.c:436 +#: locale/programs/ld-time.c:435 #, c-format msgid "%s: stopping date is invalid in string %Zd in `era' field" msgstr "" -#: locale/programs/ld-time.c:445 +#: locale/programs/ld-time.c:444 #, c-format msgid "%s: missing era name in string %Zd in `era' field" msgstr "" -#: locale/programs/ld-time.c:457 +#: locale/programs/ld-time.c:456 #, c-format msgid "%s: missing era format in string %Zd in `era' field" msgstr "" -#: locale/programs/ld-time.c:486 +#: locale/programs/ld-time.c:497 #, c-format msgid "%s: third operand for value of field `%s' must not be larger than %d" msgstr "" -#: 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 +#: locale/programs/ld-time.c:505 locale/programs/ld-time.c:513 +#: locale/programs/ld-time.c:521 #, c-format msgid "%s: values for field `%s' must not be larger than %d" -msgstr "%s£ºÓò¡°%s¡±µÄÖµ²»ÄÜ´óÓÚ %d" +msgstr "%s:域“%sâ€çš„值ä¸èƒ½å¤§äºŽ %d" -#: locale/programs/ld-time.c:984 +#: locale/programs/ld-time.c:1004 #, c-format msgid "%s: too few values for field `%s'" -msgstr "%s£ºÓò¡°%s¡±µÄÖµ¹ýÉÙ" +msgstr "%s:域“%sâ€çš„值过少" -#: locale/programs/ld-time.c:1029 +#: locale/programs/ld-time.c:1049 msgid "extra trailing semicolon" -msgstr "¶àÓàµÄÖÕÖ¹·ÖºÅ" +msgstr "多余的终æ¢åˆ†å·" -#: locale/programs/ld-time.c:1032 +#: locale/programs/ld-time.c:1052 #, c-format msgid "%s: too many values for field `%s'" -msgstr "%s£ºÓò¡°%s¡±µÄÖµ¹ý¶à" +msgstr "%s:域“%sâ€çš„值过多" + +#: locale/programs/linereader.c:130 +msgid "trailing garbage at end of line" +msgstr "" -#: locale/programs/linereader.c:275 +#: locale/programs/linereader.c:298 msgid "garbage at end of number" -msgstr "Êý×ÖĩβÓÐÀ¬»ø" +msgstr "æ•°å—末尾有垃圾" -#: locale/programs/linereader.c:387 +#: locale/programs/linereader.c:410 msgid "garbage at end of character code specification" msgstr "" -#: locale/programs/linereader.c:473 +#: locale/programs/linereader.c:496 msgid "unterminated symbolic name" -msgstr "δÖÕÖ¹µÄ·ûºÅÃû" - -#: locale/programs/linereader.c:537 catgets/gencat.c:1195 -msgid "invalid escape sequence" -msgstr "ÎÞЧµÄתÒåÐòÁÐ" +msgstr "未终æ¢çš„符å·å" -#: locale/programs/linereader.c:600 +#: locale/programs/linereader.c:623 msgid "illegal escape sequence at end of string" -msgstr "×Ö·û´®Ä©Î²µÄ·Ç·¨×ªÒåÐòÁÐ" +msgstr "å—符串末尾的éžæ³•è½¬ä¹‰åºåˆ—" -#: locale/programs/linereader.c:604 locale/programs/linereader.c:832 +#: locale/programs/linereader.c:627 locale/programs/linereader.c:855 msgid "unterminated string" -msgstr "δÖÕÖ¹µÄ×Ö·û´®" +msgstr "未终æ¢çš„å—符串" -#: locale/programs/linereader.c:646 +#: locale/programs/linereader.c:669 msgid "non-symbolic character value should not be used" -msgstr "²»Ó¦¸ÃʹÓ÷ǷûºÅ×Ö·ûµÄÖµ" +msgstr "ä¸åº”该使用éžç¬¦å·å—符的值" -#: locale/programs/linereader.c:793 +#: locale/programs/linereader.c:816 #, c-format msgid "symbol `%.*s' not in charmap" msgstr "" -#: locale/programs/linereader.c:814 +#: locale/programs/linereader.c:837 #, c-format msgid "symbol `%.*s' not in repertoire map" msgstr "" -#: locale/programs/linereader.h:162 -msgid "trailing garbage at end of line" -msgstr "" - -#: locale/programs/locale.c:75 +#: locale/programs/locale.c:74 msgid "System information:" -msgstr "ϵͳÐÅÏ¢£º" +msgstr "系统信æ¯ï¼š" -#: locale/programs/locale.c:77 +#: locale/programs/locale.c:76 msgid "Write names of available locales" -msgstr "д³ö¿ÉÓÃÇøÓòµÄÃû³Æ" +msgstr "写出å¯ç”¨åŒºåŸŸçš„å称" -#: locale/programs/locale.c:79 +#: locale/programs/locale.c:78 msgid "Write names of available charmaps" -msgstr "д³ö¿ÉÓÃ×Ö·ûÓ³ÉäµÄÃû³Æ" +msgstr "写出å¯ç”¨å—ç¬¦æ˜ å°„çš„å称" -#: locale/programs/locale.c:80 +#: locale/programs/locale.c:79 msgid "Modify output format:" -msgstr "ÐÞ¸ÄÊä³ö¸ñʽ£º" +msgstr "ä¿®æ”¹è¾“å‡ºæ ¼å¼ï¼š" -#: locale/programs/locale.c:81 +#: locale/programs/locale.c:80 msgid "Write names of selected categories" -msgstr "д³öÑ¡Öз¶³ëµÄÃû³Æ" +msgstr "写出选ä¸èŒƒç•´çš„å称" -#: locale/programs/locale.c:82 +#: locale/programs/locale.c:81 msgid "Write names of selected keywords" -msgstr "д³öÑ¡Öйؼü×ÖµÄÃû³Æ" +msgstr "写出选ä¸å…³é”®å—çš„å称" -#: locale/programs/locale.c:83 +#: locale/programs/locale.c:82 msgid "Print more information" -msgstr "´òÓ¡¸ü¶àÐÅÏ¢" +msgstr "打å°æ›´å¤šä¿¡æ¯" -#: locale/programs/locale.c:88 -msgid "Get locale-specific information." -msgstr "¸ø³öÇøÓòÌض¨µÄÐÅÏ¢¡£" +#: locale/programs/locale.c:87 +msgid "" +"Get locale-specific information.\vFor bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" -#: locale/programs/locale.c:91 +#: locale/programs/locale.c:92 msgid "" "NAME\n" "[-a|-m]" msgstr "" -#: locale/programs/locale.c:512 +#: locale/programs/locale.c:193 +#, c-format +msgid "Cannot set LC_CTYPE to default locale" +msgstr "" + +#: locale/programs/locale.c:195 +#, c-format +msgid "Cannot set LC_MESSAGES to default locale" +msgstr "" + +#: locale/programs/locale.c:208 +#, c-format +msgid "Cannot set LC_COLLATE to default locale" +msgstr "" + +#: locale/programs/locale.c:224 +#, c-format +msgid "Cannot set LC_ALL to default locale" +msgstr "" + +#: locale/programs/locale.c:500 +#, c-format msgid "while preparing output" -msgstr "×¼±¸Êä³öʱ" +msgstr "准备输出时" -#: locale/programs/localedef.c:121 +#: locale/programs/localedef.c:120 msgid "Input Files:" -msgstr "ÊäÈëÎļþ£º" +msgstr "输入文件:" -#: locale/programs/localedef.c:123 +#: locale/programs/localedef.c:122 msgid "Symbolic character names defined in FILE" msgstr "" -#: locale/programs/localedef.c:124 +#: locale/programs/localedef.c:123 msgid "Source definitions are found in FILE" -msgstr "ÔÚ FILE ÖÐÕÒµ½Ô´¶¨Òå" +msgstr "在 FILE ä¸æ‰¾åˆ°æºå®šä¹‰" -#: locale/programs/localedef.c:126 +#: locale/programs/localedef.c:125 msgid "FILE contains mapping from symbolic names to UCS4 values" msgstr "" -#: locale/programs/localedef.c:130 +#: locale/programs/localedef.c:129 msgid "Create output even if warning messages were issued" -msgstr "¼´Ê¹³öÏÖ¾¯¸æÏûÏ¢Ò²´´½¨Êä³ö" +msgstr "å³ä½¿å‡ºçŽ°è¦å‘Šæ¶ˆæ¯ä¹Ÿåˆ›å»ºè¾“出" -#: locale/programs/localedef.c:131 +#: locale/programs/localedef.c:130 msgid "Create old-style tables" -msgstr "´´½¨¾É·ç¸ñ±í¸ñ" +msgstr "åˆ›å»ºæ—§é£Žæ ¼è¡¨æ ¼" -#: locale/programs/localedef.c:132 +#: locale/programs/localedef.c:131 msgid "Optional output file prefix" -msgstr "¿ÉÑ¡µÄÊä³öÎļþǰ׺" +msgstr "å¯é€‰çš„输出文件å‰ç¼€" -#: locale/programs/localedef.c:133 +#: locale/programs/localedef.c:132 msgid "Be strictly POSIX conform" -msgstr "Ñϸñ×ñÑ POSIX" +msgstr "ä¸¥æ ¼éµå¾ª POSIX" -#: locale/programs/localedef.c:135 +#: locale/programs/localedef.c:134 msgid "Suppress warnings and information messages" -msgstr "¹Ø±Õ¾¯¸æºÍÐÅÏ¢ÏûÏ¢" +msgstr "å…³é—è¦å‘Šå’Œä¿¡æ¯æ¶ˆæ¯" -#: locale/programs/localedef.c:136 +#: locale/programs/localedef.c:135 msgid "Print more messages" -msgstr "´òÓ¡¸ü¶àÏûÏ¢" +msgstr "打å°æ›´å¤šæ¶ˆæ¯" -#: locale/programs/localedef.c:137 +#: locale/programs/localedef.c:136 msgid "Archive control:" -msgstr "¹éµµ¿ØÖÆ£º" +msgstr "归档控制:" -#: locale/programs/localedef.c:139 +#: locale/programs/localedef.c:138 msgid "Don't add new data to archive" -msgstr "²»Òª½«ÐÂÊý¾ÝÌí¼Óµ½¹éµµÎļþÖÐ" +msgstr "ä¸è¦å°†æ–°æ•°æ®æ·»åŠ 到归档文件ä¸" -#: locale/programs/localedef.c:141 +#: locale/programs/localedef.c:140 msgid "Add locales named by parameters to archive" -msgstr "½«ÓɲÎÊýÃüÃûµÄÇøÓòÌí¼Óµ½¹éµµÎļþÖÐ" +msgstr "将由å‚数命åçš„åŒºåŸŸæ·»åŠ åˆ°å½’æ¡£æ–‡ä»¶ä¸" -#: locale/programs/localedef.c:142 +#: locale/programs/localedef.c:141 msgid "Replace existing archive content" -msgstr "Ìæ»»ÏÖÓеĹ鵵ÎļþÄÚÈÝ" +msgstr "替æ¢çŽ°æœ‰çš„归档文件内容" -#: locale/programs/localedef.c:144 +#: locale/programs/localedef.c:143 msgid "Remove locales named by parameters from archive" -msgstr "´Ó¹éµµÎļþÖÐɾ³ýÓɲÎÊýÃüÃûµÄÇøÓò" +msgstr "从归档文件ä¸åˆ 除由å‚数命å的区域" -#: locale/programs/localedef.c:145 +#: locale/programs/localedef.c:144 msgid "List content of archive" -msgstr "Áгö¹éµµÎļþµÄÄÚÈÝ" +msgstr "列出归档文件的内容" -#: locale/programs/localedef.c:147 +#: locale/programs/localedef.c:146 msgid "locale.alias file to consult when making archive" -msgstr "ÔÚÖÆ×÷¹éµµÎļþʱ²Î¿¼ locale.alias Îļþ" +msgstr "在制作归档文件时å‚考 locale.alias 文件" -#: locale/programs/localedef.c:152 +#: locale/programs/localedef.c:151 msgid "Compile locale specification" -msgstr "±àÒëÇøÓò¹æ·¶" +msgstr "编译区域规范" -#: locale/programs/localedef.c:155 +#: locale/programs/localedef.c:154 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 [Îļþ]" +"å称\n" +"[--add-to-archive|--delete-from-archive] 文件...\n" +"--list-archive [文件]" -#: locale/programs/localedef.c:233 +#: locale/programs/localedef.c:232 +#, c-format msgid "cannot create directory for output files" -msgstr "ÎÞ·¨ÎªÊä³öÎļþ´´½¨Ä¿Â¼" +msgstr "æ— æ³•ä¸ºè¾“å‡ºæ–‡ä»¶åˆ›å»ºç›®å½•" -#: locale/programs/localedef.c:244 +#: locale/programs/localedef.c:243 +#, c-format msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" -msgstr "ÖÂÃü´íÎó£ºÏµÍ³Î´¶¨Òå¡°_POSIX2_LOCALEDEF¡±" +msgstr "致命错误:系统未定义“_POSIX2_LOCALEDEFâ€" -#: locale/programs/localedef.c:258 locale/programs/localedef.c:274 +#: locale/programs/localedef.c:257 locale/programs/localedef.c:273 #: locale/programs/localedef.c:599 locale/programs/localedef.c:619 #, c-format msgid "cannot open locale definition file `%s'" -msgstr "ÎÞ·¨´ò¿ªÇøÓò¶¨ÒåÎļþ¡°%s¡±" +msgstr "æ— æ³•æ‰“å¼€åŒºåŸŸå®šä¹‰æ–‡ä»¶â€œ%sâ€" -#: locale/programs/localedef.c:286 +#: locale/programs/localedef.c:285 #, c-format msgid "cannot write output files to `%s'" -msgstr "ÎÞ·¨½«Êä³öÎļþдÈë¡°%s¡±" +msgstr "æ— æ³•å°†è¾“å‡ºæ–‡ä»¶å†™å…¥â€œ%sâ€" -#: locale/programs/localedef.c:367 +#: locale/programs/localedef.c:366 #, c-format msgid "" "System's directory for character maps : %s\n" @@ -1453,164 +2482,183 @@ msgid "" msgstr "" #: locale/programs/localedef.c:567 +#, c-format msgid "circular dependencies between locale definitions" -msgstr "ÇøÓò¶¨ÒåÖеÄÑ»·ÒÐÀµ" +msgstr "区域定义ä¸çš„循环倚赖" #: locale/programs/localedef.c:573 #, c-format msgid "cannot add already read locale `%s' a second time" -msgstr "ÎÞ·¨ÔÙ´ÎÌí¼ÓÒѾ¶ÁÈëµÄ¡°%s¡±" +msgstr "æ— æ³•å†æ¬¡æ·»åŠ å·²ç»è¯»å…¥çš„“%sâ€" -#: locale/programs/locarchive.c:89 locale/programs/locarchive.c:259 +#: locale/programs/locarchive.c:88 locale/programs/locarchive.c:261 +#, c-format msgid "cannot create temporary file" -msgstr "ÎÞ·¨´´½¨ÁÙʱÎļþ" +msgstr "æ— æ³•åˆ›å»ºä¸´æ—¶æ–‡ä»¶" -#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305 +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:307 +#, c-format msgid "cannot initialize archive file" -msgstr "ÎÞ·¨³õʼ»¯¹éµµÎļþ" +msgstr "æ— æ³•åˆå§‹åŒ–归档文件" -#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312 +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:314 +#, c-format msgid "cannot resize archive file" -msgstr "ÎÞ·¨¸Ä±ä¹éµµÎļþµÄ´óС" +msgstr "æ— æ³•æ”¹å˜å½’档文件的大å°" -#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321 -#: locale/programs/locarchive.c:511 +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:323 +#: locale/programs/locarchive.c:527 +#, c-format msgid "cannot map archive header" -msgstr "ÎÞ·¨Ó³Éä¹éµµÎļþÍ·" +msgstr "æ— æ³•æ˜ å°„å½’æ¡£æ–‡ä»¶å¤´" #: locale/programs/locarchive.c:156 +#, c-format msgid "failed to create new locale archive" -msgstr "ÎÞ·¨´´½¨ÐÂÇøÓò¹éµµÎļþ" +msgstr "æ— æ³•åˆ›å»ºæ–°åŒºåŸŸå½’æ¡£æ–‡ä»¶" #: locale/programs/locarchive.c:168 +#, c-format msgid "cannot change mode of new locale archive" -msgstr "ÎÞ·¨¸Ä±äй鵵ÎļþµÄģʽ" +msgstr "æ— æ³•æ”¹å˜æ–°å½’档文件的模å¼" -#: locale/programs/locarchive.c:253 +#: locale/programs/locarchive.c:255 +#, c-format msgid "cannot map locale archive file" -msgstr "ÎÞ·¨Ó³ÉäÇøÓò¹éµµÎļþ" +msgstr "æ— æ³•æ˜ å°„åŒºåŸŸå½’æ¡£æ–‡ä»¶" -#: locale/programs/locarchive.c:329 +#: locale/programs/locarchive.c:331 +#, c-format msgid "cannot lock new archive" -msgstr "ÎÞ·¨Ëø¶¨Ð¹鵵Îļþ" +msgstr "æ— æ³•é”定新归档文件" -#: locale/programs/locarchive.c:380 +#: locale/programs/locarchive.c:396 +#, c-format msgid "cannot extend locale archive file" -msgstr "ÎÞ·¨À©Õ¹ÇøÓò¹éµµÎļþ" +msgstr "æ— æ³•æ‰©å±•åŒºåŸŸå½’æ¡£æ–‡ä»¶" -#: locale/programs/locarchive.c:389 +#: locale/programs/locarchive.c:405 +#, c-format msgid "cannot change mode of resized locale archive" -msgstr "ÎÞ·¨¸Ä±ä¹ý´óСµÄÇøÓò¹éµµÎļþµÄģʽ" +msgstr "æ— æ³•æ”¹å˜è¿‡å¤§å°çš„区域归档文件的模å¼" -#: locale/programs/locarchive.c:397 +#: locale/programs/locarchive.c:413 +#, c-format msgid "cannot rename new archive" -msgstr "ÎÞ·¨¸Ä±äй鵵ÎļþµÄÃû³Æ" +msgstr "æ— æ³•æ”¹å˜æ–°å½’档文件的å称" -#: locale/programs/locarchive.c:450 +#: locale/programs/locarchive.c:466 #, c-format msgid "cannot open locale archive \"%s\"" -msgstr "ÎÞ·¨´ò¿ªÇøÓò¹éµµÎļþ¡°%s¡±" +msgstr "æ— æ³•æ‰“å¼€åŒºåŸŸå½’æ¡£æ–‡ä»¶â€œ%sâ€" -#: locale/programs/locarchive.c:455 +#: locale/programs/locarchive.c:471 #, c-format msgid "cannot stat locale archive \"%s\"" -msgstr "ÎÞ·¨¶ÔÇøÓò¹éµµÎļþ¡°%s¡±½øÐÐ stat() ²Ù×÷" +msgstr "æ— æ³•å¯¹åŒºåŸŸå½’æ¡£æ–‡ä»¶â€œ%sâ€è¿›è¡Œ stat() æ“作" -#: locale/programs/locarchive.c:474 +#: locale/programs/locarchive.c:490 #, c-format msgid "cannot lock locale archive \"%s\"" -msgstr "ÎÞ·¨Ëø¶¨ÇøÓò¹éµµÎļþ¡°%s¡±" +msgstr "æ— æ³•é”定区域归档文件“%sâ€" -#: locale/programs/locarchive.c:497 +#: locale/programs/locarchive.c:513 +#, c-format msgid "cannot read archive header" -msgstr "ÎÞ·¨¶ÁÈë¹éµµÎļþÍ·" +msgstr "æ— æ³•è¯»å…¥å½’æ¡£æ–‡ä»¶å¤´" -#: locale/programs/locarchive.c:557 +#: locale/programs/locarchive.c:573 #, c-format msgid "locale '%s' already exists" -msgstr "ÇøÓò¡°%s¡±ÒÑ´æÔÚ" +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 +#: locale/programs/locarchive.c:804 locale/programs/locarchive.c:819 +#: locale/programs/locarchive.c:831 locale/programs/locarchive.c:843 +#: locale/programs/locfile.c:344 +#, c-format msgid "cannot add to locale archive" -msgstr "ÎÞ·¨Ìí¼Óµ½ÇøÓò¹éµµÎļþ" +msgstr "æ— æ³•æ·»åŠ åˆ°åŒºåŸŸå½’æ¡£æ–‡ä»¶" -#: locale/programs/locarchive.c:982 +#: locale/programs/locarchive.c:998 #, c-format msgid "locale alias file `%s' not found" -msgstr "ÕÒ²»µ½ÇøÓò±ðÃûÎļþ¡°%s¡±" +msgstr "找ä¸åˆ°åŒºåŸŸåˆ«å文件“%sâ€" -#: locale/programs/locarchive.c:1126 +#: locale/programs/locarchive.c:1142 #, c-format msgid "Adding %s\n" -msgstr "ÕýÔÚÌí¼Ó %s\n" +msgstr "æ£åœ¨æ·»åŠ %s\n" -#: locale/programs/locarchive.c:1132 +#: locale/programs/locarchive.c:1148 #, c-format msgid "stat of \"%s\" failed: %s: ignored" -msgstr "ÎÞ·¨¶Ô¡°%s¡±ÔËÐÐ stat£º%s£ººöÂÔ" +msgstr "æ— æ³•å¯¹â€œ%sâ€è¿è¡Œ stat:%s:忽略" -#: locale/programs/locarchive.c:1138 +#: locale/programs/locarchive.c:1154 #, c-format msgid "\"%s\" is no directory; ignored" -msgstr "¡°%s¡±²»ÊÇĿ¼£»ºöÂÔ" +msgstr "“%sâ€ä¸æ˜¯ç›®å½•ï¼›å¿½ç•¥" -#: locale/programs/locarchive.c:1145 +#: locale/programs/locarchive.c:1161 #, c-format msgid "cannot open directory \"%s\": %s: ignored" -msgstr "ÎÞ·¨´ò¿ªÄ¿Â¼¡°%s¡±£º%s£ººöÂÔ" +msgstr "æ— æ³•æ‰“å¼€ç›®å½•â€œ%sâ€ï¼š%s:忽略" -#: locale/programs/locarchive.c:1217 +#: locale/programs/locarchive.c:1233 #, c-format msgid "incomplete set of locale files in \"%s\"" -msgstr "¡°%s¡±ÖеÄÇøÓòÎļþ²»ÍêÕû" +msgstr "“%sâ€ä¸çš„区域文件ä¸å®Œæ•´" -#: locale/programs/locarchive.c:1281 +#: locale/programs/locarchive.c:1297 #, c-format msgid "cannot read all files in \"%s\": ignored" -msgstr "ÎÞ·¨¶ÁÈë¡°%s¡±ÖеÄËùÓÐÎļþ£ººöÂÔ" +msgstr "æ— æ³•è¯»å…¥â€œ%sâ€ä¸çš„所有文件:忽略" -#: locale/programs/locarchive.c:1351 +#: locale/programs/locarchive.c:1367 #, c-format msgid "locale \"%s\" not in archive" -msgstr "ÇøÓò¡°%s¡±Ôڹ鵵ÎļþÖÐ" +msgstr "区域“%sâ€åœ¨å½’档文件ä¸" #: locale/programs/locfile.c:132 #, c-format msgid "argument to `%s' must be a single character" -msgstr "¡°%s¡±µÄ²ÎÊý±ØÐëÊǵ¥¸ö×Ö·û" +msgstr "“%sâ€çš„å‚数必须是å•ä¸ªå—符" -#: locale/programs/locfile.c:251 +#: locale/programs/locfile.c:252 msgid "syntax error: not inside a locale definition section" -msgstr "Óï·¨´íÎ󣺲»ÔÚÇøÓò¶¨Òå½ÚÖ®ÖÐ" +msgstr "è¯æ³•é”™è¯¯ï¼šä¸åœ¨åŒºåŸŸå®šä¹‰èŠ‚之ä¸" -#: locale/programs/locfile.c:625 +#: locale/programs/locfile.c:626 #, c-format msgid "cannot open output file `%s' for category `%s'" -msgstr "ÎÞ·¨Îª·¶³ë¡°%2$s¡±´ò¿ªÊä³öÎļþ¡°%1$s¡±" +msgstr "æ— æ³•ä¸ºèŒƒç•´â€œ%2$sâ€æ‰“开输出文件“%1$sâ€" -#: locale/programs/locfile.c:649 +#: locale/programs/locfile.c:650 #, c-format msgid "failure while writing data for category `%s'" -msgstr "Ϊ·¶³ë¡°%s¡±Ð´ÈëÊý¾Ýʧ°Ü" +msgstr "为范畴“%sâ€å†™å…¥æ•°æ®å¤±è´¥" -#: locale/programs/locfile.c:745 +#: locale/programs/locfile.c:746 #, c-format msgid "cannot create output file `%s' for category `%s'" -msgstr "ÎÞ·¨Îª·¶³ë¡°%2$s¡±´´½¨Êä³öÎļþ¡°%1$s¡±" +msgstr "æ— æ³•ä¸ºèŒƒç•´â€œ%2$sâ€åˆ›å»ºè¾“出文件“%1$sâ€" -#: locale/programs/locfile.h:59 +#: locale/programs/locfile.c:782 msgid "expect string argument for `copy'" -msgstr "¡°copy¡±ÐèÒª×Ö·û´®²ÎÊý" +msgstr "“copyâ€éœ€è¦å—符串å‚æ•°" -#: locale/programs/locfile.h:63 +#: locale/programs/locfile.c:786 msgid "locale name should consist only of portable characters" -msgstr "ÇøÓòÃû³ÆÓ¦¸Ã½öÓÉ¿ÉÒÆÖ²µÄ×Ö·û×é³É" +msgstr "区域å称应该仅由å¯ç§»æ¤çš„å—符组æˆ" -#: locale/programs/locfile.h:82 +#: locale/programs/locfile.c:805 msgid "no other keyword shall be specified when `copy' is used" -msgstr "ʹÓá°copy¡±Ê±²»Ó¦ÔÙʹÓÃÆäËü¹Ø¼ü×Ö" +msgstr "使用“copyâ€æ—¶ä¸åº”å†ä½¿ç”¨å…¶å®ƒå…³é”®å—" + +#: locale/programs/locfile.c:819 +#, c-format +msgid "`%1$s' definition does not end with `END %1$s'" +msgstr "对“%1$sâ€çš„定义并ä¸ä»¥â€œEND %1%sâ€ç»“æŸ" #: locale/programs/repertoire.c:230 locale/programs/repertoire.c:271 #: locale/programs/repertoire.c:296 @@ -1620,2252 +2668,1726 @@ msgstr "" #: locale/programs/repertoire.c:272 msgid "no <Uxxxx> or <Uxxxxxxxx> value given" -msgstr "¼´Î´¸ø³ö <Uxxxx> Ҳδ¸ø³ö <Uxxxxxxxx>" +msgstr "å³æœªç»™å‡º <Uxxxx> 也未给出 <Uxxxxxxxx>" #: locale/programs/repertoire.c:332 +#, c-format msgid "cannot save new repertoire map" -msgstr "" +msgstr "æ— æ³•ä¿å˜æ–°çš„指令表" #: locale/programs/repertoire.c:343 #, c-format msgid "repertoire map file `%s' not found" msgstr "" -#: locale/programs/repertoire.c:450 +#: login/programs/pt_chown.c:74 #, 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 "·¶Î§µÄÉÏÏÞ²¢²»Ð¡ÓÚÏÂÏÞ" +msgid "Set the owner, group and access permission of the slave pseudo terminal corresponding to the master pseudo terminal passed on file descriptor `%d'. This is the helper program for the `grantpt' function. It is not intended to be run directly from the command line.\n" +msgstr "" -#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508 -#: posix/getconf.c:1002 -msgid "memory exhausted" -msgstr "ÄÚ´æºÄ¾¡" +#: login/programs/pt_chown.c:84 +#, c-format +msgid "" +"The owner is set to the current user, the group is set to `%s', and the access permission is set to `%o'.\n" +"\n" +"%s" +msgstr "" -#: assert/assert-perr.c:57 +#: login/programs/pt_chown.c:161 #, c-format -msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n" -msgstr "%s%s%s£º%u£º%s%sÒâÍâµÄ´íÎó£º%s¡£\n" +msgid "too many arguments" +msgstr "选项过多" -#: assert/assert.c:56 +#: login/programs/pt_chown.c:169 #, c-format -msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" -msgstr "%s%s%s£º%u£º%s%s¶ÏÑÔ¡°%s¡±Ê§°Ü¡£\n" +msgid "needs to be installed setuid `root'" +msgstr "" -#: intl/tst-codeset.c:40 intl/tst-codeset.c:50 -msgid "cheese" -msgstr "ÄÌÀÒ" +#: malloc/mcheck.c:330 +msgid "memory is consistent, library is buggy\n" +msgstr "内å˜ä¸ä¸€è‡´ï¼Œåº“有错误\n" -#: intl/tst-gettext2.c:37 -msgid "First string for testing." -msgstr "µÚÒ»¸öÓÃÓÚ²âÊÔµÄ×Ö·û´®¡£" +#: malloc/mcheck.c:333 +msgid "memory clobbered before allocated block\n" +msgstr "" -#: intl/tst-gettext2.c:38 -msgid "Another string for testing." -msgstr "ÁíÒ»¸ö²âÊÔ×Ö·û´®¡£" +#: malloc/mcheck.c:336 +msgid "memory clobbered past end of allocated block\n" +msgstr "" -#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:84 -msgid "NAME" -msgstr "Ãû³Æ" +#: malloc/mcheck.c:339 +msgid "block freed twice\n" +msgstr "å—释放了两次\n" -#: catgets/gencat.c:112 -msgid "Create C header file NAME containing symbol definitions" -msgstr "´´½¨º¬ÓзûºÅ¶¨ÒåµÄ¸ø¶¨Ãû³ÆµÄ C Í·Îļþ" +#: malloc/mcheck.c:342 +msgid "bogus mcheck_status, library is buggy\n" +msgstr "" -#: catgets/gencat.c:114 -msgid "Do not use existing catalog, force new output file" -msgstr "²»Ê¹ÓÃÏÖÓеķÖÀ࣬ǿÖÆ´´½¨ÐÂÊä³öÎļþ" +#: malloc/memusage.sh:27 +msgid "Try \\`memusage --help' for more information." +msgstr "试用“memusage --helpâ€ä»¥èŽ·å–更多信æ¯ã€‚" -#: catgets/gencat.c:115 -msgid "Write output to file NAME" -msgstr "½«Êä³öдÈëµ½Ö¸¶¨ÎļþÖÐ" +#: malloc/memusage.sh:33 +msgid "memusage: option \\`$1' requires an argument" +msgstr "memusage:选项“$1â€éœ€è¦ä¸€ä¸ªå‚æ•°" -#: catgets/gencat.c:120 +#: malloc/memusage.sh:39 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" +"Usage: memusage [OPTION]... PROGRAM [PROGRAMOPTION]...\n" +"Profile memory usage of PROGRAM.\n" +"\n" +" -n,--progname=NAME Name of the program file to profile\n" +" -p,--png=FILE Generate PNG graphic and store it in FILE\n" +" -d,--data=FILE Generate binary data file and store it in FILE\n" +" -u,--unbuffered Don't buffer output\n" +" -b,--buffer=SIZE Collect SIZE entries before writing them out\n" +" --no-timer Don't collect additional information through timer\n" +" -m,--mmap Also trace mmap & friends\n" +"\n" +" -?,--help Print this help and exit\n" +" --usage Give a short usage message\n" +" -V,--version Print version information and exit\n" +"\n" +" The following options only apply when generating graphical output:\n" +" -t,--time-based Make graph linear in time\n" +" -T,--total Also draw graph of total memory use\n" +" --title=STRING Use STRING as title of the graph\n" +" -x,--x-size=SIZE Make graphic SIZE pixels wide\n" +" -y,--y-size=SIZE Make graphic SIZE pixels high\n" +"\n" +"Mandatory arguments to long options are also mandatory for any corresponding\n" +"short options.\n" +"\n" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>." msgstr "" -#: catgets/gencat.c:125 +#: malloc/memusage.sh:99 msgid "" -"-o OUTPUT-FILE [INPUT-FILE]...\n" -"[OUTPUT-FILE [INPUT-FILE]...]" +"Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]\n" +" [--buffer=SIZE] [--no-timer] [--time-based] [--total]\n" +" [--title=STRING] [--x-size=SIZE] [--y-size=SIZE]\n" +" PROGRAM [PROGRAMOPTION]..." 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 "Öظ´µÄ¼¯ºÏ¶¨Òå" +#: malloc/memusage.sh:191 +msgid "memusage: option \\`${1##*=}' is ambiguous" +msgstr "memusage:选项“${1##*=}â€å…·æœ‰äºŒä¹‰æ€§" -#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677 -msgid "this is the first definition" -msgstr "ÕâÊǵÚÒ»¸ö¶¨Òå" +#: malloc/memusage.sh:200 +msgid "memusage: unrecognized option \\`$1'" +msgstr "memusageï¼šæ— æ³•è¯†åˆ«çš„é€‰é¡¹â€œ$1â€" -#: catgets/gencat.c:522 -#, c-format -msgid "unknown set `%s'" -msgstr "δ֪¼¯ºÏ¡°%s¡±" +#: malloc/memusage.sh:213 +msgid "No program name given" +msgstr "未指定程åºå" -#: 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 "Öظ´µÄÏûÏ¢±êʶ·û" +#: malloc/memusagestat.c:54 +msgid "Name output file" +msgstr "å输出文件" -#: catgets/gencat.c:731 -msgid "invalid character: message ignored" -msgstr "ÎÞЧµÄ×Ö·û£ººöÂÔÏûÏ¢" +#: malloc/memusagestat.c:55 +msgid "Title string used in output graphic" +msgstr "ç”¨äºŽè¾“å‡ºå›¾å½¢çš„æ ‡é¢˜å—符串" -#: catgets/gencat.c:774 -msgid "invalid line" -msgstr "ÎÞЧµÄÐÐ" +#: malloc/memusagestat.c:56 +msgid "Generate output linear to time (default is linear to number of function calls)" +msgstr "" -#: catgets/gencat.c:828 -msgid "malformed line ignored" +#: malloc/memusagestat.c:58 +msgid "Also draw graph for total memory consumption" msgstr "" -#: catgets/gencat.c:992 catgets/gencat.c:1033 -#, c-format -msgid "cannot open output file `%s'" -msgstr "ÎÞ·¨´ò¿ªÊä³öÎļþ¡°%s¡±" +#: malloc/memusagestat.c:59 +msgid "Make output graphic VALUE pixels wide" +msgstr "" -#: catgets/gencat.c:1217 -msgid "unterminated message" -msgstr "δÖÕÖ¹µÄÏûÏ¢" +#: malloc/memusagestat.c:60 +msgid "Make output graphic VALUE pixels high" +msgstr "" -#: catgets/gencat.c:1241 -msgid "while opening old catalog file" -msgstr "ÔÚ´ò¿ª¾É·ÖÀàÎļþʱ" +#: malloc/memusagestat.c:65 +msgid "Generate graphic from memory profiling data" +msgstr "" -#: catgets/gencat.c:1332 -msgid "conversion modules not available" -msgstr "ת»»Ä£¿é²»¿ÉÓÃ" +#: malloc/memusagestat.c:68 +msgid "DATAFILE [OUTFILE]" +msgstr "æ•°æ®æ–‡ä»¶ [输出文件]" -#: catgets/gencat.c:1358 -msgid "cannot determine escape character" -msgstr "ÎÞ·¨È·¶¨×ªÒå×Ö·û" +#: misc/error.c:118 timezone/zic.c:417 +msgid "Unknown system error" +msgstr "未知的系统错误" -#: stdlib/../sysdeps/unix/sysv/linux/ia64/makecontext.c:63 -msgid "makecontext: does not know how to handle more than 8 arguments\n" -msgstr "makecontext£º²»ÖªµÀ¸ÃÈçºÎ´¦Àí¶àÓÚ 8 ¸ö²ÎÊýµÄÇé¿ö\n" +#: nis/nis_callback.c:189 +msgid "unable to free arguments" +msgstr "æ— æ³•é‡Šæ”¾å‚æ•°" -#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:133 -#: nis/nis_error.c:29 nis/ypclnt.c:787 nis/ypclnt.c:861 +#: nis/nis_error.h:1 nis/ypclnt.c:822 nis/ypclnt.c:910 posix/regcomp.c:132 +#: sysdeps/gnu/errlist.c:20 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 "ûÓÐÄǸöÎļþ»òĿ¼" +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 "±»ÖжϵÄϵͳµ÷ÓÃ" +#: nis/nis_error.h:2 +msgid "Probable success" +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 "ÊäÈë/Êä³ö´íÎó" +#: nis/nis_error.h:3 +msgid "Not found" +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 "ûÓÐÄǸöÉ豸»òµØÖ·" +#: nis/nis_error.h:4 +msgid "Probably not found" +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 "²ÎÊýÁбí¹ý³¤" +#: nis/nis_error.h:5 +msgid "Cache expired" +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 "¿ÉÖ´ÐÐÎļþ¸ñʽ´íÎó" +#: nis/nis_error.h:6 +msgid "NIS+ servers unreachable" +msgstr "NIS+ æœåŠ¡å™¨ä¸å¯è¾¾" -#. 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 "´íÎóµÄÎļþÃèÊö·û" +#: nis/nis_error.h:7 +msgid "Unknown object" +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 "ûÓÐ×Ó½ø³Ì" +#: nis/nis_error.h:8 +msgid "Server busy, try again" +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 "ÒѱÜÃâ×ÊÔ´ËÀËø" +#: nis/nis_error.h:9 +msgid "Generic system error" +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 "ÎÞ·¨·ÖÅäÄÚ´æ" +#: nis/nis_error.h:10 +msgid "First/next chain broken" +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:817 +#: nis/nis_error.h:11 nis/ypclnt.c:867 sysdeps/gnu/errlist.c:157 msgid "Permission denied" -msgstr "ȨÏÞ²»¹»" +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 "ÎļþÒÑ´æÔÚ" +#: nis/nis_error.h:12 +msgid "Not owner" +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 "ÎÞЧµÄ¿çÉ豸Á¬½Ó" +#: nis/nis_error.h:13 +msgid "Name not served by this server" +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 "ûÓÐÄǸöÉ豸" +#: nis/nis_error.h:14 +msgid "Server out of memory" +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 "²»ÊÇĿ¼" +#: nis/nis_error.h:15 +msgid "Object with same name exists" +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 "ÊÇÒ»¸öĿ¼" +#: nis/nis_error.h:16 +msgid "Not master server for this domain" +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 "ÎÞЧµÄ²ÎÊý" +#: nis/nis_error.h:17 +msgid "Invalid object for operation" +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 "´ò¿ªµÄÎļþ¹ý¶à" +#: nis/nis_error.h:18 +msgid "Malformed name, or illegal name" +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 "ϵͳÖдò¿ªµÄÎļþ¹ý¶à" +#: nis/nis_error.h:19 +msgid "Unable to create callback" +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 ²Ù×÷" +#: nis/nis_error.h:20 +msgid "Results sent to callback proc" +msgstr "" -#. 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 "Îı¾Îļþæ" +#: nis/nis_error.h:21 +msgid "Not found, no such name" +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 "Îļþ¹ý´ó" +#: nis/nis_error.h:22 +msgid "Name/entry isn't unique" +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 "É豸ÉÏûÓпռä" +#: nis/nis_error.h:23 +msgid "Modification failed" +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 "·Ç·¨ seek ²Ù×÷" +#: nis/nis_error.h:24 +msgid "Database for table does not exist" +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 "Ö»¶ÁÎļþϵͳ" +#: nis/nis_error.h:25 +msgid "Entry/table type mismatch" +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 "¹ý¶àµÄÁ¬½Ó" +#: nis/nis_error.h:26 +msgid "Link points to illegal name" +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 "ÊýÖµ²ÎÊý³¬³öÓò" +#: nis/nis_error.h:27 +msgid "Partial success" +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 "ÊýÖµ½á¹û³¬³ö·¶Î§" +#: nis/nis_error.h:28 +msgid "Too many attributes" +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 "×ÊÔ´ÔÝʱ²»¿ÉÓÃ" +#: nis/nis_error.h:29 +msgid "Error in RPC subsystem" +msgstr "RPC å系统ä¸å‡ºé”™" -#. 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 "²Ù×÷½«×èÈû" +#: nis/nis_error.h:30 +msgid "Missing or malformed attribute" +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 "²Ù×÷ÏÖÔÚÕýÔÚ½øÐÐ" +#: nis/nis_error.h:31 +msgid "Named object is not searchable" +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 "²Ù×÷ÒѾÔÚ½øÐÐ" +#: nis/nis_error.h:32 +msgid "Error while talking to callback proc" +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 "¶Ô·ÇÌ×½Ó×Ö½øÐÐÌ×½Ó×Ö²Ù×÷" +#: nis/nis_error.h:33 +msgid "Non NIS+ namespace encountered" +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 "ÏûÏ¢¹ý³¤" +#: nis/nis_error.h:34 +msgid "Illegal object type for operation" +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 "´íÎóµÄ socket ÐÒéÀàÐÍ" +#: nis/nis_error.h:35 +msgid "Passed object is not the same object on server" +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 "²»¿ÉÓõÄÐÒé" +#: nis/nis_error.h:36 +msgid "Modify operation failed" +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 "²»Ö§³ÖµÄÐÒé" +#: nis/nis_error.h:37 +msgid "Query illegal for named table" +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 "²»Ö§³ÖµÄÌ×½Ó×ÖÀàÐÍ" +#: nis/nis_error.h:38 +msgid "Attempt to remove a non-empty table" +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 "²»Ö§³ÖµÄ²Ù×÷" +#: nis/nis_error.h:39 +msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?" +msgstr "访问 NIS+ 冷å¯åŠ¨æ–‡ä»¶å‡ºé”™ã€‚NIS+ 安装了å—?" -#. 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 "²»Ö§³ÖµÄÐÒé×å" +#: nis/nis_error.h:40 +msgid "Full resync required for directory" +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 "ÐÒé²»Ö§³ÖµÄµØÖ·×å" +#: nis/nis_error.h:41 +msgid "NIS+ operation failed" +msgstr "NIS+ æ“作失败" -#. 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 "µØÖ·ÒÑÔÚʹÓÃ" +#: nis/nis_error.h:42 +msgid "NIS+ service is unavailable or not installed" +msgstr "NIS+ æœåŠ¡å™¨ä¸å¯ç”¨æˆ–未安装" -#. 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 "ÎÞ·¨Ö¸¶¨±»ÇëÇóµÄµØÖ·" +#: nis/nis_error.h:43 +msgid "Yes, 42 is the meaning of life" +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 "ÍøÂçÒѹرÕ" +#: nis/nis_error.h:44 +msgid "Unable to authenticate NIS+ server" +msgstr "æ— æ³•è®¤è¯ NIS+ æœåŠ¡å™¨" -#. 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 "ÍøÂç²»¿É´ï" +#: nis/nis_error.h:45 +msgid "Unable to authenticate NIS+ client" +msgstr "æ— æ³•è®¤è¯ NIS+ 客户端" -#. 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 "ÖØÖÃʱ¶Ï¿ªÍøÂçÁ¬½Ó" +#: nis/nis_error.h:46 +msgid "No file space on server" +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 "ÓÉÈí¼þµ¼ÖµÄÁ¬½Ó¶Ï¿ª" +#: nis/nis_error.h:47 +msgid "Unable to create process on server" +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" +#: nis/nis_error.h:48 +msgid "Master server busy, full dump rescheduled." 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 "´«Êä¶ËµãÉÐδÁ¬½Ó" +#: nis/nis_local_names.c:122 +#, c-format +msgid "LOCAL entry for UID %d in directory %s not unique\n" +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 "ÐèҪĿ±êµØÖ·" +#: nis/nis_print.c:51 +msgid "UNKNOWN" +msgstr "未知" -#. TRANS The socket has already been shut down. -#: stdio-common/../sysdeps/gnu/errlist.c:659 -msgid "Cannot send after transport endpoint shutdown" -msgstr "ÎÞ·¨ÔÚ´«Êä¶Ëµã¹Ø±ÕÒÔºó·¢ËÍ" +#: nis/nis_print.c:109 +msgid "BOGUS OBJECT\n" +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 "¹ý¶àµÄÒýÓãºÎÞ·¨½ÓºÏ" +#: nis/nis_print.c:112 +msgid "NO OBJECT\n" +msgstr "æ— å¯¹è±¡\n" -#. 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 "Á¬½Ó³¬Ê±" +#: nis/nis_print.c:115 +msgid "DIRECTORY\n" +msgstr "目录\n" -#. 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 "¾Ü¾øÁ¬½Ó" +#: nis/nis_print.c:118 +msgid "GROUP\n" +msgstr "组\n" -#. 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 "·ûºÅÁ¬½ÓµÄ²ãÊý¹ý¶à" +#: nis/nis_print.c:121 +msgid "TABLE\n" +msgstr "表\n" -#. 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 "ÎļþÃû¹ý³¤" +#: nis/nis_print.c:124 +msgid "ENTRY\n" +msgstr "æ¡ç›®\n" -#. 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 "Ö÷»ú¹Ø±Õ" +#: nis/nis_print.c:127 +msgid "LINK\n" +msgstr "连接\n" -#. 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 "ûÓе½Ö÷»úµÄ·ÓÉ" +#: nis/nis_print.c:130 +msgid "PRIVATE\n" +msgstr "ç§æœ‰\n" -#. 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 "Ŀ¼·Ç¿Õ" +#: nis/nis_print.c:133 +msgid "(Unknown object)\n" +msgstr "(未知对象)\n" -#. 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 "½ø³Ì¹ý¶à" +#: nis/nis_print.c:167 +#, c-format +msgid "Name : `%s'\n" +msgstr "å称 :“%sâ€\n" -#. 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 "Óû§¹ý¶à" +#: nis/nis_print.c:168 +#, c-format +msgid "Type : %s\n" +msgstr "类型 : %s\n" -#. TRANS The user's disk quota was exceeded. -#: stdio-common/../sysdeps/gnu/errlist.c:767 -msgid "Disk quota exceeded" -msgstr "³¬³ö´ÅÅÌÏÞ¶î" +#: nis/nis_print.c:173 +msgid "Master Server :\n" +msgstr "主æœåŠ¡å™¨ :\n" -#. 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" +#: nis/nis_print.c:175 +msgid "Replicate :\n" msgstr "" -#. 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 "¶ÔÏóÊÇÔ¶³ÌµÄ" +#: nis/nis_print.c:176 +#, c-format +msgid "\tName : %s\n" +msgstr "\tå称 :%s\n" -#. TRANS ??? -#: stdio-common/../sysdeps/gnu/errlist.c:800 -msgid "RPC struct is bad" -msgstr "RPC ½á¹¹´íÎó" +#: nis/nis_print.c:177 +msgid "\tPublic Key : " +msgstr "\t公钥 :" -#. TRANS ??? -#: stdio-common/../sysdeps/gnu/errlist.c:809 -msgid "RPC version wrong" -msgstr "RPC °æ±¾´íÎó" +#: nis/nis_print.c:181 +msgid "None.\n" +msgstr "æ— ã€‚\n" -#. TRANS ??? -#: stdio-common/../sysdeps/gnu/errlist.c:818 -msgid "RPC program not available" -msgstr "RPC ³ÌÐò²»¿ÉÓÃ" +#: nis/nis_print.c:184 +#, c-format +msgid "Diffie-Hellmann (%d bits)\n" +msgstr "" -#. TRANS ??? -#: stdio-common/../sysdeps/gnu/errlist.c:827 -msgid "RPC program version wrong" -msgstr "RPC ³ÌÐò°æ±¾´íÎó" +#: nis/nis_print.c:189 +#, c-format +msgid "RSA (%d bits)\n" +msgstr "RSA (%d ä½)\n" -#. TRANS ??? -#: stdio-common/../sysdeps/gnu/errlist.c:836 -msgid "RPC bad procedure for program" +#: nis/nis_print.c:192 +msgid "Kerberos.\n" 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 "²»Êʵ±µÄÎļþÀàÐÍ»ò¸ñʽ" +#: nis/nis_print.c:195 +#, c-format +msgid "Unknown (type = %d, bits = %d)\n" +msgstr "未知 (类型 = %dï¼Œä½ = %d)\n" -#. TRANS ??? -#: stdio-common/../sysdeps/gnu/errlist.c:870 -msgid "Authentication error" -msgstr "ÈÏÖ¤´íÎó" +#: nis/nis_print.c:206 +#, c-format +msgid "\tUniversal addresses (%u)\n" +msgstr "" -#. TRANS ??? -#: stdio-common/../sysdeps/gnu/errlist.c:879 -msgid "Need authenticator" -msgstr "ÐèÒªÈÏÖ¤Æ÷" +#: nis/nis_print.c:228 +msgid "Time to live : " +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 "º¯ÊýδʵÏÖ" +#: nis/nis_print.c:230 +msgid "Default Access rights :\n" +msgstr "默认访问æƒé™ :\n" -#. 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 "²»Ö§³Ö" +#: nis/nis_print.c:239 +#, c-format +msgid "\tType : %s\n" +msgstr "\t类型 :%s\n" -#. 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 "ÎÞЧ»ò²»ÍêÕûµÄ¶à×Ö½Ú×Ö·û»ò¿í×Ö·û" +#: nis/nis_print.c:240 +msgid "\tAccess rights: " +msgstr "\t访问æƒé™ :" -#. 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 "¶Ôºǫ́½ø³ÌµÄ²»Êʵ±²Ù×÷" +#: nis/nis_print.c:254 +msgid "Group Flags :" +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" +#: nis/nis_print.c:257 +msgid "" +"\n" +"Group Members :\n" msgstr "" +"\n" +"组æˆå‘˜ :\n" -#. 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 "£¿" +#: nis/nis_print.c:269 +#, c-format +msgid "Table Type : %s\n" +msgstr "è¡¨æ ¼ç±»åž‹ :%s\n" -#. TRANS You did @strong{what}? -#: stdio-common/../sysdeps/gnu/errlist.c:967 -msgid "You really blew it this time" -msgstr "" +#: nis/nis_print.c:270 +#, c-format +msgid "Number of Columns : %d\n" +msgstr "åˆ—çš„æ•°é‡ ï¼š%d\n" -#. 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 "" +#: nis/nis_print.c:271 +#, c-format +msgid "Character Separator : %c\n" +msgstr "å—符分隔符:%c\n" -#. TRANS This error code has no purpose. -#: stdio-common/../sysdeps/gnu/errlist.c:985 -msgid "Gratuitous error" +#: nis/nis_print.c:272 +#, c-format +msgid "Search Path : %s\n" +msgstr "æœç´¢è·¯å¾„ :%s\n" + +#: nis/nis_print.c:273 +msgid "Columns :\n" msgstr "" -#: stdio-common/../sysdeps/gnu/errlist.c:993 -msgid "Bad message" -msgstr "´íÎóµÄÏûÏ¢" +#: nis/nis_print.c:276 +#, c-format +msgid "\t[%d]\tName : %s\n" +msgstr "\t[%d]\tå称 :%s\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1001 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:66 -msgid "Identifier removed" -msgstr "±êʶ·ûÒÑɾ³ý" +#: nis/nis_print.c:278 +msgid "\t\tAttributes : " +msgstr "\t\t属性 :" -#: stdio-common/../sysdeps/gnu/errlist.c:1009 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:104 -msgid "Multihop attempted" -msgstr "" +#: nis/nis_print.c:280 +msgid "\t\tAccess Rights : " +msgstr "\t\t访问æƒé™ :" -#: stdio-common/../sysdeps/gnu/errlist.c:1017 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:91 -msgid "No data available" -msgstr "ûÓпÉÓõÄÊý¾Ý" +#: nis/nis_print.c:290 +msgid "Linked Object Type : " +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 "" +#: nis/nis_print.c:292 +#, c-format +msgid "Linked to : %s\n" +msgstr "连接到 :%s\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1033 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:65 -msgid "No message of desired type" +#: nis/nis_print.c:302 +#, c-format +msgid "\tEntry data of type %s\n" 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 "¶ÔÒѶ¨ÒåµÄÊý¾ÝÀàÐÍÀ´ËµÖµ¹ý´ó" +#: nis/nis_print.c:305 +#, c-format +msgid "\t[%u] - [%u bytes] " +msgstr "\t[%u] - [%u å—节] " -#: stdio-common/../sysdeps/gnu/errlist.c:1065 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:101 -msgid "Protocol error" -msgstr "ÐÒé´íÎó" +#: nis/nis_print.c:308 +msgid "Encrypted data\n" +msgstr "å·²åŠ å¯†çš„æ•°æ®\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1073 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:92 -msgid "Timer expired" -msgstr "¼ÆʱÆ÷³¬Ê±" +#: nis/nis_print.c:310 +msgid "Binary data\n" +msgstr "二进制数æ®\n" -#. 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 "²Ù×÷ÒÑÈ¡Ïû" +#: nis/nis_print.c:326 +#, c-format +msgid "Object Name : %s\n" +msgstr "对象å称 :%s\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1093 -msgid "Interrupted system call should be restarted" -msgstr "±»ÖжϵÄϵͳµ÷ÓÃÓ¦¸ÃÖØÐÂÆô¶¯" +#: nis/nis_print.c:327 +#, c-format +msgid "Directory : %s\n" +msgstr "目录 :%s\n" -#: 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 "ͨµÀ±àºÅ³¬³ö·¶Î§" +#: nis/nis_print.c:328 +#, c-format +msgid "Owner : %s\n" +msgstr "所有者 :%s\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1109 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:68 -msgid "Level 2 not synchronized" -msgstr "¼¶±ð 2 ÉÐδͬ²½" +#: nis/nis_print.c:329 +#, c-format +msgid "Group : %s\n" +msgstr "组 :%s\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1117 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:69 -msgid "Level 3 halted" -msgstr "¼¶±ð 3 ÒѹرÕ" +#: nis/nis_print.c:330 +msgid "Access Rights : " +msgstr "访问æƒé™ï¼š" -#: stdio-common/../sysdeps/gnu/errlist.c:1125 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:70 -msgid "Level 3 reset" -msgstr "¼¶±ð 3 ÒÑÖØÖÃ" +#: nis/nis_print.c:332 +#, c-format +msgid "" +"\n" +"Time to Live : " +msgstr "" +"\n" +"å˜åœ¨çš„时间 :" -#: 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 "Á¬½ÓÊý³¬³ö·¶Î§" +#: nis/nis_print.c:335 +#, c-format +msgid "Creation Time : %s" +msgstr "创建时间:%s" -#: stdio-common/../sysdeps/gnu/errlist.c:1141 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:72 -msgid "Protocol driver not attached" -msgstr "δ¼ÓÔØÐÒéÇý¶¯³ÌÐò" +#: nis/nis_print.c:337 +#, c-format +msgid "Mod. Time : %s" +msgstr "修改时间 :%s" -#: 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 ½á¹¹" +#: nis/nis_print.c:338 +msgid "Object Type : " +msgstr "对象类型 :%s" -#: stdio-common/../sysdeps/gnu/errlist.c:1157 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:74 -msgid "Level 2 halted" -msgstr "¼¶±ð 2 ¼º¹Ø±Õ" +#: nis/nis_print.c:358 +#, c-format +msgid " Data Length = %u\n" +msgstr " æ•°æ®é•¿åº¦ = %u\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1165 -msgid "Invalid exchange" -msgstr "ÎÞЧµÄ½»»»" +#: nis/nis_print.c:372 +#, c-format +msgid "Status : %s\n" +msgstr "çŠ¶æ€ ï¼š%s\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1173 -msgid "Invalid request descriptor" -msgstr "ÎÞЧµÄÇëÇóÃèÊö·û" +#: nis/nis_print.c:373 +#, c-format +msgid "Number of objects : %u\n" +msgstr "å¯¹è±¡çš„æ•°é‡ ï¼š%u\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1181 -msgid "Exchange full" -msgstr "½»»»Âú" +#: nis/nis_print.c:377 +#, c-format +msgid "Object #%d:\n" +msgstr "对象 #%d:\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1189 -msgid "No anode" -msgstr "ûÓÐ anode" +#: nis/nis_print_group_entry.c:117 +#, c-format +msgid "Group entry for \"%s.%s\" group:\n" +msgstr "" -#: stdio-common/../sysdeps/gnu/errlist.c:1197 -msgid "Invalid request code" -msgstr "ÎÞЧµÄÇëÇóÂë" +#: nis/nis_print_group_entry.c:125 +msgid " Explicit members:\n" +msgstr " 显å¼æˆå‘˜ï¼š\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1205 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:85 -msgid "Invalid slot" -msgstr "" +#: nis/nis_print_group_entry.c:130 +msgid " No explicit members\n" +msgstr " æ— æ˜¾å¼æˆå‘˜\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1213 -msgid "File locking deadlock error" -msgstr "ÎļþËøËÀËø´íÎó" +#: nis/nis_print_group_entry.c:133 +msgid " Implicit members:\n" +msgstr " éšå«æˆå‘˜ï¼š\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1221 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:87 -msgid "Bad font file format" -msgstr "´íÎóµÄ×ÖÌåÎļþ¸ñʽ" +#: nis/nis_print_group_entry.c:138 +msgid " No implicit members\n" +msgstr " æ— éšå«æˆå‘˜\n" -#: 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 "»úÆ÷²»ÔÚÍøÂçÖÐ" +#: nis/nis_print_group_entry.c:141 +msgid " Recursive members:\n" +msgstr " 递归æˆå‘˜ï¼š\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1237 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:95 -msgid "Package not installed" -msgstr "°üδ°²×°" +#: nis/nis_print_group_entry.c:146 +msgid " No recursive members\n" +msgstr " æ— é€’å½’æˆå‘˜\n" -#: stdio-common/../sysdeps/gnu/errlist.c:1245 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:98 -msgid "Advertise error" +#: nis/nis_print_group_entry.c:149 +msgid " Explicit nonmembers:\n" msgstr "" -#: stdio-common/../sysdeps/gnu/errlist.c:1253 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:99 -msgid "Srmount error" +#: nis/nis_print_group_entry.c:154 +msgid " No explicit nonmembers\n" msgstr "" -#: 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" +#: nis/nis_print_group_entry.c:157 +msgid " Implicit nonmembers:\n" msgstr "" -#: stdio-common/../sysdeps/gnu/errlist.c:1277 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:110 -msgid "Name not unique on network" +#: nis/nis_print_group_entry.c:162 +msgid " No implicit nonmembers\n" 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 "ÎļþÃèÊö·û´¦ÓÚ´íÎó״̬" +#: nis/nis_print_group_entry.c:165 +msgid " Recursive nonmembers:\n" +msgstr " 递归éžæˆå‘˜ï¼š\n" -#: 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 "a.out ÖÐµÄ .lib ½ÚÒѻٻµ" - -#: stdio-common/../sysdeps/gnu/errlist.c:1325 -msgid "Attempting to link in too many shared libraries" -msgstr "ÊÔͼÓÚ¹ý¶àµÄ¹²Ïí¿âÏàÁ¬½Ó" +#: nis/nis_print_group_entry.c:170 +msgid " No recursive nonmembers\n" +msgstr "" -#: stdio-common/../sysdeps/gnu/errlist.c:1333 -msgid "Cannot exec a shared library directly" -msgstr "ÎÞ·¨Ö±½ÓÖ´Ðй²Ïí¿â" +#: nis/nss_nisplus/nisplus-publickey.c:101 +#: nis/nss_nisplus/nisplus-publickey.c:183 +#, c-format +msgid "DES entry for netname %s not unique\n" +msgstr "" -#: stdio-common/../sysdeps/gnu/errlist.c:1341 -msgid "Streams pipe error" -msgstr "Á÷¹ÜµÀ´íÎó" +#: nis/nss_nisplus/nisplus-publickey.c:220 +#, c-format +msgid "netname2user: missing group id list in `%s'" +msgstr "" -#: stdio-common/../sysdeps/gnu/errlist.c:1349 -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:165 -msgid "Structure needs cleaning" -msgstr "½á¹¹ÐèÒªÇåÀí" +#: nis/nss_nisplus/nisplus-publickey.c:302 +#: nis/nss_nisplus/nisplus-publickey.c:308 +#: nis/nss_nisplus/nisplus-publickey.c:373 +#: nis/nss_nisplus/nisplus-publickey.c:382 +#, c-format +msgid "netname2user: (nis+ lookup): %s\n" +msgstr "" -#: stdio-common/../sysdeps/gnu/errlist.c:1357 -msgid "Not a XENIX named type file" -msgstr "²»ÊÇ XENIX ÃüÃûµÄÀàÐÍÎļþ" +#: nis/nss_nisplus/nisplus-publickey.c:321 +#, c-format +msgid "netname2user: DES entry for %s in directory %s not unique" +msgstr "" -#: stdio-common/../sysdeps/gnu/errlist.c:1365 -msgid "No XENIX semaphores available" -msgstr "ûÓпÉÓÃµÄ XENIX ÐźÅÁ¿" +#: nis/nss_nisplus/nisplus-publickey.c:339 +#, c-format +msgid "netname2user: principal name `%s' too long" +msgstr "netname2user:基本å称“%sâ€è¿‡é•¿" -#: stdio-common/../sysdeps/gnu/errlist.c:1373 -msgid "Is a named type file" -msgstr "ÊÇÒ»¸öÓÐÃûÀàÐÍÎļþ" +#: nis/nss_nisplus/nisplus-publickey.c:395 +#, c-format +msgid "netname2user: LOCAL entry for %s in directory %s not unique" +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 "Ô¶³Ì I/O ´íÎó" +#: nis/nss_nisplus/nisplus-publickey.c:402 +msgid "netname2user: should not have uid 0" +msgstr "netname2user:uid ä¸åº”为 0" -#: stdio-common/../sysdeps/gnu/errlist.c:1389 -msgid "No medium found" -msgstr "ÕÒ²»µ½½éÖÊ" +#: nis/ypclnt.c:825 +msgid "Request arguments bad" +msgstr "请求å‚数错误" -#: stdio-common/../sysdeps/gnu/errlist.c:1397 -msgid "Wrong medium type" -msgstr "´íÎóµÄ½éÖÊÀàÐÍ" +#: nis/ypclnt.c:828 +msgid "RPC failure on NIS operation" +msgstr "" -#: stdio-common/../sysdeps/unix/siglist.c:26 -msgid "Signal 0" -msgstr "ÐźŠ0" +#: nis/ypclnt.c:831 +msgid "Can't bind to server which serves this domain" +msgstr "æ— æ³•äºŽä¸ºæ¤åŸŸæœåŠ¡çš„æœåŠ¡å™¨ç»‘定" -#: stdio-common/../sysdeps/unix/siglist.c:32 -msgid "IOT trap" +#: nis/ypclnt.c:834 +msgid "No such map in server's domain" msgstr "" -#: 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 "²»ÊÇËùÓÐÕß" +#: nis/ypclnt.c:837 +msgid "No such key in map" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:35 -msgid "I/O error" -msgstr "I/O ´íÎó" +#: nis/ypclnt.c:840 +msgid "Internal NIS error" +msgstr "内部 NIS 错误" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:37 -msgid "Arg list too long" -msgstr "²ÎÊýÁбí¹ý³¤" +#: nis/ypclnt.c:843 +msgid "Local resource allocation failure" +msgstr "本地资æºåˆ†é…失败" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:39 -msgid "Bad file number" -msgstr "´íÎóµÄÎļþ±àºÅ" +#: nis/ypclnt.c:846 +msgid "No more records in map database" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:42 -msgid "Not enough space" -msgstr "¿Õ¼ä²»¹»" +#: nis/ypclnt.c:849 +msgid "Can't communicate with portmapper" +msgstr "æ— æ³•ä¸Ž portmapper 通讯" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:46 -msgid "Device busy" -msgstr "É豸æ" +#: nis/ypclnt.c:852 +msgid "Can't communicate with ypbind" +msgstr "æ— æ³•ä¸Ž ypbind 通讯" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:48 -msgid "Cross-device link" -msgstr "¿çÉ豸Á¬½Ó" +#: nis/ypclnt.c:855 +msgid "Can't communicate with ypserv" +msgstr "æ— æ³•ä¸Ž ypserv 通讯" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:53 -msgid "File table overflow" -msgstr "Îļþ±íÒç³ö" +#: nis/ypclnt.c:858 +msgid "Local domain name not set" +msgstr "未设置本地域å" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:63 -msgid "Argument out of domain" -msgstr "" +#: nis/ypclnt.c:861 +msgid "NIS map database is bad" +msgstr "NIS æ˜ å°„æ•°æ®åº“错误" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:64 -msgid "Result too large" -msgstr "½á¹ûÌ«´ó" +#: nis/ypclnt.c:864 +msgid "NIS client/server version mismatch - can't supply service" +msgstr "NIS 客户端/æœåŠ¡å™¨ç‰ˆæœ¬ä¸åŒ¹é… - æ— æ³•æ”¯æŒæœåŠ¡" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:75 -msgid "Deadlock situation detected/avoided" -msgstr "̽²âµ½/ÒѱÜÃâËÀËø" +#: nis/ypclnt.c:870 +msgid "Database is busy" +msgstr "æ•°æ®åº“å¿™" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:76 -msgid "No record locks available" -msgstr "ûÓпÉÓõļǼËø" +#: nis/ypclnt.c:873 +msgid "Unknown NIS error code" +msgstr "未知的 NIS 错误ç " -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:79 -msgid "Disc quota exceeded" -msgstr "³¬³ö´ÅÅÌÏÞ¶î" +#: nis/ypclnt.c:913 +msgid "Internal ypbind error" +msgstr "内部 ypbind 错误" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:80 -msgid "Bad exchange descriptor" -msgstr "´íÎóµÄ½»»»ÃèÊö·û" +#: nis/ypclnt.c:916 +msgid "Domain not bound" +msgstr "未绑定域" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:81 -msgid "Bad request descriptor" -msgstr "´íÎóµÄÇëÇóÃèÊö·û" +#: nis/ypclnt.c:919 +msgid "System resource allocation failure" +msgstr "系统资æºåˆ†é…失败" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:82 -msgid "Message tables full" -msgstr "ÄÚ´æ±íÒÑÂú" +#: nis/ypclnt.c:922 +msgid "Unknown ypbind error" +msgstr "未知的 ypbind 错误" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:83 -msgid "Anode table overflow" -msgstr "Anode ±íÒç³ö" +#: nis/ypclnt.c:963 +msgid "yp_update: cannot convert host to netname\n" +msgstr "yp_updateï¼šæ— æ³•å°†ä¸»æœºå转æ¢ä¸ºç½‘å\n" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:84 -msgid "Bad request code" -msgstr "´íÎóµÄÇëÇóÂë" +#: nis/ypclnt.c:981 +msgid "yp_update: cannot get server address\n" +msgstr "yp_updateï¼šæ— æ³•èŽ·å–æœåŠ¡å™¨åœ°å€\n" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:86 -msgid "File locking deadlock" -msgstr "ÎļþËøËÀËø" +#: nscd/aicache.c:77 nscd/hstcache.c:462 +#, c-format +msgid "Haven't found \"%s\" in hosts cache!" +msgstr "æ— æ³•åœ¨ä¸»æœºç¼“å†²åŒºä¸æ‰¾åˆ°â€œ%sâ€ï¼" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:88 -msgid "Error 58" -msgstr "´íÎó 58" +#: nscd/aicache.c:79 nscd/hstcache.c:464 +#, c-format +msgid "Reloading \"%s\" in hosts cache!" +msgstr "在主机缓冲区ä¸é‡æ–°åŠ 载“%sâ€ï¼" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:89 -msgid "Error 59" -msgstr "´íÎó 59" +#: nscd/cache.c:146 +#, c-format +msgid "add new entry \"%s\" of type %s for %s to cache%s" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:90 -msgid "Not a stream device" -msgstr "²»ÊÇÁ÷É豸" +#: nscd/cache.c:148 +msgid " (first)" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:93 -msgid "Out of stream resources" -msgstr "Á÷×ÊÔ´²»×ã" +#: nscd/cache.c:256 nscd/connections.c:786 +#, c-format +msgid "cannot stat() file `%s': %s" +msgstr "æ— æ³•å¯¹æ–‡ä»¶â€œ%sâ€è¿›è¡Œ stat() æ“作:%s" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:102 -msgid "Error 72" -msgstr "´íÎó 72" +#: nscd/cache.c:285 +#, c-format +msgid "pruning %s cache; time %ld" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:103 -msgid "Error 73" -msgstr "´íÎó 73" +#: nscd/cache.c:312 +#, c-format +msgid "considering %s entry \"%s\", timeout %<PRIu64>" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:105 -msgid "Error 75" -msgstr "´íÎó 75" +#: nscd/connections.c:505 nscd/connections.c:517 nscd/connections.c:529 +#: nscd/connections.c:548 +#, c-format +msgid "invalid persistent database file \"%s\": %s" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:106 -msgid "Error 76" -msgstr "´íÎó 76" +#: nscd/connections.c:519 +msgid "header size does not match" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:107 -msgid "Not a data message" -msgstr "²»ÊÇÊý¾ÝÏûÏ¢" +#: nscd/connections.c:531 +msgid "file size does not match" +msgstr "文件大å°ä¸åŒ¹é…" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:116 -msgid "Attempting to link in more shared libraries than system limit" -msgstr "ÊÔͼÁ¬½ÓµÄ¹²Ïí¿â¸öÊý³¬³öϵͳÏÞÖÆ" +#: nscd/connections.c:550 +msgid "verification failed" +msgstr "验è¯å¤±è´¥" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:117 -msgid "Can not exec a shared library directly" -msgstr "ÎÞ·¨Ö±½ÓÖ´Ðй²Ïí¿â" +#: nscd/connections.c:564 +#, c-format +msgid "suggested size of table for database %s larger than the persistent database's table" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:118 -msgid "Illegal byte sequence" -msgstr "·Ç·¨µÄ×Ö½ÚÐò" +#: nscd/connections.c:574 nscd/connections.c:655 +#, c-format +msgid "cannot create read-only descriptor for \"%s\"; no mmap" +msgstr "æ— æ³•ä¸ºâ€œ%sâ€åˆ›å»ºåªè¯»æ述符;没有 mmap" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:119 -msgid "Operation not applicable" -msgstr "²»¿ÉÓ¦ÓõIJÙ×÷" +#: nscd/connections.c:634 +#, c-format +msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart" +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" +#: nscd/connections.c:641 +#, c-format +msgid "cannot create %s; no persistent database used" +msgstr "æ— æ³•åˆ›å»º %s; ä¸ä½¿ç”¨æŒä¹…æ•°æ®åº“" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:121 -msgid "Error 91" -msgstr "´íÎó 91" +#: nscd/connections.c:644 +#, c-format +msgid "cannot create %s; no sharing possible" +msgstr "æ— æ³•åˆ›å»º %s; æ— æ³•å…±äº«" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:122 -msgid "Error 92" -msgstr "´íÎó 92" +#: nscd/connections.c:715 +#, c-format +msgid "cannot write to database file %s: %s" +msgstr "æ— æ³•å†™å…¥æ•°æ®åº“文件 %s: %s" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:129 -msgid "Option not supported by protocol" -msgstr "ÐÒé²»Ö§³ÖµÄÑ¡Ïî" +#: nscd/connections.c:749 +#, c-format +msgid "cannot set socket to close on exec: %s; disabling paranoia mode" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:130 -msgid "Error 100" -msgstr "´íÎó 100" +#: nscd/connections.c:799 +#, c-format +msgid "cannot open socket: %s" +msgstr "æ— æ³•æ‰“å¼€å¥—æŽ¥å—:%s" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:131 -msgid "Error 101" -msgstr "´íÎó 101" +#: nscd/connections.c:816 +#, c-format +msgid "cannot change socket to nonblocking mode: %s" +msgstr "æ— æ³•è½¬æ¢å¥—接å—到éžå µå¡žæ¨¡å¼: %s" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:132 -msgid "Error 102" -msgstr "´íÎó 102" +#: nscd/connections.c:824 +#, c-format +msgid "cannot set socket to close on exec: %s" +msgstr "æ— æ³•è®¾å®šå¥—æŽ¥å—为 exec 时关é—: %s" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:133 -msgid "Error 103" -msgstr "´íÎó 103" +#: nscd/connections.c:835 +#, c-format +msgid "cannot enable socket to accept connections: %s" +msgstr "æ— æ³•å¯ç”¨å¥—接å—以接å—连接:%s" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:134 -msgid "Error 104" -msgstr "´íÎó 104" +#: nscd/connections.c:926 +#, c-format +msgid "provide access to FD %d, for %s" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:135 -msgid "Error 105" -msgstr "´íÎó 105" +#: nscd/connections.c:938 +#, c-format +msgid "cannot handle old request version %d; current version is %d" +msgstr "æ— æ³•å¤„ç†æ—§è¯·æ±‚版本 %d;当å‰ç‰ˆæœ¬ä¸º %d" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:136 -msgid "Error 106" -msgstr "´íÎó 106" +#: nscd/connections.c:980 nscd/connections.c:1033 +#, c-format +msgid "cannot write result: %s" +msgstr "æ— æ³•å†™å…¥ç»“æžœï¼šâ€œ%sâ€" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:137 -msgid "Error 107" -msgstr "´íÎó 107" +#: nscd/connections.c:1116 +#, c-format +msgid "error getting caller's id: %s" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:138 -msgid "Error 108" -msgstr "´íÎó 108" +#: nscd/connections.c:1175 +#, c-format +msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:139 -msgid "Error 109" -msgstr "´íÎó 109" +#: nscd/connections.c:1189 +#, c-format +msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:140 -msgid "Error 110" -msgstr "´íÎó 110" +#: nscd/connections.c:1229 +#, c-format +msgid "cannot change to old UID: %s; disabling paranoia mode" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:141 -msgid "Error 111" -msgstr "´íÎó 111" +#: nscd/connections.c:1239 +#, c-format +msgid "cannot change to old GID: %s; disabling paranoia mode" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:142 -msgid "Error 112" -msgstr "´íÎó 112" +#: nscd/connections.c:1252 +#, c-format +msgid "cannot change to old working directory: %s; disabling paranoia mode" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:143 -msgid "Error 113" -msgstr "´íÎó 113" +#: nscd/connections.c:1280 +#, c-format +msgid "re-exec failed: %s; disabling paranoia mode" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:144 -msgid "Error 114" -msgstr "´íÎó 114" +#: nscd/connections.c:1289 +#, c-format +msgid "cannot change current working directory to \"/\": %s" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:145 -msgid "Error 115" -msgstr "´íÎó 115" +#: nscd/connections.c:1407 +#, c-format +msgid "short read while reading request: %s" +msgstr "读å–请求时没有读入足够的数æ®ï¼š%s" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:146 -msgid "Error 116" -msgstr "´íÎó 116" +#: nscd/connections.c:1438 +#, c-format +msgid "key length in request too long: %d" +msgstr "请求ä¸çš„键过长:%d" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:147 -msgid "Error 117" -msgstr "´íÎó 117" +#: nscd/connections.c:1451 +#, c-format +msgid "short read while reading request key: %s" +msgstr "读入请求键的时候没有读入足够的数æ®ï¼š%s" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:148 -msgid "Error 118" -msgstr "´íÎó 118" +#: nscd/connections.c:1460 +#, c-format +msgid "handle_request: request received (Version = %d) from PID %ld" +msgstr "处ç†è¯·æ±‚:已从进程ID %2$ld 收到请求 (版本 = %1$d)" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:149 -msgid "Error 119" -msgstr "´íÎó 119" +#: nscd/connections.c:1465 +#, c-format +msgid "handle_request: request received (Version = %d)" +msgstr "处ç†è¯·æ±‚:已收到请求 (版本 = %d)" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:152 -msgid "Operation not supported on transport endpoint" -msgstr "´«Êä¶Ëµã²»Ö§³ÖµÄ²Ù×÷" +#: nscd/connections.c:1826 +#, c-format +msgid "could only start %d threads; terminating" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:154 -msgid "Address family not supported by protocol family" -msgstr "ÐÒé×å²»Ö§³ÖµÄµØÖ·×å" +#: nscd/connections.c:1874 nscd/connections.c:1875 nscd/connections.c:1892 +#: nscd/connections.c:1901 nscd/connections.c:1919 nscd/connections.c:1930 +#: nscd/connections.c:1941 +#, c-format +msgid "Failed to run nscd as user '%s'" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:159 -msgid "Network dropped connection because of reset" -msgstr "ÒòΪÖØÖöø¶Ï¿ªÍøÂçÁ¬½Ó" +#: nscd/connections.c:1893 +#, c-format +msgid "initial getgrouplist failed" +msgstr "åˆå§‹åŒ– getgrouplist 失败" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:166 -msgid "Error 136" -msgstr "´íÎó 136" +#: nscd/connections.c:1902 +#, c-format +msgid "getgrouplist failed" +msgstr "getgrouplist 失败" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:167 -msgid "Not a name file" -msgstr "²»ÊÇÓÐÃûÎļþ" +#: nscd/connections.c:1920 +#, c-format +msgid "setgroups failed" +msgstr "setgroups 失败" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:168 -msgid "Not available" -msgstr "²»¿ÉÓÃ" +#: nscd/grpcache.c:402 nscd/hstcache.c:412 nscd/initgrcache.c:412 +#: nscd/pwdcache.c:397 nscd/servicescache.c:342 +#, c-format +msgid "short write in %s: %s" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:169 -msgid "Is a name file" -msgstr "ÊÇÒ»¸öÓÐÃûÎļþ" +#: nscd/grpcache.c:445 nscd/initgrcache.c:78 +#, c-format +msgid "Haven't found \"%s\" in group cache!" +msgstr "æ— æ³•åœ¨ç»„ç¼“å†²åŒºä¸æ‰¾åˆ°â€œ%sâ€ï¼" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:171 -msgid "Reserved for future use" -msgstr "±£ÁôÓÃÓÚδÀ´" +#: nscd/grpcache.c:447 nscd/initgrcache.c:80 +#, c-format +msgid "Reloading \"%s\" in group cache!" +msgstr "在组缓冲区ä¸é‡æ–°åŠ 载“%sâ€ï¼" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:172 -msgid "Error 142" -msgstr "´íÎó 142" +#: nscd/grpcache.c:524 +#, c-format +msgid "Invalid numeric gid \"%s\"!" +msgstr "" -#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:173 -msgid "Cannot send after socket shutdown" -msgstr "ÎÞ·¨ÔÚÌ×½Ó×ֹرպó·¢ËÍ" +#: nscd/mem.c:383 +#, c-format +msgid "freed %zu bytes in %s cache" +msgstr "" -#: stdio-common/psignal.c:63 +#: nscd/mem.c:512 #, c-format -msgid "%s%sUnknown signal %d\n" -msgstr "%s%sδ֪µÄÐźŠ%d\n" +msgid "no more memory for database '%s'" +msgstr "" -#: malloc/mcheck.c:346 -msgid "memory is consistent, library is buggy\n" -msgstr "ÄÚ´æ²»Ò»Ö£¬¿âÓдíÎó\n" +#: nscd/nscd.c:98 +msgid "Read configuration data from NAME" +msgstr "从 NAME ä¸è¯»å–é…置数æ®" -#: malloc/mcheck.c:349 -msgid "memory clobbered before allocated block\n" +#: nscd/nscd.c:100 +msgid "Do not fork and display messages on the current tty" msgstr "" -#: malloc/mcheck.c:352 -msgid "memory clobbered past end of allocated block\n" +#: nscd/nscd.c:101 +msgid "NUMBER" msgstr "" -#: malloc/mcheck.c:355 -msgid "block freed twice\n" -msgstr "¿éÊÍ·ÅÁËÁ½´Î\n" - -#: malloc/mcheck.c:358 -msgid "bogus mcheck_status, library is buggy\n" -msgstr "" +#: nscd/nscd.c:101 +msgid "Start NUMBER threads" +msgstr "å¯åŠ¨ NUMBER 个线程" -#: malloc/memusagestat.c:53 -msgid "Name output file" -msgstr "ÃûÊä³öÎļþ" +#: nscd/nscd.c:102 +msgid "Shut the server down" +msgstr "å…³é—æœåŠ¡å™¨" -#: malloc/memusagestat.c:54 -msgid "Title string used in output graphic" -msgstr "ÓÃÓÚÊä³öͼÐεıêÌâ×Ö·û´®" +#: nscd/nscd.c:103 +msgid "Print current configuration statistic" +msgstr "打å°å½“å‰é…置统计" -#: malloc/memusagestat.c:55 -msgid "Generate output linear to time (default is linear to number of function calls)" +#: nscd/nscd.c:104 +msgid "TABLE" msgstr "" -#: malloc/memusagestat.c:57 -msgid "Also draw graph for total memory consumption" +#: nscd/nscd.c:105 +msgid "Invalidate the specified cache" msgstr "" -#: malloc/memusagestat.c:58 -msgid "make output graphic VALUE pixel wide" +#: nscd/nscd.c:106 +msgid "TABLE,yes" msgstr "" -#: malloc/memusagestat.c:59 -msgid "make output graphic VALUE pixel high" -msgstr "" +#: nscd/nscd.c:107 +msgid "Use separate cache for each user" +msgstr "为æ¯ä¸ªç”¨æˆ·ä½¿ç”¨åˆ†ç¦»çš„缓冲区" -#: malloc/memusagestat.c:64 -msgid "Generate graphic from memory profiling data" +#: nscd/nscd.c:112 +msgid "Name Service Cache Daemon." msgstr "" -#: malloc/memusagestat.c:67 -msgid "DATAFILE [OUTFILE]" -msgstr "Êý¾ÝÎļþ [Êä³öÎļþ]" +#: nscd/nscd.c:144 nss/getent.c:858 nss/makedb.c:123 +#, c-format +msgid "wrong number of arguments" +msgstr "å‚数个数错误" -#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57 -msgid "Unknown error" -msgstr "δ֪µÄ´íÎó" +#: nscd/nscd.c:154 +#, c-format +msgid "failure while reading configuration file; this is fatal" +msgstr "æ— æ³•è¯»å…¥é…置文件;这是致命的" -#: string/strsignal.c:69 +#: nscd/nscd.c:163 #, c-format -msgid "Real-time signal %d" -msgstr "ʵʱÐźŠ%d" +msgid "already running" +msgstr "å·²ç»åœ¨è¿è¡Œ" -#: string/strsignal.c:73 +#: nscd/nscd.c:178 nscd/nscd.c:233 #, c-format -msgid "Unknown signal %d" -msgstr "δ֪ÐźŠ%d" +msgid "cannot fork" +msgstr "æ— æ³• fork" -#: timezone/zdump.c:175 +#: nscd/nscd.c:241 #, c-format -msgid "%s: usage is %s [ -v ] [ -c cutoff ] zonename ...\n" -msgstr "%s£ºÓ÷¨Îª %s [ -v ] [ -c cutoff ] ÇøÓòÃû ...\n" +msgid "cannot change current working directory to \"/\"" +msgstr "" -#: timezone/zdump.c:268 -msgid "Error writing to standard output" -msgstr "дÈë±ê×¼Êä³ö³ö´í" +#: nscd/nscd.c:249 +msgid "Could not create log file" +msgstr "æ— æ³•åˆ›å»ºæ—¥å¿—æ–‡ä»¶" -#: timezone/zic.c:365 +#: nscd/nscd.c:302 nscd/nscd.c:327 nscd/nscd_stat.c:172 #, c-format -msgid "%s: Memory exhausted: %s\n" -msgstr "%s£ºÄÚ´æºÄ¾¡£º%s\n" - -#: timezone/zic.c:390 misc/error.c:127 misc/error.c:155 -msgid "Unknown system error" -msgstr "δ֪µÄϵͳ´íÎó" +msgid "Only root is allowed to use this option!" +msgstr "åªæœ‰æ ¹ç”¨æˆ·å…许使用本选项ï¼" -#: timezone/zic.c:424 +#: nscd/nscd.c:364 nscd/nscd_stat.c:191 #, c-format -msgid "\"%s\", line %d: %s" -msgstr "¡°%s¡±£¬ÐÐ %d£º%s" +msgid "write incomplete" +msgstr "写入ä¸å®Œæ•´" -#: timezone/zic.c:427 +#: nscd/nscd.c:375 #, c-format -msgid " (rule from \"%s\", line %d)" -msgstr "" +msgid "cannot read invalidate ACK" +msgstr "æ— æ³•è¯»å…¥ invalidate ACK" -#: timezone/zic.c:439 -msgid "warning: " -msgstr "¾¯¸æ£º" +#: nscd/nscd.c:381 +#, c-format +msgid "invalidation failed" +msgstr "æ— æ•ˆåŒ–å¤±è´¥" -#: timezone/zic.c:449 +#: nscd/nscd.c:391 #, c-format -msgid "" -"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" -"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" +msgid "secure services not implemented anymore" msgstr "" -"%s£ºÓ÷¨Îª %s [ -s ] [ -v ] [ -l ±¾µØʱ¼ä ] [ -p posix ¹æÔò ] \\\n" -"\t[ -d Ŀ¼ ] [ -L leapseconds ] [ -y yearistype ] [ ÎļþÃû ... ]\n" -#: timezone/zic.c:491 +#: nscd/nscd_conf.c:57 #, c-format -msgid "%s: More than one -d option specified\n" -msgstr "%s£º¸ø³öÁ˶à¸ö -d Ñ¡Ïî\n" +msgid "database %s is not supported" +msgstr "ä¸æ”¯æŒæ•°æ®åº““%sâ€" -#: timezone/zic.c:501 +#: nscd/nscd_conf.c:108 #, c-format -msgid "%s: More than one -l option specified\n" -msgstr "%s£º¸ø³öÁ˶à¸ö -l Ñ¡Ïî\n" +msgid "Parse error: %s" +msgstr "解æžé”™è¯¯ï¼š%s" -#: timezone/zic.c:511 +#: nscd/nscd_conf.c:193 #, c-format -msgid "%s: More than one -p option specified\n" -msgstr "%s£º¸ø³öÁ˶à¸ö -p Ñ¡Ïî\n" +msgid "Must specify user name for server-user option" +msgstr "" -#: timezone/zic.c:521 +#: nscd/nscd_conf.c:200 #, c-format -msgid "%s: More than one -y option specified\n" -msgstr "%s£º¸ø³öÁ˶à¸ö -y Ñ¡Ïî\n" +msgid "Must specify user name for stat-user option" +msgstr "" -#: timezone/zic.c:531 +#: nscd/nscd_conf.c:244 #, c-format -msgid "%s: More than one -L option specified\n" -msgstr "%s£º¸ø³öÁ˶à¸ö -L Ñ¡Ïî\n" +msgid "invalid value for 'reload-count': %u" +msgstr "“reload-countâ€çš„å€¼æ— æ•ˆ: %u" -#: timezone/zic.c:638 +#: nscd/nscd_conf.c:259 #, c-format -msgid "%s: Can't unlink %s: %s\n" -msgstr "%s£ºÎÞ·¨½â³ýÁ¬½Ó %s£º%s\n" - -#: timezone/zic.c:645 -msgid "hard link failed, symbolic link used" -msgstr "Ó²Á¬½Óʧ°Ü£¬Ê¹Ó÷ûºÅÁ¬½Ó" +msgid "Must specify value for restart-interval option" +msgstr "" -#: timezone/zic.c:653 +#: nscd/nscd_conf.c:273 #, c-format -msgid "%s: Can't link from %s to %s: %s\n" -msgstr "%s£ºÎÞ·¨´Ó %s Á¬½Óµ½ %s£º%s\n" +msgid "Unknown option: %s %s %s" +msgstr "未知的选项:%s %s %s" -#: timezone/zic.c:751 timezone/zic.c:753 -msgid "same rule name in multiple files" -msgstr "¶à¸öÎļþÖеÄÏàͬ¹æÔòÃû" +#: nscd/nscd_conf.c:286 +#, c-format +msgid "cannot get current working directory: %s; disabling paranoia mode" +msgstr "" -#: timezone/zic.c:794 -msgid "unruly zone" +#: nscd/nscd_conf.c:306 +#, c-format +msgid "maximum file size for %s database too small" msgstr "" -#: timezone/zic.c:801 +#: nscd/nscd_stat.c:141 #, c-format -msgid "%s in ruleless zone" +msgid "cannot write statistics: %s" +msgstr "æ— æ³•å†™å…¥ç»Ÿè®¡ï¼š%s" + +#: nscd/nscd_stat.c:156 +msgid "yes" msgstr "" -#: timezone/zic.c:822 -msgid "standard input" -msgstr "±ê×¼ÊäÈë" +#: nscd/nscd_stat.c:157 +msgid "no" +msgstr "" -#: timezone/zic.c:827 +#: nscd/nscd_stat.c:168 #, c-format -msgid "%s: Can't open %s: %s\n" -msgstr "%s£ºÎÞ·¨´ò¿ª %s£º%s\n" +msgid "Only root or %s is allowed to use this option!" +msgstr "åªæœ‰æ ¹ç”¨æˆ·æˆ– %s å…许使用本选项ï¼" -#: timezone/zic.c:838 -msgid "line too long" -msgstr "Ðйý³¤" +#: nscd/nscd_stat.c:179 +#, c-format +msgid "nscd not running!\n" +msgstr "nscd 未è¿è¡Œï¼\n" -#: timezone/zic.c:858 -msgid "input line of unknown type" -msgstr "δ֪ÀàÐ͵ÄÊäÈëÐÐ" +#: nscd/nscd_stat.c:203 +#, c-format +msgid "cannot read statistics data" +msgstr "æ— æ³•è¯»å…¥ç»Ÿè®¡æ•°æ®" -#: timezone/zic.c:874 +#: nscd/nscd_stat.c:206 #, c-format -msgid "%s: Leap line in non leap seconds file %s\n" +msgid "" +"nscd configuration:\n" +"\n" +"%15d server debug level\n" msgstr "" +"nscd é…置:\n" +"\n" +"%15d æœåŠ¡å™¨è°ƒè¯•çº§åˆ«\n" -#: timezone/zic.c:881 timezone/zic.c:1295 timezone/zic.c:1320 +#: nscd/nscd_stat.c:230 #, c-format -msgid "%s: panic: Invalid l_value %d\n" +msgid "%3ud %2uh %2um %2lus server runtime\n" msgstr "" -#: timezone/zic.c:889 +#: nscd/nscd_stat.c:233 #, c-format -msgid "%s: Error reading %s\n" -msgstr "%s£º¶Á %s ´íÎó\n" +msgid " %2uh %2um %2lus server runtime\n" +msgstr "" -#: timezone/zic.c:896 +#: nscd/nscd_stat.c:235 #, c-format -msgid "%s: Error closing %s: %s\n" -msgstr "%s£º¹Ø±Õ %s ´íÎó£º%s\n" - -#: timezone/zic.c:901 -msgid "expected continuation line not found" -msgstr "ÕÒ²»µ½Ó¦¸Ã³öÏÖµÄÐøÐÐ" - -#: timezone/zic.c:957 -msgid "wrong number of fields on Rule line" -msgstr "¹æÔòÐÐÖÐÓòµÄ¸öÊý´íÎó" - -#: timezone/zic.c:961 -msgid "nameless rule" -msgstr "ÎÞÃû¹æÔò" - -#: timezone/zic.c:966 -msgid "invalid saved time" +msgid " %2um %2lus server runtime\n" msgstr "" -#: timezone/zic.c:985 -msgid "wrong number of fields on Zone line" -msgstr "ÇøÓòÐÐÖÐÓòµÄ¸öÊý´íÎó" - -#: timezone/zic.c:991 +#: nscd/nscd_stat.c:237 #, c-format -msgid "\"Zone %s\" line and -l option are mutually exclusive" +msgid " %2lus server runtime\n" msgstr "" -#: timezone/zic.c:999 +#: nscd/nscd_stat.c:239 #, c-format -msgid "\"Zone %s\" line and -p option are mutually exclusive" +msgid "" +"%15d current number of threads\n" +"%15d maximum number of threads\n" +"%15lu number of times clients had to wait\n" +"%15s paranoia mode enabled\n" +"%15lu restart internal\n" msgstr "" -#: timezone/zic.c:1011 +#: nscd/nscd_stat.c:273 #, c-format -msgid "duplicate zone name %s (file \"%s\", line %d)" -msgstr "Öظ´µÄÇøÓòÃû %s (Îļþ¡°%s¡±£¬ÐÐ %d)" - -#: timezone/zic.c:1027 -msgid "wrong number of fields on Zone continuation line" +msgid "" +"\n" +"%s cache:\n" +"\n" +"%15s cache is enabled\n" +"%15s cache is persistent\n" +"%15s cache is shared\n" +"%15zu suggested size\n" +"%15zu total data pool size\n" +"%15zu used data pool size\n" +"%15lu seconds time to live for positive entries\n" +"%15lu seconds time to live for negative entries\n" +"%15<PRIuMAX> cache hits on positive entries\n" +"%15<PRIuMAX> cache hits on negative entries\n" +"%15<PRIuMAX> cache misses on positive entries\n" +"%15<PRIuMAX> cache misses on negative entries\n" +"%15lu%% cache hit rate\n" +"%15zu current number of cached values\n" +"%15zu maximum number of cached values\n" +"%15zu maximum chain length searched\n" +"%15<PRIuMAX> number of delays on rdlock\n" +"%15<PRIuMAX> number of delays on wrlock\n" +"%15<PRIuMAX> memory allocations failed\n" +"%15s check /etc/%s for changes\n" msgstr "" -#: timezone/zic.c:1067 -msgid "invalid UTC offset" -msgstr "ÎÞЧµÄ UTC Æ«ÒÆÁ¿" +#: nscd/pwdcache.c:440 +#, c-format +msgid "Haven't found \"%s\" in password cache!" +msgstr "æ— æ³•åœ¨å£ä»¤ç¼“冲区ä¸æ‰¾åˆ°â€œ%sâ€ï¼" -#: timezone/zic.c:1070 -msgid "invalid abbreviation format" -msgstr "ÎÞЧµÄËõÂÔ¸ñʽ" +#: nscd/pwdcache.c:442 +#, c-format +msgid "Reloading \"%s\" in password cache!" +msgstr "在å£ä»¤ç¼“冲区ä¸é‡æ–°åŠ 载“%sâ€ï¼" -#: timezone/zic.c:1096 -msgid "Zone continuation line end time is not after end time of previous line" +#: nscd/pwdcache.c:520 +#, c-format +msgid "Invalid numeric uid \"%s\"!" msgstr "" -#: timezone/zic.c:1123 -msgid "wrong number of fields on Leap line" +#: nscd/selinux.c:156 +#, c-format +msgid "Failed opening connection to the audit subsystem: %m" msgstr "" -#: timezone/zic.c:1132 -msgid "invalid leaping year" -msgstr "ÎÞЧµÄÈòÄê" - -#: timezone/zic.c:1147 timezone/zic.c:1250 -msgid "invalid month name" -msgstr "ÎÞЧµÄÔÂÃû³Æ" - -#: timezone/zic.c:1160 timezone/zic.c:1372 timezone/zic.c:1386 -msgid "invalid day of month" -msgstr "ÎÞЧµÄÈÕ" - -#: timezone/zic.c:1165 -msgid "time before zero" +#: nscd/selinux.c:177 +msgid "Failed to set keep-capabilities" msgstr "" -#: timezone/zic.c:1173 timezone/zic.c:2049 timezone/zic.c:2068 -msgid "time overflow" -msgstr "ʱ¼äÒç³ö" - -#: timezone/zic.c:1176 timezone/zic.c:1279 -msgid "invalid time of day" -msgstr "ÎÞЧµÄʱ¼ä" - -#: timezone/zic.c:1195 -msgid "illegal CORRECTION field on Leap line" +#: nscd/selinux.c:178 nscd/selinux.c:241 +#, c-format +msgid "prctl(KEEPCAPS) failed" msgstr "" -#: timezone/zic.c:1199 -msgid "illegal Rolling/Stationary field on Leap line" +#: nscd/selinux.c:192 +msgid "Failed to initialize drop of capabilities" msgstr "" -#: timezone/zic.c:1214 -msgid "wrong number of fields on Link line" -msgstr "Á¬½ÓÐÐÖÐÓòµÄ¸öÊý´íÎó" - -#: timezone/zic.c:1218 -msgid "blank FROM field on Link line" -msgstr "Link ÐÐÖÐ¿Õ°×µÄ FROM Óò" - -#: timezone/zic.c:1222 -msgid "blank TO field on Link line" -msgstr "Link ÐÐÖÐ¿Õ°×µÄ TO Óò" - -#: timezone/zic.c:1299 -msgid "invalid starting year" -msgstr "ÎÞЧµÄÆðʼÄê·Ý" - -#: timezone/zic.c:1303 timezone/zic.c:1328 -msgid "starting year too low to be represented" -msgstr "" +#: nscd/selinux.c:193 +#, c-format +msgid "cap_init failed" +msgstr "cap_init 失败" -#: timezone/zic.c:1305 timezone/zic.c:1330 -msgid "starting year too high to be represented" +#: nscd/selinux.c:214 nscd/selinux.c:231 +msgid "Failed to drop capabilities" msgstr "" -#: timezone/zic.c:1324 -msgid "invalid ending year" -msgstr "ÎÞЧµÄÖÕÖ¹Äê·Ý" - -#: timezone/zic.c:1333 -msgid "starting year greater than ending year" -msgstr "ÆðʼÄê·Ý´óÓÚÖÕÖ¹Äê·Ý" +#: nscd/selinux.c:215 nscd/selinux.c:232 +#, c-format +msgid "cap_set_proc failed" +msgstr "cap_set_proc 失败" -#: timezone/zic.c:1340 -msgid "typed single year" +#: nscd/selinux.c:240 +msgid "Failed to unset keep-capabilities" msgstr "" -#: timezone/zic.c:1377 -msgid "invalid weekday name" -msgstr "ÎÞЧµÄÐÇÆÚÃû" +#: nscd/selinux.c:256 +msgid "Failed to determine if kernel supports SELinux" +msgstr "" -#: timezone/zic.c:1492 +#: nscd/selinux.c:271 #, c-format -msgid "%s: Can't remove %s: %s\n" -msgstr "%s£ºÎÞ·¨É¾³ý %s£º%s\n" +msgid "Failed to start AVC thread" +msgstr "" -#: timezone/zic.c:1502 +#: nscd/selinux.c:293 #, c-format -msgid "%s: Can't create %s: %s\n" -msgstr "%s£ºÎÞ·¨´´½¨ %s£º%s\n" +msgid "Failed to create AVC lock" +msgstr "æ— æ³•åˆ›å»º AVC é”" -#: timezone/zic.c:1568 +#: nscd/selinux.c:333 #, c-format -msgid "%s: Error writing %s\n" -msgstr "%s£ºÐ´ %s ´íÎó\n" +msgid "Failed to start AVC" +msgstr "æ— æ³•å¯åŠ¨ AVC" -#: timezone/zic.c:1758 -msgid "can't determine time zone abbreviation to use just after until time" +#: nscd/selinux.c:335 +msgid "Access Vector Cache (AVC) started" msgstr "" -#: timezone/zic.c:1801 -msgid "too many transitions?!" +#: nscd/selinux.c:356 +msgid "Error getting context of socket peer" msgstr "" -#: timezone/zic.c:1820 -msgid "internal error - addtype called with bad isdst" -msgstr "ÄÚ²¿´íÎó - ÒÔ´íÎóµÄ isdst µ÷Óà addtype" - -#: timezone/zic.c:1824 -msgid "internal error - addtype called with bad ttisstd" -msgstr "ÄÚ²¿´íÎó - ÒÔ´íÎóµÄ ttisstd µ÷Óà addtype" - -#: timezone/zic.c:1828 -msgid "internal error - addtype called with bad ttisgmt" -msgstr "ÄÚ²¿´íÎó - ÒÔ´íÎóµÄ ttisgmt µ÷Óà addtype" - -#: timezone/zic.c:1847 -msgid "too many local time types" -msgstr "¹ý¶àµÄ±¾µØʱ¼äÀàÐÍ" - -#: timezone/zic.c:1875 -msgid "too many leap seconds" +#: nscd/selinux.c:361 +msgid "Error getting context of nscd" msgstr "" -#: timezone/zic.c:1881 -msgid "repeated leap second moment" -msgstr "" +#: nscd/selinux.c:367 +msgid "Error getting sid from context" +msgstr "æ— æ³•ä»Žä¸Šä¸‹æ–‡ä¸èŽ·å– sid" -#: timezone/zic.c:1933 -msgid "Wild result from command execution" +#: nscd/selinux.c:399 +#, c-format +msgid "" +"\n" +"SELinux AVC Statistics:\n" +"\n" +"%15u entry lookups\n" +"%15u entry hits\n" +"%15u entry misses\n" +"%15u entry discards\n" +"%15u CAV lookups\n" +"%15u CAV hits\n" +"%15u CAV probes\n" +"%15u CAV misses\n" msgstr "" -#: timezone/zic.c:1934 +#: nscd/servicescache.c:389 #, c-format -msgid "%s: command was '%s', result was %d\n" -msgstr "%s£ºÃüÁîΪ¡°%s¡±£¬½á¹ûΪ %d\n" +msgid "Haven't found \"%s\" in services cache!" +msgstr "æ— æ³•åœ¨æœåŠ¡ç¼“冲区ä¸æ‰¾åˆ°â€œ%sâ€ï¼" -#: timezone/zic.c:2029 -msgid "Odd number of quotation marks" -msgstr "ÆæÊý¸öÒýºÅ" +#: nscd/servicescache.c:391 +#, c-format +msgid "Reloading \"%s\" in services cache!" +msgstr "在æœåŠ¡ç¼“冲区ä¸é‡æ–°åŠ 载“%sâ€ï¼" -#: timezone/zic.c:2115 -msgid "use of 2/29 in non leap-year" -msgstr "" +#: nss/getent.c:52 +msgid "database [key ...]" +msgstr "æ•°æ®åº“ [é”® ...]" -#: timezone/zic.c:2149 -msgid "no day in month matches rule" -msgstr "" +#: nss/getent.c:57 +msgid "Service configuration to be used" +msgstr "è¦ä½¿ç”¨çš„æœåŠ¡é…ç½®" -#: timezone/zic.c:2172 -msgid "too many, or too long, time zone abbreviations" -msgstr "¹ý¶à»ò¹ý³¤µÄʱÇøËõд" +#: nss/getent.c:62 +msgid "" +"Get entries from administrative database.\vFor bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" -#: timezone/zic.c:2213 +#: nss/getent.c:145 nss/getent.c:394 #, c-format -msgid "%s: Can't create directory %s: %s\n" -msgstr "%s£ºÎÞ·¨´´½¨Ä¿Â¼ %s£º%s\n" +msgid "Enumeration not supported on %s\n" +msgstr "%s ä¸æ”¯æŒæžšä¸¾\n" -#: timezone/zic.c:2235 +#: nss/getent.c:782 #, c-format -msgid "%s: %d did not sign extend correctly\n" -msgstr "" +msgid "Unknown database name" +msgstr "未知的数æ®åº“å" -#: posix/../sysdeps/generic/wordexp.c:1801 -msgid "parameter null or not set" -msgstr "²ÎÊýΪ null »òδÉèÖÃ" +#: nss/getent.c:808 +msgid "Supported databases:\n" +msgstr "支æŒçš„æ•°æ®åº“:\n" -#: 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 "ÓòÃû½âÎöÖгöÏÖ²»¿ÉÐÞ¸´µÄʧ°Ü" +#: nss/getent.c:868 +#, c-format +msgid "Unknown database: %s\n" +msgstr "未知的数æ®åº“:%s\n" -#: posix/../sysdeps/posix/gai_strerror.c:35 -msgid "ai_family not supported" -msgstr "²»Ö§³Ö ai_family" +#: nss/makedb.c:60 +msgid "Convert key to lower case" +msgstr "" -#: posix/../sysdeps/posix/gai_strerror.c:36 -msgid "Memory allocation failure" -msgstr "ÄÚ´æ·ÖÅäʧ°Ü" +#: nss/makedb.c:63 +msgid "Do not print messages while building database" +msgstr "" -#: posix/../sysdeps/posix/gai_strerror.c:37 -msgid "No address associated with hostname" -msgstr "ûÓÐÓëÖ÷»úÃû¹ØÁªµÄµØÖ·" +#: nss/makedb.c:65 +msgid "Print content of database file, one entry a line" +msgstr "" -#: posix/../sysdeps/posix/gai_strerror.c:38 -msgid "Name or service not known" -msgstr "δ֪µÄÃû³Æ»ò·þÎñ" +#: nss/makedb.c:70 +msgid "Create simple DB database from textual input." +msgstr "" -#: posix/../sysdeps/posix/gai_strerror.c:39 -msgid "Servname not supported for ai_socktype" +#: nss/makedb.c:73 +msgid "" +"INPUT-FILE OUTPUT-FILE\n" +"-o OUTPUT-FILE INPUT-FILE\n" +"-u INPUT-FILE" msgstr "" +"输入文件 输出文件\n" +"-o 输出文件 输入文件\n" +"-u 输入文件" -#: posix/../sysdeps/posix/gai_strerror.c:40 -msgid "ai_socktype not supported" -msgstr "²»Ö§³Ö ai_socktype" +#: nss/makedb.c:142 +#, c-format +msgid "No usable database library found." +msgstr "未找到å¯ç”¨çš„æ•°æ®åº“函数库" -#: posix/../sysdeps/posix/gai_strerror.c:41 -msgid "System error" -msgstr "ϵͳ´íÎó" +#: nss/makedb.c:149 +#, c-format +msgid "cannot open database file `%s': %s" +msgstr "æ— æ³•æ‰“å¼€æ•°æ®åº“文件“%sâ€: %s" -#: posix/../sysdeps/posix/gai_strerror.c:42 -msgid "Processing request in progress" +#: nss/makedb.c:151 +msgid "incorrectly formatted file" msgstr "" -#: posix/../sysdeps/posix/gai_strerror.c:43 -msgid "Request canceled" -msgstr "ÇëÇóÒÑÈ¡Ïû" +#: nss/makedb.c:331 +msgid "duplicate key" +msgstr "" -#: posix/../sysdeps/posix/gai_strerror.c:44 -msgid "Request not canceled" -msgstr "ÇëÇóδȡÏû" +#: nss/makedb.c:337 +#, c-format +msgid "while writing database file" +msgstr "当写数æ®åº“文件" -#: posix/../sysdeps/posix/gai_strerror.c:45 -msgid "All requests done" -msgstr "Íê³ÉËùÓÐÇëÇó" +#: nss/makedb.c:348 +#, c-format +msgid "problems while reading `%s'" +msgstr "读å–“%sâ€æ—¶å‡ºé”™" -#: posix/../sysdeps/posix/gai_strerror.c:46 -msgid "Interrupted by a signal" -msgstr "±»ÐźÅÖжÏ" +#: nss/makedb.c:368 nss/makedb.c:385 +#, c-format +msgid "while reading database" +msgstr "当读数æ®åº“" -#: posix/getconf.c:889 +#: posix/getconf.c:945 #, c-format msgid "Usage: %s [-v specification] variable_name [pathname]\n" -msgstr "Ó÷¨£º%s [-v ¹æ·¶] ±äÁ¿Ãû [·¾¶Ãû]\n" +msgstr "用法:%s [-v 规范] å˜é‡å [路径å]\n" + +#: posix/getconf.c:948 +#, c-format +msgid " %s -a [pathname]\n" +msgstr "" -#: posix/getconf.c:947 +#: posix/getconf.c:1067 #, c-format msgid "unknown specification \"%s\"" -msgstr "δ֪µÄ¹æ·¶¡°%s¡±" +msgstr "未知的规范“%sâ€" + +#: posix/getconf.c:1095 +#, c-format +msgid "Couldn't execute %s" +msgstr "" -#: posix/getconf.c:974 posix/getconf.c:990 +#: posix/getconf.c:1135 posix/getconf.c:1151 msgid "undefined" -msgstr "䶨Òå" +msgstr "未定义" -#: posix/getconf.c:1012 +#: posix/getconf.c:1173 #, c-format msgid "Unrecognized variable `%s'" -msgstr "²»¿Éʶ±ðµÄ±äÁ¿¡°%s¡±" +msgstr "ä¸å¯è¯†åˆ«çš„å˜é‡â€œ%sâ€" -#: posix/getopt.c:692 posix/getopt.c:704 +#: posix/getopt.c:571 posix/getopt.c:587 #, c-format msgid "%s: option `%s' is ambiguous\n" -msgstr "%s£ºÑ¡Ïî¡°%s¡±¾ßÓжþÒåÐÔ\n" +msgstr "%s:选项“%sâ€å…·æœ‰äºŒä¹‰æ€§\n" -#: posix/getopt.c:737 posix/getopt.c:741 +#: posix/getopt.c:620 posix/getopt.c:624 #, c-format msgid "%s: option `--%s' doesn't allow an argument\n" -msgstr "%s£ºÑ¡Ïî¡°--%s¡±²»½ÓÊÜÈκβÎÊý\n" +msgstr "%s:选项“--%sâ€ä¸æŽ¥å—任何å‚æ•°\n" -#: posix/getopt.c:750 posix/getopt.c:755 +#: posix/getopt.c:633 posix/getopt.c:638 #, c-format msgid "%s: option `%c%s' doesn't allow an argument\n" -msgstr "%s£ºÑ¡Ïî¡°%c%s¡±²»½ÓÊܲÎÊý\n" +msgstr "%s:选项“%c%sâ€ä¸æŽ¥å—å‚æ•°\n" -#: posix/getopt.c:791 posix/getopt.c:804 posix/getopt.c:1093 -#: posix/getopt.c:1106 +#: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016 +#: posix/getopt.c:1035 #, c-format msgid "%s: option `%s' requires an argument\n" -msgstr "%s£ºÑ¡Ïî¡°%s¡±ÐèÒªÒ»¸ö²ÎÊý\n" +msgstr "%s:选项“%sâ€éœ€è¦ä¸€ä¸ªå‚æ•°\n" -#: posix/getopt.c:842 posix/getopt.c:845 +#: posix/getopt.c:738 posix/getopt.c:741 #, c-format msgid "%s: unrecognized option `--%s'\n" -msgstr "%s£ºÎÞ·¨Ê¶±ðµÄÑ¡Ïî¡°--%s¡±\n" +msgstr "%sï¼šæ— æ³•è¯†åˆ«çš„é€‰é¡¹â€œ--%sâ€\n" -#: posix/getopt.c:853 posix/getopt.c:856 +#: posix/getopt.c:749 posix/getopt.c:752 #, c-format msgid "%s: unrecognized option `%c%s'\n" -msgstr "%s£ºÎÞ·¨Ê¶±ðµÄÑ¡Ïî¡°%c%s¡±\n" +msgstr "%sï¼šæ— æ³•è¯†åˆ«çš„é€‰é¡¹â€œ%c%sâ€\n" -#: posix/getopt.c:903 posix/getopt.c:906 +#: posix/getopt.c:804 posix/getopt.c:807 #, c-format msgid "%s: illegal option -- %c\n" -msgstr "%s£ºÎÞЧѡÏî -- %c\n" +msgstr "%sï¼šæ— æ•ˆé€‰é¡¹ -- %c\n" -#: posix/getopt.c:912 posix/getopt.c:915 +#: posix/getopt.c:813 posix/getopt.c:816 #, c-format msgid "%s: invalid option -- %c\n" -msgstr "%s£ºÎÞЧѡÏî -- %c\n" +msgstr "%sï¼šæ— æ•ˆé€‰é¡¹ -- %c\n" -#: posix/getopt.c:962 posix/getopt.c:973 posix/getopt.c:1159 -#: posix/getopt.c:1172 +#: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088 +#: posix/getopt.c:1106 #, c-format msgid "%s: option requires an argument -- %c\n" -msgstr "%s£ºÑ¡ÏîÐèÒªÒ»¸ö²ÎÊý -- %c\n" +msgstr "%s:选项需è¦ä¸€ä¸ªå‚æ•° -- %c\n" -#: posix/getopt.c:1025 posix/getopt.c:1036 +#: posix/getopt.c:937 posix/getopt.c:953 #, c-format msgid "%s: option `-W %s' is ambiguous\n" -msgstr "%s£ºÑ¡Ïî¡°-W %s¡±¾ßÓжþÒåÐÔ\n" +msgstr "%s:选项“-W %sâ€å…·æœ‰äºŒä¹‰æ€§\n" -#: posix/getopt.c:1060 posix/getopt.c:1072 +#: posix/getopt.c:977 posix/getopt.c:995 #, c-format msgid "%s: option `-W %s' doesn't allow an argument\n" -msgstr "%s£ºÑ¡Ïî¡°-W %s¡±²»½ÓÊܲÎÊý\n" +msgstr "%s:选项“-W %sâ€ä¸æŽ¥å—å‚æ•°\n" -#: posix/regcomp.c:136 +#: posix/regcomp.c:135 msgid "No match" -msgstr "ûÓÐÆ¥Åä" +msgstr "没有匹é…" -#: posix/regcomp.c:139 +#: posix/regcomp.c:138 msgid "Invalid regular expression" -msgstr "ÎÞЧµÄ³£¹æ±í´ïʽ" +msgstr "æ— æ•ˆçš„å¸¸è§„è¡¨è¾¾å¼" -#: posix/regcomp.c:142 +#: posix/regcomp.c:141 msgid "Invalid collation character" msgstr "" -#: posix/regcomp.c:145 +#: posix/regcomp.c:144 msgid "Invalid character class name" -msgstr "ÎÞЧµÄ×Ö·ûÀàÃû" +msgstr "æ— æ•ˆçš„å—符类å" -#: posix/regcomp.c:148 +#: posix/regcomp.c:147 msgid "Trailing backslash" msgstr "" -#: posix/regcomp.c:151 +#: posix/regcomp.c:150 msgid "Invalid back reference" -msgstr "ÎÞЧµÄÏòºóÒýÓÃ" +msgstr "æ— æ•ˆçš„å‘åŽå¼•ç”¨" -#: posix/regcomp.c:154 +#: posix/regcomp.c:153 msgid "Unmatched [ or [^" -msgstr " ²»Æ¥ÅäµÄ [ »ò [^" +msgstr " ä¸åŒ¹é…çš„ [ 或 [^" -#: posix/regcomp.c:157 +#: posix/regcomp.c:156 msgid "Unmatched ( or \\(" -msgstr "²»Æ¥ÅäµÄ ( »ò \\(" +msgstr "ä¸åŒ¹é…çš„ ( 或 \\(" -#: posix/regcomp.c:160 +#: posix/regcomp.c:159 msgid "Unmatched \\{" -msgstr "²»Æ¥ÅäµÄ \\{" +msgstr "ä¸åŒ¹é…çš„ \\{" -#: posix/regcomp.c:163 +#: posix/regcomp.c:162 msgid "Invalid content of \\{\\}" -msgstr "ÎÞЧµÄ \\{\\} µÄÄÚÈÝ" +msgstr "æ— æ•ˆçš„ \\{\\} 的内容" -#: posix/regcomp.c:166 +#: posix/regcomp.c:165 msgid "Invalid range end" msgstr "" -#: posix/regcomp.c:169 +#: posix/regcomp.c:168 msgid "Memory exhausted" -msgstr "ÄÚ´æºÄ¾¡" +msgstr "内å˜è€—å°½" -#: posix/regcomp.c:172 +#: posix/regcomp.c:171 msgid "Invalid preceding regular expression" -msgstr "ÎÞЧµÄÇ°µ¼³£¹æ±í´ïʽ" +msgstr "æ— æ•ˆçš„å‰å¯¼å¸¸è§„表达å¼" -#: posix/regcomp.c:175 +#: posix/regcomp.c:174 msgid "Premature end of regular expression" -msgstr "³£¹æ±í´ïʽ·ÇÕý³£½áÊø" +msgstr "常规表达å¼éžæ£å¸¸ç»“æŸ" -#: posix/regcomp.c:178 +#: posix/regcomp.c:177 msgid "Regular expression too big" -msgstr "³£¹æ±í´ïʽ¹ý´ó" +msgstr "常规表达å¼è¿‡å¤§" -#: posix/regcomp.c:181 +#: posix/regcomp.c:180 msgid "Unmatched ) or \\)" -msgstr "²»Æ¥ÅäµÄ ) »ò \\)" +msgstr "ä¸åŒ¹é…çš„ ) 或 \\)" -#: posix/regcomp.c:615 +#: posix/regcomp.c:660 msgid "No previous regular expression" -msgstr "ûÓÐÇ°Ò»¸ö³£¹æ±í´ïʽ" - -#: argp/argp-help.c:213 -#, c-format -msgid "%.*s: ARGP_HELP_FMT parameter requires a value" -msgstr "%.*s£º²ÎÊý ARGP_HELP_FMT ÐèÒªÒ»¸öÖµ" - -#: argp/argp-help.c:222 -#, c-format -msgid "%.*s: Unknown ARGP_HELP_FMT parameter" -msgstr "%.*s£ºÎ´ÖªµÄ ARGP_HELP_FMT ²ÎÊý" - -#: argp/argp-help.c:234 -#, c-format -msgid "Garbage in ARGP_HELP_FMT: %s" -msgstr "" - -#: argp/argp-help.c:1189 -msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." -msgstr "" - -#: argp/argp-help.c:1572 -msgid "Usage:" -msgstr "Ó÷¨£º" - -#: argp/argp-help.c:1576 -msgid " or: " -msgstr " »ò£º" - -#: argp/argp-help.c:1588 -msgid " [OPTION...]" -msgstr " [Ñ¡Ïî...]" - -#: argp/argp-help.c:1615 -#, c-format -msgid "Try `%s --help' or `%s --usage' for more information.\n" -msgstr "ÊÔÓá°%s --help¡±»ò¡°%s --usage¡±ÒÔ»ñÈ¡¸ü¶àÐÅÏ¢¡£\n" - -#: argp/argp-help.c:1643 -#, c-format -msgid "Report bugs to %s.\n" -msgstr "½«´íÎ󱨸æ¸ø %s¡£\n" - -#: argp/argp-parse.c:100 -msgid "Give this help list" -msgstr "¸ø³ö¸ÃϵͳÇóÖúÁбí" +msgstr "没有å‰ä¸€ä¸ªå¸¸è§„表达å¼" -#: argp/argp-parse.c:101 -msgid "Give a short usage message" -msgstr "¸ø³ö¼òÒªµÄÓ÷¨ÐÅÏ¢" - -#: argp/argp-parse.c:102 -msgid "Set the program name" -msgstr "É趨³ÌÐòÃû" - -#: argp/argp-parse.c:104 -msgid "Hang for SECS seconds (default 3600)" -msgstr "¹ÒÆð SECS Ãë (ĬÈÏ 3600)" - -#: argp/argp-parse.c:161 -msgid "Print program version" -msgstr "´òÓ¡³ÌÐò°æ±¾ºÅ" - -#: argp/argp-parse.c:177 -msgid "(PROGRAM ERROR) No version known!?" -msgstr "(³ÌÐò´íÎó) ²»ÖªµÀ°æ±¾ºÅ£¡£¿" - -#: argp/argp-parse.c:653 -#, c-format -msgid "%s: Too many arguments\n" -msgstr "%s£º¹ý¶àµÄÑ¡Ïî\n" - -#: argp/argp-parse.c:794 -msgid "(PROGRAM ERROR) Option should have been recognized!?" -msgstr "(³ÌÐò´íÎó) Ñ¡ÏîÓ¦¸Ã¿Éʶ±ð£¡£¿" +#: posix/wordexp.c:1798 +msgid "parameter null or not set" +msgstr "å‚数为 null 或未设置" -#: resolv/herror.c:67 +#: resolv/herror.c:68 msgid "Resolver Error 0 (no error)" -msgstr "½âÎöÆ÷´íÎó 0 (ÎÞ´íÎó)" +msgstr "解æžå™¨é”™è¯¯ 0 (æ— é”™è¯¯)" -#: resolv/herror.c:68 +#: resolv/herror.c:69 msgid "Unknown host" -msgstr "δ֪µÄÖ÷»ú" +msgstr "未知的主机" -#: resolv/herror.c:69 +#: resolv/herror.c:70 msgid "Host name lookup failure" -msgstr "Ö÷»úÃûËÑË÷ʧ°Ü" +msgstr "主机åæœç´¢å¤±è´¥" -#: resolv/herror.c:70 +#: resolv/herror.c:71 msgid "Unknown server error" -msgstr "δ֪µÄ·þÎñÆ÷´íÎó" +msgstr "未知的æœåŠ¡å™¨é”™è¯¯" -#: resolv/herror.c:71 +#: resolv/herror.c:72 msgid "No address associated with name" -msgstr "ûÓÐÓëÃû×Ö¹ØÁªµÄµØÖ·" +msgstr "没有与åå—å…³è”的地å€" #: resolv/herror.c:107 msgid "Resolver internal error" -msgstr "½âÎöÆ÷ÄÚ²¿´íÎó" +msgstr "解æžå™¨å†…部错误" #: resolv/herror.c:110 msgid "Unknown resolver error" -msgstr "δ֪µÄ½âÎöÆ÷´íÎó" - -#: resolv/res_hconf.c:147 -#, c-format -msgid "%s: line %d: expected service, found `%s'\n" -msgstr "%s£ºÐÐ %d£ºÓ¦Îª service£¬µÃµ½¡°%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£ºÁбí·Ö¸ô·ûûÓгöÏÖÔڹؼü×ÖÖ®ºó" +msgstr "未知的解æžå™¨é”™è¯¯" -#: resolv/res_hconf.c:231 +#: resolv/res_hconf.c:124 #, c-format msgid "%s: line %d: cannot specify more than %d trim domains" -msgstr "%s£ºÐÐ %d£ºÎÞ·¨Ö¸¶¨¶àÓÚ %d ¸ö¹æÕûÓò" +msgstr "%s:行 %dï¼šæ— æ³•æŒ‡å®šå¤šäºŽ %d 个规整域" -#: resolv/res_hconf.c:256 +#: resolv/res_hconf.c:145 #, c-format msgid "%s: line %d: list delimiter not followed by domain" -msgstr "%s£ºÐÐ %d£ºÁбí·Ö¸ô·ûûÓгöÏÖÔÚÓòÖ®ºó" +msgstr "%s:行 %d:列表分隔符没有出现在域之åŽ" -#: resolv/res_hconf.c:319 +#: resolv/res_hconf.c:204 #, c-format msgid "%s: line %d: expected `on' or `off', found `%s'\n" -msgstr "%s£ºÐÐ %d£ºÓ¦Îª¡°on¡±»ò¡°off¡±£¬µÃµ½¡°%s¡±\n" +msgstr "%s:行 %d:应为“onâ€æˆ–“offâ€ï¼Œå¾—到“%sâ€\n" -#: resolv/res_hconf.c:366 +#: resolv/res_hconf.c:247 #, c-format msgid "%s: line %d: bad command `%s'\n" -msgstr "%s£ºÐÐ %d£º´íÎóÃüÁî¡°%s¡±\n" +msgstr "%s:行 %d:错误命令“%sâ€\n" -#: resolv/res_hconf.c:395 +#: resolv/res_hconf.c:282 #, c-format msgid "%s: line %d: ignoring trailing garbage `%s'\n" msgstr "" -#: 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:308 +#: stdio-common/psignal.c:51 #, c-format -msgid "Enumeration not supported on %s\n" -msgstr "%s ²»Ö§³Öö¾Ù\n" - -#: nss/getent.c:732 -msgid "getent - get entries from administrative database." -msgstr "getent - ÖعÜÀíÊý¾Ý¿â»ñÈ¡ÌõÄ¿¡£" - -#: nss/getent.c:733 -msgid "Supported databases:" -msgstr "Ö§³ÖµÄÊý¾Ý¿â£º" - -#: nss/getent.c:790 nscd/nscd.c:124 nscd/nscd_nischeck.c:64 -msgid "wrong number of arguments" -msgstr "²ÎÊý¸öÊý´íÎó" - -#: nss/getent.c:800 -#, 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 "" - -#: 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 "" +msgid "%s%sUnknown signal %d\n" +msgstr "%s%sæœªçŸ¥çš„ä¿¡å· %d\n" -#: inet/rcmd.c:310 -#, c-format -msgid "rcmd: poll (setting up stderr): %m\n" -msgstr "" +#: stdio-common/psignal.c:52 +msgid "Unknown signal" +msgstr "未知信å·" -#: inet/rcmd.c:313 -msgid "poll: protocol failure in circuit setup\n" -msgstr "" +#: string/_strerror.c:45 sysdeps/mach/_strerror.c:87 +msgid "Unknown error " +msgstr "未知的错误 " -#: inet/rcmd.c:358 -msgid "socket: protocol failure in circuit setup\n" -msgstr "" +#: string/strerror.c:43 +msgid "Unknown error" +msgstr "未知的错误" -#: inet/rcmd.c:387 +#: string/strsignal.c:65 #, c-format -msgid "rcmd: %s: short read" -msgstr "" - -#: 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 "ij´¦µÄÓ²Á¬½Ó" - -#: 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 "ɾ³ý²»ÄÜÓÉÆäËüÈ˶ÁÈëµÄ¿ÚÁî»ò make Îļþ" +msgid "Real-time signal %d" +msgstr "å®žæ—¶ä¿¡å· %d" -#: inet/ruserpass.c:277 +#: string/strsignal.c:69 #, c-format -msgid "Unknown .netrc keyword %s" -msgstr "δ֪µÄ .netrc ¹Ø¼ü×Ö %s" +msgid "Unknown signal %d" +msgstr "æœªçŸ¥ä¿¡å· %d" -#: sunrpc/auth_unix.c:115 sunrpc/auth_unix.c:118 +#: sunrpc/auth_unix.c:114 msgid "authunix_create: out of memory\n" -msgstr "authunix_create£ºÄÚ´æ²»×ã\n" +msgstr "authunix_create:内å˜ä¸è¶³\n" -#: sunrpc/auth_unix.c:318 -msgid "auth_none.c - Fatal marshalling problem" +#: sunrpc/auth_unix.c:350 +msgid "auth_unix.c: Fatal marshalling problem" msgstr "" #: sunrpc/clnt_perr.c:118 sunrpc/clnt_perr.c:139 @@ -3880,1981 +4402,2247 @@ msgstr "" #: sunrpc/clnt_perr.c:132 #, c-format msgid "(unknown authentication error - %d)" -msgstr "(δ֪µÄÈÏÖ¤´íÎó - %d)" +msgstr "(未知的认è¯é”™è¯¯ - %d)" -#: sunrpc/clnt_perr.c:177 +#: sunrpc/clnt_perr.c:172 msgid "RPC: Success" -msgstr "RPC£º³É¹¦" +msgstr "RPC:æˆåŠŸ" -#: sunrpc/clnt_perr.c:180 +#: sunrpc/clnt_perr.c:175 msgid "RPC: Can't encode arguments" -msgstr "RPC£ºÎÞ·¨¶Ô²ÎÊý½øÐбàÂë" +msgstr "RPCï¼šæ— æ³•å¯¹å‚数进行编ç " -#: sunrpc/clnt_perr.c:184 +#: sunrpc/clnt_perr.c:179 msgid "RPC: Can't decode result" -msgstr "RPC£ºÎÞ·¨¶Ô½á¹û½øÐнâÂë" +msgstr "RPCï¼šæ— æ³•å¯¹ç»“æžœè¿›è¡Œè§£ç " -#: sunrpc/clnt_perr.c:188 +#: sunrpc/clnt_perr.c:183 msgid "RPC: Unable to send" -msgstr "RPC£ºÎÞ·¨·¢ËÍ" +msgstr "RPCï¼šæ— æ³•å‘é€" -#: sunrpc/clnt_perr.c:192 +#: sunrpc/clnt_perr.c:187 msgid "RPC: Unable to receive" -msgstr "RPC£ºÎÞ·¨½ÓÊÕ" +msgstr "RPCï¼šæ— æ³•æŽ¥æ”¶" -#: sunrpc/clnt_perr.c:196 +#: sunrpc/clnt_perr.c:191 msgid "RPC: Timed out" -msgstr "RPC£º³¬Ê±" +msgstr "RPC:超时" -#: sunrpc/clnt_perr.c:200 +#: sunrpc/clnt_perr.c:195 msgid "RPC: Incompatible versions of RPC" -msgstr "RPC£ºRPC °æ±¾²»¼æÈÝ" +msgstr "RPC:RPC 版本ä¸å…¼å®¹" -#: sunrpc/clnt_perr.c:204 +#: sunrpc/clnt_perr.c:199 msgid "RPC: Authentication error" -msgstr "RPC£ºÈÏÖ¤´íÎó" +msgstr "RPC:认è¯é”™è¯¯" -#: sunrpc/clnt_perr.c:208 +#: sunrpc/clnt_perr.c:203 msgid "RPC: Program unavailable" -msgstr "RPC£º³ÌÐò²»¿ÉÓÃ" +msgstr "RPC:程åºä¸å¯ç”¨" -#: sunrpc/clnt_perr.c:212 +#: sunrpc/clnt_perr.c:207 msgid "RPC: Program/version mismatch" -msgstr "RPC£º³ÌÐò/°æ±¾²»Æ¥Åä" +msgstr "RPC:程åº/版本ä¸åŒ¹é…" -#: sunrpc/clnt_perr.c:216 +#: sunrpc/clnt_perr.c:211 msgid "RPC: Procedure unavailable" msgstr "" -#: sunrpc/clnt_perr.c:220 +#: sunrpc/clnt_perr.c:215 msgid "RPC: Server can't decode arguments" -msgstr "RPC£º·þÎñÆ÷ÎÞ·¨¶Ô²ÎÊý½øÐнâÂë" +msgstr "RPC:æœåŠ¡å™¨æ— 法对å‚数进行解ç " -#: sunrpc/clnt_perr.c:224 +#: sunrpc/clnt_perr.c:219 msgid "RPC: Remote system error" -msgstr "RPC£ºÔ¶³Ìϵͳ´íÎó" +msgstr "RPC:远程系统错误" -#: sunrpc/clnt_perr.c:228 +#: sunrpc/clnt_perr.c:223 msgid "RPC: Unknown host" -msgstr "RPC£ºÎ´ÖªÖ÷»ú" +msgstr "RPC:未知主机" -#: sunrpc/clnt_perr.c:232 +#: sunrpc/clnt_perr.c:227 msgid "RPC: Unknown protocol" -msgstr "RPC£ºÎ´ÖªÐÒé" +msgstr "RPC:未知åè®®" -#: sunrpc/clnt_perr.c:236 +#: sunrpc/clnt_perr.c:231 msgid "RPC: Port mapper failure" msgstr "" -#: sunrpc/clnt_perr.c:240 +#: sunrpc/clnt_perr.c:235 msgid "RPC: Program not registered" -msgstr "RPC£º³ÌÐòδע²á" +msgstr "RPC:程åºæœªæ³¨å†Œ" -#: sunrpc/clnt_perr.c:244 +#: sunrpc/clnt_perr.c:239 msgid "RPC: Failed (unspecified error)" -msgstr "RPC£ºÊ§°Ü (δָÃ÷µÄ´íÎó)" +msgstr "RPC:失败 (未指明的错误)" -#: sunrpc/clnt_perr.c:285 +#: sunrpc/clnt_perr.c:280 msgid "RPC: (unknown error code)" -msgstr "RPC£º(δ֪µÄ´íÎóÂë)" +msgstr "RPC:(未知的错误ç )" -#: sunrpc/clnt_perr.c:357 +#: sunrpc/clnt_perr.c:342 msgid "Authentication OK" -msgstr "ÈÏÖ¤³É¹¦" +msgstr "认è¯æˆåŠŸ" -#: sunrpc/clnt_perr.c:360 +#: sunrpc/clnt_perr.c:345 msgid "Invalid client credential" -msgstr "ÎÞЧµÄ¿Í»§Ö¤Êé" +msgstr "æ— æ•ˆçš„å®¢æˆ·è¯ä¹¦" -#: sunrpc/clnt_perr.c:364 +#: sunrpc/clnt_perr.c:349 msgid "Server rejected credential" -msgstr "·þÎñÆ÷¾Ü¾øÖ¤Êé" +msgstr "æœåŠ¡å™¨æ‹’ç»è¯ä¹¦" -#: sunrpc/clnt_perr.c:368 +#: sunrpc/clnt_perr.c:353 msgid "Invalid client verifier" -msgstr "ÎÞЧµÄ¿Í»§Ð£Ñé" +msgstr "æ— æ•ˆçš„å®¢æˆ·æ ¡éªŒ" -#: sunrpc/clnt_perr.c:372 +#: sunrpc/clnt_perr.c:357 msgid "Server rejected verifier" -msgstr "·þÎñÆ÷¾Ü¾øУÑé" +msgstr "æœåŠ¡å™¨æ‹’ç»æ ¡éªŒ" -#: sunrpc/clnt_perr.c:376 +#: sunrpc/clnt_perr.c:361 msgid "Client credential too weak" -msgstr "¿Í»§Ö¤ÊéÌ«Èõ" +msgstr "客户è¯ä¹¦å¤ªå¼±" -#: sunrpc/clnt_perr.c:380 +#: sunrpc/clnt_perr.c:365 msgid "Invalid server verifier" -msgstr "ÎÞЧµÄ·þÎñÆ÷УÑé" +msgstr "æ— æ•ˆçš„æœåŠ¡å™¨æ ¡éªŒ" -#: sunrpc/clnt_perr.c:384 +#: sunrpc/clnt_perr.c:369 msgid "Failed (unspecified error)" -msgstr "ʧ°Ü (δָÃ÷µÄ´íÎó)" +msgstr "失败 (未指明的错误)" #: sunrpc/clnt_raw.c:117 -msgid "clnt_raw.c - Fatal header serialization error." -msgstr "clnt_raw.c - ÖÂÃüµÄÍ·±àÐò´íÎó¡£" +msgid "clnt_raw.c: fatal header serialization error" +msgstr "clnt_raw.c: 致命的头编åºé”™è¯¯ã€‚" -#: sunrpc/clnt_tcp.c:134 sunrpc/clnt_tcp.c:137 +#: sunrpc/clnt_tcp.c:131 msgid "clnttcp_create: out of memory\n" -msgstr "clnttcp_create£ºÄÚ´æ²»×ã\n" +msgstr "clnttcp_create:内å˜ä¸è¶³\n" -#: sunrpc/clnt_udp.c:141 sunrpc/clnt_udp.c:144 +#: sunrpc/clnt_udp.c:139 msgid "clntudp_create: out of memory\n" -msgstr "clntudp_create£ºÄÚ´æ²»×ã\n" +msgstr "clntudp_create:内å˜ä¸è¶³\n" -#: sunrpc/clnt_unix.c:131 sunrpc/clnt_unix.c:134 +#: sunrpc/clnt_unix.c:128 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 (»ñÈ¡½çÃæÅäÖÃ)" +msgstr "clntunix_create:内å˜ä¸è¶³\n" -#: sunrpc/pm_getmaps.c:74 -msgid "pmap_getmaps rpc problem" +#: sunrpc/pm_getmaps.c:83 +msgid "pmap_getmaps.c: rpc problem" msgstr "" -#: sunrpc/pmap_clnt.c:72 -msgid "__get_myaddress: ioctl (get interface configuration)" -msgstr "__get_myaddress£ºioctl (»ñÈ¡½çÃæÅäÖÃ)" - -#: sunrpc/pmap_clnt.c:137 +#: sunrpc/pmap_clnt.c:129 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 (»ñÈ¡½çÃæ±êÖ¾)" +msgstr "æ— æ³•æ³¨å†ŒæœåŠ¡" -#: sunrpc/pmap_rmt.c:269 +#: sunrpc/pmap_rmt.c:248 msgid "Cannot create socket for broadcast rpc" -msgstr "ÎÞ·¨Îª¹ã²¥ rpc ´´½¨Ì×½Ó×Ö" +msgstr "æ— æ³•ä¸ºå¹¿æ’ rpc 创建套接å—" -#: sunrpc/pmap_rmt.c:276 +#: sunrpc/pmap_rmt.c:255 msgid "Cannot set socket option SO_BROADCAST" -msgstr "ÎÞ·¨ÉèÖÃÌ×½Ó×ÖÑ¡Ïî SO_BROADCAST" +msgstr "æ— æ³•è®¾ç½®å¥—æŽ¥å—选项 SO_BROADCAST" -#: sunrpc/pmap_rmt.c:328 +#: sunrpc/pmap_rmt.c:307 msgid "Cannot send broadcast packet" -msgstr "ÎÞ·¨·¢Ë͹㲥°ü" +msgstr "æ— æ³•å‘é€å¹¿æ’包" -#: sunrpc/pmap_rmt.c:353 +#: sunrpc/pmap_rmt.c:332 msgid "Broadcast poll problem" msgstr "" -#: sunrpc/pmap_rmt.c:366 +#: sunrpc/pmap_rmt.c:345 msgid "Cannot receive reply to broadcast" -msgstr "ÎÞ·¨½ÓÊնԹ㲥µÄÓ¦´ð" +msgstr "æ— æ³•æŽ¥æ”¶å¯¹å¹¿æ’的应ç”" -#: sunrpc/rpc_main.c:288 +#: sunrpc/rpc_main.c:286 #, c-format msgid "%s: output would overwrite %s\n" -msgstr "%s£ºÊä³ö½«¸²¸Ç %s\n" +msgstr "%s:输出将覆盖 %s\n" -#: sunrpc/rpc_main.c:295 +#: sunrpc/rpc_main.c:293 #, c-format msgid "%s: unable to open %s: %m\n" -msgstr "%s£ºÎÞ·¨´ò¿ª %s£º%m\n" +msgstr "%sï¼šæ— æ³•æ‰“å¼€ %s:%m\n" -#: sunrpc/rpc_main.c:307 +#: sunrpc/rpc_main.c:305 #, c-format msgid "%s: while writing output %s: %m" -msgstr "%s£ºÐ´ÈëÊä³ö %s ʱ£º%m" +msgstr "%s:写入输出 %s 时:%m" -#: sunrpc/rpc_main.c:342 +#: sunrpc/rpc_main.c:340 #, c-format msgid "cannot find C preprocessor: %s \n" -msgstr "ÎÞ·¨ÕÒµ½ C Ô¤´¦ÀíÆ÷£º%s\n" +msgstr "æ— æ³•æ‰¾åˆ° C 预处ç†å™¨ï¼š%s\n" -#: sunrpc/rpc_main.c:350 +#: sunrpc/rpc_main.c:348 msgid "cannot find any C preprocessor (cpp)\n" -msgstr "ÎÞ·¨ÕÒµ½ÈκΠC Ô¤´¦ÀíÆ÷ (cpp)\n" +msgstr "æ— æ³•æ‰¾åˆ°ä»»ä½• C 预处ç†å™¨ (cpp)\n" -#: sunrpc/rpc_main.c:419 +#: sunrpc/rpc_main.c:417 #, c-format msgid "%s: C preprocessor failed with signal %d\n" -msgstr "%s£ºC Ô¤´¦ÀíÆ÷ÒòÐźŠ%d ¶øʧ°Ü\n" +msgstr "%s:C 预处ç†å™¨å› ä¿¡å· %d 而失败\n" -#: sunrpc/rpc_main.c:422 +#: sunrpc/rpc_main.c:420 #, c-format msgid "%s: C preprocessor failed with exit code %d\n" -msgstr "%s£ºC Ô¤´¦ÀíÆ÷ʧ°Ü£¬·µ»Ø %d\n" +msgstr "%s:C 预处ç†å™¨å¤±è´¥ï¼Œè¿”回 %d\n" -#: sunrpc/rpc_main.c:462 +#: sunrpc/rpc_main.c:460 #, c-format -msgid "illegal nettype :`%s'\n" -msgstr "·Ç·¨ÍøÂçÀàÐÍ£º¡°%s¡±\n" +msgid "illegal nettype: `%s'\n" +msgstr "éžæ³•ç½‘络类型:“%sâ€\n" -#: sunrpc/rpc_main.c:1104 +#: sunrpc/rpc_main.c:1122 +#, c-format msgid "rpcgen: too many defines\n" -msgstr "rpcgen£º¶¨Òå¹ý¶à\n" +msgstr "rpcgen:定义过多\n" -#: sunrpc/rpc_main.c:1116 +#: sunrpc/rpc_main.c:1134 +#, c-format msgid "rpcgen: arglist coding error\n" msgstr "" #. TRANS: the file will not be removed; this is an #. TRANS: informative message. -#: sunrpc/rpc_main.c:1149 +#: sunrpc/rpc_main.c:1167 #, c-format msgid "file `%s' already exists and may be overwritten\n" -msgstr "Îļþ¡°%s¡±ÒÑ´æÔÚ²¢¿ÉÄܱ»¸²¸Ç\n" +msgstr "文件“%sâ€å·²å˜åœ¨å¹¶å¯èƒ½è¢«è¦†ç›–\n" -#: sunrpc/rpc_main.c:1194 +#: sunrpc/rpc_main.c:1212 +#, c-format msgid "Cannot specify more than one input file!\n" -msgstr "ÎÞ·¨Ö¸¶¨¶à¸öÊäÈëÎļþ£¡\n" +msgstr "æ— æ³•æŒ‡å®šå¤šä¸ªè¾“å…¥æ–‡ä»¶ï¼\n" -#: sunrpc/rpc_main.c:1364 +#: sunrpc/rpc_main.c:1382 msgid "This implementation doesn't support newstyle or MT-safe code!\n" msgstr "" -#: sunrpc/rpc_main.c:1373 +#: sunrpc/rpc_main.c:1391 +#, c-format msgid "Cannot use netid flag with inetd flag!\n" -msgstr "ÎÞ·¨ÔÚʹÓà inetd ±êÖ¾µÄͬʱʹÓà netid ±êÖ¾£¡\n" +msgstr "æ— æ³•åœ¨ä½¿ç”¨ inetd æ ‡å¿—çš„åŒæ—¶ä½¿ç”¨ netid æ ‡å¿—ï¼\n" -#: sunrpc/rpc_main.c:1385 +#: sunrpc/rpc_main.c:1403 msgid "Cannot use netid flag without TIRPC!\n" -msgstr "ÎÞ·¨ÔÚδʹÓà TIRPC µÄʱºòʹÓà netid ±êÖ¾£¡\n" +msgstr "æ— æ³•åœ¨æœªä½¿ç”¨ TIRPC 的时候使用 netid æ ‡å¿—ï¼\n" -#: sunrpc/rpc_main.c:1392 +#: sunrpc/rpc_main.c:1410 msgid "Cannot use table flags with newstyle!\n" -msgstr "ÎÞ·¨ÒÔзç¸ñʹÓñí¸ñ±êÖ¾£¡\n" +msgstr "æ— æ³•ä»¥æ–°é£Žæ ¼ä½¿ç”¨è¡¨æ ¼æ ‡å¿—ï¼\n" -#: sunrpc/rpc_main.c:1411 +#: sunrpc/rpc_main.c:1429 +#, c-format msgid "\"infile\" is required for template generation flags.\n" -msgstr "¡°ÊäÈëÎļþ¡±¶ÔÄ£°åÉú³É±êÖ¾À´ËµÊDZØÐëµÄ¡£\n" +msgstr "“输入文件â€å¯¹æ¨¡æ¿ç”Ÿæˆæ ‡å¿—æ¥è¯´æ˜¯å¿…须的。\n" -#: sunrpc/rpc_main.c:1416 +#: sunrpc/rpc_main.c:1434 +#, c-format msgid "Cannot have more than one file generation flag!\n" -msgstr "ÎÞ·¨Ê¹ÓöàÓÚÒ»¸öµÄÎļþÉú³É±êÖ¾£¡\n" +msgstr "æ— æ³•ä½¿ç”¨å¤šäºŽä¸€ä¸ªçš„æ–‡ä»¶ç”Ÿæˆæ ‡å¿—ï¼\n" -#: sunrpc/rpc_main.c:1425 +#: sunrpc/rpc_main.c:1443 #, c-format msgid "usage: %s infile\n" -msgstr "Ó÷¨£º%s ÊäÈëÎļþ\n" +msgstr "用法:%s 输入文件\n" -#: sunrpc/rpc_main.c:1426 +#: sunrpc/rpc_main.c:1444 #, c-format msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n" -msgstr "\t%s [-abkCLNTM][-DÃû×Ö[=Öµ]] [-i ´óС] [-I [-K ÃëÊý]] [-Y ·¾¶] ÊäÈëÎļþ\n" +msgstr "\t%s [-abkCLNTM][-Dåå—[=值]] [-i 大å°] [-I [-K 秒数]] [-Y 路径] 输入文件\n" -#: sunrpc/rpc_main.c:1428 +#: sunrpc/rpc_main.c:1446 #, 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" +msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o 输出文件] [输入文件]\n" -#: sunrpc/rpc_main.c:1430 +#: sunrpc/rpc_main.c:1448 #, c-format msgid "\t%s [-s nettype]* [-o outfile] [infile]\n" -msgstr "\t%s [-s ÍøÂçÀàÐÍ]* [-o Êä³öÎļþ] [ÊäÈëÎļþ]\n" +msgstr "\t%s [-s 网络类型]* [-o 输出文件] [输入文件]\n" -#: sunrpc/rpc_main.c:1431 +#: sunrpc/rpc_main.c:1449 #, c-format msgid "\t%s [-n netid]* [-o outfile] [infile]\n" -msgstr "\t%s [-n ÍøÂç id]* [-o Êä³öÎļþ] [ÊäÈëÎļþ]\n" +msgstr "\t%s [-n 网络 id]* [-o 输出文件] [输入文件]\n" -#: sunrpc/rpc_scan.c:116 +#: sunrpc/rpc_scan.c:114 msgid "constant or identifier expected" -msgstr "ӦΪ³£Á¿»ò±êʶ·û" +msgstr "应为常é‡æˆ–æ ‡è¯†ç¬¦" -#: sunrpc/rpc_scan.c:312 +#: sunrpc/rpc_scan.c:310 msgid "illegal character in file: " -msgstr "ÎļþÖеķǷ¨×Ö·û£º" +msgstr "文件ä¸çš„éžæ³•å—符:" -#: sunrpc/rpc_scan.c:351 sunrpc/rpc_scan.c:377 +#: sunrpc/rpc_scan.c:349 sunrpc/rpc_scan.c:375 msgid "unterminated string constant" -msgstr "δÖÕÖ¹µÄ×Ö·û´®³£Á¿" +msgstr "未终æ¢çš„å—符串常é‡" -#: sunrpc/rpc_scan.c:383 +#: sunrpc/rpc_scan.c:381 msgid "empty char string" msgstr "" -#: sunrpc/rpc_scan.c:525 sunrpc/rpc_scan.c:535 +#: sunrpc/rpc_scan.c:523 sunrpc/rpc_scan.c:533 msgid "preprocessor error" -msgstr "Ô¤´¦Àí´íÎó" +msgstr "预处ç†é”™è¯¯" #: sunrpc/rpcinfo.c:237 sunrpc/rpcinfo.c:383 #, c-format msgid "program %lu is not available\n" -msgstr "³ÌÐò %lu ²»¿ÉÓÃ\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" +msgstr "ç¨‹åº %lu 版本 %lu ä¸å¯ç”¨\n" #: sunrpc/rpcinfo.c:515 #, c-format msgid "program %lu version %lu ready and waiting\n" -msgstr "³ÌÐò %lu °æ±¾ %lu ¾ÍÐ÷²¢µÈ´ý\n" +msgstr "ç¨‹åº %lu 版本 %lu 就绪并ç‰å¾…\n" #: sunrpc/rpcinfo.c:556 sunrpc/rpcinfo.c:563 msgid "rpcinfo: can't contact portmapper" -msgstr "rpcinfo£ºÎÞ·¨Í¬ portmapper ½»»¥" +msgstr "rpcinfoï¼šæ— æ³•åŒ portmapper 交互" #: sunrpc/rpcinfo.c:570 msgid "No remote programs registered.\n" -msgstr "ûÓÐ×¢²áµÄÔ¶³Ì³ÌÐò¡£\n" +msgstr "没有注册的远程程åºã€‚\n" #: sunrpc/rpcinfo.c:574 msgid " program vers proto port\n" -msgstr " ³ÌÐò °æ±¾ ÐÒé ¶Ë¿Ú\n" +msgstr " ç¨‹åº ç‰ˆæœ¬ åè®® 端å£\n" #: sunrpc/rpcinfo.c:613 msgid "(unknown)" -msgstr "(δ֪)" +msgstr "(未知)" #: sunrpc/rpcinfo.c:637 #, c-format msgid "rpcinfo: broadcast failed: %s\n" -msgstr "rpcinfo£º¹ã²¥Ê§°Ü£º%s\n" +msgstr "rpcinfo:广æ’失败:%s\n" #: sunrpc/rpcinfo.c:658 msgid "Sorry. You are not root\n" -msgstr "±§Ç¸¡£Äú²»ÊǸùÓû§\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" +msgstr "rpcinfoï¼šæ— æ³•åˆ é™¤ç¨‹åº %s 版本 %s 的注册\n" #: sunrpc/rpcinfo.c:674 msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n" -msgstr "Ó÷¨£ºrpcinfo [ -n ¶Ë¿ÚºÅ ] -u Ö÷»úÃû ³ÌÐòºÅ [ °æ±¾ºÅ ]\n" +msgstr "用法:rpcinfo [ -n 端å£å· ] -u 主机å 程åºå· [ ç‰ˆæœ¬å· ]\n" #: sunrpc/rpcinfo.c:676 msgid " rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n" -msgstr " rpcinfo [ -n ¶Ë¿ÚºÅ ] -t Ö÷»ú ³ÌÐòºÅ [ °æ±¾ºÅ ]\n" +msgstr " rpcinfo [ -n 端å£å· ] -t 主机 程åºå· [ ç‰ˆæœ¬å· ]\n" #: sunrpc/rpcinfo.c:678 msgid " rpcinfo -p [ host ]\n" -msgstr " rpcinfo -p [ Ö÷»ú ]\n" +msgstr " rpcinfo -p [ 主机 ]\n" #: sunrpc/rpcinfo.c:679 msgid " rpcinfo -b prognum versnum\n" -msgstr " rpcinfo -b ³ÌÐòºÅ °æ±¾ºÅ\n" +msgstr " rpcinfo -b 程åºå· 版本å·\n" #: sunrpc/rpcinfo.c:680 msgid " rpcinfo -d prognum versnum\n" -msgstr " rpcinfo -d ³ÌÐòºÅ °æ±¾ºÅ\n" +msgstr " rpcinfo -d 程åºå· 版本å·\n" #: sunrpc/rpcinfo.c:695 #, c-format msgid "rpcinfo: %s is unknown service\n" -msgstr "rpcinfo£º%s ÊÇδ֪µÄ·þÎñ\n" +msgstr "rpcinfo:%s 是未知的æœåŠ¡\n" #: sunrpc/rpcinfo.c:732 #, c-format msgid "rpcinfo: %s is unknown host\n" -msgstr "rpcinfo£º%s ÊÇδ֪µÄÖ÷»ú\n" +msgstr "rpcinfo:%s 是未知的主机\n" + +#: sunrpc/svc_run.c:70 +msgid "svc_run: - out of memory" +msgstr "svc_run: - 内å˜ä¸è¶³" -#: sunrpc/svc_run.c:76 +#: sunrpc/svc_run.c:90 msgid "svc_run: - poll failed" msgstr "" #: sunrpc/svc_simple.c:87 #, c-format msgid "can't reassign procedure number %ld\n" -msgstr "ÎÞ·¨ÖØÐÂÖ¸¶¨½ø³Ì±àºÅ %ld\n" +msgstr "æ— æ³•é‡æ–°æŒ‡å®šè¿›ç¨‹ç¼–å· %ld\n" -#: sunrpc/svc_simple.c:96 +#: sunrpc/svc_simple.c:97 msgid "couldn't create an rpc server\n" -msgstr "ÎÞ·¨´´½¨ rpc ·þÎñÆ÷\n" +msgstr "æ— æ³•åˆ›å»º rpc æœåŠ¡å™¨\n" -#: sunrpc/svc_simple.c:104 +#: sunrpc/svc_simple.c:105 #, c-format msgid "couldn't register prog %ld vers %ld\n" -msgstr "ÎÞ·¨×¢²á³ÌÐò %ld °æ±¾ %ld\n" +msgstr "æ— æ³•æ³¨å†Œç¨‹åº %ld 版本 %ld\n" -#: sunrpc/svc_simple.c:111 +#: sunrpc/svc_simple.c:113 msgid "registerrpc: out of memory\n" -msgstr "registerrpc£ºÄÚ´æ²»×ã\n" +msgstr "registerrpc:内å˜ä¸è¶³\n" -#: sunrpc/svc_simple.c:175 +#: sunrpc/svc_simple.c:173 #, c-format msgid "trouble replying to prog %d\n" msgstr "" -#: sunrpc/svc_simple.c:183 +#: sunrpc/svc_simple.c:182 #, c-format msgid "never registered prog %d\n" -msgstr "´Óδע²áµÄ³ÌÐò %d\n" +msgstr "ä»Žæœªæ³¨å†Œçš„ç¨‹åº %d\n" #: sunrpc/svc_tcp.c:155 msgid "svc_tcp.c - tcp socket creation problem" -msgstr "svc_tcp.c - tcp Ì×½Ó×Ö´´½¨ÎÊÌâ" +msgstr "svc_tcp.c - tcp 套接å—创建问题" #: sunrpc/svc_tcp.c:170 msgid "svc_tcp.c - cannot getsockname or listen" -msgstr "svc_tcp.c - ÎÞ·¨½øÐÐ getsockname »ò listen ²Ù×÷" +msgstr "svc_tcp.c - æ— æ³•è¿›è¡Œ getsockname 或 listen æ“作" -#: sunrpc/svc_tcp.c:181 sunrpc/svc_tcp.c:184 +#: sunrpc/svc_tcp.c:179 msgid "svctcp_create: out of memory\n" -msgstr "svctcp_create£ºÄÚ´æ²»×ã\n" +msgstr "svctcp_create:内å˜ä¸è¶³\n" -#: sunrpc/svc_tcp.c:225 sunrpc/svc_tcp.c:228 +#: sunrpc/svc_tcp.c:218 msgid "svc_tcp: makefd_xprt: out of memory\n" -msgstr "svc_tcp£ºmakefd_xprt£ºÄÚ´æ²»×ã\n" +msgstr "svc_tcp:makefd_xprt:内å˜ä¸è¶³\n" #: sunrpc/svc_udp.c:128 msgid "svcudp_create: socket creation problem" -msgstr "svcudp_create: Ì×½Ó×Ö´´½¨ÎÊÌâ" +msgstr "svcudp_create: 套接å—创建问题" #: sunrpc/svc_udp.c:142 msgid "svcudp_create - cannot getsockname" -msgstr "svcudp_create - ÎÞ·¨µ÷Óà getsockname" +msgstr "svcudp_create - æ— æ³•è°ƒç”¨ getsockname" -#: sunrpc/svc_udp.c:154 sunrpc/svc_udp.c:157 +#: sunrpc/svc_udp.c:152 msgid "svcudp_create: out of memory\n" -msgstr "svcudp_create£ºÄÚ´æ²»×ã\n" +msgstr "svcudp_create:内å˜ä¸è¶³\n" -#: sunrpc/svc_udp.c:182 sunrpc/svc_udp.c:185 +#: sunrpc/svc_udp.c:174 msgid "svcudp_create: xp_pad is too small for IP_PKTINFO\n" -msgstr "svcudp_create£ºxp_pad ¶Ô IP_PKTINFO À´ËµÌ«Ð¡\n" +msgstr "svcudp_create:xp_pad 对 IP_PKTINFO æ¥è¯´å¤ªå°\n" -#: sunrpc/svc_udp.c:471 +#: sunrpc/svc_udp.c:474 msgid "enablecache: cache already enabled" -msgstr "enablecache£º»º³åÇøÒѾÆôÓÃ" +msgstr "enablecache:缓冲区已ç»å¯ç”¨" -#: sunrpc/svc_udp.c:477 +#: sunrpc/svc_udp.c:480 msgid "enablecache: could not allocate cache" -msgstr "enablecache£ºÎÞ·¨·ÖÅ仺³åÇø" +msgstr "enablecacheï¼šæ— æ³•åˆ†é…缓冲区" -#: sunrpc/svc_udp.c:485 +#: sunrpc/svc_udp.c:489 msgid "enablecache: could not allocate cache data" -msgstr "enablecache£ºÎÞ·¨·ÖÅ仺³åÇøÊý¾Ý" +msgstr "enablecacheï¼šæ— æ³•åˆ†é…缓冲区数æ®" -#: sunrpc/svc_udp.c:492 +#: sunrpc/svc_udp.c:497 msgid "enablecache: could not allocate cache fifo" msgstr "" -#: sunrpc/svc_udp.c:528 +#: sunrpc/svc_udp.c:532 msgid "cache_set: victim not found" -msgstr "cache_set£ºÕÒ²»µ½ victim" +msgstr "cache_set:找ä¸åˆ° victim" -#: sunrpc/svc_udp.c:539 +#: sunrpc/svc_udp.c:543 msgid "cache_set: victim alloc failed" -msgstr "cache_set£º·ÖÅä victim ʧ°Ü" +msgstr "cache_setï¼šåˆ†é… victim 失败" -#: sunrpc/svc_udp.c:545 +#: sunrpc/svc_udp.c:550 msgid "cache_set: could not allocate new rpc_buffer" -msgstr "cache_set£ºÎÞ·¨·ÖÅäÐ嵀 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 Ì×½Ó×Ö´´½¨ÎÊÌâ" +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 ²Ù×÷" +msgstr "svc_unix.c - æ— æ³•è¿›è¡Œ getsockname 或 listen æ“作" -#: sunrpc/svc_unix.c:178 sunrpc/svc_unix.c:181 +#: sunrpc/svc_unix.c:176 msgid "svcunix_create: out of memory\n" -msgstr "svcunix_create£ºÄÚ´æ²»×ã\n" +msgstr "svcunix_create:内å˜ä¸è¶³\n" -#: sunrpc/svc_unix.c:222 sunrpc/svc_unix.c:225 +#: sunrpc/svc_unix.c:215 msgid "svc_unix: makefd_xprt: out of memory\n" -msgstr "svc_unix£ºmakefd_xprt£ºÄÚ´æ²»×ã\n" +msgstr "svc_unix:makefd_xprt:内å˜ä¸è¶³\n" -#: sunrpc/xdr.c:570 sunrpc/xdr.c:573 +#: sunrpc/xdr.c:566 msgid "xdr_bytes: out of memory\n" -msgstr "xdr_bytes£ºÄÚ´æ²»×ã\n" +msgstr "xdr_bytes:内å˜ä¸è¶³\n" -#: sunrpc/xdr.c:725 sunrpc/xdr.c:728 +#: sunrpc/xdr.c:718 msgid "xdr_string: out of memory\n" -msgstr "xdr_string£ºÄÚ´æ²»×ã\n" +msgstr "xdr_string:内å˜ä¸è¶³\n" -#: sunrpc/xdr_array.c:111 sunrpc/xdr_array.c:114 +#: sunrpc/xdr_array.c:106 msgid "xdr_array: out of memory\n" -msgstr "xdr_array£ºÄÚ´æ²»×ã\n" +msgstr "xdr_array:内å˜ä¸è¶³\n" -#: sunrpc/xdr_rec.c:158 sunrpc/xdr_rec.c:161 +#: sunrpc/xdr_rec.c:156 msgid "xdrrec_create: out of memory\n" -msgstr "xdrrec_create£ºÄÚ´æ²»×ã\n" +msgstr "xdrrec_create:内å˜ä¸è¶³\n" -#: sunrpc/xdr_ref.c:88 sunrpc/xdr_ref.c:91 +#: sunrpc/xdr_ref.c:86 msgid "xdr_reference: out of memory\n" -msgstr "xdr_reference£ºÄÚ´æ²»×ã\n" +msgstr "xdr_reference:内å˜ä¸è¶³\n" -#: nis/nis_callback.c:189 -msgid "unable to free arguments" -msgstr "ÎÞ·¨ÊͷŲÎÊý" +#: sysdeps/generic/siglist.h:29 sysdeps/unix/siglist.c:27 +msgid "Hangup" +msgstr "挂起" -#: nis/nis_error.c:30 -msgid "Probable success" -msgstr "" +#: sysdeps/generic/siglist.h:30 sysdeps/unix/siglist.c:28 +msgid "Interrupt" +msgstr "ä¸æ–" -#: nis/nis_error.c:31 -msgid "Not found" -msgstr "ÕÒ²»µ½" +#: sysdeps/generic/siglist.h:31 sysdeps/unix/siglist.c:29 +msgid "Quit" +msgstr "退出" -#: nis/nis_error.c:32 -msgid "Probably not found" +#: sysdeps/generic/siglist.h:32 sysdeps/unix/siglist.c:30 +msgid "Illegal instruction" +msgstr "éžæ³•æŒ‡ä»¤" + +#: sysdeps/generic/siglist.h:33 sysdeps/unix/siglist.c:31 +msgid "Trace/breakpoint trap" msgstr "" -#: nis/nis_error.c:33 -msgid "Cache expired" -msgstr "»º³åÆ÷¹ýÆÚ" +#: sysdeps/generic/siglist.h:34 +msgid "Aborted" +msgstr "已放弃" -#: nis/nis_error.c:34 -msgid "NIS+ servers unreachable" -msgstr "NIS+ ·þÎñÆ÷²»¿É´ï" +#: sysdeps/generic/siglist.h:35 sysdeps/unix/siglist.c:34 +msgid "Floating point exception" +msgstr "浮点数例外" -#: nis/nis_error.c:35 -msgid "Unknown object" -msgstr "δ֪µÄ¶ÔÏó" +#: sysdeps/generic/siglist.h:36 sysdeps/unix/siglist.c:35 +msgid "Killed" +msgstr "å·²æ€æ»" -#: nis/nis_error.c:36 -msgid "Server busy, try again" -msgstr "·þÎñÆ÷棬ÖØÊÔ" +#: sysdeps/generic/siglist.h:37 sysdeps/unix/siglist.c:36 +msgid "Bus error" +msgstr "总线错误" -#: nis/nis_error.c:37 -msgid "Generic system error" -msgstr "ͨÓÃϵͳ´íÎó" +#: sysdeps/generic/siglist.h:38 sysdeps/unix/siglist.c:37 +msgid "Segmentation fault" +msgstr "段错误" -#: nis/nis_error.c:38 -msgid "First/next chain broken" -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 sysdeps/gnu/errlist.c:359 +#: sysdeps/unix/siglist.c:39 +msgid "Broken pipe" +msgstr "æ–开的管é“" -#: nis/nis_error.c:41 -msgid "Name not served by this server" +#: sysdeps/generic/siglist.h:40 sysdeps/unix/siglist.c:40 +msgid "Alarm clock" +msgstr "闹钟" + +#: sysdeps/generic/siglist.h:41 sysdeps/unix/siglist.c:41 +msgid "Terminated" +msgstr "已终æ¢" + +#: sysdeps/generic/siglist.h:42 sysdeps/unix/siglist.c:42 +msgid "Urgent I/O condition" msgstr "" -#: nis/nis_error.c:42 -msgid "Server out of memory" -msgstr "·þÎñÆ÷ÄÚ´æ²»×ã" +#: sysdeps/generic/siglist.h:43 sysdeps/unix/siglist.c:43 +msgid "Stopped (signal)" +msgstr "åœæ¢ (ä¿¡å·)" -#: nis/nis_error.c:43 -msgid "Object with same name exists" -msgstr "ͬÃû¶ÔÏóÒÑ´æÔÚ" +#: sysdeps/generic/siglist.h:44 sysdeps/unix/siglist.c:44 +msgid "Stopped" +msgstr "åœæ¢" -#: nis/nis_error.c:44 -msgid "Not master server for this domain" -msgstr "¸ÃÓòûÓÐÖ÷·þÎñÆ÷" +#: sysdeps/generic/siglist.h:45 sysdeps/unix/siglist.c:45 +msgid "Continued" +msgstr "继ç»" -#: nis/nis_error.c:45 -msgid "Invalid object for operation" -msgstr "²Ù×÷ÎÞЧµÄ¶ÔÏó" +#: sysdeps/generic/siglist.h:46 sysdeps/unix/siglist.c:46 +msgid "Child exited" +msgstr "å进程已退出" -#: nis/nis_error.c:46 -msgid "Malformed name, or illegal name" -msgstr "" +#: sysdeps/generic/siglist.h:47 sysdeps/unix/siglist.c:47 +msgid "Stopped (tty input)" +msgstr "åœæ¢ (tty 输入)" -#: nis/nis_error.c:47 -msgid "Unable to create callback" -msgstr "ÎÞ·¨´´½¨»Øµ÷º¯Êý" +#: sysdeps/generic/siglist.h:48 sysdeps/unix/siglist.c:48 +msgid "Stopped (tty output)" +msgstr "åœæ¢ (tty 输出)" -#: nis/nis_error.c:48 -msgid "Results sent to callback proc" +#: sysdeps/generic/siglist.h:49 sysdeps/unix/siglist.c:49 +msgid "I/O possible" msgstr "" -#: nis/nis_error.c:49 -msgid "Not found, no such name" -msgstr "ÕÒ²»µ½£¬Ã»ÓÐÄǸöÃû×Ö" +#: sysdeps/generic/siglist.h:50 sysdeps/unix/siglist.c:50 +msgid "CPU time limit exceeded" +msgstr "超出 CPU æ—¶é™" -#: nis/nis_error.c:50 -msgid "Name/entry isn't unique" -msgstr "Ãû³Æ/ÌõÄ¿²»Î¨Ò»" +#: sysdeps/generic/siglist.h:51 sysdeps/unix/siglist.c:51 +msgid "File size limit exceeded" +msgstr "文件大å°è¶…出é™åˆ¶" -#: nis/nis_error.c:51 -msgid "Modification failed" -msgstr "ÐÞ¸Äʧ°Ü" +#: sysdeps/generic/siglist.h:52 sysdeps/unix/siglist.c:52 +msgid "Virtual timer expired" +msgstr "虚拟计时器超时" -#: nis/nis_error.c:52 -msgid "Database for table does not exist" -msgstr "±í¸ñÊý¾Ý¿â²»´æÔÚ" +#: sysdeps/generic/siglist.h:53 sysdeps/unix/siglist.c:53 +msgid "Profiling timer expired" +msgstr "" -#: nis/nis_error.c:53 -msgid "Entry/table type mismatch" -msgstr "ÌõÄ¿/±í¸ñÀàÐͲ»Æ¥Åä" +#: sysdeps/generic/siglist.h:54 sysdeps/unix/siglist.c:54 +msgid "Window changed" +msgstr "" -#: nis/nis_error.c:54 -msgid "Link points to illegal name" -msgstr "Á¬½ÓÖ¸Ïò·Ç·¨Ãû³Æ" +#: sysdeps/generic/siglist.h:55 sysdeps/unix/siglist.c:56 +msgid "User defined signal 1" +msgstr "ç”¨æˆ·å®šä¹‰ä¿¡å· 1" -#: nis/nis_error.c:55 -msgid "Partial success" -msgstr "²¿·Ö³É¹¦" +#: sysdeps/generic/siglist.h:56 sysdeps/unix/siglist.c:57 +msgid "User defined signal 2" +msgstr "ç”¨æˆ·å®šä¹‰ä¿¡å· 2" -#: nis/nis_error.c:56 -msgid "Too many attributes" -msgstr "ÊôÐÔ¹ý¶à" +#: sysdeps/generic/siglist.h:60 sysdeps/unix/siglist.c:33 +msgid "EMT trap" +msgstr "" -#: nis/nis_error.c:57 -msgid "Error in RPC subsystem" -msgstr "RPC ×ÓϵͳÖгö´í" +#: sysdeps/generic/siglist.h:63 sysdeps/unix/siglist.c:38 +msgid "Bad system call" +msgstr "错误的系统调用" -#: nis/nis_error.c:58 -msgid "Missing or malformed attribute" -msgstr "ÒÅ©»ò»ûÐεÄÊôÐÔ" +#: sysdeps/generic/siglist.h:66 +msgid "Stack fault" +msgstr "æ ˆå¤±æ•ˆ" -#: nis/nis_error.c:59 -msgid "Named object is not searchable" -msgstr "²»ÄÜËÑË÷ÃüÃû¶ÔÏó" +#: sysdeps/generic/siglist.h:69 +msgid "Information request" +msgstr "ä¿¡æ¯è¯·æ±‚" -#: nis/nis_error.c:60 -msgid "Error while talking to callback proc" -msgstr "Óë»Øµ÷º¯Êý½»»¥Ê±³ö´í" +#: sysdeps/generic/siglist.h:71 +msgid "Power failure" +msgstr "电æºå¤±æ•ˆ" -#: nis/nis_error.c:61 -msgid "Non NIS+ namespace encountered" -msgstr "" +#: sysdeps/generic/siglist.h:74 sysdeps/unix/siglist.c:55 +msgid "Resource lost" +msgstr "资æºä¸¢å¤±" -#: nis/nis_error.c:62 -msgid "Illegal object type for operation" -msgstr "²Ù×÷µÄ·Ç·¨¶ÔÏóÀàÐÍ" +#. TRANS Operation not permitted; only the owner of the file (or other resource) +#. TRANS or processes with special privileges can perform the operation. +#: sysdeps/gnu/errlist.c:25 +msgid "Operation not permitted" +msgstr "ä¸å…许的æ“作" -#: nis/nis_error.c:63 -msgid "Passed object is not the same object on server" -msgstr "" +#. TRANS No process matches the specified process ID. +#: sysdeps/gnu/errlist.c:45 +msgid "No such process" +msgstr "没有那个进程" -#: nis/nis_error.c:64 -msgid "Modify operation failed" -msgstr "Ð޸IJÙ×÷ʧ°Ü" +#. 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}. +#: sysdeps/gnu/errlist.c:60 +msgid "Interrupted system call" +msgstr "被ä¸æ–的系统调用" -#: nis/nis_error.c:65 -msgid "Query illegal for named table" -msgstr "¶ÔÃüÃû±íÀ´Ëµ²éѯ·Ç·¨" +#. TRANS Input/output error; usually used for physical read or write errors. +#: sysdeps/gnu/errlist.c:69 +msgid "Input/output error" +msgstr "输入/输出错误" -#: nis/nis_error.c:66 -msgid "Attempt to remove a non-empty table" -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. +#: sysdeps/gnu/errlist.c:82 +msgid "No such device or address" +msgstr "没有那个设备或地å€" -#: nis/nis_error.c:67 -msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?" -msgstr "·ÃÎÊ NIS+ ÀäÆô¶¯Îļþ³ö´í¡£NIS+ °²×°ÁËÂð£¿" +#. 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. +#: sysdeps/gnu/errlist.c:94 +msgid "Argument list too long" +msgstr "å‚数列表过长" -#: nis/nis_error.c:68 -msgid "Full resync required for directory" -msgstr "ÐèÒª¶ÔĿ¼½øÐÐÍêÈ«µÄÖØÐÂͬ²½" +#. TRANS Invalid executable file format. This condition is detected by the +#. TRANS @code{exec} functions; see @ref{Executing a File}. +#: sysdeps/gnu/errlist.c:104 +msgid "Exec format error" +msgstr "å¯æ‰§è¡Œæ–‡ä»¶æ ¼å¼é”™è¯¯" -#: nis/nis_error.c:69 -msgid "NIS+ operation failed" -msgstr "NIS+ ²Ù×÷ʧ°Ü" +#. 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). +#: sysdeps/gnu/errlist.c:115 +msgid "Bad file descriptor" +msgstr "错误的文件æ述符" -#: nis/nis_error.c:70 -msgid "NIS+ service is unavailable or not installed" -msgstr "NIS+ ·þÎñÆ÷²»¿ÉÓûòδ°²×°" +#. 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. +#: sysdeps/gnu/errlist.c:126 +msgid "No child processes" +msgstr "没有å进程" -#: nis/nis_error.c:71 -msgid "Yes, 42 is the meaning of life" -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. +#: sysdeps/gnu/errlist.c:138 +msgid "Resource deadlock avoided" +msgstr "å·²é¿å…资æºæ»é”" -#: nis/nis_error.c:72 -msgid "Unable to authenticate NIS+ server" -msgstr "ÎÞ·¨ÈÏÖ¤ NIS+ ·þÎñÆ÷" +#. TRANS No memory available. The system cannot allocate more virtual memory +#. TRANS because its capacity is full. +#: sysdeps/gnu/errlist.c:148 +msgid "Cannot allocate memory" +msgstr "æ— æ³•åˆ†é…内å˜" -#: nis/nis_error.c:73 -msgid "Unable to authenticate NIS+ client" -msgstr "ÎÞ·¨ÈÏÖ¤ NIS+ ¿Í»§¶Ë" +#. TRANS Bad address; an invalid pointer was detected. +#. TRANS In the GNU system, this error never happens; you get a signal instead. +#: sysdeps/gnu/errlist.c:167 +msgid "Bad address" +msgstr "错误的地å€" -#: nis/nis_error.c:74 -msgid "No file space on server" -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. +#: sysdeps/gnu/errlist.c:178 +msgid "Block device required" +msgstr "需è¦å—设备" -#: nis/nis_error.c:75 -msgid "Unable to create process on server" -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. +#: sysdeps/gnu/errlist.c:189 +msgid "Device or resource busy" +msgstr "设备或资æºå¿™" -#: nis/nis_error.c:76 -msgid "Master server busy, full dump rescheduled." -msgstr "" +#. TRANS File exists; an existing file was specified in a context where it only +#. TRANS makes sense to specify a new file. +#: sysdeps/gnu/errlist.c:199 +msgid "File exists" +msgstr "文件已å˜åœ¨" -#: nis/nis_local_names.c:126 -#, c-format -msgid "LOCAL entry for UID %d in directory %s not unique\n" -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}). +#: sysdeps/gnu/errlist.c:210 +msgid "Invalid cross-device link" +msgstr "æ— æ•ˆçš„è·¨è®¾å¤‡è¿žæŽ¥" -#: nis/nis_print.c:51 -msgid "UNKNOWN" -msgstr "δ֪" +#. TRANS The wrong type of device was given to a function that expects a +#. TRANS particular sort of device. +#: sysdeps/gnu/errlist.c:220 +msgid "No such device" +msgstr "没有那个设备" -#: nis/nis_print.c:109 -msgid "BOGUS OBJECT\n" -msgstr "" +#. TRANS A file that isn't a directory was specified when a directory is required. +#: sysdeps/gnu/errlist.c:229 +msgid "Not a directory" +msgstr "ä¸æ˜¯ç›®å½•" -#: nis/nis_print.c:112 -msgid "NO OBJECT\n" -msgstr "ÎÞ¶ÔÏó\n" +#. TRANS File is a directory; you cannot open a directory for writing, +#. TRANS or create or remove hard links to it. +#: sysdeps/gnu/errlist.c:239 +msgid "Is a directory" +msgstr "是一个目录" -#: nis/nis_print.c:115 -msgid "DIRECTORY\n" -msgstr "Ŀ¼\n" +#. TRANS Invalid argument. This is used to indicate various kinds of problems +#. TRANS with passing the wrong argument to a library function. +#: sysdeps/gnu/errlist.c:249 +msgid "Invalid argument" +msgstr "æ— æ•ˆçš„å‚æ•°" -#: nis/nis_print.c:118 -msgid "GROUP\n" -msgstr "×é\n" +#. 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}. +#: sysdeps/gnu/errlist.c:264 +msgid "Too many open files" +msgstr "打开的文件过多" -#: nis/nis_print.c:121 -msgid "TABLE\n" -msgstr "±í\n" +#. 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. +#: sysdeps/gnu/errlist.c:275 +msgid "Too many open files in system" +msgstr "系统ä¸æ‰“开的文件过多" -#: nis/nis_print.c:124 -msgid "ENTRY\n" -msgstr "ÌõÄ¿\n" +#. TRANS Inappropriate I/O control operation, such as trying to set terminal +#. TRANS modes on an ordinary file. +#: sysdeps/gnu/errlist.c:285 +msgid "Inappropriate ioctl for device" +msgstr "对设备ä¸é€‚当的 ioctl æ“作" -#: nis/nis_print.c:127 -msgid "LINK\n" -msgstr "Á¬½Ó\n" +#. 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. +#: sysdeps/gnu/errlist.c:298 +msgid "Text file busy" +msgstr "文本文件忙" -#: nis/nis_print.c:130 -msgid "PRIVATE\n" -msgstr "˽ÓÐ\n" +#. TRANS File too big; the size of a file would be larger than allowed by the system. +#: sysdeps/gnu/errlist.c:307 +msgid "File too large" +msgstr "文件过大" -#: nis/nis_print.c:133 -msgid "(Unknown object)\n" -msgstr "(δ֪¶ÔÏó)\n" +#. TRANS No space left on device; write operation on a file failed because the +#. TRANS disk is full. +#: sysdeps/gnu/errlist.c:317 +msgid "No space left on device" +msgstr "设备上没有空间" -#: nis/nis_print.c:166 -#, c-format -msgid "Name : `%s'\n" -msgstr "Ãû³Æ £º¡°%s¡±\n" +#. TRANS Invalid seek operation (such as on a pipe). +#: sysdeps/gnu/errlist.c:326 +msgid "Illegal seek" +msgstr "éžæ³• seek æ“作" -#: nis/nis_print.c:167 -#, c-format -msgid "Type : %s\n" -msgstr "ÀàÐÍ £º %s\n" +#. TRANS An attempt was made to modify something on a read-only file system. +#: sysdeps/gnu/errlist.c:335 +msgid "Read-only file system" +msgstr "åªè¯»æ–‡ä»¶ç³»ç»Ÿ" -#: nis/nis_print.c:172 -msgid "Master Server :\n" -msgstr "Ö÷·þÎñÆ÷ £º\n" +#. 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}). +#: sysdeps/gnu/errlist.c:346 +msgid "Too many links" +msgstr "过多的连接" -#: nis/nis_print.c:174 -msgid "Replicate :\n" -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. +#: sysdeps/gnu/errlist.c:369 +msgid "Numerical argument out of domain" +msgstr "数值å‚数超出域" -#: nis/nis_print.c:175 -#, c-format -msgid "\tName : %s\n" -msgstr "\tÃû³Æ £º%s\n" +#. TRANS Range error; used by mathematical functions when the result value is +#. TRANS not representable because of overflow or underflow. +#: sysdeps/gnu/errlist.c:379 +msgid "Numerical result out of range" +msgstr "数值结果超出范围" -#: nis/nis_print.c:176 -msgid "\tPublic Key : " -msgstr "\t¹«Ô¿ £º" +#. 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 +#: sysdeps/gnu/errlist.c:416 +msgid "Resource temporarily unavailable" +msgstr "资æºæš‚æ—¶ä¸å¯ç”¨" -#: nis/nis_print.c:180 -msgid "None.\n" -msgstr "ÎÞ¡£\n" +#. 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. +#: sysdeps/gnu/errlist.c:429 +msgid "Operation would block" +msgstr "æ“作将阻塞" -#: nis/nis_print.c:183 -#, c-format -msgid "Diffie-Hellmann (%d bits)\n" -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}. +#: sysdeps/gnu/errlist.c:445 +msgid "Operation now in progress" +msgstr "æ“作现在æ£åœ¨è¿›è¡Œ" -#: nis/nis_print.c:188 -#, c-format -msgid "RSA (%d bits)\n" -msgstr "RSA (%d λ)\n" +#. TRANS An operation is already in progress on an object that has non-blocking +#. TRANS mode selected. +#: sysdeps/gnu/errlist.c:455 +msgid "Operation already in progress" +msgstr "æ“作已ç»åœ¨è¿›è¡Œ" -#: nis/nis_print.c:191 -msgid "Kerberos.\n" -msgstr "" +#. TRANS A file that isn't a socket was specified when a socket is required. +#: sysdeps/gnu/errlist.c:464 +msgid "Socket operation on non-socket" +msgstr "对éžå¥—接å—进行套接å—æ“作" -#: nis/nis_print.c:194 -#, c-format -msgid "Unknown (type = %d, bits = %d)\n" -msgstr "δ֪ (ÀàÐÍ = %d£¬Î» = %d)\n" +#. TRANS The size of a message sent on a socket was larger than the supported +#. TRANS maximum size. +#: sysdeps/gnu/errlist.c:474 +msgid "Message too long" +msgstr "消æ¯è¿‡é•¿" -#: nis/nis_print.c:205 -#, c-format -msgid "\tUniversal addresses (%u)\n" -msgstr "" +#. TRANS The socket type does not support the requested communications protocol. +#: sysdeps/gnu/errlist.c:483 +msgid "Protocol wrong type for socket" +msgstr "错误的 socket å议类型" -#: nis/nis_print.c:227 -msgid "Time to live : " -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}. +#: sysdeps/gnu/errlist.c:493 +msgid "Protocol not available" +msgstr "ä¸å¯ç”¨çš„åè®®" -#: nis/nis_print.c:229 -msgid "Default Access rights :\n" -msgstr "ĬÈÏ·ÃÎÊȨÏÞ £º\n" +#. 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}. +#: sysdeps/gnu/errlist.c:504 +msgid "Protocol not supported" +msgstr "ä¸æ”¯æŒçš„åè®®" -#: nis/nis_print.c:238 -#, c-format -msgid "\tType : %s\n" -msgstr "\tÀàÐÍ £º%s\n" +#. TRANS The socket type is not supported. +#: sysdeps/gnu/errlist.c:513 +msgid "Socket type not supported" +msgstr "ä¸æ”¯æŒçš„套接å—类型" -#: nis/nis_print.c:239 -msgid "\tAccess rights: " -msgstr "\t·ÃÎÊȨÏÞ £º" +#. 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. +#: sysdeps/gnu/errlist.c:527 +msgid "Operation not supported" +msgstr "ä¸æ”¯æŒçš„æ“作" -#: nis/nis_print.c:252 -msgid "Group Flags :" -msgstr "×é±êÖ¾ £º" +#. TRANS The socket communications protocol family you requested is not supported. +#: sysdeps/gnu/errlist.c:536 +msgid "Protocol family not supported" +msgstr "ä¸æ”¯æŒçš„åè®®æ—" -#: nis/nis_print.c:255 -msgid "" -"\n" -"Group Members :\n" -msgstr "" -"\n" -"×é³ÉÔ± £º\n" +#. 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}. +#: sysdeps/gnu/errlist.c:546 +msgid "Address family not supported by protocol" +msgstr "åè®®ä¸æ”¯æŒçš„地å€æ—" -#: nis/nis_print.c:266 -#, c-format -msgid "Table Type : %s\n" -msgstr "±í¸ñÀàÐÍ £º%s\n" +#. TRANS The requested socket address is already in use. @xref{Socket Addresses}. +#: sysdeps/gnu/errlist.c:555 +msgid "Address already in use" +msgstr "地å€å·²åœ¨ä½¿ç”¨" -#: nis/nis_print.c:267 -#, c-format -msgid "Number of Columns : %d\n" -msgstr "ÁеÄÊýÁ¿ £º%d\n" +#. 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}. +#: sysdeps/gnu/errlist.c:566 +msgid "Cannot assign requested address" +msgstr "æ— æ³•æŒ‡å®šè¢«è¯·æ±‚çš„åœ°å€" -#: nis/nis_print.c:268 -#, c-format -msgid "Character Separator : %c\n" -msgstr "×Ö·û·Ö¸ô·û£º%c\n" +#. TRANS A socket operation failed because the network was down. +#: sysdeps/gnu/errlist.c:575 +msgid "Network is down" +msgstr "网络已关é—" -#: nis/nis_print.c:269 -#, c-format -msgid "Search Path : %s\n" -msgstr "ËÑË÷·¾¶ £º%s\n" +#. TRANS A socket operation failed because the subnet containing the remote host +#. TRANS was unreachable. +#: sysdeps/gnu/errlist.c:585 +msgid "Network is unreachable" +msgstr "网络ä¸å¯è¾¾" -#: nis/nis_print.c:270 -msgid "Columns :\n" +#. TRANS A network connection was reset because the remote host crashed. +#: sysdeps/gnu/errlist.c:594 +msgid "Network dropped connection on reset" +msgstr "é‡ç½®æ—¶æ–开网络连接" + +#. TRANS A network connection was aborted locally. +#: sysdeps/gnu/errlist.c:603 +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. +#: sysdeps/gnu/errlist.c:614 +msgid "Connection reset by peer" msgstr "" -#: nis/nis_print.c:273 -#, c-format -msgid "\t[%d]\tName : %s\n" -msgstr "\t[%d]\tÃû³Æ £º%s\n" +#. 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. +#: sysdeps/gnu/errlist.c:625 +msgid "No buffer space available" +msgstr "没有å¯ç”¨çš„缓冲区空间" -#: nis/nis_print.c:275 -msgid "\t\tAttributes : " -msgstr "\t\tÊôÐÔ £º" +#. TRANS You tried to connect a socket that is already connected. +#. TRANS @xref{Connecting}. +#: sysdeps/gnu/errlist.c:635 +msgid "Transport endpoint is already connected" +msgstr "ä¼ è¾“ç«¯ç‚¹å·²è¿žæŽ¥" -#: nis/nis_print.c:277 -msgid "\t\tAccess Rights : " -msgstr "\t\t·ÃÎÊȨÏÞ £º" +#. 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. +#: sysdeps/gnu/errlist.c:647 +msgid "Transport endpoint is not connected" +msgstr "ä¼ è¾“ç«¯ç‚¹å°šæœªè¿žæŽ¥" -#: nis/nis_print.c:286 -msgid "Linked Object Type : " -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}. +#: sysdeps/gnu/errlist.c:658 +msgid "Destination address required" +msgstr "需è¦ç›®æ ‡åœ°å€" -#: nis/nis_print.c:288 -#, c-format -msgid "Linked to : %s\n" -msgstr "Á¬½Óµ½ £º%s\n" +#. TRANS The socket has already been shut down. +#: sysdeps/gnu/errlist.c:667 +msgid "Cannot send after transport endpoint shutdown" +msgstr "æ— æ³•åœ¨ä¼ è¾“ç«¯ç‚¹å…³é—以åŽå‘é€" -#: nis/nis_print.c:297 -#, c-format -msgid "\tEntry data of type %s\n" -msgstr "" +#. TRANS ??? +#: sysdeps/gnu/errlist.c:676 +msgid "Too many references: cannot splice" +msgstr "è¿‡å¤šçš„å¼•ç”¨ï¼šæ— æ³•æŽ¥åˆ" -#: nis/nis_print.c:300 -#, c-format -msgid "\t[%u] - [%u bytes] " -msgstr "\t[%u] - [%u ×Ö½Ú] " +#. TRANS A socket operation with a specified timeout received no response during +#. TRANS the timeout period. +#: sysdeps/gnu/errlist.c:686 +msgid "Connection timed out" +msgstr "连接超时" -#: nis/nis_print.c:303 -msgid "Encrypted data\n" -msgstr "ÒѼÓÃܵÄÊý¾Ý\n" +#. TRANS A remote host refused to allow the network connection (typically because +#. TRANS it is not running the requested service). +#: sysdeps/gnu/errlist.c:696 +msgid "Connection refused" +msgstr "æ‹’ç»è¿žæŽ¥" -#: nis/nis_print.c:305 -msgid "Binary data\n" -msgstr "¶þ½øÖÆÊý¾Ý\n" +#. TRANS Too many levels of symbolic links were encountered in looking up a file name. +#. TRANS This often indicates a cycle of symbolic links. +#: sysdeps/gnu/errlist.c:706 +msgid "Too many levels of symbolic links" +msgstr "符å·è¿žæŽ¥çš„层数过多" -#: nis/nis_print.c:320 -#, c-format -msgid "Object Name : %s\n" -msgstr "¶ÔÏóÃû³Æ £º%s\n" +#. 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}). +#: sysdeps/gnu/errlist.c:717 +msgid "File name too long" +msgstr "文件å过长" -#: nis/nis_print.c:321 -#, c-format -msgid "Directory : %s\n" -msgstr "Ŀ¼ £º%s\n" +#. TRANS The remote host for a requested network connection is down. +#: sysdeps/gnu/errlist.c:726 +msgid "Host is down" +msgstr "主机关é—" -#: nis/nis_print.c:322 -#, c-format -msgid "Owner : %s\n" -msgstr "ËùÓÐÕß £º%s\n" +#. TRANS The remote host for a requested network connection is not reachable. +#: sysdeps/gnu/errlist.c:735 +msgid "No route to host" +msgstr "没有到主机的路由" -#: nis/nis_print.c:323 -#, c-format -msgid "Group : %s\n" -msgstr "×é £º%s\n" +#. TRANS Directory not empty, where an empty directory was expected. Typically, +#. TRANS this error occurs when you are trying to delete a directory. +#: sysdeps/gnu/errlist.c:745 +msgid "Directory not empty" +msgstr "目录éžç©º" -#: nis/nis_print.c:324 -msgid "Access Rights : " -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. +#: sysdeps/gnu/errlist.c:756 +msgid "Too many processes" +msgstr "进程过多" -#: nis/nis_print.c:326 -msgid "" -"\n" -"Time to Live : " -msgstr "" -"\n" -"´æÔÚµÄʱ¼ä £º" +#. 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. +#: sysdeps/gnu/errlist.c:766 +msgid "Too many users" +msgstr "用户过多" -#: nis/nis_print.c:329 -#, c-format -msgid "Creation Time : %s" -msgstr "´´½¨Ê±¼ä£º%s" +#. TRANS The user's disk quota was exceeded. +#: sysdeps/gnu/errlist.c:775 +msgid "Disk quota exceeded" +msgstr "超出ç£ç›˜é™é¢" -#: nis/nis_print.c:331 -#, c-format -msgid "Mod. Time : %s" -msgstr "ÐÞ¸Äʱ¼ä £º%s" +#. 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. +#: sysdeps/gnu/errlist.c:787 +msgid "Stale NFS file handle" +msgstr "" -#: nis/nis_print.c:332 -msgid "Object Type : " -msgstr "¶ÔÏóÀàÐÍ £º%s" +#. 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.) +#: sysdeps/gnu/errlist.c:799 +msgid "Object is remote" +msgstr "对象是远程的" -#: nis/nis_print.c:352 -#, c-format -msgid " Data Length = %u\n" -msgstr " Êý¾Ý³¤¶È = %u\n" +#. TRANS ??? +#: sysdeps/gnu/errlist.c:808 +msgid "RPC struct is bad" +msgstr "RPC 结构错误" -#: nis/nis_print.c:365 -#, c-format -msgid "Status : %s\n" -msgstr "״̬ £º%s\n" +#. TRANS ??? +#: sysdeps/gnu/errlist.c:817 +msgid "RPC version wrong" +msgstr "RPC 版本错误" -#: nis/nis_print.c:366 -#, c-format -msgid "Number of objects : %u\n" -msgstr "¶ÔÏóµÄÊýÁ¿ £º%u\n" +#. TRANS ??? +#: sysdeps/gnu/errlist.c:826 +msgid "RPC program not available" +msgstr "RPC 程åºä¸å¯ç”¨" -#: nis/nis_print.c:370 -#, c-format -msgid "Object #%d:\n" -msgstr "¶ÔÏó #%d£º\n" +#. TRANS ??? +#: sysdeps/gnu/errlist.c:835 +msgid "RPC program version wrong" +msgstr "RPC 程åºç‰ˆæœ¬é”™è¯¯" -#: nis/nis_print_group_entry.c:115 -#, c-format -msgid "Group entry for \"%s.%s\" group:\n" +#. TRANS ??? +#: sysdeps/gnu/errlist.c:844 +msgid "RPC bad procedure for program" msgstr "" -#: nis/nis_print_group_entry.c:123 -msgid " Explicit members:\n" -msgstr " ÏÔʽ³ÉÔ±£º\n" +#. 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. +#: sysdeps/gnu/errlist.c:856 +msgid "No locks available" +msgstr "没有å¯ç”¨çš„é”" -#: nis/nis_print_group_entry.c:128 -msgid " No explicit members\n" -msgstr " ÎÞÏÔʽ³ÉÔ±\n" +#. 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}. +#: sysdeps/gnu/errlist.c:869 +msgid "Inappropriate file type or format" +msgstr "ä¸é€‚å½“çš„æ–‡ä»¶ç±»åž‹æˆ–æ ¼å¼" -#: nis/nis_print_group_entry.c:131 -msgid " Implicit members:\n" -msgstr " Òþº¬³ÉÔ±£º\n" +#. TRANS ??? +#: sysdeps/gnu/errlist.c:878 +msgid "Authentication error" +msgstr "认è¯é”™è¯¯" -#: nis/nis_print_group_entry.c:136 -msgid " No implicit members\n" -msgstr " ÎÞÒþº¬³ÉÔ±\n" +#. TRANS ??? +#: sysdeps/gnu/errlist.c:887 +msgid "Need authenticator" +msgstr "需è¦è®¤è¯å™¨" -#: nis/nis_print_group_entry.c:139 -msgid " Recursive members:\n" -msgstr " µÝ¹é³ÉÔ±£º\n" +#. 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. +#: sysdeps/gnu/errlist.c:900 +msgid "Function not implemented" +msgstr "函数未实现" -#: nis/nis_print_group_entry.c:144 -msgid " No recursive members\n" -msgstr " Î޵ݹé³ÉÔ±\n" +#. 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. +#: sysdeps/gnu/errlist.c:920 +msgid "Not supported" +msgstr "ä¸æ”¯æŒ" -#: nis/nis_print_group_entry.c:147 nis/nis_print_group_entry.c:163 -msgid " Explicit nonmembers:\n" -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. +#: sysdeps/gnu/errlist.c:930 +msgid "Invalid or incomplete multibyte or wide character" +msgstr "æ— æ•ˆæˆ–ä¸å®Œæ•´çš„多å—节å—符或宽å—符" -#: nis/nis_print_group_entry.c:152 -msgid " No explicit nonmembers\n" -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. +#: sysdeps/gnu/errlist.c:944 +msgid "Inappropriate operation for background process" +msgstr "对åŽå°è¿›ç¨‹çš„ä¸é€‚当æ“作" -#: nis/nis_print_group_entry.c:155 -msgid " Implicit nonmembers:\n" +#. 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. +#: sysdeps/gnu/errlist.c:955 +msgid "Translator died" msgstr "" -#: nis/nis_print_group_entry.c:160 -msgid " No implicit nonmembers\n" +#. 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. +#: sysdeps/gnu/errlist.c:966 +msgid "?" +msgstr "?" + +#. TRANS You did @strong{what}? +#: sysdeps/gnu/errlist.c:975 +msgid "You really blew it this time" msgstr "" -#: nis/nis_print_group_entry.c:168 -msgid " No recursive nonmembers\n" +#. TRANS Go home and have a glass of warm, dairy-fresh milk. +#: sysdeps/gnu/errlist.c:984 +msgid "Computer bought the farm" msgstr "" -#: nis/nss_nisplus/nisplus-publickey.c:96 -#: nis/nss_nisplus/nisplus-publickey.c:172 -#, c-format -msgid "DES entry for netname %s not unique\n" +#. TRANS This error code has no purpose. +#: sysdeps/gnu/errlist.c:993 +msgid "Gratuitous error" msgstr "" -#: nis/nss_nisplus/nisplus-publickey.c:208 -#, c-format -msgid "netname2user: missing group id list in `%s'." +#: sysdeps/gnu/errlist.c:1001 +msgid "Bad message" +msgstr "错误的消æ¯" + +#: sysdeps/gnu/errlist.c:1009 +msgid "Identifier removed" +msgstr "æ ‡è¯†ç¬¦å·²åˆ é™¤" + +#: sysdeps/gnu/errlist.c:1017 +msgid "Multihop attempted" msgstr "" -#: nis/nss_nisplus/nisplus-publickey.c:285 -#: nis/nss_nisplus/nisplus-publickey.c:291 -#: nis/nss_nisplus/nisplus-publickey.c:350 -#: nis/nss_nisplus/nisplus-publickey.c:359 -#, c-format -msgid "netname2user: (nis+ lookup): %s\n" +#: sysdeps/gnu/errlist.c:1025 +msgid "No data available" +msgstr "没有å¯ç”¨çš„æ•°æ®" + +#: sysdeps/gnu/errlist.c:1033 +msgid "Link has been severed" msgstr "" -#: nis/nss_nisplus/nisplus-publickey.c:304 -#, c-format -msgid "netname2user: DES entry for %s in directory %s not unique" +#: sysdeps/gnu/errlist.c:1041 +msgid "No message of desired type" msgstr "" -#: nis/nss_nisplus/nisplus-publickey.c:322 -#, c-format -msgid "netname2user: principal name `%s' too long" -msgstr "netname2user£º»ù±¾Ãû³Æ¡°%s¡±¹ý³¤" +#: sysdeps/gnu/errlist.c:1049 +msgid "Out of streams resources" +msgstr "æµèµ„æºä¸è¶³" -#: nis/nss_nisplus/nisplus-publickey.c:372 -#, c-format -msgid "netname2user: LOCAL entry for %s in directory %s not unique" -msgstr "" +#: sysdeps/gnu/errlist.c:1057 +msgid "Device not a stream" +msgstr "设备ä¸æ˜¯æµ" -#: nis/nss_nisplus/nisplus-publickey.c:379 -msgid "netname2user: should not have uid 0" -msgstr "netname2user£ºuid ²»Ó¦Îª 0" +#: sysdeps/gnu/errlist.c:1065 +msgid "Value too large for defined data type" +msgstr "对已定义的数æ®ç±»åž‹æ¥è¯´å€¼è¿‡å¤§" -#: nis/ypclnt.c:174 -#, c-format -msgid "YPBINDPROC_DOMAIN: %s\n" -msgstr "YPBINDPROC_DOMAIN£º%s\n" +#: sysdeps/gnu/errlist.c:1073 +msgid "Protocol error" +msgstr "å议错误" -#: nis/ypclnt.c:789 -msgid "Request arguments bad" -msgstr "ÇëÇó²ÎÊý´íÎó" +#: sysdeps/gnu/errlist.c:1081 +msgid "Timer expired" +msgstr "计时器超时" -#: nis/ypclnt.c:791 -msgid "RPC failure on NIS operation" -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}. +#: sysdeps/gnu/errlist.c:1093 +msgid "Operation canceled" +msgstr "æ“作已å–消" -#: nis/ypclnt.c:793 -msgid "Can't bind to server which serves this domain" -msgstr "ÎÞ·¨ÓÚΪ´ËÓò·þÎñµÄ·þÎñÆ÷°ó¶¨" +#: sysdeps/gnu/errlist.c:1101 +msgid "Interrupted system call should be restarted" +msgstr "被ä¸æ–的系统调用应该é‡æ–°å¯åŠ¨" -#: nis/ypclnt.c:795 -msgid "No such map in server's domain" -msgstr "" +#: sysdeps/gnu/errlist.c:1109 +msgid "Channel number out of range" +msgstr "通é“ç¼–å·è¶…出范围" -#: nis/ypclnt.c:797 -msgid "No such key in map" -msgstr "" +#: sysdeps/gnu/errlist.c:1117 +msgid "Level 2 not synchronized" +msgstr "级别 2 尚未åŒæ¥" -#: nis/ypclnt.c:799 -msgid "Internal NIS error" -msgstr "ÄÚ²¿ NIS ´íÎó" +#: sysdeps/gnu/errlist.c:1125 +msgid "Level 3 halted" +msgstr "级别 3 已关é—" -#: nis/ypclnt.c:801 -msgid "Local resource allocation failure" -msgstr "±¾µØ×ÊÔ´·ÖÅäʧ°Ü" +#: sysdeps/gnu/errlist.c:1133 +msgid "Level 3 reset" +msgstr "级别 3 å·²é‡ç½®" -#: nis/ypclnt.c:803 -msgid "No more records in map database" -msgstr "" +#: sysdeps/gnu/errlist.c:1141 +msgid "Link number out of range" +msgstr "连接数超出范围" -#: nis/ypclnt.c:805 -msgid "Can't communicate with portmapper" -msgstr "ÎÞ·¨Óë portmapper ͨѶ" +#: sysdeps/gnu/errlist.c:1149 +msgid "Protocol driver not attached" +msgstr "æœªåŠ è½½å议驱动程åº" -#: nis/ypclnt.c:807 -msgid "Can't communicate with ypbind" -msgstr "ÎÞ·¨Óë ypbind ͨѶ" +#: sysdeps/gnu/errlist.c:1157 +msgid "No CSI structure available" +msgstr "没有å¯ç”¨çš„ CSI 结构" -#: nis/ypclnt.c:809 -msgid "Can't communicate with ypserv" -msgstr "ÎÞ·¨Óë ypserv ͨѶ" +#: sysdeps/gnu/errlist.c:1165 +msgid "Level 2 halted" +msgstr "级别 2 己关é—" -#: nis/ypclnt.c:811 -msgid "Local domain name not set" -msgstr "δÉèÖñ¾µØÓòÃû" +#: sysdeps/gnu/errlist.c:1173 +msgid "Invalid exchange" +msgstr "æ— æ•ˆçš„äº¤æ¢" -#: nis/ypclnt.c:813 -msgid "NIS map database is bad" -msgstr "NIS Ó³ÉäÊý¾Ý¿â´íÎó" +#: sysdeps/gnu/errlist.c:1181 +msgid "Invalid request descriptor" +msgstr "æ— æ•ˆçš„è¯·æ±‚æ述符" -#: nis/ypclnt.c:815 -msgid "NIS client/server version mismatch - can't supply service" -msgstr "NIS ¿Í»§¶Ë/·þÎñÆ÷°æ±¾²»Æ¥Åä - ÎÞ·¨Ö§³Ö·þÎñ" +#: sysdeps/gnu/errlist.c:1189 +msgid "Exchange full" +msgstr "交æ¢æ»¡" -#: nis/ypclnt.c:819 -msgid "Database is busy" -msgstr "Êý¾Ý¿âæ" +#: sysdeps/gnu/errlist.c:1197 +msgid "No anode" +msgstr "没有 anode" -#: nis/ypclnt.c:821 -msgid "Unknown NIS error code" -msgstr "δ֪µÄ NIS ´íÎóÂë" +#: sysdeps/gnu/errlist.c:1205 +msgid "Invalid request code" +msgstr "æ— æ•ˆçš„è¯·æ±‚ç " -#: nis/ypclnt.c:863 -msgid "Internal ypbind error" -msgstr "ÄÚ²¿ ypbind ´íÎó" +#: sysdeps/gnu/errlist.c:1213 +msgid "Invalid slot" +msgstr "" -#: nis/ypclnt.c:865 -msgid "Domain not bound" -msgstr "δ°ó¶¨Óò" +#: sysdeps/gnu/errlist.c:1221 +msgid "File locking deadlock error" +msgstr "文件é”æ»é”错误" -#: nis/ypclnt.c:867 -msgid "System resource allocation failure" -msgstr "ϵͳ×ÊÔ´·ÖÅäʧ°Ü" +#: sysdeps/gnu/errlist.c:1229 +msgid "Bad font file format" +msgstr "错误的å—ä½“æ–‡ä»¶æ ¼å¼" -#: nis/ypclnt.c:869 -msgid "Unknown ypbind error" -msgstr "δ֪µÄ ypbind ´íÎó" +#: sysdeps/gnu/errlist.c:1237 +msgid "Machine is not on the network" +msgstr "机器ä¸åœ¨ç½‘络ä¸" -#: nis/ypclnt.c:908 -msgid "yp_update: cannot convert host to netname\n" -msgstr "yp_update£ºÎÞ·¨½«Ö÷»úÃûת»»ÎªÍøÃû\n" +#: sysdeps/gnu/errlist.c:1245 +msgid "Package not installed" +msgstr "包未安装" -#: nis/ypclnt.c:920 -msgid "yp_update: cannot get server address\n" -msgstr "yp_update£ºÎÞ·¨»ñÈ¡·þÎñÆ÷µØÖ·\n" +#: sysdeps/gnu/errlist.c:1253 +msgid "Advertise error" +msgstr "" -#: nscd/cache.c:88 -msgid "while allocating hash table entry" -msgstr "·ÖÅäÔÓ´Õ±íÌõĿʱ" +#: sysdeps/gnu/errlist.c:1261 +msgid "Srmount error" +msgstr "" -#: nscd/cache.c:150 nscd/connections.c:187 -#, c-format -msgid "cannot stat() file `%s': %s" -msgstr "ÎÞ·¨¶ÔÎļþ¡°%s¡±½øÐÐ stat() ²Ù×÷£º%s" +#: sysdeps/gnu/errlist.c:1269 +msgid "Communication error on send" +msgstr "å‘é€æ—¶å‡ºçŽ°é€šè®¯é”™è¯¯" -#: nscd/connections.c:146 -msgid "cannot read configuration file; this is fatal" -msgstr "ÎÞ·¨¶ÁÈëÅäÖÃÎļþ£»ÕâÊÇÖÂÃüµÄ" +#: sysdeps/gnu/errlist.c:1277 +msgid "RFS specific error" +msgstr "" -#: nscd/connections.c:153 -msgid "Cannot run nscd in secure mode as unprivileged user" +#: sysdeps/gnu/errlist.c:1285 +msgid "Name not unique on network" msgstr "" -#: nscd/connections.c:175 -#, c-format -msgid "while allocating cache: %s" -msgstr "·ÖÅ仺³åÇøʱ£º%s" +#: sysdeps/gnu/errlist.c:1293 +msgid "File descriptor in bad state" +msgstr "文件æ述符处于错误状æ€" -#: nscd/connections.c:200 -#, c-format -msgid "cannot open socket: %s" -msgstr "ÎÞ·¨´ò¿ªÌ×½Ó×Ö£º%s" +#: sysdeps/gnu/errlist.c:1301 +msgid "Remote address changed" +msgstr "远程地å€å·²æ”¹å˜" -#: nscd/connections.c:218 -#, c-format -msgid "cannot enable socket to accept connections: %s" -msgstr "ÎÞ·¨ÆôÓÃÌ×½Ó×ÖÒÔ½ÓÊÜÁ¬½Ó£º%s" +#: sysdeps/gnu/errlist.c:1309 +msgid "Can not access a needed shared library" +msgstr "æ— æ³•è®¿é—®å¿…é¡»çš„å…±äº«åº“" -#: nscd/connections.c:260 -#, c-format -msgid "handle_request: request received (Version = %d)" -msgstr "´¦ÀíÇëÇó£ºÒÑÊÕµ½ÇëÇó (°æ±¾ = %d)" +#: sysdeps/gnu/errlist.c:1317 +msgid "Accessing a corrupted shared library" +msgstr "æ£åœ¨è®¿é—®ä¸€ä¸ªå·²æ¯å的共享库" -#: nscd/connections.c:266 -#, c-format -msgid "cannot handle old request version %d; current version is %d" -msgstr "ÎÞ·¨´¦Àí¾ÉÇëÇó°æ±¾ %d£»µ±Ç°°æ±¾Îª %d" +#: sysdeps/gnu/errlist.c:1325 +msgid ".lib section in a.out corrupted" +msgstr "a.out ä¸çš„ .lib 节已æ¯å" -#: nscd/connections.c:304 nscd/connections.c:326 -#, c-format -msgid "cannot write result: %s" -msgstr "ÎÞ·¨Ð´Èë½á¹û£º¡°%s¡±" +#: sysdeps/gnu/errlist.c:1333 +msgid "Attempting to link in too many shared libraries" +msgstr "试图于过多的共享库相连接" -#: nscd/connections.c:405 nscd/connections.c:499 -#, c-format -msgid "error getting caller's id: %s" -msgstr "" +#: sysdeps/gnu/errlist.c:1341 +msgid "Cannot exec a shared library directly" +msgstr "æ— æ³•ç›´æŽ¥æ‰§è¡Œå…±äº«åº“" -#: nscd/connections.c:471 -#, c-format -msgid "while accepting connection: %s" -msgstr "½ÓÊÜÁ¬½Óʱ£º%s" +#: sysdeps/gnu/errlist.c:1349 +msgid "Streams pipe error" +msgstr "æµç®¡é“错误" -#: nscd/connections.c:482 -#, c-format -msgid "short read while reading request: %s" -msgstr "¶ÁÈ¡ÇëÇóʱûÓжÁÈë×ã¹»µÄÊý¾Ý£º%s" +#: sysdeps/gnu/errlist.c:1357 +msgid "Structure needs cleaning" +msgstr "结构需è¦æ¸…ç†" -#: nscd/connections.c:518 -#, c-format -msgid "key length in request too long: %d" -msgstr "ÇëÇóÖеļü¹ý³¤£º%d" +#: sysdeps/gnu/errlist.c:1365 +msgid "Not a XENIX named type file" +msgstr "ä¸æ˜¯ XENIX 命å的类型文件" -#: nscd/connections.c:532 -#, c-format -msgid "short read while reading request key: %s" -msgstr "¶ÁÈëÇëÇó¼üµÄʱºòûÓжÁÈë×ã¹»µÄÊý¾Ý£º%s" +#: sysdeps/gnu/errlist.c:1373 +msgid "No XENIX semaphores available" +msgstr "没有å¯ç”¨çš„ XENIX ä¿¡å·é‡" -#: nscd/connections.c:591 nscd/connections.c:592 nscd/connections.c:611 -#: nscd/connections.c:624 nscd/connections.c:630 nscd/connections.c:637 -#, c-format -msgid "Failed to run nscd as user '%s'" -msgstr "" +#: sysdeps/gnu/errlist.c:1381 +msgid "Is a named type file" +msgstr "是一个有å类型文件" -#: nscd/connections.c:612 -msgid "getgrouplist failed" -msgstr "getgrouplist ʧ°Ü" +#: sysdeps/gnu/errlist.c:1389 +msgid "Remote I/O error" +msgstr "远程 I/O 错误" -#: nscd/connections.c:625 -msgid "setgroups failed" -msgstr "setgroups ʧ°Ü" +#: sysdeps/gnu/errlist.c:1397 +msgid "No medium found" +msgstr "找ä¸åˆ°ä»‹è´¨" -#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109 -msgid "while allocating key copy" -msgstr "·ÖÅä¼ü¸±±¾Ê±" +#: sysdeps/gnu/errlist.c:1405 +msgid "Wrong medium type" +msgstr "错误的介质类型" -#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146 -msgid "while allocating cache entry" -msgstr "·ÖÅ仺³åÇøÌõĿʱ" +#: sysdeps/gnu/errlist.c:1413 +msgid "Required key not available" +msgstr "需è¦çš„关键å—ä¸å˜åœ¨" -#: nscd/grpcache.c:196 nscd/hstcache.c:282 nscd/pwdcache.c:192 -#, c-format -msgid "short write in %s: %s" +#: sysdeps/gnu/errlist.c:1421 +msgid "Key has expired" +msgstr "关键å—已过期" + +#: sysdeps/gnu/errlist.c:1429 +msgid "Key has been revoked" msgstr "" -#: nscd/grpcache.c:218 -#, c-format -msgid "Haven't found \"%s\" in group cache!" -msgstr "ÎÞ·¨ÔÚ×黺³åÇøÖÐÕÒµ½¡°%s¡±£¡" +#: sysdeps/gnu/errlist.c:1437 +msgid "Key was rejected by service" +msgstr "" -#: nscd/grpcache.c:284 -#, c-format -msgid "Invalid numeric gid \"%s\"!" +#: sysdeps/gnu/errlist.c:1445 +msgid "Owner died" msgstr "" -#: nscd/grpcache.c:291 -#, c-format -msgid "Haven't found \"%d\" in group cache!" -msgstr "ÎÞ·¨ÔÚ×黺³åÇøÖÐÕÒµ½¡°%d¡±£¡" +#: sysdeps/gnu/errlist.c:1453 +msgid "State not recoverable" +msgstr "" -#: nscd/hstcache.c:304 nscd/hstcache.c:370 nscd/hstcache.c:435 -#: nscd/hstcache.c:500 -#, c-format -msgid "Haven't found \"%s\" in hosts cache!" -msgstr "ÎÞ·¨ÔÚÖ÷»ú»º³åÇøÖÐÕÒµ½¡°%s¡±£¡" +#: sysdeps/mach/_strerror.c:57 +msgid "Error in unknown error system: " +msgstr "未知的错误系统ä¸å‡ºé”™ï¼š" -#: nscd/nscd.c:85 -msgid "Read configuration data from NAME" -msgstr "´Ó NAME ÖжÁÈ¡ÅäÖÃÊý¾Ý" +#: sysdeps/posix/gai_strerror-strs.h:1 +msgid "Address family for hostname not supported" +msgstr "ä¸æ”¯æŒçš„主机å地å€æ—" -#: nscd/nscd.c:87 -msgid "Do not fork and display messages on the current tty" -msgstr "" +#: sysdeps/posix/gai_strerror-strs.h:2 +msgid "Temporary failure in name resolution" +msgstr "域å解æžæš‚时失败" -#: nscd/nscd.c:88 -msgid "NUMBER" -msgstr "" +#: sysdeps/posix/gai_strerror-strs.h:3 +msgid "Bad value for ai_flags" +msgstr "错误的 ai_flags 的值" -#: nscd/nscd.c:88 -msgid "Start NUMBER threads" -msgstr "Æô¶¯ NUMBER ¸öÏß³Ì" +#: sysdeps/posix/gai_strerror-strs.h:4 +msgid "Non-recoverable failure in name resolution" +msgstr "域å解æžä¸å‡ºçŽ°ä¸å¯ä¿®å¤çš„失败" -#: nscd/nscd.c:89 -msgid "Shut the server down" -msgstr "¹Ø±Õ·þÎñÆ÷" +#: sysdeps/posix/gai_strerror-strs.h:5 +msgid "ai_family not supported" +msgstr "ä¸æ”¯æŒ ai_family" -#: nscd/nscd.c:90 -msgid "Print current configuration statistic" -msgstr "´òÓ¡µ±Ç°ÅäÖÃͳ¼Æ" +#: sysdeps/posix/gai_strerror-strs.h:6 +msgid "Memory allocation failure" +msgstr "内å˜åˆ†é…失败" -#: nscd/nscd.c:91 -msgid "TABLE" -msgstr "" +#: sysdeps/posix/gai_strerror-strs.h:7 +msgid "No address associated with hostname" +msgstr "没有与主机åå…³è”的地å€" -#: nscd/nscd.c:92 -msgid "Invalidate the specified cache" +#: sysdeps/posix/gai_strerror-strs.h:8 +msgid "Name or service not known" +msgstr "未知的å称或æœåŠ¡" + +#: sysdeps/posix/gai_strerror-strs.h:9 +msgid "Servname not supported for ai_socktype" msgstr "" -#: nscd/nscd.c:93 -msgid "TABLE,yes" +#: sysdeps/posix/gai_strerror-strs.h:10 +msgid "ai_socktype not supported" +msgstr "ä¸æ”¯æŒ ai_socktype" + +#: sysdeps/posix/gai_strerror-strs.h:11 +msgid "System error" +msgstr "系统错误" + +#: sysdeps/posix/gai_strerror-strs.h:12 +msgid "Processing request in progress" msgstr "" -#: nscd/nscd.c:93 -msgid "Use separate cache for each user" -msgstr "Ϊÿ¸öÓû§Ê¹Ó÷ÖÀëµÄ»º³åÇø" +#: sysdeps/posix/gai_strerror-strs.h:13 +msgid "Request canceled" +msgstr "请求已å–消" -#: nscd/nscd.c:98 -msgid "Name Service Cache Daemon." +#: sysdeps/posix/gai_strerror-strs.h:14 +msgid "Request not canceled" +msgstr "请求未å–消" + +#: sysdeps/posix/gai_strerror-strs.h:15 +msgid "All requests done" +msgstr "完æˆæ‰€æœ‰è¯·æ±‚" + +#: sysdeps/posix/gai_strerror-strs.h:16 +msgid "Interrupted by a signal" +msgstr "被信å·ä¸æ–" + +#: sysdeps/posix/gai_strerror-strs.h:17 +msgid "Parameter string not correctly encoded" msgstr "" -#: nscd/nscd.c:131 -msgid "already running" -msgstr "ÒѾÔÚÔËÐÐ" +#: sysdeps/unix/siglist.c:26 +msgid "Signal 0" +msgstr "ä¿¡å· 0" -#: nscd/nscd.c:243 nscd/nscd.c:263 nscd/nscd.c:269 -msgid "Only root is allowed to use this option!" -msgstr "Ö»ÓиùÓû§ÔÊÐíʹÓñ¾Ñ¡Ï" +#: sysdeps/unix/siglist.c:32 +msgid "IOT trap" +msgstr "" -#: nscd/nscd_conf.c:83 +#: sysdeps/unix/sysv/linux/i386/readelflib.c:49 #, c-format -msgid "Parse error: %s" -msgstr "½âÎö´íÎó£º%s" +msgid "%s is for unknown machine %d.\n" +msgstr "%s 用于未知的机器 %d。\n" -#: nscd/nscd_conf.c:166 +#: sysdeps/unix/sysv/linux/ia64/makecontext.c:63 #, c-format -msgid "Could not create log file \"%s\"" -msgstr "ÎÞ·¨´´½¨ÈÕÖ¾Îļþ¡°%s¡±" - -#: nscd/nscd_conf.c:182 -msgid "Must specify user name for server-user option" -msgstr "" +msgid "makecontext: does not know how to handle more than 8 arguments\n" +msgstr "makecontext:ä¸çŸ¥é“该如何处ç†å¤šäºŽ 8 个å‚数的情况\n" -#: nscd/nscd_conf.c:187 +#: sysdeps/unix/sysv/linux/lddlibc4.c:64 #, c-format -msgid "Unknown option: %s %s %s" -msgstr "δ֪µÄÑ¡Ï%s %s %s" +msgid "cannot open `%s'" +msgstr "æ— æ³•æ‰“å¼€â€œ%sâ€" -#: nscd/nscd_stat.c:87 +#: sysdeps/unix/sysv/linux/lddlibc4.c:68 #, c-format -msgid "cannot write statistics: %s" -msgstr "ÎÞ·¨Ð´Èëͳ¼Æ£º%s" +msgid "cannot read header from `%s'" +msgstr "æ— æ³•ä»Žâ€œ%sâ€ä¸è¯»å…¥å¤´" -#: nscd/nscd_stat.c:105 -msgid "nscd not running!\n" -msgstr "nscd δÔËÐУ¡\n" +#: timezone/zdump.c:211 +msgid "lacks alphabetic at start" +msgstr "" -#: nscd/nscd_stat.c:116 -msgid "write incomplete" -msgstr "дÈë²»ÍêÕû" +#: timezone/zdump.c:213 +msgid "has fewer than 3 alphabetics" +msgstr "" -#: nscd/nscd_stat.c:128 -msgid "cannot read statistics data" -msgstr "ÎÞ·¨¶ÁÈëͳ¼ÆÊý¾Ý" +#: timezone/zdump.c:215 +msgid "has more than 6 alphabetics" +msgstr "" -#: nscd/nscd_stat.c:131 +#: timezone/zdump.c:223 +msgid "differs from POSIX standard" +msgstr "" + +#: timezone/zdump.c:229 #, c-format -msgid "" -"nscd configuration:\n" -"\n" -"%15d server debug level\n" +msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n" msgstr "" -"nscd ÅäÖãº\n" -"\n" -"%15d ·þÎñÆ÷µ÷ÊÔ¼¶±ð\n" -#: nscd/nscd_stat.c:146 nscd/nscd_stat.c:148 -msgid " no" -msgstr " ·ñ" +#: timezone/zdump.c:280 +#, c-format +msgid "%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n" +msgstr "%s:用法为 %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] 区域å ...\n" -#: nscd/nscd_stat.c:146 nscd/nscd_stat.c:148 -msgid " yes" -msgstr " ÊÇ" +#: timezone/zdump.c:297 +#, c-format +msgid "%s: wild -c argument %s\n" +msgstr "%s: 怪异的 -c 选项 %s\n" -#: nscd/nscd_stat.c:154 +#: timezone/zdump.c:388 +msgid "Error writing to standard output" +msgstr "å†™å…¥æ ‡å‡†è¾“å‡ºå‡ºé”™" + +#: timezone/zdump.c:411 #, c-format -msgid "" -"\n" -"%s cache:\n" -"\n" -"%15s cache is enabled\n" -"%15Zd suggested size\n" -"%15ld seconds time to live for positive entries\n" -"%15ld seconds time to live for negative entries\n" -"%15ld cache hits on positive entries\n" -"%15ld cache hits on negative entries\n" -"%15ld cache misses on positive entries\n" -"%15ld cache misses on negative entries\n" -"%15ld%% cache hit rate\n" -"%15s check /etc/%s for changes\n" +msgid "%s: use of -v on system with floating time_t other than float or double\n" msgstr "" -#: nscd/pwdcache.c:214 +#: timezone/zic.c:392 #, c-format -msgid "Haven't found \"%s\" in password cache!" -msgstr "ÎÞ·¨ÔÚ¿ÚÁ³åÇøÖÐÕÒµ½¡°%s¡±£¡" +msgid "%s: Memory exhausted: %s\n" +msgstr "%s:内å˜è€—尽:%s\n" -#: nscd/pwdcache.c:280 +#: timezone/zic.c:451 #, c-format -msgid "Invalid numeric uid \"%s\"!" +msgid "\"%s\", line %d: %s" +msgstr "“%sâ€ï¼Œè¡Œ %d:%s" + +#: timezone/zic.c:454 +#, c-format +msgid " (rule from \"%s\", line %d)" msgstr "" -#: nscd/pwdcache.c:287 +#: timezone/zic.c:466 +msgid "warning: " +msgstr "è¦å‘Šï¼š" + +#: timezone/zic.c:476 #, c-format -msgid "Haven't found \"%d\" in password cache!" -msgstr "ÎÞ·¨ÔÚ¿ÚÁ³åÇøÖÐÕÒµ½¡°%d¡±£¡" +msgid "" +"%s: usage is %s [ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" +"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" +msgstr "" +"%s:用法为 %s [ --version ] [ -v ] [ -l 本地时间 ] [ -p posix 规则 ] \\\n" +"\t[ -d 目录 ] [ -L leapseconds ] [ -y yearistype ] [ 文件å ... ]\n" -#: elf/../sysdeps/generic/dl-sysdep.c:357 -msgid "cannot create capability list" -msgstr "ÎÞ·¨´´½¨¹¦ÄÜÁбí" +#: timezone/zic.c:511 +msgid "wild compilation-time specification of zic_t" +msgstr "" -#: elf/../sysdeps/generic/readelflib.c:35 +#: timezone/zic.c:528 #, c-format -msgid "file %s is truncated\n" -msgstr "Îļþ %s ¼º±»½Ø¶Ï\n" +msgid "%s: More than one -d option specified\n" +msgstr "%s:给出了多个 -d 选项\n" -#: elf/../sysdeps/generic/readelflib.c:67 +#: timezone/zic.c:538 #, c-format -msgid "%s is a 32 bit ELF file.\n" -msgstr "%s ÊÇÒ»¸ö 32 λ ELF Îļþ¡£\n" +msgid "%s: More than one -l option specified\n" +msgstr "%s:给出了多个 -l 选项\n" -#: elf/../sysdeps/generic/readelflib.c:69 +#: timezone/zic.c:548 #, c-format -msgid "%s is a 64 bit ELF file.\n" -msgstr "%s ÊÇÒ»¸ö 64 λ ELF Îļþ¡£\n" +msgid "%s: More than one -p option specified\n" +msgstr "%s:给出了多个 -p 选项\n" -#: elf/../sysdeps/generic/readelflib.c:71 +#: timezone/zic.c:558 #, c-format -msgid "Unknown ELFCLASS in file %s.\n" -msgstr "Îļþ %s ÖÐδ֪µÄ ELFCLASS¡£\n" +msgid "%s: More than one -y option specified\n" +msgstr "%s:给出了多个 -y 选项\n" -#: elf/../sysdeps/generic/readelflib.c:78 +#: timezone/zic.c:568 #, c-format -msgid "%s is not a shared object file (Type: %d).\n" -msgstr "%s ²»Êǹ²ÏíÄ¿±êÎļþ (ÀàÐÍ£º%d)¡£\n" +msgid "%s: More than one -L option specified\n" +msgstr "%s:给出了多个 -L 选项\n" -#: elf/../sysdeps/generic/readelflib.c:109 -msgid "more than one dynamic segment\n" -msgstr "¶àÓÚÒ»¸ö¶¯Ì¬¶Î\n" +#: timezone/zic.c:617 +msgid "link to link" +msgstr "链接到链接" + +#: timezone/zic.c:682 +msgid "hard link failed, symbolic link used" +msgstr "硬连接失败,使用符å·è¿žæŽ¥" -#: elf/../sysdeps/unix/sysv/linux/i386/readelflib.c:49 +#: timezone/zic.c:690 #, c-format -msgid "%s is for unknown machine %d.\n" -msgstr "%s ÓÃÓÚδ֪µÄ»úÆ÷ %d¡£\n" +msgid "%s: Can't link from %s to %s: %s\n" +msgstr "%sï¼šæ— æ³•ä»Ž %s 连接到 %s:%s\n" -#: elf/cache.c:69 -msgid "unknown" -msgstr "δ֪" +#: timezone/zic.c:762 timezone/zic.c:764 +msgid "same rule name in multiple files" +msgstr "多个文件ä¸çš„相åŒè§„则å" -#: elf/cache.c:105 -msgid "Unknown OS" -msgstr "δ֪µÄ²Ù×÷ϵͳ" +#: timezone/zic.c:805 +msgid "unruly zone" +msgstr "" -#: elf/cache.c:110 +#: timezone/zic.c:812 #, c-format -msgid ", OS ABI: %s %d.%d.%d" +msgid "%s in ruleless zone" msgstr "" -#: elf/cache.c:136 elf/ldconfig.c:1045 +#: timezone/zic.c:833 +msgid "standard input" +msgstr "æ ‡å‡†è¾“å…¥" + +#: timezone/zic.c:838 #, c-format -msgid "Can't open cache file %s\n" -msgstr "ÎÞ·¨´ò¿ª»º³åÎļþ %s\n" +msgid "%s: Can't open %s: %s\n" +msgstr "%sï¼šæ— æ³•æ‰“å¼€ %s:%s\n" -#: elf/cache.c:148 -msgid "mmap of cache file failed.\n" -msgstr "" +#: timezone/zic.c:849 +msgid "line too long" +msgstr "行过长" -#: elf/cache.c:152 elf/cache.c:162 -msgid "File is not a cache file.\n" -msgstr "Îļþ²»ÊÇ»º³åÇøÎļþ¡£\n" +#: timezone/zic.c:869 +msgid "input line of unknown type" +msgstr "未知类型的输入行" -#: elf/cache.c:195 elf/cache.c:205 +#: timezone/zic.c:885 #, c-format -msgid "%d libs found in cache `%s'\n" -msgstr "ÔÚ»º³åÇø¡°%2$s¡±ÖÐÕÒµ½ %1$d ¸ö¿â\n" +msgid "%s: Leap line in non leap seconds file %s\n" +msgstr "" -#: elf/cache.c:392 +#: timezone/zic.c:892 timezone/zic.c:1323 timezone/zic.c:1345 #, c-format -msgid "Can't remove old temporary cache file %s" -msgstr "ÎÞ·¨É¾³ý¾ÉÁÙʱ»º³åÎļþ %s" +msgid "%s: panic: Invalid l_value %d\n" +msgstr "" -#: elf/cache.c:399 +#: timezone/zic.c:900 #, c-format -msgid "Can't create temporary cache file %s" -msgstr "ÎÞ·¨´´½¨ÁÙʱ»º³åÎļþ %s" +msgid "%s: Error reading %s\n" +msgstr "%s:读 %s 错误\n" -#: elf/cache.c:407 elf/cache.c:416 elf/cache.c:420 -msgid "Writing of cache data failed" +#: timezone/zic.c:907 +#, c-format +msgid "%s: Error closing %s: %s\n" +msgstr "%sï¼šå…³é— %s 错误:%s\n" + +#: timezone/zic.c:912 +msgid "expected continuation line not found" +msgstr "找ä¸åˆ°åº”该出现的ç»è¡Œ" + +#: timezone/zic.c:956 +msgid "24:00 not handled by pre-1998 versions of zic" msgstr "" -#: elf/cache.c:424 -msgid "Writing of cache data failed." +#: timezone/zic.c:970 +msgid "wrong number of fields on Rule line" +msgstr "规则行ä¸åŸŸçš„个数错误" + +#: timezone/zic.c:974 +msgid "nameless rule" +msgstr "æ— å规则" + +#: timezone/zic.c:979 +msgid "invalid saved time" msgstr "" -#: elf/cache.c:431 +#: timezone/zic.c:1000 +msgid "wrong number of fields on Zone line" +msgstr "区域行ä¸åŸŸçš„个数错误" + +#: timezone/zic.c:1006 #, c-format -msgid "Changing access rights of %s to %#o failed" -msgstr "½« %s µÄ·ÃÎÊȨÏ޸ıäΪ %#o ʧ°Ü" +msgid "\"Zone %s\" line and -l option are mutually exclusive" +msgstr "" -#: elf/cache.c:436 +#: timezone/zic.c:1014 #, c-format -msgid "Renaming of %s to %s failed" -msgstr "½« %s ¸ÄÃûΪ %s ʧ°Ü" +msgid "\"Zone %s\" line and -p option are mutually exclusive" +msgstr "" -#: elf/dl-close.c:128 -msgid "shared object not open" -msgstr "¹²Ïí¿âδ´ò¿ª" +#: timezone/zic.c:1026 +#, c-format +msgid "duplicate zone name %s (file \"%s\", line %d)" +msgstr "é‡å¤çš„区域å %s (文件“%sâ€ï¼Œè¡Œ %d)" -#: elf/dl-close.c:486 elf/dl-open.c:444 -msgid "TLS generation counter wrapped! Please send report with the 'glibcbug' script." +#: timezone/zic.c:1042 +msgid "wrong number of fields on Zone continuation line" msgstr "" -#: elf/dl-deps.c:111 elf/dl-open.c:183 -msgid "DST not allowed in SUID/SGID programs" -msgstr "" +#: timezone/zic.c:1082 +msgid "invalid UTC offset" +msgstr "æ— æ•ˆçš„ UTC å移é‡" -#: elf/dl-deps.c:124 -msgid "empty dynamics string token substitution" +#: timezone/zic.c:1085 +msgid "invalid abbreviation format" +msgstr "æ— æ•ˆçš„ç¼©ç•¥æ ¼å¼" + +#: timezone/zic.c:1114 +msgid "Zone continuation line end time is not after end time of previous line" msgstr "" -#: elf/dl-deps.c:130 -#, c-format -msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n" +#: timezone/zic.c:1142 +msgid "wrong number of fields on Leap line" msgstr "" -#: elf/dl-deps.c:461 -msgid "cannot allocate dependency list" -msgstr "ÎÞ·¨·ÖÅäÒÐÀµÁбí" +#: timezone/zic.c:1151 +msgid "invalid leaping year" +msgstr "æ— æ•ˆçš„é—°å¹´" -#: elf/dl-deps.c:494 elf/dl-deps.c:549 -msgid "cannot allocate symbol search list" -msgstr "ÎÞ·¨·ÖÅä·ûºÅËÑË÷Áбí" +#: timezone/zic.c:1171 timezone/zic.c:1277 +msgid "invalid month name" +msgstr "æ— æ•ˆçš„æœˆå称" -#: elf/dl-deps.c:534 -msgid "Filters not supported with LD_TRACE_PRELINKING" +#: timezone/zic.c:1184 timezone/zic.c:1390 timezone/zic.c:1404 +msgid "invalid day of month" +msgstr "æ— æ•ˆçš„æ—¥" + +#: timezone/zic.c:1189 +msgid "time before zero" msgstr "" -#: elf/dl-error.c:75 -msgid "DYNAMIC LINKER BUG!!!" +#: timezone/zic.c:1193 +msgid "time too small" msgstr "" -#: elf/dl-error.c:108 -msgid "error while loading shared libraries" -msgstr "×°Èë¹²Ïí¿âʱ³ö´í" +#: timezone/zic.c:1197 +msgid "time too large" +msgstr "时间过大" -#: elf/dl-load.c:339 -msgid "cannot allocate name record" -msgstr "ÎÞ·¨·ÖÅäÃû¼Ç¼" +#: timezone/zic.c:1201 timezone/zic.c:1306 +msgid "invalid time of day" +msgstr "æ— æ•ˆçš„æ—¶é—´" -#: elf/dl-load.c:441 elf/dl-load.c:520 elf/dl-load.c:612 elf/dl-load.c:707 -msgid "cannot create cache for search path" -msgstr "ÎÞ·¨´´½¨ËÑË÷·¾¶»º³åÆ÷" +#: timezone/zic.c:1220 +msgid "illegal CORRECTION field on Leap line" +msgstr "" -#: elf/dl-load.c:543 -msgid "cannot create RUNPATH/RPATH copy" -msgstr "ÎÞ·¨´´½¨ RUNPATH/RPATH µÄ¸±±¾" +#: timezone/zic.c:1225 +msgid "illegal Rolling/Stationary field on Leap line" +msgstr "" -#: elf/dl-load.c:598 -msgid "cannot create search path array" -msgstr "ÎÞ·¨´´½¨ËÑË÷·¾¶Êý×é" +#: timezone/zic.c:1241 +msgid "wrong number of fields on Link line" +msgstr "连接行ä¸åŸŸçš„个数错误" -#: elf/dl-load.c:794 -msgid "cannot stat shared object" -msgstr "ÎÞ·¨¶Ô¹²ÏíÄ¿±ê½øÐÐ stat ²Ù×÷" +#: timezone/zic.c:1245 +msgid "blank FROM field on Link line" +msgstr "Link è¡Œä¸ç©ºç™½çš„ FROM 域" -#: elf/dl-load.c:838 -msgid "cannot open zero fill device" -msgstr "ÎÞ·¨´ò¿ªÁãÌî³äÉ豸" +#: timezone/zic.c:1249 +msgid "blank TO field on Link line" +msgstr "Link è¡Œä¸ç©ºç™½çš„ TO 域" -#: elf/dl-load.c:847 elf/dl-load.c:1902 -msgid "cannot create shared object descriptor" -msgstr "ÎÞ·¨´´½¨¹²Ïí¶ÔÏóÃèÊö·û" +#: timezone/zic.c:1327 +msgid "invalid starting year" +msgstr "æ— æ•ˆçš„èµ·å§‹å¹´ä»½" -#: elf/dl-load.c:866 elf/dl-load.c:1398 elf/dl-load.c:1481 -msgid "cannot read file data" -msgstr "ÎÞ·¨¶ÁÈëÎļþÊý¾Ý" +#: timezone/zic.c:1349 +msgid "invalid ending year" +msgstr "æ— æ•ˆçš„ç»ˆæ¢å¹´ä»½" -#: elf/dl-load.c:906 -msgid "ELF load command alignment not page-aligned" +#: timezone/zic.c:1353 +msgid "starting year greater than ending year" +msgstr "起始年份大于终æ¢å¹´ä»½" + +#: timezone/zic.c:1360 +msgid "typed single year" msgstr "" -#: elf/dl-load.c:913 -msgid "ELF load command address/offset not properly aligned" -msgstr "ELF ×°ÈëÃüÁîµÄµØÖ·/Æ«ÒÆÁ¿Ã»ÓÐÕýÈ·µØ¶ÔÆë" +#: timezone/zic.c:1395 +msgid "invalid weekday name" +msgstr "æ— æ•ˆçš„æ˜ŸæœŸå" -#: elf/dl-load.c:988 -msgid "cannot allocate TLS data structures for initial thread" +#: timezone/zic.c:1573 +#, c-format +msgid "%s: Can't remove %s: %s\n" +msgstr "%sï¼šæ— æ³•åˆ é™¤ %s:%s\n" + +#: timezone/zic.c:1583 +#, c-format +msgid "%s: Can't create %s: %s\n" +msgstr "%sï¼šæ— æ³•åˆ›å»º %s:%s\n" + +#: timezone/zic.c:1733 +#, c-format +msgid "%s: Error writing %s\n" +msgstr "%s:写 %s 错误\n" + +#: timezone/zic.c:2025 +msgid "no POSIX environment variable for zone" msgstr "" -#: elf/dl-load.c:1012 -msgid "cannot handle TLS data" -msgstr "ÎÞ·¨´¦Àí TLS Êý¾Ý" +#: timezone/zic.c:2179 +msgid "can't determine time zone abbreviation to use just after until time" +msgstr "" -#: elf/dl-load.c:1047 -msgid "failed to map segment from shared object" +#: timezone/zic.c:2225 +msgid "too many transitions?!" msgstr "" -#: elf/dl-load.c:1071 -msgid "cannot dynamically load executable" -msgstr "ÎÞ·¨¶¯Ì¬×°Èë¿ÉÖ´ÐÐÎļþ" +#: timezone/zic.c:2244 +msgid "internal error - addtype called with bad isdst" +msgstr "内部错误 - 以错误的 isdst 调用 addtype" -#: elf/dl-load.c:1132 -msgid "cannot change memory protections" -msgstr "ÎÞ·¨¸Ä±äÄÚ´æ±£»¤" +#: timezone/zic.c:2248 +msgid "internal error - addtype called with bad ttisstd" +msgstr "内部错误 - 以错误的 ttisstd 调用 addtype" -#: elf/dl-load.c:1151 -msgid "cannot map zero-fill pages" +#: timezone/zic.c:2252 +msgid "internal error - addtype called with bad ttisgmt" +msgstr "内部错误 - 以错误的 ttisgmt 调用 addtype" + +#: timezone/zic.c:2271 +msgid "too many local time types" +msgstr "过多的本地时间类型" + +#: timezone/zic.c:2299 +msgid "too many leap seconds" msgstr "" -#: elf/dl-load.c:1169 -msgid "cannot allocate memory for program header" -msgstr "ÎÞ·¨Îª³ÌÐòÍ··ÖÅäÄÚ´æ" +#: timezone/zic.c:2305 +msgid "repeated leap second moment" +msgstr "" -#: elf/dl-load.c:1200 -msgid "object file has no dynamic section" -msgstr "Ä¿±êÎļþûÓж¯Ì¬½Ú" +#: timezone/zic.c:2357 +msgid "Wild result from command execution" +msgstr "" -#: elf/dl-load.c:1240 -msgid "shared object cannot be dlopen()ed" -msgstr "ÎÞ·¨Óà dlopen() ´ò¿ª¹²Ïí¿â" +#: timezone/zic.c:2358 +#, c-format +msgid "%s: command was '%s', result was %d\n" +msgstr "%s:命令为“%sâ€ï¼Œç»“果为 %d\n" -#: elf/dl-load.c:1263 -msgid "cannot create searchlist" -msgstr "ÎÞ·¨´´½¨ËÑË÷Áбí" +#: timezone/zic.c:2456 +msgid "Odd number of quotation marks" +msgstr "奇数个引å·" -#: elf/dl-load.c:1398 -msgid "file too short" -msgstr "Îļþ¹ý¶Ì" +#: timezone/zic.c:2479 timezone/zic.c:2498 +msgid "time overflow" +msgstr "时间溢出" -#: elf/dl-load.c:1421 -msgid "invalid ELF header" -msgstr "ÎÞЧµÄ ELF Í·" +#: timezone/zic.c:2545 +msgid "use of 2/29 in non leap-year" +msgstr "" -#: elf/dl-load.c:1430 -msgid "ELF file data encoding not big-endian" +#: timezone/zic.c:2580 +msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic" msgstr "" -#: elf/dl-load.c:1432 -msgid "ELF file data encoding not little-endian" +#: timezone/zic.c:2612 +msgid "time zone abbreviation lacks alphabetic at start" msgstr "" -#: elf/dl-load.c:1436 -msgid "ELF file version ident does not match current one" +#: timezone/zic.c:2614 +msgid "time zone abbreviation has more than 3 alphabetics" msgstr "" -#: elf/dl-load.c:1440 -msgid "ELF file OS ABI invalid" +#: timezone/zic.c:2616 +msgid "time zone abbreviation has too many alphabetics" msgstr "" -#: elf/dl-load.c:1442 -msgid "ELF file ABI version invalid" +#: timezone/zic.c:2626 +msgid "time zone abbreviation differs from POSIX standard" msgstr "" -#: elf/dl-load.c:1445 -msgid "internal error" -msgstr "ÄÚ²¿´íÎó" +#: timezone/zic.c:2638 +msgid "too many, or too long, time zone abbreviations" +msgstr "过多或过长的时区缩写" -#: elf/dl-load.c:1452 -msgid "ELF file version does not match current one" -msgstr "ELF Îļþ°æ±¾Ó뵱ǰ°æ±¾²»Æ¥Åä" +#: timezone/zic.c:2679 +#, c-format +msgid "%s: Can't create directory %s: %s\n" +msgstr "%sï¼šæ— æ³•åˆ›å»ºç›®å½• %s:%s\n" -#: elf/dl-load.c:1460 -msgid "ELF file's phentsize not the expected size" +#: timezone/zic.c:2701 +#, c-format +msgid "%s: %d did not sign extend correctly\n" msgstr "" -#: elf/dl-load.c:1466 -msgid "only ET_DYN and ET_EXEC can be loaded" -msgstr "" +#~ msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n" +#~ msgstr "用“glibcbugâ€è„šæœ¬å°†é”™è¯¯æŠ¥å‘Šç»™ <bugs@gnu.org>。\n" -#: elf/dl-load.c:1917 -msgid "cannot open shared object file" -msgstr "ÎÞ·¨´ò¿ª¹²Ïí¶ÔÏóÎļþ" +#~ msgid "<%s> and <%s> are illegal names for range" +#~ msgstr "<%s> å’Œ <%s> 是éžæ³•çš„范围å" -#: elf/dl-lookup.c:265 elf/dl-lookup.c:430 -msgid "relocation error" -msgstr "Öض¨Î»´íÎó" +#~ msgid "upper limit in range is not higher then lower limit" +#~ msgstr "范围的上é™å¹¶ä¸é«˜äºŽä¸‹é™" -#: elf/dl-open.c:111 -msgid "cannot extend global scope" -msgstr "ÎÞ·¨À©Õ¹È«¾Ö·¶Î§" +#~ msgid "%s: value for field `%s' must not be the empty string" +#~ msgstr "%s:域“%sâ€çš„值ä¸èƒ½æ˜¯ç©ºå—符串" -#: elf/dl-open.c:214 -msgid "empty dynamic string token substitution" -msgstr "" +#~ msgid "%s: values of field `%s' must not be larger than %d" +#~ msgstr "%s:域“%sâ€çš„值ä¸èƒ½å¤§äºŽ %d" -#: elf/dl-open.c:351 elf/dl-open.c:362 -msgid "cannot create scope list" -msgstr "ÎÞ·¨´´½¨·¶Î§Áбí" +#~ msgid "Get locale-specific information." +#~ msgstr "给出区域特定的信æ¯ã€‚" -#: elf/dl-open.c:424 -msgid "cannot create TLS data structures" -msgstr "ÎÞ·¨´´½¨ TLS Êý¾Ý½á¹¹" +#~ msgid "cheese" +#~ msgstr "奶酪" -#: elf/dl-open.c:486 -msgid "invalid mode for dlopen()" -msgstr "ÎÞЧµÄ dlopen() ģʽ" +#~ msgid "First string for testing." +#~ msgstr "第一个用于测试的å—符串。" -#: elf/dl-reloc.c:58 -msgid "shared object cannot be dlopen()ed: static TLS memory too small" -msgstr "ÎÞ·¨Óà dlopen() ´ò¿ª¹²Ïí¶ÔÏ󣺾²Ì¬ TLS ÄÚ´æ¹ýС" +#~ msgid "Another string for testing." +#~ msgstr "å¦ä¸€ä¸ªæµ‹è¯•å—符串。" -#: elf/dl-reloc.c:118 -msgid "cannot make segment writable for relocation" -msgstr "" +#~ msgid "Error 0" +#~ msgstr "错误 0" -#: elf/dl-reloc.c:219 -#, c-format -msgid "%s: profiler found no PLTREL in object %s\n" -msgstr "" +#~ msgid "I/O error" +#~ msgstr "I/O 错误" -#: elf/dl-reloc.c:231 -#, c-format -msgid "%s: profiler out of memory shadowing PLTREL of %s\n" -msgstr "" +#~ msgid "Arg list too long" +#~ msgstr "å‚数列表过长" -#: elf/dl-reloc.c:246 -#, fuzzy -msgid "cannot restore segment prot after reloc" -msgstr "ÎÞ·¨´´½¨ËÑË÷·¾¶Êý×é" +#~ msgid "Bad file number" +#~ msgstr "错误的文件编å·" -#: elf/dl-sym.c:74 elf/dl-sym.c:145 -msgid "RTLD_NEXT used in code not dynamically loaded" -msgstr "" +#~ msgid "Not enough space" +#~ msgstr "空间ä¸å¤Ÿ" -#: elf/dl-version.c:302 -msgid "cannot allocate version reference table" -msgstr "ÎÞ·¨·ÖÅä°æ±¾ÒýÓñí¸ñ" +#~ msgid "Device busy" +#~ msgstr "设备忙" -#: elf/ldconfig.c:122 -msgid "Print cache" -msgstr "´òÓ¡»º³åÇø" +#~ msgid "Cross-device link" +#~ msgstr "跨设备连接" -#: elf/ldconfig.c:123 -msgid "Generate verbose messages" -msgstr "Éú³ÉÏêϸÏûÏ¢" +#~ msgid "File table overflow" +#~ msgstr "文件表溢出" -#: elf/ldconfig.c:124 -msgid "Don't build cache" -msgstr "²»Òª´´½¨»º³åÇø" +#~ msgid "Result too large" +#~ msgstr "结果太大" -#: elf/ldconfig.c:125 -msgid "Don't generate links" -msgstr "²»ÒªÉú³ÉÁ¬½Ó" +#~ msgid "Deadlock situation detected/avoided" +#~ msgstr "探测到/å·²é¿å…æ»é”" -#: elf/ldconfig.c:126 -msgid "Change to and use ROOT as root directory" -msgstr "½øÈë ROOT Ŀ¼²¢½«Æä×÷Ϊ¸ùĿ¼" +#~ msgid "No record locks available" +#~ msgstr "没有å¯ç”¨çš„记录é”" -#: elf/ldconfig.c:127 -msgid "Use CACHE as cache file" -msgstr "½« CACHE ÓÃ×÷»º³åÇøÎļþ" +#~ msgid "Disc quota exceeded" +#~ msgstr "超出ç£ç›˜é™é¢" -#: elf/ldconfig.c:128 -msgid "Use CONF as configuration file" -msgstr "½« CONF ÓÃ×÷ÅäÖÃÎļþ" +#~ msgid "Bad exchange descriptor" +#~ msgstr "错误的交æ¢æ述符" -#: elf/ldconfig.c:129 -msgid "Only process directories specified on the command line. Don't build cache." -msgstr "Ö»ÔÚÃüÁîÐÐÖиø³öÁ˽ø³ÌĿ¼¡£Î´´´½¨»º³åÇø¡£" +#~ msgid "Bad request descriptor" +#~ msgstr "错误的请求æ述符" -#: elf/ldconfig.c:130 -msgid "Manually link individual libraries." -msgstr "ÊÖ¹¤Á¬½Ó¶ÀÁ¢µÄ¿â¡£" +#~ msgid "Message tables full" +#~ msgstr "内å˜è¡¨å·²æ»¡" -#: elf/ldconfig.c:131 -msgid "Format to use: new, old or compat (default)" -msgstr "²ÉÓõĸñʽ£ºÐ¡¢¾É»ò¼æÈÝ(ĬÈÏ)" +#~ msgid "Anode table overflow" +#~ msgstr "Anode 表溢出" -#: elf/ldconfig.c:136 -msgid "Configure Dynamic Linker Run Time Bindings." -msgstr "" +#~ msgid "Bad request code" +#~ msgstr "错误的请求ç " -#: elf/ldconfig.c:294 -#, c-format -msgid "Path `%s' given more than once" -msgstr "¶à´Î¸ø³ö·¾¶¡°%s¡±" +#~ msgid "File locking deadlock" +#~ msgstr "文件é”æ»é”" -#: elf/ldconfig.c:338 -#, c-format -msgid "%s is not a known library type" -msgstr "%s ²»ÊÇÒÑÖªÀàÐ͵Ŀâ" +#~ msgid "Error 58" +#~ msgstr "错误 58" -#: elf/ldconfig.c:356 -#, c-format -msgid "Can't stat %s" -msgstr "ÎÞ·¨¶Ô %s ½øÐÐ stat ²Ù×÷" +#~ msgid "Error 59" +#~ msgstr "错误 59" -#: elf/ldconfig.c:426 -#, c-format -msgid "Can't stat %s\n" -msgstr "ÎÞ·¨¶Ô %s ½øÐÐ stat ²Ù×÷\n" +#~ msgid "Not a stream device" +#~ msgstr "ä¸æ˜¯æµè®¾å¤‡" -#: elf/ldconfig.c:436 -#, c-format -msgid "%s is not a symbolic link\n" -msgstr "%s ²»ÊÇ·ûºÅÁ¬½Ó\n" +#~ msgid "Out of stream resources" +#~ msgstr "æµèµ„æºä¸è¶³" -#: elf/ldconfig.c:455 -#, c-format -msgid "Can't unlink %s" -msgstr "" +#~ msgid "Error 72" +#~ msgstr "错误 72" -#: elf/ldconfig.c:461 -#, c-format -msgid "Can't link %s to %s" -msgstr "ÎÞ·¨½« %s Á¬½Óµ½ %s" +#~ msgid "Error 73" +#~ msgstr "错误 73" -#: elf/ldconfig.c:467 -msgid " (changed)\n" -msgstr " (¸Ä±ä)\n" +#~ msgid "Error 75" +#~ msgstr "错误 75" -#: elf/ldconfig.c:469 -msgid " (SKIPPED)\n" -msgstr " (Ìø¹ý)\n" +#~ msgid "Error 76" +#~ msgstr "错误 76" -#: elf/ldconfig.c:524 -#, c-format -msgid "Can't find %s" -msgstr "ÎÞ·¨ÕÒµ½ %s" +#~ msgid "Not a data message" +#~ msgstr "ä¸æ˜¯æ•°æ®æ¶ˆæ¯" -#: elf/ldconfig.c:540 -#, c-format -msgid "Can't lstat %s" -msgstr "ÎÞ·¨¶Ô %s ½øÐÐ lstat ²Ù×÷" +#~ msgid "Attempting to link in more shared libraries than system limit" +#~ msgstr "试图连接的共享库个数超出系统é™åˆ¶" -#: elf/ldconfig.c:547 -#, c-format -msgid "Ignored file %s since it is not a regular file." -msgstr "" +#~ msgid "Can not exec a shared library directly" +#~ msgstr "æ— æ³•ç›´æŽ¥æ‰§è¡Œå…±äº«åº“" -#: elf/ldconfig.c:555 -#, c-format -msgid "No link created since soname could not be found for %s" -msgstr "" +#~ msgid "Illegal byte sequence" +#~ msgstr "éžæ³•çš„å—节åº" -#: elf/ldconfig.c:646 -#, c-format -msgid "Can't open directory %s" -msgstr "ÎÞ·¨´ò¿ªÄ¿Â¼ %s" +#~ msgid "Operation not applicable" +#~ msgstr "ä¸å¯åº”用的æ“作" -#: elf/ldconfig.c:701 elf/ldconfig.c:748 -#, c-format -msgid "Cannot lstat %s" -msgstr "ÎÞ·¨¶Ô %s ½øÐÐ lstat ²Ù×÷" +#~ msgid "Number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS" +#~ msgstr "路径é历ä¸é‡åˆ°çš„符å·è¿žæŽ¥çš„æ•°é‡è¶…过了 MAXSYMLINKS" -#: elf/ldconfig.c:713 -#, c-format -msgid "Cannot stat %s" -msgstr "ÎÞ·¨¶Ô %s ½øÐÐ stat ²Ù×÷" +#~ msgid "Error 91" +#~ msgstr "错误 91" -#: elf/ldconfig.c:770 elf/readlib.c:93 -#, c-format -msgid "Input file %s not found.\n" -msgstr "δÕÒµ½ÊäÈëÎļþ %s¡£\n" +#~ msgid "Error 92" +#~ msgstr "错误 92" -#: elf/ldconfig.c:804 -#, c-format -msgid "libc5 library %s in wrong directory" -msgstr "libc5 µÄ¿â %s ´¦ÓÚ´íÎóµÄĿ¼ÖÐ" +#~ msgid "Option not supported by protocol" +#~ msgstr "åè®®ä¸æ”¯æŒçš„选项" -#: elf/ldconfig.c:807 -#, c-format -msgid "libc6 library %s in wrong directory" -msgstr "libc5 µÄ¿â %s ´¦ÓÚ´íÎóµÄĿ¼ÖÐ" +#~ msgid "Error 100" +#~ msgstr "错误 100" -#: elf/ldconfig.c:810 -#, c-format -msgid "libc4 library %s in wrong directory" -msgstr "libc4 µÄ¿â %s ´¦ÓÚ´íÎóµÄĿ¼ÖÐ" +#~ msgid "Error 101" +#~ msgstr "错误 101" -#: elf/ldconfig.c:837 -#, c-format -msgid "libraries %s and %s in directory %s have same soname but different type." -msgstr "Ŀ¼ %3$s ÖÐµÄ %1$s ºÍ %2$s µÄ so Ãû³ÆÏàͬµ«ÀàÐͲ»Í¬¡£" +#~ msgid "Error 102" +#~ msgstr "错误 102" -#: elf/ldconfig.c:940 -#, c-format -msgid "Can't open configuration file %s" -msgstr "ÎÞ·¨´ò¿ªÅäÖÃÎļþ %s" +#~ msgid "Error 103" +#~ msgstr "错误 103" -#: elf/ldconfig.c:1024 -msgid "Can't chdir to /" -msgstr "ÎÞ·¨¸Ä±äĿ¼µ½ /" +#~ msgid "Error 104" +#~ msgstr "错误 104" -#: elf/ldconfig.c:1066 -#, c-format -msgid "Can't open cache file directory %s\n" -msgstr "ÎÞ·¨´ò¿ª»º³åÎļþĿ¼ %s\n" +#~ msgid "Error 105" +#~ msgstr "错误 105" -#: elf/readlib.c:99 -#, c-format -msgid "Cannot fstat file %s.\n" -msgstr "ÎÞ·¨¶ÔÎļþ %s ½øÐÐ fstat ²Ù×÷¡£\n" +#~ msgid "Error 106" +#~ msgstr "错误 106" -#: elf/readlib.c:109 -#, c-format -msgid "File %s is too small, not checked." -msgstr "Îļþ %s ¹ýС£¬Î´¼ì²é¡£" +#~ msgid "Error 107" +#~ msgstr "错误 107" -#: elf/readlib.c:118 -#, c-format -msgid "Cannot mmap file %s.\n" -msgstr "ÎÞ·¨¶ÔÎļþ %s ½øÐÐ mmap ²Ù×÷¡£\n" +#~ msgid "Error 108" +#~ msgstr "错误 108" -#: elf/readlib.c:158 -#, c-format -msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n" -msgstr "%s ²»ÊÇ ELF Îļþ - ËüÆðʼµÄħÊý´íÎó¡£\n" +#~ msgid "Error 109" +#~ msgstr "错误 109" -#: elf/sprof.c:72 -msgid "Output selection:" -msgstr "Êä³öÑ¡Ôñ£º" +#~ msgid "Error 110" +#~ msgstr "错误 110" -#: elf/sprof.c:74 -msgid "print list of count paths and their number of use" -msgstr "´òÓ¡µ±Ç°Â·¾¶µÄÁбíºÍËûÃǵÄʹÓôÎÊý" +#~ msgid "Error 111" +#~ msgstr "错误 111" -#: elf/sprof.c:76 -msgid "generate flat profile with counts and ticks" -msgstr "" +#~ msgid "Error 112" +#~ msgstr "错误 112" -#: elf/sprof.c:77 -msgid "generate call graph" -msgstr "Éú³Éµ÷ÓÃͼ" +#~ msgid "Error 113" +#~ msgstr "错误 113" -#: elf/sprof.c:84 -msgid "Read and display shared object profiling data" -msgstr "" +#~ msgid "Error 114" +#~ msgstr "错误 114" -#: elf/sprof.c:87 -msgid "SHOBJ [PROFDATA]" -msgstr "" +#~ msgid "Error 115" +#~ msgstr "错误 115" -#: elf/sprof.c:398 -#, c-format -msgid "failed to load shared object `%s'" -msgstr "×°Èë¹²ÏíÄ¿±êÎļþ¡°%s¡±Ê§°Ü" +#~ msgid "Error 116" +#~ msgstr "错误 116" -#: elf/sprof.c:407 -msgid "cannot create internal descriptors" -msgstr "ÎÞ·¨´´½¨ÄÚ²¿ÃèÊö·û" +#~ msgid "Error 117" +#~ msgstr "错误 117" -#: elf/sprof.c:526 -#, c-format -msgid "Reopening shared object `%s' failed" -msgstr "ÖØÏÖ´ò¿ª¹²Ïí¶ÔÏó¡°%s¡±Ê§°Ü" +#~ msgid "Error 118" +#~ msgstr "错误 118" -#: elf/sprof.c:534 -msgid "mapping of section headers failed" -msgstr "" +#~ msgid "Error 119" +#~ msgstr "错误 119" -#: elf/sprof.c:544 -msgid "mapping of section header string table failed" -msgstr "" +#~ msgid "Operation not supported on transport endpoint" +#~ msgstr "ä¼ è¾“ç«¯ç‚¹ä¸æ”¯æŒçš„æ“作" -#: elf/sprof.c:564 -#, c-format -msgid "*** The file `%s' is stripped: no detailed analysis possible\n" -msgstr "*** Îļþ¡°%s¡±ÒÑ°þÀ룺²»¿ÉÄܽøÐÐϸ½Ú·ÖÎö\n" +#~ msgid "Address family not supported by protocol family" +#~ msgstr "åè®®æ—ä¸æ”¯æŒçš„地å€æ—" -#: elf/sprof.c:594 -msgid "failed to load symbol data" -msgstr "×°Èë·ûºÅÊý¾Ýʧ°Ü" +#~ msgid "Network dropped connection because of reset" +#~ msgstr "å› ä¸ºé‡ç½®è€Œæ–开网络连接" -#: elf/sprof.c:664 -msgid "cannot load profiling data" -msgstr "" +#~ msgid "Error 136" +#~ msgstr "错误 136" -#: elf/sprof.c:673 -msgid "while stat'ing profiling data file" -msgstr "" +#~ msgid "Not available" +#~ msgstr "ä¸å¯ç”¨" -#: elf/sprof.c:681 -#, c-format -msgid "profiling data file `%s' does not match shared object `%s'" -msgstr "" +#~ msgid "Is a name file" +#~ msgstr "是一个有å文件" -#: elf/sprof.c:692 -msgid "failed to mmap the profiling data file" -msgstr "" +#~ msgid "Reserved for future use" +#~ msgstr "ä¿ç•™ç”¨äºŽæœªæ¥" -#: elf/sprof.c:700 -msgid "error while closing the profiling data file" -msgstr "" +#~ msgid "Error 142" +#~ msgstr "错误 142" -#: elf/sprof.c:709 elf/sprof.c:779 -msgid "cannot create internal descriptor" -msgstr "ÎÞ·¨´´½¨ÄÚ²¿ÃèÊö·û" +#~ msgid "Cannot send after socket shutdown" +#~ msgstr "æ— æ³•åœ¨å¥—æŽ¥å—å…³é—åŽå‘é€" -#: elf/sprof.c:755 -#, c-format -msgid "`%s' is no correct profile data file for `%s'" -msgstr "" +#~ msgid "%s: Can't unlink %s: %s\n" +#~ msgstr "%sï¼šæ— æ³•è§£é™¤è¿žæŽ¥ %s:%s\n" -#: elf/sprof.c:936 elf/sprof.c:988 -msgid "cannot allocate symbol data" -msgstr "ÎÞ·¨·ÖÅä·ûºÅÊý¾Ý" +#~ msgid "%s: line %d: expected service, found `%s'\n" +#~ msgstr "%s:行 %d:应为 service,得到“%sâ€\n" + +#~ msgid "%s: line %d: cannot specify more than %d services" +#~ msgstr "%s:行 %dï¼šæ— æ³•æŒ‡å®šå¤šäºŽ %d 个æœåŠ¡" + +#~ msgid "%s: line %d: list delimiter not followed by keyword" +#~ msgstr "%s:行 %d:列表分隔符没有出现在关键å—之åŽ" + +#~ msgid "getent - get entries from administrative database." +#~ msgstr "getent - é‡ç®¡ç†æ•°æ®åº“获å–æ¡ç›®ã€‚" + +#~ msgid "get_myaddress: ioctl (get interface configuration)" +#~ msgstr "get_myaddress:ioctl (获å–ç•Œé¢é…ç½®)" + +#~ msgid "__get_myaddress: ioctl (get interface configuration)" +#~ msgstr "__get_myaddress:ioctl (获å–ç•Œé¢é…ç½®)" + +#~ msgid "broadcast: ioctl (get interface configuration)" +#~ msgstr "broadcast:ioctl (获å–ç•Œé¢é…ç½®)" + +#~ msgid "broadcast: ioctl (get interface flags)" +#~ msgstr "broadcast:ioctl (获å–ç•Œé¢æ ‡å¿—)" + +#~ msgid "YPBINDPROC_DOMAIN: %s\n" +#~ msgstr "YPBINDPROC_DOMAIN:%s\n" + +#~ msgid "while allocating hash table entry" +#~ msgstr "分é…æ‚凑表æ¡ç›®æ—¶" + +#~ msgid "while allocating cache: %s" +#~ msgstr "分é…缓冲区时:%s" + +#~ msgid "while accepting connection: %s" +#~ msgstr "接å—连接时:%s" + +#~ msgid "while allocating key copy" +#~ msgstr "分é…键副本时" + +#~ msgid "while allocating cache entry" +#~ msgstr "分é…缓冲区æ¡ç›®æ—¶" + +#~ msgid "Haven't found \"%d\" in group cache!" +#~ msgstr "æ— æ³•åœ¨ç»„ç¼“å†²åŒºä¸æ‰¾åˆ°â€œ%dâ€ï¼" + +#~ msgid " no" +#~ msgstr " å¦" + +#~ msgid " yes" +#~ msgstr " 是" + +#~ msgid "Haven't found \"%d\" in password cache!" +#~ msgstr "æ— æ³•åœ¨å£ä»¤ç¼“冲区ä¸æ‰¾åˆ°â€œ%dâ€ï¼" + +#~ msgid "shared object cannot be dlopen()ed: static TLS memory too small" +#~ msgstr "æ— æ³•ç”¨ dlopen() 打开共享对象:é™æ€ TLS 内å˜è¿‡å°" + +#~ msgid "Can't lstat %s" +#~ msgstr "æ— æ³•å¯¹ %s 进行 lstat æ“作" #~ msgid "\t\t\t\t\t\t\t %s: value for field `%s' must be in range %d...%d" -#~ msgstr "\t\t\t\t\t\t\t %s£ºÓò¡°%s¡±µÄÖµ±ØÐë´¦ÓÚ·¶Î§ %d...%d Ö®ÄÚ" +#~ msgstr "\t\t\t\t\t\t\t %s:域“%sâ€çš„值必须处于范围 %d...%d 之内" diff --git a/libc/posix/Makefile b/libc/posix/Makefile index bea9ff00b..85ddd67ea 100644 --- a/libc/posix/Makefile +++ b/libc/posix/Makefile @@ -58,7 +58,7 @@ routines := \ sched_primin sched_rr_gi sched_getaffinity sched_setaffinity \ pread pwrite pread64 pwrite64 \ posix_madvise \ - get_child_max sched_cpucount + get_child_max sched_cpucount sched_cpualloc sched_cpufree routines-$(OPTION_EGLIBC_INET) += getaddrinfo gai_strerror routines-$(OPTION_POSIX_REGEXP) += regex @@ -97,7 +97,7 @@ tests := tstgetopt testfnm runtests runptests \ tst-execv1 tst-execv2 tst-execl1 tst-execl2 \ tst-execve1 tst-execve2 tst-execle1 tst-execle2 \ tst-execvp3 tst-execvp4 \ - tst-fnmatch2 tst-cpucount + tst-fnmatch2 tst-cpucount tst-cpuset tests-$(OPTION_EGLIBC_LOCALE_CODE) \ += tst-fnmatch tst-regex tst-regexloc bug-regex1 bug-regex5 \ bug-regex19 bug-regex22 bug-regex25 @@ -113,7 +113,7 @@ tests-$(OPTION_EGLIBC_WORDEXP) += wordexp-test endif others := getconf install-bin := getconf -install-others := $(inst_libexecdir)/getconf +install-others-programs := $(inst_libexecdir)/getconf before-compile := testcases.h ptestcases.h @@ -125,7 +125,7 @@ generated := $(addprefix wordexp-test-result, 1 2 3 4 5 6 7 8 9 10) \ tst-rxspencer-mem tst-rxspencer.mtrace tst-getconf.out \ tst-pcre-mem tst-pcre.mtrace tst-boost-mem tst-boost.mtrace \ bug-ga2.mtrace bug-ga2-mem bug-glob2.mtrace bug-glob2-mem \ - tst-vfork3-mem tst-vfork3.mtrace + tst-vfork3-mem tst-vfork3.mtrace getconf.speclist include ../Rules @@ -315,12 +315,20 @@ bug-glob2-ENV = MALLOC_TRACE=$(objpfx)bug-glob2.mtrace $(objpfx)bug-glob2-mem: $(objpfx)bug-glob2.out $(common-objpfx)malloc/mtrace $(objpfx)bug-glob2.mtrace > $@ -$(inst_libexecdir)/getconf: $(objpfx)getconf FORCE +$(inst_libexecdir)/getconf: $(inst_bindir)/getconf \ + $(objpfx)getconf.speclist FORCE $(addprefix $(..)./scripts/mkinstalldirs ,\ $(filter-out $(wildcard $@),$@)) - for spec in `LC_ALL=C GETCONF_DIR=/dev/null \ - $(run-program-prefix) $< \ - _POSIX_V6_WIDTH_RESTRICTED_ENVS`; do \ - $(INSTALL_PROGRAM) $< $@/$$spec.new; \ - mv -f $@/$$spec.new $@/$$spec; \ - done + while read spec; do \ + ln -f $< $@/$$spec.new || $(INSTALL_PROGRAM) $< $@/$$spec.new; \ + mv -f $@/$$spec.new $@/$$spec; \ + done < $(objpfx)getconf.speclist + +$(objpfx)getconf.speclist: $(objpfx)getconf +ifeq (no,$(cross-compiling)) + LC_ALL=C GETCONF_DIR=/dev/null \ + $(run-program-prefix) $< _POSIX_V6_WIDTH_RESTRICTED_ENVS > $@.new +else + > $@.new +endif + mv -f $@.new $@ diff --git a/libc/posix/Versions b/libc/posix/Versions index 1e1bda8b7..f73ff4a85 100644 --- a/libc/posix/Versions +++ b/libc/posix/Versions @@ -125,6 +125,9 @@ libc { GLIBC_2.6 { __sched_cpucount; } + GLIBC_2.7 { + __sched_cpualloc; __sched_cpufree; + } GLIBC_PRIVATE { __libc_fork; __libc_pwrite; } diff --git a/libc/posix/fnmatch.c b/libc/posix/fnmatch.c index c6cdb8877..4baef9e69 100644 --- a/libc/posix/fnmatch.c +++ b/libc/posix/fnmatch.c @@ -351,10 +351,14 @@ fnmatch (pattern, string, flags) already done? */ return -1; if (p) - memset (&ps, '\0', sizeof (ps)); + { + memset (&ps, '\0', sizeof (ps)); + goto prepare_wpattern; + } } - if (__builtin_expect (p != NULL, 0)) + else { + prepare_wpattern: n = mbsrtowcs (NULL, &pattern, 0, &ps); if (__builtin_expect (n == (size_t) -1, 0)) /* Something wrong. @@ -383,10 +387,14 @@ fnmatch (pattern, string, flags) already done? */ return -1; if (p) - memset (&ps, '\0', sizeof (ps)); + { + memset (&ps, '\0', sizeof (ps)); + goto prepare_wstring; + } } - if (__builtin_expect (p != NULL, 0)) + else { + prepare_wstring: n = mbsrtowcs (NULL, &string, 0, &ps); if (__builtin_expect (n == (size_t) -1, 0)) /* Something wrong. diff --git a/libc/posix/getconf.c b/libc/posix/getconf.c index c7a9d5762..7e479a168 100644 --- a/libc/posix/getconf.c +++ b/libc/posix/getconf.c @@ -2,8 +2,9 @@ This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -609,6 +610,7 @@ static const struct conf vars[] = #ifdef _CS_V6_WIDTH_RESTRICTED_ENVS { "_POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS, CONFSTR }, + { "POSIX_V6_WIDTH_RESTRICTED_ENVS", _CS_V6_WIDTH_RESTRICTED_ENVS, CONFSTR }, #endif #ifdef _SC_V6_ILP32_OFFBIG @@ -909,6 +911,9 @@ static const struct conf vars[] = #ifdef _SC_LEVEL4_CACHE_ASSOC { "LEVEL4_CACHE_ASSOC", _SC_LEVEL4_CACHE_ASSOC, SYSCONF }, #endif +#ifdef _SC_LEVEL4_CACHE_LINESIZE + { "LEVEL4_CACHE_LINESIZE", _SC_LEVEL4_CACHE_LINESIZE, SYSCONF }, +#endif #ifdef _SC_IPV6 { "IPV6", _SC_IPV6, SYSCONF }, diff --git a/libc/posix/glob/ChangeLog b/libc/posix/glob/ChangeLog index de04c4b94..5d3ae8dcc 100644 --- a/libc/posix/glob/ChangeLog +++ b/libc/posix/glob/ChangeLog @@ -1,3 +1,7 @@ +2007-07-13 Roland McGrath <roland@redhat.com> + + * configure: Regenerated. + Sat Jul 20 21:55:31 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> Win32 hacks from <Rob_Tulloh@tivoli.com>. @@ -20,4 +24,3 @@ Fri Jun 21 00:27:51 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu> * posix/fnmatch.c (fnmatch): Fix \*[*?]+ case to increment name ptr only for ?s, not for *s. Fix from Chet Ramey. - diff --git a/libc/posix/glob/configure b/libc/posix/glob/configure index 157294527..279c288ed 100755 --- a/libc/posix/glob/configure +++ b/libc/posix/glob/configure @@ -1,26 +1,690 @@ #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.7 -# Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc. +# Generated by GNU Autoconf 2.61. # +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi -# Defaults: -ac_help= +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell autoconf@gnu.org about your system, + echo including any error possibly output before this + echo message +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +exec 7<&0 </dev/null 6>&1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# ac_default_prefix=/usr/local -# Any additions from configure.in: +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="fnmatch.c" +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# ifdef HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_INTTYPES_H +# include <inttypes.h> +#endif +#ifdef HAVE_STDINT_H +# include <stdint.h> +#endif +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_subst_vars='SHELL +PATH_SEPARATOR +PACKAGE_NAME +PACKAGE_TARNAME +PACKAGE_VERSION +PACKAGE_STRING +PACKAGE_BUGREPORT +exec_prefix +prefix +program_transform_name +bindir +sbindir +libexecdir +datarootdir +datadir +sysconfdir +sharedstatedir +localstatedir +includedir +oldincludedir +docdir +infodir +htmldir +dvidir +pdfdir +psdir +libdir +localedir +mandir +DEFS +ECHO_C +ECHO_N +ECHO_T +LIBS +build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +CPPFLAGS +ac_ct_CC +EXEEXT +OBJEXT +AR +RANLIB +CPP +GREP +EGREP +ALLOCA +LIBOBJS +LTLIBOBJS' +ac_subst_files='' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + # Initialize some variables set by options. +ac_init_help= +ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. -build=NONE -cache_file=./config.cache +cache_file=/dev/null exec_prefix=NONE -host=NONE no_create= -nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE @@ -29,91 +693,117 @@ program_transform_name=s,x,x, silent= site= srcdir= -target=NONE verbose= x_includes=NONE x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' +datarootdir='${prefix}/share' +datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' ac_prev= +ac_dashdash= for ac_option do - # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" + eval $ac_prev=\$ac_option ac_prev= continue fi - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. - case "$ac_option" in + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; + bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) - ac_prev=build ;; + ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; + build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -122,116 +812,77 @@ do -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; + exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; -host | --host | --hos | --ho) - ac_prev=host ;; + ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; + includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; + infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; + libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) + | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; + mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) + | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ @@ -245,26 +896,26 @@ EOF -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; + oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; + prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; + program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; + program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ @@ -281,7 +932,17 @@ EOF | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) @@ -291,7 +952,7 @@ EOF ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; + sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ @@ -302,58 +963,53 @@ EOF | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; + sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; + site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; + srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; + sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; + ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; + target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.7" - exit 0 ;; + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=\$ac_optarg ;; -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=no ;; --x) # Obsolete; use --with-x. @@ -364,613 +1020,2780 @@ EOF ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; + x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; + x_libraries=$ac_optarg ;; - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } fi -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 +# Be sure to have absolute directory names. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi fi -exec 5>./config.log -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done +test "$silent" = yes && exec 6>/dev/null -# NLS nuisances. -# Only set LANG and LC_ALL to C if already set. -# These must not be set unconditionally because not all systems understand -# e.g. LANG=C (notably SCO). -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=fnmatch.c # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$0" || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } - else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } - fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + cat <<\_ACEOF + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + LIBS libraries to pass to the linker, e.g. -l<library> + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if + you have headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.61 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi +if test -n "$CONFIG_SITE"; then + set x "$CONFIG_SITE" +elif test "x$prefix" != xNONE; then + set x "$prefix/share/config.site" "$prefix/etc/config.site" +else + set x "$ac_default_prefix/share/config.site" \ + "$ac_default_prefix/etc/config.site" fi -for ac_site_file in $CONFIG_SITE; do +shift +for ac_site_file +do if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi else - echo "creating cache $cache_file" - > $cache_file + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file fi +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' - -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } else - ac_n= ac_c='\c' ac_t= + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } fi - # Extract the first word of "gcc", so it can be a program name with args. + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_CC="gcc" - break - fi - done - IFS="$ac_save_ifs" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + fi fi -CC="$ac_cv_prog_CC" +CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } else - echo "$ac_t""no" 1>&6 + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } fi + + fi +fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" ac_prog_rejected=no - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - break - fi - done - IFS="$ac_save_ifs" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift - if test $# -gt 0; then + if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - set dummy "$ac_dir/$ac_word" "$@" - shift - ac_cv_prog_CC="$@" + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi -CC="$ac_cv_prog_CC" +CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$ac_t""$CC" 1>&6 + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } else - echo "$ac_t""no" 1>&6 + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } fi - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } -fi -echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.c <<EOF -#ifdef __GNUC__ - yes; -#endif -EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:601: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then - ac_cv_prog_gcc=yes + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. else - ac_cv_prog_gcc=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + fi fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi -echo "$ac_t""$ac_cv_prog_gcc" 1>&6 -if test $ac_cv_prog_gcc = yes; then - GCC=yes - if test "${CFLAGS+set}" != set; then - echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_gcc_g'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else - echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_gcc_g=yes +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } else - ac_cv_prog_gcc_g=no + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + fi -rm -f conftest* + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +# +# List of possible output files, starting from the most likely. +# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) +# only as a last resort. b.out is created by i960 compilers. +ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' +# +# The IRIX 6 linker writes into existing files which may not be +# executable, retaining their permissions. Remove them first so a +# subsequent execution test works. +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6; } +if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } fi -echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6 - if test $ac_cv_prog_gcc_g = yes; then - CFLAGS="-g -O" +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes else - CFLAGS="-O" + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } fi fi +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6; } + +{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - GCC= - test "${CFLAGS+set}" = set || CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <stdarg.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6; } ;; + xno) + { echo "$as_me:$LINENO: result: unsupported" >&5 +echo "${ECHO_T}unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_AR+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_AR="ar" - break - fi - done - IFS="$ac_save_ifs" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="ar" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar" fi fi -AR="$ac_cv_prog_AR" +AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$ac_t""$AR" 1>&6 + { echo "$as_me:$LINENO: result: $AR" >&5 +echo "${ECHO_T}$AR" >&6; } else - echo "$ac_t""no" 1>&6 + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } fi -# Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_prog_RANLIB="ranlib" - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + fi fi -RANLIB="$ac_cv_prog_RANLIB" +RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$ac_t""$RANLIB" 1>&6 + { echo "$as_me:$LINENO: result: $RANLIB" >&5 +echo "${ECHO_T}$RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 +echo "${ECHO_T}$ac_ct_RANLIB" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi else - echo "$ac_t""no" 1>&6 + RANLIB="$ac_cv_prog_RANLIB" fi -echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then -if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. - cat > conftest.$ac_ext <<EOF -#line 709 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:715: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : else - echo "$ac_err" >&5 - rm -rf conftest* - CPP="${CC-cc} -E -traditional-cpp" - cat > conftest.$ac_ext <<EOF -#line 724 "configure" -#include "confdefs.h" -#include <assert.h> -Syntax Error -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:730: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + # <limits.h> exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif + Syntax error +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : else - echo "$ac_err" >&5 - rm -rf conftest* - CPP=/lib/cpp + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue fi -rm -f conftest* + +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break fi -rm -f conftest* - ac_cv_prog_CPP="$CPP" + +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5 +echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; } +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Extract the first word of "grep ggrep" to use in msg output +if test -z "$GREP"; then +set dummy grep ggrep; ac_prog_name=$2 +if test "${ac_cv_path_GREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_GREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue + # Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_GREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +GREP="$ac_cv_path_GREP" +if test -z "$GREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } +fi + +else + ac_cv_path_GREP=$GREP +fi + + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5 +echo "${ECHO_T}$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + # Extract the first word of "egrep" to use in msg output +if test -z "$EGREP"; then +set dummy egrep; ac_prog_name=$2 +if test "${ac_cv_path_EGREP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_path_EGREP_found=false +# Loop through the user's path and test for each of PROGNAME-LIST +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue + # Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + ac_count=`expr $ac_count + 1` + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + + $ac_path_EGREP_found && break 3 + done +done + +done +IFS=$as_save_IFS + + +fi + +EGREP="$ac_cv_path_EGREP" +if test -z "$EGREP"; then + { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5 +echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;} + { (exit 1); exit 1; }; } fi - CPP="$ac_cv_prog_CPP" + else - ac_cv_prog_CPP="$CPP" + ac_cv_path_EGREP=$EGREP fi -echo "$ac_t""$CPP" 1>&6 - echo $ac_n "checking for AIX""... $ac_c" 1>&6 -cat > conftest.$ac_ext <<EOF -#line 751 "configure" -#include "confdefs.h" + + + fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5 +echo "${ECHO_T}$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + + +{ echo "$as_me:$LINENO: checking for AIX" >&5 +echo $ECHO_N "checking for AIX... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #ifdef _AIX yes #endif -EOF +_ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "yes" >/dev/null 2>&1; then - rm -rf conftest* - echo "$ac_t""yes" 1>&6; cat >> confdefs.h <<\EOF + $EGREP "yes" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } +cat >>confdefs.h <<\_ACEOF #define _ALL_SOURCE 1 -EOF +_ACEOF else - rm -rf conftest* - echo "$ac_t""no" 1>&6 + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } fi rm -f conftest* -ac_safe=`echo "minix/config.h" | tr './\055' '___'` -echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext <<EOF -#line 778 "configure" -#include "confdefs.h" -#include <minix/config.h> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:783: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <stdlib.h> +#include <stdarg.h> +#include <string.h> +#include <float.h> + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <string.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no fi rm -f conftest* + fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <stdlib.h> + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <ctype.h> +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + +fi +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +if test "${ac_cv_header_minix_config_h+set}" = set; then + { echo "$as_me:$LINENO: checking for minix/config.h" >&5 +echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; } +if test "${ac_cv_header_minix_config_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 +echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking minix/config.h usability" >&5 +echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <minix/config.h> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking minix/config.h presence" >&5 +echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <minix/config.h> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5 +echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for minix/config.h" >&5 +echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; } +if test "${ac_cv_header_minix_config_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_header_minix_config_h=$ac_header_preproc +fi +{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 +echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; } + +fi +if test $ac_cv_header_minix_config_h = yes; then MINIX=yes else - echo "$ac_t""no" 1>&6 -MINIX= + MINIX= fi + if test "$MINIX" = yes; then - cat >> confdefs.h <<\EOF + +cat >>confdefs.h <<\_ACEOF #define _POSIX_SOURCE 1 -EOF +_ACEOF - cat >> confdefs.h <<\EOF + +cat >>confdefs.h <<\_ACEOF #define _POSIX_1_SOURCE 2 -EOF +_ACEOF + - cat >> confdefs.h <<\EOF +cat >>confdefs.h <<\_ACEOF #define _MINIX 1 -EOF +_ACEOF fi -echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 -if test -d /etc/conf/kconfig.d && - grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 -then - echo "$ac_t""yes" 1>&6 - ISC=yes # If later tests want to check for ISC. - cat >> confdefs.h <<\EOF -#define _POSIX_SOURCE 1 -EOF - - if test "$GCC" = yes; then - CC="$CC -posix" +{ echo "$as_me:$LINENO: checking for library containing strerror" >&5 +echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6; } +if test "${ac_cv_search_strerror+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char strerror (); +int +main () +{ +return strerror (); + ; + return 0; +} +_ACEOF +for ac_lib in '' cposix; do + if test -z "$ac_lib"; then + ac_res="none required" else - CC="$CC -Xp" + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_search_strerror=$ac_res else - echo "$ac_t""no" 1>&6 - ISC= -fi - -echo $ac_n "checking for working const""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 843 "configure" -#include "confdefs.h" - -int main() { return 0; } -int t() { - -/* Ultrix mips cc rejects this. */ -typedef int charset[2]; const charset x; -/* SunOS 4.1.1 cc rejects this. */ -char const *const *ccp; -char **p; -/* NEC SVR4.0.2 mips cc rejects this. */ -struct point {int x, y;}; -static struct point const zero = {0,0}; -/* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in an arm - of an if-expression whose if-part is not a constant expression */ -const char *g = "string"; -ccp = &g + (g ? g-g : 0); -/* HPUX 7.0 cc rejects these. */ -++ccp; -p = (char**) ccp; -ccp = (char const *const *) p; -{ /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; -} -{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; -} -{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; -} -{ /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; -} -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -} + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 -; return 0; } -EOF -if { (eval echo configure:893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - ac_cv_c_const=yes -else - rm -rf conftest* - ac_cv_c_const=no -fi -rm -f conftest* fi -echo "$ac_t""$ac_cv_c_const" 1>&6 -if test $ac_cv_c_const = no; then - cat >> confdefs.h <<\EOF -#define const -EOF +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_strerror+set}" = set; then + break +fi +done +if test "${ac_cv_search_strerror+set}" = set; then + : +else + ac_cv_search_strerror=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 +echo "${ECHO_T}$ac_cv_search_strerror" >&6; } +ac_res=$ac_cv_search_strerror +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi -# If we cannot run a trivial program, we must be cross compiling. -echo $ac_n "checking whether cross-compiling""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_c_cross'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 +echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; } +if test "${ac_cv_c_const+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - if test "$cross_compiling" = yes; then - ac_cv_c_cross=yes -else -cat > conftest.$ac_ext <<EOF -#line 921 "configure" -#include "confdefs.h" -main(){return(0);} -EOF -{ (eval echo configure:925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } -if test -s conftest && (./conftest; exit) 2>/dev/null; then - ac_cv_c_cross=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +/* FIXME: Include the comments suggested by Paul. */ +#ifndef __cplusplus + /* Ultrix mips cc rejects this. */ + typedef int charset[2]; + const charset cs; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; + /* NEC SVR4.0.2 mips cc rejects this. */ + struct point {int x, y;}; + static struct point const zero = {0,0}; + /* AIX XL C 1.02.0.0 rejects this. + It does not let you subtract one const X* pointer from another in + an arm of an if-expression whose if-part is not a constant + expression */ + const char *g = "string"; + pcpcc = &g + (g ? g-g : 0); + /* HPUX 7.0 cc rejects these. */ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; + { /* SCO 3.2v4 cc rejects this. */ + char *t; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; + if (s) return 0; + } + { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ + int x[] = {25, 17}; + const int *foo = &x[0]; + ++foo; + } + { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ + typedef const int *iptr; + iptr p = 0; + ++p; + } + { /* AIX XL C 1.02.0.0 rejects this saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ + struct s { int j; const int *ap[3]; }; + struct s *b; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; + if (!foo) return 0; + } + return !cs[0] && !zero.x; +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_c_const=yes else - ac_cv_c_cross=yes -fi + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_c_const=no fi -rm -fr conftest* + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 +echo "${ECHO_T}$ac_cv_c_const" >&6; } +if test $ac_cv_c_const = no; then -echo "$ac_t""$ac_cv_c_cross" 1>&6 -cross_compiling=$ac_cv_c_cross +cat >>confdefs.h <<\_ACEOF +#define const +_ACEOF + +fi -echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; } +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext <<EOF -#line 943 "configure" -#include "confdefs.h" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:951: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then ac_cv_header_stdc=yes else - echo "$ac_err" >&5 - rm -rf conftest* - ac_cv_header_stdc=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_header_stdc=no fi -rm -f conftest* + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -cat > conftest.$ac_ext <<EOF -#line 966 "configure" -#include "confdefs.h" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include <string.h> -EOF + +_ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "memchr" >/dev/null 2>&1; then + $EGREP "memchr" >/dev/null 2>&1; then : else - rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* @@ -979,16 +3802,19 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -cat > conftest.$ac_ext <<EOF -#line 984 "configure" -#include "confdefs.h" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include <stdlib.h> -EOF + +_ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "free" >/dev/null 2>&1; then + $EGREP "free" >/dev/null 2>&1; then : else - rm -rf conftest* ac_cv_header_stdc=no fi rm -f conftest* @@ -997,404 +3823,836 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : else -cat > conftest.$ac_ext <<EOF -#line 1005 "configure" -#include "confdefs.h" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include <ctype.h> -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int main () { int i; for (i = 0; i < 256; i++) -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); -exit (0); } +#include <stdlib.h> +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif -EOF -{ (eval echo configure:1016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } -if test -s conftest && (./conftest; exit) 2>/dev/null; then +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then : else - ac_cv_header_stdc=no + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi -rm -fr conftest* + + fi fi - -echo "$ac_t""$ac_cv_header_stdc" 1>&6 +{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then - cat >> confdefs.h <<\EOF + +cat >>confdefs.h <<\_ACEOF #define STDC_HEADERS 1 -EOF +_ACEOF fi -for ac_hdr in memory.h unistd.h string.h + + + +for ac_header in memory.h unistd.h string.h do -ac_safe=`echo "$ac_hdr" | tr './\055' '___'` -echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1043 "configure" -#include "confdefs.h" -#include <$ac_hdr> -EOF -ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1048: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } -ac_err=`grep -v '^ *+' conftest.out` -if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" -else - echo "$ac_err" >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 fi -rm -f conftest* +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no fi -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdefghijklmnopqrstuvwxyz./\055' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ___'` - cat >> confdefs.h <<EOF -#define $ac_tr_hdr 1 -EOF - + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then + ac_header_preproc=yes else - echo "$ac_t""no" 1>&6 + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + done + + + + + ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h -do -ac_safe=`echo "$ac_hdr" | tr './\055' '___'` -echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1081 "configure" -#include "confdefs.h" +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do + as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 +echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include <sys/types.h> #include <$ac_hdr> -int main() { return 0; } -int t() { -DIR *dirp = 0; -; return 0; } -EOF -if { (eval echo configure:1090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_header_dirent_$ac_safe=yes" -else - rm -rf conftest* - eval "ac_cv_header_dirent_$ac_safe=no" + +int +main () +{ +if ((DIR *) 0) +return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_Header=no" fi -rm -f conftest* +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdedfghijklmnopqrstuvwxyz./\055' 'ABCDEDFGHIJKLMNOPQRSTUVWXYZ___'` - cat >> confdefs.h <<EOF -#define $ac_tr_hdr 1 -EOF - ac_header_dirent=$ac_hdr; break -else - echo "$ac_t""no" 1>&6 +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +_ACEOF + +ac_header_dirent=$ac_hdr; break fi + done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then -echo $ac_n "checking for -ldir""... $ac_c" 1>&6 -ac_lib_var=`echo dir | tr '.-/+' '___p'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - ac_save_LIBS="$LIBS" -LIBS="-ldir $LIBS" -cat > conftest.$ac_ext <<EOF -#line 1121 "configure" -#include "confdefs.h" - -int main() { return 0; } -int t() { -opendir() -; return 0; } -EOF -if { (eval echo configure:1129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" -else - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" + { echo "$as_me:$LINENO: checking for library containing opendir" >&5 +echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } +if test "${ac_cv_search_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_search_opendir=$ac_res +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + fi -rm -f conftest* -LIBS="$ac_save_LIBS" +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then + break fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - LIBS="$LIBS -ldir" +done +if test "${ac_cv_search_opendir+set}" = set; then + : else - echo "$ac_t""no" 1>&6 + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 +echo "${ECHO_T}$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + fi else -echo $ac_n "checking for -lx""... $ac_c" 1>&6 -ac_lib_var=`echo x | tr '.-/+' '___p'` -if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + { echo "$as_me:$LINENO: checking for library containing opendir" >&5 +echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6; } +if test "${ac_cv_search_opendir+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_save_LIBS="$LIBS" -LIBS="-lx $LIBS" -cat > conftest.$ac_ext <<EOF -#line 1156 "configure" -#include "confdefs.h" - -int main() { return 0; } -int t() { -opendir() -; return 0; } -EOF -if { (eval echo configure:1164: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=yes" + ac_func_search_save_LIBS=$LIBS +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char opendir (); +int +main () +{ +return opendir (); + ; + return 0; +} +_ACEOF +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_search_opendir=$ac_res else - rm -rf conftest* - eval "ac_cv_lib_$ac_lib_var=no" + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + fi -rm -f conftest* -LIBS="$ac_save_LIBS" +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then + break fi -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - echo "$ac_t""yes" 1>&6 - LIBS="$LIBS -lx" +done +if test "${ac_cv_search_opendir+set}" = set; then + : else - echo "$ac_t""no" 1>&6 + ac_cv_search_opendir=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 +echo "${ECHO_T}$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + fi fi -echo $ac_n "checking whether closedir returns void""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_func_closedir_void'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking whether closedir returns void" >&5 +echo $ECHO_N "checking whether closedir returns void... $ECHO_C" >&6; } +if test "${ac_cv_func_closedir_void+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_func_closedir_void=yes else -cat > conftest.$ac_ext <<EOF -#line 1192 "configure" -#include "confdefs.h" -#include <sys/types.h> + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default #include <$ac_header_dirent> -int closedir(); main() { exit(closedir(opendir(".")) != 0); } -EOF -{ (eval echo configure:1198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } -if test -s conftest && (./conftest; exit) 2>/dev/null; then +#ifndef __cplusplus +int closedir (); +#endif + +int +main () +{ +return closedir (opendir (".")) != 0; + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_func_closedir_void=no else - ac_cv_func_closedir_void=yes -fi + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_closedir_void=yes fi -rm -fr conftest* +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi -echo "$ac_t""$ac_cv_func_closedir_void" 1>&6 + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_closedir_void" >&5 +echo "${ECHO_T}$ac_cv_func_closedir_void" >&6; } if test $ac_cv_func_closedir_void = yes; then - cat >> confdefs.h <<\EOF + +cat >>confdefs.h <<\_ACEOF #define CLOSEDIR_VOID 1 -EOF +_ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! -echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking for working alloca.h" >&5 +echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; } +if test "${ac_cv_working_alloca_h+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext <<EOF -#line 1223 "configure" -#include "confdefs.h" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #include <alloca.h> -int main() { return 0; } -int t() { -char *p = alloca(2 * sizeof(int)); -; return 0; } -EOF -if { (eval echo configure:1231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - ac_cv_header_alloca_h=yes -else - rm -rf conftest* - ac_cv_header_alloca_h=no +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_working_alloca_h=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_working_alloca_h=no fi -rm -f conftest* +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext fi +{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5 +echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then -echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 -if test $ac_cv_header_alloca_h = yes; then - cat >> confdefs.h <<\EOF +cat >>confdefs.h <<\_ACEOF #define HAVE_ALLOCA_H 1 -EOF +_ACEOF fi -echo $ac_n "checking for alloca""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_func_alloca'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking for alloca" >&5 +echo $ECHO_N "checking for alloca... $ECHO_C" >&6; } +if test "${ac_cv_func_alloca_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext <<EOF -#line 1255 "configure" -#include "confdefs.h" - + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else -# if HAVE_ALLOCA_H -# include <alloca.h> +# ifdef _MSC_VER +# include <malloc.h> +# define alloca _alloca # else -# ifdef _AIX - #pragma alloca +# ifdef HAVE_ALLOCA_H +# include <alloca.h> # else -# ifndef alloca /* predefined by HP cc +Olibcalls */ +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); +# endif # endif # endif # endif #endif -int main() { return 0; } -int t() { -char *p = (char *) alloca(1); -; return 0; } -EOF -if { (eval echo configure:1279: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - ac_cv_func_alloca=yes +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + ac_cv_func_alloca_works=yes else - rm -rf conftest* - ac_cv_func_alloca=no + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_func_alloca_works=no fi -rm -f conftest* +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5 +echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; } -echo "$ac_t""$ac_cv_func_alloca" 1>&6 -if test $ac_cv_func_alloca = yes; then - cat >> confdefs.h <<\EOF -#define HAVE_ALLOCA 1 -EOF +if test $ac_cv_func_alloca_works = yes; then -fi +cat >>confdefs.h <<\_ACEOF +#define HAVE_ALLOCA 1 +_ACEOF -if test $ac_cv_func_alloca = no; then +else # The SVR3 libPW and SVR4 libucb both contain incompatible functions - # that cause trouble. Some versions do not even contain alloca or - # contain a buggy version. If you still want to use their alloca, - # use ar to extract alloca.o from them instead of compiling alloca.c. - ALLOCA=alloca.o - cat >> confdefs.h <<\EOF +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +cat >>confdefs.h <<\_ACEOF #define C_ALLOCA 1 -EOF +_ACEOF -echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5 +echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; } +if test "${ac_cv_os_cray+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else - cat > conftest.$ac_ext <<EOF -#line 1314 "configure" -#include "confdefs.h" -#if defined(CRAY) && ! defined(CRAY2) + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif -EOF +_ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - egrep "webecray" >/dev/null 2>&1; then - rm -rf conftest* + $EGREP "webecray" >/dev/null 2>&1; then ac_cv_os_cray=yes else - rm -rf conftest* ac_cv_os_cray=no fi rm -f conftest* fi - -echo "$ac_t""$ac_cv_os_cray" 1>&6 +{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5 +echo "${ECHO_T}$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then -for ac_func in _getb67 GETB67 getb67; do - echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 -else - cat > conftest.$ac_ext <<EOF -#line 1343 "configure" -#include "confdefs.h" + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func(); below. */ -#include <assert.h> -/* Override any gcc2 internal prototype to avoid an error. */ -char $ac_func(); + which can conflict with char $ac_func (); below. + Prefer <limits.h> to <assert.h> if __STDC__ is defined, since + <limits.h> exists even on freestanding compilers. */ -int main() { return 0; } -int t() { +#ifdef __STDC__ +# include <limits.h> +#else +# include <assert.h> +#endif +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +#if defined __stub_$ac_func || defined __stub___$ac_func choke me -#else -$ac_func(); #endif -; return 0; } -EOF -if { (eval echo configure:1365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then - rm -rf conftest* - eval "ac_cv_func_$ac_func=yes" +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" else - rm -rf conftest* - eval "ac_cv_func_$ac_func=no" + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" fi -rm -f conftest* +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext fi -if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then - echo "$ac_t""yes" 1>&6 - cat >> confdefs.h <<EOF +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + +cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func -EOF +_ACEOF - break -else - echo "$ac_t""no" 1>&6 + break fi -done + done fi -echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5 +echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; } +if test "${ac_cv_c_stack_direction+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then ac_cv_c_stack_direction=0 else -cat > conftest.$ac_ext <<EOF -#line 1397 "configure" -#include "confdefs.h" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int find_stack_direction () { static char *addr = 0; @@ -1407,258 +4665,1134 @@ find_stack_direction () else return (&dummy > addr) ? 1 : -1; } + +int main () { - exit (find_stack_direction() < 0); + return find_stack_direction () < 0; } -EOF -{ (eval echo configure:1416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } -if test -s conftest && (./conftest; exit) 2>/dev/null; then +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then ac_cv_c_stack_direction=1 else - ac_cv_c_stack_direction=-1 + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_c_stack_direction=-1 fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi -rm -fr conftest* + + fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5 +echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; } -echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 -cat >> confdefs.h <<EOF +cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction -EOF +_ACEOF + fi -echo $ac_n "checking for strcoll""... $ac_c" 1>&6 -if eval "test \"`echo '$''{'ac_cv_func_strcoll'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +{ echo "$as_me:$LINENO: checking for working strcoll" >&5 +echo $ECHO_N "checking for working strcoll... $ECHO_C" >&6; } +if test "${ac_cv_func_strcoll_works+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$cross_compiling" = yes; then - ac_cv_func_strcoll=no + ac_cv_func_strcoll_works=no else -cat > conftest.$ac_ext <<EOF -#line 1441 "configure" -#include "confdefs.h" -#include <string.h> + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +int main () { - exit (strcoll ("abc", "def") >= 0 || - strcoll ("ABC", "DEF") >= 0 || - strcoll ("123", "456") >= 0); +return (strcoll ("abc", "def") >= 0 || + strcoll ("ABC", "DEF") >= 0 || + strcoll ("123", "456") >= 0) + ; + return 0; } -EOF -{ (eval echo configure:1451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } -if test -s conftest && (./conftest; exit) 2>/dev/null; then - ac_cv_func_strcoll=yes +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func_strcoll_works=yes else - ac_cv_func_strcoll=no + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_func_strcoll_works=no fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext fi -rm -fr conftest* + + fi +{ echo "$as_me:$LINENO: result: $ac_cv_func_strcoll_works" >&5 +echo "${ECHO_T}$ac_cv_func_strcoll_works" >&6; } +if test $ac_cv_func_strcoll_works = yes; then -echo "$ac_t""$ac_cv_func_strcoll" 1>&6 -if test $ac_cv_func_strcoll = yes; then - cat >> confdefs.h <<\EOF +cat >>confdefs.h <<\_ACEOF #define HAVE_STRCOLL 1 -EOF +_ACEOF fi -trap '' 1 2 15 -cat > confcache <<\EOF +ac_config_files="$ac_config_files Makefile" + +cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. # -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. # -EOF +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -(set) 2>&1 | - sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \ - >> confcache -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { echo "$as_me:$LINENO: updating cache $cache_file" >&5 +echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file else - echo "not updating unwritable cache $cache_file" + { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. -cat > conftest.defs <<\EOF -s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g -s%[ `~#$^&*(){}\\|;'"<>?]%\\&%g -s%\[%\\&%g -s%\]%\\&%g -s%\$%$$%g -EOF -DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` -rm -f conftest.defs - - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +ac_script=' +t clear +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g +t quote +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g +t quote +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` + + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS <<EOF -#! /bin/sh -# Generated automatically by configure. +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. # Run this file to recreate the current configuration. -# This directory was configured as follows, -# on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# -# $0 $ac_configure_args -# # Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -for ac_option +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH do - case "\$ac_option" in + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# Files that config.status was made for. +config_files="$ac_config_files" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to <bug-autoconf@gnu.org>." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.61, + with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2006 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" - exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version 2.7" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "\$ac_cs_usage"; exit 0 ;; - *) echo "\$ac_cs_usage"; exit 1 ;; + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + esac + shift done -ac_given_srcdir=$srcdir +ac_configure_extra_args= -trap 'rm -fr `echo "Makefile" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 -EOF -cat >> $CONFIG_STATUS <<EOF +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi -# Protect against being on the right side of a sed subst in config.status. -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -$ac_vpsub -$extrasub -s%@CFLAGS@%$CFLAGS%g -s%@CPPFLAGS@%$CPPFLAGS%g -s%@CXXFLAGS@%$CXXFLAGS%g -s%@DEFS@%$DEFS%g -s%@LDFLAGS@%$LDFLAGS%g -s%@LIBS@%$LIBS%g -s%@exec_prefix@%$exec_prefix%g -s%@prefix@%$prefix%g -s%@program_transform_name@%$program_transform_name%g -s%@bindir@%$bindir%g -s%@sbindir@%$sbindir%g -s%@libexecdir@%$libexecdir%g -s%@datadir@%$datadir%g -s%@sysconfdir@%$sysconfdir%g -s%@sharedstatedir@%$sharedstatedir%g -s%@localstatedir@%$localstatedir%g -s%@libdir@%$libdir%g -s%@includedir@%$includedir%g -s%@oldincludedir@%$oldincludedir%g -s%@infodir@%$infodir%g -s%@mandir@%$mandir%g -s%@CC@%$CC%g -s%@AR@%$AR%g -s%@RANLIB@%$RANLIB%g -s%@CPP@%$CPP%g -s%@ALLOCA@%$ALLOCA%g - -CEOF -EOF -cat >> $CONFIG_STATUS <<EOF - -CONFIG_FILES=\${CONFIG_FILES-"Makefile"} -EOF -cat >> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then - # Support "outfile[:infile]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + CONFIG_SHELL=$SHELL + export CONFIG_SHELL + exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; esac +done + - # Adjust relative srcdir, etc. for subdirectories. +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# +# Set up the sed scripts for CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "$CONFIG_FILES"; then + +_ACEOF + + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +SHELL!$SHELL$ac_delim +PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim +PACKAGE_NAME!$PACKAGE_NAME$ac_delim +PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim +PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim +PACKAGE_STRING!$PACKAGE_STRING$ac_delim +PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim +exec_prefix!$exec_prefix$ac_delim +prefix!$prefix$ac_delim +program_transform_name!$program_transform_name$ac_delim +bindir!$bindir$ac_delim +sbindir!$sbindir$ac_delim +libexecdir!$libexecdir$ac_delim +datarootdir!$datarootdir$ac_delim +datadir!$datadir$ac_delim +sysconfdir!$sysconfdir$ac_delim +sharedstatedir!$sharedstatedir$ac_delim +localstatedir!$localstatedir$ac_delim +includedir!$includedir$ac_delim +oldincludedir!$oldincludedir$ac_delim +docdir!$docdir$ac_delim +infodir!$infodir$ac_delim +htmldir!$htmldir$ac_delim +dvidir!$dvidir$ac_delim +pdfdir!$pdfdir$ac_delim +psdir!$psdir$ac_delim +libdir!$libdir$ac_delim +localedir!$localedir$ac_delim +mandir!$mandir$ac_delim +DEFS!$DEFS$ac_delim +ECHO_C!$ECHO_C$ac_delim +ECHO_N!$ECHO_N$ac_delim +ECHO_T!$ECHO_T$ac_delim +LIBS!$LIBS$ac_delim +build_alias!$build_alias$ac_delim +host_alias!$host_alias$ac_delim +target_alias!$target_alias$ac_delim +CC!$CC$ac_delim +CFLAGS!$CFLAGS$ac_delim +LDFLAGS!$LDFLAGS$ac_delim +CPPFLAGS!$CPPFLAGS$ac_delim +ac_ct_CC!$ac_ct_CC$ac_delim +EXEEXT!$EXEEXT$ac_delim +OBJEXT!$OBJEXT$ac_delim +AR!$AR$ac_delim +RANLIB!$RANLIB$ac_delim +CPP!$CPP$ac_delim +GREP!$GREP$ac_delim +EGREP!$EGREP$ac_delim +ALLOCA!$ALLOCA$ac_delim +LIBOBJS!$LIBOBJS$ac_delim +LTLIBOBJS!$LTLIBOBJS$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 52; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } else - ac_dir_suffix= ac_dots= + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS <conf$$subs.sed +rm -f conf$$subs.sed +cat >>$CONFIG_STATUS <<_ACEOF +:end +s/|#_!!_#|//g +CEOF$ac_eof +_ACEOF + + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF +fi # test -n "$CONFIG_FILES" + + +for ac_tag in :F $CONFIG_FILES +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + ac_file_inputs="$ac_file_inputs $ac_f" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input="Generated from "`IFS=: + echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + fi + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin";; + esac + ;; esac - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; esac - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file -fi; done -rm -f conftest.subs + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +case `sed -n '/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' $ac_file_inputs` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s&@configure_input@&$configure_input&;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +$ac_datarootdir_hack +" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out"; rm -f "$tmp/out";; + *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac + ;; + + esac + +done # for ac_tag -exit 0 -EOF + +{ (exit 0); exit 0; } +_ACEOF chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi diff --git a/libc/posix/regex_internal.h b/libc/posix/regex_internal.h index 3b575c3c4..24d0fbba7 100644 --- a/libc/posix/regex_internal.h +++ b/libc/posix/regex_internal.h @@ -1,5 +1,5 @@ /* Extended regular expression matching and search library. - Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. @@ -385,18 +385,20 @@ typedef struct re_dfa_t re_dfa_t; # endif #endif +#ifndef NOT_IN_libc static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, int new_buf_len) internal_function; -#ifdef RE_ENABLE_I18N +# ifdef RE_ENABLE_I18N static void build_wcs_buffer (re_string_t *pstr) internal_function; static int build_wcs_upper_buffer (re_string_t *pstr) internal_function; -#endif /* RE_ENABLE_I18N */ +# endif /* RE_ENABLE_I18N */ static void build_upper_buffer (re_string_t *pstr) internal_function; static void re_string_translate_buffer (re_string_t *pstr) internal_function; static unsigned int re_string_context_at (const re_string_t *input, int idx, int eflags) internal_function __attribute ((pure)); +#endif #define re_string_peek_byte(pstr, offset) \ ((pstr)->mbs[(pstr)->cur_idx + offset]) #define re_string_fetch_byte(pstr) \ @@ -732,15 +734,16 @@ re_string_wchar_at (const re_string_t *pstr, int idx) return (wint_t) pstr->wcs[idx]; } +# ifndef NOT_IN_libc static int internal_function __attribute ((pure)) re_string_elem_size_at (const re_string_t *pstr, int idx) { -# ifdef _LIBC +# ifdef _LIBC const unsigned char *p, *extra; const int32_t *table, *indirect; int32_t tmp; -# include <locale/weight.h> +# include <locale/weight.h> uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) @@ -755,9 +758,10 @@ re_string_elem_size_at (const re_string_t *pstr, int idx) return p - pstr->mbs - idx; } else -# endif /* _LIBC */ +# endif /* _LIBC */ return 1; } +# endif #endif /* RE_ENABLE_I18N */ #endif /* _REGEX_INTERNAL_H */ diff --git a/libc/posix/runtests.c b/libc/posix/runtests.c index 9d744751e..d44bf3626 100644 --- a/libc/posix/runtests.c +++ b/libc/posix/runtests.c @@ -36,7 +36,7 @@ struct a_test { int expected; const char * pattern; - const unsigned char * data; + const char * data; }; static const struct a_test the_tests[] = diff --git a/libc/posix/sched.h b/libc/posix/sched.h index becad0f36..e95c80f56 100644 --- a/libc/posix/sched.h +++ b/libc/posix/sched.h @@ -25,6 +25,9 @@ /* Get type definitions. */ #include <bits/types.h> +#define __need_size_t +#include <stddef.h> + #define __need_timespec #include <time.h> @@ -66,11 +69,41 @@ extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW; #ifdef __USE_GNU /* Access macros for `cpu_set'. */ # define CPU_SETSIZE __CPU_SETSIZE -# define CPU_SET(cpu, cpusetp) __CPU_SET (cpu, cpusetp) -# define CPU_CLR(cpu, cpusetp) __CPU_CLR (cpu, cpusetp) -# define CPU_ISSET(cpu, cpusetp) __CPU_ISSET (cpu, cpusetp) -# define CPU_ZERO(cpusetp) __CPU_ZERO (cpusetp) -# define CPU_COUNT(cpusetp) __CPU_COUNT (cpusetp) +# define CPU_SET(cpu, cpusetp) __CPU_SET_S (cpu, sizeof (cpu_set_t), cpusetp) +# define CPU_CLR(cpu, cpusetp) __CPU_CLR_S (cpu, sizeof (cpu_set_t), cpusetp) +# define CPU_ISSET(cpu, cpusetp) __CPU_ISSET_S (cpu, sizeof (cpu_set_t), \ + cpusetp) +# define CPU_ZERO(cpusetp) __CPU_ZERO_S (sizeof (cpu_set_t), cpusetp) +# define CPU_COUNT(cpusetp) __CPU_COUNT_S (sizeof (cpu_set_t), cpusetp) + +# define CPU_SET_S(cpu, setsize, cpusetp) __CPU_SET_S (cpu, setsize, cpusetp) +# define CPU_CLR_S(cpu, setsize, cpusetp) __CPU_CLR_S (cpu, setsize, cpusetp) +# define CPU_ISSET_S(cpu, setsize, cpusetp) __CPU_ISSET_S (cpu, setsize, \ + cpusetp) +# define CPU_ZERO_S(setsize, cpusetp) __CPU_ZERO_S (setsize, cpusetp) +# define CPU_COUNT_S(setsize, cpusetp) __CPU_COUNT_S (setsize, cpusetp) + +# define CPU_EQUAL(cpusetp1, cpusetp2) \ + __CPU_EQUAL_S (sizeof (cpu_set_t), cpusetp1, cpusetp2) +# define CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ + __CPU_EQUAL_S (setsize, cpusetp1, cpusetp2) + +# define CPU_AND(destset, srcset1, srcset2) \ + __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, &) +# define CPU_OR(destset, srcset1, srcset2) \ + __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, |) +# define CPU_XOR(destset, srcset1, srcset2) \ + __CPU_OP_S (sizeof (cpu_set_t), destset, srcset1, srcset2, ^) +# define CPU_AND_S(setsize, destset, srcset1, srcset2) \ + __CPU_OP_S (setsize, destset, srcset1, srcset2, &) +# define CPU_OR_S(setsize, destset, srcset1, srcset2) \ + __CPU_OP_S (setsize, destset, srcset1, srcset2, |) +# define CPU_XOR_S(setsize, destset, srcset1, srcset2) \ + __CPU_OP_S (setsize, destset, srcset1, srcset2, ^) + +# define CPU_ALLOC_SIZE(count) __CPU_ALLOC_SIZE (count) +# define CPU_ALLOC(count) __CPU_ALLOC (count) +# define CPU_FREE(cpuset) __CPU_FREE (cpuset) /* Set the CPU affinity for a task */ diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/dl-vdso.h b/libc/posix/sched_cpualloc.c index a7dcb2e5f..2642a8010 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/dl-vdso.h +++ b/libc/posix/sched_cpualloc.c @@ -1,5 +1,4 @@ -/* ELF symbol resolve functions for VDSO objects. - Copyright (C) 2005 Free Software Foundation, Inc. +/* Copyright (C) 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,11 +16,12 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#ifndef _DL_VDSO_H -#define _DL_VDSO_H 1 +#include <sched.h> +#include <stdlib.h> -/* Functions for resolving symbols in the VDSO link map. */ -extern void *_dl_vdso_vsym (const char *name, const char *version) - internal_function attribute_hidden; -#endif /* dl-vdso.h */ +cpu_set_t * +__sched_cpualloc (size_t count) +{ + return malloc (CPU_ALLOC_SIZE (count)); +} diff --git a/libc/posix/sched_cpucount.c b/libc/posix/sched_cpucount.c index d7f6b7b49..331c0b8df 100644 --- a/libc/posix/sched_cpucount.c +++ b/libc/posix/sched_cpucount.c @@ -21,31 +21,39 @@ int -__sched_cpucount (size_t setsize, cpu_set_t *setp) +__sched_cpucount (size_t setsize, const cpu_set_t *setp) { int s = 0; - for (unsigned int j = 0; j < setsize / sizeof (__cpu_mask); ++j) + const __cpu_mask *p = setp->__bits; + const __cpu_mask *end = &setp->__bits[setsize / sizeof (__cpu_mask)]; + + while (p < end) { - __cpu_mask l = setp->__bits[j]; + __cpu_mask l = *p++; + +#ifdef POPCNT + s += POPCNT (l); +#else if (l == 0) continue; -#if LONG_BIT > 32 +# if LONG_BIT > 32 l = (l & 0x5555555555555555ul) + ((l >> 1) & 0x5555555555555555ul); l = (l & 0x3333333333333333ul) + ((l >> 2) & 0x3333333333333333ul); l = (l & 0x0f0f0f0f0f0f0f0ful) + ((l >> 4) & 0x0f0f0f0f0f0f0f0ful); l = (l & 0x00ff00ff00ff00fful) + ((l >> 8) & 0x00ff00ff00ff00fful); l = (l & 0x0000ffff0000fffful) + ((l >> 16) & 0x0000ffff0000fffful); l = (l & 0x00000000fffffffful) + ((l >> 32) & 0x00000000fffffffful); -#else +# else l = (l & 0x55555555ul) + ((l >> 1) & 0x55555555ul); l = (l & 0x33333333ul) + ((l >> 2) & 0x33333333ul); l = (l & 0x0f0f0f0ful) + ((l >> 4) & 0x0f0f0f0ful); l = (l & 0x00ff00fful) + ((l >> 8) & 0x00ff00fful); l = (l & 0x0000fffful) + ((l >> 16) & 0x0000fffful); -#endif +# endif s += l; +#endif } return s; diff --git a/libc/posix/sched_cpufree.c b/libc/posix/sched_cpufree.c new file mode 100644 index 000000000..dd4c6131d --- /dev/null +++ b/libc/posix/sched_cpufree.c @@ -0,0 +1,27 @@ +/* Copyright (C) 2007 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 <sched.h> +#include <stdlib.h> + + +void +__sched_cpufree (cpu_set_t *set) +{ + free (set); +} diff --git a/libc/posix/tst-cpuset.c b/libc/posix/tst-cpuset.c new file mode 100644 index 000000000..d73679322 --- /dev/null +++ b/libc/posix/tst-cpuset.c @@ -0,0 +1,82 @@ +#include <sched.h> +#include <stdio.h> + +static int +do_test (void) +{ + int result = 0; + + cpu_set_t s1; + cpu_set_t s2; + cpu_set_t s3; + + CPU_ZERO (&s1); + CPU_SET (0, &s1); + + CPU_ZERO (&s2); + CPU_SET (0, &s2); + CPU_SET (1, &s2); + + CPU_AND (&s3, &s1, &s2); + if (! CPU_EQUAL (&s3, &s1)) + { + puts ("result of CPU_AND wrong"); + result = 1; + } + + CPU_OR (&s3, &s1, &s2); + if (! CPU_EQUAL (&s3, &s2)) + { + puts ("result of CPU_OR wrong"); + result = 1; + } + + CPU_XOR (&s3, &s1, &s2); + if (CPU_COUNT (&s3) != 1) + { + puts ("result of CPU_XOR wrong"); + result = 1; + } + + cpu_set_t *vs1 = CPU_ALLOC (2048); + cpu_set_t *vs2 = CPU_ALLOC (2048); + cpu_set_t *vs3 = CPU_ALLOC (2048); + size_t vssize = CPU_ALLOC_SIZE (2048); + + CPU_ZERO_S (vssize, vs1); + CPU_SET_S (0, vssize, vs1); + + CPU_ZERO_S (vssize, vs2); + CPU_SET_S (0, vssize, vs2); + CPU_SET_S (2047, vssize, vs2); + + CPU_AND_S (vssize, vs3, vs1, vs2); + if (! CPU_EQUAL_S (vssize, vs3, vs1)) + { + puts ("result of CPU_AND_S wrong"); + result = 1; + } + + CPU_OR_S (vssize, vs3, vs1, vs2); + if (! CPU_EQUAL_S (vssize, vs3, vs2)) + { + puts ("result of CPU_OR_S wrong"); + result = 1; + } + + CPU_XOR_S (vssize, vs3, vs1, vs2); + if (CPU_COUNT_S (vssize, vs3) != 1) + { + puts ("result of CPU_XOR_S wrong"); + result = 1; + } + + CPU_FREE (vs1); + CPU_FREE (vs2); + CPU_FREE (vs3); + + return result; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/libc/posix/tst-rfc3484-2.c b/libc/posix/tst-rfc3484-2.c index 2536da8f8..ae802c065 100644 --- a/libc/posix/tst-rfc3484-2.c +++ b/libc/posix/tst-rfc3484-2.c @@ -26,6 +26,7 @@ __idna_to_ascii_lz (const char *input, char **output, int flags) int __idna_to_unicode_lzlz (const char *input, char **output, int flags) { + *output = NULL; return 0; } diff --git a/libc/posix/tst-rfc3484.c b/libc/posix/tst-rfc3484.c index 2e74e9737..352a7579a 100644 --- a/libc/posix/tst-rfc3484.c +++ b/libc/posix/tst-rfc3484.c @@ -26,6 +26,7 @@ __idna_to_ascii_lz (const char *input, char **output, int flags) int __idna_to_unicode_lzlz (const char *input, char **output, int flags) { + *output = NULL; return 0; } diff --git a/libc/resolv/arpa/nameser.h b/libc/resolv/arpa/nameser.h index f6330a897..a164221df 100644 --- a/libc/resolv/arpa/nameser.h +++ b/libc/resolv/arpa/nameser.h @@ -424,6 +424,11 @@ typedef enum __ns_cert_types { #define NS_NXT_MAX 127 /* + * EDNS0 extended flags, host order. + */ +#define NS_OPT_DNSSEC_OK 0x8000U + +/* * Inline versions of get/put short/long. Pointer is advanced. */ #define NS_GET16(s, cp) do { \ diff --git a/libc/resolv/inet_ntop.c b/libc/resolv/inet_ntop.c index 1222d08bd..6e89f2d05 100644 --- a/libc/resolv/inet_ntop.c +++ b/libc/resolv/inet_ntop.c @@ -138,6 +138,8 @@ inet_ntop6(src, dst, size) words[i / 2] = (src[i] << 8) | src[i + 1]; best.base = -1; cur.base = -1; + best.len = 0; + cur.len = 0; for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) { if (words[i] == 0) { if (cur.base == -1) diff --git a/libc/resolv/res_hconf.c b/libc/resolv/res_hconf.c index f45888933..c53b809ef 100644 --- a/libc/resolv/res_hconf.c +++ b/libc/resolv/res_hconf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995-2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995-2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Mosberger (davidm@azstarnet.com). @@ -361,6 +361,7 @@ _res_hconf_init (void) } +#ifndef NOT_IN_libc /* List of known interfaces. */ libc_freeres_ptr ( static struct netaddr @@ -532,3 +533,4 @@ _res_hconf_trim_domains (struct hostent *hp) for (i = 0; hp->h_aliases[i]; ++i) _res_hconf_trim_domain (hp->h_aliases[i]); } +#endif diff --git a/libc/resolv/res_init.c b/libc/resolv/res_init.c index 640e08792..d1a5681a9 100644 --- a/libc/resolv/res_init.c +++ b/libc/resolv/res_init.c @@ -241,8 +241,8 @@ __res_vinit(res_state statp, int preinit) { line[sizeof(name) - 1] == '\t')) if ((fp = fopen(_PATH_RESCONF, "rc")) != NULL) { - /* No threads use this stream. */ - __fsetlocking (fp, FSETLOCKING_BYCALLER); + /* No threads use this stream. */ + __fsetlocking (fp, FSETLOCKING_BYCALLER); /* read the config file */ while (fgets_unlocked(buf, sizeof(buf), fp) != NULL) { /* skip comments */ @@ -397,8 +397,11 @@ __res_vinit(res_state statp, int preinit) { if (nserv > 1) statp->nscount = nserv; #ifdef _LIBC - if (nservall - nserv > 0) + if (nservall - nserv > 0) { statp->_u._ext.nscount6 = nservall - nserv; + /* We try IPv6 servers again. */ + statp->ipv6_unavail = false; + } #endif #ifdef RESOLVSORT statp->nsort = nsort; diff --git a/libc/resolv/res_send.c b/libc/resolv/res_send.c index f38c399ff..23306a2fb 100644 --- a/libc/resolv/res_send.c +++ b/libc/resolv/res_send.c @@ -425,9 +425,12 @@ __libc_res_nsend(res_state statp, const u_char *buf, int buflen, EXT(statp).nsaddrs[n] = malloc(sizeof (struct sockaddr_in6)); if (EXT(statp).nsaddrs[n] != NULL) { - memcpy(EXT(statp).nsaddrs[n], - &statp->nsaddr_list[ns], - sizeof (struct sockaddr_in)); + memset (mempcpy(EXT(statp).nsaddrs[n], + &statp->nsaddr_list[ns], + sizeof (struct sockaddr_in)), + '\0', + sizeof (struct sockaddr_in6) + - sizeof (struct sockaddr_in)); EXT(statp).nssocks[n] = -1; n++; } @@ -813,17 +816,20 @@ send_dg(res_state statp, struct pollfd pfd[1]; int ptimeout; struct sockaddr_in6 from; - static int socket_pf = 0; socklen_t fromlen; int resplen, seconds, n; if (EXT(statp).nssocks[ns] == -1) { /* only try IPv6 if IPv6 NS and if not failed before */ - if ((EXT(statp).nscount6 > 0) && (socket_pf != PF_INET)) { + if ((EXT(statp).nscount6 > 0) && !statp->ipv6_unavail) { EXT(statp).nssocks[ns] = socket(PF_INET6, SOCK_DGRAM, 0); - socket_pf = EXT(statp).nssocks[ns] < 0 ? PF_INET - : PF_INET6; + if (EXT(statp).nssocks[ns] < 0) + statp->ipv6_unavail = errno == EAFNOSUPPORT; + /* If IPv6 socket and nsap is IPv4, make it + IPv4-mapped */ + else if (nsap->sin6_family == AF_INET) + convaddr4to6(nsap); } if (EXT(statp).nssocks[ns] < 0) EXT(statp).nssocks[ns] = socket(PF_INET, SOCK_DGRAM, 0); @@ -832,9 +838,7 @@ send_dg(res_state statp, Perror(statp, stderr, "socket(dg)", errno); return (-1); } - /* If IPv6 socket and nsap is IPv4, make it IPv4-mapped */ - if ((socket_pf == PF_INET6) && (nsap->sin6_family == AF_INET)) - convaddr4to6(nsap); + /* * On a 4.3BSD+ machine (client and server, * actually), sending to a nameserver datagram diff --git a/libc/resolv/resolv.h b/libc/resolv/resolv.h index 9aa09b870..105631ee7 100644 --- a/libc/resolv/resolv.h +++ b/libc/resolv/resolv.h @@ -110,21 +110,25 @@ struct __res_state { nsaddr_list[MAXNS]; /* address of name server */ # define nsaddr nsaddr_list[0] /* for backward compatibility */ u_short id; /* current message id */ + /* 2 byte hole here. */ char *dnsrch[MAXDNSRCH+1]; /* components of domain to search */ char defdname[256]; /* default domain (deprecated) */ u_long pfcode; /* RES_PRF_ flags - see below. */ unsigned ndots:4; /* threshold for initial abs. query */ unsigned nsort:4; /* number of elements in sort_list[] */ - char unused[3]; + unsigned ipv6_unavail:1; /* connecting to IPv6 server failed */ + unsigned unused:23; struct { struct in_addr addr; u_int32_t mask; } sort_list[MAXRESOLVSORT]; + /* 4 byte hole here on 64-bit architectures. */ res_send_qhook qhook; /* query hook */ res_send_rhook rhook; /* response hook */ int res_h_errno; /* last one set for this context */ int _vcsock; /* PRIVATE: for res_send VC i/o */ u_int _flags; /* PRIVATE: see below */ + /* 4 byte hole here on 64-bit architectures. */ union { char pad[52]; /* On an i386 this means 512b total. */ struct { diff --git a/libc/rt/aio.h b/libc/rt/aio.h index 35dc19642..7cfd0c110 100644 --- a/libc/rt/aio.h +++ b/libc/rt/aio.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996-2000,2003,2004 Free Software Foundation, Inc. +/* Copyright (C) 1996-2000,2003,2004,2007 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 @@ -136,25 +136,26 @@ enum /* Allow user to specify optimization. */ #ifdef __USE_GNU -extern void aio_init (__const struct aioinit *__init) __THROW; +extern void aio_init (__const struct aioinit *__init) __THROW __nonnull ((1)); #endif #ifndef __USE_FILE_OFFSET64 /* Enqueue read request for given number of bytes and the given priority. */ -extern int aio_read (struct aiocb *__aiocbp) __THROW; +extern int aio_read (struct aiocb *__aiocbp) __THROW __nonnull ((1)); /* Enqueue write request for given number of bytes and the given priority. */ -extern int aio_write (struct aiocb *__aiocbp) __THROW; +extern int aio_write (struct aiocb *__aiocbp) __THROW __nonnull ((1)); /* Initiate list of I/O requests. */ extern int lio_listio (int __mode, struct aiocb *__const __list[__restrict_arr], - int __nent, struct sigevent *__restrict __sig) __THROW; + int __nent, struct sigevent *__restrict __sig) + __THROW __nonnull ((2)); /* Retrieve error status associated with AIOCBP. */ -extern int aio_error (__const struct aiocb *__aiocbp) __THROW; +extern int aio_error (__const struct aiocb *__aiocbp) __THROW __nonnull ((1)); /* Return status associated with AIOCBP. */ -extern __ssize_t aio_return (struct aiocb *__aiocbp) __THROW; +extern __ssize_t aio_return (struct aiocb *__aiocbp) __THROW __nonnull ((1)); /* Try to cancel asynchronous I/O requests outstanding against file descriptor FILDES. */ @@ -166,26 +167,30 @@ extern int aio_cancel (int __fildes, struct aiocb *__aiocbp) __THROW; This function is a cancellation point and therefore not marked with __THROW. */ extern int aio_suspend (__const struct aiocb *__const __list[], int __nent, - __const struct timespec *__restrict __timeout); + __const struct timespec *__restrict __timeout) + __nonnull ((1)); /* Force all operations associated with file desriptor described by `aio_fildes' member of AIOCBP. */ -extern int aio_fsync (int __operation, struct aiocb *__aiocbp) __THROW; +extern int aio_fsync (int __operation, struct aiocb *__aiocbp) + __THROW __nonnull ((2)); #else # ifdef __REDIRECT_NTH -extern int __REDIRECT_NTH (aio_read, (struct aiocb *__aiocbp), aio_read64); -extern int __REDIRECT_NTH (aio_write, (struct aiocb *__aiocbp), aio_write64); +extern int __REDIRECT_NTH (aio_read, (struct aiocb *__aiocbp), aio_read64) + __nonnull ((1)); +extern int __REDIRECT_NTH (aio_write, (struct aiocb *__aiocbp), aio_write64) + __nonnull ((1)); extern int __REDIRECT_NTH (lio_listio, (int __mode, struct aiocb *__const __list[__restrict_arr], int __nent, struct sigevent *__restrict __sig), - lio_listio64); + lio_listio64) __nonnull ((2)); extern int __REDIRECT_NTH (aio_error, (__const struct aiocb *__aiocbp), - aio_error64); + aio_error64) __nonnull ((1)); extern __ssize_t __REDIRECT_NTH (aio_return, (struct aiocb *__aiocbp), - aio_return64); + aio_return64) __nonnull ((1)); extern int __REDIRECT_NTH (aio_cancel, (int __fildes, struct aiocb *__aiocbp), @@ -194,11 +199,11 @@ extern int __REDIRECT_NTH (aio_cancel, extern int __REDIRECT_NTH (aio_suspend, (__const struct aiocb *__const __list[], int __nent, __const struct timespec *__restrict __timeout), - aio_suspend64); + aio_suspend64) __nonnull ((1)); extern int __REDIRECT_NTH (aio_fsync, (int __operation, struct aiocb *__aiocbp), - aio_fsync64); + aio_fsync64) __nonnull ((2)); # else # define aio_read aio_read64 @@ -213,24 +218,27 @@ extern int __REDIRECT_NTH (aio_fsync, #endif #ifdef __USE_LARGEFILE64 -extern int aio_read64 (struct aiocb64 *__aiocbp) __THROW; -extern int aio_write64 (struct aiocb64 *__aiocbp) __THROW; +extern int aio_read64 (struct aiocb64 *__aiocbp) __THROW __nonnull ((1)); +extern int aio_write64 (struct aiocb64 *__aiocbp) __THROW __nonnull ((1)); extern int lio_listio64 (int __mode, struct aiocb64 *__const __list[__restrict_arr], int __nent, struct sigevent *__restrict __sig) - __THROW; + __THROW __nonnull ((2)); -extern int aio_error64 (__const struct aiocb64 *__aiocbp) __THROW; -extern __ssize_t aio_return64 (struct aiocb64 *__aiocbp) __THROW; +extern int aio_error64 (__const struct aiocb64 *__aiocbp) + __THROW __nonnull ((1)); +extern __ssize_t aio_return64 (struct aiocb64 *__aiocbp) + __THROW __nonnull ((1)); extern int aio_cancel64 (int __fildes, struct aiocb64 *__aiocbp) __THROW; extern int aio_suspend64 (__const struct aiocb64 *__const __list[], int __nent, __const struct timespec *__restrict __timeout) - __THROW; + __THROW __nonnull ((1)); -extern int aio_fsync64 (int __operation, struct aiocb64 *__aiocbp) __THROW; +extern int aio_fsync64 (int __operation, struct aiocb64 *__aiocbp) + __THROW __nonnull ((2)); #endif __END_DECLS diff --git a/libc/rt/mqueue.h b/libc/rt/mqueue.h index 1ccad5bba..b81133033 100644 --- a/libc/rt/mqueue.h +++ b/libc/rt/mqueue.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2004, 2005, 2007 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 @@ -38,37 +38,40 @@ __BEGIN_DECLS argument is taken as `struct mq_attr *', pointer to message queue attributes. If the fourth argument is NULL, default attributes are used. */ -extern mqd_t mq_open (const char *__name, int __oflag, ...) __THROW; +extern mqd_t mq_open (__const char *__name, int __oflag, ...) + __THROW __nonnull ((1)); /* Removes the association between message queue descriptor MQDES and its message queue. */ extern int mq_close (mqd_t __mqdes) __THROW; /* Query status and attributes of message queue MQDES. */ -extern int mq_getattr (mqd_t __mqdes, struct mq_attr *__mqstat) __THROW; +extern int mq_getattr (mqd_t __mqdes, struct mq_attr *__mqstat) + __THROW __nonnull ((2)); /* Set attributes associated with message queue MQDES and if OMQSTAT is not NULL also query its old attributes. */ extern int mq_setattr (mqd_t __mqdes, - const struct mq_attr *__restrict __mqstat, - struct mq_attr *__restrict __omqstat) __THROW; + __const struct mq_attr *__restrict __mqstat, + struct mq_attr *__restrict __omqstat) + __THROW __nonnull ((2)); /* Remove message queue named NAME. */ -extern int mq_unlink (const char *__name) __THROW; +extern int mq_unlink (__const char *__name) __THROW __nonnull ((1)); /* Register notification issued upon message arrival to an empty message queue MQDES. */ -extern int mq_notify (mqd_t __mqdes, const struct sigevent *__notification) +extern int mq_notify (mqd_t __mqdes, __const struct sigevent *__notification) __THROW; /* Receive the oldest from highest priority messages in message queue MQDES. */ extern ssize_t mq_receive (mqd_t __mqdes, char *__msg_ptr, size_t __msg_len, - unsigned int *__msg_prio); + unsigned int *__msg_prio) __nonnull ((2)); /* Add message pointed by MSG_PTR to message queue MQDES. */ -extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len, - unsigned int __msg_prio); +extern int mq_send (mqd_t __mqdes, __const char *__msg_ptr, size_t __msg_len, + unsigned int __msg_prio) __nonnull ((2)); #ifdef __USE_XOPEN2K /* Receive the oldest from highest priority messages in message queue @@ -76,13 +79,15 @@ extern int mq_send (mqd_t __mqdes, const char *__msg_ptr, size_t __msg_len, extern ssize_t mq_timedreceive (mqd_t __mqdes, char *__restrict __msg_ptr, size_t __msg_len, unsigned int *__restrict __msg_prio, - const struct timespec *__restrict __abs_timeout); + __const struct timespec *__restrict __abs_timeout) + __nonnull ((2, 5)); /* Add message pointed by MSG_PTR to message queue MQDES, stop blocking on full message queue if ABS_TIMEOUT expires. */ -extern int mq_timedsend (mqd_t __mqdes, const char *__msg_ptr, +extern int mq_timedsend (mqd_t __mqdes, __const char *__msg_ptr, size_t __msg_len, unsigned int __msg_prio, - const struct timespec *__abs_timeout); + __const struct timespec *__abs_timeout) + __nonnull ((2, 5)); #endif __END_DECLS diff --git a/libc/rt/tst-mqueue1.c b/libc/rt/tst-mqueue1.c index db4065ea9..9c5d940f9 100644 --- a/libc/rt/tst-mqueue1.c +++ b/libc/rt/tst-mqueue1.c @@ -1,5 +1,5 @@ /* Test message queue passing. - Copyright (C) 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2004. @@ -85,7 +85,7 @@ do_one_test (mqd_t q, const char *name, int nonblock) else result |= check_attrs (&attr, nonblock, 0); - if (mq_receive (q, &v[0], 1, NULL) != -1) + if (mq_receive (q, (char *) &v[0], 1, NULL) != -1) { puts ("mq_receive on O_WRONLY mqd_t unexpectedly succeeded"); result = 1; @@ -109,9 +109,9 @@ do_one_test (mqd_t q, const char *name, int nonblock) for (int i = 0; i < 10; ++i) { if (i & 1) - ret = mq_send (q, &v[i], 1, v[i] >> 4); + ret = mq_send (q, (char *) &v[i], 1, v[i] >> 4); else - ret = mq_timedsend (q, &v[i], 1, v[i] >> 4, &ts); + ret = mq_timedsend (q, (char *) &v[i], 1, v[i] >> 4, &ts); if (ret) { @@ -120,7 +120,7 @@ do_one_test (mqd_t q, const char *name, int nonblock) } } - ret = mq_timedsend (q, &v[10], 1, 8, &ts); + ret = mq_timedsend (q, (char *) &v[10], 1, 8, &ts); if (ret != -1) { puts ("mq_timedsend on full queue did not fail"); @@ -135,7 +135,7 @@ do_one_test (mqd_t q, const char *name, int nonblock) if (nonblock) { - ret = mq_send (q, &v[10], 1, 8); + ret = mq_send (q, (char *) &v[10], 1, 8); if (ret != -1) { puts ("mq_send on full non-blocking queue did not fail"); @@ -194,7 +194,7 @@ do_one_test (mqd_t q, const char *name, int nonblock) unsigned int prio; ssize_t rets; - if (mq_send (q, &v[0], 1, 1) != -1) + if (mq_send (q, (char *) &v[0], 1, 1) != -1) { puts ("mq_send on O_RDONLY mqd_t unexpectedly succeeded"); result = 1; @@ -208,9 +208,9 @@ do_one_test (mqd_t q, const char *name, int nonblock) for (int i = 0; i < 10; ++i) { if (i & 1) - rets = mq_receive (q, &vr[i], 1, &prio); + rets = mq_receive (q, (char *) &vr[i], 1, &prio); else - rets = mq_timedreceive (q, &vr[i], 1, &prio, &ts); + rets = mq_timedreceive (q, (char *) &vr[i], 1, &prio, &ts); if (rets != 1) { @@ -236,7 +236,7 @@ do_one_test (mqd_t q, const char *name, int nonblock) result = 1; } - rets = mq_timedreceive (q, &vr[10], 1, &prio, &ts); + rets = mq_timedreceive (q, (char *) &vr[10], 1, &prio, &ts); if (rets != -1) { puts ("mq_timedreceive on empty queue did not fail"); @@ -251,7 +251,7 @@ do_one_test (mqd_t q, const char *name, int nonblock) if (nonblock) { - ret = mq_receive (q, &vr[10], 1, &prio); + ret = mq_receive (q, (char *) &vr[10], 1, &prio); if (ret != -1) { puts ("mq_receive on empty non-blocking queue did not fail"); diff --git a/libc/scripts/data/localplt-x86_64-linux-gnu.data b/libc/scripts/data/localplt-generic.data index 2219aa904..2219aa904 100644 --- a/libc/scripts/data/localplt-x86_64-linux-gnu.data +++ b/libc/scripts/data/localplt-generic.data diff --git a/libc/scripts/data/localplt-powerpc-linux-gnu.data b/libc/scripts/data/localplt-powerpc-linux-gnu.data new file mode 100644 index 000000000..8fb56b608 --- /dev/null +++ b/libc/scripts/data/localplt-powerpc-linux-gnu.data @@ -0,0 +1,7 @@ +libc.so: _Unwind_Find_FDE +libc.so: calloc +libc.so: free +libc.so: malloc +libc.so: memalign +libc.so: realloc +libm.so: matherr diff --git a/libc/shadow/lckpwdf.c b/libc/shadow/lckpwdf.c index 67d9937ac..2770fb5b3 100644 --- a/libc/shadow/lckpwdf.c +++ b/libc/shadow/lckpwdf.c @@ -1,5 +1,5 @@ /* Handle locking of password file. - Copyright (C) 1996,98,2000,02 Free Software Foundation, Inc. + Copyright (C) 1996, 1998, 2000, 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -26,6 +26,8 @@ #include <unistd.h> #include <sys/file.h> +#include <kernel-features.h> + /* Name of the lock file. */ #define PWD_LOCKFILE "/etc/.pwd.lock" @@ -96,20 +98,38 @@ __lckpwdf (void) /* Prevent problems caused by multiple threads. */ __libc_lock_lock (lock); - lock_fd = __open (PWD_LOCKFILE, O_WRONLY | O_CREAT, 0600); + int oflags = O_WRONLY | O_CREAT; +#ifdef O_CLOEXEC + oflags |= O_CLOEXEC; +#endif + lock_fd = __open (PWD_LOCKFILE, oflags, 0600); if (lock_fd == -1) /* Cannot create lock file. */ RETURN_CLOSE_FD (-1); - /* Make sure file gets correctly closed when process finished. */ - flags = __fcntl (lock_fd, F_GETFD, 0); - if (flags == -1) - /* Cannot get file flags. */ - RETURN_CLOSE_FD (-1); - flags |= FD_CLOEXEC; /* Close on exit. */ - if (__fcntl (lock_fd, F_SETFD, flags) < 0) - /* Cannot set new flags. */ - RETURN_CLOSE_FD (-1); +#ifndef __ASSUME_O_CLOEXEC +# ifdef O_CLOEXEC + if (__have_o_cloexec <= 0) +# endif + { + /* Make sure file gets correctly closed when process finished. */ + flags = __fcntl (lock_fd, F_GETFD, 0); + if (flags == -1) + /* Cannot get file flags. */ + RETURN_CLOSE_FD (-1); +# ifdef O_CLOEXEC + if (__have_o_cloexec == 0) + __have_o_cloexec = (flags & FD_CLOEXEC) == 0 ? -1 : 1; + if (__have_o_cloexec < 0) +# endif + { + flags |= FD_CLOEXEC; /* Close on exit. */ + if (__fcntl (lock_fd, F_SETFD, flags) < 0) + /* Cannot set new flags. */ + RETURN_CLOSE_FD (-1); + } + } +#endif /* Now we have to get exclusive write access. Since multiple process could try this we won't stop when it first fails. diff --git a/libc/signal/signal.h b/libc/signal/signal.h index ed39328ef..aa210374d 100644 --- a/libc/signal/signal.h +++ b/libc/signal/signal.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1991-2003, 2004, 2007 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 @@ -339,6 +339,8 @@ extern int sigreturn (struct sigcontext *__scp) __THROW; #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED +# define __need_size_t +# include <stddef.h> /* If INTERRUPT is nonzero, make signal SIG interrupt system calls (causing them to fail with EINTR); if INTERRUPT is zero, make system diff --git a/libc/soft-fp/eqdf2.c b/libc/soft-fp/eqdf2.c index efa769e98..82a885834 100644 --- a/libc/soft-fp/eqdf2.c +++ b/libc/soft-fp/eqdf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 0 iff a == b, 1 otherwise - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com) and Jakub Jelinek (jj@ultra.linux.cz). @@ -32,11 +32,11 @@ #include "soft-fp.h" #include "double.h" -int __eqdf2(DFtype a, DFtype b) +CMPtype __eqdf2(DFtype a, DFtype b) { FP_DECL_EX; FP_DECL_D(A); FP_DECL_D(B); - int r; + CMPtype r; FP_UNPACK_RAW_D(A, a); FP_UNPACK_RAW_D(B, b); diff --git a/libc/soft-fp/eqsf2.c b/libc/soft-fp/eqsf2.c index 7e01c01d2..0a1180f87 100644 --- a/libc/soft-fp/eqsf2.c +++ b/libc/soft-fp/eqsf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 0 iff a == b, 1 otherwise - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com) and Jakub Jelinek (jj@ultra.linux.cz). @@ -32,11 +32,11 @@ #include "soft-fp.h" #include "single.h" -int __eqsf2(SFtype a, SFtype b) +CMPtype __eqsf2(SFtype a, SFtype b) { FP_DECL_EX; FP_DECL_S(A); FP_DECL_S(B); - int r; + CMPtype r; FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S(B, b); diff --git a/libc/soft-fp/eqtf2.c b/libc/soft-fp/eqtf2.c index fd6ffd1eb..46240b735 100644 --- a/libc/soft-fp/eqtf2.c +++ b/libc/soft-fp/eqtf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 0 iff a == b, 1 otherwise - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com) and Jakub Jelinek (jj@ultra.linux.cz). @@ -32,11 +32,11 @@ #include "soft-fp.h" #include "quad.h" -int __eqtf2(TFtype a, TFtype b) +CMPtype __eqtf2(TFtype a, TFtype b) { FP_DECL_EX; FP_DECL_Q(A); FP_DECL_Q(B); - int r; + CMPtype r; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); diff --git a/libc/soft-fp/gedf2.c b/libc/soft-fp/gedf2.c index e0dc8620e..17a0453ad 100644 --- a/libc/soft-fp/gedf2.c +++ b/libc/soft-fp/gedf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com) and Jakub Jelinek (jj@ultra.linux.cz). @@ -32,11 +32,11 @@ #include "soft-fp.h" #include "double.h" -int __gedf2(DFtype a, DFtype b) +CMPtype __gedf2(DFtype a, DFtype b) { FP_DECL_EX; FP_DECL_D(A); FP_DECL_D(B); - int r; + CMPtype r; FP_UNPACK_RAW_D(A, a); FP_UNPACK_RAW_D(B, b); diff --git a/libc/soft-fp/gesf2.c b/libc/soft-fp/gesf2.c index d1f3ba2f9..609a61f31 100644 --- a/libc/soft-fp/gesf2.c +++ b/libc/soft-fp/gesf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com) and Jakub Jelinek (jj@ultra.linux.cz). @@ -32,11 +32,11 @@ #include "soft-fp.h" #include "single.h" -int __gesf2(SFtype a, SFtype b) +CMPtype __gesf2(SFtype a, SFtype b) { FP_DECL_EX; FP_DECL_S(A); FP_DECL_S(B); - int r; + CMPtype r; FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S(B, b); diff --git a/libc/soft-fp/getf2.c b/libc/soft-fp/getf2.c index 82ff283d0..eb52d05a4 100644 --- a/libc/soft-fp/getf2.c +++ b/libc/soft-fp/getf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 0 iff a == b, 1 iff a > b, -2 iff a ? b, -1 iff a < b - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com) and Jakub Jelinek (jj@ultra.linux.cz). @@ -32,11 +32,11 @@ #include "soft-fp.h" #include "quad.h" -int __getf2(TFtype a, TFtype b) +CMPtype __getf2(TFtype a, TFtype b) { FP_DECL_EX; FP_DECL_Q(A); FP_DECL_Q(B); - int r; + CMPtype r; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); diff --git a/libc/soft-fp/ledf2.c b/libc/soft-fp/ledf2.c index 528a9819c..b8ba4400d 100644 --- a/libc/soft-fp/ledf2.c +++ b/libc/soft-fp/ledf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com) and Jakub Jelinek (jj@ultra.linux.cz). @@ -32,11 +32,11 @@ #include "soft-fp.h" #include "double.h" -int __ledf2(DFtype a, DFtype b) +CMPtype __ledf2(DFtype a, DFtype b) { FP_DECL_EX; FP_DECL_D(A); FP_DECL_D(B); - int r; + CMPtype r; FP_UNPACK_RAW_D(A, a); FP_UNPACK_RAW_D(B, b); diff --git a/libc/soft-fp/lesf2.c b/libc/soft-fp/lesf2.c index c564bd953..cb359c910 100644 --- a/libc/soft-fp/lesf2.c +++ b/libc/soft-fp/lesf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com) and Jakub Jelinek (jj@ultra.linux.cz). @@ -32,11 +32,11 @@ #include "soft-fp.h" #include "single.h" -int __lesf2(SFtype a, SFtype b) +CMPtype __lesf2(SFtype a, SFtype b) { FP_DECL_EX; FP_DECL_S(A); FP_DECL_S(B); - int r; + CMPtype r; FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S(B, b); diff --git a/libc/soft-fp/letf2.c b/libc/soft-fp/letf2.c index 35e03aaac..c7d2f8e07 100644 --- a/libc/soft-fp/letf2.c +++ b/libc/soft-fp/letf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 0 iff a == b, 1 iff a > b, 2 iff a ? b, -1 iff a < b - Copyright (C) 1997,1999,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com) and Jakub Jelinek (jj@ultra.linux.cz). @@ -32,11 +32,11 @@ #include "soft-fp.h" #include "quad.h" -int __letf2(TFtype a, TFtype b) +CMPtype __letf2(TFtype a, TFtype b) { FP_DECL_EX; FP_DECL_Q(A); FP_DECL_Q(B); - int r; + CMPtype r; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); diff --git a/libc/soft-fp/soft-fp.h b/libc/soft-fp/soft-fp.h index dbf080e7f..3cc843333 100644 --- a/libc/soft-fp/soft-fp.h +++ b/libc/soft-fp/soft-fp.h @@ -1,5 +1,5 @@ /* Software floating-point emulation. - Copyright (C) 1997,1998,1999,2000,2002,2003,2005,2006 + Copyright (C) 1997,1998,1999,2000,2002,2003,2005,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@cygnus.com), @@ -189,6 +189,10 @@ typedef unsigned int UHWtype __attribute__((mode(HI))); typedef USItype UHWtype; #endif +#ifndef CMPtype +#define CMPtype int +#endif + #define SI_BITS (__CHAR_BIT__ * (int)sizeof(SItype)) #define DI_BITS (__CHAR_BIT__ * (int)sizeof(DItype)) diff --git a/libc/soft-fp/unorddf2.c b/libc/soft-fp/unorddf2.c index c83a56327..5ea63e2b9 100644 --- a/libc/soft-fp/unorddf2.c +++ b/libc/soft-fp/unorddf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 1 iff a or b is a NaN, 0 otherwise. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Joseph Myers (joseph@codesourcery.com). @@ -31,11 +31,10 @@ #include "soft-fp.h" #include "double.h" -int -__unorddf2(DFtype a, DFtype b) +CMPtype __unorddf2(DFtype a, DFtype b) { FP_DECL_D(A); FP_DECL_D(B); - int r; + CMPtype r; FP_UNPACK_RAW_D(A, a); FP_UNPACK_RAW_D(B, b); diff --git a/libc/soft-fp/unordsf2.c b/libc/soft-fp/unordsf2.c index 8de756356..6d0afe853 100644 --- a/libc/soft-fp/unordsf2.c +++ b/libc/soft-fp/unordsf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 1 iff a or b is a NaN, 0 otherwise. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Joseph Myers (joseph@codesourcery.com). @@ -31,12 +31,11 @@ #include "soft-fp.h" #include "single.h" -int -__unordsf2(SFtype a, SFtype b) +CMPtype __unordsf2(SFtype a, SFtype b) { FP_DECL_S(A); FP_DECL_S(B); - int r; + CMPtype r; FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S(B, b); diff --git a/libc/soft-fp/unordtf2.c b/libc/soft-fp/unordtf2.c index 134b1d09b..9d1bd916c 100644 --- a/libc/soft-fp/unordtf2.c +++ b/libc/soft-fp/unordtf2.c @@ -1,6 +1,6 @@ /* Software floating-point emulation. Return 1 iff a or b is a NaN, 0 otherwise. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Joseph Myers (joseph@codesourcery.com). @@ -31,12 +31,11 @@ #include "soft-fp.h" #include "quad.h" -int -__unordtf2(TFtype a, TFtype b) +CMPtype __unordtf2(TFtype a, TFtype b) { FP_DECL_Q(A); FP_DECL_Q(B); - int r; + CMPtype r; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); diff --git a/libc/stdio-common/Makefile b/libc/stdio-common/Makefile index 2796c2743..f818c9134 100644 --- a/libc/stdio-common/Makefile +++ b/libc/stdio-common/Makefile @@ -56,7 +56,8 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \ tst-fseek tst-fmemopen tst-gets \ tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14 \ tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \ - tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 + tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \ + bug19 bug19a tst-popen2 tests-$(OPTION_EGLIBC_LOCALE_CODE) \ += tst-sscanf tst-swprintf bug15 test-vfprintf @@ -84,6 +85,7 @@ OPTION_EGLIBC_LOCALE_CODE-CFLAGS-$(OPTION_EGLIBC_LOCALE_CODE) \ = -DOPTION_EGLIBC_LOCALE_CODE CFLAGS-vfprintf.c = -Wno-uninitialized +CFLAGS-vfwprintf.c = -Wno-uninitialized CFLAGS-tst-printf.c = -Wno-format CFLAGS-tstdiomisc.c = -Wno-format CFLAGS-scanf4.c = -Wno-format @@ -101,6 +103,8 @@ CFLAGS-cuserid.c = -fexceptions CFLAGS-errlist.c = $(fno-unit-at-a-time) CFLAGS-siglist.c = $(fno-unit-at-a-time) +# We know the test has a format string problem. +CFLAGS-tst-sprintf.c = -Wno-format tst-sscanf-ENV = LOCPATH=$(common-objpfx)localedata tst-swprintf-ENV = LOCPATH=$(common-objpfx)localedata test-vfprintf-ENV = LOCPATH=$(common-objpfx)localedata diff --git a/libc/stdio-common/bug18.c b/libc/stdio-common/bug18.c new file mode 100644 index 000000000..2e4c378c1 --- /dev/null +++ b/libc/stdio-common/bug18.c @@ -0,0 +1,48 @@ +#include <assert.h> +#include <errno.h> +#include <stdio.h> + +#ifndef CHAR +# define CHAR char +# define L(str) str +# define SSCANF sscanf +#endif + + +static int +do_test (void) +{ + printf("setting errno to EINTR\n"); + errno = EINTR; + + printf("checking sscanf\n"); + + CHAR str[] = L("7-11"); + int i, j, n; + + i = j = n = 0; + SSCANF (str, L(" %i - %i %n"), &i, &j, &n); + printf ("found %i-%i (length=%i)\n", i, j, n); + + int result = 0; + if (i != 7) + { + printf ("i is %d, expected 7\n", i); + result = 1; + } + if (j != 11) + { + printf ("j is %d, expected 11\n", j); + result = 1; + } + if (n != 4) + { + printf ("n is %d, expected 4\n", j); + result = 1; + } + + return result; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/libc/stdio-common/bug18a.c b/libc/stdio-common/bug18a.c new file mode 100644 index 000000000..663cbf4fb --- /dev/null +++ b/libc/stdio-common/bug18a.c @@ -0,0 +1,6 @@ +#include <wchar.h> +#define CHAR wchar_t +#define L(str) L##str +#define SSCANF swscanf + +#include "bug18.c" diff --git a/libc/stdio-common/bug19.c b/libc/stdio-common/bug19.c new file mode 100644 index 000000000..e083304bd --- /dev/null +++ b/libc/stdio-common/bug19.c @@ -0,0 +1,58 @@ +#include <assert.h> +#include <errno.h> +#include <stdio.h> + +#ifndef CHAR +# define CHAR char +# define L(str) str +# define FPUTS fputs +# define FSCANF fscanf +#endif + + +static int +do_test (void) +{ + FILE *fp = tmpfile (); + if (fp == NULL) + { + puts ("cannot open file"); + return 1; + } + + FPUTS (L("7-11"), fp); + rewind (fp); + + printf("setting errno to EINTR\n"); + errno = EINTR; + + printf("checking sscanf\n"); + + int i, j, n; + + i = j = n = 0; + FSCANF (fp, L(" %i - %i %n"), &i, &j, &n); + printf ("found %i-%i (length=%i)\n", i, j, n); + + int result = 0; + if (i != 7) + { + printf ("i is %d, expected 7\n", i); + result = 1; + } + if (j != 11) + { + printf ("j is %d, expected 11\n", j); + result = 1; + } + if (n != 4) + { + printf ("n is %d, expected 4\n", j); + result = 1; + } + + return result; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/libc/stdio-common/bug19a.c b/libc/stdio-common/bug19a.c new file mode 100644 index 000000000..c72339850 --- /dev/null +++ b/libc/stdio-common/bug19a.c @@ -0,0 +1,7 @@ +#include <wchar.h> +#define CHAR wchar_t +#define L(str) L##str +#define FPUTS fputws +#define FSCANF fwscanf + +#include "bug19.c" diff --git a/libc/stdio-common/printf_fp.c b/libc/stdio-common/printf_fp.c index cadba38c1..5d58cc4ab 100644 --- a/libc/stdio-common/printf_fp.c +++ b/libc/stdio-common/printf_fp.c @@ -996,7 +996,9 @@ ___printf_fp (FILE *fp, if (*wtp != decimalwc) /* Round up. */ (*wtp)++; - else if (__builtin_expect (spec == 'g' && type == 'f' && info->alt, + else if (__builtin_expect (spec == 'g' && type == 'f' && info->alt + && wtp == wstartp + 1 + && wstartp[0] == L'0', 0)) /* This is a special case: the rounded number is 1.0, the format is 'g' or 'G', and the alternative format diff --git a/libc/stdio-common/tempnam.c b/libc/stdio-common/tempnam.c index cd3dd40f9..055604fb7 100644 --- a/libc/stdio-common/tempnam.c +++ b/libc/stdio-common/tempnam.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,1993,1996-1999,2000 Free Software Foundation, Inc. +/* Copyright (C) 1991,1993,1996-2000,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -19,13 +19,13 @@ #include <stdio.h> #include <string.h> -/* Generate a unique temporary filename using up to five characters of PFX - if it is not NULL. The directory to put this file in is searched for - as follows: First the environment variable "TMPDIR" is checked. - If it contains the name of a writable directory, that directory is used. - If not and if DIR is not NULL, that value is checked. If that fails, - P_tmpdir is tried and finally "/tmp". The storage for the filename - is allocated by `malloc'. */ +/* Generate a unique temporary filename using up to five characters of + PFX if it is not NULL. The directory to put this file in is + searched for as follows: First the environment variable "TMPDIR" is + checked. If it contains the name of a directory, that directory is + used. If not and if DIR is not NULL, that value is checked. If + that fails, P_tmpdir is tried and finally "/tmp". The storage for + the filename is allocated by `malloc'. */ char * tempnam (const char *dir, const char *pfx) { @@ -34,7 +34,7 @@ tempnam (const char *dir, const char *pfx) if (__path_search (buf, FILENAME_MAX, dir, pfx, 1)) return NULL; - if (__gen_tempname (buf, __GT_NOCREATE)) + if (__gen_tempname (buf, 0, __GT_NOCREATE)) return NULL; return __strdup (buf); diff --git a/libc/stdio-common/tempname.c b/libc/stdio-common/tempname.c index 60c94d640..2c7bcdee0 100644 --- a/libc/stdio-common/tempname.c +++ b/libc/stdio-common/tempname.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 92, 93, 95-98, 99 Free Software Foundation, Inc. +/* Copyright (C) 1991, 92, 93, 95-98, 99, 2007 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 @@ -47,8 +47,9 @@ stub_warning (__path_search) */ int -__gen_tempname (tmpl, kind) +__gen_tempname (tmpl, flags, kind) char *tmpl; + int flags; int kind; { __set_errno (ENOSYS); diff --git a/libc/stdio-common/tfformat.c b/libc/stdio-common/tfformat.c index d67b3b504..7704ddde3 100644 --- a/libc/stdio-common/tfformat.c +++ b/libc/stdio-common/tfformat.c @@ -4024,6 +4024,21 @@ sprint_double_type sprint_doubles[] = {__LINE__, 1.0, "1.000000e+00", "%e"}, {__LINE__, .9999999999999999, "1.000000e+00", "%e"}, + {__LINE__, 912.98, "913.0", "%#.4g"}, + {__LINE__, 50.999999, "51.000", "%#.5g"}, + {__LINE__, 0.956, "1", "%.1g"}, + {__LINE__, 0.956, "1.", "%#.1g"}, + {__LINE__, 0.996, "1", "%.2g"}, + {__LINE__, 0.996, "1.0", "%#.2g"}, + {__LINE__, 999.98, "1000", "%.4g"}, + {__LINE__, 999.98, "1000.", "%#.4g"}, + {__LINE__, 999.998, "1000", "%.5g"}, + {__LINE__, 999.998, "1000.0", "%#.5g"}, + {__LINE__, 999.9998, "1000", "%g"}, + {__LINE__, 999.9998, "1000.00", "%#g"}, + {__LINE__, 912.98, "913", "%.4g"}, + {__LINE__, 50.999999, "51", "%.5g"}, + {0 } }; diff --git a/libc/stdio-common/tmpfile.c b/libc/stdio-common/tmpfile.c index 41f12bc8b..b90051346 100644 --- a/libc/stdio-common/tmpfile.c +++ b/libc/stdio-common/tmpfile.c @@ -1,5 +1,6 @@ /* Open a stdio stream on an anonymous temporary file. Generic/POSIX version. - Copyright (C) 1991,93,1996-2000,2002,2003 Free Software Foundation, Inc. + Copyright (C) 1991,1993,1996-2000,2002,2003,2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,6 +18,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include <fcntl.h> #include <stdio.h> #include <unistd.h> @@ -28,9 +30,6 @@ # endif #endif -#ifndef GEN_THIS -# define GEN_THIS __GT_FILE -#endif /* This returns a new stream opened on a temporary file (generated by tmpnam). The file is opened with mode "w+b" (binary read/write). @@ -45,7 +44,11 @@ tmpfile (void) if (__path_search (buf, FILENAME_MAX, NULL, "tmpf", 0)) return NULL; - fd = __gen_tempname (buf, GEN_THIS); + int flags = 0; +#ifdef FLAGS + flags = FLAGS; +#endif + fd = __gen_tempname (buf, flags, __GT_FILE); if (fd < 0) return NULL; @@ -59,7 +62,7 @@ tmpfile (void) return f; } -#if defined USE_IN_LIBIO && GEN_THIS == __GT_FILE /* Not for tmpfile64. */ +#if defined USE_IN_LIBIO && !defined FLAGS /* Not for tmpfile64. */ # undef tmpfile # include <shlib-compat.h> versioned_symbol (libc, __new_tmpfile, tmpfile, GLIBC_2_1); diff --git a/libc/stdio-common/tmpfile64.c b/libc/stdio-common/tmpfile64.c index b265aeee5..ead3f50fb 100644 --- a/libc/stdio-common/tmpfile64.c +++ b/libc/stdio-common/tmpfile64.c @@ -1,3 +1,3 @@ -#define GEN_THIS __GT_BIGFILE -#define tmpfile tmpfile64 +#define FLAGS O_LARGEFILE +#define tmpfile tmpfile64 #include <tmpfile.c> diff --git a/libc/stdio-common/tmpnam.c b/libc/stdio-common/tmpnam.c index 6b26f4fff..f1c16446d 100644 --- a/libc/stdio-common/tmpnam.c +++ b/libc/stdio-common/tmpnam.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,1993,1996-1999,2000 Free Software Foundation, Inc. +/* Copyright (C) 1991,1993,1996-1999,2000,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -39,7 +39,7 @@ tmpnam (char *s) 0)) return NULL; - if (__builtin_expect (__gen_tempname (tmpbuf, __GT_NOCREATE), 0)) + if (__builtin_expect (__gen_tempname (tmpbuf, 0, __GT_NOCREATE), 0)) return NULL; if (s == NULL) diff --git a/libc/stdio-common/tmpnam_r.c b/libc/stdio-common/tmpnam_r.c index 565a42401..60c42866a 100644 --- a/libc/stdio-common/tmpnam_r.c +++ b/libc/stdio-common/tmpnam_r.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,1993,1996-1999,2000 Free Software Foundation, Inc. +/* Copyright (C) 1991,1993,1996-1999,2000,2007 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,7 +28,7 @@ tmpnam_r (char *s) if (__path_search (s, L_tmpnam, NULL, NULL, 0)) return NULL; - if (__gen_tempname (s, __GT_NOCREATE)) + if (__gen_tempname (s, 0, __GT_NOCREATE)) return NULL; return s; diff --git a/libc/stdio-common/tst-fmemopen2.c b/libc/stdio-common/tst-fmemopen2.c index 81bedddde..c2a4baace 100644 --- a/libc/stdio-common/tst-fmemopen2.c +++ b/libc/stdio-common/tst-fmemopen2.c @@ -28,7 +28,7 @@ do_test (void) o = ftello (fp); if (o != 0) { - printf ("second ftello returned %ld, expected %zu\n", o, (off_t) 0); + printf ("second ftello returned %ld, expected 0\n", o); result = 1; } if (fseeko (fp, 0, SEEK_END) != 0) diff --git a/libc/stdio-common/tst-popen2.c b/libc/stdio-common/tst-popen2.c new file mode 100644 index 000000000..0ab151c59 --- /dev/null +++ b/libc/stdio-common/tst-popen2.c @@ -0,0 +1,92 @@ +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +static int +do_test (void) +{ + int fd = dup (fileno (stdout)); + if (fd <= 1) + { + puts ("dup failed"); + return 1; + } + + FILE *f1 = fdopen (fd, "w"); + if (f1 == NULL) + { + printf ("fdopen failed: %m\n"); + return 1; + } + + fclose (stdout); + + FILE *f2 = popen ("echo test1", "r"); + if (f2 == NULL) + { + fprintf (f1, "1st popen failed: %m\n"); + return 1; + } + FILE *f3 = popen ("echo test2", "r"); + if (f2 == NULL || f3 == NULL) + { + fprintf (f1, "2nd popen failed: %m\n"); + return 1; + } + + char *line = NULL; + size_t len = 0; + int result = 0; + if (getline (&line, &len, f2) != 6) + { + fputs ("could not read line from 1st popen\n", f1); + result = 1; + } + else if (strcmp (line, "test1\n") != 0) + { + fprintf (f1, "read \"%s\"\n", line); + result = 1; + } + + if (getline (&line, &len, f2) != -1) + { + fputs ("second getline did not return -1\n", f1); + result = 1; + } + + if (getline (&line, &len, f3) != 6) + { + fputs ("could not read line from 2nd popen\n", f1); + result = 1; + } + else if (strcmp (line, "test2\n") != 0) + { + fprintf (f1, "read \"%s\"\n", line); + result = 1; + } + + if (getline (&line, &len, f3) != -1) + { + fputs ("second getline did not return -1\n", f1); + result = 1; + } + + int ret = pclose (f2); + if (ret != 0) + { + fprintf (f1, "1st pclose returned %d\n", ret); + result = 1; + } + + ret = pclose (f3); + if (ret != 0) + { + fprintf (f1, "2nd pclose returned %d\n", ret); + result = 1; + } + + return result; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/libc/stdio-common/tst-sprintf2.c b/libc/stdio-common/tst-sprintf2.c index 9024b5878..422278dd6 100644 --- a/libc/stdio-common/tst-sprintf2.c +++ b/libc/stdio-common/tst-sprintf2.c @@ -1,14 +1,24 @@ #include <float.h> #include <math.h> #include <stdio.h> +#include <string.h> int main (void) { - volatile union { long double l; long long x[2]; } u; +#if LDBL_MANT_DIG >= 106 + volatile union { long double l; long long x[2]; } u, v; char buf[64]; +#endif int result = 0; +#if LDBL_MANT_DIG == 106 || LDBL_MANT_DIG == 113 +# define COMPARE_LDBL(u, v) \ + ((u).l == (v).l && (u).x[0] == (v).x[0] && (u).x[1] == (v).x[1]) +#else +# define COMPARE_LDBL(u, v) ((u).l == (v).l) +#endif + #define TEST(val) \ do \ { \ @@ -19,6 +29,12 @@ main (void) printf ("Error on line %d: %s != %s\n", __LINE__, buf, #val); \ result = 1; \ } \ + if (sscanf (#val, "%La", &v.l) != 1 || !COMPARE_LDBL (u, v)) \ + { \ + printf ("Error sscanf on line %d: %La != %La\n", __LINE__, \ + u.l, v.l); \ + result = 1; \ + } \ /* printf ("%s %La %016Lx %016Lx\n", #val, u.l, u.x[0], u.x[1]); */ \ } \ while (0) @@ -54,6 +70,15 @@ main (void) TEST (0x1.23456789abcdef123456789abc8p+64L); TEST (0x1.23456789abcde7123456789abc8p+64L); TEST (0x1.123456789abcdef123456789p-969L); +# if LDBL_MANT_DIG == 106 + TEST (-0x1.2d71957cc1263bbbeb1d365f1e8p-969L); + TEST (0x1.23456789abcdef0123456789abp-970L); + TEST (0x1.579bde02468acp-1001L); + TEST (0x0.abcdef0123456p-1022L); + TEST (0x1.abcdef0123456p-1022L); + TEST (0x1.abcdef012345678p-1014L); + TEST (0x1.abcdef0123456f8p-1014L); +# endif #endif return result; } diff --git a/libc/stdio-common/vfprintf.c b/libc/stdio-common/vfprintf.c index 25edde751..fae0f7464 100644 --- a/libc/stdio-common/vfprintf.c +++ b/libc/stdio-common/vfprintf.c @@ -1298,7 +1298,7 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) memset (&mbstate, '\0', sizeof (mbstate_t)); /* Find the first format specifier. */ - f = lead_str_end = __find_specmb (format, &mbstate); + f = lead_str_end = __find_specmb ((const UCHAR_T *) format, &mbstate); #endif /* Lock stream. */ diff --git a/libc/stdio-common/vfscanf.c b/libc/stdio-common/vfscanf.c index b1469b9a9..9e6daced5 100644 --- a/libc/stdio-common/vfscanf.c +++ b/libc/stdio-common/vfscanf.c @@ -530,12 +530,17 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr, { /* Eat whitespace. */ int save_errno = errno; - errno = 0; + __set_errno (0); do - if (__builtin_expect (inchar () == EOF && errno == EINTR, 0)) + /* We add the additional test for EOF here since otherwise + inchar will restore the old errno value which might be + EINTR but does not indicate an interrupt since nothing + was read at this time. */ + if (__builtin_expect ((c == EOF || inchar () == EOF) + && errno == EINTR, 0)) input_error (); while (ISSPACE (c)); - errno = save_errno; + __set_errno (save_errno); ungetc (c, s); skip_space = 0; } diff --git a/libc/stdlib/Makefile b/libc/stdlib/Makefile index e93ffcbc6..68be3f5b7 100644 --- a/libc/stdlib/Makefile +++ b/libc/stdlib/Makefile @@ -75,7 +75,7 @@ tests := tst-strtol tst-strtod testmb testrand testsort testdiv \ tst-limits tst-rand48 bug-strtod tst-setcontext \ test-a64l tst-qsort tst-system testmb2 bug-strtod2 \ tst-atof1 tst-atof2 tst-strtod2 tst-rand48-2 \ - tst-makecontext tst-strtod4 + tst-makecontext tst-strtod4 tst-strtod5 tests-$(OPTION_EGLIBC_LOCALE_CODE) \ += tst-strtod3 include ../Makeconfig @@ -123,6 +123,7 @@ test-canon-ARGS = --test-dir=${common-objpfx}stdlib tst-strtod-ENV = LOCPATH=$(common-objpfx)localedata tst-strtod3-ENV = LOCPATH=$(common-objpfx)localedata tst-strtod4-ENV = LOCPATH=$(common-objpfx)localedata +tst-strtod5-ENV = LOCPATH=$(common-objpfx)localedata testmb2-ENV = LOCPATH=$(common-objpfx)localedata # Run a test on the header files we use. diff --git a/libc/stdlib/bits/stdlib-ldbl.h b/libc/stdlib/bits/stdlib-ldbl.h index b197c5754..d48e1f700 100644 --- a/libc/stdlib/bits/stdlib-ldbl.h +++ b/libc/stdlib/bits/stdlib-ldbl.h @@ -1,5 +1,5 @@ /* -mlong-double-64 compatibility mode for <stdlib.h> functions. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 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,8 +31,6 @@ __END_NAMESPACE_C99 __LDBL_REDIR1_DECL (strtold_l, strtod_l) #endif -__LDBL_REDIR1_DECL (__strtold_internal, __strtod_internal) - #if defined __USE_SVID || defined __USE_XOPEN_EXTENDED # ifdef __USE_MISC __LDBL_REDIR1_DECL (qecvt, ecvt) diff --git a/libc/stdlib/stdlib.h b/libc/stdlib/stdlib.h index aa5f514ca..d405cbf7b 100644 --- a/libc/stdlib/stdlib.h +++ b/libc/stdlib/stdlib.h @@ -273,125 +273,7 @@ extern long double strtold_l (__const char *__restrict __nptr, #endif /* GNU */ -/* The internal entry points for `strtoX' take an extra flag argument - saying whether or not to parse locale-dependent number grouping. */ - -extern double __strtod_internal (__const char *__restrict __nptr, - char **__restrict __endptr, int __group) - __THROW __nonnull ((1)) __wur; -extern float __strtof_internal (__const char *__restrict __nptr, - char **__restrict __endptr, int __group) - __THROW __nonnull ((1)) __wur; -extern long double __strtold_internal (__const char *__restrict __nptr, - char **__restrict __endptr, - int __group) - __THROW __nonnull ((1)) __wur; -#ifndef __strtol_internal_defined -extern long int __strtol_internal (__const char *__restrict __nptr, - char **__restrict __endptr, - int __base, int __group) - __THROW __nonnull ((1)) __wur; -# define __strtol_internal_defined 1 -#endif -#ifndef __strtoul_internal_defined -extern unsigned long int __strtoul_internal (__const char *__restrict __nptr, - char **__restrict __endptr, - int __base, int __group) - __THROW __nonnull ((1)) __wur; -# define __strtoul_internal_defined 1 -#endif -#if defined __GNUC__ || defined __USE_ISOC99 -# ifndef __strtoll_internal_defined -__extension__ -extern long long int __strtoll_internal (__const char *__restrict __nptr, - char **__restrict __endptr, - int __base, int __group) - __THROW __nonnull ((1)) __wur; -# define __strtoll_internal_defined 1 -# endif -# ifndef __strtoull_internal_defined -__extension__ -extern unsigned long long int __strtoull_internal (__const char * - __restrict __nptr, - char **__restrict __endptr, - int __base, int __group) - __THROW __nonnull ((1)) __wur; -# define __strtoull_internal_defined 1 -# endif -#endif /* GCC */ - #ifdef __USE_EXTERN_INLINES -/* Define inline functions which call the internal entry points. */ - -__BEGIN_NAMESPACE_STD -__extern_inline double -__NTH (strtod (__const char *__restrict __nptr, char **__restrict __endptr)) -{ - return __strtod_internal (__nptr, __endptr, 0); -} -__extern_inline long int -__NTH (strtol (__const char *__restrict __nptr, char **__restrict __endptr, - int __base)) -{ - return __strtol_internal (__nptr, __endptr, __base, 0); -} -__extern_inline unsigned long int -__NTH (strtoul (__const char *__restrict __nptr, char **__restrict __endptr, - int __base)) -{ - return __strtoul_internal (__nptr, __endptr, __base, 0); -} -__END_NAMESPACE_STD - -# ifdef __USE_ISOC99 -__BEGIN_NAMESPACE_C99 -__extern_inline float -__NTH (strtof (__const char *__restrict __nptr, char **__restrict __endptr)) -{ - return __strtof_internal (__nptr, __endptr, 0); -} -# ifndef __LDBL_COMPAT -__extern_inline long double -__NTH (strtold (__const char *__restrict __nptr, char **__restrict __endptr)) -{ - return __strtold_internal (__nptr, __endptr, 0); -} -# endif -__END_NAMESPACE_C99 -# endif - -# ifdef __USE_BSD -__extension__ __extern_inline long long int -__NTH (strtoq (__const char *__restrict __nptr, char **__restrict __endptr, - int __base)) -{ - return __strtoll_internal (__nptr, __endptr, __base, 0); -} -__extension__ __extern_inline unsigned long long int -__NTH (strtouq (__const char *__restrict __nptr, char **__restrict __endptr, - int __base)) -{ - return __strtoull_internal (__nptr, __endptr, __base, 0); -} -# endif - -# if defined __USE_MISC || defined __USE_ISOC99 -__BEGIN_NAMESPACE_C99 -__extension__ __extern_inline long long int -__NTH (strtoll (__const char *__restrict __nptr, char **__restrict __endptr, - int __base)) -{ - return __strtoll_internal (__nptr, __endptr, __base, 0); -} -__extension__ __extern_inline unsigned long long int -__NTH (strtoull (__const char * __restrict __nptr, char **__restrict __endptr, - int __base)) -{ - return __strtoull_internal (__nptr, __endptr, __base, 0); -} -__END_NAMESPACE_C99 -# endif - __BEGIN_NAMESPACE_STD __extern_inline double __NTH (atof (__const char *__nptr)) @@ -597,8 +479,11 @@ __END_NAMESPACE_STD __BEGIN_NAMESPACE_STD /* Re-allocate the previously allocated block in PTR, making the new block SIZE bytes long. */ +/* __attribute_malloc__ is not used, because if realloc returns + the same pointer that was passed to it, aliasing needs to be allowed + between objects pointed by the old and new pointers. */ extern void *realloc (void *__ptr, size_t __size) - __THROW __attribute_malloc__ __attribute_warn_unused_result__; + __THROW __attribute_warn_unused_result__; /* Free a block allocated by `malloc', `realloc' or `calloc'. */ extern void free (void *__ptr) __THROW; __END_NAMESPACE_STD @@ -729,6 +614,28 @@ extern int mkstemp64 (char *__template) __nonnull ((1)) __wur; extern char *mkdtemp (char *__template) __THROW __nonnull ((1)) __wur; #endif +#ifdef __USE_GNU +/* Generate a unique temporary file name from TEMPLATE similar to + mkstemp. But allow the caller to pass additional flags which are + used in the open call to create the file.. + + This function is a possible cancellation points and therefore not + marked with __THROW. */ +# ifndef __USE_FILE_OFFSET64 +extern int mkostemp (char *__template, int __flags) __nonnull ((1)) __wur; +# else +# ifdef __REDIRECT +extern int __REDIRECT (mkostemp, (char *__template, int __flags), mkostemp64) + __nonnull ((1)) __wur; +# else +# define mkostemp mkostemp64 +# endif +# endif +# ifdef __USE_LARGEFILE64 +extern int mkostemp64 (char *__template, int __flags) __nonnull ((1)) __wur; +# endif +#endif + __BEGIN_NAMESPACE_STD /* Execute the given line as a shell command. diff --git a/libc/stdlib/strtod.c b/libc/stdlib/strtod.c index d124bcdcd..0921724db 100644 --- a/libc/stdlib/strtod.c +++ b/libc/stdlib/strtod.c @@ -1,6 +1,6 @@ /* Read decimal floating point numbers. This file is part of the GNU C Library. - Copyright (C) 1995-2002, 2003, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2002,2003,2004,2006,2007 Free Software Foundation, Inc. Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. The GNU C Library is free software; you can redistribute it and/or @@ -69,6 +69,9 @@ STRTOF (nptr, endptr) { return INTERNAL(STRTOF_L) (nptr, endptr, 0, _NL_CURRENT_LOCALE); } +#if defined _LIBC +libc_hidden_def (STRTOF) +#endif #ifdef LONG_DOUBLE_COMPAT # if LONG_DOUBLE_COMPAT(libc, GLIBC_2_0) diff --git a/libc/stdlib/strtod_l.c b/libc/stdlib/strtod_l.c index 4033e3bef..86b408e1f 100644 --- a/libc/stdlib/strtod_l.c +++ b/libc/stdlib/strtod_l.c @@ -700,7 +700,8 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) #endif /* If TP is at the start of the digits, there was no correctly grouped prefix of the string; so no number found. */ - RETURN (0.0, tp == start_of_digits ? (base == 16 ? cp - 1 : nptr) : tp); + RETURN (negative ? -0.0 : 0.0, + tp == start_of_digits ? (base == 16 ? cp - 1 : nptr) : tp); } /* Remember first significant digit and read following characters until the @@ -759,7 +760,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) if (tp < startp) /* The number is validly grouped, but consists only of zeroes. The whole value is zero. */ - RETURN (0.0, tp); + RETURN (negative ? -0.0 : 0.0, tp); /* Recompute DIG_NO so we won't read more digits than are properly grouped. */ @@ -862,7 +863,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc) { /* Overflow or underflow. */ __set_errno (ERANGE); - result = (exp_negative ? 0.0 : + result = (exp_negative ? (negative ? -0.0 : 0.0) : negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL); } @@ -1598,6 +1599,10 @@ __STRTOF (nptr, endptr, loc) { return ____STRTOF_INTERNAL (nptr, endptr, 0, loc); } +#if defined _LIBC +libc_hidden_def (__STRTOF) +libc_hidden_ver (__STRTOF, STRTOF) +#endif weak_alias (__STRTOF, STRTOF) #ifdef LONG_DOUBLE_COMPAT diff --git a/libc/stdlib/strtol.c b/libc/stdlib/strtol.c index 02ec19aab..e90c51cc5 100644 --- a/libc/stdlib/strtol.c +++ b/libc/stdlib/strtol.c @@ -1,5 +1,5 @@ /* Convert string representation of a number into an integer value. - Copyright (C) 1991,92,94,95,96,97,98,99,2000,2001,2002,2003,2004 + Copyright (C) 1991,92,94,95,96,97,98,99,2000,2001,2002,2003,2004,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -109,3 +109,4 @@ strtol (nptr, endptr, base) { return INTERNAL (__strtol_l) (nptr, endptr, base, 0, _NL_CURRENT_LOCALE); } +libc_hidden_def (strtol) diff --git a/libc/stdlib/strtol_l.c b/libc/stdlib/strtol_l.c index e02a2747d..ba0aba791 100644 --- a/libc/stdlib/strtol_l.c +++ b/libc/stdlib/strtol_l.c @@ -1,5 +1,5 @@ /* Convert string representing a number to integer value, using given locale. - Copyright (C) 1997, 2002, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 1997, 2002, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -561,4 +561,5 @@ __strtol_l (nptr, endptr, base, loc) { return INTERNAL (__strtol_l) (nptr, endptr, base, 0, loc); } +libc_hidden_def (__strtol_l) weak_alias (__strtol_l, strtol_l) diff --git a/libc/stdlib/strtold.c b/libc/stdlib/strtold.c index 1f56deaa0..da9f92797 100644 --- a/libc/stdlib/strtold.c +++ b/libc/stdlib/strtold.c @@ -1,6 +1,6 @@ /* Read decimal floating point numbers. This file is part of the GNU C Library. - Copyright (C) 1995-2002, 2003, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2002,2003,2004,2006,2007 Free Software Foundation, Inc. Contributed by Ulrich Drepper <drepper@gnu.org>, 1995. The GNU C Library is free software; you can redistribute it and/or @@ -33,6 +33,8 @@ long double ____new_wcstold_internal (const wchar_t *, wchar_t **, int); long double __new_wcstold (const wchar_t *, wchar_t **); libc_hidden_proto (____new_strtold_internal) libc_hidden_proto (____new_wcstold_internal) +libc_hidden_proto (__new_strtold) +libc_hidden_proto (__new_wcstold) #else # define NEW(x) x #endif diff --git a/libc/stdlib/strtold_l.c b/libc/stdlib/strtold_l.c index 690a8a92e..2a7770799 100644 --- a/libc/stdlib/strtold_l.c +++ b/libc/stdlib/strtold_l.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2002, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2002, 2004, 2007 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,6 +20,10 @@ #include <stdlib.h> #include <xlocale.h> +#if defined _LIBC || defined HAVE_WCHAR_H +# include <wchar.h> +#endif + #ifdef USE_WIDE_CHAR # define STRING_TYPE wchar_t # define STRTOLD wcstold_l @@ -55,4 +59,8 @@ __STRTOLD (const STRING_TYPE *nptr, STRING_TYPE **endptr, __locale_t loc) { return INTERNAL (__STRTOD) (nptr, endptr, 0, loc); } +#if defined _LIBC +libc_hidden_def (__STRTOLD) +libc_hidden_ver (__STRTOLD, STRTOLD) +#endif weak_alias (__STRTOLD, STRTOLD) diff --git a/libc/stdlib/tst-strtod2.c b/libc/stdlib/tst-strtod2.c index 30d8d9df6..a7df82ebb 100644 --- a/libc/stdlib/tst-strtod2.c +++ b/libc/stdlib/tst-strtod2.c @@ -32,7 +32,7 @@ do_test (void) } if (ep != tests[i].str + tests[i].offset) { - printf ("test %zu strtod parsed %ju characters, expected %zu\n", + printf ("test %zu strtod parsed %tu characters, expected %zu\n", i, ep - tests[i].str, tests[i].offset); status = 1; } diff --git a/libc/stdlib/tst-strtod5.c b/libc/stdlib/tst-strtod5.c new file mode 100644 index 000000000..337c74698 --- /dev/null +++ b/libc/stdlib/tst-strtod5.c @@ -0,0 +1,88 @@ +#include <locale.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <math.h> + +#define NBSP "\xc2\xa0" + +static const struct +{ + const char *in; + int group; + double expected; +} tests[] = + { + { "0", 0, 0.0 }, + { "000", 0, 0.0 }, + { "-0", 0, -0.0 }, + { "-000", 0, -0.0 }, + { "0,", 0, 0.0 }, + { "-0,", 0, -0.0 }, + { "0,0", 0, 0.0 }, + { "-0,0", 0, -0.0 }, + { "0e-10", 0, 0.0 }, + { "-0e-10", 0, -0.0 }, + { "0,e-10", 0, 0.0 }, + { "-0,e-10", 0, -0.0 }, + { "0,0e-10", 0, 0.0 }, + { "-0,0e-10", 0, -0.0 }, + { "0e-1000000", 0, 0.0 }, + { "-0e-1000000", 0, -0.0 }, + { "0,0e-1000000", 0, 0.0 }, + { "-0,0e-1000000", 0, -0.0 }, + { "0", 1, 0.0 }, + { "000", 1, 0.0 }, + { "-0", 1, -0.0 }, + { "-000", 1, -0.0 }, + { "0e-10", 1, 0.0 }, + { "-0e-10", 1, -0.0 }, + { "0e-1000000", 1, 0.0 }, + { "-0e-1000000", 1, -0.0 }, + { "000"NBSP"000"NBSP"000", 1, 0.0 }, + { "-000"NBSP"000"NBSP"000", 1, -0.0 } + }; +#define NTESTS (sizeof (tests) / sizeof (tests[0])) + + +static int +do_test (void) +{ + if (setlocale (LC_ALL, "cs_CZ.UTF-8") == NULL) + { + puts ("could not set locale"); + return 1; + } + + int status = 0; + + for (int i = 0; i < NTESTS; ++i) + { + char *ep; + double r; + + if (tests[i].group) + r = __strtod_internal (tests[i].in, &ep, 1); + else + r = strtod (tests[i].in, &ep); + + if (*ep != '\0') + { + printf ("%d: got rest string \"%s\", expected \"\"\n", i, ep); + status = 1; + } + + if (r != tests[i].expected + || copysign (10.0, r) != copysign (10.0, tests[i].expected)) + { + printf ("%d: got wrong results %g, expected %g\n", + i, r, tests[i].expected); + status = 1; + } + } + + return status; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/libc/string/strfry.c b/libc/string/strfry.c index a8b202d17..d392d5526 100644 --- a/libc/string/strfry.c +++ b/libc/string/strfry.c @@ -42,7 +42,7 @@ strfry (char *string) { int32_t j; __random_r (&rdata, &j); - j = j % len + 1; + j = j % (len - i) + i; char c = string[i]; string[i] = string[j]; diff --git a/libc/string/strtok.c b/libc/string/strtok.c index f45b760f7..9d6bb0677 100644 --- a/libc/string/strtok.c +++ b/libc/string/strtok.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1991,1996,1997,1999,2000,2001 Free Software Foundation, Inc. +/* Copyright (C) 1991,1996,1997,1999,2000,2001,2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -30,7 +31,7 @@ static char *olds; x = strtok(s, "-"); // x = "abc" x = strtok(NULL, "-="); // x = "def" x = strtok(NULL, "="); // x = NULL - // s = "abc\0-def\0" + // s = "abc\0=-def\0" */ char * strtok (s, delim) diff --git a/libc/sunrpc/key_prot.c b/libc/sunrpc/key_prot.c index 56a541469..63d253895 100644 --- a/libc/sunrpc/key_prot.c +++ b/libc/sunrpc/key_prot.c @@ -115,7 +115,7 @@ xdr_unixcred (XDR * xdrs, unixcred * objp) return FALSE; if (!INTUSE(xdr_u_int) (xdrs, &objp->gid)) return FALSE; - if (!INTUSE(xdr_array) (xdrs, (char **) &objp->gids.gids_val, + if (!INTUSE(xdr_array) (xdrs, (void *) &objp->gids.gids_val, (u_int *) & objp->gids.gids_len, MAXGIDS, sizeof (u_int), (xdrproc_t) INTUSE(xdr_u_int))) return FALSE; diff --git a/libc/sunrpc/rpc_cmsg.c b/libc/sunrpc/rpc_cmsg.c index dea07536a..9a7568b55 100644 --- a/libc/sunrpc/rpc_cmsg.c +++ b/libc/sunrpc/rpc_cmsg.c @@ -67,27 +67,27 @@ xdr_callmsg (XDR *xdrs, struct rpc_msg *cmsg) + RNDUP (cmsg->rm_call.cb_verf.oa_length)); if (buf != NULL) { - IXDR_PUT_LONG (buf, cmsg->rm_xid); - IXDR_PUT_ENUM (buf, cmsg->rm_direction); + (void) IXDR_PUT_LONG (buf, cmsg->rm_xid); + (void) IXDR_PUT_ENUM (buf, cmsg->rm_direction); if (cmsg->rm_direction != CALL) return FALSE; - IXDR_PUT_LONG (buf, cmsg->rm_call.cb_rpcvers); + (void) IXDR_PUT_LONG (buf, cmsg->rm_call.cb_rpcvers); if (cmsg->rm_call.cb_rpcvers != RPC_MSG_VERSION) return FALSE; - IXDR_PUT_LONG (buf, cmsg->rm_call.cb_prog); - IXDR_PUT_LONG (buf, cmsg->rm_call.cb_vers); - IXDR_PUT_LONG (buf, cmsg->rm_call.cb_proc); + (void) IXDR_PUT_LONG (buf, cmsg->rm_call.cb_prog); + (void) IXDR_PUT_LONG (buf, cmsg->rm_call.cb_vers); + (void) IXDR_PUT_LONG (buf, cmsg->rm_call.cb_proc); oa = &cmsg->rm_call.cb_cred; - IXDR_PUT_ENUM (buf, oa->oa_flavor); - IXDR_PUT_INT32 (buf, oa->oa_length); + (void) IXDR_PUT_ENUM (buf, oa->oa_flavor); + (void) IXDR_PUT_INT32 (buf, oa->oa_length); if (oa->oa_length) { memcpy ((caddr_t) buf, oa->oa_base, oa->oa_length); buf = (int32_t *) ((char *) buf + RNDUP (oa->oa_length)); } oa = &cmsg->rm_call.cb_verf; - IXDR_PUT_ENUM (buf, oa->oa_flavor); - IXDR_PUT_INT32 (buf, oa->oa_length); + (void) IXDR_PUT_ENUM (buf, oa->oa_flavor); + (void) IXDR_PUT_INT32 (buf, oa->oa_length); if (oa->oa_length) { memcpy ((caddr_t) buf, oa->oa_base, oa->oa_length); diff --git a/libc/sysdeps/generic/_G_config.h b/libc/sysdeps/generic/_G_config.h index a152b070c..4aafe65f6 100644 --- a/libc/sysdeps/generic/_G_config.h +++ b/libc/sysdeps/generic/_G_config.h @@ -8,19 +8,15 @@ #include <bits/types.h> #define __need_size_t -#define __need_wchar_t -#define __need_wint_t +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T +# define __need_wchar_t +#endif #define __need_NULL #include <stddef.h> -#ifndef _WINT_T -/* Integral type unchanged by default argument promotions that can - hold any value corresponding to members of the extended character - set, as well as at least one value that does not correspond to any - member of the extended character set. */ -# define _WINT_T -typedef unsigned int wint_t; -#endif #define __need_mbstate_t +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T +# define __need_wint_t +#endif #include <wchar.h> #define _G_size_t size_t typedef struct @@ -41,7 +37,8 @@ typedef struct #define _G_wchar_t wchar_t #define _G_wint_t wint_t #define _G_stat64 stat -#include <gconv.h> +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T +# include <gconv.h> typedef union { struct __gconv_info __cd; @@ -51,6 +48,7 @@ typedef union struct __gconv_step_data __data; } __combined; } _G_iconv_t; +#endif typedef int _G_int16_t __attribute__ ((__mode__ (__HI__))); typedef int _G_int32_t __attribute__ ((__mode__ (__SI__))); diff --git a/libc/sysdeps/generic/inttypes.h b/libc/sysdeps/generic/inttypes.h index 3f1b316c0..bf0fffa5c 100644 --- a/libc/sysdeps/generic/inttypes.h +++ b/libc/sysdeps/generic/inttypes.h @@ -323,13 +323,11 @@ extern uintmax_t wcstoumax (__const __gwchar_t *__restrict __nptr, # if __WORDSIZE == 64 -/* Like `strtol' but convert to `intmax_t'. */ -# ifndef __strtol_internal_defined extern long int __strtol_internal (__const char *__restrict __nptr, char **__restrict __endptr, - int __base, int __group) __THROW; -# define __strtol_internal_defined 1 -# endif + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `strtol' but convert to `intmax_t'. */ __extern_inline intmax_t __NTH (strtoimax (__const char *__restrict nptr, char **__restrict endptr, int base)) @@ -337,14 +335,12 @@ __NTH (strtoimax (__const char *__restrict nptr, char **__restrict endptr, return __strtol_internal (nptr, endptr, base, 0); } -/* Like `strtoul' but convert to `uintmax_t'. */ -# ifndef __strtoul_internal_defined extern unsigned long int __strtoul_internal (__const char * __restrict __nptr, char ** __restrict __endptr, - int __base, int __group) __THROW; -# define __strtoul_internal_defined 1 -# endif + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `strtoul' but convert to `uintmax_t'. */ __extern_inline uintmax_t __NTH (strtoumax (__const char *__restrict nptr, char **__restrict endptr, int base)) @@ -352,13 +348,11 @@ __NTH (strtoumax (__const char *__restrict nptr, char **__restrict endptr, return __strtoul_internal (nptr, endptr, base, 0); } -/* Like `wcstol' but convert to `intmax_t'. */ -# ifndef __wcstol_internal_defined extern long int __wcstol_internal (__const __gwchar_t * __restrict __nptr, __gwchar_t **__restrict __endptr, - int __base, int __group) __THROW; -# define __wcstol_internal_defined 1 -# endif + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `wcstol' but convert to `intmax_t'. */ __extern_inline intmax_t __NTH (wcstoimax (__const __gwchar_t *__restrict nptr, __gwchar_t **__restrict endptr, int base)) @@ -366,16 +360,13 @@ __NTH (wcstoimax (__const __gwchar_t *__restrict nptr, return __wcstol_internal (nptr, endptr, base, 0); } - -/* Like `wcstoul' but convert to `uintmax_t'. */ -# ifndef __wcstoul_internal_defined extern unsigned long int __wcstoul_internal (__const __gwchar_t * __restrict __nptr, __gwchar_t ** __restrict __endptr, - int __base, int __group) __THROW; -# define __wcstoul_internal_defined 1 -# endif + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `wcstoul' but convert to `uintmax_t'. */ __extern_inline uintmax_t __NTH (wcstoumax (__const __gwchar_t *__restrict nptr, __gwchar_t **__restrict endptr, int base)) @@ -385,14 +376,12 @@ __NTH (wcstoumax (__const __gwchar_t *__restrict nptr, # else /* __WORDSIZE == 32 */ -/* Like `strtol' but convert to `intmax_t'. */ -# ifndef __strtoll_internal_defined __extension__ extern long long int __strtoll_internal (__const char *__restrict __nptr, char **__restrict __endptr, - int __base, int __group) __THROW; -# define __strtoll_internal_defined 1 -# endif + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `strtol' but convert to `intmax_t'. */ __extern_inline intmax_t __NTH (strtoimax (__const char *__restrict nptr, char **__restrict endptr, int base)) @@ -400,17 +389,15 @@ __NTH (strtoimax (__const char *__restrict nptr, char **__restrict endptr, return __strtoll_internal (nptr, endptr, base, 0); } -/* Like `strtoul' but convert to `uintmax_t'. */ -# ifndef __strtoull_internal_defined __extension__ extern unsigned long long int __strtoull_internal (__const char * __restrict __nptr, char ** __restrict __endptr, int __base, - int __group) __THROW; -# define __strtoull_internal_defined 1 -# endif + int __group) + __THROW __nonnull ((1)) __wur; +/* Like `strtoul' but convert to `uintmax_t'. */ __extern_inline uintmax_t __NTH (strtoumax (__const char *__restrict nptr, char **__restrict endptr, int base)) @@ -418,15 +405,13 @@ __NTH (strtoumax (__const char *__restrict nptr, char **__restrict endptr, return __strtoull_internal (nptr, endptr, base, 0); } -/* Like `wcstol' but convert to `intmax_t'. */ -# ifndef __wcstoll_internal_defined __extension__ extern long long int __wcstoll_internal (__const __gwchar_t * __restrict __nptr, __gwchar_t **__restrict __endptr, - int __base, int __group) __THROW; -# define __wcstoll_internal_defined 1 -# endif + int __base, int __group) + __THROW __nonnull ((1)) __wur; +/* Like `wcstol' but convert to `intmax_t'. */ __extern_inline intmax_t __NTH (wcstoimax (__const __gwchar_t *__restrict nptr, __gwchar_t **__restrict endptr, int base)) @@ -435,17 +420,15 @@ __NTH (wcstoimax (__const __gwchar_t *__restrict nptr, } -/* Like `wcstoul' but convert to `uintmax_t'. */ -# ifndef __wcstoull_internal_defined __extension__ extern unsigned long long int __wcstoull_internal (__const __gwchar_t * __restrict __nptr, __gwchar_t ** __restrict __endptr, int __base, - int __group) __THROW; -# define __wcstoull_internal_defined 1 -# endif + int __group) + __THROW __nonnull ((1)) __wur; +/* Like `wcstoul' but convert to `uintmax_t'. */ __extern_inline uintmax_t __NTH (wcstoumax (__const __gwchar_t *__restrict nptr, __gwchar_t **__restrict endptr, int base)) diff --git a/libc/sysdeps/generic/ldconfig.h b/libc/sysdeps/generic/ldconfig.h index 9da8d6b3d..fadd5ec37 100644 --- a/libc/sysdeps/generic/ldconfig.h +++ b/libc/sysdeps/generic/ldconfig.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000, 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2002, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Andreas Jaeger <aj@suse.de>, 1999. @@ -35,6 +35,9 @@ #define FLAG_MIPS64_LIBN32 0x0600 #define FLAG_MIPS64_LIBN64 0x0700 +/* Name of auxiliary cache. */ +#define _PATH_LDCONFIG_AUX_CACHE "/var/cache/ldconfig/aux-cache" + /* Declared in cache.c. */ extern void print_cache (const char *cache_name); @@ -45,10 +48,24 @@ extern void save_cache (const char *cache_name); extern void add_to_cache (const char *path, const char *lib, int flags, unsigned int osversion, uint64_t hwcap); +extern void init_aux_cache (void); + +extern void load_aux_cache (const char *aux_cache_name); + +extern int search_aux_cache (struct stat64 *stat_buf, int *flags, + unsigned int *osversion, char **soname); + +extern void add_to_aux_cache (struct stat64 *stat_buf, int flags, + unsigned int osversion, const char *soname); + +extern void save_aux_cache (const char *aux_cache_name); + /* Declared in readlib.c. */ extern int process_file (const char *real_file_name, const char *file_name, const char *lib, int *flag, unsigned int *osversion, - char **soname, int is_link); + char **soname, int is_link, struct stat64 *stat_buf); + +extern char *implicit_soname (const char *lib, int flag); /* Declared in readelflib.c. */ extern int process_elf_file (const char *file_name, const char *lib, int *flag, diff --git a/libc/sysdeps/generic/ldsodefs.h b/libc/sysdeps/generic/ldsodefs.h index 5205c4149..aefd105f0 100644 --- a/libc/sysdeps/generic/ldsodefs.h +++ b/libc/sysdeps/generic/ldsodefs.h @@ -38,7 +38,6 @@ #include <bits/libc-lock.h> #include <hp-timing.h> #include <tls.h> -#include <rtld-lowlevel.h> __BEGIN_DECLS @@ -439,18 +438,18 @@ struct rtld_global EXTERN void (*_dl_rtld_unlock_recursive) (void *); #endif - /* Prevailing state of the stack, PF_X indicating it's executable. */ - EXTERN ElfW(Word) _dl_stack_flags; - /* If loading a shared object requires that we make the stack executable when it was not, we do it by calling this function. It returns an errno code or zero on success. */ EXTERN int (*_dl_make_stack_executable_hook) (void **) internal_function; - /* Highest dtv index currently needed. */ - EXTERN size_t _dl_tls_max_dtv_idx; + /* Prevailing state of the stack, PF_X indicating it's executable. */ + EXTERN ElfW(Word) _dl_stack_flags; + /* Flag signalling whether there are gaps in the module ID allocation. */ EXTERN bool _dl_tls_dtv_gaps; + /* Highest dtv index currently needed. */ + EXTERN size_t _dl_tls_max_dtv_idx; /* Information about the dtv slots. */ EXTERN struct dtv_slotinfo_list { @@ -488,6 +487,12 @@ struct rtld_global EXTERN void (*_dl_wait_lookup_done) (void); + /* Scopes to free after next THREAD_GSCOPE_WAIT (). */ + EXTERN struct dl_scope_free_list + { + size_t count; + struct r_scope_elem **list[50]; + } *_dl_scope_free_list; #ifdef SHARED }; # define __rtld_global_attribute__ @@ -534,15 +539,15 @@ struct rtld_global_ro #define DL_DEBUG_HELP (1 << 9) #define DL_DEBUG_PRELINK (1 << 10) - /* Cached value of `getpagesize ()'. */ - EXTERN size_t _dl_pagesize; - /* OS version. */ EXTERN unsigned int _dl_osversion; /* Platform name. */ EXTERN const char *_dl_platform; EXTERN size_t _dl_platformlen; + /* Cached value of `getpagesize ()'. */ + EXTERN size_t _dl_pagesize; + /* Copy of the content of `_dl_main_searchlist' at startup time. */ EXTERN struct r_scope_elem _dl_initial_searchlist; @@ -571,9 +576,6 @@ struct rtld_global_ro /* Expected cache ID. */ EXTERN int _dl_correct_cache_id; - /* 0 if internal pointer values should not be guarded, 1 if they should. */ - EXTERN int _dl_pointer_guard; - /* Mask for hardware capabilities that are available. */ EXTERN uint64_t _dl_hwcap; @@ -657,6 +659,9 @@ struct rtld_global_ro /* List of auditing interfaces. */ struct audit_ifaces *_dl_audit; unsigned int _dl_naudit; + + /* 0 if internal pointer values should not be guarded, 1 if they should. */ + EXTERN int _dl_pointer_guard; }; # define __rtld_global_attribute__ # ifdef IS_IN_rtld @@ -840,9 +845,7 @@ enum DL_LOOKUP_ADD_DEPENDENCY = 1, /* Return most recent version instead of default version for unversioned lookup. */ - DL_LOOKUP_RETURN_NEWEST = 2, - /* Set if the scopr lock in the UNDEF_MAP is taken. */ - DL_LOOKUP_SCOPE_LOCK = 4 + DL_LOOKUP_RETURN_NEWEST = 2 }; /* Lookup versioned symbol. */ @@ -1050,6 +1053,11 @@ extern void *_dl_open (const char *name, int mode, const void *caller, Lmid_t nsid, int argc, char *argv[], char *env[]) attribute_hidden; +/* Free or queue for freeing scope OLD. If other threads might be + in the middle of _dl_fixup, _dl_profile_fixup or dl*sym using the + old scope, OLD can't be freed until no thread is using it. */ +extern int _dl_scope_free (struct r_scope_elem **old) attribute_hidden; + /* Add module to slot information data. */ extern void _dl_add_to_slotinfo (struct link_map *l) attribute_hidden; @@ -1061,6 +1069,8 @@ extern struct link_map *_dl_update_slotinfo (unsigned long int req_modid); but never touch anything. Return null if it's not allocated yet. */ extern void *_dl_tls_get_addr_soft (struct link_map *l) internal_function; +extern int _dl_addr_inside_object (struct link_map *l, const ElfW(Addr) addr) + internal_function attribute_hidden; __END_DECLS diff --git a/libc/sysdeps/generic/unwind-dw2-fde-glibc.c b/libc/sysdeps/generic/unwind-dw2-fde-glibc.c index 0038a0cbf..932a97274 100644 --- a/libc/sysdeps/generic/unwind-dw2-fde-glibc.c +++ b/libc/sysdeps/generic/unwind-dw2-fde-glibc.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc. Contributed by Jakub Jelinek <jakub@redhat.com>. This file is part of the GNU C Library. @@ -235,10 +235,11 @@ _Unwind_IteratePhdrCallback (struct dl_phdr_info *info, size_t size, void *ptr) if (data->ret != NULL) { unsigned int encoding = get_fde_encoding (data->ret); + _Unwind_Ptr func; read_encoded_value_with_base (encoding, base_from_cb_data (encoding, data), - data->ret->pc_begin, - (_Unwind_Ptr *)&data->func); + data->ret->pc_begin, &func); + data->func = (void *) func; } return 1; } diff --git a/libc/sysdeps/generic/unwind-dw2-fde.c b/libc/sysdeps/generic/unwind-dw2-fde.c index 13945b971..8d62e4611 100644 --- a/libc/sysdeps/generic/unwind-dw2-fde.c +++ b/libc/sysdeps/generic/unwind-dw2-fde.c @@ -1,5 +1,5 @@ /* Subroutines needed for unwinding stack frames for exception handling. */ -/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006 +/* Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006, 2007 Free Software Foundation, Inc. Contributed by Jason Merrill <jason@cygnus.com>. @@ -301,7 +301,8 @@ get_cie_encoding (struct dwarf_cie *cie) if (aug[0] != 'z') return DW_EH_PE_absptr; - p = aug + strlen (aug) + 1; /* Skip the augmentation string. */ + /* Skip the augmentation string. */ + p = aug + strlen ((const char *) aug) + 1; p = read_uleb128 (p, &utmp); /* Skip code alignment. */ p = read_sleb128 (p, &stmp); /* Skip data alignment. */ p++; /* Skip return address column. */ @@ -838,7 +839,7 @@ linear_search_fdes (struct object *ob, fde *this_fde, void *pc) else { _Unwind_Ptr mask; - const char *p; + const unsigned char *p; p = read_encoded_value_with_base (encoding, base, this_fde->pc_begin, &pc_begin); @@ -908,7 +909,7 @@ binary_search_single_encoding_fdes (struct object *ob, void *pc) size_t i = (lo + hi) / 2; fde *f = vec->array[i]; _Unwind_Ptr pc_begin, pc_range; - const char *p; + const unsigned char *p; p = read_encoded_value_with_base (encoding, base, f->pc_begin, &pc_begin); @@ -936,7 +937,7 @@ binary_search_mixed_encoding_fdes (struct object *ob, void *pc) size_t i = (lo + hi) / 2; fde *f = vec->array[i]; _Unwind_Ptr pc_begin, pc_range; - const char *p; + const unsigned char *p; int encoding; encoding = get_fde_encoding (f); @@ -1046,6 +1047,7 @@ _Unwind_Find_FDE (void *pc, struct dwarf_eh_bases *bases) if (f) { int encoding; + _Unwind_Ptr func; bases->tbase = ob->tbase; bases->dbase = ob->dbase; @@ -1054,7 +1056,8 @@ _Unwind_Find_FDE (void *pc, struct dwarf_eh_bases *bases) if (ob->s.b.mixed_encoding) encoding = get_fde_encoding (f); read_encoded_value_with_base (encoding, base_from_object (encoding, ob), - f->pc_begin, (_Unwind_Ptr *)&bases->func); + f->pc_begin, &func); + bases->func = (void *) func; } return f; diff --git a/libc/sysdeps/generic/unwind-dw2.c b/libc/sysdeps/generic/unwind-dw2.c index d818e5dfd..ba5723aa6 100644 --- a/libc/sysdeps/generic/unwind-dw2.c +++ b/libc/sysdeps/generic/unwind-dw2.c @@ -1,5 +1,5 @@ /* DWARF2 exception handling and frame unwind runtime interface routines. - Copyright (C) 1997,1998,1999,2000,2001,2002,2003,2005,2006 + Copyright (C) 1997,1998,1999,2000,2001,2002,2003,2005,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -309,8 +309,9 @@ extract_cie_info (struct dwarf_cie *cie, struct _Unwind_Context *context, /* "P" indicates a personality routine in the CIE augmentation. */ else if (aug[0] == 'P') { - p = read_encoded_value (context, *p, p + 1, - (_Unwind_Ptr *) &fs->personality); + _Unwind_Ptr personality; + p = read_encoded_value (context, *p, p + 1, &personality); + fs->personality = (_Unwind_Personality_Fn) personality; aug += 1; } @@ -771,8 +772,12 @@ execute_cfa_program (const unsigned char *insn_ptr, else switch (insn) { case DW_CFA_set_loc: - insn_ptr = read_encoded_value (context, fs->fde_encoding, - insn_ptr, (_Unwind_Ptr *) &fs->pc); + { + _Unwind_Ptr pc; + insn_ptr = read_encoded_value (context, fs->fde_encoding, + insn_ptr, &pc); + fs->pc = (void *) pc; + } break; case DW_CFA_advance_loc1: @@ -992,8 +997,11 @@ uw_frame_state_for (struct _Unwind_Context *context, _Unwind_FrameState *fs) insn = aug + i; } if (fs->lsda_encoding != DW_EH_PE_omit) - aug = read_encoded_value (context, fs->lsda_encoding, aug, - (_Unwind_Ptr *) &context->lsda); + { + _Unwind_Ptr lsda; + aug = read_encoded_value (context, fs->lsda_encoding, aug, &lsda); + context->lsda = (void *) lsda; + } /* Then the insns in the FDE up to our target PC. */ if (insn == NULL) diff --git a/libc/sysdeps/gnu/_G_config.h b/libc/sysdeps/gnu/_G_config.h index 83c78f0b9..211d0224b 100644 --- a/libc/sysdeps/gnu/_G_config.h +++ b/libc/sysdeps/gnu/_G_config.h @@ -8,19 +8,15 @@ #include <bits/types.h> #define __need_size_t -#define __need_wchar_t -#define __need_wint_t +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T +# define __need_wchar_t +#endif #define __need_NULL #include <stddef.h> -#ifndef _WINT_T -/* Integral type unchanged by default argument promotions that can - hold any value corresponding to members of the extended character - set, as well as at least one value that does not correspond to any - member of the extended character set. */ -# define _WINT_T -typedef unsigned int wint_t; -#endif #define __need_mbstate_t +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T +# define __need_wint_t +#endif #include <wchar.h> #define _G_size_t size_t typedef struct @@ -41,7 +37,8 @@ typedef struct #define _G_wchar_t wchar_t #define _G_wint_t wint_t #define _G_stat64 stat64 -#include <gconv.h> +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T +# include <gconv.h> typedef union { struct __gconv_info __cd; @@ -51,6 +48,7 @@ typedef union struct __gconv_step_data __data; } __combined; } _G_iconv_t; +#endif typedef int _G_int16_t __attribute__ ((__mode__ (__HI__))); typedef int _G_int32_t __attribute__ ((__mode__ (__SI__))); diff --git a/libc/sysdeps/i386/dl-trampoline.S b/libc/sysdeps/i386/dl-trampoline.S index f991797ee..af9eaf6d5 100644 --- a/libc/sysdeps/i386/dl-trampoline.S +++ b/libc/sysdeps/i386/dl-trampoline.S @@ -37,10 +37,10 @@ _dl_runtime_resolve: call _dl_fixup # Call resolver. popl %edx # Get register content back. cfi_adjust_cfa_offset (-4) - popl %ecx - cfi_adjust_cfa_offset (-4) - xchgl %eax, (%esp) # Get %eax contents end store function address. - ret $8 # Jump to function address. + movl (%esp), %ecx + movl %eax, (%esp) # Store the function address. + movl 4(%esp), %eax + ret $12 # Jump to function address. cfi_endproc .size _dl_runtime_resolve, .-_dl_runtime_resolve @@ -83,10 +83,10 @@ _dl_runtime_profile: cfi_adjust_cfa_offset (-4) popl %edx # Get register content back. cfi_adjust_cfa_offset (-4) - popl %ecx - cfi_adjust_cfa_offset (-4) - xchgl %eax, (%esp) # Get %eax contents end store function address. - ret $16 # Jump to function address. + movl (%esp), %ecx + movl %eax, (%esp) # Store the function address. + movl 4(%esp), %eax + ret $20 # Jump to function address. /* +32 return address @@ -111,9 +111,10 @@ _dl_runtime_profile: cfi_rel_offset (esi, 0) leal 44(%esp), %esi movl %ebx, %ecx + orl $4, %ebx # Increase frame size if necessary to align + # stack for the function call movl %esp, %edi subl %ebx, %edi - andl $0xfffffff0, %edi # Align stack movl %esp, %ebx cfi_def_cfa_register (ebx) movl %edi, %esp diff --git a/libc/sysdeps/i386/ldbl2mpn.c b/libc/sysdeps/i386/ldbl2mpn.c index bf4e4ff43..01be77727 100644 --- a/libc/sysdeps/i386/ldbl2mpn.c +++ b/libc/sysdeps/i386/ldbl2mpn.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1995, 1996, 1997, 2000, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -19,7 +19,7 @@ #include "gmp.h" #include "gmp-impl.h" #include "longlong.h" -#include "ieee754.h" +#include <ieee754.h> #include <float.h> #include <stdlib.h> @@ -46,7 +46,7 @@ __mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size, #elif BITS_PER_MP_LIMB == 64 /* Hopefully the compiler will combine the two bitfield extracts and this composition into just the original quadword extract. */ - res_ptr[0] = ((unsigned long int) u.ieee.mantissa0 << 32) | u.ieee.mantissa1; + res_ptr[0] = ((mp_limb_t) u.ieee.mantissa0 << 32) | u.ieee.mantissa1; #define N 1 #else #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" @@ -109,6 +109,13 @@ __mpn_extract_long_double (mp_ptr res_ptr, mp_size_t size, } } } + else if (u.ieee.exponent < 0x7fff +#if N == 2 + && res_ptr[0] == 0 +#endif + && res_ptr[N - 1] == 0) + /* Pseudo zero. */ + *expt = 0; return N; } diff --git a/libc/sysdeps/ia64/ldbl2mpn.c b/libc/sysdeps/ia64/ldbl2mpn.c new file mode 100644 index 000000000..641b789cd --- /dev/null +++ b/libc/sysdeps/ia64/ldbl2mpn.c @@ -0,0 +1 @@ +#include "../i386/ldbl2mpn.c" diff --git a/libc/sysdeps/ia64/sched_cpucount.c b/libc/sysdeps/ia64/sched_cpucount.c new file mode 100644 index 000000000..ff9d8cf2a --- /dev/null +++ b/libc/sysdeps/ia64/sched_cpucount.c @@ -0,0 +1,21 @@ +/* Copyright (C) 2007 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. */ + +#define POPCNT(l) __builtin_popcountl (l) + +#include <posix/sched_cpucount.c> diff --git a/libc/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c b/libc/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c index 8a2d45e2d..21d1e62da 100644 --- a/libc/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c +++ b/libc/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 1998, 1999, 2002, 2003, 2004, 2006 +/* Copyright (C) 1995, 1996, 1997, 1998, 1999, 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -31,19 +31,20 @@ long double __mpn_construct_long_double (mp_srcptr frac_ptr, int expt, int sign) { union ibm_extended_long_double u; - unsigned long hidden2, lzcount; + unsigned long lzcount; unsigned long long hi, lo; + int exponent2; u.ieee.negative = sign; u.ieee.negative2 = sign; u.ieee.exponent = expt + IBM_EXTENDED_LONG_DOUBLE_BIAS; - u.ieee.exponent2 = expt - 53 + IBM_EXTENDED_LONG_DOUBLE_BIAS; + u.ieee.exponent2 = 0; + exponent2 = expt - 53 + IBM_EXTENDED_LONG_DOUBLE_BIAS; #if BITS_PER_MP_LIMB == 32 /* The low order 53 bits (52 + hidden) go into the lower double */ lo = frac_ptr[0]; lo |= (frac_ptr[1] & ((1LL << (53 - 32)) - 1)) << 32; - hidden2 = (frac_ptr[1] >> (52 - 32)) & ((mp_limb_t) 1); /* The high order 53 bits (52 + hidden) go into the upper double */ hi = (frac_ptr[1] >> (53 - 32)) & ((1 << 11) - 1); hi |= ((unsigned long long) frac_ptr[2]) << 11; @@ -51,7 +52,6 @@ __mpn_construct_long_double (mp_srcptr frac_ptr, int expt, int sign) #elif BITS_PER_MP_LIMB == 64 /* The low order 53 bits (52 + hidden) go into the lower double */ lo = frac_ptr[0] & (((mp_limb_t) 1 << 53) - 1); - hidden2 = (frac_ptr[0] >> 52) & ((mp_limb_t) 1); /* The high order 53 bits (52 + hidden) go into the upper double */ hi = (frac_ptr[0] >> 53) & (((mp_limb_t) 1 << 11) - 1); hi |= (frac_ptr[1] << 11); @@ -59,14 +59,62 @@ __mpn_construct_long_double (mp_srcptr frac_ptr, int expt, int sign) #error "mp_limb size " BITS_PER_MP_LIMB "not accounted for" #endif + if ((hi & (1LL << 52)) == 0 && (hi | lo) != 0) + { + /* denormal number */ + unsigned long long val = hi ? hi : lo; + + if (sizeof (val) == sizeof (long)) + lzcount = __builtin_clzl (val); + else if ((val >> 32) != 0) + lzcount = __builtin_clzl ((long) (val >> 32)); + else + lzcount = __builtin_clzl ((long) val) + 32; + if (hi) + lzcount = lzcount - 11; + else + lzcount = lzcount + 42; + + if (lzcount > u.ieee.exponent) + { + lzcount = u.ieee.exponent; + u.ieee.exponent = 0; + exponent2 -= lzcount; + } + else + { + u.ieee.exponent -= (lzcount - 1); + exponent2 -= (lzcount - 1); + } + + if (lzcount <= 53) + { + hi = (hi << lzcount) | (lo >> (53 - lzcount)); + lo = (lo << lzcount) & ((1LL << 53) - 1); + } + else + { + hi = lo << (lzcount - 53); + lo = 0; + } + } + if (lo != 0L) { /* hidden2 bit of low double controls rounding of the high double. - If hidden2 is '1' then round up hi and adjust lo (2nd mantissa) + If hidden2 is '1' and either the explicit mantissa is non-zero + or hi is odd, then round up hi and adjust lo (2nd mantissa) plus change the sign of the low double to compensate. */ - if (hidden2) + if ((lo & (1LL << 52)) != 0 + && ((hi & 1) != 0 || (lo & ((1LL << 52) - 1)))) { hi++; + if ((hi & ((1LL << 52) - 1)) == 0) + { + if ((hi & (1LL << 53)) != 0) + hi -= 1LL << 52; + u.ieee.exponent++; + } u.ieee.negative2 = !sign; lo = (1LL << 53) - lo; } @@ -85,17 +133,18 @@ __mpn_construct_long_double (mp_srcptr frac_ptr, int expt, int sign) if (lzcount > 0) { lo = lo << lzcount; - u.ieee.exponent2 = u.ieee.exponent2 - lzcount; + exponent2 = exponent2 - lzcount; } + if (exponent2 > 0) + u.ieee.exponent2 = exponent2; + else + lo >>= 1 - exponent2; } else - { - u.ieee.negative2 = 0; - u.ieee.exponent2 = 0; - } + u.ieee.negative2 = 0; u.ieee.mantissa3 = lo & 0xffffffffLL; - u.ieee.mantissa2 = (lo >> 32) & 0xffffff; + u.ieee.mantissa2 = (lo >> 32) & 0xfffff; u.ieee.mantissa1 = hi & 0xffffffffLL; u.ieee.mantissa0 = (hi >> 32) & ((1LL << (LDBL_MANT_DIG - 86)) - 1); diff --git a/libc/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c b/libc/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c index 3ca178a3c..6999abc25 100644 --- a/libc/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c +++ b/libc/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c @@ -1,5 +1,5 @@ /* Return classification value corresponding to argument. - Copyright (C) 1997,1999,2002,2004,2006 Free Software Foundation, Inc. + Copyright (C) 1997,1999,2002,2004,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997 and Jakub Jelinek <jj@ultra.linux.cz>, 1999. @@ -30,14 +30,16 @@ * -NaN fffn nnnn nnnn nnnn xxxx xxxx xxxx xxxx * +Inf 7ff0 0000 0000 0000 xxxx xxxx xxxx xxxx * -Inf fff0 0000 0000 0000 xxxx xxxx xxxx xxxx - * +0 0000 0000 0000 0000 - * -0 8000 0000 0000 0000 - * +normal 001n nnnn nnnn nnnn (smallest) - * -normal 801n nnnn nnnn nnnn (smallest) - * +normal 7fen nnnn nnnn nnnn (largest) - * -normal ffen nnnn nnnn nnnn (largest) - * +denorm 000n nnnn nnnn nnnn - * -denorm 800n nnnn nnnn nnnn + * +0 0000 0000 0000 0000 xxxx xxxx xxxx xxxx + * -0 8000 0000 0000 0000 xxxx xxxx xxxx xxxx + * +normal 0360 0000 0000 0000 0000 0000 0000 0000 (smallest) + * -normal 8360 0000 0000 0000 0000 0000 0000 0000 (smallest) + * +normal 7fef ffff ffff ffff 7c8f ffff ffff fffe (largest) + * +normal ffef ffff ffff ffff fc8f ffff ffff fffe (largest) + * +denorm 0360 0000 0000 0000 8000 0000 0000 0001 (largest) + * -denorm 8360 0000 0000 0000 0000 0000 0000 0001 (largest) + * +denorm 000n nnnn nnnn nnnn xxxx xxxx xxxx xxxx + * -denorm 800n nnnn nnnn nnnn xxxx xxxx xxxx xxxx */ int @@ -59,12 +61,23 @@ ___fpclassifyl (long double x) /* +/-zero or +/- normal or +/- denormal */ if (hx & 0x7fffffffffffffffULL) { /* +/- normal or +/- denormal */ - if ((hx & 0x7ff0000000000000ULL) >= 0x0360000000000000ULL) { + if ((hx & 0x7ff0000000000000ULL) > 0x0360000000000000ULL) { /* +/- normal */ retval = FP_NORMAL; } else { - /* +/- denormal */ - retval = FP_SUBNORMAL; + if ((hx & 0x7ff0000000000000ULL) == 0x0360000000000000ULL) { + if ((lx & 0x7fffffffffffffff) /* lower is non-zero */ + && ((lx^hx) & 0x8000000000000000ULL)) { /* and sign differs */ + /* +/- denormal */ + retval = FP_SUBNORMAL; + } else { + /* +/- normal */ + retval = FP_NORMAL; + } + } else { + /* +/- denormal */ + retval = FP_SUBNORMAL; + } } } else { /* +/- zero */ diff --git a/libc/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c b/libc/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c index 4f8aa7dec..39d0e6a5e 100644 --- a/libc/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c +++ b/libc/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c @@ -35,7 +35,7 @@ static char rcsid[] = "$NetBSD: $"; long double x,y; #endif { - int64_t hx,hy,ihx,ihy,ilx,ily; + int64_t hx,hy,ihx,ihy,ilx; u_int64_t lx,ly; GET_LDOUBLE_WORDS64(hx,lx,x); @@ -43,7 +43,6 @@ static char rcsid[] = "$NetBSD: $"; ihx = hx&0x7fffffffffffffffLL; /* |hx| */ ilx = lx&0x7fffffffffffffffLL; /* |lx| */ ihy = hy&0x7fffffffffffffffLL; /* |hy| */ - ily = ly&0x7fffffffffffffffLL; /* |ly| */ if((((ihx&0x7ff0000000000000LL)==0x7ff0000000000000LL)&& ((ihx&0x000fffffffffffffLL)!=0)) || /* x is nan */ @@ -54,54 +53,66 @@ static char rcsid[] = "$NetBSD: $"; return y; /* x=y, return y */ if(ihx == 0 && ilx == 0) { /* x == 0 */ long double u; - SET_LDOUBLE_WORDS64(x,hy&0x8000000000000000ULL,1);/* return +-minsubnormal */ - u = math_opt_barrier (u); + hy = (hy & 0x8000000000000000ULL) | 1; + SET_LDOUBLE_WORDS64(x,hy,0ULL);/* return +-minsubnormal */ + u = math_opt_barrier (x); u = u * u; math_force_eval (u); /* raise underflow flag */ return x; } - if(ihx>=0) { /* x > 0 */ - if(ihx>ihy||((ihx==ihy)&&(ilx>ily))) { /* x > y, x -= ulp */ - - if(ilx==0) - hx--; - else - lx--; - } else { /* x < y, x += ulp */ - if((hx==0x7fefffffffffffffLL)&&(lx==0x7c8ffffffffffffeLL)) - { - SET_LDOUBLE_WORDS64(x,0x7ff0000000000000,0x8000000000000000); - return x; - } - else if((hx==0xffefffffffffffffLL)&&(lx==0xfc8ffffffffffffeLL)) - { - SET_LDOUBLE_WORDS64(x,0xfff0000000000000,0x8000000000000000); - return x; - } - else if((lx&0x7fffffffffffffff)==0) hx++; - else - lx++; + + long double u; + if(x > y) { /* x > y, x -= ulp */ + if((hx==0xffefffffffffffffLL)&&(lx==0xfc8ffffffffffffeLL)) + return x+x; /* overflow, return -inf */ + if (hx >= 0x7ff0000000000000LL) { + SET_LDOUBLE_WORDS64(u,0x7fefffffffffffffLL,0x7c8ffffffffffffeLL); + return u; } - } else { /* x < 0 */ - if(ihy>=0||ihx>ihy||((ihx==ihy)&&(ilx>ily))){/* x < y, x -= ulp */ - if((lx&0x7fffffffffffffff)==0) - hx--; - else - lx--; - } else { /* x > y, x += ulp */ - if((lx&0x7fffffffffffffff)==0) hx++; - else - lx++; + if(ihx <= 0x0360000000000000LL) { /* x <= LDBL_MIN */ + u = math_opt_barrier (x); + x -= __LDBL_DENORM_MIN__; + if (ihx < 0x0360000000000000LL + || (hx > 0 && (int64_t) lx <= 0) + || (hx < 0 && (int64_t) lx > 1)) { + u = u * u; + math_force_eval (u); /* raise underflow flag */ + } + return x; } + if (ihx < 0x06a0000000000000LL) { /* ulp will denormal */ + SET_LDOUBLE_WORDS64(u,(hx&0x7ff0000000000000LL),0ULL); + u *= 0x1.0000000000000p-105L; + } else + SET_LDOUBLE_WORDS64(u,(hx&0x7ff0000000000000LL)-0x0690000000000000LL,0ULL); + return x - u; + } else { /* x < y, x += ulp */ + if((hx==0x7fefffffffffffffLL)&&(lx==0x7c8ffffffffffffeLL)) + return x+x; /* overflow, return +inf */ + if ((u_int64_t) hx >= 0xfff0000000000000ULL) { + SET_LDOUBLE_WORDS64(u,0xffefffffffffffffLL,0xfc8ffffffffffffeLL); + return u; + } + if(ihx <= 0x0360000000000000LL) { /* x <= LDBL_MIN */ + u = math_opt_barrier (x); + x += __LDBL_DENORM_MIN__; + if (ihx < 0x0360000000000000LL + || (hx > 0 && (int64_t) lx < 0 && lx != 0x8000000000000001LL) + || (hx < 0 && (int64_t) lx >= 0)) { + u = u * u; + math_force_eval (u); /* raise underflow flag */ + } + if (x == 0.0L) /* handle negative __LDBL_DENORM_MIN__ case */ + x = -0.0L; + return x; + } + if (ihx < 0x06a0000000000000LL) { /* ulp will denormal */ + SET_LDOUBLE_WORDS64(u,(hx&0x7ff0000000000000LL),0ULL); + u *= 0x1.0000000000000p-105L; + } else + SET_LDOUBLE_WORDS64(u,(hx&0x7ff0000000000000LL)-0x0690000000000000LL,0ULL); + return x + u; } - hy = hx&0x7ff0000000000000LL; - if(hy==0x7ff0000000000000LL) return x+x;/* overflow */ - if(hy==0) { - long double u = x * x; /* underflow */ - math_force_eval (u); /* raise underflow flag */ - } - SET_LDOUBLE_WORDS64(x,hx,lx); - return x; } strong_alias (__nextafterl, __nexttowardl) long_double_symbol (libm, __nextafterl, nextafterl); diff --git a/libc/sysdeps/ieee754/ldbl-128ibm/strtold_l.c b/libc/sysdeps/ieee754/ldbl-128ibm/strtold_l.c index d558b00d4..670d80ce0 100644 --- a/libc/sysdeps/ieee754/ldbl-128ibm/strtold_l.c +++ b/libc/sysdeps/ieee754/ldbl-128ibm/strtold_l.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2006, 2007 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 @@ -37,6 +37,9 @@ extern long double ____new_strtold_l (const char *, char **, __locale_t); # define __STRTOF ____new_strtold_l # define ____STRTOF_INTERNAL ____strtold_l_internal #endif +extern __typeof (__STRTOF) STRTOF; +libc_hidden_proto (__STRTOF) +libc_hidden_proto (STRTOF) #define MPN2FLOAT __mpn_construct_long_double #define FLOAT_HUGE_VAL HUGE_VALL # define SET_MANTISSA(flt, mant) \ @@ -54,10 +57,12 @@ extern long double ____new_strtold_l (const char *, char **, __locale_t); #ifdef __LONG_DOUBLE_MATH_OPTIONAL # include <math_ldbl_opt.h> # ifdef USE_WIDE_CHAR -long_double_symbol (libc, __new_wcstold_l, wcstold_l); +weak_alias (____new_wcstold_l, ___new_wcstold_l); +long_double_symbol (libc, ___new_wcstold_l, wcstold_l); long_double_symbol (libc, ____new_wcstold_l, __wcstold_l); # else -long_double_symbol (libc, __new_strtold_l, strtold_l); +weak_alias (____new_strtold_l, ___new_strtold_l); +long_double_symbol (libc, ___new_strtold_l, strtold_l); long_double_symbol (libc, ____new_strtold_l, __strtold_l); # endif #endif diff --git a/libc/sysdeps/ieee754/ldbl-64-128/strtold_l.c b/libc/sysdeps/ieee754/ldbl-64-128/strtold_l.c index ef8fe0575..cdc30983e 100644 --- a/libc/sysdeps/ieee754/ldbl-64-128/strtold_l.c +++ b/libc/sysdeps/ieee754/ldbl-64-128/strtold_l.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2006, 2007 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 @@ -37,6 +37,9 @@ extern long double ____new_strtold_l (const char *, char **, __locale_t); # define __STRTOF ____new_strtold_l # define ____STRTOF_INTERNAL ____strtold_l_internal #endif +extern __typeof (__STRTOF) STRTOF; +libc_hidden_proto (__STRTOF) +libc_hidden_proto (STRTOF) #define MPN2FLOAT __mpn_construct_long_double #define FLOAT_HUGE_VAL HUGE_VALL #define SET_MANTISSA(flt, mant) \ @@ -54,10 +57,12 @@ extern long double ____new_strtold_l (const char *, char **, __locale_t); #ifdef __LONG_DOUBLE_MATH_OPTIONAL # include <math_ldbl_opt.h> # ifdef USE_WIDE_CHAR -long_double_symbol (libc, __new_wcstold_l, wcstold_l); +weak_alias (____new_wcstold_l, ___new_wcstold_l); +long_double_symbol (libc, ___new_wcstold_l, wcstold_l); long_double_symbol (libc, ____new_wcstold_l, __wcstold_l); # else -long_double_symbol (libc, __new_strtold_l, strtold_l); +weak_alias (____new_strtold_l, ___new_strtold_l); +long_double_symbol (libc, ___new_strtold_l, strtold_l); long_double_symbol (libc, ____new_strtold_l, __strtold_l); # endif #endif diff --git a/libc/sysdeps/ieee754/ldbl-96/s_roundl.c b/libc/sysdeps/ieee754/ldbl-96/s_roundl.c index 672536d35..f1399cc20 100644 --- a/libc/sysdeps/ieee754/ldbl-96/s_roundl.c +++ b/libc/sysdeps/ieee754/ldbl-96/s_roundl.c @@ -1,5 +1,5 @@ /* Round long double to integer away from zero. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -23,7 +23,7 @@ #include "math_private.h" -static const long double huge = 1.0e4930; +static const long double huge = 1.0e4930L; long double diff --git a/libc/sysdeps/mach/hurd/_G_config.h b/libc/sysdeps/mach/hurd/_G_config.h index b64305923..db959246e 100644 --- a/libc/sysdeps/mach/hurd/_G_config.h +++ b/libc/sysdeps/mach/hurd/_G_config.h @@ -8,19 +8,15 @@ #include <bits/types.h> #define __need_size_t -#define __need_wchar_t -#define __need_wint_t +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T +# define __need_wchar_t +#endif #define __need_NULL #include <stddef.h> -#ifndef _WINT_T -/* Integral type unchanged by default argument promotions that can - hold any value corresponding to members of the extended character - set, as well as at least one value that does not correspond to any - member of the extended character set. */ -# define _WINT_T -typedef unsigned int wint_t; -#endif #define __need_mbstate_t +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T +# define __need_wint_t +#endif #include <wchar.h> #define _G_size_t size_t typedef struct @@ -41,7 +37,8 @@ typedef struct #define _G_wchar_t wchar_t #define _G_wint_t wint_t #define _G_stat64 stat64 -#include <gconv.h> +#if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T +# include <gconv.h> typedef union { struct __gconv_info __cd; @@ -51,6 +48,7 @@ typedef union struct __gconv_step_data __data; } __combined; } _G_iconv_t; +#endif typedef int _G_int16_t __attribute__ ((__mode__ (__HI__))); typedef int _G_int32_t __attribute__ ((__mode__ (__SI__))); diff --git a/libc/sysdeps/mach/hurd/bits/fcntl.h b/libc/sysdeps/mach/hurd/bits/fcntl.h index e709cc6fb..34e6baa04 100644 --- a/libc/sysdeps/mach/hurd/bits/fcntl.h +++ b/libc/sysdeps/mach/hurd/bits/fcntl.h @@ -1,5 +1,6 @@ /* O_*, F_*, FD_* bit values for GNU. - Copyright (C) 1993,94,96,97,98,99,2000,01,04 Free Software Foundation, Inc. + Copyright (C) 1993,1994,1996,1997,1998,1999,2000,2001,2004,2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -70,6 +71,7 @@ #define O_SYNC O_FSYNC #ifdef __USE_GNU # define O_NOATIME 0x0800 /* Don't set access time on read (owner). */ +# define O_CLOEXEC 0x00010000 /* Set FD_CLOEXEC. */ #endif #ifdef __USE_MISC # define O_SHLOCK 0x00020000 /* Open with shared file lock. */ diff --git a/libc/sysdeps/mach/hurd/bits/ioctls.h b/libc/sysdeps/mach/hurd/bits/ioctls.h index 06a73df75..c9d313519 100644 --- a/libc/sysdeps/mach/hurd/bits/ioctls.h +++ b/libc/sysdeps/mach/hurd/bits/ioctls.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1992,93,96,97,98,99,2001 Free Software Foundation, Inc. +/* Copyright (C) 1992,93,96,97,98,99,2001,2007 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 @@ -284,25 +284,31 @@ enum __ioctl_datum { IOC_8, IOC_16, IOC_32, IOC_64 }; #define ODDP 0x00000040 /* get/send odd parity */ #define EVENP 0x00000080 /* get/send even parity */ #define ANYP 0x000000c0 /* get any parity/send none */ -#define NLDELAY 0x00000300 /* \n delay */ +#define NLDLY 0x00000300 /* \n delay */ +#define NLDELAY NLDLY /* traditional BSD name */ #define NL0 0x00000000 #define NL1 0x00000100 /* tty 37 */ #define NL2 0x00000200 /* vt05 */ #define NL3 0x00000300 -#define TBDELAY 0x00000c00 /* horizontal tab delay */ +#define TABDLY 0x00000c00 /* horizontal tab delay */ +#define TBDELAY TABDLY /* traditional BSD name */ #define TAB0 0x00000000 #define TAB1 0x00000400 /* tty 37 */ #define TAB2 0x00000800 +#define TAB3 0x00000c00 #define XTABS 0x00000c00 /* expand tabs on output */ -#define CRDELAY 0x00003000 /* \r delay */ +#define CRDLY 0x00003000 /* \r delay */ +#define CRDELAY CRDLY /* traditional BSD name */ #define CR0 0x00000000 #define CR1 0x00001000 /* tn 300 */ #define CR2 0x00002000 /* tty 37 */ #define CR3 0x00003000 /* concept 100 */ -#define VTDELAY 0x00004000 /* vertical tab delay */ +#define VTDLY 0x00004000 /* vertical tab delay */ +#define VTDELAY VTDLY /* traditional BSD name */ #define FF0 0x00000000 #define FF1 0x00004000 /* tty 37 */ -#define BSDELAY 0x00008000 /* \b delay */ +#define BSDLY 0x00008000 /* \b delay */ +#define BSDELAY BSDLY /* traditional BSD name */ #define BS0 0x00000000 #define BS1 0x00008000 #define ALLDELAY (NLDELAY|TBDELAY|CRDELAY|VTDELAY|BSDELAY) diff --git a/libc/sysdeps/mach/hurd/i386/tls.h b/libc/sysdeps/mach/hurd/i386/tls.h index 972cac57a..d98b485b9 100644 --- a/libc/sysdeps/mach/hurd/i386/tls.h +++ b/libc/sysdeps/mach/hurd/i386/tls.h @@ -1,5 +1,5 @@ /* Definitions for thread-local data handling. Hurd/i386 version. - Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2006, 2007 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,7 +29,7 @@ thread pointer points to is unspecified. Allocate the TCB there. */ # define TLS_TCB_AT_TP 1 -# ifndef ASSEMBLER +# ifndef __ASSEMBLER__ /* Use i386-specific RPCs to arrange that %gs segment register prefix addresses the TCB in each thread. */ @@ -165,7 +165,7 @@ _hurd_tls_fork (thread_t child, struct i386_thread_state *state) return err; } -# endif /* !ASSEMBLER */ +# endif /* !__ASSEMBLER__ */ #endif /* HAVE_TLS_SUPPORT */ #endif /* i386/tls.h */ diff --git a/libc/sysdeps/mach/hurd/sigaction.c b/libc/sysdeps/mach/hurd/sigaction.c index 3dc530955..fe452e828 100644 --- a/libc/sysdeps/mach/hurd/sigaction.c +++ b/libc/sysdeps/mach/hurd/sigaction.c @@ -1,4 +1,6 @@ -/* Copyright (C) 1991,92,93,94,95,96,97,2002 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2002, 2007 + 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 @@ -68,7 +70,7 @@ __sigaction (sig, act, oact) __spin_lock (&ss->lock); pending = ss->pending & ~ss->blocked; } - else if (a.sa_handler == SIG_IGN || a.sa_handler == SIG_DFL) + else if (act != NULL && (a.sa_handler == SIG_IGN || a.sa_handler == SIG_DFL)) /* We are changing to an action that might be to ignore SIG signals. If SIG is blocked and pending and the new action is to ignore it, we must remove it from the pending set now; if the action is changed diff --git a/libc/sysdeps/mach/hurd/sigsuspend.c b/libc/sysdeps/mach/hurd/sigsuspend.c index 96b3857c7..7e32472ce 100644 --- a/libc/sysdeps/mach/hurd/sigsuspend.c +++ b/libc/sysdeps/mach/hurd/sigsuspend.c @@ -1,4 +1,6 @@ -/* Copyright (C) 1991,92,93,94,95,96,97,98,2002 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2002, 2007 + 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,4 +82,5 @@ __sigsuspend (set) return -1; } libc_hidden_def (__sigsuspend) +strong_alias (__sigsuspend, sigsuspend_not_cancel) weak_alias (__sigsuspend, sigsuspend) diff --git a/libc/sysdeps/mach/hurd/tls.h b/libc/sysdeps/mach/hurd/tls.h index cce42ef37..8ad3f1a28 100644 --- a/libc/sysdeps/mach/hurd/tls.h +++ b/libc/sysdeps/mach/hurd/tls.h @@ -1,5 +1,5 @@ /* Definitions for thread-local data handling. Hurd version. - Copyright (C) 2003, 2005 Free Software Foundation, Inc. + Copyright (C) 2003, 2005, 2007 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,7 +20,7 @@ #ifndef _TLS_H #define _TLS_H -#if defined HAVE_TLS_SUPPORT && !defined ASSEMBLER +#if defined HAVE_TLS_SUPPORT && !defined __ASSEMBLER__ # include <stddef.h> # include <stdbool.h> diff --git a/libc/sysdeps/mach/i386/sysdep.h b/libc/sysdeps/mach/i386/sysdep.h index 1f138f475..4fc5d50f3 100644 --- a/libc/sysdeps/mach/i386/sysdep.h +++ b/libc/sysdeps/mach/i386/sysdep.h @@ -1,4 +1,6 @@ -/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 2007 + 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 @@ -16,6 +18,10 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +/* Defines RTLD_PRIVATE_ERRNO and USE_DL_SYSINFO. */ +#include <dl-sysdep.h> +#include <tls.h> + #define LOSE asm volatile ("hlt") #define SNARF_ARGS(entry_sp, argc, argv, envp) \ diff --git a/libc/sysdeps/posix/posix_fallocate64.c b/libc/sysdeps/posix/posix_fallocate64.c index 64ca9ae83..07e2a00bf 100644 --- a/libc/sysdeps/posix/posix_fallocate64.c +++ b/libc/sysdeps/posix/posix_fallocate64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2003, 2004, 2005, 2007 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 @@ -93,6 +93,7 @@ __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) return 0; } +#undef __posix_fallocate64_l64 #include <shlib-compat.h> #include <bits/wordsize.h> diff --git a/libc/sysdeps/posix/tempname.c b/libc/sysdeps/posix/tempname.c index c8973a085..eab658da3 100644 --- a/libc/sysdeps/posix/tempname.c +++ b/libc/sysdeps/posix/tempname.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-1999, 2000, 2001, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1991-2001, 2006, 2007 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 @@ -37,9 +37,8 @@ #endif #ifndef __GT_FILE # define __GT_FILE 0 -# define __GT_BIGFILE 1 -# define __GT_DIR 2 -# define __GT_NOCREATE 3 +# define __GT_DIR 1 +# define __GT_NOCREATE 2 #endif #if STDC_HEADERS || _LIBC @@ -220,12 +219,11 @@ static const char letters[] = at the time of the call. __GT_FILE: create the file using open(O_CREAT|O_EXCL) and return a read-write fd. The file is mode 0600. - __GT_BIGFILE: same as __GT_FILE but use open64(). __GT_DIR: create a directory, which will be mode 0700. We use a clever algorithm to get hard-to-predict names. */ int -__gen_tempname (char *tmpl, int kind) +__gen_tempname (char *tmpl, int flags, int kind) { int len; char *XXXXXX; @@ -298,11 +296,9 @@ __gen_tempname (char *tmpl, int kind) switch (kind) { case __GT_FILE: - fd = __open (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); - break; - - case __GT_BIGFILE: - fd = __open64 (tmpl, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); + fd = __open (tmpl, + (flags & ~ACCESSPERMS) + | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); break; case __GT_DIR: diff --git a/libc/sysdeps/powerpc/powerpc32/power4/memcmp.S b/libc/sysdeps/powerpc/powerpc32/power4/memcmp.S index 471530273..75b328403 100644 --- a/libc/sysdeps/powerpc/powerpc32/power4/memcmp.S +++ b/libc/sysdeps/powerpc/powerpc32/power4/memcmp.S @@ -23,6 +23,7 @@ /* int [r3] memcmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ + .machine power4 EALIGN (BP_SYM(memcmp), 4, 0) CALL_MCOUNT diff --git a/libc/sysdeps/powerpc/powerpc32/power4/memcpy.S b/libc/sysdeps/powerpc/powerpc32/power4/memcpy.S index c48db2f3d..73020c6da 100644 --- a/libc/sysdeps/powerpc/powerpc32/power4/memcpy.S +++ b/libc/sysdeps/powerpc/powerpc32/power4/memcpy.S @@ -34,6 +34,7 @@ possible when both source and destination are word aligned. Each case has an optimized unrolled loop. */ + .machine power4 EALIGN (BP_SYM (memcpy), 5, 0) CALL_MCOUNT diff --git a/libc/sysdeps/powerpc/powerpc32/power4/memset.S b/libc/sysdeps/powerpc/powerpc32/power4/memset.S index b07ed3c2d..5dd1d943c 100644 --- a/libc/sysdeps/powerpc/powerpc32/power4/memset.S +++ b/libc/sysdeps/powerpc/powerpc32/power4/memset.S @@ -28,6 +28,7 @@ cache line (1024 bits). There is a special case for setting cache lines to 0, to take advantage of the dcbz instruction. */ + .machine power4 EALIGN (BP_SYM (memset), 5, 0) CALL_MCOUNT diff --git a/libc/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S b/libc/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S index bcbc1fc3e..528607602 100644 --- a/libc/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S +++ b/libc/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S @@ -18,6 +18,7 @@ 02110-1301 USA. */ #include <sysdep.h> +#include <math_ldbl_opt.h> /* long long int[r3, r4] __llrint (double x[fp1]) */ ENTRY (__llrint) diff --git a/libc/sysdeps/powerpc/powerpc32/power6/memcpy.S b/libc/sysdeps/powerpc/powerpc32/power6/memcpy.S index e8d56eb13..ba45fd250 100644 --- a/libc/sysdeps/powerpc/powerpc32/power6/memcpy.S +++ b/libc/sysdeps/powerpc/powerpc32/power6/memcpy.S @@ -34,6 +34,7 @@ possible when both source and destination are word aligned. Each case has an optimized unrolled loop. */ + .machine power6 EALIGN (BP_SYM (memcpy), 5, 0) CALL_MCOUNT diff --git a/libc/sysdeps/powerpc/powerpc32/power6/memset.S b/libc/sysdeps/powerpc/powerpc32/power6/memset.S index 71c1209fa..10fb7b978 100644 --- a/libc/sysdeps/powerpc/powerpc32/power6/memset.S +++ b/libc/sysdeps/powerpc/powerpc32/power6/memset.S @@ -1,5 +1,5 @@ -/* Optimized memset implementation for PowerPC64. - Copyright (C) 1997,99, 2000,02,03, 2006 Free Software Foundation, Inc. +/* Optimized 32-bit memset implementation for POWER6. + Copyright (C) 1997,99, 2000,02,03,06,2007 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,7 +28,8 @@ cache line (1024 bits). There is a special case for setting cache lines to 0, to take advantage of the dcbz instruction. */ -EALIGN (BP_SYM (memset), 5, 0) + .machine power6 +EALIGN (BP_SYM (memset), 7, 0) CALL_MCOUNT #define rTMP r0 @@ -41,15 +42,13 @@ EALIGN (BP_SYM (memset), 5, 0) #define rMEMP2 r8 #define rNEG64 r8 /* Constant -64 for clearing with dcbz. */ -#define rCLS r8 /* Cache line size (known to be 128). */ -#define rCLM r9 /* Cache line size mask to check for cache alignment. */ +#define rMEMP3 r9 /* Alt mem pointer. */ L(_memset): /* Take care of case for size <= 4. */ cmplwi cr1, rLEN, 4 andi. rALIGN, rMEMP0, 3 mr rMEMP, rMEMP0 ble- cr1, L(small) - /* Align to word boundary. */ cmplwi cr5, rLEN, 31 rlwimi rCHR, rCHR, 8, 16, 23 /* Replicate byte to halfword. */ @@ -82,6 +81,7 @@ L(aligned): bf 28, L(a1) stw rCHR, -4(rMEMP2) stwu rCHR, -8(rMEMP2) + nop L(a1): blt cr1, L(a2) stw rCHR, -4(rMEMP2) stw rCHR, -8(rMEMP2) @@ -90,7 +90,7 @@ L(a1): blt cr1, L(a2) L(a2): bf 29, L(caligned) stw rCHR, -4(rMEMP2) - .align 4 + .align 3 /* Now aligned to a 32 byte boundary. */ L(caligned): cmplwi cr1, rCHR, 0 @@ -98,83 +98,394 @@ L(caligned): mtcrf 0x01, rLEN beq cr1, L(zloopstart) /* Special case for clearing memory using dcbz. */ L(nondcbz): - srwi rTMP, rALIGN, 5 - mtctr rTMP beq L(medium) /* We may not actually get to do a full line. */ - clrlwi. rLEN, rLEN, 27 - add rMEMP, rMEMP, rALIGN - li rNEG64, -0x40 - bdz L(cloopdone) + nop +/* Storing a non-zero "c" value. We are aligned at a sector (32-byte) + boundary may not be at cache line (128-byte) boundary. */ +L(nzloopstart): +/* memset in 32-byte chunks until we get to a cache line boundary. + If rLEN is less then the distance to the next cache-line boundary use + cacheAligned1 code to finish the tail. */ + cmplwi cr1,rLEN,128 + + andi. rTMP,rMEMP,127 + blt cr1,L(cacheAligned1) + addi rMEMP3,rMEMP,32 + beq L(nzCacheAligned) + addi rLEN,rLEN,-32 + stw rCHR,0(rMEMP) + stw rCHR,4(rMEMP) + stw rCHR,8(rMEMP) + stw rCHR,12(rMEMP) + stw rCHR,16(rMEMP) + stw rCHR,20(rMEMP) + addi rMEMP,rMEMP,32 + andi. rTMP,rMEMP3,127 + stw rCHR,-8(rMEMP3) + stw rCHR,-4(rMEMP3) + beq L(nzCacheAligned) + addi rLEN,rLEN,-32 + stw rCHR,0(rMEMP3) + stw rCHR,4(rMEMP3) + addi rMEMP,rMEMP,32 + stw rCHR,8(rMEMP3) + stw rCHR,12(rMEMP3) + andi. rTMP,rMEMP,127 + stw rCHR,16(rMEMP3) + stw rCHR,20(rMEMP3) + stw rCHR,24(rMEMP3) + stw rCHR,28(rMEMP3) + + beq L(nzCacheAligned) + addi rLEN,rLEN,-32 +/* At this point we can overrun the store queue (pipe reject) so it is + time to slow things down. The store queue can merge two adjacent + stores into a single L1/L2 op, but the L2 is clocked at 1/2 the CPU. + So we add "group ending nops" to guarantee that we dispatch only two + stores every other cycle. */ + ori r1,r1,0 + ori r1,r1,0 + stw rCHR,32(rMEMP3) + stw rCHR,36(rMEMP3) + addi rMEMP,rMEMP,32 + cmplwi cr1,rLEN,128 + ori r1,r1,0 + ori r1,r1,0 + stw rCHR,40(rMEMP3) + stw rCHR,44(rMEMP3) + ori r1,r1,0 + ori r1,r1,0 + stw rCHR,48(rMEMP3) + stw rCHR,52(rMEMP3) + ori r1,r1,0 + ori r1,r1,0 + stw rCHR,56(rMEMP3) + stw rCHR,60(rMEMP3) + blt cr1,L(cacheAligned1) + b L(nzCacheAligned) + +/* Now we are aligned to the cache line and can use dcbtst. */ + .align 5 +L(nzCacheAligned): + cmplwi cr1,rLEN,128 + cmplwi cr6,rLEN,256 + blt cr1,L(cacheAligned1) + blt cr6,L(nzCacheAligned128) .align 4 -L(c3): dcbtst rNEG64, rMEMP - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - stw rCHR, -12(rMEMP) - stw rCHR, -16(rMEMP) - stw rCHR, -20(rMEMP) - stw rCHR, -24(rMEMP) - stw rCHR, -28(rMEMP) - stwu rCHR, -32(rMEMP) - bdnz L(c3) -L(cloopdone): - stw rCHR, -4(rMEMP) - stw rCHR, -8(rMEMP) - stw rCHR, -12(rMEMP) - stw rCHR, -16(rMEMP) - cmplwi cr1, rLEN, 16 - stw rCHR, -20(rMEMP) - stw rCHR, -24(rMEMP) - stw rCHR, -28(rMEMP) - stwu rCHR, -32(rMEMP) - beqlr - add rMEMP, rMEMP, rALIGN - b L(medium_tail2) +L(nzCacheAligned128): + nop + addi rMEMP3,rMEMP,64 + stw rCHR,0(rMEMP) + stw rCHR,4(rMEMP) + stw rCHR,8(rMEMP) + stw rCHR,12(rMEMP) + stw rCHR,16(rMEMP) + stw rCHR,20(rMEMP) + stw rCHR,24(rMEMP) + stw rCHR,28(rMEMP) + stw rCHR,32(rMEMP) + stw rCHR,36(rMEMP) + stw rCHR,40(rMEMP) + stw rCHR,44(rMEMP) + stw rCHR,48(rMEMP) + stw rCHR,52(rMEMP) + stw rCHR,56(rMEMP) + stw rCHR,60(rMEMP) + addi rMEMP,rMEMP3,64 + addi rLEN,rLEN,-128 +/* At this point we can overrun the store queue (pipe reject) so it is + time to slow things down. The store queue can merge two adjacent + stores into a single L1/L2 op, but the L2 is clocked at 1/2 the CPU. + So we add "group ending nops" to guarantee that we dispatch only one + store per cycle. */ + stw rCHR,0(rMEMP3) + ori r1,r1,0 + stw rCHR,4(rMEMP3) + ori r1,r1,0 + stw rCHR,8(rMEMP3) + ori r1,r1,0 + stw rCHR,12(rMEMP3) + ori r1,r1,0 + stw rCHR,16(rMEMP3) + ori r1,r1,0 + stw rCHR,20(rMEMP3) + ori r1,r1,0 + stw rCHR,24(rMEMP3) + ori r1,r1,0 + stw rCHR,28(rMEMP3) + ori r1,r1,0 + stw rCHR,32(rMEMP3) + ori r1,r1,0 + stw rCHR,36(rMEMP3) + ori r1,r1,0 + stw rCHR,40(rMEMP3) + ori r1,r1,0 + stw rCHR,44(rMEMP3) + ori r1,r1,0 + stw rCHR,48(rMEMP3) + ori r1,r1,0 + stw rCHR,52(rMEMP3) + ori r1,r1,0 + stw rCHR,56(rMEMP3) + ori r1,r1,0 + stw rCHR,60(rMEMP3) + blt cr6,L(cacheAligned1) +#ifndef NOT_IN_libc + lfd 0,-128(rMEMP) +#endif + b L(nzCacheAligned256) + .align 5 +L(nzCacheAligned256): + cmplwi cr1,rLEN,256 + addi rMEMP3,rMEMP,64 +#ifdef NOT_IN_libc +/* When we are not in libc we should use only GPRs to avoid the FPU lock + interrupt. */ + stw rCHR,0(rMEMP) + stw rCHR,4(rMEMP) + stw rCHR,8(rMEMP) + stw rCHR,12(rMEMP) + stw rCHR,16(rMEMP) + stw rCHR,20(rMEMP) + stw rCHR,24(rMEMP) + stw rCHR,28(rMEMP) + stw rCHR,32(rMEMP) + stw rCHR,36(rMEMP) + stw rCHR,40(rMEMP) + stw rCHR,44(rMEMP) + stw rCHR,48(rMEMP) + stw rCHR,52(rMEMP) + stw rCHR,56(rMEMP) + stw rCHR,60(rMEMP) + addi rMEMP,rMEMP3,64 + addi rLEN,rLEN,-128 + stw rCHR,0(rMEMP3) + stw rCHR,4(rMEMP3) + stw rCHR,8(rMEMP3) + stw rCHR,12(rMEMP3) + stw rCHR,16(rMEMP3) + stw rCHR,20(rMEMP3) + stw rCHR,24(rMEMP3) + stw rCHR,28(rMEMP3) + stw rCHR,32(rMEMP3) + stw rCHR,36(rMEMP3) + stw rCHR,40(rMEMP3) + stw rCHR,44(rMEMP3) + stw rCHR,48(rMEMP3) + stw rCHR,52(rMEMP3) + stw rCHR,56(rMEMP3) + stw rCHR,60(rMEMP3) +#else +/* We are in libc and this is a long memset so we can use FPRs and can afford + occasional FPU locked interrupts. */ + stfd 0,0(rMEMP) + stfd 0,8(rMEMP) + stfd 0,16(rMEMP) + stfd 0,24(rMEMP) + stfd 0,32(rMEMP) + stfd 0,40(rMEMP) + stfd 0,48(rMEMP) + stfd 0,56(rMEMP) + addi rMEMP,rMEMP3,64 + addi rLEN,rLEN,-128 + stfd 0,0(rMEMP3) + stfd 0,8(rMEMP3) + stfd 0,16(rMEMP3) + stfd 0,24(rMEMP3) + stfd 0,32(rMEMP3) + stfd 0,40(rMEMP3) + stfd 0,48(rMEMP3) + stfd 0,56(rMEMP3) +#endif + bge cr1,L(nzCacheAligned256) + dcbtst 0,rMEMP + b L(cacheAligned1) - .align 5 -/* Clear lines of memory in 128-byte chunks. */ + .align 4 +/* Storing a zero "c" value. We are aligned at a sector (32-byte) + boundary but may not be at cache line (128-byte) boundary. If the + remaining length spans a full cache line we can use the Data cache + block zero instruction. */ L(zloopstart): -/* If the remaining length is less the 32 bytes, don't bother getting - the cache line size. */ +/* memset in 32-byte chunks until we get to a cache line boundary. + If rLEN is less then the distance to the next cache-line boundary use + cacheAligned1 code to finish the tail. */ + cmplwi cr1,rLEN,128 beq L(medium) - li rCLS,128 /* cache line size is 128 */ - dcbt 0,rMEMP L(getCacheAligned): - cmplwi cr1,rLEN,32 andi. rTMP,rMEMP,127 - blt cr1,L(handletail32) + blt cr1,L(cacheAligned1) + addi rMEMP3,rMEMP,32 + beq L(cacheAligned) + addi rLEN,rLEN,-32 + stw rCHR,0(rMEMP) + stw rCHR,4(rMEMP) + stw rCHR,8(rMEMP) + stw rCHR,12(rMEMP) + stw rCHR,16(rMEMP) + stw rCHR,20(rMEMP) + addi rMEMP,rMEMP,32 + andi. rTMP,rMEMP3,127 + stw rCHR,-8(rMEMP3) + stw rCHR,-4(rMEMP3) +L(getCacheAligned2): beq L(cacheAligned) + addi rLEN,rLEN,-32 addi rMEMP,rMEMP,32 + stw rCHR,0(rMEMP3) + stw rCHR,4(rMEMP3) + stw rCHR,8(rMEMP3) + stw rCHR,12(rMEMP3) + andi. rTMP,rMEMP,127 + nop + stw rCHR,16(rMEMP3) + stw rCHR,20(rMEMP3) + stw rCHR,24(rMEMP3) + stw rCHR,28(rMEMP3) +L(getCacheAligned3): + beq L(cacheAligned) +/* At this point we can overrun the store queue (pipe reject) so it is + time to slow things down. The store queue can merge two adjacent + stores into a single L1/L2 op, but the L2 is clocked at 1/2 the CPU. + So we add "group ending nops" to guarantee that we dispatch only two + stores every other cycle. */ addi rLEN,rLEN,-32 - stw rCHR,-32(rMEMP) - stw rCHR,-28(rMEMP) - stw rCHR,-24(rMEMP) - stw rCHR,-20(rMEMP) - stw rCHR,-16(rMEMP) - stw rCHR,-12(rMEMP) - stw rCHR,-8(rMEMP) - stw rCHR,-4(rMEMP) - b L(getCacheAligned) + ori r1,r1,0 + ori r1,r1,0 + stw rCHR,32(rMEMP3) + stw rCHR,36(rMEMP3) + addi rMEMP,rMEMP,32 + cmplwi cr1,rLEN,128 + ori r1,r1,0 + stw rCHR,40(rMEMP3) + stw rCHR,44(rMEMP3) + cmplwi cr6,rLEN,256 + li rMEMP2,128 + ori r1,r1,0 + stw rCHR,48(rMEMP3) + stw rCHR,52(rMEMP3) + ori r1,r1,0 + ori r1,r1,0 + stw rCHR,56(rMEMP3) + stw rCHR,60(rMEMP3) + blt cr1,L(cacheAligned1) + blt cr6,L(cacheAligned128) + b L(cacheAlignedx) /* Now we are aligned to the cache line and can use dcbz. */ .align 4 L(cacheAligned): - cmplw cr1,rLEN,rCLS - blt cr1,L(handletail32) + cmplwi cr1,rLEN,128 + cmplwi cr6,rLEN,256 + blt cr1,L(cacheAligned1) + li rMEMP2,128 +L(cacheAlignedx): + cmpldi cr5,rLEN,640 + blt cr6,L(cacheAligned128) + bgt cr5,L(cacheAligned512) + cmplwi cr6,rLEN,512 dcbz 0,rMEMP - subf rLEN,rCLS,rLEN - add rMEMP,rMEMP,rCLS - b L(cacheAligned) + cmplwi cr1,rLEN,384 + dcbz rMEMP2,rMEMP + addi rMEMP,rMEMP,256 + addi rLEN,rLEN,-256 + blt cr1,L(cacheAligned1) + blt cr6,L(cacheAligned128) + b L(cacheAligned256) + .align 5 +/* A simple loop for the longer (>640 bytes) lengths. This form limits + the branch miss-predicted to exactly 1 at loop exit.*/ +L(cacheAligned512): + cmpli cr1,rLEN,128 + blt cr1,L(cacheAligned1) + dcbz 0,rMEMP + addi rLEN,rLEN,-128 + addi rMEMP,rMEMP,128 + b L(cacheAligned512) + .align 5 +L(cacheAligned256): + cmplwi cr6,rLEN,512 + dcbz 0,rMEMP + cmplwi cr1,rLEN,384 + dcbz rMEMP2,rMEMP + addi rMEMP,rMEMP,256 + addi rLEN,rLEN,-256 + bge cr6,L(cacheAligned256) + blt cr1,L(cacheAligned1) + .align 4 +L(cacheAligned128): + dcbz 0,rMEMP + addi rMEMP,rMEMP,128 + addi rLEN,rLEN,-128 + .align 4 +L(cacheAligned1): + cmplwi cr1,rLEN,32 + blt cr1,L(handletail32) + addi rMEMP3,rMEMP,32 + addi rLEN,rLEN,-32 + stw rCHR,0(rMEMP) + stw rCHR,4(rMEMP) + stw rCHR,8(rMEMP) + stw rCHR,12(rMEMP) + stw rCHR,16(rMEMP) + stw rCHR,20(rMEMP) + addi rMEMP,rMEMP,32 + cmplwi cr1,rLEN,32 + stw rCHR,-8(rMEMP3) + stw rCHR,-4(rMEMP3) +L(cacheAligned2): + blt cr1,L(handletail32) + addi rLEN,rLEN,-32 + stw rCHR,0(rMEMP3) + stw rCHR,4(rMEMP3) + stw rCHR,8(rMEMP3) + stw rCHR,12(rMEMP3) + addi rMEMP,rMEMP,32 + cmplwi cr1,rLEN,32 + stw rCHR,16(rMEMP3) + stw rCHR,20(rMEMP3) + stw rCHR,24(rMEMP3) + stw rCHR,28(rMEMP3) + nop +L(cacheAligned3): + blt cr1,L(handletail32) +/* At this point we can overrun the store queue (pipe reject) so it is + time to slow things down. The store queue can merge two adjacent + stores into a single L1/L2 op, but the L2 is clocked at 1/2 the CPU. + So we add "group ending nops" to guarantee that we dispatch only two + stores every other cycle. */ + ori r1,r1,0 + ori r1,r1,0 + addi rMEMP,rMEMP,32 + addi rLEN,rLEN,-32 + ori r1,r1,0 + ori r1,r1,0 + stw rCHR,32(rMEMP3) + stw rCHR,36(rMEMP3) + ori r1,r1,0 + ori r1,r1,0 + stw rCHR,40(rMEMP3) + stw rCHR,44(rMEMP3) + ori r1,r1,0 + ori r1,r1,0 + stw rCHR,48(rMEMP3) + stw rCHR,52(rMEMP3) + ori r1,r1,0 + ori r1,r1,0 + stw rCHR,56(rMEMP3) + stw rCHR,60(rMEMP3) -/* We are here because the cache line size was set and the remainder - (rLEN) is less than the actual cache line size. - So set up the preconditions for L(nondcbz) and go there. */ +/* We are here because the length or remainder (rLEN) is less than the + cache line/sector size and does not justify aggressive loop unrolling. + So set up the preconditions for L(medium) and go there. */ .align 3 L(handletail32): - clrrwi. rALIGN, rLEN, 5 - b L(nondcbz) + cmplwi cr1,rLEN,0 + beqlr cr1 + b L(medium) - .align 5 + .align 4 L(small): /* Memset of 4 bytes or less. */ cmplwi cr5, rLEN, 1 @@ -199,10 +510,10 @@ L(medium_tail): bt- 31, L(medium_31t) bt- 30, L(medium_30t) L(medium_30f): - bt- 29, L(medium_29t) + bt 29, L(medium_29t) L(medium_29f): - bge- cr1, L(medium_27t) - bflr- 28 + bge cr1, L(medium_27t) + bflr 28 stw rCHR, -4(rMEMP) stw rCHR, -8(rMEMP) blr @@ -215,14 +526,14 @@ L(medium_30t): bf- 29, L(medium_29f) L(medium_29t): stwu rCHR, -4(rMEMP) - blt- cr1, L(medium_27f) + blt cr1, L(medium_27f) L(medium_27t): stw rCHR, -4(rMEMP) stw rCHR, -8(rMEMP) stw rCHR, -12(rMEMP) stwu rCHR, -16(rMEMP) L(medium_27f): - bflr- 28 + bflr 28 L(medium_28t): stw rCHR, -4(rMEMP) stw rCHR, -8(rMEMP) diff --git a/libc/sysdeps/powerpc/powerpc64/power4/memcmp.S b/libc/sysdeps/powerpc/powerpc64/power4/memcmp.S index 8f74ca704..a5e0c758d 100644 --- a/libc/sysdeps/powerpc/powerpc64/power4/memcmp.S +++ b/libc/sysdeps/powerpc/powerpc64/power4/memcmp.S @@ -23,6 +23,7 @@ /* int [r3] memcmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5]) */ + .machine power4 EALIGN (BP_SYM(memcmp), 4, 0) CALL_MCOUNT 3 diff --git a/libc/sysdeps/powerpc/powerpc64/power4/memcpy.S b/libc/sysdeps/powerpc/powerpc64/power4/memcpy.S index 9910ebda8..56f313b4b 100644 --- a/libc/sysdeps/powerpc/powerpc64/power4/memcpy.S +++ b/libc/sysdeps/powerpc/powerpc64/power4/memcpy.S @@ -36,6 +36,7 @@ posible when both source and destination are doubleword aligned. Each case has a optimized unrolled loop. */ + .machine power4 EALIGN (BP_SYM (memcpy), 5, 0) CALL_MCOUNT 3 diff --git a/libc/sysdeps/powerpc/powerpc64/power4/memset.S b/libc/sysdeps/powerpc/powerpc64/power4/memset.S index 17b2d7695..e7a259acd 100644 --- a/libc/sysdeps/powerpc/powerpc64/power4/memset.S +++ b/libc/sysdeps/powerpc/powerpc64/power4/memset.S @@ -22,12 +22,6 @@ #include <bp-sym.h> #include <bp-asm.h> - .section ".toc","aw" -.LC0: - .tc __cache_line_size[TC],__cache_line_size - .section ".text" - .align 2 - /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); Returns 's'. @@ -35,6 +29,7 @@ cache line (256 bits). There is a special case for setting cache lines to 0, to take advantage of the dcbz instruction. */ + .machine power4 EALIGN (BP_SYM (memset), 5, 0) CALL_MCOUNT 3 diff --git a/libc/sysdeps/powerpc/powerpc64/power6/memset.S b/libc/sysdeps/powerpc/powerpc64/power6/memset.S index 6daaa2c36..ea74c117d 100644 --- a/libc/sysdeps/powerpc/powerpc64/power6/memset.S +++ b/libc/sysdeps/powerpc/powerpc64/power6/memset.S @@ -1,4 +1,4 @@ -/* Optimized memset implementation for PowerPC64. +/* Optimized 64-bit memset implementation for POWER6. Copyright (C) 1997, 1999, 2000, 2002, 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -22,12 +22,6 @@ #include <bp-sym.h> #include <bp-asm.h> - .section ".toc","aw" -.LC0: - .tc __cache_line_size[TC],__cache_line_size - .section ".text" - .align 2 - /* __ptr_t [r3] memset (__ptr_t s [r3], int c [r4], size_t n [r5])); Returns 's'. @@ -35,7 +29,8 @@ cache line (256 bits). There is a special case for setting cache lines to 0, to take advantage of the dcbz instruction. */ -EALIGN (BP_SYM (memset), 5, 0) + .machine power6 +EALIGN (BP_SYM (memset), 7, 0) CALL_MCOUNT 3 #define rTMP r0 @@ -53,10 +48,7 @@ EALIGN (BP_SYM (memset), 5, 0) #endif #define rALIGN r7 /* Number of bytes we are setting now (when aligning). */ #define rMEMP2 r8 - -#define rNEG64 r8 /* Constant -64 for clearing with dcbz. */ -#define rCLS r8 /* Cache line size obtained from static. */ -#define rCLM r9 /* Cache line size mask to check for cache alignment. */ +#define rMEMP3 r9 /* Alt mem pointer. */ L(_memset): #if __BOUNDED_POINTERS__ cmpldi cr1, rRTN, 0 @@ -70,7 +62,7 @@ L(b0): cmpldi cr1, rLEN, 8 andi. rALIGN, rMEMP0, 7 mr rMEMP, rMEMP0 - ble- cr1, L(small) + ble cr1, L(small) /* Align to doubleword boundary. */ cmpldi cr5, rLEN, 31 @@ -131,75 +123,217 @@ L(caligned): clrrdi. rALIGN, rLEN, 5 mtcrf 0x01, rLEN beq cr1, L(zloopstart) /* Special case for clearing memory using dcbz. */ -L(nondcbz): - srdi rTMP, rALIGN, 5 - mtctr rTMP beq L(medium) /* We may not actually get to do a full line. */ - clrldi. rLEN, rLEN, 59 - add rMEMP, rMEMP, rALIGN - li rNEG64, -0x40 - bdz L(cloopdone) + .align 4 +/* Storing a non-zero "c" value. We are aligned at a sector (32-byte) + boundary may not be at cache line (128-byte) boundary. */ +L(nzloopstart): +/* memset in 32-byte chunks until we get to a cache line boundary. + If rLEN is less then the distance to the next cache-line boundary use + cacheAligned1 code to finish the tail. */ + cmpldi cr1,rLEN,128 - .align 4 -L(c3): dcbtst rNEG64, rMEMP - std rCHR, -8(rMEMP) - std rCHR, -16(rMEMP) - std rCHR, -24(rMEMP) - stdu rCHR, -32(rMEMP) - bdnz L(c3) - .align 4 -L(cloopdone): - std rCHR, -8(rMEMP) - std rCHR, -16(rMEMP) - cmpldi cr1, rLEN, 16 - std rCHR, -24(rMEMP) - stdu rCHR, -32(rMEMP) - beqlr - add rMEMP, rMEMP, rALIGN - b L(medium_tail2) + andi. rTMP,rMEMP,127 + blt cr1,L(cacheAligned1) + addi rMEMP3,rMEMP,32 + beq L(nzCacheAligned) + addi rLEN,rLEN,-32 + std rCHR,0(rMEMP) + std rCHR,8(rMEMP) + std rCHR,16(rMEMP) + addi rMEMP,rMEMP,32 + andi. rTMP,rMEMP3,127 + std rCHR,-8(rMEMP3) + beq L(nzCacheAligned) + addi rLEN,rLEN,-32 + std rCHR,0(rMEMP3) + addi rMEMP,rMEMP,32 + std rCHR,8(rMEMP3) + andi. rTMP,rMEMP,127 + std rCHR,16(rMEMP3) + std rCHR,24(rMEMP3) + + beq L(nzCacheAligned) + addi rLEN,rLEN,-32 + std rCHR,32(rMEMP3) + addi rMEMP,rMEMP,32 + cmpldi cr1,rLEN,128 + std rCHR,40(rMEMP3) + cmpldi cr6,rLEN,256 + li rMEMP2,128 + std rCHR,48(rMEMP3) + std rCHR,56(rMEMP3) + blt cr1,L(cacheAligned1) + b L(nzCacheAligned128) + +/* Now we are aligned to the cache line and can use dcbtst. */ + .align 4 +L(nzCacheAligned): + cmpldi cr1,rLEN,128 + blt cr1,L(cacheAligned1) + b L(nzCacheAligned128) + .align 5 +L(nzCacheAligned128): + cmpldi cr1,rLEN,256 + addi rMEMP3,rMEMP,64 + std rCHR,0(rMEMP) + std rCHR,8(rMEMP) + std rCHR,16(rMEMP) + std rCHR,24(rMEMP) + std rCHR,32(rMEMP) + std rCHR,40(rMEMP) + std rCHR,48(rMEMP) + std rCHR,56(rMEMP) + addi rMEMP,rMEMP3,64 + addi rLEN,rLEN,-128 + std rCHR,0(rMEMP3) + std rCHR,8(rMEMP3) + std rCHR,16(rMEMP3) + std rCHR,24(rMEMP3) + std rCHR,32(rMEMP3) + std rCHR,40(rMEMP3) + std rCHR,48(rMEMP3) + std rCHR,56(rMEMP3) + bge cr1,L(nzCacheAligned128) + dcbtst 0,rMEMP + b L(cacheAligned1) .align 5 -/* Clear lines of memory in 128-byte chunks. */ +/* Storing a zero "c" value. We are aligned at a sector (32-byte) + boundary but may not be at cache line (128-byte) boundary. If the + remaining length spans a full cache line we can use the Data cache + block zero instruction. */ L(zloopstart): -/* If the remaining length is less the 32 bytes, don't bother getting - the cache line size. */ +/* memset in 32-byte chunks until we get to a cache line boundary. + If rLEN is less then the distance to the next cache-line boundary use + cacheAligned1 code to finish the tail. */ + cmpldi cr1,rLEN,128 beq L(medium) - li rCLS,128 /* cache line size is 128 */ - -/* Now we know the cache line size, and it is not 32-bytes, but - we may not yet be aligned to the cache line. May have a partial - line to fill, so touch it 1st. */ - dcbt 0,rMEMP L(getCacheAligned): - cmpldi cr1,rLEN,32 andi. rTMP,rMEMP,127 - blt cr1,L(handletail32) - beq L(cacheAligned) + nop + blt cr1,L(cacheAligned1) + addi rMEMP3,rMEMP,32 + beq L(cacheAligned) + addi rLEN,rLEN,-32 + std rCHR,0(rMEMP) + std rCHR,8(rMEMP) + std rCHR,16(rMEMP) addi rMEMP,rMEMP,32 + andi. rTMP,rMEMP3,127 + std rCHR,-8(rMEMP3) +L(getCacheAligned2): + beq L(cacheAligned) addi rLEN,rLEN,-32 - std rCHR,-32(rMEMP) - std rCHR,-24(rMEMP) - std rCHR,-16(rMEMP) - std rCHR,-8(rMEMP) - b L(getCacheAligned) + std rCHR,0(rMEMP3) + std rCHR,8(rMEMP3) + addi rMEMP,rMEMP,32 + andi. rTMP,rMEMP,127 + std rCHR,16(rMEMP3) + std rCHR,24(rMEMP3) +L(getCacheAligned3): + beq L(cacheAligned) + addi rLEN,rLEN,-32 + std rCHR,32(rMEMP3) + addi rMEMP,rMEMP,32 + cmpldi cr1,rLEN,128 + std rCHR,40(rMEMP3) + cmpldi cr6,rLEN,256 + li rMEMP2,128 + std rCHR,48(rMEMP3) + std rCHR,56(rMEMP3) + blt cr1,L(cacheAligned1) + blt cr6,L(cacheAligned128) + b L(cacheAlignedx) /* Now we are aligned to the cache line and can use dcbz. */ - .align 4 + .align 5 L(cacheAligned): - cmpld cr1,rLEN,rCLS - blt cr1,L(handletail32) + cmpldi cr1,rLEN,128 + cmpldi cr6,rLEN,256 + blt cr1,L(cacheAligned1) + li rMEMP2,128 +L(cacheAlignedx): + cmpldi cr5,rLEN,640 + blt cr6,L(cacheAligned128) + bgt cr5,L(cacheAligned512) + cmpldi cr6,rLEN,512 + dcbz 0,rMEMP + cmpldi cr1,rLEN,384 + dcbz rMEMP2,rMEMP + addi rMEMP,rMEMP,256 + addi rLEN,rLEN,-256 + blt cr1,L(cacheAligned1) + blt cr6,L(cacheAligned128) + b L(cacheAligned256) + .align 5 +/* A simple loop for the longer (>640 bytes) lengths. This form limits + the branch miss-predicted to exactly 1 at loop exit.*/ +L(cacheAligned512): + cmpli cr1,rLEN,128 + blt cr1,L(cacheAligned1) + dcbz 0,rMEMP + addi rLEN,rLEN,-128 + addi rMEMP,rMEMP,128 + b L(cacheAligned512) + .align 5 +L(cacheAligned256): + + cmpldi cr6,rLEN,512 + dcbz 0,rMEMP - subf rLEN,rCLS,rLEN - add rMEMP,rMEMP,rCLS - b L(cacheAligned) + cmpldi cr1,rLEN,384 + dcbz rMEMP2,rMEMP + addi rMEMP,rMEMP,256 + addi rLEN,rLEN,-256 + + bge cr6,L(cacheAligned256) + + blt cr1,L(cacheAligned1) + .align 4 +L(cacheAligned128): + dcbz 0,rMEMP + addi rMEMP,rMEMP,128 + addi rLEN,rLEN,-128 + nop +L(cacheAligned1): + cmpldi cr1,rLEN,32 + blt cr1,L(handletail32) + addi rMEMP3,rMEMP,32 + addi rLEN,rLEN,-32 + std rCHR,0(rMEMP) + std rCHR,8(rMEMP) + std rCHR,16(rMEMP) + addi rMEMP,rMEMP,32 + cmpldi cr1,rLEN,32 + std rCHR,-8(rMEMP3) +L(cacheAligned2): + blt cr1,L(handletail32) + addi rLEN,rLEN,-32 + std rCHR,0(rMEMP3) + std rCHR,8(rMEMP3) + addi rMEMP,rMEMP,32 + cmpldi cr1,rLEN,32 + std rCHR,16(rMEMP3) + std rCHR,24(rMEMP3) + nop +L(cacheAligned3): + blt cr1,L(handletail32) + addi rMEMP,rMEMP,32 + addi rLEN,rLEN,-32 + std rCHR,32(rMEMP3) + std rCHR,40(rMEMP3) + std rCHR,48(rMEMP3) + std rCHR,56(rMEMP3) -/* We are here because the cache line size was set and was not 32-bytes - and the remainder (rLEN) is less than the actual cache line size. - So set up the preconditions for L(nondcbz) and go there. */ +/* We are here because the length or remainder (rLEN) is less than the + cache line/sector size and does not justify aggressive loop unrolling. + So set up the preconditions for L(medium) and go there. */ .align 3 L(handletail32): - clrrwi. rALIGN, rLEN, 5 - b L(nondcbz) + cmpldi cr1,rLEN,0 + beqlr cr1 + b L(medium) .align 5 L(small): @@ -237,10 +371,10 @@ L(medium_tail): bt- 31, L(medium_31t) bt- 30, L(medium_30t) L(medium_30f): - bt- 29, L(medium_29t) + bt 29, L(medium_29t) L(medium_29f): - bge- cr1, L(medium_27t) - bflr- 28 + bge cr1, L(medium_27t) + bflr 28 std rCHR, -8(rMEMP) blr @@ -252,12 +386,12 @@ L(medium_30t): bf- 29, L(medium_29f) L(medium_29t): stwu rCHR, -4(rMEMP) - blt- cr1, L(medium_27f) + blt cr1, L(medium_27f) L(medium_27t): std rCHR, -8(rMEMP) stdu rCHR, -16(rMEMP) L(medium_27f): - bflr- 28 + bflr 28 L(medium_28t): std rCHR, -8(rMEMP) blr diff --git a/libc/sysdeps/powerpc/sched_cpucount.c b/libc/sysdeps/powerpc/sched_cpucount.c new file mode 100644 index 000000000..f151eed23 --- /dev/null +++ b/libc/sysdeps/powerpc/sched_cpucount.c @@ -0,0 +1,23 @@ +/* Copyright (C) 2007 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. */ + +#ifdef _ARCH_PWR5 +# define POPCNT(l) __builtin_popcountl (l) +#endif + +#include <posix/sched_cpucount.c> diff --git a/libc/sysdeps/s390/dl-procinfo.c b/libc/sysdeps/s390/dl-procinfo.c new file mode 100644 index 000000000..32c6aef95 --- /dev/null +++ b/libc/sysdeps/s390/dl-procinfo.c @@ -0,0 +1,80 @@ +/* Data for s390 version of processor capability information. + Copyright (C) 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2006. + + 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. */ + +/* This information must be kept in sync with the _DL_HWCAP_COUNT and + _DL_PLATFORM_COUNT definitions in procinfo.h. + + If anything should be added here check whether the size of each string + is still ok with the given array size. + + All the #ifdefs in the definitions are quite irritating but + necessary if we want to avoid duplicating the information. There + are three different modes: + + - PROCINFO_DECL is defined. This means we are only interested in + declarations. + + - PROCINFO_DECL is not defined: + + + if SHARED is defined the file is included in an array + initializer. The .element = { ... } syntax is needed. + + + if SHARED is not defined a normal array initialization is + needed. + */ + +#ifndef PROCINFO_CLASS +# define PROCINFO_CLASS +#endif + +#if !defined PROCINFO_DECL && defined SHARED + ._dl_s390_cap_flags +#else +PROCINFO_CLASS const char _dl_s390_cap_flags[7][6] +#endif +#ifndef PROCINFO_DECL += { + "esan3", "zarch", "stfle", "msa", "ldisp", "eimm", "dfp" + } +#endif +#if !defined SHARED || defined PROCINFO_DECL +; +#else +, +#endif + +#if !defined PROCINFO_DECL && defined SHARED + ._dl_s390_platforms +#else +PROCINFO_CLASS const char _dl_s390_platforms[4][7] +#endif +#ifndef PROCINFO_DECL += { + "g5", "z900", "z990", "z9-109" + } +#endif +#if !defined SHARED || defined PROCINFO_DECL +; +#else +, +#endif + +#undef PROCINFO_DECL +#undef PROCINFO_CLASS diff --git a/libc/sysdeps/s390/dl-procinfo.h b/libc/sysdeps/s390/dl-procinfo.h new file mode 100644 index 000000000..178d7cc01 --- /dev/null +++ b/libc/sysdeps/s390/dl-procinfo.h @@ -0,0 +1,99 @@ +/* s390 version of processor capability information handling macros. + Copyright (C) 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2006. + + 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 _DL_PROCINFO_H +#define _DL_PROCINFO_H 1 +#include <ldsodefs.h> + +#define _DL_HWCAP_COUNT 7 + +#define _DL_PLATFORMS_COUNT 4 + +/* The kernel provides up to 32 capability bits with elf_hwcap. */ +#define _DL_FIRST_PLATFORM 32 +/* Mask to filter out platforms. */ +#define _DL_HWCAP_PLATFORM (((1ULL << _DL_PLATFORMS_COUNT) - 1) \ + << _DL_FIRST_PLATFORM) + +/* Hardware capablity bit numbers are derived directly from the + facility indications as stored by the "store facility list" (STFL) + instruction. */ + +enum +{ + HWCAP_S390_ESAN3 = 1 << 0, + HWCAP_S390_ZARCH = 1 << 1, + HWCAP_S390_STFLE = 1 << 2, + HWCAP_S390_MSA = 1 << 3, + HWCAP_S390_LDISP = 1 << 4, + HWCAP_S390_EIMM = 1 << 5, + HWCAP_S390_DFP = 1 << 6, +}; + +#define HWCAP_IMPORTANT (HWCAP_S390_ZARCH | HWCAP_S390_LDISP \ + | HWCAP_S390_EIMM | HWCAP_S390_DFP) + +/* We cannot provide a general printing function. */ +#define _dl_procinfo(word) -1 + +static inline const char * +__attribute__ ((unused)) +_dl_hwcap_string (int idx) +{ + return GLRO(dl_s390_cap_flags)[idx]; +}; + +static inline const char * +__attribute__ ((unused)) +_dl_platform_string (int idx) +{ + return GLRO(dl_s390_platforms)[idx - _DL_FIRST_PLATFORM]; +}; + +static inline int +__attribute__ ((unused, always_inline)) +_dl_string_hwcap (const char *str) +{ + int i; + + for (i = 0; i < _DL_HWCAP_COUNT; i++) + { + if (strcmp (str, GLRO(dl_s390_cap_flags)[i]) == 0) + return i; + } + return -1; +}; + +static inline int +__attribute__ ((unused, always_inline)) +_dl_string_platform (const char *str) +{ + int i; + + if (str != NULL) + for (i = 0; i < _DL_PLATFORMS_COUNT; ++i) + { + if (strcmp (str, GLRO(dl_s390_platforms)[i]) == 0) + return _DL_FIRST_PLATFORM + i; + } + return -1; +}; + +#endif /* dl-procinfo.h */ diff --git a/libc/sysdeps/sh/bsd-_setjmp.S b/libc/sysdeps/sh/bsd-_setjmp.S index 2811fcfd1..dbfd95259 100644 --- a/libc/sysdeps/sh/bsd-_setjmp.S +++ b/libc/sysdeps/sh/bsd-_setjmp.S @@ -1,5 +1,5 @@ /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. SH version. - Copyright (C) 1999, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -36,14 +36,14 @@ ENTRY (_setjmp) mov.l 3f, r1 mov.l @(r0,r1), r1 jmp @r1 - mov #0, r0 + mov #0, r5 .align 2 3: .long C_SYMBOL_NAME(__sigsetjmp@GOT) #else mov.l 1f, r1 jmp @r1 - mov #0, r0 + mov #0, r5 .align 2 1: .long C_SYMBOL_NAME(__sigsetjmp) diff --git a/libc/sysdeps/sh/bsd-setjmp.S b/libc/sysdeps/sh/bsd-setjmp.S index e07628442..de226e128 100644 --- a/libc/sysdeps/sh/bsd-setjmp.S +++ b/libc/sysdeps/sh/bsd-setjmp.S @@ -1,5 +1,5 @@ /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. SH version. - Copyright (C) 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -36,14 +36,14 @@ ENTRY (setjmp) mov.l 3f, r1 mov.l @(r0,r1), r1 jmp @r1 - mov #1, r0 + mov #1, r5 .align 2 3: .long C_SYMBOL_NAME(__sigsetjmp@GOT) #else mov.l 1f, r1 jmp @r1 - mov #1, r0 + mov #1, r5 .align 2 1: .long C_SYMBOL_NAME(__sigsetjmp) diff --git a/libc/sysdeps/sparc/fpu/feholdexcpt.c b/libc/sysdeps/sparc/fpu/feholdexcpt.c index 729637ad1..424855e76 100644 --- a/libc/sysdeps/sparc/fpu/feholdexcpt.c +++ b/libc/sysdeps/sparc/fpu/feholdexcpt.c @@ -1,5 +1,5 @@ /* Store current floating-point environment and clear exceptions. - Copyright (C) 1997, 1998, 2005 Free Software Foundation, Inc. + Copyright (C) 1997, 1998, 2005, 2007 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,8 +26,8 @@ feholdexcept (fenv_t *envp) __fenv_stfsr (*envp); - /* Set all exceptions to non-stop. */ - tmp = *envp & ~(0x1f << 23); + /* Set all exceptions to non-stop and clear all exceptions. */ + tmp = *envp & ~((0x1f << 23) | FE_ALL_EXCEPT); __fenv_ldfsr (tmp); diff --git a/libc/sysdeps/sparc/fpu/fraiseexcpt.c b/libc/sysdeps/sparc/fpu/fraiseexcpt.c index cbb8be80e..b96eeaed2 100644 --- a/libc/sysdeps/sparc/fpu/fraiseexcpt.c +++ b/libc/sysdeps/sparc/fpu/fraiseexcpt.c @@ -1,5 +1,5 @@ /* Raise given exceptions. - Copyright (C) 1997, 1999, 2000, 2002 Free Software Foundation, Inc. + Copyright (C) 1997, 1999, 2000, 2002, 2007 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,9 @@ int __feraiseexcept (int excepts) { static const struct { - double zero, one, max, min, sixteen, pi; + double zero, one, max, min, pi; } c = { - 0.0, 1.0, DBL_MAX, DBL_MIN, 16.0, M_PI + 0.0, 1.0, DBL_MAX, DBL_MIN, M_PI }; double d; @@ -66,7 +66,7 @@ __feraiseexcept (int excepts) if ((FE_UNDERFLOW & excepts) != 0) { __asm ("" : "=e" (d) : "0" (c.min)); - d /= c.sixteen; + d *= d; __asm __volatile ("" : : "e" (d)); } diff --git a/libc/sysdeps/sparc/sparc32/dl-machine.h b/libc/sysdeps/sparc/sparc32/dl-machine.h index 19aac6a7f..b3b7852d8 100644 --- a/libc/sysdeps/sparc/sparc32/dl-machine.h +++ b/libc/sysdeps/sparc/sparc32/dl-machine.h @@ -1,5 +1,6 @@ /* Machine-dependent ELF dynamic relocation inline functions. SPARC version. - Copyright (C) 1996-2003, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1996-2003, 2004, 2005, 2006, 2007 + 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 @@ -155,12 +156,18 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) || __builtin_expect (l->l_info [VALIDX (DT_GNU_LIBLISTSZ)] != NULL, 0)) { /* Need to reinitialize .plt to undo prelinking. */ - int do_flush; Elf32_Rela *rela = (Elf32_Rela *) D_PTR (l, l_info[DT_JMPREL]); Elf32_Rela *relaend = (Elf32_Rela *) ((char *) rela + l->l_info[DT_PLTRELSZ]->d_un.d_val); - do_flush = GLRO(dl_hwcap) & HWCAP_SPARC_FLUSH; +#if !defined RTLD_BOOTSTRAP && !defined __sparc_v9__ + /* Note that we don't mask the hwcap here, as the flush is + essential to functionality on those cpu's that implement it. + For sparcv9 we can assume flush is present. */ + const int do_flush = GLRO(dl_hwcap) & HWCAP_SPARC_FLUSH; +#else + const int do_flush = 1; +#endif /* prelink must ensure there are no R_SPARC_NONE relocs left in .rela.plt. */ @@ -305,20 +312,11 @@ _dl_start_user:\n\ .size _dl_start_user, . - _dl_start_user\n\ .previous"); -static inline Elf32_Addr +static inline __attribute__ ((always_inline)) Elf32_Addr sparc_fixup_plt (const Elf32_Rela *reloc, Elf32_Addr *reloc_addr, - Elf32_Addr value, int t) + Elf32_Addr value, int t, int do_flush) { Elf32_Sword disp = value - (Elf32_Addr) reloc_addr; -#ifndef RTLD_BOOTSTRAP - /* Note that we don't mask the hwcap here, as the flush is essential to - functionality on those cpu's that implement it. */ - int do_flush = GLRO(dl_hwcap) & HWCAP_SPARC_FLUSH; -#else - /* Unfortunately, this is necessary, so that we can ensure - ld.so will not execute corrupt PLT entry instructions. */ - const int do_flush = 1; -#endif if (0 && disp >= -0x800000 && disp < 0x800000) { @@ -354,7 +352,15 @@ elf_machine_fixup_plt (struct link_map *map, lookup_t t, const Elf32_Rela *reloc, Elf32_Addr *reloc_addr, Elf32_Addr value) { - return sparc_fixup_plt (reloc, reloc_addr, value, 1); +#ifdef __sparc_v9__ + /* Sparc v9 can assume flush is always present. */ + const int do_flush = 1; +#else + /* Note that we don't mask the hwcap here, as the flush is essential to + functionality on those cpu's that implement it. */ + const int do_flush = GLRO(dl_hwcap) & HWCAP_SPARC_FLUSH; +#endif + return sparc_fixup_plt (reloc, reloc_addr, value, 1, do_flush); } /* Return the final value of a plt relocation. */ @@ -455,9 +461,21 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, *reloc_addr = value; break; case R_SPARC_JMP_SLOT: - /* At this point we don't need to bother with thread safety, - so we can optimize the first instruction of .plt out. */ - sparc_fixup_plt (reloc, reloc_addr, value, 0); + { +#if !defined RTLD_BOOTSTRAP && !defined __sparc_v9__ + /* Note that we don't mask the hwcap here, as the flush is + essential to functionality on those cpu's that implement + it. For sparcv9 we can assume flush is present. */ + const int do_flush = GLRO(dl_hwcap) & HWCAP_SPARC_FLUSH; +#else + /* Unfortunately, this is necessary, so that we can ensure + ld.so will not execute corrupt PLT entry instructions. */ + const int do_flush = 1; +#endif + /* At this point we don't need to bother with thread safety, + so we can optimize the first instruction of .plt out. */ + sparc_fixup_plt (reloc, reloc_addr, value, 0, do_flush); + } break; #if (!defined RTLD_BOOTSTRAP || USE___THREAD) \ && !defined RESOLVE_CONFLICT_FIND_MAP diff --git a/libc/sysdeps/sparc/sparc32/sparcv9b/memcpy.S b/libc/sysdeps/sparc/sparc32/sparcv9/sparcv9b/memcpy.S index 1404dead7..61960dce6 100644 --- a/libc/sysdeps/sparc/sparc32/sparcv9b/memcpy.S +++ b/libc/sysdeps/sparc/sparc32/sparcv9/sparcv9b/memcpy.S @@ -1,4 +1,2 @@ -#define ASI_PNF 0x82 -#define ASI_BLK_P 0xf0 #define XCC icc #include <sparc64/sparcv9b/memcpy.S> diff --git a/libc/sysdeps/sparc/sparc32/sparcv9v/memcpy.S b/libc/sysdeps/sparc/sparc32/sparcv9/sparcv9v/memcpy.S index 4c05f57bc..4c05f57bc 100644 --- a/libc/sysdeps/sparc/sparc32/sparcv9v/memcpy.S +++ b/libc/sysdeps/sparc/sparc32/sparcv9/sparcv9v/memcpy.S diff --git a/libc/sysdeps/sparc/sparc32/sparcv9v/memset.S b/libc/sysdeps/sparc/sparc32/sparcv9/sparcv9v/memset.S index 5e46c7489..5e46c7489 100644 --- a/libc/sysdeps/sparc/sparc32/sparcv9v/memset.S +++ b/libc/sysdeps/sparc/sparc32/sparcv9/sparcv9v/memset.S diff --git a/libc/sysdeps/unix/clock_gettime.c b/libc/sysdeps/unix/clock_gettime.c index f698f0151..fbaaf301e 100644 --- a/libc/sysdeps/unix/clock_gettime.c +++ b/libc/sysdeps/unix/clock_gettime.c @@ -1,5 +1,5 @@ /* clock_gettime -- Get the current time from a POSIX clockid_t. Unix version. - Copyright (C) 1999-2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1999-2004, 2005, 2007 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 @@ -93,7 +93,6 @@ int clock_gettime (clockid_t clock_id, struct timespec *tp) { int retval = -1; - struct timeval tv; switch (clock_id) { @@ -103,9 +102,12 @@ clock_gettime (clockid_t clock_id, struct timespec *tp) #ifndef HANDLED_REALTIME case CLOCK_REALTIME: - retval = gettimeofday (&tv, NULL); - if (retval == 0) - TIMEVAL_TO_TIMESPEC (&tv, tp); + { + struct timeval tv; + retval = gettimeofday (&tv, NULL); + if (retval == 0) + TIMEVAL_TO_TIMESPEC (&tv, tp); + } break; #endif diff --git a/libc/sysdeps/unix/clock_settime.c b/libc/sysdeps/unix/clock_settime.c index a93be6349..f3f62cf99 100644 --- a/libc/sysdeps/unix/clock_settime.c +++ b/libc/sysdeps/unix/clock_settime.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1999-2004, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1999-2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -23,7 +23,7 @@ #include <ldsodefs.h> -#if HP_TIMING_AVAIL +#if HP_TIMING_AVAIL && !defined HANDLED_CPUTIME /* Clock frequency of the processor. We make it a 64-bit variable because some jokers are already playing with processors with more than 4GHz. */ @@ -33,10 +33,8 @@ static hp_timing_t freq; /* This function is defined in the thread library. */ extern void __pthread_clock_settime (clockid_t clock_id, hp_timing_t offset) __attribute__ ((__weak__)); -#endif -#if HP_TIMING_AVAIL static int hp_timing_settime (clockid_t clock_id, const struct timespec *tp) { diff --git a/libc/sysdeps/unix/dirstream.h b/libc/sysdeps/unix/dirstream.h index a1f74473c..8303f07fa 100644 --- a/libc/sysdeps/unix/dirstream.h +++ b/libc/sysdeps/unix/dirstream.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1996, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,7 +17,6 @@ 02111-1307 USA. */ #ifndef _DIRSTREAM_H - #define _DIRSTREAM_H 1 #include <sys/types.h> @@ -33,14 +32,16 @@ struct __dirstream { int fd; /* File descriptor. */ - char *data; /* Directory block. */ + __libc_lock_define (, lock) /* Mutex lock for this structure. */ + size_t allocation; /* Space allocated for the block. */ size_t size; /* Total valid data in the block. */ size_t offset; /* Current offset into the block. */ off_t filepos; /* Position of next entry to read. */ - __libc_lock_define (, lock) /* Mutex lock for this structure. */ + /* Directory block. */ + char data[0] __attribute__ ((aligned (__alignof__ (void*)))); }; #define _DIR_dirfd(dirp) ((dirp)->fd) diff --git a/libc/sysdeps/unix/opendir.c b/libc/sysdeps/unix/opendir.c index 59772cda7..0a116247d 100644 --- a/libc/sysdeps/unix/opendir.c +++ b/libc/sysdeps/unix/opendir.c @@ -31,6 +31,7 @@ #include <dirstream.h> #include <not-cancel.h> +#include <kernel-features.h> /* opendir() must not accidentally open something other than a directory. @@ -110,7 +111,11 @@ __opendir (const char *name) } } - int fd = open_not_cancel_2 (name, O_RDONLY|O_NDELAY|EXTRA_FLAGS|O_LARGEFILE); + int flags = O_RDONLY|O_NDELAY|EXTRA_FLAGS|O_LARGEFILE; +#ifdef O_CLOEXEC + flags |= O_CLOEXEC; +#endif + int fd = open_not_cancel_2 (name, flags); if (__builtin_expect (fd, 0) < 0) return NULL; @@ -138,12 +143,33 @@ __opendir (const char *name) weak_alias (__opendir, opendir) +#ifdef __ASSUME_O_CLOEXEC +# define check_have_o_cloexec(fd) 1 +#else +static int +check_have_o_cloexec (int fd) +{ + if (__have_o_cloexec == 0) + __have_o_cloexec = (__fcntl (fd, F_GETFD, 0) & FD_CLOEXEC) == 0 ? -1 : 1; + return __have_o_cloexec > 0; +} +#endif + + DIR * internal_function __alloc_dir (int fd, bool close_fd, const struct stat64 *statp) { - if (__builtin_expect (__fcntl (fd, F_SETFD, FD_CLOEXEC), 0) < 0) - goto lose; + /* We always have to set the close-on-exit flag if the user provided + the file descriptor. Otherwise only if we have no working + O_CLOEXEC support. */ +#ifdef O_CLOEXEC + if (! close_fd || ! check_have_o_cloexec (fd)) +#endif + { + if (__builtin_expect (__fcntl (fd, F_SETFD, FD_CLOEXEC), 0) < 0) + goto lose; + } size_t allocation; #ifdef _STATBUF_ST_BLKSIZE @@ -155,9 +181,7 @@ __alloc_dir (int fd, bool close_fd, const struct stat64 *statp) allocation = (BUFSIZ < sizeof (struct dirent64) ? sizeof (struct dirent64) : BUFSIZ); - const int pad = -sizeof (DIR) % __alignof__ (struct dirent64); - - DIR *dirp = (DIR *) malloc (sizeof (DIR) + allocation + pad); + DIR *dirp = (DIR *) malloc (sizeof (DIR) + allocation); if (dirp == NULL) lose: { @@ -169,14 +193,15 @@ __alloc_dir (int fd, bool close_fd, const struct stat64 *statp) } return NULL; } - memset (dirp, '\0', sizeof (DIR)); - dirp->data = (char *) (dirp + 1) + pad; - dirp->allocation = allocation; - dirp->fd = fd; + dirp->fd = fd; #ifndef NOT_IN_libc __libc_lock_init (dirp->lock); #endif + dirp->allocation = allocation; + dirp->size = 0; + dirp->offset = 0; + dirp->filepos = 0; return dirp; } diff --git a/libc/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h index f17dc2bdc..b4f49cf63 100644 --- a/libc/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-2000, 2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2000,2004,2005,2006,2007 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 @@ -50,6 +50,7 @@ # define O_NOFOLLOW 0200000 /* Do not follow links. */ # define O_DIRECT 02000000 /* Direct disk access. */ # define O_NOATIME 04000000 /* Do not set atime. */ +# define O_CLOEXEC 010000000 /* Set close_on_exec. */ #endif #ifdef __USE_LARGEFILE64 diff --git a/libc/sysdeps/unix/sysv/linux/alpha/sysdep.h b/libc/sysdeps/unix/sysv/linux/alpha/sysdep.h index a22da71d6..f0661d162 100644 --- a/libc/sysdeps/unix/sysv/linux/alpha/sysdep.h +++ b/libc/sysdeps/unix/sysv/linux/alpha/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1993, 1995, 1996, 1997, 2002, 2003, 2004 +/* Copyright (C) 1992, 1993, 1995, 1996, 1997, 2002, 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>, August 1995. @@ -29,6 +29,8 @@ /* There is some commonality. */ #include <sysdeps/unix/alpha/sysdep.h> +#include <tls.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 diff --git a/libc/sysdeps/unix/sysv/linux/bits/sched.h b/libc/sysdeps/unix/sysv/linux/bits/sched.h index 31db66f8a..5eaa2fe52 100644 --- a/libc/sysdeps/unix/sysv/linux/bits/sched.h +++ b/libc/sysdeps/unix/sysv/linux/bits/sched.h @@ -104,7 +104,7 @@ struct __sched_param # define __CPU_SETSIZE 1024 # define __NCPUBITS (8 * sizeof (__cpu_mask)) -/* Type for array elements in 'cpu_set'. */ +/* Type for array elements in 'cpu_set_t'. */ typedef unsigned long int __cpu_mask; /* Basic access functions. */ @@ -118,20 +118,72 @@ typedef struct } cpu_set_t; /* Access functions for CPU masks. */ -# define __CPU_ZERO(cpusetp) \ +# if __GNUC_PREREQ (2, 91) +# define __CPU_ZERO_S(setsize, cpusetp) \ + do __builtin_memset (cpusetp, '\0', setsize); while (0) +# else +# define __CPU_ZERO_S(setsize, cpusetp) \ do { \ - unsigned int __i; \ + size_t __i; \ + size_t __imax = (setsize) / sizeof (__cpu_mask); \ cpu_set_t *__arr = (cpusetp); \ - for (__i = 0; __i < sizeof (cpu_set_t) / sizeof (__cpu_mask); ++__i) \ + for (__i = 0; __i < __imax; ++__i) \ __arr->__bits[__i] = 0; \ } while (0) -# define __CPU_SET(cpu, cpusetp) \ - ((cpusetp)->__bits[__CPUELT (cpu)] |= __CPUMASK (cpu)) -# define __CPU_CLR(cpu, cpusetp) \ - ((cpusetp)->__bits[__CPUELT (cpu)] &= ~__CPUMASK (cpu)) -# define __CPU_ISSET(cpu, cpusetp) \ - (((cpusetp)->__bits[__CPUELT (cpu)] & __CPUMASK (cpu)) != 0) -extern int __sched_cpucount (size_t __setsize, cpu_set_t *__setp) __THROW; -# define __CPU_COUNT(cpusetp) \ - __sched_cpucount (sizeof (cpu_set_t), cpusetp) +# endif +# define __CPU_SET_S(cpu, setsize, cpusetp) \ + ({ size_t __cpu = (cpu); \ + __cpu < 8 * (setsize) \ + ? ((cpusetp)->__bits[__CPUELT (__cpu)] |= __CPUMASK (__cpu)) : 0; }) +# define __CPU_CLR_S(cpu, setsize, cpusetp) \ + ({ size_t __cpu = (cpu); \ + __cpu < 8 * (setsize) \ + ? ((cpusetp)->__bits[__CPUELT (__cpu)] &= ~__CPUMASK (__cpu)) : 0; }) +# define __CPU_ISSET_S(cpu, setsize, cpusetp) \ + ({ size_t __cpu = (cpu); \ + __cpu < 8 * (setsize) \ + ? (((cpusetp)->__bits[__CPUELT (__cpu)] & __CPUMASK (__cpu))) != 0 : 0; }) + +# define __CPU_COUNT_S(setsize, cpusetp) \ + __sched_cpucount (setsize, cpusetp) + +# if __GNUC_PREREQ (2, 91) +# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ + (__builtin_memcmp (cpusetp1, cpusetp2, setsize) == 0) +# else +# define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ + ({ cpu_set_t *__arr1 = (cpusetp1); \ + cpu_set_t *__arr2 = (cpusetp2); \ + size_t __imax = (setsize) / sizeof (__cpu_mask); \ + size_t __i; \ + for (__i = 0; __i < __imax; ++__i) \ + if (__arr1->__bits[__i] != __arr2->__bits[__i]) \ + break; \ + __i == __imax; }) +# endif + +# define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \ + ({ cpu_set_t *__dest = (destset); \ + cpu_set_t *__arr1 = (srcset1); \ + cpu_set_t *__arr2 = (srcset2); \ + size_t __imax = (setsize) / sizeof (__cpu_mask); \ + size_t __i; \ + for (__i = 0; __i < __imax; ++__i) \ + __dest->__bits[__i] = __arr1->__bits[__i] op __arr2->__bits[__i]; \ + __dest; }) + +# define __CPU_ALLOC_SIZE(count) \ + ((((count) + __NCPUBITS - 1) / __NCPUBITS) * 8) +# define __CPU_ALLOC(count) __sched_cpualloc (count) +# define __CPU_FREE(cpuset) __sched_cpufree (cpuset) + +__BEGIN_DECLS + +extern int __sched_cpucount (size_t __setsize, const cpu_set_t *__setp) + __THROW; +extern cpu_set_t *__sched_cpualloc (size_t __count) __THROW __wur; +extern void __sched_cpufree (cpu_set_t *__set) __THROW; + +__END_DECLS + #endif diff --git a/libc/sysdeps/unix/sysv/linux/bits/socket.h b/libc/sysdeps/unix/sysv/linux/bits/socket.h index 377f589bb..89a9106b2 100644 --- a/libc/sysdeps/unix/sysv/linux/bits/socket.h +++ b/libc/sysdeps/unix/sysv/linux/bits/socket.h @@ -63,7 +63,7 @@ enum __socket_type /* Protocol families. */ #define PF_UNSPEC 0 /* Unspecified. */ #define PF_LOCAL 1 /* Local to host (pipes and file-domain). */ -#define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */ +#define PF_UNIX PF_LOCAL /* POSIX name for PF_LOCAL. */ #define PF_FILE PF_LOCAL /* Another non-standard name for PF_LOCAL. */ #define PF_INET 2 /* IP protocol family. */ #define PF_AX25 3 /* Amateur Radio AX.25. */ @@ -90,7 +90,9 @@ enum __socket_type #define PF_PPPOX 24 /* PPPoX sockets. */ #define PF_WANPIPE 25 /* Wanpipe API sockets. */ #define PF_BLUETOOTH 31 /* Bluetooth sockets. */ -#define PF_MAX 32 /* For now.. */ +#define PF_IUCV 32 /* IUCV sockets. */ +#define PF_RXRPC 33 /* RxRPC sockets. */ +#define PF_MAX 34 /* For now.. */ /* Address families. */ #define AF_UNSPEC PF_UNSPEC @@ -122,6 +124,8 @@ enum __socket_type #define AF_PPPOX PF_PPPOX #define AF_WANPIPE PF_WANPIPE #define AF_BLUETOOTH PF_BLUETOOTH +#define AF_IUCV PF_IUCV +#define AF_RXRPC PF_RXRPC #define AF_MAX PF_MAX /* Socket level values. Others are defined in the appropriate headers. @@ -206,8 +210,13 @@ enum #define MSG_ERRQUEUE MSG_ERRQUEUE MSG_NOSIGNAL = 0x4000, /* Do not generate SIGPIPE. */ #define MSG_NOSIGNAL MSG_NOSIGNAL - MSG_MORE = 0x8000 /* Sender will send more. */ + MSG_MORE = 0x8000, /* Sender will send more. */ #define MSG_MORE MSG_MORE + + MSG_CMSG_CLOEXEC = 0x40000000 /* Set close_on_exit for file + descriptor received through + SCM_RIGHTS. */ +#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC }; diff --git a/libc/sysdeps/unix/sysv/linux/check_pf.c b/libc/sysdeps/unix/sysv/linux/check_pf.c index 46161a806..df7cbb189 100644 --- a/libc/sysdeps/unix/sysv/linux/check_pf.c +++ b/libc/sysdeps/unix/sysv/linux/check_pf.c @@ -41,6 +41,9 @@ #ifndef IFA_F_HOMEADDRESS # define IFA_F_HOMEADDRESS 0 #endif +#ifndef IFA_F_OPTIMISTIC +# define IFA_F_OPTIMISTIC 0 +#endif static int @@ -139,42 +142,77 @@ make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6, if (nlmh->nlmsg_type == RTM_NEWADDR) { struct ifaddrmsg *ifam = (struct ifaddrmsg *) NLMSG_DATA (nlmh); + struct rtattr *rta = IFA_RTA (ifam); + size_t len = nlmh->nlmsg_len - NLMSG_LENGTH (sizeof (*ifam)); switch (ifam->ifa_family) { + const void *local; + const void *address; + case AF_INET: - *seen_ipv4 = true; + local = NULL; + address = NULL; + while (RTA_OK (rta, len)) + { + switch (rta->rta_type) + { + case IFA_LOCAL: + local = RTA_DATA (rta); + break; + + case IFA_ADDRESS: + address = RTA_DATA (rta); + goto out_v4; + } + + rta = RTA_NEXT (rta, len); + } + + if (local != NULL) + { + out_v4: + if (*(const in_addr_t *) (address ?: local) + != htonl (INADDR_LOOPBACK)) + *seen_ipv4 = true; + } break; - case AF_INET6: - *seen_ipv6 = true; - if (ifam->ifa_flags & (IFA_F_DEPRECATED - | IFA_F_TEMPORARY - | IFA_F_HOMEADDRESS)) + case AF_INET6: + local = NULL; + address = NULL; + while (RTA_OK (rta, len)) { - struct rtattr *rta = IFA_RTA (ifam); - size_t len = (nlmh->nlmsg_len - - NLMSG_LENGTH (sizeof (*ifam))); - void *local = NULL; - void *address = NULL; - while (RTA_OK (rta, len)) + switch (rta->rta_type) { - switch (rta->rta_type) - { - case IFA_LOCAL: - local = RTA_DATA (rta); - break; - - case IFA_ADDRESS: - address = RTA_DATA (rta); - break; - } - - rta = RTA_NEXT (rta, len); + case IFA_LOCAL: + local = RTA_DATA (rta); + break; + + case IFA_ADDRESS: + address = RTA_DATA (rta); + goto out_v6; } + rta = RTA_NEXT (rta, len); + } + + if (local != NULL) + { + out_v6: + if (!IN6_IS_ADDR_LOOPBACK (address ?: local)) + *seen_ipv6 = true; + } + + if (ifam->ifa_flags & (IFA_F_DEPRECATED + | IFA_F_TEMPORARY + | IFA_F_HOMEADDRESS + | IFA_F_OPTIMISTIC)) + { struct in6ailist *newp = alloca (sizeof (*newp)); - newp->info.flags = (((ifam->ifa_flags & IFA_F_DEPRECATED) + newp->info.flags = (((ifam->ifa_flags + & (IFA_F_DEPRECATED + | IFA_F_OPTIMISTIC)) ? in6ai_deprecated : 0) | ((ifam->ifa_flags & IFA_F_TEMPORARY) @@ -203,7 +241,7 @@ make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6, close_not_cancel_no_status (fd); - if (in6ailist != NULL) + if (*seen_ipv6 && in6ailist != NULL) { *in6ai = malloc (in6ailistlen * sizeof (**in6ai)); if (*in6ai == NULL) diff --git a/libc/sysdeps/unix/sysv/linux/clock_gettime.c b/libc/sysdeps/unix/sysv/linux/clock_gettime.c index 5afe20feb..cd536a0fc 100644 --- a/libc/sysdeps/unix/sysv/linux/clock_gettime.c +++ b/libc/sysdeps/unix/sysv/linux/clock_gettime.c @@ -1,5 +1,5 @@ /* clock_gettime -- Get current time from a POSIX clockid_t. Linux version. - Copyright (C) 2003,2004,2005,2006 Free Software Foundation, Inc. + Copyright (C) 2003,2004,2005,2006,2007 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 @@ -133,11 +133,19 @@ maybe_syscall_gettime_cpu (clockid_t clock_id, struct timespec *tp) { if (e == EINVAL) { +# ifdef HAVE_CLOCK_GETRES_VSYSCALL /* Check whether the kernel supports CPU clocks at all. If not, record it for the future. */ r = INTERNAL_VSYSCALL (clock_getres, err, 2, + MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), + NULL); +# else + /* Check whether the kernel supports CPU clocks at all. + If not, record it for the future. */ + r = INTERNAL_SYSCALL (clock_getres, err, 2, MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED), NULL); +# endif if (INTERNAL_SYSCALL_ERROR_P (r, err)) __libc_missing_posix_cpu_timers = 1; } diff --git a/libc/sysdeps/unix/sysv/linux/dl-osinfo.h b/libc/sysdeps/unix/sysv/linux/dl-osinfo.h index 6a7694ec4..082790f63 100644 --- a/libc/sysdeps/unix/sysv/linux/dl-osinfo.h +++ b/libc/sysdeps/unix/sysv/linux/dl-osinfo.h @@ -1,5 +1,6 @@ /* Operating system specific code for generic dynamic loader functions. Linux. - Copyright (C) 2000,2001,2002,2004,2005,2006 Free Software Foundation, Inc. + Copyright (C) 2000,2001,2002,2004,2005,2006,2007 + 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,11 +52,9 @@ _dl_discover_osversion (void) static const struct { - ElfW(Word) vendorlen; - ElfW(Word) datalen; - ElfW(Word) type; + ElfW(Nhdr) hdr; char vendor[8]; - } expected_note = { sizeof "Linux", sizeof (ElfW(Word)), 0, "Linux" }; + } expected_note = { { sizeof "Linux", sizeof (ElfW(Word)), 0 }, "Linux" }; const ElfW(Phdr) *const phdr = GLRO(dl_sysinfo_map)->l_phdr; const ElfW(Word) phnum = GLRO(dl_sysinfo_map)->l_phnum; for (uint_fast16_t i = 0; i < phnum; ++i) @@ -63,20 +62,16 @@ _dl_discover_osversion (void) { const ElfW(Addr) start = (phdr[i].p_vaddr + GLRO(dl_sysinfo_map)->l_addr); - const struct - { - ElfW(Word) vendorlen; - ElfW(Word) datalen; - ElfW(Word) type; - } *note = (const void *) start; + const ElfW(Nhdr) *note = (const void *) start; while ((ElfW(Addr)) (note + 1) - start < phdr[i].p_memsz) { if (!memcmp (note, &expected_note, sizeof expected_note)) return *(const ElfW(Word) *) ((const void *) note + sizeof expected_note); -#define ROUND(len) (((len) + sizeof (ElfW(Word)) - 1) & -sizeof (ElfW(Word))) +#define ROUND(len) (((len) + sizeof note->n_type - 1) & -sizeof note->n_type) note = ((const void *) (note + 1) - + ROUND (note->vendorlen) + ROUND (note->datalen)); + + ROUND (note->n_namesz) + ROUND (note->n_descsz)); +#undef ROUND } } } diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/dl-vdso.c b/libc/sysdeps/unix/sysv/linux/dl-vdso.c index e1be09773..28d4bb1d4 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/dl-vdso.c +++ b/libc/sysdeps/unix/sysv/linux/dl-vdso.c @@ -1,5 +1,5 @@ /* ELF symbol resolve functions for VDSO objects. - Copyright (C) 2005 Free Software Foundation, Inc. + Copyright (C) 2005, 2007 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 @@ -18,13 +18,12 @@ 02111-1307 USA. */ #include "config.h" -#include <dl-hash.h> #include <ldsodefs.h> void * internal_function -_dl_vdso_vsym (const char *name, const char *version) +_dl_vdso_vsym (const char *name, const struct r_found_version *vers) { struct link_map *map = GLRO (dl_sysinfo_map); void *value = NULL; @@ -37,19 +36,11 @@ _dl_vdso_vsym (const char *name, const char *version) memset (&wsym, 0, sizeof (ElfW (Sym))); wsym.st_info = (unsigned char) ELFW (ST_INFO (STB_WEAK, STT_NOTYPE)); - /* Compute hash value to the version string. */ - struct r_found_version vers; - vers.name = version; - vers.hidden = 1; - vers.hash = _dl_elf_hash (version); - /* We don't have a specific file where the symbol can be found. */ - vers.filename = NULL; - /* Search the scope of the vdso map. */ const ElfW (Sym) *ref = &wsym; lookup_t result = GLRO (dl_lookup_symbol_x) (name, map, &ref, map->l_local_scope, - &vers, 0, 0, NULL); + vers, 0, 0, NULL); if (ref != NULL) value = DL_SYMBOL_ADDRESS (result, ref); diff --git a/libc/sysdeps/unix/sysv/linux/dl-vdso.h b/libc/sysdeps/unix/sysv/linux/dl-vdso.h new file mode 100644 index 000000000..7e433e03a --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/dl-vdso.h @@ -0,0 +1,49 @@ +/* ELF symbol resolve functions for VDSO objects. + Copyright (C) 2005, 2007 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 _DL_VDSO_H +#define _DL_VDSO_H 1 + +#include <assert.h> +#include <ldsodefs.h> + +#ifdef NDEBUG +# define CHECK_HASH(var) do {} while (0) +#else +# include <dl-hash.h> +# define CHECK_HASH(var) assert (var.hash == _dl_elf_hash (var.name)) +#endif + +/* Create version number record for lookup. */ +#define PREPARE_VERSION(var, vname, vhash) \ + struct r_found_version var; \ + var.name = vname; \ + var.hidden = 1; \ + var.hash = vhash; \ + CHECK_HASH (var); \ + /* We don't have a specific file where the symbol can be found. */ \ + var.filename = NULL + + +/* Functions for resolving symbols in the VDSO link map. */ +extern void *_dl_vdso_vsym (const char *name, + const struct r_found_version *version) + internal_function attribute_hidden; + +#endif /* dl-vdso.h */ diff --git a/libc/sysdeps/unix/sysv/linux/fstatfs64.c b/libc/sysdeps/unix/sysv/linux/fstatfs64.c index 48afd1f4d..79c9adcdc 100644 --- a/libc/sysdeps/unix/sysv/linux/fstatfs64.c +++ b/libc/sysdeps/unix/sysv/linux/fstatfs64.c @@ -1,5 +1,6 @@ /* Return information about the filesystem on which FD resides. - Copyright (C) 1996,1997,1998,1999,2000,2003 Free Software Foundation, Inc. + Copyright (C) 1996,1997,1998,1999,2000,2003,2007 + 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,6 +23,7 @@ #include <sys/statfs.h> #include <stddef.h> #include <sysdep.h> +#include <kernel-features.h> /* Defined in statfs64.c. */ extern int __no_statfs64 attribute_hidden; diff --git a/libc/sysdeps/unix/sysv/linux/fxstatat.c b/libc/sysdeps/unix/sysv/linux/fxstatat.c index c1c416abd..1b9add40d 100644 --- a/libc/sysdeps/unix/sysv/linux/fxstatat.c +++ b/libc/sysdeps/unix/sysv/linux/fxstatat.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -30,6 +30,7 @@ #include <sysdep.h> #include <sys/syscall.h> #include <bp-checks.h> +#include <kernel-features.h> #include <xstatconv.h> diff --git a/libc/sysdeps/unix/sysv/linux/getsysstats.c b/libc/sysdeps/unix/sysv/linux/getsysstats.c index d655ba3b2..6d4c9c06e 100644 --- a/libc/sysdeps/unix/sysv/linux/getsysstats.c +++ b/libc/sysdeps/unix/sysv/linux/getsysstats.c @@ -1,5 +1,5 @@ /* Determine various system internal values, Linux version. - Copyright (C) 1996-2001, 2002, 2003, 2006 Free Software Foundation, Inc. + Copyright (C) 1996-2001, 2002, 2003, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -21,7 +21,9 @@ #include <alloca.h> #include <assert.h> #include <ctype.h> +#include <dirent.h> #include <errno.h> +#include <fcntl.h> #include <mntent.h> #include <paths.h> #include <stdio.h> @@ -32,6 +34,7 @@ #include <sys/sysinfo.h> #include <atomic.h> +#include <not-cancel.h> /* How we can determine the number of available processors depends on @@ -64,14 +67,15 @@ while (0) #endif + int __get_nprocs () { + /* XXX Here will come a test for the new system call. */ + char buffer[8192]; int result = 1; - /* XXX Here will come a test for the new system call. */ - /* The /proc/stat format is more uniform, use it by default. */ FILE *fp = fopen ("/proc/stat", "rc"); if (fp != NULL) @@ -103,35 +107,56 @@ __get_nprocs () weak_alias (__get_nprocs, get_nprocs) -#ifdef GET_NPROCS_CONF_PARSER /* On some architectures it is possible to distinguish between configured and active cpus. */ int __get_nprocs_conf () { - char buffer[8192]; - int result = 1; - /* XXX Here will come a test for the new system call. */ + /* Try to use the sysfs filesystem. It has actual information about + online processors. */ + DIR *dir = __opendir ("/sys/devices/system/cpu"); + if (dir != NULL) + { + int count = 0; + struct dirent64 *d; + + while ((d = __readdir64 (dir)) != NULL) + /* NB: the sysfs has d_type support. */ + if (d->d_type == DT_DIR && strncmp (d->d_name, "cpu", 3) == 0) + { + char *endp; + unsigned long int nr = strtoul (d->d_name + 3, &endp, 10); + if (nr != ULONG_MAX && endp != d->d_name + 3 && *endp == '\0') + ++count; + } + + __closedir (dir); + + return count; + } + + int result = 1; + +#ifdef GET_NPROCS_CONF_PARSER /* If we haven't found an appropriate entry return 1. */ FILE *fp = fopen ("/proc/cpuinfo", "rc"); if (fp != NULL) { + char buffer[8192]; + /* No threads use this stream. */ __fsetlocking (fp, FSETLOCKING_BYCALLER); GET_NPROCS_CONF_PARSER (fp, buffer, result); fclose (fp); } +#else + result = __get_nprocs (); +#endif return result; } -#else -/* As far as I know Linux has no separate numbers for configured and - available processors. So make the `get_nprocs_conf' function an - alias. */ -strong_alias (__get_nprocs, __get_nprocs_conf) -#endif weak_alias (__get_nprocs_conf, get_nprocs_conf) /* General function to get information about memory status from proc diff --git a/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h index 6de33302e..83ca3c286 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995, 1996, 1997, 1998, 2000, 2004, 2006 + Copyright (C) 1995, 1996, 1997, 1998, 2000, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -50,6 +50,7 @@ # define O_DIRECTORY 0200000 /* Must be a directory. */ # define O_NOFOLLOW 0400000 /* Do not follow links. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_CLOEXEC 02000000 /* Set close_on_exec. */ #endif /* For now Linux has synchronisity options for data and read operations. diff --git a/libc/sysdeps/unix/sysv/linux/i386/posix_fallocate.c b/libc/sysdeps/unix/sysv/linux/i386/posix_fallocate.c new file mode 100644 index 000000000..c974d06af --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/i386/posix_fallocate.c @@ -0,0 +1,58 @@ +/* Copyright (C) 2007 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 <fcntl.h> +#include <kernel-features.h> +#include <sysdep.h> + +#define posix_fallocate static internal_fallocate +#include <sysdeps/posix/posix_fallocate.c> +#undef posix_fallocate + +#if !defined __ASSUME_FALLOCATE && defined __NR_fallocate +int __have_fallocate attribute_hidden; +#endif + +extern int __fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) + attribute_hidden; + +/* Reserve storage for the data of the file associated with FD. */ +int +posix_fallocate (int fd, __off_t offset, __off_t len) +{ +#ifdef __NR_fallocate +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (__have_fallocate >= 0, 1)) +# endif + { + int res = __fallocate64 (fd, 0, offset, len); + if (! res) + return 0; + +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (res == ENOSYS, 0)) + __have_fallocate = -1; + else +# endif + if (res != EOPNOTSUPP) + return res; + } +#endif + + return internal_fallocate (fd, offset, len); +} diff --git a/libc/sysdeps/unix/sysv/linux/i386/posix_fallocate64.c b/libc/sysdeps/unix/sysv/linux/i386/posix_fallocate64.c new file mode 100644 index 000000000..d5b4d597c --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/i386/posix_fallocate64.c @@ -0,0 +1,61 @@ +/* Copyright (C) 2007 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 <fcntl.h> +#include <kernel-features.h> +#include <sysdep.h> + +extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len); +#define __posix_fallocate64_l64 static internal_fallocate64 +#include <sysdeps/posix/posix_fallocate64.c> +#undef __posix_fallocate64_l64 + +#if !defined __ASSUME_FALLOCATE && defined __NR_fallocate +/* Defined in posix_fallocate.c. */ +extern int __have_fallocate attribute_hidden; +#endif + +extern int __fallocate64 (int fd, int mode, __off64_t offset, __off64_t len) + attribute_hidden; + +/* Reserve storage for the data of the file associated with FD. */ +int +__posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) +{ +#ifdef __NR_fallocate +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (__have_fallocate >= 0, 1)) +# endif + { + int res = __fallocate64 (fd, 0, offset, len); + + if (! res) + return 0; + +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (res == ENOSYS, 0)) + __have_fallocate = -1; + else +# endif + if (res != EOPNOTSUPP) + return res; + } +#endif + + return internal_fallocate64 (fd, offset, len); +} diff --git a/libc/sysdeps/unix/sysv/linux/i386/syscalls.list b/libc/sysdeps/unix/sysv/linux/i386/syscalls.list index 3ff3a73aa..324ab3dc1 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/syscalls.list +++ b/libc/sysdeps/unix/sysv/linux/i386/syscalls.list @@ -6,3 +6,4 @@ vm86 - vm86 i:ip __vm86 vm86@@GLIBC_2.3.4 oldgetrlimit EXTRA getrlimit i:ip __old_getrlimit getrlimit@GLIBC_2.0 oldsetrlimit EXTRA setrlimit i:ip __old_setrlimit setrlimit@GLIBC_2.0 waitpid - waitpid Ci:ipi __waitpid waitpid __libc_waitpid +fallocate64 - fallocate Vi:iiiiii __fallocate64 diff --git a/libc/sysdeps/unix/sysv/linux/i386/sysconf.c b/libc/sysdeps/unix/sysv/linux/i386/sysconf.c index 2ffbd5227..78877fb2a 100644 --- a/libc/sysdeps/unix/sysv/linux/i386/sysconf.c +++ b/libc/sysdeps/unix/sysv/linux/i386/sysconf.c @@ -1,5 +1,5 @@ /* Get file-specific information about a file. Linux version. - Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -97,11 +97,13 @@ static const struct intel_02_cache_info { 0x45, _SC_LEVEL2_CACHE_SIZE, 2097152, 4, 32 }, { 0x46, _SC_LEVEL3_CACHE_SIZE, 4194304, 4, 64 }, { 0x47, _SC_LEVEL3_CACHE_SIZE, 8388608, 8, 64 }, + { 0x48, _SC_LEVEL2_CACHE_SIZE, 3145728, 12, 64 }, { 0x49, _SC_LEVEL2_CACHE_SIZE, 4194304, 16, 64 }, { 0x4a, _SC_LEVEL3_CACHE_SIZE, 6291456, 12, 64 }, { 0x4b, _SC_LEVEL3_CACHE_SIZE, 8388608, 16, 64 }, { 0x4c, _SC_LEVEL3_CACHE_SIZE, 12582912, 12, 64 }, { 0x4d, _SC_LEVEL3_CACHE_SIZE, 16777216, 16, 64 }, + { 0x4e, _SC_LEVEL2_CACHE_SIZE, 6291456, 24, 64 }, { 0x60, _SC_LEVEL1_DCACHE_SIZE, 16384, 8, 64 }, { 0x66, _SC_LEVEL1_DCACHE_SIZE, 8192, 4, 64 }, { 0x67, _SC_LEVEL1_DCACHE_SIZE, 16384, 4, 64 }, diff --git a/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h index ed8c2da9e..8fa96e4e2 100644 --- a/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/IA64. - Copyright (C) 1999, 2000, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 1999, 2000, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -49,6 +49,7 @@ # define O_DIRECTORY 0200000 /* must be a directory */ # define O_NOFOLLOW 0400000 /* don't follow links */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_CLOEXEC 02000000 /* Set close_on_exec. */ #endif #ifdef __USE_LARGEFILE64 diff --git a/libc/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h b/libc/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h index 72c60ec24..34bc3c26a 100644 --- a/libc/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h +++ b/libc/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 2000, 2001, 2003, 2004 +/* Copyright (C) 1996, 1997, 1998, 2000, 2001, 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jes Sorensen <jes@linuxcare.com>, July 2000 @@ -25,6 +25,8 @@ #ifndef _BITS_SIGCONTEXT_H #define _BITS_SIGCONTEXT_H 1 +#define __need_size_t +#include <stddef.h> #include <bits/sigstack.h> struct ia64_fpreg diff --git a/libc/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h b/libc/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h index ff77627a8..c824be2da 100644 --- a/libc/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h +++ b/libc/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h @@ -1,5 +1,5 @@ /* `ptrace' debugger support interface. Linux/ia64 version. - Copyright (C) 2001, 2006 Free Software Foundation, Inc. + Copyright (C) 2001, 2006, 2007 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 @@ -127,6 +127,28 @@ struct pt_all_user_regs struct ia64_fpreg fr[128]; }; +/* Options set using PTRACE_SETOPTIONS. */ +enum __ptrace_setoptions { + PTRACE_O_TRACESYSGOOD = 0x00000001, + PTRACE_O_TRACEFORK = 0x00000002, + PTRACE_O_TRACEVFORK = 0x00000004, + PTRACE_O_TRACECLONE = 0x00000008, + PTRACE_O_TRACEEXEC = 0x00000010, + PTRACE_O_TRACEVFORKDONE = 0x00000020, + PTRACE_O_TRACEEXIT = 0x00000040, + PTRACE_O_MASK = 0x0000007f +}; + +/* Wait extended result codes for the above trace options. */ +enum __ptrace_eventcodes { + PTRACE_EVENT_FORK = 1, + PTRACE_EVENT_VFORK = 2, + PTRACE_EVENT_CLONE = 3, + PTRACE_EVENT_EXEC = 4, + PTRACE_EVENT_VFORK_DONE = 5, + PTRACE_EVENT_EXIT = 6 +}; + /* Perform process tracing functions. REQUEST is one of the values above, and determines the action to be taken. For all requests except PTRACE_TRACEME, PID specifies the process to be diff --git a/libc/sysdeps/unix/sysv/linux/if_index.c b/libc/sysdeps/unix/sysv/linux/if_index.c index 66f0ac131..6bd6bda3b 100644 --- a/libc/sysdeps/unix/sysv/linux/if_index.c +++ b/libc/sysdeps/unix/sysv/linux/if_index.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005 +/* Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -28,6 +28,7 @@ #include <sys/ioctl.h> #include <bits/libc-lock.h> #include <not-cancel.h> +#include <kernel-features.h> #include "netlinkaccess.h" diff --git a/libc/sysdeps/unix/sysv/linux/ifaddrs.c b/libc/sysdeps/unix/sysv/linux/ifaddrs.c index 02e693553..9aa9abac3 100644 --- a/libc/sysdeps/unix/sysv/linux/ifaddrs.c +++ b/libc/sysdeps/unix/sysv/linux/ifaddrs.c @@ -33,6 +33,7 @@ #include <sysdep.h> #include <time.h> #include <unistd.h> +#include <kernel-features.h> #include "netlinkaccess.h" diff --git a/libc/sysdeps/unix/sysv/linux/init-first.c b/libc/sysdeps/unix/sysv/linux/init-first.c index b061a848c..7b2333d4b 100644 --- a/libc/sysdeps/unix/sysv/linux/init-first.c +++ b/libc/sysdeps/unix/sysv/linux/init-first.c @@ -1,5 +1,5 @@ /* Initialization code run first thing by the ELF startup code. Linux version. - Copyright (C) 1995-2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1995-2004, 2005, 2007 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 @@ -82,6 +82,10 @@ _init (int argc, char **argv, char **envp) _dl_non_dynamic_init (); #endif +#ifdef VDSO_SETUP + VDSO_SETUP (); +#endif + __init_misc (argc, argv, envp); #ifdef USE_NONOPTION_FLAGS diff --git a/libc/sysdeps/unix/sysv/linux/kernel-features.h b/libc/sysdeps/unix/sysv/linux/kernel-features.h index f6bd906f5..aab3df348 100644 --- a/libc/sysdeps/unix/sysv/linux/kernel-features.h +++ b/libc/sysdeps/unix/sysv/linux/kernel-features.h @@ -428,29 +428,37 @@ # define __ASSUME_TMPFS_NAME 1 #endif -/* pselect was introduced just after 2.6.16-rc1. Due to the way the - kernel versions are advertised we can only rely on 2.6.17 to have - the code. */ -#if __LINUX_KERNEL_VERSION >= 0x020611 && !defined __x86_64__ +/* pselect/ppoll were introduced just after 2.6.16-rc1. Due to the way + the kernel versions are advertised we can only rely on 2.6.17 to have + the code. On x86_64 and SH this appeared first in 2.6.19-rc1, + on ia64 in 2.6.22-rc1 and on alpha just after 2.6.22-rc1. */ +#if __LINUX_KERNEL_VERSION >= 0x020611 \ + && ((!defined __x86_64__ && !defined __sh__ && !defined __ia64__ \ + && !defined __alpha__) \ + || (__LINUX_KERNEL_VERSION >= 0x020613 \ + && (defined __x86_64__ || defined __sh__)) \ + || (__LINUX_KERNEL_VERSION >= 0x020616 && defined __ia64__) \ + || (__LINUX_KERNEL_VERSION >= 0x020617 && defined __alpha__)) # define __ASSUME_PSELECT 1 -#endif - -/* ppoll was introduced just after 2.6.16-rc1. Due to the way the - kernel versions are advertised we can only rely on 2.6.17 to have - the code. */ -#if __LINUX_KERNEL_VERSION >= 0x020611 && !defined __x86_64__ -# define __ASSUME_PPOLL 1 +# define __ASSUME_PPOLL 1 #endif /* The *at syscalls were introduced just after 2.6.16-rc1. Due to the way the kernel versions are advertised we can only rely on 2.6.17 to have - the code. */ -#if __LINUX_KERNEL_VERSION >= 0x020611 + the code. On PPC they were introduced in 2.6.17-rc1, on SH in 2.6.19-rc1 + and on Alpha just after 2.6.22-rc1. */ +#if __LINUX_KERNEL_VERSION >= 0x020611 \ + && ((!defined __sh__ && !defined __alpha__) \ + || (__LINUX_KERNEL_VERSION >= 0x020613 && defined __sh__) \ + || (__LINUX_KERNEL_VERSION >= 0x020617 && defined __alpha__)) # define __ASSUME_ATFCTS 1 #endif /* Support for inter-process robust mutexes was added in 2.6.17. */ -#if __LINUX_KERNEL_VERSION >= 0x020611 +#if __LINUX_KERNEL_VERSION >= 0x020611 \ + && ((!defined __sh__ && !defined __alpha__) \ + || (__LINUX_KERNEL_VERSION >= 0x020613 && defined __sh__) \ + || (__LINUX_KERNEL_VERSION >= 0x020617 && defined __alpha__)) # define __ASSUME_SET_ROBUST_LIST 1 #endif @@ -459,8 +467,11 @@ # define __ASSUME_FUTEX_LOCK_PI 1 #endif -/* Support for utimensat syscall was added in 2.6.22. */ -#if __LINUX_KERNEL_VERSION >= 0x020616 +/* Support for utimensat syscall was added in 2.6.22, on alpha and s390 + only after 2.6.22-rc1. */ +#if __LINUX_KERNEL_VERSION >= 0x020616 \ + && ((!defined __sh__ && !defined __alpha__) \ + || __LINUX_KERNEL_VERSION >= 0x020617) # define __ASSUME_UTIMENSAT 1 #endif @@ -468,3 +479,11 @@ #if __LINUX_KERNEL_VERSION >= 0x020616 # define __ASSUME_PRIVATE_FUTEX 1 #endif + +/* Support for fallocate was added in 2.6.23, on s390 + only after 2.6.23-rc1. */ +#if __LINUX_KERNEL_VERSION >= 0x020617 \ + && ((!defined __s390__ && !defined __alpha__) \ + || (__LINUX_KERNEL_VERSION >= 0x020618 && defined __s390__)) +# define __ASSUME_FALLOCATE 1 +#endif diff --git a/libc/sysdeps/unix/sysv/linux/nscd_setup_thread.c b/libc/sysdeps/unix/sysv/linux/nscd_setup_thread.c index 1589c24ea..56e23dc83 100644 --- a/libc/sysdeps/unix/sysv/linux/nscd_setup_thread.c +++ b/libc/sysdeps/unix/sysv/linux/nscd_setup_thread.c @@ -4,8 +4,9 @@ Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License version 2 as - published by the Free Software Foundation. + it under the terms of the GNU General Public License as published + by the Free Software Foundation; version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of diff --git a/libc/sysdeps/unix/sysv/linux/posix_fallocate.c b/libc/sysdeps/unix/sysv/linux/posix_fallocate.c new file mode 100644 index 000000000..6944793fa --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/posix_fallocate.c @@ -0,0 +1,60 @@ +/* Copyright (C) 2007 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 <fcntl.h> +#include <kernel-features.h> +#include <sysdep.h> + +#define posix_fallocate static internal_fallocate +#include <sysdeps/posix/posix_fallocate.c> +#undef posix_fallocate + +#if !defined __ASSUME_FALLOCATE && defined __NR_fallocate +int __have_fallocate attribute_hidden; +#endif + + +/* Reserve storage for the data of the file associated with FD. */ +int +posix_fallocate (int fd, __off_t offset, __off_t len) +{ +#ifdef __NR_fallocate +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (__have_fallocate >= 0, 1)) +# endif + { + INTERNAL_SYSCALL_DECL (err); + int res = INTERNAL_SYSCALL (fallocate, err, 6, fd, 0, + __LONG_LONG_PAIR (offset >> 31, offset), + __LONG_LONG_PAIR (len >> 31, len)); + + if (! INTERNAL_SYSCALL_ERROR_P (res, err)) + return 0; + +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (INTERNAL_SYSCALL_ERRNO (res, err) == ENOSYS, 0)) + __have_fallocate = -1; + else +# endif + if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) + return INTERNAL_SYSCALL_ERRNO (res, err); + } +#endif + + return internal_fallocate (fd, offset, len); +} diff --git a/libc/sysdeps/unix/sysv/linux/posix_fallocate64.c b/libc/sysdeps/unix/sysv/linux/posix_fallocate64.c new file mode 100644 index 000000000..c5b8a3449 --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/posix_fallocate64.c @@ -0,0 +1,64 @@ +/* Copyright (C) 2007 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 <fcntl.h> +#include <kernel-features.h> +#include <sysdep.h> + +extern int __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len); +#define __posix_fallocate64_l64 static internal_fallocate64 +#include <sysdeps/posix/posix_fallocate64.c> +#undef __posix_fallocate64_l64 + +#if !defined __ASSUME_FALLOCATE && defined __NR_fallocate +/* Defined in posix_fallocate.c. */ +extern int __have_fallocate attribute_hidden; +#endif + + +/* Reserve storage for the data of the file associated with FD. */ +int +__posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len) +{ +#ifdef __NR_fallocate +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (__have_fallocate >= 0, 1)) +# endif + { + INTERNAL_SYSCALL_DECL (err); + int res = INTERNAL_SYSCALL (fallocate, err, 6, fd, 0, + __LONG_LONG_PAIR ((long int) (offset >> 32), + (long int) offset), + __LONG_LONG_PAIR ((long int) (len >> 32), + (long int) len)); + + if (! INTERNAL_SYSCALL_ERROR_P (res, err)) + return 0; + +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (INTERNAL_SYSCALL_ERRNO (res, err) == ENOSYS, 0)) + __have_fallocate = -1; + else +# endif + if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) + return INTERNAL_SYSCALL_ERRNO (res, err); + } +#endif + + return internal_fallocate64 (fd, offset, len); +} diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/Makefile b/libc/sysdeps/unix/sysv/linux/powerpc/Makefile index ecd805795..d1281cf46 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/Makefile +++ b/libc/sysdeps/unix/sysv/linux/powerpc/Makefile @@ -8,5 +8,5 @@ gen-as-const-headers += ucontext_i.sym endif ifeq ($(subdir),elf) -routines += dl-vdso +sysdep_routines += dl-vdso endif diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h index c4964e0fd..68015dbca 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/PowerPC. - Copyright (C) 1995, 1996, 1997, 1998, 2000, 2003, 2004, 2006 + Copyright (C) 1995, 1996, 1997, 1998, 2000, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -50,6 +50,7 @@ # define O_DIRECTORY 040000 /* Must be a directory. */ # define O_NOFOLLOW 0100000 /* Do not follow links. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_CLOEXEC 02000000 /* Set close_on_exec. */ #endif #ifdef __USE_LARGEFILE64 diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h b/libc/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h index f20a5a175..746d9ced4 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h +++ b/libc/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h @@ -23,7 +23,7 @@ #ifdef SHARED -extern void *__vdso_gettimeofday; +extern void *__vdso_gettimeofday attribute_hidden; extern void *__vdso_clock_gettime; diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/init-first.c b/libc/sysdeps/unix/sysv/linux/powerpc/init-first.c new file mode 100644 index 000000000..92dacc761 --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/powerpc/init-first.c @@ -0,0 +1,49 @@ +/* Copyright (C) 2007 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. */ + +#ifdef SHARED +# include <dl-vdso.h> +# undef __gettimeofday +# undef __clock_gettime +# undef __clock_getres +# include <bits/libc-vdso.h> + +void *__vdso_gettimeofday attribute_hidden; +void *__vdso_clock_gettime; +void *__vdso_clock_getres; +void *__vdso_get_tbfreq; + + +static inline void +_libc_vdso_platform_setup (void) +{ + PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565); + + __vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615); + + __vdso_clock_gettime = _dl_vdso_vsym ("__kernel_clock_gettime", &linux2615); + + __vdso_clock_getres = _dl_vdso_vsym ("__kernel_clock_getres", &linux2615); + + __vdso_get_tbfreq = _dl_vdso_vsym ("__kernel_vdso_get_tbfreq", &linux2615); +} + +# define VDSO_SETUP _libc_vdso_platform_setup +#endif + +#include "../init-first.c" diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/libc-start.c b/libc/sysdeps/unix/sysv/linux/powerpc/libc-start.c index be2480f46..86892aa93 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/libc-start.c +++ b/libc/sysdeps/unix/sysv/linux/powerpc/libc-start.c @@ -24,6 +24,7 @@ #include <bp-start.h> #include <bp-sym.h> + int __cache_line_size attribute_hidden; /* The main work is done in the generic function. */ #define LIBC_START_MAIN generic_start_main @@ -41,36 +42,6 @@ struct startup_info void (*fini) (void); }; - -#ifdef SHARED -# include <sys/time.h> -# include <dl-vdso.h> -# undef __gettimeofday -# undef __clock_gettime -# undef __clock_getres -# include <bits/libc-vdso.h> - -void *__vdso_gettimeofday; -void *__vdso_clock_gettime; -void *__vdso_clock_getres; -void *__vdso_get_tbfreq; - -static inline void _libc_vdso_platform_setup (void) - { - __vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", - "LINUX_2.6.15"); - - __vdso_clock_gettime = _dl_vdso_vsym ("__kernel_clock_gettime", - "LINUX_2.6.15"); - - __vdso_clock_getres = _dl_vdso_vsym ("__kernel_clock_getres", - "LINUX_2.6.15"); - - __vdso_get_tbfreq = _dl_vdso_vsym ("__kernel_vdso_get_tbfreq", - "LINUX_2.6.15"); - } -#endif - int /* GKM FIXME: GCC: this should get __BP_ prefix by virtue of the BPs in the arglist of startup_info.main and startup_info.init. */ @@ -130,10 +101,7 @@ int __cache_line_size = av->a_un.a_val; break; } -#ifdef SHARED - /* Resolve and initialize function pointers for VDSO functions. */ - _libc_vdso_platform_setup (); -#endif + return generic_start_main (stinfo->main, argc, ubp_av, auxvec, stinfo->init, stinfo->fini, rtld_fini, stack_on_entry); diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S index 0bb5bef78..c0e98d9be 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S +++ b/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S @@ -1,4 +1,5 @@ -/* Copyright (C) 1995,96,97,99, 2003, 2006 Free Software Foundation, Inc. +/* Copyright (C) 1995-1997, 1999, 2003, 2006, 2007 + 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 @@ -93,7 +94,6 @@ ENTRY(__socket) mflr r9 stw r9,52(r1) cfi_offset (lr, 4) - CGOTSETUP CENABLE stw r3,16(r1) li r3,P(SOCKOP_,socket) @@ -107,7 +107,6 @@ ENTRY(__socket) lwz r4,52(r1) lwz r0,12(r1) lwz r3,8(r1) - CGOTRESTORE mtlr r4 mtcr r0 addi r1,r1,48 diff --git a/libc/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h b/libc/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h index 5d055f67f..23e75fbcf 100644 --- a/libc/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h +++ b/libc/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h @@ -1,5 +1,5 @@ /* `ptrace' debugger support interface. Linux version. - Copyright (C) 2001, 2006 Free Software Foundation, Inc. + Copyright (C) 2001, 2006, 2007 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 @@ -99,6 +99,28 @@ enum __ptrace_request #define PT_SETSIGINFO PTRACE_SETSIGINFO }; +/* Options set using PTRACE_SETOPTIONS. */ +enum __ptrace_setoptions { + PTRACE_O_TRACESYSGOOD = 0x00000001, + PTRACE_O_TRACEFORK = 0x00000002, + PTRACE_O_TRACEVFORK = 0x00000004, + PTRACE_O_TRACECLONE = 0x00000008, + PTRACE_O_TRACEEXEC = 0x00000010, + PTRACE_O_TRACEVFORKDONE = 0x00000020, + PTRACE_O_TRACEEXIT = 0x00000040, + PTRACE_O_MASK = 0x0000007f +}; + +/* Wait extended result codes for the above trace options. */ +enum __ptrace_eventcodes { + PTRACE_EVENT_FORK = 1, + PTRACE_EVENT_VFORK = 2, + PTRACE_EVENT_CLONE = 3, + PTRACE_EVENT_EXEC = 4, + PTRACE_EVENT_VFORK_DONE = 5, + PTRACE_EVENT_EXIT = 6 +}; + /* Perform process tracing functions. REQUEST is one of the values above, and determines the action to be taken. For all requests except PTRACE_TRACEME, PID specifies the process to be diff --git a/libc/sysdeps/unix/sysv/linux/ppoll.c b/libc/sysdeps/unix/sysv/linux/ppoll.c index cfc86ba80..14eb3111b 100644 --- a/libc/sysdeps/unix/sysv/linux/ppoll.c +++ b/libc/sysdeps/unix/sysv/linux/ppoll.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 Free Software Foundation, Inc. +/* Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2006. @@ -26,9 +26,11 @@ #ifdef __NR_ppoll +# ifndef __ASSUME_PPOLL static int __generic_ppoll (struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, const sigset_t *sigmask); +# endif int diff --git a/libc/sysdeps/unix/sysv/linux/pselect.c b/libc/sysdeps/unix/sysv/linux/pselect.c index 0dd744f52..f39ee920c 100644 --- a/libc/sysdeps/unix/sysv/linux/pselect.c +++ b/libc/sysdeps/unix/sysv/linux/pselect.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2006 Free Software Foundation, Inc. +/* Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2006. @@ -26,10 +26,12 @@ #ifdef __NR_pselect6 +# ifndef __ASSUME_PSELECT static int __generic_pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask); +# endif int diff --git a/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h index c611028f2..848568532 100644 --- a/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 2000, 2001, 2002, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2000,2001,2002,2004,2006,2007 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 @@ -50,6 +50,7 @@ # define O_DIRECTORY 0200000 /* Must be a directory. */ # define O_NOFOLLOW 0400000 /* Do not follow links. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_CLOEXEC 02000000 /* Set close_on_exec. */ #endif #ifdef __USE_LARGEFILE64 diff --git a/libc/sysdeps/unix/sysv/linux/s390/dl-procinfo.h b/libc/sysdeps/unix/sysv/linux/s390/dl-procinfo.h new file mode 100644 index 000000000..3eeb52905 --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/s390/dl-procinfo.h @@ -0,0 +1,43 @@ +/* Linux/s390 version of processor capability information handling macros. + Copyright (C) 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2006. + + 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 <sysdeps/s390/dl-procinfo.h> +#include <ldsodefs.h> + + +#undef _dl_procinfo +static inline int +__attribute__ ((unused)) +_dl_procinfo (int word) +{ + /* This table should match the information from arch/s390/kernel/setup.c + in the kernel sources. */ + int i; + + _dl_printf ("AT_HWCAP: "); + + for (i = 0; i < _DL_HWCAP_COUNT; ++i) + if (word & (1UL << i)) + _dl_printf (" %s", GLRO(dl_s390_cap_flags)[i]); + + _dl_printf ("\n"); + + return 0; +} diff --git a/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S b/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S index c0d7cd459..b2db5423c 100644 --- a/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S +++ b/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2007 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -18,6 +18,7 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <kernel-features.h> #define EINVAL 22 diff --git a/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S b/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S index aba4ac34e..4c3667aaa 100644 --- a/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S +++ b/libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2007 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -18,6 +18,7 @@ 02111-1307 USA. */ #include <sysdep.h> +#include <kernel-features.h> #define EINVAL 22 #define ENOSYS 38 diff --git a/libc/sysdeps/unix/sysv/linux/s390/sys/ptrace.h b/libc/sysdeps/unix/sysv/linux/s390/sys/ptrace.h index 70eb4f822..ac186387f 100644 --- a/libc/sysdeps/unix/sysv/linux/s390/sys/ptrace.h +++ b/libc/sysdeps/unix/sysv/linux/s390/sys/ptrace.h @@ -1,5 +1,5 @@ /* `ptrace' debugger support interface. Linux version. - Copyright (C) 2000, 2006 Free Software Foundation, Inc. + Copyright (C) 2000, 2006, 2007 Free Software Foundation, Inc. Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com). This file is part of the GNU C Library. @@ -138,6 +138,28 @@ enum __ptrace_request #define PT_SETSIGINFO PTRACE_SETSIGINFO }; +/* Options set using PTRACE_SETOPTIONS. */ +enum __ptrace_setoptions { + PTRACE_O_TRACESYSGOOD = 0x00000001, + PTRACE_O_TRACEFORK = 0x00000002, + PTRACE_O_TRACEVFORK = 0x00000004, + PTRACE_O_TRACECLONE = 0x00000008, + PTRACE_O_TRACEEXEC = 0x00000010, + PTRACE_O_TRACEVFORKDONE = 0x00000020, + PTRACE_O_TRACEEXIT = 0x00000040, + PTRACE_O_MASK = 0x0000007f +}; + +/* Wait extended result codes for the above trace options. */ +enum __ptrace_eventcodes { + PTRACE_EVENT_FORK = 1, + PTRACE_EVENT_VFORK = 2, + PTRACE_EVENT_CLONE = 3, + PTRACE_EVENT_EXEC = 4, + PTRACE_EVENT_VFORK_DONE = 5, + PTRACE_EVENT_EXIT = 6 +}; + /* Perform process tracing functions. REQUEST is one of the values above, and determines the action to be taken. For all requests except PTRACE_TRACEME, PID specifies the process to be diff --git a/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h index 6de33302e..83ca3c286 100644 --- a/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995, 1996, 1997, 1998, 2000, 2004, 2006 + Copyright (C) 1995, 1996, 1997, 1998, 2000, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -50,6 +50,7 @@ # define O_DIRECTORY 0200000 /* Must be a directory. */ # define O_NOFOLLOW 0400000 /* Do not follow links. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_CLOEXEC 02000000 /* Set close_on_exec. */ #endif /* For now Linux has synchronisity options for data and read operations. diff --git a/libc/sysdeps/unix/sysv/linux/sh/clone.S b/libc/sysdeps/unix/sysv/linux/sh/clone.S index 7941c6b3a..f892c475d 100644 --- a/libc/sysdeps/unix/sysv/linux/sh/clone.S +++ b/libc/sysdeps/unix/sysv/linux/sh/clone.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1999, 2000, 2003, 2004, 2007 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 @@ -32,12 +32,12 @@ ENTRY(__clone) /* sanity check arguments. */ tst r4, r4 - bf/s 1f + bt/s 0f tst r5, r5 - bf/s 1f - mov #-EINVAL,r0 + bf 1f +0: bra .Lsyscall_error - nop + mov #-EINVAL,r0 1: /* insert the args onto the new stack */ mov.l r7, @-r5 diff --git a/libc/sysdeps/unix/sysv/linux/shm_open.c b/libc/sysdeps/unix/sysv/linux/shm_open.c index 0d40632e5..92d22cfa7 100644 --- a/libc/sysdeps/unix/sysv/linux/shm_open.c +++ b/libc/sysdeps/unix/sysv/linux/shm_open.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2000,2001,2002,2003,2004,2006 Free Software Foundation, Inc. +/* Copyright (C) 2000-2004,2006,2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -46,6 +46,11 @@ static const char defaultdir[] = "/dev/shm/"; __libc_once_define (static, once); +#if defined O_CLOEXEC && !defined __ASSUME_O_CLOEXEC +static bool have_o_cloexec; +#endif + + /* Determine where the shmfs is mounted (if at all). */ static void where_is_shmfs (void) @@ -160,6 +165,10 @@ shm_open (const char *name, int oflag, mode_t mode) __mempcpy (__mempcpy (fname, mountpoint.dir, mountpoint.dirlen), name, namelen + 1); +#ifdef O_CLOEXEC + oflag |= O_CLOEXEC; +#endif + /* And get the file descriptor. XXX Maybe we should test each descriptor whether it really is for a file on the shmfs. If this is what should be done the whole function @@ -168,23 +177,37 @@ shm_open (const char *name, int oflag, mode_t mode) fd = open (fname, oflag | O_NOFOLLOW, mode); if (fd != -1) { - /* We got a descriptor. Now set the FD_CLOEXEC bit. */ - int flags = fcntl (fd, F_GETFD, 0); - - if (__builtin_expect (flags, 0) >= 0) +#if !defined O_CLOEXEC || !defined __ASSUME_O_CLOEXEC +# ifdef O_CLOEXEC + if (have_o_cloexec <= 0) +# endif { - flags |= FD_CLOEXEC; - flags = fcntl (fd, F_SETFD, flags); - } - - if (flags == -1) - { - /* Something went wrong. We cannot return the descriptor. */ - int save_errno = errno; - close (fd); - fd = -1; - __set_errno (save_errno); + /* We got a descriptor. Now set the FD_CLOEXEC bit. */ + int flags = fcntl (fd, F_GETFD, 0); + + if (__builtin_expect (flags, 0) >= 0) + { +# ifdef O_CLOEXEC + if (have_o_cloexec == 0) + have_o_cloexec = (flags & FD_CLOEXEC) == 0 ? -1 : 1; + if (have_o_cloexec < 0) +# endif + { + flags |= FD_CLOEXEC; + flags = fcntl (fd, F_SETFD, flags); + } + } + + if (flags == -1) + { + /* Something went wrong. We cannot return the descriptor. */ + int save_errno = errno; + close (fd); + fd = -1; + __set_errno (save_errno); + } } +#endif } else if (__builtin_expect (errno == EISDIR, 0)) /* It might be better to fold this error with EINVAL since diff --git a/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h index d68bfeb0e..2307a2353 100644 --- a/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/SPARC. - Copyright (C) 1995, 1996, 1997, 1998, 2000, 2003, 2004, 2006 + Copyright (C) 1995, 1996, 1997, 1998, 2000, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -49,6 +49,7 @@ # define O_NOFOLLOW 0x20000 /* don't follow links */ # define O_DIRECT 0x100000 /* direct disk access hint */ # define O_NOATIME 0x200000 /* Do not set atime. */ +# define O_CLOEXEC 0x400000 /* Set close_on_exit. */ #endif #ifdef __USE_LARGEFILE64 diff --git a/libc/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S b/libc/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S index f91fc4f62..a64d8e519 100644 --- a/libc/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S +++ b/libc/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 2000, 2003, 2004 +/* Copyright (C) 1996, 1997, 1998, 2000, 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@tamu.edu). @@ -41,9 +41,9 @@ ENTRY (__clone) /* sanity check arguments */ orcc %i0,%g0,%g2 - be .Lerror + be .Leinval orcc %i1,%g0,%o1 - be .Lerror + be .Leinval mov %i2,%o0 /* The child_stack is the top of the stack, allocate one @@ -70,9 +70,11 @@ ENTRY (__clone) jmpl %i7 + 8, %g0 restore %o0,%g0,%o0 +.Leinval: + mov EINVAL, %o0 .Lerror: - call __errno_location - or %g0,EINVAL,%i0 + call HIDDEN_JUMPTARGET(__errno_location) + mov %o0, %i0 st %i0,[%o0] jmpl %i7 + 8, %g0 restore %g0,-1,%o0 @@ -99,7 +101,7 @@ __thread_start: mov %g0, %fp /* terminate backtrace */ call %g2 mov %g3,%o0 - call _exit,0 + call HIDDEN_JUMPTARGET(_exit),0 nop cfi_endproc diff --git a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S index ebfce9e2c..2bbbd8020 100644 --- a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S +++ b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S @@ -1,4 +1,4 @@ -/* Copyright (C) 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1997, 2000, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Richard Henderson (rth@tamu.edu). @@ -62,33 +62,16 @@ ENTRY (__clone) /* Do the system call */ set __NR_clone, %g1 ta 0x6d - bcs,pn %xcc, 99f + bcs,pn %xcc, 98f nop brnz,pn %o1, __thread_start nop jmpl %i7 + 8, %g0 restore %o0, %g0, %o0 -99: -#ifndef _LIBC_REENTRANT -#ifdef PIC - call 1f - sethi %hi(_GLOBAL_OFFSET_TABLE_-(99b-.)), %l7 -1: or %l7, %lo(_GLOBAL_OFFSET_TABLE_-(99b-.)), %l7 - add %l7, %o7, %l7 - set EINVAL, %i0 - sethi %hi(errno), %g2 - or %g2, %lo(errno), %g2 - st %i0, [%l7+%g2] -#else - sethi %hi(errno), %g2 - set EINVAL, %i0 - st %i0, [%g2+%lo(errno)] -#endif -#else - call __errno_location - nop +99: mov EINVAL, %o0 +98: call HIDDEN_JUMPTARGET(__errno_location) + mov %o0, %i0 st %i0, [%o0] -#endif jmpl %i7 + 8, %g0 restore %g0,-1,%o0 END(__clone) @@ -112,7 +95,7 @@ __thread_start: mov %g0, %fp /* terminate backtrace */ call %g2 mov %g3,%o0 - call _exit,0 + call HIDDEN_JUMPTARGET(_exit),0 nop cfi_endproc diff --git a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c index 9f4c02c78..71a51ccd8 100644 --- a/libc/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c +++ b/libc/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c @@ -1,3 +1,5 @@ +#include <kernel-features.h> + #include "../../i386/xstat.c" #ifdef __NR_stat64 diff --git a/libc/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h b/libc/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h index 17907c4a3..a7b204b33 100644 --- a/libc/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h +++ b/libc/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h @@ -1,5 +1,5 @@ /* `ptrace' debugger support interface. Linux/SPARC version. - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2006 + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -183,6 +183,28 @@ enum __ptrace_request #define PT_SETSIGINFO PTRACE_SETSIGINFO }; +/* Options set using PTRACE_SETOPTIONS. */ +enum __ptrace_setoptions { + PTRACE_O_TRACESYSGOOD = 0x00000001, + PTRACE_O_TRACEFORK = 0x00000002, + PTRACE_O_TRACEVFORK = 0x00000004, + PTRACE_O_TRACECLONE = 0x00000008, + PTRACE_O_TRACEEXEC = 0x00000010, + PTRACE_O_TRACEVFORKDONE = 0x00000020, + PTRACE_O_TRACEEXIT = 0x00000040, + PTRACE_O_MASK = 0x0000007f +}; + +/* Wait extended result codes for the above trace options. */ +enum __ptrace_eventcodes { + PTRACE_EVENT_FORK = 1, + PTRACE_EVENT_VFORK = 2, + PTRACE_EVENT_CLONE = 3, + PTRACE_EVENT_EXEC = 4, + PTRACE_EVENT_VFORK_DONE = 5, + PTRACE_EVENT_EXIT = 6 +}; + /* Perform process tracing functions. REQUEST is one of the values above, and determines the action to be taken. For all requests except PTRACE_TRACEME, PID specifies the process to be diff --git a/libc/sysdeps/unix/sysv/linux/sparc/sysdep.h b/libc/sysdeps/unix/sysv/linux/sparc/sysdep.h index a60937976..101638a53 100644 --- a/libc/sysdeps/unix/sysv/linux/sparc/sysdep.h +++ b/libc/sysdeps/unix/sysv/linux/sparc/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2002, 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2000. @@ -149,5 +149,8 @@ }) +#ifdef __ASSEMBLER__ +# define JUMPTARGET(sym) sym +#endif #endif /* _LINUX_SPARC_SYSDEP_H */ diff --git a/libc/sysdeps/unix/sysv/linux/statfs64.c b/libc/sysdeps/unix/sysv/linux/statfs64.c index 9ccc7a7d6..c3d17b5ed 100644 --- a/libc/sysdeps/unix/sysv/linux/statfs64.c +++ b/libc/sysdeps/unix/sysv/linux/statfs64.c @@ -1,5 +1,5 @@ /* Return information about the filesystem on which FILE resides. - Copyright (C) 1996-2000,2003,2004 Free Software Foundation, Inc. + Copyright (C) 1996-2000,2003,2004,2007 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,6 +22,7 @@ #include <sys/statfs.h> #include <stddef.h> #include <sysdep.h> +#include <kernel-features.h> # if __ASSUME_STATFS64 == 0 diff --git a/libc/sysdeps/unix/sysv/linux/sys/ptrace.h b/libc/sysdeps/unix/sysv/linux/sys/ptrace.h index 44284cb30..08658f976 100644 --- a/libc/sysdeps/unix/sysv/linux/sys/ptrace.h +++ b/libc/sysdeps/unix/sysv/linux/sys/ptrace.h @@ -1,5 +1,5 @@ /* `ptrace' debugger support interface. Linux version. - Copyright (C) 1996-1999,2000,2006 Free Software Foundation, Inc. + Copyright (C) 1996-1999,2000,2006,2007 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 @@ -129,6 +129,29 @@ enum __ptrace_request #define PT_SETSIGINFO PTRACE_SETSIGINFO }; + +/* Options set using PTRACE_SETOPTIONS. */ +enum __ptrace_setoptions { + PTRACE_O_TRACESYSGOOD = 0x00000001, + PTRACE_O_TRACEFORK = 0x00000002, + PTRACE_O_TRACEVFORK = 0x00000004, + PTRACE_O_TRACECLONE = 0x00000008, + PTRACE_O_TRACEEXEC = 0x00000010, + PTRACE_O_TRACEVFORKDONE = 0x00000020, + PTRACE_O_TRACEEXIT = 0x00000040, + PTRACE_O_MASK = 0x0000007f +}; + +/* Wait extended result codes for the above trace options. */ +enum __ptrace_eventcodes { + PTRACE_EVENT_FORK = 1, + PTRACE_EVENT_VFORK = 2, + PTRACE_EVENT_CLONE = 3, + PTRACE_EVENT_EXEC = 4, + PTRACE_EVENT_VFORK_DONE = 5, + PTRACE_EVENT_EXIT = 6 +}; + /* Perform process tracing functions. REQUEST is one of the values above, and determines the action to be taken. For all requests except PTRACE_TRACEME, PID specifies the process to be diff --git a/libc/sysdeps/unix/sysv/linux/syscalls.list b/libc/sysdeps/unix/sysv/linux/syscalls.list index e16110480..7e5cc7050 100644 --- a/libc/sysdeps/unix/sysv/linux/syscalls.list +++ b/libc/sysdeps/unix/sysv/linux/syscalls.list @@ -43,7 +43,7 @@ munlockall - munlockall i: munlockall nanosleep - nanosleep Ci:pp __libc_nanosleep __nanosleep nanosleep nfsservctl EXTRA nfsservctl i:ipp nfsservctl pause - pause Ci: __libc_pause pause -personality init-first personality i:i __personality personality +personality EXTRA personality i:i __personality personality pipe - pipe i:f __pipe pipe pivot_root EXTRA pivot_root i:ss pivot_root prctl EXTRA prctl i:iiiii __prctl prctl diff --git a/libc/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c b/libc/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c new file mode 100644 index 000000000..151174b47 --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c @@ -0,0 +1,59 @@ +/* Copyright (C) 2007 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 <fcntl.h> +#include <kernel-features.h> +#include <sysdep.h> + +#define posix_fallocate static internal_fallocate +#include <sysdeps/posix/posix_fallocate.c> +#undef posix_fallocate + +#if !defined __ASSUME_FALLOCATE && defined __NR_fallocate +static int __have_fallocate; +#endif + + +/* Reserve storage for the data of the file associated with FD. */ +int +posix_fallocate (int fd, __off_t offset, __off_t len) +{ +#ifdef __NR_fallocate +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (__have_fallocate >= 0, 1)) +# endif + { + INTERNAL_SYSCALL_DECL (err); + int res = INTERNAL_SYSCALL (fallocate, err, 4, fd, 0, offset, len); + + if (! INTERNAL_SYSCALL_ERROR_P (res, err)) + return 0; + +# ifndef __ASSUME_FALLOCATE + if (__builtin_expect (INTERNAL_SYSCALL_ERRNO (res, err) == ENOSYS, 0)) + __have_fallocate = -1; + else +# endif + if (INTERNAL_SYSCALL_ERRNO (res, err) != EOPNOTSUPP) + return INTERNAL_SYSCALL_ERRNO (res, err); + } +#endif + + return internal_fallocate (fd, offset, len); +} +strong_alias (posix_fallocate, posix_fallocate64) diff --git a/libc/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c b/libc/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c new file mode 100644 index 000000000..f466f13e4 --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c @@ -0,0 +1 @@ +/* posix_fallocate64 is in posix_fallocate.c */ diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/Makefile b/libc/sysdeps/unix/sysv/linux/x86_64/Makefile index bdad5063d..6e2741a96 100644 --- a/libc/sysdeps/unix/sysv/linux/x86_64/Makefile +++ b/libc/sysdeps/unix/sysv/linux/x86_64/Makefile @@ -13,3 +13,7 @@ endif ifeq ($(subdir),csu) gen-as-const-headers += ucontext_i.sym endif + +ifeq ($(subdir),elf) +sysdep_routines += dl-vdso +endif diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/Versions b/libc/sysdeps/unix/sysv/linux/x86_64/Versions index fd1b3cc29..34c100bfd 100644 --- a/libc/sysdeps/unix/sysv/linux/x86_64/Versions +++ b/libc/sysdeps/unix/sysv/linux/x86_64/Versions @@ -6,4 +6,7 @@ libc { modify_ldt; } + GLIBC_PRIVATE { + __vdso_clock_gettime; + } } diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h b/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h index fa1d02bc1..a918a0725 100644 --- a/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h +++ b/libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux/x86-64. - Copyright (C) 2001, 2002, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2004, 2006, 2007 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 @@ -50,6 +50,7 @@ # define O_DIRECTORY 0200000 /* Must be a directory. */ # define O_NOFOLLOW 0400000 /* Do not follow links. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_CLOEXEC 02000000 /* Set close_on_exec. */ #endif /* For now Linux has synchronisity options for data and read operations. diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h b/libc/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h new file mode 100644 index 000000000..6e08d3b20 --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h @@ -0,0 +1,35 @@ +/* Resolve function pointers to VDSO functions. + Copyright (C) 2005, 2007 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 _LIBC_VDSO_H +#define _LIBC_VDSO_H + +#include <time.h> +#include <sys/time.h> + +#ifdef SHARED + +extern int (*__vdso_gettimeofday) (struct timeval *, void *) + attribute_hidden; + +extern int (*__vdso_clock_gettime) (clockid_t, struct timespec *); + +#endif + +#endif /* _LIBC_VDSO_H */ diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S b/libc/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S index 84a99b040..f618e738b 100644 --- a/libc/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S +++ b/libc/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2007 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,7 +28,12 @@ ENTRY (__gettimeofday) /* Align stack. */ sub $0x8, %rsp cfi_adjust_cfa_offset(8) +#ifdef SHARED + movq __vdso_gettimeofday(%rip), %rax + PTR_DEMANGLE (%rax) +#else movq $VSYSCALL_ADDR_vgettimeofday, %rax +#endif callq *%rax /* Check error return. */ cmpl $-4095, %eax diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/init-first.c b/libc/sysdeps/unix/sysv/linux/x86_64/init-first.c new file mode 100644 index 000000000..e9cf5646b --- /dev/null +++ b/libc/sysdeps/unix/sysv/linux/x86_64/init-first.c @@ -0,0 +1,51 @@ +/* Copyright (C) 2007 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. */ + +#ifdef SHARED +# include <dl-vdso.h> +# include <bits/libc-vdso.h> + +int (*__vdso_gettimeofday) (struct timeval *, void *) attribute_hidden; + +int (*__vdso_clock_gettime) (clockid_t, struct timespec *) + __attribute__ ((nocommon)); +strong_alias (__vdso_clock_gettime, __GI___vdso_clock_gettime attribute_hidden) + + +static inline void +_libc_vdso_platform_setup (void) +{ + PREPARE_VERSION (linux26, "LINUX_2.6", 61765110); + + void *p = _dl_vdso_vsym ("gettimeofday", &linux26); + /* If the vDSO is not available we fall back on the old vsyscall. */ +#define VSYSCALL_ADDR_vgettimeofday 0xffffffffff600000ul + if (p == NULL) + p = (void *) VSYSCALL_ADDR_vgettimeofday; + PTR_MANGLE (p); + __vdso_gettimeofday = p; + + p = _dl_vdso_vsym ("clock_gettime", &linux26); + PTR_MANGLE (p); + __GI___vdso_clock_gettime = p; +} + +# define VDSO_SETUP _libc_vdso_platform_setup +#endif + +#include "../init-first.c" diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S b/libc/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S index 8d74d53a7..a95099062 100644 --- a/libc/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S +++ b/libc/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S @@ -38,7 +38,7 @@ ENTRY (sched_getcpu) movq $VSYSCALL_ADDR_vgetcpu, %rax callq *%rax - cmpq $-4095, %rdi + cmpq $-4095, %rax jae SYSCALL_ERROR_LABEL movl (%rsp), %eax diff --git a/libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h b/libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h index 1d9a68a04..44d565054 100644 --- a/libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h +++ b/libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h @@ -68,14 +68,14 @@ /* We don't want the label for the error handle to be global when we define it here. */ -#ifdef PIC -# define SYSCALL_ERROR_LABEL 0f -#else -# define SYSCALL_ERROR_LABEL syscall_error -#endif +# ifdef PIC +# define SYSCALL_ERROR_LABEL 0f +# else +# define SYSCALL_ERROR_LABEL syscall_error +# endif -#undef PSEUDO -#define PSEUDO(name, syscall_name, args) \ +# undef PSEUDO +# define PSEUDO(name, syscall_name, args) \ .text; \ ENTRY (name) \ DO_CALL (syscall_name, args); \ @@ -83,40 +83,40 @@ jae SYSCALL_ERROR_LABEL; \ L(pseudo_end): -#undef PSEUDO_END -#define PSEUDO_END(name) \ +# undef PSEUDO_END +# define PSEUDO_END(name) \ SYSCALL_ERROR_HANDLER \ END (name) -#undef PSEUDO_NOERRNO -#define PSEUDO_NOERRNO(name, syscall_name, args) \ +# undef PSEUDO_NOERRNO +# define PSEUDO_NOERRNO(name, syscall_name, args) \ .text; \ ENTRY (name) \ DO_CALL (syscall_name, args) -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ +# undef PSEUDO_END_NOERRNO +# define PSEUDO_END_NOERRNO(name) \ END (name) -#define ret_NOERRNO ret +# define ret_NOERRNO ret -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ +# undef PSEUDO_ERRVAL +# define PSEUDO_ERRVAL(name, syscall_name, args) \ .text; \ ENTRY (name) \ DO_CALL (syscall_name, args); \ negq %rax -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ +# undef PSEUDO_END_ERRVAL +# define PSEUDO_END_ERRVAL(name) \ END (name) -#define ret_ERRVAL ret +# define ret_ERRVAL ret -#ifndef PIC -#define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ -#elif RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER \ +# ifndef PIC +# define SYSCALL_ERROR_HANDLER /* Nothing here; code in sysdep.S is used. */ +# elif RTLD_PRIVATE_ERRNO +# define SYSCALL_ERROR_HANDLER \ 0: \ leaq rtld_errno(%rip), %rcx; \ xorl %edx, %edx; \ @@ -124,13 +124,13 @@ movl %edx, (%rcx); \ orq $-1, %rax; \ jmp L(pseudo_end); -#elif USE___THREAD -# ifndef NOT_IN_libc -# define SYSCALL_ERROR_ERRNO __libc_errno -# else -# define SYSCALL_ERROR_ERRNO errno -# endif -# define SYSCALL_ERROR_HANDLER \ +# elif USE___THREAD +# ifndef NOT_IN_libc +# define SYSCALL_ERROR_ERRNO __libc_errno +# else +# define SYSCALL_ERROR_ERRNO errno +# endif +# define SYSCALL_ERROR_HANDLER \ 0: \ movq SYSCALL_ERROR_ERRNO@GOTTPOFF(%rip), %rcx;\ xorl %edx, %edx; \ @@ -138,10 +138,10 @@ movl %edx, %fs:(%rcx); \ orq $-1, %rax; \ jmp L(pseudo_end); -#elif defined _LIBC_REENTRANT +# elif defined _LIBC_REENTRANT /* Store (- %rax) into errno through the GOT. Note that errno occupies only 4 bytes. */ -# define SYSCALL_ERROR_HANDLER \ +# define SYSCALL_ERROR_HANDLER \ 0: \ xorl %edx, %edx; \ subq %rax, %rdx; \ @@ -158,15 +158,15 @@ /* A quick note: it is assumed that the call to `__errno_location' does not modify the stack! */ -#else /* Not _LIBC_REENTRANT. */ -# define SYSCALL_ERROR_HANDLER \ +# else /* Not _LIBC_REENTRANT. */ +# define SYSCALL_ERROR_HANDLER \ 0:movq errno@GOTPCREL(%RIP), %rcx; \ xorl %edx, %edx; \ subq %rax, %rdx; \ movl %edx, (%rcx); \ orq $-1, %rax; \ jmp L(pseudo_end); -#endif /* PIC */ +# endif /* PIC */ /* The Linux/x86-64 kernel expects the system call parameters in registers according to the following table: @@ -204,25 +204,25 @@ Syscalls of more than 6 arguments are not supported. */ -#undef DO_CALL -#define DO_CALL(syscall_name, args) \ +# undef DO_CALL +# define DO_CALL(syscall_name, args) \ DOARGS_##args \ movl $SYS_ify (syscall_name), %eax; \ syscall; -#define DOARGS_0 /* nothing */ -#define DOARGS_1 /* nothing */ -#define DOARGS_2 /* nothing */ -#define DOARGS_3 /* nothing */ -#define DOARGS_4 movq %rcx, %r10; -#define DOARGS_5 DOARGS_4 -#define DOARGS_6 DOARGS_5 +# define DOARGS_0 /* nothing */ +# define DOARGS_1 /* nothing */ +# define DOARGS_2 /* nothing */ +# define DOARGS_3 /* nothing */ +# define DOARGS_4 movq %rcx, %r10; +# define DOARGS_5 DOARGS_4 +# define DOARGS_6 DOARGS_5 #else /* !__ASSEMBLER__ */ /* Define a macro which expands inline into the wrapper code for a system call. */ -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ +# undef INLINE_SYSCALL +# define INLINE_SYSCALL(name, nr, args...) \ ({ \ unsigned long resultvar = INTERNAL_SYSCALL (name, , nr, args); \ if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (resultvar, ), 0)) \ @@ -232,10 +232,10 @@ } \ (long) resultvar; }) -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) do { } while (0) +# undef INTERNAL_SYSCALL_DECL +# define INTERNAL_SYSCALL_DECL(err) do { } while (0) -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ +# define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ ({ \ unsigned long resultvar; \ LOAD_ARGS_##nr (args) \ @@ -245,68 +245,126 @@ : "=a" (resultvar) \ : "0" (name) ASM_ARGS_##nr : "memory", "cc", "r11", "cx"); \ (long) resultvar; }) -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ +# undef INTERNAL_SYSCALL +# define INTERNAL_SYSCALL(name, err, nr, args...) \ INTERNAL_SYSCALL_NCS (__NR_##name, err, nr, ##args) -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ +# undef INTERNAL_SYSCALL_ERROR_P +# define INTERNAL_SYSCALL_ERROR_P(val, err) \ ((unsigned long) (val) >= -4095L) -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) +# undef INTERNAL_SYSCALL_ERRNO +# define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) + +# ifdef SHARED +# define INLINE_VSYSCALL(name, nr, args...) \ + ({ \ + __label__ out; \ + __label__ iserr; \ + INTERNAL_SYSCALL_DECL (sc_err); \ + long int sc_ret; \ + \ + __typeof (__vdso_##name) vdsop = __vdso_##name; \ + PTR_DEMANGLE (vdsop); \ + if (vdsop != NULL) \ + { \ + sc_ret = vdsop (args); \ + if (!INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ + goto out; \ + if (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err) != ENOSYS) \ + goto iserr; \ + } \ + \ + sc_ret = INTERNAL_SYSCALL (name, sc_err, nr, ##args); \ + if (INTERNAL_SYSCALL_ERROR_P (sc_ret, sc_err)) \ + { \ + iserr: \ + __set_errno (INTERNAL_SYSCALL_ERRNO (sc_ret, sc_err)); \ + sc_ret = -1L; \ + } \ + out: \ + sc_ret; \ + }) +# define INTERNAL_VSYSCALL(name, err, nr, args...) \ + ({ \ + __label__ out; \ + long int v_ret; \ + \ + __typeof (__vdso_##name) vdsop = __vdso_##name; \ + PTR_DEMANGLE (vdsop); \ + if (vdsop != NULL) \ + { \ + v_ret = vdsop (args); \ + if (!INTERNAL_SYSCALL_ERROR_P (v_ret, err) \ + || INTERNAL_SYSCALL_ERRNO (v_ret, err) != ENOSYS) \ + goto out; \ + } \ + v_ret = INTERNAL_SYSCALL (name, err, nr, ##args); \ + out: \ + v_ret; \ + }) + +/* List of system calls which are supported as vsyscalls. */ +# define HAVE_CLOCK_GETTIME_VSYSCALL 1 + +# else +# define INLINE_VSYSCALL(name, nr, args...) \ + INLINE_SYSCALL (name, nr, ##args) +# define INTERNAL_VSYSCALL(name, err, nr, args...) \ + INTERNAL_SYSCALL (name, err, nr, ##args) +# endif -#define LOAD_ARGS_0() -#define LOAD_REGS_0 -#define ASM_ARGS_0 +# define LOAD_ARGS_0() +# define LOAD_REGS_0 +# define ASM_ARGS_0 -#define LOAD_ARGS_1(a1) \ +# define LOAD_ARGS_1(a1) \ long int __arg1 = (long) (a1); \ LOAD_ARGS_0 () -#define LOAD_REGS_1 \ +# define LOAD_REGS_1 \ register long int _a1 asm ("rdi") = __arg1; \ LOAD_REGS_0 -#define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1) +# define ASM_ARGS_1 ASM_ARGS_0, "r" (_a1) -#define LOAD_ARGS_2(a1, a2) \ +# define LOAD_ARGS_2(a1, a2) \ long int __arg2 = (long) (a2); \ LOAD_ARGS_1 (a1) -#define LOAD_REGS_2 \ +# define LOAD_REGS_2 \ register long int _a2 asm ("rsi") = __arg2; \ LOAD_REGS_1 -#define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2) +# define ASM_ARGS_2 ASM_ARGS_1, "r" (_a2) -#define LOAD_ARGS_3(a1, a2, a3) \ +# define LOAD_ARGS_3(a1, a2, a3) \ long int __arg3 = (long) (a3); \ LOAD_ARGS_2 (a1, a2) -#define LOAD_REGS_3 \ +# define LOAD_REGS_3 \ register long int _a3 asm ("rdx") = __arg3; \ LOAD_REGS_2 -#define ASM_ARGS_3 ASM_ARGS_2, "r" (_a3) +# define ASM_ARGS_3 ASM_ARGS_2, "r" (_a3) -#define LOAD_ARGS_4(a1, a2, a3, a4) \ +# define LOAD_ARGS_4(a1, a2, a3, a4) \ long int __arg4 = (long) (a4); \ LOAD_ARGS_3 (a1, a2, a3) -#define LOAD_REGS_4 \ +# define LOAD_REGS_4 \ register long int _a4 asm ("r10") = __arg4; \ LOAD_REGS_3 -#define ASM_ARGS_4 ASM_ARGS_3, "r" (_a4) +# define ASM_ARGS_4 ASM_ARGS_3, "r" (_a4) -#define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ +# define LOAD_ARGS_5(a1, a2, a3, a4, a5) \ long int __arg5 = (long) (a5); \ LOAD_ARGS_4 (a1, a2, a3, a4) -#define LOAD_REGS_5 \ +# define LOAD_REGS_5 \ register long int _a5 asm ("r8") = __arg5; \ LOAD_REGS_4 -#define ASM_ARGS_5 ASM_ARGS_4, "r" (_a5) +# define ASM_ARGS_5 ASM_ARGS_4, "r" (_a5) -#define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ +# define LOAD_ARGS_6(a1, a2, a3, a4, a5, a6) \ long int __arg6 = (long) (a6); \ LOAD_ARGS_5 (a1, a2, a3, a4, a5) -#define LOAD_REGS_6 \ +# define LOAD_REGS_6 \ register long int _a6 asm ("r9") = __arg6; \ LOAD_REGS_5 -#define ASM_ARGS_6 ASM_ARGS_5, "r" (_a6) +# define ASM_ARGS_6 ASM_ARGS_5, "r" (_a6) #endif /* __ASSEMBLER__ */ diff --git a/libc/sysdeps/unix/sysv/linux/xstatconv.c b/libc/sysdeps/unix/sysv/linux/xstatconv.c index 805e33978..8210798a6 100644 --- a/libc/sysdeps/unix/sysv/linux/xstatconv.c +++ b/libc/sysdeps/unix/sysv/linux/xstatconv.c @@ -1,5 +1,6 @@ /* Convert between the kernel's `struct stat' format, and libc's. - Copyright (C) 1991,1995-1997,2000,2002,2003 Free Software Foundation, Inc. + Copyright (C) 1991,1995-1997,2000,2002,2003,2007 + 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,6 +21,7 @@ #include <errno.h> #include <sys/stat.h> #include <kernel_stat.h> +#include <kernel-features.h> #ifdef STAT_IS_KERNEL_STAT diff --git a/libc/sysdeps/wordsize-64/strtol.c b/libc/sysdeps/wordsize-64/strtol.c index 2e1b22934..ac17bbe4c 100644 --- a/libc/sysdeps/wordsize-64/strtol.c +++ b/libc/sysdeps/wordsize-64/strtol.c @@ -11,4 +11,6 @@ strong_alias (__strtol_internal, __strtoll_internal) libc_hidden_ver (__strtol_internal, __strtoll_internal) weak_alias (strtol, strtoll) +libc_hidden_ver (strtol, strtoll) weak_alias (strtol, strtoq) +libc_hidden_ver (strtol, strtoq) diff --git a/libc/sysdeps/x86_64/cacheinfo.c b/libc/sysdeps/x86_64/cacheinfo.c index f8217a175..793dc2d35 100644 --- a/libc/sysdeps/x86_64/cacheinfo.c +++ b/libc/sysdeps/x86_64/cacheinfo.c @@ -55,11 +55,13 @@ static const struct intel_02_cache_info { 0x45, _SC_LEVEL2_CACHE_SIZE, 2097152, 4, 32 }, { 0x46, _SC_LEVEL3_CACHE_SIZE, 4194304, 4, 64 }, { 0x47, _SC_LEVEL3_CACHE_SIZE, 8388608, 8, 64 }, + { 0x48, _SC_LEVEL2_CACHE_SIZE, 3145728, 12, 64 }, { 0x49, _SC_LEVEL2_CACHE_SIZE, 4194304, 16, 64 }, { 0x4a, _SC_LEVEL3_CACHE_SIZE, 6291456, 12, 64 }, { 0x4b, _SC_LEVEL3_CACHE_SIZE, 8388608, 16, 64 }, { 0x4c, _SC_LEVEL3_CACHE_SIZE, 12582912, 12, 64 }, { 0x4d, _SC_LEVEL3_CACHE_SIZE, 16777216, 16, 64 }, + { 0x4e, _SC_LEVEL2_CACHE_SIZE, 6291456, 24, 64 }, { 0x60, _SC_LEVEL1_DCACHE_SIZE, 16384, 8, 64 }, { 0x66, _SC_LEVEL1_DCACHE_SIZE, 8192, 4, 64 }, { 0x67, _SC_LEVEL1_DCACHE_SIZE, 16384, 4, 64 }, @@ -257,7 +259,8 @@ handle_amd (int name) : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "0" (0x80000000)); - if (name >= _SC_LEVEL3_CACHE_SIZE) + /* No level 4 cache (yet). */ + if (name > _SC_LEVEL3_CACHE_LINESIZE) return 0; unsigned int fn = 0x80000005 + (name >= _SC_LEVEL2_CACHE_SIZE); @@ -278,36 +281,87 @@ handle_amd (int name) { case _SC_LEVEL1_DCACHE_SIZE: return (ecx >> 14) & 0x3fc00; + case _SC_LEVEL1_DCACHE_ASSOC: ecx >>= 16; if ((ecx & 0xff) == 0xff) /* Fully associative. */ return (ecx << 2) & 0x3fc00; return ecx & 0xff; + case _SC_LEVEL1_DCACHE_LINESIZE: return ecx & 0xff; + case _SC_LEVEL2_CACHE_SIZE: return (ecx & 0xf000) == 0 ? 0 : (ecx >> 6) & 0x3fffc00; + case _SC_LEVEL2_CACHE_ASSOC: - ecx >>= 12; - switch (ecx & 0xf) + switch ((ecx >> 12) & 0xf) { case 0: case 1: case 2: case 4: - return ecx & 0xf; + return (ecx >> 12) & 0xf; case 6: return 8; case 8: return 16; - case 0xf: - return (ecx << 6) & 0x3fffc00; + case 10: + return 32; + case 11: + return 48; + case 12: + return 64; + case 13: + return 96; + case 14: + return 128; + case 15: + return ((ecx >> 6) & 0x3fffc00) / (ecx & 0xff); default: return 0; } + /* NOTREACHED */ + case _SC_LEVEL2_CACHE_LINESIZE: return (ecx & 0xf000) == 0 ? 0 : ecx & 0xff; + + case _SC_LEVEL3_CACHE_SIZE: + return (edx & 0xf000) == 0 ? 0 : (edx & 0x3ffc0000) << 1; + + case _SC_LEVEL3_CACHE_ASSOC: + switch ((edx >> 12) & 0xf) + { + case 0: + case 1: + case 2: + case 4: + return (edx >> 12) & 0xf; + case 6: + return 8; + case 8: + return 16; + case 10: + return 32; + case 11: + return 48; + case 12: + return 64; + case 13: + return 96; + case 14: + return 128; + case 15: + return ((edx & 0x3ffc0000) << 1) / (edx & 0xff); + default: + return 0; + } + /* NOTREACHED */ + + case _SC_LEVEL3_CACHE_LINESIZE: + return (edx & 0xf000) == 0 ? 0 : edx & 0xff; + default: assert (! "cannot happen"); } diff --git a/libc/sysdeps/x86_64/dl-trampoline.S b/libc/sysdeps/x86_64/dl-trampoline.S index c1686dae1..84fe4724b 100644 --- a/libc/sysdeps/x86_64/dl-trampoline.S +++ b/libc/sysdeps/x86_64/dl-trampoline.S @@ -1,5 +1,5 @@ /* PLT trampolines. x86-64 version. - Copyright (C) 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -120,13 +120,14 @@ _dl_runtime_profile: leaq 104(%rsp), %rsi movq %rsp, %rbx cfi_def_cfa_register (1) + movq %r10, %rcx + addq $8, %r10 + andq $0xfffffffffffffff0, %r10 subq %r10, %rsp movq %rsp, %rdi - movq %r10, %rcx shrq $3, %rcx rep movsq - andq $0xfffffffffffffff0, %rsp movq 32(%rbx), %rcx movq 40(%rbx), %rsi movq 48(%rbx), %rdi diff --git a/libc/sysdeps/x86_64/ldbl2mpn.c b/libc/sysdeps/x86_64/ldbl2mpn.c new file mode 100644 index 000000000..641b789cd --- /dev/null +++ b/libc/sysdeps/x86_64/ldbl2mpn.c @@ -0,0 +1 @@ +#include "../i386/ldbl2mpn.c" diff --git a/libc/sysdeps/x86_64/sched_cpucount.c b/libc/sysdeps/x86_64/sched_cpucount.c new file mode 100644 index 000000000..63d84a62e --- /dev/null +++ b/libc/sysdeps/x86_64/sched_cpucount.c @@ -0,0 +1,26 @@ +/* Copyright (C) 2007 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. */ + +#ifdef __amdfam10 +# define POPCNT(l) \ + ({ __cpu_mask r; \ + asm ("popcntq %1, %0" : "=r" (r) : "0" (l)); \ + r; }) +#endif + +#include <posix/sched_cpucount.c> diff --git a/libc/sysvipc/sys/msg.h b/libc/sysvipc/sys/msg.h index b22c07678..cdc96be9b 100644 --- a/libc/sysvipc/sys/msg.h +++ b/libc/sysvipc/sys/msg.h @@ -1,4 +1,5 @@ -/* Copyright (C) 1995-1997,1999,2000,2003,2006 Free Software Foundation, Inc. +/* Copyright (C) 1995-1997,1999,2000,2003,2006,2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -21,6 +22,9 @@ #include <features.h> +#define __need_size_t +#include <stddef.h> + /* Get common definition of System V style IPC. */ #include <sys/ipc.h> diff --git a/libc/time/strptime.c b/libc/time/strptime.c index fc3526912..18af49bbb 100644 --- a/libc/time/strptime.c +++ b/libc/time/strptime.c @@ -1,5 +1,6 @@ /* Convert a string representation of time to a time value. - Copyright (C) 1996-2000, 2001, 2002, 2004 Free Software Foundation, Inc. + Copyright (C) 1996-2000, 2001, 2002, 2004, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -33,8 +34,6 @@ strptime (buf, format, tm) const char *format; struct tm *tm; { - enum ptime_locale_status decided = not; - return __strptime_internal (buf, format, tm, &decided, -1, - _NL_CURRENT_LOCALE); + return __strptime_internal (buf, format, tm, NULL, _NL_CURRENT_LOCALE); } libc_hidden_def (strptime) diff --git a/libc/time/strptime_l.c b/libc/time/strptime_l.c index 4cb206aec..c1224adc9 100644 --- a/libc/time/strptime_l.c +++ b/libc/time/strptime_l.c @@ -98,12 +98,12 @@ localtime_r (t, tp) ({ \ __label__ do_normal; \ \ - if (*decided != raw) \ + if (s.decided != raw) \ { \ val = _nl_parse_alt_digit (&rp HELPER_LOCALE_ARG); \ - if (val == -1 && *decided != loc) \ + if (val == -1 && s.decided != loc) \ { \ - *decided = loc; \ + s.decided = loc; \ goto do_normal; \ } \ if (val < from || val > to) \ @@ -123,8 +123,7 @@ localtime_r (t, tp) #endif #define recursive(new_fmt) \ (*(new_fmt) != '\0' \ - && (rp = __strptime_internal (rp, (new_fmt), tm, \ - decided, era_cnt LOCALE_ARG)) != NULL) + && (rp = __strptime_internal (rp, (new_fmt), tm, &s LOCALE_ARG)) != NULL) #ifdef _LIBC @@ -251,12 +250,11 @@ internal_function #else static char * #endif -__strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) +__strptime_internal (rp, fmt, tmp, statep LOCALE_PARAM) const char *rp; const char *fmt; - struct tm *tm; - enum ptime_locale_status *decided; - int era_cnt; + struct tm *tmp; + void *statep; LOCALE_PARAM_DECL { #ifdef _LIBC @@ -264,28 +262,52 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) #endif const char *rp_backup; + const char *rp_longest; int cnt; + int cnt_longest; size_t val; - int have_I, is_pm; - int century, want_century; - int want_era; - int have_wday, want_xday; - int have_yday; - int have_mon, have_mday; - int have_uweek, have_wweek; - int week_no; size_t num_eras; - struct era_entry *era; - - have_I = is_pm = 0; - century = -1; - want_century = 0; - want_era = 0; - era = NULL; - week_no = 0; - - have_wday = want_xday = have_yday = have_mon = have_mday = have_uweek = 0; - have_wweek = 0; + struct era_entry *era = NULL; + enum ptime_locale_status { not, loc, raw } decided_longest; + struct __strptime_state + { + unsigned int have_I : 1; + unsigned int have_wday : 1; + unsigned int have_yday : 1; + unsigned int have_mon : 1; + unsigned int have_mday : 1; + unsigned int have_uweek : 1; + unsigned int have_wweek : 1; + unsigned int is_pm : 1; + unsigned int want_century : 1; + unsigned int want_era : 1; + unsigned int want_xday : 1; + enum ptime_locale_status decided : 2; + signed char week_no; + signed char century; + int era_cnt; + } s; + struct tm tmb; + struct tm *tm; + + if (statep == NULL) + { + memset (&s, 0, sizeof (s)); + s.century = -1; + s.era_cnt = -1; +#ifdef _NL_CURRENT + s.decided = not; +#else + s.decided = raw; +#endif + tm = tmp; + } + else + { + s = *(struct __strptime_state *) statep; + tmb = *tmp; + tm = &tmb; + } while (*fmt != '\0') { @@ -308,6 +330,18 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) } ++fmt; + if (statep != NULL) + { + /* In recursive calls silently discard strftime modifiers. */ + while (*fmt == '-' || *fmt == '_' || *fmt == '0' + || *fmt == '^' || *fmt == '#') + ++fmt; + + /* And field width. */ + while (*fmt >= '0' && *fmt <= '9') + ++fmt; + } + #ifndef _NL_CURRENT /* We need this for handling the `E' modifier. */ start_over: @@ -325,151 +359,182 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) case 'a': case 'A': /* Match day of week. */ + rp_longest = NULL; + decided_longest = s.decided; + cnt_longest = -1; for (cnt = 0; cnt < 7; ++cnt) { + const char *trp; #ifdef _NL_CURRENT - if (*decided !=raw) + if (s.decided !=raw) { - if (match_string (_NL_CURRENT (LC_TIME, DAY_1 + cnt), rp)) + trp = rp; + if (match_string (_NL_CURRENT (LC_TIME, DAY_1 + cnt), trp) + && trp > rp_longest) { - if (*decided == not + rp_longest = trp; + cnt_longest = cnt; + if (s.decided == not && strcmp (_NL_CURRENT (LC_TIME, DAY_1 + cnt), weekday_name[cnt])) - *decided = loc; - break; + decided_longest = loc; } - if (match_string (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), rp)) + trp = rp; + if (match_string (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), trp) + && trp > rp_longest) { - if (*decided == not + rp_longest = trp; + cnt_longest = cnt; + if (s.decided == not && strcmp (_NL_CURRENT (LC_TIME, ABDAY_1 + cnt), ab_weekday_name[cnt])) - *decided = loc; - break; + decided_longest = loc; } } #endif - if (*decided != loc - && (match_string (weekday_name[cnt], rp) - || match_string (ab_weekday_name[cnt], rp))) + if (s.decided != loc + && (((trp = rp, match_string (weekday_name[cnt], trp)) + && trp > rp_longest) + || ((trp = rp, match_string (ab_weekday_name[cnt], rp)) + && trp > rp_longest))) { - *decided = raw; - break; + rp_longest = trp; + cnt_longest = cnt; + decided_longest = raw; } } - if (cnt == 7) + if (rp_longest == NULL) /* Does not match a weekday name. */ return NULL; - tm->tm_wday = cnt; - have_wday = 1; + rp = rp_longest; + s.decided = decided_longest; + tm->tm_wday = cnt_longest; + s.have_wday = 1; break; case 'b': case 'B': case 'h': /* Match month name. */ + rp_longest = NULL; + decided_longest = s.decided; + cnt_longest = -1; for (cnt = 0; cnt < 12; ++cnt) { + const char *trp; #ifdef _NL_CURRENT - if (*decided !=raw) + if (s.decided !=raw) { - if (match_string (_NL_CURRENT (LC_TIME, MON_1 + cnt), rp)) + trp = rp; + if (match_string (_NL_CURRENT (LC_TIME, MON_1 + cnt), trp) + && trp > rp_longest) { - if (*decided == not + rp_longest = trp; + cnt_longest = cnt; + if (s.decided == not && strcmp (_NL_CURRENT (LC_TIME, MON_1 + cnt), month_name[cnt])) - *decided = loc; - break; + decided_longest = loc; } - if (match_string (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), rp)) + trp = rp; + if (match_string (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), trp) + && trp > rp_longest) { - if (*decided == not + rp_longest = trp; + cnt_longest = cnt; + if (s.decided == not && strcmp (_NL_CURRENT (LC_TIME, ABMON_1 + cnt), ab_month_name[cnt])) - *decided = loc; - break; + decided_longest = loc; } } #endif - if (match_string (month_name[cnt], rp) - || match_string (ab_month_name[cnt], rp)) + if (s.decided != loc + && (((trp = rp, match_string (month_name[cnt], trp)) + && trp > rp_longest) + || ((trp = rp, match_string (ab_month_name[cnt], trp)) + && trp > rp_longest))) { - *decided = raw; - break; + rp_longest = trp; + cnt_longest = cnt; + decided_longest = raw; } } - if (cnt == 12) + if (rp_longest == NULL) /* Does not match a month name. */ return NULL; - tm->tm_mon = cnt; - have_mon = 1; - want_xday = 1; + rp = rp_longest; + s.decided = decided_longest; + tm->tm_mon = cnt_longest; + s.have_mon = 1; + s.want_xday = 1; break; case 'c': /* Match locale's date and time format. */ #ifdef _NL_CURRENT - if (*decided != raw) + if (s.decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, D_T_FMT))) { - if (*decided == loc) + if (s.decided == loc) return NULL; else rp = rp_backup; } else { - if (*decided == not && + if (s.decided == not && strcmp (_NL_CURRENT (LC_TIME, D_T_FMT), HERE_D_T_FMT)) - *decided = loc; - want_xday = 1; + s.decided = loc; + s.want_xday = 1; break; } - *decided = raw; + s.decided = raw; } #endif if (!recursive (HERE_D_T_FMT)) return NULL; - want_xday = 1; + s.want_xday = 1; break; case 'C': /* Match century number. */ match_century: get_number (0, 99, 2); - century = val; - want_xday = 1; + s.century = val; + s.want_xday = 1; break; case 'd': case 'e': /* Match day of month. */ get_number (1, 31, 2); tm->tm_mday = val; - have_mday = 1; - want_xday = 1; + s.have_mday = 1; + s.want_xday = 1; break; case 'F': if (!recursive ("%Y-%m-%d")) return NULL; - want_xday = 1; + s.want_xday = 1; break; case 'x': #ifdef _NL_CURRENT - if (*decided != raw) + if (s.decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, D_FMT))) { - if (*decided == loc) + if (s.decided == loc) return NULL; else rp = rp_backup; } else { - if (*decided == not + if (s.decided == not && strcmp (_NL_CURRENT (LC_TIME, D_FMT), HERE_D_FMT)) - *decided = loc; - want_xday = 1; + s.decided = loc; + s.want_xday = 1; break; } - *decided = raw; + s.decided = raw; } #endif /* Fall through. */ @@ -477,14 +542,14 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) /* Match standard day format. */ if (!recursive (HERE_D_FMT)) return NULL; - want_xday = 1; + s.want_xday = 1; break; case 'k': case 'H': /* Match hour in 24-hour clock. */ get_number (0, 23, 2); tm->tm_hour = val; - have_I = 0; + s.have_I = 0; break; case 'l': /* Match hour in 12-hour clock. GNU extension. */ @@ -492,20 +557,20 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) /* Match hour in 12-hour clock. */ get_number (1, 12, 2); tm->tm_hour = val % 12; - have_I = 1; + s.have_I = 1; break; case 'j': /* Match day number of year. */ get_number (1, 366, 3); tm->tm_yday = val - 1; - have_yday = 1; + s.have_yday = 1; break; case 'm': /* Match number of month. */ get_number (1, 12, 2); tm->tm_mon = val - 1; - have_mon = 1; - want_xday = 1; + s.have_mon = 1; + s.want_xday = 1; break; case 'M': /* Match minute. */ @@ -521,52 +586,55 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) case 'p': /* Match locale's equivalent of AM/PM. */ #ifdef _NL_CURRENT - if (*decided != raw) + if (s.decided != raw) { if (match_string (_NL_CURRENT (LC_TIME, AM_STR), rp)) { if (strcmp (_NL_CURRENT (LC_TIME, AM_STR), HERE_AM_STR)) - *decided = loc; + s.decided = loc; + s.is_pm = 0; break; } if (match_string (_NL_CURRENT (LC_TIME, PM_STR), rp)) { if (strcmp (_NL_CURRENT (LC_TIME, PM_STR), HERE_PM_STR)) - *decided = loc; - is_pm = 1; + s.decided = loc; + s.is_pm = 1; break; } - *decided = raw; + s.decided = raw; } #endif if (!match_string (HERE_AM_STR, rp)) { if (match_string (HERE_PM_STR, rp)) - is_pm = 1; + s.is_pm = 1; else return NULL; } + else + s.is_pm = 0; break; case 'r': #ifdef _NL_CURRENT - if (*decided != raw) + if (s.decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, T_FMT_AMPM))) { - if (*decided == loc) + if (s.decided == loc) return NULL; else rp = rp_backup; } else { - if (*decided == not && + if (s.decided == not && strcmp (_NL_CURRENT (LC_TIME, T_FMT_AMPM), HERE_T_FMT_AMPM)) - *decided = loc; + s.decided = loc; break; } - *decided = raw; + s.decided = raw; } #endif if (!recursive (HERE_T_FMT_AMPM)) @@ -605,11 +673,11 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) break; case 'X': #ifdef _NL_CURRENT - if (*decided != raw) + if (s.decided != raw) { if (!recursive (_NL_CURRENT (LC_TIME, T_FMT))) { - if (*decided == loc) + if (s.decided == loc) return NULL; else rp = rp_backup; @@ -617,10 +685,10 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) else { if (strcmp (_NL_CURRENT (LC_TIME, T_FMT), HERE_T_FMT)) - *decided = loc; + s.decided = loc; break; } - *decided = raw; + s.decided = raw; } #endif /* Fall through. */ @@ -631,7 +699,7 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) case 'u': get_number (1, 7, 1); tm->tm_wday = val % 7; - have_wday = 1; + s.have_wday = 1; break; case 'g': get_number (0, 99, 2); @@ -648,13 +716,13 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) break; case 'U': get_number (0, 53, 2); - week_no = val; - have_uweek = 1; + s.week_no = val; + s.have_uweek = 1; break; case 'W': get_number (0, 53, 2); - week_no = val; - have_wweek = 1; + s.week_no = val; + s.have_wweek = 1; break; case 'V': get_number (0, 53, 2); @@ -665,7 +733,7 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) /* Match number of weekday. */ get_number (0, 6, 1); tm->tm_wday = val; - have_wday = 1; + s.have_wday = 1; break; case 'y': match_year_in_century: @@ -675,15 +743,15 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) values in the range 69-99 refer to the twentieth century. */ tm->tm_year = val >= 69 ? val : val + 100; /* Indicate that we want to use the century, if specified. */ - want_century = 1; - want_xday = 1; + s.want_century = 1; + s.want_xday = 1; break; case 'Y': /* Match year including century number. */ get_number (0, 9999, 4); tm->tm_year = val - 1900; - want_century = 0; - want_xday = 1; + s.want_century = 0; + s.want_xday = 1; break; case 'Z': /* XXX How to handle this? */ @@ -730,7 +798,7 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) { case 'c': /* Match locale's alternate date and time format. */ - if (*decided != raw) + if (s.decided != raw) { const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_T_FMT); @@ -739,7 +807,7 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) if (!recursive (fmt)) { - if (*decided == loc) + if (s.decided == loc) return NULL; else rp = rp_backup; @@ -747,28 +815,28 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) else { if (strcmp (fmt, HERE_D_T_FMT)) - *decided = loc; - want_xday = 1; + s.decided = loc; + s.want_xday = 1; break; } - *decided = raw; + s.decided = raw; } /* The C locale has no era information, so use the normal representation. */ if (!recursive (HERE_D_T_FMT)) return NULL; - want_xday = 1; + s.want_xday = 1; break; case 'C': #ifdef OPTION_EGLIBC_LOCALE_CODE - if (*decided != raw) + if (s.decided != raw) { - if (era_cnt >= 0) + if (s.era_cnt >= 0) { - era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + era = _nl_select_era_entry (s.era_cnt HELPER_LOCALE_ARG); if (era != NULL && match_string (era->era_name, rp)) { - *decided = loc; + s.decided = loc; break; } else @@ -777,25 +845,25 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) num_eras = _NL_CURRENT_WORD (LC_TIME, _NL_TIME_ERA_NUM_ENTRIES); - for (era_cnt = 0; era_cnt < (int) num_eras; - ++era_cnt, rp = rp_backup) + for (s.era_cnt = 0; s.era_cnt < (int) num_eras; + ++s.era_cnt, rp = rp_backup) { - era = _nl_select_era_entry (era_cnt + era = _nl_select_era_entry (s.era_cnt HELPER_LOCALE_ARG); if (era != NULL && match_string (era->era_name, rp)) { - *decided = loc; + s.decided = loc; break; } } - if (era_cnt != (int) num_eras) + if (s.era_cnt != (int) num_eras) break; - era_cnt = -1; - if (*decided == loc) + s.era_cnt = -1; + if (s.decided == loc) return NULL; - *decided = raw; + s.decided = raw; } #endif /* The C locale has no era information, so use the @@ -803,19 +871,19 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) goto match_century; case 'y': #ifdef OPTION_EGLIBC_LOCALE_CODE - if (*decided != raw) + if (s.decided != raw) { get_number(0, 9999, 4); tm->tm_year = val; - want_era = 1; - want_xday = 1; - want_century = 1; + s.want_era = 1; + s.want_xday = 1; + s.want_century = 1; - if (era_cnt >= 0) + if (s.era_cnt >= 0) { - assert (*decided == loc); + assert (s.decided == loc); - era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + era = _nl_select_era_entry (s.era_cnt HELPER_LOCALE_ARG); bool match = false; if (era != NULL) { @@ -834,9 +902,9 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) num_eras = _NL_CURRENT_WORD (LC_TIME, _NL_TIME_ERA_NUM_ENTRIES); - for (era_cnt = 0; era_cnt < (int) num_eras; ++era_cnt) + for (s.era_cnt = 0; s.era_cnt < (int) num_eras; ++s.era_cnt) { - era = _nl_select_era_entry (era_cnt + era = _nl_select_era_entry (s.era_cnt HELPER_LOCALE_ARG); if (era != NULL) { @@ -847,60 +915,60 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) - (int64_t) era->start_date[0]) * era->absolute_direction)) { - *decided = loc; + s.decided = loc; break; } } } - if (era_cnt != (int) num_eras) + if (s.era_cnt != (int) num_eras) break; - era_cnt = -1; - if (*decided == loc) + s.era_cnt = -1; + if (s.decided == loc) return NULL; - *decided = raw; + s.decided = raw; } #endif goto match_year_in_century; case 'Y': #ifdef OPTION_EGLIBC_LOCALE_CODE - if (*decided != raw) + if (s.decided != raw) { num_eras = _NL_CURRENT_WORD (LC_TIME, _NL_TIME_ERA_NUM_ENTRIES); - for (era_cnt = 0; era_cnt < (int) num_eras; - ++era_cnt, rp = rp_backup) + for (s.era_cnt = 0; s.era_cnt < (int) num_eras; + ++s.era_cnt, rp = rp_backup) { - era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + era = _nl_select_era_entry (s.era_cnt HELPER_LOCALE_ARG); if (era != NULL && recursive (era->era_format)) break; } - if (era_cnt == (int) num_eras) + if (s.era_cnt == (int) num_eras) { - era_cnt = -1; - if (*decided == loc) + s.era_cnt = -1; + if (s.decided == loc) return NULL; else rp = rp_backup; } else { - *decided = loc; - era_cnt = -1; + s.decided = loc; + s.era_cnt = -1; break; } - *decided = raw; + s.decided = raw; } #endif get_number (0, 9999, 4); tm->tm_year = val - 1900; - want_century = 0; - want_xday = 1; + s.want_century = 0; + s.want_xday = 1; break; case 'x': - if (*decided != raw) + if (s.decided != raw) { const char *fmt = _NL_CURRENT (LC_TIME, ERA_D_FMT); @@ -909,7 +977,7 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) if (!recursive (fmt)) { - if (*decided == loc) + if (s.decided == loc) return NULL; else rp = rp_backup; @@ -917,16 +985,16 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) else { if (strcmp (fmt, HERE_D_FMT)) - *decided = loc; + s.decided = loc; break; } - *decided = raw; + s.decided = raw; } if (!recursive (HERE_D_FMT)) return NULL; break; case 'X': - if (*decided != raw) + if (s.decided != raw) { const char *fmt = _NL_CURRENT (LC_TIME, ERA_T_FMT); @@ -935,7 +1003,7 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) if (!recursive (fmt)) { - if (*decided == loc) + if (s.decided == loc) return NULL; else rp = rp_backup; @@ -943,10 +1011,10 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) else { if (strcmp (fmt, HERE_T_FMT)) - *decided = loc; + s.decided = loc; break; } - *decided = raw; + s.decided = raw; } if (!recursive (HERE_T_FMT)) return NULL; @@ -973,29 +1041,29 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) /* Match day of month using alternate numeric symbols. */ get_alt_number (1, 31, 2); tm->tm_mday = val; - have_mday = 1; - want_xday = 1; + s.have_mday = 1; + s.want_xday = 1; break; case 'H': /* Match hour in 24-hour clock using alternate numeric symbols. */ get_alt_number (0, 23, 2); tm->tm_hour = val; - have_I = 0; + s.have_I = 0; break; case 'I': /* Match hour in 12-hour clock using alternate numeric symbols. */ get_alt_number (1, 12, 2); tm->tm_hour = val % 12; - have_I = 1; + s.have_I = 1; break; case 'm': /* Match month using alternate numeric symbols. */ get_alt_number (1, 12, 2); tm->tm_mon = val - 1; - have_mon = 1; - want_xday = 1; + s.have_mon = 1; + s.want_xday = 1; break; case 'M': /* Match minutes using alternate numeric symbols. */ @@ -1009,13 +1077,13 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) break; case 'U': get_alt_number (0, 53, 2); - week_no = val; - have_uweek = 1; + s.week_no = val; + s.have_uweek = 1; break; case 'W': get_alt_number (0, 53, 2); - week_no = val; - have_wweek = 1; + s.week_no = val; + s.have_wweek = 1; break; case 'V': get_alt_number (0, 53, 2); @@ -1026,13 +1094,13 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) /* Match number of weekday using alternate numeric symbols. */ get_alt_number (0, 6, 1); tm->tm_wday = val; - have_wday = 1; + s.have_wday = 1; break; case 'y': /* Match year within century using alternate numeric symbols. */ get_alt_number (0, 99, 2); tm->tm_year = val >= 69 ? val : val + 100; - want_xday = 1; + s.want_xday = 1; break; default: return NULL; @@ -1043,25 +1111,34 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) } } - if (have_I && is_pm) + if (statep != NULL) + { + /* Recursive invocation, returning success, so + update parent's struct tm and state. */ + *(struct __strptime_state *) statep = s; + *tmp = tmb; + return (char *) rp; + } + + if (s.have_I && s.is_pm) tm->tm_hour += 12; - if (century != -1) + if (s.century != -1) { - if (want_century) - tm->tm_year = tm->tm_year % 100 + (century - 19) * 100; + if (s.want_century) + tm->tm_year = tm->tm_year % 100 + (s.century - 19) * 100; else /* Only the century, but not the year. Strange, but so be it. */ - tm->tm_year = (century - 19) * 100; + tm->tm_year = (s.century - 19) * 100; } #ifdef OPTION_EGLIBC_LOCALE_CODE - if (era_cnt != -1) + if (s.era_cnt != -1) { - era = _nl_select_era_entry (era_cnt HELPER_LOCALE_ARG); + era = _nl_select_era_entry (s.era_cnt HELPER_LOCALE_ARG); if (era == NULL) return NULL; - if (want_era) + if (s.want_era) tm->tm_year = (era->start_date[0] + ((tm->tm_year - era->offset) * era->absolute_direction)); @@ -1071,68 +1148,68 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM) } else #endif - if (want_era) + if (s.want_era) { /* No era found but we have seen an E modifier. Rectify some values. */ - if (want_century && century == -1 && tm->tm_year < 69) + if (s.want_century && s.century == -1 && tm->tm_year < 69) tm->tm_year += 100; } - if (want_xday && !have_wday) + if (s.want_xday && !s.have_wday) { - if ( !(have_mon && have_mday) && have_yday) + if ( !(s.have_mon && s.have_mday) && s.have_yday) { /* We don't have tm_mon and/or tm_mday, compute them. */ int t_mon = 0; while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] <= tm->tm_yday) t_mon++; - if (!have_mon) + if (!s.have_mon) tm->tm_mon = t_mon - 1; - if (!have_mday) + if (!s.have_mday) tm->tm_mday = (tm->tm_yday - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); - have_mon = 1; - have_mday = 1; + s.have_mon = 1; + s.have_mday = 1; } /* Don't crash in day_of_the_week if tm_mon is uninitialized. */ - if (have_mon || (unsigned) tm->tm_mon <= 11) + if (s.have_mon || (unsigned) tm->tm_mon <= 11) day_of_the_week (tm); } - if (want_xday && !have_yday && (have_mon || (unsigned) tm->tm_mon <= 11)) + if (s.want_xday && !s.have_yday && (s.have_mon || (unsigned) tm->tm_mon <= 11)) day_of_the_year (tm); - if ((have_uweek || have_wweek) && have_wday) + if ((s.have_uweek || s.have_wweek) && s.have_wday) { int save_wday = tm->tm_wday; int save_mday = tm->tm_mday; int save_mon = tm->tm_mon; - int w_offset = have_uweek ? 0 : 1; + int w_offset = s.have_uweek ? 0 : 1; tm->tm_mday = 1; tm->tm_mon = 0; day_of_the_week (tm); - if (have_mday) + if (s.have_mday) tm->tm_mday = save_mday; - if (have_mon) + if (s.have_mon) tm->tm_mon = save_mon; - if (!have_yday) + if (!s.have_yday) tm->tm_yday = ((7 - (tm->tm_wday - w_offset)) % 7 - + (week_no - 1) *7 + + (s.week_no - 1) *7 + save_wday - w_offset); - if (!have_mday || !have_mon) + if (!s.have_mday || !s.have_mon) { int t_mon = 0; while (__mon_yday[__isleap(1900 + tm->tm_year)][t_mon] <= tm->tm_yday) t_mon++; - if (!have_mon) + if (!s.have_mon) tm->tm_mon = t_mon - 1; - if (!have_mday) + if (!s.have_mday) tm->tm_mday = (tm->tm_yday - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1); @@ -1152,14 +1229,7 @@ strptime (buf, format, tm LOCALE_PARAM) struct tm *tm; LOCALE_PARAM_DECL { - enum ptime_locale_status decided; - -#ifdef _NL_CURRENT - decided = not; -#else - decided = raw; -#endif - return __strptime_internal (buf, format, tm, &decided, -1 LOCALE_ARG); + return __strptime_internal (buf, format, tm, NULL LOCALE_ARG); } #ifdef _LIBC diff --git a/libc/timezone/Makefile b/libc/timezone/Makefile index 9947d45b1..3d5b73ae9 100644 --- a/libc/timezone/Makefile +++ b/libc/timezone/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1998,1999,2000,2002,2005 Free Software Foundation, Inc. +# Copyright (C) 1998,1999,2000,2002,2005,2007 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 @@ -166,7 +166,8 @@ tz-cflags = -DTZDIR='"$(zonedir)"' \ -DTZDEFRULES='"$(posixrules-file)"' \ -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -CFLAGS-zdump.c = -Wno-strict-prototypes -DNOID $(tz-cflags) -DHAVE_GETTEXT +CFLAGS-zdump.c = -fwrapv -Wno-strict-prototypes -DNOID $(tz-cflags) \ + -DHAVE_GETTEXT CFLAGS-zic.c = -Wno-strict-prototypes -DNOID $(tz-cflags) -DHAVE_GETTEXT CFLAGS-ialloc.c = -Wno-strict-prototypes -DNOID -DHAVE_GETTEXT CFLAGS-scheck.c = -Wno-strict-prototypes -DNOID -DHAVE_GETTEXT diff --git a/libc/wcsmbs/bits/wchar-ldbl.h b/libc/wcsmbs/bits/wchar-ldbl.h index 5e4894567..56a28d33b 100644 --- a/libc/wcsmbs/bits/wchar-ldbl.h +++ b/libc/wcsmbs/bits/wchar-ldbl.h @@ -1,5 +1,5 @@ /* -mlong-double-64 compatibility mode for <wchar.h> functions. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -48,8 +48,6 @@ __END_NAMESPACE_C99 __LDBL_REDIR1_DECL (wcstold_l, wcstod_l); #endif -__LDBL_REDIR1_DECL (__wcstold_internal, __wcstod_internal); - #if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus __LDBL_REDIR_DECL (__swprintf_chk) __LDBL_REDIR_DECL (__vswprintf_chk) diff --git a/libc/wcsmbs/wchar.h b/libc/wcsmbs/wchar.h index 5ef4b1a98..b334e0623 100644 --- a/libc/wcsmbs/wchar.h +++ b/libc/wcsmbs/wchar.h @@ -23,7 +23,7 @@ #ifndef _WCHAR_H -#ifndef __need_mbstate_t +#if !defined __need_mbstate_t && !defined __need_wint_t # define _WCHAR_H 1 # include <features.h> #endif @@ -39,38 +39,40 @@ # define __need___va_list # include <stdarg.h> +# include <bits/wchar.h> + /* Get size_t, wchar_t, wint_t and NULL from <stddef.h>. */ # define __need_size_t # define __need_wchar_t # define __need_NULL #endif -#define __need_wint_t -#include <stddef.h> - -#include <bits/wchar.h> +#if defined _WCHAR_H || defined __need_wint_t || !defined __WINT_TYPE__ +# undef __need_wint_t +# define __need_wint_t +# include <stddef.h> /* We try to get wint_t from <stddef.h>, but not all GCC versions define it there. So define it ourselves if it remains undefined. */ -#ifndef _WINT_T +# ifndef _WINT_T /* Integral type unchanged by default argument promotions that can hold any value corresponding to members of the extended character set, as well as at least one value that does not correspond to any member of the extended character set. */ -# define _WINT_T +# define _WINT_T typedef unsigned int wint_t; -#else +# else /* Work around problems with the <stddef.h> file which doesn't put wint_t in the std namespace. */ -# if defined __cplusplus && defined _GLIBCPP_USE_NAMESPACES \ - && defined __WINT_TYPE__ +# if defined __cplusplus && defined _GLIBCPP_USE_NAMESPACES \ + && defined __WINT_TYPE__ __BEGIN_NAMESPACE_STD typedef __WINT_TYPE__ wint_t; __END_NAMESPACE_STD +# endif # endif #endif - -#ifndef __mbstate_t_defined +#if (defined _WCHAR_H || defined __need_mbstate_t) && !defined __mbstate_t_defined # define __mbstate_t_defined 1 /* Conversion state information. */ typedef struct @@ -78,7 +80,11 @@ typedef struct int __count; union { +# ifdef __WINT_TYPE__ + __WINT_TYPE__ __wch; +# else wint_t __wch; +# endif char __wchb[4]; } __value; /* Value so far. */ } __mbstate_t; @@ -497,96 +503,6 @@ extern long double wcstold_l (__const wchar_t *__restrict __nptr, #endif /* GNU */ -/* The internal entry points for `wcstoX' take an extra flag argument - saying whether or not to parse locale-dependent number grouping. */ -extern double __wcstod_internal (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __group) - __THROW; -extern float __wcstof_internal (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __group) - __THROW; -extern long double __wcstold_internal (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - int __group) __THROW; - -#if !defined __wcstol_internal_defined \ - && defined __OPTIMIZE__ && __GNUC__ >= 2 -extern long int __wcstol_internal (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - int __base, int __group) __THROW; -# define __wcstol_internal_defined 1 -#endif -#if !defined __wcstoul_internal_defined \ - && defined __OPTIMIZE__ && __GNUC__ >= 2 -extern unsigned long int __wcstoul_internal (__const wchar_t *__restrict __npt, - wchar_t **__restrict __endptr, - int __base, int __group) __THROW; -# define __wcstoul_internal_defined 1 -#endif -#if !defined __wcstoll_internal_defined \ - && defined __OPTIMIZE__ && __GNUC__ >= 2 -__extension__ -extern long long int __wcstoll_internal (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, - int __base, int __group) __THROW; -# define __wcstoll_internal_defined 1 -#endif -#if !defined __wcstoull_internal_defined \ - && defined __OPTIMIZE__ && __GNUC__ >= 2 -__extension__ -extern unsigned long long int __wcstoull_internal (__const wchar_t * - __restrict __nptr, - wchar_t ** - __restrict __endptr, - int __base, - int __group) __THROW; -# define __wcstoull_internal_defined 1 -#endif - - -#if defined __OPTIMIZE__ && __GNUC__ >= 2 -/* Define inline functions which call the internal entry points. */ -__BEGIN_NAMESPACE_C99 - -__extern_inline double -__NTH (wcstod (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr)) -{ return __wcstod_internal (__nptr, __endptr, 0); } -__extern_inline long int -__NTH (wcstol (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __base)) -{ return __wcstol_internal (__nptr, __endptr, __base, 0); } -__extern_inline unsigned long int -__NTH (wcstoul (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __base)) -{ return __wcstoul_internal (__nptr, __endptr, __base, 0); } -__END_NAMESPACE_C99 - -# ifdef __USE_GNU -__extern_inline float -__NTH (wcstof (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr)) -{ return __wcstof_internal (__nptr, __endptr, 0); } -# ifndef __LDBL_COMPAT -__extern_inline long double -__NTH (wcstold (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr)) -{ return __wcstold_internal (__nptr, __endptr, 0); } -# endif -__extension__ -__extern_inline long long int -__NTH (wcstoq (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __base)) -{ return __wcstoll_internal (__nptr, __endptr, __base, 0); } -__extension__ -__extern_inline unsigned long long int -__NTH (wcstouq (__const wchar_t *__restrict __nptr, - wchar_t **__restrict __endptr, int __base)) -{ return __wcstoull_internal (__nptr, __endptr, __base, 0); } -# endif /* Use GNU. */ -#endif /* Optimizing GCC >=2. */ - - #ifdef __USE_GNU /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ @@ -607,7 +523,7 @@ extern wchar_t *wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n) extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) __THROW; #endif -#if defined __USE_ISOC99 || defined __USE_UNIX98 +#if defined __USE_ISOC95 || defined __USE_UNIX98 __BEGIN_NAMESPACE_C99 /* Select orientation for stream. */ @@ -674,7 +590,7 @@ extern int swscanf (__const wchar_t *__restrict __s, __THROW /* __attribute__ ((__format__ (__wscanf__, 2, 3))) */; __END_NAMESPACE_C99 -#endif /* Use ISO C99 and Unix98. */ +#endif /* Use ISO C95, C99 and Unix98. */ #ifdef __USE_ISOC99 __BEGIN_NAMESPACE_C99 diff --git a/libc/wctype/wctype.h b/libc/wctype/wctype.h index 5bfe43895..603255931 100644 --- a/libc/wctype/wctype.h +++ b/libc/wctype/wctype.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996-2002, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1996-2002, 2005, 2007 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,22 +29,9 @@ #ifndef __need_iswxxx # define _WCTYPE_H 1 -/* We try to get wint_t from <stddef.h>, but not all GCC versions define it - there. So define it ourselves if it remains undefined. */ +/* Get wint_t from <wchar.h>. */ # define __need_wint_t -# include <stddef.h> -# ifndef _WINT_T -/* Integral type unchanged by default argument promotions that can - hold any value corresponding to members of the extended character - set, as well as at least one value that does not correspond to any - member of the extended character set. */ -# define _WINT_T -typedef unsigned int wint_t; -# else -# ifdef __USE_ISOC99 -__USING_NAMESPACE_C99(wint_t) -# endif -# endif +# include <wchar.h> /* Constant expression of type `wint_t' whose value does not correspond to any member of the extended character set. */ diff --git a/ports/ChangeLog.aix b/ports/ChangeLog.aix index 5305d338d..3e3e4df30 100644 --- a/ports/ChangeLog.aix +++ b/ports/ChangeLog.aix @@ -1,3 +1,7 @@ +2007-07-10 Daniel Jacobowitz <dan@codesourcery.com> + + * sysdeps/unix/sysv/aix/bits/fcntl.h: Comment fix. + 2005-12-27 Roland McGrath <roland@redhat.com> * sysdeps/unix/sysv/aix/bits/setjmp.h (_JMPBUF_UNWINDS): Take third diff --git a/ports/ChangeLog.am33 b/ports/ChangeLog.am33 index f794cc55d..c10f8d08e 100644 --- a/ports/ChangeLog.am33 +++ b/ports/ChangeLog.am33 @@ -1,3 +1,7 @@ +2007-07-10 Daniel Jacobowitz <dan@codesourcery.com> + + * sysdeps/unix/sysv/linux/am33/bits/fcntl.h: Comment fix. + 2006-01-12 Roland McGrath <roland@redhat.com> * sysdeps/am33/jmpbuf-unwind.h: Include <jmpbuf-offsets.h>. diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm index 39e14dca9..fbd399e9d 100644 --- a/ports/ChangeLog.arm +++ b/ports/ChangeLog.arm @@ -1,3 +1,80 @@ +2007-09-12 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/arm/nptl/tls.h (THREAD_GSCOPE_RESET_FLAG): Use + lll_futex_wake not lll_private_futex_wake. + * sysdeps/unix/sysv/linux/arm/bits/fcntl.h (O_CLOEXEC): Define. + * sysdeps/unix/sysv/linux/arm/eabi/sysdep.h: Include <tls.h> + * sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c + (__lll_lock_wait_private, __lll_lock_wait): New. + (__lll_timedlock_wait): Don't include in libc.so; Take private + argument. Use atomic_compare_and_exchange_bool_acq. + * sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h: Renamed all + lll_mutex_* resp. lll_robust_mutex_* macros to lll_* + resp. lll_robust_*. Renamed all LLL_MUTEX_LOCK_* macros to + LLL_LOCK_*. Include <kernel-features.h>. + (LLL_LOCK_INITIALIZER): Remove duplicate definition. + (__lll_private_flag): Define. + (lll_futex_timed_wait): Pass private flag to syscall. + (lll_futex_wake): Likewise. + (lll_private_futex_wait, lll_private_futex_timed_wait, + lll_private_futex_wake): Remove. + (lll_robust_dead, lll_futex_requeue): Take private arguments. + (lll_futex_wake_unlock): Pass private flag to syscall. + (__lll_robust_trylock): Convert to macro. + (__lll_robust_lock_wait): Add private argument. + (__lll_lock_wait_private, __lll_lock_wait): Declare. + (__lll_lock): Convert to macro. Take private argument. + (__lll_cond_lock): Likewise. + (lll_lock, lll_cond_lock): Take private arguments. + (__lll_robust_lock): Take private argument. + (__lll_timedlock_wait, __lll_robust_timedlock_wait): Take private + arguments. + (__lll_timedlock, __lll_robust_timedlock): Convert to macros. + Take private arguments. + (lll_timedlock, lll_robust_timedlock): Take private arguments. + (__lll_unlock, __lll_robust_unlock): Convert to macros. Take + private arguments. + (lll_unlock, lll_robust_unlock): Take private arguments. + (__lll_mutex_unlock_force, lll_mutex_unlock_force, lll_lock_t, + lll_trylock, lll_lock, lll_unlock, lll_islocked): Remove. + (lll_wait_tid): Pass LLL_SHARED to lll_futex_wait. + (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, + __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, + lll_cond_wake, lll_cond_broadcast): Remove. + * sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c + (clear_once_control, __pthread_once): Use lll_futex_wake not + lll_private_futex_wake. + +2007-07-10 Daniel Jacobowitz <dan@codesourcery.com> + + * sysdeps/arm/nptl/tls.h (THREAD_GSCOPE_RESET_FLAG): Use + lll_private_futex_wake. + * sysdeps/unix/sysv/linux/arm/check_pf.c: Update from generic version. + * sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c + (pthread_cancel_init): Add noinline and barriers. + * sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c + (__lll_timedlock_wait): Update call to lll_futex_timed_wait. + (__lll_timedwait_tid): Likewise. + * sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h (LLL_PRIVATE, + LLL_SHARED): Define. + (lll_futex_wait): Use lll_futex_timed_wait. + (lll_futex_timed_wait, lll_futex_wake, lll_futex_wake_unlock): Take a + PRIVATE argument. + (lll_private_futex_wait, lll_private_futex_timed_wait, + lll_private_futex_wake): New. + (lll_robust_mutex_dead, __lll_mutex_lock, __lll_mutex_cond_lock, + __lll_mutex_unlock, __lll_robust_mutex_unlock, + __lll_mutex_unlock_force, lll_wait_tid): Update calls. + * sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c (clear_once_control, + __pthread_once): Use private futexes. + * sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c + (pthread_cancel_init): Add noinline and barriers. + + * sysdeps/unix/sysv/linux/arm/bits/fcntl.h: Comment fix. + + * sysdeps/unix/sysv/linux/arm/nptl/bits/semaphore.h (SEM_VALUE_MAX): + Delete. + 2007-06-06 Daniel Jacobowitz <dan@codesourcery.com> * sysdeps/arm/nptl/tls.h (THREAD_GSCOPE_FLAG_UNUSED, diff --git a/ports/ChangeLog.cris b/ports/ChangeLog.cris index af91a1d42..746c89cbf 100644 --- a/ports/ChangeLog.cris +++ b/ports/ChangeLog.cris @@ -1,3 +1,7 @@ +2007-07-10 Daniel Jacobowitz <dan@codesourcery.com> + + * sysdeps/unix/sysv/linux/cris/bits/fcntl.h: Comment fix. + 2005-12-27 Roland McGrath <roland@redhat.com> * sysdeps/cris/bits/setjmp.h (_JMPBUF_UNWINDS): Take third argument diff --git a/ports/ChangeLog.hppa b/ports/ChangeLog.hppa index 3ee76d9de..7bb338751 100644 --- a/ports/ChangeLog.hppa +++ b/ports/ChangeLog.hppa @@ -1,3 +1,50 @@ +2007-08-03 Aurelien Jarno <aurelien@aurel32.net> + + * sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h: + (__local_multiple_threads): Declare as hidden only in libc and + in libpthread. + +2007-07-28 Carlos O'Donell <carlos@systemhalted.org> + + * sysdeps/unix/sysv/linux/hppa/nptl/internaltypes.h: Remove. + * sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h + (pthread_rwlock_t): Split __flags into __pad2, __pad1, __shared, + and __flags. Update comments. Update copyright. + * sysdeps/hppa/nptl/tls.h: Define THREAD_GSCOPE_FLAG_UNUSED, + THREAD_GSCOPE_FLAG_USED, THREAD_GSOPE_FLAG_WAIT, + THREAD_GSCOPE_RSEET_FLAG, THREAD_GSCOPE_SET_FLAG, THREAD_GSCOPE_WAIT. + Update copyright. + * sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c: Update copyright. + (__lll_lock_wait): Call lll_futex_wait with LLL_SHARED. + (__lll_timedlock_wait): Call lll_futex_timed_wait with LLL_SHARED. + (lll_unlock_Wake_cb): Use lll_private_futex_wake. + (___lll_timedwait_tid): Call lll_futex_timed_wait with LLL_SAHRED. + * sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h: Define + FUTEX_PRIVATE_FLAG, LLL_PRIVATE, LLL_SHARED, lll_private_futex_wait, + lll_private_futex_timed_wait, lll_private_Futex_wake. Add private + argument to lll_futex_wait, lll_futex_timed_wait, lll_futex_wake, + lll_futex_wake_unlock. + * sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c: Update copyright. + (clear_once_control): Use lll_private_futex_wake. + (__pthread_once): Use lll_private_futex_wait, and + lll_private_futex_wake. + +2007-07-28 Randolph Chung <tausq@debian.org> + + * sysdeps/hppa/nptl/tls.h (DB_THREAD_SELF): Fix definition. + +2007-06-16 Jeff Bailey <jbailey@raspberryginger.com> + + * sysdeps/unix/sysv/linux/hppa/sys/procfs.h: Don't + include asm/elf.h. Declare elf_greg_t, elf_gregset_t, + elf_fpreg_t, and elf_fpregset_t. + +2007-06-16 Jeff Bailey <jbailey@raspberryginger.com> + + * sysdeps/unix/sysv/linux/hppa/nptl/configure.in: Require + at least kernel 2.6.9. + * sysdeps/unix/sysv/linux/hppa/nptl/configure: Rebuilt. + 2007-05-17 Carlos O'Donell <carlos@systemhalted.org> * sysdeps/unix/sysv/linux/hppa/nptl/bits/semaphore.h diff --git a/ports/ChangeLog.m68k b/ports/ChangeLog.m68k index 51f6dfa02..fb591ad11 100644 --- a/ports/ChangeLog.m68k +++ b/ports/ChangeLog.m68k @@ -1,3 +1,7 @@ +2007-07-10 Daniel Jacobowitz <dan@codesourcery.com> + + * sysdeps/unix/sysv/linux/m68k/bits/fcntl.h: Comment fix. + 2006-11-28 Andreas Schwab <schwab@suse.de> * sysdeps/unix/sysv/linux/m68k/sysdep.h (DOARGS_6, _DOARGS_6) diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips index a99e16537..0e8fda42d 100644 --- a/ports/ChangeLog.mips +++ b/ports/ChangeLog.mips @@ -1,3 +1,87 @@ +2007-09-12 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/mips/nptl/tls.h (THREAD_GSCOPE_RESET_FLAG): Pass + LLL_PRIVATE argument to lll_futex_wake. + * sysdeps/unix/sysv/linux/mips/bits/fcntl.h (O_CLOEXEC): Define. + * sysdeps/unix/sysv/linux/mips/bits/socket.h (PF_UNIX): Update + comment. + (PF_IUCV, PF_RXRPC): Define. + (PF_MAX): Update. + (AF_IUCV, AF_RXRPC): Define. + (MSG_CMSG_CLOEXEC): Define. + (_EXTERN_INLINE): Define to __extern_inline. + * sysdeps/unix/sysv/linux/mips/bits/stat.h (UTIME_NOW, + UTIME_OMIT): Define. + * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h: Include <tls.h>. + * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h: Likewise. + * sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h: Renamed all + lll_mutex_* resp. lll_robust_mutex_* macros to lll_* + resp. lll_robust_*. Renamed all LLL_MUTEX_LOCK_* macros to + LLL_LOCK_*. Include <kernel-features.h>. + (LLL_LOCK_INITIALIZER): Remove duplicate definition. + (LLL_PRIVATE, LLL_SHARED, __lll_private_flag): Define. + * sysdeps/unix/sysv/linux/mips/nptl/pthread_once.c + (clear_once_control, __pthread_once): Pass LLL_PRIVATE argument to + lll_futex_wait. + (lll_futex_wait, lll_futex_timed_wait, lll_futex_wake, + lll_robust_dead, lll_futex_requeue, lll_futex_wake_unlock): Take + private arguments. + (__lll_robust_trylock): Convert to macro. + (__lll_robust_lock_wait): Add private argument. + (__lll_lock_wait_private, __lll_lock_wait): Declare. + (__lll_lock): Convert to macro. Take private argument. + (__lll_cond_lock): Likewise. + (lll_lock, lll_cond_lock): Take private arguments. + (__lll_robust_lock): Take private argument. Convert to macro. + (lll_robust_lock, __lll_cond_lock, lll_cond_lock, + lll_robust_cond_lock): Take private arguments. + (__lll_timedlock_wait, __lll_robust_timedlock_wait): Take private + arguments. + (__lll_timedlock, __lll_robust_timedlock): Take private arguments. + (lll_timedlock, lll_robust_timedlock): Take private arguments. + (__lll_unlock, __lll_robust_unlock): Convert to macros. Take + private arguments. + (lll_unlock, lll_robust_unlock): Take private arguments. + (__lll_mutex_unlock_force, lll_mutex_unlock_force, lll_lock_t, + lll_trylock, lll_lock, lll_unlock, lll_islocked): Remove. + (lll_wait_tid): Pass LLL_SHARED to lll_futex_wait. + (__lll_cond_wait, __lll_cond_timedwait, __lll_cond_wake, + __lll_cond_broadcast, lll_cond_wait, lll_cond_timedwait, + lll_cond_wake, lll_cond_broadcast): Remove. + * sysdeps/unix/sysv/linux/mips/sys/tas.h (_EXTERN_INLINE): Define + to __extern_inline. + +2007-08-06 Maciej W. Rozycki <macro@linux-mips.org> + + * sysdeps/unix/sysv/linux/mips/dl-cache.h (_DL_CACHE_DEFAULT_ID): + New macros for the (n)64 and n32 ABIs. + (_dl_cache_check_flags): Define if _DL_CACHE_DEFAULT_ID has been. + +2007-07-13 Carlos O'Donell <carlos@codesourcery.com> + + * sysdeps/mips/bits/wordsize.h [_MIPS_SIM == _ABI64]: + Define __WORDSIZE_COMPAT32 as 1. + +2007-07-13 Joseph Myers <joseph@codesourcery.com> + + * sysdeps/unix/sysv/linux/mips/nptl/bits/local_lim.h: Copy from + libc/nptl/sysdeps/unix/sysv/linux/bits/local_lim.h. Increase + PTHREAD_STACK_MIN. + +2007-07-10 Daniel Jacobowitz <dan@codesourcery.com> + + * sysdeps/unix/sysv/linux/mips/bits/fcntl.h: Comment fix. + + * sysdeps/unix/sysv/linux/mips/nptl/bits/semaphore.h (SEM_VALUE_MAX): + Delete. + +2007-06-07 Daniel Jacobowitz <dan@codesourcery.com> + + * sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h (ARGIFY): New. + (internal_syscall1, internal_syscall2, internal_syscall3, + internal_syscall4, internal_syscall5, internal_syscall6): Use it. + 2007-06-06 Daniel Jacobowitz <dan@codesourcery.com> * sysdeps/mips/nptl/tls.h (THREAD_GSCOPE_FLAG_UNUSED, diff --git a/ports/ChangeLog.powerpc b/ports/ChangeLog.powerpc index 1ea6746b3..463dd291a 100644 --- a/ports/ChangeLog.powerpc +++ b/ports/ChangeLog.powerpc @@ -1,3 +1,17 @@ +2007-08-29 Daniel Jacobowitz <dan@codesourcery.com> + + * sysdeps/powerpc/nofpu/fsetexcptflg.c (__fesetexceptflag): Do not + clobber other exceptions. + * sysdeps/powerpc/nofpu/feupdateenv.c (__feupdateenv): Raise new + exceptions. + * sysdeps/powerpc/nofpu/fraiseexcpt.c (__feraiseexcept): Handle + multiple new exceptions if some are disabled. + * sysdeps/powerpc/nofpu/sim-full.c (__simulate_exceptions): Likewise. + +2007-07-13 Steven Munroe <sjmunroe@us.ibm.com> + + * sysdeps/powerpc/nofpu/Makefile: Remove fe_nomask from libm-support. + 2007-05-23 Steven Munroe <sjmunroe@us.ibm.com> * sysdeps/powerpc/nofpu/feholdexcpt.c (feholdexcept): Disable diff --git a/ports/sysdeps/arm/nptl/tls.h b/ports/sysdeps/arm/nptl/tls.h index ae2aecc42..f257b93fe 100644 --- a/ports/sysdeps/arm/nptl/tls.h +++ b/ports/sysdeps/arm/nptl/tls.h @@ -142,7 +142,7 @@ typedef struct = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ THREAD_GSCOPE_FLAG_UNUSED); \ if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ } \ while (0) #define THREAD_GSCOPE_SET_FLAG() \ diff --git a/ports/sysdeps/hppa/nptl/tls.h b/ports/sysdeps/hppa/nptl/tls.h index 0759aec8f..d2d725e3b 100644 --- a/ports/sysdeps/hppa/nptl/tls.h +++ b/ports/sysdeps/hppa/nptl/tls.h @@ -1,5 +1,5 @@ /* Definition for thread-local data handling. NPTL/hppa version. - Copyright (C) 2005 Free Software Foundation, Inc. + Copyright (C) 2005, 2007 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 @@ -117,11 +117,12 @@ typedef struct __self - 1; \ }) -/* FIXME */ -/* Magic for libthread_db to know how to do THREAD_SELF. */ +/* Magic for libthread_db to know how to do THREAD_SELF. + Our thread pointer is stored in cr27. See asm/elf.h for the offset into + elf_gregset_t. The thread descriptor is sizeof (struct pthread) away. */ # define DB_THREAD_SELF \ - REGISTER (32, 32, 32 * 4, -sizeof (struct pthread)) - + REGISTER (32, 32, 53 * 4, -sizeof (struct pthread)) + /* Access to data in the thread descriptor is easy. */ # define THREAD_GETMEM(descr, member) \ descr->member @@ -146,6 +147,29 @@ static inline void __set_cr27(struct pthread *cr27) : : "r" (cr27) : "r26" ); } +/* Get and set the global scope generation counter in struct pthread. */ +#define THREAD_GSCOPE_FLAG_UNUSED 0 +#define THREAD_GSCOPE_FLAG_USED 1 +#define THREAD_GSCOPE_FLAG_WAIT 2 +#define THREAD_GSCOPE_RESET_FLAG() \ + do \ + { int __res \ + = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ + THREAD_GSCOPE_FLAG_UNUSED); \ + if (__res == THREAD_GSCOPE_FLAG_WAIT) \ + lll_private_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + } \ + while (0) +#define THREAD_GSCOPE_SET_FLAG() \ + do \ + { \ + THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ + atomic_write_barrier (); \ + } \ + while (0) +#define THREAD_GSCOPE_WAIT() \ + GL(dl_wait_lookup_done) () + #endif /* __ASSEMBLER__ */ #endif /* tls.h */ diff --git a/ports/sysdeps/mips/nptl/tls.h b/ports/sysdeps/mips/nptl/tls.h index dbe806a5f..20f9f9683 100644 --- a/ports/sysdeps/mips/nptl/tls.h +++ b/ports/sysdeps/mips/nptl/tls.h @@ -166,7 +166,7 @@ typedef struct = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ THREAD_GSCOPE_FLAG_UNUSED); \ if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1); \ + lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ } \ while (0) #define THREAD_GSCOPE_SET_FLAG() \ diff --git a/ports/sysdeps/unix/sysv/aix/bits/fcntl.h b/ports/sysdeps/unix/sysv/aix/bits/fcntl.h index c65b8beeb..d53c0f7d9 100644 --- a/ports/sysdeps/unix/sysv/aix/bits/fcntl.h +++ b/ports/sysdeps/unix/sysv/aix/bits/fcntl.h @@ -79,7 +79,7 @@ # define F_GETOWN 9 /* Set owner of socket (receiver of SIGIO). */ #endif -/* For F_[GET|SET]FL. */ +/* For F_[GET|SET]FD. */ #define FD_CLOEXEC 1 /* actually anything with low bit set goes */ /* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ diff --git a/ports/sysdeps/unix/sysv/linux/am33/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/am33/bits/fcntl.h index 4c276c548..f2c88fad1 100644 --- a/ports/sysdeps/unix/sysv/linux/am33/bits/fcntl.h +++ b/ports/sysdeps/unix/sysv/linux/am33/bits/fcntl.h @@ -94,7 +94,7 @@ # define F_NOTIFY 1026 /* Request notfications on a directory. */ #endif -/* For F_[GET|SET]FL. */ +/* For F_[GET|SET]FD. */ #define FD_CLOEXEC 1 /* actually anything with low bit set goes */ /* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h index 7c7b7c202..6fcc5c0c0 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h +++ b/ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h @@ -1,5 +1,6 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-1998, 2000, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-1998, 2000, 2004, 2006, 2007 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -49,6 +50,7 @@ # define O_NOFOLLOW 0100000 /* Do not follow links. */ # define O_DIRECT 0200000 /* Direct disk access. */ # define O_NOATIME 01000000 /* Do not set atime. */ +# define O_CLOEXEC 02000000 /* Set close_on_exec. */ #endif /* For now Linux has synchronisity options for data and read operations. @@ -98,7 +100,7 @@ # define F_NOTIFY 1026 /* Request notfications on a directory. */ #endif -/* For F_[GET|SET]FL. */ +/* For F_[GET|SET]FD. */ #define FD_CLOEXEC 1 /* actually anything with low bit set goes */ /* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/check_pf.c b/ports/sysdeps/unix/sysv/linux/arm/check_pf.c index ee13d8019..dfca75d37 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/check_pf.c +++ b/ports/sysdeps/unix/sysv/linux/arm/check_pf.c @@ -1,5 +1,5 @@ -/* Determine protocol families for which interfaces exist. ARM Linux version. - Copyright (C) 2003, 2006 Free Software Foundation, Inc. +/* Determine protocol families for which interfaces exist. Linux version. + Copyright (C) 2003, 2006, 2007 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 @@ -69,17 +69,38 @@ make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6, memset (&nladdr, '\0', sizeof (nladdr)); nladdr.nl_family = AF_NETLINK; +#ifdef PAGE_SIZE + /* Help the compiler optimize out the malloc call if PAGE_SIZE + is constant and smaller or equal to PTHREAD_STACK_MIN/4. */ + const size_t buf_size = PAGE_SIZE; +#else + const size_t buf_size = __getpagesize (); +#endif + bool use_malloc = false; + char *buf; + + if (__libc_use_alloca (buf_size)) + buf = alloca (buf_size); + else + { + buf = malloc (buf_size); + if (buf != NULL) + use_malloc = true; + else + goto out_fail; + } + + struct iovec iov = { buf, buf_size }; + if (TEMP_FAILURE_RETRY (__sendto (fd, (void *) &req, sizeof (req), 0, (struct sockaddr *) &nladdr, sizeof (nladdr))) < 0) - return -1; + goto out_fail; *seen_ipv4 = false; *seen_ipv6 = false; bool done = false; - char buf[4096]; - struct iovec iov = { buf, sizeof (buf) }; struct in6ailist { struct in6addrinfo info; @@ -99,10 +120,10 @@ make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6, ssize_t read_len = TEMP_FAILURE_RETRY (__recvmsg (fd, &msg, 0)); if (read_len < 0) - return -1; + goto out_fail; if (msg.msg_flags & MSG_TRUNC) - return -1; + goto out_fail; struct nlmsghdr *nlmh; for (nlmh = (struct nlmsghdr *) buf; @@ -116,40 +137,72 @@ make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6, if (nlmh->nlmsg_type == RTM_NEWADDR) { struct ifaddrmsg *ifam = (struct ifaddrmsg *) NLMSG_DATA (nlmh); + struct rtattr *rta = IFA_RTA (ifam); + size_t len = nlmh->nlmsg_len - NLMSG_LENGTH (sizeof (*ifam)); switch (ifam->ifa_family) { + const void *local; + const void *address; + case AF_INET: - *seen_ipv4 = true; + local = NULL; + address = NULL; + while (RTA_OK (rta, len)) + { + switch (rta->rta_type) + { + case IFA_LOCAL: + local = RTA_DATA (rta); + break; + + case IFA_ADDRESS: + address = RTA_DATA (rta); + goto out_v4; + } + + rta = RTA_NEXT (rta, len); + } + + if (local != NULL) + { + out_v4: + if (*(const in_addr_t *) (address ?: local) + != htonl (INADDR_LOOPBACK)) + *seen_ipv4 = true; + } break; + case AF_INET6: - *seen_ipv6 = true; + local = NULL; + address = NULL; + while (RTA_OK (rta, len)) + { + switch (rta->rta_type) + { + case IFA_LOCAL: + local = RTA_DATA (rta); + break; + + case IFA_ADDRESS: + address = RTA_DATA (rta); + goto out_v6; + } + + rta = RTA_NEXT (rta, len); + } + + if (local != NULL) + { + out_v6: + if (!IN6_IS_ADDR_LOOPBACK (address ?: local)) + *seen_ipv6 = true; + } if (ifam->ifa_flags & (IFA_F_DEPRECATED | IFA_F_TEMPORARY | IFA_F_HOMEADDRESS)) { - struct rtattr *rta = IFA_RTA (ifam); - size_t len = (nlmh->nlmsg_len - - NLMSG_LENGTH (sizeof (*ifam))); - void *local = NULL; - void *address = NULL; - while (RTA_OK (rta, len)) - { - switch (rta->rta_type) - { - case IFA_LOCAL: - local = RTA_DATA (rta); - break; - - case IFA_ADDRESS: - address = RTA_DATA (rta); - break; - } - - rta = RTA_NEXT (rta, len); - } - struct in6ailist *newp = alloca (sizeof (*newp)); newp->info.flags = (((ifam->ifa_flags & IFA_F_DEPRECATED) ? in6ai_deprecated : 0) @@ -180,11 +233,11 @@ make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6, close_not_cancel_no_status (fd); - if (in6ailist != NULL) + if (*seen_ipv6 && in6ailist != NULL) { *in6ai = malloc (in6ailistlen * sizeof (**in6ai)); if (*in6ai == NULL) - return -1; + goto out_fail; *in6ailen = in6ailistlen; @@ -196,7 +249,14 @@ make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6, while (in6ailist != NULL); } + if (use_malloc) + free (buf); return 0; + +out_fail: + if (use_malloc) + free (buf); + return -1; } diff --git a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c index f8d298f99..4db93acb9 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c +++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>. @@ -30,13 +30,18 @@ static _Unwind_Reason_Code (*libgcc_s_forcedunwind) static _Unwind_Word (*libgcc_s_getcfa) (struct _Unwind_Context *); void +__attribute_noinline__ pthread_cancel_init (void) { void *resume, *personality, *forcedunwind, *getcfa; void *handle; if (__builtin_expect (libgcc_s_getcfa != NULL, 1)) - return; + { + /* Force gcc to reload all values. */ + asm volatile ("" ::: "memory"); + return; + } handle = __libc_dlopen ("libgcc_s.so.1"); @@ -55,6 +60,10 @@ pthread_cancel_init (void) libgcc_s_resume = resume; libgcc_s_personality = personality; libgcc_s_forcedunwind = forcedunwind; + /* Make sure libgcc_s_getcfa is written last. Otherwise, + pthread_cancel_init might return early even when the pointer the + caller is interested in is not initialized yet. */ + atomic_write_barrier (); libgcc_s_getcfa = getcfa; } @@ -93,6 +102,7 @@ __gcc_personality_v0 (_Unwind_State state, { if (__builtin_expect (libgcc_s_personality == NULL, 0)) pthread_cancel_init (); + return libgcc_s_personality (state, ue_header, context); } @@ -102,6 +112,7 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop, { if (__builtin_expect (libgcc_s_forcedunwind == NULL, 0)) pthread_cancel_init (); + return libgcc_s_forcedunwind (exc, stop, stop_argument); } @@ -110,5 +121,6 @@ _Unwind_GetCFA (struct _Unwind_Context *context) { if (__builtin_expect (libgcc_s_getcfa == NULL, 0)) pthread_cancel_init (); + return libgcc_s_getcfa (context); } diff --git a/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h b/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h index 0382dc881..a7dd40d74 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h +++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2005, 2006 +/* Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -25,6 +25,8 @@ #include <arm/sysdep.h> +#include <tls.h> + #if __NR_SYSCALL_BASE != 0 # error Kernel headers are too old #endif diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/semaphore.h b/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/semaphore.h index 3fc647d31..dadfac2af 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/semaphore.h +++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/bits/semaphore.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2005, 2007 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,9 +27,6 @@ /* Value returned if `sem_open' failed. */ #define SEM_FAILED ((sem_t *) 0) -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX ((int) ((~0u) >> 1)) - typedef union { diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c index 66a4d7b36..8ba606550 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c +++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c @@ -22,8 +22,36 @@ #include <lowlevellock.h> #include <sys/time.h> +void +__lll_lock_wait_private (int *futex) +{ + do + { + int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); + if (oldval != 0) + lll_futex_wait (futex, 2, LLL_PRIVATE); + } + while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); +} + + +/* These functions don't get included in libc.so */ +#ifdef IS_IN_libpthread +void +__lll_lock_wait (int *futex, int private) +{ + do + { + int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); + if (oldval != 0) + lll_futex_wait (futex, 2, private); + } + while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); +} + + int -__lll_timedlock_wait (int *futex, const struct timespec *abstime) +__lll_timedlock_wait (int *futex, const struct timespec *abstime, int private) { struct timespec rt; @@ -55,16 +83,15 @@ __lll_timedlock_wait (int *futex, const struct timespec *abstime) if (rt.tv_sec < 0) return ETIMEDOUT; - lll_futex_timed_wait (futex, 2, &rt); + // XYZ: Lost the lock to check whether it was private. + lll_futex_timed_wait (futex, 2, &rt, private); } - while (atomic_exchange_acq (futex, 2) != 0); + while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); return 0; } -/* This function doesn't get included in libc.so */ -#ifdef IS_IN_libpthread int __lll_timedwait_tid (int *tidp, const struct timespec *abstime) { @@ -96,7 +123,8 @@ __lll_timedwait_tid (int *tidp, const struct timespec *abstime) return ETIMEDOUT; /* Wait until thread terminates. */ - if (lll_futex_timed_wait (tidp, tid, &rt) == -ETIMEDOUT) + // XYZ: Lost the lock to check whether it was private. + if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT) return ETIMEDOUT; } diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h b/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h index 6bad091cd..889f97c0f 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h +++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h @@ -12,7 +12,7 @@ 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 Libr \ary; if not, write to the Free + 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. */ @@ -24,6 +24,7 @@ #include <bits/pthreadtypes.h> #include <atomic.h> #include <sysdep.h> +#include <kernel-features.h> #define FUTEX_WAIT 0 #define FUTEX_WAKE 1 @@ -36,202 +37,212 @@ #define FUTEX_TRYLOCK_PI 8 #define FUTEX_PRIVATE_FLAG 128 -/* Initializer for compatibility lock. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) - -#define lll_futex_wait(futexp, val) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT, (val), 0); \ - __ret; \ - }) - -#define lll_futex_timed_wait(futexp, val, timespec) \ +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ + & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) +# endif +#endif + + +#define lll_futex_wait(futexp, val, private) \ + lll_futex_timed_wait(futexp, val, NULL, private) + +#define lll_futex_timed_wait(futexp, val, timespec, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT, (val), (timespec)); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAIT, private), \ + (val), (timespec)); \ __ret; \ }) -#define lll_futex_wake(futexp, nr) \ +#define lll_futex_wake(futexp, nr, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAKE, (nr), 0); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ + __lll_private_flag (FUTEX_WAKE, private), \ + (nr), 0); \ __ret; \ }) -#define lll_robust_mutex_dead(futexv) \ +#define lll_robust_dead(futexv, private) \ do \ { \ int *__futexp = &(futexv); \ atomic_or (__futexp, FUTEX_OWNER_DIED); \ - lll_futex_wake (__futexp, 1); \ + lll_futex_wake (__futexp, 1, private); \ } \ while (0) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val) \ +#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, \ - (futexp), FUTEX_CMP_REQUEUE, (nr_wake), \ - (nr_move), (mutex), (val)); \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ + (nr_wake), (nr_move), (mutex), (val)); \ __ret; \ }) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2) \ +#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, \ - (futexp), FUTEX_WAKE_OP, (nr_wake), \ - (nr_wake2), (futexp2), \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_WAKE_OP, private), \ + (nr_wake), (nr_wake2), (futexp2), \ FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ __ret; \ }) -#define lll_mutex_trylock(lock) \ +#define lll_trylock(lock) \ atomic_compare_and_exchange_val_acq(&(lock), 1, 0) -#define lll_mutex_cond_trylock(lock) \ +#define lll_cond_trylock(lock) \ atomic_compare_and_exchange_val_acq(&(lock), 2, 0) -static inline int __attribute__((always_inline)) -__lll_robust_mutex_trylock(int *futex, int id) -{ - return atomic_compare_and_exchange_val_acq (futex, id, 0) != 0; -} -#define lll_robust_mutex_trylock(lock, id) \ - __lll_robust_mutex_trylock (&(lock), id) - -extern int __lll_robust_lock_wait (int *futex) attribute_hidden; - -static inline void __attribute__((always_inline)) -__lll_mutex_lock (int *futex) -{ - int val = atomic_exchange_acq (futex, 1); - - if (__builtin_expect (val != 0, 0)) - { - while (atomic_exchange_acq (futex, 2) != 0) - lll_futex_wait (futex, 2); - } -} -#define lll_mutex_lock(futex) __lll_mutex_lock (&(futex)) - - -static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_lock (int *futex, int id) -{ - int result = 0; - if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_lock_wait (futex); - return result; -} -#define lll_robust_mutex_lock(futex, id) \ - __lll_robust_mutex_lock (&(futex), id) - - -static inline void __attribute__ ((always_inline)) -__lll_mutex_cond_lock (int *futex) -{ - int val = atomic_exchange_acq (futex, 2); - - if (__builtin_expect (val != 0, 0)) - { - while (atomic_exchange_acq (futex, 2) != 0) - lll_futex_wait (futex, 2); - } -} -#define lll_mutex_cond_lock(futex) __lll_mutex_cond_lock (&(futex)) - - -#define lll_robust_mutex_cond_lock(futex, id) \ - __lll_robust_mutex_lock (&(futex), (id) | FUTEX_WAITERS) - - -extern int __lll_timedlock_wait (int *futex, const struct timespec *) - attribute_hidden; -extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *) - attribute_hidden; - -static inline int __attribute__ ((always_inline)) -__lll_mutex_timedlock (int *futex, const struct timespec *abstime) -{ - int result = 0; - int val = atomic_exchange_acq (futex, 1); - - if (__builtin_expect (val != 0, 0)) - result = __lll_timedlock_wait (futex, abstime); - return result; -} -#define lll_mutex_timedlock(futex, abstime) \ - __lll_mutex_timedlock (&(futex), abstime) - - -static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime, - int id) -{ - int result = 0; - if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_timedlock_wait (futex, abstime); - return result; -} -#define lll_robust_mutex_timedlock(futex, abstime, id) \ - __lll_robust_mutex_timedlock (&(futex), abstime, id) - - -static inline void __attribute__ ((always_inline)) -__lll_mutex_unlock (int *futex) -{ - int val = atomic_exchange_rel (futex, 0); - if (__builtin_expect (val > 1, 0)) - lll_futex_wake (futex, 1); -} -#define lll_mutex_unlock(futex) __lll_mutex_unlock(&(futex)) - - -static inline void __attribute__ ((always_inline)) -__lll_robust_mutex_unlock (int *futex, int mask) -{ - int val = atomic_exchange_rel (futex, 0); - if (__builtin_expect (val & mask, 0)) - lll_futex_wake (futex, 1); -} -#define lll_robust_mutex_unlock(futex) \ - __lll_robust_mutex_unlock(&(futex), FUTEX_WAITERS) - - -static inline void __attribute__ ((always_inline)) -__lll_mutex_unlock_force (int *futex) -{ - (void) atomic_exchange_rel (futex, 0); - lll_futex_wake (futex, 1); -} -#define lll_mutex_unlock_force(futex) __lll_mutex_unlock_force(&(futex)) - - -#define lll_mutex_islocked(futex) \ +#define __lll_robust_trylock(futex, id) \ + (atomic_compare_and_exchange_val_acq (futex, id, 0) != 0) +#define lll_robust_trylock(lock, id) \ + __lll_robust_trylock (&(lock), id) + +extern void __lll_lock_wait_private (int *futex) attribute_hidden; +extern void __lll_lock_wait (int *futex, int private) attribute_hidden; +extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; + +#define __lll_lock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + if (__builtin_expect (atomic_compare_and_exchange_val_acq (__futex, \ + 1, 0), 0)) \ + { \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __lll_lock_wait_private (__futex); \ + else \ + __lll_lock_wait (__futex, private); \ + } \ + })) +#define lll_lock(futex, private) __lll_lock (&(futex), private) + + +#define __lll_robust_lock(futex, id, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ + 0), 0)) \ + __val = __lll_robust_lock_wait (__futex, private); \ + __val; \ + }) +#define lll_robust_lock(futex, id, private) \ + __lll_robust_lock (&(futex), id, private) + + +#define __lll_cond_lock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + if (__builtin_expect (atomic_exchange_acq (__futex, 2), 0)) \ + __lll_lock_wait (__futex, private); \ + })) +#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) + + +#define lll_robust_cond_lock(futex, id, private) \ + __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private) + + +extern int __lll_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; +extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; + +#define __lll_timedlock(futex, abstime, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + \ + if (__builtin_expect (atomic_exchange_acq (__futex, 1), 0)) \ + __val = __lll_timedlock_wait (__futex, abstime, private); \ + __val; \ + }) +#define lll_timedlock(futex, abstime, private) \ + __lll_timedlock (&(futex), abstime, private) + + +#define __lll_robust_timedlock(futex, abstime, id, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ + 0), 0)) \ + __val = __lll_robust_timedlock_wait (__futex, abstime, private); \ + __val; \ + }) +#define lll_robust_timedlock(futex, abstime, id, private) \ + __lll_robust_timedlock (&(futex), abstime, id, private) + + +#define __lll_unlock(futex, private) \ + (void) \ + ({ int *__futex = (futex); \ + int __oldval = atomic_exchange_rel (__futex, 0); \ + if (__builtin_expect (__oldval > 1, 0)) \ + lll_futex_wake (__futex, 1, private); \ + }) +#define lll_unlock(futex, private) __lll_unlock(&(futex), private) + + +#define __lll_robust_unlock(futex, private) \ + (void) \ + ({ int *__futex = (futex); \ + int __oldval = atomic_exchange_rel (__futex, 0); \ + if (__builtin_expect (__oldval & FUTEX_WAITERS, 0)) \ + lll_futex_wake (__futex, 1, private); \ + }) +#define lll_robust_unlock(futex, private) \ + __lll_robust_unlock(&(futex), private) + + +#define lll_islocked(futex) \ (futex != 0) /* Our internal lock implementation is identical to the binary-compatible mutex implementation. */ -/* Type for lock object. */ -typedef int lll_lock_t; - /* Initializers for lock. */ #define LLL_LOCK_INITIALIZER (0) #define LLL_LOCK_INITIALIZER_LOCKED (1) @@ -241,11 +252,6 @@ typedef int lll_lock_t; 1 - taken by one user >1 - taken by more users */ -#define lll_trylock(lock) lll_mutex_trylock (lock) -#define lll_lock(lock) lll_mutex_lock (lock) -#define lll_unlock(lock) lll_mutex_unlock (lock) -#define lll_islocked(lock) lll_mutex_islocked (lock) - /* The kernel notifies a process which uses CLONE_CLEARTID via futex wakeup when the clone terminates. The memory location contains the thread ID while the clone is running and is reset to zero @@ -254,7 +260,7 @@ typedef int lll_lock_t; do { \ __typeof (tid) __tid; \ while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid); \ + lll_futex_wait (&(tid), __tid, LLL_SHARED);\ } while (0) extern int __lll_timedwait_tid (int *, const struct timespec *) @@ -268,26 +274,4 @@ extern int __lll_timedwait_tid (int *, const struct timespec *) __res; \ }) - -/* Conditional variable handling. */ - -extern void __lll_cond_wait (pthread_cond_t *cond) - attribute_hidden; -extern int __lll_cond_timedwait (pthread_cond_t *cond, - const struct timespec *abstime) - attribute_hidden; -extern void __lll_cond_wake (pthread_cond_t *cond) - attribute_hidden; -extern void __lll_cond_broadcast (pthread_cond_t *cond) - attribute_hidden; - -#define lll_cond_wait(cond) \ - __lll_cond_wait (cond) -#define lll_cond_timedwait(cond, abstime) \ - __lll_cond_timedwait (cond, abstime) -#define lll_cond_wake(cond) \ - __lll_cond_wake (cond) -#define lll_cond_broadcast(cond) \ - __lll_cond_broadcast (cond) - #endif /* lowlevellock.h */ diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c index c8925810c..d81ecd4e5 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c +++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c @@ -27,7 +27,7 @@ clear_once_control (void *arg) pthread_once_t *once_control = (pthread_once_t *) arg; *once_control = 0; - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); } int @@ -66,7 +66,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) break; /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, oldval); + lll_futex_wait (once_control, oldval, LLL_PRIVATE); } /* This thread is the first here. Do the initialization. @@ -82,7 +82,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void)) *once_control = __fork_generation | 2; /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); return 0; } diff --git a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c index ba5327a4d..b28196356 100644 --- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c +++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c @@ -33,6 +33,7 @@ static void (*libgcc_s_sjlj_register) (struct SjLj_Function_Context *); static void (*libgcc_s_sjlj_unregister) (struct SjLj_Function_Context *); void +__attribute_noinline__ pthread_cancel_init (void) { void *resume, *personality, *forcedunwind, *getcfa; @@ -40,7 +41,11 @@ pthread_cancel_init (void) void *sjlj_register, *sjlj_unregister; if (__builtin_expect (libgcc_s_getcfa != NULL, 1)) - return; + { + /* Force gcc to reload all values. */ + asm volatile ("" ::: "memory"); + return; + } handle = __libc_dlopen ("libgcc_s.so.1"); @@ -58,9 +63,13 @@ pthread_cancel_init (void) libgcc_s_resume = resume; libgcc_s_personality = personality; libgcc_s_forcedunwind = forcedunwind; - libgcc_s_getcfa = getcfa; libgcc_s_sjlj_register = sjlj_register; libgcc_s_sjlj_unregister = sjlj_unregister; + /* Make sure libgcc_s_getcfa is written last. Otherwise, + pthread_cancel_init might return early even when the pointer the + caller is interested in is not initialized yet. */ + atomic_write_barrier (); + libgcc_s_getcfa = getcfa; } void @@ -68,6 +77,7 @@ _Unwind_Resume (struct _Unwind_Exception *exc) { if (__builtin_expect (libgcc_s_resume == NULL, 0)) pthread_cancel_init (); + libgcc_s_resume (exc); } @@ -79,6 +89,7 @@ __gcc_personality_v0 (int version, _Unwind_Action actions, { if (__builtin_expect (libgcc_s_personality == NULL, 0)) pthread_cancel_init (); + return libgcc_s_personality (version, actions, exception_class, ue_header, context); } @@ -89,6 +100,7 @@ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop, { if (__builtin_expect (libgcc_s_forcedunwind == NULL, 0)) pthread_cancel_init (); + return libgcc_s_forcedunwind (exc, stop, stop_argument); } @@ -97,6 +109,7 @@ _Unwind_GetCFA (struct _Unwind_Context *context) { if (__builtin_expect (libgcc_s_getcfa == NULL, 0)) pthread_cancel_init (); + return libgcc_s_getcfa (context); } @@ -105,6 +118,7 @@ _Unwind_SjLj_Register (struct SjLj_Function_Context *fc) { if (__builtin_expect (libgcc_s_sjlj_register == NULL, 0)) pthread_cancel_init (); + libgcc_s_sjlj_register (fc); } @@ -113,5 +127,6 @@ _Unwind_SjLj_Unregister (struct SjLj_Function_Context *fc) { if (__builtin_expect (libgcc_s_sjlj_unregister == NULL, 0)) pthread_cancel_init (); + libgcc_s_sjlj_unregister (fc); } diff --git a/ports/sysdeps/unix/sysv/linux/cris/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/cris/bits/fcntl.h index 36799aa50..270a8de58 100644 --- a/ports/sysdeps/unix/sysv/linux/cris/bits/fcntl.h +++ b/ports/sysdeps/unix/sysv/linux/cris/bits/fcntl.h @@ -96,7 +96,7 @@ # define F_NOTIFY 1026 /* Request notfications on a directory. */ #endif -/* For F_[GET|SET]FL. */ +/* For F_[GET|SET]FD. */ #define FD_CLOEXEC 1 /* actually anything with low bit set goes */ /* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h b/ports/sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h index e01936a3d..51d6cf394 100644 --- a/ports/sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h +++ b/ports/sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h @@ -206,7 +206,11 @@ L(pre_end): ASM_LINE_SEP \ # endif # ifndef __ASSEMBLER__ - extern int __local_multiple_threads attribute_hidden; +# if !defined NOT_IN_libc || defined IS_IN_libpthread +extern int __local_multiple_threads attribute_hidden; +# else +extern int __local_multiple_threads; +# endif # define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1) # else /* This ALT version requires newer kernel support */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h index e1c5325c0..62fc80cc5 100644 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h +++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2005, 2006 Free Software Foundation, Inc. +/* Copyright (C) 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -19,13 +19,14 @@ #ifndef _BITS_PTHREADTYPES_H #define _BITS_PTHREADTYPES_H 1 -/* Linuxthread type sizes: +/* Linuxthread type sizes (bytes): sizeof(pthread_attr_t) = 0x24 (36) sizeof(pthread_mutex_t) = 0x30 (48) sizeof(pthread_mutexattr_t) = 0x4 (4) sizeof(pthread_cond_t) = 0x30 (48) - = Grew to 64 bytes in NPTL. - No pthread_cond_compat_t ... + = Expanded to 64 bytes in NPTL. + sizeof(pthread_cond_compat_t) = 0xc (12) + = Did not exist in Linuxthreads. sizeof(pthread_condattr_t) = 0x4 (4) sizeof(pthread_rwlock_t) = 0x40 (64) sizeof(pthread_rwlockattr_t) = 0x8 (8) @@ -52,9 +53,9 @@ typedef unsigned long int pthread_t; implementation. For NPTL we use LWS Compare and Exchange to implement primitives. */ #if 0 -typedef struct { +typedef volatile struct { int lock[4]; -} __atomic_lock_t; +} __attribute__ ((aligned(16))) __atomic_lock_t; #endif typedef union @@ -149,7 +150,10 @@ typedef union unsigned int __nr_writers_queued; /* FLAGS must stay at this position in the structure to maintain binary compatibility. */ - unsigned int __flags; + unsigned char __pad2; + unsigned char __pad1; + unsigned char __shared; + unsigned char __flags; int __writer; } __data; char __size[__SIZEOF_PTHREAD_RWLOCK_T]; diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/configure b/ports/sysdeps/unix/sysv/linux/hppa/nptl/configure new file mode 100644 index 000000000..a418c5469 --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/configure @@ -0,0 +1,5 @@ +# This file is generated from configure.in by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/unix/sysv/linux/hppa/nptl. + +# Needed for LWS CAS +arch_minimum_kernel=2.6.9 diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/configure.in b/ports/sysdeps/unix/sysv/linux/hppa/nptl/configure.in new file mode 100644 index 000000000..1c7102e26 --- /dev/null +++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/configure.in @@ -0,0 +1,5 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/unix/sysv/linux/hppa/nptl. + +# Needed for LWS CAS +arch_minimum_kernel=2.6.9 diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/internaltypes.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/internaltypes.h deleted file mode 100644 index 528c2a7d9..000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/internaltypes.h +++ /dev/null @@ -1,153 +0,0 @@ -/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. - - 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 _INTERNALTYPES_H -#define _INTERNALTYPES_H 1 - -#include <stdint.h> - - -struct pthread_attr -{ - /* Scheduler parameters and priority. */ - struct sched_param schedparam; - int schedpolicy; - /* Various flags like detachstate, scope, etc. */ - int flags; - /* Size of guard area. */ - size_t guardsize; - /* Stack handling. */ - void *stackaddr; - size_t stacksize; - /* Affinity map. */ - cpu_set_t *cpuset; - size_t cpusetsize; -}; - -#define ATTR_FLAG_DETACHSTATE 0x0001 -#define ATTR_FLAG_NOTINHERITSCHED 0x0002 -#define ATTR_FLAG_SCOPEPROCESS 0x0004 -#define ATTR_FLAG_STACKADDR 0x0008 -#define ATTR_FLAG_OLDATTR 0x0010 -#define ATTR_FLAG_SCHED_SET 0x0020 -#define ATTR_FLAG_POLICY_SET 0x0040 - - -/* Mutex attribute data structure. */ -struct pthread_mutexattr -{ - /* Identifier for the kind of mutex. - - Bit 31 is set if the mutex is to be shared between processes. - - Bit 0 to 30 contain one of the PTHREAD_MUTEX_ values to identify - the type of the mutex. */ - int mutexkind; -}; - - -/* Conditional variable attribute data structure. */ -struct pthread_condattr -{ - /* Combination of values: - - Bit 0 : flag whether coditional variable will be shareable between - processes. - - Bit 1-7: clock ID. */ - int value; -}; - - -/* The __NWAITERS field is used as a counter and to house the number - of bits which represent the clock. COND_CLOCK_BITS is the number - of bits reserved for the clock. */ -#define COND_CLOCK_BITS 1 - - -/* Read-write lock variable attribute data structure. */ -struct pthread_rwlockattr -{ - int lockkind; - int pshared; -}; - - -/* Barrier data structure. */ -struct pthread_barrier -{ - unsigned int curr_event; - int lock; - unsigned int left; - unsigned int init_count; -}; - - -/* Barrier variable attribute data structure. */ -struct pthread_barrierattr -{ - int pshared; -}; - - -/* Thread-local data handling. */ -struct pthread_key_struct -{ - /* Sequence numbers. Even numbers indicated vacant entries. Note - that zero is even. We use uintptr_t to not require padding on - 32- and 64-bit machines. On 64-bit machines it helps to avoid - wrapping, too. */ - uintptr_t seq; - - /* Destructor for the data. */ - void (*destr) (void *); -}; - -/* Check whether an entry is unused. */ -#define KEY_UNUSED(p) (((p) & 1) == 0) -/* Check whether a key is usable. We cannot reuse an allocated key if - the sequence counter would overflow after the next destroy call. - This would mean that we potentially free memory for a key with the - same sequence. This is *very* unlikely to happen, A program would - have to create and destroy a key 2^31 times (on 32-bit platforms, - on 64-bit platforms that would be 2^63). If it should happen we - simply don't use this specific key anymore. */ -#define KEY_USABLE(p) (((uintptr_t) (p)) < ((uintptr_t) ((p) + 2))) - - -/* Handling of read-write lock data. */ -// XXX For now there is only one flag. Maybe more in future. -#define RWLOCK_RECURSIVE(rwlock) ((rwlock)->__data.__flags != 0) - - -/* Semaphore variable structure. */ -struct sem -{ - unsigned int count; -}; - - -/* Compatibility type for old conditional variable interfaces. */ -typedef struct -{ - pthread_cond_t *cond; -} pthread_cond_2_0_t; - -#endif /* internaltypes.h */ - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c index d2919ee46..236d29c1f 100644 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c +++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c @@ -1,5 +1,5 @@ /* low level locking for pthread library. Generic futex-using version. - Copyright (C) 2003 Free Software Foundation, Inc. + Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. @@ -31,7 +31,7 @@ __lll_lock_wait (lll_lock_t *futex) { int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); if (oldval != 0) - lll_futex_wait (futex, 2); + lll_futex_wait (futex, 2, LLL_SHARED); } while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); } @@ -68,7 +68,7 @@ __lll_timedlock_wait (lll_lock_t *futex, const struct timespec *abstime) /* Wait. */ int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); if (oldval != 0) - lll_futex_timed_wait (futex, 2, &rt); + lll_futex_timed_wait (futex, 2, &rt, LLL_SHARED); } while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); return 0; @@ -83,7 +83,7 @@ lll_unlock_wake_cb (lll_lock_t *futex) int val = atomic_exchange_rel (futex, 0); if (__builtin_expect (val > 1, 0)) - lll_futex_wake (futex, 1); + lll_private_futex_wake (futex, 1); return 0; } @@ -119,7 +119,7 @@ __lll_timedwait_tid (int *tidp, const struct timespec *abstime) return ETIMEDOUT; /* Wait until thread terminates. */ - if (lll_futex_timed_wait (tidp, tid, &rt) == -ETIMEDOUT) + if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT) return ETIMEDOUT; } diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h index 3b2b0f1ad..f8a9555ba 100644 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h +++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -39,6 +39,13 @@ #define FUTEX_LOCK_PI 6 #define FUTEX_UNLOCK_PI 7 #define FUTEX_TRYLOCK_PI 8 +#define FUTEX_PRIVATE_FLAG 128 + +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG /* Initialize locks to zero. */ #define LLL_MUTEX_LOCK_INITIALIZER (0) @@ -48,39 +55,82 @@ typedef int lll_lock_t; -#define lll_futex_wait(futexp, val) \ +#define lll_futex_wait(futexp, val, private) \ + lll_futex_timed_wait (futexp, val, 0, private) + +#define lll_futex_timed_wait(futexp, val, timespec, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT, (val), 0); \ + (futexp), FUTEX_WAIT, (val), (timespec)); \ __ret; \ }) -#define lll_futex_timed_wait(futexp, val, timespec) \ +#define lll_futex_wake(futexp, nr, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT, (val), (timespec)); \ + (futexp), FUTEX_WAKE, (nr), 0); \ __ret; \ }) -#define lll_futex_wake(futexp, nr) \ +#define lll_private_futex_wait(futex, val) \ + lll_private_futex_timed_wait (futex, val, NULL) + +#ifdef __ASSUME_PRIVATE_FUTEX +# define lll_private_futex_timed_wait(futex, val, timeout) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAKE, (nr), 0); \ + (futexp), FUTEX_WAIT | FUTEX_PRIVATE_FLAG, \ + (val), (timespec)); \ __ret; \ }) +# define lll_private_futex_wake(futexp, nr) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret; \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, \ + (futexp), FUTEX_WAKE | FUTEX_PRIVATE_FLAG, \ + (nr), 0); \ + __ret; \ + }) + +#else + +# define lll_private_futex_timed_wait(futexp, val, timespec) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret, __op; \ + __op = FUTEX_WAIT | THREAD_GETMEM (THREAD_SELF, header.private_futex); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, \ + (futexp), __op, (val), (timespec)); \ + __ret; \ + }) + +# define lll_private_futex_wake(futexp, nr) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret, __op; \ + __op = FUTEX_WAKE | THREAD_GETMEM (THREAD_SELF, header.private_futex); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, \ + (futexp), __op, (nr), 0); \ + __ret; \ + }) +#endif + + + #define lll_robust_mutex_dead(futexv) \ do \ { \ int *__futexp = &(futexv); \ atomic_or (__futexp, FUTEX_OWNER_DIED); \ - lll_futex_wake (__futexp, 1); \ + lll_futex_wake (__futexp, 1, 0); \ } \ while (0) @@ -96,7 +146,7 @@ typedef int lll_lock_t; }) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2) \ +#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ @@ -201,7 +251,7 @@ __lll_mutex_unlock (lll_lock_t *futex) { int val = atomic_exchange_rel (futex, 0); if (__builtin_expect (val > 1, 0)) - lll_futex_wake (futex, 1); + lll_futex_wake (futex, 1, 0); } #define lll_mutex_unlock(futex) __lll_mutex_unlock(&(futex)) @@ -211,7 +261,7 @@ __lll_robust_mutex_unlock (int *futex, int mask) { int val = atomic_exchange_rel (futex, 0); if (__builtin_expect (val & mask, 0)) - lll_futex_wake (futex, 1); + lll_futex_wake (futex, 1, 0); } #define lll_robust_mutex_unlock(futex) \ __lll_robust_mutex_unlock(&(futex), FUTEX_WAITERS) @@ -221,7 +271,7 @@ static inline void __attribute__ ((always_inline)) __lll_mutex_unlock_force (lll_lock_t *futex) { (void) atomic_exchange_rel (futex, 0); - lll_futex_wake (futex, 1); + lll_futex_wake (futex, 1, 0); } #define lll_mutex_unlock_force(futex) __lll_mutex_unlock_force(&(futex)) @@ -256,10 +306,10 @@ extern int lll_unlock_wake_cb (lll_lock_t *__futex) attribute_hidden; thread ID while the clone is running and is reset to zero afterwards. */ #define lll_wait_tid(tid) \ - do { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid); \ + do { \ + __typeof (tid) __tid; \ + while ((__tid = (tid)) != 0) \ + lll_futex_wait (&(tid), __tid, 0); \ } while (0) extern int __lll_timedwait_tid (int *, const struct timespec *) diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c index 649b752f5..b89e40c2e 100644 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c +++ b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. @@ -30,7 +30,7 @@ clear_once_control (void *arg) pthread_once_t *once_control = (pthread_once_t *) arg; *once_control = 0; - lll_futex_wake (once_control, INT_MAX); + lll_private_futex_wake (once_control, INT_MAX); } @@ -65,7 +65,7 @@ __pthread_once (once_control, init_routine) if (((oldval ^ newval) & -4) == 0) { /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, newval); + lll_private_futex_wait (once_control, newval); continue; } } @@ -84,7 +84,7 @@ __pthread_once (once_control, init_routine) atomic_increment (once_control); /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX); + lll_private_futex_wake (once_control, INT_MAX); break; } diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sys/procfs.h b/ports/sysdeps/unix/sysv/linux/hppa/sys/procfs.h index 2e6d10956..ca35489f5 100644 --- a/ports/sysdeps/unix/sysv/linux/hppa/sys/procfs.h +++ b/ports/sysdeps/unix/sysv/linux/hppa/sys/procfs.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1999, 2000, 2006 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,10 +34,18 @@ #include <sys/types.h> #include <sys/ucontext.h> #include <sys/user.h> -#include <asm/elf.h> __BEGIN_DECLS +typedef unsigned long elf_greg_t; +#define ELF_NGREG 80 /* We only need 64 at present, but leave space + for expansion. */ +typedef elf_greg_t elf_gregset_t[ELF_NGREG]; + +#define ELF_NFPREG 32 +typedef double elf_fpreg_t; +typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; + struct elf_siginfo { int si_signo; /* Signal number. */ diff --git a/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h index 90c0a481e..733a088cf 100644 --- a/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h +++ b/ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h @@ -95,7 +95,7 @@ # define F_NOTIFY 1026 /* Request notfications on a directory. */ #endif -/* For F_[GET|SET]FL. */ +/* For F_[GET|SET]FD. */ #define FD_CLOEXEC 1 /* actually anything with low bit set goes */ /* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ diff --git a/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h index d40b4b638..27af9ede1 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h +++ b/ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h @@ -1,5 +1,5 @@ /* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995, 1996, 1997, 1998, 2000, 2002, 2003, 2004, 2006 + Copyright (C) 1995, 1996, 1997, 1998, 2000, 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -51,6 +51,7 @@ # define O_DIRECT 0x8000 /* Direct disk access hint. */ # define O_DIRECTORY 0x10000 /* Must be a directory. */ # define O_NOATIME 0x40000 /* Do not set atime. */ +# define O_CLOEXEC 02000000 /* Set close_on_exec. */ #endif /* For now Linux has no synchronisity options for data and read operations. @@ -101,7 +102,7 @@ # define F_NOTIFY 1026 /* Request notfications on a directory. */ #endif -/* For F_[GET|SET]FL. */ +/* For F_[GET|SET]FD. */ #define FD_CLOEXEC 1 /* actually anything with low bit set goes */ /* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ diff --git a/ports/sysdeps/unix/sysv/linux/mips/bits/socket.h b/ports/sysdeps/unix/sysv/linux/mips/bits/socket.h index 0e4a2beac..8748c0a04 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/bits/socket.h +++ b/ports/sysdeps/unix/sysv/linux/mips/bits/socket.h @@ -1,5 +1,5 @@ /* System-specific socket constants and types. Linux/MIPS version. - Copyright (C) 1991, 92, 1994-1999, 2000, 2001, 2004, 2005, 2006 + Copyright (C) 1991, 92, 1994-1999, 2000, 2001, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -63,7 +63,7 @@ enum __socket_type /* Protocol families. */ #define PF_UNSPEC 0 /* Unspecified. */ #define PF_LOCAL 1 /* Local to host (pipes and file-domain). */ -#define PF_UNIX PF_LOCAL /* Old BSD name for PF_LOCAL. */ +#define PF_UNIX PF_LOCAL /* POSIX name for PF_LOCAL. */ #define PF_FILE PF_LOCAL /* Another non-standard name for PF_LOCAL. */ #define PF_INET 2 /* IP protocol family. */ #define PF_AX25 3 /* Amateur Radio AX.25. */ @@ -90,7 +90,9 @@ enum __socket_type #define PF_PPPOX 24 /* PPPoX sockets. */ #define PF_WANPIPE 25 /* Wanpipe API sockets. */ #define PF_BLUETOOTH 31 /* Bluetooth sockets. */ -#define PF_MAX 32 /* For now.. */ +#define PF_IUCV 32 /* IUCV sockets. */ +#define PF_RXRPC 33 /* RxRPC sockets. */ +#define PF_MAX 34 /* For now.. */ /* Address families. */ #define AF_UNSPEC PF_UNSPEC @@ -122,6 +124,8 @@ enum __socket_type #define AF_PPPOX PF_PPPOX #define AF_WANPIPE PF_WANPIPE #define AF_BLUETOOTH PF_BLUETOOTH +#define AF_IUCV PF_IUCV +#define AF_RXRPC PF_RXRPC #define AF_MAX PF_MAX /* Socket level values. Others are defined in the appropriate headers. @@ -206,8 +210,13 @@ enum #define MSG_ERRQUEUE MSG_ERRQUEUE MSG_NOSIGNAL = 0x4000, /* Do not generate SIGPIPE. */ #define MSG_NOSIGNAL MSG_NOSIGNAL - MSG_MORE = 0x8000 /* Sender will send more. */ + MSG_MORE = 0x8000, /* Sender will send more. */ #define MSG_MORE MSG_MORE + + MSG_CMSG_CLOEXEC = 0x40000000 /* Set close_on_exit for file + descriptor received through + SCM_RIGHTS. */ +#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC }; @@ -259,7 +268,7 @@ extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) __THROW; #ifdef __USE_EXTERN_INLINES # ifndef _EXTERN_INLINE -# define _EXTERN_INLINE extern __inline +# define _EXTERN_INLINE __extern_inline # endif _EXTERN_INLINE struct cmsghdr * __NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg)) diff --git a/ports/sysdeps/unix/sysv/linux/mips/bits/stat.h b/ports/sysdeps/unix/sysv/linux/mips/bits/stat.h index 208197830..4e0e30f9e 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/bits/stat.h +++ b/ports/sysdeps/unix/sysv/linux/mips/bits/stat.h @@ -1,5 +1,5 @@ -/* Copyright (C) 1992, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004 - Free Software Foundation, Inc. +/* Copyright (C) 1992, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, + 2007 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 @@ -253,3 +253,9 @@ struct stat64 #define __S_IREAD 0400 /* Read by owner. */ #define __S_IWRITE 0200 /* Write by owner. */ #define __S_IEXEC 0100 /* Execute by owner. */ + +#if defined __USE_ATFILE || defined __USE_GNU +/* XXX This will change to the macro for the next 2008 POSIX revision. */ +# define UTIME_NOW ((1l << 30) - 1l) +# define UTIME_OMIT ((1l << 30) - 2l) +#endif diff --git a/ports/sysdeps/unix/sysv/linux/mips/dl-cache.h b/ports/sysdeps/unix/sysv/linux/mips/dl-cache.h index 4fa5d3ad2..9f0e4d28e 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/dl-cache.h +++ b/ports/sysdeps/unix/sysv/linux/mips/dl-cache.h @@ -1,5 +1,5 @@ /* Support for reading /etc/ld.so.cache files written by Linux ldconfig. - Copyright (C) 2003 Free Software Foundation, Inc. + Copyright (C) 2003, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,6 +17,20 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#include <ldconfig.h> + +/* Redefine the cache ID for new ABIs; o32 keeps using the generic check. */ +#if _MIPS_SIM == _ABI64 +# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN64 | FLAG_ELF_LIBC6) +#elif _MIPS_SIM == _ABIN32 +# define _DL_CACHE_DEFAULT_ID (FLAG_MIPS64_LIBN32 | FLAG_ELF_LIBC6) +#endif + +#ifdef _DL_CACHE_DEFAULT_ID +# define _dl_cache_check_flags(flags) \ + ((flags) == _DL_CACHE_DEFAULT_ID) +#endif + #define add_system_dir(dir) \ do \ { \ diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h b/ports/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h index 3c19bffc4..089fa9dc6 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h +++ b/ports/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h @@ -22,6 +22,8 @@ /* There is some commonality. */ #include <sysdeps/unix/mips/mips32/sysdep.h> +#include <tls.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 diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h b/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h index d2635987f..b2bbbb0ee 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h +++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h @@ -23,6 +23,8 @@ /* There is some commonality. */ #include <sysdeps/unix/mips/mips64/n32/sysdep.h> +#include <tls.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 @@ -44,6 +46,10 @@ #else /* ! __ASSEMBLER__ */ +/* Convert X to a long long, without losing any bits if it is one + already or warning if it is a 32-bit pointer. */ +#define ARGIFY(X) ((long long) (__typeof__ ((X) - (X))) (X)) + /* Define a macro which expands into the inline wrapper code for a system call. */ #undef INLINE_SYSCALL @@ -102,7 +108,7 @@ \ { \ register long long __v0 asm("$2") ncs_init; \ - register long long __a0 asm("$4") = (long long) arg1; \ + register long long __a0 asm("$4") = ARGIFY (arg1); \ register long long __a3 asm("$7"); \ __asm__ volatile ( \ ".set\tnoreorder\n\t" \ @@ -124,8 +130,8 @@ \ { \ register long long __v0 asm("$2") ncs_init; \ - register long long __a0 asm("$4") = (long long) arg1; \ - register long long __a1 asm("$5") = (long long) arg2; \ + register long long __a0 asm("$4") = ARGIFY (arg1); \ + register long long __a1 asm("$5") = ARGIFY (arg2); \ register long long __a3 asm("$7"); \ __asm__ volatile ( \ ".set\tnoreorder\n\t" \ @@ -147,9 +153,9 @@ \ { \ register long long __v0 asm("$2") ncs_init; \ - register long long __a0 asm("$4") = (long long) arg1; \ - register long long __a1 asm("$5") = (long long) arg2; \ - register long long __a2 asm("$6") = (long long) arg3; \ + register long long __a0 asm("$4") = ARGIFY (arg1); \ + register long long __a1 asm("$5") = ARGIFY (arg2); \ + register long long __a2 asm("$6") = ARGIFY (arg3); \ register long long __a3 asm("$7"); \ __asm__ volatile ( \ ".set\tnoreorder\n\t" \ @@ -171,10 +177,10 @@ \ { \ register long long __v0 asm("$2") ncs_init; \ - register long long __a0 asm("$4") = (long long) arg1; \ - register long long __a1 asm("$5") = (long long) arg2; \ - register long long __a2 asm("$6") = (long long) arg3; \ - register long long __a3 asm("$7") = (long long) arg4; \ + register long long __a0 asm("$4") = ARGIFY (arg1); \ + register long long __a1 asm("$5") = ARGIFY (arg2); \ + register long long __a2 asm("$6") = ARGIFY (arg3); \ + register long long __a3 asm("$7") = ARGIFY (arg4); \ __asm__ volatile ( \ ".set\tnoreorder\n\t" \ cs_init \ @@ -195,11 +201,11 @@ \ { \ register long long __v0 asm("$2") ncs_init; \ - register long long __a0 asm("$4") = (long long) arg1; \ - register long long __a1 asm("$5") = (long long) arg2; \ - register long long __a2 asm("$6") = (long long) arg3; \ - register long long __a3 asm("$7") = (long long) arg4; \ - register long long __a4 asm("$8") = (long long) arg5; \ + register long long __a0 asm("$4") = ARGIFY (arg1); \ + register long long __a1 asm("$5") = ARGIFY (arg2); \ + register long long __a2 asm("$6") = ARGIFY (arg3); \ + register long long __a3 asm("$7") = ARGIFY (arg4); \ + register long long __a4 asm("$8") = ARGIFY (arg5); \ __asm__ volatile ( \ ".set\tnoreorder\n\t" \ cs_init \ @@ -220,12 +226,12 @@ \ { \ register long long __v0 asm("$2") ncs_init; \ - register long long __a0 asm("$4") = (long long) arg1; \ - register long long __a1 asm("$5") = (long long) arg2; \ - register long long __a2 asm("$6") = (long long) arg3; \ - register long long __a3 asm("$7") = (long long) arg4; \ - register long long __a4 asm("$8") = (long long) arg5; \ - register long long __a5 asm("$9") = (long long) arg6; \ + register long long __a0 asm("$4") = ARGIFY (arg1); \ + register long long __a1 asm("$5") = ARGIFY (arg2); \ + register long long __a2 asm("$6") = ARGIFY (arg3); \ + register long long __a3 asm("$7") = ARGIFY (arg4); \ + register long long __a4 asm("$8") = ARGIFY (arg5); \ + register long long __a5 asm("$9") = ARGIFY (arg6); \ __asm__ volatile ( \ ".set\tnoreorder\n\t" \ cs_init \ diff --git a/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h b/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h index edf8786ea..8862607ae 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h +++ b/ports/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h @@ -23,6 +23,8 @@ /* There is some commonality. */ #include <sysdeps/unix/mips/mips64/n64/sysdep.h> +#include <tls.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 diff --git a/ports/sysdeps/unix/sysv/linux/mips/nptl/bits/semaphore.h b/ports/sysdeps/unix/sysv/linux/mips/nptl/bits/semaphore.h index c4440f9e9..af43a6048 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/nptl/bits/semaphore.h +++ b/ports/sysdeps/unix/sysv/linux/mips/nptl/bits/semaphore.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2005, 2007 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,9 +29,6 @@ /* Value returned if `sem_open' failed. */ #define SEM_FAILED ((sem_t *) 0) -/* Maximum value the semaphore can have. */ -#define SEM_VALUE_MAX (2147483647) - typedef union { diff --git a/ports/sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h b/ports/sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h index 4542e5b91..1cb3d9b7c 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h +++ b/ports/sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h @@ -24,7 +24,7 @@ #include <bits/pthreadtypes.h> #include <atomic.h> #include <sysdep.h> - +#include <kernel-features.h> #define FUTEX_WAIT 0 #define FUTEX_WAKE 1 @@ -37,200 +37,224 @@ #define FUTEX_TRYLOCK_PI 8 #define FUTEX_PRIVATE_FLAG 128 -/* Initializer for compatibility lock. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) - -#define lll_futex_wait(futexp, val) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (long) (futexp), FUTEX_WAIT, (val), 0); \ - INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ - }) - -#define lll_futex_timed_wait(futexp, val, timespec) \ +/* Values for 'private' parameter of locking macros. Yes, the + definition seems to be backwards. But it is not. The bit will be + reversed before passing to the system call. */ +#define LLL_PRIVATE 0 +#define LLL_SHARED FUTEX_PRIVATE_FLAG + + +#if !defined NOT_IN_libc || defined IS_IN_rtld +/* In libc.so or ld.so all futexes are private. */ +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + ((fl) | FUTEX_PRIVATE_FLAG) +# else +# define __lll_private_flag(fl, private) \ + ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) +# endif +#else +# ifdef __ASSUME_PRIVATE_FUTEX +# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +# else +# define __lll_private_flag(fl, private) \ + (__builtin_constant_p (private) \ + ? ((private) == 0 \ + ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ + : (fl)) \ + : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ + & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) +# endif +#endif + + +#define lll_futex_wait(futexp, val, private) \ + lll_futex_timed_wait(futexp, val, NULL, private) + +#define lll_futex_timed_wait(futexp, val, timespec, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (long) (futexp), FUTEX_WAIT, (val), (timespec));\ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (long) (futexp), \ + __lll_private_flag (FUTEX_WAIT, private), \ + (val), (timespec)); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ }) -#define lll_futex_wake(futexp, nr) \ +#define lll_futex_wake(futexp, nr, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (long) (futexp), FUTEX_WAKE, (nr), 0); \ + __ret = INTERNAL_SYSCALL (futex, __err, 4, (long) (futexp), \ + __lll_private_flag (FUTEX_WAKE, private), \ + (nr), 0); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ }) -#define lll_robust_mutex_dead(futexv) \ +#define lll_robust_dead(futexv, private) \ do \ { \ int *__futexp = &(futexv); \ atomic_or (__futexp, FUTEX_OWNER_DIED); \ - lll_futex_wake (__futexp, 1); \ + lll_futex_wake (__futexp, 1, private); \ } \ while (0) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val) \ +#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, \ - (long) (futexp), FUTEX_CMP_REQUEUE, (nr_wake), \ - (nr_move), (mutex), (val)); \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (long) (futexp), \ + __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ + (nr_wake), (nr_move), (mutex), (val)); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ }) /* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2) \ +#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ ({ \ INTERNAL_SYSCALL_DECL (__err); \ long int __ret; \ \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, \ - (futexp), FUTEX_WAKE_OP, (nr_wake), \ - (nr_wake2), (futexp2), \ + __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ + __lll_private_flag (FUTEX_WAKE_OP, private), \ + (nr_wake), (nr_wake2), (futexp2), \ FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ }) static inline int __attribute__((always_inline)) -__lll_mutex_trylock(int *futex) +__lll_trylock(int *futex) { return atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0; } -#define lll_mutex_trylock(lock) __lll_mutex_trylock (&(lock)) +#define lll_trylock(lock) __lll_trylock (&(lock)) static inline int __attribute__((always_inline)) -__lll_mutex_cond_trylock(int *futex) +__lll_cond_trylock(int *futex) { return atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0; } -#define lll_mutex_cond_trylock(lock) __lll_mutex_cond_trylock (&(lock)) +#define lll_cond_trylock(lock) __lll_cond_trylock (&(lock)) static inline int __attribute__((always_inline)) -__lll_robust_mutex_trylock(int *futex, int id) +__lll_robust_trylock(int *futex, int id) { return atomic_compare_and_exchange_val_acq (futex, id, 0) != 0; } -#define lll_robust_mutex_trylock(lock, id) \ - __lll_robust_mutex_trylock (&(lock), id) - -extern void __lll_lock_wait (int *futex) attribute_hidden; -extern int __lll_robust_lock_wait (int *futex) attribute_hidden; - -static inline void __attribute__((always_inline)) -__lll_mutex_lock(int *futex) -{ - if (atomic_compare_and_exchange_bool_acq (futex, 1, 0) != 0) - __lll_lock_wait (futex); -} -#define lll_mutex_lock(futex) __lll_mutex_lock (&(futex)) - - -static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_lock (int *futex, int id) -{ - int result = 0; - if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_lock_wait (futex); - return result; -} -#define lll_robust_mutex_lock(futex, id) \ - __lll_robust_mutex_lock (&(futex), id) +#define lll_robust_trylock(lock, id) \ + __lll_robust_trylock (&(lock), id) + +extern void __lll_lock_wait_private (int *futex) attribute_hidden; +extern void __lll_lock_wait (int *futex, int private) attribute_hidden; +extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; + +#define __lll_lock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, \ + 1, 0), 0)) \ + { \ + if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \ + __lll_lock_wait_private (__futex); \ + else \ + __lll_lock_wait (__futex, private); \ + } \ + })) +#define lll_lock(futex, private) __lll_lock (&(futex), private) + + +#define __lll_robust_lock(futex, id, private) \ + ({ \ + int *__futex = (futex); \ + int __val = 0; \ + \ + if (__builtin_expect (atomic_compare_and_exchange_bool_acq (__futex, id, \ + 0), 0)) \ + __val = __lll_robust_lock_wait (__futex, private); \ + __val; \ + }) +#define lll_robust_lock(futex, id, private) \ + __lll_robust_lock (&(futex), id, private) static inline void __attribute__ ((always_inline)) -__lll_mutex_cond_lock (int *futex) +__lll_cond_lock (int *futex, int private) { if (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0) - __lll_lock_wait (futex); + __lll_lock_wait (futex, private); } -#define lll_mutex_cond_lock(futex) __lll_mutex_cond_lock (&(futex)) +#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) -#define lll_robust_mutex_cond_lock(futex, id) \ - __lll_robust_mutex_lock (&(futex), (id) | FUTEX_WAITERS) +#define lll_robust_cond_lock(futex, id, private) \ + __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private) -extern int __lll_timedlock_wait (int *futex, const struct timespec *) - attribute_hidden; -extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *) - attribute_hidden; +extern int __lll_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; +extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, + int private) attribute_hidden; static inline int __attribute__ ((always_inline)) -__lll_mutex_timedlock (int *futex, const struct timespec *abstime) +__lll_timedlock (int *futex, const struct timespec *abstime, int private) { int result = 0; if (atomic_compare_and_exchange_bool_acq (futex, 1, 0) != 0) - result = __lll_timedlock_wait (futex, abstime); + result = __lll_timedlock_wait (futex, abstime, private); return result; } -#define lll_mutex_timedlock(futex, abstime) \ - __lll_mutex_timedlock (&(futex), abstime) +#define lll_timedlock(futex, abstime, private) \ + __lll_timedlock (&(futex), abstime, private) static inline int __attribute__ ((always_inline)) -__lll_robust_mutex_timedlock (int *futex, const struct timespec *abstime, - int id) +__lll_robust_timedlock (int *futex, const struct timespec *abstime, + int id, int private) { int result = 0; if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_timedlock_wait (futex, abstime); + result = __lll_robust_timedlock_wait (futex, abstime, private); return result; } -#define lll_robust_mutex_timedlock(futex, abstime, id) \ - __lll_robust_mutex_timedlock (&(futex), abstime, id) +#define lll_robust_timedlock(futex, abstime, id, private) \ + __lll_robust_timedlock (&(futex), abstime, id, private) -static inline void __attribute__ ((always_inline)) -__lll_mutex_unlock (int *futex) -{ - int val = atomic_exchange_rel (futex, 0); - if (__builtin_expect (val > 1, 0)) - lll_futex_wake (futex, 1); -} -#define lll_mutex_unlock(futex) __lll_mutex_unlock(&(futex)) - - -static inline void __attribute__ ((always_inline)) -__lll_robust_mutex_unlock (int *futex, int mask) -{ - int val = atomic_exchange_rel (futex, 0); - if (__builtin_expect (val & mask, 0)) - lll_futex_wake (futex, 1); -} -#define lll_robust_mutex_unlock(futex) \ - __lll_robust_mutex_unlock(&(futex), FUTEX_WAITERS) +#define __lll_unlock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + int __val = atomic_exchange_rel (__futex, 0); \ + \ + if (__builtin_expect (__val > 1, 0)) \ + lll_futex_wake (__futex, 1, private); \ + })) +#define lll_unlock(futex, private) __lll_unlock(&(futex), private) -static inline void __attribute__ ((always_inline)) -__lll_mutex_unlock_force (int *futex) -{ - (void) atomic_exchange_rel (futex, 0); - lll_futex_wake (futex, 1); -} -#define lll_mutex_unlock_force(futex) __lll_mutex_unlock_force(&(futex)) +#define __lll_robust_unlock(futex, private) \ + ((void) ({ \ + int *__futex = (futex); \ + int __val = atomic_exchange_rel (__futex, 0); \ + \ + if (__builtin_expect (__val & FUTEX_WAITERS, 0)) \ + lll_futex_wake (__futex, 1, private); \ + })) +#define lll_robust_unlock(futex, private) \ + __lll_robust_unlock(&(futex), private) -#define lll_mutex_islocked(futex) \ +#define lll_islocked(futex) \ (futex != 0) /* Our internal lock implementation is identical to the binary-compatible mutex implementation. */ -/* Type for lock object. */ -typedef int lll_lock_t; - /* Initializers for lock. */ #define LLL_LOCK_INITIALIZER (0) #define LLL_LOCK_INITIALIZER_LOCKED (1) @@ -240,20 +264,15 @@ typedef int lll_lock_t; 1 - taken by one user >1 - taken by more users */ -#define lll_trylock(lock) lll_mutex_trylock (lock) -#define lll_lock(lock) lll_mutex_lock (lock) -#define lll_unlock(lock) lll_mutex_unlock (lock) -#define lll_islocked(lock) lll_mutex_islocked (lock) - /* The kernel notifies a process which uses CLONE_CLEARTID via futex wakeup when the clone terminates. The memory location contains the thread ID while the clone is running and is reset to zero afterwards. */ #define lll_wait_tid(tid) \ - do { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid); \ + do { \ + __typeof (tid) __tid; \ + while ((__tid = (tid)) != 0) \ + lll_futex_wait (&(tid), __tid, LLL_SHARED); \ } while (0) extern int __lll_timedwait_tid (int *, const struct timespec *) @@ -267,26 +286,4 @@ extern int __lll_timedwait_tid (int *, const struct timespec *) __res; \ }) - -/* Conditional variable handling. */ - -extern void __lll_cond_wait (pthread_cond_t *cond) - attribute_hidden; -extern int __lll_cond_timedwait (pthread_cond_t *cond, - const struct timespec *abstime) - attribute_hidden; -extern void __lll_cond_wake (pthread_cond_t *cond) - attribute_hidden; -extern void __lll_cond_broadcast (pthread_cond_t *cond) - attribute_hidden; - -#define lll_cond_wait(cond) \ - __lll_cond_wait (cond) -#define lll_cond_timedwait(cond, abstime) \ - __lll_cond_timedwait (cond, abstime) -#define lll_cond_wake(cond) \ - __lll_cond_wake (cond) -#define lll_cond_broadcast(cond) \ - __lll_cond_broadcast (cond) - #endif /* lowlevellock.h */ diff --git a/ports/sysdeps/unix/sysv/linux/mips/nptl/pthread_once.c b/ports/sysdeps/unix/sysv/linux/mips/nptl/pthread_once.c index 649b752f5..ddfd32bdb 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/nptl/pthread_once.c +++ b/ports/sysdeps/unix/sysv/linux/mips/nptl/pthread_once.c @@ -30,7 +30,7 @@ clear_once_control (void *arg) pthread_once_t *once_control = (pthread_once_t *) arg; *once_control = 0; - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); } @@ -65,7 +65,7 @@ __pthread_once (once_control, init_routine) if (((oldval ^ newval) & -4) == 0) { /* Same generation, some other thread was faster. Wait. */ - lll_futex_wait (once_control, newval); + lll_futex_wait (once_control, newval, LLL_PRIVATE); continue; } } @@ -84,7 +84,7 @@ __pthread_once (once_control, init_routine) atomic_increment (once_control); /* Wake up all other threads. */ - lll_futex_wake (once_control, INT_MAX); + lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE); break; } diff --git a/ports/sysdeps/unix/sysv/linux/mips/sys/tas.h b/ports/sysdeps/unix/sysv/linux/mips/sys/tas.h index 1183b867b..309438d78 100644 --- a/ports/sysdeps/unix/sysv/linux/mips/sys/tas.h +++ b/ports/sysdeps/unix/sysv/linux/mips/sys/tas.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2002, 2003, 2004, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Maciej W. Rozycki <macro@ds2.pg.gda.pl>, 2000. @@ -30,7 +30,7 @@ extern int _test_and_set (int *p, int v) __THROW; #ifdef __USE_EXTERN_INLINES # ifndef _EXTERN_INLINE -# define _EXTERN_INLINE extern __inline +# define _EXTERN_INLINE __extern_inline # endif _EXTERN_INLINE int |