summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2007-09-12 16:26:54 +0000
committerjoseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d>2007-09-12 16:26:54 +0000
commit83584a7af898dd93c48600fe850d150c51b10899 (patch)
tree0affa8ffee374ab83e40501d8d8967a03569c44d
parent04b4d23592609edcd19fd5a461bbe6d3cc677b5b (diff)
Merge changes between r2424 and r3467 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@3468 7b3dc134-2b1b-0410-93df-9e9f96275f8d
-rw-r--r--libc/CONFORMANCE27
-rw-r--r--libc/ChangeLog1429
-rw-r--r--libc/Makeconfig2
-rw-r--r--libc/Makerules26
-rw-r--r--libc/bits/confname.h5
-rw-r--r--libc/bits/sched.h9
-rw-r--r--libc/bits/types.h5
-rw-r--r--libc/catgets/gencat.c5
-rw-r--r--libc/config.make.in3
-rwxr-xr-xlibc/configure30
-rw-r--r--libc/configure.in10
-rw-r--r--libc/csu/libc-start.c8
-rw-r--r--libc/debug/Makefile9
-rw-r--r--libc/debug/Versions3
-rw-r--r--libc/debug/fprintf_chk.c4
-rw-r--r--libc/debug/fread_chk.c56
-rw-r--r--libc/debug/fread_u_chk.c54
-rw-r--r--libc/debug/fwprintf_chk.c4
-rw-r--r--libc/debug/pcprofiledump.c17
-rw-r--r--libc/debug/printf_chk.c4
-rw-r--r--libc/debug/segfault.c6
-rw-r--r--libc/debug/test-strcpy_chk.c11
-rw-r--r--libc/debug/tst-chk1.c71
-rw-r--r--libc/debug/vfprintf_chk.c4
-rw-r--r--libc/debug/vfwprintf_chk.c4
-rw-r--r--libc/debug/vprintf_chk.c4
-rw-r--r--libc/debug/vwprintf_chk.c4
-rw-r--r--libc/debug/wprintf_chk.c4
-rw-r--r--libc/dlfcn/Makefile10
-rw-r--r--libc/dlfcn/dlinfo.c7
-rw-r--r--libc/dlfcn/glreflib3.c1
-rw-r--r--libc/dlfcn/tst-dlinfo.c2
-rw-r--r--libc/elf/Makefile25
-rw-r--r--libc/elf/cache.c465
-rw-r--r--libc/elf/chroot_canon.c5
-rw-r--r--libc/elf/dl-addr.c36
-rw-r--r--libc/elf/dl-close.c86
-rw-r--r--libc/elf/dl-dst.h8
-rw-r--r--libc/elf/dl-iteratephdr.c8
-rw-r--r--libc/elf/dl-load.c44
-rw-r--r--libc/elf/dl-lookup.c41
-rw-r--r--libc/elf/dl-minimal.c22
-rw-r--r--libc/elf/dl-object.c7
-rw-r--r--libc/elf/dl-open.c69
-rw-r--r--libc/elf/dl-runtime.c26
-rw-r--r--libc/elf/dl-support.c2
-rw-r--r--libc/elf/dl-sym.c15
-rw-r--r--libc/elf/dl-sysdep.c20
-rw-r--r--libc/elf/do-lookup.h11
-rw-r--r--libc/elf/elf.h45
-rw-r--r--libc/elf/ldconfig.c153
-rw-r--r--libc/elf/readelflib.c43
-rw-r--r--libc/elf/readlib.c34
-rw-r--r--libc/elf/rtld.c10
-rw-r--r--libc/hurd/getdport.c3
-rw-r--r--libc/hurd/hurd/signal.h1
-rw-r--r--libc/hurd/port2fd.c4
-rw-r--r--libc/iconv/Makefile5
-rw-r--r--libc/iconv/dummy-repertoire.c5
-rw-r--r--libc/iconv/gconv.c20
-rw-r--r--libc/iconv/gconv.h3
-rw-r--r--libc/iconv/gconv_cache.c4
-rw-r--r--libc/iconv/gconv_db.c5
-rw-r--r--libc/iconv/gconv_int.h8
-rw-r--r--libc/iconv/gconv_open.c4
-rw-r--r--libc/iconv/iconv_charmap.c5
-rw-r--r--libc/iconv/iconv_prog.c5
-rw-r--r--libc/iconv/iconvconfig.c60
-rw-r--r--libc/iconvdata/Makefile4
-rw-r--r--libc/iconvdata/bug-iconv5.c53
-rw-r--r--libc/iconvdata/cns11643.h7
-rw-r--r--libc/iconvdata/euc-jp-ms.c24
-rw-r--r--libc/iconvdata/euc-kr.c5
-rw-r--r--libc/iconvdata/euc-tw.c5
-rw-r--r--libc/iconvdata/gbk.c4
-rw-r--r--libc/iconvdata/ibm1008_420.c2
-rw-r--r--libc/iconvdata/iso-2022-cn-ext.c10
-rw-r--r--libc/iconvdata/iso-2022-cn.c7
-rw-r--r--libc/iconvdata/iso-2022-kr.c14
-rw-r--r--libc/iconvdata/iso-ir-165.h4
-rw-r--r--libc/iconvdata/jis0201.h6
-rw-r--r--libc/iconvdata/jis0208.h5
-rw-r--r--libc/iconvdata/jis0212.h16
-rw-r--r--libc/include/fcntl.h4
-rw-r--r--libc/include/features.h8
-rw-r--r--libc/include/link.h6
-rw-r--r--libc/include/stdio.h7
-rw-r--r--libc/include/stdlib.h101
-rw-r--r--libc/include/time.h11
-rw-r--r--libc/include/wchar.h40
-rw-r--r--libc/intl/dcigettext.c9
-rw-r--r--libc/intl/explodename.c6
-rw-r--r--libc/intl/finddomain.c8
-rw-r--r--libc/intl/gettextP.h5
-rw-r--r--libc/intl/loadmsgcat.c2
-rw-r--r--libc/intl/plural-eval.c6
-rw-r--r--libc/intl/plural-exp.c4
-rw-r--r--libc/intl/plural-exp.h11
-rw-r--r--libc/io/Makefile7
-rw-r--r--libc/io/bits/fcntl2.h240
-rw-r--r--libc/io/have_o_cloexec.c24
-rw-r--r--libc/io/tst-posix_fallocate.c100
-rw-r--r--libc/libio/bits/stdio2.h67
-rw-r--r--libc/libio/fileops.c5
-rw-r--r--libc/libio/genops.c18
-rw-r--r--libc/libio/iopopen.c13
-rw-r--r--libc/libio/libio.h10
-rw-r--r--libc/libio/libioP.h10
-rw-r--r--libc/libio/oldtmpfile.c5
-rw-r--r--libc/locale/localeinfo.h4
-rw-r--r--libc/locale/programs/3level.h5
-rw-r--r--libc/locale/programs/charmap-dir.c5
-rw-r--r--libc/locale/programs/charmap-dir.h5
-rw-r--r--libc/locale/programs/charmap-kw.gperf5
-rw-r--r--libc/locale/programs/charmap-kw.h5
-rw-r--r--libc/locale/programs/charmap.c5
-rw-r--r--libc/locale/programs/charmap.h5
-rw-r--r--libc/locale/programs/config.h5
-rw-r--r--libc/locale/programs/ld-address.c5
-rw-r--r--libc/locale/programs/ld-collate.c275
-rw-r--r--libc/locale/programs/ld-ctype.c15
-rw-r--r--libc/locale/programs/ld-identification.c5
-rw-r--r--libc/locale/programs/ld-measurement.c5
-rw-r--r--libc/locale/programs/ld-messages.c5
-rw-r--r--libc/locale/programs/ld-monetary.c13
-rw-r--r--libc/locale/programs/ld-name.c5
-rw-r--r--libc/locale/programs/ld-numeric.c5
-rw-r--r--libc/locale/programs/ld-paper.c5
-rw-r--r--libc/locale/programs/ld-telephone.c5
-rw-r--r--libc/locale/programs/ld-time.c5
-rw-r--r--libc/locale/programs/linereader.c5
-rw-r--r--libc/locale/programs/linereader.h5
-rw-r--r--libc/locale/programs/locale-spec.c5
-rw-r--r--libc/locale/programs/locale.c5
-rw-r--r--libc/locale/programs/localedef.c5
-rw-r--r--libc/locale/programs/localedef.h5
-rw-r--r--libc/locale/programs/locarchive.c5
-rw-r--r--libc/locale/programs/locfile-kw.gperf5
-rw-r--r--libc/locale/programs/locfile-kw.h5
-rw-r--r--libc/locale/programs/locfile-token.h5
-rw-r--r--libc/locale/programs/locfile.c5
-rw-r--r--libc/locale/programs/locfile.h5
-rw-r--r--libc/locale/programs/repertoire.c11
-rw-r--r--libc/locale/programs/repertoire.h5
-rw-r--r--libc/locale/programs/simple-hash.c5
-rw-r--r--libc/locale/programs/simple-hash.h5
-rw-r--r--libc/locale/programs/xmalloc.c5
-rw-r--r--libc/locale/programs/xstrdup.c5
-rw-r--r--libc/locale/weightwc.h4
-rw-r--r--libc/localedata/ChangeLog35
-rw-r--r--libc/localedata/Makefile3
-rw-r--r--libc/localedata/SUPPORTED1
-rw-r--r--libc/localedata/locales/ar_SA16
-rw-r--r--libc/localedata/locales/as_IN2
-rw-r--r--libc/localedata/locales/dz_BT2
-rw-r--r--libc/localedata/locales/ru_RU4
-rw-r--r--libc/localedata/locales/translit_combining4
-rw-r--r--libc/localedata/locales/wo_SN180
-rw-r--r--libc/localedata/tst-strptime.c23
-rw-r--r--libc/login/Makefile4
-rw-r--r--libc/login/forkpty.c4
-rw-r--r--libc/login/logout.c7
-rw-r--r--libc/login/logwtmp.c13
-rw-r--r--libc/login/tst-grantpt.c2
-rw-r--r--libc/login/utmp_file.c40
-rw-r--r--libc/mach/lock-intern.h1
-rw-r--r--libc/malloc/malloc.h8
-rw-r--r--libc/malloc/memusagestat.c5
-rw-r--r--libc/manual/errno.texi2
-rw-r--r--libc/manual/libc.texinfo71
-rw-r--r--libc/manual/signal.texi4
-rw-r--r--libc/manual/stdio.texi5
-rw-r--r--libc/math/Makefile3
-rw-r--r--libc/math/test-tgmath.c494
-rw-r--r--libc/math/test-tgmath2.c488
-rw-r--r--libc/math/tgmath.h321
-rw-r--r--libc/misc/Makefile3
-rw-r--r--libc/misc/Versions3
-rw-r--r--libc/misc/mkdtemp.c4
-rw-r--r--libc/misc/mkostemp.c36
-rw-r--r--libc/misc/mkostemp64.c33
-rw-r--r--libc/misc/mkstemp.c4
-rw-r--r--libc/misc/mkstemp64.c5
-rw-r--r--libc/misc/mktemp.c4
-rw-r--r--libc/nis/nis_domain_of.c4
-rw-r--r--libc/nis/nis_subr.c2
-rw-r--r--libc/nis/nis_table.c13
-rw-r--r--libc/nis/nis_xdr.c30
-rw-r--r--libc/nis/nss-default.c5
-rw-r--r--libc/nis/nss_compat/compat-grp.c43
-rw-r--r--libc/nis/nss_compat/compat-initgroups.c42
-rw-r--r--libc/nis/nss_compat/compat-pwd.c43
-rw-r--r--libc/nis/nss_compat/compat-spwd.c43
-rw-r--r--libc/nis/nss_nis/nis-hosts.c2
-rw-r--r--libc/nis/yp_xdr.c10
-rw-r--r--libc/nptl/ChangeLog1182
-rw-r--r--libc/nptl/Makefile2
-rw-r--r--libc/nptl/allocatestack.c73
-rw-r--r--libc/nptl/descr.h4
-rw-r--r--libc/nptl/init.c5
-rw-r--r--libc/nptl/lowlevellock.h20
-rw-r--r--libc/nptl/old_pthread_cond_broadcast.c4
-rw-r--r--libc/nptl/old_pthread_cond_signal.c4
-rw-r--r--libc/nptl/old_pthread_cond_timedwait.c4
-rw-r--r--libc/nptl/old_pthread_cond_wait.c4
-rw-r--r--libc/nptl/pthreadP.h18
-rw-r--r--libc/nptl/pthread_attr_init.c4
-rw-r--r--libc/nptl/pthread_barrier_destroy.c6
-rw-r--r--libc/nptl/pthread_barrier_init.c2
-rw-r--r--libc/nptl/pthread_barrier_wait.c14
-rw-r--r--libc/nptl/pthread_cond_broadcast.c21
-rw-r--r--libc/nptl/pthread_cond_destroy.c16
-rw-r--r--libc/nptl/pthread_cond_init.c2
-rw-r--r--libc/nptl/pthread_cond_signal.c15
-rw-r--r--libc/nptl/pthread_cond_timedwait.c18
-rw-r--r--libc/nptl/pthread_cond_wait.c26
-rw-r--r--libc/nptl/pthread_create.c15
-rw-r--r--libc/nptl/pthread_getattr_np.c12
-rw-r--r--libc/nptl/pthread_getschedparam.c4
-rw-r--r--libc/nptl/pthread_mutex_init.c10
-rw-r--r--libc/nptl/pthread_mutex_lock.c38
-rw-r--r--libc/nptl/pthread_mutex_setprioceiling.c13
-rw-r--r--libc/nptl/pthread_mutex_timedlock.c33
-rw-r--r--libc/nptl/pthread_mutex_trylock.c19
-rw-r--r--libc/nptl/pthread_mutex_unlock.c19
-rw-r--r--libc/nptl/pthread_once.c8
-rw-r--r--libc/nptl/pthread_rwlock_rdlock.c11
-rw-r--r--libc/nptl/pthread_rwlock_timedrdlock.c10
-rw-r--r--libc/nptl/pthread_rwlock_timedwrlock.c12
-rw-r--r--libc/nptl/pthread_rwlock_tryrdlock.c4
-rw-r--r--libc/nptl/pthread_rwlock_trywrlock.c6
-rw-r--r--libc/nptl/pthread_rwlock_unlock.c16
-rw-r--r--libc/nptl/pthread_rwlock_wrlock.c13
-rw-r--r--libc/nptl/pthread_setschedparam.c4
-rw-r--r--libc/nptl/pthread_setschedprio.c4
-rw-r--r--libc/nptl/sem_close.c4
-rw-r--r--libc/nptl/sem_open.c6
-rw-r--r--libc/nptl/semaphoreP.h2
-rw-r--r--libc/nptl/sysdeps/alpha/tls.h2
-rw-r--r--libc/nptl/sysdeps/i386/tls.h2
-rw-r--r--libc/nptl/sysdeps/ia64/tls.h2
-rw-r--r--libc/nptl/sysdeps/powerpc/tls.h2
-rw-r--r--libc/nptl/sysdeps/pthread/aio_misc.h7
-rw-r--r--libc/nptl/sysdeps/pthread/bits/libc-lock.h8
-rw-r--r--libc/nptl/sysdeps/pthread/bits/stdio-lock.h14
-rw-r--r--libc/nptl/sysdeps/pthread/createthread.c8
-rw-r--r--libc/nptl/sysdeps/pthread/gai_misc.h7
-rw-r--r--libc/nptl/sysdeps/pthread/pt-initfini.c4
-rw-r--r--libc/nptl/sysdeps/s390/tls.h2
-rw-r--r--libc/nptl/sysdeps/sh/tcb-offsets.sym3
-rw-r--r--libc/nptl/sysdeps/sh/tls.h6
-rw-r--r--libc/nptl/sysdeps/sparc/tls.h12
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h6
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/alpha/lowlevellock.h250
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/alpha/pthread_once.c8
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/fork.c4
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/fork.h4
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/libc-lowlevellock.S15
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S169
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevelrobustlock.S60
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S36
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S83
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S64
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S187
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S179
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S45
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S58
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S56
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S32
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S43
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S10
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S13
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S9
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S10
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/i786/Implies2
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h623
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S12
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/ia64/bits/pthreadtypes.h6
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/ia64/lowlevellock.h317
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/ia64/pthread_once.c8
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/lowlevellock.c30
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c9
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h179
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h23
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c8
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_spin_unlock.c29
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c34
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym1
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/pthread_mutex_cond_lock.c10
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/register-atfork.c12
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/rtld-lowlevel.h115
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/s390/bits/pthreadtypes.h11
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h287
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/s390/pthread_once.c8
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sem_post.c6
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c3
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sem_wait.c6
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h19
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/libc-lowlevellock.S2
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S211
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.h228
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S78
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S40
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S98
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S120
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S168
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S205
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S69
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S63
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S65
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S62
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_unlock.S49
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S59
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S33
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S270
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S18
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S275
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/bits/pthreadtypes.h11
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/internaltypes.h34
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/lowlevellock.h219
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_destroy.c45
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_init.c (renamed from libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_init.c)17
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_barrier_wait.c78
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c8
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_init.c (renamed from libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_init.c)60
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_post.c69
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_timedwait.c112
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sem_wait.c117
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/lowlevellock.c30
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/pthread_barrier_wait.c32
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_post.c51
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_timedwait.c100
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_trywait.c16
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sem_wait.c127
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_init.c1
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c2
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_init.c1
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_post.c2
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_timedwait.c2
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/sem_wait.c2
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/unregister-atfork.c8
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S15
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S161
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h611
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevelrobustlock.S75
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S35
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S60
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S52
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S80
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S111
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S11
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S31
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S34
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S33
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S27
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S31
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S10
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S10
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S7
-rw-r--r--libc/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S10
-rw-r--r--libc/nptl/sysdeps/x86_64/tls.h2
-rw-r--r--libc/nptl/tpp.c10
-rw-r--r--libc/nptl/tst-locale2.c1
-rw-r--r--libc/nptl/tst-rwlock14.c6
-rw-r--r--libc/nptl/tst-tsd6.c89
-rw-r--r--libc/nptl_db/ChangeLog23
-rw-r--r--libc/nscd/Makefile3
-rw-r--r--libc/nscd/aicache.c5
-rw-r--r--libc/nscd/cache.c5
-rw-r--r--libc/nscd/connections.c43
-rw-r--r--libc/nscd/dbg_log.c5
-rw-r--r--libc/nscd/gai.c7
-rw-r--r--libc/nscd/getgrgid_r.c5
-rw-r--r--libc/nscd/getgrnam_r.c5
-rw-r--r--libc/nscd/gethstbyad_r.c8
-rw-r--r--libc/nscd/gethstbynm2_r.c8
-rw-r--r--libc/nscd/getpwnam_r.c5
-rw-r--r--libc/nscd/getpwuid_r.c5
-rw-r--r--libc/nscd/getsrvbynm_r.c5
-rw-r--r--libc/nscd/getsrvbypt_r.c5
-rw-r--r--libc/nscd/grpcache.c5
-rw-r--r--libc/nscd/hstcache.c41
-rw-r--r--libc/nscd/initgrcache.c5
-rw-r--r--libc/nscd/mem.c5
-rw-r--r--libc/nscd/nscd.c5
-rw-r--r--libc/nscd/nscd_conf.c5
-rw-r--r--libc/nscd/nscd_helper.c84
-rw-r--r--libc/nscd/nscd_setup_thread.c5
-rw-r--r--libc/nscd/pwdcache.c5
-rw-r--r--libc/nscd/res_hconf.c13
-rw-r--r--libc/nscd/selinux.c2
-rw-r--r--libc/nscd/servicescache.c6
-rw-r--r--libc/nss/Makefile5
-rw-r--r--libc/nss/nss_files/files-XXX.c51
-rw-r--r--libc/nss/nss_files/files-alias.c51
-rw-r--r--libc/nss/nss_files/files-have_o_cloexec.c24
-rw-r--r--libc/nss/nss_files/files-hosts.c2
-rw-r--r--libc/nss/nsswitch.h3
-rw-r--r--libc/po/bg.po6464
-rw-r--r--libc/po/nl.po1837
-rw-r--r--libc/po/pl.po1770
-rw-r--r--libc/po/sv.po1772
-rw-r--r--libc/po/tr.po2089
-rw-r--r--libc/po/zh_CN.po8344
-rw-r--r--libc/posix/Makefile30
-rw-r--r--libc/posix/Versions3
-rw-r--r--libc/posix/fnmatch.c16
-rw-r--r--libc/posix/getconf.c9
-rw-r--r--libc/posix/glob/ChangeLog5
-rwxr-xr-xlibc/posix/glob/configure6134
-rw-r--r--libc/posix/regex_internal.h16
-rw-r--r--libc/posix/runtests.c2
-rw-r--r--libc/posix/sched.h43
-rw-r--r--libc/posix/sched_cpualloc.c (renamed from libc/sysdeps/unix/sysv/linux/powerpc/dl-vdso.h)16
-rw-r--r--libc/posix/sched_cpucount.c20
-rw-r--r--libc/posix/sched_cpufree.c27
-rw-r--r--libc/posix/tst-cpuset.c82
-rw-r--r--libc/posix/tst-rfc3484-2.c1
-rw-r--r--libc/posix/tst-rfc3484.c1
-rw-r--r--libc/resolv/arpa/nameser.h5
-rw-r--r--libc/resolv/inet_ntop.c2
-rw-r--r--libc/resolv/res_hconf.c4
-rw-r--r--libc/resolv/res_init.c9
-rw-r--r--libc/resolv/res_send.c24
-rw-r--r--libc/resolv/resolv.h6
-rw-r--r--libc/rt/aio.h54
-rw-r--r--libc/rt/mqueue.h31
-rw-r--r--libc/rt/tst-mqueue1.c22
-rw-r--r--libc/scripts/data/localplt-generic.data (renamed from libc/scripts/data/localplt-x86_64-linux-gnu.data)0
-rw-r--r--libc/scripts/data/localplt-powerpc-linux-gnu.data7
-rw-r--r--libc/shadow/lckpwdf.c42
-rw-r--r--libc/signal/signal.h4
-rw-r--r--libc/soft-fp/eqdf2.c6
-rw-r--r--libc/soft-fp/eqsf2.c6
-rw-r--r--libc/soft-fp/eqtf2.c6
-rw-r--r--libc/soft-fp/gedf2.c6
-rw-r--r--libc/soft-fp/gesf2.c6
-rw-r--r--libc/soft-fp/getf2.c6
-rw-r--r--libc/soft-fp/ledf2.c6
-rw-r--r--libc/soft-fp/lesf2.c6
-rw-r--r--libc/soft-fp/letf2.c6
-rw-r--r--libc/soft-fp/soft-fp.h6
-rw-r--r--libc/soft-fp/unorddf2.c7
-rw-r--r--libc/soft-fp/unordsf2.c7
-rw-r--r--libc/soft-fp/unordtf2.c7
-rw-r--r--libc/stdio-common/Makefile6
-rw-r--r--libc/stdio-common/bug18.c48
-rw-r--r--libc/stdio-common/bug18a.c6
-rw-r--r--libc/stdio-common/bug19.c58
-rw-r--r--libc/stdio-common/bug19a.c7
-rw-r--r--libc/stdio-common/printf_fp.c4
-rw-r--r--libc/stdio-common/tempnam.c18
-rw-r--r--libc/stdio-common/tempname.c5
-rw-r--r--libc/stdio-common/tfformat.c15
-rw-r--r--libc/stdio-common/tmpfile.c15
-rw-r--r--libc/stdio-common/tmpfile64.c4
-rw-r--r--libc/stdio-common/tmpnam.c4
-rw-r--r--libc/stdio-common/tmpnam_r.c4
-rw-r--r--libc/stdio-common/tst-fmemopen2.c2
-rw-r--r--libc/stdio-common/tst-popen2.c92
-rw-r--r--libc/stdio-common/tst-sprintf2.c27
-rw-r--r--libc/stdio-common/vfprintf.c2
-rw-r--r--libc/stdio-common/vfscanf.c11
-rw-r--r--libc/stdlib/Makefile3
-rw-r--r--libc/stdlib/bits/stdlib-ldbl.h4
-rw-r--r--libc/stdlib/stdlib.h145
-rw-r--r--libc/stdlib/strtod.c5
-rw-r--r--libc/stdlib/strtod_l.c11
-rw-r--r--libc/stdlib/strtol.c3
-rw-r--r--libc/stdlib/strtol_l.c3
-rw-r--r--libc/stdlib/strtold.c4
-rw-r--r--libc/stdlib/strtold_l.c10
-rw-r--r--libc/stdlib/tst-strtod2.c2
-rw-r--r--libc/stdlib/tst-strtod5.c88
-rw-r--r--libc/string/strfry.c2
-rw-r--r--libc/string/strtok.c5
-rw-r--r--libc/sunrpc/key_prot.c2
-rw-r--r--libc/sunrpc/rpc_cmsg.c20
-rw-r--r--libc/sysdeps/generic/_G_config.h20
-rw-r--r--libc/sysdeps/generic/inttypes.h65
-rw-r--r--libc/sysdeps/generic/ldconfig.h21
-rw-r--r--libc/sysdeps/generic/ldsodefs.h40
-rw-r--r--libc/sysdeps/generic/unwind-dw2-fde-glibc.c7
-rw-r--r--libc/sysdeps/generic/unwind-dw2-fde.c15
-rw-r--r--libc/sysdeps/generic/unwind-dw2.c22
-rw-r--r--libc/sysdeps/gnu/_G_config.h20
-rw-r--r--libc/sysdeps/i386/dl-trampoline.S19
-rw-r--r--libc/sysdeps/i386/ldbl2mpn.c13
-rw-r--r--libc/sysdeps/ia64/ldbl2mpn.c1
-rw-r--r--libc/sysdeps/ia64/sched_cpucount.c21
-rw-r--r--libc/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c75
-rw-r--r--libc/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c37
-rw-r--r--libc/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c97
-rw-r--r--libc/sysdeps/ieee754/ldbl-128ibm/strtold_l.c11
-rw-r--r--libc/sysdeps/ieee754/ldbl-64-128/strtold_l.c11
-rw-r--r--libc/sysdeps/ieee754/ldbl-96/s_roundl.c4
-rw-r--r--libc/sysdeps/mach/hurd/_G_config.h20
-rw-r--r--libc/sysdeps/mach/hurd/bits/fcntl.h4
-rw-r--r--libc/sysdeps/mach/hurd/bits/ioctls.h18
-rw-r--r--libc/sysdeps/mach/hurd/i386/tls.h6
-rw-r--r--libc/sysdeps/mach/hurd/sigaction.c6
-rw-r--r--libc/sysdeps/mach/hurd/sigsuspend.c5
-rw-r--r--libc/sysdeps/mach/hurd/tls.h4
-rw-r--r--libc/sysdeps/mach/i386/sysdep.h8
-rw-r--r--libc/sysdeps/posix/posix_fallocate64.c3
-rw-r--r--libc/sysdeps/posix/tempname.c18
-rw-r--r--libc/sysdeps/powerpc/powerpc32/power4/memcmp.S1
-rw-r--r--libc/sysdeps/powerpc/powerpc32/power4/memcpy.S1
-rw-r--r--libc/sysdeps/powerpc/powerpc32/power4/memset.S1
-rw-r--r--libc/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S1
-rw-r--r--libc/sysdeps/powerpc/powerpc32/power6/memcpy.S1
-rw-r--r--libc/sysdeps/powerpc/powerpc32/power6/memset.S449
-rw-r--r--libc/sysdeps/powerpc/powerpc64/power4/memcmp.S1
-rw-r--r--libc/sysdeps/powerpc/powerpc64/power4/memcpy.S1
-rw-r--r--libc/sysdeps/powerpc/powerpc64/power4/memset.S7
-rw-r--r--libc/sysdeps/powerpc/powerpc64/power6/memset.S274
-rw-r--r--libc/sysdeps/powerpc/sched_cpucount.c23
-rw-r--r--libc/sysdeps/s390/dl-procinfo.c80
-rw-r--r--libc/sysdeps/s390/dl-procinfo.h99
-rw-r--r--libc/sysdeps/sh/bsd-_setjmp.S6
-rw-r--r--libc/sysdeps/sh/bsd-setjmp.S6
-rw-r--r--libc/sysdeps/sparc/fpu/feholdexcpt.c6
-rw-r--r--libc/sysdeps/sparc/fpu/fraiseexcpt.c8
-rw-r--r--libc/sysdeps/sparc/sparc32/dl-machine.h54
-rw-r--r--libc/sysdeps/sparc/sparc32/sparcv9/sparcv9b/memcpy.S (renamed from libc/sysdeps/sparc/sparc32/sparcv9b/memcpy.S)2
-rw-r--r--libc/sysdeps/sparc/sparc32/sparcv9/sparcv9v/memcpy.S (renamed from libc/sysdeps/sparc/sparc32/sparcv9v/memcpy.S)0
-rw-r--r--libc/sysdeps/sparc/sparc32/sparcv9/sparcv9v/memset.S (renamed from libc/sysdeps/sparc/sparc32/sparcv9v/memset.S)0
-rw-r--r--libc/sysdeps/unix/clock_gettime.c12
-rw-r--r--libc/sysdeps/unix/clock_settime.c6
-rw-r--r--libc/sysdeps/unix/dirstream.h9
-rw-r--r--libc/sysdeps/unix/opendir.c45
-rw-r--r--libc/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h3
-rw-r--r--libc/sysdeps/unix/sysv/linux/alpha/sysdep.h4
-rw-r--r--libc/sysdeps/unix/sysv/linux/bits/sched.h78
-rw-r--r--libc/sysdeps/unix/sysv/linux/bits/socket.h15
-rw-r--r--libc/sysdeps/unix/sysv/linux/check_pf.c90
-rw-r--r--libc/sysdeps/unix/sysv/linux/clock_gettime.c10
-rw-r--r--libc/sysdeps/unix/sysv/linux/dl-osinfo.h21
-rw-r--r--libc/sysdeps/unix/sysv/linux/dl-vdso.c (renamed from libc/sysdeps/unix/sysv/linux/powerpc/dl-vdso.c)15
-rw-r--r--libc/sysdeps/unix/sysv/linux/dl-vdso.h49
-rw-r--r--libc/sysdeps/unix/sysv/linux/fstatfs64.c4
-rw-r--r--libc/sysdeps/unix/sysv/linux/fxstatat.c3
-rw-r--r--libc/sysdeps/unix/sysv/linux/getsysstats.c51
-rw-r--r--libc/sysdeps/unix/sysv/linux/i386/bits/fcntl.h3
-rw-r--r--libc/sysdeps/unix/sysv/linux/i386/posix_fallocate.c58
-rw-r--r--libc/sysdeps/unix/sysv/linux/i386/posix_fallocate64.c61
-rw-r--r--libc/sysdeps/unix/sysv/linux/i386/syscalls.list1
-rw-r--r--libc/sysdeps/unix/sysv/linux/i386/sysconf.c4
-rw-r--r--libc/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h3
-rw-r--r--libc/sysdeps/unix/sysv/linux/ia64/bits/sigcontext.h4
-rw-r--r--libc/sysdeps/unix/sysv/linux/ia64/sys/ptrace.h24
-rw-r--r--libc/sysdeps/unix/sysv/linux/if_index.c3
-rw-r--r--libc/sysdeps/unix/sysv/linux/ifaddrs.c1
-rw-r--r--libc/sysdeps/unix/sysv/linux/init-first.c6
-rw-r--r--libc/sysdeps/unix/sysv/linux/kernel-features.h51
-rw-r--r--libc/sysdeps/unix/sysv/linux/nscd_setup_thread.c5
-rw-r--r--libc/sysdeps/unix/sysv/linux/posix_fallocate.c60
-rw-r--r--libc/sysdeps/unix/sysv/linux/posix_fallocate64.c64
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/Makefile2
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h3
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h2
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/init-first.c49
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/libc-start.c36
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S5
-rw-r--r--libc/sysdeps/unix/sysv/linux/powerpc/sys/ptrace.h24
-rw-r--r--libc/sysdeps/unix/sysv/linux/ppoll.c4
-rw-r--r--libc/sysdeps/unix/sysv/linux/pselect.c4
-rw-r--r--libc/sysdeps/unix/sysv/linux/s390/bits/fcntl.h3
-rw-r--r--libc/sysdeps/unix/sysv/linux/s390/dl-procinfo.h43
-rw-r--r--libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap.S3
-rw-r--r--libc/sysdeps/unix/sysv/linux/s390/s390-32/mmap64.S3
-rw-r--r--libc/sysdeps/unix/sysv/linux/s390/sys/ptrace.h24
-rw-r--r--libc/sysdeps/unix/sysv/linux/sh/bits/fcntl.h3
-rw-r--r--libc/sysdeps/unix/sysv/linux/sh/clone.S10
-rw-r--r--libc/sysdeps/unix/sysv/linux/shm_open.c55
-rw-r--r--libc/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h3
-rw-r--r--libc/sysdeps/unix/sysv/linux/sparc/sparc32/clone.S14
-rw-r--r--libc/sysdeps/unix/sysv/linux/sparc/sparc64/clone.S29
-rw-r--r--libc/sysdeps/unix/sysv/linux/sparc/sparc64/xstat.c2
-rw-r--r--libc/sysdeps/unix/sysv/linux/sparc/sys/ptrace.h24
-rw-r--r--libc/sysdeps/unix/sysv/linux/sparc/sysdep.h5
-rw-r--r--libc/sysdeps/unix/sysv/linux/statfs64.c3
-rw-r--r--libc/sysdeps/unix/sysv/linux/sys/ptrace.h25
-rw-r--r--libc/sysdeps/unix/sysv/linux/syscalls.list2
-rw-r--r--libc/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate.c59
-rw-r--r--libc/sysdeps/unix/sysv/linux/wordsize-64/posix_fallocate64.c1
-rw-r--r--libc/sysdeps/unix/sysv/linux/x86_64/Makefile4
-rw-r--r--libc/sysdeps/unix/sysv/linux/x86_64/Versions3
-rw-r--r--libc/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h3
-rw-r--r--libc/sysdeps/unix/sysv/linux/x86_64/bits/libc-vdso.h35
-rw-r--r--libc/sysdeps/unix/sysv/linux/x86_64/gettimeofday.S7
-rw-r--r--libc/sysdeps/unix/sysv/linux/x86_64/init-first.c51
-rw-r--r--libc/sysdeps/unix/sysv/linux/x86_64/sched_getcpu.S2
-rw-r--r--libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h210
-rw-r--r--libc/sysdeps/unix/sysv/linux/xstatconv.c4
-rw-r--r--libc/sysdeps/wordsize-64/strtol.c2
-rw-r--r--libc/sysdeps/x86_64/cacheinfo.c66
-rw-r--r--libc/sysdeps/x86_64/dl-trampoline.S7
-rw-r--r--libc/sysdeps/x86_64/ldbl2mpn.c1
-rw-r--r--libc/sysdeps/x86_64/sched_cpucount.c26
-rw-r--r--libc/sysvipc/sys/msg.h6
-rw-r--r--libc/time/strptime.c7
-rw-r--r--libc/time/strptime_l.c490
-rw-r--r--libc/timezone/Makefile5
-rw-r--r--libc/wcsmbs/bits/wchar-ldbl.h4
-rw-r--r--libc/wcsmbs/wchar.h124
-rw-r--r--libc/wctype/wctype.h19
-rw-r--r--ports/ChangeLog.aix4
-rw-r--r--ports/ChangeLog.am334
-rw-r--r--ports/ChangeLog.arm77
-rw-r--r--ports/ChangeLog.cris4
-rw-r--r--ports/ChangeLog.hppa47
-rw-r--r--ports/ChangeLog.m68k4
-rw-r--r--ports/ChangeLog.mips84
-rw-r--r--ports/ChangeLog.powerpc14
-rw-r--r--ports/sysdeps/arm/nptl/tls.h2
-rw-r--r--ports/sysdeps/hppa/nptl/tls.h34
-rw-r--r--ports/sysdeps/mips/nptl/tls.h2
-rw-r--r--ports/sysdeps/unix/sysv/aix/bits/fcntl.h2
-rw-r--r--ports/sysdeps/unix/sysv/linux/am33/bits/fcntl.h2
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/bits/fcntl.h6
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/check_pf.c124
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c16
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h4
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/nptl/bits/semaphore.h5
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.c40
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h342
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c6
-rw-r--r--ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c19
-rw-r--r--ports/sysdeps/unix/sysv/linux/cris/bits/fcntl.h2
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/linuxthreads/sysdep-cancel.h6
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h18
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/nptl/configure5
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/nptl/configure.in5
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/nptl/internaltypes.h153
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c10
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h82
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c8
-rw-r--r--ports/sysdeps/unix/sysv/linux/hppa/sys/procfs.h12
-rw-r--r--ports/sysdeps/unix/sysv/linux/m68k/bits/fcntl.h2
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/bits/fcntl.h5
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/bits/socket.h19
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/bits/stat.h10
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/dl-cache.h16
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h2
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h48
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/mips64/n64/sysdep.h2
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/nptl/bits/semaphore.h5
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/nptl/lowlevellock.h273
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/nptl/pthread_once.c6
-rw-r--r--ports/sysdeps/unix/sysv/linux/mips/sys/tas.h4
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 databasen Fö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