]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
.
authorJakub Jelinek <jakub@redhat.com>
Tue, 31 Jul 2007 13:33:18 +0000 (13:33 +0000)
committerJakub Jelinek <jakub@redhat.com>
Tue, 31 Jul 2007 13:33:18 +0000 (13:33 +0000)
448 files changed:
ChangeLog
Makeconfig
Makerules
NEWS
README
Versions.def
argp/Makefile
argp/argp-help.c
argp/tst-argp2.c [new file with mode: 0644]
catgets/gencat.c
config.h.in
config.make.in
configure
configure.in
csu/Versions
csu/libc-start.c
csu/libc-tls.c
csu/tst-atomic.c
csu/version.c
debug/catchsegv.sh
debug/xtrace.sh
dlfcn/Makefile
dlfcn/dlinfo.c
elf/Makefile
elf/cache.c
elf/dl-addr.c
elf/dl-cache.c
elf/dl-close.c
elf/dl-deps.c
elf/dl-dst.h
elf/dl-fptr.c
elf/dl-iteratephdr.c
elf/dl-libc.c
elf/dl-load.c
elf/dl-lookup.c
elf/dl-minimal.c
elf/dl-object.c
elf/dl-open.c
elf/dl-profile.c
elf/dl-reloc.c
elf/dl-runtime.c
elf/dl-support.c
elf/dl-sym.c
elf/dl-sysdep.c
elf/dl-tls.c
elf/do-lookup.h
elf/elf.h
elf/ldconfig.c
elf/ldd.bash.in
elf/rtld.c
elf/sprof.c
elf/tst-thrlock.c
elf/tst-tls-dlinfo.c
elf/tst-tls1.c
elf/tst-tls10.h
elf/tst-tls14.c
elf/tst-tls2.c
elf/tst-tls3.c
elf/tst-tls4.c
elf/tst-tls5.c
elf/tst-tls6.c
elf/tst-tls7.c
elf/tst-tls8.c
elf/tst-tls9.c
elf/tst-tlsmod1.c
elf/tst-tlsmod13.c
elf/tst-tlsmod13a.c
elf/tst-tlsmod14a.c
elf/tst-tlsmod2.c
elf/tst-tlsmod3.c
elf/tst-tlsmod4.c
elf/tst-tlsmod5.c
elf/tst-tlsmod6.c
gmon/mcount.c
iconv/gconv_charset.h
iconv/iconv_open.c
iconv/iconv_prog.c
iconv/iconvconfig.c
iconvdata/gconv-modules
iconvdata/johab.c
iconvdata/ksc5601.c
iconvdata/ksc5601.h
iconvdata/uhc.c
include/atomic.h
include/dlfcn.h
include/errno.h
include/libc-symbols.h
include/link.h
include/rpcsvc/nislib.h
include/shlib-compat.h
include/stdio.h
include/sys/cdefs.h
include/sys/mman.h
include/tls.h
inet/Makefile
inet/inet6_opt.c
inet/test-inet6_opt.c [new file with mode: 0644]
io/Makefile
io/bug-ftw5.c [new file with mode: 0644]
io/fstat.c
io/fstat64.c
io/fstatat.c
io/fstatat64.c
io/ftw.c
io/lstat.c
io/lstat64.c
io/mknod.c
io/mknodat.c
io/stat.c
io/stat64.c
libio/Banner [new file with mode: 0644]
libio/bits/stdio.h
libio/fileops.c
libio/libio.h
libio/libioP.h
libio/oldfileops.c
libio/stdio.c
libio/stdio.h
libio/vswprintf.c
locale/C-translit.h
locale/C-translit.h.in
locale/global-locale.c
locale/iso-3166.def
locale/iso-4217.def
locale/localeinfo.h
locale/programs/charmap.c
locale/programs/ld-collate.c
locale/programs/ld-ctype.c
locale/programs/ld-monetary.c
locale/programs/ld-numeric.c
locale/programs/ld-time.c
locale/programs/locale.c
locale/programs/localedef.c
locale/programs/repertoire.c
localedata/ChangeLog
localedata/SUPPORTED
localedata/charmaps/EUC-KR
localedata/charmaps/JOHAB
localedata/locales/as_IN
localedata/locales/bn_BD
localedata/locales/cs_CZ
localedata/locales/en_ZA
localedata/locales/ru_RU
localedata/locales/sl_SI
localedata/locales/sr_ME
localedata/locales/sr_RS [new file with mode: 0644]
localedata/locales/sr_RS@latin [new file with mode: 0644]
localedata/locales/translit_neutral
login/utmp_file.c
malloc/arena.c
malloc/hooks.c
malloc/malloc.c
malloc/memusage.c
malloc/memusage.sh
malloc/memusagestat.c
malloc/mtrace.pl
manual/argp.texi
manual/charset.texi
manual/conf.texi
manual/errno.texi
manual/filesys.texi
manual/lang.texi
manual/maint.texi
manual/memory.texi
manual/message.texi
manual/resource.texi
manual/search.texi
manual/signal.texi
manual/startup.texi
manual/stdio.texi
manual/string.texi
manual/sysinfo.texi
manual/syslog.texi
manual/time.texi
math/atest-exp.c
math/atest-exp2.c
math/atest-sincos.c
math/basic-test.c
math/bug-nextafter.c
math/bug-nexttoward.c
math/libm-test.inc
math/math_private.h
math/s_nextafter.c
math/s_nexttowardf.c
math/test-misc.c
misc/madvise.c
nis/Banner [new file with mode: 0644]
nis/nis_call.c
nis/nis_domain_of.c
nis/nis_lookup.c
nis/nis_print_group_entry.c
nis/nis_table.c
nis/nss-default.c
nis/nss_nis/nis-hosts.c
nis/nss_nis/nis-service.c
nis/nss_nisplus/nisplus-ethers.c
nis/nss_nisplus/nisplus-network.c
nis/nss_nisplus/nisplus-publickey.c
nis/nss_nisplus/nisplus-pwd.c
nis/nss_nisplus/nisplus-rpc.c
nis/nss_nisplus/nisplus-service.c
nis/nss_nisplus/nisplus-spwd.c
nis/rpcsvc/nislib.h
nptl/ChangeLog
nptl/Makefile
nptl/allocatestack.c
nptl/descr.h
nptl/init.c
nptl/pthreadP.h
nptl/pthread_attr_setstack.c
nptl/pthread_attr_setstacksize.c
nptl/pthread_getattr_np.c
nptl/pthread_mutex_lock.c
nptl/pthread_mutex_timedlock.c
nptl/pthread_mutex_trylock.c
nptl/sysdeps/alpha/tls.h
nptl/sysdeps/i386/tls.h
nptl/sysdeps/ia64/pthread_spin_unlock.c
nptl/sysdeps/ia64/tls.h
nptl/sysdeps/powerpc/tls.h
nptl/sysdeps/pthread/pthread_barrier_wait.c [moved from nptl/pthread_barrier_wait.c with 100% similarity]
nptl/sysdeps/pthread/pthread_cond_broadcast.c [moved from nptl/pthread_cond_broadcast.c with 100% similarity]
nptl/sysdeps/pthread/pthread_cond_signal.c [moved from nptl/pthread_cond_signal.c with 100% similarity]
nptl/sysdeps/pthread/pthread_cond_timedwait.c [moved from nptl/pthread_cond_timedwait.c with 100% similarity]
nptl/sysdeps/pthread/pthread_cond_wait.c [moved from nptl/pthread_cond_wait.c with 100% similarity]
nptl/sysdeps/pthread/pthread_getcpuclockid.c [moved from nptl/pthread_getcpuclockid.c with 100% similarity]
nptl/sysdeps/pthread/pthread_once.c [moved from nptl/pthread_once.c with 100% similarity]
nptl/sysdeps/pthread/pthread_rwlock_rdlock.c [moved from nptl/pthread_rwlock_rdlock.c with 100% similarity]
nptl/sysdeps/pthread/pthread_rwlock_timedrdlock.c [moved from nptl/pthread_rwlock_timedrdlock.c with 100% similarity]
nptl/sysdeps/pthread/pthread_rwlock_timedwrlock.c [moved from nptl/pthread_rwlock_timedwrlock.c with 100% similarity]
nptl/sysdeps/pthread/pthread_rwlock_unlock.c [moved from nptl/pthread_rwlock_unlock.c with 100% similarity]
nptl/sysdeps/pthread/pthread_rwlock_wrlock.c [moved from nptl/pthread_rwlock_wrlock.c with 100% similarity]
nptl/sysdeps/pthread/pthread_spin_destroy.c [moved from nptl/pthread_spin_destroy.c with 100% similarity]
nptl/sysdeps/pthread/pthread_spin_init.c [moved from nptl/pthread_spin_init.c with 100% similarity]
nptl/sysdeps/pthread/pthread_spin_unlock.c [moved from nptl/pthread_spin_unlock.c with 100% similarity]
nptl/sysdeps/s390/tls.h
nptl/sysdeps/sh/tls.h
nptl/sysdeps/sparc/tls.h
nptl/sysdeps/unix/sysv/linux/alpha/bits/local_lim.h
nptl/sysdeps/unix/sysv/linux/alpha/bits/semaphore.h
nptl/sysdeps/unix/sysv/linux/bits/local_lim.h
nptl/sysdeps/unix/sysv/linux/fork.c
nptl/sysdeps/unix/sysv/linux/i386/bits/semaphore.h
nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
nptl/sysdeps/unix/sysv/linux/i386/sysdep-cancel.h
nptl/sysdeps/unix/sysv/linux/ia64/bits/local_lim.h
nptl/sysdeps/unix/sysv/linux/ia64/bits/semaphore.h
nptl/sysdeps/unix/sysv/linux/lowlevelrobustlock.c
nptl/sysdeps/unix/sysv/linux/powerpc/Versions
nptl/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h [deleted file]
nptl/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h
nptl/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c [deleted file]
nptl/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c [deleted file]
nptl/sysdeps/unix/sysv/linux/rtld-lowlevel.h
nptl/sysdeps/unix/sysv/linux/s390/bits/semaphore.h
nptl/sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h
nptl/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
nptl/sysdeps/unix/sysv/linux/sh/bits/semaphore.h
nptl/sysdeps/unix/sysv/linux/sparc/bits/local_lim.h
nptl/sysdeps/unix/sysv/linux/sparc/bits/semaphore.h
nptl/sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c
nptl/sysdeps/unix/sysv/linux/x86_64/bits/semaphore.h
nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
nptl/sysdeps/x86_64/tls.h
nptl/tst-cancel-wrappers.sh
nptl/tst-cancel4.c
nptl/tst-robust9.c [new file with mode: 0644]
nptl/tst-robustpi9.c [new file with mode: 0644]
nptl/tst-sem10.c [new file with mode: 0644]
nptl/tst-tls5.h
nptl_db/ChangeLog
nptl_db/structs.def
nscd/Makefile
nscd/cache.c
nscd/gai.c
nscd/grpcache.c
nscd/nscd-client.h
nscd/nscd.c
nscd/nscd.init
nscd/nscd_getai.c
nscd/nscd_getgr_r.c
nscd/nscd_gethst_r.c
nscd/nscd_getpw_r.c
nscd/nscd_helper.c
nscd/nscd_initgroups.c
nscd/pwdcache.c
nscd/selinux.c
nscd/selinux.h
nss/getent.c
nss/nss_files/files-hosts.c
po/ru.po
po/sv.po
posix/Makefile
posix/bug-regex27.c [new file with mode: 0644]
posix/bug-regex28.c [new file with mode: 0644]
posix/getconf.c
posix/regcomp.c
posix/unistd.h
posix/wordexp.c
resolv/Makefile
resolv/Versions
resolv/arpa/nameser.h
resolv/inet_ntop.c
resolv/mapv4v6addr.h
resolv/nss_dns/dns-host.c
resolv/nss_dns/dns-network.c
resolv/res_libc.c
resolv/tst-inet_ntop.c [new file with mode: 0644]
scripts/check-local-headers.sh
soft-fp/op-4.h
soft-fp/op-common.h
stdio-common/Makefile
stdio-common/_itoa.c
stdio-common/bug17.c [new file with mode: 0644]
stdio-common/printf_fp.c
stdio-common/test-vfprintf.c
stdio-common/tfformat.c
stdio-common/tst-sprintf.c
stdio-common/tst-sprintf2.c [new file with mode: 0644]
stdio-common/tstscanf.c
stdio-common/vfprintf.c
stdio-common/vfscanf.c
stdlib/Makefile
stdlib/atexit.c
stdlib/cxa_finalize.c
stdlib/stdlib.h
sunrpc/auth_unix.c
sunrpc/clnt_raw.c
sunrpc/pm_getmaps.c
sunrpc/rpc_main.c
sunrpc/svc_run.c
sysdeps/alpha/dl-machine.h
sysdeps/alpha/libc-tls.c
sysdeps/generic/ldsodefs.h
sysdeps/generic/tls.h
sysdeps/gnu/errlist-compat.awk
sysdeps/gnu/netinet/tcp.h
sysdeps/gnu/siglist.c
sysdeps/i386/bits/byteswap.h
sysdeps/i386/dl-machine.h
sysdeps/i386/fpu/e_log.S
sysdeps/i386/fpu/e_logf.S
sysdeps/i386/fpu/e_logl.S
sysdeps/i386/fpu/e_pow.S
sysdeps/i386/fpu/e_powf.S
sysdeps/i386/fpu/e_powl.S
sysdeps/i386/fpu/math_private.h [new file with mode: 0644]
sysdeps/i386/fpu/s_nextafterl.c
sysdeps/i386/fpu/s_nexttoward.c
sysdeps/i386/fpu/s_nexttowardf.c
sysdeps/i386/i486/bits/atomic.h
sysdeps/i386/i686/memcmp.S
sysdeps/i386/ldbl2mpn.c
sysdeps/i386/soft-fp/sfp-machine.h [new file with mode: 0644]
sysdeps/i386/sysdep.h
sysdeps/ia64/dl-machine.h
sysdeps/ia64/fpu/fesetround.c
sysdeps/ia64/ldbl2mpn.c [new file with mode: 0644]
sysdeps/ia64/libc-tls.c
sysdeps/ieee754/dbl-64/e_pow.c
sysdeps/ieee754/flt-32/s_nextafterf.c
sysdeps/ieee754/ldbl-128/s_nextafterl.c
sysdeps/ieee754/ldbl-128/s_nexttoward.c
sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c
sysdeps/ieee754/ldbl-128ibm/printf_fphex.c
sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c
sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c
sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c
sysdeps/ieee754/ldbl-96/s_nextafterl.c
sysdeps/ieee754/ldbl-96/s_nexttoward.c
sysdeps/ieee754/ldbl-96/s_nexttowardf.c
sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c
sysdeps/mach/hurd/fork.c
sysdeps/mach/hurd/futimes.c
sysdeps/mach/hurd/i386/tls.h
sysdeps/mach/hurd/lutimes.c
sysdeps/mach/hurd/utimes.c
sysdeps/posix/euidaccess.c
sysdeps/posix/getaddrinfo.c
sysdeps/powerpc/fpu/bits/mathinline.h
sysdeps/powerpc/fpu/math_private.h [deleted file]
sysdeps/powerpc/powerpc32/dl-machine.c
sysdeps/powerpc/powerpc32/dl-machine.h
sysdeps/powerpc/powerpc32/sysdep.h
sysdeps/powerpc/powerpc64/dl-machine.h
sysdeps/s390/libc-tls.c
sysdeps/s390/s390-32/dl-machine.h
sysdeps/s390/s390-64/dl-machine.h
sysdeps/sh/dl-machine.h
sysdeps/sparc/sparc32/dl-machine.h
sysdeps/sparc/sparc64/dl-machine.h
sysdeps/unix/sysv/linux/Versions
sysdeps/unix/sysv/linux/bits/statvfs.h
sysdeps/unix/sysv/linux/check_pf.c
sysdeps/unix/sysv/linux/i386/clone.S
sysdeps/unix/sysv/linux/i386/getgroups.c
sysdeps/unix/sysv/linux/i386/sigaction.c
sysdeps/unix/sysv/linux/ifaddrs.c
sysdeps/unix/sysv/linux/internal_statvfs.c
sysdeps/unix/sysv/linux/posix_madvise.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/sh/bits/shm.h [deleted file]
sysdeps/unix/sysv/linux/sh/sys/io.h [new file with mode: 0644]
sysdeps/unix/sysv/linux/sys/epoll.h
sysdeps/unix/sysv/linux/syscalls.list
sysdeps/unix/sysv/linux/x86_64/Makefile
sysdeps/unix/sysv/linux/x86_64/clone.S
sysdeps/unix/sysv/linux/x86_64/sigaction.c
sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym
sysdeps/x86_64/bits/atomic.h
sysdeps/x86_64/bits/byteswap.h
sysdeps/x86_64/dl-machine.h
sysdeps/x86_64/fpu/e_log10l.S
sysdeps/x86_64/fpu/e_log2l.S
sysdeps/x86_64/fpu/e_logl.S
sysdeps/x86_64/fpu/e_powl.S
sysdeps/x86_64/fpu/math_private.h [new file with mode: 0644]
sysdeps/x86_64/fpu/s_copysign.S
sysdeps/x86_64/fpu/s_copysignf.S
sysdeps/x86_64/fpu/s_log1pl.S
sysdeps/x86_64/ldbl2mpn.c [new file with mode: 0644]
sysdeps/x86_64/soft-fp/sfp-machine.h [new file with mode: 0644]
time/Makefile
time/strptime_l.c
time/tst-strptime3.c [new file with mode: 0644]
time/tzfile.c
timezone/africa
timezone/antarctica
timezone/asia
timezone/australasia
timezone/backward
timezone/checktab.awk
timezone/europe
timezone/ialloc.c
timezone/iso3166.tab
timezone/northamerica
timezone/private.h
timezone/scheck.c
timezone/southamerica
timezone/tzfile.h
timezone/tzselect.ksh
timezone/zdump.c
timezone/zic.c
timezone/zone.tab
tls.make.c
version.h

index 88065954f4420e473181b1585d0f148b4ee9a596..3ad38a2b3106cf01880b843a8cf976413551cec8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
-2007-01-11  Jakub Jelinek  <jakub@redhat.com>
+2007-07-31  Jakub Jelinek  <jakub@redhat.com>
+
+       * NEWS, version.h (VERSION): 2.5.1.
+
+       * stdio-common/tfformat.c (sprint_doubles): Add 12 new tests.
+
+2007-07-28  Ulrich Drepper  <drepper@redhat.com>
+
+       [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-03  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #4702]
+       * nis/nss-default.c: Include errno.h.
+       (init): Preserve errno.
+
+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-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>
+
+       * elf/rtld.c (dl_main): Don't call init_tls more than once.
+
+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.
 
-       [BZ #3855]
-       * stdlib/strtod_l.c (____STRTOF_INTERNAL): 0x. not followed by
-       hexadecimal digit should accept just the initial 0.
-       * stdlib/tst-strtod2.c (tests): New variable.
-       (do_test): Run several tests rather than just one.
+2007-06-09  Ulrich Drepper  <drepper@redhat.com>
 
-2007-01-11  Jakub Jelinek  <jakub@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-05-18  Ulrich Drepper  <drepper@redhat.com>
+
+       * elf/dl-close.c (_dl_close_worker): When removing object from
+       global scope, wait for all lookups to finish afterwards.
+       * elf/dl-open.c (add_to_global): When global scope array must
+       grow, allocate a new one and free old array only after all
+       lookups finish.
+       * elf/dl-runtime.c (_dl_fixup): Protect using global scope.
+       (_dl_lookup_symbol_x): Likewise.
+       * elf/dl-support.c: Define _dl_wait_lookup_done.
+       * sysdeps/generic/ldsodefs.h (struct rtld_global): Add
+       _dl_wait_lookup_done.
+
+2007-05-11  Ulrich Drepper  <drepper@redhat.com>
+
+       * elf/dl-close.c (_dl_close_worker): Help gcc to optimize by
+       adding new variables.
+
+       * elf/dl-open.c (add_to_global): Introduce variable ns to help gcc
+       optimize.  Completely extend global scope array before making the
+       new entries visible.
+
+2007-01-15  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/generic/ldsodefs.h: Define DL_LOOKUP_SCOPE_LOCK.
+       * elf/dl-lookup.c (add_dependency): If scope map is locked, unlock
+       it before getting dl_load_lock and then relock.
+       (_dl_lookup_symbol_x): Pass flags to add_dependency.
+       When rerunning _dl_lookup_symbol_x, compute symbol_scope again in
+       case we unlocked the scope.
+       * elf/dl-runtime.c (_dl_fixup): Pass DL_LOOKUP_SCOPE_LOCK to
+       _dl_lookup_symbol_x in case we locked the scope.
+       (_dl_profile_fixup): Likewise.
+       * elf/dl-sym.c (do_sym): In flags passed to call_dl_lookup, also
+       set DL_LOOKUP_SCOPE_LOCK.
+
+2006-10-29  Jakub Jelinek  <jakub@redhat.com>
+
+       * elf/dl-sym.c (do_sym): Use RTLD_SINGLE_THREAD_P.
+       * elf/dl-runtime.c (_dl_fixup, _dl_profile_fixup): Likewise.
+       * elf/dl-close.c (_dl_close_worker): Likewise.
+       * elf/dl-open.c (_dl_open_worker): Likewise.
+       * sysdeps/generic/sysdep-cancel.h (RTLD_SINGLE_THREAD_P): Define.
+
+2006-10-27  Jakub Jelinek  <jakub@redhat.com>
+
+       * elf/dl-lookup.c (_dl_debug_bindings): Remove unused symbol_scope
+       argument.
+       (_dl_lookup_symbol_x): Adjust caller.
+
+       * sysdeps/generic/ldsodefs.h (struct link_namespaces): Remove
+       _ns_global_scope.
+       * elf/rtld.c (dl_main): Don't initialize _ns_global_scope.
+
+       * elf/dl-libc.c: Revert l_scope name changes.
+       * elf/dl-load.c: Likewise.
+       * elf/dl-object.c: Likewise.
+       * elf/rtld.c: Likewise.
+       * elf/dl-close.c (_dl_close): Likewise.
+       * elf/dl-open.c (dl_open_worker): Likewise.  If not SINGLE_THREAD_P,
+       always use __rtld_mrlock_{change,done}.  Always free old scope list
+       here if not l_scope_mem.
+       * elf/dl-runtime.c (_dl_fixup, _dl_profile_fixup): Revert l_scope name
+       change.  Never free scope list here.  Just __rtld_mrlock_lock before
+       the lookup and __rtld_mrlock_unlock it after the lookup.
+       * elf/dl-sym.c: Likewise.
+       * include/link.h (struct r_scoperec): Remove.
+       (struct link_map): Replace l_scoperec with l_scope, l_scoperec_mem
+       with l_scope_mem and l_scoperec_lock with l_scope_lock.
+
+2006-10-18  Ulrich Drepper  <drepper@redhat.com>
+
+       * elf/dl-lookup.c (_dl_lookup_symbol_x): Add warning to
+       _dl_lookup_symbol_x code.
+
+2006-10-17  Jakub Jelinek  <jakub@redhat.com>
+
+       * elf/dl-runtime.c: Include sysdep-cancel.h.
+       (_dl_fixup, _dl_profile_fixup): Use __rtld_mrlock_* and
+       scoperec->nusers only if !SINGLE_THREAD_P.
+       * elf/dl-sym.c: Include sysdep-cancel.h.
+       (do_sym): Use __rtld_mrlock_* and scoperec->nusers only
+       if !SINGLE_THREAD_P.
+       * elf/dl-close.c: Include sysdep-cancel.h.
+       (_dl_close): Use __rtld_mrlock_* and scoperec->nusers only
+       if !SINGLE_THREAD_P.
+       * elf/dl-open.c: Include sysdep-cancel.h.
+       (dl_open_worker): Use __rtld_mrlock_* and scoperec->nusers only
+       if !SINGLE_THREAD_P.
+
+2006-10-09  Ulrich Drepper  <drepper@redhat.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       Implement reference counting of scope records.
+       * elf/dl-close.c (_dl_close): Remove all scopes from removed objects
+       from the list in objects which remain.  Always allocate new scope
+       record.
+       * elf/dl-open.c (dl_open_worker): When growing array for scopes,
+       don't resize, allocate a new one.
+       * elf/dl-runtime.c: Update reference counters before using a scope
+       array.
+       * elf/dl-sym.c: Likewise.
+       * elf/dl-libc.c: Adjust for l_scope name change.
+       * elf/dl-load.c: Likewise.
+       * elf/dl-object.c: Likewise.
+       * elf/rtld.c: Likewise.
+       * include/link.h: Include <rtld-lowlevel.h>.  Define struct
+       r_scoperec.  Replace r_scope with pointer to r_scoperec structure.
+       Add l_scoperec_lock.
+       * sysdeps/generic/ldsodefs.h: Include <rtld-lowlevel.h>.
+       * sysdeps/generic/rtld-lowlevel.h: New file.
+
+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-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
+       (PRINT_FPHEX_LONG_DOUBLE): Fix printing numbers where lower double
+       is non-zero, but smaller than 2 * __DBL_MIN__.
+       * stdio-common/tst-sprintf2.c: New test.
+       * stdio-common/Makefile (tests): Add tst-sprintf2.
+
+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-05-29  Ulrich Drepper  <drepper@redhat.com>
+
+       * nscd/nscd_helper.c (get_mapping): Handle short replies instead
+       of crashing.  When this is the case or if the reply is malformed,
+       don't try to close the new file descriptor since it does not
+       exist.
+       Patch in part by Guillaume Chazarain <guichaz@yahoo.fr>.
+
+2007-05-21  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #4514]
+       * stdio-common/vfprintf.c (vfprintf): Don't shadow workstart variable,
+       reinitialize workend at the start of each do_positional format spec
+       loop, free workstart before do_positional loops.
+       (printf_unknown): Fix size of work_buffer.
+       * stdio-common/tst-sprintf.c (main): Add 3 new testcases.
+
+2007-05-10  Ulrich Drepper  <drepper@redhat.com>
+
+       * include/sys/cdefs.h: Redefine __nonnull so that test for
+       incorrect parameters in the libc code itself are not omitted.
+
+2007-05-07  Ulrich Drepper  <drepper@redhat.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       * malloc/arena.c (heap_info): Add mprotect_size field, adjust pad.
+       (new_heap): Initialize mprotect_size.
+       (grow_heap): When growing, only mprotect from mprotect_size till
+       new_size if mprotect_size is smaller.  When shrinking, use PROT_NONE
+       MMAP for __libc_enable_secure only, otherwise use MADV_DONTNEED.
+
+2007-05-06  Ulrich Drepper  <drepper@redhat.com>
+
+       * stdio-common/vfprintf.c (process_string_arg): Optimize
+       ridiculous precision in wide char code printing multi-byte string.
+       Reported by Jim Meyering <jim@meyering.net>.
+
+2007-05-06  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4465]
+       * posix/unistd.h: Remove __THROW from fdatasync.
+
+2007-05-06  Mike Frysinger  <vapier@gentoo.org>
+
+       [BZ #4465]
+       * sysdeps/unix/sysv/linux/syscalls.list (fdatasync): Add "C" to args.
+
+2007-05-06  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4131]
+       * elf/dl-addr.c (_dl_addr): Compare address with actual segment
+       boundaries to work around systems with overlapping binary loading.
+       Based on a patch by Suzuki <suzuki@in.ibm.com>.
+
+2007-05-04  Ulrich Drepper  <drepper@redhat.com>
+
+       * stdio-common/vfprintf.c (process_string_arg): Adjust call to
+       __mbsnrtowcs after last change.
+
+2007-05-02  Jakub Jelinek  <jakub@redhat.com>
+
+       * stdio-common/vfprintf.c (process_string_arg): Use a VLA rather than
+       fixed length array for ignore.
+
+2007-04-30  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4438]
+       * stdio-common/vfprintf.c (process_string_arg): Don't overflow the
+       stack for large precisions.
+       * stdio-common/test-vfprintf.c (main): Add test for large
+       precision.
+
+2007-04-30  Jakub Jelinek  <jakub@redhat.com>
+
+       * stdio-common/printf_fp.c (___printf_fp): Don't print negative sign
+       for exponent 0.
+       * stdio-common/tfformat.c (sprint_doubles): Add a new test.
+
+2007-04-30  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #4439]
+       * resolv/inet_ntop.c (inet_ntop4): Take terminating '\0' into
+       account in the size check.
+       * resolv/tst-inet_ntop.c: New test.
+       * resolv/Makefile (tests): Add tst-inet_ntop.
+
+2007-04-28  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4102]
+       * sysdeps/posix/getaddrinfo.c (default_labels): Assign separate
+       label to Teredo tunnel addresses 2001://32.
+
+2007-04-27  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4342]
+       * stdio-common/vfscanf.c (_IO_vfscanf_internal): Allow
+       hexa-decimal floats without exponent.
+       * stdio-common/tstscanf.c (main): Adjust Test 8 test for success.
+
+2007-04-27  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3213]
+       * locale/C-translit.h.in: Add entry for U2044.
+
+2007-04-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/check_pf.c (make_request): Return -1 instead
+       of 0 after the out_fail label.
+
+2007-03-18  Jakub Jelinek  <jakub@redhat.com>
+
+       * nscd/gai.c: Include alloca.h.
+       (__libc_use_alloca): Define.
+
+2007-03-15  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_request): Never
+       reallocate the buffer, instead fail for MSG_TRUNC or for EBUSY
+       NLMSG_ERR.  Instead use a page sized buffer.
+       * sysdeps/unix/sysv/linux/check_pf.c (make_request): Use page sized
+       buffer.
+
+2007-03-02  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_request): Retry with
+       a new netlink socket if NLMSG_ERR -EBUSY is seen after some MSG_TRUNC
+       message.
+
+2007-02-27  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/ifaddrs.c (__netlink_request): Fix
+       memory reallocation.
+
+2007-04-25  Jakub Jelinek  <jakub@redhat.com>
+
+       * libio/bits/stdio.h (fgetc_unlocked): Add extern inline optimized
+       version.
+
+2007-04-25  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4406]
+       * iconv/gconv_charset.h (strip): Allow ':'
+       * iconv/iconv_open.c (iconv_open): Adjust comment.
+
+2007-04-23  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #4405]
+       * iconvdata/gconv-modules (E13B): Add a missing slash to the alias
+       name.  Patch by Aurelien Jarno <aurelien@aurel32.net>.
+
+2007-04-23  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #4381]
+       * nss/nss_files/files-hosts.c (HOST_DB_LOOKUP): Ensure sufficient
+       alignment of buffer and tmp_buffer.
+       * nis/nss_nis/nis-hosts.c (internal_nis_gethostent_r,
+       internal_gethostbyname2_r, _nss_nis_gethostbyaddr_r): Ensure sufficient
+       alignment of buffer.
+       * resolv/nss_dns/dns-hosts.c (getanswer_r): Likewise.  Handle buflen
+       bigger than INT_MAX.
+       * resolv/nss_dns/dns-network.c (getanswer_r): Likewise.  Add errnop and
+       h_errnop arguments.  Fail if buflen is too small.
+       (_nss_dns_getnetbyname_r, _nss_dns_getnetbyaddr_r): Adjust callers.
+
+2007-04-19  Ulrich Drepper  <drepper@redhat.com>
+
+       * include/sys/mman.h: Mark madvise hidden.
+       * misc/madvise.c: Add libc_hidden_def.
+
+2007-04-17  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4368]
+       * stdlib/stdlib.h: Remove obsolete part of comment for realpath.
+
+2007-04-16  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4364]
+       * posix/unistd.h (_XOPEN_VERSION): Define appropriately for SUSv3.
+
+2007-04-13  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #4344]
+       * elf/ldconfig.c (search_dir): Fix 2 off-by-2 errors.
+       Reported by David Anderson <davea42@earthlink.net>.
+
+2007-04-13  Jakub Jelinek  <jakub@redhat.com>
+
+       * stdio-common/printf_fp.c (___printf_fp): Fix exponent -4
+       special case handling when wcp == wstartp + 1.  Fix a comment typo.
+       * stdio-common/tfformat.c (sprint_doubles): Add a new testcase.
+
+2007-02-21  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4070]
+       * stdio-common/printf_fp.c (___printf_fp): Handle a few more
+       special cases.
+       * stdio-common/tfformat.c (sprint_doubles): Some more tests.
+
+2007-02-19  Ulrich Drepper  <drepper@redhat.com>
+
+       * stdio-common/printf_fp.c (___printf_fp): Cleanups and minor
+       optimization.
+
+2007-04-06  Jakub Jelinek  <jakub@redhat.com>
+
+       * nis/nis_domain_of.c (__nis_domain_of): New function.
+       * include/rpcsvc/nislib.h (__nis_domain_of): New prototype.
+       * nis/nis_lookup.c (nis_lookup): Use __nis_domain_of.
+       * nis/nis_call.c (rec_dirsearch): Likewise.
+       (first_shoot): Likewise.  Remove search_parent_first argument.
+       (struct nis_server_cache): Rename search_parent_first field
+       to search_parent.
+       (nis_server_cache_search, nis_server_cache_add): Rename
+       search_parent_first argument to search_parent.
+       (__nisfind_server): Likewise.  If search_parent, call
+       __nis_domain_of.
+
+2007-04-05  Jakub Jelinek  <jakub@redhat.com>
+
+       * nis/nis_call.c (__nisfind_server): Replace (*dir)->do_servers
+       with obj->do_servers after first_shoot.
+
+2007-03-21  Jakub Jelinek  <jakub@redhat.com>
+
+       * nis/nis_call.c: Include bits/libc-lock.h, sys/stat.h, unistd.h.
+       (nis_server_cache, nis_server_cache_lock, nis_cold_start_mtime): New
+       variables.
+       (nis_server_cache_search, nis_server_cache_add): New functions.
+       (__nisfind_server): Use them.  Add dbp and flags argument, if
+       call __nisbind_create.
+       (__nisbind_create): Add server_used and current_ep arguments,
+       only call __nis_findfastest if server_used is ~0.
+       (__do_niscall2, __prepare_niscall): Adjust callers.
+       (ckey_cache, ckey_cache_size, ckey_cache_allocated, ckey_cache_pid,
+       ckey_cache_euid, ckey_cache_lock): New variables.
+       (get_ckey): New function.
+       (__nisbind_connect): If not dbp->use_udp, pass IPPROTO_TCP to
+       __pmap_getnisport.  Save __pmap_getnisport result in
+       dbp->addr.sin_port if non-zero.  Use get_ckey to create conversation
+       key.
+       * nis/nis_lookup.c (nis_lookup): Likewise.
+       * nis/nis_table.c (nis_list): Likewise.
+       * nis/rpcsvc/nislib.h (__nisbind_create, __nisfind_server): Adjust
+       prototypes.
+
+       * nis/nss_nisplus/nisplus-pwd.c (_nss_nisplus_getpwnam_r,
+       _nss_nisplus_getpwuid_r): Pass USE_DGRAM flag to nis_list.
+       * nis/nss_nisplus/nisplus-service.c (_nss_nisplus_getservbyname_r,
+       _nss_nisplus_getservbyport_r): Likewise.
+       * nis/nss_nisplus/nisplus-network.c (_nss_nisplus_getnetbyname_r,
+       _nss_nisplus_getnetbyaddr_r): Likewise.
+       * nis/nss_nisplus/nisplus-spwd.c (_nss_nisplus_getspnam_r): Likewise.
+       * nis/nss_nisplus/nisplus-ethers.c (_nss_nisplus_gethostton_r,
+       _nss_nisplus_getntohost_r): Likewise.
+       * nis/nss_nisplus/nisplus-rpc.c (_nss_nisplus_getrpcbyname_r,
+       _nss_nisplus_getrpcbynumber_r): Likewise.
+
+2007-04-01  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/ia64/fpu/fesetround.c (fesetround): Return 0 on success
+       and 1 on failure.
+
+2007-04-01  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c (__nextafterl): Use
+       math_opt_barrier and math_force_eval macros.
+
+2007-03-27  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #3306]
+       * math/math_private.h (math_opt_barrier, math_force_eval): Define.
+       * sysdeps/i386/fpu/math_private.h: New file.
+       * sysdeps/x86_64/fpu/math_private.h: New file.
+       * math/s_nexttowardf.c (__nexttowardf): Use math_opt_barrier and
+       math_force_eval macros.  Use "+m" constraint on asm rather than
+       "=m" and "m".
+       * math/s_nextafter.c (__nextafter): Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c (__nexttoward):
+       Likewise.
+       * sysdeps/ieee754/flt-32/s_nextafterf.c (__nextafterf): Likewise.
+       * sysdeps/ieee754/ldbl-128/s_nexttoward.c (__nexttoward): Likewise.
+       * sysdeps/ieee754/ldbl-96/s_nexttoward.c (__nexttoward): Likewise.
+       * sysdeps/i386/fpu/s_nextafterl.c (__nextafterl): Use
+       math_opt_barrier and math_force_eval macros.
+       * sysdeps/ieee754/ldbl-128/s_nextafterl.c (__nextafterl): Likewise.
+       * sysdeps/ieee754/ldbl-96/s_nextafterl.c (__nextafterl): Likewise.
+       * sysdeps/i386/fpu/s_nexttoward.c: Include float.h.
+       (__nexttoward): Use math_opt_barrier and
+       math_force_eval macros.  Use "+m" constraint on asm rather than
+       "=m" and "m".  Only use asm to force double result if
+       FLT_EVAL_METHOD is 2.
+       * sysdeps/i386/fpu/s_nexttowardf.c: Include float.h.
+       (__nexttowardf): Use math_opt_barrier and
+       math_force_eval macros.  Use "+m" constraint on asm rather than
+       "=m" and "m".  Only use asm to force double result if
+       FLT_EVAL_METHOD is not 0.
+       * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c: Include float.h.
+       (__nexttowardf): Use math_opt_barrier and
+       math_force_eval macros.  If FLT_EVAL_METHOD is not 0, force
+       x to float using asm.
+       * sysdeps/ieee754/ldbl-opt/s_nexttowardfd.c: Include float.h.
+       (__nldbl_nexttowardf): Use math_opt_barrier and
+       math_force_eval macros.  If FLT_EVAL_METHOD is not 0, force
+       x to float using asm.
+       * sysdeps/ieee754/ldbl-96/s_nexttowardf.c: Include float.h.
+       (__nexttowardf): Use math_opt_barrier and math_force_eval
+       macros.  If FLT_EVAL_METHOD is not 0, force x to float using asm.
+       * math/bug-nextafter.c (zero, inf): New variables.
+       (main): Add new tests.
+       * math/bug-nexttoward.c (zero, inf): New variables.
+       (main): Add new tests.
+
+2007-03-30  Jakub Jelinek  <jakub@redhat.com>
+
+       * libio/libio.h (__underflow, __uflow, __overflow, __wunderflow,
+       __wuflow, __woverflow, _IO_getc, _IO_putc, _IO_peekc_locked, _IO_padn,
+       _IO_sgetn, _IO_seekoff, _IO_seekpos, _IO_getwc, _IO_putwc, _IO_wpadn):
+       Remove __THROW.
+       * libio/fileops.c (new_do_write, _IO_file_xsgetn_mmap,
+       _IO_file_xsgetn_maybe_mmap): Likewise.
+       * libio/oldfileops.c (old_do_write): Likewise.
+       * libio/libioP.h (_IO_switch_to_get_mode, _IO_switch_to_wget_mode,
+       _IO_init_marker, _IO_init_wmarker, _IO_default_uflow,
+       _IO_wdefault_uflow, _IO_default_setbuf, _IO_default_seekpos,
+       _IO_do_write, _IO_new_do_write, _IO_old_do_write, _IO_wdo_write,
+       _IO_flush_all_lockp, _IO_flush_all, _IO_cleanup,
+       _IO_flush_all_linebuffered, _IO_new_fgetpos, _IO_old_fgetpos,
+       _IO_new_fsetpos, _IO_old_fsetpos, _IO_new_fgetpos64,
+       _IO_old_fgetpos64, _IO_new_fsetpos64, _IO_old_fsetpos64,
+       _IO_file_setbuf, _IO_file_seekoff, _IO_file_xsputn, _IO_file_xsgetn,
+       _IO_file_underflow, _IO_file_underflow_mmap,
+       _IO_file_underflow_maybe_mmap, _IO_file_overflow, _IO_file_attach,
+       _IO_file_open, _IO_file_fopen, _IO_file_write, _IO_file_read,
+       _IO_file_sync, _IO_file_close_it, _IO_file_finish,
+       _IO_new_file_attach, _IO_new_file_close_it, _IO_new_file_finish,
+       _IO_new_file_fopen, _IO_new_file_setbuf, _IO_file_setbuf_mmap,
+       _IO_new_file_sync, _IO_new_file_underflow, _IO_new_file_overflow,
+       _IO_new_file_seekoff, _IO_new_file_write, _IO_new_file_xsputn,
+       _IO_old_file_setbuf, _IO_old_file_seekoff, _IO_old_file_xsputn,
+       _IO_old_file_underflow, _IO_old_file_overflow, _IO_old_file_attach,
+       _IO_old_file_fopen, _IO_old_file_write, _IO_old_file_sync,
+       _IO_old_file_close_it, _IO_old_file_finish, _IO_wfile_xsputn,
+       _IO_wfile_setbuf, _IO_wfile_sync, _IO_wfile_underflow,
+       _IO_wfile_overflow, _IO_wfile_seekoff, _IO_old_proc_open,
+       _IO_old_proc_close, _IO_getdelim, _IO_flush_all_internal,
+       _IO_adjust_column_internal, _IO_default_uflow_internal,
+       _IO_default_xsgetn_internal, _IO_wdefault_xsputn_internal,
+       _IO_wdefault_xsgetn_internal, _IO_wdefault_uflow_internal,
+       _IO_file_setbuf_internal, _IO_file_seekoff_internal,
+       _IO_file_xsputn_internal, _IO_file_xsgetn_internal,
+       _IO_file_close_it_internal, _IO_file_underflow_internal,
+       _IO_file_overflow_internal, _IO_file_attach_internal,
+       _IO_file_fopen_internal, _IO_file_sync_internal,
+       _IO_file_finish_internal, _IO_wfile_xsputn_internal,
+       _IO_wfile_seekoff_internal, _IO_wfile_sync_internal,
+       _IO_switch_to_wget_mode_internal, _IO_padn_internal,
+       _IO_switch_to_get_mode_internal, _IO_seekoff_unlocked,
+       _IO_seekpos_unlocked): Likewise.
+       (_IO_strtod, _IO_dtoa, _IO_outfloat, _IO_read, _IO_write,
+       _IO_lseek, _IO_close, _IO_fstat): Remove unused prototypes.
+
+2007-03-23  Jakub Jelinek  <jakub@redhat.com>
+
+       * scripts/check-local-headers.sh: Filter out sys/capability.h.
+
+2007-03-22  Jakub Jelinek  <jakub@redhat.com>
+
+       * config.h.in (HAVE_LIBCAP): Add.
+       * nscd/selinux.h: Include sys/capability.h rather than non-existent
+       sys/capabilities.h.
+       * nscd/selinux.c (preserve_capabilities): Use cap_free instead of
+       free_caps.  Cast away const from 4th cap_set_flag argument.
+
+2007-03-16  Jakub Jelinek  <jakub@redhat.com>
+
+       * elf/dl-open.c (dl_open_worker): Declare l in 2 different
+       smaller scopes.
+       * elf/dl-dst.h (DL_DST_REQ_STATIC): Add l as macro argument.
+       (DL_DST_REQUIRED): Adjust user.
+
+2007-03-15  Jakub Jelinek  <jakub@redhat.com>
+
+       * locale/programs/ld-ctype.c (find_translit): Return NULL if ctype is
+       NULL.
+
+2007-03-15  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #4181]
+       * inet/inet6_opt.c (add_padding): Only insert padding if npad > 0.
+       (inet6_opt_append): Don't check extlen is big enough if extbuf
+       is NULL.
+       (inet6_opt_finish): Likewise.
+       * inet/Makefile (tests): Add test-inet6_opt.
+       * inet/test-inet6_opt.c: New test.
+
+2007-03-15  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #4130]
+       * login/utmp_file.c (setutent_file): Use O_LARGEFILE for
+       open_not_cancel_2.
+       (updwtmp_file): Likewise.
+
+2007-03-15  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #4101]
+       * argp/argp-help.c (hol_cluster_cmp): Fix comparisons used to find
+       ancestors with the same depths.
+       Patch by Niels Moeller <nisse@lysator.liu.se>.
+       (filter_doc): Don't crash if argp is NULL.
+       * argp/Makefile (tests): Add tst-argp2.
+       * argp/tst-argp2.c: New test.
+
+2007-03-15  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #3919]
+       * math/libm-test.inc (log_test): Test -Inf and NaN.
+       (log10_test, log1p_test, log2_test): Test -Inf.
+       * sysdeps/i386/fpu/e_log.S (__ieee754_log): Don't raise
+       FE_INVALID when argument is qNaN.
+       * sysdeps/i386/fpu/e_logl.S (__ieee754_logl): Likewise.
+       * sysdeps/i386/fpu/e_logf.S (__ieee754_logf): Likewise.
+       * sysdeps/x86_64/fpu/e_logl.S (__ieee754_logl): Likewise.
+       * sysdeps/x86_64/fpu/e_log10l.S (__ieee754_log10l): Replace
+       andb $1, %ah with testb $1, %ah, don't test for parity, instead
+       testb $4, %ah and jump if non-zero.
+       * sysdeps/x86_64/fpu/e_log2l.S (__ieee754_log2l): Likewise.
+       * sysdeps/x86_64/fpu/s_log1pl.S (__log1pl): Likewise.
+
+2007-03-06  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/posix/getaddrinfo.c (get_scope): Correct test for
+       172.16/12 address range.
+
+2007-03-01  Jakub Jelinek  <jakub@redhat.com>
 
-       * sysdeps/i386/soft-fp/sfp-machine.h: Remove.
-       * sysdeps/x86_64/soft-fp/sfp-machine.h: Likewise.
+       [BZ #4069]
+       * sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Check for NaN
+       earlier.
+       * math/libm-test.inc (pow_test): Add more tests involving NaNs.
+
+       * sysdeps/i386/fpu/e_powf.S (__ieee754_powf): Avoid invalid exception
+       for x qNaN and y either +-inf or non-integer value.
+       * sysdeps/i386/fpu/e_pow.S (__ieee754_pow): Likewise.
+       * sysdeps/i386/fpu/e_powl.S (__ieee754_powl): Likewise.
+       * sysdeps/x86_64/fpu/e_powl.S (__ieee754_powl): Likewise.
+
+2007-02-21  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4076]
+       * io/ftw.c (ftw_startup): Handle special case of FTW_CHDIR in /.
+       (open_dir_stream): Likewise.
+       * io/Makefile (tests): Add bug-ftw5.
+       * io/bug-ftw5.c: New file.
+
+2007-02-21  Ulrich Drepper  <drepper@redhat.com>
+
+       * nscd/grpcache.c (cache_addgr): In case a record changed on
+       refresh, adjust key_copy.
+
+       [BZ #4074]
+       * nscd/pwdcache.c (cache_addpw): In case a record changed on
+       refresh, adjust key_copy.
+
+2007-02-21  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3458]
+       * sysdeps/unix/sysv/linux/posix_madvise.c: New file.
+       * sysdeps/unix/sysv/linux/syscalls.list: Remove posix_madvise entry.
+
+2007-02-17  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3842]
+       * sysdeps/posix/euidaccess.c [_LIBC] (euidaccess): Remove shortcut
+       using __libc_enable_secure.
+
+2007-02-17  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3348]
+       * malloc/memusage.sh: Cleanups.
+       * debug/xtrace.sh: Quoting and trap changes.
+
+2007-02-16  Ulrich Drepper  <drepper@redhat.com>
+
+       * locale/iso-3166.def: Add entry for Serbia.
+       * locale/iso-4217.def: Define RSD.
+
+2007-02-15  Ulrich Drepper  <drepper@redhat.com>
+
+       * nscd/nscd_helper.c (open_socket): Don't send padding bytes from
+       reqdata.
+
+2007-02-13  Ulrich Drepper  <drepper@redhat.com>
+
+       * po/ru.po: Update from translation team.
+
+2007-02-03  Ulrich Drepper  <drepper@redhat.com>
+
+       * po/sv.po: Update from translation team. 
+
+2007-02-12  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/i386/bits/byteswap.h (__bswap_32): Add __amdfam10__
+       to the list of i486+ CPUs.
+       * sysdeps/x86_64/bits/byteswap.h (__bswap_32): Likewise.
+
+2007-01-24  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/i386/bits/byteswap.h (__bswap_32): Add __nocona__, __core2__
+       and __geode__ to the list of i486+ CPUs.
+       * sysdeps/x86_64/bits/byteswap.h (__bswap_32): Likewise.
+
+2007-02-08  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #3944]
+       * time/strptime_l.c (__strptime_internal): Set have_mon for
+       %b/%B/%h.  Set have_mon and have_mday if tm_mon and tm_mday
+       have been computed from tm_yday and tm_year.  Don't crash
+       in day_of_the_week or day_of_the_year if not have_mon
+       and tm_mon contains bogus value.
+       * time/Makefile (tests): Add tst-strptime3.
+       * time/tst-strptime3.c: New test.
+
+2007-02-05  Jakub Jelinek  <jakub@redhat.com>
+
+       [BZ #3957]
+       * posix/regcomp.c (parse_bracket_exp): Set '\n' bit rather than '\0'
+       bit for RE_HAT_LISTS_NOT_NEWLINE.
+       (build_charclass_op): Remove bogus comment.
+       * posix/Makefile (tests): Add bug-regex27 and bug-regex28.
+       * posix/bug-regex27.c: New test.
+       * posix/bug-regex28.c: New test.
+
+2007-02-02  Bruno Haible  <bruno@clisp.org>
+
+       [BZ #3954]
+       * iconvdata/ksc5601.c (__ksc5601_sym_to_ucs, __ksc5601_sym_from_ucs):
+       Add mapping for U+327E.
+       * iconvdata/ksc5601.h (KSC5601_SYMBOL): Increment.
+       * iconvdata/johab.c (BODY for FROM_LOOP, BODY for TO_LOOP): Enable
+       mapping of 0xD9 0xE8.
+       * iconvdata/uhc.c (BODY for FROM_LOOP, BODY for TO_LOOP): Disable
+       mapping of U+327E.
+       Reported by Jungshik Shin <jungshik@google.com>.
+
+       [BZ #3955]
+       * iconvdata/johab.c (BODY for FROM_LOOP, BODY for TO_LOOP): Enable
+       mapping of 0xD9 0xE6 and of 0xD9 0xE7.
+       Reported by Jungshik Shin <jungshik@google.com>.
+
+2007-01-31  Jakub Jelinek  <jakub@redhat.com>
+
+       * nscd/nscd-client.h (__nscd_cache_search): Remove const qualifier
+       from return value.
+       * nscd/nscd_helper.c: Include string.h.
+       (__nscd_cache_search): Remove const qualifier from return value.
+       On strict alignment architectures check hash entry and data head
+       alignment.
+       * nscd/nscd_getpw_r.c (nscd_getpw_r): Don't crash or fail because
+       mmapped data during GC cycle contains garbage.  If
+       __nscd_drop_map_ref fails, decrement mapped->counter when returning
+       error or if retrying with NO_MAPPING, only __nscd_unmap if counter
+       dropped to 0.
+       * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise.
+       * nscd/nscd_initgroups.c (__nscd_getgrouplist): Likewise.
+       * nscd/nscd_gethst_r.c (nscd_gethst_r): Likewise.
+       * nscd/nscd_getai.c (__nscd_getai): Likewise.
+
+2007-01-22  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3902]
+       * stdio-common/_itoa.c (_itoa): Make sure at least a zero is emitted.
+       * stdio-common/Makefile (tests): Add bug17.
+       * stdio-common/bug17.c: New file.
+
+2007-01-15  Jakub Jelinek  <jakub@redhat.com>
+
+       * soft-fp/op-common.h (FP_TRUNC): When truncating a NaN, clear
+       workbits in semi-raw fraction.
+
+       * math/test-misc.c: Add new tests.
+
+2007-01-14  Steven Munroe  <sjmunroe@us.ibm.com>
+
+       * math/basic-test.c: Include test-skeleton.c.
+       (TEST_TRUNC): Define.
+       (truncdfsf_test, trunctfsf_test, trunctfdf_test): New.
+       (main): Rename to ...
+       (do_test): ...this.  Run new tests.
+       (TEST_FUNCTION): Define.
+
+2006-10-05  Steven Munroe  <sjmunroe@us.ibm.com>
+           Joe Kerian  <jkerian@us.us.ibm.com>
+
+       [BZ #2749]
+       * soft-fp/op-4.h (__FP_FRAC_SUB_3, __FP_FRAC_SUB_4): Correct borrow
+       handling for high words.
+       * soft-fp/op-common.h (_FP_OVERFLOW_SEMIRAW): Always set inexact
+       and overflow for infinity.
+
+2007-01-13  Ulrich Drepper  <drepper@redhat.com>
+
+       * nis/nss_nis/nis-service.c (_nss_nis_getservbyname_r): Correct
+       computation of keylen.
 
 2007-01-10  Ulrich Drepper  <drepper@redhat.com>
 
        fts_read.
        Patch by Miloslav Trmac <mitr@redhat.com>.
 
-2006-10-27  Richard Sandiford  <richard@codesourcery.com>
-
-       * elf/elf.h (R_MIPS_GLOB_DAT): Define.
-       (R_MIPS_NUM): Bump by 1.
-
 2007-01-03  Jakub Jelinek  <jakub@redhat.com>
 
        * posix/execvp.c: Include alloca.h.
        * posix/Makefile: Add rules to build and run tst-vfork3 test.
        * posix/tst-vfork3.c: New test.
 
+2007-01-05  Steven Munroe  <sjmunroe@us.ibm.com>
+
+       * stdlib/tst-makecontext.c: Include errno.h.  Change main()
+       to do_test().  Define TEST_FUNCTION. Include test-skeleton.c.
+       (do_test): Check errno and exit(0) if ENOSYS.
+
+2007-01-11  Jakub Jelinek  <jakub@redhat.com>
+
+       * stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix handling of multi-byte
+       thousands separators.
+       * stdlib/Makefile: Add rules to build and run tst-strtod4.
+       * stdlib/tst-strtod4.c: New test.
+
+       [BZ #3855]
+       * stdlib/strtod_l.c (____STRTOF_INTERNAL): 0x. not followed by
+       hexadecimal digit should accept just the initial 0.
+       * stdlib/tst-strtod2.c (tests): New variable.
+       (do_test): Run several tests rather than just one.
+
 2007-01-03  Ulrich Drepper  <drepper@redhat.com>
 
-       * string/Makefile (tst-strxfrm2-ENV): Define.
        * stdlib/Makefile (tst-strtod3-ENV): Define.
 
-2007-01-02  Ulrich Drepper  <drepper@redhat.com>
+2006-12-11  Ulrich Drepper  <drepper@redhat.com>
+
+       * stdlib/strtod_l.c (____STRTOF_INTERNAL): Parse thousand
+       separators also if no non-zero digits found.
+       * stdlib/Makefile (tests): Add tst-strtod3.
+
+2006-12-09  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3664]
+       * stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix test to recognize
+       empty parsed strings.
+       * stdlib/Makefile (tests): Add tst-strtod2.
+       * stdlib/tst-strtod2.c: New file.
+
+       [BZ #3673]
+       * stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix exp_limit
+       computation.
+       * stdlib/Makefile (tests): Add tst-atof2.
+       * stdlib/tst-atof2.c: New file.
+
+       [BZ #3674]
+       * stdlib/strtod_l.c (____STRTOF_INTERNAL): Adjust exponent value
+       correctly if removing trailing zero of hex-float.
+       * stdlib/Makefile (tests): Add tst-atof1.
+       * stdlib/tst-atof1.c: New file.
+
+2007-01-03  Ulrich Drepper  <drepper@redhat.com>
+
+       * string/Makefile (tst-strxfrm2-ENV): Define.
+
+2006-11-10  Jakub Jelinek  <jakub@redhat.com>
 
-       * posix/getconf.c: Update copyright year.
-       * nss/getent.c: Likewise.
-       * iconv/iconvconfig.c: Likewise.
-       * iconv/iconv_prog.c: Likewise.
-       * elf/ldconfig.c: Likewise.
-       * catgets/gencat.c: Likewise.
-       * csu/version.c: Likewise.
-       * elf/ldd.bash.in: Likewise.
-       * elf/sprof.c (print_version): Likewise.
-       * locale/programs/locale.c: Likewise.
-       * locale/programs/localedef.c: Likewise.
-       * nscd/nscd.c (print_version): Likewise.
-       * debug/xtrace.sh: Likewise.
-       * malloc/memusage.sh: Likewise.
-       * malloc/mtrace.pl: Likewise.
-       * debug/catchsegv.sh: Likewise.
+       * string/strxfrm_l.c (STRXFRM): Fix trailing \1 optimization
+       if N is one bigger than return value.
+       * string/tst-strxfrm2.c (do_test): Also test strxfrm with l1 + 1
+       and l1 last arguments, if buf is defined, verify the return value
+       equals to strlen (buf) and verify no byte beyond passed length
+       is modified.
 
-2006-12-24  Ulrich Drepper  <drepper@redhat.com>
+2006-11-09  Ulrich Drepper  <drepper@redhat.com>
 
-       * malloc/malloc.c (sYSMALLOc): Remove some unnecessary alignment
-       attempts.
+       * string/Makefile (tests): Add tst-strxfrm2.
+       * string/tst-strxfrm2.c: New file.
 
-2006-12-23  Ulrich Drepper  <drepper@redhat.com>
+2006-11-08  Jakub Jelinek  <jakub@redhat.com>
 
-       * posix/wordexp.c: Remove some unnecessary tests.
+       * string/strxfrm_l.c (STRXFRM): Do the trailing \1 removal
+       optimization even if needed > n.
 
 2006-12-22  Gavin Romig-Koch  <gavin@redhat.com>
 
 
        * include/atomic.h (atomic_forced_read): New macro.
 
-2006-12-20  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
-
-       * sysdeps/unix/sysv/linux/sh/bits/shm.h: New file.
-
 2006-12-19  Jakub Jelinek  <jakub@redhat.com>
 
-       * nss/getXXbyYY_r.c: Include atomic.h.
-       (INTERNAL (REENTRANT_NAME)): Write startp after start_fct,
-       add atomic_write_barrier () in between.
-
        * stdlib/Makefile (tests): Add tst-makecontext.
        * stdlib/tst-makecontext.c: New test.
 
        * sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S
        (__makecontext): Don't realign uc_mcontext.uc_regs.
 
-2006-11-28  Jakub Jelinek  <jakub@redhat.com>
+2006-12-13  Jakub Jelinek  <jakub@redhat.com>
 
-       * elf/dl-support.c: Include dl-procinfo.h.
-       * sysdeps/powerpc/dl-procinfo.h (PPC_PLATFORM_POWER4,
-       PPC_PLATFORM_PPC970, PPC_PLATFORM_POWER5, PPC_PLATFORM_POWER5_PLUS,
-       PPC_PLATFORM_POWER6, PPC_PLATFORM_CELL_BE, PPC_PLATFORM_POWER6X):
-       Define.
-       (_dl_string_platform): Use PPC_PLATFORM_* macros instead of
-       hardcoded constants.
-       * sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_platform): Use
-       PPC_PLATFORM_* macros for array designators.
+       * sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S: Include
+       kernel-features.h.
 
-2006-11-11  Steven Munroe  <sjmunroe@us.ibm.com>
+2006-12-19  Jakub Jelinek  <jakub@redhat.com>
 
-       * sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_cap_flags): Add 3 new cap
-       names to the beginning.
-       (_dl_powerpc_platforms): Add "power6x".
-       * sysdeps/powerpc/dl-procinfo.h (_DL_HWCAP_FIRST): Decrease.
-       (HWCAP_IMPORTANT): Add PPC_FEATURE_HAS_DFP.
-       (_DL_PLATFORMS_COUNT): Increase.
-       (_dl_string_platform): Handle power6x case.
-       * sysdeps/powerpc/sysdep.h (PPC_FEATURE_PA6T, PPC_FEATURE_HAS_DFP,
-       PPC_FEATURE_POWER6_EXT): Define.
-       (PPC_FEATURE_POWER5, PPC_FEATURE_POWER5_PLUS): Correct Comment.
+       * nss/getXXbyYY_r.c: Include atomic.h.
+       (INTERNAL (REENTRANT_NAME)): Write startp after start_fct,
+       add atomic_write_barrier () in between.
 
 2006-12-18  Jakub Jelinek  <jakub@redhat.com>
 
        [BZ #3747]
        * stdlib/jrand48_r.c (__jrand48_r): Make sure result is in the
-       [-2^31 .. 2^31) range.
+       [-231 .. 231) range.
        * stdlib/tst-rand48.c (main): Fix expected values for 64-bit
        targets.
        * stdlib/tst-rand48-2.c: New test.
 
 2006-12-13  Ulrich Drepper  <drepper@redhat.com>
 
-       * sysdeps/unix/sysv/linux/bits/statvfs.h: Define ST_RELATIME.
-       * sysdeps/unix/sysv/linux/internal_statvfs.c (__statvfs_getflags):
-       Handle relatime mount option.
-
        [BZ #2337]
        * libio/Makefile (tests): Add tst-setvbuf1.
        * libio/tst-setvbuf1.c: New file.
        * libio/fileops.c (_IO_new_file_close_it): Call _IO_set[bgp]
        even for wide streams.
 
-2006-12-13  Jakub Jelinek  <jakub@redhat.com>
-
-       * sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S: Include
-       kernel-features.h.
-
-2006-12-11  Ulrich Drepper  <drepper@redhat.com>
+2006-12-09  Jakub Jelinek  <jakub@redhat.com>
 
-       * stdlib/strtod_l.c (____STRTOF_INTERNAL): Parse thousand
-       separators also if no non-zero digits found.
-       * stdlib/Makefile (tests): Add tst-strtod3.
+       * misc/mntent_r.c (__hasmntopt): Check p[optlen] even when p == rest.
+       Start searching for next comma at p rather than rest.
+       * misc/Makefile (tests): Add tst-mntent2.
+       * misc/tst-mntent2.c: New test.
 
 2006-12-09  Ulrich Drepper  <drepper@redhat.com>
 
        * include/features.h: Fix comment about default value for
        _POSIX_C_SOURCE.
 
-       [BZ #3664]
-       * stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix test to recognize
-       empty parsed strings.
-       * stdlib/Makefile (tests): Add tst-strtod2.
-       * stdlib/tst-strtod2.c: New file.
-
-       [BZ #3673]
-       * stdlib/strtod_l.c (____STRTOF_INTERNAL): Fix exp_limit
-       computation.
-       * stdlib/Makefile (tests): Add tst-atof2.
-       * stdlib/tst-atof2.c: New file.
-
-       [BZ #3674]
-       * stdlib/strtod_l.c (____STRTOF_INTERNAL): Adjust exponent value
-       correctly if removing trailing zero of hex-float.
-       * stdlib/Makefile (tests): Add tst-atof1.
-       * stdlib/tst-atof1.c: New file.
-
 2006-12-09  Jakub Jelinek  <jakub@redhat.com>
 
-       * misc/mntent_r.c (__hasmntopt): Check p[optlen] even when p == rest.
-       Start searching for next comma at p rather than rest.
-       * misc/Makefile (tests): Add tst-mntent2.
-       * misc/tst-mntent2.c: New test.
-
        * misc/getusershell.c (initshells): Check for integer overflows.
        Make strings buffer one bigger as fgets always succeeds when second
        argument is 1.  Don't use calloc for shells array.  Disallow
-       / as shell.
-
-2006-12-08  Ulrich Drepper  <drepper@redhat.com>
-
-       * malloc/memusage.c: Handle realloc with new size of zero and
-       non-NULL pointer correctly.
-       (me): Really write first record twice.
-       (struct entry): Make format bi-arch safe.
-       (dest): Write out more realloc statistics.
-       * malloc/memusagestat.c (struct entry): Make format bi-arch safe.
+       / as shell.
 
 2006-12-05  Jakub Jelinek  <jakub@redhat.com>
 
        * nis/nis_subr.c (nis_getnames): Revert last change.
 
+2006-10-11  Jakub Jelinek  <jakub@redhat.com>
+
+       * nis/nis_defaults.c (__nis_default_access): Don't call getenv twice.
+
+       * nis/nis_subr.c (nis_getnames): Use __secure_getenv instead of getenv.
+       * sysdeps/generic/unsecvars.h: Add NIS_PATH.
+
 2006-12-04  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/unix/sysv/linux/ttyname.c: Include termios.h.
        * io/Makefile: Add rules to build and run tst-ttyname_r test.
        * io/tst-ttyname_r.c: New test.
 
-2006-12-03  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
-
-       * sysdeps/unix/sysv/linux/sh/sys/io.h: Removed.
-
-2006-11-30  H.J. Lu  <hongjiu.lu@intel.com>
-
-       * sysdeps/i386/i686/memcmp.S: Use jump table as the base of
-       jump table entries.
-
-2006-11-30  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-       * sysdeps/unix/sysv/linux/i386/clone.S: Provide CFI for the outermost
-       `clone' function to ensure proper unwinding stop of gdb.
-       * sysdeps/unix/sysv/linux/x86_64/clone.S: Likewise.
-
-2006-12-01  Ulrich Drepper  <drepper@redhat.com>
-
-       * nscd/nscd.init: Remove obsolete and commented-out -S option
-       handling.
-
-2006-11-23  Jakub Jelinek  <jakub@redhat.com>
-
-       [BZ #3514]
-       * manual/string.texi (strncmp): Fix pastos from wcscmp description.
-
-       [BZ #3515]
-       * manual/string.texi (strtok): Remove duplicate paragraph.
-
-2006-12-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
-
-       * sysdeps/unix/sysv/linux/x86_64/sigaction.c: Fix compatibility with
-       libgcc not supporting `rflags' unwinding (register # >= 17).
-
-2006-11-30  Jakub Jelinek  <jakub@redhat.com>
+2006-11-28  Jakub Jelinek  <jakub@redhat.com>
 
-       * sunrpc/svc_run.c (svc_run): Set my_pollfd to new_pollfd if realloc
-       succeeded.
+       * elf/dl-support.c: Include dl-procinfo.h.
+       * sysdeps/powerpc/dl-procinfo.h (PPC_PLATFORM_POWER4,
+       PPC_PLATFORM_PPC970, PPC_PLATFORM_POWER5, PPC_PLATFORM_POWER5_PLUS,
+       PPC_PLATFORM_POWER6, PPC_PLATFORM_CELL_BE, PPC_PLATFORM_POWER6X):
+       Define.
+       (_dl_string_platform): Use PPC_PLATFORM_* macros instead of
+       hardcoded constants.
+       * sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_platform): Use
+       PPC_PLATFORM_* macros for array designators.
 
-2006-11-29  Daniel Jacobowitz  <dan@codesourcery.com>
-           Jakub Jelinek  <jakub@redhat.com>
-           Jan Kratochvil  <jan.kratochvil@redhat.com>
+2006-11-11  Steven Munroe  <sjmunroe@us.ibm.com>
 
-       * sysdeps/unix/sysv/linux/x86_64/sigaction.c (restore_rt): Add correct
-       unwind information.
-       * sysdeps/unix/sysv/linux/x86_64/Makefile: Provide symbols for
-       'restore_rt' even in the 'signal' directory.
-       * sysdeps/unix/sysv/linux/x86_64/ucontext_i.sym: Extend the regs list.
+       * sysdeps/powerpc/dl-procinfo.c (_dl_powerpc_cap_flags): Add 3 new cap
+       names to the beginning.
+       (_dl_powerpc_platforms): Add "power6x".
+       * sysdeps/powerpc/dl-procinfo.h (_DL_HWCAP_FIRST): Decrease.
+       (HWCAP_IMPORTANT): Add PPC_FEATURE_HAS_DFP.
+       (_DL_PLATFORMS_COUNT): Increase.
+       (_dl_string_platform): Handle power6x case.
+       * sysdeps/powerpc/sysdep.h (PPC_FEATURE_PA6T, PPC_FEATURE_HAS_DFP,
+       PPC_FEATURE_POWER6_EXT): Define.
+       (PPC_FEATURE_POWER5, PPC_FEATURE_POWER5_PLUS): Correct Comment.
 
 2006-11-27  Jakub Jelinek  <jakub@redhat.com>
 
        [BZ #3559]
        * sunrpc/svc_run.c (svc_run): Fail instead of segfaulting if
-       malloc crashed.  Don't allocate memory unnecessarily in each
-       loop.
+       malloc crashed.
 
-2006-10-21  Jakub Jelinek  <jakub@redhat.com>
+2006-11-14  Jakub Jelinek  <jakub@redhat.com>
 
-       * resolv/mapv4v6addr.h (map_v4v6_address): Fix last change.
+       * nss/nss_files/files-alias.c (get_next_alias): Set line back
+       to first_unused after parsing :include: file.
 
-2006-11-20  Ulrich Drepper  <drepper@redhat.com>
+2006-11-14  Ulrich Drepper  <drepper@redhat.com>
 
-       * resolv/mapv4v6addr.h (map_v4v6_address): Optimize a bit.
+       * po/nl.po: Update from translation team.
 
-2006-11-18  Bruno Haible  <bruno@clisp.org>
+2006-11-10  Ulrich Drepper  <drepper@redhat.com>
 
-       * sysdeps/unix/sysv/linux/i386/getgroups.c (__getgroups): Invoke
-       __sysconf only after having tried to call getgroups32.
+       * po/sv.po: Update from translation team.
 
-2006-11-19  Ulrich Drepper  <drepper@redhat.com>
+2006-11-01  Ulrich Drepper  <drepper@redhat.com>
 
-       * nss/nss_files/files-hosts.c (LINE_PARSER): Support IPv6-style
-       addresses for IPv4 queries if they can be mapped.
+       * po/sv.po: Update from translation team.
 
-2006-11-16  Jakub Jelinek  <jakub@redhat.com>
+2006-10-29  Ulrich Drepper  <drepper@redhat.com>
 
-       * sysdeps/x86_64/fpu/s_copysignf.S (__copysignf): Switch to .text.
-       * sysdeps/x86_64/fpu/s_copysign.S (__copysign): Likewise.
-       (signmask): Add .size directive.
-       (othermask): Add .type directive.
+       * po/sv.po: Update from translation team.
 
-2006-11-14  Ulrich Drepper  <drepper@redhat.com>
+2006-10-09  Ulrich Drepper  <drepper@redhat.com>
 
-       * po/nl.po: Update from translation team.
+       * po/sv.po: Update from translation team.
 
-       * timezone/zdump.c: Redo fix for BZ #3137.
+2006-10-07  Ulrich Drepper  <drepper@redhat.com>
 
-2006-11-14  Jakub Jelinek  <jakub@redhat.com>
+       * po/tr.po: Update from translation team.
 
-       * nss/nss_files/files-alias.c (get_next_alias): Set line back
-       to first_unused after parsing :include: file.
+2006-10-06  Ulrich Drepper  <drepper@redhat.com>
 
-2006-11-10  Ulrich Drepper  <drepper@redhat.com>
+       * po/pl.po: Update from translation team.
 
-       * timezone/africa: Update from tzdata2006o.
-       * timezone/antarctica: Likewise.
-       * timezone/asia: Likewise.
-       * timezone/australasia: Likewise.
-       * timezone/backward: Likewise.
-       * timezone/europe: Likewise.
-       * timezone/iso3166.tab: Likewise.
-       * timezone/northamerica: Likewise.
-       * timezone/southamerica: Likewise.
-       * timezone/zone.tab: Likewise.
-
-       * time/tzfile.c (__tzfile_read): Extend to handle new file format
-       on machines with 64-bit time_t.
-
-       * timezone/checktab.awk: Update from tzcode2006o.
-       * timezone/ialloc.c: Likewise.
-       * timezone/private.h: Likewise.
-       * timezone/scheck.c: Likewise.
-       * timezone/tzfile.h: Likewise.
-       * timezone/tzselect.ksh: Likewise.
-       * timezone/zdump.c: Likewise.
-       * timezone/zic.c: Likewise.
-
-       [BZ #3483]
-       * elf/ldconfig.c (main): Call setlocale and textdomain.
-       Patch mostly by Benno Schulenberg <bensberg@justemail.net>.
-
-       [BZ #3480]
-       * manual/argp.texi: Fix typos.
-       * manual/charset.texi: Likewise.
-       * manual/errno.texi: Likewise.
-       * manual/filesys.texi: Likewise.
-       * manual/lang.texi: Likewise.
-       * manual/maint.texi: Likewise.
-       * manual/memory.texi: Likewise.
-       * manual/message.texi: Likewise.
-       * manual/resource.texi: Likewise.
-       * manual/search.texi: Likewise.
-       * manual/signal.texi: Likewise.
-       * manual/startup.texi: Likewise.
-       * manual/stdio.texi: Likewise.
-       * manual/sysinfo.texi: Likewise.
-       * manual/syslog.texi: Likewise.
-       * manual/time.texi: Likewise.
-       Patch by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>.
-
-       [BZ #3465]
-       * sunrpc/clnt_raw.c: Minimal message improvements.
-       * sunrpc/pm_getmaps.c: Likewise.
-       * nis/nss_nisplus/nisplus-publickey.c: Likewise.
-       * nis/nis_print_group_entry.c: Likewise.
-       * locale/programs/repertoire.c: Likewise.
-       * locale/programs/charmap.c: Likewise.
-       * malloc/memusage.sh: Likewise.
-       * elf/dl-deps.c: Likewise.
-       * locale/programs/ld-collate.c: Likewise.
-       * libio/vswprintf.c: Likewise.
-       * malloc/memusagestat.c: Likewise.
-       * sunrpc/auth_unix.c: Likewise.
-       * sunrpc/rpc_main.c: Likewise.
-       * nscd/cache.c: Likewise.
-       * locale/programs/repertoire.c: Unify output messages.
-       * locale/programs/charmap.c: Likewise.
-       * locale/programs/ld-ctype.c: Likewise.
-       * locale/programs/ld-monetary.c: Likewise.
-       * locale/programs/ld-numeric.c: Likewise.
-       * locale/programs/ld-time.c: Likewise.
-       * elf/ldconfig.c: Likewise.
-       * nscd/selinux.c: Likewise.
-       * elf/cache.c: Likewise.
-       Patch mostly by Benno Schulenberg <bensberg@justemail.net>.
+2006-11-10  Ulrich Drepper  <drepper@redhat.com>
 
        [BZ #3451]
        * sysdeps/i386/fpu/bits/mathinline.h (floor): Make rounding mode
        change atomic.
        (ceil): Likewise.
 
-2006-11-10  Jakub Jelinek  <jakub@redhat.com>
-
-       * string/strxfrm_l.c (STRXFRM): Fix trailing \1 optimization
-       if N is one bigger than return value.
-       * string/tst-strxfrm2.c (do_test): Also test strxfrm with l1 + 1
-       and l1 last arguments, if buf is defined, verify the return value
-       equals to strlen (buf) and verify no byte beyond passed length
-       is modified.
-
-2006-11-10  Ulrich Drepper  <drepper@redhat.com>
-
-       * po/sv.po: Update from translation team.
-
 2006-11-09  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/unix/sysv/linux/x86_64/sysconf.c (intel_check_word): Add
        * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word): Add
        noinline attribute.
 
-       * sysdeps/gnu/siglist.c (__old_sys_siglist, __old_sys_sigabbrev):
-       Use __new_sys_siglist instead of _sys_siglist_internal as
-       second macro argument.
-       (_old_sys_siglist): Use declare_symbol_alias macro instead of
-       strong_alias.
-
-2006-11-09  Ulrich Drepper  <drepper@redhat.com>
-
-       [BZ #3493]
-       * posix/unistd.h (sysconf): Remove const attribute.
-
-       * sysdeps/posix/getaddrinfo.c (getaddrinfo): Fix test for
-       temporary or deprecated addresses.
-       Patch by Sridhar Samudrala <sri@us.ibm.com>.
-
-       * string/Makefile (tests): Add tst-strxfrm2.
-       * string/tst-strxfrm2.c: New file.
-
-2006-10-09  Jakub Jelinek  <jakub@redhat.com>
+2006-11-05  Ulrich Drepper  <drepper@redhat.com>
 
-       * elf/dl-debug.c (_dl_debug_initialize): Check r->r_map for 0
-       rather than r->r_brk.
+       * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word):
+       Update handling of cache descriptor 0x49 for new models.
+       * sysdeps/unix/sysv/linux/x86_64/sysconf.c (intel_check_word):
+       Likewise.
 
 2006-11-08  Jakub Jelinek  <jakub@redhat.com>
 
-       * string/strxfrm_l.c (STRXFRM): Do the trailing \1 removal
-       optimization even if needed > n.
-
        * elf/dl-load.c (decompose_rpath): Return bool rather than void.
        If l->l_name is on inhibit_rpath list, set sps->dirs to -1 and
        return false, otherwise return true.
        (cache_rpath): Return decompose_rpath return value.
 
-2006-11-07  Jakub Jelinek  <jakub@redhat.com>
-
-       * include/libc-symbols.h (declare_symbol): Rename to...
-       (declare_symbol_alias): ... this.  Add ORIGINAL argument, imply
-       strong_alias (ORIGINAL, SYMBOL) in asm to make sure it preceedes
-       .size directive.
-       * sysdeps/gnu/errlist-compat.awk: Adjust for declare_symbol_alias
-       changes.
-       * sysdeps/gnu/siglist.c: Likewise.
-
-2006-11-03  Steven Munroe  <sjmunroe@us.ibm.com>
-
-       * sysdeps/powerpc/fpu/bits/mathinline.h
-       [__LIBC_INTERNAL_MATH_INLINES]: Moved to ...
-       * sysdeps/powerpc/fpu/math_private.h: ...here.  New file.
-
-2006-11-05  Ulrich Drepper  <drepper@redhat.com>
-
-       * sysdeps/unix/sysv/linux/i386/sysconf.c (intel_check_word):
-       Update handling of cache descriptor 0x49 for new models.
-       * sysdeps/unix/sysv/linux/x86_64/sysconf.c (intel_check_word):
-       Likewise.
-
 2006-11-02  Jakub Jelinek  <jakub@redhat.com>
 
        * malloc/memusage.c (dest): Reset not_me back to false after
        printing statistics.
 
-2006-11-02  Ulrich Drepper  <drepper@redhat.com>
-
-       * configure.in: Work around ld --help change and avoid -z relro
-       test completely if the architecture doesn't care about security.
-
-2006-11-01  Ulrich Drepper  <drepper@redhat.com>
-
-       * po/sv.po: Update from translation team.
-
-2006-10-31  Ulrich Drepper  <drepper@redhat.com>
-
-       * stdlib/atexit.c (atexit): Don't mark as hidden when used to
-       generate compatibility version.
-
-2006-10-29  Ulrich Drepper  <drepper@redhat.com>
-
-       * configure.in: Relax -z relro requirement a bit.
-
-       * po/sv.po: Update from translation team.
-
-2006-10-29  Jakub Jelinek  <jakub@redhat.com>
-
-       * elf/dl-sym.c (do_sym): Use RTLD_SINGLE_THREAD_P.
-       * elf/dl-runtime.c (_dl_fixup, _dl_profile_fixup): Likewise.
-       * elf/dl-close.c (_dl_close_worker): Likewise.
-       * elf/dl-open.c (_dl_open_worker): Likewise.
-       * sysdeps/generic/sysdep-cancel.h (RTLD_SINGLE_THREAD_P): Define.
-
 2006-10-27  Ulrich Drepper  <drepper@redhat.com>
 
-       * configure.in: Require assembler support for visibility, compiler
-       support for visibility and aliases, linker support for various -z
-       options.
-       * Makeconfig: Remove conditional code which now is unnecessary.
-       * config.h.in: Likewise.
-       * config.make.in: Likewise.
-       * dlfcn/Makefile: Likewise.
-       * elf/Makefile: Likewise.
-       * elf/dl-load.c: Likewise.
-       * elf/rtld.c: Likewise.
-       * include/libc-symbols.h: Likewise.
-       * include/stdio.h: Likewise.
-       * io/Makefile: Likewise.
-       * io/fstat.c: Likewise.
-       * io/fstat64.c: Likewise.
-       * io/fstatat.c: Likewise.
-       * io/fstatat64.c: Likewise.
-       * io/lstat.c: Likewise.
-       * io/lstat64.c: Likewise.
-       * io/mknod.c: Likewise.
-       * io/mknodat.c: Likewise.
-       * io/stat.c: Likewise.
-       * io/stat64.c: Likewise.
-       * libio/stdio.c: Likewise.
-       * nscd/Makefile: Likewise.
-       * stdlib/Makefile: Likewise.
-       * stdlib/atexit.c: Likewise.
-       * sysdeps/generic/ldsodefs.h: Likewise.
-       * sysdeps/i386/dl-machine.h: Likewise.
-       * sysdeps/i386/sysdep.h: Likewise.
-       * sysdeps/i386/i686/memcmp.S: Likewise.
-       * sysdeps/powerpc/powerpc32/sysdep.h: Likewise.
-       * sysdeps/unix/sysv/linux/i386/sigaction.c: Likewise.
-       * sysdeps/unix/sysv/linux/x86_64/sigaction.c: Likewise.
-
-       * Makerules: USE_TLS support is now default.
-       * tls.make.c: Likewise.
-       * csu/Versions: Likewise.
-       * csu/libc-start.c: Likewise.
-       * csu/libc-tls.c: Likewise.
-       * csu/version.c: Likewise.
-       * dlfcn/dlinfo.c: Likewise.
-       * elf/dl-addr.c: Likewise.
-       * elf/dl-cache.c: Likewise.
-       * elf/dl-close.c: Likewise.
-       * elf/dl-iteratephdr.c: Likewise.
-       * elf/dl-load.c: Likewise.
-       * elf/dl-lookup.c: Likewise.
-       * elf/dl-object.c: Likewise.
-       * elf/dl-open.c: Likewise.
-       * elf/dl-reloc.c: Likewise.
-       * elf/dl-support.c: Likewise.
-       * elf/dl-sym.c: Likewise.
-       * elf/dl-sysdep.c: Likewise.
-       * elf/dl-tls.c: Likewise.
-       * elf/ldconfig.c: Likewise.
-       * elf/rtld.c: Likewise.
-       * elf/tst-tls-dlinfo.c: Likewise.
-       * elf/tst-tls1.c: Likewise.
-       * elf/tst-tls10.h: Likewise.
-       * elf/tst-tls14.c: Likewise.
-       * elf/tst-tls2.c: Likewise.
-       * elf/tst-tls3.c: Likewise.
-       * elf/tst-tls4.c: Likewise.
-       * elf/tst-tls5.c: Likewise.
-       * elf/tst-tls6.c: Likewise.
-       * elf/tst-tls7.c: Likewise.
-       * elf/tst-tls8.c: Likewise.
-       * elf/tst-tls9.c: Likewise.
-       * elf/tst-tlsmod1.c: Likewise.
-       * elf/tst-tlsmod13.c: Likewise.
-       * elf/tst-tlsmod13a.c: Likewise.
-       * elf/tst-tlsmod14a.c: Likewise.
-       * elf/tst-tlsmod2.c: Likewise.
-       * elf/tst-tlsmod3.c: Likewise.
-       * elf/tst-tlsmod4.c: Likewise.
-       * elf/tst-tlsmod5.c: Likewise.
-       * elf/tst-tlsmod6.c: Likewise.
-       * include/errno.h: Likewise.
-       * include/link.h: Likewise.
-       * include/tls.h: Likewise.
-       * locale/global-locale.c: Likewise.
-       * locale/localeinfo.h: Likewise.
-       * malloc/arena.c: Likewise.
-       * malloc/hooks.c: Likewise.
-       * malloc/malloc.c: Likewise.
-       * resolv/Versions: Likewise.
-       * sysdeps/alpha/dl-machine.h: Likewise.
-       * sysdeps/alpha/libc-tls.c: Likewise.
-       * sysdeps/generic/ldsodefs.h: Likewise.
-       * sysdeps/generic/tls.h: Likewise.
-       * sysdeps/i386/dl-machine.h: Likewise.
-       * sysdeps/ia64/dl-machine.h: Likewise.
-       * sysdeps/ia64/libc-tls.c: Likewise.
-       * sysdeps/mach/hurd/fork.c: Likewise.
-       * sysdeps/mach/hurd/i386/tls.h: Likewise.
-       * sysdeps/powerpc/powerpc32/dl-machine.c: Likwise.
-       * sysdeps/powerpc/powerpc32/dl-machine.h: Likewise.
-       * sysdeps/powerpc/powerpc64/dl-machine.h: Likewise.
-       * sysdeps/s390/libc-tls.c: Likewise.
-       * sysdeps/s390/s390-32/dl-machine.h: Likewise.
-       * sysdeps/s390/s390-64/dl-machine.h: Likewise.
-       * sysdeps/sh/dl-machine.h: Likewise.
-       * sysdeps/sparc/sparc32/dl-machine.h: Likewise.
-       * sysdeps/sparc/sparc64/dl-machine.h: Likewise.
-       * sysdeps/x86_64/dl-machine.h: Likewise.
-
        * elf/dl-close.c (_dl_close_worker): Renamed from _dl_close and
        split out locking and parameter checking.
        (_dl_close): Call _dl_close_worker after locking and checking.
        * elf/Makefile: Add rules to build and run tst-thrlock.
        * elf/tst-thrlock.c:  New file.
 
-       [BZ #3426]
-       * stdlib/stdlib.h: Adjust comment for canonicalize_file_name to
-       reality.
-
        [BZ #3429]
        * elf/dl-open.c (dl_open_worker): Keep holding dl_load_lock until
        we are sure we do not need it anymore for _dl_close.  Also move
        the asserts inside the lock region.
        Patch mostly by Suzuki <suzuki@in.ibm.com>.
 
-2006-10-27  Jakub Jelinek  <jakub@redhat.com>
-
-       * elf/dl-lookup.c (_dl_debug_bindings): Remove unused symbol_scope
-       argument.
-       (_dl_lookup_symbol_x): Adjust caller.
-
-       * sysdeps/generic/ldsodefs.h (struct link_namespaces): Remove
-       _ns_global_scope.
-       * elf/rtld.c (dl_main): Don't initialize _ns_global_scope.
-
-       * elf/dl-libc.c: Revert l_scope name changes.
-       * elf/dl-load.c: Likewise.
-       * elf/dl-object.c: Likewise.
-       * elf/rtld.c: Likewise.
-       * elf/dl-close.c (_dl_close): Likewise.
-       * elf/dl-open.c (dl_open_worker): Likewise.  If not SINGLE_THREAD_P,
-       always use __rtld_mrlock_{change,done}.  Always free old scope list
-       here if not l_scope_mem.
-       * elf/dl-runtime.c (_dl_fixup, _dl_profile_fixup): Revert l_scope name
-       change.  Never free scope list here.  Just __rtld_mrlock_lock before
-       the lookup and __rtld_mrlock_unlock it after the lookup.
-       * elf/dl-sym.c: Likewise.
-       * include/link.h (struct r_scoperec): Remove.
-       (struct link_map): Replace l_scoperec with l_scope, l_scoperec_mem
-       with l_scope_mem and l_scoperec_lock with l_scope_lock.
-
-2006-10-25  Ulrich Drepper  <drepper@redhat.com>
-
-       * sysdeps/gnu/netinet/tcp.h: Define TCP_CONGESTION.
-
-2006-10-18  Ulrich Drepper  <drepper@redhat.com>
-
-       * configure.in: Disable building profile libraries by default.
-
 2006-10-17  Jakub Jelinek  <jakub@redhat.com>
 
        * sunrpc/xdr_mem.c (xdrmem_setpos): Don't compare addresses
        * sunrpc/Makefile (tests): Add tst-xdrmem2.
        * sunrpc/tst-xdrmem2.c: New test.
 
-2006-10-18  Ulrich Drepper  <drepper@redhat.com>
-
-       * elf/dl-lookup.c (_dl_lookup_symbol_x): Add warning to
-       _dl_lookup_symbol_x code.
-
-2006-10-17  Jakub Jelinek  <jakub@redhat.com>
-
-       * elf/dl-runtime.c: Include sysdep-cancel.h.
-       (_dl_fixup, _dl_profile_fixup): Use __rtld_mrlock_* and
-       scoperec->nusers only if !SINGLE_THREAD_P.  Use atomic_*
-       instead of catomic_* macros.
-       * elf/dl-sym.c: Include sysdep-cancel.h.
-       (do_sym): Use __rtld_mrlock_* and scoperec->nusers only
-       if !SINGLE_THREAD_P.  Use atomic_* instead of catomic_* macros.
-       * elf/dl-close.c: Include sysdep-cancel.h.
-       (_dl_close): Use __rtld_mrlock_* and scoperec->nusers only
-       if !SINGLE_THREAD_P.  Use atomic_* instead of catomic_* macros.
-       * elf/dl-open.c: Include sysdep-cancel.h.
-       (dl_open_worker): Use __rtld_mrlock_* and scoperec->nusers only
-       if !SINGLE_THREAD_P.  Use atomic_* instead of catomic_* macros.
-
-2006-10-17  Jakub Jelinek  <jakub@redhat.com>
-
-       [BZ #3313]
-       * malloc/malloc.c (malloc_consolidate): Set maxfb to address of last
-       fastbin rather than end of fastbin array.
-
-2006-10-18  Ulrich Drepper  <drepper@redhat.com>
-
-       * sysdeps/i386/i486/bits/atomic.h (catomic_decrement): Use correct
-       body macro.
-       * sysdeps/x86_64/bits/atomic.h
-       (__arch_c_compare_and_exchange_val_64_acq): Add missing casts.
-       (catomic_decrement): Use correct body macro.
-
-2006-10-17  Jakub Jelinek  <jakub@redhat.com>
-
-       * include/atomic.h: Add a unique prefix to all local variables
-       in macros.
-       * csu/tst-atomic.c (do_test): Test also catomic_* macros.
-
 2006-10-16  Ulrich Drepper  <drepper@redhat.com>
 
        [BZ #3369]
        * sysdeps/posix/getaddrinfo.c (rfc3484_sort): Fix typos in rules 4
        and 7.
 
-2006-10-14  Ulrich Drepper  <drepper@redhat.com>
-
-       * resolv/arpa/nameser.h: Document that ns_t_a6 is deprecated.
-
 2006-10-13  Ulrich Drepper  <drepper@redhat.com>
 
-       [BZ #3313]
-       * malloc/malloc.c (malloc_consolidate): Don't use get_fast_max to
-       determine highest fast bin to consolidate, always look into all of
-       them.
-       (do_check_malloc_state): Only require for empty bins for large
-       sizes in main arena.
-
-       * libio/stdio.h: Add more __wur attributes.
-
        * elf/dl-minimal.c (realloc): Optimize last patch.
 
 2006-10-12  Richard Sandiford  <richard@codesourcery.com>
        * elf/dl-minimal.c (realloc): Let malloc() return a new pointer,
        and use memcpy() if it does.
 
-2006-11-12  Andreas Jaeger  <aj@suse.de>
-
-       [BZ #2510]
-       * manual/search.texi (Hash Search Function): Clarify.
-       (Array Search Function): Clarify.
-
-2006-11-12  Joseph Myers  <joseph@codesourcery.com>
-
-       [BZ #2830]
-       * math/atest-exp.c (main): Cast hex value to mp_limb_t before
-       shifting.
-       * math/atest-exp2.c (read_mpn_hex): Likewise.
-       * math/atest-sincos.c (main): Likewise.
-
 2006-10-11  Ulrich Drepper  <drepper@redhat.com>
 
-       * sysdeps/unix/sysv/linux/syscalls.list: Add epoll_pwait.
-       * sysdeps/unix/sysv/linux/sys/epoll.h: Declare epoll_pwait.
-       * sysdeps/unix/sysv/linux/Versions (libc): Add epoll_pwait for
-       version GLIBC_2.6.
-       * Versions.def: Add GLIBC_2.6 for libc.
-
        * sysdeps/unix/sysv/linux/i386/sysdep.h (DOARGS_6): Fix offset.
 
-       * sysdeps/i386/i486/bits/atomic.h: Add catomic_* support.
-
-2006-10-11  Jakub Jelinek  <jakub@redhat.com>
-
-       * malloc/malloc.c (_int_malloc): Remove unused any_larger variable.
-
-       * nis/nis_defaults.c (__nis_default_access): Don't call getenv twice.
-
-       * nis/nis_subr.c (nis_getnames): Use __secure_getenv instead of getenv.
-       * sysdeps/generic/unsecvars.h: Add NIS_PATH.
-
-2006-10-11  Ulrich Drepper  <drepper@redhat.com>
-
-       * include/atomic.c: Define catomic_* operations.
-       * sysdeps/x86_64/bits/atomic.h: Likewise.  Fix a few minor problems.
-       * stdlib/cxa_finalize.c: Use catomic_* operations instead of atomic_*.
-       * malloc/memusage.c: Likewise.
-       * gmon/mcount.c: Likewise.
-       * elf/dl-close.c: Likewise.
-       * elf/dl-open.c: Likewise.
-       * elf/dl-profile.c: Likewise.
-       * elf/dl-sym.c: Likewise.
-       * elf/dl-runtime.c: Likewise.
-       * elf/dl-fptr.c: Likewise.
-       * resolv/res_libc.c: Likewise.
-
 2006-10-10  Ulrich Drepper  <drepper@redhat.com>
 
        * nis/nis_subr.c (nis_getnames): Add trailing dot to NIS_PATH
        at least one entry consisting of the parameter concatenated with
        the domain.
 
-2006-10-10  Roland McGrath  <roland@frob.com>
-
-       * sysdeps/mach/hurd/utimes.c: Use a union to avoid an improper cast.
-       * sysdeps/mach/hurd/futimes.c: Likewise.
-       * sysdeps/mach/hurd/lutimes.c: Likewise.
-
-2006-10-09  Ulrich Drepper  <drepper@redhat.com>
-           Jakub Jelinek  <jakub@redhat.com>
-
-       Implement reference counting of scope records.
-       * elf/dl-close.c (_dl_close): Remove all scopes from removed objects
-       from the list in objects which remain.  Always allocate new scope
-       record.
-       * elf/dl-open.c (dl_open_worker): When growing array for scopes,
-       don't resize, allocate a new one.
-       * elf/dl-runtime.c: Update reference counters before using a scope
-       array.
-       * elf/dl-sym.c: Likewise.
-       * elf/dl-libc.c: Adjust for l_scope name change.
-       * elf/dl-load.c: Likewise.
-       * elf/dl-object.c: Likewise.
-       * elf/rtld.c: Likewise.
-       * include/link.h: Include <rtld-lowlevel.h>.  Define struct
-       r_scoperec.  Replace r_scope with pointer to r_scoperec structure.
-       Add l_scoperec_lock.
-       * sysdeps/generic/ldsodefs.h: Include <rtld-lowlevel.h>.
-       * sysdeps/generic/rtld-lowlevel.h: New file.
-
-       * include/atomic.h: Rename atomic_and to atomic_and_val and
-       atomic_or to atomic_or_val.  Define new macros atomic_and and
-       atomic_or which do not return values.
-       * sysdeps/x86_64/bits/atomic.h: Define atomic_and and atomic_or.
-       Various cleanups.
-       * sysdeps/i386/i486/bits/atomic.h: Likewise.
-
-       * po/sv.po: Update from translation team.
-
-2006-10-07  Ulrich Drepper  <drepper@redhat.com>
-
-       * Versions.def: Add GLIBC_2.6 to libpthread.
-
-       * include/shlib-compat.h (SHLIB_COMPAT): Expand parameters before use.
-       (versioned_symbol): Likewise.
-       (compat_symbol): Likewise.
+2006-10-09  Jakub Jelinek  <jakub@redhat.com>
 
-       * po/tr.po: Update from translation team.
+       * elf/dl-debug.c (_dl_debug_initialize): Check r->r_map for 0
+       rather than r->r_brk.
 
 2006-10-06  Ulrich Drepper  <drepper@redhat.com>
 
-       * nis/Banner: Removed.  It's been integral part forever and the
-       author info is incomplete anyway.
-       * libio/Banner: Likewise.
-
        * nis/nis_table.c (nis_list): If __follow_path fails in the new
        code, make sure the nis_freeresult call doesn't crash and that the
        result is reported correctly.
        Don't use locking around _nss_grp_create_tablename call.
        * nis/nss_nisplus/nisplus-initgroups.c: New file.
 
-2006-10-06  Ulrich Drepper  <drepper@redhat.com>
-
-       * version.h (VERSION): Bump to 2.5.90 for new development tree.
-
 2006-10-06  Andreas Jaeger  <aj@suse.de>
 
        * include/features.h (__GLIBC_MINOR__): It's glibc 2.5 now.
index 349f94d9ac043f09a31c4b298f6bf78a3e7ea196..5a1aebccffaa3dbadea92e6ab92c9a3d33c0bf99 100644 (file)
@@ -407,9 +407,11 @@ LDFLAGS.so += $(combreloc-LDFLAGS)
 LDFLAGS-rtld += $(combreloc-LDFLAGS)
 endif
 
+ifeq (yes,$(have-z-relro))
 relro-LDFLAGS = -Wl,-z,relro
 LDFLAGS.so += $(relro-LDFLAGS)
 LDFLAGS-rtld += $(relro-LDFLAGS)
+endif
 
 ifeq (yes,$(have-hash-style))
 # For the time being we unconditionally use 'both'.  At some time we
index 200f8d7eea4974800d9d563b671feb054a32ea3d..b0be86b368320413f67486dba3860848fa58d20a 100644 (file)
--- a/Makerules
+++ b/Makerules
@@ -1233,7 +1233,10 @@ endif
 
 ifeq ($(firstword $(sysd-sorted-done) f)$(firstword $(generating) f),tf)
 -include $(common-objpfx)tls.make
+config-tls := notls
+ifeq ($(use-tls),yes)
 config-tls := tls
+endif
 ifeq ($(use-thread),yes)
 config-tls := thread
 endif
diff --git a/NEWS b/NEWS
index f078f3cc63e87692e007a369ace6b4a267d0f17c..f18b2d73f07eb151269bc5b2a9962343e6aa52c2 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,13 +1,21 @@
-GNU C Library NEWS -- history of user-visible changes.  2006-10-11
+GNU C Library NEWS -- history of user-visible changes.  2006-09-29
 Copyright (C) 1992-2002,2003,2004,2005,2006 Free Software Foundation, Inc.
 See the end for copying conditions.
 
 Please send GNU C library bug reports via <http://sources.redhat.com/bugzilla/>
 using `glibc' in the "product" field.
 \f
-Version 2.6
+Version 2.5.1
 
-* New Linux interfaces: epoll_pwait.
+* The following bugs are resolved with this release:
+
+  2337, 2749, 3213, 3291, 3306, 3320, 3322, 3334, 3348, 3352, 3369, 3429,
+  3451, 3458, 3559, 3632, 3664, 3673, 3674, 3747, 3842, 3851, 3855, 3884,
+  3902, 3919, 3944, 3954, 3955, 3957, 3995, 4069, 4070, 4074, 4076, 4101,
+  4102, 4130, 4131, 4181, 4342, 4344, 4364, 4368, 4381, 4405, 4406, 4411,
+  4438, 4439, 4465, 4512, 4514, 4586, 4702, 4858
+
+  Visit <http://sources.redhat.com/bugzilla/> for the details of each bug.
 
 \f
 Version 2.5
diff --git a/README b/README
index 97b3a61e0640f56ce23d6d54cb126c987e813a74..2980b10a01725cc1a73c323662b463c9ad3f8587 100644 (file)
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-This directory contains the version 2.5 release of the GNU C Library.
+This directory contains the version 2.5.1 release of the GNU C Library.
 
 The GNU C Library is the standard system C library for all GNU systems,
 and is an important part of what makes up a GNU system.  It provides the
@@ -52,7 +52,7 @@ The GNU C Library supports these configurations for using Linux kernels:
 
 The code for other CPU configurations supported by volunteers outside of
 the core glibc maintenance effort is contained in the separate `ports'
-add-on.  You can find glibc-ports-2.5 distributed separately in the
+add-on.  You can find glibc-ports-2.5.1 distributed separately in the
 same place where you got the main glibc distribution files.
 Currently these configurations are known to work using the `ports' add-on:
 
index 254208469fbe8a11c3f1b48ef26aad40b9aee0dd..b492caaf0bcdd293e3ea4d453febfcb4d2dd62e9 100644 (file)
@@ -22,7 +22,6 @@ libc {
   GLIBC_2.3.4
   GLIBC_2.4
   GLIBC_2.5
-  GLIBC_2.6
 %ifdef USE_IN_LIBIO
   HURD_CTHREADS_0.3
 %endif
@@ -83,7 +82,6 @@ libpthread {
   GLIBC_2.3.3
   GLIBC_2.3.4
   GLIBC_2.4
-  GLIBC_2.6
   GLIBC_PRIVATE
 }
 libresolv {
index 5ade517476bdc39ecec364a6c12f077942d86303..b8c9fca0fb38dbc588641740428842b0a971938a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1997, 2002, 2003, 2006 Free Software Foundation, Inc.
+# Copyright (C) 1997, 2002, 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
@@ -26,7 +26,7 @@ distribute    = argp-fmtstream.h argp-namefrob.h
 routines       = $(addprefix argp-, ba fmtstream fs-xinl help parse pv \
                                     pvh xinl eexst)
 
-tests          = argp-test tst-argp1 bug-argp1
+tests          = argp-test tst-argp1 bug-argp1 tst-argp2
 
 CFLAGS-argp-help.c = $(uses-callbacks) -fexceptions
 CFLAGS-argp-parse.c = $(uses-callbacks)
index 13c0820710d6173d835b290d1650ecfdbda9979a..c12b10e235fcb9901b53fd14b85cf86281ba204a 100644 (file)
@@ -1,5 +1,6 @@
 /* Hierarchial argument parsing help output
-   Copyright (C) 1995-2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-2003, 2004, 2005, 2006, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Miles Bader <miles@gnu.ai.mit.edu>.
 
@@ -672,9 +673,9 @@ hol_cluster_cmp (const struct hol_cluster *cl1, const struct hol_cluster *cl2)
 {
   /* If one cluster is deeper than the other, use its ancestor at the same
      level, so that finding the common ancestor is straightforward.  */
-  while (cl1->depth < cl2->depth)
+  while (cl1->depth > cl2->depth)
     cl1 = cl1->parent;
-  while (cl2->depth < cl1->depth)
+  while (cl2->depth > cl1->depth)
     cl2 = cl2->parent;
 
   /* Now reduce both clusters to their ancestors at the point where both have
@@ -987,7 +988,7 @@ static const char *
 filter_doc (const char *doc, int key, const struct argp *argp,
            const struct argp_state *state)
 {
-  if (argp->help_filter)
+  if (argp && argp->help_filter)
     /* We must apply a user filter to this output.  */
     {
       void *input = __argp_input (argp, state);
diff --git a/argp/tst-argp2.c b/argp/tst-argp2.c
new file mode 100644 (file)
index 0000000..926614f
--- /dev/null
@@ -0,0 +1,101 @@
+/* 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.  */
+
+#include <argp.h>
+
+static const struct argp_option opt1[] =
+  {
+    { "opt1", '1', "NUMBER", 0, "Option 1" },
+    { NULL, 0, NULL, 0, NULL }
+  };
+
+static const struct argp_option opt2[] =
+  {
+    { "opt2", '2', "NUMBER", 0, "Option 2" },
+    { NULL, 0, NULL, 0, NULL }
+  };
+
+static const struct argp_option opt3[] =
+  {
+    { "opt3", '3', "NUMBER", 0, "Option 3" },
+    { NULL, 0, NULL, 0, NULL }
+  };
+
+static const struct argp_option opt4[] =
+  {
+    { "opt4", '4', "NUMBER", 0, "Option 4" },
+    { NULL, 0, NULL, 0, NULL }
+  };
+
+static const struct argp_option opt5[] =
+  {
+    { "opt5", '5', "NUMBER", 0, "Option 5" },
+    { NULL, 0, NULL, 0, NULL }
+  };
+
+static struct argp argp5 =
+  {
+    opt5, NULL, "args doc5", "doc5", NULL, NULL, NULL
+  };
+
+static struct argp argp4 =
+  {
+    opt4, NULL, "args doc4", "doc4", NULL, NULL, NULL
+  };
+
+static struct argp argp3 =
+  {
+    opt3, NULL, "args doc3", "doc3", NULL, NULL, NULL
+  };
+
+static struct argp_child children2[] =
+  {
+    { &argp4, 0, "child3", 3 },
+    { &argp5, 0, "child4", 4 },
+    { NULL, 0, NULL, 0 }
+  };
+
+static struct argp argp2 =
+  {
+    opt2, NULL, "args doc2", "doc2", children2, NULL, NULL
+  };
+
+static struct argp_child children1[] =
+  {
+    { &argp2, 0, "child1", 1 },
+    { &argp3, 0, "child2", 2 },
+    { NULL, 0, NULL, 0 }
+  };
+
+static struct argp argp1 =
+  {
+    opt1, NULL, "args doc1", "doc1", children1, NULL, NULL
+  };
+
+
+static int
+do_test (void)
+{
+  argp_help (&argp1, stdout, ARGP_HELP_LONG, (char *) "tst-argp2");
+  return 0;
+}
+
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
index f5cbb8e1b3e50dc7bb542ba9aece3ef08c297135..e72754d526c768a5a40487e2877076ed923b8934 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2005, 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 1996.
 
@@ -246,7 +246,7 @@ print_version (FILE *stream, struct argp_state *state)
 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\
-"), "2007");
+"), "2006");
   fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
 }
 
index a46e405269b168f57b3d6f41b6cfa8550bc99407..ba4dec8affc104097a29436a36aac0bc10b63a10 100644 (file)
@@ -19,6 +19,9 @@
 /* Defined if building with SELinux support & audit libs are detected. */
 #undef HAVE_LIBAUDIT
 
+/* Defined if building with SELinux support & libcap libs are detected.  */
+#undef  HAVE_LIBCAP
+
 /* Define if using XCOFF. Set by --with-xcoff.  */
 #undef HAVE_XCOFF
 
 /* Define if the linker supports the -z combreloc option.  */
 #undef HAVE_Z_COMBRELOC
 
+/* Define if the assembler supported .protected.  */
+#undef HAVE_PROTECTED
+
+/* Define if the assembler supported .hidden.  */
+#undef HAVE_HIDDEN
+
+/* Define if the compiler supports __attribute__ ((visibility (...))).  */
+#undef HAVE_VISIBILITY_ATTRIBUTE
+
+/* Define if the compiler doesn't support __attribute__ ((visibility (...)))
+   together with __asm__ redirection properly.  */
+#undef HAVE_BROKEN_VISIBILITY_ATTRIBUTE
+
+/* Define if the compiler doesn't support __attribute__ ((alias (...)))
+   together with __asm__ redirection properly.  */
+#undef HAVE_BROKEN_ALIAS_ATTRIBUTE
+
 /* Define if _rtld_local structure should be forced into .sdata section.  */
 #undef HAVE_SDATA_SECTION
 
 /* Defined if forced unwind support is available.  */
 #undef HAVE_FORCED_UNWIND
 
+/* Defined if the linker supports the -z relro option.  */
+#undef HAVE_Z_RELRO
+
 /* Defined of libidn is available.  */
 #undef HAVE_LIBIDN
 
index 7aa9c1c12dadd8c17b0d5d0988d671ede3e3aee8..677da3a891764d73f3c86dd7ea060faf9e5b7740 100644 (file)
@@ -38,9 +38,14 @@ c++-sysincludes = @CXX_SYSINCLUDES@
 all-warnings = @all_warnings@
 
 elf = @elf@
+have-protected = @libc_cv_asm_protected_directive@
+have-z-nodelete = @libc_cv_z_nodelete@
+have-z-nodlopen = @libc_cv_z_nodlopen@
+have-z-initfirst = @libc_cv_z_initfirst@
 have-z-combreloc = @libc_cv_z_combreloc@
 have-z-execstack = @libc_cv_z_execstack@
 have-initfini = @libc_cv_have_initfini@
+have-z-relro = @libc_cv_z_relro@
 have-Bgroup = @libc_cv_Bgroup@
 have-as-needed = @libc_cv_as_needed@
 libgcc_s_suffix = @libc_cv_libgcc_s_suffix@
index 0f00394f038d20113accc08d14c7e81bb046654a..d14f89a8a98c68e7ca26a31f719a9ee9857dc29d 100755 (executable)
--- a/configure
+++ b/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 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_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 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_asm_protected_directive libc_cv_cc_with_libunwind libc_cv_z_nodelete libc_cv_z_nodlopen libc_cv_z_initfirst libc_cv_z_relro 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_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.
@@ -864,7 +864,7 @@ Optional Features:
                           [default=no]
   --enable-shared         build shared library [default=yes if GNU ld &
                           ELF]
-  --enable-profile        build profiled library [default=no]
+  --enable-profile        build profiled library [default=yes]
   --enable-omitfp         build undebuggable optimized library
                           [default=no]
   --enable-bounded        build with runtime bounds checking
@@ -1543,7 +1543,7 @@ if test "${enable_profile+set}" = set; then
   enableval="$enable_profile"
   profile=$enableval
 else
-  profile=no
+  profile=yes
 fi;
 # Check whether --enable-omitfp or --disable-omitfp was given.
 if test "${enable_omitfp+set}" = set; then
@@ -5339,15 +5339,22 @@ EOF
   (exit $ac_status); }; }; then
     libc_cv_asm_protected_directive=yes
   else
-    { { echo "$as_me:$LINENO: error: assembler support for symbol visibility is required" >&5
-echo "$as_me: error: assembler support for symbol visibility is required" >&2;}
-   { (exit 1); exit 1; }; }
+    libc_cv_asm_protected_directive=no
   fi
   rm -f conftest*
 fi
 echo "$as_me:$LINENO: result: $libc_cv_asm_protected_directive" >&5
 echo "${ECHO_T}$libc_cv_asm_protected_directive" >&6
 
+  cat >>confdefs.h <<\_ACEOF
+#define HAVE_PROTECTED 1
+_ACEOF
+
+  cat >>confdefs.h <<\_ACEOF
+#define HAVE_HIDDEN 1
+_ACEOF
+
+
   if test $libc_cv_asm_protected_directive = yes; then
     echo "$as_me:$LINENO: checking whether __attribute__((visibility())) is supported" >&5
 echo $ECHO_N "checking whether __attribute__((visibility())) is supported... $ECHO_C" >&6
@@ -5376,10 +5383,11 @@ EOF
 fi
 echo "$as_me:$LINENO: result: $libc_cv_visibility_attribute" >&5
 echo "${ECHO_T}$libc_cv_visibility_attribute" >&6
-    if test $libc_cv_visibility_attribute != yes; then
-      { { echo "$as_me:$LINENO: error: compiler support for visibility attribute is required" >&5
-echo "$as_me: error: compiler support for visibility attribute is required" >&2;}
-   { (exit 1); exit 1; }; }
+    if test $libc_cv_visibility_attribute = yes; then
+      cat >>confdefs.h <<\_ACEOF
+#define HAVE_VISIBILITY_ATTRIBUTE 1
+_ACEOF
+
     fi
   fi
 
@@ -5411,9 +5419,10 @@ fi
 echo "$as_me:$LINENO: result: $libc_cv_broken_visibility_attribute" >&5
 echo "${ECHO_T}$libc_cv_broken_visibility_attribute" >&6
     if test $libc_cv_broken_visibility_attribute = yes; then
-      { { echo "$as_me:$LINENO: error: working compiler support for visibility attribute is required" >&5
-echo "$as_me: error: working compiler support for visibility attribute is required" >&2;}
-   { (exit 1); exit 1; }; }
+      cat >>confdefs.h <<\_ACEOF
+#define HAVE_BROKEN_VISIBILITY_ATTRIBUTE 1
+_ACEOF
+
     fi
   fi
 
@@ -5448,9 +5457,10 @@ fi
 echo "$as_me:$LINENO: result: $libc_cv_broken_alias_attribute" >&5
 echo "${ECHO_T}$libc_cv_broken_alias_attribute" >&6
   if test $libc_cv_broken_alias_attribute = yes; then
-    { { echo "$as_me:$LINENO: error: working alias attribute support required" >&5
-echo "$as_me: error: working alias attribute support required" >&2;}
-   { (exit 1); exit 1; }; }
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_BROKEN_ALIAS_ATTRIBUTE 1
+_ACEOF
+
   fi
 
   if test $libc_cv_visibility_attribute = yes; then
@@ -5562,15 +5572,14 @@ EOF
   then
     libc_cv_z_nodelete=yes
   else
-    { { echo "$as_me:$LINENO: error: linker with -z nodelete support required" >&5
-echo "$as_me: error: linker with -z nodelete support required" >&2;}
-   { (exit 1); exit 1; }; }
+    libc_cv_z_nodelete=no
   fi
   rm -f conftest*
 fi
 echo "$as_me:$LINENO: result: $libc_cv_z_nodelete" >&5
 echo "${ECHO_T}$libc_cv_z_nodelete" >&6
 
+
   echo "$as_me:$LINENO: checking for -z nodlopen option" >&5
 echo $ECHO_N "checking for -z nodlopen option... $ECHO_C" >&6
 if test "${libc_cv_z_nodlopen+set}" = set; then
@@ -5591,15 +5600,14 @@ EOF
   then
     libc_cv_z_nodlopen=yes
   else
-    { { echo "$as_me:$LINENO: error: linker with -z nodlopen support required" >&5
-echo "$as_me: error: linker with -z nodlopen support required" >&2;}
-   { (exit 1); exit 1; }; }
+    libc_cv_z_nodlopen=no
   fi
   rm -f conftest*
 fi
 echo "$as_me:$LINENO: result: $libc_cv_z_nodlopen" >&5
 echo "${ECHO_T}$libc_cv_z_nodlopen" >&6
 
+
   echo "$as_me:$LINENO: checking for -z initfirst option" >&5
 echo $ECHO_N "checking for -z initfirst option... $ECHO_C" >&6
 if test "${libc_cv_z_initfirst+set}" = set; then
@@ -5620,18 +5628,15 @@ EOF
   then
     libc_cv_z_initfirst=yes
   else
-    { { echo "$as_me:$LINENO: error: linker with -z initfirst support required" >&5
-echo "$as_me: error: linker with -z initfirst support required" >&2;}
-   { (exit 1); exit 1; }; }
+    libc_cv_z_initfirst=no
   fi
   rm -f conftest*
 fi
 echo "$as_me:$LINENO: result: $libc_cv_z_initfirst" >&5
 echo "${ECHO_T}$libc_cv_z_initfirst" >&6
 
-  case "$base_machine" in
-    i[34567]86 | x86_64 | powerpc* | s390* | sparc* | alpha*)
-      echo "$as_me:$LINENO: checking for -z relro option" >&5
+
+  echo "$as_me:$LINENO: checking for -z relro option" >&5
 echo $ECHO_N "checking for -z relro option... $ECHO_C" >&6
 if test "${libc_cv_z_relro+set}" = set; then
   echo $ECHO_N "(cached) $ECHO_C" >&6
@@ -5657,14 +5662,13 @@ else
 fi
 echo "$as_me:$LINENO: result: $libc_cv_z_relro" >&5
 echo "${ECHO_T}$libc_cv_z_relro" >&6
-      if test "$libc_cv_z_relro" = no; then
-        { { echo "$as_me:$LINENO: error: linker with -z relro support required" >&5
-echo "$as_me: error: linker with -z relro support required" >&2;}
-   { (exit 1); exit 1; }; }
-      fi
-      ;;
-    *) ;;
-   esac
+
+  if test $libc_cv_z_relro = yes; then
+    cat >>confdefs.h <<\_ACEOF
+#define HAVE_Z_RELRO 1
+_ACEOF
+
+  fi
 
   echo "$as_me:$LINENO: checking for -Bgroup option" >&5
 echo $ECHO_N "checking for -Bgroup option... $ECHO_C" >&6
@@ -8506,7 +8510,12 @@ s,@PERL@,$PERL,;t t
 s,@INSTALL_INFO@,$INSTALL_INFO,;t t
 s,@BISON@,$BISON,;t t
 s,@VERSIONING@,$VERSIONING,;t t
+s,@libc_cv_asm_protected_directive@,$libc_cv_asm_protected_directive,;t t
 s,@libc_cv_cc_with_libunwind@,$libc_cv_cc_with_libunwind,;t t
+s,@libc_cv_z_nodelete@,$libc_cv_z_nodelete,;t t
+s,@libc_cv_z_nodlopen@,$libc_cv_z_nodlopen,;t t
+s,@libc_cv_z_initfirst@,$libc_cv_z_initfirst,;t t
+s,@libc_cv_z_relro@,$libc_cv_z_relro,;t t
 s,@libc_cv_Bgroup@,$libc_cv_Bgroup,;t t
 s,@libc_cv_libgcc_s_suffix@,$libc_cv_libgcc_s_suffix,;t t
 s,@libc_cv_as_needed@,$libc_cv_as_needed,;t t
index 71ceb04b33268a3003c334e19b23ebeee4cff0a2..924b0406cb440659d9876e179acf94f736401317 100644 (file)
@@ -131,9 +131,9 @@ AC_ARG_ENABLE([shared],
              [shared=default])
 AC_ARG_ENABLE([profile],
               AC_HELP_STRING([--enable-profile],
-                             [build profiled library @<:@default=no@:>@]),
+                             [build profiled library @<:@default=yes@:>@]),
              [profile=$enableval],
-             [profile=no])
+             [profile=yes])
 AC_ARG_ENABLE([omitfp],
               AC_HELP_STRING([--enable-omitfp],
                              [build undebuggable optimized library @<:@default=no@:>@]),
@@ -1259,9 +1259,12 @@ EOF
   if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
     libc_cv_asm_protected_directive=yes
   else
-    AC_MSG_ERROR(assembler support for symbol visibility is required)
+    libc_cv_asm_protected_directive=no
   fi
   rm -f conftest*])
+  AC_SUBST(libc_cv_asm_protected_directive)
+  AC_DEFINE(HAVE_PROTECTED)
+  AC_DEFINE(HAVE_HIDDEN)
 
   if test $libc_cv_asm_protected_directive = yes; then
     AC_CACHE_CHECK(whether __attribute__((visibility())) is supported,
@@ -1280,8 +1283,8 @@ EOF
                  fi
                  rm -f conftest.[cs]
                 ])
-    if test $libc_cv_visibility_attribute != yes; then
-      AC_MSG_ERROR(compiler support for visibility attribute is required)
+    if test $libc_cv_visibility_attribute = yes; then
+      AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
     fi
   fi
 
@@ -1304,7 +1307,7 @@ changequote([,])dnl
                  rm -f conftest.c conftest.s
                 ])
     if test $libc_cv_broken_visibility_attribute = yes; then
-      AC_MSG_ERROR(working compiler support for visibility attribute is required)
+      AC_DEFINE(HAVE_BROKEN_VISIBILITY_ATTRIBUTE)
     fi
   fi
 
@@ -1328,7 +1331,7 @@ EOF
                  rm -f conftest.c conftest.s
                 ])
   if test $libc_cv_broken_alias_attribute = yes; then
-    AC_MSG_ERROR(working alias attribute support required)
+    AC_DEFINE(HAVE_BROKEN_ALIAS_ATTRIBUTE)
   fi
 
   if test $libc_cv_visibility_attribute = yes; then
@@ -1400,9 +1403,10 @@ EOF
   then
     libc_cv_z_nodelete=yes
   else
-    AC_MSG_ERROR(linker with -z nodelete support required)
+    libc_cv_z_nodelete=no
   fi
   rm -f conftest*])
+  AC_SUBST(libc_cv_z_nodelete)
 
   AC_CACHE_CHECK(for -z nodlopen option,
                 libc_cv_z_nodlopen, [dnl
@@ -1416,9 +1420,10 @@ EOF
   then
     libc_cv_z_nodlopen=yes
   else
-    AC_MSG_ERROR(linker with -z nodlopen support required)
+    libc_cv_z_nodlopen=no
   fi
   rm -f conftest*])
+  AC_SUBST(libc_cv_z_nodlopen)
 
   AC_CACHE_CHECK(for -z initfirst option,
                 libc_cv_z_initfirst, [dnl
@@ -1432,16 +1437,13 @@ EOF
   then
     libc_cv_z_initfirst=yes
   else
-    AC_MSG_ERROR(linker with -z initfirst support required)
+    libc_cv_z_initfirst=no
   fi
   rm -f conftest*])
+  AC_SUBST(libc_cv_z_initfirst)
 
-  case "$base_machine" in
-changequote(,)dnl
-    i[34567]86 | x86_64 | powerpc* | s390* | sparc* | alpha*)
-changequote([,])dnl
-      AC_CACHE_CHECK(for -z relro option,
-                    libc_cv_z_relro, [dnl
+  AC_CACHE_CHECK(for -z relro option,
+                libc_cv_z_relro, [dnl
   libc_cv_z_relro=no
   if AC_TRY_COMMAND([${CC-cc} -v --help 2>&1|grep "z relro" 1>&AS_MESSAGE_LOG_FD])
   then
@@ -1450,12 +1452,10 @@ changequote([,])dnl
       libc_cv_z_relro=yes
     fi
   fi])
-      if test "$libc_cv_z_relro" = no; then
-        AC_MSG_ERROR(linker with -z relro support required)
-      fi
-      ;;
-    *) ;;
-   esac
+  AC_SUBST(libc_cv_z_relro)
+  if test $libc_cv_z_relro = yes; then
+    AC_DEFINE(HAVE_Z_RELRO)
+  fi
 
   AC_CACHE_CHECK(for -Bgroup option,
                 libc_cv_Bgroup, [dnl
index f0b4f00549ac999fe1ee9609c5ceac96f14221f2..a1321a9df8e849613477f1ae2e5222569bd1a7c2 100644 (file)
@@ -5,7 +5,7 @@ libc {
     # helper functions
     __libc_init_first; __libc_start_main;
 
-%if !HAVE___THREAD
+%if !(USE_TLS && HAVE___THREAD)
     # global variables
     _errno;
 
@@ -18,7 +18,7 @@ libc {
     gnu_get_libc_release; gnu_get_libc_version;
   }
   GLIBC_PRIVATE {
-%if HAVE___THREAD
+%if USE_TLS && HAVE___THREAD
     # This version is for the TLS symbol, GLIBC_2.0 is the old object symbol.
     errno;
 %endif
index 634844759da33c859bb2119daad8165a6e99e7b7..194db6b1ec5239430185a013e1bcf492763783a2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -30,7 +30,11 @@ extern int __libc_multiple_libcs;
 #include <tls.h>
 #ifndef SHARED
 # include <dl-osinfo.h>
-extern void __pthread_initialize_minimal (void);
+extern void __pthread_initialize_minimal (void)
+# if !(USE_TLS - 0) && !defined NONTLS_INIT_TP
+     __attribute__ ((weak))
+# endif
+     ;
 # ifndef THREAD_SET_STACK_GUARD
 /* Only exported for architectures that don't store the stack guard canary
    in thread local area.  */
@@ -136,8 +140,13 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
 
   /* Initialize the thread library at least a bit since the libgcc
      functions are using thread functions if these are available and
-     we need to setup errno.  */
-  __pthread_initialize_minimal ();
+     we need to setup errno.  If there is no thread library and we
+     handle TLS the function is defined in the libc to initialized the
+     TLS handling.  */
+# if !(USE_TLS - 0) && !defined NONTLS_INIT_TP
+  if (__pthread_initialize_minimal)
+# endif
+    __pthread_initialize_minimal ();
 #endif
 
 # ifndef SHARED
index 0d240ccef9970819bde531fb406365fb0c57d9f5..3544e396dae381669b1c3667ab74024c6a7f7c4d 100644 (file)
@@ -1,5 +1,5 @@
 /* Initialization code for TLS in statically linked application.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -29,6 +29,7 @@
  #error makefile bug, this file is for static only
 #endif
 
+#ifdef USE_TLS
 extern ElfW(Phdr) *_dl_phdr;
 extern size_t _dl_phnum;
 
@@ -142,19 +143,19 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
      The initialized value of _dl_tls_static_size is provided by dl-open.c
      to request some surplus that permits dynamic loading of modules with
      IE-model TLS.  */
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
   tcb_offset = roundup (memsz + GL(dl_tls_static_size), tcbalign);
   tlsblock = __sbrk (tcb_offset + tcbsize + max_align);
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
   tcb_offset = roundup (tcbsize, align ?: 1);
   tlsblock = __sbrk (tcb_offset + memsz + max_align
                     + TLS_PRE_TCB_SIZE + GL(dl_tls_static_size));
   tlsblock += TLS_PRE_TCB_SIZE;
-#else
+# else
   /* In case a model with a different layout for the TCB and DTV
      is defined add another #elif here and in the following #ifs.  */
-# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-#endif
+#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+# endif
 
   /* Align the TLS block.  */
   tlsblock = (void *) (((uintptr_t) tlsblock + max_align - 1)
@@ -165,16 +166,16 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
   // static_dtv[1].counter = 0;                would be needed if not already done
 
   /* Initialize the TLS block.  */
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
   static_dtv[2].pointer.val = ((char *) tlsblock + tcb_offset
                               - roundup (memsz, align ?: 1));
   static_map.l_tls_offset = roundup (memsz, align ?: 1);
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
   static_dtv[2].pointer.val = (char *) tlsblock + tcb_offset;
   static_map.l_tls_offset = tcb_offset;
-#else
-# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-#endif
+# else
+#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+# endif
   static_dtv[2].pointer.is_static = true;
   /* sbrk gives us zero'd memory, so we don't need to clear the remainder.  */
   memcpy (static_dtv[2].pointer.val, initimage, filesz);
@@ -182,16 +183,16 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
   /* Install the pointer to the dtv.  */
 
   /* Initialize the thread pointer.  */
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
   INSTALL_DTV ((char *) tlsblock + tcb_offset, static_dtv);
 
   const char *lossage = TLS_INIT_TP ((char *) tlsblock + tcb_offset, 0);
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
   INSTALL_DTV (tlsblock, static_dtv);
   const char *lossage = TLS_INIT_TP (tlsblock, 0);
-#else
-# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-#endif
+# else
+#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+# endif
   if (__builtin_expect (lossage != NULL, 0))
     __libc_fatal (lossage);
 
@@ -211,11 +212,11 @@ __libc_setup_tls (size_t tcbsize, size_t tcbalign)
 
   memsz = roundup (memsz, align ?: 1);
 
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
   memsz += tcbsize;
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
   memsz += tcb_offset;
-#endif
+# endif
 
   init_static_tls (memsz, MAX (TLS_TCB_ALIGN, max_align));
 }
@@ -229,11 +230,11 @@ _dl_tls_setup (void)
 {
   init_slotinfo ();
   init_static_tls (
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
                   TLS_TCB_SIZE,
-#else
+# else
                   0,
-#endif
+# endif
                   TLS_TCB_ALIGN);
   return 0;
 }
@@ -247,3 +248,16 @@ __pthread_initialize_minimal (void)
 {
   __libc_setup_tls (TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN);
 }
+
+#elif defined NONTLS_INIT_TP
+
+/* This is the minimal initialization function used when libpthread is
+   not used.  */
+void
+__attribute__ ((weak))
+__pthread_initialize_minimal (void)
+{
+  NONTLS_INIT_TP;
+}
+
+#endif
index 7c0b022b78f9a49fb45945d08ecdd0c1189ec2c6..7a2e3d08655987b00013a83b166acd579c32e934 100644 (file)
@@ -1,5 +1,5 @@
 /* Tests for atomic.h macros.
-   Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
 
@@ -379,117 +379,6 @@ do_test (void)
     }
 #endif
 
-#ifdef catomic_compare_and_exchange_val_acq
-  mem = 24;
-  if (catomic_compare_and_exchange_val_acq (&mem, 35, 24) != 24
-      || mem != 35)
-    {
-      puts ("catomic_compare_and_exchange_val_acq test 1 failed");
-      ret = 1;
-    }
-
-  mem = 12;
-  if (catomic_compare_and_exchange_val_acq (&mem, 10, 15) != 12
-      || mem != 12)
-    {
-      puts ("catomic_compare_and_exchange_val_acq test 2 failed");
-      ret = 1;
-    }
-
-  mem = -15;
-  if (catomic_compare_and_exchange_val_acq (&mem, -56, -15) != -15
-      || mem != -56)
-    {
-      puts ("catomic_compare_and_exchange_val_acq test 3 failed");
-      ret = 1;
-    }
-
-  mem = -1;
-  if (catomic_compare_and_exchange_val_acq (&mem, 17, 0) != -1
-      || mem != -1)
-    {
-      puts ("catomic_compare_and_exchange_val_acq test 4 failed");
-      ret = 1;
-    }
-#endif
-
-  mem = 24;
-  if (catomic_compare_and_exchange_bool_acq (&mem, 35, 24)
-      || mem != 35)
-    {
-      puts ("catomic_compare_and_exchange_bool_acq test 1 failed");
-      ret = 1;
-    }
-
-  mem = 12;
-  if (! catomic_compare_and_exchange_bool_acq (&mem, 10, 15)
-      || mem != 12)
-    {
-      puts ("catomic_compare_and_exchange_bool_acq test 2 failed");
-      ret = 1;
-    }
-
-  mem = -15;
-  if (catomic_compare_and_exchange_bool_acq (&mem, -56, -15)
-      || mem != -56)
-    {
-      puts ("catomic_compare_and_exchange_bool_acq test 3 failed");
-      ret = 1;
-    }
-
-  mem = -1;
-  if (! catomic_compare_and_exchange_bool_acq (&mem, 17, 0)
-      || mem != -1)
-    {
-      puts ("catomic_compare_and_exchange_bool_acq test 4 failed");
-      ret = 1;
-    }
-
-  mem = 2;
-  if (catomic_exchange_and_add (&mem, 11) != 2
-      || mem != 13)
-    {
-      puts ("catomic_exchange_and_add test failed");
-      ret = 1;
-    }
-
-  mem = -21;
-  catomic_add (&mem, 22);
-  if (mem != 1)
-    {
-      puts ("catomic_add test failed");
-      ret = 1;
-    }
-
-  mem = -1;
-  catomic_increment (&mem);
-  if (mem != 0)
-    {
-      puts ("catomic_increment test failed");
-      ret = 1;
-    }
-
-  mem = 2;
-  if (catomic_increment_val (&mem) != 3)
-    {
-      puts ("catomic_increment_val test failed");
-      ret = 1;
-    }
-
-  mem = 17;
-  catomic_decrement (&mem);
-  if (mem != 16)
-    {
-      puts ("catomic_decrement test failed");
-      ret = 1;
-    }
-
-  if (catomic_decrement_val (&mem) != 15)
-    {
-      puts ("catomic_decrement_val test failed");
-      ret = 1;
-    }
-
   return ret;
 }
 
index f7a8fb35e93baff8e98af205c6b278238e72e209..2196d204325050a0ee6cd690498d82af0418f328 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2002, 2003, 2004, 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
@@ -25,7 +25,7 @@ static const char __libc_version[] = VERSION;
 
 static const char banner[] =
 "GNU C Library "RELEASE" release version "VERSION", by Roland McGrath et al.\n\
-Copyright (C) 2007 Free Software Foundation, Inc.\n\
+Copyright (C) 2006 Free Software Foundation, Inc.\n\
 This is free software; see the source for copying conditions.\n\
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
 PARTICULAR PURPOSE.\n\
@@ -34,6 +34,9 @@ Compiled by GNU CC version "__VERSION__".\n"
 #ifdef GLIBC_OLDEST_ABI
 "The oldest ABI supported: " GLIBC_OLDEST_ABI ".\n"
 #endif
+#ifdef USE_TLS
+"Thread-local storage support included.\n"
+#endif
 "For bug reporting instructions, please see:\n\
 <http://www.gnu.org/software/libc/bugs.html>.\n";
 
index 6f47fab42a2250900362a5c2607be79e86b48097..f4d971e34b3c402892cefe5b8cf6ba34d963a81e 100755 (executable)
@@ -1,6 +1,5 @@
 #! /bin/sh
-# Copyright (C) 1998,1999,2001,2003,2004,2006,2007
-# Free Software Foundation, Inc.
+# Copyright (C) 1998,1999,2001,2003,2004,2006 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 # Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -40,7 +39,7 @@ if test $# -eq 0; then
       ;;
     --v | --ve | --ver | --vers | --versi | --versio | --version)
       echo 'catchsegv (GNU libc) @VERSION@'
-      echo 'Copyright (C) 2007 Free Software Foundation, Inc.
+      echo 'Copyright (C) 2006 Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 Written by Ulrich Drepper.'
index e8ffe2f4208a96be0e215af28dd01800653086ba..c913c76d21781307b433292bc2d121ecc3a8f18e 100755 (executable)
@@ -64,7 +64,7 @@ do_version() {
   printf $"Copyright (C) %s Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-" "2007"
+" "2006"
   printf $"Written by %s.
 " "Ulrich Drepper"
   exit 0
@@ -161,32 +161,32 @@ if test -n "$data"; then
   while read fct; do
     read file
     if test "$fct" != '??' -a "$file" != '??:0'; then
-      format_line $fct $file
+      format_line "$fct" "$file"
     fi
   done
 else
-  fifo=$(mktemp -u ${TMPDIR:-/tmp}/xtrace.XXXXXX)
+  fifo=$(mktemp -ut xtrace.XXXXXX) || exit
+  trap 'rm -f "$fifo"; exit 1' HUP INT QUIT TERM PIPE
   mkfifo -m 0600 $fifo || exit 1
-  trap 'rm $fifo; exit 1' SIGINT SIGTERM SIGPIPE
 
   # Now start the program and let it write to the FIFO.
   $TERMINAL_PROG -T "xtrace - $program $*" -e /bin/sh -c "LD_PRELOAD=$pcprofileso PCPROFILE_OUTPUT=$fifo $program $*; read < $fifo" &
   termpid=$!
-  $pcprofiledump -u $fifo |
+  $pcprofiledump -u "$fifo" |
   while read line; do
-     echo $line |
+     echo "$line" |
      sed 's/this = \([^,]*\).*/\1/' |
-     addr2line -fC -e $program
+     addr2line -fC -e "$program"
   done |
   while read fct; do
     read file
     if test "$fct" != '??' -a "$file" != '??:0'; then
-      format_line $fct $file
+      format_line "$fct" "$file"
     fi
   done
   read -p "Press return here to close $TERMINAL_PROG($program)."
-  echo > $fifo
-  rm $fifo
+  echo > "$fifo"
+  rm "$fifo"
 fi
 
 exit 0
index e8fbab2958c17dca26e332062fd97baed95a43c5..63e7b31b2a9b147cb31b08d16c6ef1c18523e6ed 100644 (file)
@@ -41,7 +41,10 @@ endif
 ifeq (yes,$(build-shared))
 tests = glrefmain failtest tst-dladdr default errmsg1 tstcxaatexit \
        bug-dlopen1 bug-dlsym1 tst-dlinfo bug-atexit1 bug-atexit2 \
-       bug-atexit3 tstatexit
+       bug-atexit3
+ifeq (yes,$(have-protected))
+tests += tstatexit
+endif
 endif
 modules-names = glreflib1 glreflib2 failtestmod defaultmod1 defaultmod2 \
                errmsg1mod modatexit modcxaatexit \
index 923127cbf3d2c91827bc75b14ec817bab3dac563..20aa9504fb1bbfe8392c28b18936644cd25d16e2 100644 (file)
@@ -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
@@ -32,7 +32,9 @@ dlinfo (void *handle, int request, void *arg)
 
 #else
 
-# include <dl-tls.h>
+# ifdef USE_TLS
+#  include <dl-tls.h>
+# endif
 
 struct dlinfo_args
 {
@@ -56,9 +58,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)
@@ -95,14 +96,18 @@ RTLD_SELF used in code not dynamically loaded"));
 
     case RTLD_DI_TLS_MODID:
       *(size_t *) args->arg = 0;
+#ifdef USE_TLS
       *(size_t *) args->arg = l->l_tls_modid;
+#endif
       break;
 
     case RTLD_DI_TLS_DATA:
       {
        void *data = NULL;
+#ifdef USE_TLS
        if (l->l_tls_modid != 0)
          data = _dl_tls_get_addr_soft (l);
+#endif
        *(void **) args->arg = data;
        break;
       }
index afebaec1ec0d4b1e7f28759125a396133131ea26..06e376d80321222a154e6005f7a9164820a117d4 100644 (file)
@@ -159,8 +159,8 @@ endif
 ifeq (yes,$(build-shared))
 tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
         constload1 order $(tests-vis-$(have-protected)) noload filter unload \
-        reldep reldep2 reldep3 reldep4 nodelete nodelete2 \
-        nodlopen nodlopen2 neededtest neededtest2 \
+        reldep reldep2 reldep3 reldep4 $(tests-nodelete-$(have-z-nodelete)) \
+        $(tests-nodlopen-$(have-z-nodlopen)) neededtest neededtest2 \
         neededtest3 neededtest4 unload2 lateglobal initfirst global \
         restest2 next dblload dblunload reldep5 reldep6 reldep7 reldep8 \
         circleload1 tst-tls3 tst-tls4 tst-tls5 tst-tls6 tst-tls7 tst-tls8 \
@@ -175,6 +175,8 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
 #       reldep9
 test-srcs = tst-pathopt
 tests-vis-yes = vismain
+tests-nodelete-yes = nodelete nodelete2
+tests-nodlopen-yes = nodlopen nodlopen2
 tests-execstack-yes = tst-execstack tst-execstack-needed tst-execstack-prog
 endif
 ifeq (yesyes,$(have-fpie)$(build-shared))
@@ -184,9 +186,8 @@ tests: $(objpfx)tst-leaks1-mem
 modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
                testobj1_1 failobj constload2 constload3 unloadmod \
                dep1 dep2 dep3 dep4 $(modules-vis-$(have-protected)) \
-               nodelmod1 nodelmod2 nodelmod3 nodelmod4 \
-               nodel2mod1 nodel2mod2 nodel2mod3 \
-               nodlopenmod nodlopenmod2 filtmod1 filtmod2 \
+               $(modules-nodelete-$(have-z-nodelete)) \
+               $(modules-nodlopen-$(have-z-nodlopen)) filtmod1 filtmod2 \
                reldepmod1 reldepmod2 reldepmod3 reldepmod4 nextmod1 nextmod2 \
                reldep4mod1 reldep4mod2 reldep4mod3 reldep4mod4 \
                neededobj1 neededobj2 neededobj3 neededobj4 \
@@ -220,6 +221,9 @@ ifeq (yesyes,$(have-fpie)$(build-shared))
 modules-names += tst-piemod1
 endif
 modules-vis-yes = vismod1 vismod2 vismod3
+modules-nodelete-yes = nodelmod1 nodelmod2 nodelmod3 nodelmod4 \
+                      nodel2mod1 nodel2mod2 nodel2mod3
+modules-nodlopen-yes = nodlopenmod nodlopenmod2
 modules-execstack-yes = tst-execstack-mod
 extra-test-objs += $(addsuffix .os,$(strip $(modules-names)))
 # We need this variable to be sure the test modules get the right CPPFLAGS.
index e18446644e5f2ad5c2d7ebcd334a896b1f0561d6..6730fb36eb5103d62b7d3ba92746a83897b99f8c 100644 (file)
@@ -439,7 +439,7 @@ save_cache (const char *cache_name)
     }
 
   if (write (fd, strings, total_strlen) != (ssize_t) total_strlen)
-    error (EXIT_FAILURE, errno, _("Writing of cache data failed"));
+    error (EXIT_FAILURE, errno, _("Writing of cache data failed."));
 
   close (fd);
 
index e55dc4b46f07d083b655b071325803e47b634061..7dbf716cfa4f7e8b46d7d5c2f90f57786f0db7c2 100644 (file)
@@ -1,5 +1,5 @@
 /* Locate the shared object symbol nearest a given address.
-   Copyright (C) 1996-2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1996-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
 #include <ldsodefs.h>
 
 
-int
-internal_function
-_dl_addr (const void *address, Dl_info *info,
-         struct link_map **mapp, const ElfW(Sym) **symbolp)
+static void
+__attribute ((always_inline))
+determine_info (const ElfW(Addr) addr, struct link_map *match, Dl_info *info,
+               struct link_map **mapp, const ElfW(Sym) **symbolp)
 {
-  const ElfW(Addr) addr = DL_LOOKUP_ADDRESS (address);
+  /* Now we know what object the address lies in.  */
+  info->dli_fname = match->l_name;
+  info->dli_fbase = (void *) match->l_map_start;
 
-  /* Protect against concurrent loads and unloads.  */
-  __rtld_lock_lock_recursive (GL(dl_load_lock));
+  /* If this is the main program the information is incomplete.  */
+  if (__builtin_expect (match->l_name[0], 'a') == '\0'
+      && match->l_type == lt_executable)
+    info->dli_fname = _dl_argv[0];
 
-  /* Find the highest-addressed object that ADDRESS is not below.  */
-  struct link_map *match = NULL;
-  for (Lmid_t ns = 0; ns < DL_NNS; ++ns)
-    for (struct link_map *l = GL(dl_ns)[ns]._ns_loaded; l; l = l->l_next)
-      if (addr >= l->l_map_start && addr < l->l_map_end)
-       {
-         /* We know ADDRESS lies within L if in any shared object.
-            Make sure it isn't past the end of L's segments.  */
-         size_t n = l->l_phnum;
-         if (n > 0)
-           {
-             do
-               --n;
-             while (l->l_phdr[n].p_type != PT_LOAD);
-             if (addr >= (l->l_addr +
-                          l->l_phdr[n].p_vaddr + l->l_phdr[n].p_memsz))
-               /* Off the end of the highest-addressed shared object.  */
-               continue;
-           }
+  const ElfW(Sym) *symtab
+    = (const ElfW(Sym) *) D_PTR (match, l_info[DT_SYMTAB]);
+  const char *strtab = (const char *) D_PTR (match, l_info[DT_STRTAB]);
 
-         match = l;
-         break;
-       }
+  ElfW(Word) strtabsize = match->l_info[DT_STRSZ]->d_un.d_val;
 
-  int result = 0;
-  if (match != NULL)
+  const ElfW(Sym) *matchsym = NULL;
+  if (match->l_info[DT_ADDRTAGIDX (DT_GNU_HASH) + DT_NUM + DT_THISPROCNUM
+                   + DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM] != NULL)
     {
-      /* Now we know what object the address lies in.  */
-      info->dli_fname = match->l_name;
-      info->dli_fbase = (void *) match->l_map_start;
-
-      /* If this is the main program the information is incomplete.  */
-      if (__builtin_expect (match->l_name[0], 'a') == '\0'
-         && match->l_type == lt_executable)
-       info->dli_fname = _dl_argv[0];
-
-      const ElfW(Sym) *symtab
-       = (const ElfW(Sym) *) D_PTR (match, l_info[DT_SYMTAB]);
-      const char *strtab = (const char *) D_PTR (match, l_info[DT_STRTAB]);
-
-      ElfW(Word) strtabsize = match->l_info[DT_STRSZ]->d_un.d_val;
-
-      const ElfW(Sym) *matchsym = NULL;
-      if (match->l_info[DT_ADDRTAGIDX (DT_GNU_HASH) + DT_NUM + DT_THISPROCNUM
-                       + DT_VERSIONTAGNUM + DT_EXTRANUM + DT_VALNUM] != NULL)
+      /* We look at all symbol table entries referenced by the hash
+        table.  */
+      for (Elf_Symndx bucket = 0; bucket < match->l_nbuckets; ++bucket)
        {
-         /* We look at all symbol table entries referenced by the
-            hash table.  */
-         for (Elf_Symndx bucket = 0; bucket < match->l_nbuckets; ++bucket)
+         Elf32_Word symndx = match->l_gnu_buckets[bucket];
+         if (symndx != 0)
            {
-             Elf32_Word symndx = match->l_gnu_buckets[bucket];
-             if (symndx != 0)
+             const Elf32_Word *hasharr = &match->l_gnu_chain_zero[symndx];
+
+             do
                {
-                 const Elf32_Word *hasharr = &match->l_gnu_chain_zero[symndx];
-
-                 do
-                   {
-                     /* The hash table never references local symbols
-                        so we can omit that test here.  */
-                     if ((symtab[symndx].st_shndx != SHN_UNDEF
-                          || symtab[symndx].st_value != 0)
-                         && ELFW(ST_TYPE) (symtab[symndx].st_info) != STT_TLS
-                         && DL_ADDR_SYM_MATCH (match, &symtab[symndx],
-                                               matchsym, addr)
-                         && symtab[symndx].st_name < strtabsize)
-                       matchsym = (ElfW(Sym) *) &symtab[symndx];
-
-                     ++symndx;
-                   }
-                 while ((*hasharr++ & 1u) == 0);
+                 /* The hash table never references local symbols so
+                    we can omit that test here.  */
+                 if ((symtab[symndx].st_shndx != SHN_UNDEF
+                      || symtab[symndx].st_value != 0)
+#ifdef USE_TLS
+                     && ELFW(ST_TYPE) (symtab[symndx].st_info) != STT_TLS
+#endif
+                     && DL_ADDR_SYM_MATCH (match, &symtab[symndx],
+                                           matchsym, addr)
+                     && symtab[symndx].st_name < strtabsize)
+                   matchsym = (ElfW(Sym) *) &symtab[symndx];
+
+                 ++symndx;
                }
+             while ((*hasharr++ & 1u) == 0);
            }
        }
+    }
+  else
+    {
+      const ElfW(Sym) *symtabend;
+      if (match->l_info[DT_HASH] != NULL)
+       symtabend = (symtab
+                    + ((Elf_Symndx *) D_PTR (match, l_info[DT_HASH]))[1]);
       else
-       {
-         const ElfW(Sym) *symtabend;
-         if (match->l_info[DT_HASH] != NULL)
-           symtabend = (symtab
-                        + ((Elf_Symndx *) D_PTR (match, l_info[DT_HASH]))[1]);
-         else
-           /* There is no direct way to determine the number of symbols in the
-              dynamic symbol table and no hash table is present.  The ELF
-              binary is ill-formed but what shall we do?  Use the beginning of
-              the string table which generally follows the symbol table.  */
-           symtabend = (const ElfW(Sym) *) strtab;
-
-         for (; (void *) symtab < (void *) symtabend; ++symtab)
-           if ((ELFW(ST_BIND) (symtab->st_info) == STB_GLOBAL
-                || ELFW(ST_BIND) (symtab->st_info) == STB_WEAK)
-               && ELFW(ST_TYPE) (symtab->st_info) != STT_TLS
-               && (symtab->st_shndx != SHN_UNDEF
-                   || symtab->st_value != 0)
-               && DL_ADDR_SYM_MATCH (match, symtab, matchsym, addr)
-               && symtab->st_name < strtabsize)
-             matchsym = (ElfW(Sym) *) symtab;
-       }
+       /* There is no direct way to determine the number of symbols in the
+          dynamic symbol table and no hash table is present.  The ELF
+          binary is ill-formed but what shall we do?  Use the beginning of
+          the string table which generally follows the symbol table.  */
+       symtabend = (const ElfW(Sym) *) strtab;
+
+      for (; (void *) symtab < (void *) symtabend; ++symtab)
+       if ((ELFW(ST_BIND) (symtab->st_info) == STB_GLOBAL
+            || ELFW(ST_BIND) (symtab->st_info) == STB_WEAK)
+#ifdef USE_TLS
+           && ELFW(ST_TYPE) (symtab->st_info) != STT_TLS
+#endif
+           && (symtab->st_shndx != SHN_UNDEF
+               || symtab->st_value != 0)
+           && DL_ADDR_SYM_MATCH (match, symtab, matchsym, addr)
+           && symtab->st_name < strtabsize)
+         matchsym = (ElfW(Sym) *) symtab;
+    }
 
-      if (mapp)
-       *mapp = match;
-      if (symbolp)
-       *symbolp = matchsym;
+  if (mapp)
+    *mapp = match;
+  if (symbolp)
+    *symbolp = matchsym;
 
-      if (matchsym)
-       {
-         /* We found a symbol close by.  Fill in its name and exact
-            address.  */
-         lookup_t matchl = LOOKUP_VALUE (match);
+  if (matchsym)
+    {
+      /* We found a symbol close by.  Fill in its name and exact
+        address.  */
+      lookup_t matchl = LOOKUP_VALUE (match);
 
-         info->dli_sname = strtab + matchsym->st_name;
-         info->dli_saddr = DL_SYMBOL_ADDRESS (matchl, matchsym);
-       }
-      else
+      info->dli_sname = strtab + matchsym->st_name;
+      info->dli_saddr = DL_SYMBOL_ADDRESS (matchl, matchsym);
+    }
+  else
+    {
+      /* No symbol matches.  We return only the containing object.  */
+      info->dli_sname = NULL;
+      info->dli_saddr = NULL;
+    }
+}
+
+
+int
+internal_function
+_dl_addr (const void *address, Dl_info *info,
+         struct link_map **mapp, const ElfW(Sym) **symbolp)
+{
+  const ElfW(Addr) addr = DL_LOOKUP_ADDRESS (address);
+  int result = 0;
+
+  /* Protect against concurrent loads and unloads.  */
+  __rtld_lock_lock_recursive (GL(dl_load_lock));
+
+  /* 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
+         && (l->l_contiguous || _dl_addr_inside_object (l, addr)))
        {
-         /* No symbol matches.  We return only the containing object.  */
-         info->dli_sname = NULL;
-         info->dli_saddr = NULL;
+         determine_info (addr, l, info, mapp, symbolp);
+         result = 1;
+         goto out;
        }
 
-      result = 1;
-    }
-
+ out:
   __rtld_lock_unlock_recursive (GL(dl_load_lock));
 
   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;
+}
index bbeba77e4a1cac772c6fa674f1c0842f8531fbd1..fc7d9916c6fe52d0cc3959e4bdc4a3168f558c1d 100644 (file)
@@ -256,7 +256,11 @@ _dl_load_cache_lookup (const char *name)
        platform = 1ULL << platform;
 
       /* Only accept hwcap if it's for the right platform.  */
-#define _DL_HWCAP_TLS_MASK (1LL << 63)
+#ifdef USE_TLS
+# define _DL_HWCAP_TLS_MASK (1LL << 63)
+#else
+# define _DL_HWCAP_TLS_MASK 0
+#endif
 #define HWCAP_CHECK \
       if (GLRO(dl_osversion) && lib->osversion > GLRO(dl_osversion))         \
        continue;                                                             \
index df968fe649e3050cb4750605f609cecea1318e70..5cd8b9be2dc11dfc04fc69453830d2546ffcd3e5 100644 (file)
@@ -1,5 +1,5 @@
 /* Close a shared object opened by `_dl_open'.
-   Copyright (C) 1996-2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1996-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
@@ -31,6 +31,7 @@
 #include <sys/types.h>
 #include <sys/mman.h>
 #include <sysdep-cancel.h>
+#include <tls.h>
 
 
 /* Type of the constructor functions.  */
@@ -41,6 +42,7 @@ typedef void (*fini_t) (void);
 #define IDX_STILL_USED -1
 
 
+#ifdef USE_TLS
 /* Returns true we an non-empty was found.  */
 static bool
 remove_slotinfo (size_t idx, struct dtv_slotinfo_list *listp, size_t disp,
@@ -102,13 +104,12 @@ remove_slotinfo (size_t idx, struct dtv_slotinfo_list *listp, size_t disp,
   /* No non-entry in this list element.  */
   return false;
 }
+#endif
 
 
 void
 _dl_close_worker (struct link_map *map)
 {
-  Lmid_t ns = map->l_ns;
-
   /* One less direct use.  */
   --map->l_direct_opencount;
 
@@ -131,11 +132,16 @@ _dl_close_worker (struct link_map *map)
       return;
     }
 
+  Lmid_t nsid = map->l_ns;
+  struct link_namespaces *ns = &GL(dl_ns)[nsid];
+
  retry:
   dl_close_state = pending;
 
+#ifdef USE_TLS
   bool any_tls = false;
-  const unsigned int nloaded = GL(dl_ns)[ns]._ns_nloaded;
+#endif
+  const unsigned int nloaded = ns->_ns_nloaded;
   char used[nloaded];
   char done[nloaded];
   struct link_map *maps[nloaded];
@@ -143,7 +149,7 @@ _dl_close_worker (struct link_map *map)
   /* Run over the list and assign indexes to the link maps and enter
      them into the MAPS array.  */
   int idx = 0;
-  for (struct link_map *l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l->l_next)
+  for (struct link_map *l = ns->_ns_loaded; l != NULL; l = l->l_next)
     {
       l->l_idx = idx;
       maps[idx] = l;
@@ -220,20 +226,22 @@ _dl_close_worker (struct link_map *map)
     }
 
   /* Sort the entries.  */
-  _dl_sort_fini (GL(dl_ns)[ns]._ns_loaded, maps, nloaded, used, ns);
+  _dl_sort_fini (ns->_ns_loaded, maps, nloaded, used, nsid);
 
   /* Call all termination functions at once.  */
 #ifdef SHARED
-  bool do_audit = GLRO(dl_naudit) > 0 && !GL(dl_ns)[ns]._ns_loaded->l_auditing;
+  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)
     {
       struct link_map *imap = maps[i];
 
       /* All elements must be in the same namespace.  */
-      assert (imap->l_ns == ns);
+      assert (imap->l_ns == nsid);
 
       if (!used[i])
        {
@@ -248,7 +256,7 @@ _dl_close_worker (struct link_map *map)
              if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS,
                                    0))
                _dl_debug_printf ("\ncalling fini: %s [%lu]\n\n",
-                                 imap->l_name, ns);
+                                 imap->l_name, nsid);
 
              if (imap->l_info[DT_FINI_ARRAY] != NULL)
                {
@@ -291,6 +299,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;
@@ -334,7 +345,7 @@ _dl_close_worker (struct link_map *map)
                struct link_map *tmap = (struct link_map *)
                  ((char *) imap->l_scope[cnt]
                   - offsetof (struct link_map, l_searchlist));
-               assert (tmap->l_ns == ns);
+               assert (tmap->l_ns == nsid);
                if (tmap->l_idx == IDX_STILL_USED)
                  ++remain;
                else
@@ -399,18 +410,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;
            }
@@ -435,7 +446,7 @@ _dl_close_worker (struct link_map *map)
   /* Auditing checkpoint: we will start deleting objects.  */
   if (__builtin_expect (do_audit, 0))
     {
-      struct link_map *head = GL(dl_ns)[ns]._ns_loaded;
+      struct link_map *head = ns->_ns_loaded;
       struct audit_ifaces *afct = GLRO(dl_audit);
       /* Do not call the functions for any auditing object.  */
       if (head->l_auditing == 0)
@@ -452,13 +463,55 @@ _dl_close_worker (struct link_map *map)
 #endif
 
   /* Notify the debugger we are about to remove some loaded objects.  */
-  struct r_debug *r = _dl_debug_initialize (0, ns);
+  struct r_debug *r = _dl_debug_initialize (0, nsid);
   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)))
+    {
+      struct dl_scope_free_list *fsl;
+
+      THREAD_GSCOPE_WAIT ();
+      /* Now we can free any queued old scopes.  */
+      if ((fsl = GL(dl_scope_free_list)) != NULL)
+       while (fsl->count > 0)
+         free (fsl->list[--fsl->count]);
+    }
+
+#ifdef USE_TLS
   size_t tls_free_start;
   size_t tls_free_end;
   tls_free_start = tls_free_end = NO_TLS_OFFSET;
+#endif
 
   /* Check each element of the search list to see if all references to
      it are gone.  */
@@ -471,24 +524,8 @@ _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.  */
-             unsigned int cnt = GL(dl_ns)[ns]._ns_main_searchlist->r_nlist;
-
-             do
-               --cnt;
-             while (GL(dl_ns)[ns]._ns_main_searchlist->r_list[cnt] != imap);
-
-             /* The object was already correctly registered.  */
-             while (++cnt
-                    < GL(dl_ns)[ns]._ns_main_searchlist->r_nlist)
-               GL(dl_ns)[ns]._ns_main_searchlist->r_list[cnt - 1]
-                 = GL(dl_ns)[ns]._ns_main_searchlist->r_list[cnt];
-
-             --GL(dl_ns)[ns]._ns_main_searchlist->r_nlist;
-           }
 
+#ifdef USE_TLS
          /* Remove the object from the dtv slotinfo array if it uses TLS.  */
          if (__builtin_expect (imap->l_tls_blocksize > 0, 0))
            {
@@ -507,7 +544,7 @@ _dl_close_worker (struct link_map *map)
                     this search list, going in either direction.  When the
                     whole chunk is at the end of the used area then we can
                     reclaim it.  */
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
                  if (tls_free_start == NO_TLS_OFFSET
                      || (size_t) imap->l_tls_offset == tls_free_start)
                    {
@@ -547,7 +584,7 @@ _dl_close_worker (struct link_map *map)
                            = tls_free_end - imap->l_tls_blocksize;
                        }
                    }
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
                  if ((size_t) imap->l_tls_offset == tls_free_end)
                    /* Extend the contiguous chunk being reclaimed.  */
                    tls_free_end -= imap->l_tls_blocksize;
@@ -564,11 +601,12 @@ _dl_close_worker (struct link_map *map)
                      tls_free_start = imap->l_tls_offset;
                      tls_free_end = tls_free_start + imap->l_tls_blocksize;
                    }
-#else
-# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-#endif
+# else
+#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+# endif
                }
            }
+#endif
 
          /* We can unmap all the maps at once.  We determined the
             start address and length when we loaded the object and
@@ -581,12 +619,12 @@ _dl_close_worker (struct link_map *map)
          else
            {
 #ifdef SHARED
-             assert (ns != LM_ID_BASE);
+             assert (nsid != LM_ID_BASE);
 #endif
-             GL(dl_ns)[ns]._ns_loaded = imap->l_next;
+             ns->_ns_loaded = imap->l_next;
            }
 
-         --GL(dl_ns)[ns]._ns_nloaded;
+         --ns->_ns_nloaded;
          if (imap->l_next != NULL)
            imap->l_next->l_prev = imap->l_prev;
 
@@ -634,6 +672,7 @@ _dl_close_worker (struct link_map *map)
        }
     }
 
+#ifdef USE_TLS
   /* If we removed any object which uses TLS bump the generation counter.  */
   if (any_tls)
     {
@@ -643,12 +682,13 @@ _dl_close_worker (struct link_map *map)
       if (tls_free_end == GL(dl_tls_static_used))
        GL(dl_tls_static_used) = tls_free_start;
     }
+#endif
 
 #ifdef SHARED
   /* Auditing checkpoint: we have deleted all objects.  */
   if (__builtin_expect (do_audit, 0))
     {
-      struct link_map *head = GL(dl_ns)[ns]._ns_loaded;
+      struct link_map *head = ns->_ns_loaded;
       /* Do not call the functions for any auditing object.  */
       if (head->l_auditing == 0)
        {
@@ -702,6 +742,7 @@ _dl_close (void *_map)
 }
 
 
+#ifdef USE_TLS
 static bool __libc_freeres_fn_section
 free_slotinfo (struct dtv_slotinfo_list **elemp)
 {
@@ -728,45 +769,52 @@ free_slotinfo (struct dtv_slotinfo_list **elemp)
 
   return true;
 }
+#endif
 
 
 libc_freeres_fn (free_mem)
 {
-  for (Lmid_t ns = 0; ns < DL_NNS; ++ns)
-    if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0
-       && (GL(dl_ns)[ns]._ns_main_searchlist->r_nlist
+  for (Lmid_t nsid = 0; nsid < DL_NNS; ++nsid)
+    if (__builtin_expect (GL(dl_ns)[nsid]._ns_global_scope_alloc, 0) != 0
+       && (GL(dl_ns)[nsid]._ns_main_searchlist->r_nlist
            // XXX Check whether we need NS-specific initial_searchlist
            == GLRO(dl_initial_searchlist).r_nlist))
       {
        /* All object dynamically loaded by the program are unloaded.  Free
           the memory allocated for the global scope variable.  */
-       struct link_map **old = GL(dl_ns)[ns]._ns_main_searchlist->r_list;
+       struct link_map **old = GL(dl_ns)[nsid]._ns_main_searchlist->r_list;
 
        /* Put the old map in.  */
-       GL(dl_ns)[ns]._ns_main_searchlist->r_list
+       GL(dl_ns)[nsid]._ns_main_searchlist->r_list
          // XXX Check whether we need NS-specific initial_searchlist
          = GLRO(dl_initial_searchlist).r_list;
        /* Signal that the original map is used.  */
-       GL(dl_ns)[ns]._ns_global_scope_alloc = 0;
+       GL(dl_ns)[nsid]._ns_global_scope_alloc = 0;
 
        /* Now free the old map.  */
        free (old);
       }
 
+#ifdef USE_TLS
   if (USE___THREAD || GL(dl_tls_dtv_slotinfo_list) != NULL)
     {
       /* Free the memory allocated for the dtv slotinfo array.  We can do
         this only if all modules which used this memory are unloaded.  */
-#ifdef SHARED
+# ifdef SHARED
       if (GL(dl_initial_dtv) == NULL)
        /* There was no initial TLS setup, it was set up later when
           it used the normal malloc.  */
        free_slotinfo (&GL(dl_tls_dtv_slotinfo_list));
       else
-#endif
+# endif
        /* The first element of the list does not have to be deallocated.
           It was allocated in the dynamic linker (i.e., with a different
           malloc), and in the static library it's in .bss space.  */
        free_slotinfo (&GL(dl_tls_dtv_slotinfo_list)->next);
     }
+#endif
+
+  void *scope_free_list = GL(dl_scope_free_list);
+  GL(dl_scope_free_list) = NULL;
+  free (scope_free_list);
 }
index 4ec984e15bc0fa4a45976eb45c7a82f5cdc56672..c35cc977fa5f2363cd7047dd2eb8d9f08bd3deb1 100644 (file)
@@ -123,7 +123,7 @@ DST not allowed in SUID/SGID programs"));                                 \
               processed.  */                                                 \
            if (fatal)                                                        \
              _dl_signal_error (0, __str, NULL, N_("\
-empty dynamic string token substitution"));                                  \
+empty dynamics string token substitution"));                                 \
            else                                                              \
              {                                                               \
                /* This is for DT_AUXILIARY.  */                              \
index 83d16bdb0e090dcf75404111c00ceb018f409c50..175b7cd195148a3e82e825d42ab56605667e70bd 100644 (file)
@@ -1,5 +1,6 @@
 /* Handling of dynamic sring tokens.
-   Copyright (C) 1999,2001,2002,2003,2004,2006 Free Software Foundation, Inc.
+   Copyright (C) 1999,2001,2002,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
@@ -50,7 +51,7 @@
                                                                              \
           First get the origin string if it is not available yet.            \
           This can only happen for the map of the executable.  */            \
-       DL_DST_REQ_STATIC                                                     \
+       DL_DST_REQ_STATIC (l)                                                 \
        if ((l)->l_origin == NULL)                                            \
          {                                                                   \
            assert ((l)->l_name[0] == '\0');                                  \
@@ -68,9 +69,9 @@
     __len; })
 
 #ifdef SHARED
-# define DL_DST_REQ_STATIC /* nothing */
+# define DL_DST_REQ_STATIC(l) /* nothing */
 #else
-# define DL_DST_REQ_STATIC \
+# define DL_DST_REQ_STATIC(l) \
   if ((l) == NULL)                                                           \
     {                                                                        \
       const char *origin = _dl_get_origin ();                                \
index e068124d6fc214675f53ef200391e360e76d4c25..78beecfdcb610792f0e85183af5f126c82d698c0 100644 (file)
@@ -1,5 +1,5 @@
 /* Manage function descriptors.  Generic version.
-   Copyright (C) 1999-2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -40,7 +40,7 @@
 
 #ifndef COMPARE_AND_SWAP
 # define COMPARE_AND_SWAP(ptr, old, new) \
-  (catomic_compare_and_exchange_bool_acq (ptr, new, old) == 0)
+  (atomic_compare_and_exchange_bool_acq (ptr, new, old) == 0)
 #endif
 
 ElfW(Addr) _dl_boot_fptr_table [ELF_MACHINE_BOOT_FPTR_TABLE_LEN];
index d03d8b6daf1d128549aea5e6727db6f9c9ec88bb..b29534d5c9d7ea6de575e752667cc477565f5a7e 100644 (file)
@@ -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;
       }
 
@@ -70,9 +70,11 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
       info.dlpi_subs = GL(dl_load_adds) - nloaded;
       info.dlpi_tls_modid = 0;
       info.dlpi_tls_data = NULL;
+#ifdef USE_TLS
       info.dlpi_tls_modid = l->l_tls_modid;
       if (info.dlpi_tls_modid != 0)
        info.dlpi_tls_data = _dl_tls_get_addr_soft (l);
+#endif
       ret = callback (&info, sizeof (struct dl_phdr_info), data);
       if (ret)
        break;
index a6d0d1fcef342c92b8f727e8ca108b766e713ae7..1b995eda92ce263588d8a539a326e6527682c836 100644 (file)
@@ -1,5 +1,5 @@
 /* Handle loading and unloading shared objects for internal libc purposes.
-   Copyright (C) 1999-2002,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 1999,2000,2001,2002,2004,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Zack Weinberg <zack@rabi.columbia.edu>, 1999.
 
index 1650ef953a7a04712b14af7c9c7e7eaf77187cc3..9625030e886e881b49c7c6f901b9f0d7ca89349f 100644 (file)
@@ -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
@@ -1078,6 +1078,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
          break;
 
        case PT_TLS:
+#ifdef USE_TLS
          if (ph->p_memsz == 0)
            /* Nothing to do for an empty segment.  */
            break;
@@ -1105,7 +1106,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
              break;
            }
 
-#ifdef SHARED
+# ifdef SHARED
          if (l->l_prev == NULL || (mode & __RTLD_AUDIT) != 0)
            /* We are loading the executable itself when the dynamic linker
               was executed directly.  The setup will happen later.  */
@@ -1114,7 +1115,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
          /* In a static binary there is no way to tell if we dynamically
             loaded libpthread.  */
          if (GL(dl_error_catch_tsd) == &_dl_initial_error_catch_tsd)
-#endif
+# endif
            {
              /* We have not yet loaded libpthread.
                 We can do the TLS setup right now!  */
@@ -1147,6 +1148,7 @@ cannot allocate TLS data structures for initial thread");
              _dl_deallocate_tls (tcb, 1);
              goto call_lose;
            }
+#endif
 
          /* Uh-oh, the binary expects TLS support but we cannot
             provide it.  */
@@ -1223,6 +1225,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 +1246,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])
       {
@@ -1385,7 +1390,7 @@ cannot allocate TLS data structures for initial thread");
         requires that it be executable.  We must change the
         protection of the variable which contains the flags used in
         the mprotect calls.  */
-#ifdef SHARED
+#if defined HAVE_Z_RELRO && defined SHARED
       if ((mode & (__RTLD_DLOPEN | __RTLD_AUDIT)) == __RTLD_DLOPEN)
        {
          const uintptr_t p = (uintptr_t) &__stack_prot & -GLRO(dl_pagesize);
@@ -1422,9 +1427,11 @@ cannot enable executable stack as shared object requires");
        }
     }
 
+#ifdef USE_TLS
   /* Adjust the address of the TLS initialization image.  */
   if (l->l_tls_initimage != NULL)
     l->l_tls_initimage = (char *) l->l_tls_initimage + l->l_addr;
+#endif
 
   /* We are done mapping in the file.  We no longer need the descriptor.  */
   if (__builtin_expect (__close (fd) != 0, 0))
@@ -1928,10 +1935,11 @@ open_path (const char *name, size_t namelen, int preloaded,
         must not be freed using the general free() in libc.  */
       if (sps->malloced)
        free (sps->dirs);
-
+#ifdef HAVE_Z_RELRO
       /* rtld_search_dirs is attribute_relro, therefore avoid writing
         into it.  */
       if (sps != &rtld_search_dirs)
+#endif
        sps->dirs = (void *) -1;
     }
 
index 019278c9b0b5d7694911488810043fd4c2425bdd..e971929d0ec4eee32af6bba8af2efba5eb568c80 100644 (file)
@@ -1,5 +1,5 @@
 /* Look up a symbol in the loaded objects.
-   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
@@ -25,6 +25,7 @@
 #include <ldsodefs.h>
 #include <dl-hash.h>
 #include <dl-machine.h>
+#include <sysdep-cancel.h>
 #include <bits/libc-lock.h>
 #include <tls.h>
 
@@ -228,17 +229,13 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
 
   /* No other flag than DL_LOOKUP_ADD_DEPENDENCY is allowed if we look
      up a versioned symbol.  */
-  assert (version == NULL || flags == 0 || flags == DL_LOOKUP_ADD_DEPENDENCY);
+  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)
@@ -341,9 +338,8 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
       && 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,
-                                 symbol_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;
@@ -449,10 +445,12 @@ _dl_debug_bindings (const char *undef_name, struct link_map *undef_map,
            conflict = 1;
        }
 
+# ifdef USE_TLS
       if (value->s
          && (__builtin_expect (ELFW(ST_TYPE) (value->s->st_info)
                                == STT_TLS, 0)))
        type_class = 4;
+# endif
 
       if (conflict
          || GLRO(dl_trace_prelink_map) == undef_map
index 8e78709b5a825d794eddf16f874333d8bcd9a334..eeea790e40c3403057472b37911f8524393ab2a3 100644 (file)
@@ -1,5 +1,5 @@
 /* Minimal replacements for basic facilities used in the dynamic linker.
-   Copyright (C) 1995-1998,2000-2002,2004,2005,2006
+   Copyright (C) 1995-1998,2000-2002,2004-2006,2007
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -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;
index 33ee860e59c4daea82a65b199ecb7451d5efd709..86f7a8e4d9355d3427a733764e85558918bbe29c 100644 (file)
@@ -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 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -64,7 +64,7 @@ _dl_new_object (char *realname, const char *libname, int type,
   new->l_name = realname;
   new->l_type = type;
   new->l_loader = loader;
-#if NO_TLS_OFFSET != 0
+#if defined USE_TLS && NO_TLS_OFFSET != 0
   new->l_tls_offset = NO_TLS_OFFSET;
 #endif
   new->l_ns = nsid;
@@ -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;
 
index c99752112661e08ab8b4c0d7612c4cf4961c20a3..32e7caac7fea500d2be0b6860c3bf6c129d7eb4a 100644 (file)
@@ -1,5 +1,5 @@
 /* Load a shared object at runtime, relocate it, and run its initializer.
-   Copyright (C) 1996-2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1996-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
@@ -32,6 +32,7 @@
 #include <bp-sym.h>
 #include <caller.h>
 #include <sysdep-cancel.h>
+#include <tls.h>
 
 #include <dl-dst.h>
 
@@ -97,17 +98,17 @@ add_to_global (struct link_map *new)
      in an realloc() call.  Therefore we allocate a completely new
      array the first time we have to add something to the locale scope.  */
 
-  if (GL(dl_ns)[new->l_ns]._ns_global_scope_alloc == 0)
+  struct link_namespaces *ns = &GL(dl_ns)[new->l_ns];
+  if (ns->_ns_global_scope_alloc == 0)
     {
       /* This is the first dynamic object given global scope.  */
-      GL(dl_ns)[new->l_ns]._ns_global_scope_alloc
-       = GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_nlist + to_add + 8;
+      ns->_ns_global_scope_alloc
+       = ns->_ns_main_searchlist->r_nlist + to_add + 8;
       new_global = (struct link_map **)
-       malloc (GL(dl_ns)[new->l_ns]._ns_global_scope_alloc
-               * sizeof (struct link_map *));
+       malloc (ns->_ns_global_scope_alloc * sizeof (struct link_map *));
       if (new_global == NULL)
        {
-         GL(dl_ns)[new->l_ns]._ns_global_scope_alloc = 0;
+         ns->_ns_global_scope_alloc = 0;
        nomem:
          _dl_signal_error (ENOMEM, new->l_libname->name, NULL,
                            N_("cannot extend global scope"));
@@ -115,29 +116,39 @@ add_to_global (struct link_map *new)
        }
 
       /* Copy over the old entries.  */
-      GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_list
-       = memcpy (new_global,
-                 GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_list,
-                 (GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_nlist
+      ns->_ns_main_searchlist->r_list
+       = memcpy (new_global, ns->_ns_main_searchlist->r_list,
+                 (ns->_ns_main_searchlist->r_nlist
                   * sizeof (struct link_map *)));
     }
-  else if (GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_nlist + to_add
-          > GL(dl_ns)[new->l_ns]._ns_global_scope_alloc)
+  else if (ns->_ns_main_searchlist->r_nlist + to_add
+          > ns->_ns_global_scope_alloc)
     {
       /* We have to extend the existing array of link maps in the
         main map.  */
+      struct link_map **old_global
+       = GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_list;
+      size_t new_nalloc = ((ns->_ns_global_scope_alloc + to_add) * 2);
+
       new_global = (struct link_map **)
-       realloc (GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_list,
-                ((GL(dl_ns)[new->l_ns]._ns_global_scope_alloc + to_add + 8)
-                 * sizeof (struct link_map *)));
+       malloc (new_nalloc * sizeof (struct link_map *));
       if (new_global == NULL)
        goto nomem;
 
-      GL(dl_ns)[new->l_ns]._ns_global_scope_alloc += to_add + 8;
-      GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_list = new_global;
+      memcpy (new_global, old_global,
+             ns->_ns_global_scope_alloc * sizeof (struct link_map *));
+
+      ns->_ns_global_scope_alloc = new_nalloc;
+      ns->_ns_main_searchlist->r_list = new_global;
+
+      if (!RTLD_SINGLE_THREAD_P)
+       THREAD_GSCOPE_WAIT ();
+
+      free (old_global);
     }
 
   /* Now add the new entries.  */
+  unsigned int new_nlist = ns->_ns_main_searchlist->r_nlist;
   for (cnt = 0; cnt < new->l_searchlist.r_nlist; ++cnt)
     {
       struct link_map *map = new->l_searchlist.r_list[cnt];
@@ -145,15 +156,49 @@ add_to_global (struct link_map *new)
       if (map->l_global == 0)
        {
          map->l_global = 1;
-         GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_list[GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_nlist]
-           = map;
-         ++GL(dl_ns)[new->l_ns]._ns_main_searchlist->r_nlist;
+         ns->_ns_main_searchlist->r_list[new_nlist++] = map;
        }
     }
+  atomic_write_barrier ();
+  ns->_ns_main_searchlist->r_nlist = new_nlist;
 
   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)
@@ -161,10 +206,12 @@ dl_open_worker (void *a)
   struct dl_open_args *args = a;
   const char *file = args->file;
   int mode = args->mode;
-  struct link_map *new, *l;
+  struct link_map *new;
   int lazy;
   unsigned int i;
+#ifdef USE_TLS
   bool any_tls = false;
+#endif
   struct link_map *call_map = NULL;
 
   /* Check whether _dl_open() has been called from a valid DSO.  */
@@ -186,13 +233,14 @@ dl_open_worker (void *a)
         By default we assume this is the main application.  */
       call_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
 
+      struct link_map *l;
       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;
@@ -325,7 +373,7 @@ dl_open_worker (void *a)
   /* Relocate the objects loaded.  We do this in reverse order so that copy
      relocs of earlier objects overwrite the data written by later objects.  */
 
-  l = new;
+  struct link_map *l = new;
   while (l->l_next)
     l = l->l_next;
   while (1)
@@ -417,17 +465,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;
            }
@@ -439,6 +480,7 @@ dl_open_worker (void *a)
          atomic_write_barrier ();
          imap->l_scope[cnt] = &new->l_searchlist;
        }
+#if USE_TLS
       /* Only add TLS memory if this object is loaded now and
         therefore is not yet initialized.  */
       else if (! imap->l_init_called
@@ -453,11 +495,11 @@ dl_open_worker (void *a)
          if (imap->l_need_tls_init)
            {
              imap->l_need_tls_init = 0;
-#ifdef SHARED
+# ifdef SHARED
              /* Update the slot information data for at least the
                 generation of the DSO we are allocating data for.  */
              _dl_update_slotinfo (imap->l_tls_modid);
-#endif
+# endif
 
              GL(dl_init_static_tls) (imap);
              assert (imap->l_need_tls_init == 0);
@@ -466,12 +508,15 @@ dl_open_worker (void *a)
          /* We have to bump the generation counter.  */
          any_tls = true;
        }
+#endif
     }
 
+#if USE_TLS
   /* Bump the generation number if necessary.  */
   if (any_tls && __builtin_expect (++GL(dl_tls_generation) == 0, 0))
     _dl_fatal_printf (N_("\
 TLS generation counter wrapped!  Please report this."));
+#endif
 
   /* Run the initializer functions of new objects.  */
   _dl_init (new, args->argc, args->argv, args->env);
@@ -568,6 +613,7 @@ no more namespaces available for dlmopen()"));
         state if relocation failed, for example.  */
       if (args.map)
        {
+#ifdef USE_TLS
          /* Maybe some of the modules which were loaded use TLS.
             Since it will be removed in the following _dl_close call
             we have to mark the dtv array as having gaps to fill the
@@ -577,6 +623,7 @@ no more namespaces available for dlmopen()"));
             up.  */
          if ((mode & __RTLD_AUDIT) == 0)
            GL(dl_tls_dtv_gaps) = true;
+#endif
 
          _dl_close_worker (args.map);
        }
@@ -650,3 +697,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
index 47033f32eff6a4ed55cc65dd5c285095767ba95d..41214c1b082a4a1ec45ecf559872240796194adb 100644 (file)
@@ -1,5 +1,5 @@
 /* Profiling of shared libraries.
-   Copyright (C) 1997-2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-2002, 2003, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
    Based on the BSD mcount implementation.
@@ -509,24 +509,24 @@ _dl_mcount (ElfW(Addr) frompc, ElfW(Addr) selfpc)
              size_t newfromidx;
              to_index = (data[narcs].self_pc
                          / (HASHFRACTION * sizeof (*tos)));
-             newfromidx = catomic_exchange_and_add (&fromidx, 1) + 1;
+             newfromidx = atomic_exchange_and_add (&fromidx, 1) + 1;
              froms[newfromidx].here = &data[narcs];
              froms[newfromidx].link = tos[to_index];
              tos[to_index] = newfromidx;
-             catomic_increment (&narcs);
+             atomic_increment (&narcs);
            }
 
          /* If we still have no entry stop searching and insert.  */
          if (*topcindex == 0)
            {
-             uint_fast32_t newarc = catomic_exchange_and_add (narcsp, 1);
+             uint_fast32_t newarc = atomic_exchange_and_add (narcsp, 1);
 
              /* In rare cases it could happen that all entries in FROMS are
                 occupied.  So we cannot count this anymore.  */
              if (newarc >= fromlimit)
                goto done;
 
-             *topcindex = catomic_exchange_and_add (&fromidx, 1) + 1;
+             *topcindex = atomic_exchange_and_add (&fromidx, 1) + 1;
              fromp = &froms[*topcindex];
 
              fromp->here = &data[newarc];
@@ -534,7 +534,7 @@ _dl_mcount (ElfW(Addr) frompc, ElfW(Addr) selfpc)
              data[newarc].self_pc = selfpc;
              data[newarc].count = 0;
              fromp->link = 0;
-             catomic_increment (&narcs);
+             atomic_increment (&narcs);
 
              break;
            }
@@ -547,7 +547,7 @@ _dl_mcount (ElfW(Addr) frompc, ElfW(Addr) selfpc)
     }
 
   /* Increment the counter.  */
-  catomic_increment (&fromp->here->count);
+  atomic_increment (&fromp->here->count);
 
  done:
   ;
index c315b5d972ff0b7f6ff613af5a5619687a4a57a7..117410e92416fcf6226096b18b930e7d438a9cca 100644 (file)
@@ -1,5 +1,5 @@
 /* Relocate a shared object and resolve its references to other loaded objects.
-   Copyright (C) 1995-2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -35,6 +35,7 @@
 #endif
 
 
+#ifdef USE_TLS
 /* We are trying to perform a static TLS relocation in MAP, but it was
    dynamically loaded.  This can only work if there is enough surplus in
    the static TLS area already allocated for each running thread.  If this
@@ -55,7 +56,7 @@ _dl_allocate_static_tls (struct link_map *map)
 cannot allocate memory in static TLS block"));
     }
 
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
   size_t freebytes;
   size_t n;
   size_t blsize;
@@ -72,7 +73,7 @@ cannot allocate memory in static TLS block"));
                                            - map->l_tls_firstbyte_offset);
 
   map->l_tls_offset = GL(dl_tls_static_used) = offset;
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
   size_t used;
   size_t check;
 
@@ -86,9 +87,9 @@ cannot allocate memory in static TLS block"));
 
   map->l_tls_offset = offset;
   GL(dl_tls_static_used) = used;
-#else
-# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-#endif
+# else
+#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+# endif
 
   /* If the object is not yet relocated we cannot initialize the
      static TLS region.  Delay it.  */
@@ -114,13 +115,13 @@ cannot allocate memory in static TLS block"));
 void
 _dl_nothread_init_static_tls (struct link_map *map)
 {
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
   void *dest = (char *) THREAD_SELF - map->l_tls_offset;
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
   void *dest = (char *) THREAD_SELF + map->l_tls_offset + TLS_PRE_TCB_SIZE;
-#else
-# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-#endif
+# else
+#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+# endif
 
   /* Fill in the DTV slot so that a later LD/GD access will find it.  */
   dtv_t *dtv = THREAD_DTV ();
@@ -132,6 +133,7 @@ _dl_nothread_init_static_tls (struct link_map *map)
   memset (__mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size),
          '\0', map->l_tls_blocksize - map->l_tls_initimage_size);
 }
+#endif
 
 
 void
index afc99f6150a351f143f39069dc1e58d78354ca5d..ee2b8b5f6c8c0c74e01ffa3478b54b4b8b54f86b 100644 (file)
@@ -1,5 +1,5 @@
 /* On-demand PLT fixup for shared objects.
-   Copyright (C) 1995-2002,2003,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-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
@@ -26,6 +26,8 @@
 #include <ldsodefs.h>
 #include <sysdep-cancel.h>
 #include "dynamic-link.h"
+#include <tls.h>
+
 
 #if (!defined ELF_MACHINE_NO_RELA && !defined ELF_MACHINE_PLT_REL) \
     || ELF_MACHINE_NO_REL
@@ -93,15 +95,19 @@ _dl_fixup (
            version = NULL;
        }
 
-      if (l->l_type == lt_loaded && !RTLD_SINGLE_THREAD_P)
-       __rtld_mrlock_lock (l->l_scope_lock);
+      /* We need to keep the scope around so do some locking.  This is
+        not necessary for objects which cannot be unloaded or when
+        we are not using any threads (yet).  */
+      int flags = DL_LOOKUP_ADD_DEPENDENCY;
+      if (!RTLD_SINGLE_THREAD_P)
+       THREAD_GSCOPE_SET_FLAG ();
 
-      result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym,
-                                   l->l_scope, version, ELF_RTYPE_CLASS_PLT,
-                                   DL_LOOKUP_ADD_DEPENDENCY, NULL);
+      result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, l->l_scope,
+                                   version, ELF_RTYPE_CLASS_PLT, flags, NULL);
 
-      if (l->l_type == lt_loaded && !RTLD_SINGLE_THREAD_P)
-       __rtld_mrlock_unlock (l->l_scope_lock);
+      /* We are done with the global scope.  */
+      if (!RTLD_SINGLE_THREAD_P)
+       THREAD_GSCOPE_RESET_FLAG ();
 
       /* Currently result contains the base load address (or link map)
         of the object that defines sym.  Now add in the symbol
@@ -181,16 +187,20 @@ _dl_profile_fixup (
                version = NULL;
            }
 
-         if (l->l_type == lt_loaded && !RTLD_SINGLE_THREAD_P)
-           __rtld_mrlock_lock (l->l_scope_lock);
+         /* We need to keep the scope around so do some locking.  This is
+            not necessary for objects which cannot be unloaded or when
+            we are not using any threads (yet).  */
+         int flags = DL_LOOKUP_ADD_DEPENDENCY;
+         if (!RTLD_SINGLE_THREAD_P)
+           THREAD_GSCOPE_SET_FLAG ();
 
-         result = _dl_lookup_symbol_x (strtab + refsym->st_name, l, &defsym,
-                                       l->l_scope, version,
-                                       ELF_RTYPE_CLASS_PLT,
-                                       DL_LOOKUP_ADD_DEPENDENCY, NULL);
+         result = _dl_lookup_symbol_x (strtab + refsym->st_name, l,
+                                       &defsym, l->l_scope, version,
+                                       ELF_RTYPE_CLASS_PLT, flags, NULL);
 
-         if (l->l_type == lt_loaded && !RTLD_SINGLE_THREAD_P)
-           __rtld_mrlock_unlock (l->l_scope_lock);
+         /* We are done with the global scope.  */
+         if (!RTLD_SINGLE_THREAD_P)
+           THREAD_GSCOPE_RESET_FLAG ();
 
          /* Currently result contains the base load address (or link map)
             of the object that defines sym.  Now add in the symbol
index c1cfc0df41e880bc65b8945fe525a6f6b1591557..4b7be6bc273a21ed3a2c108e4608631eeaf0d64b 100644 (file)
@@ -1,5 +1,5 @@
 /* Support for dynamic linking code in static libc.
-   Copyright (C) 1996-2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1996-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
@@ -98,7 +98,9 @@ int _dl_starting_up = 1;
 hp_timing_t _dl_cpuclock_offset;
 #endif
 
+#ifdef USE_TLS
 void (*_dl_init_static_tls) (struct link_map *) = &_dl_nothread_init_static_tls;
+#endif
 
 size_t _dl_pagesize;
 
@@ -132,6 +134,11 @@ int (*_dl_make_stack_executable_hook) (void **) internal_function
   = _dl_make_stack_executable;
 
 
+/* 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;
index 88a5adb0d563e4b08b058db4d7cff5913dcdaea3..fa0e3a67fc710d0500fd7cbc2271cde8e1dde331 100644 (file)
@@ -1,5 +1,5 @@
 /* Look up a symbol in a shared object loaded by `dlopen'.
-   Copyright (C) 1999,2000,2001,2002,2004,2006 Free Software Foundation, Inc.
+   Copyright (C) 1999-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
 #include <ldsodefs.h>
 #include <dl-hash.h>
 #include <sysdep-cancel.h>
-#include <dl-tls.h>
+#ifdef USE_TLS
+# include <dl-tls.h>
+#endif
 
 
-#ifdef SHARED
+#if defined USE_TLS && defined SHARED
 /* Systems which do not have tls_index also probably have to define
    DONT_USE_TLS_INDEX.  */
 
@@ -98,10 +100,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,15 +114,13 @@ 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;
@@ -129,13 +128,15 @@ do_sym (void *handle, const char *name, void *who,
          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))
            {
@@ -182,7 +183,7 @@ RTLD_NEXT used in code not dynamically loaded"));
     {
       void *value;
 
-#ifdef SHARED
+#if defined USE_TLS && defined SHARED
       if (ELFW(ST_TYPE) (ref->st_info) == STT_TLS)
        /* The found symbol is a thread-local storage variable.
           Return the address for to the current thread.  */
index d06ce1754e1085962f16a860132e78b44d9c15f3..68e08f480a39c22ac0c5f79d03e26778706c8ed0 100644 (file)
@@ -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-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
@@ -405,8 +405,25 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
     }
 #endif
 
+#ifdef USE_TLS
   /* For TLS enabled builds always add 'tls'.  */
   ++cnt;
+#else
+  if (cnt == 0)
+    {
+      /* If we no have platform name and no important capability we only
+        have the base directory to search.  */
+      result = (struct r_strlenpair *) malloc (sizeof (*result));
+      if (result == NULL)
+       goto no_memory;
+
+      result[0].str = (char *) result; /* Does not really matter.  */
+      result[0].len = 0;
+
+      *sz = 1;
+      return result;
+    }
+#endif
 
   /* Create temporary data structure to generate result table.  */
   temp = (struct r_strlenpair *) alloca (cnt * sizeof (*temp));
@@ -448,11 +465,11 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
       temp[m].len = platform_len;
       ++m;
     }
-
+#ifdef USE_TLS
   temp[m].str = "tls";
   temp[m].len = 3;
   ++m;
-
+#endif
   assert (m == cnt);
 
   /* Determine the total size of all strings together.  */
@@ -460,9 +477,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
@@ -470,8 +499,13 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
   *sz = 1 << cnt;
   result = (struct r_strlenpair *) malloc (*sz * sizeof (*result) + total);
   if (result == NULL)
-    _dl_signal_error (ENOMEM, NULL, NULL,
-                     N_("cannot create capability list"));
+    {
+#ifndef USE_TLS
+    no_memory:
+#endif
+      _dl_signal_error (ENOMEM, NULL, NULL,
+                       N_("cannot create capability list"));
+    }
 
   if (cnt == 1)
     {
index d5865ab40925d2608213cc51302b364bfb8d2d5c..a0f4f77ffa58d333acedc1c97f3a52340d489113 100644 (file)
 #include <sys/param.h>
 
 #include <tls.h>
-#include <dl-tls.h>
-#include <ldsodefs.h>
+
+/* We don't need any of this if TLS is not supported.  */
+#ifdef USE_TLS
+
+# include <dl-tls.h>
+# include <ldsodefs.h>
 
 /* Amount of excess space to allocate in the static TLS area
    to allow dynamic loading of modules defining IE-model TLS data.  */
-#define TLS_STATIC_SURPLUS     64 + DL_NNS * 100
+# define TLS_STATIC_SURPLUS    64 + DL_NNS * 100
 
 /* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
+# define TLS_DTV_UNALLOCATED   ((void *) -1l)
 
 
 /* Out-of-memory handler.  */
-#ifdef SHARED
+# ifdef SHARED
 static void
 __attribute__ ((__noreturn__))
 oom (void)
 {
   _dl_fatal_printf ("cannot allocate memory for thread-local data: ABORT\n");
 }
-#endif
+# endif
 
 
 size_t
@@ -109,7 +113,7 @@ _dl_next_tls_modid (void)
 }
 
 
-#ifdef SHARED
+# ifdef SHARED
 void
 internal_function
 _dl_determine_tlsoffset (void)
@@ -154,7 +158,7 @@ _dl_determine_tlsoffset (void)
      memory requirement for the next TLS block is smaller than the
      gap.  */
 
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
   /* We simply start with zero.  */
   size_t offset = 0;
 
@@ -201,7 +205,7 @@ _dl_determine_tlsoffset (void)
   GL(dl_tls_static_used) = offset;
   GL(dl_tls_static_size) = (roundup (offset + TLS_STATIC_SURPLUS, max_align)
                            + TLS_TCB_SIZE);
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
   /* The TLS blocks start right after the TCB.  */
   size_t offset = TLS_TCB_SIZE;
 
@@ -245,9 +249,9 @@ _dl_determine_tlsoffset (void)
   GL(dl_tls_static_used) = offset;
   GL(dl_tls_static_size) = roundup (offset + TLS_STATIC_SURPLUS,
                                    TLS_TCB_ALIGN);
-#else
-# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-#endif
+# else
+#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+# endif
 
   /* The alignment requirement for the static TLS block.  */
   GL(dl_tls_static_align) = max_align;
@@ -284,7 +288,7 @@ _dl_tls_setup (void)
   return 0;
 }
 rtld_hidden_def (_dl_tls_setup)
-#endif
+# endif
 
 static void *
 internal_function
@@ -333,13 +337,13 @@ _dl_allocate_tls_storage (void)
   void *result;
   size_t size = GL(dl_tls_static_size);
 
-#if TLS_DTV_AT_TP
+# if TLS_DTV_AT_TP
   /* Memory layout is:
      [ TLS_PRE_TCB_SIZE ] [ TLS_TCB_SIZE ] [ TLS blocks ]
                          ^ This should be returned.  */
   size += (TLS_PRE_TCB_SIZE + GL(dl_tls_static_align) - 1)
          & ~(GL(dl_tls_static_align) - 1);
-#endif
+# endif
 
   /* Allocate a correctly aligned chunk of memory.  */
   result = __libc_memalign (GL(dl_tls_static_align), size);
@@ -348,14 +352,14 @@ _dl_allocate_tls_storage (void)
       /* Allocate the DTV.  */
       void *allocated = result;
 
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
       /* The TCB follows the TLS blocks.  */
       result = (char *) result + size - TLS_TCB_SIZE;
 
       /* Clear the TCB data structure.  We can't ask the caller (i.e.
         libpthread) to do it, because we will initialize the DTV et al.  */
       memset (result, '\0', TLS_TCB_SIZE);
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
       result = (char *) result + size - GL(dl_tls_static_size);
 
       /* Clear the TCB data structure and TLS_PRE_TCB_SIZE bytes before it.
@@ -363,7 +367,7 @@ _dl_allocate_tls_storage (void)
         initialize the DTV et al.  */
       memset ((char *) result - TLS_PRE_TCB_SIZE, '\0',
              TLS_PRE_TCB_SIZE + TLS_TCB_SIZE);
-#endif
+# endif
 
       result = allocate_dtv (result);
       if (result == NULL)
@@ -424,14 +428,14 @@ _dl_allocate_tls_init (void *result)
 
          assert (map->l_tls_modid == cnt);
          assert (map->l_tls_blocksize >= map->l_tls_initimage_size);
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
          assert ((size_t) map->l_tls_offset >= map->l_tls_blocksize);
          dest = (char *) result - map->l_tls_offset;
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
          dest = (char *) result + map->l_tls_offset;
-#else
-# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
-#endif
+# else
+#  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+# endif
 
          /* Copy the initialization image and clear the BSS part.  */
          dtv[map->l_tls_modid].pointer.val = dest;
@@ -487,21 +491,21 @@ _dl_deallocate_tls (void *tcb, bool dealloc_tcb)
 
   if (dealloc_tcb)
     {
-#if TLS_TCB_AT_TP
+# if TLS_TCB_AT_TP
       /* The TCB follows the TLS blocks.  Back up to free the whole block.  */
       tcb -= GL(dl_tls_static_size) - TLS_TCB_SIZE;
-#elif TLS_DTV_AT_TP
+# elif TLS_DTV_AT_TP
       /* Back up the TLS_PRE_TCB_SIZE bytes.  */
       tcb -= (TLS_PRE_TCB_SIZE + GL(dl_tls_static_align) - 1)
             & ~(GL(dl_tls_static_align) - 1);
-#endif
+# endif
       free (tcb);
     }
 }
 rtld_hidden_def (_dl_deallocate_tls)
 
 
-#ifdef SHARED
+# ifdef SHARED
 /* The __tls_get_addr function has two basic forms which differ in the
    arguments.  The IA-64 form takes two parameters, the module ID and
    offset.  The form used, among others, on IA-32 takes a reference to
@@ -509,15 +513,15 @@ rtld_hidden_def (_dl_deallocate_tls)
    form seems to be more often used (in the moment) so we default to
    it.  Users of the IA-64 form have to provide adequate definitions
    of the following macros.  */
-# ifndef GET_ADDR_ARGS
-#  define GET_ADDR_ARGS tls_index *ti
-# endif
-# ifndef GET_ADDR_MODULE
-#  define GET_ADDR_MODULE ti->ti_module
-# endif
-# ifndef GET_ADDR_OFFSET
-#  define GET_ADDR_OFFSET ti->ti_offset
-# endif
+#  ifndef GET_ADDR_ARGS
+#   define GET_ADDR_ARGS tls_index *ti
+#  endif
+#  ifndef GET_ADDR_MODULE
+#   define GET_ADDR_MODULE ti->ti_module
+#  endif
+#  ifndef GET_ADDR_OFFSET
+#   define GET_ADDR_OFFSET ti->ti_offset
+#  endif
 
 
 static void *
@@ -728,7 +732,7 @@ __tls_get_addr (GET_ADDR_ARGS)
 
   return (char *) p + GET_ADDR_OFFSET;
 }
-#endif
+# endif
 
 
 /* Look up the module's TLS block as for __tls_get_addr,
@@ -836,3 +840,4 @@ cannot create TLS data structures"));
   listp->slotinfo[idx].map = l;
   listp->slotinfo[idx].gen = GL(dl_tls_generation) + 1;
 }
+#endif /* use TLS */
index 2585d8300547629876cc2b62c2c886bc17c57819..ab9a510ba1804bba363461f11b2df157f913c260 100644 (file)
@@ -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
     {
index d27e5f085d77a4c14b18b98b4660f47d0f2c3b9a..dae359778bee937215ac0b13babe9ae4d5a7595d 100644 (file)
--- a/elf/elf.h
+++ b/elf/elf.h
@@ -1,5 +1,5 @@
 /* This file defines standard ELF types, structures, and macros.
-   Copyright (C) 1995-2003,2004,2005,2006,2007 Free Software Foundation, Inc.
+   Copyright (C) 1995-2003,2004,2005,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
@@ -1511,9 +1511,8 @@ typedef struct
 #define R_MIPS_TLS_TPREL64     48      /* TP-relative offset, 64 bit */
 #define R_MIPS_TLS_TPREL_HI16  49      /* TP-relative offset, high 16 bits */
 #define R_MIPS_TLS_TPREL_LO16  50      /* TP-relative offset, low 16 bits */
-#define R_MIPS_GLOB_DAT                51
 /* Keep this the last entry.  */
-#define R_MIPS_NUM             52
+#define R_MIPS_NUM             51
 
 /* Legal values for p_type field of Elf32_Phdr.  */
 
index ec81cbb81795f3e2992cda1ddf538a36e2ed139a..4a088af1ed78d660dfc2b28d83e47a2e5bc5bd68 100644 (file)
@@ -24,7 +24,6 @@
 #include <errno.h>
 #include <inttypes.h>
 #include <libintl.h>
-#include <locale.h>
 #include <stdbool.h>
 #include <stdio.h>
 #include <stdio_ext.h>
@@ -287,7 +286,7 @@ print_version (FILE *stream, struct argp_state *state)
 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\
-"), "2007");
+"), "2006");
   fprintf (stream, gettext ("Written by %s.\n"),
           "Andreas Jaeger");
 }
@@ -559,7 +558,7 @@ manual_link (char *library)
   /* Do some sanity checks first.  */
   if (lstat64 (real_library, &stat_buf))
     {
-      error (0, errno, _("Cannot lstat %s"), library);
+      error (0, errno, _("Can't lstat %s"), library);
       free (path);
       return;
     }
@@ -707,10 +706,10 @@ search_dir (const struct dir_entry *entry)
                         + 1, ".#prelink#.", sizeof (".#prelink#.") - 1) == 0)
            continue;
        }
-      len += strlen (entry->path);
+      len += strlen (entry->path) + 2;
       if (len > file_name_len)
        {
-         file_name_len = len + 1;
+         file_name_len = len;
          file_name = alloca (file_name_len);
          if (!opt_chroot)
            real_file_name = file_name;
@@ -718,10 +717,10 @@ search_dir (const struct dir_entry *entry)
       sprintf (file_name, "%s/%s", entry->path, direntry->d_name);
       if (opt_chroot)
        {
-         len = strlen (dir_name) + strlen (direntry->d_name);
+         len = strlen (dir_name) + strlen (direntry->d_name) + 2;
          if (len > real_file_name_len)
            {
-             real_file_name_len = len + 1;
+             real_file_name_len = len;
              real_file_name = alloca (real_file_name_len);
            }
          sprintf (real_file_name, "%s/%s", dir_name, direntry->d_name);
@@ -1167,14 +1166,9 @@ set_hwcap (void)
 int
 main (int argc, char **argv)
 {
-  /* Set locale via LC_ALL.  */
-  setlocale (LC_ALL, "");
-
-  /* Set the text message domain.  */
-  textdomain (_libc_intl_domainname);
+  int remaining;
 
   /* Parse and process arguments.  */
-  int remaining;
   argp_parse (&argp, argc, argv, 0, &remaining, NULL);
 
   /* Remaining arguments are additional directories if opt_manual_link
@@ -1191,7 +1185,9 @@ main (int argc, char **argv)
          add_dir (argv[i]);
     }
 
+#ifdef USE_TLS
   hwcap_extra[63 - _DL_FIRST_EXTRA] = "tls";
+#endif
 
   set_hwcap ();
 
index 05282fe99be206299209a762c17716284c5966ff..d1591a5785202dccddbba49b587f6374e2874a48 100644 (file)
@@ -1,5 +1,5 @@
 #! @BASH@
-# Copyright (C) 1996-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 1996-2004, 2005, 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
@@ -39,7 +39,7 @@ while test $# -gt 0; do
     printf $"Copyright (C) %s Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-" "2007"
+" "2006"
     printf $"Written by %s and %s.
 " "Roland McGrath" "Ulrich Drepper"
     exit 0
index 5e6ee516039d2f05fdc37b9f8f13b44acffcd768..a357a46987baf6467d1fda87db9a0ed3581cbb96 100644 (file)
@@ -1,5 +1,5 @@
 /* Run time dynamic linker.
-   Copyright (C) 1995-2002,2003,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-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
@@ -207,7 +207,8 @@ DL_SYSINFO_IMPLEMENTATION
    is fine, too.  The latter is important here.  We can avoid setting
    up a temporary link map for ld.so if we can mark _rtld_global as
    hidden.  */
-#ifdef PI_STATIC_AND_HIDDEN
+#if defined PI_STATIC_AND_HIDDEN && defined HAVE_HIDDEN \
+    && defined HAVE_VISIBILITY_ATTRIBUTE
 # define DONT_USE_BOOTSTRAP_MAP        1
 #endif
 
@@ -291,7 +292,7 @@ _dl_start_final (void *arg, struct dl_start_final_info *info)
   GL(dl_rtld_map).l_map_end = (ElfW(Addr)) _end;
   GL(dl_rtld_map).l_text_end = (ElfW(Addr)) _etext;
   /* Copy the TLS related data if necessary.  */
-#ifndef DONT_USE_BOOTSTRAP_MAP
+#if USE_TLS && !defined DONT_USE_BOOTSTRAP_MAP
 # if USE___THREAD
   assert (info->l.l_tls_modid != 0);
   GL(dl_rtld_map).l_tls_blocksize = info->l.l_tls_blocksize;
@@ -399,7 +400,7 @@ _dl_start (void *arg)
   bootstrap_map.l_ld = (void *) bootstrap_map.l_addr + elf_machine_dynamic ();
   elf_get_dynamic_info (&bootstrap_map, NULL);
 
-#if NO_TLS_OFFSET != 0
+#if defined USE_TLS && NO_TLS_OFFSET != 0
   bootstrap_map.l_tls_offset = NO_TLS_OFFSET;
 #endif
 
@@ -700,6 +701,7 @@ match_version (const char *string, struct link_map *map)
   return 0;
 }
 
+#ifdef USE_TLS
 static bool tls_init_tp_called;
 
 static void *
@@ -771,6 +773,7 @@ cannot allocate TLS data structures for initial thread");
 
   return tcbp;
 }
+#endif
 
 #ifdef _LIBC_REENTRANT
 /* _dl_error_catch_tsd points to this for the single-threaded case.
@@ -858,14 +861,18 @@ dl_main (const ElfW(Phdr) *phdr,
   hp_timing_t stop;
   hp_timing_t diff;
 #endif
+#ifdef USE_TLS
   void *tcbp = NULL;
+#endif
 
 #ifdef _LIBC_REENTRANT
   /* Explicit initialization since the reloc would just be more work.  */
   GL(dl_error_catch_tsd) = &_dl_initial_error_catch_tsd;
 #endif
 
+#ifdef USE_TLS
   GL(dl_init_static_tls) = &_dl_nothread_init_static_tls;
+#endif
 
 #if defined SHARED && defined _LIBC_REENTRANT \
     && defined __rtld_lock_default_lock_recursive
@@ -1150,6 +1157,7 @@ of this helper program; chances are you did not intend to run this program.\n\
        break;
 
       case PT_TLS:
+#ifdef USE_TLS
        if (ph->p_memsz > 0)
          {
            /* Note that in the case the dynamic linker we duplicate work
@@ -1169,6 +1177,10 @@ of this helper program; chances are you did not intend to run this program.\n\
            /* This image gets the ID one.  */
            GL(dl_tls_max_dtv_idx) = main_map->l_tls_modid = 1;
          }
+#else
+       _dl_fatal_printf ("\
+ld.so does not support TLS, but program uses it!\n");
+#endif
        break;
 
       case PT_GNU_STACK:
@@ -1180,12 +1192,13 @@ of this helper program; chances are you did not intend to run this program.\n\
        main_map->l_relro_size = ph->p_memsz;
        break;
       }
-
-  /* Adjust the address of the TLS initialization image in case
-     the executable is actually an ET_DYN object.  */
-  if (main_map->l_tls_initimage != NULL)
-    main_map->l_tls_initimage
-      = (char *) main_map->l_tls_initimage + main_map->l_addr;
+#ifdef USE_TLS
+    /* Adjust the address of the TLS initialization image in case
+       the executable is actually an ET_DYN object.  */
+    if (main_map->l_tls_initimage != NULL)
+      main_map->l_tls_initimage
+       = (char *) main_map->l_tls_initimage + main_map->l_addr;
+#endif
   if (! main_map->l_map_end)
     main_map->l_map_end = ~0;
   if (! main_map->l_text_end)
@@ -1388,10 +1401,12 @@ of this helper program; chances are you did not intend to run this program.\n\
        break;
       }
 
+#ifdef USE_TLS
   /* Add the dynamic linker to the TLS list if it also uses TLS.  */
   if (GL(dl_rtld_map).l_tls_blocksize != 0)
     /* Assign a module ID.  Do this before loading any audit modules.  */
     GL(dl_rtld_map).l_tls_modid = _dl_next_tls_modid ();
+#endif
 
   /* If we have auditing DSOs to load, do it now.  */
   if (__builtin_expect (audit_list != NULL, 0))
@@ -1399,8 +1414,15 @@ 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;
+
+#ifdef USE_TLS
+      /* Since we start using the auditing DSOs right away we need to
+        initialize the data structures now.  */
+      tcbp = init_tls ();
+#endif
       do
        {
+#ifdef USE_TLS
          int tls_idx = GL(dl_tls_max_dtv_idx);
 
          /* Now it is time to determine the layout of the static TLS
@@ -1408,11 +1430,7 @@ 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 ();
-
+#endif
          struct dlmopen_args dlmargs;
          dlmargs.fname = al->name;
          dlmargs.map = NULL;
@@ -1527,7 +1545,9 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
                  assert (GL(dl_ns)[ns]._ns_loaded == NULL);
                  assert (GL(dl_ns)[ns]._ns_nloaded == 0);
 
+#ifdef USE_TLS
                  GL(dl_tls_max_dtv_idx) = tls_idx;
+#endif
                  goto not_loaded;
                }
            }
@@ -1803,6 +1823,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
     _dl_receive_error (print_missing_version, version_check_doit, &args);
   }
 
+#ifdef USE_TLS
   /* We do not initialize any of the TLS functionality unless any of the
      initial modules uses TLS.  This makes dynamic loading of modules with
      TLS impossible, but to support it requires either eagerly doing setup
@@ -1813,6 +1834,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
   bool was_tls_init_tp_called = tls_init_tp_called;
   if (tcbp == NULL)
     tcbp = init_tls ();
+#endif
 
   /* Set up the stack checker's canary.  */
   uintptr_t stack_chk_guard = _dl_setup_stack_chk_guard ();
@@ -1869,12 +1891,13 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
                          (size_t) l->l_map_start,
                          (int) sizeof l->l_addr * 2,
                          (size_t) l->l_addr);
-
+#ifdef USE_TLS
              if (l->l_tls_modid)
                _dl_printf (" TLS(0x%Zx, 0x%0*Zx)\n", l->l_tls_modid,
                            (int) sizeof l->l_tls_offset * 2,
                            (size_t) l->l_tls_offset);
              else
+#endif
                _dl_printf ("\n");
            }
        }
@@ -1942,8 +1965,8 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
            lookup_t result;
 
            result = _dl_lookup_symbol_x (INTUSE(_dl_argv)[i], main_map,
-                                         &ref, main_map->l_scope,
-                                         NULL, ELF_RTYPE_CLASS_PLT,
+                                         &ref, main_map->l_scope, NULL,
+                                         ELF_RTYPE_CLASS_PLT,
                                          DL_LOOKUP_ADD_DEPENDENCY, NULL);
 
            loadbase = LOOKUP_VALUE_ADDRESS (result);
@@ -1985,8 +2008,8 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
                {
                  /* Mark the link map as not yet relocated again.  */
                  GL(dl_rtld_map).l_relocated = 0;
-                 _dl_relocate_object (&GL(dl_rtld_map),
-                                      main_map->l_scope, 0, 0);
+                 _dl_relocate_object (&GL(dl_rtld_map), main_map->l_scope,
+                                      0, 0);
                }
             }
 #define VERNEEDTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (DT_VERNEED))
@@ -2157,9 +2180,11 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
          if (l->l_relro_size)
            _dl_protect_relro (l);
 
+#ifdef USE_TLS
          /* Add object to slot information data if necessasy.  */
          if (l->l_tls_blocksize != 0 && tls_init_tp_called)
            _dl_add_to_slotinfo (l);
+#endif
        }
 
       _dl_sysdep_start_cleanup ();
@@ -2206,9 +2231,11 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
            _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy),
                                 consider_profiling);
 
+#ifdef USE_TLS
          /* Add object to slot information data if necessasy.  */
          if (l->l_tls_blocksize != 0 && tls_init_tp_called)
            _dl_add_to_slotinfo (l);
+#endif
 
          l = l->l_prev;
        }
@@ -2237,6 +2264,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
 # define NONTLS_INIT_TP do { } while (0)
 #endif
 
+#ifdef USE_TLS
   if (!was_tls_init_tp_called && GL(dl_tls_max_dtv_idx) > 0)
     ++GL(dl_tls_generation);
 
@@ -2254,6 +2282,9 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
        _dl_fatal_printf ("cannot set up thread-local storage: %s\n",
                          lossage);
     }
+#else
+  NONTLS_INIT_TP;
+#endif
 
   if (! prelinked && rtld_multiple_ref)
     {
index 01d27e1efff0725cdbea8e9fecaa4644c20be356..e53a7ba7a36d4ef320bb5afd41381e0f211e8201 100644 (file)
@@ -1,5 +1,5 @@
 /* Read and display shared object profiling data.
-   Copyright (C) 1997-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1997-2004, 2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -357,7 +357,7 @@ 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\
 "),
-          "2007");
+          "2006");
   fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
 }
 
index fe72eba141e47f20a59efe598abe9d5769e16be4..71f1fbb35d1dc56695a3d08d77ab980e86aa483e 100644 (file)
@@ -27,9 +27,8 @@ tf (void *arg)
   return NULL;
 }
 
-
-static int
-do_test (void)
+int
+main (void)
 {
 #define N 10
   pthread_t th[N];
@@ -54,6 +53,3 @@ do_test (void)
     }
   return 0;
 }
-
-#define TEST_FUNCTION do_test ()
-#include "../test-skeleton.c"
index 26c2811178f9c2fd6cd8278f58c06dd4e9b7fde6..e97b5081fdc5b3df0ae8223a702c28eabc471506 100644 (file)
@@ -9,6 +9,7 @@
 static int
 do_test (void)
 {
+#ifdef USE_TLS
   static const char modname[] = "tst-tlsmod2.so";
   int result = 0;
   int *foop;
@@ -82,6 +83,9 @@ do_test (void)
   dlclose (h);
 
   return result;
+#else
+  return 0;
+#endif
 }
 
 
index 3b9b10f9aaa1e54a2b27b3099f7f300d7014dc18..478f5bbdcdf6e24933684aed683040db44bce01c 100644 (file)
@@ -3,18 +3,21 @@
 
 #include <tls.h>
 
-#include "tls-macros.h"
+#ifdef USE_TLS
+# include "tls-macros.h"
 
 
 /* Two common 'int' variables in TLS.  */
 COMMON_INT_DEF(foo);
 COMMON_INT_DEF(bar);
+#endif
 
 
 #define TEST_FUNCTION do_test ()
 static int
 do_test (void)
 {
+#ifdef USE_TLS
   int result = 0;
   int *ap, *bp;
 
@@ -79,6 +82,9 @@ do_test (void)
     }
 
   return result;
+#else
+  return 0;
+#endif
 }
 
 
index bffc332a0aa1b5b1bd5ffff135c7b3daf517f5d5..1be6adc29372916a66159637cbb81c000a250fd5 100644 (file)
@@ -1,7 +1,8 @@
 #include <tls.h>
 #include <stdlib.h>
 
-#if defined HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE
+#if defined USE_TLS && defined HAVE___THREAD \
+    && defined HAVE_TLS_MODEL_ATTRIBUTE
 # define USE_TLS__THREAD
 
 struct A
index c1e6ba7e2cbeb0054e1e5e65e6c3fc1c19928a93..428fd5293eb8b455d5244309e18667576eb02bd6 100644 (file)
@@ -6,9 +6,9 @@
 
 #include <tls.h>
 
-#if HAVE___THREAD
+#if USE_TLS && HAVE___THREAD
 
-# define AL 4096
+#define AL 4096
 struct foo
 {
   int i;
@@ -55,11 +55,11 @@ do_test (void)
   return result;
 }
 
-# define TEST_FUNCTION do_test ()
+#define TEST_FUNCTION do_test ()
 
 #else
 
-# define TEST_FUNCTION 0
+#define TEST_FUNCTION 0
 
 #endif
 
index 3d13272c08a0c1426fef68f02c273afb70cfd832..417489968ec9db2e2f93b017c1b4da68259c26f9 100644 (file)
@@ -3,18 +3,21 @@
 
 #include <tls.h>
 
-#include "tls-macros.h"
+#ifdef USE_TLS
+# include "tls-macros.h"
 
 
 /* Two 'int' variables in TLS.  */
 VAR_INT_DEF(foo);
 VAR_INT_DEF(bar);
+#endif
 
 
 #define TEST_FUNCTION do_test ()
 static int
 do_test (void)
 {
+#ifdef USE_TLS
   int result = 0;
   int *ap, *bp;
 
@@ -79,6 +82,9 @@ do_test (void)
     }
 
   return result;
+#else
+  return 0;
+#endif
 }
 
 
index c5e501eb4ee37f8a7e98f1ae800c4f05dfcef6e3..84be43575b6c59f81f74e357d7b56223e07d4c45 100644 (file)
@@ -3,13 +3,15 @@
 
 #include <tls.h>
 
-#include "tls-macros.h"
+#ifdef USE_TLS
+# include "tls-macros.h"
 
 
 /* One define int variable, two externs.  */
 COMMON_INT_DECL(foo);
 VAR_INT_DECL(bar);
 VAR_INT_DEF(baz);
+#endif
 
 
 extern int in_dso (void);
@@ -19,6 +21,7 @@ extern int in_dso (void);
 static int
 do_test (void)
 {
+#ifdef USE_TLS
   int result = 0;
   int *ap, *bp, *cp;
 
@@ -64,6 +67,9 @@ do_test (void)
   result |= in_dso ();
 
   return result;
+#else
+  return 0;
+#endif
 }
 
 
index 4ae33db24d9e633fac73613aef6e24e8e542f3ac..f92ee53ce5542c334b173bfaa615d2cccf9df92b 100644 (file)
@@ -9,6 +9,7 @@
 static int
 do_test (void)
 {
+#ifdef USE_TLS
   static const char modname[] = "tst-tlsmod2.so";
   int result = 0;
   int *foop;
@@ -46,6 +47,9 @@ do_test (void)
   dlclose (h);
 
   return result;
+#else
+  return 0;
+#endif
 }
 
 
index 27b18294fb2b8eb370101bfef12eab1dbe10a28e..a571d2cd3fa9685cad18c520e39f010e6914f9ec 100644 (file)
@@ -9,6 +9,7 @@
 static int
 do_test (void)
 {
+#ifdef USE_TLS
   static const char modname[] = "tst-tlsmod2.so";
   int result = 0;
   int *foop;
@@ -62,6 +63,9 @@ do_test (void)
   dlclose (h);
 
   return result;
+#else
+  return 0;
+#endif
 }
 
 
index 021622d9c7cee6d2d080268694b1372960fb1fe3..68d706538f4573d1d83408d7da3613a2d240ae74 100644 (file)
@@ -10,6 +10,7 @@
 static int
 do_test (void)
 {
+#ifdef USE_TLS
   static const char modname[] = "tst-tlsmod2.so";
   int result = 0;
   int *foop;
@@ -80,6 +81,9 @@ do_test (void)
     }
 
   return result;
+#else
+  return 0;
+#endif
 }
 
 
index 1edc2b63568ee821d245dcf151367d82b429af3d..37f1a63e16465294b236c2f0bf10f59f450388f2 100644 (file)
@@ -10,6 +10,7 @@
 static int
 do_test (void)
 {
+#ifdef USE_TLS
   static const char modname[] = "tst-tlsmod3.so";
   int result = 0;
   int (*fp) (void);
@@ -51,6 +52,9 @@ do_test (void)
     }
 
   return result;
+#else
+  return 0;
+#endif
 }
 
 
index 36b1baca63625b28ac157ec2231a71cd4ffb9585..ccc4e9f6fa423dc39f895c40ad38b78239961938 100644 (file)
@@ -10,6 +10,7 @@
 static int
 do_test (void)
 {
+#ifdef USE_TLS
   static const char modname1[] = "$ORIGIN/tst-tlsmod3.so";
   static const char modname2[] = "$ORIGIN/tst-tlsmod4.so";
   int result = 0;
@@ -164,6 +165,9 @@ do_test (void)
     }
 
   return result;
+#else
+  return 0;
+#endif
 }
 
 
index 12078518fad5aa687d0b79408b2cbc668207e64e..e317696dfc348b61954a6f12d59030be9d6c4955 100644 (file)
@@ -9,6 +9,7 @@
 static int
 do_test (void)
 {
+#ifdef USE_TLS
   static const char modname1[] = "tst-tlsmod5.so";
   static const char modname2[] = "tst-tlsmod6.so";
   int result = 0;
@@ -32,6 +33,9 @@ do_test (void)
     dlclose (h2);
 
   return result;
+#else
+  return 0;
+#endif
 }
 
 
index 4d966c9472ca3cc471ada8557697837702ebc305..c74a617b77a3bc7e3705162b8794fabff6140129 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <tls.h>
 
+#ifdef USE_TLS
 #include "tls-macros.h"
 
 
@@ -9,6 +10,7 @@
 COMMON_INT_DEF(foo);
 VAR_INT_DEF(bar);
 VAR_INT_DECL(baz);
+#endif
 
 extern int in_dso (void);
 
@@ -16,6 +18,7 @@ int
 in_dso (void)
 {
   int result = 0;
+#ifdef USE_TLS
   int *ap, *bp, *cp;
 
   /* Get variables using initial exec model.  */
@@ -59,6 +62,7 @@ in_dso (void)
       printf ("baz = %d\n", *cp);
       result = 1;
     }
+#endif
 
   return result;
 }
index e4e23af2d851aa038924969e907eabea5d427d33..beca89f6fec753d4f972bb42b8d10f97e772006a 100644 (file)
@@ -1,6 +1,7 @@
 #include <tls.h>
 
-#if defined HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE
+#if defined USE_TLS && defined HAVE___THREAD \
+    && defined HAVE_TLS_MODEL_ATTRIBUTE
 __thread int a[2] __attribute__ ((tls_model ("initial-exec")));
 #else
 int a[2];
index 70a02131ee85d8bb44605596e0eb9868fe7a89b2..14b12b032b42900cc7823056b53b69eaa5531df9 100644 (file)
@@ -1,6 +1,7 @@
 #include <tls.h>
 
-#if defined HAVE___THREAD && defined HAVE_TLS_MODEL_ATTRIBUTE
+#if defined USE_TLS && defined HAVE___THREAD \
+    && defined HAVE_TLS_MODEL_ATTRIBUTE
 __thread int b[2] __attribute__ ((tls_model ("initial-exec")));
 #else
 int b[2];
index ad1d179aac2b0c5dd678871a36ae20996b156d41..0bb393d9c5d54c5cac446c34c824c2db25db9a01 100644 (file)
@@ -3,9 +3,9 @@
 
 #include <tls.h>
 
-#if HAVE___THREAD
+#if USE_TLS && HAVE___THREAD
 
-# define AL 4096
+#define AL 4096
 struct foo
 {
   int i;
@@ -15,9 +15,9 @@ static __thread struct foo f;
 static struct foo g;
 
 
-# ifndef FCT
-#  define FCT in_dso1
-# endif
+#ifndef FCT
+# define FCT in_dso1
+#endif
 
 
 int
index 981923313c5454f01b0fdba0eb1f0d1d2466b1f3..98d9d3e5185c2e5a006fb58de7c80ed2076e1854 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <tls.h>
 
+#ifdef USE_TLS
 #include "tls-macros.h"
 
 
@@ -34,3 +35,4 @@ in_dso (int n, int *caller_foop)
 
   return result;
 }
+#endif
index 5c456ee2da473271383308b816b2a34b20c1e8da..4a8aad659f6aee294417b99ddbdeaed5737e7500 100644 (file)
@@ -2,7 +2,8 @@
 
 #include <tls.h>
 
-#include "tls-macros.h"
+#ifdef USE_TLS
+# include "tls-macros.h"
 
 extern int in_dso (int n, int *caller_foop);
 
@@ -37,3 +38,4 @@ in_dso2 (void)
 
   return result;
 }
+#endif
index dd954866186842402a9e95e4cabbf50bad8268b5..5285e821b0e94d7df1eda6aef23e7e125514bd77 100644 (file)
@@ -2,7 +2,8 @@
 
 #include <tls.h>
 
-#include "tls-macros.h"
+#ifdef USE_TLS
+# include "tls-macros.h"
 
 
 COMMON_INT_DEF(baz);
@@ -34,3 +35,4 @@ in_dso (int n, int *caller_bazp)
 
   return result;
 }
+#endif
index 00d3a9d9203658126e7569482003d913956663dc..2ec69e13b3f08d2929a62a85cdbaa2cb760d19a8 100644 (file)
@@ -1,5 +1,7 @@
 #include <tls.h>
 
+#ifdef USE_TLS
 #include "tls-macros.h"
 
 COMMON_INT_DEF(foo);
+#endif
index 244d9ae485adab8345a866980f1f60adce8b5c9d..0fda51b226fb1ec7d943dceb7d8a88525c35836d 100644 (file)
@@ -1,5 +1,7 @@
 #include <tls.h>
 
+#ifdef USE_TLS
 #include "tls-macros.h"
 
 COMMON_INT_DEF(bar);
+#endif
index 5a4a2499d461acc7f1a23e17dbe45ba88968d7ea..32a5f1ea0fcbafafeb0a831a6ad583a3428c2e13 100644 (file)
@@ -69,8 +69,8 @@ _MCOUNT_DECL(frompc, selfpc)  /* _mcount; may be static, inline, etc */
         * check that we are profiling
         * and that we aren't recursively invoked.
         */
-       if (catomic_compare_and_exchange_bool_acq (&p->state, GMON_PROF_BUSY,
-                                                  GMON_PROF_ON))
+       if (atomic_compare_and_exchange_bool_acq (&p->state, GMON_PROF_BUSY,
+                                                 GMON_PROF_ON))
          return;
 
        /*
index c18abec57871c4efa3d77101f65d964b09e0d8af..8882f4319ffe264ba44eff57efcccb5cb5ca27a7 100644 (file)
@@ -1,5 +1,5 @@
 /* Charset name normalization.
-   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2001,2002,2003,2004,2005,2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 2001.
 
@@ -30,7 +30,7 @@ strip (char *wp, const char *s)
   while (*s != '\0')
     {
       if (__isalnum_l (*s, _nl_C_locobj_ptr)
-         || *s == '_' || *s == '-' || *s == '.' || *s == ',')
+         || *s == '_' || *s == '-' || *s == '.' || *s == ',' || *s == ':')
        *wp++ = __toupper_l (*s, _nl_C_locobj_ptr);
       else if (*s == '/')
        {
index e0f61355751cc3220e277ee3c6177cee0b31cd48..fc94fa5fe0f136f5d02a00ada4fe5a75abbfb5a4 100644 (file)
@@ -1,5 +1,5 @@
 /* Get descriptor for character set conversion.
-   Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2001,2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -38,7 +38,7 @@ iconv_open (const char *tocode, const char *fromcode)
   int res;
 
   /* Normalize the name.  We remove all characters beside alpha-numeric,
-     '_', '-', '/', and '.'.  */
+     '_', '-', '/', '.', and ':'.  */
   tocode_len = strlen (tocode);
   tocode_conv = (char *) alloca (tocode_len + 3);
   strip (tocode_conv, tocode);
index 84493af68ff2386c0ffa54ff1b3d3a86fdad5b0c..77829971ad9a11d09546a280629bb0e38e93b1b8 100644 (file)
@@ -1,5 +1,5 @@
 /* Convert text in given files from the specified from-set to the to-set.
-   Copyright (C) 1998-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1998-2004, 2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -426,7 +426,7 @@ print_version (FILE *stream, struct argp_state *state)
 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\
-"), "2007");
+"), "2006");
   fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
 }
 
index 405ee98a913b5b498b5e8c9fe33ccded33a082ac..dc3f00845799d48b70c608227e9e6d4840423472 100644 (file)
@@ -1,5 +1,5 @@
 /* Generate fastloading iconv module configuration files.
-   Copyright (C) 2000-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2000-2004, 2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
 
@@ -395,7 +395,7 @@ print_version (FILE *stream, struct argp_state *state)
 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\
-"), "2007");
+"), "2006");
   fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
 }
 
index 852c7b94a61d6d0a2d5607b45826c5070f60a72e..a33645d41feb6960d1645839f6a529eddb8b1756 100644 (file)
@@ -1,5 +1,5 @@
 # GNU libc iconv configuration.
-# Copyright (C) 1997-2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1997-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
@@ -1376,7 +1376,7 @@ module    INTERNAL                INIS-CYRILLIC//         INIS-CYRILLIC   1
 #      from                    to                      module          cost
 alias  ISO-IR-98//             ISO_2033//
 alias  ISO_2033-1983//         ISO_2033//
-alias  E13B/                   ISO_2033//
+alias  E13B//                  ISO_2033//
 alias  CSISO2033//             ISO_2033//
 module ISO_2033//              INTERNAL                ISO_2033        1
 module INTERNAL                ISO_2033//              ISO_2033        1
index 6d6f92235cfb556c89f5fd5b2bfc6198b2abf0ea..58cb5bcc0d0f1bcf56428b3776d81dc0b23d6a12 100644 (file)
@@ -1,5 +1,5 @@
 /* Mapping tables for JOHAB handling.
-   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 Jungshik Shin <jshin@pantheon.yale.edu>
    and Ulrich Drepper <drepper@cygnus.com>, 1998.
@@ -239,7 +239,7 @@ johab_sym_hanja_to_ucs (uint_fast32_t idx, uint_fast32_t c1, uint_fast32_t c2)
                if (__builtin_expect (ch2 < 0x31, 0)                          \
                    || (__builtin_expect (ch2 > 0x7e, 0) && ch2 < 0x91)       \
                    || __builtin_expect (ch2, 0) == 0xff                      \
-                   || (__builtin_expect (ch, 0) == 0xd9 && ch2 > 0xe5)       \
+                   || (__builtin_expect (ch, 0) == 0xd9 && ch2 > 0xe8)       \
                    || (__builtin_expect (ch, 0) == 0xda                      \
                        && ch2 > 0xa0 && ch2 < 0xd4)                          \
                    || (__builtin_expect (ch, 0) == 0xde && ch2 > 0xf1))      \
@@ -386,7 +386,7 @@ johab_sym_hanja_to_ucs (uint_fast32_t idx, uint_fast32_t c1, uint_fast32_t c2)
                break;                                                        \
              }                                                               \
            if (__builtin_expect (written == __UNKNOWN_10646_CHAR, 0)         \
-               || (outptr[0] == 0x22 && outptr[1] > 0x65))                   \
+               || (outptr[0] == 0x22 && outptr[1] > 0x68))                   \
              {                                                               \
                UNICODE_TAG_HANDLER (ch, 4);                                  \
                STANDARD_TO_LOOP_ERR_HANDLER (4);                             \
index bf8ce35cc6cd657ddedb749b4e0391d841d6aff5..30e468150d3441ed5925d93b564447a578cfe0c6 100644 (file)
@@ -1,5 +1,5 @@
 /* Conversion tables for KS C 5601-1992 based encoding conversion.
-   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2000, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jungshik Shin <jshin@pantheon.yale.edu>, 1998.
 
@@ -412,7 +412,8 @@ const uint16_t __ksc5601_sym_to_ucs[] =
   [0x0098] = 0x2669, [0x0099] = 0x266a, [0x009a] = 0x266c, [0x009b] = 0x327f,
   [0x009c] = 0x321c, [0x009d] = 0x2116, [0x009e] = 0x33c7, [0x009f] = 0x2122,
   [0x00a0] = 0x33c2, [0x00a1] = 0x33d8, [0x00a2] = 0x2121, [0x00a3] = 0x20ac,
-  [0x00a4] = 0x00ae, [0x00bc] = 0xff01, [0x00bd] = 0xff02, [0x00be] = 0xff03,
+  [0x00a4] = 0x00ae, [0x00a5] = 0x327e,
+                     [0x00bc] = 0xff01, [0x00bd] = 0xff02, [0x00be] = 0xff03,
   [0x00bf] = 0xff04, [0x00c0] = 0xff05, [0x00c1] = 0xff06, [0x00c2] = 0xff07,
   [0x00c3] = 0xff08, [0x00c4] = 0xff09, [0x00c5] = 0xff0a, [0x00c6] = 0xff0b,
   [0x00c7] = 0xff0c, [0x00c8] = 0xff0d, [0x00c9] = 0xff0e, [0x00ca] = 0xff0f,
@@ -917,6 +918,7 @@ const struct map __ksc5601_sym_from_ucs[KSC5601_SYMBOL] =
   {0x3273, "\x28\x44"}, {0x3274, "\x28\x45"}, {0x3275, "\x28\x46"},
   {0x3276, "\x28\x47"}, {0x3277, "\x28\x48"}, {0x3278, "\x28\x49"},
   {0x3279, "\x28\x4a"}, {0x327a, "\x28\x4b"}, {0x327b, "\x28\x4c"},
+  {0x327e, "\x22\x68"},
   {0x327f, "\x22\x5e"}, {0x3380, "\x27\x49"}, {0x3381, "\x27\x4a"},
   {0x3382, "\x27\x4b"}, {0x3383, "\x27\x4c"}, {0x3384, "\x27\x4d"},
   {0x3388, "\x27\x3a"}, {0x3389, "\x27\x3b"}, {0x338a, "\x27\x5c"},
index 603a337f891f14e8a12dac0a957f50cf522ea120..77f47ca834e39972ae64d84cc56e5cc6d5f0363f 100644 (file)
@@ -1,5 +1,5 @@
 /* Access functions for KS C 5601-1992 based encoding conversion.
-   Copyright (C) 1998, 1999, 2000, 2003 Free Software Foundation, Inc.
+   Copyright (C) 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,7 +22,7 @@
 
 #define KSC5601_HANGUL 2350
 #define KSC5601_HANJA  4888
-#define KSC5601_SYMBOL  988
+#define KSC5601_SYMBOL  989
 
 #include <gconv.h>
 #include <stdint.h>
index 5d25b863eeaf96d99b4516a574cbebb150e89b79..1234346c8d81186efaa87106838a2b841028e657 100644 (file)
@@ -1,5 +1,5 @@
 /* Mapping tables for UHC handling.
-   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 Jungshik Shin <jshin@pantheon.yale.edu>, 1998.
 
@@ -3135,7 +3135,8 @@ static const char uhc_hangul_from_ucs[11172][2] =
        else                                                                  \
          {                                                                   \
            ch = ksc5601_to_ucs4 (&inptr, 2, 0x80);                           \
-           if (__builtin_expect (ch == __UNKNOWN_10646_CHAR, 0))             \
+           if (__builtin_expect (ch == __UNKNOWN_10646_CHAR, 0)              \
+               || __builtin_expect (ch == 0x327e, 0))                        \
              {                                                               \
                /* Illegal.  */                                               \
                STANDARD_FROM_LOOP_ERR_HANDLER (2);                           \
@@ -3207,15 +3208,16 @@ static const char uhc_hangul_from_ucs[11172][2] =
       {                                                                              \
        size_t written = ucs4_to_ksc5601_sym (ch, outptr, outend - outptr);   \
                                                                              \
+       if (__builtin_expect (ch == 0x327e, 0)                                \
+           || __builtin_expect (written == __UNKNOWN_10646_CHAR, 0))         \
+         {                                                                   \
+           UNICODE_TAG_HANDLER (ch, 4);                                      \
+           STANDARD_TO_LOOP_ERR_HANDLER (4);                                 \
+         }                                                                   \
        if (__builtin_expect (written == 0, 0))                               \
          {                                                                   \
            result = __GCONV_FULL_OUTPUT;                                     \
            break;                                                            \
-         }                                                                   \
-       if (__builtin_expect (written == __UNKNOWN_10646_CHAR, 0))            \
-         {                                                                   \
-           UNICODE_TAG_HANDLER (ch, 4);                                      \
-           STANDARD_TO_LOOP_ERR_HANDLER (4);                                 \
          }                                                                   \
                                                                              \
        *outptr++ |= 0x80;                                                    \
index 2ad8b5fcb7b9543ff2e1d00dbc46203fe40cecb2..d44728b215cf54405e0e3e3dac26e6400fadf7d0 100644 (file)
 #ifndef _ATOMIC_H
 #define _ATOMIC_H      1
 
-/* This header defines three types of macros:
-
-   - atomic arithmetic and logic operation on memory.  They all
-     have the prefix "atomic_".
-
-   - conditionally atomic operations of the same kinds.  These
-     always behave identical but can be faster when atomicity
-     is not really needed since only one thread has access to
-     the memory location.  In that case the code is slower in
-     the multi-thread case.  The interfaces have the prefix
-     "catomic_".
-
-   - support functions like barriers.  They also have the preifx
-     "atomic_".
-
-   Architectures must provide a few lowlevel macros (the compare
-   and exchange definitions).  All others are optional.  They
-   should only be provided if the architecture has specific
-   support for the operation.
-
-   As <atomic.h> macros are usually heavily nested and often use local
-   variables to make sure side-effects are evaluated properly, use for
-   macro local variables a per-macro unique prefix.  This file uses
-   __atgN_ prefix where N is different in each macro.  */
-
 #include <stdlib.h>
 
 #include <bits/atomic.h>
    and following args.  */
 #define __atomic_val_bysize(pre, post, mem, ...)                             \
   ({                                                                         \
-    __typeof (*mem) __atg1_result;                                           \
+    __typeof (*mem) __result;                                                \
     if (sizeof (*mem) == 1)                                                  \
-      __atg1_result = pre##_8_##post (mem, __VA_ARGS__);                     \
+      __result = pre##_8_##post (mem, __VA_ARGS__);                          \
     else if (sizeof (*mem) == 2)                                             \
-      __atg1_result = pre##_16_##post (mem, __VA_ARGS__);                    \
+      __result = pre##_16_##post (mem, __VA_ARGS__);                         \
     else if (sizeof (*mem) == 4)                                             \
-      __atg1_result = pre##_32_##post (mem, __VA_ARGS__);                    \
+      __result = pre##_32_##post (mem, __VA_ARGS__);                         \
     else if (sizeof (*mem) == 8)                                             \
-      __atg1_result = pre##_64_##post (mem, __VA_ARGS__);                    \
+      __result = pre##_64_##post (mem, __VA_ARGS__);                         \
     else                                                                     \
       abort ();                                                                      \
-    __atg1_result;                                                           \
+    __result;                                                                \
   })
 #define __atomic_bool_bysize(pre, post, mem, ...)                            \
   ({                                                                         \
-    int __atg2_result;                                                       \
+    int __result;                                                            \
     if (sizeof (*mem) == 1)                                                  \
-      __atg2_result = pre##_8_##post (mem, __VA_ARGS__);                     \
+      __result = pre##_8_##post (mem, __VA_ARGS__);                          \
     else if (sizeof (*mem) == 2)                                             \
-      __atg2_result = pre##_16_##post (mem, __VA_ARGS__);                    \
+      __result = pre##_16_##post (mem, __VA_ARGS__);                         \
     else if (sizeof (*mem) == 4)                                             \
-      __atg2_result = pre##_32_##post (mem, __VA_ARGS__);                    \
+      __result = pre##_32_##post (mem, __VA_ARGS__);                         \
     else if (sizeof (*mem) == 8)                                             \
-      __atg2_result = pre##_64_##post (mem, __VA_ARGS__);                    \
+      __result = pre##_64_##post (mem, __VA_ARGS__);                         \
     else                                                                     \
       abort ();                                                                      \
-    __atg2_result;                                                           \
+    __result;                                                                \
   })
 
 
 #endif
 
 
-#if !defined catomic_compare_and_exchange_val_acq \
-    && defined __arch_c_compare_and_exchange_val_32_acq
-# define catomic_compare_and_exchange_val_acq(mem, newval, oldval) \
-  __atomic_val_bysize (__arch_c_compare_and_exchange_val,acq,                \
-                      mem, newval, oldval)
-#else
-# define catomic_compare_and_exchange_val_acq(mem, newval, oldval) \
-  atomic_compare_and_exchange_val_acq (mem, newval, oldval)
-#endif
-
-
 #ifndef atomic_compare_and_exchange_val_rel
 # define atomic_compare_and_exchange_val_rel(mem, newval, oldval)            \
   atomic_compare_and_exchange_val_acq (mem, newval, oldval)
 #endif
 
 
-#ifndef catomic_compare_and_exchange_val_rel
-# define catomic_compare_and_exchange_val_rel(mem, newval, oldval)           \
-  atomic_compare_and_exchange_val_acq (mem, newval, oldval)
-#endif
-
-
 /* Atomically store NEWVAL in *MEM if *MEM is equal to OLDVAL.
    Return zero if *MEM was changed or non-zero if no exchange happened.  */
 #ifndef atomic_compare_and_exchange_bool_acq
 #   define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
   ({ /* Cannot use __oldval here, because macros later in this file might     \
        call this macro with __oldval argument.  */                           \
-     __typeof (oldval) __atg3_old = (oldval);                                \
-     atomic_compare_and_exchange_val_acq (mem, newval, __atg3_old)           \
-       != __atg3_old;                                                        \
-  })
-# endif
-#endif
-
-
-#ifndef catomic_compare_and_exchange_bool_acq
-# ifdef __arch_c_compare_and_exchange_bool_32_acq
-#  define catomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
-  __atomic_bool_bysize (__arch_c_compare_and_exchange_bool,acq,                      \
-                       mem, newval, oldval)
-#  else
-#   define catomic_compare_and_exchange_bool_acq(mem, newval, oldval) \
-  ({ /* Cannot use __oldval here, because macros later in this file might     \
-       call this macro with __oldval argument.  */                           \
-     __typeof (oldval) __atg4_old = (oldval);                                \
-     catomic_compare_and_exchange_val_acq (mem, newval, __atg4_old)          \
-       != __atg4_old;                                                        \
+     __typeof (oldval) __old = (oldval);                                     \
+     atomic_compare_and_exchange_val_acq (mem, newval, __old) != __old;              \
   })
 # endif
 #endif
 #endif
 
 
-#ifndef catomic_compare_and_exchange_bool_rel
-# define catomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
-  catomic_compare_and_exchange_bool_acq (mem, newval, oldval)
-#endif
-
-
 /* Store NEWVALUE in *MEM and return the old value.  */
 #ifndef atomic_exchange_acq
 # define atomic_exchange_acq(mem, newvalue) \
-  ({ __typeof (*(mem)) __atg5_oldval;                                        \
-     __typeof (mem) __atg5_memp = (mem);                                     \
-     __typeof (*(mem)) __atg5_value = (newvalue);                            \
+  ({ __typeof (*(mem)) __oldval;                                             \
+     __typeof (mem) __memp = (mem);                                          \
+     __typeof (*(mem)) __value = (newvalue);                                 \
                                                                              \
      do                                                                              \
-       __atg5_oldval = *__atg5_memp;                                         \
-     while (__builtin_expect                                                 \
-           (atomic_compare_and_exchange_bool_acq (__atg5_memp, __atg5_value, \
-                                                  __atg5_oldval), 0));       \
+       __oldval = *__memp;                                                   \
+     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
+                                                                   __value,  \
+                                                                   __oldval),\
+                             0));                                            \
                                                                              \
-     __atg5_oldval; })
+     __oldval; })
 #endif
 
 #ifndef atomic_exchange_rel
 /* Add VALUE to *MEM and return the old value of *MEM.  */
 #ifndef atomic_exchange_and_add
 # define atomic_exchange_and_add(mem, value) \
-  ({ __typeof (*(mem)) __atg6_oldval;                                        \
-     __typeof (mem) __atg6_memp = (mem);                                     \
-     __typeof (*(mem)) __atg6_value = (value);                               \
+  ({ __typeof (*(mem)) __oldval;                                             \
+     __typeof (mem) __memp = (mem);                                          \
+     __typeof (*(mem)) __value = (value);                                    \
                                                                              \
      do                                                                              \
-       __atg6_oldval = *__atg6_memp;                                         \
-     while (__builtin_expect                                                 \
-           (atomic_compare_and_exchange_bool_acq (__atg6_memp,               \
-                                                  __atg6_oldval              \
-                                                  + __atg6_value,            \
-                                                  __atg6_oldval), 0));       \
+       __oldval = *__memp;                                                   \
+     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
+                                                                   __oldval  \
+                                                                   + __value,\
+                                                                   __oldval),\
+                             0));                                            \
                                                                              \
-     __atg6_oldval; })
+     __oldval; })
 #endif
 
 
-#ifndef catomic_exchange_and_add
-# define catomic_exchange_and_add(mem, value) \
-  ({ __typeof (*(mem)) __atg7_oldv;                                          \
-     __typeof (mem) __atg7_memp = (mem);                                     \
-     __typeof (*(mem)) __atg7_value = (value);                               \
-                                                                             \
-     do                                                                              \
-       __atg7_oldv = *__atg7_memp;                                           \
-     while (__builtin_expect                                                 \
-           (catomic_compare_and_exchange_bool_acq (__atg7_memp,              \
-                                                   __atg7_oldv               \
-                                                   + __atg7_value,           \
-                                                   __atg7_oldv), 0));        \
-                                                                             \
-     __atg7_oldv; })
-#endif
-
 
 #ifndef atomic_max
 # define atomic_max(mem, value) \
   do {                                                                       \
-    __typeof (*(mem)) __atg8_oldval;                                         \
-    __typeof (mem) __atg8_memp = (mem);                                              \
-    __typeof (*(mem)) __atg8_value = (value);                                \
-    do {                                                                     \
-      __atg8_oldval = *__atg8_memp;                                          \
-      if (__atg8_oldval >= __atg8_value)                                     \
-       break;                                                                \
-    } while (__builtin_expect                                                \
-            (atomic_compare_and_exchange_bool_acq (__atg8_memp, __atg8_value,\
-                                                   __atg8_oldval), 0));      \
-  } while (0)
-#endif
-
-
-#ifndef catomic_max
-# define catomic_max(mem, value) \
-  do {                                                                       \
-    __typeof (*(mem)) __atg9_oldv;                                           \
-    __typeof (mem) __atg9_memp = (mem);                                              \
-    __typeof (*(mem)) __atg9_value = (value);                                \
+    __typeof (*(mem)) __oldval;                                                      \
+    __typeof (mem) __memp = (mem);                                           \
+    __typeof (*(mem)) __value = (value);                                     \
     do {                                                                     \
-      __atg9_oldv = *__atg9_memp;                                            \
-      if (__atg9_oldv >= __atg9_value)                                       \
+      __oldval = *__memp;                                                    \
+      if (__oldval >= __value)                                               \
        break;                                                                \
-    } while (__builtin_expect                                                \
-            (catomic_compare_and_exchange_bool_acq (__atg9_memp,             \
-                                                    __atg9_value,            \
-                                                    __atg9_oldv), 0));       \
+    } while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,  \
+                                                                    __value, \
+                                                                    __oldval),\
+                              0));                                           \
   } while (0)
 #endif
 
-
 #ifndef atomic_min
 # define atomic_min(mem, value) \
   do {                                                                       \
-    __typeof (*(mem)) __atg10_oldval;                                        \
-    __typeof (mem) __atg10_memp = (mem);                                     \
-    __typeof (*(mem)) __atg10_value = (value);                               \
+    __typeof (*(mem)) __oldval;                                                      \
+    __typeof (mem) __memp = (mem);                                           \
+    __typeof (*(mem)) __value = (value);                                     \
     do {                                                                     \
-      __atg10_oldval = *__atg10_memp;                                        \
-      if (__atg10_oldval <= __atg10_value)                                   \
+      __oldval = *__memp;                                                    \
+      if (__oldval <= __value)                                               \
        break;                                                                \
-    } while (__builtin_expect                                                \
-            (atomic_compare_and_exchange_bool_acq (__atg10_memp,             \
-                                                   __atg10_value,            \
-                                                   __atg10_oldval), 0));     \
+    } while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,  \
+                                                                    __value, \
+                                                                    __oldval),\
+                              0));                                           \
   } while (0)
 #endif
 
-
 #ifndef atomic_add
 # define atomic_add(mem, value) (void) atomic_exchange_and_add ((mem), (value))
 #endif
 
 
-#ifndef catomic_add
-# define catomic_add(mem, value) \
-  (void) catomic_exchange_and_add ((mem), (value))
-#endif
-
-
 #ifndef atomic_increment
 # define atomic_increment(mem) atomic_add ((mem), 1)
 #endif
 
 
-#ifndef catomic_increment
-# define catomic_increment(mem) catomic_add ((mem), 1)
-#endif
-
-
 #ifndef atomic_increment_val
 # define atomic_increment_val(mem) (atomic_exchange_and_add ((mem), 1) + 1)
 #endif
 
 
-#ifndef catomic_increment_val
-# define catomic_increment_val(mem) (catomic_exchange_and_add ((mem), 1) + 1)
-#endif
-
-
 /* Add one to *MEM and return true iff it's now zero.  */
 #ifndef atomic_increment_and_test
 # define atomic_increment_and_test(mem) \
 #endif
 
 
-#ifndef catomic_decrement
-# define catomic_decrement(mem) catomic_add ((mem), -1)
-#endif
-
-
 #ifndef atomic_decrement_val
 # define atomic_decrement_val(mem) (atomic_exchange_and_add ((mem), -1) - 1)
 #endif
 
 
-#ifndef catomic_decrement_val
-# define catomic_decrement_val(mem) (catomic_exchange_and_add ((mem), -1) - 1)
-#endif
-
-
 /* Subtract 1 from *MEM and return true iff it's now zero.  */
 #ifndef atomic_decrement_and_test
 # define atomic_decrement_and_test(mem) \
 /* Decrement *MEM if it is > 0, and return the old value.  */
 #ifndef atomic_decrement_if_positive
 # define atomic_decrement_if_positive(mem) \
-  ({ __typeof (*(mem)) __atg11_oldval;                                       \
-     __typeof (mem) __atg11_memp = (mem);                                    \
+  ({ __typeof (*(mem)) __oldval;                                             \
+     __typeof (mem) __memp = (mem);                                          \
                                                                              \
      do                                                                              \
        {                                                                     \
-        __atg11_oldval = *__atg11_memp;                                      \
-        if (__builtin_expect (__atg11_oldval <= 0, 0))                       \
+        __oldval = *__memp;                                                  \
+        if (__builtin_expect (__oldval <= 0, 0))                             \
           break;                                                             \
        }                                                                     \
-     while (__builtin_expect                                                 \
-           (atomic_compare_and_exchange_bool_acq (__atg11_memp,              \
-                                                  __atg11_oldval - 1,        \
-                                                  __atg11_oldval), 0));      \
-     __atg11_oldval; })
+     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
+                                                                   __oldval  \
+                                                                   - 1,      \
+                                                                   __oldval),\
+                             0));\
+     __oldval; })
 #endif
 
 
 #ifndef atomic_add_negative
 # define atomic_add_negative(mem, value)                                     \
-  ({ __typeof (value) __atg12_value = (value);                               \
-     atomic_exchange_and_add (mem, __atg12_value) < -__atg12_value; })
+  ({ __typeof (value) __aan_value = (value);                                 \
+     atomic_exchange_and_add (mem, __aan_value) < -__aan_value; })
 #endif
 
 
 #ifndef atomic_add_zero
 # define atomic_add_zero(mem, value)                                         \
-  ({ __typeof (value) __atg13_value = (value);                               \
-     atomic_exchange_and_add (mem, __atg13_value) == -__atg13_value; })
+  ({ __typeof (value) __aaz_value = (value);                                 \
+     atomic_exchange_and_add (mem, __aaz_value) == -__aaz_value; })
 #endif
 
 
 
 #ifndef atomic_bit_test_set
 # define atomic_bit_test_set(mem, bit) \
-  ({ __typeof (*(mem)) __atg14_old;                                          \
-     __typeof (mem) __atg14_memp = (mem);                                    \
-     __typeof (*(mem)) __atg14_mask = ((__typeof (*(mem))) 1 << (bit));              \
+  ({ __typeof (*(mem)) __oldval;                                             \
+     __typeof (mem) __memp = (mem);                                          \
+     __typeof (*(mem)) __mask = ((__typeof (*(mem))) 1 << (bit));            \
                                                                              \
      do                                                                              \
-       __atg14_old = (*__atg14_memp);                                        \
-     while (__builtin_expect                                                 \
-           (atomic_compare_and_exchange_bool_acq (__atg14_memp,              \
-                                                  __atg14_old | __atg14_mask,\
-                                                  __atg14_old), 0));         \
+       __oldval = (*__memp);                                                 \
+     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
+                                                                   __oldval  \
+                                                                   | __mask, \
+                                                                   __oldval),\
+                             0));                                            \
                                                                              \
-     __atg14_old & __atg14_mask; })
+     __oldval & __mask; })
 #endif
 
-/* Atomically *mem &= mask.  */
+/* Atomically *mem &= mask and return the old value of *mem.  */
 #ifndef atomic_and
 # define atomic_and(mem, mask) \
-  do {                                                                       \
-    __typeof (*(mem)) __atg15_old;                                           \
-    __typeof (mem) __atg15_memp = (mem);                                     \
-    __typeof (*(mem)) __atg15_mask = (mask);                                 \
-                                                                             \
-    do                                                                       \
-      __atg15_old = (*__atg15_memp);                                         \
-    while (__builtin_expect                                                  \
-          (atomic_compare_and_exchange_bool_acq (__atg15_memp,               \
-                                                 __atg15_old & __atg15_mask, \
-                                                 __atg15_old), 0));          \
-  } while (0)
-#endif
-
-/* Atomically *mem &= mask and return the old value of *mem.  */
-#ifndef atomic_and_val
-# define atomic_and_val(mem, mask) \
-  ({ __typeof (*(mem)) __atg16_old;                                          \
-     __typeof (mem) __atg16_memp = (mem);                                    \
-     __typeof (*(mem)) __atg16_mask = (mask);                                \
+  ({ __typeof (*(mem)) __oldval;                                             \
+     __typeof (mem) __memp = (mem);                                          \
+     __typeof (*(mem)) __mask = (mask);                                              \
                                                                              \
      do                                                                              \
-       __atg16_old = (*__atg16_memp);                                        \
-     while (__builtin_expect                                                 \
-           (atomic_compare_and_exchange_bool_acq (__atg16_memp,              \
-                                                  __atg16_old & __atg16_mask,\
-                                                  __atg16_old), 0));         \
+       __oldval = (*__memp);                                                 \
+     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
+                                                                   __oldval  \
+                                                                   & __mask, \
+                                                                   __oldval),\
+                             0));                                            \
                                                                              \
-     __atg16_old; })
+     __oldval; })
 #endif
 
 /* Atomically *mem |= mask and return the old value of *mem.  */
 #ifndef atomic_or
 # define atomic_or(mem, mask) \
-  do {                                                                       \
-    __typeof (*(mem)) __atg17_old;                                           \
-    __typeof (mem) __atg17_memp = (mem);                                     \
-    __typeof (*(mem)) __atg17_mask = (mask);                                 \
-                                                                             \
-    do                                                                       \
-      __atg17_old = (*__atg17_memp);                                         \
-    while (__builtin_expect                                                  \
-          (atomic_compare_and_exchange_bool_acq (__atg17_memp,               \
-                                                 __atg17_old | __atg17_mask, \
-                                                 __atg17_old), 0));          \
-  } while (0)
-#endif
-
-#ifndef catomic_or
-# define catomic_or(mem, mask) \
-  do {                                                                       \
-    __typeof (*(mem)) __atg18_old;                                           \
-    __typeof (mem) __atg18_memp = (mem);                                     \
-    __typeof (*(mem)) __atg18_mask = (mask);                                 \
-                                                                             \
-    do                                                                       \
-      __atg18_old = (*__atg18_memp);                                         \
-    while (__builtin_expect                                                  \
-          (catomic_compare_and_exchange_bool_acq (__atg18_memp,              \
-                                                  __atg18_old | __atg18_mask,\
-                                                  __atg18_old), 0));         \
-  } while (0)
-#endif
-
-/* Atomically *mem |= mask and return the old value of *mem.  */
-#ifndef atomic_or_val
-# define atomic_or_val(mem, mask) \
-  ({ __typeof (*(mem)) __atg19_old;                                          \
-     __typeof (mem) __atg19_memp = (mem);                                    \
-     __typeof (*(mem)) __atg19_mask = (mask);                                \
+  ({ __typeof (*(mem)) __oldval;                                             \
+     __typeof (mem) __memp = (mem);                                          \
+     __typeof (*(mem)) __mask = (mask);                                              \
                                                                              \
      do                                                                              \
-       __atg19_old = (*__atg19_memp);                                        \
-     while (__builtin_expect                                                 \
-           (atomic_compare_and_exchange_bool_acq (__atg19_memp,              \
-                                                  __atg19_old | __atg19_mask,\
-                                                  __atg19_old), 0));         \
+       __oldval = (*__memp);                                                 \
+     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
+                                                                   __oldval  \
+                                                                   | __mask, \
+                                                                   __oldval),\
+                             0));                                            \
                                                                              \
-     __atg19_old; })
+     __oldval; })
 #endif
 
 #ifndef atomic_full_barrier
index 79c8f7d31bbd24801aab735c5e35e71e4068d2ba..9144dd2f3fb368d30a4e68eaf5dc4cf33f7ddded 100644 (file)
@@ -47,9 +47,6 @@ libc_hidden_proto (_dl_addr)
 
 /* Close an object previously opened by _dl_open.  */
 extern void _dl_close (void *map) attribute_hidden;
-/* Same as above, but without locking and safety checks for user
-   provided map arguments.  */
-extern void _dl_close_worker (struct link_map *map) attribute_hidden;
 
 /* Look up NAME in shared object HANDLE (which may be RTLD_DEFAULT or
    RTLD_NEXT).  WHO is the calling function, for RTLD_NEXT.  Returns
index 80c7b6ec132ce0470d054d4036670c7fb5ad394e..fe8bca44c5de53e25bad1c16da28b78684624cb5 100644 (file)
@@ -19,7 +19,7 @@ extern int rtld_errno attribute_hidden;
 
 # else
 
-#  include <tls.h>
+#  include <tls.h>             /* Defines USE_TLS.  */
 
 #  if USE___THREAD
 #   undef  errno
index a2faeafb32a707d075dedc5d7a858ed5e3da4da6..da46f5e8040e15395b97d7284203f78707410a8d 100644 (file)
 #  define _weak_alias(name, aliasname) \
   extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
 
-/* Same as WEAK_ALIAS, but mark symbol as hidden.  */
-#  define weak_hidden_alias(name, aliasname) \
-  _weak_hidden_alias (name, aliasname)
-#  define _weak_hidden_alias(name, aliasname) \
-  extern __typeof (name) aliasname \
-    __attribute__ ((weak, alias (#name), __visibility__ ("hidden")));
-
 /* Declare SYMBOL as weak undefined symbol (resolved to 0 if not defined).  */
 #  define weak_extern(symbol) _weak_extern (weak symbol)
 #  define _weak_extern(expr) _Pragma (#expr)
 # else
 
 #  define weak_alias(name, aliasname) strong_alias(name, aliasname)
-#  define weak_hidden_alias(name, aliasname) strong_alias(name, aliasname)
 #  define weak_extern(symbol) /* Nothing. */
 
 # endif
@@ -294,42 +286,27 @@ requires at runtime the shared libraries from the glibc version used \
 for linking")
 #endif
 
-/* Declare SYMBOL to be TYPE (`function' or `object') of SIZE bytes
-   alias to ORIGINAL, when the assembler supports such declarations
-   (such as in ELF).
+/* Declare SYMBOL to be TYPE (`function' or `object') and of SIZE bytes,
+   when the assembler supports such declarations (such as in ELF).
    This is only necessary when defining something in assembly, or playing
    funny alias games where the size should be other than what the compiler
    thinks it is.  */
-#define declare_symbol_alias(symbol, original, type, size) \
-  declare_symbol_alias_1 (symbol, original, type, size)
+#define declare_symbol(symbol, type, size) \
+  declare_symbol_1 (symbol, type, size)
 #ifdef ASM_TYPE_DIRECTIVE_PREFIX
 # ifdef __ASSEMBLER__
-#  define declare_symbol_alias_1(symbol, original, type, size) \
-    strong_alias (original, symbol); \
+#  define declare_symbol_1(symbol, type, size) \
     .type C_SYMBOL_NAME (symbol), \
-         declare_symbol_alias_1_paste (ASM_TYPE_DIRECTIVE_PREFIX, type); \
-    .size C_SYMBOL_NAME (symbol), size
-#  define declare_symbol_alias_1_paste(a, b) \
-  declare_symbol_alias_1_paste_1 (a,b)
-#  define declare_symbol_alias_1_paste_1(a,b)  a##b
+         declare_symbol_1_paste (ASM_TYPE_DIRECTIVE_PREFIX, type), size
+#  define declare_symbol_1_paste(a, b) declare_symbol_1_paste_1 (a,b)
+#  define declare_symbol_1_paste_1(a,b)        a##b
 # else /* Not __ASSEMBLER__.  */
-#  define declare_symbol_alias_1(symbol, original, type, size) \
-    asm (declare_symbol_alias_1_stringify (ASM_GLOBAL_DIRECTIVE) \
-        " " __SYMBOL_PREFIX #symbol \
-        "\n\t" declare_symbol_alias_1_alias (symbol, original) \
-        "\n\t.type " __SYMBOL_PREFIX #symbol ", " \
-        declare_symbol_alias_1_stringify (ASM_TYPE_DIRECTIVE_PREFIX) #type \
+#  define declare_symbol_1(symbol, type, size) \
+    asm (".type " __SYMBOL_PREFIX #symbol ", " \
+        declare_symbol_1_stringify (ASM_TYPE_DIRECTIVE_PREFIX) #type \
         "\n\t.size " __SYMBOL_PREFIX #symbol ", " #size);
-#  define declare_symbol_alias_1_stringify(x) \
-  declare_symbol_alias_1_stringify_1 (x)
-#  define declare_symbol_alias_1_stringify_1(x) #x
-#  ifdef HAVE_ASM_SET_DIRECTIVE
-#   define declare_symbol_alias_1_alias(symbol, original) \
-        ".set " __SYMBOL_PREFIX #symbol ", " __SYMBOL_PREFIX #original
-#  else
-#   define declare_symbol_alias_1_alias(symbol, original) \
-        __SYMBOL_PREFIX #symbol " = " __SYMBOL_PREFIX #original
-#  endif /* HAVE_ASM_SET_DIRECTIVE */
+#  define declare_symbol_1_stringify(x) declare_symbol_1_stringify_1 (x)
+#  define declare_symbol_1_stringify_1(x) #x
 # endif /* __ASSEMBLER__ */
 #else
 # define declare_symbol_1(symbol, type, size) /* Nothing.  */
@@ -454,7 +431,8 @@ for linking")
   strong_alias(real, name)
 #endif
 
-#if defined SHARED || defined LIBC_NONSHARED
+#if defined HAVE_VISIBILITY_ATTRIBUTE \
+    && (defined SHARED || defined LIBC_NONSHARED)
 # define attribute_hidden __attribute__ ((visibility ("hidden")))
 #else
 # define attribute_hidden
@@ -466,7 +444,11 @@ for linking")
 # define attribute_tls_model_ie
 #endif
 
-#define attribute_relro __attribute__ ((section (".data.rel.ro")))
+#ifdef HAVE_Z_RELRO
+# define attribute_relro __attribute__ ((section (".data.rel.ro")))
+#else
+# define attribute_relro
+#endif
 
 /* Handling on non-exported internal names.  We have to do this only
    for shared code.  */
@@ -475,9 +457,14 @@ for linking")
 # define INTDEF(name) strong_alias (name, name##_internal)
 # define INTVARDEF(name) \
   _INTVARDEF (name, name##_internal)
-# define _INTVARDEF(name, aliasname) \
+# if defined HAVE_VISIBILITY_ATTRIBUTE
+#  define _INTVARDEF(name, aliasname) \
   extern __typeof (name) aliasname __attribute__ ((alias (#name), \
                                                   visibility ("hidden")));
+# else
+#  define _INTVARDEF(name, aliasname) \
+  extern __typeof (name) aliasname __attribute__ ((alias (#name)));
+# endif
 # define INTDEF2(name, newname) strong_alias (name, newname##_internal)
 # define INTVARDEF2(name, newname) _INTVARDEF (name, newname##_internal)
 #else
@@ -562,10 +549,16 @@ for linking")
    versioned_symbol (libc, __real_foo, foo, GLIBC_2_1);
    libc_hidden_ver (__real_foo, foo)  */
 
-#if defined SHARED && defined DO_VERSIONING && !defined NO_HIDDEN
+#if defined SHARED && defined DO_VERSIONING \
+    && !defined HAVE_BROKEN_ALIAS_ATTRIBUTE && !defined NO_HIDDEN
 # ifndef __ASSEMBLER__
-#  define __hidden_proto_hiddenattr(attrs...) \
+#  if !defined HAVE_VISIBILITY_ATTRIBUTE \
+      || defined HAVE_BROKEN_VISIBILITY_ATTRIBUTE
+#   define __hidden_proto_hiddenattr(attrs...)
+#  else
+#   define __hidden_proto_hiddenattr(attrs...) \
   __attribute__ ((visibility ("hidden"), ##attrs))
+#  endif
 #  define hidden_proto(name, attrs...) \
   __hidden_proto (name, __GI_##name, ##attrs)
 #  define __hidden_proto(name, internal, attrs...) \
index b45deabf7f6b029073908217ec70bb48a4c64c92..9311256aff19fbd362df80ea736bcb06352ad215 100644 (file)
@@ -1,6 +1,6 @@
 /* Data structure for communication from the run-time dynamic linker for
    loaded ELF shared objects.
-   Copyright (C) 1995-2002,2003,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-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
@@ -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
@@ -122,7 +121,7 @@ struct link_map
        are indexed by DT_ADDRTAGIDX(tagvalue), see <elf.h>.  */
 
     ElfW(Dyn) *l_info[DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM
-                     + DT_EXTRANUM + DT_VALNUM + DT_ADDRNUM];
+                    + DT_EXTRANUM + DT_VALNUM + DT_ADDRNUM];
     const ElfW(Phdr) *l_phdr;  /* Pointer to program header table in core.  */
     ElfW(Addr) l_entry;                /* Entry point location.  */
     ElfW(Half) l_phnum;                /* Number of program header entries.  */
@@ -183,6 +182,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.  */
 
     /* Array with version names.  */
     unsigned int l_nversions;
@@ -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.  */
@@ -261,6 +261,7 @@ struct link_map
       const ElfW(Sym) *ret;
     } l_lookup_cache;
 
+#ifdef USE_TLS
     /* Thread-local storage related info.  */
 
     /* Start of the initialization image.  */
@@ -273,13 +274,14 @@ struct link_map
     size_t l_tls_align;
     /* Offset of first byte module alignment.  */
     size_t l_tls_firstbyte_offset;
-#ifndef NO_TLS_OFFSET
-# define NO_TLS_OFFSET 0
-#endif
+# ifndef NO_TLS_OFFSET
+#  define NO_TLS_OFFSET        0
+# endif
     /* For objects present at startup time: offset in the static TLS block.  */
     ptrdiff_t l_tls_offset;
     /* Index of the module in the dtv array.  */
     size_t l_tls_modid;
+#endif
 
     /* Information used to change permission after the relocations are
        done.  */
index 9c2be0e811a530c1b66382a5b54b84fe8a4ca696..635c513e4dcdc8a4b785d85a684138098d958aaa 100644 (file)
@@ -42,4 +42,6 @@ libnsl_hidden_proto (__nis_default_group)
 libnsl_hidden_proto (__nis_default_access)
 libnsl_hidden_proto (nis_clone_object)
 
+extern const_nis_name __nis_domain_of (const_nis_name) __THROW;
+
 #endif
index 79246dff25c5d91d08d22330a1bf7ba9fad7e888..1e6d1782d925d0dd89cfa5b592e9c63d05ff690d 100644 (file)
@@ -1,5 +1,5 @@
 /* Macros for managing ABI-compatibility definitions using ELF symbol versions.
-   Copyright (C) 2000, 2002, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -44,8 +44,6 @@
    in the GLIBC_2.0 version and obsoleted in the GLIBC_2.2 version.  */
 
 # define SHLIB_COMPAT(lib, introduced, obsoleted)                            \
-  _SHLIB_COMPAT (lib, introduced, obsoleted)
-# define _SHLIB_COMPAT(lib, introduced, obsoleted)                           \
   ((IS_IN_##lib - 0)                                                         \
    && (!(ABI_##lib##_##obsoleted - 0)                                        \
        || ((ABI_##lib##_##introduced - 0) < (ABI_##lib##_##obsoleted - 0))))
    shlib-versions if that is newer.  */
 
 # define versioned_symbol(lib, local, symbol, version) \
-  versioned_symbol_1 (lib, local, symbol, version)
-# define versioned_symbol_1(lib, local, symbol, version) \
-  versioned_symbol_2 (local, symbol, VERSION_##lib##_##version)
-# define versioned_symbol_2(local, symbol, name) \
+  versioned_symbol_1 (local, symbol, VERSION_##lib##_##version)
+# define versioned_symbol_1(local, symbol, name) \
   default_symbol_version (local, symbol, name)
 
 # define compat_symbol(lib, local, symbol, version) \
-  compat_symbol_1 (lib, local, symbol, version)
-# define compat_symbol_1(lib, local, symbol, version) \
-  compat_symbol_2 (local, symbol, VERSION_##lib##_##version)
-# define compat_symbol_2(local, symbol, name) \
+  compat_symbol_1 (local, symbol, VERSION_##lib##_##version)
+# define compat_symbol_1(local, symbol, name) \
   symbol_version (local, symbol, name)
 
 #else
index b293b8f1c7387859100b2dc1e0a3064a13d4630f..e040380d79223e2e3f013b2cb8bee2a1fdba6298 100644 (file)
@@ -131,6 +131,7 @@ libc_hidden_proto (__vsnprintf_chk)
 libc_hidden_proto (__vfprintf_chk)
 
 #  if !defined NOT_IN_libc && defined SHARED && defined DO_VERSIONING \
+  && defined HAVE_VISIBILITY_ATTRIBUTE && !defined HAVE_BROKEN_ALIAS_ATTRIBUTE\
   && !defined NO_HIDDEN
 /* Special gcc builtins.  */
 extern size_t __builtin_fwrite (const void *, size_t, size_t, void *)
index 8ba980477d351a7410c845fb7bef677b12fb2327..cd0750b4524de931614096a2eed6132fafb6562f 100644 (file)
@@ -2,6 +2,12 @@
 
 #include <misc/sys/cdefs.h>
 
+/* The compiler will optimize based on the knowledge the parameter is
+   not NULL.  This will omit tests.  A robust implementation cannot allow
+   this so when compiling glibc itself we ignore this attribute.  */
+#undef __nonnull
+#define __nonnull(params)
+
 extern void __chk_fail (void) __attribute__ ((__noreturn__));
 libc_hidden_proto (__chk_fail)
 rtld_hidden_proto (__chk_fail)
index 8c07a4e2c613b75b1a67fcbcdb6cc27847ec0d63..a4687b30f79b5f2ae89327abc0e000dada5200ba 100644 (file)
@@ -12,4 +12,7 @@ extern int __mprotect (void *__addr, size_t __len, int __prot);
 /* This one is Linux specific.  */
 extern void *__mremap (void *__addr, size_t __old_len,
                       size_t __new_len, int __flags, ...);
+
+libc_hidden_proto (madvise);
+
 #endif
index 1642456a73e9ff270f3e08cd6d27b35ecbdb4955..ffd3e4e70c812a6ef38f7fc10405a3eb057bc4a6 100644 (file)
@@ -5,7 +5,8 @@
 
 #include_next <tls.h>
 
-#if HAVE___THREAD && (!defined NOT_IN_libc || defined IS_IN_libpthread)
+#if USE_TLS && HAVE___THREAD \
+    && (!defined NOT_IN_libc || defined IS_IN_libpthread)
 
 # define USE___THREAD 1
 
index 075716fbebbc7d2b910f0d19f2e6b5ef68d722bc..3f796e4487e98ea576f9ef2ce25ed5a7fc78d517 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2002, 2003, 2004, 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
@@ -52,7 +52,7 @@ routines := htonl htons               \
 aux := check_pf ifreq
 
 tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \
-        tst-gethnm test-ifaddrs bug-if1
+        tst-gethnm test-ifaddrs bug-if1 test-inet6_opt
 
 include ../Rules
 
index bddb85182b3de154f99e6debae1b2149c12b4bb2..17d3fee21369daa7c9d0a04cfa56d307713d2908 100644 (file)
@@ -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.
 
@@ -51,7 +51,7 @@ add_padding (uint8_t *extbuf, int offset, int npad)
 {
   if (npad == 1)
     extbuf[offset] = IP6OPT_PAD1;
-  else
+  else if (npad > 0)
     {
       struct ip6_opt *pad_opt = (struct ip6_opt *) (extbuf + offset);
 
@@ -102,21 +102,17 @@ inet6_opt_append (void *extbuf, socklen_t extlen, int offset, uint8_t type,
   int data_offset = offset + sizeof (struct ip6_opt);
   int npad = (align - data_offset % align) & (align - 1);
 
-  /* Now we can check whether the buffer is large enough.  */
-  if (data_offset + npad + len > extlen)
-    return -1;
-
-  if (npad != 0)
+  if (extbuf != NULL)
     {
-      if (extbuf != NULL)
-       add_padding (extbuf, offset, npad);
+      /* Now we can check whether the buffer is large enough.  */
+      if (data_offset + npad + len > extlen)
+       return -1;
+
+      add_padding (extbuf, offset, npad);
 
       offset += npad;
-    }
 
-  /* Now prepare the option itself.  */
-  if (extbuf != NULL)
-    {
+      /* Now prepare the option itself.  */
       struct ip6_opt *opt = (struct ip6_opt *) ((uint8_t *) extbuf + offset);
 
       opt->ip6o_type = type;
@@ -124,6 +120,8 @@ inet6_opt_append (void *extbuf, socklen_t extlen, int offset, uint8_t type,
 
       *databufp = opt + 1;
     }
+  else
+    offset += npad;
 
   return offset + sizeof (struct ip6_opt) + len;
 }
@@ -145,12 +143,14 @@ inet6_opt_finish (void *extbuf, socklen_t extlen, int offset)
   /* Required padding at the end.  */
   int npad = (8 - (offset & 7)) & 7;
 
-  /* Make sure the buffer is large enough.  */
-  if (offset + npad > extlen)
-    return -1;
-
   if (extbuf != NULL)
-    add_padding (extbuf, offset, npad);
+    {
+      /* Make sure the buffer is large enough.  */
+      if (offset + npad > extlen)
+       return -1;
+
+      add_padding (extbuf, offset, npad);
+    }
 
   return offset + npad;
 }
diff --git a/inet/test-inet6_opt.c b/inet/test-inet6_opt.c
new file mode 100644 (file)
index 0000000..4db9b59
--- /dev/null
@@ -0,0 +1,207 @@
+#include <netinet/in.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define OPT_X  42
+#define OPT_Y  43
+#define OPT_Z  44
+
+static void *
+encode_inet6_opt (socklen_t *elp)
+{
+  void *eb = NULL;
+  socklen_t el;
+  int cl;
+  void *db;
+  int offset;
+  uint8_t val1;
+  uint16_t val2;
+  uint32_t val4;
+  uint64_t val8;
+
+  *elp = 0;
+#define CHECK() \
+  if (cl == -1)                                                \
+    {                                                  \
+      printf ("cl == -1 on line %d\n", __LINE__);      \
+      free (eb);                                       \
+      return NULL;                                     \
+    }
+
+  /* Estimate the length */
+  cl = inet6_opt_init (NULL, 0);
+  CHECK ();
+  cl = inet6_opt_append (NULL, 0, cl, OPT_X, 12, 8, NULL);
+  CHECK ();
+  cl = inet6_opt_append (NULL, 0, cl, OPT_Y, 7, 4, NULL);
+  CHECK ();
+  cl = inet6_opt_append (NULL, 0, cl, OPT_Z, 7, 1, NULL);
+  CHECK ();
+  cl = inet6_opt_finish (NULL, 0, cl);
+  CHECK ();
+  el = cl;
+
+  eb = malloc (el + 8);
+  if (eb == NULL)
+    {
+      puts ("malloc failed");
+      return NULL;
+    }
+  /* Canary.  */
+  memcpy (eb + el, "deadbeef", 8);
+
+  cl = inet6_opt_init (eb, el);
+  CHECK ();
+
+  cl = inet6_opt_append (eb, el, cl, OPT_X, 12, 8, &db);
+  CHECK ();
+  val4 = 0x12345678;
+  offset = inet6_opt_set_val (db, 0, &val4, sizeof  (val4));
+  val8 = 0x0102030405060708LL;
+  inet6_opt_set_val (db, offset, &val8, sizeof  (val8));
+
+  cl = inet6_opt_append (eb, el, cl, OPT_Y, 7, 4, &db);
+  CHECK ();
+  val1 = 0x01;
+  offset = inet6_opt_set_val (db, 0, &val1, sizeof  (val1));
+  val2 = 0x1331;
+  offset = inet6_opt_set_val (db, offset, &val2, sizeof  (val2));
+  val4 = 0x01020304;
+  inet6_opt_set_val (db, offset, &val4, sizeof  (val4));
+
+  cl = inet6_opt_append (eb, el, cl, OPT_Z, 7, 1, &db);
+  CHECK ();
+  inet6_opt_set_val (db, 0, (void *) "abcdefg", 7);
+
+  cl = inet6_opt_finish (eb, el, cl);
+  CHECK ();
+
+  if (memcmp (eb + el, "deadbeef", 8) != 0)
+    {
+      puts ("Canary corrupted");
+      free (eb);
+      return NULL;
+    }
+  *elp = el;
+  return eb;
+}
+
+int
+decode_inet6_opt (void *eb, socklen_t el)
+{
+  int ret = 0;
+  int seq = 0;
+  int cl = 0;
+  int offset;
+  uint8_t type;
+  socklen_t len;
+  uint8_t val1;
+  uint16_t val2;
+  uint32_t val4;
+  uint64_t val8;
+  void *db;
+  char buf[8];
+
+  while ((cl = inet6_opt_next (eb, el, cl, &type, &len, &db)) != -1)
+    switch (type)
+      {
+      case OPT_X:
+       if (seq++ != 0)
+         {
+           puts ("OPT_X is not first");
+           ret = 1;
+         }
+       if (len != 12)
+         {
+           printf ("OPT_X's length %d != 12\n", len);
+           ret = 1;
+         }
+       offset = inet6_opt_get_val (db, 0, &val4, sizeof (val4));
+       if (val4 != 0x12345678)
+         {
+           printf ("OPT_X's val4 %x != 0x12345678\n", val4);
+           ret = 1;
+         }
+       offset = inet6_opt_get_val (db, offset, &val8, sizeof (val8));
+       if (offset != len || val8 != 0x0102030405060708LL)
+         {
+           printf ("OPT_X's val8 %llx != 0x0102030405060708\n",
+                   (long long) val8);
+           ret = 1;
+         }
+       break;
+      case OPT_Y:
+       if (seq++ != 1)
+         {
+           puts ("OPT_Y is not second");
+           ret = 1;
+         }
+       if (len != 7)
+         {
+           printf ("OPT_Y's length %d != 7\n", len);
+           ret = 1;
+         }
+       offset = inet6_opt_get_val (db, 0, &val1, sizeof (val1));
+       if (val1 != 0x01)
+         {
+           printf ("OPT_Y's val1 %x != 0x01\n", val1);
+           ret = 1;
+         }
+       offset = inet6_opt_get_val (db, offset, &val2, sizeof (val2));
+       if (val2 != 0x1331)
+         {
+           printf ("OPT_Y's val2 %x != 0x1331\n", val2);
+           ret = 1;
+         }
+       offset = inet6_opt_get_val (db, offset, &val4, sizeof (val4));
+       if (offset != len || val4 != 0x01020304)
+         {
+           printf ("OPT_Y's val4 %x != 0x01020304\n", val4);
+           ret = 1;
+         }
+       break;
+      case OPT_Z:
+       if (seq++ != 2)
+         {
+           puts ("OPT_Z is not third");
+           ret = 1;
+         }
+       if (len != 7)
+         {
+           printf ("OPT_Z's length %d != 7\n", len);
+           ret = 1;
+         }
+       offset = inet6_opt_get_val (db, 0, buf, 7);
+       if (offset != len || memcmp (buf, "abcdefg", 7) != 0)
+         {
+           buf[7] = '\0';
+           printf ("OPT_Z's buf \"%s\" != \"abcdefg\"\n", buf);
+           ret = 1;
+         }
+       break;
+      default:
+       printf ("Unknown option %d\n", type);
+       ret = 1;
+       break;
+      }
+  if (seq != 3)
+    {
+      puts ("Didn't see all of OPT_X, OPT_Y and OPT_Z");
+      ret = 1;
+    }
+  return ret;
+}
+
+int
+main (void)
+{
+  void *eb;
+  socklen_t el;
+  eb = encode_inet6_opt (&el);
+  if (eb == NULL)
+    return 1;
+  if (decode_inet6_opt (eb, el))
+    return 1;
+  return 0;
+}
index 18287b201ac7d99a13769d0335ea25459006ed27..66235517694a024d8a3e2e9fcefbfc06e19379ec 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1992-2002,2003,2005,2006 Free Software Foundation, Inc.
+# Copyright (C) 1992-2002,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
@@ -66,7 +66,7 @@ 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
+                  tst-mknodat tst-mkfifoat tst-ttyname_r bug-ftw5
 
 distribute     := ftwtest-sh
 
@@ -90,6 +90,19 @@ CFLAGS-posix_fallocate64.c = -fexceptions
 CFLAGS-test-stat.c = -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE
 CFLAGS-test-lfs.c = -D_LARGEFILE64_SOURCE
 
+ifeq (yes,$(have-protected))
+CFLAGS-stat.c = -DHAVE_DOT_HIDDEN
+CFLAGS-fstat.c = -DHAVE_DOT_HIDDEN
+CFLAGS-lstat.c = -DHAVE_DOT_HIDDEN
+CFLAGS-mknod.c = -DHAVE_DOT_HIDDEN
+CFLAGS-stat64.c = -DHAVE_DOT_HIDDEN
+CFLAGS-fstat64.c = -DHAVE_DOT_HIDDEN
+CFLAGS-lstat64.c = -DHAVE_DOT_HIDDEN
+CFLAGS-fstatat.c = -DHAVE_DOT_HIDDEN
+CFLAGS-fstatat64.c = -DHAVE_DOT_HIDDEN
+CFLAGS-mknodat.c = -DHAVE_DOT_HIDDEN
+endif
+
 test-stat2-ARGS = Makefile . $(objpfx)test-stat2
 
 tst-statvfs-ARGS = $(objpfx)tst-statvfs tst-statvfs.c /tmp
diff --git a/io/bug-ftw5.c b/io/bug-ftw5.c
new file mode 100644 (file)
index 0000000..c1cd81d
--- /dev/null
@@ -0,0 +1,25 @@
+#include <errno.h>
+#include <ftw.h>
+#include <stdio.h>
+
+static int
+fn (const char *file, const struct stat *sb, int flag, struct FTW *s)
+{
+  puts (file);
+  return FTW_STOP;
+}
+
+static int
+do_test (void)
+{
+  if (nftw ("/", fn, 0, FTW_CHDIR | FTW_ACTIONRETVAL) < 0)
+    {
+      printf ("nftw / FTW_CHDIR: %m\n");
+      return 1;
+    }
+
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
index e2f9abd384b177e652b9d45b8d64ea27c7e11bef..0f95c1a6e23c2c1362ba00534e39c4a715baa940 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 2001, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 #undef fstat
 #undef __fstat
 int
-attribute_hidden
 __fstat (int fd, struct stat *buf)
 {
   return __fxstat (_STAT_VER, fd, buf);
 }
 
-weak_hidden_alias (__fstat, fstat)
+weak_alias (__fstat, fstat)
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tfstat");
+asm (".hidden\t__fstat");
+#endif
index fe655444b2c27c5bfb210f6e4bf69bf0b7f307f3..79bd967d8fc855df267c9c15ad73e2c3aed23a39 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 2001, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
 #undef fstat64
 int
-attribute_hidden
 fstat64 (int fd, struct stat64 *buf)
 {
   return __fxstat64 (_STAT_VER, fd, buf);
 }
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tfstat64");
+#endif
index abf083c72e1d73723c6779eb049b6413c54ecb8f..1ac80597a0ebc63204f50bfe677e6c35d6870007 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
 #undef fstatat
 int
-attribute_hidden
 fstatat (int fd, const char *file, struct stat *buf, int flag)
 {
   return __fxstatat (_STAT_VER, fd, file, buf, flag);
 }
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tfstatat");
+#endif
index 6fdf709af512b3926a14693aa49f25e8e100730c..a14b42d42e4742f2daf8ab2f9f76109cf1133b2f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
 #undef fstatat64
 int
-attribute_hidden
 fstatat64 (int fd, const char *file, struct stat64 *buf, int flag)
 {
   return __fxstatat64 (_STAT_VER, fd, file, buf, flag);
 }
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tfstatat64");
+#endif
index 413871744eac8667ab1fe5bcb3a3c6bac3c98434..5495bc7ecc4f300f3fb84f9d12f510dc2991050b 100644 (file)
--- a/io/ftw.c
+++ b/io/ftw.c
@@ -1,5 +1,5 @@
 /* File tree walker functions.
-   Copyright (C) 1996-2003, 2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1996-2003, 2004, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -348,8 +348,17 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp)
        }
       else
        {
-         const char *name = ((data->flags & FTW_CHDIR)
-                             ? data->dirbuf + data->ftw.base: data->dirbuf);
+         const char *name;
+
+         if (data->flags & FTW_CHDIR)
+           {
+             name = data->dirbuf + data->ftw.base;
+             if (name[0] == '\0')
+               name = ".";
+           }
+         else
+           name = data->dirbuf;
+
          dirp->stream = __opendir (name);
        }
 
@@ -721,9 +730,16 @@ ftw_startup (const char *dir, int is_nftw, void *func, int descriptors,
   /* Get stat info for start directory.  */
   if (result == 0)
     {
-      const char *name = ((data.flags & FTW_CHDIR)
-                         ? data.dirbuf + data.ftw.base
-                         : data.dirbuf);
+      const char *name;
+
+      if (data.flags & FTW_CHDIR)
+       {
+         name = data.dirbuf + data.ftw.base;
+         if (name[0] == '\0')
+           name = ".";
+       }
+      else
+       name = data.dirbuf;
 
       if (((flags & FTW_PHYS)
           ? LXSTAT (_STAT_VER, name, &st)
index 620e47877aa4b6c390fbe82b91efdad26041792c..c4d7abe2c28832f33b7504727018f946d32e2f2a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 2001, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 #undef lstat
 #undef __lstat
 int
-attribute_hidden
 __lstat (const char *file, struct stat *buf)
 {
   return __lxstat (_STAT_VER, file, buf);
 }
 
-weak_hidden_alias (__lstat, lstat)
+weak_alias (__lstat, lstat)
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tlstat");
+asm (".hidden\t__lstat");
+#endif
index 3e4ba2d9727a58ad22d96e45be27696f3a1b3023..8a994e4867cf9b44f6ad8adfdb2110ee5cb6688c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 2001, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
 #undef lstat64
 int
-attribute_hidden
 lstat64 (const char *file, struct stat64 *buf)
 {
   return __lxstat64 (_STAT_VER, file, buf);
 }
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tlstat64");
+#endif
index cc5fd26105ab1ba17baef6ae9e9b2bdf4fd92f6c..7d43593a25692cf91a73d11d23fb4636d97ef656 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 2001, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    all callers.  */
 
 int
-attribute_hidden
 __mknod (const char *path, mode_t mode, dev_t dev)
 {
   return __xmknod (_MKNOD_VER, path, mode, &dev);
 }
 
-weak_hidden_alias (__mknod, mknod)
+weak_alias (__mknod, mknod)
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tmknod");
+asm (".hidden\t__mknod");
+#endif
index b02ba695f961ee811666738c427c551d69fe4638..ac515b5b4838c5db270361d6f3578f8b9555a7cd 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 2001, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 2001, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    all callers.  */
 
 int
-attribute_hidden
 mknodat (int fd, const char *path, mode_t mode, dev_t dev)
 {
   return __xmknodat (_MKNOD_VER, fd, path, mode, &dev);
 }
+
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tmknodat");
+#endif
index 6f1c28fc567210b56194766c83a786bc43959080..6af604957e15622876b80242600b4d5d9f8f85d1 100644 (file)
--- a/io/stat.c
+++ b/io/stat.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 2001, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
 #undef stat
 int
-attribute_hidden
 __stat (const char *file, struct stat *buf)
 {
   return __xstat (_STAT_VER, file, buf);
 }
 
-weak_hidden_alias (__stat, stat)
+weak_alias (__stat, stat)
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tstat");
+asm (".hidden\t__stat");
+#endif
index 14e036a700c33a2cf9397b4a50f3b3fd7c422474..cadf1e1f1da221479661476ec1b19d20285639e9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 2001, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
 #undef stat64
 int
-attribute_hidden
 stat64 (const char *file, struct stat64 *buf)
 {
   return __xstat64 (_STAT_VER, file, buf);
 }
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tstat64");
+#endif
diff --git a/libio/Banner b/libio/Banner
new file mode 100644 (file)
index 0000000..8ec3141
--- /dev/null
@@ -0,0 +1 @@
+GNU libio by Per Bothner
index 9e951ad8e4a840b7af6958ccd0a8babf80ed0eee..2d44fad1f5a3f454a4b95c562fde5bb2ac018954 100644 (file)
@@ -1,5 +1,5 @@
 /* Optimizing macros and inline functions for stdio functions.
-   Copyright (C) 1998, 2000, 2001, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1998, 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
@@ -44,6 +44,16 @@ getchar (void)
 }
 
 
+# ifdef __USE_MISC
+/* Faster version when locking is not necessary.  */
+__STDIO_INLINE int
+fgetc_unlocked (FILE *__fp)
+{
+  return _IO_getc_unlocked (__fp);
+}
+# endif /* misc */
+
+
 # if defined __USE_POSIX || defined __USE_MISC
 /* This is defined in POSIX.1:1996.  */
 __STDIO_INLINE int
index dbd7a7a8f2e2bbacce8a5bfa1ffe0adf2ee321f5..886b3729c3adf47ace029b08eb501b620765cedf 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1993, 1995, 1997-2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Per Bothner <bothner@cygnus.com>.
 
@@ -472,7 +473,7 @@ _IO_file_setbuf_mmap (fp, p, len)
   return result;
 }
 
-static _IO_size_t new_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
+static _IO_size_t new_do_write (_IO_FILE *, const char *, _IO_size_t);
 
 /* Write TO_DO bytes from DATA to FP.
    Then mark FP as having empty buffers. */
@@ -1468,8 +1469,7 @@ _IO_file_xsgetn (fp, data, n)
 }
 INTDEF(_IO_file_xsgetn)
 
-static _IO_size_t _IO_file_xsgetn_mmap (_IO_FILE *, void *, _IO_size_t)
-     __THROW;
+static _IO_size_t _IO_file_xsgetn_mmap (_IO_FILE *, void *, _IO_size_t);
 static _IO_size_t
 _IO_file_xsgetn_mmap (fp, data, n)
      _IO_FILE *fp;
@@ -1528,8 +1528,7 @@ _IO_file_xsgetn_mmap (fp, data, n)
   return s - (char *) data;
 }
 
-static _IO_size_t _IO_file_xsgetn_maybe_mmap (_IO_FILE *, void *, _IO_size_t)
-     __THROW;
+static _IO_size_t _IO_file_xsgetn_maybe_mmap (_IO_FILE *, void *, _IO_size_t);
 static _IO_size_t
 _IO_file_xsgetn_maybe_mmap (fp, data, n)
      _IO_FILE *fp;
index 428e03554044ec5b5bf0c6f48c31b761414eeae6..9df08614eec52acbba99156095c655fce47ba40c 100644 (file)
@@ -410,12 +410,12 @@ extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
 extern "C" {
 #endif
 
-extern int __underflow (_IO_FILE *) __THROW;
-extern int __uflow (_IO_FILE *) __THROW;
-extern int __overflow (_IO_FILE *, int) __THROW;
-extern _IO_wint_t __wunderflow (_IO_FILE *) __THROW;
-extern _IO_wint_t __wuflow (_IO_FILE *) __THROW;
-extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t) __THROW;
+extern int __underflow (_IO_FILE *);
+extern int __uflow (_IO_FILE *);
+extern int __overflow (_IO_FILE *, int);
+extern _IO_wint_t __wunderflow (_IO_FILE *);
+extern _IO_wint_t __wuflow (_IO_FILE *);
+extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t);
 
 #if  __GNUC__ >= 3
 # define _IO_BE(expr, res) __builtin_expect ((expr), res)
@@ -448,12 +448,12 @@ extern _IO_wint_t __woverflow (_IO_FILE *, _IO_wint_t) __THROW;
 #define _IO_feof_unlocked(__fp) (((__fp)->_flags & _IO_EOF_SEEN) != 0)
 #define _IO_ferror_unlocked(__fp) (((__fp)->_flags & _IO_ERR_SEEN) != 0)
 
-extern int _IO_getc (_IO_FILE *__fp) __THROW;
-extern int _IO_putc (int __c, _IO_FILE *__fp) __THROW;
+extern int _IO_getc (_IO_FILE *__fp);
+extern int _IO_putc (int __c, _IO_FILE *__fp);
 extern int _IO_feof (_IO_FILE *__fp) __THROW;
 extern int _IO_ferror (_IO_FILE *__fp) __THROW;
 
-extern int _IO_peekc_locked (_IO_FILE *__fp) __THROW;
+extern int _IO_peekc_locked (_IO_FILE *__fp);
 
 /* This one is for Emacs. */
 #define _IO_PENDING_OUTPUT_COUNT(_fp)  \
@@ -482,17 +482,17 @@ extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
                        _IO_va_list, int *__restrict);
 extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
                         _IO_va_list);
-extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t) __THROW;
-extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t) __THROW;
+extern _IO_ssize_t _IO_padn (_IO_FILE *, int, _IO_ssize_t);
+extern _IO_size_t _IO_sgetn (_IO_FILE *, void *, _IO_size_t);
 
-extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int) __THROW;
-extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int) __THROW;
+extern _IO_off64_t _IO_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+extern _IO_off64_t _IO_seekpos (_IO_FILE *, _IO_off64_t, int);
 
 extern void _IO_free_backup_area (_IO_FILE *) __THROW;
 
 #if defined _LIBC || defined _GLIBCPP_USE_WCHAR_T
-extern _IO_wint_t _IO_getwc (_IO_FILE *__fp) __THROW;
-extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp) __THROW;
+extern _IO_wint_t _IO_getwc (_IO_FILE *__fp);
+extern _IO_wint_t _IO_putwc (wchar_t __wc, _IO_FILE *__fp);
 extern int _IO_fwide (_IO_FILE *__fp, int __mode) __THROW;
 # if __GNUC__ >= 2
 /* While compiling glibc we have to handle compatibility with very old
@@ -531,7 +531,7 @@ extern int _IO_vfwscanf (_IO_FILE * __restrict, const wchar_t * __restrict,
                         _IO_va_list, int *__restrict);
 extern int _IO_vfwprintf (_IO_FILE *__restrict, const wchar_t *__restrict,
                          _IO_va_list);
-extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t) __THROW;
+extern _IO_ssize_t _IO_wpadn (_IO_FILE *, wint_t, _IO_ssize_t);
 extern void _IO_free_wbackup_area (_IO_FILE *) __THROW;
 #endif
 
index a2cd4c2202d9d48f0a8419bb6cde673c38157177..a574b40f777bf495c618d078b0b0944792b5d1ac 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003,2004,2005,2006
+/* Copyright (C) 1993, 1997-2003,2004,2005,2006,2007
        Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -380,7 +380,7 @@ typedef struct _IO_FILE *_IO_ITER;
 
 extern void _IO_switch_to_main_get_area (_IO_FILE *) __THROW;
 extern void _IO_switch_to_backup_area (_IO_FILE *) __THROW;
-extern int _IO_switch_to_get_mode (_IO_FILE *) __THROW;
+extern int _IO_switch_to_get_mode (_IO_FILE *);
 extern void _IO_init (_IO_FILE *, int) __THROW;
 extern int _IO_sputbackc (_IO_FILE *, int) __THROW;
 extern int _IO_sungetc (_IO_FILE *) __THROW;
@@ -394,7 +394,7 @@ extern unsigned _IO_adjust_column (unsigned, const char *, int) __THROW;
 
 extern void _IO_switch_to_main_wget_area (_IO_FILE *) __THROW;
 extern void _IO_switch_to_wbackup_area (_IO_FILE *) __THROW;
-extern int _IO_switch_to_wget_mode (_IO_FILE *) __THROW;
+extern int _IO_switch_to_wget_mode (_IO_FILE *);
 extern void _IO_wsetb (_IO_FILE *, wchar_t *, wchar_t *, int) __THROW;
 extern wint_t _IO_sputbackwc (_IO_FILE *, wint_t) __THROW;
 extern wint_t _IO_sungetwc (_IO_FILE *) __THROW;
@@ -404,8 +404,8 @@ extern unsigned _IO_adjust_wcolumn (unsigned, const wchar_t *, int) __THROW;
 
 /* Marker-related function. */
 
-extern void _IO_init_marker (struct _IO_marker *, _IO_FILE *) __THROW;
-extern void _IO_init_wmarker (struct _IO_marker *, _IO_FILE *) __THROW;
+extern void _IO_init_marker (struct _IO_marker *, _IO_FILE *);
+extern void _IO_init_wmarker (struct _IO_marker *, _IO_FILE *);
 extern void _IO_remove_marker (struct _IO_marker *) __THROW;
 extern int _IO_marker_difference (struct _IO_marker *, struct _IO_marker *)
      __THROW;
@@ -434,22 +434,22 @@ libc_hidden_proto (_IO_list_resetlock)
 /* Default jumptable functions. */
 
 extern int _IO_default_underflow (_IO_FILE *) __THROW;
-extern int _IO_default_uflow (_IO_FILE *) __THROW;
-extern wint_t _IO_wdefault_uflow (_IO_FILE *) __THROW;
+extern int _IO_default_uflow (_IO_FILE *);
+extern wint_t _IO_wdefault_uflow (_IO_FILE *);
 extern int _IO_default_doallocate (_IO_FILE *) __THROW;
 extern int _IO_wdefault_doallocate (_IO_FILE *) __THROW;
 extern void _IO_default_finish (_IO_FILE *, int) __THROW;
 extern void _IO_wdefault_finish (_IO_FILE *, int) __THROW;
 extern int _IO_default_pbackfail (_IO_FILE *, int) __THROW;
 extern wint_t _IO_wdefault_pbackfail (_IO_FILE *, wint_t) __THROW;
-extern _IO_FILE* _IO_default_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
+extern _IO_FILE* _IO_default_setbuf (_IO_FILE *, char *, _IO_ssize_t);
 extern _IO_size_t _IO_default_xsputn (_IO_FILE *, const void *, _IO_size_t);
 extern _IO_size_t _IO_wdefault_xsputn (_IO_FILE *, const void *, _IO_size_t);
 extern _IO_size_t _IO_default_xsgetn (_IO_FILE *, void *, _IO_size_t);
 extern _IO_size_t _IO_wdefault_xsgetn (_IO_FILE *, void *, _IO_size_t);
 extern _IO_off64_t _IO_default_seekoff (_IO_FILE *, _IO_off64_t, int, int)
      __THROW;
-extern _IO_off64_t _IO_default_seekpos (_IO_FILE *, _IO_off64_t, int) __THROW;
+extern _IO_off64_t _IO_default_seekpos (_IO_FILE *, _IO_off64_t, int);
 extern _IO_ssize_t _IO_default_write (_IO_FILE *, const void *, _IO_ssize_t);
 extern _IO_ssize_t _IO_default_read (_IO_FILE *, void *, _IO_ssize_t);
 extern int _IO_default_stat (_IO_FILE *, void *) __THROW;
@@ -473,22 +473,22 @@ extern const struct _IO_jump_t _IO_old_proc_jumps attribute_hidden;
 extern const struct _IO_jump_t _IO_str_jumps attribute_hidden;
 extern const struct _IO_jump_t _IO_wstr_jumps attribute_hidden;
 extern const struct _IO_codecvt __libio_codecvt attribute_hidden;
-extern int _IO_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
-extern int _IO_new_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
-extern int _IO_old_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
-extern int _IO_wdo_write (_IO_FILE *, const wchar_t *, _IO_size_t) __THROW;
-extern int _IO_flush_all_lockp (int) __THROW;
-extern int _IO_flush_all (void) __THROW;
-extern int _IO_cleanup (void) __THROW;
-extern void _IO_flush_all_linebuffered (void) __THROW;
-extern int _IO_new_fgetpos (_IO_FILE *, _IO_fpos_t *) __THROW;
-extern int _IO_old_fgetpos (_IO_FILE *, _IO_fpos_t *) __THROW;
-extern int _IO_new_fsetpos (_IO_FILE *, const _IO_fpos_t *) __THROW;
-extern int _IO_old_fsetpos (_IO_FILE *, const _IO_fpos_t *) __THROW;
-extern int _IO_new_fgetpos64 (_IO_FILE *, _IO_fpos64_t *) __THROW;
-extern int _IO_old_fgetpos64 (_IO_FILE *, _IO_fpos64_t *) __THROW;
-extern int _IO_new_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *) __THROW;
-extern int _IO_old_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *) __THROW;
+extern int _IO_do_write (_IO_FILE *, const char *, _IO_size_t);
+extern int _IO_new_do_write (_IO_FILE *, const char *, _IO_size_t);
+extern int _IO_old_do_write (_IO_FILE *, const char *, _IO_size_t);
+extern int _IO_wdo_write (_IO_FILE *, const wchar_t *, _IO_size_t);
+extern int _IO_flush_all_lockp (int);
+extern int _IO_flush_all (void);
+extern int _IO_cleanup (void);
+extern void _IO_flush_all_linebuffered (void);
+extern int _IO_new_fgetpos (_IO_FILE *, _IO_fpos_t *);
+extern int _IO_old_fgetpos (_IO_FILE *, _IO_fpos_t *);
+extern int _IO_new_fsetpos (_IO_FILE *, const _IO_fpos_t *);
+extern int _IO_old_fsetpos (_IO_FILE *, const _IO_fpos_t *);
+extern int _IO_new_fgetpos64 (_IO_FILE *, _IO_fpos64_t *);
+extern int _IO_old_fgetpos64 (_IO_FILE *, _IO_fpos64_t *);
+extern int _IO_new_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *);
+extern int _IO_old_fsetpos64 (_IO_FILE *, const _IO_fpos64_t *);
 extern void _IO_old_init (_IO_FILE *fp, int flags) __THROW;
 
 
@@ -534,95 +534,79 @@ extern void _IO_old_init (_IO_FILE *fp, int flags) __THROW;
 /* Jumptable functions for files. */
 
 extern int _IO_file_doallocate (_IO_FILE *) __THROW;
-extern _IO_FILE* _IO_file_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
-extern _IO_off64_t _IO_file_seekoff (_IO_FILE *, _IO_off64_t, int, int)
-     __THROW;
+extern _IO_FILE* _IO_file_setbuf (_IO_FILE *, char *, _IO_ssize_t);
+extern _IO_off64_t _IO_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
 extern _IO_off64_t _IO_file_seekoff_mmap (_IO_FILE *, _IO_off64_t, int, int)
      __THROW;
-extern _IO_size_t _IO_file_xsputn (_IO_FILE *, const void *, _IO_size_t)
-     __THROW;
-extern _IO_size_t _IO_file_xsgetn (_IO_FILE *, void *, _IO_size_t) __THROW;
+extern _IO_size_t _IO_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
+extern _IO_size_t _IO_file_xsgetn (_IO_FILE *, void *, _IO_size_t);
 extern int _IO_file_stat (_IO_FILE *, void *) __THROW;
 extern int _IO_file_close (_IO_FILE *) __THROW;
 extern int _IO_file_close_mmap (_IO_FILE *) __THROW;
-extern int _IO_file_underflow (_IO_FILE *) __THROW;
-extern int _IO_file_underflow_mmap (_IO_FILE *) __THROW;
-extern int _IO_file_underflow_maybe_mmap (_IO_FILE *) __THROW;
-extern int _IO_file_overflow (_IO_FILE *, int) __THROW;
+extern int _IO_file_underflow (_IO_FILE *);
+extern int _IO_file_underflow_mmap (_IO_FILE *);
+extern int _IO_file_underflow_maybe_mmap (_IO_FILE *);
+extern int _IO_file_overflow (_IO_FILE *, int);
 #define _IO_file_is_open(__fp) ((__fp)->_fileno != -1)
 extern void _IO_file_init (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_file_attach (_IO_FILE *, int) __THROW;
-extern _IO_FILE* _IO_file_open (_IO_FILE *, const char *, int, int, int, int)
-     __THROW;
+extern _IO_FILE* _IO_file_attach (_IO_FILE *, int);
+extern _IO_FILE* _IO_file_open (_IO_FILE *, const char *, int, int, int, int);
 libc_hidden_proto (_IO_file_open)
-extern _IO_FILE* _IO_file_fopen (_IO_FILE *, const char *, const char *, int)
-     __THROW;
-extern _IO_ssize_t _IO_file_write (_IO_FILE *, const void *, _IO_ssize_t)
-     __THROW;
-extern _IO_ssize_t _IO_file_read (_IO_FILE *, void *, _IO_ssize_t) __THROW;
-extern int _IO_file_sync (_IO_FILE *) __THROW;
-extern int _IO_file_close_it (_IO_FILE *) __THROW;
+extern _IO_FILE* _IO_file_fopen (_IO_FILE *, const char *, const char *, int);
+extern _IO_ssize_t _IO_file_write (_IO_FILE *, const void *, _IO_ssize_t);
+extern _IO_ssize_t _IO_file_read (_IO_FILE *, void *, _IO_ssize_t);
+extern int _IO_file_sync (_IO_FILE *);
+extern int _IO_file_close_it (_IO_FILE *);
 extern _IO_off64_t _IO_file_seek (_IO_FILE *, _IO_off64_t, int) __THROW;
-extern void _IO_file_finish (_IO_FILE *, int) __THROW;
+extern void _IO_file_finish (_IO_FILE *, int);
 
-extern _IO_FILE* _IO_new_file_attach (_IO_FILE *, int) __THROW;
-extern int _IO_new_file_close_it (_IO_FILE *) __THROW;
-extern void _IO_new_file_finish (_IO_FILE *, int) __THROW;
+extern _IO_FILE* _IO_new_file_attach (_IO_FILE *, int);
+extern int _IO_new_file_close_it (_IO_FILE *);
+extern void _IO_new_file_finish (_IO_FILE *, int);
 extern _IO_FILE* _IO_new_file_fopen (_IO_FILE *, const char *, const char *,
-                                    int) __THROW;
+                                    int);
 extern void _IO_no_init (_IO_FILE *, int, int, struct _IO_wide_data *,
                         const struct _IO_jump_t *) __THROW;
 extern void _IO_new_file_init (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_new_file_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
-extern _IO_FILE* _IO_file_setbuf_mmap (_IO_FILE *, char *, _IO_ssize_t)
-     __THROW;
-extern int _IO_new_file_sync (_IO_FILE *) __THROW;
-extern int _IO_new_file_underflow (_IO_FILE *) __THROW;
-extern int _IO_new_file_overflow (_IO_FILE *, int) __THROW;
-extern _IO_off64_t _IO_new_file_seekoff (_IO_FILE *, _IO_off64_t, int, int)
-     __THROW;
-extern _IO_ssize_t _IO_new_file_write (_IO_FILE *, const void *, _IO_ssize_t)
-     __THROW;
-extern _IO_size_t _IO_new_file_xsputn (_IO_FILE *, const void *, _IO_size_t)
-     __THROW;
-
-extern _IO_FILE* _IO_old_file_setbuf (_IO_FILE *, char *, _IO_ssize_t) __THROW;
-extern _IO_off64_t _IO_old_file_seekoff (_IO_FILE *, _IO_off64_t, int, int)
-     __THROW;
-extern _IO_size_t _IO_old_file_xsputn (_IO_FILE *, const void *, _IO_size_t)
-     __THROW;
-extern int _IO_old_file_underflow (_IO_FILE *) __THROW;
-extern int _IO_old_file_overflow (_IO_FILE *, int) __THROW;
+extern _IO_FILE* _IO_new_file_setbuf (_IO_FILE *, char *, _IO_ssize_t);
+extern _IO_FILE* _IO_file_setbuf_mmap (_IO_FILE *, char *, _IO_ssize_t);
+extern int _IO_new_file_sync (_IO_FILE *);
+extern int _IO_new_file_underflow (_IO_FILE *);
+extern int _IO_new_file_overflow (_IO_FILE *, int);
+extern _IO_off64_t _IO_new_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+extern _IO_ssize_t _IO_new_file_write (_IO_FILE *, const void *, _IO_ssize_t);
+extern _IO_size_t _IO_new_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
+
+extern _IO_FILE* _IO_old_file_setbuf (_IO_FILE *, char *, _IO_ssize_t);
+extern _IO_off64_t _IO_old_file_seekoff (_IO_FILE *, _IO_off64_t, int, int);
+extern _IO_size_t _IO_old_file_xsputn (_IO_FILE *, const void *, _IO_size_t);
+extern int _IO_old_file_underflow (_IO_FILE *);
+extern int _IO_old_file_overflow (_IO_FILE *, int);
 extern void _IO_old_file_init (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_old_file_attach (_IO_FILE *, int) __THROW;
-extern _IO_FILE* _IO_old_file_fopen (_IO_FILE *, const char *, const char *)
-     __THROW;
-extern _IO_ssize_t _IO_old_file_write (_IO_FILE *, const void *, _IO_ssize_t)
-     __THROW;
-extern int _IO_old_file_sync (_IO_FILE *) __THROW;
-extern int _IO_old_file_close_it (_IO_FILE *) __THROW;
-extern void _IO_old_file_finish (_IO_FILE *, int) __THROW;
+extern _IO_FILE* _IO_old_file_attach (_IO_FILE *, int);
+extern _IO_FILE* _IO_old_file_fopen (_IO_FILE *, const char *, const char *);
+extern _IO_ssize_t _IO_old_file_write (_IO_FILE *, const void *, _IO_ssize_t);
+extern int _IO_old_file_sync (_IO_FILE *);
+extern int _IO_old_file_close_it (_IO_FILE *);
+extern void _IO_old_file_finish (_IO_FILE *, int);
 
 extern int _IO_wfile_doallocate (_IO_FILE *) __THROW;
-extern _IO_size_t _IO_wfile_xsputn (_IO_FILE *, const void *, _IO_size_t)
-     __THROW;
-extern _IO_FILE* _IO_wfile_setbuf (_IO_FILE *, wchar_t *, _IO_ssize_t) __THROW;
-extern wint_t _IO_wfile_sync (_IO_FILE *) __THROW;
-extern wint_t _IO_wfile_underflow (_IO_FILE *) __THROW;
-extern wint_t _IO_wfile_overflow (_IO_FILE *, wint_t) __THROW;
-extern _IO_off64_t _IO_wfile_seekoff (_IO_FILE *, _IO_off64_t, int, int)
-     __THROW;
+extern _IO_size_t _IO_wfile_xsputn (_IO_FILE *, const void *, _IO_size_t);
+extern _IO_FILE* _IO_wfile_setbuf (_IO_FILE *, wchar_t *, _IO_ssize_t);
+extern wint_t _IO_wfile_sync (_IO_FILE *);
+extern wint_t _IO_wfile_underflow (_IO_FILE *);
+extern wint_t _IO_wfile_overflow (_IO_FILE *, wint_t);
+extern _IO_off64_t _IO_wfile_seekoff (_IO_FILE *, _IO_off64_t, int, int);
 
 /* Jumptable functions for proc_files. */
 extern _IO_FILE* _IO_proc_open (_IO_FILE *, const char *, const char *)
      __THROW;
 extern _IO_FILE* _IO_new_proc_open (_IO_FILE *, const char *, const char *)
      __THROW;
-extern _IO_FILE* _IO_old_proc_open (_IO_FILE *, const char *, const char *)
-     __THROW;
+extern _IO_FILE* _IO_old_proc_open (_IO_FILE *, const char *, const char *);
 extern int _IO_proc_close (_IO_FILE *) __THROW;
 extern int _IO_new_proc_close (_IO_FILE *) __THROW;
-extern int _IO_old_proc_close (_IO_FILE *) __THROW;
+extern int _IO_old_proc_close (_IO_FILE *);
 
 /* Jumptable functions for strfiles. */
 extern int _IO_str_underflow (_IO_FILE *) __THROW;
@@ -660,73 +644,62 @@ extern int _IO_vsnprintf (char *string, _IO_size_t maxlen,
 extern _IO_size_t _IO_getline (_IO_FILE *,char *, _IO_size_t, int, int);
 extern _IO_size_t _IO_getline_info (_IO_FILE *,char *, _IO_size_t,
                                    int, int, int *);
-extern _IO_ssize_t _IO_getdelim (char **, _IO_size_t *, int, _IO_FILE *)
-     __THROW;
+extern _IO_ssize_t _IO_getdelim (char **, _IO_size_t *, int, _IO_FILE *);
 extern _IO_size_t _IO_getwline (_IO_FILE *,wchar_t *, _IO_size_t, wint_t, int);
 extern _IO_size_t _IO_getwline_info (_IO_FILE *,wchar_t *, _IO_size_t,
                                     wint_t, int, wint_t *);
-extern double _IO_strtod (const char *, char **) __THROW;
-extern char *_IO_dtoa (double __d, int __mode, int __ndigits,
-                      int *__decpt, int *__sign, char **__rve) __THROW;
-extern int _IO_outfloat (double __value, _IO_FILE *__sb, int __type,
-                        int __width, int __precision, int __flags,
-                        int __sign_mode, int __fill) __THROW;
 
 extern struct _IO_FILE_plus *_IO_list_all;
 extern void (*_IO_cleanup_registration_needed) (void);
 
 /* Prototype for functions with alternative entry point.  */
-extern int _IO_flush_all_internal (void) __THROW;
-extern unsigned _IO_adjust_column_internal (unsigned, const char *, int)
-     __THROW;
+extern int _IO_flush_all_internal (void);
+extern unsigned _IO_adjust_column_internal (unsigned, const char *, int);
 
-extern int _IO_default_uflow_internal (_IO_FILE *) __THROW;
+extern int _IO_default_uflow_internal (_IO_FILE *);
 extern void _IO_default_finish_internal (_IO_FILE *, int) __THROW;
 extern int _IO_default_pbackfail_internal (_IO_FILE *, int) __THROW;
 extern _IO_size_t _IO_default_xsputn_internal (_IO_FILE *, const void *,
-                                              _IO_size_t) __THROW;
-extern _IO_size_t _IO_default_xsgetn_internal (_IO_FILE *, void *, _IO_size_t)
-     __THROW;
+                                              _IO_size_t);
+extern _IO_size_t _IO_default_xsgetn_internal (_IO_FILE *, void *, _IO_size_t);
 extern int _IO_default_doallocate_internal (_IO_FILE *) __THROW;
 extern void _IO_wdefault_finish_internal (_IO_FILE *, int) __THROW;
 extern wint_t _IO_wdefault_pbackfail_internal (_IO_FILE *, wint_t) __THROW;
 extern _IO_size_t _IO_wdefault_xsputn_internal (_IO_FILE *, const void *,
-                                               _IO_size_t) __THROW;
+                                               _IO_size_t);
 extern _IO_size_t _IO_wdefault_xsgetn_internal (_IO_FILE *, void *,
-                                               _IO_size_t) __THROW;
+                                               _IO_size_t);
 extern int _IO_wdefault_doallocate_internal (_IO_FILE *) __THROW;
-extern wint_t _IO_wdefault_uflow_internal (_IO_FILE *) __THROW;
+extern wint_t _IO_wdefault_uflow_internal (_IO_FILE *);
 
 extern int _IO_file_doallocate_internal (_IO_FILE *) __THROW;
-extern _IO_FILE* _IO_file_setbuf_internal (_IO_FILE *, char *, _IO_ssize_t)
-     __THROW;
+extern _IO_FILE* _IO_file_setbuf_internal (_IO_FILE *, char *, _IO_ssize_t);
 extern _IO_off64_t _IO_file_seekoff_internal (_IO_FILE *, _IO_off64_t,
-                                             int, int) __THROW;
+                                             int, int);
 extern _IO_size_t _IO_file_xsputn_internal (_IO_FILE *, const void *,
-                                           _IO_size_t) __THROW;
-extern _IO_size_t _IO_file_xsgetn_internal (_IO_FILE *, void *, _IO_size_t)
-     __THROW;
+                                           _IO_size_t);
+extern _IO_size_t _IO_file_xsgetn_internal (_IO_FILE *, void *, _IO_size_t);
 extern int _IO_file_stat_internal (_IO_FILE *, void *) __THROW;
 extern int _IO_file_close_internal (_IO_FILE *) __THROW;
-extern int _IO_file_close_it_internal (_IO_FILE *) __THROW;
-extern int _IO_file_underflow_internal (_IO_FILE *) __THROW;
-extern int _IO_file_overflow_internal (_IO_FILE *, int) __THROW;
+extern int _IO_file_close_it_internal (_IO_FILE *);
+extern int _IO_file_underflow_internal (_IO_FILE *);
+extern int _IO_file_overflow_internal (_IO_FILE *, int);
 extern void _IO_file_init_internal (struct _IO_FILE_plus *) __THROW;
-extern _IO_FILE* _IO_file_attach_internal (_IO_FILE *, int) __THROW;
+extern _IO_FILE* _IO_file_attach_internal (_IO_FILE *, int);
 extern _IO_FILE* _IO_file_fopen_internal (_IO_FILE *, const char *,
-                                         const char *, int) __THROW;
+                                         const char *, int);
 extern _IO_ssize_t _IO_file_read_internal (_IO_FILE *, void *,
                                           _IO_ssize_t);
-extern int _IO_file_sync_internal (_IO_FILE *) __THROW;
+extern int _IO_file_sync_internal (_IO_FILE *);
 extern _IO_off64_t _IO_file_seek_internal (_IO_FILE *, _IO_off64_t, int)
      __THROW;
-extern void _IO_file_finish_internal (_IO_FILE *, int) __THROW;
+extern void _IO_file_finish_internal (_IO_FILE *, int);
 
 extern _IO_size_t _IO_wfile_xsputn_internal (_IO_FILE *, const void *,
-                                            _IO_size_t) __THROW;
+                                            _IO_size_t);
 extern _IO_off64_t _IO_wfile_seekoff_internal (_IO_FILE *, _IO_off64_t,
-                                              int, int) __THROW;
-extern wint_t _IO_wfile_sync_internal (_IO_FILE *) __THROW;
+                                              int, int);
+extern wint_t _IO_wfile_sync_internal (_IO_FILE *);
 
 extern int _IO_str_underflow_internal (_IO_FILE *) __THROW;
 extern int _IO_str_overflow_internal (_IO_FILE *, int) __THROW;
@@ -747,12 +720,12 @@ extern void _IO_wdoallocbuf_internal (_IO_FILE *) __THROW;
 
 extern _IO_size_t _IO_sgetn_internal (_IO_FILE *, void *, _IO_size_t);
 extern void _IO_flush_all_linebuffered_internal (void) __THROW;
-extern int _IO_switch_to_wget_mode_internal (_IO_FILE *) __THROW;
+extern int _IO_switch_to_wget_mode_internal (_IO_FILE *);
 extern void _IO_unsave_markers_internal (_IO_FILE *) __THROW;
 extern void _IO_switch_to_main_wget_area_internal (_IO_FILE *) __THROW;
 extern int _IO_wdo_write_internal (_IO_FILE *, const wchar_t *, _IO_size_t);
 extern int _IO_do_write_internal (_IO_FILE *, const char *, _IO_size_t);
-extern _IO_ssize_t _IO_padn_internal (_IO_FILE *, int, _IO_ssize_t) __THROW;
+extern _IO_ssize_t _IO_padn_internal (_IO_FILE *, int, _IO_ssize_t);
 extern _IO_size_t _IO_getline_info_internal (_IO_FILE *,char *, _IO_size_t,
                                             int, int, int *);
 extern _IO_size_t _IO_getline_internal (_IO_FILE *, char *, _IO_size_t, int,
@@ -762,7 +735,7 @@ extern void _IO_free_backup_area_internal (_IO_FILE *) __THROW;
 extern void _IO_switch_to_wbackup_area_internal (_IO_FILE *) __THROW;
 extern void _IO_setb_internal (_IO_FILE *, char *, char *, int) __THROW;
 extern wint_t _IO_sputbackwc_internal (_IO_FILE *, wint_t) __THROW;
-extern int _IO_switch_to_get_mode_internal (_IO_FILE *) __THROW;
+extern int _IO_switch_to_get_mode_internal (_IO_FILE *);
 extern int _IO_vfscanf_internal (_IO_FILE * __restrict,
                                 const char * __restrict,
                                 _IO_va_list, int *__restrict);
@@ -772,9 +745,9 @@ extern void _IO_doallocbuf_internal (_IO_FILE *) __THROW;
 extern void _IO_wsetb_internal (_IO_FILE *, wchar_t *, wchar_t *, int)
      __THROW;
 extern _IO_off64_t _IO_seekoff_unlocked (_IO_FILE *, _IO_off64_t, int, int)
-     attribute_hidden __THROW;
+     attribute_hidden;
 extern _IO_off64_t _IO_seekpos_unlocked (_IO_FILE *, _IO_off64_t, int)
-     attribute_hidden __THROW;
+     attribute_hidden;
 extern int _IO_putc_internal (int __c, _IO_FILE *__fp);
 extern void _IO_init_internal (_IO_FILE *, int) __THROW;
 extern void _IO_un_link_internal (struct _IO_FILE_plus *) __THROW;
@@ -866,12 +839,6 @@ extern void _IO_un_link_internal (struct _IO_FILE_plus *) __THROW;
 #ifndef OS_FSTAT
 # define OS_FSTAT fstat
 #endif
-struct stat;
-extern _IO_ssize_t _IO_read (int, void *, _IO_size_t);
-extern _IO_ssize_t _IO_write (int, const void *, _IO_size_t);
-extern _IO_off64_t _IO_lseek (int, _IO_off64_t, int) __THROW;
-extern int _IO_close (int);
-extern int _IO_fstat (int, struct stat *) __THROW;
 extern int _IO_vscanf (const char *, _IO_va_list) __THROW;
 
 /* _IO_pos_BAD is an _IO_off64_t value indicating error, unknown, or EOF. */
index a69c87e8b8ae008bc495a3016f25d5d9d053934a..3bd0aa175b9494a94ce9b849dffc4578a75e6c9c 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1993, 1995, 1997-2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1997-2004, 2005, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Per Bothner <bothner@cygnus.com>.
 
@@ -271,7 +272,7 @@ _IO_old_file_setbuf (fp, p, len)
     return fp;
 }
 
-static int old_do_write (_IO_FILE *, const char *, _IO_size_t) __THROW;
+static int old_do_write (_IO_FILE *, const char *, _IO_size_t);
 
 /* Write TO_DO bytes from DATA to FP.
    Then mark FP as having empty buffers. */
index b2baf65be3f82748e2c517722123f8ddce6aa2ea..8dc24ed98f5fcccf641402fca4a8167eb6802fbd 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (C) 1993,1994,1996,1997,2000,2002,2006
-   Free Software Foundation, Inc.
+/* Copyright (C) 1993,1994,1996,1997,2000,2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -41,9 +40,14 @@ _IO_FILE *stderr = (FILE *) &_IO_2_1_stderr_;
 #undef _IO_stderr
 #ifdef _LIBC
 # define AL(name) AL2 (name, _IO_##name)
-# define AL2(name, al) \
+# if defined HAVE_VISIBILITY_ATTRIBUTE
+#  define AL2(name, al) \
   extern __typeof (name) al __attribute__ ((alias (#name),                    \
                                             visibility ("hidden")))
+# else
+#  define AL2(name, al) \
+  extern __typeof (name) al __attribute__ ((alias (#name)))
+# endif
 AL(stdin);
 AL(stdout);
 AL(stderr);
index 3738e6d3b6227017c1f7b205d05f7b85e3ae3cc1..5e74305638397490afe71636c7308daa882e7899 100644 (file)
@@ -166,27 +166,27 @@ __BEGIN_NAMESPACE_STD
    This function is a possible cancellation points and therefore not
    marked with __THROW.  */
 #ifndef __USE_FILE_OFFSET64
-extern FILE *tmpfile (void) __wur;
+extern FILE *tmpfile (void);
 #else
 # ifdef __REDIRECT
-extern FILE *__REDIRECT (tmpfile, (void), tmpfile64) __wur;
+extern FILE *__REDIRECT (tmpfile, (void), tmpfile64);
 # else
 #  define tmpfile tmpfile64
 # endif
 #endif
 
 #ifdef __USE_LARGEFILE64
-extern FILE *tmpfile64 (void) __wur;
+extern FILE *tmpfile64 (void);
 #endif
 
 /* Generate a temporary filename.  */
-extern char *tmpnam (char *__s) __THROW __wur;
+extern char *tmpnam (char *__s) __THROW;
 __END_NAMESPACE_STD
 
 #ifdef __USE_MISC
 /* This is the reentrant variant of `tmpnam'.  The only difference is
    that it does not allow S to be NULL.  */
-extern char *tmpnam_r (char *__s) __THROW __wur;
+extern char *tmpnam_r (char *__s) __THROW;
 #endif
 
 
@@ -199,7 +199,7 @@ extern char *tmpnam_r (char *__s) __THROW __wur;
    P_tmpdir is tried and finally "/tmp".  The storage for the filename
    is allocated by `malloc'.  */
 extern char *tempnam (__const char *__dir, __const char *__pfx)
-     __THROW __attribute_malloc__ __wur;
+     __THROW __attribute_malloc__;
 #endif
 
 
@@ -244,23 +244,21 @@ __BEGIN_NAMESPACE_STD
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
 extern FILE *fopen (__const char *__restrict __filename,
-                   __const char *__restrict __modes) __wur;
+                   __const char *__restrict __modes);
 /* Open a file, replacing an existing stream with it.
 
    This function is a possible cancellation point and therefore not
    marked with __THROW.  */
 extern FILE *freopen (__const char *__restrict __filename,
                      __const char *__restrict __modes,
-                     FILE *__restrict __stream) __wur;
+                     FILE *__restrict __stream);
 #else
 # ifdef __REDIRECT
 extern FILE *__REDIRECT (fopen, (__const char *__restrict __filename,
-                                __const char *__restrict __modes), fopen64)
-  __wur;
+                                __const char *__restrict __modes), fopen64);
 extern FILE *__REDIRECT (freopen, (__const char *__restrict __filename,
                                   __const char *__restrict __modes,
-                                  FILE *__restrict __stream), freopen64)
-  __wur;
+                                  FILE *__restrict __stream), freopen64);
 # else
 #  define fopen fopen64
 #  define freopen freopen64
@@ -269,15 +267,15 @@ extern FILE *__REDIRECT (freopen, (__const char *__restrict __filename,
 __END_NAMESPACE_STD
 #ifdef __USE_LARGEFILE64
 extern FILE *fopen64 (__const char *__restrict __filename,
-                     __const char *__restrict __modes) __wur;
+                     __const char *__restrict __modes);
 extern FILE *freopen64 (__const char *__restrict __filename,
                        __const char *__restrict __modes,
-                       FILE *__restrict __stream) __wur;
+                       FILE *__restrict __stream);
 #endif
 
 #ifdef __USE_POSIX
 /* Create a new stream that refers to an existing system file descriptor.  */
-extern FILE *fdopen (int __fd, __const char *__modes) __THROW __wur;
+extern FILE *fdopen (int __fd, __const char *__modes) __THROW;
 #endif
 
 #ifdef __USE_GNU
@@ -285,16 +283,15 @@ extern FILE *fdopen (int __fd, __const char *__modes) __THROW __wur;
    and uses the given functions for input and output.  */
 extern FILE *fopencookie (void *__restrict __magic_cookie,
                          __const char *__restrict __modes,
-                         _IO_cookie_io_functions_t __io_funcs) __THROW __wur;
+                         _IO_cookie_io_functions_t __io_funcs) __THROW;
 
 /* Create a new stream that refers to a memory buffer.  */
-extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)
-  __THROW __wur;
+extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes) __THROW;
 
 /* Open a stream that writes into a malloc'd buffer that is expanded as
    necessary.  *BUFLOC and *SIZELOC are updated with the buffer's location
    and the number of characters written on fflush or fclose.  */
-extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur;
+extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW;
 #endif
 
 
@@ -370,13 +367,13 @@ __END_NAMESPACE_C99
    Store the address of the string in *PTR.  */
 extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
                      _G_va_list __arg)
-     __THROW __attribute__ ((__format__ (__printf__, 2, 0))) __wur;
+     __THROW __attribute__ ((__format__ (__printf__, 2, 0)));
 extern int __asprintf (char **__restrict __ptr,
                       __const char *__restrict __fmt, ...)
-     __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
+     __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
 extern int asprintf (char **__restrict __ptr,
                     __const char *__restrict __fmt, ...)
-     __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
+     __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
 
 /* Write formatted output to a file descriptor.
 
index e9a316a01c1bf2f274cbabedf17a37cd3b8b3dd8..5bbd20227b15136f34bc5db3bf4c0ba9c341bda2 100644 (file)
@@ -119,7 +119,7 @@ _IO_vswprintf (string, maxlen, format, args)
 
   if (sf.f._sbf._f._wide_data->_IO_buf_base == sf.overflow_buf)
     /* ISO C99 requires swprintf/vswprintf to return an error if the
-       output does not fit in the provided buffer.  */
+       output does not fit inhe provided buffer.  */
     return -1;
 
   /* Terminate the string.  */
index 568db4866f93807228035ffd37a9b89e27ef48cd..adb009ba564e2f94d61680c3c761ab3d6b21a6df 100644 (file)
@@ -1,4 +1,4 @@
-#define NTRANSLIT 1352
+#define NTRANSLIT 1353
 static const uint32_t translit_from_idx[] =
 {
      0,    2,    4,    6,    8,   10,   12,   14,   16,   18,   20,   22,
@@ -113,7 +113,7 @@ static const uint32_t translit_from_idx[] =
   2616, 2618, 2620, 2622, 2624, 2626, 2628, 2630, 2632, 2634, 2636, 2638,
   2640, 2642, 2644, 2646, 2648, 2650, 2652, 2654, 2656, 2658, 2660, 2662,
   2664, 2666, 2668, 2670, 2672, 2674, 2676, 2678, 2680, 2682, 2684, 2686,
-  2688, 2690, 2692, 2694, 2696, 2698, 2700, 2702
+  2688, 2690, 2692, 2694, 2696, 2698, 2700, 2702, 2704
 };
 static const wchar_t translit_from_tbl[] =
   L"\x00a0" L"\0" L"\x00a9" L"\0" L"\x00ab" L"\0" L"\x00ad" L"\0" L"\x00ae"
@@ -132,335 +132,336 @@ static const wchar_t translit_from_tbl[] =
   L"\0" L"\x201d" L"\0" L"\x201e" L"\0" L"\x201f" L"\0" L"\x2020" L"\0"
   L"\x2022" L"\0" L"\x2024" L"\0" L"\x2025" L"\0" L"\x2026" L"\0" L"\x202f"
   L"\0" L"\x2035" L"\0" L"\x2036" L"\0" L"\x2037" L"\0" L"\x2039" L"\0"
-  L"\x203a" L"\0" L"\x203c" L"\0" L"\x2047" L"\0" L"\x2048" L"\0" L"\x2049"
-  L"\0" L"\x205f" L"\0" L"\x2060" L"\0" L"\x2061" L"\0" L"\x2062" L"\0"
-  L"\x2063" L"\0" L"\x20a8" L"\0" L"\x20ac" L"\0" L"\x2100" L"\0" L"\x2101"
-  L"\0" L"\x2102" L"\0" L"\x2105" L"\0" L"\x2106" L"\0" L"\x210a" L"\0"
-  L"\x210b" L"\0" L"\x210c" L"\0" L"\x210d" L"\0" L"\x210e" L"\0" L"\x2110"
-  L"\0" L"\x2111" L"\0" L"\x2112" L"\0" L"\x2113" L"\0" L"\x2115" L"\0"
-  L"\x2116" L"\0" L"\x2119" L"\0" L"\x211a" L"\0" L"\x211b" L"\0" L"\x211c"
-  L"\0" L"\x211d" L"\0" L"\x2121" L"\0" L"\x2122" L"\0" L"\x2124" L"\0"
-  L"\x2126" L"\0" L"\x2128" L"\0" L"\x212c" L"\0" L"\x212d" L"\0" L"\x212e"
-  L"\0" L"\x212f" L"\0" L"\x2130" L"\0" L"\x2131" L"\0" L"\x2133" L"\0"
-  L"\x2134" L"\0" L"\x2139" L"\0" L"\x2145" L"\0" L"\x2146" L"\0" L"\x2147"
-  L"\0" L"\x2148" L"\0" L"\x2149" L"\0" L"\x2153" L"\0" L"\x2154" L"\0"
-  L"\x2155" L"\0" L"\x2156" L"\0" L"\x2157" L"\0" L"\x2158" L"\0" L"\x2159"
-  L"\0" L"\x215a" L"\0" L"\x215b" L"\0" L"\x215c" L"\0" L"\x215d" L"\0"
-  L"\x215e" L"\0" L"\x215f" L"\0" L"\x2160" L"\0" L"\x2161" L"\0" L"\x2162"
-  L"\0" L"\x2163" L"\0" L"\x2164" L"\0" L"\x2165" L"\0" L"\x2166" L"\0"
-  L"\x2167" L"\0" L"\x2168" L"\0" L"\x2169" L"\0" L"\x216a" L"\0" L"\x216b"
-  L"\0" L"\x216c" L"\0" L"\x216d" L"\0" L"\x216e" L"\0" L"\x216f" L"\0"
-  L"\x2170" L"\0" L"\x2171" L"\0" L"\x2172" L"\0" L"\x2173" L"\0" L"\x2174"
-  L"\0" L"\x2175" L"\0" L"\x2176" L"\0" L"\x2177" L"\0" L"\x2178" L"\0"
-  L"\x2179" L"\0" L"\x217a" L"\0" L"\x217b" L"\0" L"\x217c" L"\0" L"\x217d"
-  L"\0" L"\x217e" L"\0" L"\x217f" L"\0" L"\x2190" L"\0" L"\x2192" L"\0"
-  L"\x2194" L"\0" L"\x21d0" L"\0" L"\x21d2" L"\0" L"\x21d4" L"\0" L"\x2212"
-  L"\0" L"\x2215" L"\0" L"\x2216" L"\0" L"\x2217" L"\0" L"\x2223" L"\0"
-  L"\x2236" L"\0" L"\x223c" L"\0" L"\x2264" L"\0" L"\x2265" L"\0" L"\x226a"
-  L"\0" L"\x226b" L"\0" L"\x22d8" L"\0" L"\x22d9" L"\0" L"\x2400" L"\0"
-  L"\x2401" L"\0" L"\x2402" L"\0" L"\x2403" L"\0" L"\x2404" L"\0" L"\x2405"
-  L"\0" L"\x2406" L"\0" L"\x2407" L"\0" L"\x2408" L"\0" L"\x2409" L"\0"
-  L"\x240a" L"\0" L"\x240b" L"\0" L"\x240c" L"\0" L"\x240d" L"\0" L"\x240e"
-  L"\0" L"\x240f" L"\0" L"\x2410" L"\0" L"\x2411" L"\0" L"\x2412" L"\0"
-  L"\x2413" L"\0" L"\x2414" L"\0" L"\x2415" L"\0" L"\x2416" L"\0" L"\x2417"
-  L"\0" L"\x2418" L"\0" L"\x2419" L"\0" L"\x241a" L"\0" L"\x241b" L"\0"
-  L"\x241c" L"\0" L"\x241d" L"\0" L"\x241e" L"\0" L"\x241f" L"\0" L"\x2420"
-  L"\0" L"\x2421" L"\0" L"\x2423" L"\0" L"\x2424" L"\0" L"\x2460" L"\0"
-  L"\x2461" L"\0" L"\x2462" L"\0" L"\x2463" L"\0" L"\x2464" L"\0" L"\x2465"
-  L"\0" L"\x2466" L"\0" L"\x2467" L"\0" L"\x2468" L"\0" L"\x2469" L"\0"
-  L"\x246a" L"\0" L"\x246b" L"\0" L"\x246c" L"\0" L"\x246d" L"\0" L"\x246e"
-  L"\0" L"\x246f" L"\0" L"\x2470" L"\0" L"\x2471" L"\0" L"\x2472" L"\0"
-  L"\x2473" L"\0" L"\x2474" L"\0" L"\x2475" L"\0" L"\x2476" L"\0" L"\x2477"
-  L"\0" L"\x2478" L"\0" L"\x2479" L"\0" L"\x247a" L"\0" L"\x247b" L"\0"
-  L"\x247c" L"\0" L"\x247d" L"\0" L"\x247e" L"\0" L"\x247f" L"\0" L"\x2480"
-  L"\0" L"\x2481" L"\0" L"\x2482" L"\0" L"\x2483" L"\0" L"\x2484" L"\0"
-  L"\x2485" L"\0" L"\x2486" L"\0" L"\x2487" L"\0" L"\x2488" L"\0" L"\x2489"
-  L"\0" L"\x248a" L"\0" L"\x248b" L"\0" L"\x248c" L"\0" L"\x248d" L"\0"
-  L"\x248e" L"\0" L"\x248f" L"\0" L"\x2490" L"\0" L"\x2491" L"\0" L"\x2492"
-  L"\0" L"\x2493" L"\0" L"\x2494" L"\0" L"\x2495" L"\0" L"\x2496" L"\0"
-  L"\x2497" L"\0" L"\x2498" L"\0" L"\x2499" L"\0" L"\x249a" L"\0" L"\x249b"
-  L"\0" L"\x249c" L"\0" L"\x249d" L"\0" L"\x249e" L"\0" L"\x249f" L"\0"
-  L"\x24a0" L"\0" L"\x24a1" L"\0" L"\x24a2" L"\0" L"\x24a3" L"\0" L"\x24a4"
-  L"\0" L"\x24a5" L"\0" L"\x24a6" L"\0" L"\x24a7" L"\0" L"\x24a8" L"\0"
-  L"\x24a9" L"\0" L"\x24aa" L"\0" L"\x24ab" L"\0" L"\x24ac" L"\0" L"\x24ad"
-  L"\0" L"\x24ae" L"\0" L"\x24af" L"\0" L"\x24b0" L"\0" L"\x24b1" L"\0"
-  L"\x24b2" L"\0" L"\x24b3" L"\0" L"\x24b4" L"\0" L"\x24b5" L"\0" L"\x24b6"
-  L"\0" L"\x24b7" L"\0" L"\x24b8" L"\0" L"\x24b9" L"\0" L"\x24ba" L"\0"
-  L"\x24bb" L"\0" L"\x24bc" L"\0" L"\x24bd" L"\0" L"\x24be" L"\0" L"\x24bf"
-  L"\0" L"\x24c0" L"\0" L"\x24c1" L"\0" L"\x24c2" L"\0" L"\x24c3" L"\0"
-  L"\x24c4" L"\0" L"\x24c5" L"\0" L"\x24c6" L"\0" L"\x24c7" L"\0" L"\x24c8"
-  L"\0" L"\x24c9" L"\0" L"\x24ca" L"\0" L"\x24cb" L"\0" L"\x24cc" L"\0"
-  L"\x24cd" L"\0" L"\x24ce" L"\0" L"\x24cf" L"\0" L"\x24d0" L"\0" L"\x24d1"
-  L"\0" L"\x24d2" L"\0" L"\x24d3" L"\0" L"\x24d4" L"\0" L"\x24d5" L"\0"
-  L"\x24d6" L"\0" L"\x24d7" L"\0" L"\x24d8" L"\0" L"\x24d9" L"\0" L"\x24da"
-  L"\0" L"\x24db" L"\0" L"\x24dc" L"\0" L"\x24dd" L"\0" L"\x24de" L"\0"
-  L"\x24df" L"\0" L"\x24e0" L"\0" L"\x24e1" L"\0" L"\x24e2" L"\0" L"\x24e3"
-  L"\0" L"\x24e4" L"\0" L"\x24e5" L"\0" L"\x24e6" L"\0" L"\x24e7" L"\0"
-  L"\x24e8" L"\0" L"\x24e9" L"\0" L"\x24ea" L"\0" L"\x2500" L"\0" L"\x2502"
-  L"\0" L"\x250c" L"\0" L"\x2510" L"\0" L"\x2514" L"\0" L"\x2518" L"\0"
-  L"\x251c" L"\0" L"\x2524" L"\0" L"\x252c" L"\0" L"\x2534" L"\0" L"\x253c"
-  L"\0" L"\x25e6" L"\0" L"\x2a74" L"\0" L"\x2a75" L"\0" L"\x2a76" L"\0"
-  L"\x3000" L"\0" L"\x30a0" L"\0" L"\x3251" L"\0" L"\x3252" L"\0" L"\x3253"
-  L"\0" L"\x3254" L"\0" L"\x3255" L"\0" L"\x3256" L"\0" L"\x3257" L"\0"
-  L"\x3258" L"\0" L"\x3259" L"\0" L"\x325a" L"\0" L"\x325b" L"\0" L"\x325c"
-  L"\0" L"\x325d" L"\0" L"\x325e" L"\0" L"\x325f" L"\0" L"\x32b1" L"\0"
-  L"\x32b2" L"\0" L"\x32b3" L"\0" L"\x32b4" L"\0" L"\x32b5" L"\0" L"\x32b6"
-  L"\0" L"\x32b7" L"\0" L"\x32b8" L"\0" L"\x32b9" L"\0" L"\x32ba" L"\0"
-  L"\x32bb" L"\0" L"\x32bc" L"\0" L"\x32bd" L"\0" L"\x32be" L"\0" L"\x32bf"
-  L"\0" L"\x3371" L"\0" L"\x3372" L"\0" L"\x3373" L"\0" L"\x3374" L"\0"
-  L"\x3375" L"\0" L"\x3376" L"\0" L"\x3380" L"\0" L"\x3381" L"\0" L"\x3382"
-  L"\0" L"\x3383" L"\0" L"\x3384" L"\0" L"\x3385" L"\0" L"\x3386" L"\0"
-  L"\x3387" L"\0" L"\x3388" L"\0" L"\x3389" L"\0" L"\x338a" L"\0" L"\x338b"
-  L"\0" L"\x338c" L"\0" L"\x338d" L"\0" L"\x338e" L"\0" L"\x338f" L"\0"
-  L"\x3390" L"\0" L"\x3391" L"\0" L"\x3392" L"\0" L"\x3393" L"\0" L"\x3394"
-  L"\0" L"\x3395" L"\0" L"\x3396" L"\0" L"\x3397" L"\0" L"\x3398" L"\0"
-  L"\x3399" L"\0" L"\x339a" L"\0" L"\x339b" L"\0" L"\x339c" L"\0" L"\x339d"
-  L"\0" L"\x339e" L"\0" L"\x339f" L"\0" L"\x33a0" L"\0" L"\x33a1" L"\0"
-  L"\x33a2" L"\0" L"\x33a3" L"\0" L"\x33a4" L"\0" L"\x33a5" L"\0" L"\x33a6"
-  L"\0" L"\x33a7" L"\0" L"\x33a8" L"\0" L"\x33a9" L"\0" L"\x33aa" L"\0"
-  L"\x33ab" L"\0" L"\x33ac" L"\0" L"\x33ad" L"\0" L"\x33ae" L"\0" L"\x33af"
-  L"\0" L"\x33b0" L"\0" L"\x33b1" L"\0" L"\x33b2" L"\0" L"\x33b3" L"\0"
-  L"\x33b4" L"\0" L"\x33b5" L"\0" L"\x33b6" L"\0" L"\x33b7" L"\0" L"\x33b8"
-  L"\0" L"\x33b9" L"\0" L"\x33ba" L"\0" L"\x33bb" L"\0" L"\x33bc" L"\0"
-  L"\x33bd" L"\0" L"\x33be" L"\0" L"\x33bf" L"\0" L"\x33c2" L"\0" L"\x33c3"
-  L"\0" L"\x33c4" L"\0" L"\x33c5" L"\0" L"\x33c6" L"\0" L"\x33c7" L"\0"
-  L"\x33c8" L"\0" L"\x33c9" L"\0" L"\x33ca" L"\0" L"\x33cb" L"\0" L"\x33cc"
-  L"\0" L"\x33cd" L"\0" L"\x33ce" L"\0" L"\x33cf" L"\0" L"\x33d0" L"\0"
-  L"\x33d1" L"\0" L"\x33d2" L"\0" L"\x33d3" L"\0" L"\x33d4" L"\0" L"\x33d5"
-  L"\0" L"\x33d6" L"\0" L"\x33d7" L"\0" L"\x33d8" L"\0" L"\x33d9" L"\0"
-  L"\x33da" L"\0" L"\x33db" L"\0" L"\x33dc" L"\0" L"\x33dd" L"\0" L"\xfb00"
-  L"\0" L"\xfb01" L"\0" L"\xfb02" L"\0" L"\xfb03" L"\0" L"\xfb04" L"\0"
-  L"\xfb06" L"\0" L"\xfb29" L"\0" L"\xfe00" L"\0" L"\xfe01" L"\0" L"\xfe02"
-  L"\0" L"\xfe03" L"\0" L"\xfe04" L"\0" L"\xfe05" L"\0" L"\xfe06" L"\0"
-  L"\xfe07" L"\0" L"\xfe08" L"\0" L"\xfe09" L"\0" L"\xfe0a" L"\0" L"\xfe0b"
-  L"\0" L"\xfe0c" L"\0" L"\xfe0d" L"\0" L"\xfe0e" L"\0" L"\xfe0f" L"\0"
-  L"\xfe4d" L"\0" L"\xfe4e" L"\0" L"\xfe4f" L"\0" L"\xfe50" L"\0" L"\xfe52"
-  L"\0" L"\xfe54" L"\0" L"\xfe55" L"\0" L"\xfe56" L"\0" L"\xfe57" L"\0"
-  L"\xfe59" L"\0" L"\xfe5a" L"\0" L"\xfe5b" L"\0" L"\xfe5c" L"\0" L"\xfe5f"
-  L"\0" L"\xfe60" L"\0" L"\xfe61" L"\0" L"\xfe62" L"\0" L"\xfe63" L"\0"
-  L"\xfe64" L"\0" L"\xfe65" L"\0" L"\xfe66" L"\0" L"\xfe68" L"\0" L"\xfe69"
-  L"\0" L"\xfe6a" L"\0" L"\xfe6b" L"\0" L"\xfeff" L"\0" L"\xff01" L"\0"
-  L"\xff02" L"\0" L"\xff03" L"\0" L"\xff04" L"\0" L"\xff05" L"\0" L"\xff06"
-  L"\0" L"\xff07" L"\0" L"\xff08" L"\0" L"\xff09" L"\0" L"\xff0a" L"\0"
-  L"\xff0b" L"\0" L"\xff0c" L"\0" L"\xff0d" L"\0" L"\xff0e" L"\0" L"\xff0f"
-  L"\0" L"\xff10" L"\0" L"\xff11" L"\0" L"\xff12" L"\0" L"\xff13" L"\0"
-  L"\xff14" L"\0" L"\xff15" L"\0" L"\xff16" L"\0" L"\xff17" L"\0" L"\xff18"
-  L"\0" L"\xff19" L"\0" L"\xff1a" L"\0" L"\xff1b" L"\0" L"\xff1c" L"\0"
-  L"\xff1d" L"\0" L"\xff1e" L"\0" L"\xff1f" L"\0" L"\xff20" L"\0" L"\xff21"
-  L"\0" L"\xff22" L"\0" L"\xff23" L"\0" L"\xff24" L"\0" L"\xff25" L"\0"
-  L"\xff26" L"\0" L"\xff27" L"\0" L"\xff28" L"\0" L"\xff29" L"\0" L"\xff2a"
-  L"\0" L"\xff2b" L"\0" L"\xff2c" L"\0" L"\xff2d" L"\0" L"\xff2e" L"\0"
-  L"\xff2f" L"\0" L"\xff30" L"\0" L"\xff31" L"\0" L"\xff32" L"\0" L"\xff33"
-  L"\0" L"\xff34" L"\0" L"\xff35" L"\0" L"\xff36" L"\0" L"\xff37" L"\0"
-  L"\xff38" L"\0" L"\xff39" L"\0" L"\xff3a" L"\0" L"\xff3b" L"\0" L"\xff3c"
-  L"\0" L"\xff3d" L"\0" L"\xff3e" L"\0" L"\xff3f" L"\0" L"\xff40" L"\0"
-  L"\xff41" L"\0" L"\xff42" L"\0" L"\xff43" L"\0" L"\xff44" L"\0" L"\xff45"
-  L"\0" L"\xff46" L"\0" L"\xff47" L"\0" L"\xff48" L"\0" L"\xff49" L"\0"
-  L"\xff4a" L"\0" L"\xff4b" L"\0" L"\xff4c" L"\0" L"\xff4d" L"\0" L"\xff4e"
-  L"\0" L"\xff4f" L"\0" L"\xff50" L"\0" L"\xff51" L"\0" L"\xff52" L"\0"
-  L"\xff53" L"\0" L"\xff54" L"\0" L"\xff55" L"\0" L"\xff56" L"\0" L"\xff57"
-  L"\0" L"\xff58" L"\0" L"\xff59" L"\0" L"\xff5a" L"\0" L"\xff5b" L"\0"
-  L"\xff5c" L"\0" L"\xff5d" L"\0" L"\xff5e" L"\0" L"\x0001d400" L"\0"
-  L"\x0001d401" L"\0" L"\x0001d402" L"\0" L"\x0001d403" L"\0" L"\x0001d404"
-  L"\0" L"\x0001d405" L"\0" L"\x0001d406" L"\0" L"\x0001d407" L"\0"
-  L"\x0001d408" L"\0" L"\x0001d409" L"\0" L"\x0001d40a" L"\0" L"\x0001d40b"
-  L"\0" L"\x0001d40c" L"\0" L"\x0001d40d" L"\0" L"\x0001d40e" L"\0"
-  L"\x0001d40f" L"\0" L"\x0001d410" L"\0" L"\x0001d411" L"\0" L"\x0001d412"
-  L"\0" L"\x0001d413" L"\0" L"\x0001d414" L"\0" L"\x0001d415" L"\0"
-  L"\x0001d416" L"\0" L"\x0001d417" L"\0" L"\x0001d418" L"\0" L"\x0001d419"
-  L"\0" L"\x0001d41a" L"\0" L"\x0001d41b" L"\0" L"\x0001d41c" L"\0"
-  L"\x0001d41d" L"\0" L"\x0001d41e" L"\0" L"\x0001d41f" L"\0" L"\x0001d420"
-  L"\0" L"\x0001d421" L"\0" L"\x0001d422" L"\0" L"\x0001d423" L"\0"
-  L"\x0001d424" L"\0" L"\x0001d425" L"\0" L"\x0001d426" L"\0" L"\x0001d427"
-  L"\0" L"\x0001d428" L"\0" L"\x0001d429" L"\0" L"\x0001d42a" L"\0"
-  L"\x0001d42b" L"\0" L"\x0001d42c" L"\0" L"\x0001d42d" L"\0" L"\x0001d42e"
-  L"\0" L"\x0001d42f" L"\0" L"\x0001d430" L"\0" L"\x0001d431" L"\0"
-  L"\x0001d432" L"\0" L"\x0001d433" L"\0" L"\x0001d434" L"\0" L"\x0001d435"
-  L"\0" L"\x0001d436" L"\0" L"\x0001d437" L"\0" L"\x0001d438" L"\0"
-  L"\x0001d439" L"\0" L"\x0001d43a" L"\0" L"\x0001d43b" L"\0" L"\x0001d43c"
-  L"\0" L"\x0001d43d" L"\0" L"\x0001d43e" L"\0" L"\x0001d43f" L"\0"
-  L"\x0001d440" L"\0" L"\x0001d441" L"\0" L"\x0001d442" L"\0" L"\x0001d443"
-  L"\0" L"\x0001d444" L"\0" L"\x0001d445" L"\0" L"\x0001d446" L"\0"
-  L"\x0001d447" L"\0" L"\x0001d448" L"\0" L"\x0001d449" L"\0" L"\x0001d44a"
-  L"\0" L"\x0001d44b" L"\0" L"\x0001d44c" L"\0" L"\x0001d44d" L"\0"
-  L"\x0001d44e" L"\0" L"\x0001d44f" L"\0" L"\x0001d450" L"\0" L"\x0001d451"
-  L"\0" L"\x0001d452" L"\0" L"\x0001d453" L"\0" L"\x0001d454" L"\0"
-  L"\x0001d456" L"\0" L"\x0001d457" L"\0" L"\x0001d458" L"\0" L"\x0001d459"
-  L"\0" L"\x0001d45a" L"\0" L"\x0001d45b" L"\0" L"\x0001d45c" L"\0"
-  L"\x0001d45d" L"\0" L"\x0001d45e" L"\0" L"\x0001d45f" L"\0" L"\x0001d460"
-  L"\0" L"\x0001d461" L"\0" L"\x0001d462" L"\0" L"\x0001d463" L"\0"
-  L"\x0001d464" L"\0" L"\x0001d465" L"\0" L"\x0001d466" L"\0" L"\x0001d467"
-  L"\0" L"\x0001d468" L"\0" L"\x0001d469" L"\0" L"\x0001d46a" L"\0"
-  L"\x0001d46b" L"\0" L"\x0001d46c" L"\0" L"\x0001d46d" L"\0" L"\x0001d46e"
-  L"\0" L"\x0001d46f" L"\0" L"\x0001d470" L"\0" L"\x0001d471" L"\0"
-  L"\x0001d472" L"\0" L"\x0001d473" L"\0" L"\x0001d474" L"\0" L"\x0001d475"
-  L"\0" L"\x0001d476" L"\0" L"\x0001d477" L"\0" L"\x0001d478" L"\0"
-  L"\x0001d479" L"\0" L"\x0001d47a" L"\0" L"\x0001d47b" L"\0" L"\x0001d47c"
-  L"\0" L"\x0001d47d" L"\0" L"\x0001d47e" L"\0" L"\x0001d47f" L"\0"
-  L"\x0001d480" L"\0" L"\x0001d481" L"\0" L"\x0001d482" L"\0" L"\x0001d483"
-  L"\0" L"\x0001d484" L"\0" L"\x0001d485" L"\0" L"\x0001d486" L"\0"
-  L"\x0001d487" L"\0" L"\x0001d488" L"\0" L"\x0001d489" L"\0" L"\x0001d48a"
-  L"\0" L"\x0001d48b" L"\0" L"\x0001d48c" L"\0" L"\x0001d48d" L"\0"
-  L"\x0001d48e" L"\0" L"\x0001d48f" L"\0" L"\x0001d490" L"\0" L"\x0001d491"
-  L"\0" L"\x0001d492" L"\0" L"\x0001d493" L"\0" L"\x0001d494" L"\0"
-  L"\x0001d495" L"\0" L"\x0001d496" L"\0" L"\x0001d497" L"\0" L"\x0001d498"
-  L"\0" L"\x0001d499" L"\0" L"\x0001d49a" L"\0" L"\x0001d49b" L"\0"
-  L"\x0001d49c" L"\0" L"\x0001d49e" L"\0" L"\x0001d49f" L"\0" L"\x0001d4a2"
-  L"\0" L"\x0001d4a5" L"\0" L"\x0001d4a6" L"\0" L"\x0001d4a9" L"\0"
-  L"\x0001d4aa" L"\0" L"\x0001d4ab" L"\0" L"\x0001d4ac" L"\0" L"\x0001d4ae"
-  L"\0" L"\x0001d4af" L"\0" L"\x0001d4b0" L"\0" L"\x0001d4b1" L"\0"
-  L"\x0001d4b2" L"\0" L"\x0001d4b3" L"\0" L"\x0001d4b4" L"\0" L"\x0001d4b5"
-  L"\0" L"\x0001d4b6" L"\0" L"\x0001d4b7" L"\0" L"\x0001d4b8" L"\0"
-  L"\x0001d4b9" L"\0" L"\x0001d4bb" L"\0" L"\x0001d4bd" L"\0" L"\x0001d4be"
-  L"\0" L"\x0001d4bf" L"\0" L"\x0001d4c0" L"\0" L"\x0001d4c2" L"\0"
-  L"\x0001d4c3" L"\0" L"\x0001d4c5" L"\0" L"\x0001d4c6" L"\0" L"\x0001d4c7"
-  L"\0" L"\x0001d4c8" L"\0" L"\x0001d4c9" L"\0" L"\x0001d4ca" L"\0"
-  L"\x0001d4cb" L"\0" L"\x0001d4cc" L"\0" L"\x0001d4cd" L"\0" L"\x0001d4ce"
-  L"\0" L"\x0001d4cf" L"\0" L"\x0001d4d0" L"\0" L"\x0001d4d1" L"\0"
-  L"\x0001d4d2" L"\0" L"\x0001d4d3" L"\0" L"\x0001d4d4" L"\0" L"\x0001d4d5"
-  L"\0" L"\x0001d4d6" L"\0" L"\x0001d4d7" L"\0" L"\x0001d4d8" L"\0"
-  L"\x0001d4d9" L"\0" L"\x0001d4da" L"\0" L"\x0001d4db" L"\0" L"\x0001d4dc"
-  L"\0" L"\x0001d4dd" L"\0" L"\x0001d4de" L"\0" L"\x0001d4df" L"\0"
-  L"\x0001d4e0" L"\0" L"\x0001d4e1" L"\0" L"\x0001d4e2" L"\0" L"\x0001d4e3"
-  L"\0" L"\x0001d4e4" L"\0" L"\x0001d4e5" L"\0" L"\x0001d4e6" L"\0"
-  L"\x0001d4e7" L"\0" L"\x0001d4e8" L"\0" L"\x0001d4e9" L"\0" L"\x0001d4ea"
-  L"\0" L"\x0001d4eb" L"\0" L"\x0001d4ec" L"\0" L"\x0001d4ed" L"\0"
-  L"\x0001d4ee" L"\0" L"\x0001d4ef" L"\0" L"\x0001d4f0" L"\0" L"\x0001d4f1"
-  L"\0" L"\x0001d4f2" L"\0" L"\x0001d4f3" L"\0" L"\x0001d4f4" L"\0"
-  L"\x0001d4f5" L"\0" L"\x0001d4f6" L"\0" L"\x0001d4f7" L"\0" L"\x0001d4f8"
-  L"\0" L"\x0001d4f9" L"\0" L"\x0001d4fa" L"\0" L"\x0001d4fb" L"\0"
-  L"\x0001d4fc" L"\0" L"\x0001d4fd" L"\0" L"\x0001d4fe" L"\0" L"\x0001d4ff"
-  L"\0" L"\x0001d500" L"\0" L"\x0001d501" L"\0" L"\x0001d502" L"\0"
-  L"\x0001d503" L"\0" L"\x0001d504" L"\0" L"\x0001d505" L"\0" L"\x0001d507"
-  L"\0" L"\x0001d508" L"\0" L"\x0001d509" L"\0" L"\x0001d50a" L"\0"
-  L"\x0001d50d" L"\0" L"\x0001d50e" L"\0" L"\x0001d50f" L"\0" L"\x0001d510"
-  L"\0" L"\x0001d511" L"\0" L"\x0001d512" L"\0" L"\x0001d513" L"\0"
-  L"\x0001d514" L"\0" L"\x0001d516" L"\0" L"\x0001d517" L"\0" L"\x0001d518"
-  L"\0" L"\x0001d519" L"\0" L"\x0001d51a" L"\0" L"\x0001d51b" L"\0"
-  L"\x0001d51c" L"\0" L"\x0001d51e" L"\0" L"\x0001d51f" L"\0" L"\x0001d520"
-  L"\0" L"\x0001d521" L"\0" L"\x0001d522" L"\0" L"\x0001d523" L"\0"
-  L"\x0001d524" L"\0" L"\x0001d525" L"\0" L"\x0001d526" L"\0" L"\x0001d527"
-  L"\0" L"\x0001d528" L"\0" L"\x0001d529" L"\0" L"\x0001d52a" L"\0"
-  L"\x0001d52b" L"\0" L"\x0001d52c" L"\0" L"\x0001d52d" L"\0" L"\x0001d52e"
-  L"\0" L"\x0001d52f" L"\0" L"\x0001d530" L"\0" L"\x0001d531" L"\0"
-  L"\x0001d532" L"\0" L"\x0001d533" L"\0" L"\x0001d534" L"\0" L"\x0001d535"
-  L"\0" L"\x0001d536" L"\0" L"\x0001d537" L"\0" L"\x0001d538" L"\0"
-  L"\x0001d539" L"\0" L"\x0001d53b" L"\0" L"\x0001d53c" L"\0" L"\x0001d53d"
-  L"\0" L"\x0001d53e" L"\0" L"\x0001d540" L"\0" L"\x0001d541" L"\0"
-  L"\x0001d542" L"\0" L"\x0001d543" L"\0" L"\x0001d544" L"\0" L"\x0001d546"
-  L"\0" L"\x0001d54a" L"\0" L"\x0001d54b" L"\0" L"\x0001d54c" L"\0"
-  L"\x0001d54d" L"\0" L"\x0001d54e" L"\0" L"\x0001d54f" L"\0" L"\x0001d550"
-  L"\0" L"\x0001d552" L"\0" L"\x0001d553" L"\0" L"\x0001d554" L"\0"
-  L"\x0001d555" L"\0" L"\x0001d556" L"\0" L"\x0001d557" L"\0" L"\x0001d558"
-  L"\0" L"\x0001d559" L"\0" L"\x0001d55a" L"\0" L"\x0001d55b" L"\0"
-  L"\x0001d55c" L"\0" L"\x0001d55d" L"\0" L"\x0001d55e" L"\0" L"\x0001d55f"
-  L"\0" L"\x0001d560" L"\0" L"\x0001d561" L"\0" L"\x0001d562" L"\0"
-  L"\x0001d563" L"\0" L"\x0001d564" L"\0" L"\x0001d565" L"\0" L"\x0001d566"
-  L"\0" L"\x0001d567" L"\0" L"\x0001d568" L"\0" L"\x0001d569" L"\0"
-  L"\x0001d56a" L"\0" L"\x0001d56b" L"\0" L"\x0001d56c" L"\0" L"\x0001d56d"
-  L"\0" L"\x0001d56e" L"\0" L"\x0001d56f" L"\0" L"\x0001d570" L"\0"
-  L"\x0001d571" L"\0" L"\x0001d572" L"\0" L"\x0001d573" L"\0" L"\x0001d574"
-  L"\0" L"\x0001d575" L"\0" L"\x0001d576" L"\0" L"\x0001d577" L"\0"
-  L"\x0001d578" L"\0" L"\x0001d579" L"\0" L"\x0001d57a" L"\0" L"\x0001d57b"
-  L"\0" L"\x0001d57c" L"\0" L"\x0001d57d" L"\0" L"\x0001d57e" L"\0"
-  L"\x0001d57f" L"\0" L"\x0001d580" L"\0" L"\x0001d581" L"\0" L"\x0001d582"
-  L"\0" L"\x0001d583" L"\0" L"\x0001d584" L"\0" L"\x0001d585" L"\0"
-  L"\x0001d586" L"\0" L"\x0001d587" L"\0" L"\x0001d588" L"\0" L"\x0001d589"
-  L"\0" L"\x0001d58a" L"\0" L"\x0001d58b" L"\0" L"\x0001d58c" L"\0"
-  L"\x0001d58d" L"\0" L"\x0001d58e" L"\0" L"\x0001d58f" L"\0" L"\x0001d590"
-  L"\0" L"\x0001d591" L"\0" L"\x0001d592" L"\0" L"\x0001d593" L"\0"
-  L"\x0001d594" L"\0" L"\x0001d595" L"\0" L"\x0001d596" L"\0" L"\x0001d597"
-  L"\0" L"\x0001d598" L"\0" L"\x0001d599" L"\0" L"\x0001d59a" L"\0"
-  L"\x0001d59b" L"\0" L"\x0001d59c" L"\0" L"\x0001d59d" L"\0" L"\x0001d59e"
-  L"\0" L"\x0001d59f" L"\0" L"\x0001d5a0" L"\0" L"\x0001d5a1" L"\0"
-  L"\x0001d5a2" L"\0" L"\x0001d5a3" L"\0" L"\x0001d5a4" L"\0" L"\x0001d5a5"
-  L"\0" L"\x0001d5a6" L"\0" L"\x0001d5a7" L"\0" L"\x0001d5a8" L"\0"
-  L"\x0001d5a9" L"\0" L"\x0001d5aa" L"\0" L"\x0001d5ab" L"\0" L"\x0001d5ac"
-  L"\0" L"\x0001d5ad" L"\0" L"\x0001d5ae" L"\0" L"\x0001d5af" L"\0"
-  L"\x0001d5b0" L"\0" L"\x0001d5b1" L"\0" L"\x0001d5b2" L"\0" L"\x0001d5b3"
-  L"\0" L"\x0001d5b4" L"\0" L"\x0001d5b5" L"\0" L"\x0001d5b6" L"\0"
-  L"\x0001d5b7" L"\0" L"\x0001d5b8" L"\0" L"\x0001d5b9" L"\0" L"\x0001d5ba"
-  L"\0" L"\x0001d5bb" L"\0" L"\x0001d5bc" L"\0" L"\x0001d5bd" L"\0"
-  L"\x0001d5be" L"\0" L"\x0001d5bf" L"\0" L"\x0001d5c0" L"\0" L"\x0001d5c1"
-  L"\0" L"\x0001d5c2" L"\0" L"\x0001d5c3" L"\0" L"\x0001d5c4" L"\0"
-  L"\x0001d5c5" L"\0" L"\x0001d5c6" L"\0" L"\x0001d5c7" L"\0" L"\x0001d5c8"
-  L"\0" L"\x0001d5c9" L"\0" L"\x0001d5ca" L"\0" L"\x0001d5cb" L"\0"
-  L"\x0001d5cc" L"\0" L"\x0001d5cd" L"\0" L"\x0001d5ce" L"\0" L"\x0001d5cf"
-  L"\0" L"\x0001d5d0" L"\0" L"\x0001d5d1" L"\0" L"\x0001d5d2" L"\0"
-  L"\x0001d5d3" L"\0" L"\x0001d5d4" L"\0" L"\x0001d5d5" L"\0" L"\x0001d5d6"
-  L"\0" L"\x0001d5d7" L"\0" L"\x0001d5d8" L"\0" L"\x0001d5d9" L"\0"
-  L"\x0001d5da" L"\0" L"\x0001d5db" L"\0" L"\x0001d5dc" L"\0" L"\x0001d5dd"
-  L"\0" L"\x0001d5de" L"\0" L"\x0001d5df" L"\0" L"\x0001d5e0" L"\0"
-  L"\x0001d5e1" L"\0" L"\x0001d5e2" L"\0" L"\x0001d5e3" L"\0" L"\x0001d5e4"
-  L"\0" L"\x0001d5e5" L"\0" L"\x0001d5e6" L"\0" L"\x0001d5e7" L"\0"
-  L"\x0001d5e8" L"\0" L"\x0001d5e9" L"\0" L"\x0001d5ea" L"\0" L"\x0001d5eb"
-  L"\0" L"\x0001d5ec" L"\0" L"\x0001d5ed" L"\0" L"\x0001d5ee" L"\0"
-  L"\x0001d5ef" L"\0" L"\x0001d5f0" L"\0" L"\x0001d5f1" L"\0" L"\x0001d5f2"
-  L"\0" L"\x0001d5f3" L"\0" L"\x0001d5f4" L"\0" L"\x0001d5f5" L"\0"
-  L"\x0001d5f6" L"\0" L"\x0001d5f7" L"\0" L"\x0001d5f8" L"\0" L"\x0001d5f9"
-  L"\0" L"\x0001d5fa" L"\0" L"\x0001d5fb" L"\0" L"\x0001d5fc" L"\0"
-  L"\x0001d5fd" L"\0" L"\x0001d5fe" L"\0" L"\x0001d5ff" L"\0" L"\x0001d600"
-  L"\0" L"\x0001d601" L"\0" L"\x0001d602" L"\0" L"\x0001d603" L"\0"
-  L"\x0001d604" L"\0" L"\x0001d605" L"\0" L"\x0001d606" L"\0" L"\x0001d607"
-  L"\0" L"\x0001d608" L"\0" L"\x0001d609" L"\0" L"\x0001d60a" L"\0"
-  L"\x0001d60b" L"\0" L"\x0001d60c" L"\0" L"\x0001d60d" L"\0" L"\x0001d60e"
-  L"\0" L"\x0001d60f" L"\0" L"\x0001d610" L"\0" L"\x0001d611" L"\0"
-  L"\x0001d612" L"\0" L"\x0001d613" L"\0" L"\x0001d614" L"\0" L"\x0001d615"
-  L"\0" L"\x0001d616" L"\0" L"\x0001d617" L"\0" L"\x0001d618" L"\0"
-  L"\x0001d619" L"\0" L"\x0001d61a" L"\0" L"\x0001d61b" L"\0" L"\x0001d61c"
-  L"\0" L"\x0001d61d" L"\0" L"\x0001d61e" L"\0" L"\x0001d61f" L"\0"
-  L"\x0001d620" L"\0" L"\x0001d621" L"\0" L"\x0001d622" L"\0" L"\x0001d623"
-  L"\0" L"\x0001d624" L"\0" L"\x0001d625" L"\0" L"\x0001d626" L"\0"
-  L"\x0001d627" L"\0" L"\x0001d628" L"\0" L"\x0001d629" L"\0" L"\x0001d62a"
-  L"\0" L"\x0001d62b" L"\0" L"\x0001d62c" L"\0" L"\x0001d62d" L"\0"
-  L"\x0001d62e" L"\0" L"\x0001d62f" L"\0" L"\x0001d630" L"\0" L"\x0001d631"
-  L"\0" L"\x0001d632" L"\0" L"\x0001d633" L"\0" L"\x0001d634" L"\0"
-  L"\x0001d635" L"\0" L"\x0001d636" L"\0" L"\x0001d637" L"\0" L"\x0001d638"
-  L"\0" L"\x0001d639" L"\0" L"\x0001d63a" L"\0" L"\x0001d63b" L"\0"
-  L"\x0001d63c" L"\0" L"\x0001d63d" L"\0" L"\x0001d63e" L"\0" L"\x0001d63f"
-  L"\0" L"\x0001d640" L"\0" L"\x0001d641" L"\0" L"\x0001d642" L"\0"
-  L"\x0001d643" L"\0" L"\x0001d644" L"\0" L"\x0001d645" L"\0" L"\x0001d646"
-  L"\0" L"\x0001d647" L"\0" L"\x0001d648" L"\0" L"\x0001d649" L"\0"
-  L"\x0001d64a" L"\0" L"\x0001d64b" L"\0" L"\x0001d64c" L"\0" L"\x0001d64d"
-  L"\0" L"\x0001d64e" L"\0" L"\x0001d64f" L"\0" L"\x0001d650" L"\0"
-  L"\x0001d651" L"\0" L"\x0001d652" L"\0" L"\x0001d653" L"\0" L"\x0001d654"
-  L"\0" L"\x0001d655" L"\0" L"\x0001d656" L"\0" L"\x0001d657" L"\0"
-  L"\x0001d658" L"\0" L"\x0001d659" L"\0" L"\x0001d65a" L"\0" L"\x0001d65b"
-  L"\0" L"\x0001d65c" L"\0" L"\x0001d65d" L"\0" L"\x0001d65e" L"\0"
-  L"\x0001d65f" L"\0" L"\x0001d660" L"\0" L"\x0001d661" L"\0" L"\x0001d662"
-  L"\0" L"\x0001d663" L"\0" L"\x0001d664" L"\0" L"\x0001d665" L"\0"
-  L"\x0001d666" L"\0" L"\x0001d667" L"\0" L"\x0001d668" L"\0" L"\x0001d669"
-  L"\0" L"\x0001d66a" L"\0" L"\x0001d66b" L"\0" L"\x0001d66c" L"\0"
-  L"\x0001d66d" L"\0" L"\x0001d66e" L"\0" L"\x0001d66f" L"\0" L"\x0001d670"
-  L"\0" L"\x0001d671" L"\0" L"\x0001d672" L"\0" L"\x0001d673" L"\0"
-  L"\x0001d674" L"\0" L"\x0001d675" L"\0" L"\x0001d676" L"\0" L"\x0001d677"
-  L"\0" L"\x0001d678" L"\0" L"\x0001d679" L"\0" L"\x0001d67a" L"\0"
-  L"\x0001d67b" L"\0" L"\x0001d67c" L"\0" L"\x0001d67d" L"\0" L"\x0001d67e"
-  L"\0" L"\x0001d67f" L"\0" L"\x0001d680" L"\0" L"\x0001d681" L"\0"
-  L"\x0001d682" L"\0" L"\x0001d683" L"\0" L"\x0001d684" L"\0" L"\x0001d685"
-  L"\0" L"\x0001d686" L"\0" L"\x0001d687" L"\0" L"\x0001d688" L"\0"
-  L"\x0001d689" L"\0" L"\x0001d68a" L"\0" L"\x0001d68b" L"\0" L"\x0001d68c"
-  L"\0" L"\x0001d68d" L"\0" L"\x0001d68e" L"\0" L"\x0001d68f" L"\0"
-  L"\x0001d690" L"\0" L"\x0001d691" L"\0" L"\x0001d692" L"\0" L"\x0001d693"
-  L"\0" L"\x0001d694" L"\0" L"\x0001d695" L"\0" L"\x0001d696" L"\0"
-  L"\x0001d697" L"\0" L"\x0001d698" L"\0" L"\x0001d699" L"\0" L"\x0001d69a"
-  L"\0" L"\x0001d69b" L"\0" L"\x0001d69c" L"\0" L"\x0001d69d" L"\0"
-  L"\x0001d69e" L"\0" L"\x0001d69f" L"\0" L"\x0001d6a0" L"\0" L"\x0001d6a1"
-  L"\0" L"\x0001d6a2" L"\0" L"\x0001d6a3" L"\0" L"\x0001d7ce" L"\0"
-  L"\x0001d7cf" L"\0" L"\x0001d7d0" L"\0" L"\x0001d7d1" L"\0" L"\x0001d7d2"
-  L"\0" L"\x0001d7d3" L"\0" L"\x0001d7d4" L"\0" L"\x0001d7d5" L"\0"
-  L"\x0001d7d6" L"\0" L"\x0001d7d7" L"\0" L"\x0001d7d8" L"\0" L"\x0001d7d9"
-  L"\0" L"\x0001d7da" L"\0" L"\x0001d7db" L"\0" L"\x0001d7dc" L"\0"
-  L"\x0001d7dd" L"\0" L"\x0001d7de" L"\0" L"\x0001d7df" L"\0" L"\x0001d7e0"
-  L"\0" L"\x0001d7e1" L"\0" L"\x0001d7e2" L"\0" L"\x0001d7e3" L"\0"
-  L"\x0001d7e4" L"\0" L"\x0001d7e5" L"\0" L"\x0001d7e6" L"\0" L"\x0001d7e7"
-  L"\0" L"\x0001d7e8" L"\0" L"\x0001d7e9" L"\0" L"\x0001d7ea" L"\0"
-  L"\x0001d7eb" L"\0" L"\x0001d7ec" L"\0" L"\x0001d7ed" L"\0" L"\x0001d7ee"
-  L"\0" L"\x0001d7ef" L"\0" L"\x0001d7f0" L"\0" L"\x0001d7f1" L"\0"
-  L"\x0001d7f2" L"\0" L"\x0001d7f3" L"\0" L"\x0001d7f4" L"\0" L"\x0001d7f5"
-  L"\0" L"\x0001d7f6" L"\0" L"\x0001d7f7" L"\0" L"\x0001d7f8" L"\0"
-  L"\x0001d7f9" L"\0" L"\x0001d7fa" L"\0" L"\x0001d7fb" L"\0" L"\x0001d7fc"
-  L"\0" L"\x0001d7fd" L"\0" L"\x0001d7fe" L"\0" L"\x0001d7ff";
+  L"\x203a" L"\0" L"\x203c" L"\0" L"\x2044" L"\0" L"\x2047" L"\0" L"\x2048"
+  L"\0" L"\x2049" L"\0" L"\x205f" L"\0" L"\x2060" L"\0" L"\x2061" L"\0"
+  L"\x2062" L"\0" L"\x2063" L"\0" L"\x20a8" L"\0" L"\x20ac" L"\0" L"\x2100"
+  L"\0" L"\x2101" L"\0" L"\x2102" L"\0" L"\x2105" L"\0" L"\x2106" L"\0"
+  L"\x210a" L"\0" L"\x210b" L"\0" L"\x210c" L"\0" L"\x210d" L"\0" L"\x210e"
+  L"\0" L"\x2110" L"\0" L"\x2111" L"\0" L"\x2112" L"\0" L"\x2113" L"\0"
+  L"\x2115" L"\0" L"\x2116" L"\0" L"\x2119" L"\0" L"\x211a" L"\0" L"\x211b"
+  L"\0" L"\x211c" L"\0" L"\x211d" L"\0" L"\x2121" L"\0" L"\x2122" L"\0"
+  L"\x2124" L"\0" L"\x2126" L"\0" L"\x2128" L"\0" L"\x212c" L"\0" L"\x212d"
+  L"\0" L"\x212e" L"\0" L"\x212f" L"\0" L"\x2130" L"\0" L"\x2131" L"\0"
+  L"\x2133" L"\0" L"\x2134" L"\0" L"\x2139" L"\0" L"\x2145" L"\0" L"\x2146"
+  L"\0" L"\x2147" L"\0" L"\x2148" L"\0" L"\x2149" L"\0" L"\x2153" L"\0"
+  L"\x2154" L"\0" L"\x2155" L"\0" L"\x2156" L"\0" L"\x2157" L"\0" L"\x2158"
+  L"\0" L"\x2159" L"\0" L"\x215a" L"\0" L"\x215b" L"\0" L"\x215c" L"\0"
+  L"\x215d" L"\0" L"\x215e" L"\0" L"\x215f" L"\0" L"\x2160" L"\0" L"\x2161"
+  L"\0" L"\x2162" L"\0" L"\x2163" L"\0" L"\x2164" L"\0" L"\x2165" L"\0"
+  L"\x2166" L"\0" L"\x2167" L"\0" L"\x2168" L"\0" L"\x2169" L"\0" L"\x216a"
+  L"\0" L"\x216b" L"\0" L"\x216c" L"\0" L"\x216d" L"\0" L"\x216e" L"\0"
+  L"\x216f" L"\0" L"\x2170" L"\0" L"\x2171" L"\0" L"\x2172" L"\0" L"\x2173"
+  L"\0" L"\x2174" L"\0" L"\x2175" L"\0" L"\x2176" L"\0" L"\x2177" L"\0"
+  L"\x2178" L"\0" L"\x2179" L"\0" L"\x217a" L"\0" L"\x217b" L"\0" L"\x217c"
+  L"\0" L"\x217d" L"\0" L"\x217e" L"\0" L"\x217f" L"\0" L"\x2190" L"\0"
+  L"\x2192" L"\0" L"\x2194" L"\0" L"\x21d0" L"\0" L"\x21d2" L"\0" L"\x21d4"
+  L"\0" L"\x2212" L"\0" L"\x2215" L"\0" L"\x2216" L"\0" L"\x2217" L"\0"
+  L"\x2223" L"\0" L"\x2236" L"\0" L"\x223c" L"\0" L"\x2264" L"\0" L"\x2265"
+  L"\0" L"\x226a" L"\0" L"\x226b" L"\0" L"\x22d8" L"\0" L"\x22d9" L"\0"
+  L"\x2400" L"\0" L"\x2401" L"\0" L"\x2402" L"\0" L"\x2403" L"\0" L"\x2404"
+  L"\0" L"\x2405" L"\0" L"\x2406" L"\0" L"\x2407" L"\0" L"\x2408" L"\0"
+  L"\x2409" L"\0" L"\x240a" L"\0" L"\x240b" L"\0" L"\x240c" L"\0" L"\x240d"
+  L"\0" L"\x240e" L"\0" L"\x240f" L"\0" L"\x2410" L"\0" L"\x2411" L"\0"
+  L"\x2412" L"\0" L"\x2413" L"\0" L"\x2414" L"\0" L"\x2415" L"\0" L"\x2416"
+  L"\0" L"\x2417" L"\0" L"\x2418" L"\0" L"\x2419" L"\0" L"\x241a" L"\0"
+  L"\x241b" L"\0" L"\x241c" L"\0" L"\x241d" L"\0" L"\x241e" L"\0" L"\x241f"
+  L"\0" L"\x2420" L"\0" L"\x2421" L"\0" L"\x2423" L"\0" L"\x2424" L"\0"
+  L"\x2460" L"\0" L"\x2461" L"\0" L"\x2462" L"\0" L"\x2463" L"\0" L"\x2464"
+  L"\0" L"\x2465" L"\0" L"\x2466" L"\0" L"\x2467" L"\0" L"\x2468" L"\0"
+  L"\x2469" L"\0" L"\x246a" L"\0" L"\x246b" L"\0" L"\x246c" L"\0" L"\x246d"
+  L"\0" L"\x246e" L"\0" L"\x246f" L"\0" L"\x2470" L"\0" L"\x2471" L"\0"
+  L"\x2472" L"\0" L"\x2473" L"\0" L"\x2474" L"\0" L"\x2475" L"\0" L"\x2476"
+  L"\0" L"\x2477" L"\0" L"\x2478" L"\0" L"\x2479" L"\0" L"\x247a" L"\0"
+  L"\x247b" L"\0" L"\x247c" L"\0" L"\x247d" L"\0" L"\x247e" L"\0" L"\x247f"
+  L"\0" L"\x2480" L"\0" L"\x2481" L"\0" L"\x2482" L"\0" L"\x2483" L"\0"
+  L"\x2484" L"\0" L"\x2485" L"\0" L"\x2486" L"\0" L"\x2487" L"\0" L"\x2488"
+  L"\0" L"\x2489" L"\0" L"\x248a" L"\0" L"\x248b" L"\0" L"\x248c" L"\0"
+  L"\x248d" L"\0" L"\x248e" L"\0" L"\x248f" L"\0" L"\x2490" L"\0" L"\x2491"
+  L"\0" L"\x2492" L"\0" L"\x2493" L"\0" L"\x2494" L"\0" L"\x2495" L"\0"
+  L"\x2496" L"\0" L"\x2497" L"\0" L"\x2498" L"\0" L"\x2499" L"\0" L"\x249a"
+  L"\0" L"\x249b" L"\0" L"\x249c" L"\0" L"\x249d" L"\0" L"\x249e" L"\0"
+  L"\x249f" L"\0" L"\x24a0" L"\0" L"\x24a1" L"\0" L"\x24a2" L"\0" L"\x24a3"
+  L"\0" L"\x24a4" L"\0" L"\x24a5" L"\0" L"\x24a6" L"\0" L"\x24a7" L"\0"
+  L"\x24a8" L"\0" L"\x24a9" L"\0" L"\x24aa" L"\0" L"\x24ab" L"\0" L"\x24ac"
+  L"\0" L"\x24ad" L"\0" L"\x24ae" L"\0" L"\x24af" L"\0" L"\x24b0" L"\0"
+  L"\x24b1" L"\0" L"\x24b2" L"\0" L"\x24b3" L"\0" L"\x24b4" L"\0" L"\x24b5"
+  L"\0" L"\x24b6" L"\0" L"\x24b7" L"\0" L"\x24b8" L"\0" L"\x24b9" L"\0"
+  L"\x24ba" L"\0" L"\x24bb" L"\0" L"\x24bc" L"\0" L"\x24bd" L"\0" L"\x24be"
+  L"\0" L"\x24bf" L"\0" L"\x24c0" L"\0" L"\x24c1" L"\0" L"\x24c2" L"\0"
+  L"\x24c3" L"\0" L"\x24c4" L"\0" L"\x24c5" L"\0" L"\x24c6" L"\0" L"\x24c7"
+  L"\0" L"\x24c8" L"\0" L"\x24c9" L"\0" L"\x24ca" L"\0" L"\x24cb" L"\0"
+  L"\x24cc" L"\0" L"\x24cd" L"\0" L"\x24ce" L"\0" L"\x24cf" L"\0" L"\x24d0"
+  L"\0" L"\x24d1" L"\0" L"\x24d2" L"\0" L"\x24d3" L"\0" L"\x24d4" L"\0"
+  L"\x24d5" L"\0" L"\x24d6" L"\0" L"\x24d7" L"\0" L"\x24d8" L"\0" L"\x24d9"
+  L"\0" L"\x24da" L"\0" L"\x24db" L"\0" L"\x24dc" L"\0" L"\x24dd" L"\0"
+  L"\x24de" L"\0" L"\x24df" L"\0" L"\x24e0" L"\0" L"\x24e1" L"\0" L"\x24e2"
+  L"\0" L"\x24e3" L"\0" L"\x24e4" L"\0" L"\x24e5" L"\0" L"\x24e6" L"\0"
+  L"\x24e7" L"\0" L"\x24e8" L"\0" L"\x24e9" L"\0" L"\x24ea" L"\0" L"\x2500"
+  L"\0" L"\x2502" L"\0" L"\x250c" L"\0" L"\x2510" L"\0" L"\x2514" L"\0"
+  L"\x2518" L"\0" L"\x251c" L"\0" L"\x2524" L"\0" L"\x252c" L"\0" L"\x2534"
+  L"\0" L"\x253c" L"\0" L"\x25e6" L"\0" L"\x2a74" L"\0" L"\x2a75" L"\0"
+  L"\x2a76" L"\0" L"\x3000" L"\0" L"\x30a0" L"\0" L"\x3251" L"\0" L"\x3252"
+  L"\0" L"\x3253" L"\0" L"\x3254" L"\0" L"\x3255" L"\0" L"\x3256" L"\0"
+  L"\x3257" L"\0" L"\x3258" L"\0" L"\x3259" L"\0" L"\x325a" L"\0" L"\x325b"
+  L"\0" L"\x325c" L"\0" L"\x325d" L"\0" L"\x325e" L"\0" L"\x325f" L"\0"
+  L"\x32b1" L"\0" L"\x32b2" L"\0" L"\x32b3" L"\0" L"\x32b4" L"\0" L"\x32b5"
+  L"\0" L"\x32b6" L"\0" L"\x32b7" L"\0" L"\x32b8" L"\0" L"\x32b9" L"\0"
+  L"\x32ba" L"\0" L"\x32bb" L"\0" L"\x32bc" L"\0" L"\x32bd" L"\0" L"\x32be"
+  L"\0" L"\x32bf" L"\0" L"\x3371" L"\0" L"\x3372" L"\0" L"\x3373" L"\0"
+  L"\x3374" L"\0" L"\x3375" L"\0" L"\x3376" L"\0" L"\x3380" L"\0" L"\x3381"
+  L"\0" L"\x3382" L"\0" L"\x3383" L"\0" L"\x3384" L"\0" L"\x3385" L"\0"
+  L"\x3386" L"\0" L"\x3387" L"\0" L"\x3388" L"\0" L"\x3389" L"\0" L"\x338a"
+  L"\0" L"\x338b" L"\0" L"\x338c" L"\0" L"\x338d" L"\0" L"\x338e" L"\0"
+  L"\x338f" L"\0" L"\x3390" L"\0" L"\x3391" L"\0" L"\x3392" L"\0" L"\x3393"
+  L"\0" L"\x3394" L"\0" L"\x3395" L"\0" L"\x3396" L"\0" L"\x3397" L"\0"
+  L"\x3398" L"\0" L"\x3399" L"\0" L"\x339a" L"\0" L"\x339b" L"\0" L"\x339c"
+  L"\0" L"\x339d" L"\0" L"\x339e" L"\0" L"\x339f" L"\0" L"\x33a0" L"\0"
+  L"\x33a1" L"\0" L"\x33a2" L"\0" L"\x33a3" L"\0" L"\x33a4" L"\0" L"\x33a5"
+  L"\0" L"\x33a6" L"\0" L"\x33a7" L"\0" L"\x33a8" L"\0" L"\x33a9" L"\0"
+  L"\x33aa" L"\0" L"\x33ab" L"\0" L"\x33ac" L"\0" L"\x33ad" L"\0" L"\x33ae"
+  L"\0" L"\x33af" L"\0" L"\x33b0" L"\0" L"\x33b1" L"\0" L"\x33b2" L"\0"
+  L"\x33b3" L"\0" L"\x33b4" L"\0" L"\x33b5" L"\0" L"\x33b6" L"\0" L"\x33b7"
+  L"\0" L"\x33b8" L"\0" L"\x33b9" L"\0" L"\x33ba" L"\0" L"\x33bb" L"\0"
+  L"\x33bc" L"\0" L"\x33bd" L"\0" L"\x33be" L"\0" L"\x33bf" L"\0" L"\x33c2"
+  L"\0" L"\x33c3" L"\0" L"\x33c4" L"\0" L"\x33c5" L"\0" L"\x33c6" L"\0"
+  L"\x33c7" L"\0" L"\x33c8" L"\0" L"\x33c9" L"\0" L"\x33ca" L"\0" L"\x33cb"
+  L"\0" L"\x33cc" L"\0" L"\x33cd" L"\0" L"\x33ce" L"\0" L"\x33cf" L"\0"
+  L"\x33d0" L"\0" L"\x33d1" L"\0" L"\x33d2" L"\0" L"\x33d3" L"\0" L"\x33d4"
+  L"\0" L"\x33d5" L"\0" L"\x33d6" L"\0" L"\x33d7" L"\0" L"\x33d8" L"\0"
+  L"\x33d9" L"\0" L"\x33da" L"\0" L"\x33db" L"\0" L"\x33dc" L"\0" L"\x33dd"
+  L"\0" L"\xfb00" L"\0" L"\xfb01" L"\0" L"\xfb02" L"\0" L"\xfb03" L"\0"
+  L"\xfb04" L"\0" L"\xfb06" L"\0" L"\xfb29" L"\0" L"\xfe00" L"\0" L"\xfe01"
+  L"\0" L"\xfe02" L"\0" L"\xfe03" L"\0" L"\xfe04" L"\0" L"\xfe05" L"\0"
+  L"\xfe06" L"\0" L"\xfe07" L"\0" L"\xfe08" L"\0" L"\xfe09" L"\0" L"\xfe0a"
+  L"\0" L"\xfe0b" L"\0" L"\xfe0c" L"\0" L"\xfe0d" L"\0" L"\xfe0e" L"\0"
+  L"\xfe0f" L"\0" L"\xfe4d" L"\0" L"\xfe4e" L"\0" L"\xfe4f" L"\0" L"\xfe50"
+  L"\0" L"\xfe52" L"\0" L"\xfe54" L"\0" L"\xfe55" L"\0" L"\xfe56" L"\0"
+  L"\xfe57" L"\0" L"\xfe59" L"\0" L"\xfe5a" L"\0" L"\xfe5b" L"\0" L"\xfe5c"
+  L"\0" L"\xfe5f" L"\0" L"\xfe60" L"\0" L"\xfe61" L"\0" L"\xfe62" L"\0"
+  L"\xfe63" L"\0" L"\xfe64" L"\0" L"\xfe65" L"\0" L"\xfe66" L"\0" L"\xfe68"
+  L"\0" L"\xfe69" L"\0" L"\xfe6a" L"\0" L"\xfe6b" L"\0" L"\xfeff" L"\0"
+  L"\xff01" L"\0" L"\xff02" L"\0" L"\xff03" L"\0" L"\xff04" L"\0" L"\xff05"
+  L"\0" L"\xff06" L"\0" L"\xff07" L"\0" L"\xff08" L"\0" L"\xff09" L"\0"
+  L"\xff0a" L"\0" L"\xff0b" L"\0" L"\xff0c" L"\0" L"\xff0d" L"\0" L"\xff0e"
+  L"\0" L"\xff0f" L"\0" L"\xff10" L"\0" L"\xff11" L"\0" L"\xff12" L"\0"
+  L"\xff13" L"\0" L"\xff14" L"\0" L"\xff15" L"\0" L"\xff16" L"\0" L"\xff17"
+  L"\0" L"\xff18" L"\0" L"\xff19" L"\0" L"\xff1a" L"\0" L"\xff1b" L"\0"
+  L"\xff1c" L"\0" L"\xff1d" L"\0" L"\xff1e" L"\0" L"\xff1f" L"\0" L"\xff20"
+  L"\0" L"\xff21" L"\0" L"\xff22" L"\0" L"\xff23" L"\0" L"\xff24" L"\0"
+  L"\xff25" L"\0" L"\xff26" L"\0" L"\xff27" L"\0" L"\xff28" L"\0" L"\xff29"
+  L"\0" L"\xff2a" L"\0" L"\xff2b" L"\0" L"\xff2c" L"\0" L"\xff2d" L"\0"
+  L"\xff2e" L"\0" L"\xff2f" L"\0" L"\xff30" L"\0" L"\xff31" L"\0" L"\xff32"
+  L"\0" L"\xff33" L"\0" L"\xff34" L"\0" L"\xff35" L"\0" L"\xff36" L"\0"
+  L"\xff37" L"\0" L"\xff38" L"\0" L"\xff39" L"\0" L"\xff3a" L"\0" L"\xff3b"
+  L"\0" L"\xff3c" L"\0" L"\xff3d" L"\0" L"\xff3e" L"\0" L"\xff3f" L"\0"
+  L"\xff40" L"\0" L"\xff41" L"\0" L"\xff42" L"\0" L"\xff43" L"\0" L"\xff44"
+  L"\0" L"\xff45" L"\0" L"\xff46" L"\0" L"\xff47" L"\0" L"\xff48" L"\0"
+  L"\xff49" L"\0" L"\xff4a" L"\0" L"\xff4b" L"\0" L"\xff4c" L"\0" L"\xff4d"
+  L"\0" L"\xff4e" L"\0" L"\xff4f" L"\0" L"\xff50" L"\0" L"\xff51" L"\0"
+  L"\xff52" L"\0" L"\xff53" L"\0" L"\xff54" L"\0" L"\xff55" L"\0" L"\xff56"
+  L"\0" L"\xff57" L"\0" L"\xff58" L"\0" L"\xff59" L"\0" L"\xff5a" L"\0"
+  L"\xff5b" L"\0" L"\xff5c" L"\0" L"\xff5d" L"\0" L"\xff5e" L"\0"
+  L"\x0001d400" L"\0" L"\x0001d401" L"\0" L"\x0001d402" L"\0" L"\x0001d403"
+  L"\0" L"\x0001d404" L"\0" L"\x0001d405" L"\0" L"\x0001d406" L"\0"
+  L"\x0001d407" L"\0" L"\x0001d408" L"\0" L"\x0001d409" L"\0" L"\x0001d40a"
+  L"\0" L"\x0001d40b" L"\0" L"\x0001d40c" L"\0" L"\x0001d40d" L"\0"
+  L"\x0001d40e" L"\0" L"\x0001d40f" L"\0" L"\x0001d410" L"\0" L"\x0001d411"
+  L"\0" L"\x0001d412" L"\0" L"\x0001d413" L"\0" L"\x0001d414" L"\0"
+  L"\x0001d415" L"\0" L"\x0001d416" L"\0" L"\x0001d417" L"\0" L"\x0001d418"
+  L"\0" L"\x0001d419" L"\0" L"\x0001d41a" L"\0" L"\x0001d41b" L"\0"
+  L"\x0001d41c" L"\0" L"\x0001d41d" L"\0" L"\x0001d41e" L"\0" L"\x0001d41f"
+  L"\0" L"\x0001d420" L"\0" L"\x0001d421" L"\0" L"\x0001d422" L"\0"
+  L"\x0001d423" L"\0" L"\x0001d424" L"\0" L"\x0001d425" L"\0" L"\x0001d426"
+  L"\0" L"\x0001d427" L"\0" L"\x0001d428" L"\0" L"\x0001d429" L"\0"
+  L"\x0001d42a" L"\0" L"\x0001d42b" L"\0" L"\x0001d42c" L"\0" L"\x0001d42d"
+  L"\0" L"\x0001d42e" L"\0" L"\x0001d42f" L"\0" L"\x0001d430" L"\0"
+  L"\x0001d431" L"\0" L"\x0001d432" L"\0" L"\x0001d433" L"\0" L"\x0001d434"
+  L"\0" L"\x0001d435" L"\0" L"\x0001d436" L"\0" L"\x0001d437" L"\0"
+  L"\x0001d438" L"\0" L"\x0001d439" L"\0" L"\x0001d43a" L"\0" L"\x0001d43b"
+  L"\0" L"\x0001d43c" L"\0" L"\x0001d43d" L"\0" L"\x0001d43e" L"\0"
+  L"\x0001d43f" L"\0" L"\x0001d440" L"\0" L"\x0001d441" L"\0" L"\x0001d442"
+  L"\0" L"\x0001d443" L"\0" L"\x0001d444" L"\0" L"\x0001d445" L"\0"
+  L"\x0001d446" L"\0" L"\x0001d447" L"\0" L"\x0001d448" L"\0" L"\x0001d449"
+  L"\0" L"\x0001d44a" L"\0" L"\x0001d44b" L"\0" L"\x0001d44c" L"\0"
+  L"\x0001d44d" L"\0" L"\x0001d44e" L"\0" L"\x0001d44f" L"\0" L"\x0001d450"
+  L"\0" L"\x0001d451" L"\0" L"\x0001d452" L"\0" L"\x0001d453" L"\0"
+  L"\x0001d454" L"\0" L"\x0001d456" L"\0" L"\x0001d457" L"\0" L"\x0001d458"
+  L"\0" L"\x0001d459" L"\0" L"\x0001d45a" L"\0" L"\x0001d45b" L"\0"
+  L"\x0001d45c" L"\0" L"\x0001d45d" L"\0" L"\x0001d45e" L"\0" L"\x0001d45f"
+  L"\0" L"\x0001d460" L"\0" L"\x0001d461" L"\0" L"\x0001d462" L"\0"
+  L"\x0001d463" L"\0" L"\x0001d464" L"\0" L"\x0001d465" L"\0" L"\x0001d466"
+  L"\0" L"\x0001d467" L"\0" L"\x0001d468" L"\0" L"\x0001d469" L"\0"
+  L"\x0001d46a" L"\0" L"\x0001d46b" L"\0" L"\x0001d46c" L"\0" L"\x0001d46d"
+  L"\0" L"\x0001d46e" L"\0" L"\x0001d46f" L"\0" L"\x0001d470" L"\0"
+  L"\x0001d471" L"\0" L"\x0001d472" L"\0" L"\x0001d473" L"\0" L"\x0001d474"
+  L"\0" L"\x0001d475" L"\0" L"\x0001d476" L"\0" L"\x0001d477" L"\0"
+  L"\x0001d478" L"\0" L"\x0001d479" L"\0" L"\x0001d47a" L"\0" L"\x0001d47b"
+  L"\0" L"\x0001d47c" L"\0" L"\x0001d47d" L"\0" L"\x0001d47e" L"\0"
+  L"\x0001d47f" L"\0" L"\x0001d480" L"\0" L"\x0001d481" L"\0" L"\x0001d482"
+  L"\0" L"\x0001d483" L"\0" L"\x0001d484" L"\0" L"\x0001d485" L"\0"
+  L"\x0001d486" L"\0" L"\x0001d487" L"\0" L"\x0001d488" L"\0" L"\x0001d489"
+  L"\0" L"\x0001d48a" L"\0" L"\x0001d48b" L"\0" L"\x0001d48c" L"\0"
+  L"\x0001d48d" L"\0" L"\x0001d48e" L"\0" L"\x0001d48f" L"\0" L"\x0001d490"
+  L"\0" L"\x0001d491" L"\0" L"\x0001d492" L"\0" L"\x0001d493" L"\0"
+  L"\x0001d494" L"\0" L"\x0001d495" L"\0" L"\x0001d496" L"\0" L"\x0001d497"
+  L"\0" L"\x0001d498" L"\0" L"\x0001d499" L"\0" L"\x0001d49a" L"\0"
+  L"\x0001d49b" L"\0" L"\x0001d49c" L"\0" L"\x0001d49e" L"\0" L"\x0001d49f"
+  L"\0" L"\x0001d4a2" L"\0" L"\x0001d4a5" L"\0" L"\x0001d4a6" L"\0"
+  L"\x0001d4a9" L"\0" L"\x0001d4aa" L"\0" L"\x0001d4ab" L"\0" L"\x0001d4ac"
+  L"\0" L"\x0001d4ae" L"\0" L"\x0001d4af" L"\0" L"\x0001d4b0" L"\0"
+  L"\x0001d4b1" L"\0" L"\x0001d4b2" L"\0" L"\x0001d4b3" L"\0" L"\x0001d4b4"
+  L"\0" L"\x0001d4b5" L"\0" L"\x0001d4b6" L"\0" L"\x0001d4b7" L"\0"
+  L"\x0001d4b8" L"\0" L"\x0001d4b9" L"\0" L"\x0001d4bb" L"\0" L"\x0001d4bd"
+  L"\0" L"\x0001d4be" L"\0" L"\x0001d4bf" L"\0" L"\x0001d4c0" L"\0"
+  L"\x0001d4c2" L"\0" L"\x0001d4c3" L"\0" L"\x0001d4c5" L"\0" L"\x0001d4c6"
+  L"\0" L"\x0001d4c7" L"\0" L"\x0001d4c8" L"\0" L"\x0001d4c9" L"\0"
+  L"\x0001d4ca" L"\0" L"\x0001d4cb" L"\0" L"\x0001d4cc" L"\0" L"\x0001d4cd"
+  L"\0" L"\x0001d4ce" L"\0" L"\x0001d4cf" L"\0" L"\x0001d4d0" L"\0"
+  L"\x0001d4d1" L"\0" L"\x0001d4d2" L"\0" L"\x0001d4d3" L"\0" L"\x0001d4d4"
+  L"\0" L"\x0001d4d5" L"\0" L"\x0001d4d6" L"\0" L"\x0001d4d7" L"\0"
+  L"\x0001d4d8" L"\0" L"\x0001d4d9" L"\0" L"\x0001d4da" L"\0" L"\x0001d4db"
+  L"\0" L"\x0001d4dc" L"\0" L"\x0001d4dd" L"\0" L"\x0001d4de" L"\0"
+  L"\x0001d4df" L"\0" L"\x0001d4e0" L"\0" L"\x0001d4e1" L"\0" L"\x0001d4e2"
+  L"\0" L"\x0001d4e3" L"\0" L"\x0001d4e4" L"\0" L"\x0001d4e5" L"\0"
+  L"\x0001d4e6" L"\0" L"\x0001d4e7" L"\0" L"\x0001d4e8" L"\0" L"\x0001d4e9"
+  L"\0" L"\x0001d4ea" L"\0" L"\x0001d4eb" L"\0" L"\x0001d4ec" L"\0"
+  L"\x0001d4ed" L"\0" L"\x0001d4ee" L"\0" L"\x0001d4ef" L"\0" L"\x0001d4f0"
+  L"\0" L"\x0001d4f1" L"\0" L"\x0001d4f2" L"\0" L"\x0001d4f3" L"\0"
+  L"\x0001d4f4" L"\0" L"\x0001d4f5" L"\0" L"\x0001d4f6" L"\0" L"\x0001d4f7"
+  L"\0" L"\x0001d4f8" L"\0" L"\x0001d4f9" L"\0" L"\x0001d4fa" L"\0"
+  L"\x0001d4fb" L"\0" L"\x0001d4fc" L"\0" L"\x0001d4fd" L"\0" L"\x0001d4fe"
+  L"\0" L"\x0001d4ff" L"\0" L"\x0001d500" L"\0" L"\x0001d501" L"\0"
+  L"\x0001d502" L"\0" L"\x0001d503" L"\0" L"\x0001d504" L"\0" L"\x0001d505"
+  L"\0" L"\x0001d507" L"\0" L"\x0001d508" L"\0" L"\x0001d509" L"\0"
+  L"\x0001d50a" L"\0" L"\x0001d50d" L"\0" L"\x0001d50e" L"\0" L"\x0001d50f"
+  L"\0" L"\x0001d510" L"\0" L"\x0001d511" L"\0" L"\x0001d512" L"\0"
+  L"\x0001d513" L"\0" L"\x0001d514" L"\0" L"\x0001d516" L"\0" L"\x0001d517"
+  L"\0" L"\x0001d518" L"\0" L"\x0001d519" L"\0" L"\x0001d51a" L"\0"
+  L"\x0001d51b" L"\0" L"\x0001d51c" L"\0" L"\x0001d51e" L"\0" L"\x0001d51f"
+  L"\0" L"\x0001d520" L"\0" L"\x0001d521" L"\0" L"\x0001d522" L"\0"
+  L"\x0001d523" L"\0" L"\x0001d524" L"\0" L"\x0001d525" L"\0" L"\x0001d526"
+  L"\0" L"\x0001d527" L"\0" L"\x0001d528" L"\0" L"\x0001d529" L"\0"
+  L"\x0001d52a" L"\0" L"\x0001d52b" L"\0" L"\x0001d52c" L"\0" L"\x0001d52d"
+  L"\0" L"\x0001d52e" L"\0" L"\x0001d52f" L"\0" L"\x0001d530" L"\0"
+  L"\x0001d531" L"\0" L"\x0001d532" L"\0" L"\x0001d533" L"\0" L"\x0001d534"
+  L"\0" L"\x0001d535" L"\0" L"\x0001d536" L"\0" L"\x0001d537" L"\0"
+  L"\x0001d538" L"\0" L"\x0001d539" L"\0" L"\x0001d53b" L"\0" L"\x0001d53c"
+  L"\0" L"\x0001d53d" L"\0" L"\x0001d53e" L"\0" L"\x0001d540" L"\0"
+  L"\x0001d541" L"\0" L"\x0001d542" L"\0" L"\x0001d543" L"\0" L"\x0001d544"
+  L"\0" L"\x0001d546" L"\0" L"\x0001d54a" L"\0" L"\x0001d54b" L"\0"
+  L"\x0001d54c" L"\0" L"\x0001d54d" L"\0" L"\x0001d54e" L"\0" L"\x0001d54f"
+  L"\0" L"\x0001d550" L"\0" L"\x0001d552" L"\0" L"\x0001d553" L"\0"
+  L"\x0001d554" L"\0" L"\x0001d555" L"\0" L"\x0001d556" L"\0" L"\x0001d557"
+  L"\0" L"\x0001d558" L"\0" L"\x0001d559" L"\0" L"\x0001d55a" L"\0"
+  L"\x0001d55b" L"\0" L"\x0001d55c" L"\0" L"\x0001d55d" L"\0" L"\x0001d55e"
+  L"\0" L"\x0001d55f" L"\0" L"\x0001d560" L"\0" L"\x0001d561" L"\0"
+  L"\x0001d562" L"\0" L"\x0001d563" L"\0" L"\x0001d564" L"\0" L"\x0001d565"
+  L"\0" L"\x0001d566" L"\0" L"\x0001d567" L"\0" L"\x0001d568" L"\0"
+  L"\x0001d569" L"\0" L"\x0001d56a" L"\0" L"\x0001d56b" L"\0" L"\x0001d56c"
+  L"\0" L"\x0001d56d" L"\0" L"\x0001d56e" L"\0" L"\x0001d56f" L"\0"
+  L"\x0001d570" L"\0" L"\x0001d571" L"\0" L"\x0001d572" L"\0" L"\x0001d573"
+  L"\0" L"\x0001d574" L"\0" L"\x0001d575" L"\0" L"\x0001d576" L"\0"
+  L"\x0001d577" L"\0" L"\x0001d578" L"\0" L"\x0001d579" L"\0" L"\x0001d57a"
+  L"\0" L"\x0001d57b" L"\0" L"\x0001d57c" L"\0" L"\x0001d57d" L"\0"
+  L"\x0001d57e" L"\0" L"\x0001d57f" L"\0" L"\x0001d580" L"\0" L"\x0001d581"
+  L"\0" L"\x0001d582" L"\0" L"\x0001d583" L"\0" L"\x0001d584" L"\0"
+  L"\x0001d585" L"\0" L"\x0001d586" L"\0" L"\x0001d587" L"\0" L"\x0001d588"
+  L"\0" L"\x0001d589" L"\0" L"\x0001d58a" L"\0" L"\x0001d58b" L"\0"
+  L"\x0001d58c" L"\0" L"\x0001d58d" L"\0" L"\x0001d58e" L"\0" L"\x0001d58f"
+  L"\0" L"\x0001d590" L"\0" L"\x0001d591" L"\0" L"\x0001d592" L"\0"
+  L"\x0001d593" L"\0" L"\x0001d594" L"\0" L"\x0001d595" L"\0" L"\x0001d596"
+  L"\0" L"\x0001d597" L"\0" L"\x0001d598" L"\0" L"\x0001d599" L"\0"
+  L"\x0001d59a" L"\0" L"\x0001d59b" L"\0" L"\x0001d59c" L"\0" L"\x0001d59d"
+  L"\0" L"\x0001d59e" L"\0" L"\x0001d59f" L"\0" L"\x0001d5a0" L"\0"
+  L"\x0001d5a1" L"\0" L"\x0001d5a2" L"\0" L"\x0001d5a3" L"\0" L"\x0001d5a4"
+  L"\0" L"\x0001d5a5" L"\0" L"\x0001d5a6" L"\0" L"\x0001d5a7" L"\0"
+  L"\x0001d5a8" L"\0" L"\x0001d5a9" L"\0" L"\x0001d5aa" L"\0" L"\x0001d5ab"
+  L"\0" L"\x0001d5ac" L"\0" L"\x0001d5ad" L"\0" L"\x0001d5ae" L"\0"
+  L"\x0001d5af" L"\0" L"\x0001d5b0" L"\0" L"\x0001d5b1" L"\0" L"\x0001d5b2"
+  L"\0" L"\x0001d5b3" L"\0" L"\x0001d5b4" L"\0" L"\x0001d5b5" L"\0"
+  L"\x0001d5b6" L"\0" L"\x0001d5b7" L"\0" L"\x0001d5b8" L"\0" L"\x0001d5b9"
+  L"\0" L"\x0001d5ba" L"\0" L"\x0001d5bb" L"\0" L"\x0001d5bc" L"\0"
+  L"\x0001d5bd" L"\0" L"\x0001d5be" L"\0" L"\x0001d5bf" L"\0" L"\x0001d5c0"
+  L"\0" L"\x0001d5c1" L"\0" L"\x0001d5c2" L"\0" L"\x0001d5c3" L"\0"
+  L"\x0001d5c4" L"\0" L"\x0001d5c5" L"\0" L"\x0001d5c6" L"\0" L"\x0001d5c7"
+  L"\0" L"\x0001d5c8" L"\0" L"\x0001d5c9" L"\0" L"\x0001d5ca" L"\0"
+  L"\x0001d5cb" L"\0" L"\x0001d5cc" L"\0" L"\x0001d5cd" L"\0" L"\x0001d5ce"
+  L"\0" L"\x0001d5cf" L"\0" L"\x0001d5d0" L"\0" L"\x0001d5d1" L"\0"
+  L"\x0001d5d2" L"\0" L"\x0001d5d3" L"\0" L"\x0001d5d4" L"\0" L"\x0001d5d5"
+  L"\0" L"\x0001d5d6" L"\0" L"\x0001d5d7" L"\0" L"\x0001d5d8" L"\0"
+  L"\x0001d5d9" L"\0" L"\x0001d5da" L"\0" L"\x0001d5db" L"\0" L"\x0001d5dc"
+  L"\0" L"\x0001d5dd" L"\0" L"\x0001d5de" L"\0" L"\x0001d5df" L"\0"
+  L"\x0001d5e0" L"\0" L"\x0001d5e1" L"\0" L"\x0001d5e2" L"\0" L"\x0001d5e3"
+  L"\0" L"\x0001d5e4" L"\0" L"\x0001d5e5" L"\0" L"\x0001d5e6" L"\0"
+  L"\x0001d5e7" L"\0" L"\x0001d5e8" L"\0" L"\x0001d5e9" L"\0" L"\x0001d5ea"
+  L"\0" L"\x0001d5eb" L"\0" L"\x0001d5ec" L"\0" L"\x0001d5ed" L"\0"
+  L"\x0001d5ee" L"\0" L"\x0001d5ef" L"\0" L"\x0001d5f0" L"\0" L"\x0001d5f1"
+  L"\0" L"\x0001d5f2" L"\0" L"\x0001d5f3" L"\0" L"\x0001d5f4" L"\0"
+  L"\x0001d5f5" L"\0" L"\x0001d5f6" L"\0" L"\x0001d5f7" L"\0" L"\x0001d5f8"
+  L"\0" L"\x0001d5f9" L"\0" L"\x0001d5fa" L"\0" L"\x0001d5fb" L"\0"
+  L"\x0001d5fc" L"\0" L"\x0001d5fd" L"\0" L"\x0001d5fe" L"\0" L"\x0001d5ff"
+  L"\0" L"\x0001d600" L"\0" L"\x0001d601" L"\0" L"\x0001d602" L"\0"
+  L"\x0001d603" L"\0" L"\x0001d604" L"\0" L"\x0001d605" L"\0" L"\x0001d606"
+  L"\0" L"\x0001d607" L"\0" L"\x0001d608" L"\0" L"\x0001d609" L"\0"
+  L"\x0001d60a" L"\0" L"\x0001d60b" L"\0" L"\x0001d60c" L"\0" L"\x0001d60d"
+  L"\0" L"\x0001d60e" L"\0" L"\x0001d60f" L"\0" L"\x0001d610" L"\0"
+  L"\x0001d611" L"\0" L"\x0001d612" L"\0" L"\x0001d613" L"\0" L"\x0001d614"
+  L"\0" L"\x0001d615" L"\0" L"\x0001d616" L"\0" L"\x0001d617" L"\0"
+  L"\x0001d618" L"\0" L"\x0001d619" L"\0" L"\x0001d61a" L"\0" L"\x0001d61b"
+  L"\0" L"\x0001d61c" L"\0" L"\x0001d61d" L"\0" L"\x0001d61e" L"\0"
+  L"\x0001d61f" L"\0" L"\x0001d620" L"\0" L"\x0001d621" L"\0" L"\x0001d622"
+  L"\0" L"\x0001d623" L"\0" L"\x0001d624" L"\0" L"\x0001d625" L"\0"
+  L"\x0001d626" L"\0" L"\x0001d627" L"\0" L"\x0001d628" L"\0" L"\x0001d629"
+  L"\0" L"\x0001d62a" L"\0" L"\x0001d62b" L"\0" L"\x0001d62c" L"\0"
+  L"\x0001d62d" L"\0" L"\x0001d62e" L"\0" L"\x0001d62f" L"\0" L"\x0001d630"
+  L"\0" L"\x0001d631" L"\0" L"\x0001d632" L"\0" L"\x0001d633" L"\0"
+  L"\x0001d634" L"\0" L"\x0001d635" L"\0" L"\x0001d636" L"\0" L"\x0001d637"
+  L"\0" L"\x0001d638" L"\0" L"\x0001d639" L"\0" L"\x0001d63a" L"\0"
+  L"\x0001d63b" L"\0" L"\x0001d63c" L"\0" L"\x0001d63d" L"\0" L"\x0001d63e"
+  L"\0" L"\x0001d63f" L"\0" L"\x0001d640" L"\0" L"\x0001d641" L"\0"
+  L"\x0001d642" L"\0" L"\x0001d643" L"\0" L"\x0001d644" L"\0" L"\x0001d645"
+  L"\0" L"\x0001d646" L"\0" L"\x0001d647" L"\0" L"\x0001d648" L"\0"
+  L"\x0001d649" L"\0" L"\x0001d64a" L"\0" L"\x0001d64b" L"\0" L"\x0001d64c"
+  L"\0" L"\x0001d64d" L"\0" L"\x0001d64e" L"\0" L"\x0001d64f" L"\0"
+  L"\x0001d650" L"\0" L"\x0001d651" L"\0" L"\x0001d652" L"\0" L"\x0001d653"
+  L"\0" L"\x0001d654" L"\0" L"\x0001d655" L"\0" L"\x0001d656" L"\0"
+  L"\x0001d657" L"\0" L"\x0001d658" L"\0" L"\x0001d659" L"\0" L"\x0001d65a"
+  L"\0" L"\x0001d65b" L"\0" L"\x0001d65c" L"\0" L"\x0001d65d" L"\0"
+  L"\x0001d65e" L"\0" L"\x0001d65f" L"\0" L"\x0001d660" L"\0" L"\x0001d661"
+  L"\0" L"\x0001d662" L"\0" L"\x0001d663" L"\0" L"\x0001d664" L"\0"
+  L"\x0001d665" L"\0" L"\x0001d666" L"\0" L"\x0001d667" L"\0" L"\x0001d668"
+  L"\0" L"\x0001d669" L"\0" L"\x0001d66a" L"\0" L"\x0001d66b" L"\0"
+  L"\x0001d66c" L"\0" L"\x0001d66d" L"\0" L"\x0001d66e" L"\0" L"\x0001d66f"
+  L"\0" L"\x0001d670" L"\0" L"\x0001d671" L"\0" L"\x0001d672" L"\0"
+  L"\x0001d673" L"\0" L"\x0001d674" L"\0" L"\x0001d675" L"\0" L"\x0001d676"
+  L"\0" L"\x0001d677" L"\0" L"\x0001d678" L"\0" L"\x0001d679" L"\0"
+  L"\x0001d67a" L"\0" L"\x0001d67b" L"\0" L"\x0001d67c" L"\0" L"\x0001d67d"
+  L"\0" L"\x0001d67e" L"\0" L"\x0001d67f" L"\0" L"\x0001d680" L"\0"
+  L"\x0001d681" L"\0" L"\x0001d682" L"\0" L"\x0001d683" L"\0" L"\x0001d684"
+  L"\0" L"\x0001d685" L"\0" L"\x0001d686" L"\0" L"\x0001d687" L"\0"
+  L"\x0001d688" L"\0" L"\x0001d689" L"\0" L"\x0001d68a" L"\0" L"\x0001d68b"
+  L"\0" L"\x0001d68c" L"\0" L"\x0001d68d" L"\0" L"\x0001d68e" L"\0"
+  L"\x0001d68f" L"\0" L"\x0001d690" L"\0" L"\x0001d691" L"\0" L"\x0001d692"
+  L"\0" L"\x0001d693" L"\0" L"\x0001d694" L"\0" L"\x0001d695" L"\0"
+  L"\x0001d696" L"\0" L"\x0001d697" L"\0" L"\x0001d698" L"\0" L"\x0001d699"
+  L"\0" L"\x0001d69a" L"\0" L"\x0001d69b" L"\0" L"\x0001d69c" L"\0"
+  L"\x0001d69d" L"\0" L"\x0001d69e" L"\0" L"\x0001d69f" L"\0" L"\x0001d6a0"
+  L"\0" L"\x0001d6a1" L"\0" L"\x0001d6a2" L"\0" L"\x0001d6a3" L"\0"
+  L"\x0001d7ce" L"\0" L"\x0001d7cf" L"\0" L"\x0001d7d0" L"\0" L"\x0001d7d1"
+  L"\0" L"\x0001d7d2" L"\0" L"\x0001d7d3" L"\0" L"\x0001d7d4" L"\0"
+  L"\x0001d7d5" L"\0" L"\x0001d7d6" L"\0" L"\x0001d7d7" L"\0" L"\x0001d7d8"
+  L"\0" L"\x0001d7d9" L"\0" L"\x0001d7da" L"\0" L"\x0001d7db" L"\0"
+  L"\x0001d7dc" L"\0" L"\x0001d7dd" L"\0" L"\x0001d7de" L"\0" L"\x0001d7df"
+  L"\0" L"\x0001d7e0" L"\0" L"\x0001d7e1" L"\0" L"\x0001d7e2" L"\0"
+  L"\x0001d7e3" L"\0" L"\x0001d7e4" L"\0" L"\x0001d7e5" L"\0" L"\x0001d7e6"
+  L"\0" L"\x0001d7e7" L"\0" L"\x0001d7e8" L"\0" L"\x0001d7e9" L"\0"
+  L"\x0001d7ea" L"\0" L"\x0001d7eb" L"\0" L"\x0001d7ec" L"\0" L"\x0001d7ed"
+  L"\0" L"\x0001d7ee" L"\0" L"\x0001d7ef" L"\0" L"\x0001d7f0" L"\0"
+  L"\x0001d7f1" L"\0" L"\x0001d7f2" L"\0" L"\x0001d7f3" L"\0" L"\x0001d7f4"
+  L"\0" L"\x0001d7f5" L"\0" L"\x0001d7f6" L"\0" L"\x0001d7f7" L"\0"
+  L"\x0001d7f8" L"\0" L"\x0001d7f9" L"\0" L"\x0001d7fa" L"\0" L"\x0001d7fb"
+  L"\0" L"\x0001d7fc" L"\0" L"\x0001d7fd" L"\0" L"\x0001d7fe" L"\0"
+  L"\x0001d7ff";
 static const uint32_t translit_to_idx[] =
 {
      0,    3,    8,   12,   15,   20,   23,   26,   30,   37,   44,   51,
@@ -469,47 +470,47 @@ static const uint32_t translit_to_idx[] =
    145,  148,  151,  154,  157,  160,  163,  166,  169,  172,  175,  178,
    180,  183,  186,  189,  192,  196,  199,  202,  205,  208,  211,  214,
    217,  221,  224,  227,  230,  233,  237,  242,  245,  248,  252,  257,
-   260,  263,  267,  271,  275,  279,  282,  284,  286,  288,  290,  294,
-   299,  304,  309,  312,  317,  322,  325,  328,  331,  334,  337,  340,
-   343,  346,  349,  352,  356,  359,  362,  365,  368,  371,  376,  382,
-   385,  390,  393,  396,  399,  402,  405,  408,  411,  414,  417,  420,
-   423,  426,  429,  432,  435,  442,  449,  456,  463,  470,  477,  484,
-   491,  498,  505,  512,  519,  524,  527,  531,  536,  540,  543,  547,
-   552,  558,  562,  565,  569,  574,  577,  580,  583,  586,  589,  593,
-   598,  602,  605,  609,  614,  620,  624,  627,  631,  636,  639,  642,
-   645,  648,  652,  656,  661,  665,  669,  674,  677,  680,  683,  686,
-   689,  692,  695,  699,  703,  707,  711,  716,  721,  726,  731,  736,
-   741,  746,  751,  756,  761,  765,  769,  773,  777,  781,  785,  789,
-   793,  798,  803,  808,  813,  818,  823,  828,  833,  838,  842,  847,
-   852,  856,  860,  864,  868,  872,  877,  880,  884,  889,  894,  899,
-   904,  909,  914,  919,  924,  929,  935,  941,  947,  953,  959,  965,
-   971,  977,  983,  989,  995, 1000, 1005, 1010, 1015, 1020, 1025, 1030,
-  1035, 1040, 1046, 1052, 1058, 1064, 1070, 1076, 1082, 1088, 1094, 1100,
-  1106, 1110, 1114, 1118, 1122, 1126, 1130, 1134, 1138, 1142, 1147, 1152,
-  1157, 1162, 1167, 1172, 1177, 1182, 1187, 1192, 1197, 1202, 1207, 1212,
-  1217, 1222, 1227, 1232, 1237, 1242, 1247, 1252, 1257, 1262, 1267, 1272,
-  1277, 1282, 1287, 1292, 1297, 1302, 1307, 1312, 1317, 1322, 1327, 1332,
-  1337, 1342, 1347, 1352, 1357, 1362, 1367, 1372, 1377, 1382, 1387, 1392,
-  1397, 1402, 1407, 1412, 1417, 1422, 1427, 1432, 1437, 1442, 1447, 1452,
-  1457, 1462, 1467, 1472, 1477, 1482, 1487, 1492, 1497, 1502, 1507, 1512,
-  1517, 1522, 1527, 1532, 1537, 1542, 1547, 1552, 1557, 1562, 1567, 1572,
-  1577, 1582, 1587, 1592, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616,
-  1619, 1622, 1625, 1628, 1633, 1637, 1642, 1645, 1648, 1654, 1660, 1666,
-  1672, 1678, 1684, 1690, 1696, 1702, 1708, 1714, 1720, 1726, 1732, 1738,
-  1744, 1750, 1756, 1762, 1768, 1774, 1780, 1786, 1792, 1798, 1804, 1810,
-  1816, 1822, 1828, 1833, 1837, 1841, 1846, 1850, 1854, 1858, 1862, 1866,
-  1870, 1874, 1878, 1882, 1886, 1891, 1897, 1901, 1905, 1909, 1913, 1917,
-  1921, 1925, 1930, 1935, 1940, 1945, 1949, 1953, 1957, 1961, 1965, 1969,
-  1973, 1977, 1981, 1985, 1991, 1997, 2002, 2008, 2014, 2020, 2025, 2031,
-  2036, 2043, 2047, 2052, 2057, 2062, 2067, 2074, 2083, 2087, 2091, 2095,
-  2099, 2103, 2107, 2111, 2115, 2119, 2123, 2127, 2131, 2135, 2139, 2143,
-  2147, 2153, 2157, 2161, 2165, 2171, 2176, 2180, 2184, 2188, 2192, 2196,
-  2200, 2204, 2208, 2212, 2216, 2221, 2225, 2229, 2234, 2239, 2243, 2249,
-  2254, 2258, 2262, 2266, 2270, 2274, 2278, 2282, 2287, 2292, 2296, 2299,
-  2301, 2303, 2305, 2307, 2309, 2311, 2313, 2315, 2317, 2319, 2321, 2323,
-  2325, 2327, 2329, 2331, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355,
+   260,  263,  267,  270,  274,  278,  282,  285,  287,  289,  291,  293,
+   297,  302,  307,  312,  315,  320,  325,  328,  331,  334,  337,  340,
+   343,  346,  349,  352,  355,  359,  362,  365,  368,  371,  374,  379,
+   385,  388,  393,  396,  399,  402,  405,  408,  411,  414,  417,  420,
+   423,  426,  429,  432,  435,  438,  445,  452,  459,  466,  473,  480,
+   487,  494,  501,  508,  515,  522,  527,  530,  534,  539,  543,  546,
+   550,  555,  561,  565,  568,  572,  577,  580,  583,  586,  589,  592,
+   596,  601,  605,  608,  612,  617,  623,  627,  630,  634,  639,  642,
+   645,  648,  651,  655,  659,  664,  668,  672,  677,  680,  683,  686,
+   689,  692,  695,  698,  702,  706,  710,  714,  719,  724,  729,  734,
+   739,  744,  749,  754,  759,  764,  768,  772,  776,  780,  784,  788,
+   792,  796,  801,  806,  811,  816,  821,  826,  831,  836,  841,  845,
+   850,  855,  859,  863,  867,  871,  875,  880,  883,  887,  892,  897,
+   902,  907,  912,  917,  922,  927,  932,  938,  944,  950,  956,  962,
+   968,  974,  980,  986,  992,  998, 1003, 1008, 1013, 1018, 1023, 1028,
+  1033, 1038, 1043, 1049, 1055, 1061, 1067, 1073, 1079, 1085, 1091, 1097,
+  1103, 1109, 1113, 1117, 1121, 1125, 1129, 1133, 1137, 1141, 1145, 1150,
+  1155, 1160, 1165, 1170, 1175, 1180, 1185, 1190, 1195, 1200, 1205, 1210,
+  1215, 1220, 1225, 1230, 1235, 1240, 1245, 1250, 1255, 1260, 1265, 1270,
+  1275, 1280, 1285, 1290, 1295, 1300, 1305, 1310, 1315, 1320, 1325, 1330,
+  1335, 1340, 1345, 1350, 1355, 1360, 1365, 1370, 1375, 1380, 1385, 1390,
+  1395, 1400, 1405, 1410, 1415, 1420, 1425, 1430, 1435, 1440, 1445, 1450,
+  1455, 1460, 1465, 1470, 1475, 1480, 1485, 1490, 1495, 1500, 1505, 1510,
+  1515, 1520, 1525, 1530, 1535, 1540, 1545, 1550, 1555, 1560, 1565, 1570,
+  1575, 1580, 1585, 1590, 1595, 1598, 1601, 1604, 1607, 1610, 1613, 1616,
+  1619, 1622, 1625, 1628, 1631, 1636, 1640, 1645, 1648, 1651, 1657, 1663,
+  1669, 1675, 1681, 1687, 1693, 1699, 1705, 1711, 1717, 1723, 1729, 1735,
+  1741, 1747, 1753, 1759, 1765, 1771, 1777, 1783, 1789, 1795, 1801, 1807,
+  1813, 1819, 1825, 1831, 1836, 1840, 1844, 1849, 1853, 1857, 1861, 1865,
+  1869, 1873, 1877, 1881, 1885, 1889, 1894, 1900, 1904, 1908, 1912, 1916,
+  1920, 1924, 1928, 1933, 1938, 1943, 1948, 1952, 1956, 1960, 1964, 1968,
+  1972, 1976, 1980, 1984, 1988, 1994, 2000, 2005, 2011, 2017, 2023, 2028,
+  2034, 2039, 2046, 2050, 2055, 2060, 2065, 2070, 2077, 2086, 2090, 2094,
+  2098, 2102, 2106, 2110, 2114, 2118, 2122, 2126, 2130, 2134, 2138, 2142,
+  2146, 2150, 2156, 2160, 2164, 2168, 2174, 2179, 2183, 2187, 2191, 2195,
+  2199, 2203, 2207, 2211, 2215, 2219, 2224, 2228, 2232, 2237, 2242, 2246,
+  2252, 2257, 2261, 2265, 2269, 2273, 2277, 2281, 2285, 2290, 2295, 2299,
+  2302, 2304, 2306, 2308, 2310, 2312, 2314, 2316, 2318, 2320, 2322, 2324,
+  2326, 2328, 2330, 2332, 2334, 2337, 2340, 2343, 2346, 2349, 2352, 2355,
   2358, 2361, 2364, 2367, 2370, 2373, 2376, 2379, 2382, 2385, 2388, 2391,
-  2394, 2397, 2400, 2403, 2406, 2408, 2411, 2414, 2417, 2420, 2423, 2426,
+  2394, 2397, 2400, 2403, 2406, 2409, 2411, 2414, 2417, 2420, 2423, 2426,
   2429, 2432, 2435, 2438, 2441, 2444, 2447, 2450, 2453, 2456, 2459, 2462,
   2465, 2468, 2471, 2474, 2477, 2480, 2483, 2486, 2489, 2492, 2495, 2498,
   2501, 2504, 2507, 2510, 2513, 2516, 2519, 2522, 2525, 2528, 2531, 2534,
@@ -575,7 +576,7 @@ static const uint32_t translit_to_idx[] =
   4661, 4664, 4667, 4670, 4673, 4676, 4679, 4682, 4685, 4688, 4691, 4694,
   4697, 4700, 4703, 4706, 4709, 4712, 4715, 4718, 4721, 4724, 4727, 4730,
   4733, 4736, 4739, 4742, 4745, 4748, 4751, 4754, 4757, 4760, 4763, 4766,
-  4769, 4772, 4775, 4778, 4781, 4784, 4787, 4790
+  4769, 4772, 4775, 4778, 4781, 4784, 4787, 4790, 4793
 };
 static const wchar_t translit_to_tbl[] =
   L" \0" L"\0" L"(C)\0" L"\0" L"<<\0" L"\0" L"-\0" L"\0" L"(R)\0" L"\0" L"u\0"
@@ -591,13 +592,13 @@ static const wchar_t translit_to_tbl[] =
   L"\0" L"'\0" L"\0" L"'\0" L"\0" L",\0" L"\0" L"'\0" L"\0" L"\"\0" L"\0"
   L"\"\0" L"\0" L",,\0" L"\0" L"\"\0" L"\0" L"+\0" L"\0" L"o\0" L"\0" L".\0"
   L"\0" L"..\0" L"\0" L"...\0" L"\0" L" \0" L"\0" L"`\0" L"\0" L"``\0" L"\0"
-  L"```\0" L"\0" L"<\0" L"\0" L">\0" L"\0" L"!!\0" L"\0" L"??\0" L"\0" L"?!\0"
-  L"\0" L"!?\0" L"\0" L" \0" L"\0" L"\0" L"\0" L"\0" L"\0" L"\0" L"\0" L"\0"
-  L"\0" L"Rs\0" L"\0" L"EUR\0" L"\0" L"a/c\0" L"\0" L"a/s\0" L"\0" L"C\0"
-  L"\0" L"c/o\0" L"\0" L"c/u\0" L"\0" L"g\0" L"\0" L"H\0" L"\0" L"H\0" L"\0"
-  L"H\0" L"\0" L"h\0" L"\0" L"I\0" L"\0" L"I\0" L"\0" L"L\0" L"\0" L"l\0"
-  L"\0" L"N\0" L"\0" L"No\0" L"\0" L"P\0" L"\0" L"Q\0" L"\0" L"R\0" L"\0"
-  L"R\0" L"\0" L"R\0" L"\0" L"TEL\0" L"\0" L"(TM)\0" L"\0" L"Z\0" L"\0"
+  L"```\0" L"\0" L"<\0" L"\0" L">\0" L"\0" L"!!\0" L"\0" L"/\0" L"\0" L"??\0"
+  L"\0" L"?!\0" L"\0" L"!?\0" L"\0" L" \0" L"\0" L"\0" L"\0" L"\0" L"\0" L"\0"
+  L"\0" L"\0" L"\0" L"Rs\0" L"\0" L"EUR\0" L"\0" L"a/c\0" L"\0" L"a/s\0" L"\0"
+  L"C\0" L"\0" L"c/o\0" L"\0" L"c/u\0" L"\0" L"g\0" L"\0" L"H\0" L"\0" L"H\0"
+  L"\0" L"H\0" L"\0" L"h\0" L"\0" L"I\0" L"\0" L"I\0" L"\0" L"L\0" L"\0"
+  L"l\0" L"\0" L"N\0" L"\0" L"No\0" L"\0" L"P\0" L"\0" L"Q\0" L"\0" L"R\0"
+  L"\0" L"R\0" L"\0" L"R\0" L"\0" L"TEL\0" L"\0" L"(TM)\0" L"\0" L"Z\0" L"\0"
   L"Ohm\0" L"\0" L"Z\0" L"\0" L"B\0" L"\0" L"C\0" L"\0" L"e\0" L"\0" L"e\0"
   L"\0" L"E\0" L"\0" L"F\0" L"\0" L"M\0" L"\0" L"o\0" L"\0" L"i\0" L"\0"
   L"D\0" L"\0" L"d\0" L"\0" L"e\0" L"\0" L"i\0" L"\0" L"j\0" L"\0" L" 1/3 \0"
index d440c9b9ab2e1029152f6153b6242f5b6b5a4967..ab0b13098314e68e9890613d6db67152ba9fa053 100644 (file)
@@ -1,5 +1,5 @@
 /* Transliteration for the C locale.  -*-C-*-
-   Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001, 2002, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
 
@@ -94,6 +94,7 @@
 "\x2039"       "<"     /* <U2039> SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
 "\x203a"       ">"     /* <U203A> SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
 "\x203c"       "!!"    /* <U203C> DOUBLE EXCLAMATION MARK */
+"\x2044"       "/"     /* <U2044> FRACTION SLASH */
 "\x2047"       "??"    /* <U2047> DOUBLE QUESTION MARK */
 "\x2048"       "?!"    /* <U2048> QUESTION EXCLAMATION MARK */
 "\x2049"       "!?"    /* <U2049> EXCLAMATION QUESTION MARK */
index 2280f68df47ad3b3c91939702e2c3e9cc229b798..a5cae3c5d177b83d3f7f1b5483205b30ca574342 100644 (file)
@@ -1,5 +1,5 @@
 /* Locale object representing the global locale controlled by setlocale.
-   Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -60,7 +60,7 @@ struct __locale_struct _nl_global_locale attribute_hidden =
   };
 
 #include <tls.h>
-#if HAVE___THREAD
+#if USE_TLS && HAVE___THREAD
 /* The tsd macros don't permit an initializer.  */
 __thread void *__libc_tsd_LOCALE = &_nl_global_locale;
 #else
index bae42caed2bc19b438297061f6cd4594154d1fd6..a0dd56385ac2c1534051329a3ea1e5fbaa67b364 100644 (file)
@@ -198,6 +198,7 @@ DEFINE_COUNTRY_CODE ("SAO TOME AND PRINCIPE", ST, STP, 678)
 DEFINE_COUNTRY_CODE ("SAUDI ARABIA", SA, SAU, 682)
 DEFINE_COUNTRY_CODE ("SENEGAL", SN, SEN, 686)
 DEFINE_COUNTRY_CODE ("SERBIA AND MONTENEGRO", CS, SCG, 891)
+DEFINE_COUNTRY_CODE ("SERBIA", RS, SRB, 688)
 DEFINE_COUNTRY_CODE ("SEYCHELLES", SC, SYC, 690)
 DEFINE_COUNTRY_CODE ("SIERRA LEONE", SL, SLE, 694)
 DEFINE_COUNTRY_CODE ("SINGAPORE", SG, SGP, 702)
index 1af6ef4496726b6538c222b58feba7951086fc49..8f2c9acaf5d56e50599f92d5ce46d8b7a0740858 100644 (file)
@@ -129,6 +129,7 @@ DEFINE_INT_CURR("PYG")              /* Paraguay Guarani  */
 DEFINE_INT_CURR("QAR")         /* Qatar Rial  */
 DEFINE_INT_CURR("ROL")         /* Romanian Leu  */
 DEFINE_INT_CURR("RON")         /* Romanian New Leu  */
+DEFINE_INT_CURR("RSD")         /* Serbian Dinars  */
 DEFINE_INT_CURR("RUB")         /* Russian Ruble  */
 DEFINE_INT_CURR("RWF")         /* Rwanda Franc  */
 DEFINE_INT_CURR("SAR")         /* Saudi Arabia Riyal  */
index 5c1f27f7e174e0d548a8d55e7546de0e35aa9ac1..4f746a298d1b3587b60aaadd77712acf3bdfd708 100644 (file)
@@ -215,7 +215,9 @@ __libc_tsd_define (extern, LOCALE)
    we can use __thread variables.  So only in that case do we attempt this.  */
 #if !defined SHARED && defined HAVE___THREAD && defined HAVE_WEAK_SYMBOLS
 # include <tls.h>
-# define NL_CURRENT_INDIRECT   1
+# if USE_TLS
+#  define NL_CURRENT_INDIRECT  1
+# endif
 #endif
 
 #ifdef NL_CURRENT_INDIRECT
index dbc1101fd07fb4ed175ba5bb8bb7c426c053f7a5..52a69de4b04a593c9195b3eb1703f4bb47912776 100644 (file)
@@ -607,7 +607,7 @@ character sets with locking states are not supported"));
        case 90:
          if (nowtok != expected_tok)
            lr_error (cmfile, _("\
-%1$s: definition does not end with `END %1$s'"), expected_str);
+`%1$s' definition does not end with `END %1$s'"), expected_str);
 
          lr_ignore_rest (cmfile, nowtok == expected_tok);
          state = 91;
@@ -1019,13 +1019,13 @@ hexadecimal range format should use only capital characters"));
          && errno == ERANGE)
       || *to_end != '\0')
     {
-      lr_error (lr, _("<%s> and <%s> are invalid names for range"), from, to);
+      lr_error (lr, _("<%s> and <%s> are illegal names for range"), from, to);
       return;
     }
 
   if (from_nr > to_nr)
     {
-      lr_error (lr, _("upper limit in range is smaller than lower limit"));
+      lr_error (lr, _("upper limit in range is not higher then lower limit"));
       return;
     }
 
index af472799585d5c7c79121473ab9e2d1354ae290a..cf1bff130f250acaaf12ebe372c724ef0bff6310 100644 (file)
@@ -1146,7 +1146,7 @@ handle_ellipsis (struct linereader *ldfile, const char *symstr, size_t symlen,
            {
              if (ret > 0)
                lr_error (ldfile, _("%s: byte sequence of first character of \
-range is not lower than that of the last character"), "LC_COLLATE");
+sequence is not lower than that of the last character"), "LC_COLLATE");
              return;
            }
 
@@ -1164,7 +1164,7 @@ range is not lower than that of the last character"), "LC_COLLATE");
                  struct element_t *elem;
                  size_t namelen;
 
-                 /* I don't think this can ever happen.  */
+                 /* I don't this this can ever happen.  */
                  assert (seq->name != NULL);
                  namelen = strlen (seq->name);
 
index 69fc05f4ee86eea8d8aabe61d9bb389d229bf118..40d5e4b17f375ebe61913c427b73e30c7fcc2f1e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995-2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.org>, 1995.
 
@@ -1866,6 +1866,9 @@ find_translit (struct localedef_t *locale, const struct charmap_t *charmap,
   assert (locale != NULL);
   ctype = locale->categories[LC_CTYPE].ctype;
 
+  if (ctype == NULL)
+    return NULL;
+
   if (ctype->translit != NULL)
     result = find_translit2 (ctype, charmap, wch);
 
@@ -3036,7 +3039,7 @@ set_class_defaults (struct locale_ctype_t *ctype,
            {
              if (!be_quiet)
                WITH_CUR_LOCALE (error (0, 0, _("\
-%s: character `%s' not defined while needed as default value"),
+%s: character `%s' not defined in charmap while needed as default value"),
                                        "LC_CTYPE", tmp));
            }
          else if (seq->nbytes != 1)
@@ -3161,8 +3164,8 @@ set_class_defaults (struct locale_ctype_t *ctype,
        {
          if (!be_quiet)
            WITH_CUR_LOCALE (error (0, 0, _("\
-%s: character `%s' not defined while needed as default value"),
-                                   "LC_CTYPE", "<newline>"));
+character `%s' not defined while needed as default value"),
+                                   "<newline>"));
        }
       else if (seq->nbytes != 1)
        WITH_CUR_LOCALE (error (0, 0, _("\
index d493a142b568f1b8ebad9ea236fff692936cfc67..27636d6498183618224fb39f5b3ce259e18fa048 100644 (file)
@@ -252,7 +252,7 @@ not correspond to a valid name in ISO 4217"),
   else if (monetary->mon_decimal_point[0] == '\0' && ! be_quiet && ! nothing)
     {
       WITH_CUR_LOCALE (error (0, 0, _("\
-%s: value for field `%s' must not be an empty string"),
+%s: value for field `%s' must not be the empty string"),
                              "LC_MONETARY", "mon_decimal_point"));
     }
   if (monetary->mon_decimal_point_wc == L'\0')
index d7ffe75beef5fee95596fea7a47c09ad9f749cec..a901c4d98500b874a7724a8f644ca827ebb1960b 100644 (file)
@@ -115,7 +115,7 @@ No definition for %s category found"), "LC_NUMERIC"));
   else if (numeric->decimal_point[0] == '\0' && ! be_quiet && ! nothing)
     {
       WITH_CUR_LOCALE (error (0, 0, _("\
-%s: value for field `%s' must not be an empty string"),
+%s: value for field `%s' must not be the empty string"),
                              "LC_NUMERIC", "decimal_point"));
     }
   if (numeric->decimal_point_wc == L'\0')
index 0d193503718edcc930ea27da7759badb6fcce0d5..bf5151858a797d977d7d43668b8c6990c4566084 100644 (file)
@@ -502,7 +502,7 @@ No definition for %s category found"), "LC_TIME"));
     time->first_weekday = 1;
   else if (time->first_weekday > time->week_ndays)
     WITH_CUR_LOCALE (error (0, 0, _("\
-%s: values for field `%s' must not be larger than %d"),
+%s: values of field `%s' must not be larger than %d"),
                            "LC_TIME", "first_weekday", 7));
 
   if (time->first_workday == '\0')
@@ -510,7 +510,7 @@ No definition for %s category found"), "LC_TIME"));
     time->first_workday = 1;
   else if (time->first_workday > time->week_ndays)
     WITH_CUR_LOCALE (error (0, 0, _("\
-%s: values for field `%s' must not be larger than %d"),
+%s: values of field `%s' must not be larger than %d"),
                            "LC_TIME", "first_workday", 7));
 
   if (time->cal_direction == '\0')
index cc3082d48a76e6edbd9542443058397d93e770f0..a03974e8a13d1619960c9c4b2a5dee5db2efc709 100644 (file)
@@ -1,5 +1,5 @@
 /* Implementation of the locale program according to POSIX 9945-2.
-   Copyright (C) 1995-1997, 1999-2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1995-1997, 1999-2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1995.
 
@@ -275,7 +275,7 @@ print_version (FILE *stream, struct argp_state *state)
 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\
-"), "2007");
+"), "2006");
   fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
 }
 
index 04dcf8ee0d6f842c04f46be5ab0c9dc90dcd0037..9c3acbebcc1d6663f4fceb77aad4362d3097422a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1995-2004, 2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1995.
 
@@ -387,7 +387,7 @@ print_version (FILE *stream, struct argp_state *state)
 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\
-"), "2007");
+"), "2006");
   fprintf (stream, gettext ("Written by %s.\n"), "Ulrich Drepper");
 }
 
index b6c0a6ad58ba52d4181734f5322ab91fc6e592db..e9bdf9e7baae26f3c9cf5dbb6bdadb13271e1cdb 100644 (file)
@@ -311,7 +311,7 @@ argument to <%s> must be a single character"),
        case 90:
          if (nowtok != tok_charids)
            lr_error (repfile, _("\
-%1$s: definition does not end with `END %1$s'"), "CHARIDS");
+`%1$s' definition does not end with `END %1$s'"), "CHARIDS");
 
          lr_ignore_rest (repfile, nowtok == tok_charids);
          break;
@@ -453,7 +453,7 @@ hexadecimal range format should use only capital characters"));
 
   if (from_nr > to_nr)
     {
-      lr_error (lr, _("upper limit in range is smaller than lower limit"));
+      lr_error (lr, _("upper limit in range is not smaller then lower limit"));
       return;
     }
 
index 85b2d7948db976c967375a0be7fad946d236ac6b..db9b1ef921c9d758490af30850bd7b05fb695c07 100644 (file)
@@ -1,8 +1,58 @@
-2006-12-05  Jakub Jelinek  <jakub@redhat.com>
+2007-05-07  Ulrich Drepper  <drepper@redhat.com>
 
-       * locales/cs_CZ (LC_TIME): Change d_fmt to %e.%m.%Y from %-d.%-m.%Y.
-       Change d_t_fmt to %a %-d. %B %Y, %H:%M:%S %Z from
-       %a %e. %B %Y, %H:%M:%S %Z.
+       * locales/as_IN: Fix currency_symbol, abday for Sunday, abmon for
+       January, February, and September to December, mon for January,
+       February, September, and December, am_pm, and name_*.
+       Patch by Amitakhya Phukan <aphukan@redhat.com>.
+
+2007-04-27  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3213]
+       * locales/translit_neutral: Add entry for U2044.
+
+2007-04-24  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #4411]
+       * locales/en_ZA: Update int_select.
+       Patch by Dwayne Bailey <dwayne@translate.org.za>.
+
+2007-02-16  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3995]
+       * locales/ru_RU (LC_TIME): Set first_weekday and first_workday.
+
+2007-02-16  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3851]
+       * locales/bn_BD: Fix full name of January and February.
+       Patch by Jamil Ahmed <jamil@bengalinux.org>.
+
+2007-02-17  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3334]
+       * locales/sr_ME: Update from maintainer.
+
+2007-02-16  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3322]
+       * SUPPORTED (SUPPORTED-LOCALES): Add sr_RS and sr_RS@latin.
+       * locales/sr_RS: New file.
+       * locales/sr_RS@latin: New file.
+
+2007-02-02  Bruno Haible  <bruno@clisp.org>
+
+       * charmaps/EUC-KR: Add mapping for 0xA2 0xE8.
+       * charmaps/JOHAB: Add mapping for 0xD9 0xE8.
+       Reported by Jungshik Shin <jungshik@google.com>.
+
+       * charmaps/JOHAB: Add mappings for 0xD9 0xE6 and 0xD9 0xE7.
+       Reported by Jungshik Shin <jungshik@google.com>.
+
+2007-01-12  Gwenole Beauchesne  <gbeauchesne@mandriva.com>
+
+       [BZ #3884]
+       * locales/sl_SI: Slovenia joined the Euro zone.
+       Fix negative number format.
 
 2006-11-02  Ulrich Drepper  <drepper@redhat.com>
 
index dff286997eeb4f8e07d6dbd9b2da3e7e94795c3f..4eff7115ec795c3175b2fd37635962f02cb66bae 100644 (file)
@@ -321,6 +321,8 @@ sq_AL/ISO-8859-1 \
 sr_CS.UTF-8/UTF-8 \
 sr_CS/ISO-8859-5 \
 sr_ME/UTF-8 \
+sr_RS/UTF-8 \
+sr_RS@latin/UTF-8 \
 ss_ZA/UTF-8 \
 st_ZA.UTF-8/UTF-8 \
 st_ZA/ISO-8859-1 \
index 9957c44d69dc98f19a3c43a6eb1ba691a70daec3..9c48668b7220a5ae7fc18c4bfb367bf2b11bc12d 100644 (file)
@@ -341,6 +341,7 @@ CHARMAP
 <U2121>     /xa2/xe5     TELEPHONE SIGN
 <U20AC>     /xa2/xe6     EURO SIGN
 <U00AE>     /xa2/xe7     REGISTERED SIGN
+<U327E>     /xa2/xe8     CIRCLED HANGUL IEUNG U
 <UFF01>     /xa3/xa1     FULLWIDTH EXCLAMATION MARK
 <UFF02>     /xa3/xa2     FULLWIDTH QUOTATION MARK
 <UFF03>     /xa3/xa3     FULLWIDTH NUMBER SIGN
index e0e6f5751d8affef1e3b9692589cf166e38f6c6a..b088b23042716efc9c5bde49325d789a0c6718e8 100644 (file)
@@ -11520,6 +11520,9 @@ CHARMAP
 <U33C2>     /xd9/xe3     SQUARE AM
 <U33D8>     /xd9/xe4     SQUARE PM
 <U2121>     /xd9/xe5     TELEPHONE SIGN
+<U20AC>     /xd9/xe6     EURO SIGN
+<U00AE>     /xd9/xe7     REGISTERED SIGN
+<U327E>     /xd9/xe8     CIRCLED HANGUL IEUNG U
 <UFF01>     /xda/x31     FULLWIDTH EXCLAMATION MARK
 <UFF02>     /xda/x32     FULLWIDTH QUOTATION MARK
 <UFF03>     /xda/x33     FULLWIDTH NUMBER SIGN
index 2ab76f8477d77417f8177076fc49f23ada6741b8..d3c779b7a6ff16132941261e162f2db62fd5877a 100644 (file)
@@ -610,7 +610,7 @@ END LC_NUMERIC
 %%%%%%%%%%%%%
 LC_MONETARY
 int_curr_symbol       "<U0049><U004E><U0052><U0020>"
-currency_symbol       "<U0052><U0073><U002E>"
+currency_symbol       "<U099F><U0995><U09BE>"
 mon_decimal_point     "<U002E>"
 mon_thousands_sep     "<U002C>"
 mon_grouping          3;2
@@ -634,7 +634,7 @@ END LC_MONETARY
 
 %%%%%%%%%%%%%
 LC_TIME
-abday   "<U09F0><U09AC><U09BF>";/
+abday   "<U09A6><U09C7><U0993>";/
         "<U09B8><U09CB><U09AE>";/
         "<U09AE><U0999><U09CD><U0997><U09B2>";/
         "<U09AC><U09C1><U09A7>";/
@@ -648,37 +648,37 @@ day     "<U09A6><U09C7><U0993><U09AC><U09BE><U09F0>";/
         "<U09AC><U09C3><U09B9><U09B7><U09CD><U09AA><U09A4><U09BF><U09AC><U09BE><U09F0>";/
         "<U09B6><U09C1><U0995><U09CD><U09F0><U09AC><U09BE><U09F0>";/
         "<U09B6><U09A8><U09BF><U09AC><U09BE><U09F0>"
-abmon   "<U099C><U09BE><U09A8><U09C1>";/
-        "<U09AB><U09C7><U09AC><U09CD><U09F0><U09C1>";/
+abmon   "<U099C><U09BE><U09A8><U09C1><U09F1><U09BE><U09F0><U09C0>";/
+        "<U09AB><U09C7><U09AC><U09CD><U09F0><U09C1><U09F1><U09BE><U09F0><U09C0>";/
         "<U09AE><U09BE><U09F0><U09CD><U099A>";/
         "<U098F><U09AA><U09CD><U09F0><U09BF><U09B2>";/
         "<U09AE><U09C7>";/
         "<U099C><U09C1><U09A8>";/
         "<U099C><U09C1><U09B2><U09BE><U0987>";/
         "<U0986><U0997>";/
-        "<U09B8><U09C7><U09AA><U09CD><U099F>";/
-        "<U0985><U0995><U09CD><U099F><U09CB>";/
-        "<U09A8><U09AD><U09C7>";/
-        "<U09A1><U09BF><U09B8><U09C7>"
-mon     "<U099C><U09BE><U09A8><U09C1><U09DF><U09BE><U09F0><U09C0>";/
-        "<U09AB><U09C7><U09AC><U09CD><U09F0><U09C1><U09DF><U09BE><U09F0><U09C0>";/
+        "<U099A><U09C7><U09AA><U09CD><U09A4><U09C7><U09AE><U09CD><U09AC><U09F0>";/
+        "<U0985><U0995><U09CD><U099F><U09CB><U09AC><U09F0>";/
+        "<U09A8><U09AD><U09C7><U09AE><U09CD><U09AC><U09F0>";/
+        "<U09A1><U09BF><U099A><U09C7><U09AE><U09CD><U09AC><U09F0>"
+mon     "<U099C><U09BE><U09A8><U09C1><U09F1><U09BE><U09F0><U09C0>";/
+        "<U09AB><U09C7><U09AC><U09CD><U09F0><U09C1><U09F1><U09BE><U09F0><U09C0>";/
         "<U09AE><U09BE><U09F0><U09CD><U099A>";/
         "<U098F><U09AA><U09CD><U09F0><U09BF><U09B2>";/
         "<U09AE><U09C7>";/
         "<U099C><U09C1><U09A8>";/
         "<U099C><U09C1><U09B2><U09BE><U0987>";/
         "<U0986><U0997><U09B7><U09CD><U099F>";/
-        "<U09B8><U09C7><U09AA><U09CD><U099F><U09C7><U09AE><U09CD><U09AC><U09F0>";/
+        "<U099A><U09C7><U09AA><U09CD><U09A4><U09C7><U09AE><U09CD><U09AC><U09F0>";/
         "<U0985><U0995><U09CD><U099F><U09CB><U09AC><U09F0>";/
         "<U09A8><U09AD><U09C7><U09AE><U09CD><U09AC><U09F0>";/
-        "<U09A1><U09BF><U09B8><U09C7><U09AE><U09CD><U09AC><U09F0>"
+        "<U09A1><U09BF><U099A><U09C7><U09AE><U09CD><U09AC><U09F0>"
 % d_fmt  "%e-%m-%Y"
 d_fmt    "<U0025><U0065><U002D><U0025><U006D><U002D><U0025><U0059>"
 % t_fmt  "%I.%M.%S %p"
 t_fmt    "<U0025><U0049><U002E><U0025><U004D><U002E><U0025><U0053><U0020><U0025><U0070>"
 % d_t_fmt"%e %B, %Y %I.%M.%S %p %Z"
 d_t_fmt  "<U0025><U0065><U0020><U0025><U0042><U002C><U0020><U0025><U0059><U0020><U0025><U0049><U002E><U0025><U004D><U002E><U0025><U0053><U0020><U0025><U0070><U0020><U0025><U005A>"
-am_pm    "<U09AA><U09C2><U09F0><U09CD><U09AC><U09BE>";"<U0985><U09AA>"
+am_pm    "<U09AA><U09C2><U09F0><U09CD><U09AC><U09CD><U09AC><U09BE><U09B9><U09CD><U09A8>";"<U0985><U09AA><U09F0><U09BE><U09B9><U09CD><U09A8>"  
 % t_fmt_ampm  "%I.%M.%S %p"
 t_fmt_ampm  "<U0025><U0049><U002E><U0025><U004D><U002E><U0025><U0053><U0020><U0025><U0070>"
 END LC_TIME
@@ -704,10 +704,10 @@ LC_NAME
 name_fmt    "<U0025><U0070><U0025><U0074><U0025><U0066><U0025><U0074>/
 <U0025><U0067>"
 name_gen    ""
-name_mr     "<U004D><U0072><U002E>"
-name_mrs    "<U004D><U0072><U0073><U002E>"
-name_miss   "<U004D><U0069><U0073><U0073><U002E>"
-name_ms     "<U004D><U0073><U002E>"
+name_mr     "<U09B6><U09CD><U09F0><U09C0>"
+name_mrs    "<U09B6><U09CD><U09F0><U09C0><U09AE><U09A4><U09C0>"
+name_miss   "<U0995><U09C1><U09AE><U09BE><U09F0><U09C0>"
+name_ms     "<U0995><U09C1><U09AE><U09BE><U09F0><U09C0>"
 END LC_NAME
 
 %%%%%%%%%%%%%
index 23f821ad6ece9b5c3a7dd67d7e72d7a2618bd7be..dfbe47f05004058fab3d61ff2702108eb28c0385 100644 (file)
@@ -13,8 +13,8 @@ tel        ""
 fax        ""
 language   "Bengali/Bangla"
 territory  "Bangladesh"
-revision   "0.3"
-date       "2005-01-18"
+revision   "0.5"
+date       "2007-01-10"
 
 category "bn_BD:2001";LC_IDENTIFICATION
 category "bn_BD:2001";LC_COLLATE
@@ -101,8 +101,8 @@ abmon       "<U099C><U09BE><U09A8><U09C1>";/
             "<U09A8><U09AD><U09C7>";/
             "<U09A1><U09BF><U09B8><U09C7>"
 
-mon         "<U099C><U09BE><U09A8><U09C1><U09DF><U09BE><U09B0><U098F>";/
-            "<U09AB><U09C7><U09AC><U09CD><U09B0><U09C1><U09DF><U09BE><U09B0><U098F>";/
+mon         "<U099C><U09BE><U09A8><U09C1><U09DF><U09BE><U09B0><U09BF>";/
+            "<U09AB><U09C7><U09AC><U09CD><U09B0><U09C1><U09DF><U09BE><U09B0><U09BF>";/
             "<U09AE><U09BE><U09B0><U09CD><U099A>";/
             "<U098F><U09AA><U09CD><U09B0><U09BF><U09B2>";/
             "<U09AE><U09C7>";/
index 5d279187eb5e51f89595cbbf94a233ea87051c52..9667700a936143d518119a30661643f6328d232a 100644 (file)
@@ -2440,9 +2440,9 @@ abmon             "<U006C><U0065><U0064>";/
 
 week           7;19971201;4
 
-d_t_fmt                "<U0025><U0061><U00A0><U0025><U002D><U0064><U002E><U00A0><U0025><U0042><U00A0><U0025><U0059><U002C><U00A0><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U00A0><U0025><U005A>"
+d_t_fmt                "<U0025><U0061><U00A0><U0025><U0065><U002E><U00A0><U0025><U0042><U00A0><U0025><U0059><U002C><U00A0><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U00A0><U0025><U005A>"
 
-d_fmt          "<U0025><U002D><U0064><U002E><U0025><U002D><U006D><U002E><U0025><U0059>"
+d_fmt          "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0059>"
 
 t_fmt          "<U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>"
 
index 4f13a96237b53970ec87cea5ba2dbc7b0cfcfe9f..f5476da6e6babf7dd1cea8f8202e678f1317b966 100644 (file)
@@ -8,8 +8,8 @@ comment_char  %
 % Fax: +27 12 3430389
 % Language: en
 % Territory: ZA
-% Revision: 1.2.1
-% Date: 2005-10-13
+% Revision: 1.3
+% Date: 2007-04-19
 % Users: general
 % Repertoiremap: mnemonic,ds
 % Charset: ISO-8859-1
@@ -17,6 +17,9 @@ comment_char  %
 % for commercial purposes.
 %
 % Changelog
+% 1.3 (2007-04-19):
+%     2007-04-19 Dwayne Bailey <dwayne@translate.org.za>
+%       - Change int_select from 09 to 00
 % 1.2.1 (2005-10-13):
 %     2005-10-12 Dwayne Bailey <dwayne@translate.org.za>
 %       - Update contact information
@@ -55,8 +58,8 @@ territory  "South Africa"
 % audience     ""
 % application  ""
 abbreviation "Translate.org.za"
-revision   "1.2.1"
-date       "2005-10-13"
+revision   "1.3"
+date       "2007-04-19"
 %
 category  "en_ZA:2003";LC_IDENTIFICATION
 category  "en_ZA:2000";LC_CTYPE
@@ -235,8 +238,8 @@ tel_int_fmt    "<U002B><U0025><U0063><U0020><U0025><U0061><U0020><U0025>/
 tel_dom_fmt    "<U0028><U0025><U0041><U0029><U0020><U0025><U006C>"
 
 % Prefix for making international calls
-% "09"
-int_select     "<U0030><U0039>"
+% "00"
+int_select     "<U0030><U0030>"
 
 % International dialing code
 % "27"
index 279eaab1ea49fb7d0467f0c10036e614d0465a8c..d00f3451db886b3a2691a571019d319d92a40557 100644 (file)
@@ -149,6 +149,8 @@ t_fmt_ampm ""
 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>"
+first_weekday 2
+first_workday 2
 END LC_TIME
 
 LC_PAPER
index 8f7230d4684c232e9ae24eb7a86725da50e221e0..b7e119443fa980a425c785a8bccba4ac0251969e 100644 (file)
@@ -2126,8 +2126,8 @@ noexpr  "<U005E><U005B><U004E><U006E><U005D><U002E><U002A>"
 END LC_MESSAGES
 
 LC_MONETARY
-int_curr_symbol           "<U0053><U0049><U0054><U0020>"
-currency_symbol           "<U0053><U0049><U0054>"
+int_curr_symbol           "<U0045><U0055><U0052><U0020>"
+currency_symbol           "<U20AC>"
 mon_decimal_point         "<U002C>"
 mon_thousands_sep         "<U0020>"
 mon_grouping              3;3
@@ -2136,11 +2136,11 @@ negative_sign             "<U002D>"
 int_frac_digits           2
 frac_digits               2
 p_cs_precedes             0
-p_sep_by_space            2
+p_sep_by_space            1
 n_cs_precedes             0
-n_sep_by_space            2
-p_sign_posn               2
-n_sign_posn               2
+n_sep_by_space            1
+p_sign_posn               1
+n_sign_posn               1
 END LC_MONETARY
 
 LC_NUMERIC
index 30afe44b61af0dc59491a601aa262107ab35ecdc..5c0961f60c98d0f6dc3a1c2227abf82bc3c13728 100644 (file)
@@ -1,42 +1,38 @@
 comment_char %
 escape_char  /
 %
-% Serbian Language in Jekavian dialect Locale for Serbia and Montenegro
-% Source: sr_YU locale
+% Serbian Language locale for Montenegro
+% Source: sr_YU, sr_CS locale
 % Address:
 %
 % Contact: Danilo Segan
-% Email: dsegan@gmx.net
-% Tel: +381 63 8626082
+% Email: danilo@gnome.org
+% Tel: +381 63 323456
 % Fax: none
 % Language: sr
-% Territory: CS
-% Revision: 1.0
-% Date: 2003-08-13
+% Territory: ME
+% Revision: 1.2
+% Date: 2006-10-11
 % Application: general
 % Users: general
 % Charset: UTF-8, ISO-8859-5
 % Distribution and use is free, also
 % for commercial purposes.
-%
-% TODO:
-% -- fix LC_COLLATE to work correctly for latin alphabet too
-%
 
 LC_IDENTIFICATION
-title      "Serbian locale for Serbia and Montenegro"
-source     "sr_YU locale"
+title      "Serbian locale for Montenegro"
+source     "sr_YU, sr_CS locale"
 address    ""
 contact    "Danilo Segan"
 email      "bug-glibc@gnu.org"
 tel        ""
 fax        ""
 language   "Serbian"
-territory  "Serbia and Montenegro"
-revision   "1.1"
-date       "2004-01-10"
+territory  "Montenegro"
+revision   "1.2"
+date       "2006-10-11"
 audience   "general"
-application   ""
+application   "GNU locale"
 abbreviation  ""
 %
 category  i18n:1997;LC_IDENTIFICATION
@@ -54,19 +50,33 @@ category  i18n:1997;LC_MEASUREMENT
 END LC_IDENTIFICATION
 
 LC_CTYPE
-copy "sr_CS"
+copy "i18n"
 END LC_CTYPE
 
 LC_COLLATE
-copy "sr_CS"
+copy "sr_RS"
 END LC_COLLATE
 
 LC_MONETARY
-copy "sr_CS"
+int_curr_symbol           "<U0045><U0055><U0052><U0020>"
+currency_symbol           "<U20AC>"
+mon_decimal_point         "<U002C>"
+mon_thousands_sep         "<U002E>"
+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
-copy "sr_CS"
+copy "sr_RS"
 END LC_NUMERIC
 
 LC_TIME
@@ -110,31 +120,46 @@ t_fmt_ampm "<U0025><U0054>"
 date_fmt  "<U0025><U0061><U002c><U0020><U0025><U0065><U002E><U0020>/
 <U0025><U0062><U0020><U0025><U0059><U002E><U0020><U0020><U0025><U0048>/
 <U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U000A>"
-week    7;19971201;4
+week    7;19971201;4
 first_weekday 2
 first_workday 2
 END LC_TIME
 
 LC_MESSAGES
-copy "sr_CS"
+copy "sr_RS"
 END LC_MESSAGES
 
 LC_PAPER
-copy "sr_CS"
+copy "sr_RS"
 END LC_PAPER
 
 LC_NAME
-copy "sr_CS"
+copy "sr_RS"
 END LC_NAME
 
 LC_ADDRESS
-copy "sr_CS"
+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><U0045>"
+country_ab3   "<U004D><U004E><U0045>"
+country_post  "<U004D><U004E><U0045>"
+country_name  "<U0426><U0440><U043D><U0430><U0020><U0413><U043E><U0440><U0430>"
+country_num   499
+country_car   "<U004D><U004E><U0045>"
+country_isbn  "<U0038><U0036>"
+lang_name     "<U0441><U0440><U043F><U0441><U043A><U0438>"
+lang_term     "<U0073><U0072><U0070>"
+lang_lib      "<U0073><U0063><U0063>"
+lang_ab              "<U0073><U0072>"
 END LC_ADDRESS
 
 LC_TELEPHONE
-copy "sr_CS"
+copy "sr_RS"
 END LC_TELEPHONE
 
 LC_MEASUREMENT
-copy "sr_CS"
+copy "sr_RS"
 END LC_MEASUREMENT
diff --git a/localedata/locales/sr_RS b/localedata/locales/sr_RS
new file mode 100644 (file)
index 0000000..b818592
--- /dev/null
@@ -0,0 +1,360 @@
+comment_char %
+escape_char  /
+%
+% Serbian Language Locale for Serbia
+% Source: sr_YU, sr_CS locales
+% Address:
+%
+% Contact: Danilo Segan
+% Email: danilo@gnome.org
+% Tel: +381 63 323456
+% Fax: none
+% Language: sr
+% Territory: RS
+% Revision: 1.3
+% Date: 2006-10-09
+% Application: general
+% Users: general
+% Charset: UTF-8
+% Distribution and use is free, also
+% for commercial purposes.
+%
+
+LC_IDENTIFICATION
+title      "Serbian locale for Serbia"
+source     "sr_YU, sr_CS locale"
+address    ""
+contact    "Danilo Segan"
+email      "bug-glibc-locales@gnu.org"
+tel        ""
+fax        ""
+language   "Serbian"
+territory  "Serbia"
+revision   "1.3"
+date       "2006-10-09"
+audience   "general"
+application   "GNU locale"
+abbreviation  ""
+%
+category  "i18n:1997";LC_IDENTIFICATION
+category  "i18n:1997";LC_CTYPE
+category  "i18n:1997";LC_COLLATE
+category  "i18n:1997";LC_MONETARY
+category  "i18n:1997";LC_NUMERIC
+category  "i18n:1997";LC_TIME
+category  "i18n:1997";LC_MESSAGES
+category  "i18n:1997";LC_PAPER
+category  "i18n:1997";LC_NAME
+category  "i18n:1997";LC_ADDRESS
+category  "i18n:1997";LC_TELEPHONE
+category  "i18n:1997";LC_MEASUREMENT
+END LC_IDENTIFICATION
+
+LC_CTYPE
+copy "i18n"
+translit_start
+include "translit_combining";""
+
+% cyrillic -> latin
+<U0452> "<U0111>";"<U0064><U006A>" % d-
+<U0453> "<U0067><U006A>" % gj
+<U0455> "<U0064><U007A>" % dz
+<U0458> "<U006A>" % j
+<U0459> "<U006C><U006A>" % lj
+<U045A> "<U006E><U006A>" % nj
+<U045B> "<U0107>";"<U0063>" % c'
+<U045C> "<U006B><U006A>" % kj
+<U045F> "<U0064><U017E>";"<U0064><U007A>" % dz<
+
+<U0402> "<U0110>";"<U0044><U006A>" % D-
+<U0403> "<U0047><U006A>" % Gj
+<U0405> "<U0044><U007A>" % Dz
+<U0408> "<U004A>" % J
+<U0409> "<U004C><U006A>" % Lj
+<U040A> "<U004E><U006A>" % Nj
+<U040B> "<U0106>";"<U0043>" % C'
+<U040C> "<U004B><U006A>" % Kj
+<U040F> "<U0044><U017E>";"<U0064><U007A>" % Dz<
+
+<U0430> "<U0061>"
+<U0431> "<U0062>"
+<U0446> "<U0063>"
+<U0434> "<U0064>"
+<U0435> "<U0065>"
+<U0444> "<U0066>"
+<U0433> "<U0067>"
+<U0445> "<U0068>"
+<U0438> "<U0069>"
+<U043A> "<U006B>"
+<U043B> "<U006C>"
+<U043C> "<U006D>"
+<U043D> "<U006E>"
+<U043E> "<U006F>"
+<U043F> "<U0070>"
+<U0440> "<U0072>"
+<U0441> "<U0073>"
+<U0442> "<U0074>"
+<U0443> "<U0075>"
+<U0432> "<U0076>"
+<U0437> "<U007A>"
+<U0436> "<U017E>";"<U007A>" % z<
+<U0448> "<U0161>";"<U0073>" % s<
+<U0447> "<U010D>";"<U0063>" % c<
+
+<U0410> "<U0041>"
+<U0411> "<U0042>"
+<U0426> "<U0043>"
+<U0414> "<U0044>"
+<U0415> "<U0045>"
+<U0424> "<U0046>"
+<U0413> "<U0047>"
+<U0425> "<U0048>"
+<U0418> "<U0049>"
+<U041A> "<U004B>"
+<U041B> "<U004C>"
+<U041C> "<U004D>"
+<U041D> "<U004E>"
+<U041E> "<U004F>"
+<U041F> "<U0050>"
+<U0420> "<U0052>"
+<U0421> "<U0053>"
+<U0422> "<U0054>"
+<U0423> "<U0055>"
+<U0412> "<U0056>"
+<U0417> "<U005A>"
+<U0416> "<U017D>";"<U005A>" % z<
+<U0428> "<U0160>";"<U0053>" % s<
+<U0427> "<U010C>";"<U0063>" % c<
+
+translit_end
+END LC_CTYPE
+
+
+LC_COLLATE
+
+copy "iso14651_t1"
+
+collating-element <D-Z<> from "<U0044><U017D>"
+collating-element <D-z<> from "<U0044><U017E>"
+collating-element <d-Z<> from "<U0064><U017D>"
+collating-element <d-z<> from "<U0064><U017E>"
+
+collating-element <L-J> from "<U004C><U004A>"
+collating-element <L-j> from "<U004C><U006A>"
+collating-element <l-J> from "<U006C><U004A>"
+collating-element <l-j> from "<U006C><U006A>"
+
+collating-element <N-J> from "<U004E><U004A>"
+collating-element <N-j> from "<U004E><U006A>"
+collating-element <n-J> from "<U006E><U004A>"
+collating-element <n-j> from "<U006E><U006A>"
+
+collating-symbol  <d-z-sh>
+collating-symbol  <l-j-sh>
+collating-symbol  <n-j-sh>
+
+collating-symbol <cacute>
+collating-symbol <ccaron>
+collating-symbol <d//>
+collating-symbol <scaron>
+collating-symbol <zcaron>
+
+collating-symbol <CAP-MIN>
+collating-symbol <MIN-CAP>
+
+reorder-after <MIN>
+<MIN-CAP>
+reorder-after <CAP>
+<CAP-MIN>
+
+reorder-after <c>
+<cacute>
+<ccaron>
+<d>
+<d-z-sh>
+<d//>
+reorder-after <l>
+<l-j-sh>
+reorder-after <n>
+<n-j-sh>
+reorder-after <s>
+<scaron>
+reorder-after <z>
+<zcaron>
+
+reorder-after <U0063>
+<U0107>        <cacute>;<PCT>;<MIN>;IGNORE
+<U010D>        <ccaron>;<PCT>;<MIN>;IGNORE
+reorder-after <U0043>
+<U0106>        <cacute>;<PCT>;<CAP>;IGNORE
+<U010C>        <ccaron>;<PCT>;<CAP>;IGNORE
+
+reorder-after <U0064>
+<d-z<> <d-z-sh>;<PCT>;<MIN>;IGNORE
+<U01C6>        <d-z-sh>;<PCT>;<MIN>;IGNORE
+<d-Z<> <d-z-sh>;<PCT>;<MIN-CAP>;IGNORE
+<U0111>        <d//>;<PCT>;<MIN>;IGNORE
+reorder-after <U0044>
+<D-Z<> <d-z-sh>;<PCT>;<CAP>;IGNORE
+<U01C4>        <d-z-sh>;<PCT>;<CAP>;IGNORE
+<D-z<> <d-z-sh>;<PCT>;<CAP-MIN>;IGNORE
+<U01C5>        <d-z-sh>;<PCT>;<CAP-MIN>;IGNORE
+<U0110>        <d//>;<PCT>;<CAP>;IGNORE
+
+reorder-after <U006C>
+<l-j>  <l-j-sh>;<PCT>;<MIN>;IGNORE
+<U01C9>        <l-j-sh>;<PCT>;<MIN>;IGNORE
+<l-J>  <l-j-sh>;<PCT>;<MIN-CAP>;IGNORE
+reorder-after <U004C>
+<L-J>  <l-j-sh>;<PCT>;<CAP>;IGNORE
+<U01C7>        <l-j-sh>;<PCT>;<CAP>;IGNORE
+<L-j>  <l-j-sh>;<PCT>;<CAP-MIN>;IGNORE
+<U01C8>        <l-j-sh>;<PCT>;<CAP-MIN>;IGNORE
+
+reorder-after <U006E>
+<n-j>  <n-j-sh>;<PCT>;<MIN>;IGNORE
+<U01CC>        <n-j-sh>;<PCT>;<MIN>;IGNORE
+<n-J>  <n-j-sh>;<PCT>;<MIN-CAP>;IGNORE
+reorder-after <U004E>
+<N-J>  <n-j-sh>;<PCT>;<CAP>;IGNORE
+<U01CA>        <n-j-sh>;<PCT>;<CAP>;IGNORE
+<N-j>  <n-j-sh>;<PCT>;<CAP-MIN>;IGNORE
+<U01CB>        <n-j-sh>;<PCT>;<CAP-MIN>;IGNORE
+
+reorder-after <U0073>
+<U0161>        <scaron>;<PCT>;<MIN>;IGNORE
+reorder-after <U0053>
+<U0160>        <scaron>;<PCT>;<CAP>;IGNORE
+
+reorder-after <U007A>
+<U017E>        <zcaron>;<PCT>;<MIN>;IGNORE
+reorder-after <U005A>
+<U017D>        <zcaron>;<PCT>;<CAP>;IGNORE
+
+reorder-end
+
+END LC_COLLATE
+
+LC_MONETARY
+int_curr_symbol           "<U0052><U0053><U0044><U0020>"
+currency_symbol           "<U0434><U0438><U043D>"
+mon_decimal_point         "<U002C>"
+mon_thousands_sep         "<U002E>"
+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
+
+abday   "<U043D><U0435><U0434>";"<U043F><U043E><U043D>";/
+        "<U0443><U0442><U043E>";"<U0441><U0440><U0435>";/
+        "<U0447><U0435><U0442>";"<U043F><U0435><U0442>";/
+        "<U0441><U0443><U0431>"
+day     "<U043D><U0435><U0434><U0435><U0459><U0430>";/
+        "<U043F><U043E><U043D><U0435><U0434><U0435><U0459><U0430><U043A>";/
+        "<U0443><U0442><U043E><U0440><U0430><U043A>";/
+        "<U0441><U0440><U0435><U0434><U0430>";/
+        "<U0447><U0435><U0442><U0432><U0440><U0442><U0430><U043A>";/
+        "<U043F><U0435><U0442><U0430><U043A>";/
+        "<U0441><U0443><U0431><U043E><U0442><U0430>"
+abmon   "<U0458><U0430><U043D>";"<U0444><U0435><U0431>";/
+        "<U043C><U0430><U0440>";"<U0430><U043F><U0440>";/
+        "<U043C><U0430><U0458>";"<U0458><U0443><U043D>";/
+        "<U0458><U0443><U043B>";"<U0430><U0432><U0433>";/
+        "<U0441><U0435><U043F>";"<U043E><U043A><U0442>";/
+        "<U043D><U043E><U0432>";"<U0434><U0435><U0446>"
+mon     "<U0458><U0430><U043D><U0443><U0430><U0440>";/
+        "<U0444><U0435><U0431><U0440><U0443><U0430><U0440>";/
+        "<U043C><U0430><U0440><U0442>";/
+        "<U0430><U043F><U0440><U0438><U043B>";/
+        "<U043C><U0430><U0458>";/
+        "<U0458><U0443><U043D>";/
+        "<U0458><U0443><U043B>";/
+        "<U0430><U0432><U0433><U0443><U0441><U0442>";/
+        "<U0441><U0435><U043F><U0442><U0435><U043C><U0431><U0430><U0440>";/
+        "<U043E><U043A><U0442><U043E><U0431><U0430><U0440>";/
+        "<U043D><U043E><U0432><U0435><U043C><U0431><U0430><U0440>";/
+        "<U0434><U0435><U0446><U0435><U043C><U0431><U0430><U0440>"
+
+d_t_fmt "<U0025><U0041><U002C><U0020><U0025><U0064><U002E><U0020>/
+<U0025><U0042><U0020><U0025><U0059><U002E><U0020><U0025><U0054>/
+<U0020><U0025><U005A>"
+d_fmt   "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0059><U002E>"
+t_fmt   "<U0025><U0054>"
+am_pm   "";""
+t_fmt_ampm "<U0025><U0054>"
+date_fmt  "<U0025><U0061><U002C><U0020><U0025><U0065><U002E><U0020>/
+<U0025><U0062><U0020><U0025><U0059><U002E><U0020><U0020><U0025><U0048>/
+<U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U000A>"
+% week    7;19971201;4
+first_weekday 2
+first_workday 2
+END LC_TIME
+
+LC_MESSAGES
+yesexpr "<U005E><U005B><U0414><U0434><U0044><U0064><U0059><U0079><U005D>"
+noexpr  "<U005E><U005B><U041D><U043D><U004E><U006E><U005D>"
+END LC_MESSAGES
+
+LC_PAPER
+height   297
+width    210
+END LC_PAPER
+
+LC_NAME
+name_fmt    "<U0025><U0064><U0025><U0074><U0025><U0067><U0025><U0074>/
+<U0025><U006D><U0025><U0074><U0025><U0066>"
+name_gen    ""
+name_mr     "<U0433><U002D><U0434><U0438><U043D>"
+name_mrs    "<U0433><U002D><U0452><U0430>"
+name_miss   "<U0433><U002D><U0452><U0438><U0446><U0430>"
+name_ms     "<U0433><U002D><U0452><U0430>"
+END LC_NAME
+
+LC_ADDRESS
+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   "<U0052><U0053>"
+country_ab3   "<U0053><U0052><U0042>"
+% FIXME: country_post is probably incorrect
+country_post  "<U0053><U0052><U0042>"
+country_name  "<U0421><U0440><U0431><U0438><U0458><U0430>"
+country_num   688
+country_car   "<U0053><U0052><U0042>"
+% FIXME: ISBN code is what? "86" that preceedes all the numbers?
+country_isbn  "<U0038><U0036>"
+lang_name     "<U0441><U0440><U043F><U0441><U043A><U0438>"
+lang_term     "<U0073><U0072><U0070>"
+lang_lib      "<U0073><U0063><U0063>"
+lang_ab              "<U0073><U0072>"
+END LC_ADDRESS
+
+LC_TELEPHONE
+tel_int_fmt    "<U002B><U0025><U0063><U0020><U0025><U0061><U0020><U0025>/
+<U006C>"
+tel_dom_fmt    "<U0025><U0041><U0020><U0025><U006C>"
+int_prefix     "<U0033><U0038><U0031>"
+int_select     "<U0039><U0039>"
+END LC_TELEPHONE
+
+LC_MEASUREMENT
+measurement    1
+END LC_MEASUREMENT
diff --git a/localedata/locales/sr_RS@latin b/localedata/locales/sr_RS@latin
new file mode 100644 (file)
index 0000000..d9b9133
--- /dev/null
@@ -0,0 +1,174 @@
+comment_char %
+escape_char  /
+%
+% Serbian Language Locale for Serbia
+% Source: sr_YU, sr_CS locales
+% Address:
+%
+% Contact: Danilo Segan
+% Email: danilo@gnome.org
+% Tel: +381 63 323456
+% Fax: none
+% Language: sr
+% Territory: RS
+% Revision: 1.3
+% Date: 2006-10-09
+% Application: general
+% Users: general
+% Charset: UTF-8, ISO-8859-2
+% Distribution and use is free, also
+% for commercial purposes.
+%
+
+LC_IDENTIFICATION
+title      "Serbian Latin locale for Serbia"
+source     "sr_YU, sr_CS locale"
+address    ""
+contact    "Danilo Segan"
+email      "bug-glibc-locales@gnu.org"
+tel        ""
+fax        ""
+language   "Serbian"
+territory  "Serbia"
+revision   "1.3"
+date       "2006-10-09"
+audience   "general"
+application   "GNU locale"
+abbreviation  ""
+%
+category  "i18n:1997";LC_IDENTIFICATION
+category  "i18n:1997";LC_CTYPE
+category  "i18n:1997";LC_COLLATE
+category  "i18n:1997";LC_MONETARY
+category  "i18n:1997";LC_NUMERIC
+category  "i18n:1997";LC_TIME
+category  "i18n:1997";LC_MESSAGES
+category  "i18n:1997";LC_PAPER
+category  "i18n:1997";LC_NAME
+category  "i18n:1997";LC_ADDRESS
+category  "i18n:1997";LC_TELEPHONE
+category  "i18n:1997";LC_MEASUREMENT
+END LC_IDENTIFICATION
+
+LC_CTYPE
+copy "i18n"
+END LC_CTYPE
+
+LC_COLLATE
+copy "sr_RS"
+END LC_COLLATE
+
+LC_MONETARY
+int_curr_symbol           "<U0052><U0053><U0044><U0020>"
+currency_symbol           "<U0064><U0069><U006E>"
+mon_decimal_point         "<U002C>"
+mon_thousands_sep         "<U002E>"
+mon_grouping              3;3
+positive_sign             ""
+negative_sign             "<U002D>"
+int_frac_digits           0
+frac_digits               0
+p_cs_precedes             1
+p_sep_by_space            1
+n_cs_precedes             1
+n_sep_by_space            1
+p_sign_posn               1
+n_sign_posn               1
+END LC_MONETARY
+
+LC_NUMERIC
+copy "sr_RS"
+END LC_NUMERIC
+
+LC_TIME
+abday   "<U006E><U0065><U0064>";"<U0070><U006F><U006E>";/
+        "<U0075><U0074><U006F>";"<U0073><U0072><U0065>";/
+        "<U010D><U0065><U0074>";"<U0070><U0065><U0074>";/
+        "<U0073><U0075><U0062>"
+day     "<U006E><U0065><U0064><U0065><U006C><U006A><U0061>";/
+        "<U0070><U006F><U006E><U0065><U0064><U0065><U006C><U006A><U0061><U006B>";/
+        "<U0075><U0074><U006F><U0072><U0061><U006B>";/
+        "<U0073><U0072><U0065><U0064><U0061>";/
+        "<U010D><U0065><U0074><U0076><U0072><U0074><U0061><U006B>";/
+        "<U0070><U0065><U0074><U0061><U006B>";/
+        "<U0073><U0075><U0062><U006F><U0074><U0061>"
+abmon   "<U006A><U0061><U006E>";"<U0066><U0065><U0062>";/
+        "<U006D><U0061><U0072>";"<U0061><U0070><U0072>";/
+        "<U006D><U0061><U006A>";"<U006A><U0075><U006E>";/
+        "<U006A><U0075><U006C>";"<U0061><U0076><U0067>";/
+        "<U0073><U0065><U0070>";"<U006F><U006B><U0074>";/
+        "<U006E><U006F><U0076>";"<U0064><U0065><U0063>"
+mon     "<U006A><U0061><U006E><U0075><U0061><U0072>";/
+        "<U0066><U0065><U0062><U0072><U0075><U0061><U0072>";/
+        "<U006D><U0061><U0072><U0074>";/
+        "<U0061><U0070><U0072><U0069><U006C>";/
+        "<U006D><U0061><U006A>";/
+        "<U006A><U0075><U006E><U0069>";/
+        "<U006A><U0075><U006C><U0069>";/
+        "<U0061><U0076><U0067><U0075><U0073><U0074>";/
+        "<U0073><U0065><U0070><U0074><U0065><U006D><U0062><U0061><U0072>";/
+        "<U006F><U006B><U0074><U006F><U0062><U0061><U0072>";/
+        "<U006E><U006F><U0076><U0065><U006D><U0062><U0061><U0072>";/
+        "<U0064><U0065><U0063><U0065><U006D><U0062><U0061><U0072>"
+
+d_t_fmt "<U0025><U0041><U002C><U0020><U0025><U0064><U002E><U0020>/
+<U0025><U0042><U0020><U0025><U0059><U002E><U0020><U0025><U0054>/
+<U0020><U0025><U005A>"
+d_fmt   "<U0025><U0064><U002E><U0025><U006D><U002E><U0025><U0059><U002E>"
+t_fmt   "<U0025><U0054>"
+am_pm   "";""
+t_fmt_ampm "<U0025><U0054>"
+date_fmt  "<U0025><U0061><U002c><U0020><U0025><U0065><U002E><U0020>/
+<U0025><U0062><U0020><U0025><U0059><U002E><U0020><U0020><U0025><U0048>/
+<U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U000A>"
+% week    7;19971201;4
+first_weekday 2
+first_workday 2
+END LC_TIME
+
+LC_MESSAGES
+yesexpr "<U005E><U005B><U0064><U0044><U0079><U0059><U005D>"
+noexpr  "<U005E><U005B><U006E><U004E><U005D>"
+END LC_MESSAGES
+
+LC_PAPER
+copy "sr_RS"
+END LC_PAPER
+
+LC_NAME
+name_fmt    "<U0025><U0064><U0025><U0074><U0025><U0067><U0025><U0074>/
+<U0025><U006D><U0025><U0074><U0025><U0066>"
+name_gen    ""
+name_mr     "<U0067><U002D><U0064><U0069><U006E>"
+name_mrs    "<U0067><U002D><U0111><U0061>"
+name_miss   "<U0067><U002D><U0111><U0069><U0063><U0061>"
+name_ms     "<U0067><U002D><U0111><U0061>"
+END LC_NAME
+
+LC_ADDRESS
+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   "<U0052><U0053>"
+country_ab3   "<U0053><U0052><U0042>"
+country_post  "<U0053><U0052><U0042>"
+country_name  "<U0053><U0072><U0062><U0069><U006A><U0061><U0020><U0069>/
+<U0020><U0043><U0072><U006E><U0061><U0020><U0047><U006F><U0072><U0061>"
+country_num   688
+country_car   "<U0053><U0052><U0042>"
+country_isbn  "<U0038><U0036>"
+lang_name     "<U0073><U0072><U0070><U0073><U006B><U0069>"
+lang_term     "<U0073><U0072><U0070>"
+lang_lib      "<U0073><U0063><U0063>"
+lang_ab              "<U0073><U0072>"
+END LC_ADDRESS
+
+LC_TELEPHONE
+copy "sr_RS"
+END LC_TELEPHONE
+
+LC_MEASUREMENT
+copy "sr_RS"
+END LC_MEASUREMENT
index 413b14d70eab9640e08079e0c4bf036cd8866785..5883d28004d3a20090712ba9ad0077f174f404bd 100644 (file)
@@ -116,6 +116,8 @@ include "translit_wide";""
 <U2039> <U003C>
 % SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
 <U203A> <U003E>
+% FRACTION SLASH
+<U2044> <U002F>
 % WORD JOINER
 <U2060> ""
 % FUNCTION APPLICATION
index e7743bfac86ff6fcccf6762ff71726f8b55da22b..871c85607158c25b16a6776acafb805b1a24fe22 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2002, 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2002, 2003, 2004, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>
    and Paul Janzen <pcj@primenet.com>, 1996.
@@ -140,11 +140,11 @@ setutent_file (void)
 
       file_name = TRANSFORM_UTMP_FILE_NAME (__libc_utmp_file_name);
 
-      file_fd = open_not_cancel_2 (file_name, O_RDWR);
+      file_fd = open_not_cancel_2 (file_name, O_RDWR | O_LARGEFILE);
       if (file_fd == -1)
        {
          /* Hhm, read-write access did not work.  Try read-only.  */
-         file_fd = open_not_cancel_2 (file_name, O_RDONLY);
+         file_fd = open_not_cancel_2 (file_name, O_RDONLY | O_LARGEFILE);
          if (file_fd == -1)
            return 0;
        }
@@ -459,7 +459,7 @@ updwtmp_file (const char *file, const struct utmp *utmp)
   int fd;
 
   /* Open WTMP file.  */
-  fd = open_not_cancel_2 (file, O_WRONLY);
+  fd = open_not_cancel_2 (file, O_WRONLY | O_LARGEFILE);
   if (fd < 0)
     return -1;
 
index 1d9f952112529d01b983f6b733728ee2057ce98f..0dcb7cb9f85e482c5f09d90e60e455bf10b81c2a 100644 (file)
@@ -1,5 +1,6 @@
 /* Malloc implementation for multiple threads without lock contention.
-   Copyright (C) 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 2001,2002,2003,2004,2005,2006,2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Wolfram Gloger <wg@malloc.de>, 2001.
 
@@ -59,10 +60,12 @@ typedef struct _heap_info {
   mstate ar_ptr; /* Arena for this heap. */
   struct _heap_info *prev; /* Previous heap. */
   size_t size;   /* Current size in bytes. */
+  size_t mprotect_size;        /* Size in bytes that has been mprotected
+                          PROT_READ|PROT_WRITE.  */
   /* Make sure the following data is properly aligned, particularly
      that sizeof (heap_info) + 2 * SIZE_SZ is a multiple of
-     MALLOG_ALIGNMENT. */
-  char pad[-5 * SIZE_SZ & MALLOC_ALIGN_MASK];
+     MALLOC_ALIGNMENT. */
+  char pad[-6 * SIZE_SZ & MALLOC_ALIGN_MASK];
 } heap_info;
 
 /* Get a compile-time error if the heap_info padding is not correct
@@ -149,7 +152,7 @@ int __malloc_initialized = -1;
 
 static __malloc_ptr_t (*save_malloc_hook) (size_t __size,
                                           __const __malloc_ptr_t);
-# if !defined _LIBC || (defined SHARED && !USE___THREAD)
+# if !defined _LIBC || !defined USE_TLS || (defined SHARED && !USE___THREAD)
 static __malloc_ptr_t (*save_memalign_hook) (size_t __align, size_t __size,
                                             __const __malloc_ptr_t);
 # endif
@@ -385,7 +388,7 @@ extern struct dl_open_hook *_dl_open_hook;
 libc_hidden_proto (_dl_open_hook);
 # endif
 
-# if defined SHARED && !USE___THREAD
+# if defined SHARED && defined USE_TLS && !USE___THREAD
 /* This is called by __pthread_initialize_minimal when it needs to use
    malloc to set up the TLS state.  We cannot do the full work of
    ptmalloc_init (below) until __pthread_initialize_minimal has finished,
@@ -428,7 +431,7 @@ ptmalloc_init (void)
   __malloc_initialized = 0;
 
 #ifdef _LIBC
-# if defined SHARED && !USE___THREAD
+# if defined SHARED && defined USE_TLS && !USE___THREAD
   /* ptmalloc_init_minimal may already have been called via
      __libc_malloc_pthread_startup, above.  */
   if (mp_.pagesize == 0)
@@ -437,7 +440,7 @@ ptmalloc_init (void)
     ptmalloc_init_minimal();
 
 #ifndef NO_THREADS
-# if defined _LIBC
+# if defined _LIBC && defined USE_TLS
   /* We know __pthread_initialize_minimal has already been called,
      and that is enough.  */
 #   define NO_STARTER
@@ -692,6 +695,7 @@ new_heap(size, top_pad) size_t size, top_pad;
   }
   h = (heap_info *)p2;
   h->size = size;
+  h->mprotect_size = size;
   THREAD_STAT(stat_n_heaps++);
   return h;
 }
@@ -714,17 +718,34 @@ grow_heap(h, diff) heap_info *h; long diff;
     new_size = (long)h->size + diff;
     if((unsigned long) new_size > (unsigned long) HEAP_MAX_SIZE)
       return -1;
-    if(mprotect((char *)h + h->size, diff, PROT_READ|PROT_WRITE) != 0)
-      return -2;
+    if((unsigned long) new_size > h->mprotect_size) {
+      if (mprotect((char *)h + h->mprotect_size,
+                  (unsigned long) new_size - h->mprotect_size,
+                  PROT_READ|PROT_WRITE) != 0)
+       return -2;
+      h->mprotect_size = new_size;
+    }
   } else {
     new_size = (long)h->size + diff;
     if(new_size < (long)sizeof(*h))
       return -1;
     /* Try to re-map the extra heap space freshly to save memory, and
        make it inaccessible. */
-    if((char *)MMAP((char *)h + new_size, -diff, PROT_NONE,
-                    MAP_PRIVATE|MAP_FIXED) == (char *) MAP_FAILED)
-      return -2;
+#ifdef _LIBC
+    if (__builtin_expect (__libc_enable_secure, 0))
+#else
+    if (1)
+#endif
+      {
+       if((char *)MMAP((char *)h + new_size, -diff, PROT_NONE,
+                       MAP_PRIVATE|MAP_FIXED) == (char *) MAP_FAILED)
+         return -2;
+       h->mprotect_size = new_size;
+      }
+#ifdef _LIBC
+    else
+      madvise ((char *)h + new_size, -diff, MADV_DONTNEED);
+#endif
     /*fprintf(stderr, "shrink %p %08lx\n", h, new_size);*/
   }
   h->size = new_size;
index 8346e7345344cdd866de3177b6d09ce8a306a416..708f0faf83116cdac9666825dda172ecb8be2f5d 100644 (file)
@@ -1,5 +1,5 @@
 /* Malloc implementation for multiple threads without lock contention.
-   Copyright (C) 2001,2002,2003,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Wolfram Gloger <wg@malloc.de>, 2001.
 
@@ -414,7 +414,7 @@ memalign_check(alignment, bytes, caller)
 #ifndef NO_THREADS
 
 # ifdef _LIBC
-#  if USE___THREAD || !defined SHARED
+#  if USE___THREAD || (defined USE_TLS && !defined SHARED)
     /* These routines are never needed in this configuration.  */
 #   define NO_STARTER
 #  endif
index 6427608a79f10f8f74cf17b9befc6e5641644831..a369001520395a1f7fd7b7411bba6c98e04d2391 100644 (file)
@@ -1618,7 +1618,7 @@ static Void_t*   memalign_check(size_t alignment, size_t bytes,
                                const Void_t *caller);
 #ifndef NO_THREADS
 # ifdef _LIBC
-#  if USE___THREAD || !defined SHARED
+#  if USE___THREAD || (defined USE_TLS && !defined SHARED)
     /* These routines are never needed in this configuration.  */
 #   define NO_STARTER
 #  endif
@@ -2741,19 +2741,8 @@ static void do_check_malloc_state(mstate av)
   for (i = 0; i < NFASTBINS; ++i) {
     p = av->fastbins[i];
 
-    /* The following test can only be performed for the main arena.
-       While mallopt calls malloc_consolidate to get rid of all fast
-       bins (especially those larger than the new maximum) this does
-       only happen for the main arena.  Trying to do this for any
-       other arena would mean those arenas have to be locked and
-       malloc_consolidate be called for them.  This is excessive.  And
-       even if this is acceptable to somebody it still cannot solve
-       the problem completely since if the arena is locked a
-       concurrent malloc call might create a new arena which then
-       could use the newly invalid fast bins.  */
-
     /* all bins past max_fast are empty */
-    if (av == &main_arena && i > max_fast_bin)
+    if (i > max_fast_bin)
       assert(p == 0);
 
     while (p != 0) {
@@ -2896,13 +2885,7 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
       is one SIZE_SZ unit larger than for normal chunks, because there
       is no following chunk whose prev_size field could be used.
     */
-#if 1
-    /* See the front_misalign handling below, for glibc there is no
-       need for further alignments.  */
-    size = (nb + SIZE_SZ + pagemask) & ~pagemask;
-#else
     size = (nb + SIZE_SZ + MALLOC_ALIGN_MASK + pagemask) & ~pagemask;
-#endif
     tried_mmap = true;
 
     /* Don't try if size wraps around 0 */
@@ -2920,12 +2903,6 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
           address argument for later munmap in free() and realloc().
         */
 
-#if 1
-       /* For glibc, chunk2mem increases the address by 2*SIZE_SZ and
-          MALLOC_ALIGN_MASK is 2*SIZE_SZ-1.  Each mmap'ed area is page
-          aligned and therefore definitely MALLOC_ALIGN_MASK-aligned.  */
-        assert (((INTERNAL_SIZE_T)chunk2mem(mm) & MALLOC_ALIGN_MASK) == 0);
-#else
         front_misalign = (INTERNAL_SIZE_T)chunk2mem(mm) & MALLOC_ALIGN_MASK;
         if (front_misalign > 0) {
           correction = MALLOC_ALIGNMENT - front_misalign;
@@ -2933,12 +2910,10 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av;
           p->prev_size = correction;
           set_head(p, (size - correction) |IS_MMAPPED);
         }
-        else
-#endif
-         {
-           p = (mchunkptr)mm;
-           set_head(p, size|IS_MMAPPED);
-         }
+        else {
+          p = (mchunkptr)mm;
+          set_head(p, size|IS_MMAPPED);
+        }
 
         /* update statistics */
 
@@ -4122,6 +4097,7 @@ _int_malloc(mstate av, size_t bytes)
   for(;;) {
 
     int iters = 0;
+    bool any_larger = false;
     while ( (victim = unsorted_chunks(av)->bk) != unsorted_chunks(av)) {
       bck = victim->bk;
       if (__builtin_expect (victim->size <= 2 * SIZE_SZ, 0)
@@ -4218,6 +4194,8 @@ _int_malloc(mstate av, size_t bytes)
       fwd->bk = victim;
       bck->fd = victim;
 
+      if (size >= nb + MINSIZE)
+       any_larger = true;
 #define MAX_ITERS      10000
       if (++iters >= MAX_ITERS)
        break;
@@ -4706,15 +4684,7 @@ static void malloc_consolidate(av) mstate av;
       reused anyway.
     */
 
-#if 0
-    /* It is wrong to limit the fast bins to search using get_max_fast
-       because, except for the main arena, all the others might have
-       blocks in the high fast bins.  It's not worth it anyway, just
-       search all bins all the time.  */
     maxfb = &(av->fastbins[fastbin_index(get_max_fast ())]);
-#else
-    maxfb = &(av->fastbins[NFASTBINS - 1]);
-#endif
     fb = &(av->fastbins[0]);
     do {
       if ( (p = *fb) != 0) {
index d11e9e6ed52f33e3176c9ae92fe6c55e0fe4303a..b5077ffe0b625e2f390e6c29341156c675463086 100644 (file)
@@ -80,7 +80,6 @@ static memusage_cntr_t large;
 static memusage_cntr_t calls_total;
 static memusage_cntr_t inplace;
 static memusage_cntr_t decreasing;
-static memusage_cntr_t realloc_free;
 static memusage_cntr_t inplace_mremap;
 static memusage_cntr_t decreasing_mremap;
 static memusage_size_t current_heap;
@@ -104,8 +103,8 @@ extern const char *__progname;
 
 struct entry
 {
-  uint64_t heap;
-  uint64_t stack;
+  size_t heap;
+  size_t stack;
   uint32_t time_low;
   uint32_t time_high;
 };
@@ -129,8 +128,8 @@ update_data (struct header *result, size_t len, size_t old_len)
 
   /* Compute current heap usage and compare it with the maximum value.  */
   memusage_size_t heap
-    = catomic_exchange_and_add (&current_heap, len - old_len) + len - old_len;
-  catomic_max (&peak_heap, heap);
+    = atomic_exchange_and_add (&current_heap, len - old_len) + len - old_len;
+  atomic_max (&peak_heap, heap);
 
   /* Compute current stack usage and compare it with the maximum
      value.  The base stack pointer might not be set if this is not
@@ -153,15 +152,15 @@ update_data (struct header *result, size_t len, size_t old_len)
     start_sp = sp;
   size_t current_stack = start_sp - sp;
 #endif
-  catomic_max (&peak_stack, current_stack);
+  atomic_max (&peak_stack, current_stack);
 
   /* Add up heap and stack usage and compare it with the maximum value.  */
-  catomic_max (&peak_total, heap + current_stack);
+  atomic_max (&peak_total, heap + current_stack);
 
   /* Store the value only if we are writing to a file.  */
   if (fd != -1)
     {
-      uatomic32_t idx = catomic_exchange_and_add (&buffer_cnt, 1);
+      uatomic32_t idx = atomic_exchange_and_add (&buffer_cnt, 1);
       if (idx >= 2 * buffer_size)
        {
          /* We try to reset the counter to the correct range.  If
@@ -169,7 +168,7 @@ update_data (struct header *result, size_t len, size_t old_len)
             counter it does not matter since that thread will take
             care of the correction.  */
          unsigned int reset = idx - 2 * buffer_size;
-         catomic_compare_and_exchange_val_acq (&buffer_size, reset, idx);
+         atomic_compare_and_exchange_val_acq (&buffer_size, reset, idx);
          idx = reset;
        }
 
@@ -268,7 +267,6 @@ me (void)
              GETTIME (first.time_low, first.time_high);
              /* Write it two times since we need the starting and end time. */
              write (fd, &first, sizeof (first));
-             write (fd, &first, sizeof (first));
 
              /* Determine the buffer size.  We use the default if the
                 environment variable is not present.  */
@@ -339,24 +337,24 @@ malloc (size_t len)
     return (*mallocp) (len);
 
   /* Keep track of number of calls.  */
-  catomic_increment (&calls[idx_malloc]);
+  atomic_increment (&calls[idx_malloc]);
   /* Keep track of total memory consumption for `malloc'.  */
-  catomic_add (&total[idx_malloc], len);
+  atomic_add (&total[idx_malloc], len);
   /* Keep track of total memory requirement.  */
-  catomic_add (&grand_total, len);
+  atomic_add (&grand_total, len);
   /* Remember the size of the request.  */
   if (len < 65536)
-    catomic_increment (&histogram[len / 16]);
+    atomic_increment (&histogram[len / 16]);
   else
-    catomic_increment (&large);
+    atomic_increment (&large);
   /* Total number of calls of any of the functions.  */
-  catomic_increment (&calls_total);
+  atomic_increment (&calls_total);
 
   /* Do the real work.  */
   result = (struct header *) (*mallocp) (len + sizeof (struct header));
   if (result == NULL)
     {
-      catomic_increment (&failed[idx_malloc]);
+      atomic_increment (&failed[idx_malloc]);
       return NULL;
     }
 
@@ -405,53 +403,36 @@ realloc (void *old, size_t len)
     }
 
   /* Keep track of number of calls.  */
-  catomic_increment (&calls[idx_realloc]);
+  atomic_increment (&calls[idx_realloc]);
   if (len > old_len)
     {
       /* Keep track of total memory consumption for `realloc'.  */
-      catomic_add (&total[idx_realloc], len - old_len);
+      atomic_add (&total[idx_realloc], len - old_len);
       /* Keep track of total memory requirement.  */
-      catomic_add (&grand_total, len - old_len);
+      atomic_add (&grand_total, len - old_len);
     }
-
-  if (len == 0 && old != NULL)
-    {
-      /* Special case.  */
-      catomic_increment (&realloc_free);
-      /* Keep track of total memory freed using `free'.  */
-      catomic_add (&total[idx_free], real->length);
-
-      /* Update the allocation data and write out the records if necessary.  */
-      update_data (NULL, 0, old_len);
-
-      /* Do the real work.  */
-      (*freep) (real);
-
-      return NULL;
-    }
-
   /* Remember the size of the request.  */
   if (len < 65536)
-    catomic_increment (&histogram[len / 16]);
+    atomic_increment (&histogram[len / 16]);
   else
-    catomic_increment (&large);
+    atomic_increment (&large);
   /* Total number of calls of any of the functions.  */
-  catomic_increment (&calls_total);
+  atomic_increment (&calls_total);
 
   /* Do the real work.  */
   result = (struct header *) (*reallocp) (real, len + sizeof (struct header));
   if (result == NULL)
     {
-      catomic_increment (&failed[idx_realloc]);
+      atomic_increment (&failed[idx_realloc]);
       return NULL;
     }
 
   /* Record whether the reduction/increase happened in place.  */
   if (real == result)
-    catomic_increment (&inplace);
+    atomic_increment (&inplace);
   /* Was the buffer increased?  */
   if (old_len > len)
-    catomic_increment (&decreasing);
+    atomic_increment (&decreasing);
 
   /* Update the allocation data and write out the records if necessary.  */
   update_data (result, len, old_len);
@@ -482,16 +463,16 @@ calloc (size_t n, size_t len)
     return (*callocp) (n, len);
 
   /* Keep track of number of calls.  */
-  catomic_increment (&calls[idx_calloc]);
+  atomic_increment (&calls[idx_calloc]);
   /* Keep track of total memory consumption for `calloc'.  */
-  catomic_add (&total[idx_calloc], size);
+  atomic_add (&total[idx_calloc], size);
   /* Keep track of total memory requirement.  */
-  catomic_add (&grand_total, size);
+  atomic_add (&grand_total, size);
   /* Remember the size of the request.  */
   if (size < 65536)
-    catomic_increment (&histogram[size / 16]);
+    atomic_increment (&histogram[size / 16]);
   else
-    catomic_increment (&large);
+    atomic_increment (&large);
   /* Total number of calls of any of the functions.  */
   ++calls_total;
 
@@ -499,7 +480,7 @@ calloc (size_t n, size_t len)
   result = (struct header *) (*mallocp) (size + sizeof (struct header));
   if (result == NULL)
     {
-      catomic_increment (&failed[idx_calloc]);
+      atomic_increment (&failed[idx_calloc]);
       return NULL;
     }
 
@@ -536,7 +517,7 @@ free (void *ptr)
   /* `free (NULL)' has no effect.  */
   if (ptr == NULL)
     {
-      catomic_increment (&calls[idx_free]);
+      atomic_increment (&calls[idx_free]);
       return;
     }
 
@@ -550,9 +531,9 @@ free (void *ptr)
     }
 
   /* Keep track of number of calls.  */
-  catomic_increment (&calls[idx_free]);
+  atomic_increment (&calls[idx_free]);
   /* Keep track of total memory freed using `free'.  */
-  catomic_add (&total[idx_free], real->length);
+  atomic_add (&total[idx_free], real->length);
 
   /* Update the allocation data and write out the records if necessary.  */
   update_data (NULL, 0, real->length);
@@ -586,22 +567,22 @@ mmap (void *start, size_t len, int prot, int flags, int fd, off_t offset)
                 ? idx_mmap_a : prot & PROT_WRITE ? idx_mmap_w : idx_mmap_r);
 
       /* Keep track of number of calls.  */
-      catomic_increment (&calls[idx]);
+      atomic_increment (&calls[idx]);
       /* Keep track of total memory consumption for `malloc'.  */
-      catomic_add (&total[idx], len);
+      atomic_add (&total[idx], len);
       /* Keep track of total memory requirement.  */
-      catomic_add (&grand_total, len);
+      atomic_add (&grand_total, len);
       /* Remember the size of the request.  */
       if (len < 65536)
-       catomic_increment (&histogram[len / 16]);
+       atomic_increment (&histogram[len / 16]);
       else
-       catomic_increment (&large);
+       atomic_increment (&large);
       /* Total number of calls of any of the functions.  */
-      catomic_increment (&calls_total);
+      atomic_increment (&calls_total);
 
       /* Check for failures.  */
       if (result == NULL)
-       catomic_increment (&failed[idx]);
+       atomic_increment (&failed[idx]);
       else if (idx == idx_mmap_w)
        /* Update the allocation data and write out the records if
           necessary.  Note the first parameter is NULL which means
@@ -638,22 +619,22 @@ mmap64 (void *start, size_t len, int prot, int flags, int fd, off64_t offset)
                 ? idx_mmap_a : prot & PROT_WRITE ? idx_mmap_w : idx_mmap_r);
 
       /* Keep track of number of calls.  */
-      catomic_increment (&calls[idx]);
+      atomic_increment (&calls[idx]);
       /* Keep track of total memory consumption for `malloc'.  */
-      catomic_add (&total[idx], len);
+      atomic_add (&total[idx], len);
       /* Keep track of total memory requirement.  */
-      catomic_add (&grand_total, len);
+      atomic_add (&grand_total, len);
       /* Remember the size of the request.  */
       if (len < 65536)
-       catomic_increment (&histogram[len / 16]);
+       atomic_increment (&histogram[len / 16]);
       else
-       catomic_increment (&large);
+       atomic_increment (&large);
       /* Total number of calls of any of the functions.  */
-      catomic_increment (&calls_total);
+      atomic_increment (&calls_total);
 
       /* Check for failures.  */
       if (result == NULL)
-       catomic_increment (&failed[idx]);
+       atomic_increment (&failed[idx]);
       else if (idx == idx_mmap_w)
        /* Update the allocation data and write out the records if
           necessary.  Note the first parameter is NULL which means
@@ -692,33 +673,33 @@ mremap (void *start, size_t old_len, size_t len, int flags,  ...)
   if (!not_me && trace_mmap)
     {
       /* Keep track of number of calls.  */
-      catomic_increment (&calls[idx_mremap]);
+      atomic_increment (&calls[idx_mremap]);
       if (len > old_len)
        {
          /* Keep track of total memory consumption for `malloc'.  */
-         catomic_add (&total[idx_mremap], len - old_len);
+         atomic_add (&total[idx_mremap], len - old_len);
          /* Keep track of total memory requirement.  */
-         catomic_add (&grand_total, len - old_len);
+         atomic_add (&grand_total, len - old_len);
        }
       /* Remember the size of the request.  */
       if (len < 65536)
-       catomic_increment (&histogram[len / 16]);
+       atomic_increment (&histogram[len / 16]);
       else
-       catomic_increment (&large);
+       atomic_increment (&large);
       /* Total number of calls of any of the functions.  */
-      catomic_increment (&calls_total);
+      atomic_increment (&calls_total);
 
       /* Check for failures.  */
       if (result == NULL)
-       catomic_increment (&failed[idx_mremap]);
+       atomic_increment (&failed[idx_mremap]);
       else
        {
          /* Record whether the reduction/increase happened in place.  */
          if (start == result)
-           catomic_increment (&inplace_mremap);
+           atomic_increment (&inplace_mremap);
          /* Was the buffer increased?  */
          if (old_len > len)
-           catomic_increment (&decreasing_mremap);
+           atomic_increment (&decreasing_mremap);
 
          /* Update the allocation data and write out the records if
             necessary.  Note the first parameter is NULL which means
@@ -752,19 +733,19 @@ munmap (void *start, size_t len)
   if (!not_me && trace_mmap)
     {
       /* Keep track of number of calls.  */
-      catomic_increment (&calls[idx_munmap]);
+      atomic_increment (&calls[idx_munmap]);
 
       if (__builtin_expect (result == 0, 1))
        {
          /* Keep track of total memory freed using `free'.  */
-         catomic_add (&total[idx_munmap], len);
+         atomic_add (&total[idx_munmap], len);
 
          /* Update the allocation data and write out the records if
             necessary.  */
          update_data (NULL, 0, len);
        }
       else
-       catomic_increment (&failed[idx_munmap]);
+       atomic_increment (&failed[idx_munmap]);
     }
 
   return result;
@@ -789,12 +770,7 @@ dest (void)
   if (fd != -1)
     {
       /* Write the partially filled buffer.  */
-      if (buffer_cnt > buffer_size)
-       write (fd, buffer + buffer_size,
-              (buffer_cnt - buffer_size) * sizeof (struct entry));
-      else
-       write (fd, buffer, buffer_cnt * sizeof (struct entry));
-
+      write (fd, buffer, buffer_cnt * sizeof (struct entry));
       /* Go back to the beginning of the file.  We allocated two records
         here when we opened the file.  */
       lseek (fd, 0, SEEK_SET);
@@ -818,7 +794,7 @@ dest (void)
 \e[01;32mMemory usage summary:\e[0;0m heap total: %llu, heap peak: %lu, stack peak: %lu\n\
 \e[04;34m         total calls   total memory   failed calls\e[0m\n\
 \e[00;34m malloc|\e[0m %10lu   %12llu   %s%12lu\e[00;00m\n\
-\e[00;34mrealloc|\e[0m %10lu   %12llu   %s%12lu\e[00;00m  (nomove:%ld, dec:%ld, free:%ld)\n\
+\e[00;34mrealloc|\e[0m %10lu   %12llu   %s%12lu\e[00;00m   (in place: %ld, dec: %ld)\n\
 \e[00;34m calloc|\e[0m %10lu   %12llu   %s%12lu\e[00;00m\n\
 \e[00;34m   free|\e[0m %10lu   %12llu\n",
           (unsigned long long int) grand_total, (unsigned long int) peak_heap,
@@ -831,9 +807,7 @@ dest (void)
           (unsigned long long int) total[idx_realloc],
           failed[idx_realloc] ? "\e[01;41m" : "",
           (unsigned long int) failed[idx_realloc],
-          (unsigned long int) inplace,
-          (unsigned long int) decreasing,
-          (unsigned long int) realloc_free,
+          (unsigned long int) inplace, (unsigned long int) decreasing,
           (unsigned long int) calls[idx_calloc],
           (unsigned long long int) total[idx_calloc],
           failed[idx_calloc] ? "\e[01;41m" : "",
@@ -846,7 +820,7 @@ dest (void)
 \e[00;34mmmap(r)|\e[0m %10lu   %12llu   %s%12lu\e[00;00m\n\
 \e[00;34mmmap(w)|\e[0m %10lu   %12llu   %s%12lu\e[00;00m\n\
 \e[00;34mmmap(a)|\e[0m %10lu   %12llu   %s%12lu\e[00;00m\n\
-\e[00;34m mremap|\e[0m %10lu   %12llu   %s%12lu\e[00;00m  (nomove: %ld, dec:%ld)\n\
+\e[00;34m mremap|\e[0m %10lu   %12llu   %s%12lu\e[00;00m   (in place: %ld, dec: %ld)\n\
 \e[00;34m munmap|\e[0m %10lu   %12llu   %s%12lu\e[00;00m\n",
             (unsigned long int) calls[idx_mmap_r],
             (unsigned long long int) total[idx_mmap_r],
index 67af4998ca383da15f5e8ce2fab906ae0a23262a..47f8cc22ff409a206edee6c21fd6544628896520 100755 (executable)
@@ -44,7 +44,7 @@ Profile memory usage of PROGRAM.
    -d,--data=FILE         Generate binary data file and store it in FILE
    -u,--unbuffered        Don't buffer output
    -b,--buffer=SIZE       Collect SIZE entries before writing them out
-      --no-timer          Don't collect additional information through timer
+      --no-timer          Don't collect additional information though timer
    -m,--mmap              Also trace mmap & friends
 
    -?,--help              Print this help and exit
@@ -71,12 +71,21 @@ do_version() {
   printf $"Copyright (C) %s Free Software Foundation, Inc.
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-" "2007"
+" "2006"
   printf $"Written by %s.
 " "Ulrich Drepper"
   exit 0
 }
 
+# These variables are local
+buffer=
+data=
+memusagestat_args=
+notimer=
+png=
+progname=
+tracemmap=
+
 # Process arguments.  But stop as soon as the program name is found.
 while test $# -gt 0; do
   case "$1" in
@@ -213,15 +222,8 @@ datafile=
 if test -n "$data"; then
   datafile="$data"
 elif test -n "$png"; then
-  datafile=$(mktemp ${TMPDIR:-/tmp}/memusage.XXXXXX 2> /dev/null)
-  if test $? -ne 0; then
-    # Lame, but if there is no `mktemp' program the user cannot expect more.
-    if test "$RANDOM" != "$RANDOM"; then
-      datafile=${TMPDIR:-/tmp}/memusage.$RANDOM
-    else
-      datafile=${TMPDIR:-/tmp}/memusage.$$
-    fi
-  fi
+  datafile=$(mktemp -t memusage.XXXXXX) || exit
+  trap 'rm -f "$datafile"; exit 1' HUP INT QUIT TERM PIPE
 fi
 if test -n "$datafile"; then
   add_env="$add_env MEMUSAGE_OUTPUT=$datafile"
index 93ac2cd744232c5f018eb9546c6571dc1a12f5ec..5d35ee0236e8e25d75917bc799bee823a8fa7aad 100644 (file)
@@ -55,8 +55,8 @@ static const struct argp_option options[] =
   { "time", 't', NULL, 0, N_("Generate output linear to time (default is linear to number of function calls)") },
   { "total", 'T', NULL, 0,
     N_("Also draw graph for total memory consumption") },
-  { "x-size", 'x', "VALUE", 0, N_("Make output graphic VALUE pixels wide") },
-  { "y-size", 'y', "VALUE", 0, N_("Make output graphic VALUE pixels high") },
+  { "x-size", 'x', "VALUE", 0, N_("make output graphic VALUE pixel wide") },
+  { "y-size", 'y', "VALUE", 0, N_("make output graphic VALUE pixel high") },
   { NULL, 0, NULL, 0, NULL }
 };
 
@@ -81,8 +81,8 @@ static struct argp argp =
 
 struct entry
 {
-  uint64_t heap;
-  uint64_t stack;
+  size_t heap;
+  size_t stack;
   uint32_t time_low;
   uint32_t time_high;
 };
index 280b469d922a59b8d4871f272e8af3330217fd78..8a0fbc7e95b47337572724005bd5ba44fc287bfc 100644 (file)
@@ -1,7 +1,7 @@
 #! @PERL@
 eval "exec @PERL@ -S $0 $*"
     if 0;
-# Copyright (C) 1997-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 1997-2004, 2005, 2006 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 # Contributed by Ulrich Drepper <drepper@gnu.org>, 1997.
 # Based on the mtrace.awk script.
@@ -45,7 +45,7 @@ arglist: while (@ARGV) {
        $ARGV[0] eq "--vers" || $ARGV[0] eq "--versi" ||
        $ARGV[0] eq "--versio" || $ARGV[0] eq "--version") {
        print "mtrace (GNU $PACKAGE) $VERSION\n";
-       print "Copyright (C) 2007 Free Software Foundation, Inc.\n";
+       print "Copyright (C) 2006 Free Software Foundation, Inc.\n";
        print "This is free software; see the source for copying conditions.  There is NO\n";
        print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n";
        print "Written by Ulrich Drepper <drepper\@gnu.org>\n";
index b37232306ba1901e5cea9aae1e9d6a982fa27a74..090d49f7a57c40510c387ecfdae0508a4d1b2b54 100644 (file)
@@ -832,7 +832,7 @@ Don't exit on errors, although they may still result in error messages.
 @item ARGP_LONG_ONLY
 Use the gnu getopt `long-only' rules for parsing arguments.  This allows
 long-options to be recognized with only a single @samp{-}
-(i.e., @samp{-help}).  This results in a less useful interface, and its
+(i.e.  @samp{-help}).  This results in a less useful interface, and its
 use is discouraged as it conflicts with the way most GNU programs work
 as well as the GNU coding standards.
 
index 8b2c09ca79a4644eb4f6a7eac155bc5f3b189621..5063246d61620605eb7808a350406fa76a5ef46e 100644 (file)
@@ -207,7 +207,7 @@ and transmittal.  Because each single wide character consists of more
 than one byte, they are effected by byte-ordering.  Thus, machines with
 different endianesses would see different values when accessing the same
 data.  This byte ordering concern also applies for communication protocols
-that are all byte-based and therefore require that the sender has to
+that are all byte-based and, thereforet require that the sender has to
 decide about splitting the wide character in bytes.  A last (but not least
 important) point is that wide characters often require more storage space
 than a customized byte-oriented character set.
@@ -737,7 +737,7 @@ the return value is @math{0}.  If the next @var{n} bytes form a valid
 multibyte character, the number of bytes belonging to this multibyte
 character byte sequence is returned.
 
-If the first @var{n} bytes possibly form a valid multibyte
+If the the first @var{n} bytes possibly form a valid multibyte
 character but the character is incomplete, the return value is
 @code{(size_t) -2}.  Otherwise the multibyte character sequence is invalid
 and the return value is @code{(size_t) -1}.
@@ -2231,7 +2231,7 @@ ordering of the processor (or at least the running process) is not the
 same as the one required for UCS-4.  This is done for performance reasons
 as one does not want to perform unnecessary byte-swapping operations if
 one is not interested in actually seeing the result in UCS-4.  To avoid
-trouble with endianness, the internal representation consistently is named
+trouble with endianess, the internal representation consistently is named
 @code{INTERNAL} even on big-endian systems where the representations are
 identical.
 
index 605e305071d9a4146823fdeffbc21ca56fe2175c..ef00db6b7b7aea5079e53ba5b9dee1faa56686a2 100644 (file)
@@ -1454,6 +1454,11 @@ Inquire about the value of @code{_POSIX_ASYNC_IO}.
 @item _PC_PRIO_IO
 Inquire about the value of @code{_POSIX_PRIO_IO}.
 
+@comment unistd.h
+@comment POSIX.1g
+@item _PC_SOCK_MAXBUF
+Inquire about the value of @code{_POSIX_PIPE_BUF}.
+
 @comment unistd.h
 @comment LFS
 @item _PC_FILESIZEBITS
index dd9f861dc86ebf81f16281348d79544ca26a28cd..e230506427a5fb45ef4f49b876ad690f2c2ed92b 100644 (file)
@@ -1434,7 +1434,7 @@ like those given to the @code{printf} family of functions.  The
 arguments required for the format can follow the @var{format} parameter.
 Just like @code{perror}, @code{error} also can report an error code in
 textual form.  But unlike @code{perror} the error value is explicitly
-passed to the function in the @var{errnum} parameter.  This eliminates
+passed to the function in the @var{errnum} parameter.  This elimintates
 the problem mentioned above that the error reporting function must be
 called immediately after the function causing the error since otherwise
 @code{errno} might have a different value.
@@ -1479,7 +1479,7 @@ in an input file (like a programming language source code file etc).
 
 If the global variable @code{error_one_per_line} is set to a non-zero
 value @code{error_at_line} will avoid printing consecutive messages for
-the same file and line.  Repetition which are not directly following
+the same file anem line.  Repetition which are not directly following
 each other are not caught.
 
 Just like @code{error} this function only returned if @var{status} is
index 9719d419468d5c7e99ab2b6d48f5071e4d3300aa..2436f22e884fb7e9771c2e346566f69c02d63ddc 100644 (file)
@@ -131,7 +131,7 @@ this function is deprecated.
 @comment GNU
 @deftypefun {char *} get_current_dir_name (void)
 @vindex PWD
-This @code{get_current_dir_name} function is basically equivalent to
+This @code{get_current_dir_name} function is bascially equivalent to
 @w{@code{getcwd (NULL, 0)}}.  The only difference is that the value of
 the @code{PWD} variable is returned if this value is correct.  This is a
 subtle difference which is visible if the path described by the
@@ -917,7 +917,7 @@ function returns a value other than @math{0} this value is returned as
 the return value of @code{ftw}.
 
 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
-32-bit system this function is in fact @code{ftw64}, i.e., the LFS
+32-bit system this function is in fact @code{ftw64}, i.e. the LFS
 interface transparently replaces the old interface.
 @end deftypefun
 
@@ -990,7 +990,7 @@ accordingly.  If the return value of a callback invocation was non-zero
 then that value is returned.
 
 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
-32-bit system this function is in fact @code{nftw64}, i.e., the LFS
+32-bit system this function is in fact @code{nftw64}, i.e. the LFS
 interface transparently replaces the old interface.
 @end deftypefun
 
@@ -1434,7 +1434,7 @@ the existing directory named @var{newname} is deleted first.  The name
 
 One useful feature of @code{rename} is that the meaning of @var{newname}
 changes ``atomically'' from any previously existing file by that name to
-its new meaning (i.e., the file that was called @var{oldname}).  There is
+its new meaning (i.e. the file that was called @var{oldname}).  There is
 no instant at which @var{newname} is non-existent ``in between'' the old
 meaning and the new meaning.  If there is a system crash during the
 operation, it is possible for both names to still exist; but
@@ -3104,7 +3104,7 @@ terminates abnormally).
 This function is reentrant.
 
 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
-32-bit system this function is in fact @code{tmpfile64}, i.e., the LFS
+32-bit system this function is in fact @code{tmpfile64}, i.e. the LFS
 interface transparently replaces the old interface.
 @end deftypefun
 
index 82c5e962a045eee3303ba6699300d11b4ea8da3c..96f6d9df55329aad258f1d7be22ae109b5f9a5e6 100644 (file)
@@ -1274,7 +1274,7 @@ type of a particular structure member.
 @comment ISO
 @deftypefn {Macro} size_t offsetof (@var{type}, @var{member})
 This expands to a integer constant expression that is the offset of the
-structure member named @var{member} in the structure type @var{type}.
+structure member named @var{member} in the structure type @var{type}.
 For example, @code{offsetof (struct s, elem)} is the offset, in bytes,
 of the member @code{elem} in a @code{struct s}.
 
index 567db981a30ac836687d9ba200efd19dd9461789..2b9221233a291c8734e58ec3e65162095af7ea18 100644 (file)
@@ -156,7 +156,7 @@ subdirectories under it intended to be new specific categories.
 to look for a system-dependent version of a file that's not in
 @file{generic}.  This means that any system-dependent source file must
 have an analogue in @file{generic}, even if the routines defined by that
-file are not implemented on other platforms.  Second, the @file{generic}
+file are not implemented on other platforms.  Second. the @file{generic}
 version of a system-dependent file is used if the makefiles do not find
 a version specific to the system you're compiling for.
 
index cbe147b71207dd0a9daacc2321921c611c06240c..91b9d84eb2694ce0ef5f27920c0d40dc93c63802 100644 (file)
@@ -31,7 +31,7 @@ One of the most basic resources a process has available to it is memory.
 There are a lot of different ways systems organize memory, but in a
 typical one, each process has one linear virtual address space, with
 addresses running from zero to some huge maximum.  It need not be
-contiguous; i.e., not all of these addresses actually can be used to
+contiguous; i.e.  not all of these addresses actually can be used to
 store data.
 
 The virtual memory is divided into pages (4 kilobytes is typical).
@@ -1065,7 +1065,7 @@ This is the total size of memory occupied by free (not in use) chunks.
 
 @item int keepcost
 This is the size of the top-most releasable chunk that normally
-borders the end of the heap (i.e., the high end of the virtual address
+borders the end of the heap (i.e. the high end of the virtual address
 space's data segment).
 
 @end table
@@ -2407,7 +2407,7 @@ of the data segment is.
 @cindex paging
 
 You can tell the system to associate a particular virtual memory page
-with a real page frame and keep it that way --- i.e., cause the page to
+with a real page frame and keep it that way --- i.e. cause the page to
 be paged in if it isn't already and mark it so it will never be paged
 out and consequently will never cause a page fault.  This is called
 @dfn{locking} a page.
@@ -2467,7 +2467,7 @@ A memory lock is associated with a virtual page, not a real frame.  The
 paging rule is: If a frame backs at least one locked page, don't page it
 out.
 
-Memory locks do not stack.  I.e., you can't lock a particular page twice
+Memory locks do not stack.  I.e. you can't lock a particular page twice
 so that it has to be unlocked twice before it is truly unlocked.  It is
 either locked or it isn't.
 
index e772b2de1fd068d86ccf847e9ae0b033092c1d7a..1507a6d04afa0c4da959e5d51e9742a9c8b91a36 100644 (file)
@@ -1810,8 +1810,8 @@ help to understand the input better.
 
 Other programs help to manage development cycle when new messages appear
 in the source files or when a new translation of the messages appear.
-Here it should only be noted that using all the tools in GNU gettext it
-is possible to @emph{completely} automate the handling of message
+here it should only be noted that using all the tools in GNU gettext it
+is possible to @emph{completely} automize the handling of message
 catalog.  Beside marking the translatable string in the source code and
 generating the translations the developers do not have anything to do
 themselves.
index aabd28976a79a596c0e256f1e4b56852e9b0d3a8..df77408e684b4493e094c6911ecc90ddd0b96b77 100644 (file)
@@ -584,7 +584,7 @@ to}, but doesn't @emph{need to} run occupies the CPU.
 @cindex preemptive scheduling
 When two processes are in contention to use the CPU at any instant, the
 one with the higher absolute priority always gets it.  This is true even if the
-process with the lower priority is already using the CPU (i.e., the
+process with the lower priority is already using the CPU (i.e. the
 scheduling is preemptive).  Of course, we're only talking about
 processes that are running or ``ready to run,'' which means they are
 ready to execute instructions right now.  When a process blocks to wait
@@ -819,7 +819,7 @@ existing policy is not @code{SCHED_OTHER}.
 
 @item
 The calling process does not have @code{CAP_SYS_NICE} permission and its
-owner is not the target process' owner.  I.e., the effective uid of the
+owner is not the target process' owner.  I.e.  the effective uid of the
 calling process is neither the effective nor the real uid of process
 @var{pid}.
 @c We need a cross reference to the capabilities section, when written.
@@ -1185,7 +1185,7 @@ The value of @var{class} is not valid.
 
 @item EPERM
 The call would set the nice value of a process which is owned by a different
-user than the calling process (i.e., the target process' real or effective
+user than the calling process (i.e. the target process' real or effective
 uid does not match the calling process' effective uid) and the calling
 process does not have @code{CAP_SYS_NICE} permission.
 
@@ -1215,7 +1215,7 @@ a process group ID (pgid).
 @comment sys/resource.h
 @comment BSD
 @item PRIO_USER
-All the processes owned by a particular user (i.e., whose real uid
+All the processes owned by a particular user (i.e. whose real uid
 indicates the user).  The argument @var{id} is a user ID (uid).
 @end vtable
 
@@ -1272,7 +1272,7 @@ other process or thread is allowed to use.
 @item
 The access to certain resources (RAM, I/O ports) has different costs
 from different CPUs.  This is the case in NUMA (Non-Uniform Memory
-Architecture) machines.  Preferably memory should be accessed locally
+Architecture) machines.  Preferrably memory should be accessed locally
 but this requirement is usually not visible to the scheduler.
 Therefore forcing a process or thread to the CPUs which have local
 access to the mostly used memory helps to significantly boost the
index 0afd0aecd06c885e7f991d4e4623239b9db5abf4..1ac2653f1694df8f4ac4e3288dd795d61a20c2ae 100644 (file)
@@ -82,7 +82,7 @@ starting at @var{base} if it is found.  If no matching element is
 available @code{NULL} is returned.
 
 The mean runtime of this function is @code{*@var{nmemb}}/2.  This
-function should only be used if elements often get added to or deleted from
+function should only be used elements often get added to or deleted from
 the array in which case it might not be useful to sort the array before
 searching.
 @end deftypefun
@@ -247,21 +247,21 @@ Couldn't find Janice.
 @node Hash Search Function
 @section The @code{hsearch} function.
 
-The functions mentioned so far in this chapter are for searching in a sorted
+The functions mentioned so far in this chapter are searching in a sorted
 or unsorted array.  There are other methods to organize information
 which later should be searched.  The costs of insert, delete and search
 differ.  One possible implementation is using hashing tables.
-The following functions are declared in the header file @file{search.h}.
+The following functions are declared in the the header file @file{search.h}.
 
 @comment search.h
 @comment SVID
 @deftypefun int hcreate (size_t @var{nel})
 The @code{hcreate} function creates a hashing table which can contain at
 least @var{nel} elements.  There is no possibility to grow this table so
-it is necessary to choose the value for @var{nel} wisely.  The method
-used to implement this function might make it necessary to make the
+it is necessary to choose the value for @var{nel} wisely.  The used
+methods to implement this function might make it necessary to make the
 number of elements in the hashing table larger than the expected maximal
-number of elements.  Hashing tables usually work inefficiently if they are
+number of elements.  Hashing tables usually work inefficient if they are
 filled 80% or more.  The constant access time guaranteed by hashing can
 only be achieved if few collisions exist.  See Knuth's ``The Art of
 Computer Programming, Part 3: Searching and Sorting'' for more
@@ -368,9 +368,9 @@ necessary for the @code{struct hsearch_data} object can be allocated
 dynamically.  It must be initialized with zero before calling this
 function.
 
-The return value is non-zero if the operation was successful.  If the
-return value is zero, something went wrong, which probably means the
-programs ran out of memory.
+The return value is non-zero if the operation were successful.  if the
+return value is zero something went wrong which probably means the
+programs runs out of memory.
 @end deftypefun
 
 @comment search.h
index dfaaa889506da92ed9075efdf0594ccc7a5b8c2f..cbf746639acaac8ff81bf993d568c22202efeb3d 100644 (file)
@@ -2567,7 +2567,7 @@ The prototype for the @code{sigprocmask} function is in @file{signal.h}.
 Note that you must not use @code{sigprocmask} in multi-threaded processes,
 because each thread has its own signal mask and there is no single process
 signal mask. According to POSIX, the behavior of @code{sigprocmask} in a
-multi-threaded process is ``unspecified''.
+multi-threaded process is ``unspeficied''.
 Instead, use @code{pthread_sigmask}.
 @ifset linuxthreads
 @xref{Threads and Signal Handling}.
index 79c79683f74a93dd24cea98620f02a64e0bcb3e0..5ccb78b9585687c71b8fd1bacfac6b593d5b8cad 100644 (file)
@@ -830,7 +830,7 @@ mean that there was difficulty in opening the files.
 Don't confuse a program's exit status with a process' termination status.
 There are lots of ways a process can terminate besides having it's program
 finish.  In the event that the process termination @emph{is} caused by program
-termination (i.e., @code{exit}), though, the program's exit status becomes
+termination (i.e. @code{exit}), though, the program's exit status becomes
 part of the process' termination status.
 
 @node Cleanups on Exit
index 30a6e6ebe07222b886b0e081f7ec7a9944b4a152..977989d95ee4e256fd9b5a794569952f5191ae63 100644 (file)
@@ -433,7 +433,7 @@ see @ref{Stream Buffering}.
 @cindex multi-threaded application
 Streams can be used in multi-threaded applications in the same way they
 are used in single-threaded applications.  But the programmer must be
-aware of the possible complications.  It is important to know about
+aware of the possible complications.  It is important to know about
 these also if the program one writes never use threads since the design
 and implementation of many stream functions is heavily influenced by the
 requirements added by multi-threaded programming.
@@ -1992,7 +1992,7 @@ the precision.  The exponent always contains at least two digits.  The
 The @samp{%g} and @samp{%G} conversions print the argument in the style
 of @samp{%e} or @samp{%E} (respectively) if the exponent would be less
 than -4 or greater than or equal to the precision; otherwise they use
-the @samp{%f} style.  A precision of @code{0}, is taken as 1.
+the @samp{%f} style.  A precision of @code{0}, is taken as 1. is
 Trailing zeros are removed from the fractional portion of the result and
 a decimal-point character appears only if it is followed by a digit.
 
index 2fe60395ebd2607b6bed0cb130ac51fc34e92412..f582bad96d54ea7051584e8ee6ea6beacbb7db90 100644 (file)
@@ -1187,8 +1187,8 @@ regards these characters as parts of the alphabet they do match.
 @comment ISO
 @deftypefun int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{size})
 This function is the similar to @code{strcmp}, except that no more than
-@var{size} characters are compared.  In other words, if the two
-strings are the same in their first @var{size} characters, the
+@var{size} wide characters are compared.  In other words, if the two
+strings are the same in their first @var{size} wide characters, the
 return value is zero.
 @end deftypefun
 
@@ -1962,6 +1962,11 @@ If the end of the string @var{newstring} is reached, or if the remainder of
 string consists only of delimiter characters, @code{strtok} returns
 a null pointer.
 
+Note that ``character'' is here used in the sense of byte.  In a string
+using a multibyte character encoding (abstract) character consisting of
+more than one byte are not treated as an entity.  Each byte is treated
+separately.  The function is not locale-dependent.
+
 Note that ``character'' is here used in the sense of byte.  In a string
 using a multibyte character encoding (abstract) character consisting of
 more than one byte are not treated as an entity.  Each byte is treated
index 8f2dd451be8ee27929785b5b6182aef2289ba7eb..0a44830359031f518fcbe6a2e348d7c2d9893019 100644 (file)
@@ -872,7 +872,7 @@ shall be accessible while the filesystem is mounted.
 
 @item MS_SYNCHRONOUS
 This bit on specifies that all writes to the filesystem while it is
-mounted shall be synchronous; i.e., data shall be synced before each
+mounted shall be synchronous; i.e. data shall be synced before each
 write completes rather than held in the buffer cache.
 
 @item MS_MANDLOCK
index 3d7def83f799ab13ef887f31247ff3b775800cab..df4179e27aab1427ded2284786e6b5763b6b5c12 100644 (file)
@@ -370,7 +370,7 @@ The message is only for debugging purposes.
 
 Results are undefined if the priority code is anything else.
 
-If the process does not presently have a Syslog connection open (i.e.,
+If the process does not presently have a Syslog connection open (i.e.
 it did not call @code{openlog}), @code{syslog} implicitly opens the
 connection the same as @code{openlog} would, with the following defaults
 for information that would otherwise be included in an @code{openlog}
index a3e8438bcefa006b07ef7aede962aafd36f6da10..9b87d3eed0612f1ac0a1c81cda2605870a6c7067 100644 (file)
@@ -193,7 +193,7 @@ total amount of time a process has actively used a CPU since some
 arbitrary event.  On the GNU system, that event is the creation of the
 process.  While arbitrary in general, the event is always the same event
 for any particular process, so you can always measure how much time on
-the CPU a particular computation takes by examining the process' CPU
+the CPU a particular computation takes by examinining the process' CPU
 time before and after the computation.
 @cindex CPU time
 @cindex clock ticks
@@ -447,7 +447,7 @@ current calendar time is not available, the value
 @comment time.h
 @comment SVID, XPG
 @deftypefun int stime (time_t *@var{newtime})
-@code{stime} sets the system clock, i.e., it tells the system that the
+@code{stime} sets the system clock, i.e.  it tells the system that the
 current calendar time is @var{newtime}, where @code{newtime} is
 interpreted as described in the above definition of @code{time_t}.
 
@@ -1470,7 +1470,7 @@ widely available.
 @node Low-Level Time String Parsing
 @subsubsection Interpret string according to given format
 
-The first function is rather low-level.  It is nevertheless frequently
+he first function is rather low-level.  It is nevertheless frequently
 used in software since it is better known.  Its interface and
 implementation are heavily influenced by the @code{getdate} function,
 which is defined and implemented in terms of calls to @code{strptime}.
@@ -1790,7 +1790,7 @@ process.  If the input string contains more characters than required by
 the format string the return value points right after the last consumed
 input character.  If the whole input string is consumed the return value
 points to the @code{NULL} byte at the end of the string.  If an error
-occurs, i.e., @code{strptime} fails to match all of the format string,
+occurs, i.e. @code{strptime} fails to match all of the format string,
 the function returns @code{NULL}.
 @end deftypefun
 
index 2f168c9a6ddf5d6a28c05e40c5ab01348d4ef079..158be4231ac79a53095ecf928de58c00af718f45 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Geoffrey Keating <Geoff.Keating@anu.edu.au>, 1997.
 
@@ -171,10 +171,8 @@ main (void)
 
    memset (e2, '\0', sizeof (mp1));
    for (i = -1; i < 100 && i < FRAC / 4; i++)
-     e2[(FRAC - i * 4 - 4) / mpbpl] |= ((mp_limb_t) (strchr (hexdig,
-                                                            exp1[i + 1])
-                                                    - hexdig)
-                                       << (FRAC - i * 4 - 4) % mpbpl);
+     e2[(FRAC - i * 4 - 4) / mpbpl] |= ((strchr (hexdig, exp1[i + 1]) - hexdig)
+                                       << (FRAC - i * 4 - 4) % mpbpl);
 
    if (mpn_cmp (ex, e2, SZ) >= 0)
      mpn_sub_n (e3, ex, e2, SZ);
index 2c028a2b8386852dd7c5ab6693dc280b8563ba2c..33d942fc61e82933a1a442f4dad8a265c514a293 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Geoffrey Keating <Geoff.Keating@anu.edu.au>, 1997.
 
@@ -73,9 +73,8 @@ read_mpn_hex(mp_limb_t *x, const char *str)
 
   memset (x, 0, sizeof (mp1));
   for (i = -1; i < 100 && i < FRAC / 4; ++i)
-    x[(FRAC - i * 4 - 4) / mpbpl] |= ((mp_limb_t) (strchr (hexdig, str[i + 1])
-                                                  - hexdig)
-                                     << (FRAC - i * 4 - 4) % mpbpl);
+    x[(FRAC - i * 4 - 4) / mpbpl] |= ((strchr (hexdig, str[i + 1]) - hexdig)
+                                     << (FRAC - i * 4 - 4) % mpbpl);
 }
 
 static mp_limb_t *get_log2(void) __attribute__((const));
index bef3521c9624e9c9f88fe22ec355bf7b35a53bb3..911aaec2754e25b1c4537b3f7ac87ea1ace3db3e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Geoffrey Keating <Geoff.Keating@anu.edu.au>, 1997.
 
@@ -239,11 +239,9 @@ main (void)
    memset (c2, 0, sizeof (mp1));
    for (i = 0; i < 100 && i < FRAC / 4; i++)
      {
-       s2[(FRAC - i * 4 - 4) / mpbpl] |= ((mp_limb_t) (strchr (hexdig, sin1[i])
-                                                      - hexdig)
-                                         << (FRAC - i * 4 - 4) % mpbpl);
-       c2[(FRAC - i * 4 - 4) / mpbpl] |= ((mp_limb_t) (strchr (hexdig, cos1[i])
-                                                      - hexdig)
+       s2[(FRAC - i * 4 - 4) / mpbpl] |= ((strchr (hexdig, sin1[i]) - hexdig)
+                                         << (FRAC - i * 4 - 4) % mpbpl);
+       c2[(FRAC - i * 4 - 4) / mpbpl] |= ((strchr (hexdig, cos1[i]) - hexdig)
                                          << (FRAC - i * 4 - 4) % mpbpl);
      }
 
index e42c0145724a48fc7e07d79ced14c4d6ecd9e80b..e48a3ae4e0d530abe838f166a2d93839b72056d5 100644 (file)
@@ -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.
    Contributed by Andreas Jaeger <aj@suse.de>, 1999.
 
@@ -44,7 +44,7 @@ NAME (void)                                                                 \
                                                                              \
   zero_var = 0.0;                                                            \
   one_var = 1.0;                                                             \
-  NaN_var = zero_var/zero_var;                                               \
+  NaN_var = zero_var / zero_var;                                             \
   Inf_var = one_var / zero_var;                                                      \
                                                                              \
   (void) &zero_var;                                                          \
@@ -103,21 +103,51 @@ NAME (void)                                                                     \
   check (#FLOAT " isinf (-HUGE_VALx) == -1", isinf (x1) == -1);                      \
 }
 
+#define TEST_TRUNC(NAME, FLOAT, DOUBLE) \
+void                                                                         \
+NAME (void)                                                                  \
+{                                                                            \
+  volatile DOUBLE Inf_var, NaN_var, zero_var, one_var;                       \
+  FLOAT x1, x2;                                                                      \
+                                                                             \
+  zero_var = 0.0;                                                            \
+  one_var = 1.0;                                                             \
+  NaN_var = zero_var / zero_var;                                             \
+  Inf_var = one_var / zero_var;                                                      \
+                                                                             \
+  (void) &NaN_var;                                                           \
+  (void) &Inf_var;                                                           \
+                                                                             \
+  x1 = (FLOAT) NaN_var;                                                              \
+  check (" "#FLOAT" x = ("#FLOAT") ("#DOUBLE") NaN", isnan (x1) != 0);       \
+  x2 = (FLOAT) Inf_var;                                                              \
+  check (" "#FLOAT" x = ("#FLOAT") ("#DOUBLE") Inf", isinf (x2) != 0);       \
+}
+
 TEST_FUNC (float_test, float, nanf, FLT_EPSILON, HUGE_VALF)
 TEST_FUNC (double_test, double, nan, DBL_EPSILON, HUGE_VAL)
+TEST_TRUNC (truncdfsf_test, float, double)
 #ifndef NO_LONG_DOUBLE
 TEST_FUNC (ldouble_test, long double, nanl, LDBL_EPSILON, HUGE_VALL)
+TEST_TRUNC (trunctfsf_test, float, long double)
+TEST_TRUNC (trunctfdf_test, double, long double)
 #endif
 
 int
-main (void)
+do_test (void)
 {
   float_test ();
   double_test ();
+  truncdfsf_test();
 
 #ifndef NO_LONG_DOUBLE
   ldouble_test ();
+  trunctfsf_test();
+  trunctfdf_test();
 #endif
 
   return errors != 0;
 }
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
index 2a967c75bf18f267944a2463c364c4e66ebb1700..1d21841ea663edf9b2c346a436bb5882132e0b73 100644 (file)
@@ -4,6 +4,9 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+float zero = 0.0;
+float inf = INFINITY;
+
 int
 main (void)
 {
@@ -34,6 +37,81 @@ main (void)
       ++result;
     }
 
+  i = 0;
+  m = FLT_MIN;
+  feclearexcept (FE_ALL_EXCEPT);
+  i = nextafterf (m, i);
+  if (i < 0 || i >= FLT_MIN)
+    {
+      puts ("nextafterf+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterf+ did not underflow");
+      ++result;
+    }
+  i = 0;
+  feclearexcept (FE_ALL_EXCEPT);
+  i = nextafterf (-m, -i);
+  if (i > 0 || i <= -FLT_MIN)
+    {
+      puts ("nextafterf- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterf- did not underflow");
+      ++result;
+    }
+  i = -INFINITY;
+  feclearexcept (FE_ALL_EXCEPT);
+  m = nextafterf (zero, inf);
+  if (m < 0.0 || m >= FLT_MIN)
+    {
+      puts ("nextafterf+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterf+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nextafterf (m, i) != 0.0)
+    {
+      puts ("nextafterf+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterf+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  m = nextafterf (copysignf (zero, -1.0), -inf);
+  if (m > 0.0 || m <= -FLT_MIN)
+    {
+      puts ("nextafterf- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterf- did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nextafterf (m, -i) != 0.0)
+    {
+      puts ("nextafterf- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterf- did not underflow");
+      ++result;
+    }
+
   double di = INFINITY;
   double dm = DBL_MAX;
   feclearexcept (FE_ALL_EXCEPT);
@@ -59,5 +137,182 @@ main (void)
       ++result;
     }
 
+  di = 0;
+  dm = DBL_MIN;
+  feclearexcept (FE_ALL_EXCEPT);
+  di = nextafter (dm, di);
+  if (di < 0 || di >= DBL_MIN)
+    {
+      puts ("nextafter+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafter+ did not underflow");
+      ++result;
+    }
+  di = 0;
+  feclearexcept (FE_ALL_EXCEPT);
+  di = nextafter (-dm, -di);
+  if (di > 0 || di <= -DBL_MIN)
+    {
+      puts ("nextafter- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafter- did not underflow");
+      ++result;
+    }
+  di = -INFINITY;
+  feclearexcept (FE_ALL_EXCEPT);
+  dm = nextafter (zero, inf);
+  if (dm < 0.0 || dm >= DBL_MIN)
+    {
+      puts ("nextafter+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafter+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nextafter (dm, di) != 0.0)
+    {
+      puts ("nextafter+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafter+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  dm = nextafter (copysign (zero, -1.0), -inf);
+  if (dm > 0.0 || dm <= -DBL_MIN)
+    {
+      puts ("nextafter- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafter- did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nextafter (dm, -di) != 0.0)
+    {
+      puts ("nextafter- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafter- did not underflow");
+      ++result;
+    }
+
+#ifndef NO_LONG_DOUBLE
+  long double li = INFINITY;
+  long double lm = LDBL_MAX;
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nextafterl (lm, li) != li)
+    {
+      puts ("nextafterl+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_OVERFLOW) == 0)
+    {
+      puts ("nextafterl+ did not overflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nextafterl (-lm, -li) != -li)
+    {
+      puts ("nextafterl failed");
+      ++result;
+    }
+  if (fetestexcept (FE_OVERFLOW) == 0)
+    {
+      puts ("nextafterl- did not overflow");
+      ++result;
+    }
+
+  li = 0;
+  lm = LDBL_MIN;
+  feclearexcept (FE_ALL_EXCEPT);
+  li = nextafterl (lm, li);
+  if (li < 0 || li >= LDBL_MIN)
+    {
+      puts ("nextafterl+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterl+ did not underflow");
+      ++result;
+    }
+  li = 0;
+  feclearexcept (FE_ALL_EXCEPT);
+  li = nextafterl (-lm, -li);
+  if (li > 0 || li <= -LDBL_MIN)
+    {
+      puts ("nextafterl- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterl- did not underflow");
+      ++result;
+    }
+  li = -INFINITY;
+  feclearexcept (FE_ALL_EXCEPT);
+  lm = nextafterl (zero, inf);
+  if (lm < 0.0 || lm >= LDBL_MIN)
+    {
+      puts ("nextafterl+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterl+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nextafterl (lm, li) != 0.0)
+    {
+      puts ("nextafterl+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterl+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  lm = nextafterl (copysign (zero, -1.0), -inf);
+  if (lm > 0.0 || lm <= -LDBL_MIN)
+    {
+      puts ("nextafterl- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterl- did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nextafterl (lm, -li) != 0.0)
+    {
+      puts ("nextafterl- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nextafterl- did not underflow");
+      ++result;
+    }
+#endif
+
   return result;
 }
index e306a129c2cac1567ec1bcb4a52dda0ad6eec3a1..ff57e5e3f519a9ee6d12acf3ce441387c3e3d72a 100644 (file)
@@ -4,6 +4,9 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+float zero = 0.0;
+float inf = INFINITY;
+
 int
 main (void)
 {
@@ -35,6 +38,81 @@ main (void)
       ++result;
     }
 
+  fi = 0;
+  m = FLT_MIN;
+  feclearexcept (FE_ALL_EXCEPT);
+  fi = nexttowardf (m, fi);
+  if (fi < 0 || fi >= FLT_MIN)
+    {
+      puts ("nexttowardf+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardf+ did not underflow");
+      ++result;
+    }
+  fi = 0;
+  feclearexcept (FE_ALL_EXCEPT);
+  fi = nexttowardf (-m, -fi);
+  if (fi > 0 || fi <= -FLT_MIN)
+    {
+      puts ("nexttowardf- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardf- did not underflow");
+      ++result;
+    }
+  fi = -INFINITY;
+  feclearexcept (FE_ALL_EXCEPT);
+  m = nexttowardf (zero, inf);
+  if (m < 0.0 || m >= FLT_MIN)
+    {
+      puts ("nexttowardf+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardf+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nexttowardf (m, fi) != 0.0)
+    {
+      puts ("nexttowardf+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardf+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  m = nexttowardf (copysignf (zero, -1.0), -inf);
+  if (m > 0.0 || m <= -FLT_MIN)
+    {
+      puts ("nexttowardf- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardf- did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nexttowardf (m, -fi) != 0.0)
+    {
+      puts ("nexttowardf- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardf- did not underflow");
+      ++result;
+    }
+
   tl = (long double) DBL_MAX + 1.0e305L;
   double di = INFINITY;
   double dm = DBL_MAX;
@@ -61,5 +139,182 @@ main (void)
       ++result;
     }
 
+  di = 0;
+  dm = DBL_MIN;
+  feclearexcept (FE_ALL_EXCEPT);
+  di = nexttoward (dm, di);
+  if (di < 0 || di >= DBL_MIN)
+    {
+      puts ("nexttoward+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttoward+ did not underflow");
+      ++result;
+    }
+  di = 0;
+  feclearexcept (FE_ALL_EXCEPT);
+  di = nexttoward (-dm, -di);
+  if (di > 0 || di <= -DBL_MIN)
+    {
+      puts ("nexttoward- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttoward- did not underflow");
+      ++result;
+    }
+  di = -INFINITY;
+  feclearexcept (FE_ALL_EXCEPT);
+  dm = nexttoward (zero, inf);
+  if (dm < 0.0 || dm >= DBL_MIN)
+    {
+      puts ("nexttoward+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttoward+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nexttoward (dm, di) != 0.0)
+    {
+      puts ("nexttoward+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttoward+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  dm = nexttoward (copysign (zero, -1.0), -inf);
+  if (dm > 0.0 || dm <= -DBL_MIN)
+    {
+      puts ("nexttoward- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttoward- did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nexttoward (dm, -di) != 0.0)
+    {
+      puts ("nexttoward- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttoward- did not underflow");
+      ++result;
+    }
+
+#ifndef NO_LONG_DOUBLE
+  long double li = INFINITY;
+  long double lm = LDBL_MAX;
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nexttowardl (lm, li) != li)
+    {
+      puts ("nexttowardl+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_OVERFLOW) == 0)
+    {
+      puts ("nexttowardl+ did not overflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nexttowardl (-lm, -li) != -li)
+    {
+      puts ("nexttowardl failed");
+      ++result;
+    }
+  if (fetestexcept (FE_OVERFLOW) == 0)
+    {
+      puts ("nexttowardl- did not overflow");
+      ++result;
+    }
+
+  li = 0;
+  lm = LDBL_MIN;
+  feclearexcept (FE_ALL_EXCEPT);
+  li = nexttowardl (lm, li);
+  if (li < 0 || li >= LDBL_MIN)
+    {
+      puts ("nexttowardl+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardl+ did not underflow");
+      ++result;
+    }
+  li = 0;
+  feclearexcept (FE_ALL_EXCEPT);
+  li = nexttowardl (-lm, -li);
+  if (li > 0 || li <= -LDBL_MIN)
+    {
+      puts ("nexttowardl- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardl- did not underflow");
+      ++result;
+    }
+  li = -INFINITY;
+  feclearexcept (FE_ALL_EXCEPT);
+  lm = nexttowardl (zero, inf);
+  if (lm < 0.0 || lm >= LDBL_MIN)
+    {
+      puts ("nexttowardl+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardl+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nexttowardl (lm, li) != 0.0)
+    {
+      puts ("nexttowardl+ failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardl+ did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  lm = nexttowardl (copysign (zero, -1.0), -inf);
+  if (lm > 0.0 || lm <= -LDBL_MIN)
+    {
+      puts ("nexttowardl- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardl- did not underflow");
+      ++result;
+    }
+  feclearexcept (FE_ALL_EXCEPT);
+  if (nexttowardl (lm, -li) != 0.0)
+    {
+      puts ("nexttowardl- failed");
+      ++result;
+    }
+  if (fetestexcept (FE_UNDERFLOW) == 0)
+    {
+      puts ("nexttowardl- did not underflow");
+      ++result;
+    }
+#endif
+
   return result;
 }
index 23ee6beaa8aa831c9d95d8490f54f76a816a20c7..81dd364f77ffb66f3a6e02ff24261a95661b147c 100644 (file)
@@ -4127,7 +4127,9 @@ log_test (void)
   TEST_f_f (log, 1, 0);
 
   TEST_f_f (log, -1, nan_value, INVALID_EXCEPTION);
+  TEST_f_f (log, minus_infty, nan_value, INVALID_EXCEPTION);
   TEST_f_f (log, plus_infty, plus_infty);
+  TEST_f_f (log, nan_value, nan_value);
 
   TEST_f_f (log, M_El, 1);
   TEST_f_f (log, 1.0 / M_El, -1);
@@ -4157,6 +4159,7 @@ log10_test (void)
 
   /* log10 (x) == NaN plus invalid exception if x < 0.  */
   TEST_f_f (log10, -1, nan_value, INVALID_EXCEPTION);
+  TEST_f_f (log10, minus_infty, nan_value, INVALID_EXCEPTION);
 
   TEST_f_f (log10, plus_infty, plus_infty);
   TEST_f_f (log10, nan_value, nan_value);
@@ -4188,6 +4191,7 @@ log1p_test (void)
 
   TEST_f_f (log1p, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION);
   TEST_f_f (log1p, -2, nan_value, INVALID_EXCEPTION);
+  TEST_f_f (log1p, minus_infty, nan_value, INVALID_EXCEPTION);
 
   TEST_f_f (log1p, plus_infty, plus_infty);
   TEST_f_f (log1p, nan_value, nan_value);
@@ -4218,6 +4222,7 @@ log2_test (void)
   TEST_f_f (log2, 1, 0);
 
   TEST_f_f (log2, -1, nan_value, INVALID_EXCEPTION);
+  TEST_f_f (log2, minus_infty, nan_value, INVALID_EXCEPTION);
 
   TEST_f_f (log2, plus_infty, plus_infty);
   TEST_f_f (log2, nan_value, nan_value);
@@ -4614,6 +4619,17 @@ pow_test (void)
 
   /* pow (x, NaN) == NaN.  */
   TEST_ff_f (pow, 3.0, nan_value, nan_value);
+  TEST_ff_f (pow, minus_zero, nan_value, nan_value);
+  TEST_ff_f (pow, plus_infty, nan_value, nan_value);
+  TEST_ff_f (pow, -3.0, nan_value, nan_value);
+  TEST_ff_f (pow, minus_infty, nan_value, nan_value);
+
+  TEST_ff_f (pow, nan_value, 3.0, nan_value);
+  TEST_ff_f (pow, nan_value, -3.0, nan_value);
+  TEST_ff_f (pow, nan_value, plus_infty, nan_value);
+  TEST_ff_f (pow, nan_value, minus_infty, nan_value);
+  TEST_ff_f (pow, nan_value, 2.5, nan_value);
+  TEST_ff_f (pow, nan_value, -2.5, nan_value);
 
   TEST_ff_f (pow, 1, plus_infty, 1);
   TEST_ff_f (pow, -1, plus_infty, 1);
index 572e546831448b254eea71eb1490b26eedcdb840..129646f8c59335cb25eeee5dd3396dae0f66f156 100644 (file)
@@ -332,4 +332,10 @@ extern double __slowexp (double __x);
 extern double __slowpow (double __x, double __y, double __z);
 extern void __docos (double __x, double __dx, double __v[]);
 
+#ifndef math_opt_barrier
+#define math_opt_barrier(x) \
+({ __typeof (x) __x = x; __asm ("" : "+m" (__x)); __x; })
+#define math_force_eval(x) __asm __volatile ("" : : "m" (x))
+#endif
+
 #endif /* _MATH_PRIVATE_H_ */
index 9c678b79c57c0efb9cf3e8fd412deb284daf94c9..d2af52dda38d280d0bf7c617b5542278e1581fbe 100644 (file)
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: s_nextafter.c,v 1.8 1995/05/10 20:47:58 jtc Exp
 #define nexttoward __internal_nexttoward
 
 #include <math.h>
-#include "math_private.h"
+#include <math_private.h>
 #include <float.h>
 
 #ifdef __STDC__
@@ -49,9 +49,12 @@ static char rcsid[] = "$NetBSD: s_nextafter.c,v 1.8 1995/05/10 20:47:58 jtc Exp
           return x+y;
        if(x==y) return y;              /* x=y, return y */
        if((ix|lx)==0) {                        /* x == 0 */
+           double u;
            INSERT_WORDS(x,hy&0x80000000,1);    /* return +-minsubnormal */
-           y = x*x;
-           if(y==x) return y; else return x;   /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u*u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if(hx>hy||((hx==hy)&&(lx>ly))) {    /* x > y, x -= ulp */
@@ -74,15 +77,12 @@ static char rcsid[] = "$NetBSD: s_nextafter.c,v 1.8 1995/05/10 20:47:58 jtc Exp
        if(hy>=0x7ff00000) {
          x = x+x;      /* overflow  */
          if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
-           asm ("" : "=m"(x) : "m"(x));
+           asm ("" : "+m"(x));
          return x;     /* overflow  */
        }
-       if(hy<0x00100000) {             /* underflow */
-           y = x*x;
-           if(y!=x) {          /* raise underflow flag */
-               INSERT_WORDS(y,hx,lx);
-               return y;
-           }
+       if(hy<0x00100000) {
+           double u = x*x;                     /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        INSERT_WORDS(x,hx,lx);
        return x;
index 1a1026612e2ebe076e44fe57150fcd66a49a31cb..0494d1a4e9b64d7dd9a16136be057e0fef24edf7 100644 (file)
@@ -21,7 +21,7 @@
  */
 
 #include <math.h>
-#include "math_private.h"
+#include <math_private.h>
 #include <float.h>
 
 #ifdef __STDC__
           return x+y;
        if((long double) x==y) return y;        /* x=y, return y */
        if(ix==0) {                             /* x == 0 */
-           float x2;
+           float u;
            SET_FLOAT_WORD(x,(u_int32_t)(hy&0x80000000)|1);/* return +-minsub*/
-           x2 = x*x;
-           if(x2==x) return x2; else return x; /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                 /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if(hy<0||(ix>>23)>(iy>>20)-0x380
          x = x+x;      /* overflow  */
          if (FLT_EVAL_METHOD != 0)
            /* Force conversion to float.  */
-           asm ("" : "=m"(x) : "m"(x));
+           asm ("" : "+m"(x));
          return x;
        }
-       if(hy<0x00800000) {             /* underflow */
-           float x2 = x*x;
-           if(x2!=x) {         /* raise underflow flag */
-               SET_FLOAT_WORD(x2,hx);
-               return x2;
-           }
+       if(hy<0x00800000) {
+           float u = x*x;                      /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        SET_FLOAT_WORD(x,hx);
        return x;
index d2393cc8406ed08824d47689039aeedd014b494d..862e11f0c3b27fcf8abb8ae9b75574228fd97cb8 100644 (file)
@@ -1,5 +1,5 @@
 /* Miscellaneous tests which don't fit anywhere else.
-   Copyright (C) 2000, 2001, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001, 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
@@ -44,7 +44,6 @@ main (void)
       }
   }
 
-# if __GNUC__ >= 3 || __GNUC_MINOR__ >= 96
   {
     long double x;
     long double m;
@@ -52,17 +51,17 @@ main (void)
     int e;
     int i;
 
-#  if LDBL_MANT_DIG == 64
+# if LDBL_MANT_DIG == 64
     m = 0xf.fffffffffffffffp-4L;
-#  elif LDBL_MANT_DIG == 106
+# elif LDBL_MANT_DIG == 106
     /* This has to match the mantissa of LDBL_MAX which actually does have a
        missing bit in the middle.  */
     m = 0x1.fffffffffffff7ffffffffffff8p-1L;
-#  elif LDBL_MANT_DIG == 113
+# elif LDBL_MANT_DIG == 113
     m = 0x1.ffffffffffffffffffffffffffffp-1L;
-#  else
-#   error "Please adjust"
-#  endif
+# else
+#  error "Please adjust"
+# endif
 
     for (i = LDBL_MAX_EXP, x = LDBL_MAX; i >= LDBL_MIN_EXP; --i, x /= 2.0L)
       {
@@ -106,9 +105,8 @@ main (void)
       }
 
   }
-# endif
 
-#if 0
+# if 0
   {
     int e;
     long double r = frexpl (LDBL_MIN * LDBL_EPSILON, &e);
@@ -126,7 +124,7 @@ main (void)
        result = 1;
       }
   }
-#endif
+# endif
 #endif
 
   {
@@ -1183,5 +1181,59 @@ main (void)
     }
 #endif
 
+  volatile float f1 = FLT_MAX;
+  volatile float f2 = FLT_MAX / 2;
+  (void) &f1;
+  (void) &f2;
+  feclearexcept (FE_ALL_EXCEPT);
+  f2 += f1;
+  int fe = fetestexcept (FE_ALL_EXCEPT);
+  if (fe != (FE_OVERFLOW | FE_INEXACT))
+    {
+      printf ("float overflow test failed: %x\n", fe);
+      result = 1;
+    }
+
+  volatile double d1 = DBL_MAX;
+  volatile double d2 = DBL_MAX / 2;
+  (void) &d1;
+  (void) &d2;
+  feclearexcept (FE_ALL_EXCEPT);
+  d2 += d1;
+  fe = fetestexcept (FE_ALL_EXCEPT);
+  if (fe != (FE_OVERFLOW | FE_INEXACT))
+    {
+      printf ("double overflow test failed: %x\n", fe);
+      result = 1;
+    }
+
+#ifndef NO_LONG_DOUBLE
+  volatile long double ld1 = LDBL_MAX;
+  volatile long double ld2 = LDBL_MAX / 2;
+  (void) &ld1;
+  (void) &ld2;
+  feclearexcept (FE_ALL_EXCEPT);
+  ld2 += ld1;
+  fe = fetestexcept (FE_ALL_EXCEPT);
+  if (fe != (FE_OVERFLOW | FE_INEXACT))
+    {
+      printf ("long double overflow test failed: %x\n", fe);
+      result = 1;
+    }
+#endif
+
+#if !defined NO_LONG_DOUBLE && LDBL_MANT_DIG == 113
+  volatile long double ld3 = 0x1.0000000000010000000100000001p+1;
+  volatile long double ld4 = 0x1.0000000000000000000000000001p+1;
+  (void) &ld3;
+  (void) &ld4;
+  ld3 -= ld4;
+  if (ld3 != 0x1.0p-47)
+    {
+      printf ("long double subtraction test failed %.28La\n", ld3);
+      result = 1;
+    }
+#endif
+
   return result;
 }
index dbef959dd85b1a333e74110e57df57315cd529e4..7a4aa8ab8e5b14259413487da4e46d6709cfc95f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994, 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1994,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
@@ -29,5 +29,6 @@ madvise (__ptr_t addr, size_t len, int advice)
   __set_errno (ENOSYS);
   return -1;
 }
+libc_hidden_def (madvise)
 stub_warning (madvise)
 #include <stub-tag.h>
diff --git a/nis/Banner b/nis/Banner
new file mode 100644 (file)
index 0000000..cf79871
--- /dev/null
@@ -0,0 +1 @@
+NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
index 928053daf5f87a0c85433bd025322ac085221a7d..c571e8f367b0bdd93af84271316ab2c0f06b76d4 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997,1998,2001,2004,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2001, 2004, 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.
 
 #include <rpc/auth.h>
 #include <rpcsvc/nis.h>
 #include <sys/socket.h>
+#include <sys/stat.h>
+#include <unistd.h>
 #include <netinet/in.h>
 #include <arpa/inet.h>
+#include <bits/libc-lock.h>
 
 #include "nis_xdr.h"
 #include "nis_intern.h"
@@ -107,10 +111,79 @@ __nisbind_next (dir_binding *bind)
 }
 libnsl_hidden_def (__nisbind_next)
 
+static struct ckey_cache_entry
+{
+  struct in_addr inaddr;
+  in_port_t port;
+  unsigned int protocol;
+  des_block ckey;
+} *ckey_cache;
+static size_t ckey_cache_size;
+static size_t ckey_cache_allocated;
+static pid_t ckey_cache_pid;
+static uid_t ckey_cache_euid;
+__libc_lock_define_initialized (static, ckey_cache_lock)
+
+static bool_t
+get_ckey (des_block *ckey, struct sockaddr_in *addr, unsigned int protocol)
+{
+  size_t i;
+  pid_t pid = getpid ();
+  uid_t euid = geteuid ();
+  bool_t ret = FALSE;
+
+  __libc_lock_lock (ckey_cache_lock);
+
+  if (ckey_cache_pid != pid || ckey_cache_euid != euid)
+    {
+      ckey_cache_size = 0;
+      ckey_cache_pid = pid;
+      ckey_cache_euid = euid;
+    }
+
+  for (i = 0; i < ckey_cache_size; ++i)
+    if (ckey_cache[i].port == addr->sin_port
+       && ckey_cache[i].protocol == protocol
+       && memcmp (&ckey_cache[i].inaddr, &addr->sin_addr,
+                  sizeof (addr->sin_addr)) == 0)
+      {
+       *ckey = ckey_cache[i].ckey;
+       ret = TRUE;
+       break;
+      }
+
+  if (!ret && key_gendes (ckey) >= 0)
+    {
+      ret = TRUE;
+      /* Don't grow the cache indefinitely.  */
+      if (ckey_cache_size == 256)
+       ckey_cache_size = 0;
+      if (ckey_cache_size == ckey_cache_allocated)
+       {
+         size_t size = ckey_cache_allocated ? ckey_cache_allocated * 2 : 16;
+         struct ckey_cache_entry *new_cache
+           = realloc (ckey_cache, size * sizeof (*ckey_cache));
+         if (new_cache != NULL)
+           {
+             ckey_cache = new_cache;
+             ckey_cache_allocated = size;
+           }
+       }
+      ckey_cache[ckey_cache_size].inaddr = addr->sin_addr;
+      ckey_cache[ckey_cache_size].port = addr->sin_port;
+      ckey_cache[ckey_cache_size].protocol = protocol;
+      ckey_cache[ckey_cache_size++].ckey = *ckey;
+    }
+
+  __libc_lock_unlock (ckey_cache_lock);
+  return ret;
+}
+
 nis_error
 __nisbind_connect (dir_binding *dbp)
 {
   nis_server *serv;
+  u_short port;
 
   if (dbp == NULL)
     return NIS_FAIL;
@@ -128,9 +201,12 @@ __nisbind_connect (dir_binding *dbp)
 
   /* Check, if the host is online and rpc.nisd is running. Much faster
      then the clnt*_create functions: */
-  if (__pmap_getnisport (&dbp->addr, NIS_PROG, NIS_VERSION, IPPROTO_UDP) == 0)
+  port = __pmap_getnisport (&dbp->addr, NIS_PROG, NIS_VERSION,
+                           dbp->use_udp ? IPPROTO_UDP : IPPROTO_TCP);
+  if (port == 0)
     return NIS_RPCERROR;
 
+  dbp->addr.sin_port = htons (port);
   dbp->socket = RPC_ANYSOCK;
   if (dbp->use_udp)
     dbp->clnt = clntudp_create (&dbp->addr, NIS_PROG, NIS_VERSION,
@@ -153,17 +229,16 @@ __nisbind_connect (dir_binding *dbp)
        {
          char netname[MAXNETNAMELEN + 1];
          char *p;
+         des_block ckey;
 
-         p = stpcpy (netname, "unix.");
+         p = stpcpy (netname, "unix@");
          strncpy (p, serv->name, MAXNETNAMELEN - 5);
          netname[MAXNETNAMELEN] = '\0';
-         // XXX What is this supposed to do?  If we really want to replace
-         // XXX the first dot, then we might as well use unix@ as the
-         // XXX prefix string.  --drepper
-         p = strchr (netname, '.');
-         *p = '@';
-         dbp->clnt->cl_auth =
-           authdes_pk_create (netname, &serv->pkey, 300, NULL, NULL);
+         dbp->clnt->cl_auth = NULL;
+         if (get_ckey (&ckey, &dbp->addr,
+                       dbp->use_udp ? IPPROTO_UDP : IPPROTO_TCP))
+           dbp->clnt->cl_auth =
+             authdes_pk_create (netname, &serv->pkey, 300, NULL, &ckey);
          if (!dbp->clnt->cl_auth)
            dbp->clnt->cl_auth = authunix_create_default ();
        }
@@ -177,7 +252,8 @@ libnsl_hidden_def (__nisbind_connect)
 
 nis_error
 __nisbind_create (dir_binding *dbp, const nis_server *serv_val,
-                 unsigned int serv_len, unsigned int flags)
+                 unsigned int serv_len, unsigned int server_used,
+                 unsigned int current_ep, unsigned int flags)
 {
   dbp->clnt = NULL;
 
@@ -203,8 +279,16 @@ __nisbind_create (dir_binding *dbp, const nis_server *serv_val,
   dbp->trys = 1;
 
   dbp->class = -1;
-  if (__nis_findfastest (dbp) < 1)
-    return NIS_NAMEUNREACHABLE;
+  if (server_used == ~0)
+    {
+      if (__nis_findfastest (dbp) < 1)
+       return NIS_NAMEUNREACHABLE;
+    }
+  else
+    {
+      dbp->server_used = server_used;
+      dbp->current_ep = current_ep;
+    }
 
   return NIS_SUCCESS;
 }
@@ -306,7 +390,7 @@ __do_niscall2 (const nis_server *server, u_int server_len, u_long prog,
   if (flags & MASTER_ONLY)
     server_len = 1;
 
-  status = __nisbind_create (&dbp, server, server_len, flags);
+  status = __nisbind_create (&dbp, server, server_len, ~0, ~0, flags);
   if (status != NIS_SUCCESS)
     return status;
 
@@ -338,9 +422,7 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
     case HIGHER_NAME:
       { /* We need data from a parent domain */
        directory_obj *obj;
-       char ndomain[strlen (dir->do_name) + 3];
-
-       nis_domain_of_r (dir->do_name, ndomain, sizeof (ndomain));
+       const char *ndomain = __nis_domain_of (dir->do_name);
 
        /* The root server of our domain is a replica of the parent
           domain ! (Now I understand why a root server must be a
@@ -384,7 +466,7 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
        size_t namelen = strlen (name);
        char leaf[namelen + 3];
        char domain[namelen + 3];
-       char ndomain[namelen + 3];
+       const char *ndomain;
        char *cp;
 
        strcpy (domain, name);
@@ -397,8 +479,8 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
                return NULL;
              }
            nis_leaf_of_r (domain, leaf, sizeof (leaf));
-           nis_domain_of_r (domain, ndomain, sizeof (ndomain));
-           strcpy (domain, ndomain);
+           ndomain = __nis_domain_of (domain);
+           memmove (domain, ndomain, strlen (ndomain) + 1);
          }
        while (nis_dir_cmp (domain, dir->do_name) != SAME_NAME);
 
@@ -451,29 +533,16 @@ rec_dirsearch (const_nis_name name, directory_obj *dir, nis_error *status)
 /* We try to query the current server for the searched object,
    maybe he know about it ? */
 static directory_obj *
-first_shoot (const_nis_name name, int search_parent_first, directory_obj *dir)
+first_shoot (const_nis_name name, directory_obj *dir)
 {
   directory_obj *obj = NULL;
   fd_result *fd_res;
   XDR xdrs;
-  char domain[strlen (name) + 3];
 
-#if 0
   if (nis_dir_cmp (name, dir->do_name) == SAME_NAME)
     return dir;
-#endif
 
-  const char *search_name = name;
-  if (search_parent_first)
-    {
-      nis_domain_of_r (name, domain, sizeof (domain));
-      search_name = domain;
-    }
-
-  if (nis_dir_cmp (search_name, dir->do_name) == SAME_NAME)
-    return dir;
-
-  fd_res = __nis_finddirectory (dir, search_name);
+  fd_res = __nis_finddirectory (dir, name);
   if (fd_res == NULL)
     return NULL;
   if (fd_res->status == NIS_SUCCESS
@@ -499,42 +568,224 @@ first_shoot (const_nis_name name, int search_parent_first, directory_obj *dir)
   return obj;
 }
 
+static struct nis_server_cache
+{
+  int search_parent;
+  int uses;
+  unsigned int size;
+  unsigned int server_used;
+  unsigned int current_ep;
+  time_t expires;
+  char name[];
+} *nis_server_cache[16];
+static time_t nis_cold_start_mtime;
+__libc_lock_define_initialized (static, nis_server_cache_lock)
+
+static directory_obj *
+nis_server_cache_search (const_nis_name name, int search_parent,
+                        unsigned int *server_used, unsigned int *current_ep,
+                        struct timeval *now)
+{
+  directory_obj *ret = NULL;
+  int i;
+  char *addr;
+  XDR xdrs;
+  struct stat64 st;
+
+  if (stat64 ("/var/nis/NIS_COLD_START", &st) < 0)
+    st.st_mtime = nis_cold_start_mtime + 1;
+
+  __libc_lock_lock (nis_server_cache_lock);
+
+  for (i = 0; i < 16; ++i)
+    if (nis_server_cache[i] == NULL)
+      continue;
+    else if (st.st_mtime != nis_cold_start_mtime
+            || now->tv_sec > nis_server_cache[i]->expires)
+      {
+       free (nis_server_cache[i]);
+       nis_server_cache[i] = NULL;
+      }
+    else if (nis_server_cache[i]->search_parent == search_parent
+            && strcmp (nis_server_cache[i]->name, name) == 0)
+      {
+       ret = calloc (1, sizeof (directory_obj));
+       if (ret == NULL)
+         break;
+
+       addr = rawmemchr (nis_server_cache[i]->name, '\0') + 8;
+       addr = (char *) ((uintptr_t) addr & ~(uintptr_t) 7);
+       xdrmem_create (&xdrs, addr, nis_server_cache[i]->size, XDR_DECODE);
+       if (!_xdr_directory_obj (&xdrs, ret))
+         {
+           xdr_destroy (&xdrs);
+           free (ret);
+           ret = NULL;
+           free (nis_server_cache[i]);
+           nis_server_cache[i] = NULL;
+           break;
+         }
+       xdr_destroy (&xdrs);
+       *server_used = nis_server_cache[i]->server_used;
+       *current_ep = nis_server_cache[i]->current_ep;
+       break;
+      }
+
+  nis_cold_start_mtime = st.st_mtime;
+
+  __libc_lock_unlock (nis_server_cache_lock);
+  return ret;
+}
+
+static void
+nis_server_cache_add (const_nis_name name, int search_parent,
+                     directory_obj *dir, unsigned int server_used,
+                     unsigned int current_ep, struct timeval *now)
+{
+  struct nis_server_cache **loc;
+  struct nis_server_cache *new;
+  struct nis_server_cache *old;
+  int i;
+  char *addr;
+  unsigned int size;
+  XDR xdrs;
+
+  if (dir == NULL)
+    return;
+
+  size = xdr_sizeof ((xdrproc_t) _xdr_directory_obj, (char *) dir);
+  new = calloc (1, sizeof (*new) + strlen (name) + 8 + size);
+  if (new == NULL)
+    return;
+  new->search_parent = search_parent;
+  new->uses = 1;
+  new->expires = now->tv_sec + dir->do_ttl;
+  new->size = size;
+  new->server_used = server_used;
+  new->current_ep = current_ep;
+  addr = stpcpy (new->name, name) + 8;
+  addr = (char *) ((uintptr_t) addr & ~(uintptr_t) 7);
+
+  xdrmem_create(&xdrs, addr, size, XDR_ENCODE);
+  if (!_xdr_directory_obj (&xdrs, dir))
+    {
+      xdr_destroy (&xdrs);
+      free (new);
+      return;
+    }
+  xdr_destroy (&xdrs);
+
+  __libc_lock_lock (nis_server_cache_lock);
+
+  /* Choose which entry should be evicted from the cache.  */
+  loc = &nis_server_cache[0];
+  if (*loc != NULL)
+    for (i = 1; i < 16; ++i)
+      if (nis_server_cache[i] == NULL)
+       {
+         loc = &nis_server_cache[i];
+         break;
+       }
+      else if ((*loc)->uses > nis_server_cache[i]->uses
+              || ((*loc)->uses == nis_server_cache[i]->uses
+                  && (*loc)->expires > nis_server_cache[i]->expires))
+       loc = &nis_server_cache[i];
+  old = *loc;
+  *loc = new;
+
+  __libc_lock_unlock (nis_server_cache_lock);
+  free (old);
+}
+
 nis_error
-__nisfind_server (const_nis_name name, int search_parent_first,
-                 directory_obj **dir)
+__nisfind_server (const_nis_name name, int search_parent,
+                 directory_obj **dir, dir_binding *dbp, unsigned int flags)
 {
+  nis_error result = NIS_SUCCESS;
+  nis_error status;
+  directory_obj *obj;
+  struct timeval now;
+  unsigned int server_used = ~0;
+  unsigned int current_ep = ~0;
+
   if (name == NULL)
     return NIS_BADNAME;
 
-#if 0
-  /* Search in local cache. In the moment, we ignore the fastest server */
-  if (!(flags & NO_CACHE))
-    dir = __nis_cache_search (name, flags, &cinfo);
-#endif
+  if (*dir != NULL)
+    return NIS_SUCCESS;
 
-  nis_error result = NIS_SUCCESS;
-  if (*dir == NULL)
+  (void) gettimeofday (&now, NULL);
+
+  if ((flags & NO_CACHE) == 0)
+    *dir = nis_server_cache_search (name, search_parent, &server_used,
+                                   &current_ep, &now);
+  if (*dir != NULL)
     {
-      nis_error status;
-      directory_obj *obj;
+      unsigned int server_len = (*dir)->do_servers.do_servers_len;
+      if (flags & MASTER_ONLY)
+       {
+         server_len = 1;
+         if (server_used != 0)
+           {
+             server_used = ~0;
+             current_ep = ~0;
+           }
+       }
+      result = __nisbind_create (dbp, (*dir)->do_servers.do_servers_val,
+                                server_len, server_used, current_ep, flags);
+      if (result != NIS_SUCCESS)
+       {
+         nis_free_directory (*dir);
+         *dir = NULL;
+       }
+      return result;
+    }
 
-      *dir = readColdStartFile ();
-      if (*dir == NULL)
-       /* No /var/nis/NIS_COLD_START->no NIS+ installed.  */
-       return NIS_UNAVAIL;
+  *dir = readColdStartFile ();
+  if (*dir == NULL)
+    /* No /var/nis/NIS_COLD_START->no NIS+ installed.  */
+    return NIS_UNAVAIL;
 
-      /* Try at first, if servers in "dir" know our object */
-      obj = first_shoot (name, search_parent_first, *dir);
+  /* Try at first, if servers in "dir" know our object */
+  const char *search_name = name;
+  if (search_parent)
+    search_name = __nis_domain_of (name);
+  obj = first_shoot (search_name, *dir);
+  if (obj == NULL)
+    {
+      obj = rec_dirsearch (search_name, *dir, &status);
       if (obj == NULL)
+       result = status;
+    }
+
+  if (result == NIS_SUCCESS)
+    {
+      unsigned int server_len = obj->do_servers.do_servers_len;
+      if (flags & MASTER_ONLY)
+       server_len = 1;
+      result = __nisbind_create (dbp, obj->do_servers.do_servers_val,
+                                server_len, ~0, ~0, flags);
+      if (result == NIS_SUCCESS)
        {
-         obj = rec_dirsearch (name, *dir, &status);
-         if (obj == NULL)
-           result = status;
+         if ((flags & MASTER_ONLY) == 0
+             || obj->do_servers.do_servers_len == 1)
+           {
+             server_used = dbp->server_used;
+             current_ep = dbp->current_ep;
+           }
+         if ((flags & NO_CACHE) == 0)
+           nis_server_cache_add (name, search_parent, obj,
+                                 server_used, current_ep, &now);
+       }
+      else
+       {
+         nis_free_directory (obj);
+         obj = NULL;
        }
-
-      *dir = obj;
     }
 
+  *dir = obj;
+
   return result;
 }
 
@@ -543,38 +794,19 @@ nis_error
 __prepare_niscall (const_nis_name name, directory_obj **dirp,
                   dir_binding *bptrp, unsigned int flags)
 {
-  nis_error retcode = __nisfind_server (name, 1, dirp);
+  nis_error retcode = __nisfind_server (name, 1, dirp, bptrp, flags);
   if (__builtin_expect (retcode != NIS_SUCCESS, 0))
     return retcode;
 
-  nis_server *server;
-  u_int server_len;
-
-  if (flags & MASTER_ONLY)
-    {
-      server = (*dirp)->do_servers.do_servers_val;
-      server_len = 1;
-    }
-  else
-    {
-      server = (*dirp)->do_servers.do_servers_val;
-      server_len = (*dirp)->do_servers.do_servers_len;
-    }
-
-  retcode = __nisbind_create (bptrp, server, server_len, flags);
-  if (retcode == NIS_SUCCESS)
-    {
-      do
-       if (__nisbind_connect (bptrp) == NIS_SUCCESS)
-         return NIS_SUCCESS;
-      while (__nisbind_next (bptrp) == NIS_SUCCESS);
-
-      __nisbind_destroy (bptrp);
-      memset (bptrp, '\0', sizeof (*bptrp));
+  do
+    if (__nisbind_connect (bptrp) == NIS_SUCCESS)
+      return NIS_SUCCESS;
+  while (__nisbind_next (bptrp) == NIS_SUCCESS);
 
-      retcode = NIS_NAMEUNREACHABLE;
-    }
+  __nisbind_destroy (bptrp);
+  memset (bptrp, '\0', sizeof (*bptrp));
 
+  retcode = NIS_NAMEUNREACHABLE;
   nis_free_directory (*dirp);
   *dirp = NULL;
 
index eca2066aa3188a8dd148999b4a4d8a855f840054..4d6b48640efa9bfa99a2e430719b4374e729e045 100644 (file)
@@ -1,4 +1,4 @@
-/* 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 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
 
@@ -26,3 +26,17 @@ nis_domain_of (const_nis_name name)
 
   return nis_domain_of_r (name, result, NIS_MAXNAMELEN);
 }
+
+const_nis_name
+__nis_domain_of (const_nis_name name)
+{
+  const_nis_name cptr = strchr (name, '.');
+
+  if (cptr++ == NULL)
+    return "";
+
+  if (*cptr == '\0')
+    return ".";
+
+  return cptr;
+}
index 839ee4ee42e976a269ad9526558534de02c879af..9677b4d3d1c7b5a36a909bb67dfa1380cffd0bf1 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997-1999, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997-1999, 2004, 2005, 2006, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1997.
 
@@ -74,7 +75,6 @@ nis_lookup (const_nis_name name, const unsigned int flags)
        {
          static const struct timeval RPCTIMEOUT = {10, 0};
          enum clnt_stat result;
-         char ndomain[strlen (req.ns_name) + 1];
 
        again:
          result = clnt_call (bptr.clnt, NIS_LOOKUP,
@@ -127,27 +127,18 @@ nis_lookup (const_nis_name name, const unsigned int flags)
                        /* Otherwise __nisfind_server will not do anything.  */
                        dir = NULL;
 
-                       if (__nisfind_server (req.ns_name, 1, &dir)
+                       if (__nisfind_server (req.ns_name, 1, &dir, &bptr,
+                                             flags & ~MASTER_ONLY)
                            != NIS_SUCCESS)
                          goto out;
-
-                       if (__nisbind_create (&bptr,
-                                             dir->do_servers.do_servers_val,
-                                             dir->do_servers.do_servers_len,
-                                             flags) != NIS_SUCCESS)
-                         {
-                           nis_free_directory (dir);
-                           goto out;
-                         }
                      }
                    else
                      if (__nisbind_next (&bptr) != NIS_SUCCESS)
                        {
                          /* No more servers to search.  Try parent.  */
-                         nis_domain_of_r (req.ns_name, ndomain,
-                                          sizeof (ndomain));
+                         const char *ndomain = __nis_domain_of (req.ns_name);
                          req.ns_name = strdupa (ndomain);
-                         if (strcmp (ndomain, ".") == 0)
+                         if (strcmp (req.ns_name, ".") == 0)
                            {
                              NIS_RES_STATUS (res) = NIS_NAMEUNREACHABLE;
                              goto out;
index 11680ae7dc618f73322118d3ba3e125543c868e3..91e6399b9045130248890bb2c0170d19fb88b134 100644 (file)
@@ -162,7 +162,7 @@ nis_print_group_entry (const_nis_name group)
        fputs (_("    No implicit nonmembers\n"), stdout);
       if (nomem_rec_cnt)
        {
-         fputs (_("    Recursive nonmembers:\n"), stdout);
+         fputs (_("    Explicit nonmembers:\n"), stdout);
          for (i = 0; i < nomem_rec_cnt; ++i)
            printf ("\t%s=n", &nomem_rec[i][2]);
        }
index cb25be61e2443cacc04b7342cd3f99a5480b6312..70b4701419a11bdd462ffef688f345376682178d 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (c) 1997-1999,2003,2004,2005,2006 Free Software Foundation, Inc.
+/* Copyright (c) 1997-1999, 2003, 2004, 2005, 2006, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
 
@@ -274,21 +275,14 @@ nis_list (const_nis_name name, unsigned int flags,
       memset (res, '\0', sizeof (nis_result));
 
       status = __nisfind_server (ibreq->ibr_name,
-                                ibreq->ibr_srch.ibr_srch_val != NULL, &dir);
+                                ibreq->ibr_srch.ibr_srch_val != NULL,
+                                &dir, &bptr, flags & ~MASTER_ONLY);
       if (status != NIS_SUCCESS)
        {
           NIS_RES_STATUS (res) = status;
           goto fail3;
        }
 
-      status = __nisbind_create (&bptr, dir->do_servers.do_servers_val,
-                                dir->do_servers.do_servers_len, flags);
-      if (__builtin_expect (status != NIS_SUCCESS, 0))
-        {
-          NIS_RES_STATUS (res) = status;
-         goto fail2;
-        }
-
       while (__nisbind_connect (&bptr) != NIS_SUCCESS)
        if (__builtin_expect (__nisbind_next (&bptr) != NIS_SUCCESS, 0))
          {
@@ -338,7 +332,6 @@ nis_list (const_nis_name name, unsigned int flags,
                    NIS_RES_STATUS (res) = NIS_NOMEMORY;
                  fail:
                    __nisbind_destroy (&bptr);
-                 fail2:
                    nis_free_directory (dir);
                  fail3:
                    free (tablepath);
index 577f7c2d47fb145da02eae00f5ef49e93b28d332..046ddfee8d6d50fa900be97d84ee1d23b6b5cfd5 100644 (file)
@@ -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);
 }
 
 
index 4fa03616813fa00e1240fb3c4338f0f2c5ff7dc9..bde0a3291f8eb3d8451f089cef37f1ea242f0da7 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2000, 2002, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2000, 2002, 2003, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1996.
 
@@ -134,13 +134,17 @@ internal_nis_gethostent_r (struct hostent *host, char *buffer,
   if (__builtin_expect (yp_get_default_domain (&domain), 0))
     return NSS_STATUS_UNAVAIL;
 
+  uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct parser_data);
+  buffer += pad;
+
   struct parser_data *data = (void *) buffer;
-  if (__builtin_expect (buflen < sizeof *data + 1, 0))
+  if (__builtin_expect (buflen < sizeof *data + 1 + pad, 0))
     {
       *errnop = ERANGE;
       *h_errnop = NETDB_INTERNAL;
       return NSS_STATUS_TRYAGAIN;
     }
+  buflen -= pad;
 
   /* Get the next entry until we found a correct one. */
   const size_t linebuflen = buffer + buflen - data->linebuffer;
@@ -234,6 +238,9 @@ internal_gethostbyname2_r (const char *name, int af, struct hostent *host,
                           char *buffer, size_t buflen, int *errnop,
                           int *h_errnop, int flags)
 {
+  uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct parser_data);
+  buffer += pad;
+
   struct parser_data *data = (void *) buffer;
 
   if (name == NULL)
@@ -246,12 +253,13 @@ internal_gethostbyname2_r (const char *name, int af, struct hostent *host,
   if (yp_get_default_domain (&domain))
     return NSS_STATUS_UNAVAIL;
 
-  if (buflen < sizeof *data + 1)
+  if (buflen < sizeof *data + 1 + pad)
     {
       *h_errnop = NETDB_INTERNAL;
       *errnop = ERANGE;
       return NSS_STATUS_TRYAGAIN;
     }
+  buflen -= pad;
 
   /* Convert name to lowercase.  */
   size_t namlen = strlen (name);
@@ -352,13 +360,17 @@ _nss_nis_gethostbyaddr_r (const void *addr, socklen_t addrlen, int af,
   if (__builtin_expect (yp_get_default_domain (&domain), 0))
     return NSS_STATUS_UNAVAIL;
 
+  uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct parser_data);
+  buffer += pad;
+
   struct parser_data *data = (void *) buffer;
-  if (__builtin_expect (buflen < sizeof *data + 1, 0))
+  if (__builtin_expect (buflen < sizeof *data + 1 + pad, 0))
     {
       *errnop = ERANGE;
       *h_errnop = NETDB_INTERNAL;
       return NSS_STATUS_TRYAGAIN;
     }
+  buflen -= pad;
 
   char *buf = inet_ntoa (*(const struct in_addr *) addr);
 
index 0c176095c8b6e2040a2e2073fa29b52225aac612..59a598f296e1d7ef68da1d618508b5e93f3ff729 100644 (file)
@@ -271,7 +271,7 @@ _nss_nis_getservbyname_r (const char *name, const char *protocol,
 
   /* If the protocol is given, we could try if our NIS server knows
      about services.byservicename map. If yes, we only need one query.  */
-  size_t keylen = strlen (name) + 1 + (protocol ? strlen (protocol) : 0);
+  size_t keylen = strlen (name) + (protocol ? 1 + strlen (protocol) : 0);
   char key[keylen + 1];
 
   /* key is: "name/proto" */
index 8d69ad93738c8f4bdaf54287f2fa7fa4a21e1088..298869f931d768aa4e559901c1611cee5c5b28f8 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997,1998,2000-2003,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,2000-2003,2005,2006,2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
 
@@ -256,7 +257,8 @@ _nss_nisplus_gethostton_r (const char *name, struct etherent *eth,
 
   snprintf (buf, sizeof (buf), "[name=%s],%s", name, tablename_val);
 
-  nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
+  nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS | USE_DGRAM,
+                                NULL, NULL);
 
   if (result == NULL)
     {
@@ -322,7 +324,8 @@ _nss_nisplus_getntohost_r (const struct ether_addr *addr, struct etherent *eth,
            addr->ether_addr_octet[4], addr->ether_addr_octet[5],
            tablename_val);
 
-  nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
+  nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS | USE_DGRAM,
+                                NULL, NULL);
 
   if (result == NULL)
     {
index 286a4ccbdcfa43449bed3ece9973d6d75ae4fc02..1cf652f071c746721d6b054c06ff482eb301dc7a 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997,1998,2000-2003,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997,1998,2000-2003,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.
 
@@ -338,7 +339,7 @@ _nss_nisplus_getnetbyname_r (const char *name, struct netent *network,
   /* Search at first in the alias list, and use the correct name
      for the next search */
   snprintf (buf, sizeof (buf), "[name=%s],%s", name, tablename_val);
-  result = nis_list (buf, FOLLOW_LINKS | FOLLOW_PATH, NULL, NULL);
+  result = nis_list (buf, FOLLOW_LINKS | FOLLOW_PATH | USE_DGRAM, NULL, NULL);
 
   if (result != NULL)
     {
@@ -366,7 +367,8 @@ _nss_nisplus_getnetbyname_r (const char *name, struct netent *network,
        }
 
       nis_freeresult (result);
-      result = nis_list (bufptr, FOLLOW_LINKS | FOLLOW_PATH, NULL, NULL);
+      result = nis_list (bufptr, FOLLOW_LINKS | FOLLOW_PATH | USE_DGRAM,
+                        NULL, NULL);
     }
 
   if (result == NULL)
@@ -438,7 +440,8 @@ _nss_nisplus_getnetbyaddr_r (uint32_t addr, const int type,
     while (1)
       {
        snprintf (buf, sizeof (buf), "[addr=%s],%s", buf2, tablename_val);
-       nis_result *result = nis_list (buf, EXPAND_NAME, NULL, NULL);
+       nis_result *result = nis_list (buf, EXPAND_NAME | USE_DGRAM,
+                                      NULL, NULL);
 
        if (result == NULL)
          {
index 14e7d41dbe6106070b4ff0838a631de0948a2599..f6b32f8827dfde5f1356677399889fcb0b570e38 100644 (file)
@@ -217,7 +217,7 @@ parse_grp_str (const char *s, gid_t *gidp, int *gidlenp, gid_t *gidlist,
 
   if (!s || (!isdigit (*s)))
     {
-      syslog (LOG_ERR, _("netname2user: missing group id list in `%s'"), s);
+      syslog (LOG_ERR, _("netname2user: missing group id list in `%s'."), s);
       return NSS_STATUS_NOTFOUND;
     }
 
index 93e37dddab864d54b633eeebe67823c44627f689..cd33aebbcc25a19d2316e2cc3277e65f3ec3d54c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1999, 2001, 2002, 2003, 2005, 2006
+/* Copyright (C) 1997, 1999, 2001, 2002, 2003, 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.
@@ -311,7 +311,7 @@ _nss_nisplus_getpwnam_r (const char *name, struct passwd *pw,
 
   snprintf (buf, sizeof (buf), "[name=%s],%s", name, pwd_tablename_val);
 
-  result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
+  result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS | USE_DGRAM, NULL, NULL);
 
   if (result == NULL)
     {
@@ -370,7 +370,7 @@ _nss_nisplus_getpwuid_r (const uid_t uid, struct passwd *pw,
   snprintf (buf, sizeof (buf), "[uid=%lu],%s",
            (unsigned long int) uid, pwd_tablename_val);
 
-  result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
+  result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS | USE_DGRAM, NULL, NULL);
 
   if (result == NULL)
     {
index 5875bbe98d33d639b08125bc0315e90954c1337b..711c6bc2732150547c29a100da7c253c9dfb4138 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2001, 2002, 2003, 2005, 2006
+/* Copyright (C) 1997, 1998, 2001, 2002, 2003, 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.
@@ -315,7 +315,8 @@ _nss_nisplus_getrpcbyname_r (const char *name, struct rpcent *rpc,
   /* Search at first in the alias list, and use the correct name
      for the next search */
   snprintf (buf, sizeof (buf), "[name=%s],%s", name, tablename_val);
-  nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
+  nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS | USE_DGRAM,
+                                NULL, NULL);
 
   if (result != NULL)
     {
@@ -342,7 +343,8 @@ _nss_nisplus_getrpcbyname_r (const char *name, struct rpcent *rpc,
        }
 
       nis_freeresult (result);
-      result = nis_list (bufptr, FOLLOW_PATH | FOLLOW_LINKS , NULL, NULL);
+      result = nis_list (bufptr, FOLLOW_PATH | FOLLOW_LINKS | USE_DGRAM,
+                        NULL, NULL);
     }
 
   if (result == NULL)
@@ -402,7 +404,8 @@ _nss_nisplus_getrpcbynumber_r (const int number, struct rpcent *rpc,
 
   snprintf (buf, sizeof (buf), "[number=%d],%s", number, tablename_val);
 
-  nis_result *result = nis_list (buf, FOLLOW_LINKS | FOLLOW_PATH, NULL, NULL);
+  nis_result *result = nis_list (buf, FOLLOW_LINKS | FOLLOW_PATH | USE_DGRAM,
+                                NULL, NULL);
 
   if (result == NULL)
     {
index 51c1956e2f6c7c1e323ffa73ed9f10aa80ca38a2..607ce80b018e3eefc7da069b362509c1420c8694 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003, 2005, 2006
+/* Copyright (C) 1997, 1998, 1999, 2001, 2002, 2003, 2005, 2006, 2007
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
@@ -322,7 +322,8 @@ _nss_nisplus_getservbyname_r (const char *name, const char *protocol,
      for the next search */
   snprintf (buf, sizeof (buf), "[name=%s,proto=%s],%s", name, protocol,
            tablename_val);
-  nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
+  nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS | USE_DGRAM,
+                                NULL, NULL);
 
   if (result != NULL)
     {
@@ -351,7 +352,8 @@ _nss_nisplus_getservbyname_r (const char *name, const char *protocol,
        }
 
       nis_freeresult (result);
-      result = nis_list (bufptr, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
+      result = nis_list (bufptr, FOLLOW_PATH | FOLLOW_LINKS | USE_DGRAM,
+                        NULL, NULL);
     }
 
   if (result == NULL)
@@ -420,7 +422,8 @@ _nss_nisplus_getservbyport_r (const int number, const char *protocol,
   snprintf (buf, sizeof (buf), "[port=%d,proto=%s],%s",
            number, protocol, tablename_val);
 
-  nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
+  nis_result *result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS | USE_DGRAM,
+                                NULL, NULL);
 
   if (result == NULL)
     {
index e63e1eeaec185636b0947e455704e722bdab916e..f256f3eb907152762f23dc81521e26c5cd2382ac 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1997, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 2001, 2002, 2003, 2005, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
 
@@ -182,7 +183,7 @@ _nss_nisplus_getspnam_r (const char *name, struct spwd *sp,
 
   snprintf (buf, sizeof (buf), "[name=%s],%s", name, pwd_tablename_val);
 
-  result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
+  result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS | USE_DGRAM, NULL, NULL);
 
   if (result == NULL)
     {
index c993bac5e82b316acf95f9721c1b2d7ac74d7fa7..c8927ece17be408910d440c785002d92cf6e1d3b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 1999, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1997.
 
@@ -272,12 +272,13 @@ struct dir_binding
 typedef struct dir_binding dir_binding;
 
 extern nis_error __nisbind_create (dir_binding *, const nis_server *,
-                                  unsigned int, unsigned int) __THROW;
+                                  unsigned int, unsigned int, unsigned int,
+                                  unsigned int) __THROW;
 extern nis_error __nisbind_connect (dir_binding *) __THROW;
 extern nis_error __nisbind_next (dir_binding *) __THROW;
 extern void __nisbind_destroy (dir_binding *) __THROW;
-extern nis_error __nisfind_server (const_nis_name, int, directory_obj **)
-     __THROW;
+extern nis_error __nisfind_server (const_nis_name, int, directory_obj **,
+                                  dir_binding *, unsigned int) __THROW;
 
 #endif
 
index 0b1d6300ac0c1274b0cb7dba1b955c0ac6e6a022..47ea82ff5df29d90249e9de67a8937790f94317b 100644 (file)
-2007-01-10  Ulrich Drepper  <drepper@redhat.com>
+2007-07-27  Jakub Jelinek  <jakub@redhat.com>
 
-       * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Cleanups.  Define
-       FUTEX_CMP_REQUEUE and lll_futex_requeue.
+       * sysdeps/sparc/tls.h (tcbhead_t): Move gscope_flag to the end
+       of the structure for sparc32.
 
-2006-12-28  David S. Miller  <davem@davemloft.net>
+2007-07-26  Aurelien Jarno  <aurelien@aurel32.net>
 
-       * shlib-versions: Fix sparc64 linux target specification.
+       * sysdeps/sparc/tls.h (tcbhead_t): Add gscope_flag.
 
-2007-01-10  Jakub Jelinek  <jakub@redhat.com>
+2007-06-22  Jakub Jelinek  <jakub@redhat.com>
 
-       * sysdeps/unix/sysv/linux/sparc/sparc32/sparcv9/pthread_barrier_wait.c:
-       Adjust include path for pthread_barrier_wait.c move.
+       * pthread_getattr_np.c (pthread_getattr_np): Clear cpuset and
+       cpusetsize if pthread_getaffinity_np failed with ENOSYS.
 
-2006-12-21  Jakub Jelinek  <jakub@redhat.com>
+2007-05-28  Jakub Jelinek  <jakub@redhat.com>
 
-       * sysdeps/unix/sysv/linux/pthread_kill.c (pthread_kill): Make sure
-       tid isn't reread from pd->tid in between ESRCH test and the syscall.
+       * sysdeps/i386/tls.h (THREAD_GSCOPE_RESET_FLAG): Use explicit
+       insn suffix.
+       (THREAD_GSCOPE_GET_FLAG): Remove.
+       * sysdeps/x86_64/tls.h (THREAD_GSCOPE_GET_FLAG): Remove.
+       * allocatestack.c (__wait_lookup_done): Revert 2007-05-24
+       changes.
+       * sysdeps/powerpc/tls.h (tcbhead_t): Remove gscope_flag.
+       (THREAD_GSCOPE_GET_FLAG): Remove.
+       (THREAD_GSCOPE_RESET_FLAG): Use THREAD_SELF->header.gscope_flag
+       instead of THREAD_GSCOPE_GET_FLAG.
+       (THREAD_GSCOPE_SET_FLAG): Likewise.  Add atomic_write_barrier after
+       it.
+       * sysdeps/s390/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
+       THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT,
+       THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
+       THREAD_GSCOPE_WAIT): Define.
+       * sysdeps/sparc/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
+       THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT,
+       THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
+       THREAD_GSCOPE_WAIT): Define.
+       * sysdeps/sh/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
+       THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT,
+       THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
+       THREAD_GSCOPE_WAIT): Define.
+       * sysdeps/ia64/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
+       THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT,
+       THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
+       THREAD_GSCOPE_WAIT): Define.
+
+2007-05-24  Richard Henderson  <rth@redhat.com>
+
+       * descr.h (struct pthread): Add header.gscope_flag.
+       * sysdeps/alpha/tls.h (THREAD_GSCOPE_FLAG_UNUSED,
+       THREAD_GSCOPE_FLAG_USED, THREAD_GSCOPE_FLAG_WAIT,
+       THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_SET_FLAG,
+       THREAD_GSCOPE_WAIT): Define.
+
+2007-05-26  Ulrich Drepper  <drepper@redhat.com>
+
+       * allocatestack.c: Revert last change.
+       * init.c: Likewise.
+       * sysdeps/i386/tls.h: Likewise.
+       * sysdeps/x86_64/tls.h: Likewise.
+
+2007-05-24  Jakub Jelinek  <jakub@redhat.com>
 
-2006-12-06  Jakub Jelinek  <jakub@redhat.com>
+       * sysdeps/powerpc/tls.h (tcbhead_t): Add gscope_flag.
+       (THREAD_GSCOPE_FLAG_UNUSED, THREAD_GSCOPE_FLAG_USED,
+       THREAD_GSCOPE_FLAG_WAIT): Define.
+       (THREAD_GSCOPE_GET_FLAG, THREAD_GSCOPE_SET_FLAG,
+       THREAD_GSCOPE_RESET_FLAG, THREAD_GSCOPE_WAIT): Define.
+       * sysdeps/i386/tls.h (THREAD_GSCOPE_WAIT): Don't use
+       PTR_DEMANGLE.
+       (THREAD_GSCOPE_GET_FLAG): Define.
+       * sysdeps/x86_64/tls.h (THREAD_GSCOPE_GET_FLAG): Define.
+       * allocatestack.c (__wait_lookup_done): Use THREAD_GSCOPE_GET_FLAG
+       instead of ->header.gscope_flag directly.
 
-       * sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h (PSEUDO): Handle
-       6 argument cancellable syscalls.
-       (STM_6, LM_6, LR7_0, LR7_1, LR7_2, LR7_3, LR7_4, LR7_5, LR7_6): Define.
-       * sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h (PSEUDO): Handle
-       6 argument cancellable syscalls.
-       (STM_6, LM_6, LR7_0, LR7_1, LR7_2, LR7_3, LR7_4, LR7_5, LR7_6): Define.
+2007-05-21  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/pthread/pthread-functions.h (struct pthread_functions):
+       Remove ptr_wait_lookup_done again.
+       * init.c (pthread_functions): Don't add .ptr_wait_lookup_done here.
+       (__pthread_initialize_minimal_internal): Initialize
+       _dl_wait_lookup_done pointer in _rtld_global directly.
+       * sysdeps/unix/sysv/linux/libc_pthread_init.c (__libc_pthread_init):
+       Remove code to code _dl_wait_lookup_done.
+       * sysdeps/x86_64/tls.h (THREAD_GSCOPE_WAIT): The pointer is not
+       encrypted for now.
+
+2007-05-19  Ulrich Drepper  <drepper@redhat.com>
+
+       * allocatestack.c (__wait_lookup_done): New function.
+       * sysdeps/pthread/pthread-functions.h (struct pthread_functions):
+       Add ptr_wait_lookup_done.
+       * init.c (pthread_functions): Initialize .ptr_wait_lookup_done.
+       * pthreadP.h: Declare __wait_lookup_done.
+       * sysdeps/i386/tls.h (tcbhead_t): Add gscope_flag.
+       Define macros to implement reference handling of global scope.
+       * sysdeps/x86_64/tls.h: Likewise.
+       * sysdeps/unix/sysv/linux/libc_pthread_init.c (__libc_pthread_init):
+       Initialize GL(dl_wait_lookup_done).
 
 2006-12-09  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/unix/sysv/linux/rtld-lowlevel.h
        (__rtld_mrlock_initialize): Add missing closing parenthesis.
 
-2006-10-30  Jakub Jelinek  <jakub@redhat.com>
-
-       * sysdeps/ia64/pthread_spin_unlock.c (pthread_spin_unlock): Use
-       __sync_lock_release instead of __sync_lock_release_si.
-
 2006-10-29  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h (RTLD_SINGLE_THREAD_P):
        * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
        * sysdeps/unix/sysv/linux/sh/sysdep-cancel.h: Likewise.
 
-2006-10-27  Ulrich Drepper  <drepper@redhat.com>
-
-       * sysdeps/pthread/pthread_barrier_wait.c: Move to...
-       * pthread_barrier_wait.c: ...here.
-       * sysdeps/pthread/pthread_cond_broadcast.c: Move to...
-       * pthread_cond_broadcast.c: ...here.
-       * sysdeps/pthread/pthread_cond_signal.c: Move to...
-       * pthread_cond_signal.c: ...here.
-       * sysdeps/pthread/pthread_cond_timedwait.c: Move to...
-       * pthread_cond_timedwait.c: ...here.
-       * sysdeps/pthread/pthread_cond_wait.c: Move to...
-       * pthread_cond_wait.c: ...here.
-       * sysdeps/pthread/pthread_once.c: Move to...
-       * pthread_once.c: ...here.
-       * sysdeps/pthread/pthread_rwlock_rdlock.c: Move to...
-       * pthread_rwlock_rdlock.c: ...here.
-       * sysdeps/pthread/pthread_rwlock_timedrdlock.c: Move to...
-       * pthread_rwlock_timedrdlock.c: ...here.
-       * sysdeps/pthread/pthread_rwlock_timedwrlock.c: Move to...
-       * pthread_rwlock_timedwrlock.c: ...here.
-       * sysdeps/pthread/pthread_rwlock_unlock.c: Move to...
-       * pthread_rwlock_unlock.c: ...here.
-       * sysdeps/pthread/pthread_rwlock_wrlock.c: Move to...
-       * pthread_rwlock_wrlock.c: ...here.
-       * sysdeps/pthread/pthread_spin_destroy.c: Move to...
-       * pthread_spin_destroy.c: ...here.
-       * sysdeps/pthread/pthread_spin_init.c: Move to...
-       * pthread_spin_init.c: ...here.
-       * sysdeps/pthread/pthread_spin_unlock.c: Move to...
-       * pthread_spin_unlock.c: ...here.
-       * sysdeps/pthread/pthread_getcpuclockid.c: Move to...
-       * pthread_getcpuclockid.c: ...here.
-
-       * init.c: USE_TLS support is now always enabled.
-       * tst-tls5.h: Likewise.
-       * sysdeps/alpha/tls.h: Likewise.
-       * sysdeps/i386/tls.h: Likewise.
-       * sysdeps/ia64/tls.h: Likewise.
-       * sysdeps/powerpc/tls.h: Likewise.
-       * sysdeps/s390/tls.h: Likewise.
-       * sysdeps/sh/tls.h: Likewise.
-       * sysdeps/sparc/tls.h: Likewise.
-       * sysdeps/x86_64/tls.h: Likewise.
-
 2006-10-27  Jakub Jelinek  <jakub@redhat.com>
 
        * sysdeps/unix/sysv/linux/rtld-lowlevel.h (__rtld_mrlock_lock,
        * sysdeps/unix/sysv/linux/sh/sysdep-cancel.h (SINGLE_THREAD_P):
        Likewise.
 
-2006-10-26  Jakub Jelinek  <jakub@redhat.com>
+2006-10-09  Ulrich Drepper  <drepper@redhat.com>
 
-       * pthread_attr_setstacksize.c (NEW_VERNUM): Define to GLIBC_2_3_3
-       by default rather than 2_3_3.
+       * sysdeps/unix/sysv/linux/rtld-lowlevel.h: New file..
 
-2006-10-17  Jakub Jelinek  <jakub@redhat.com>
+2007-05-25  Ulrich Drepper  <drepper@redhat.com>
 
-       * sysdeps/unix/sysv/linux/rtld-lowlevel.h (__rtld_mrlock_lock,
-       __rtld_mrlock_unlock, __rtld_mrlock_change, __rtld_mrlock_done): Use
-       atomic_* instead of catomic_* macros.
+       * Makefile (tests): Add tst-sem10.
+       * tst-sem10.c: New file.
 
-2006-10-12  Ulrich Drepper  <drepper@redhat.com>
+2007-05-25  Ulrich Drepper  <drepper@redhat.com>
+           Jakub Jelinek  <jakub@redhat.com>
 
-       [BZ #3285]
-       * sysdeps/unix/sysv/linux/bits/local_lim.h: Add SEM_VALUE_MAX.
-       * sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h: Likewise.
-       * sysdeps/unix/sysv/linux/sparc/bits/local_lim.h: Likewise.
-       * sysdeps/unix/sysv/linux/alpha/bits/local_lim.h: Likewise.
-       * sysdeps/unix/sysv/linux/ia64/bits/local_lim.h: Likewise.
-       * sysdeps/unix/sysv/linux/i386/bits/semaphore.h: Remove SEM_VALUE_MAX.
-       * sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h: Likewise.
-       * sysdeps/unix/sysv/linux/x86_64/bits/semaphore.h: Likewise.
-       * sysdeps/unix/sysv/linux/sparc/bits/semaphore.h: Likewise.
-       * sysdeps/unix/sysv/linux/alpha/bits/semaphore.h: Likewise.
-       * sysdeps/unix/sysv/linux/sh/bits/semaphore.h: Likewise.
-       * sysdeps/unix/sysv/linux/ia64/bits/semaphore.h: Likewise.
-       * sysdeps/unix/sysv/linux/s390/bits/semaphore.h: Likewise.
+       * sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S (sem_timedwait):
+       Move __pthread_enable_asynccancel right before futex syscall.
+       * sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S (sem_timedwait):
+       Likewise.
 
-2006-10-11  Ulrich Drepper  <drepper@redhat.com>
+2007-05-21  Jakub Jelinek  <jakub@redhat.com>
 
-       * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h: Add support for
-       cancelable syscalls with six parameters.
+       * tst-robust9.c (do_test): Don't fail if ENABLE_PI and
+       pthread_mutex_init failed with ENOTSUP.
 
-       * sysdeps/unix/sysv/linux/rtld-lowlevel.h: Use catomic_*
-       operations instead of atomic_*.
+2007-05-17  Ulrich Drepper  <drepper@redhat.com>
 
-2006-10-09  Ulrich Drepper  <drepper@redhat.com>
+       [BZ #4512]
+       * pthread_mutex_lock.c: Preserve FUTEX_WAITERS bit when dead owner
+       is detected.
+       * pthread_mutex_timedlock.c: Likewise.
+       * pthread_mutex_trylock.c: Likewise.
+       Patch in part by Atsushi Nemoto <anemo@mba.ocn.ne.jp>.
 
-       * sysdeps/unix/sysv/linux/rtld-lowlevel.h: New file..
+       * Makefile (tests): Add tst-robust9 and tst-robustpi9.
+       * tst-robust9.c: New file.
+       * tst-robustpi9.c: New file.
 
-2006-10-07  Ulrich Drepper  <drepper@redhat.com>
+2007-05-07  Ulrich Drepper  <drepper@redhat.com>
 
-       * sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h: New file.
-       * sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c: New file.
-       * sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c:
-       New file.
-       * pthread_attr_setstack.c: Allow overwriting the version number of the
-       new symbol.
-       * pthread_attr_setstacksize.c: Likewise.
-       (__old_pthread_attr_setstacksize): If STACKSIZE_ADJUST is defined use
-       it.
-       * sysdeps/unix/sysv/linux/powerpc/Versions (libpthread): Add
-       pthread_attr_setstack and pthread_attr_setstacksize to GLIBC_2.6.
+       * sysdeps/unix/sysv/linux/lowlevelrobustlock.c
+       (__lll_robust_lock_wait): Fix race caused by reloading of futex value.
+       (__lll_robust_timedlock_wait): Likewise.
+       Reported by Alexey Kuznetsov <kuznet@ms2.inr.ac.ru>.
+
+2007-05-06  Mike Frysinger  <vapier@gentoo.org>
+
+       [BZ #4465]
+       * tst-cancel-wrappers.sh: Set C["fdatasync"] to 1.
+       * tst-cancel4.c (tf_fdatasync): New test.
+
+2007-02-25  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/fork.c (__libc_fork): Reset refcntr in
+       new thread, don't just decrement it.
+       Patch by Suzuki K P <suzuki@in.ibm.com>.
+
+2007-02-09  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
+       (__lll_mutex_timedlock_wait): Use correct pointer when we don't
+       call into the kernel to delay.
+
+2006-12-28  David S. Miller  <davem@davemloft.net>
+
+       * shlib-versions: Fix sparc64 linux target specification.
+
+2006-12-21  Jakub Jelinek  <jakub@redhat.com>
+
+       * sysdeps/unix/sysv/linux/pthread_kill.c (pthread_kill): Make sure
+       tid isn't reread from pd->tid in between ESRCH test and the syscall.
 
 2006-09-24  Ulrich Drepper  <drepper@redhat.com>
 
index 9393cab009d35371b80c769b0cba1ac4c18abbba..61cd25756c34a4ce8b7f2648b36c9f2a7a81bea5 100644 (file)
@@ -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.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -209,16 +209,16 @@ tests = tst-typesizes \
        tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \
        tst-cond20 tst-cond21 tst-cond22 \
        tst-robust1 tst-robust2 tst-robust3 tst-robust4 tst-robust5 \
-       tst-robust6 tst-robust7 tst-robust8 \
-       tst-robustpi1 tst-robustpi2 tst-robustpi3 tst-robustpi4 \
-       tst-robustpi5 tst-robustpi6 tst-robustpi7 tst-robustpi8 \
+       tst-robust6 tst-robust7 tst-robust8 tst-robust9 \
+       tst-robustpi1 tst-robustpi2 tst-robustpi3 tst-robustpi4 tst-robustpi5 \
+       tst-robustpi6 tst-robustpi7 tst-robustpi8 tst-robustpi9 \
        tst-rwlock1 tst-rwlock2 tst-rwlock3 tst-rwlock4 tst-rwlock5 \
        tst-rwlock6 tst-rwlock7 tst-rwlock8 tst-rwlock9 tst-rwlock10 \
        tst-rwlock11 tst-rwlock12 tst-rwlock13 tst-rwlock14 \
        tst-once1 tst-once2 tst-once3 tst-once4 \
        tst-key1 tst-key2 tst-key3 tst-key4 \
        tst-sem1 tst-sem2 tst-sem3 tst-sem4 tst-sem5 tst-sem6 tst-sem7 \
-       tst-sem8 tst-sem9 \
+       tst-sem8 tst-sem9 tst-sem10 \
        tst-barrier1 tst-barrier2 tst-barrier3 tst-barrier4 \
        tst-align tst-align2 tst-align3 \
        tst-basic1 tst-basic2 tst-basic3 tst-basic4 tst-basic5 tst-basic6 \
index c05cd47dffdb63f38dae29b447118970082cc2de..736c63d69f1cd1b3b8b63037d046fd9984442d55 100644 (file)
@@ -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.
 
@@ -982,3 +982,60 @@ __pthread_init_static_tls (struct link_map *map)
 
   lll_unlock (stack_cache_lock);
 }
+
+
+void
+attribute_hidden
+__wait_lookup_done (void)
+{
+  lll_lock (stack_cache_lock);
+
+  struct pthread *self = THREAD_SELF;
+
+  /* Iterate over the list with system-allocated threads first.  */
+  list_t *runp;
+  list_for_each (runp, &stack_used)
+    {
+      struct pthread *t = list_entry (runp, struct pthread, list);
+      if (t == self || t->header.gscope_flag == THREAD_GSCOPE_FLAG_UNUSED)
+       continue;
+
+      int *const gscope_flagp = &t->header.gscope_flag;
+
+      /* We have to wait until this thread is done with the global
+        scope.  First tell the thread that we are waiting and
+        possibly have to be woken.  */
+      if (atomic_compare_and_exchange_bool_acq (gscope_flagp,
+                                               THREAD_GSCOPE_FLAG_WAIT,
+                                               THREAD_GSCOPE_FLAG_USED))
+       continue;
+
+      do
+       lll_futex_wait (gscope_flagp, THREAD_GSCOPE_FLAG_WAIT);
+      while (*gscope_flagp == THREAD_GSCOPE_FLAG_WAIT);
+    }
+
+  /* Now the list with threads using user-allocated stacks.  */
+  list_for_each (runp, &__stack_user)
+    {
+      struct pthread *t = list_entry (runp, struct pthread, list);
+      if (t == self || t->header.gscope_flag == THREAD_GSCOPE_FLAG_UNUSED)
+       continue;
+
+      int *const gscope_flagp = &t->header.gscope_flag;
+
+      /* We have to wait until this thread is done with the global
+        scope.  First tell the thread that we are waiting and
+        possibly have to be woken.  */
+      if (atomic_compare_and_exchange_bool_acq (gscope_flagp,
+                                               THREAD_GSCOPE_FLAG_WAIT,
+                                               THREAD_GSCOPE_FLAG_USED))
+       continue;
+
+      do
+       lll_futex_wait (gscope_flagp, THREAD_GSCOPE_FLAG_WAIT);
+      while (*gscope_flagp == THREAD_GSCOPE_FLAG_WAIT);
+    }
+
+  lll_unlock (stack_cache_lock);
+}
index 321ce85085715b6d38b186642916d7e92f291de5..241ba527edc3b3a4291675a7aebe0ee96365616c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 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.
 
@@ -131,6 +131,7 @@ struct pthread
     struct
     {
       int multiple_threads;
+      int gscope_flag;
     } header;
 #endif
 
index dddc975a5eb3635f3cab9b245caf70bf11139adc..7144abd3fb8aa83dc06353f87f36c36551b54916 100644 (file)
@@ -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.
 
@@ -73,7 +73,7 @@ int __set_robust_list_avail;
 static const char nptl_version[] __attribute_used__ = VERSION;
 
 
-#ifndef SHARED
+#if defined USE_TLS && !defined SHARED
 extern void __libc_setup_tls (size_t tcbsize, size_t tcbalign);
 #endif
 
@@ -386,6 +386,8 @@ __pthread_initialize_minimal_internal (void)
 
   GL(dl_init_static_tls) = &__pthread_init_static_tls;
 
+  GL(dl_wait_lookup_done) = &__wait_lookup_done;
+
   /* Register the fork generation counter with the libc.  */
 #ifndef TLS_MULTIPLE_THREADS_IN_TCB
   __libc_multiple_threads_ptr =
index f9634ab0ffac97210688164b7e6acab347d66c96..21ce6fe0b7e7143363c3ee307f774c6e06ed3f47 100644 (file)
@@ -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.
 
@@ -545,6 +545,8 @@ extern int __nptl_setxid (struct xid_command *cmdp) attribute_hidden;
 
 extern void __free_stack_cache (void) attribute_hidden;
 
+extern void __wait_lookup_done (void) attribute_hidden;
+
 #ifdef SHARED
 # define PTHREAD_STATIC_FN_REQUIRE(name)
 #else
index be79e32082ad1bd7eaa427992ed49ea90559c306..622e4a2250ffbcf13b0adaac2e0a0546e73028cc 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
 #include "pthreadP.h"
 
 
-#ifndef NEW_VERNUM
-# define NEW_VERNUM GLIBC_2_3_3
-#endif
-
-
 int
 __pthread_attr_setstack (attr, stackaddr, stacksize)
      pthread_attr_t *attr;
@@ -59,9 +54,9 @@ strong_alias (__pthread_attr_setstack, pthread_attr_setstack)
 #else
 # include <shlib-compat.h>
 versioned_symbol (libpthread, __pthread_attr_setstack, pthread_attr_setstack,
-                 NEW_VERNUM);
+                 GLIBC_2_3_3);
 
-# if SHLIB_COMPAT(libpthread, GLIBC_2_2, NEW_VERNUM)
+# if SHLIB_COMPAT(libpthread, GLIBC_2_2, GLIBC_2_3_3)
 
 int
 __old_pthread_attr_setstack (pthread_attr_t *attr, void *stackaddr,
@@ -76,9 +71,9 @@ __old_pthread_attr_setstack (pthread_attr_t *attr, void *stackaddr,
   if (stacksize < 16384)
     return EINVAL;
 
-#  ifdef EXTRA_PARAM_CHECKS
+# ifdef EXTRA_PARAM_CHECKS
   EXTRA_PARAM_CHECKS;
-#  endif
+# endif
 
   iattr->stacksize = stacksize;
   iattr->stackaddr = (char *) stackaddr + stacksize;
index 09745389860ae81a71fe085f37b9a95fd42edff8..f84a9f68e3b38d8b9a45cf74f2575b110f2e79d6 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
 #include <limits.h>
 #include "pthreadP.h"
 
-#ifndef NEW_VERNUM
-# define NEW_VERNUM GLIBC_2_3_3
-#endif
-
 
 int
 __pthread_attr_setstacksize (attr, stacksize)
@@ -51,9 +47,9 @@ strong_alias (__pthread_attr_setstacksize, pthread_attr_setstacksize)
 #else
 # include <shlib-compat.h>
 versioned_symbol (libpthread, __pthread_attr_setstacksize,
-                 pthread_attr_setstacksize, NEW_VERNUM);
+                 pthread_attr_setstacksize, GLIBC_2_3_3);
 
-# if SHLIB_COMPAT(libpthread, GLIBC_2_1, NEW_VERNUM)
+# if SHLIB_COMPAT(libpthread, GLIBC_2_1, GLIBC_2_3_3)
 
 int
 __old_pthread_attr_setstacksize (pthread_attr_t *attr, size_t stacksize)
@@ -67,10 +63,6 @@ __old_pthread_attr_setstacksize (pthread_attr_t *attr, size_t stacksize)
   if (stacksize < 16384)
     return EINVAL;
 
-#  ifdef STACKSIZE_ADJUST
-  STACKSIZE_ADJUST;
-#  endif
-
   iattr->stacksize = stacksize;
 
   return 0;
index 4bdc7b5b150a853e26162f4c342257b9a1642f4d..f6cd8899d8451c50592c14be57779ac20346a12e 100644 (file)
@@ -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.
 
@@ -168,8 +168,12 @@ 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;
+           }
        }
     }
 
index 52cc47f4cc81f1a37a3b56cf3ba8a2a826979e79..1c3ee4fe25555d7815a3cd4aa4d8c72a8191ddcd 100644 (file)
@@ -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.
 
@@ -127,6 +127,8 @@ __pthread_mutex_lock (mutex)
              int newval = id;
 #ifdef NO_INCR
              newval |= FUTEX_WAITERS;
+#else
+             newval |= (oldval & FUTEX_WAITERS);
 #endif
 
              newval
index c8e6b8507a30157ec4bc6d8737a7c4e0dd14156b..8fd681c6effd048802df0b90cc825df03625bc16 100644 (file)
@@ -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.
 
@@ -119,9 +119,11 @@ pthread_mutex_timedlock (mutex, abstime)
          if ((oldval & FUTEX_OWNER_DIED) != 0)
            {
              /* The previous owner died.  Try locking the mutex.  */
-             int newval
+             int newval = id | (oldval & FUTEX_WAITERS);
+
+             newval
                = atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
-                                                      id, oldval);
+                                                      newval, oldval);
              if (newval != oldval)
                {
                  oldval = newval;
index 94d519233b5d5d3dce880aebb706f1d0916b3b83..66aca8e4b2c20c0ef712bcd77a4b271e8852a7b0 100644 (file)
@@ -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.
 
@@ -91,9 +91,11 @@ __pthread_mutex_trylock (mutex)
          if ((oldval & FUTEX_OWNER_DIED) != 0)
            {
              /* The previous owner died.  Try locking the mutex.  */
-             int newval
+             int newval = id | (oldval & FUTEX_WAITERS);
+
+             newval
                = atomic_compare_and_exchange_val_acq (&mutex->__data.__lock,
-                                                      id, oldval);
+                                                      newval, oldval);
 
              if (newval != oldval)
                {
index be2430f676f4b7bc7276b42cdf6a9ca6e4dd1e60..07db15939dae7001efb41a66dbe0cc3657f662c4 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  NPTL/Alpha version.
-   Copyright (C) 2003, 2005, 2006 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
@@ -48,6 +48,9 @@ typedef union dtv
 # error "TLS support is required."
 #endif
 
+/* Signal that TLS support is available.  */
+# define USE_TLS       1
+
 #ifndef __ASSEMBLER__
 
 /* Get system call information.  */
@@ -121,6 +124,29 @@ typedef struct
 #define THREAD_SETMEM_NC(descr, member, idx, value) \
   descr->member[idx] = (value)
 
+/* 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_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 */
index d5b3797e69740c91651a6865753cd955ab4d4194..b3d9142fc5114de50cb1ca39a093b5c996125e45 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  nptl/i386 version.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006 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
@@ -51,6 +51,7 @@ typedef struct
   uintptr_t sysinfo;
   uintptr_t stack_guard;
   uintptr_t pointer_guard;
+  int gscope_flag;
 } tcbhead_t;
 
 # define TLS_MULTIPLE_THREADS_IN_TCB 1
@@ -65,6 +66,9 @@ typedef struct
 # error "TLS support is required."
 #endif
 
+/* Signal that TLS support is available.  */
+#define USE_TLS        1
+
 /* Alignment requirement for the stack.  For IA-32 this is governed by
    the SSE memory functions.  */
 #define STACK_ALIGN    16
@@ -431,6 +435,26 @@ union user_desc_init
    = THREAD_GETMEM (THREAD_SELF, header.pointer_guard))
 
 
+/* Get and set the global scope generation counter in the TCB head.  */
+#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;                                                             \
+      asm volatile ("xchgl %0, %%gs:%P1"                                     \
+                   : "=r" (__res)                                            \
+                   : "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);                 \
+    }                                                                        \
+  while (0)
+#define THREAD_GSCOPE_SET_FLAG() \
+  THREAD_SETMEM (THREAD_SELF, header.gscope_flag, THREAD_GSCOPE_FLAG_USED)
+#define THREAD_GSCOPE_WAIT() \
+  GL(dl_wait_lookup_done) ()
+
 #endif /* __ASSEMBLER__ */
 
 #endif /* tls.h */
index 50d9c5f6a807741d61e1dc7b2e83f6cee3446d84..6232764b13c17f66a055f760c0be7cb6fc4a3a34 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
 
@@ -23,6 +23,6 @@
 int
 pthread_spin_unlock (pthread_spinlock_t *lock)
 {
-  __sync_lock_release ((int *) lock);
+  __sync_lock_release_si ((int *) lock);
   return 0;
 }
index 22a8b081448a7c02ed9732345a490ce6d024cf47..a43f0967987a5c9e7564df546961431b1f2a366b 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  nptl/IA-64 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
@@ -61,6 +61,9 @@ register struct pthread *__thread_self __asm__("r13");
 # error "TLS support is required."
 #endif
 
+/* Signal that TLS support is available.  */
+#define USE_TLS        1
+
 /* Alignment requirement for the stack.  */
 #define STACK_ALIGN    16
 
@@ -163,6 +166,29 @@ register struct pthread *__thread_self __asm__("r13");
   (((uintptr_t *) ((char *) (descr) + TLS_PRE_TCB_SIZE))[-2] \
    = THREAD_GET_POINTER_GUARD ())
 
+/* 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_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 */
index ddaafe23d0b67bfa6e1f2529d5d9f0b040ed6cf0..ad5698c6f8516f2eab8e52c226ebb81824490c2f 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  NPTL/PowerPC version.
-   Copyright (C) 2003, 2005, 2006 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
@@ -48,6 +48,9 @@ typedef union dtv
 # error "TLS support is required."
 #endif
 
+/* Signal that TLS support is available.  */
+# define USE_TLS       1
+
 #ifndef __ASSEMBLER__
 
 /* Get system call information.  */
@@ -180,6 +183,29 @@ register void *__thread_register __asm__ ("r13");
    different value to mean unset l_tls_offset.  */
 # define NO_TLS_OFFSET         -1
 
+/* 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_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 */
index 6f6f17b9751dc31bec5ba096ff10df27db4e23f1..8e8f86d64ea45ba6a0a309916a832581ee0e147c 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  NPTL/s390 version.
-   Copyright (C) 2003, 2004, 2005, 2006 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
@@ -50,6 +50,7 @@ typedef struct
   int multiple_threads;
   uintptr_t sysinfo;
   uintptr_t stack_guard;
+  int gscope_flag;
 } tcbhead_t;
 
 # ifndef __s390x__
@@ -66,6 +67,9 @@ typedef struct
 # error "TLS support is required."
 #endif
 
+/* Signal that TLS support is available.  */
+#define USE_TLS        1
+
 /* Alignment requirement for the stack.  For IA-32 this is governed by
    the SSE memory functions.  */
 #define STACK_ALIGN    16
@@ -168,6 +172,29 @@ typedef struct
 #define THREAD_SET_POINTER_GUARD(value)
 #define THREAD_COPY_POINTER_GUARD(descr)
 
+/* 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_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 */
index d9aa1073b8d6079623cce51707be690cd29303bb..2873fe73a83bbaf674d97021713d71e42f1e6617 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  NPTL/SH version.
-   Copyright (C) 2003, 2005, 2006 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
@@ -56,6 +56,9 @@ typedef struct
 # error "TLS support is required."
 #endif
 
+/* Signal that TLS support is available.  */
+# define USE_TLS       1
+
 #ifndef __ASSEMBLER__
 
 /* Get system call information.  */
@@ -150,6 +153,29 @@ typedef struct
      __asm __volatile ("stc gbr,%0" : "=r" (__tcbp));                        \
      ((tcbhead_t *) (descr + 1))->pointer_guard        = __tcbp->pointer_guard;})
 
+/* 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_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 */
index 4fbe426595924d6eb24d87361ed31c7034d08821..90a3e0bf3d87186f0796db13beaa95a6aa04231f 100644 (file)
@@ -1,5 +1,5 @@
 /* Definitions for thread-local data handling.  NPTL/sparc version.
-   Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 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
@@ -46,9 +46,15 @@ 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
 } tcbhead_t;
 
 #else /* __ASSEMBLER__ */
@@ -60,6 +66,9 @@ typedef struct
 # error "TLS support is required."
 #endif
 
+/* Signal that TLS support is available.  */
+#define USE_TLS        1
+
 #ifndef __ASSEMBLER__
 /* Get system call information.  */
 # include <sysdep.h>
@@ -141,6 +150,29 @@ register struct pthread *__thread_self __asm__("%g7");
 # define THREAD_COPY_POINTER_GUARD(descr) \
   ((descr)->header.pointer_guard = THREAD_GET_POINTER_GUARD ())
 
+/* 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_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 */
index 9b27b1ff487fb6a0fc4c5fd35715b26f1cb87bbd..e0718780cc4b84e537fb15aec59978d396f13cc3 100644 (file)
@@ -87,6 +87,3 @@
 
 /* Maximum message queue priority level.  */
 #define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
index be4469c69d81ded80ea463e98f97e2e93d86d775..6dadfda20615dd31304de4e63014aad45116a231 100644 (file)
@@ -26,6 +26,9 @@
 /* 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
 {
index 4b7b29787e97244e11fa7812b416ca598690ad04..b639ba44af88f965632bfeeac8772298d66b6faa 100644 (file)
@@ -87,6 +87,3 @@
 
 /* Maximum message queue priority level.  */
 #define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
index 840974401bc9fd24c5ab761862a2e5086cc78ad7..98bb237c06b05e4b8d1c869568271c8bb24cfe70 100644 (file)
@@ -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.
 
@@ -167,8 +167,11 @@ __libc_fork (void)
            allp->handler->child_handler ();
 
          /* Note that we do not have to wake any possible waiter.
-            This is the only thread in the new process.  */
-         --allp->handler->refcntr;
+            This is the only thread in the new process.  The count
+            may have been bumped up by other threads doing a fork.
+            We reset it to 1, to avoid waiting for non-existing
+            thread(s) to release the count.  */
+         allp->handler->refcntr = 1;
 
          /* XXX We could at this point look through the object pool
             and mark all objects not on the __fork_handlers list as
index 934493c3081e3e4b5d8cd80af61304948ec00967..e6c5d845ce3352195cb47fc7077fe558761adf86 100644 (file)
@@ -28,6 +28,9 @@
 /* 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
 {
index aa1f9f41ca92da416891667ade8446f0cc91099d..bf70e17fca6e96b79977644d0b572f15d13da258 100644 (file)
@@ -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.
 
@@ -79,10 +79,7 @@ sem_timedwait:
        jae     6f
 
        cfi_offset(3, -16)              /* %ebx */
-7:     call    __pthread_enable_asynccancel
-       movl    %eax, 8(%esp)
-
-       xorl    %ecx, %ecx
+7:     xorl    %ecx, %ecx
        movl    %esp, %ebx
        movl    %ecx, %edx
        movl    $SYS_gettimeofday, %eax
@@ -105,6 +102,10 @@ sem_timedwait:
 
        movl    %ecx, (%esp)    /* Store relative timeout.  */
        movl    %edx, 4(%esp)
+
+       call    __pthread_enable_asynccancel
+       movl    %eax, 8(%esp)
+
        movl    28(%esp), %ebx
        xorl    %ecx, %ecx
        movl    %esp, %esi
index 1cd4b9b8b67240e1e86ad689774589985cee6f9d..d60dcd33d50c58f75bedda555989e295f1fa952c 100644 (file)
@@ -58,7 +58,6 @@
 # define SAVE_OLDTYPE_3        SAVE_OLDTYPE_2
 # define SAVE_OLDTYPE_4        SAVE_OLDTYPE_2
 # define SAVE_OLDTYPE_5        SAVE_OLDTYPE_2
-# define SAVE_OLDTYPE_6        SAVE_OLDTYPE_2
 
 # define PUSHCARGS_0   /* No arguments to push.  */
 # define DOCARGS_0     /* No arguments to frob.  */
 # define _POPCARGS_5   _POPCARGS_4; popl %edi; \
                        cfi_adjust_cfa_offset (-4); cfi_restore (edi);
 
-# define PUSHCARGS_6   _PUSHCARGS_6
-# define DOCARGS_6     _DOARGS_6 (44)
-# define POPCARGS_6    _POPCARGS_6
-# define _PUSHCARGS_6  pushl %ebp; cfi_adjust_cfa_offset (4); \
-                       cfi_rel_offset (ebp, 0); _PUSHCARGS_5
-# define _POPCARGS_6   _POPCARGS_5; popl %ebp; \
-                       cfi_adjust_cfa_offset (-4); cfi_restore (ebp);
-
 # ifdef IS_IN_libpthread
 #  define CENABLE      call __pthread_enable_asynccancel;
 #  define CDISABLE     call __pthread_disable_asynccancel
 # define POPSTATE_3    POPSTATE_2
 # define POPSTATE_4    POPSTATE_3
 # define POPSTATE_5    POPSTATE_4
-# define POPSTATE_6    POPSTATE_5
 
 # ifndef __ASSEMBLER__
 #  define SINGLE_THREAD_P \
index 83db31efcbe05a86b9c7edd54db9c45a28de1c0f..f837250b95d19b0c0847ca2b15d8f0a206ab8bc1 100644 (file)
@@ -87,6 +87,3 @@
 
 /* Maximum message queue priority level.  */
 #define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
index 0684aebe24d91a64835ff1a6cdb8dd0333057fa3..2329e986672580e531cec4241dcac2140b0d6e5e 100644 (file)
@@ -28,6 +28,9 @@
 /* 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
 {
index 3e88ee1866396b59e71b267d7b96473cc80d7c95..30ef991bd060c2c7d21b5fa7183443ec890c25d0 100644 (file)
@@ -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 Jakub Jelinek <jakub@redhat.com>, 2006.
 
@@ -30,6 +30,10 @@ __lll_robust_lock_wait (int *futex)
   int oldval = *futex;
   int tid = THREAD_GETMEM (THREAD_SELF, tid);
 
+  /* If the futex changed meanwhile try locking again.  */
+  if (oldval == 0)
+    goto try;
+
   do
     {
       if (__builtin_expect (oldval & FUTEX_OWNER_DIED, 0))
@@ -41,6 +45,9 @@ __lll_robust_lock_wait (int *futex)
        continue;
 
       lll_futex_wait (futex, newval);
+
+    try:
+      ;
     }
   while ((oldval = atomic_compare_and_exchange_val_acq (futex,
                                                        tid | FUTEX_WAITERS,
@@ -57,6 +64,11 @@ __lll_robust_timedlock_wait (int *futex, const struct timespec *abstime)
     return EINVAL;
 
   int tid = THREAD_GETMEM (THREAD_SELF, tid);
+  int oldval = *futex;
+
+  /* If the futex changed meanwhile try locking again.  */
+  if (oldval == 0)
+    goto try;
 
   do
     {
@@ -80,7 +92,6 @@ __lll_robust_timedlock_wait (int *futex, const struct timespec *abstime)
        return ETIMEDOUT;
 
       /* Wait.  */
-      int oldval = *futex;
       if (__builtin_expect (oldval & FUTEX_OWNER_DIED, 0))
        return oldval;
 
@@ -90,8 +101,13 @@ __lll_robust_timedlock_wait (int *futex, const struct timespec *abstime)
        continue;
 
       lll_futex_timed_wait (futex, newval, &rt);
+
+    try:
+      ;
     }
-  while (atomic_compare_and_exchange_bool_acq (futex, tid | FUTEX_WAITERS, 0));
+  while ((oldval = atomic_compare_and_exchange_val_acq (futex,
+                                                       tid | FUTEX_WAITERS,
+                                                       0)) != 0);
 
   return 0;
 }
index 6b5a0362da22e36bb544d2f8b9506802a270d21b..997784798487d45cd55dcedc44f29e26f0eefefb 100644 (file)
@@ -2,8 +2,4 @@ libpthread {
   GLIBC_2.3.4 {
     longjmp; siglongjmp;
   }
-  GLIBC_2.6 {
-    # Changed PTHREAD_STACK_MIN.
-    pthread_attr_setstack; pthread_attr_setstacksize;
-  }
 }
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h b/nptl/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h
deleted file mode 100644 (file)
index 02e2d17..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Minimum guaranteed maximum values for system limits.  Linux/PPC version.
-   Copyright (C) 1993-1998,2000,2002-2004,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
-   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; see the file COPYING.LIB.  If not,
-   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-/* The kernel header pollutes the namespace with the NR_OPEN symbol
-   and defines LINK_MAX although filesystems have different maxima.  A
-   similar thing is true for OPEN_MAX: the limit can be changed at
-   runtime and therefore the macro must not be defined.  Remove this
-   after including the header if necessary.  */
-#ifndef NR_OPEN
-# define __undef_NR_OPEN
-#endif
-#ifndef LINK_MAX
-# define __undef_LINK_MAX
-#endif
-#ifndef OPEN_MAX
-# define __undef_OPEN_MAX
-#endif
-
-/* The kernel sources contain a file with all the needed information.  */
-#include <linux/limits.h>
-
-/* Have to remove NR_OPEN?  */
-#ifdef __undef_NR_OPEN
-# undef NR_OPEN
-# undef __undef_NR_OPEN
-#endif
-/* Have to remove LINK_MAX?  */
-#ifdef __undef_LINK_MAX
-# undef LINK_MAX
-# undef __undef_LINK_MAX
-#endif
-/* Have to remove OPEN_MAX?  */
-#ifdef __undef_OPEN_MAX
-# undef OPEN_MAX
-# undef __undef_OPEN_MAX
-#endif
-
-/* The number of data keys per process.  */
-#define _POSIX_THREAD_KEYS_MAX 128
-/* This is the value this implementation supports.  */
-#define PTHREAD_KEYS_MAX       1024
-
-/* Controlling the iterations of destructors for thread-specific data.  */
-#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS    4
-/* Number of iterations this implementation does.  */
-#define PTHREAD_DESTRUCTOR_ITERATIONS  _POSIX_THREAD_DESTRUCTOR_ITERATIONS
-
-/* The number of threads per process.  */
-#define _POSIX_THREAD_THREADS_MAX      64
-/* We have no predefined limit on the number of threads.  */
-#undef PTHREAD_THREADS_MAX
-
-/* Maximum amount by which a process can descrease its asynchronous I/O
-   priority level.  */
-#define AIO_PRIO_DELTA_MAX     20
-
-/* Minimum size for a thread.  At least two pages for systems with 64k
-   pages.  */
-#define PTHREAD_STACK_MIN      131072
-
-/* Maximum number of timer expiration overruns.  */
-#define DELAYTIMER_MAX 2147483647
-
-/* Maximum tty name length.  */
-#define TTY_NAME_MAX           32
-
-/* Maximum login name length.  This is arbitrary.  */
-#define LOGIN_NAME_MAX         256
-
-/* Maximum host name length.  */
-#define HOST_NAME_MAX          64
-
-/* Maximum message queue priority level.  */
-#define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
index c7f121ba5b0e7253a3a8a13ca22fc8cfdc1e5020..8123b418b55a6805134b3ceeb572be012c1df036 100644 (file)
@@ -33,6 +33,9 @@
 /* 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/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c b/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c
deleted file mode 100644 (file)
index 2cb0a13..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-#define NEW_VERNUM GLIBC_2_6
-#include <nptl/pthread_attr_setstack.c>
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c b/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c
deleted file mode 100644 (file)
index 9472dd1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#define NEW_VERNUM GLIBC_2_6
-#define STACKSIZE_ADJUST \
-  do {                                                                       \
-    size_t ps = __getpagesize ();                                            \
-    if (stacksize < 2 * ps)                                                  \
-      stacksize = 2 * ps;                                                    \
-  } while (0)
-#include <nptl/pthread_attr_setstacksize.c>
index 6b3d3682da1fd69379b55164ebb64cfdb6c2b5b7..39db5a3bd4456204852f189ce169e3fa8fb22690 100644 (file)
@@ -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
index 111462f0fb1c666bdf55c2a53307aeb627b6fe47..ead26630478460d3e5f4beb563f20c3baa8c6621 100644 (file)
@@ -32,6 +32,9 @@
 /* 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
 {
index 6b0240243a2e89034bbd5c91cd8efe38182c54b5..17ab562daadfe58bb28e65ed16e0607475f84b1b 100644 (file)
@@ -45,13 +45,7 @@ L(pseudo_cancel):                                                          \
        bas     %r14,0(%r1,%r13);                                             \
        lr      %r0,%r2;                                                      \
        LM_##args                                                             \
-       .if SYS_ify (syscall_name) < 256;                                     \
-       svc SYS_ify (syscall_name);                                           \
-       .else;                                                                \
-       lhi %r1,SYS_ify (syscall_name);                                       \
-       svc 0;                                                                \
-       .endif;                                                               \
-       LR7_##args                                                            \
+       DO_CALL(syscall_name, args);                                          \
        l       %r1,2f-0b(%r13);                                              \
        lr      %r12,%r2;                                                     \
        lr      %r2,%r0;                                                      \
@@ -95,7 +89,6 @@ L(pseudo_end):
 #define STM_3          stm %r2,%r4,8(%r15);
 #define STM_4          stm %r2,%r5,8(%r15);
 #define STM_5          stm %r2,%r5,8(%r15);
-#define STM_6          stm %r2,%r7,8(%r15);
 
 #define LM_0           /* Nothing */
 #define LM_1           l %r2,8+96(%r15);
@@ -103,18 +96,6 @@ L(pseudo_end):
 #define LM_3           lm %r2,%r4,8+96(%r15);
 #define LM_4           lm %r2,%r5,8+96(%r15);
 #define LM_5           lm %r2,%r5,8+96(%r15);
-#define LM_6           lm %r2,%r5,8+96(%r15); \
-                       cfi_offset (%r7, -68); \
-                       l %r7,96+96(%r15);
-
-#define LR7_0          /* Nothing */
-#define LR7_1          /* Nothing */
-#define LR7_2          /* Nothing */
-#define LR7_3          /* Nothing */
-#define LR7_4          /* Nothing */
-#define LR7_5          /* Nothing */
-#define LR7_6          l %r7,28+96(%r15); \
-                       cfi_restore (%r7);
 
 # ifndef __ASSEMBLER__
 #  define SINGLE_THREAD_P \
index 70d5a864296d3129e873d7433f19af4f57e7bd79..77ce7424951e950a02a49e5a2d8ea267143938a6 100644 (file)
@@ -42,13 +42,7 @@ L(pseudo_cancel):                                                          \
        brasl   %r14,CENABLE;                                                 \
        lgr     %r0,%r2;                                                      \
        LM_##args                                                             \
-       .if SYS_ify (syscall_name) < 256;                                     \
-       svc SYS_ify (syscall_name);                                           \
-       .else;                                                                \
-       lghi %r1,SYS_ify (syscall_name);                                      \
-       svc 0;                                                                \
-       .endif;                                                               \
-       LR7_##args                                                            \
+       DO_CALL(syscall_name, args);                                          \
        lgr     %r13,%r2;                                                     \
        lgr     %r2,%r0;                                                      \
        brasl   %r14,CDISABLE;                                                \
@@ -91,7 +85,6 @@ L(pseudo_end):
 #define STM_3          stmg %r2,%r4,16(%r15);
 #define STM_4          stmg %r2,%r5,16(%r15);
 #define STM_5          stmg %r2,%r5,16(%r15);
-#define STM_6          stmg %r2,%r7,16(%r15);
 
 #define LM_0           /* Nothing */
 #define LM_1           lg %r2,16+160(%r15);
@@ -99,18 +92,6 @@ L(pseudo_end):
 #define LM_3           lmg %r2,%r4,16+160(%r15);
 #define LM_4           lmg %r2,%r5,16+160(%r15);
 #define LM_5           lmg %r2,%r5,16+160(%r15);
-#define LM_6           lmg %r2,%r5,16+160(%r15); \
-                       cfi_offset (%r7, -104); \
-                       lg %r7,160+160(%r15);
-
-#define LR7_0          /* Nothing */
-#define LR7_1          /* Nothing */
-#define LR7_2          /* Nothing */
-#define LR7_3          /* Nothing */
-#define LR7_4          /* Nothing */
-#define LR7_5          /* Nothing */
-#define LR7_6          lg %r7,56+160(%r15); \
-                       cfi_restore (%r7);
 
 # if defined IS_IN_libpthread || !defined NOT_IN_libc
 #  ifndef __ASSEMBLER__
index 934493c3081e3e4b5d8cd80af61304948ec00967..e6c5d845ce3352195cb47fc7077fe558761adf86 100644 (file)
@@ -28,6 +28,9 @@
 /* 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
 {
index 2576f121c34a2e7754df9d40ed4ad35b7fb6d69b..e082ea8f049cf0b28de47194c5a53dfd04bc1361 100644 (file)
@@ -87,6 +87,3 @@
 
 /* Maximum message queue priority level.  */
 #define MQ_PRIO_MAX            32768
-
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
index 8fd7d344ea824eef7293d9ac92d2bd160107fc0e..7f3a328326746fb12c2b8c23dcaf264611f7f61c 100644 (file)
@@ -33,6 +33,9 @@
 /* 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
 {
index 55d20eb8f87a6ed1e4e1e5615c6b955b4dab2e0f..7613863bbac784df11804cf44fe61612bde2b6c7 100644 (file)
@@ -1 +1 @@
-#include "../../../../../../../pthread_barrier_wait.c"
+#include "../../../../../../pthread/pthread_barrier_wait.c"
index e973bc5bfbcb5d7a95df6705908ce8696cb9face..57edbbbfb327a1be2cdd49ecc49aea900051a32b 100644 (file)
@@ -33,6 +33,9 @@
 /* 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
 {
index 90f10e6f4fbd8b62395b9eb679ebb29045d42507..394dec8d82a71b1dc748114ada96040464c62486 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 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.
 
@@ -164,7 +164,7 @@ __lll_mutex_timedlock_wait:
 8:                             /* NB: %edx == 2 */
        xorl    %eax, %eax
        LOCK
-       cmpxchgl %edx, (%rdi)
+       cmpxchgl %edx, (%r12)
        jnz     7f
 
 6:     addq    $16, %rsp
index 4030bb7fb875858430b3e21add2643d4abaa6f77..97085bf018656cd5e30d1a0aa1e0bde122ef00ba 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -35,7 +35,6 @@
 #define SYS_futex              202
 #define FUTEX_WAIT             0
 #define FUTEX_WAKE             1
-#define FUTEX_CMP_REQUEUE      4
 #define FUTEX_LOCK_PI          6
 #define FUTEX_UNLOCK_PI                7
 #define FUTEX_TRYLOCK_PI       8
@@ -151,7 +150,7 @@ LLL_STUB_UNWIND_INFO_END
 #define lll_futex_wait(futex, val) \
   ({                                                                         \
     int __status;                                                            \
-    register __typeof (val) _val __asm ("edx") = (val);                              \
+    register __typeof (val) _val asm ("edx") = (val);                        \
     __asm __volatile ("xorq %%r10, %%r10\n\t"                                \
                      "syscall"                                               \
                      : "=a" (__status)                                       \
@@ -164,22 +163,22 @@ LLL_STUB_UNWIND_INFO_END
 
 #define lll_futex_timed_wait(futex, val, timeout)                            \
   ({                                                                         \
-    register const struct timespec *__to __asm ("r10") = timeout;            \
+    register const struct timespec *__to __asm__ ("r10") = timeout;          \
     int __status;                                                            \
-    register __typeof (val) _val __asm ("edx") = (val);                              \
+    register __typeof (val) _val asm ("edx") = (val);                        \
     __asm __volatile ("syscall"                                                      \
                      : "=a" (__status)                                       \
                      : "0" (SYS_futex), "D" (futex), "S" (FUTEX_WAIT),       \
                        "d" (_val), "r" (__to)                                \
                      : "memory", "cc", "r11", "cx");                         \
-    -__status;                                                               \
+    __status;                                                                \
   })
 
 
 #define lll_futex_wake(futex, nr) \
   do {                                                                       \
     int __ignore;                                                            \
-    register __typeof (nr) _nr __asm ("edx") = (nr);                         \
+    register __typeof (nr) _nr asm ("edx") = (nr);                           \
     __asm __volatile ("syscall"                                                      \
                      : "=a" (__ignore)                                       \
                      : "0" (SYS_futex), "D" (futex), "S" (FUTEX_WAKE),       \
@@ -424,21 +423,6 @@ extern int __lll_mutex_unlock_wait (int *__futex) attribute_hidden;
                              : "cx", "r11", "cc", "memory"); })
 
 
-/* Returns non-zero if error happened, zero if success.  */
-#define lll_futex_requeue(ftx, nr_wake, nr_move, mutex, val) \
-  ({ int __res;                                                                      \
-     register int __nr_move __asm ("r10") = nr_move;                         \
-     register void *__mutex __asm ("r8") = mutex;                            \
-     register int __val __asm ("r9") = val;                                  \
-     __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)          \
-                      : "cx", "r11", "cc", "memory");                        \
-     __res < 0; })
-
-
 #define lll_mutex_islocked(futex) \
   (futex != LLL_MUTEX_LOCK_INITIALIZER)
 
index c44d3f5e778f4c5b0ba99afa12ff269fb80f2f78..51136cf2dc4bc1affad23295a5c33120a9ab8b5b 100644 (file)
@@ -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.
 
@@ -79,10 +79,7 @@ sem_timedwait:
        cfi_offset(14, -24)             /* %r14 */
        jae     6f
 
-7:     call    __pthread_enable_asynccancel
-       movl    %eax, 16(%rsp)
-
-       xorl    %esi, %esi
+7:     xorl    %esi, %esi
        movq    %rsp, %rdi
        movq    $VSYSCALL_ADDR_vgettimeofday, %rax
        callq   *%rax
@@ -105,6 +102,9 @@ sem_timedwait:
        movq    %rdi, (%rsp)    /* Store relative timeout.  */
        movq    %rsi, 8(%rsp)
 
+       call    __pthread_enable_asynccancel
+       movl    %eax, 16(%rsp)
+
        movq    %rsp, %r10
        movq    %r12, %rdi
        xorl    %esi, %esi
index 7618573e0bd68f82c11a551c68890da5a5cb7222..b6385b135ca36711a255a8a82a2797997b1cb721 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  nptl/x86_64 version.
-   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.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -47,6 +47,7 @@ typedef struct
   dtv_t *dtv;
   void *self;          /* Pointer to the thread descriptor.  */
   int multiple_threads;
+  int gscope_flag;
   uintptr_t sysinfo;
   uintptr_t stack_guard;
   uintptr_t pointer_guard;
@@ -62,6 +63,9 @@ typedef struct
 # error "TLS support is required."
 #endif
 
+/* Signal that TLS support is available.  */
+#define USE_TLS        1
+
 /* Alignment requirement for the stack.  */
 #define STACK_ALIGN    16
 
@@ -336,6 +340,26 @@ typedef struct
    = THREAD_GETMEM (THREAD_SELF, header.pointer_guard))
 
 
+/* Get and set the global scope generation counter in the TCB head.  */
+#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;                                                             \
+      asm volatile ("xchgl %0, %%fs:%P1"                                     \
+                   : "=r" (__res)                                            \
+                   : "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);                 \
+    }                                                                        \
+  while (0)
+#define THREAD_GSCOPE_SET_FLAG() \
+  THREAD_SETMEM (THREAD_SELF, header.gscope_flag, THREAD_GSCOPE_FLAG_USED)
+#define THREAD_GSCOPE_WAIT() \
+  GL(dl_wait_lookup_done) ()
+
 #endif /* __ASSEMBLER__ */
 
 #endif /* tls.h */
index d6f16d1ed2d52a7e4d747399f2b2d644bffde60c..61b9fb52de171f5f4b796daca11f80c3e2ea772f 100644 (file)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Test whether all cancelable functions are cancelable.
-# 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 Jakub Jelinek <jakub@redhat.com>, 2002.
 
@@ -26,6 +26,7 @@ C["close"]=1
 C["connect"]=1
 C["creat"]=1
 C["fcntl"]=1
+C["fdatasync"]=1
 C["fsync"]=1
 C["msgrcv"]=1
 C["msgsnd"]=1
index 73cfa44614f9d942976d5ad9ce52b53df17dc081..45df6ce07686b4d3431a3e8321790d732230feba 100644 (file)
@@ -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.
 
@@ -1570,6 +1570,47 @@ tf_fsync (void *arg)
 }
 
 
+static void *
+tf_fdatasync (void *arg)
+{
+  if (arg == NULL)
+    // XXX If somebody can provide a portable test case in which fdatasync()
+    // blocks we can enable this test to run in both rounds.
+    abort ();
+
+  tempfd = open ("Makefile", O_RDONLY);
+  if (tempfd == -1)
+    {
+      printf ("%s: cannot open Makefile\n", __FUNCTION__);
+      exit (1);
+    }
+
+  int r = pthread_barrier_wait (&b2);
+  if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
+    {
+      printf ("%s: barrier_wait failed\n", __FUNCTION__);
+      exit (1);
+    }
+
+  r = pthread_barrier_wait (&b2);
+  if (r != 0 && r != PTHREAD_BARRIER_SERIAL_THREAD)
+    {
+      printf ("%s: 2nd barrier_wait failed\n", __FUNCTION__);
+      exit (1);
+    }
+
+  pthread_cleanup_push (cl, NULL);
+
+  fdatasync (tempfd);
+
+  pthread_cleanup_pop (0);
+
+  printf ("%s: fdatasync returned\n", __FUNCTION__);
+
+  exit (1);
+}
+
+
 static void *
 tf_msync (void *arg)
 {
@@ -2078,6 +2119,7 @@ static struct
   ADD_TEST (pread, 2, 1),
   ADD_TEST (pwrite, 2, 1),
   ADD_TEST (fsync, 2, 1),
+  ADD_TEST (fdatasync, 2, 1),
   ADD_TEST (msync, 2, 1),
   ADD_TEST (sendto, 2, 1),
   ADD_TEST (sendmsg, 2, 1),
diff --git a/nptl/tst-robust9.c b/nptl/tst-robust9.c
new file mode 100644 (file)
index 0000000..1d6ba17
--- /dev/null
@@ -0,0 +1,94 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <pthread.h>
+#include <unistd.h>
+#include <sys/time.h>
+
+
+static pthread_mutex_t m;
+
+static void *
+tf (void *data)
+{
+  int err = pthread_mutex_lock (&m);
+  if (err == EOWNERDEAD)
+    {
+      err = pthread_mutex_consistent_np (&m);
+      if (err)
+       {
+         puts ("pthread_mutex_consistent_np");
+         exit (1);
+       }
+    }
+  else if (err)
+    {
+      puts ("pthread_mutex_lock");
+      exit (1);
+    }
+  printf ("thread%ld got the lock.\n", (long int) data);
+  sleep (1);
+  /* exit without unlock */
+  return NULL;
+}
+
+static int
+do_test (void)
+{
+  int err, i;
+  pthread_t t[3];
+  pthread_mutexattr_t ma;
+
+  pthread_mutexattr_init (&ma);
+  err = pthread_mutexattr_setrobust_np (&ma, PTHREAD_MUTEX_ROBUST_NP);
+  if (err)
+    {
+      puts ("pthread_mutexattr_setrobust_np");
+      return 1;
+    }
+#ifdef ENABLE_PI
+  if (pthread_mutexattr_setprotocol (&ma, PTHREAD_PRIO_INHERIT) != 0)
+    {
+      puts ("pthread_mutexattr_setprotocol failed");
+      return 1;
+    }
+#endif
+  err = pthread_mutex_init (&m, &ma);
+#ifdef ENABLE_PI
+  if (err == ENOTSUP)
+    {
+      puts ("PI robust mutexes not supported");
+      return 0;
+    }
+#endif
+  if (err)
+    {
+      puts ("pthread_mutex_init");
+      return 1;
+    }
+
+  for (i = 0; i < sizeof (t) / sizeof (t[0]); i++)
+    {
+      err = pthread_create (&t[i], NULL, tf, (void *) (long int) i);
+      if (err)
+       {
+         puts ("pthread_create");
+         return 1;
+       }
+    }
+
+  for (i = 0; i < sizeof (t) / sizeof (t[0]); i++)
+    {
+      err = pthread_join (t[i], NULL);
+      if (err)
+       {
+         puts ("pthread_join");
+         return 1;
+       }
+    }
+  return 0;
+}
+
+#define TIMEOUT 5
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/nptl/tst-robustpi9.c b/nptl/tst-robustpi9.c
new file mode 100644 (file)
index 0000000..d059aa7
--- /dev/null
@@ -0,0 +1,2 @@
+#define ENABLE_PI 1
+#include "tst-robust9.c"
diff --git a/nptl/tst-sem10.c b/nptl/tst-sem10.c
new file mode 100644 (file)
index 0000000..9f6e870
--- /dev/null
@@ -0,0 +1,88 @@
+/* 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.  */
+
+#include <errno.h>
+#include <pthread.h>
+#include <semaphore.h>
+#include <stdio.h>
+#include <time.h>
+#include <unistd.h>
+#include <sys/time.h>
+
+
+static int
+do_test (void)
+{
+  sem_t s;
+  if (sem_init (&s, 0, 0) == -1)
+    {
+      puts ("sem_init failed");
+      return 1;
+    }
+
+  struct timeval tv;
+  if (gettimeofday (&tv, NULL) != 0)
+    {
+      puts ("gettimeofday failed");
+      return 1;
+    }
+
+  struct timespec ts;
+  TIMEVAL_TO_TIMESPEC (&tv, &ts);
+
+  /* Set ts to yesterday.  */
+  ts.tv_sec -= 86400;
+
+  int type_before;
+  if (pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &type_before) != 0)
+    {
+      puts ("first pthread_setcanceltype failed");
+      return 1;
+    }
+
+  errno = 0;
+  if (TEMP_FAILURE_RETRY (sem_timedwait (&s, &ts)) != -1)
+    {
+      puts ("sem_timedwait succeeded");
+      return 1;
+    }
+  if (errno != ETIMEDOUT)
+    {
+      printf ("sem_timedwait return errno = %d instead of ETIMEDOUT\n",
+             errno);
+      return 1;
+    }
+
+  int type_after;
+  if (pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, &type_after) != 0)
+    {
+      puts ("second pthread_setcanceltype failed");
+      return 1;
+    }
+  if (type_after != PTHREAD_CANCEL_DEFERRED)
+    {
+      puts ("sem_timedwait changed cancellation type");
+      return 1;
+    }
+
+  return 0;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
index 9a76ab7827234996691bec83b9faf5fa470ee96b..b7c14eb82c5d0df22ba4a4ee9fd259ea0d532b03 100644 (file)
@@ -2,7 +2,7 @@
 #include <stdlib.h>
 #include <tls.h>
 
-#if HAVE___THREAD
+#if USE_TLS && HAVE___THREAD
 
 struct tls_obj
 {
index 3a8c3c68e847a347e37a4f1a871c548c8435f211..6ec5ea3be002cd47857bf6a3665695f77487de1a 100644 (file)
@@ -3,10 +3,6 @@
        * nptl_db/db_info.c [TLS_DTV_AT_TP]: Fixed size init for dtvp
        to sizeof a pointer, instead of sizeof the union.
 
-2006-10-27  Ulrich Drepper  <drepper@redhat.com>
-
-       * structs.def: USE_TLS support is now default.
-
 2006-02-03  Roland McGrath  <roland@redhat.com>
 
        * structs.def: Add a descriptor for pointer.val field of dtv_t.
index 20fa014909ef21f734d199a183875c01a599f6e4..823af5cba21a4264f953d83dbe0c19ffdd607d49 100644 (file)
@@ -68,11 +68,15 @@ DB_STRUCT_FIELD (pthread_key_data, data)
 DB_STRUCT (pthread_key_data_level2)
 DB_STRUCT_ARRAY_FIELD (pthread_key_data_level2, data)
 
+#if USE_TLS
 DB_STRUCT_FIELD (link_map, l_tls_modid)
+#endif
 
+#if !defined IS_IN_libpthread || USE_TLS
 DB_STRUCT_ARRAY_FIELD (dtv, dtv)
-#define pointer_val pointer.val /* Field of anonymous struct in dtv_t.  */
+# define pointer_val pointer.val /* Field of anonymous struct in dtv_t.  */
 DB_STRUCT_FIELD (dtv_t, pointer_val)
+#endif
 #if !defined IS_IN_libpthread || TLS_TCB_AT_TP
 DB_STRUCT_FIELD (pthread, dtvp)
 #endif
index 21657abeb73217c432931f03266f27d07efba598..9c980182173aadc18cc28b92cd2b07968fb374d2 100644 (file)
@@ -119,7 +119,9 @@ CFLAGS-initgrcache.c += $(nscd-cflags)
 CFLAGS-gai.c += $(nscd-cflags)
 
 ifeq (yesyes,$(have-fpie)$(build-shared))
+ifeq (yes,$(have-z-relro))
 relro-LDFLAGS += -Wl,-z,now
+endif
 
 $(objpfx)nscd: $(addprefix $(objpfx),$(nscd-modules:=.o))
        $(LINK.o) -pie -Wl,-O1 $(nscd-cflags) \
index ef986f374adec3648f432c399285f6d912bd7a68..be9be2aa4f1e2e8597f9ea91bb3b14f05bf7e61c 100644 (file)
@@ -125,7 +125,7 @@ cache_add (int type, const void *key, size_t len, struct datahead *packet,
 
       dbg_log (_("add new entry \"%s\" of type %s for %s to cache%s"),
               str, serv2str[type], dbnames[table - dbs],
-              first ? _(" (first)") : "");
+              first ? " (first)" : "");
     }
 
   unsigned long int hash = __nis_hash (key, len) % table->head->module;
index 2e706bdfe7b19fbe789d88687b5144e3424dd53c..68719d876a8322ab04fe23078a4d3f270d04bebd 100644 (file)
@@ -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 Ulrich Drepper <drepper@cygnus.com>, 2004.
 
@@ -15,6 +15,7 @@
    along with this program; if not, write to the Free Software Foundation,
    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
+#include <alloca.h>
 /* This file uses the getaddrinfo code but it compiles it without NSCD
    support.  We just need a few symbol renames.  */
 #define __getservbyname_r getservbyname_r
@@ -26,6 +27,8 @@
 #define __sendto sendto
 #define __strchrnul strchrnul
 #define __getline getline
+/* nscd uses 1MB or 2MB thread stacks.  */
+#define __libc_use_alloca(size) (size <= __MAX_ALLOCA_CUTOFF)
 
 #include <getaddrinfo.c>
 
index 5a8fba47593585e512c8bbc981fbe8388cb0a19a..c207492cc0288d66f912878c57d4e7816852606e 100644 (file)
@@ -1,5 +1,5 @@
 /* Cache handling for group lookup.
-   Copyright (C) 1998-2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1998-2005, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -279,6 +279,7 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
                  /* Adjust pointers into the memory block.  */
                  gr_name = (char *) newp + (gr_name - (char *) dataset);
                  cp = (char *) newp + (cp - (char *) dataset);
+                 key_copy = (char *) newp + (key_copy - (char *) dataset);
 
                  dataset = memcpy (newp, dataset, total + n);
                  alloca_used = false;
index 0fd2d9f547e3ed0babb1a6b2d92d1a87bd8a9b85..8946b6315b7f0cf345cf807b866add1f5870ddc3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 1998, 1999, 2000, 2003, 2004, 2005, 2006
+/* Copyright (c) 1998, 1999, 2000, 2003, 2004, 2005, 2006, 2007
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
@@ -307,10 +307,10 @@ static inline int __nscd_drop_map_ref (struct mapped_database *map,
 
 
 /* Search the mapped database.  */
-extern const struct datahead *__nscd_cache_search (request_type type,
-                                                  const char *key,
-                                                  size_t keylen,
-                                                  const struct mapped_database *mapped);
+extern struct datahead *__nscd_cache_search (request_type type,
+                                            const char *key,
+                                            size_t keylen,
+                                            const struct mapped_database *mapped);
 
 /* Wrappers around read, readv and write that only read/write less than LEN
    bytes on error or EOF.  */
index b68ae2f4137d3405b07150f38e2bfe11ed6250ed..add4698406489ecd6a6fa1680987a8dcdf81c689 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 1998-2006, 2007 Free Software Foundation, Inc.
+/* Copyright (c) 1998-2003, 2004, 2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
 
@@ -402,7 +402,7 @@ print_version (FILE *stream, struct argp_state *state)
 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\
-"), "2007");
+"), "2006");
   fprintf (stream, gettext ("Written by %s.\n"),
           "Thorsten Kukuk and Ulrich Drepper");
 }
index a882da7d8b0b4338eee1e8fc28fe32c8f34cc8a1..a0074b99e5a113da829f00b3078d124f8e086a01 100644 (file)
@@ -49,8 +49,15 @@ prog=nscd
 start () {
     [ -d /var/run/nscd ] || mkdir /var/run/nscd
     [ -d /var/db/nscd ] || mkdir /var/db/nscd
+    secure=""
+#   for table in passwd group hosts
+#   do
+#      if egrep -q '^'$table':.*nisplus' /etc/nsswitch.conf; then
+#          /usr/lib/nscd_nischeck $table || secure="$secure -S $table,yes"
+#      fi
+#   done
     echo -n $"Starting $prog: "
-    daemon /usr/sbin/nscd
+    daemon /usr/sbin/nscd $secure
     RETVAL=$?
     echo
     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd
index b59c31ea26d3fa0b67878727acfe4f919eaafb56..5df32dc6dccd627aa553b450913ea337ce6fe3ca 100644 (file)
@@ -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 Ulrich Drepper <drepper@redhat.com>, 2004.
 
@@ -42,6 +42,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
 {
   size_t keylen = strlen (key) + 1;
   int gc_cycle;
+  int nretries = 0;
 
   /* If the mapping is available, try to search there instead of
      communicating with the nscd.  */
@@ -50,49 +51,53 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
                               &gc_cycle);
 
  retry:;
-  const ai_response_header *ai_resp = NULL;
   struct nscd_ai_result *resultbuf = NULL;
   const char *recend = (const char *) ~UINTMAX_C (0);
   char *respdata = NULL;
   int retval = -1;
   int sock = -1;
+  ai_response_header ai_resp;
 
   if (mapped != NO_MAPPING)
     {
-      const struct datahead *found = __nscd_cache_search (GETAI, key, keylen,
-                                                         mapped);
+      struct datahead *found = __nscd_cache_search (GETAI, key, keylen,
+                                                   mapped);
       if (found != NULL)
        {
-         ai_resp = &found->data[0].aidata;
-         respdata = (char *) (ai_resp + 1);
+         respdata = (char *) (&found->data[0].aidata + 1);
+         ai_resp = found->data[0].aidata;
          recend = (const char *) found->data + found->recsize;
+         /* Now check if we can trust ai_resp fields.  If GC is
+            in progress, it can contain anything.  */
+         if (mapped->head->gc_cycle != gc_cycle)
+           {
+             retval = -2;
+             goto out;
+           }
        }
     }
 
   /* If we do not have the cache mapped, try to get the data over the
      socket.  */
-  ai_response_header ai_resp_mem;
-  if (ai_resp == NULL)
+  if (respdata == NULL)
     {
-      sock = __nscd_open_socket (key, keylen, GETAI, &ai_resp_mem,
-                                sizeof (ai_resp_mem));
+      sock = __nscd_open_socket (key, keylen, GETAI, &ai_resp,
+                                sizeof (ai_resp));
       if (sock == -1)
        {
          /* nscd not running or wrong version.  */
          __nss_not_use_nscd_hosts = 1;
          goto out;
        }
-
-      ai_resp = &ai_resp_mem;
     }
 
-  if (ai_resp->found == 1)
+  if (ai_resp.found == 1)
     {
-      size_t datalen = ai_resp->naddrs + ai_resp->addrslen + ai_resp->canonlen;
+      size_t datalen = ai_resp.naddrs + ai_resp.addrslen + ai_resp.canonlen;
 
-      /* This check is really only affects the case where the data
+      /* This check really only affects the case where the data
         comes from the mapped cache.  */
-      if ((char *) (ai_resp + 1) + datalen > recend)
+      if (respdata + datalen > recend)
        {
          assert (sock == -1);
          goto out;
@@ -108,10 +113,10 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
        }
 
       /* Set up the data structure, including pointers.  */
-      resultbuf->naddrs = ai_resp->naddrs;
+      resultbuf->naddrs = ai_resp.naddrs;
       resultbuf->addrs = (char *) (resultbuf + 1);
-      resultbuf->family = (uint8_t *) (resultbuf->addrs + ai_resp->addrslen);
-      if (ai_resp->canonlen != 0)
+      resultbuf->family = (uint8_t *) (resultbuf->addrs + ai_resp.addrslen);
+      if (ai_resp.canonlen != 0)
        resultbuf->canon = (char *) (resultbuf->family + resultbuf->naddrs);
       else
        resultbuf->canon = NULL;
@@ -137,10 +142,13 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
 
          /* Try to detect corrupt databases.  */
          if (resultbuf->canon != NULL
-             && resultbuf->canon[ai_resp->canonlen - 1] != '\0')
+             && resultbuf->canon[ai_resp.canonlen - 1] != '\0')
            /* We cannot use the database.  */
            {
-             free (resultbuf);
+             if (mapped->head->gc_cycle != gc_cycle)
+               retval = -2;
+             else
+               free (resultbuf);
              goto out_close;
            }
 
@@ -150,7 +158,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
     }
   else
     {
-      if (__builtin_expect (ai_resp->found == -1, 0))
+      if (__builtin_expect (ai_resp.found == -1, 0))
        {
          /* The daemon does not cache this database.  */
          __nss_not_use_nscd_hosts = 1;
@@ -158,7 +166,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
        }
 
       /* Store the error number.  */
-      *h_errnop = ai_resp->error;
+      *h_errnop = ai_resp.error;
 
       /* The `errno' to some value != ERANGE.  */
       __set_errno (ENOENT);
@@ -170,22 +178,25 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
   if (sock != -1)
     close_not_cancel_no_status (sock);
  out:
-  if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0 && retval != -1)
+  if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
     {
       /* When we come here this means there has been a GC cycle while we
         were looking for the data.  This means the data might have been
         inconsistent.  Retry if possible.  */
-      if ((gc_cycle & 1) != 0)
+      if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         __nscd_unmap (mapped);
+         if (atomic_decrement_val (&mapped->counter) == 0)
+           __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
 
-      *result = NULL;
-      free (resultbuf);
-
-      goto retry;
+      if (retval != -1)
+       {
+         *result = NULL;
+         free (resultbuf);
+         goto retry;
+       }
     }
 
   return retval;
index 922b906c19095d985196525355c4024fb32d4db6..fc036f2888692a0a83bf5fae2bc33c5eba3eb737 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1998-2000, 2002-2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2000, 2002-2005, 2006, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998.
 
@@ -88,6 +89,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
              struct group **result)
 {
   int gc_cycle;
+  int nretries = 0;
   const uint32_t *len = NULL;
   size_t lensize = 0;
 
@@ -97,55 +99,59 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
                                                       &__gr_map_handle,
                                                       &gc_cycle);
  retry:;
-  const gr_response_header *gr_resp = NULL;
   const char *gr_name = NULL;
   size_t gr_name_len = 0;
   int retval = -1;
   const char *recend = (const char *) ~UINTMAX_C (0);
+  gr_response_header gr_resp;
 
   if (mapped != NO_MAPPING)
     {
-      const struct datahead *found = __nscd_cache_search (type, key, keylen,
-                                                         mapped);
+      struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
       if (found != NULL)
        {
-         gr_resp = &found->data[0].grdata;
-         len = (const uint32_t *) (gr_resp + 1);
-         /* The alignment is always sufficient.  */
-         assert (((uintptr_t) len & (__alignof__ (*len) - 1)) == 0);
+         len = (const uint32_t *) (&found->data[0].grdata + 1);
+         gr_resp = found->data[0].grdata;
          gr_name = ((const char *) len
-                    + gr_resp->gr_mem_cnt * sizeof (uint32_t));
-         gr_name_len = gr_resp->gr_name_len + gr_resp->gr_passwd_len;
+                    + gr_resp.gr_mem_cnt * sizeof (uint32_t));
+         gr_name_len = gr_resp.gr_name_len + gr_resp.gr_passwd_len;
          recend = (const char *) found->data + found->recsize;
+         /* Now check if we can trust gr_resp fields.  If GC is
+            in progress, it can contain anything.  */
+         if (mapped->head->gc_cycle != gc_cycle)
+           {
+             retval = -2;
+             goto out;
+           }
+
+         /* The alignment is always sufficient, unless GC is in progress.  */
+         assert (((uintptr_t) len & (__alignof__ (*len) - 1)) == 0);
        }
     }
 
-  gr_response_header gr_resp_mem;
   int sock = -1;
-  if (gr_resp == NULL)
+  if (gr_name == NULL)
     {
-      sock = __nscd_open_socket (key, keylen, type, &gr_resp_mem,
-                                sizeof (gr_resp_mem));
+      sock = __nscd_open_socket (key, keylen, type, &gr_resp,
+                                sizeof (gr_resp));
       if (sock == -1)
        {
          __nss_not_use_nscd_group = 1;
          goto out;
        }
-
-      gr_resp = &gr_resp_mem;
     }
 
   /* No value found so far.  */
   *result = NULL;
 
-  if (__builtin_expect (gr_resp->found == -1, 0))
+  if (__builtin_expect (gr_resp.found == -1, 0))
     {
       /* The daemon does not cache this database.  */
       __nss_not_use_nscd_group = 1;
       goto out_close;
     }
 
-  if (gr_resp->found == 1)
+  if (gr_resp.found == 1)
     {
       struct iovec vec[2];
       char *p = buffer;
@@ -157,8 +163,8 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
         align the pointer.  */
       align = ((__alignof__ (char *) - (p - ((char *) 0)))
               & (__alignof__ (char *) - 1));
-      total_len = (align + (1 + gr_resp->gr_mem_cnt) * sizeof (char *)
-                  + gr_resp->gr_name_len + gr_resp->gr_passwd_len);
+      total_len = (align + (1 + gr_resp.gr_mem_cnt) * sizeof (char *)
+                  + gr_resp.gr_name_len + gr_resp.gr_passwd_len);
       if (__builtin_expect (buflen < total_len, 0))
        {
        no_room:
@@ -170,16 +176,16 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
 
       p += align;
       resultbuf->gr_mem = (char **) p;
-      p += (1 + gr_resp->gr_mem_cnt) * sizeof (char *);
+      p += (1 + gr_resp.gr_mem_cnt) * sizeof (char *);
 
       /* Set pointers for strings.  */
       resultbuf->gr_name = p;
-      p += gr_resp->gr_name_len;
+      p += gr_resp.gr_name_len;
       resultbuf->gr_passwd = p;
-      p += gr_resp->gr_passwd_len;
+      p += gr_resp.gr_passwd_len;
 
       /* Fill in what we know now.  */
-      resultbuf->gr_gid = gr_resp->gr_gid;
+      resultbuf->gr_gid = gr_resp.gr_gid;
 
       /* Read the length information, group name, and password.  */
       if (gr_name == NULL)
@@ -187,17 +193,17 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
          /* Allocate array to store lengths.  */
          if (lensize == 0)
            {
-             lensize = gr_resp->gr_mem_cnt * sizeof (uint32_t);
+             lensize = gr_resp.gr_mem_cnt * sizeof (uint32_t);
              len = (uint32_t *) alloca (lensize);
            }
-         else if (gr_resp->gr_mem_cnt * sizeof (uint32_t) > lensize)
+         else if (gr_resp.gr_mem_cnt * sizeof (uint32_t) > lensize)
            len = extend_alloca (len, lensize,
-                                gr_resp->gr_mem_cnt * sizeof (uint32_t));
+                                gr_resp.gr_mem_cnt * sizeof (uint32_t));
 
          vec[0].iov_base = (void *) len;
-         vec[0].iov_len = gr_resp->gr_mem_cnt * sizeof (uint32_t);
+         vec[0].iov_len = gr_resp.gr_mem_cnt * sizeof (uint32_t);
          vec[1].iov_base = resultbuf->gr_name;
-         vec[1].iov_len = gr_resp->gr_name_len + gr_resp->gr_passwd_len;
+         vec[1].iov_len = gr_resp.gr_name_len + gr_resp.gr_passwd_len;
          total_len = vec[0].iov_len + vec[1].iov_len;
 
          /* Get this data.  */
@@ -209,14 +215,14 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
        /* We already have the data.  Just copy the group name and
           password.  */
        memcpy (resultbuf->gr_name, gr_name,
-               gr_resp->gr_name_len + gr_resp->gr_passwd_len);
+               gr_resp.gr_name_len + gr_resp.gr_passwd_len);
 
       /* Clear the terminating entry.  */
-      resultbuf->gr_mem[gr_resp->gr_mem_cnt] = NULL;
+      resultbuf->gr_mem[gr_resp.gr_mem_cnt] = NULL;
 
       /* Prepare reading the group members.  */
       total_len = 0;
-      for (cnt = 0; cnt < gr_resp->gr_mem_cnt; ++cnt)
+      for (cnt = 0; cnt < gr_resp.gr_mem_cnt; ++cnt)
        {
          resultbuf->gr_mem[cnt] = p;
          total_len += len[cnt];
@@ -224,9 +230,25 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
        }
 
       if (__builtin_expect (gr_name + gr_name_len + total_len > recend, 0))
-       goto out_close;
+       {
+         /* len array might contain garbage during nscd GC cycle,
+            retry rather than fail in that case.  */
+         if (gr_name != NULL && mapped->head->gc_cycle != gc_cycle)
+           retval = -2;
+         goto out_close;
+       }
       if (__builtin_expect (total_len > buflen, 0))
-       goto no_room;
+       {
+         /* len array might contain garbage during nscd GC cycle,
+            retry rather than fail in that case.  */
+         if (gr_name != NULL && mapped->head->gc_cycle != gc_cycle)
+           {
+             retval = -2;
+             goto out_close;
+           }
+         else
+           goto no_room;
+       }
 
       retval = 0;
       if (gr_name == NULL)
@@ -248,14 +270,14 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
 
          /* Try to detect corrupt databases.  */
          if (resultbuf->gr_name[gr_name_len - 1] != '\0'
-             || resultbuf->gr_passwd[gr_resp->gr_passwd_len - 1] != '\0'
-             || ({for (cnt = 0; cnt < gr_resp->gr_mem_cnt; ++cnt)
+             || resultbuf->gr_passwd[gr_resp.gr_passwd_len - 1] != '\0'
+             || ({for (cnt = 0; cnt < gr_resp.gr_mem_cnt; ++cnt)
                     if (resultbuf->gr_mem[cnt][len[cnt] - 1] != '\0')
                       break;
-                  cnt < gr_resp->gr_mem_cnt; }))
+                  cnt < gr_resp.gr_mem_cnt; }))
            {
              /* We cannot use the database.  */
-             retval = -1;
+             retval = mapped->head->gc_cycle != gc_cycle ? -2 : -1;
              goto out_close;
            }
 
@@ -274,19 +296,21 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
   if (sock != -1)
     close_not_cancel_no_status (sock);
  out:
-  if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0 && retval != -1)
+  if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
     {
       /* When we come here this means there has been a GC cycle while we
         were looking for the data.  This means the data might have been
         inconsistent.  Retry if possible.  */
-      if ((gc_cycle & 1) != 0)
+      if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         __nscd_unmap (mapped);
+         if (atomic_decrement_val (&mapped->counter) == 0)
+           __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
 
-      goto retry;
+      if (retval != -1)
+       goto retry;
     }
 
   return retval;
index 516977bcc4997b25aff54a7b320a31d7c38699a1..90e1815bdd0acd34956995e744e072fda32c3586 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2005, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -118,7 +118,6 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
                               &gc_cycle);
 
  retry:;
-  const hst_response_header *hst_resp = NULL;
   const char *h_name = NULL;
   const uint32_t *aliases_len = NULL;
   const char *addr_list = NULL;
@@ -126,18 +125,27 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
   int retval = -1;
   const char *recend = (const char *) ~UINTMAX_C (0);
   int sock = -1;
+  hst_response_header hst_resp;
   if (mapped != NO_MAPPING)
     {
-      const struct datahead *found = __nscd_cache_search (type, key, keylen,
-                                                         mapped);
+      /* No const qualifier, as it can change during garbage collection.  */
+      struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
       if (found != NULL)
        {
-         hst_resp = &found->data[0].hstdata;
-         h_name = (char *) (hst_resp + 1);
-         aliases_len = (uint32_t *) (h_name + hst_resp->h_name_len);
+         h_name = (char *) (&found->data[0].hstdata + 1);
+         hst_resp = found->data[0].hstdata;
+         aliases_len = (uint32_t *) (h_name + hst_resp.h_name_len);
          addr_list = ((char *) aliases_len
-                      + hst_resp->h_aliases_cnt * sizeof (uint32_t));
-         addr_list_len = hst_resp->h_addr_list_cnt * INADDRSZ;
+                      + hst_resp.h_aliases_cnt * sizeof (uint32_t));
+         addr_list_len = hst_resp.h_addr_list_cnt * INADDRSZ;
+         recend = (const char *) found->data + found->recsize;
+         /* Now check if we can trust hst_resp fields.  If GC is
+            in progress, it can contain anything.  */
+         if (mapped->head->gc_cycle != gc_cycle)
+           {
+             retval = -2;
+             goto out;
+           }
 
 #ifndef _STRING_ARCH_unaligned
          /* The aliases_len array in the mapped database might very
@@ -147,51 +155,47 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
          if (((uintptr_t) aliases_len & (__alignof__ (*aliases_len) - 1))
              != 0)
            {
-             uint32_t *tmp = alloca (hst_resp->h_aliases_cnt
+             uint32_t *tmp = alloca (hst_resp.h_aliases_cnt
                                      * sizeof (uint32_t));
              aliases_len = memcpy (tmp, aliases_len,
-                                   hst_resp->h_aliases_cnt
+                                   hst_resp.h_aliases_cnt
                                    * sizeof (uint32_t));
            }
 #endif
          if (type != GETHOSTBYADDR && type != GETHOSTBYNAME)
            {
-             if (hst_resp->h_length == INADDRSZ)
+             if (hst_resp.h_length == INADDRSZ)
                addr_list += addr_list_len;
-             addr_list_len = hst_resp->h_addr_list_cnt * IN6ADDRSZ;
+             addr_list_len = hst_resp.h_addr_list_cnt * IN6ADDRSZ;
            }
-         recend = (const char *) found->data + found->recsize;
          if (__builtin_expect ((const char *) addr_list + addr_list_len
                                > recend, 0))
-           goto out_close;
+           goto out;
        }
     }
 
-  hst_response_header hst_resp_mem;
-  if (hst_resp == NULL)
+  if (h_name == NULL)
     {
-      sock = __nscd_open_socket (key, keylen, type, &hst_resp_mem,
-                                sizeof (hst_resp_mem));
+      sock = __nscd_open_socket (key, keylen, type, &hst_resp,
+                                sizeof (hst_resp));
       if (sock == -1)
        {
          __nss_not_use_nscd_hosts = 1;
-         goto out;;
+         goto out;
        }
-
-      hst_resp = &hst_resp_mem;
     }
 
   /* No value found so far.  */
   *result = NULL;
 
-  if (__builtin_expect (hst_resp->found == -1, 0))
+  if (__builtin_expect (hst_resp.found == -1, 0))
     {
       /* The daemon does not cache this database.  */
       __nss_not_use_nscd_hosts = 1;
       goto out_close;
     }
 
-  if (hst_resp->found == 1)
+  if (hst_resp.found == 1)
     {
       struct iovec vec[4];
       char *cp = buffer;
@@ -207,15 +211,15 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
         align the pointer and the base of the h_addr_list pointers.  */
       align1 = ((__alignof__ (char *) - (cp - ((char *) 0)))
                & (__alignof__ (char *) - 1));
-      align2 = ((__alignof__ (char *) - ((cp + align1 + hst_resp->h_name_len)
+      align2 = ((__alignof__ (char *) - ((cp + align1 + hst_resp.h_name_len)
                                         - ((char *) 0)))
                & (__alignof__ (char *) - 1));
-      if (buflen < (align1 + hst_resp->h_name_len + align2
-                   + ((hst_resp->h_aliases_cnt + hst_resp->h_addr_list_cnt
+      if (buflen < (align1 + hst_resp.h_name_len + align2
+                   + ((hst_resp.h_aliases_cnt + hst_resp.h_addr_list_cnt
                        + 2)
                       * sizeof (char *))
-                   + hst_resp->h_addr_list_cnt * (type == AF_INET
-                                                  ? INADDRSZ : IN6ADDRSZ)))
+                   + hst_resp.h_addr_list_cnt * (type == AF_INET
+                                                 ? INADDRSZ : IN6ADDRSZ)))
        {
        no_room:
          *h_errnop = NETDB_INTERNAL;
@@ -227,12 +231,12 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
 
       /* Prepare the result as far as we can.  */
       resultbuf->h_aliases = (char **) cp;
-      cp += (hst_resp->h_aliases_cnt + 1) * sizeof (char *);
+      cp += (hst_resp.h_aliases_cnt + 1) * sizeof (char *);
       resultbuf->h_addr_list = (char **) cp;
-      cp += (hst_resp->h_addr_list_cnt + 1) * sizeof (char *);
+      cp += (hst_resp.h_addr_list_cnt + 1) * sizeof (char *);
 
       resultbuf->h_name = cp;
-      cp += hst_resp->h_name_len + align2;
+      cp += hst_resp.h_name_len + align2;
 
       if (type == GETHOSTBYADDR || type == GETHOSTBYNAME)
        {
@@ -244,7 +248,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
          resultbuf->h_addrtype = AF_INET6;
          resultbuf->h_length = IN6ADDRSZ;
        }
-      for (cnt = 0; cnt < hst_resp->h_addr_list_cnt; ++cnt)
+      for (cnt = 0; cnt < hst_resp.h_addr_list_cnt; ++cnt)
        {
          resultbuf->h_addr_list[cnt] = cp;
          cp += resultbuf->h_length;
@@ -254,47 +258,47 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
       if (h_name == NULL)
        {
          vec[0].iov_base = resultbuf->h_name;
-         vec[0].iov_len = hst_resp->h_name_len;
-         total_len = hst_resp->h_name_len;
+         vec[0].iov_len = hst_resp.h_name_len;
+         total_len = hst_resp.h_name_len;
          n = 1;
 
-         if (hst_resp->h_aliases_cnt > 0)
+         if (hst_resp.h_aliases_cnt > 0)
            {
-             aliases_len = alloca (hst_resp->h_aliases_cnt
+             aliases_len = alloca (hst_resp.h_aliases_cnt
                                    * sizeof (uint32_t));
              vec[n].iov_base = (void *) aliases_len;
-             vec[n].iov_len = hst_resp->h_aliases_cnt * sizeof (uint32_t);
+             vec[n].iov_len = hst_resp.h_aliases_cnt * sizeof (uint32_t);
 
-             total_len += hst_resp->h_aliases_cnt * sizeof (uint32_t);
+             total_len += hst_resp.h_aliases_cnt * sizeof (uint32_t);
              ++n;
            }
 
          if (type == GETHOSTBYADDR || type == GETHOSTBYNAME)
            {
              vec[n].iov_base = resultbuf->h_addr_list[0];
-             vec[n].iov_len = hst_resp->h_addr_list_cnt * INADDRSZ;
+             vec[n].iov_len = hst_resp.h_addr_list_cnt * INADDRSZ;
 
-             total_len += hst_resp->h_addr_list_cnt * INADDRSZ;
+             total_len += hst_resp.h_addr_list_cnt * INADDRSZ;
 
              ++n;
            }
          else
            {
-             if (hst_resp->h_length == INADDRSZ)
+             if (hst_resp.h_length == INADDRSZ)
                {
-                 ignore = alloca (hst_resp->h_addr_list_cnt * INADDRSZ);
+                 ignore = alloca (hst_resp.h_addr_list_cnt * INADDRSZ);
                  vec[n].iov_base = ignore;
-                 vec[n].iov_len = hst_resp->h_addr_list_cnt * INADDRSZ;
+                 vec[n].iov_len = hst_resp.h_addr_list_cnt * INADDRSZ;
 
-                 total_len += hst_resp->h_addr_list_cnt * INADDRSZ;
+                 total_len += hst_resp.h_addr_list_cnt * INADDRSZ;
 
                  ++n;
                }
 
              vec[n].iov_base = resultbuf->h_addr_list[0];
-             vec[n].iov_len = hst_resp->h_addr_list_cnt * IN6ADDRSZ;
+             vec[n].iov_len = hst_resp.h_addr_list_cnt * IN6ADDRSZ;
 
-             total_len += hst_resp->h_addr_list_cnt * IN6ADDRSZ;
+             total_len += hst_resp.h_addr_list_cnt * IN6ADDRSZ;
 
              ++n;
            }
@@ -304,13 +308,13 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
        }
       else
        {
-         memcpy (resultbuf->h_name, h_name, hst_resp->h_name_len);
+         memcpy (resultbuf->h_name, h_name, hst_resp.h_name_len);
          memcpy (resultbuf->h_addr_list[0], addr_list, addr_list_len);
        }
 
       /*  Now we also can read the aliases.  */
       total_len = 0;
-      for (cnt = 0; cnt < hst_resp->h_aliases_cnt; ++cnt)
+      for (cnt = 0; cnt < hst_resp.h_aliases_cnt; ++cnt)
        {
          resultbuf->h_aliases[cnt] = cp;
          cp += aliases_len[cnt];
@@ -320,10 +324,25 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
 
       if (__builtin_expect ((const char *) addr_list + addr_list_len
                            + total_len > recend, 0))
-       goto out_close;
+       {
+         /* aliases_len array might contain garbage during nscd GC cycle,
+            retry rather than fail in that case.  */
+         if (addr_list != NULL && mapped->head->gc_cycle != gc_cycle)
+           retval = -2;
+         goto out_close;
+       }
       /* See whether this would exceed the buffer capacity.  */
       if (__builtin_expect (cp > buffer + buflen, 0))
-       goto no_room;
+       {
+         /* aliases_len array might contain garbage during nscd GC cycle,
+            retry rather than fail in that case.  */
+         if (addr_list != NULL && mapped->head->gc_cycle != gc_cycle)
+           {
+             retval = -2;
+             goto out_close;
+           }
+         goto no_room;
+       }
 
       /* And finally read the aliases.  */
       if (addr_list == NULL)
@@ -342,14 +361,18 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
                  (const char *) addr_list + addr_list_len, total_len);
 
          /* Try to detect corrupt databases.  */
-         if (resultbuf->h_name[hst_resp->h_name_len - 1] != '\0'
-             || ({for (cnt = 0; cnt < hst_resp->h_aliases_cnt; ++cnt)
+         if (resultbuf->h_name[hst_resp.h_name_len - 1] != '\0'
+             || ({for (cnt = 0; cnt < hst_resp.h_aliases_cnt; ++cnt)
                     if (resultbuf->h_aliases[cnt][aliases_len[cnt] - 1]
                         != '\0')
                       break;
-                  cnt < hst_resp->h_aliases_cnt; }))
-           /* We cannot use the database.  */
-           goto out_close;
+                  cnt < hst_resp.h_aliases_cnt; }))
+           {
+             /* We cannot use the database.  */
+             if (mapped->head->gc_cycle != gc_cycle)
+               retval = -2;
+             goto out_close;
+           }
 
          retval = 0;
          *result = resultbuf;
@@ -358,7 +381,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
   else
     {
       /* Store the error number.  */
-      *h_errnop = hst_resp->error;
+      *h_errnop = hst_resp.error;
 
       /* The `errno' to some value != ERANGE.  */
       __set_errno (ENOENT);
@@ -370,19 +393,21 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
   if (sock != -1)
     close_not_cancel_no_status (sock);
  out:
-  if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0 && retval != -1)
+  if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
     {
       /* When we come here this means there has been a GC cycle while we
         were looking for the data.  This means the data might have been
         inconsistent.  Retry if possible.  */
-      if ((gc_cycle & 1) != 0 || ++nretries == 5)
+      if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         __nscd_unmap (mapped);
+         if (atomic_decrement_val (&mapped->counter) == 0)
+           __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
 
-      goto retry;
+      if (retval != -1)
+       goto retry;
     }
 
   return retval;
index e8e4d7364faff8b2ed004db2a0271b8cdc6c9ce3..b84baa1a666f6808819f63cbbddf8bc558e479dc 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1998, 1999, 2003, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1998, 1999, 2003, 2004, 2005, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@uni-paderborn.de>, 1998.
 
@@ -88,76 +89,81 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
              struct passwd **result)
 {
   int gc_cycle;
+  int nretries = 0;
+
   /* If the mapping is available, try to search there instead of
      communicating with the nscd.  */
   struct mapped_database *mapped;
   mapped = __nscd_get_map_ref (GETFDPW, "passwd", &map_handle, &gc_cycle);
 
  retry:;
-  const pw_response_header *pw_resp = NULL;
   const char *pw_name = NULL;
   int retval = -1;
   const char *recend = (const char *) ~UINTMAX_C (0);
+  pw_response_header pw_resp;
 
   if (mapped != NO_MAPPING)
     {
-      const struct datahead *found = __nscd_cache_search (type, key, keylen,
-                                                         mapped);
+      struct datahead *found = __nscd_cache_search (type, key, keylen, mapped);
       if (found != NULL)
        {
-         pw_resp = &found->data[0].pwdata;
-         pw_name = (const char *) (pw_resp + 1);
+         pw_name = (const char *) (&found->data[0].pwdata + 1);
+         pw_resp = found->data[0].pwdata;
          recend = (const char *) found->data + found->recsize;
+         /* Now check if we can trust pw_resp fields.  If GC is
+            in progress, it can contain anything.  */
+         if (mapped->head->gc_cycle != gc_cycle)
+           {
+             retval = -2;
+             goto out;
+           }
        }
     }
 
-  pw_response_header pw_resp_mem;
   int sock = -1;
-  if (pw_resp == NULL)
+  if (pw_name == NULL)
     {
-      sock = __nscd_open_socket (key, keylen, type, &pw_resp_mem,
-                                sizeof (pw_resp_mem));
+      sock = __nscd_open_socket (key, keylen, type, &pw_resp,
+                                sizeof (pw_resp));
       if (sock == -1)
        {
          __nss_not_use_nscd_passwd = 1;
          goto out;
        }
-
-      pw_resp = &pw_resp_mem;
     }
 
   /* No value found so far.  */
   *result = NULL;
 
-  if (__builtin_expect (pw_resp->found == -1, 0))
+  if (__builtin_expect (pw_resp.found == -1, 0))
     {
       /* The daemon does not cache this database.  */
       __nss_not_use_nscd_passwd = 1;
       goto out_close;
     }
 
-  if (pw_resp->found == 1)
+  if (pw_resp.found == 1)
     {
       /* Set the information we already have.  */
-      resultbuf->pw_uid = pw_resp->pw_uid;
-      resultbuf->pw_gid = pw_resp->pw_gid;
+      resultbuf->pw_uid = pw_resp.pw_uid;
+      resultbuf->pw_gid = pw_resp.pw_gid;
 
       char *p = buffer;
       /* get pw_name */
       resultbuf->pw_name = p;
-      p += pw_resp->pw_name_len;
+      p += pw_resp.pw_name_len;
       /* get pw_passwd */
       resultbuf->pw_passwd = p;
-      p += pw_resp->pw_passwd_len;
+      p += pw_resp.pw_passwd_len;
       /* get pw_gecos */
       resultbuf->pw_gecos = p;
-      p += pw_resp->pw_gecos_len;
+      p += pw_resp.pw_gecos_len;
       /* get pw_dir */
       resultbuf->pw_dir = p;
-      p += pw_resp->pw_dir_len;
+      p += pw_resp.pw_dir_len;
       /* get pw_pshell */
       resultbuf->pw_shell = p;
-      p += pw_resp->pw_shell_len;
+      p += pw_resp.pw_shell_len;
 
       ssize_t total = p - buffer;
       if (__builtin_expect (pw_name + total > recend, 0))
@@ -189,14 +195,14 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
          memcpy (resultbuf->pw_name, pw_name, total);
 
          /* Try to detect corrupt databases.  */
-         if (resultbuf->pw_name[pw_resp->pw_name_len - 1] != '\0'
-             || resultbuf->pw_passwd[pw_resp->pw_passwd_len - 1] != '\0'
-             || resultbuf->pw_gecos[pw_resp->pw_gecos_len - 1] != '\0'
-             || resultbuf->pw_dir[pw_resp->pw_dir_len - 1] != '\0'
-             || resultbuf->pw_shell[pw_resp->pw_shell_len - 1] != '\0')
+         if (resultbuf->pw_name[pw_resp.pw_name_len - 1] != '\0'
+             || resultbuf->pw_passwd[pw_resp.pw_passwd_len - 1] != '\0'
+             || resultbuf->pw_gecos[pw_resp.pw_gecos_len - 1] != '\0'
+             || resultbuf->pw_dir[pw_resp.pw_dir_len - 1] != '\0'
+             || resultbuf->pw_shell[pw_resp.pw_shell_len - 1] != '\0')
            {
              /* We cannot use the database.  */
-             retval = -1;
+             retval = mapped->head->gc_cycle != gc_cycle ? -2 : -1;
              goto out_close;
            }
 
@@ -215,19 +221,21 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
   if (sock != -1)
     close_not_cancel_no_status (sock);
  out:
-  if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0 && retval != -1)
+  if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
     {
       /* When we come here this means there has been a GC cycle while we
         were looking for the data.  This means the data might have been
         inconsistent.  Retry if possible.  */
-      if ((gc_cycle & 1) != 0)
+      if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         __nscd_unmap (mapped);
+         if (atomic_decrement_val (&mapped->counter) == 0)
+           __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
 
-      goto retry;
+      if (retval != -1)
+       goto retry;
     }
 
   return retval;
index 7c45981586696f0f3f467bc2a9f4c26b0b945b3e..71ea53e19d79b7a3d23df9328b1eefd29444f648 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright (C) 1998-2002,2003,2004,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2002,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>, 1998.
 
@@ -21,6 +22,7 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <stdbool.h>
+#include <string.h>
 #include <time.h>
 #include <unistd.h>
 #include <sys/mman.h>
@@ -186,6 +188,7 @@ get_mapping (request_type type, const char *key,
     request_header req;
     char key[keylen];
   } reqdata;
+  size_t real_sizeof_reqdata = sizeof (request_header) + keylen;
 
   int sock = open_socket ();
   if (sock < 0)
@@ -200,9 +203,9 @@ get_mapping (request_type type, const char *key,
 #  define MSG_NOSIGNAL 0
 # endif
   if (__builtin_expect (TEMP_FAILURE_RETRY (__send (sock, &reqdata,
-                                                   sizeof (reqdata),
+                                                   real_sizeof_reqdata,
                                                    MSG_NOSIGNAL))
-                       != sizeof (reqdata), 0))
+                       != real_sizeof_reqdata, 0))
     /* We cannot even write the request.  */
     goto out_close2;
 
@@ -240,11 +243,12 @@ get_mapping (request_type type, const char *key,
                        != keylen, 0))
     goto out_close2;
 
-  mapfd = *(int *) CMSG_DATA (cmsg);
+  if (__builtin_expect (CMSG_FIRSTHDR (&msg) == NULL
+                       || (CMSG_FIRSTHDR (&msg)->cmsg_len
+                           != CMSG_LEN (sizeof (int))), 0))
+    goto out_close2;
 
-  if (__builtin_expect (CMSG_FIRSTHDR (&msg)->cmsg_len
-                       != CMSG_LEN (sizeof (int)), 0))
-    goto out_close;
+  mapfd = *(int *) CMSG_DATA (cmsg);
 
   struct stat64 st;
   if (__builtin_expect (strcmp (resdata, key) != 0, 0)
@@ -362,7 +366,10 @@ __nscd_get_map_ref (request_type type, const char *name,
 }
 
 
-const struct datahead *
+/* Don't return const struct datahead *, as eventhough the record
+   is normally constant, it can change arbitrarily during nscd
+   garbage collection.  */
+struct datahead *
 __nscd_cache_search (request_type type, const char *key, size_t keylen,
                     const struct mapped_database *mapped)
 {
@@ -374,16 +381,32 @@ __nscd_cache_search (request_type type, const char *key, size_t keylen,
     {
       struct hashentry *here = (struct hashentry *) (mapped->data + work);
 
+#ifndef _STRING_ARCH_unaligned
+      /* Although during garbage collection when moving struct hashentry
+        records around we first copy from old to new location and then
+        adjust pointer from previous hashentry to it, there is no barrier
+        between those memory writes.  It is very unlikely to hit it,
+        so check alignment only if a misaligned load can crash the
+        application.  */
+      if ((uintptr_t) here & (__alignof__ (*here) - 1))
+       return NULL;
+#endif
+
       if (type == here->type
          && keylen == here->len
-         && here->key + here->len <= datasize
+         && here->key + keylen <= datasize
          && memcmp (key, mapped->data + here->key, keylen) == 0
          && here->packet + sizeof (struct datahead) <= datasize)
        {
          /* We found the entry.  Increment the appropriate counter.  */
-         const struct datahead *dh
+         struct datahead *dh
            = (struct datahead *) (mapped->data + here->packet);
 
+#ifndef _STRING_ARCH_unaligned
+         if ((uintptr_t) dh & (__alignof__ (*dh) - 1))
+           return NULL;
+#endif
+
          /* See whether we must ignore the entry or whether something
             is wrong because garbage collection is in progress.  */
          if (dh->usable && here->packet + dh->allocsize <= datasize)
index 97a037d4a9b4b7741475182250162d0768f58fdd..866455a96c09503d813c62bb2242a18d384d826f 100644 (file)
@@ -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 Ulrich Drepper <drepper@redhat.com>, 2004.
 
@@ -39,6 +39,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
 {
   size_t userlen = strlen (user) + 1;
   int gc_cycle;
+  int nretries = 0;
 
   /* If the mapping is available, try to search there instead of
      communicating with the nscd.  */
@@ -46,44 +47,49 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
   mapped = __nscd_get_map_ref (GETFDGR, "group", &__gr_map_handle, &gc_cycle);
 
  retry:;
-  const initgr_response_header *initgr_resp = NULL;
   char *respdata = NULL;
   int retval = -1;
   int sock = -1;
+  initgr_response_header initgr_resp;
 
   if (mapped != NO_MAPPING)
     {
-      const struct datahead *found = __nscd_cache_search (INITGROUPS, user,
-                                                         userlen, mapped);
+      struct datahead *found = __nscd_cache_search (INITGROUPS, user,
+                                                   userlen, mapped);
       if (found != NULL)
        {
-         initgr_resp = &found->data[0].initgrdata;
-         respdata = (char *) (initgr_resp + 1);
+         respdata = (char *) (&found->data[0].initgrdata + 1);
+         initgr_resp = found->data[0].initgrdata;
          char *recend = (char *) found->data + found->recsize;
 
-         if (respdata + initgr_resp->ngrps * sizeof (int32_t) > recend)
+         /* Now check if we can trust initgr_resp fields.  If GC is
+            in progress, it can contain anything.  */
+         if (mapped->head->gc_cycle != gc_cycle)
+           {
+             retval = -2;
+             goto out;
+           }
+
+         if (respdata + initgr_resp.ngrps * sizeof (int32_t) > recend)
            goto out;
        }
     }
 
   /* If we do not have the cache mapped, try to get the data over the
      socket.  */
-  initgr_response_header initgr_resp_mem;
-  if (initgr_resp == NULL)
+  if (respdata == NULL)
     {
-      sock = __nscd_open_socket (user, userlen, INITGROUPS, &initgr_resp_mem,
-                                sizeof (initgr_resp_mem));
+      sock = __nscd_open_socket (user, userlen, INITGROUPS, &initgr_resp,
+                                sizeof (initgr_resp));
       if (sock == -1)
        {
          /* nscd not running or wrong version.  */
          __nss_not_use_nscd_group = 1;
          goto out;
        }
-
-      initgr_resp = &initgr_resp_mem;
     }
 
-  if (initgr_resp->found == 1)
+  if (initgr_resp.found == 1)
     {
       /* The following code assumes that gid_t and int32_t are the
         same size.  This is the case for al existing implementation.
@@ -91,40 +97,40 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
         doesn't use memcpy but instead copies each array element one
         by one.  */
       assert (sizeof (int32_t) == sizeof (gid_t));
-      assert (initgr_resp->ngrps >= 0);
+      assert (initgr_resp.ngrps >= 0);
 
       /* Make sure we have enough room.  We always count GROUP in even
         though we might not end up adding it.  */
-      if (*size < initgr_resp->ngrps + 1)
+      if (*size < initgr_resp.ngrps + 1)
        {
          gid_t *newp = realloc (*groupsp,
-                                (initgr_resp->ngrps + 1) * sizeof (gid_t));
+                                (initgr_resp.ngrps + 1) * sizeof (gid_t));
          if (newp == NULL)
            /* We cannot increase the buffer size.  */
            goto out_close;
 
          *groupsp = newp;
-         *size = initgr_resp->ngrps + 1;
+         *size = initgr_resp.ngrps + 1;
        }
 
       if (respdata == NULL)
        {
          /* Read the data from the socket.  */
-         if ((size_t) __readall (sock, *groupsp, initgr_resp->ngrps
+         if ((size_t) __readall (sock, *groupsp, initgr_resp.ngrps
                                                  * sizeof (gid_t))
-             == initgr_resp->ngrps * sizeof (gid_t))
-           retval = initgr_resp->ngrps;
+             == initgr_resp.ngrps * sizeof (gid_t))
+           retval = initgr_resp.ngrps;
        }
       else
        {
          /* Just copy the data.  */
-         retval = initgr_resp->ngrps;
+         retval = initgr_resp.ngrps;
          memcpy (*groupsp, respdata, retval * sizeof (gid_t));
        }
     }
   else
     {
-      if (__builtin_expect (initgr_resp->found == -1, 0))
+      if (__builtin_expect (initgr_resp.found == -1, 0))
        {
          /* The daemon does not cache this database.  */
          __nss_not_use_nscd_group = 1;
@@ -153,19 +159,21 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
   if (sock != -1)
     close_not_cancel_no_status (sock);
  out:
-  if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0 && retval != -1)
+  if (__nscd_drop_map_ref (mapped, &gc_cycle) != 0)
     {
       /* When we come here this means there has been a GC cycle while we
         were looking for the data.  This means the data might have been
         inconsistent.  Retry if possible.  */
-      if ((gc_cycle & 1) != 0)
+      if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         __nscd_unmap (mapped);
+         if (atomic_decrement_val (&mapped->counter) == 0)
+           __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
 
-      goto retry;
+      if (retval != -1)
+       goto retry;
     }
 
   return retval;
index 01c223add50a60e72640fc316933e69d3ba403d3..ae579df510560bcf4b57a11ff236afcae2a0dfb8 100644 (file)
@@ -1,5 +1,5 @@
 /* Cache handling for passwd lookup.
-   Copyright (C) 1998-2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1998-2005, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -274,6 +274,7 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
                {
                  /* Adjust pointer into the memory block.  */
                  cp = (char *) newp + (cp - (char *) dataset);
+                 key_copy = (char *) newp + (key_copy - (char *) dataset);
 
                  dataset = memcpy (newp, dataset, total + n);
                  alloca_used = false;
index f0620d10128973bdeae016a0367a586f84647b72..b826031150e037b0b7d81885fb10f87493db5669 100644 (file)
@@ -1,5 +1,5 @@
 /* SELinux access controls for nscd.
-   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 Matthew Rickard <mjricka@epoch.ncsc.mil>, 2004.
 
@@ -182,18 +182,22 @@ preserve_capabilities (void)
   if (tmp_caps == NULL || new_caps == NULL)
     {
       if (tmp_caps != NULL)
-       free_caps (tmp_caps);
+       cap_free (tmp_caps);
 
       dbg_log (_("Failed to initialize drop of capabilities"));
       error (EXIT_FAILURE, 0, _("cap_init failed"));
     }
 
   /* There is no reason why these should not work.  */
-  cap_set_flag (new_caps, CAP_PERMITTED, nnew_cap_list, new_cap_list, CAP_SET);
-  cap_set_flag (new_caps, CAP_EFFECTIVE, nnew_cap_list, new_cap_list, CAP_SET);
+  cap_set_flag (new_caps, CAP_PERMITTED, nnew_cap_list,
+               (cap_value_t *) new_cap_list, CAP_SET);
+  cap_set_flag (new_caps, CAP_EFFECTIVE, nnew_cap_list,
+               (cap_value_t *) new_cap_list, CAP_SET);
 
-  cap_set_flag (tmp_caps, CAP_PERMITTED, ntmp_cap_list, tmp_cap_list, CAP_SET);
-  cap_set_flag (tmp_caps, CAP_EFFECTIVE, ntmp_cap_list, tmp_cap_list, CAP_SET);
+  cap_set_flag (tmp_caps, CAP_PERMITTED, ntmp_cap_list,
+               (cap_value_t *) tmp_cap_list, CAP_SET);
+  cap_set_flag (tmp_caps, CAP_EFFECTIVE, ntmp_cap_list,
+               (cap_value_t *) tmp_cap_list, CAP_SET);
 
   int res = cap_set_proc (tmp_caps);
 
@@ -202,7 +206,7 @@ preserve_capabilities (void)
   if (__builtin_expect (res != 0, 0))
     {
       cap_free (new_caps);
-      dbg_log (_("Failed to drop capabilities"));
+      dbg_log (_("Failed to drop capabilities\n"));
       error (EXIT_FAILURE, 0, _("cap_set_proc failed"));
     }
 
index 9ce0628486d269c88dd12beb31c72711241dd2e3..27afcd6e86207546375f7d7b90e8f98faf096dba 100644 (file)
@@ -1,5 +1,5 @@
 /* Header for nscd SELinux access controls.
-   Copyright (C) 2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Matthew Rickard <mjricka@epoch.ncsc.mil>, 2004.
 
@@ -23,7 +23,7 @@
 
 #include "nscd.h"
 #ifdef HAVE_LIBCAP
-# include <sys/capabilities.h>
+# include <sys/capability.h>
 #endif
 
 #ifdef HAVE_SELINUX
index 8b9a9030ff36c3043db6be649799e9b2aefce5ba..14ec3c475591bad3ec69a4f44a773810639b448c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 1998-2006, 2007 Free Software Foundation, Inc.
+/* Copyright (c) 1998-2003, 2004, 2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
 
@@ -84,7 +84,7 @@ print_version (FILE *stream, struct argp_state *state)
 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\
-"), "2007");
+"), "2006");
   fprintf (stream, gettext ("Written by %s.\n"), "Thorsten Kukuk");
 }
 
index 6daafdeeed4fba14c75e66b08b7e0a34873add92..b1ba3aa76d1132d581968175dd40188a7c3449bc 100644 (file)
@@ -1,5 +1,6 @@
 /* Hosts file parser in nss_files module.
-   Copyright (C) 1996-2001, 2003, 2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1996-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
@@ -55,30 +56,14 @@ LINE_PARSER
    STRING_FIELD (addr, isspace, 1);
 
    /* Parse address.  */
-   if (inet_pton (af, addr, entdata->host_addr) <= 0)
-     {
-       if (af == AF_INET6 && (flags & AI_V4MAPPED) != 0
-          && inet_pton (AF_INET, addr, entdata->host_addr) > 0)
-        map_v4v6_address ((char *) entdata->host_addr,
-                          (char *) entdata->host_addr);
-       else if (af == AF_INET
-               && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
-        {
-          if (IN6_IS_ADDR_V4MAPPED (entdata->host_addr))
-            memcpy (entdata->host_addr, entdata->host_addr + 12, INADDRSZ);
-          else if (IN6_IS_ADDR_LOOPBACK (entdata->host_addr))
-            {
-              in_addr_t localhost = htonl (INADDR_LOOPBACK);
-              memcpy (entdata->host_addr, &localhost, sizeof (localhost));
-            }
-          else
-            /* Illegal address: ignore line.  */
-            return 0;
-        }
-       else
-        /* Illegal address: ignore line.  */
-        return 0;
-     }
+   if (inet_pton (af, addr, entdata->host_addr) <= 0
+       && (af != AF_INET6 || (flags & AI_V4MAPPED) == 0
+          || inet_pton (AF_INET, addr, entdata->host_addr) <= 0
+          || (map_v4v6_address ((char *) entdata->host_addr,
+                                (char *) entdata->host_addr),
+              0)))
+     /* Illegal address: ignore line.  */
+     return 0;
 
    /* We always return entries of the requested form.  */
    result->h_addrtype = af;
@@ -102,6 +87,10 @@ _nss_files_get##name##_r (proto,                                          \
 {                                                                            \
   enum nss_status status;                                                    \
                                                                              \
+  uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct hostent_data);    \
+  buffer += pad;                                                             \
+  buflen = buflen > pad ? buflen - pad : 0;                                  \
+                                                                             \
   __libc_lock_lock (lock);                                                   \
                                                                              \
   /* Reset file pointer to beginning or open file.  */                       \
@@ -122,7 +111,8 @@ _nss_files_get##name##_r (proto,                                          \
        {                                                                     \
          /* We have to get all host entries from the file.  */               \
          const size_t tmp_buflen = MIN (buflen, 4096);                       \
-         char tmp_buffer[tmp_buflen];                                        \
+         char tmp_buffer[tmp_buflen]                                         \
+           __attribute__ ((__aligned__ (__alignof__ (struct hostent_data))));\
          struct hostent tmp_result_buf;                                      \
          int naddrs = 1;                                                     \
          int naliases = 0;                                                   \
index d1b3efc8cb0c5bb67fb2cdbbd9c9410372ac0370..e1d94a77ca1b8861974e127b78dfcd8a7c93fd19 100644 (file)
--- a/po/ru.po
+++ b/po/ru.po
 # ÐÅÒÅ×ÏÄ ÓÏÏÂÝÅÎÉÊ GNU libc
 # Copyright (C) 2005 Free Software Foundation, Inc.
-# Oleg Tihonov <ost@tatnipi.ru>, 2005.
+# Oleg Tihonov <ost@tatnipi.ru>, 2005, 2007.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: libc 2.3.3\n"
-"POT-Creation-Date: 2004-08-05 09:16+0200\n"
-"PO-Revision-Date: 2005-02-15 11:35+0300\n"
+"Project-Id-Version: libc 2.5\n"
+"POT-Creation-Date: 2006-09-29 11:38-0700\n"
+"PO-Revision-Date: 2007-02-13 13:52+0300\n"
 "Last-Translator: Oleg Tihonov <ost@tatnipi.ru>\n"
 "Language-Team: Russian <ru@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=koi8-r\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: sysdeps/generic/siglist.h:29 stdio-common/../sysdeps/unix/siglist.c:27
-msgid "Hangup"
-msgstr "ïÂÒÙ× ÔÅÒÍÉÎÁÌØÎÏÊ ÌÉÎÉÉ"
+#: argp/argp-help.c:227
+#, 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:237
+#, 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:250
+#, 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:1214
+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"
-msgstr "ìÏ×ÕÛËÁ ÔÒÁÓÓÉÒÏ×ËÉ/ÏÓÔÁÎÏ×Á"
+#: argp/argp-help.c:1600
+msgid "Usage:"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ:"
 
-#: sysdeps/generic/siglist.h:34
-msgid "Aborted"
-msgstr "á×ÁÒÉÊÎÙÊ ÏÓÔÁÎÏ×"
+#: argp/argp-help.c:1604
+msgid "  or: "
+msgstr "  ÉÌÉ: "
 
-#: sysdeps/generic/siglist.h:35 stdio-common/../sysdeps/unix/siglist.c:34
-msgid "Floating point exception"
-msgstr "éÓËÌÀÞÅÎÉÅ × ÏÐÅÒÁÃÉÉ Ó ÐÌÁ×ÁÀÝÅÊ ÔÏÞËÏÊ"
+#: argp/argp-help.c:1616
+msgid " [OPTION...]"
+msgstr " [ëìàþ...]"
 
-#: sysdeps/generic/siglist.h:36 stdio-common/../sysdeps/unix/siglist.c:35
-msgid "Killed"
-msgstr "õÂÉÔÏ"
+#: argp/argp-help.c:1643
+#, c-format
+msgid "Try `%s --help' or `%s --usage' for more information.\n"
+msgstr "ðÏÐÒÏÂÕÊÔÅ `%s --help' ÉÌÉ `%s --usage' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ.\n"
 
-#: sysdeps/generic/siglist.h:37 stdio-common/../sysdeps/unix/siglist.c:36
-msgid "Bus error"
-msgstr "ïÛÉÂËÁ ÛÉÎÙ"
+#: argp/argp-help.c:1671
+#, c-format
+msgid "Report bugs to %s.\n"
+msgstr "óÏÏÂÝÅÎÉÑ Ï ÏÛÉÂËÁÈ ÏÔÐÒÁ×ÌÑÊÔÅ ÐÏ ÁÄÒÅÓÕ %s.\n"
 
-#: sysdeps/generic/siglist.h:38 stdio-common/../sysdeps/unix/siglist.c:37
-msgid "Segmentation fault"
-msgstr "ïÛÉÂËÁ ÓÅÇÍÅÎÔÉÒÏ×ÁÎÉÑ"
+#: argp/argp-parse.c:102
+msgid "Give this help list"
+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 "ïÂÒÙ× ËÁÎÁÌÁ"
+#: argp/argp-parse.c:103
+msgid "Give a short usage message"
+msgstr "÷ÙÄÁÅÔ ËÒÁÔËÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÉÓÐÏÌØÚÏ×ÁÎÉÉ"
 
-#: sysdeps/generic/siglist.h:40 stdio-common/../sysdeps/unix/siglist.c:40
-msgid "Alarm clock"
-msgstr "óÉÇÎÁÌ ÔÁÊÍÅÒÁ"
+#: argp/argp-parse.c:104
+msgid "Set the program name"
+msgstr "õÓÔÁÎÁ×ÌÉ×ÁÅÔ ÉÍÑ ÐÒÏÇÒÁÍÍÙ"
 
-#: sysdeps/generic/siglist.h:41 stdio-common/../sysdeps/unix/siglist.c:41
-msgid "Terminated"
-msgstr "úÁ×ÅÒÛÅÎÏ"
+#: argp/argp-parse.c:106
+msgid "Hang for SECS seconds (default 3600)"
+msgstr "÷ÉÓÉÔ ÕËÁÚÁÎÎÏÅ ÞÉÓÌÏ ÓÅËÕÎÄ (ÐÏ ÕÍÏÌÞÁÎÉÀ 3600)"
 
-#: sysdeps/generic/siglist.h:42 stdio-common/../sysdeps/unix/siglist.c:42
-msgid "Urgent I/O condition"
-msgstr "óÉÔÕÁÃÉÑ ÓÒÏÞÎÏÇÏ ××ÏÄÁ/×Ù×ÏÄÁ"
+#: argp/argp-parse.c:167
+msgid "Print program version"
+msgstr "ðÅÞÁÔÁÅÔ ×ÅÒÓÉÀ ÐÒÏÇÒÁÍÍÙ"
 
-#: sysdeps/generic/siglist.h:43 stdio-common/../sysdeps/unix/siglist.c:43
-msgid "Stopped (signal)"
-msgstr "ïÓÔÁÎÏ×ÌÅÎÏ (ÓÉÇÎÁÌ)"
+#: argp/argp-parse.c:183
+msgid "(PROGRAM ERROR) No version known!?"
+msgstr "(ïûéâëá ðòïçòáííù) ÷ÅÒÓÉÑ ÎÅÉÚ×ÅÓÔÎÁ!?"
 
-#: sysdeps/generic/siglist.h:44 stdio-common/../sysdeps/unix/siglist.c:44
-msgid "Stopped"
-msgstr "ïÓÔÁÎÏ×ÌÅÎÏ"
+#: argp/argp-parse.c:623
+#, c-format
+msgid "%s: Too many arguments\n"
+msgstr "%s: óÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×\n"
 
-#: sysdeps/generic/siglist.h:45 stdio-common/../sysdeps/unix/siglist.c:45
-msgid "Continued"
-msgstr "ðÒÏÄÏÌÖÅÎÏ"
+#: argp/argp-parse.c:766
+msgid "(PROGRAM ERROR) Option should have been recognized!?"
+msgstr "(ïûéâëá ðòïçòáííù) ëÌÀÞ ÄÏÌÖÅΠÂÙÔØ ÒÁÓÐÏÚÎÁÎ!?"
 
-#: sysdeps/generic/siglist.h:46 stdio-common/../sysdeps/unix/siglist.c:46
-msgid "Child exited"
-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"
 
-#: sysdeps/generic/siglist.h:47 stdio-common/../sysdeps/unix/siglist.c:47
-msgid "Stopped (tty input)"
-msgstr "ïÓÔÁÎÏ×ÌÅÎÏ (××ÏÄ Ó ÔÅÒÍÉÎÁÌÁ)"
+#: 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"
 
-#: sysdeps/generic/siglist.h:48 stdio-common/../sysdeps/unix/siglist.c:48
-msgid "Stopped (tty output)"
-msgstr "ïÓÔÁÎÏ×ÌÅÎÏ (×Ù×ÏÄ ÎÁ ÔÅÒÍÉÎÁÌ)"
+#: catgets/gencat.c:109 catgets/gencat.c:113 nscd/nscd.c:96 nss/makedb.c:61
+msgid "NAME"
+msgstr "æáêì"
 
-#: sysdeps/generic/siglist.h:49 stdio-common/../sysdeps/unix/siglist.c:49
-msgid "I/O possible"
-msgstr "÷ÏÚÍÏÖÅΠ××ÏÄ/×Ù×ÏÄ"
+#: catgets/gencat.c:110
+msgid "Create C header file NAME containing symbol definitions"
+msgstr "óÏÚÄÁÅÔ ÚÁÇÏÌÏ×ÏÞÎÙÊ æáêì ÎÁ óÉ, ÓÏÄÅÒÖÁÝÉÊ ÏÐÒÅÄÅÌÅÎÉÑ ÓÉÍ×ÏÌÏ×."
 
-#: sysdeps/generic/siglist.h:50 stdio-common/../sysdeps/unix/siglist.c:50
-msgid "CPU time limit exceeded"
-msgstr "ðÒÅ×ÙÛÅΠÌÉÍÉÔ ÐÒÏÃÅÓÓÏÒÎÏÇÏ ×ÒÅÍÅÎÉ"
+#: catgets/gencat.c:112
+msgid "Do not use existing catalog, force new output file"
+msgstr "îÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ ËÁÔÁÌÏÇ, ÐÒÉÎÕÄÉÔÅÌØÎÏ ÓÏÚÄÁÔØ ÎÏ×ÙÊ ×ÙÈÏÄÎÏÊ ÆÁÊÌ"
 
-#: sysdeps/generic/siglist.h:51 stdio-common/../sysdeps/unix/siglist.c:51
-msgid "File size limit exceeded"
-msgstr "ðÒÅ×ÙÛÅΠÌÉÍÉÔ ÒÁÚÍÅÒÁ ÆÁÊÌÁ"
+#: catgets/gencat.c:113 nss/makedb.c:61
+msgid "Write output to file NAME"
+msgstr "úÁÐÉÓÁÔØ ×Ù×ÏÄ × æáêì"
 
-#: sysdeps/generic/siglist.h:52 stdio-common/../sysdeps/unix/siglist.c:52
-msgid "Virtual timer expired"
-msgstr "÷ÉÒÔÕÁÌØÎÙÊ ÔÁÊÍÅÒ ÉÓÔÅË"
+#: catgets/gencat.c:118
+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 ""
+"çÅÎÅÒÉÒÕÅÔ ËÁÔÁÌÏÇ ÓÏÏÂÝÅÎÉÊ.\våÓÌÉ ÷èïäîïê-æáêì ÚÁÄÁΠËÁË -, ÞÉÔÁÅÔ ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ.  åÓÌÉ\n"
+"÷ùèïäîïê-æáêì ÚÁÄÁΠËÁË -, ÒÅÚÕÌØÔÁÔ ÐÅÞÁÔÁÅÔÓÑ ÎÁ ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ.\n"
 
-#: sysdeps/generic/siglist.h:53 stdio-common/../sysdeps/unix/siglist.c:53
-msgid "Profiling timer expired"
-msgstr "ðÒÏÆÉÌÉÒÏ×ÏÞÎÙÊ ÔÁÊÍÅÒ ÉÓÔÅË"
+#: catgets/gencat.c:123
+msgid ""
+"-o OUTPUT-FILE [INPUT-FILE]...\n"
+"[OUTPUT-FILE [INPUT-FILE]...]"
+msgstr ""
+"-o ÷ùèïäîïê-æáêì [÷èïäîïê-æáêì]...\n"
+"[÷ùèïäîïê-æáêì [÷èïäîïê-æáêì]...]"
 
-#: sysdeps/generic/siglist.h:54 stdio-common/../sysdeps/unix/siglist.c:54
-msgid "Window changed"
-msgstr "ïËÎÏ ÉÚÍÅÎÉÌÏÓØ"
+#: 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
+msgid ""
+"For bug reporting instructions, please see:\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
+msgstr ""
+"éÎÓÔÒÕËÃÉÉ ÐÏ ÓÏÏÂÝÅÎÉÀ Ï ÏÛÉÂËÁÈ ÓÍÏÔÒÉÔÅ ÎÁ\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
+#, c-format
+msgid ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"This is free software; see the source for copying conditions.  There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+"Copyright (C) %s Free Software Foundation, Inc.\n"
+"üÔÏ Ó×ÏÂÏÄÎÁÑ ÐÒÏÇÒÁÍÍÁ; ÐÏÄÒÏÂÎÏÓÔÉ Ï ÕÓÌÏ×ÉÑÈ ÒÁÓÐÒÏÓÔÒÁÎÅÎÉÑ\n"
+"ÓÍÏÔÒÉÔÅ × ÉÓÈÏÄÎÏÍ ÔÅËÓÔÅ.  íÙ îå ÐÒÅÄÏÓÔÁ×ÌÑÅÍ ÇÁÒÁÎÔÉÊ; ÄÁÖÅ ÇÁÒÁÎÔÉÊ\n"
+"ëïííåòþåóëïê ðòéçïäîïóôé ÉÌÉ ðòéçïäîïóôé äìñ ëáëïê-ìéâï ãåìé.\n"
 
-#: sysdeps/generic/siglist.h:55 stdio-common/../sysdeps/unix/siglist.c:56
-msgid "User defined signal 1"
-msgstr "ïÐÒÅÄÅÌÑÅÍÙÊ ÐÏÌØÚÏ×ÁÔÅÌÅÍ ÓÉÇÎÁÌ 1"
+#: 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
+#, c-format
+msgid "Written by %s.\n"
+msgstr "á×ÔÏÒ ÐÒÏÇÒÁÍÍÙ -- %s.\n"
 
-#: sysdeps/generic/siglist.h:56 stdio-common/../sysdeps/unix/siglist.c:57
-msgid "User defined signal 2"
-msgstr "ïÐÒÅÄÅÌÑÅÍÙÊ ÐÏÌØÚÏ×ÁÔÅÌÅÍ ÓÉÇÎÁÌ 2"
+#: catgets/gencat.c:281
+msgid "*standard input*"
+msgstr "*ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ*"
 
-#: sysdeps/generic/siglist.h:60 stdio-common/../sysdeps/unix/siglist.c:33
-msgid "EMT trap"
-msgstr "ìÏ×ÕÛËÁ EMT"
+#: catgets/gencat.c:287 iconv/iconv_charmap.c:157 iconv/iconv_prog.c:297
+#: nss/makedb.c:170
+#, c-format
+msgid "cannot open input file `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÈÏÄÎÏÊ ÆÁÊÌ `%s'"
 
-#: sysdeps/generic/siglist.h:63 stdio-common/../sysdeps/unix/siglist.c:38
-msgid "Bad system call"
-msgstr "îÅ×ÅÒÎÙÊ ÓÉÓÔÅÍÎÙÊ ×ÙÚÏ×"
+#: catgets/gencat.c:416 catgets/gencat.c:493
+msgid "illegal set number"
+msgstr "ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÍÎÏÖÅÓÔ×Á"
 
-#: sysdeps/generic/siglist.h:66
-msgid "Stack fault"
-msgstr "ïÛÉÂËÁ ÓÔÅËÁ"
+#: catgets/gencat.c:443
+msgid "duplicate set definition"
+msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÍÎÏÖÅÓÔ×Á"
 
-#: sysdeps/generic/siglist.h:69
-msgid "Information request"
-msgstr "úÁÐÒÏÓ ÉÎÆÏÒÍÁÃÉÉ"
+#: catgets/gencat.c:445 catgets/gencat.c:622 catgets/gencat.c:676
+msgid "this is the first definition"
+msgstr "ÜÔÏ ÐÅÒ×ÏÅ ÏÐÒÅÄÅÌÅÎÉÅ"
 
-#: sysdeps/generic/siglist.h:71
-msgid "Power failure"
-msgstr "óÂÏÊ ÐÉÔÁÎÉÑ"
+#: catgets/gencat.c:521
+#, c-format
+msgid "unknown set `%s'"
+msgstr "ÎÅÉÚ×ÅÓÔÎÏÅ ÍÎÏÖÅÓÔ×Ï `%s'"
 
-#: sysdeps/generic/siglist.h:74 stdio-common/../sysdeps/unix/siglist.c:55
-msgid "Resource lost"
-msgstr "ðÏÔÅÒÑ ÒÅÓÕÒÓÁ"
+#: catgets/gencat.c:562
+msgid "invalid quote character"
+msgstr "ÎÅ×ÅÒÎÙÊ ÜËÒÁÎÉÒÕÀÝÉÊ ÚÎÁË"
 
-#: sysdeps/mach/hurd/mips/dl-machine.c:68
-#: string/../sysdeps/mach/_strerror.c:57
-msgid "Error in unknown error system: "
-msgstr "ïÛÉÂËÁ × ÎÅÉÚ×ÅÓÔÎÏÊ ÓÉÓÔÅÍÅ ÏÛÉÂÏË: "
+#: catgets/gencat.c:575
+#, c-format
+msgid "unknown directive `%s': line ignored"
+msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÄÉÒÅËÔÉ×Á `%s': ÓÔÒÏËÁ ÉÇÎÏÒÉÒÏ×ÁÎÁ"
 
-#: sysdeps/mach/hurd/mips/dl-machine.c:83
-#: string/../sysdeps/generic/_strerror.c:44
-#: string/../sysdeps/mach/_strerror.c:87
-msgid "Unknown error "
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ "
+#: catgets/gencat.c:620
+msgid "duplicated message number"
+msgstr "ÐÏ×ÔÏÒÎÙÊ ÎÏÍÅÒ ÓÏÏÂÝÅÎÉÑ"
 
-#: sysdeps/unix/sysv/linux/lddlibc4.c:64
-#, c-format
-msgid "cannot open `%s'"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ `%s'"
+#: catgets/gencat.c:673
+msgid "duplicated message identifier"
+msgstr "ÐÏ×ÔÏÒÎÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÓÏÏÂÝÅÎÉÑ"
 
-#: sysdeps/unix/sysv/linux/lddlibc4.c:68
-#, c-format
-msgid "cannot read header from `%s'"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË ÉÚ `%s'"
+#: catgets/gencat.c:730
+msgid "invalid character: message ignored"
+msgstr "ÎÅÄÏÐÕÓÔÉÍÙÊ ÚÎÁË: ÓÏÏÂÝÅÎÉÅ ÉÇÎÏÒÉÒÏ×ÁÎÏ"
 
-#: iconv/iconv_charmap.c:159 iconv/iconv_prog.c:295 catgets/gencat.c:288
-#, c-format
-msgid "cannot open input file `%s'"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÈÏÄÎÏÊ ÆÁÊÌ `%s'"
+#: catgets/gencat.c:773
+msgid "invalid line"
+msgstr "ÎÅ×ÅÒÎÁÑ ÓÔÒÏËÁ"
 
-#: iconv/iconv_charmap.c:177 iconv/iconv_prog.c:313
-#, c-format
-msgid "error while closing input `%s'"
-msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ `%s'"
+#: catgets/gencat.c:827
+msgid "malformed line ignored"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÁÑ ÓÔÒÏËÁ ÉÇÎÏÒÉÒÏ×ÁÎÁ"
 
-#: iconv/iconv_charmap.c:443
+#: catgets/gencat.c:991 catgets/gencat.c:1032 nss/makedb.c:183
 #, c-format
-msgid "illegal input sequence at position %Zd"
-msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ×ÈÏÄÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ÐÏÚÉÃÉÉ %Zd"
+msgid "cannot open output file `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s'"
 
-#: iconv/iconv_charmap.c:462 iconv/iconv_prog.c:506
-msgid "incomplete character or shift sequence at end of buffer"
-msgstr "ÎÅÐÏÌÎÙÊ ÚÎÁË ÉÌÉ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÓÄ×ÉÇÁ × ËÏÎÃÅ ÂÕÆÅÒÁ"
+#: catgets/gencat.c:1194 locale/programs/linereader.c:559
+msgid "invalid escape sequence"
+msgstr "ÎÅ×ÅÒÎÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ"
 
-#: iconv/iconv_charmap.c:507 iconv/iconv_charmap.c:543 iconv/iconv_prog.c:549
-#: iconv/iconv_prog.c:585
-msgid "error while reading the input"
-msgstr "ÏÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ"
+#: catgets/gencat.c:1216
+msgid "unterminated message"
+msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ"
 
-#: iconv/iconv_charmap.c:525 iconv/iconv_prog.c:567
-msgid "unable to allocate buffer for input"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÂÕÆÅÒ ÄÌÑ ××ÏÄÁ"
+#: catgets/gencat.c:1240
+#, c-format
+msgid "while opening old catalog file"
+msgstr "ÐÒÉ ÏÔËÒÙÔÉÉ ÓÔÁÒÏÇÏ ÆÁÊÌÁ ËÁÔÁÌÏÇÁ"
 
-#: iconv/iconv_prog.c:61
-msgid "Input/Output format specification:"
-msgstr "óÐÅÃÉÆÉËÁÃÉÑ ÆÏÒÍÁÔÁ ××ÏÄÁ/×Ù×ÏÄÁ:"
+#: catgets/gencat.c:1331
+#, c-format
+msgid "conversion modules not available"
+msgstr "ÍÏÄÕÌÉ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÎÅÄÏÓÔÕÐÎÙ"
 
-#: iconv/iconv_prog.c:62
-msgid "encoding of original text"
-msgstr "ËÏÄÉÒÏ×ËÁ ÏÒÉÇÉÎÁÌØÎÏÇÏ ÔÅËÓÔÁ"
+#: catgets/gencat.c:1357
+#, c-format
+msgid "cannot determine escape character"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÚÎÁË ×ÙÈÏÄÁ"
 
-#: iconv/iconv_prog.c:63
-msgid "encoding for output"
-msgstr "ËÏÄÉÒÏ×ËÁ ÄÌÑ ×Ù×ÏÄÁ"
+#: debug/pcprofiledump.c:52
+msgid "Don't buffer output"
+msgstr "îÅ ÂÕÆÅÒÉÒÏ×ÁÔØ ×Ù×ÏÄ"
 
-#: iconv/iconv_prog.c:64
-msgid "Information:"
-msgstr "éÎÆÏÒÍÁÃÉÑ:"
+#: debug/pcprofiledump.c:57
+msgid "Dump information generated by PC profiling."
+msgstr "óÂÒÁÓÙ×ÁÅÔ ÉÎÆÏÒÍÁÃÉÀ, ÓÏÂÒÁÎÎÕÀ ÐÒÉ ÐÒÏÆÉÌÉÒÏ×ÁÎÉÉ PC."
 
-#: iconv/iconv_prog.c:65
-msgid "list all known coded character sets"
-msgstr "ÐÅÒÅÞÉÓÌÉÔØ ×ÓÅ ÉÚ×ÅÓÔÎÙÅ ×ÓÔÒÏÅÎÎÙÅ ËÏÄÉÒÏ×ËÉ"
+#: debug/pcprofiledump.c:60
+msgid "[FILE]"
+msgstr "[æáêì]"
 
-#: iconv/iconv_prog.c:66 locale/programs/localedef.c:128
-msgid "Output control:"
-msgstr "õÓÐÒÁ×ÌÅÎÉÅ ×Ù×ÏÄÏÍ:"
-
-#: iconv/iconv_prog.c:67
-msgid "omit invalid characters from output"
-msgstr "ÐÒÏÐÕÓËÁÔØ ÎÁ ×Ù×ÏÄÅ ÎÅÄÏÐÕÓÔÉÍÙÅ ÚÎÁËÉ"
-
-#: iconv/iconv_prog.c:68
-msgid "output file"
-msgstr "×ÙÈÏÄÎÏÊ ÆÁÊÌ"
-
-#: iconv/iconv_prog.c:69
-msgid "suppress warnings"
-msgstr "ÎÅ ÐÅÞÁÔÁÔØ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ"
-
-#: iconv/iconv_prog.c:70
-msgid "print progress information"
-msgstr "ÐÅÞÁÔÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÈÏÄÅ ÒÁÂÏÔÙ"
-
-#: iconv/iconv_prog.c:75
-msgid "Convert encoding of given files from one encoding to another."
-msgstr "ðÒÅÏÂÒÁÚÕÅÔ ÕËÁÚÁÎÎÙÅ ÆÁÊÌÙ ÉÚ ÏÄÎÏÊ ËÏÄÉÒÏ×ËÉ × ÄÒÕÇÕÀ."
-
-#: iconv/iconv_prog.c:79
-msgid "[FILE...]"
-msgstr "[æáêì...]"
-
-#: iconv/iconv_prog.c:201
-msgid "cannot open output file"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ"
-
-#: iconv/iconv_prog.c:243
-#, c-format
-msgid "conversions from `%s' and to `%s' are not supported"
-msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÉÚ `%s' É × `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ"
-
-#: iconv/iconv_prog.c:248
+#: debug/pcprofiledump.c:100
 #, c-format
-msgid "conversion from `%s' is not supported"
-msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
+msgid "cannot open input file"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÈÏÄÎÏÊ ÆÁÊÌ"
 
-#: iconv/iconv_prog.c:255
+#: debug/pcprofiledump.c:106
 #, c-format
-msgid "conversion to `%s' is not supported"
-msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ × `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
+msgid "cannot read header"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË"
 
-#: iconv/iconv_prog.c:259
+#: debug/pcprofiledump.c:170
 #, c-format
-msgid "conversion from `%s' to `%s' is not supported"
-msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ `%s' × `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
+msgid "invalid pointer size"
+msgstr "ÎÅ×ÅÒÎÙÊ ÒÁÚÍÅÒ ÕËÁÚÁÔÅÌÑ"
 
-#: iconv/iconv_prog.c:265
-msgid "failed to start conversion processing"
-msgstr "ÎÅ ÕÄÁÌÏÓØ ÎÁÞÁÔØ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ"
+#: debug/xtrace.sh:27 debug/xtrace.sh:45
+msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n"
+msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: xtrace [ëìàþ]... ðòïçòáííá [ëìàþ-ðòïçòáííù]...\\n"
 
-#: iconv/iconv_prog.c:360
-msgid "error while closing output file"
-msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ"
+#: debug/xtrace.sh:33
+msgid "Try `xtrace --help' for more information.\\n"
+msgstr "ðÏÐÒÏÂÕÊÔÅ `xtrace --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ.\\n"
 
-#: iconv/iconv_prog.c:409 iconv/iconvconfig.c:357 locale/programs/locale.c:279
-#: locale/programs/localedef.c:372 catgets/gencat.c:233
-#: malloc/memusagestat.c:602 debug/pcprofiledump.c:199
-msgid "Report bugs using the `glibcbug' script to <bugs@gnu.org>.\n"
-msgstr "ï ÏÛÉÂËÁÈ ÓÏÏÂÝÁÊÔÅ ÐÒÉ ÐÏÍÏÝÉ ÐÒÏÇÒÁÍÍÙ `glibcbug' ÎÁ ÁÄÒÅÓ <bugs@gnu.org>.\n"
+#: debug/xtrace.sh:39
+msgid "xtrace: option `$1' requires an argument.\\n"
+msgstr "xtrace: ËÌÀÞ `%1' ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ.\\n"
 
-#: iconv/iconv_prog.c:423 iconv/iconvconfig.c:371 locale/programs/locale.c:292
-#: locale/programs/localedef.c:386 catgets/gencat.c:246 posix/getconf.c:913
-#: nss/getent.c:74 nscd/nscd.c:355 nscd/nscd_nischeck.c:90 elf/ldconfig.c:274
-#: elf/sprof.c:349
-#, c-format
+#: debug/xtrace.sh:46
 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"
+"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 ""
-"Copyright (C) %s Free Software Foundation, Inc.\n"
-"üÔÏ Ó×ÏÂÏÄÎÁÑ ÐÒÏÇÒÁÍÍÁ; ÐÏÄÒÏÂÎÏÓÔÉ Ï ÕÓÌÏ×ÉÑÈ ÒÁÓÐÒÏÓÔÒÁÎÅÎÉÑ\n"
-"ÓÍÏÔÒÉÔÅ × ÉÓÈÏÄÎÏÍ ÔÅËÓÔÅ.  íÙ îå ÐÒÅÄÏÓÔÁ×ÌÑÅÍ ÇÁÒÁÎÔÉÊ; ÄÁÖÅ ÇÁÒÁÎÔÉÊ\n"
-"ëïííåòþåóëïê ðòéçïäîïóôé ÉÌÉ ðòéçïäîïóôé äìñ ëáëïê-ìéâï ãåìé.\n"
-
-#: iconv/iconv_prog.c:428 iconv/iconvconfig.c:376 locale/programs/locale.c:297
-#: locale/programs/localedef.c:391 catgets/gencat.c:251 posix/getconf.c:918
-#: nss/getent.c:79 nscd/nscd.c:360 nscd/nscd_nischeck.c:95 elf/ldconfig.c:279
-#: elf/sprof.c:355
-#, c-format
-msgid "Written by %s.\n"
-msgstr "á×ÔÏÒ ÐÒÏÇÒÁÍÍÙ -- %s.\n"
+"ôÒÁÓÓÉÒÕÅÔ ×ÙÐÏÌÎÅÎÉÅ ÐÒÏÇÒÁÍÍÙ, ÐÅÞÁÔÁÑ ×ÙÐÏÌÎÑÀÝÕÀÓÑ × ÄÁÎÎÏÅ ×ÒÅÍÑ ÆÕÎËÃÉÀ.\n"
+"\n"
+"     --data=æáêì          îÅ ×ÙÐÏÌÎÑÔØ ÐÒÏÇÒÁÍÍÕ, ÐÒÏÓÔÏ ÎÁÐÅÞÁÔÁÔØ ÄÁÎÎÙÅ ÉÚ æáêìá.\n"
+"     \n"
+"   -?,--help              ðÏËÁÚÁÔØ ÜÔÕ ÓÐÒÁ×ËÕ É ×ÙÊÔÉ\n"
+"      --usage             ðÏËÁÚÁÔØ ËÒÁÔËÏÅ ÓÏÏÂÝÅÎÉÅ Ï ÉÓÐÏÌØÚÏ×ÁÎÉÉ\n"
+"   -V,--version           ðÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ\n"
+"\n"
+"áÒÇÕÍÅÎÔÙ, ÏÂÑÚÁÔÅÌØÎÙÅ ÄÌÑ ÄÌÉÎÎÙÈ ËÌÀÞÅÊ, ÏÂÑÚÁÔÅÌØÎÙ É ÄÌÑ\n"
+"ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ËÏÒÏÔËÉÈ.\n"
+"\n"
+"éÎÓÔÒÕËÃÉÉ ÐÏ ÓÏÏÂÝÅÎÉÀ Ï ÏÛÉÂËÁÈ ÓÍÏÔÒÉÔÅ ÎÁ\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\\n"
 
-#: iconv/iconv_prog.c:458 iconv/iconv_prog.c:484
-msgid "conversion stopped due to problem in writing the output"
-msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÏÓÔÁÎÏ×ÌÅÎÏ ÉÚ-ÚÁ ÐÒÏÂÌÅÍÙ ÐÒÉ ÚÁÐÉÓÉ ×Ù×ÏÄÁ"
+#: debug/xtrace.sh:125
+msgid "xtrace: unrecognized option `$1'\\n"
+msgstr "xtrace: ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ËÌÀÞ `$1'\\n"
 
-#: iconv/iconv_prog.c:502
-#, c-format
-msgid "illegal input sequence at position %ld"
-msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ×ÈÏÄÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ÐÏÚÉÃÉÉ %ld"
+#: debug/xtrace.sh:138
+msgid "No program name given\\n"
+msgstr "îÅ ÚÁÄÁÎÏ ÉÍÑ ÐÒÏÇÒÁÍÍÙ\\n"
 
-#: iconv/iconv_prog.c:510
-msgid "internal error (illegal descriptor)"
-msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ (ÎÅ×ÅÒÎÙÊ ÄÅÓËÒÉÐÔÏÒ)"
+#: debug/xtrace.sh:146
+#, sh-format
+msgid "executable `$program' not found\\n"
+msgstr "ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ `$program' ÎÅ ÎÁÊÄÅÎ\\n"
 
-#: iconv/iconv_prog.c:513
-#, c-format
-msgid "unknown iconv() error %d"
-msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ iconv() %d"
+#: debug/xtrace.sh:150
+#, sh-format
+msgid "`$program' is no executable\\n"
+msgstr "`$program' ÎÅ Ñ×ÌÑÅÔÓÑ ÉÓÐÏÌÎÑÅÍÙÍ ÆÁÊÌÏÍ\\n"
 
-#: iconv/iconv_prog.c:756
-msgid ""
-"The following list contain all the coded character sets known.  This does\n"
-"not necessarily mean that all combinations of these names can be used for\n"
-"the FROM and TO command line parameters.  One coded character set can be\n"
-"listed with several different names (aliases).\n"
-"\n"
-"  "
-msgstr ""
-"óÌÅÄÕÀÝÉÊ ÓÐÉÓÏË ÓÏÄÅÒÖÉÔ ×ÓÅ ÉÚ×ÅÓÔÎÙÅ ×ÓÔÒÏÅÎÎÙÅ ËÏÄÉÒÏ×ËÉ.  üÔÏ ÎÅ\n"
-"ÏÂÑÚÁÔÅÌØÎÏ ÏÚÎÁÞÁÅÔ, ÞÔÏ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÌÀÂÙÅ ËÏÍÂÉÎÁÃÉÉ ÄÁÎÎÙÈ\n"
-"ÉÍÅΠנÐÁÒÁÍÅÔÒÁÈ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ FROM É TO.  ïÄÎÁ É ÔÁ ÖÅ ËÏÄÉÒÏ×ËÁ\n"
-"ÍÏÖÅÔ ÂÙÔØ ÐÅÒÅÞÉÓÌÅÎÁ ÐÏÄ ÎÅÓËÏÌØËÉÍÉ ÉÍÅÎÁÍÉ (ÐÓÅ×ÄÏÎÉÍÁÍÉ).\n"
-"\n"
-"  "
+#: dlfcn/dlinfo.c:67
+msgid "RTLD_SELF used in code not dynamically loaded"
+msgstr "RTLD_SELF ÉÓÐÏÌØÚÏ×ÁÎÏ × ÎÅ ÄÉÎÁÍÉÞÅÓËÉ ÚÁÇÒÕÖÅÎÎÏÍ ËÏÄÅ"
 
-#: iconv/iconvconfig.c:110
-msgid "Create fastloading iconv module configuration file."
-msgstr "óÏÚÄÁÅÔ ÂÙÓÔÒÏÚÁÇÒÕÖÁÅÍÙÊ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ ÍÏÄÕÌÑ iconv."
+#: dlfcn/dlinfo.c:76
+msgid "unsupported dlinfo request"
+msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÚÁÐÒÏÓ dlinfo"
 
-#: iconv/iconvconfig.c:114
-msgid "[DIR...]"
-msgstr "[ëáôáìïç...]"
+#: dlfcn/dlmopen.c:64
+msgid "invalid namespace"
+msgstr "ÎÅ×ÅÒÎÏÅ ÐÒÏÓÔÒÁÎÓÔ×Ï ÉÍÅÎ"
 
-#: iconv/iconvconfig.c:126
-msgid "Prefix used for all file accesses"
-msgstr "ðÒÅÆÉËÓ, ÉÓÐÏÌØÚÕÅÍÙÊ ÄÌÑ ÄÏÓÔÕÐÁ ËÏ ×ÓÅÍ ÆÁÊÌÁÍ"
+#: dlfcn/dlmopen.c:69
+msgid "invalid mode"
+msgstr "ÎÅ×ÅÒÎÙÊ ÒÅÖÉÍ"
 
-#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
-msgid "no output file produced because warnings were issued"
-msgstr "×ÙÈÏÄÎÏÊ ÆÁÊÌ ÎÅ ÓÏÚÄÁÎ, ÐÏÓËÏÌØËÕ ÂÙÌÉ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ"
+#: dlfcn/dlopen.c:64
+msgid "invalid mode parameter"
+msgstr "ÎÅ×ÅÒÎÙÊ ÐÁÒÁÍÅÔÒ ÒÅÖÉÍÁ"
 
-#: iconv/iconvconfig.c:405
-msgid "while inserting in search tree"
-msgstr "ÐÒÉ ×ÓÔÁ×ËÅ × ÄÅÒÅ×Ï ÐÏÉÓËÁ"
+#: elf/cache.c:67
+msgid "unknown"
+msgstr "ÎÅÉÚ×ÅÓÔÎÏ"
 
-#: iconv/iconvconfig.c:1204
-msgid "cannot generate output file"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÇÅÎÅÒÉÒÏ×ÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ"
+#: elf/cache.c:110
+msgid "Unknown OS"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ïó"
 
-#: locale/programs/charmap-dir.c:59
+#: elf/cache.c:115
 #, c-format
-msgid "cannot read character map directory `%s'"
-msgstr ""
+msgid ", OS ABI: %s %d.%d.%d"
+msgstr ", ABI ïó: %s %d.%d.%d"
 
-#: locale/programs/charmap.c:136
+#: elf/cache.c:141 elf/ldconfig.c:1231
 #, c-format
-msgid "character map file `%s' not found"
-msgstr ""
+msgid "Can't open cache file %s\n"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÜÛ-ÆÁÊÌ %s\n"
 
-#: locale/programs/charmap.c:194
+#: elf/cache.c:153
 #, c-format
-msgid "default character map file `%s' not found"
-msgstr ""
+msgid "mmap of cache file failed.\n"
+msgstr "ÏÔÏÂÒÁÖÅÎÉÅ ËÜÛ-ÆÁÊÌÁ × ÐÁÍÑÔØ ÎÅ ÕÄÁÌÏÓØ.\n"
 
-#: locale/programs/charmap.c:257
+#: elf/cache.c:157 elf/cache.c:167
 #, c-format
-msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n"
-msgstr ""
+msgid "File is not a cache file.\n"
+msgstr "üÔÏ ÎÅ ËÜÛ-ÆÁÊÌ.\n"
 
-#: locale/programs/charmap.c:336
+#: elf/cache.c:200 elf/cache.c:210
 #, c-format
-msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n"
-msgstr "%s: <mb_cur_max> ÄÏÌÖÎÏ ÂÙÔØ ÂÏÌØÛÅ ÞÅÍ <mb_cur_min>\n"
+msgid "%d libs found in cache `%s'\n"
+msgstr "%d ÂÉÂÌÉÏÔÅË ÎÁÊÄÅÎÏ × ËÜÛÅ `%s'\n"
 
-#: locale/programs/charmap.c:356 locale/programs/charmap.c:373
-#: locale/programs/repertoire.c:175
+#: elf/cache.c:409
 #, c-format
-msgid "syntax error in prolog: %s"
-msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÐÒÏÌÏÇÅ: %s"
-
-#: locale/programs/charmap.c:357
-msgid "invalid definition"
-msgstr "ÎÅ×ÅÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ"
+msgid "Can't remove old temporary cache file %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÓÔÁÒÙÊ ×ÒÅÍÅÎÎÙÊ ËÜÛ-ÆÁÊÌ %s"
 
-#: locale/programs/charmap.c:374 locale/programs/locfile.c:126
-#: locale/programs/locfile.c:153 locale/programs/repertoire.c:176
-msgid "bad argument"
-msgstr "ÎÅÐÒÁ×ÉÌØÎÙÊ ÁÒÇÕÍÅÎÔ"
+#: elf/cache.c:416
+#, c-format
+msgid "Can't create temporary cache file %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ËÜÛ-ÆÁÊÌ %s"
 
-#: locale/programs/charmap.c:402
+#: elf/cache.c:424 elf/cache.c:434 elf/cache.c:438
 #, c-format
-msgid "duplicate definition of <%s>"
-msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÄÌÑ <%s>"
+msgid "Writing of cache data failed"
+msgstr "úÁÐÉÓØ ÄÁÎÎÙÈ ËÜÛÁ ÎÅÕÓÐÅÛÎÁ"
 
-#: locale/programs/charmap.c:409
+#: elf/cache.c:442
 #, c-format
-msgid "value for <%s> must be 1 or greater"
-msgstr "ÚÎÁÞÅÎÉÅ <%s> ÄÏÌÖÎÏ ÂÙÔØ 1 ÉÌÉ ÂÏÌØÛÅ"
+msgid "Writing of cache data failed."
+msgstr "úÁÐÉÓØ ÄÁÎÎÙÈ ËÜÛÁ ÎÅÕÓÐÅÛÎÁ."
 
-#: locale/programs/charmap.c:421
+#: elf/cache.c:449
 #, c-format
-msgid "value of <%s> must be greater or equal than the value of <%s>"
-msgstr "ÚÎÁÞÅÎÉÅ <%s> ÄÏÌÖÎÏ ÂÙÔØ ÂÏÌØÛÅ ÉÌÉ ÒÁ×ÎÏ ÚÎÁÞÅÎÉÀ <%s>"
+msgid "Changing access rights of %s to %#o failed"
+msgstr "éÚÍÅÎÅÎÉÅ ÐÒÁ× ÄÏÓÔÕÐÁ ÄÌÑ %s ÎÁ %#o ÎÅÕÓÐÅÛÎÏ"
 
-#: locale/programs/charmap.c:444 locale/programs/repertoire.c:184
+#: elf/cache.c:454
 #, c-format
-msgid "argument to <%s> must be a single character"
-msgstr "ÁÒÇÕÍÅÎÔ ÄÌÑ <%s> ÄÏÌÖÅΠÂÙÔØ ÏÄÎÉÍ ÚÎÁËÏÍ"
+msgid "Renaming of %s to %s failed"
+msgstr "ðÅÒÅÉÍÅÎÏ×ÁÎÉÅ %s × %s ÎÅÕÓÐÅÛÎÏ"
 
-#: locale/programs/charmap.c:470
-msgid "character sets with locking states are not supported"
-msgstr "ËÏÄÉÒÏ×ËÉ Ó ÂÌÏËÉÒÕÀÝÉÍÉ ÓÏÓÔÏÑÎÉÑÍÉ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ"
+#: elf/dl-close.c:116
+msgid "shared object not open"
+msgstr "ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔ ÎÅ ÏÔËÒÙÔ"
 
-#: locale/programs/charmap.c:497 locale/programs/charmap.c:551
-#: locale/programs/charmap.c:583 locale/programs/charmap.c:677
-#: locale/programs/charmap.c:732 locale/programs/charmap.c:773
-#: locale/programs/charmap.c:814
+#: elf/dl-deps.c:112
+msgid "DST not allowed in SUID/SGID programs"
+msgstr "DST ÎÅ ÄÏÐÕÓËÁÅÔÓÑ × ÐÒÏÇÒÁÍÍÁÈ Ó SUID/SGID"
+
+#: elf/dl-deps.c:125
+msgid "empty dynamics string token substitution"
+msgstr ""
+
+#: elf/dl-deps.c:131
 #, c-format
-msgid "syntax error in %s definition: %s"
-msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÏÐÒÅÄÅÌÅÎÉÉ %s: %s"
+msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n"
+msgstr ""
 
-#: locale/programs/charmap.c:498 locale/programs/charmap.c:678
-#: locale/programs/charmap.c:774 locale/programs/repertoire.c:231
-msgid "no symbolic name given"
-msgstr "ÎÅ ÚÁÄÁÎÏ ÓÉÍ×ÏÌØÎÏÅ ÉÍÑ"
+#: elf/dl-deps.c:472
+msgid "cannot allocate dependency list"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÓÐÉÓÏË ÚÁ×ÉÓÉÍÏÓÔÅÊ"
 
-#: locale/programs/charmap.c:552
-msgid "invalid encoding given"
-msgstr "ÚÁÄÁÎÁ ÎÅ×ÅÒÎÁÑ ËÏÄÉÒÏ×ËÁ"
+#: elf/dl-deps.c:505 elf/dl-deps.c:560
+msgid "cannot allocate symbol search list"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÓÐÉÓÏË ÐÏÉÓËÁ ÓÉÍ×ÏÌÏ×"
 
-#: locale/programs/charmap.c:561
-msgid "too few bytes in character encoding"
-msgstr "ÓÌÉÛËÏÍ ÍÁÌÏ ÂÁÊÔ × ËÏÄÉÒÏ×ËÅ ÚÎÁËÁ"
+#: elf/dl-deps.c:545
+msgid "Filters not supported with LD_TRACE_PRELINKING"
+msgstr "æÉÌØÔÒÙ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ Ó LD_TRACE_PRELINKING"
 
-#: locale/programs/charmap.c:563
-msgid "too many bytes in character encoding"
-msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÂÁÊÔ × ËÏÄÉÒÏ×ËÅ ÚÎÁËÁ"
+#: elf/dl-error.c:77
+msgid "DYNAMIC LINKER BUG!!!"
+msgstr "ïûéâëá äéîáíéþåóëïçï ëïíðïîï÷ýéëá!!!"
 
-#: locale/programs/charmap.c:585 locale/programs/charmap.c:733
-#: locale/programs/charmap.c:816 locale/programs/repertoire.c:297
-msgid "no symbolic name given for end of range"
-msgstr "ÎÅ ÚÁÄÁÎÏ ÓÉÍ×ÏÌØÎÏÅ ÉÍÑ ÄÌÑ ËÏÎÃÁ ÄÉÁÐÁÚÏÎÁ"
+#: elf/dl-error.c:124
+msgid "error while loading shared libraries"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁÇÒÕÚËÅ ÒÁÚÄÅÌÑÅÍÙÈ ÂÉÂÌÉÏÔÅË"
 
-#: locale/programs/charmap.c:609 locale/programs/locfile.c:818
-#: locale/programs/repertoire.c:314
-#, c-format
-msgid "`%1$s' definition does not end with `END %1$s'"
-msgstr "ÏÐÒÅÄÅÌÅÎÉÅ `%1$s' ÎÅ ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÎÁ `END %1$s'"
+#: elf/dl-fptr.c:88
+msgid "cannot map pages for fdesc table"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÒÁÎÉÃÙ ÄÌÑ ÔÁÂÌÉÃÙ fdesc"
 
-#: locale/programs/charmap.c:642
-msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
-msgstr "ÐÏÓÌÅ ÏÐÒÅÄÅÌÅÎÉÑ CHARMAP ÍÏÇÕÔ ÓÌÅÄÏ×ÁÔØ ÔÏÌØËÏ ÏÐÒÅÄÅÌÅÎÉÑ WIDTH"
+#: elf/dl-fptr.c:192
+msgid "cannot map pages for fptr table"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÒÁÎÉÃÙ ÄÌÑ ÔÁÂÌÉÃÙ fptr"
 
-#: locale/programs/charmap.c:650 locale/programs/charmap.c:713
-#, c-format
-msgid "value for %s must be an integer"
-msgstr "ÚÎÁÞÅÎÉÅ ÄÌÑ %s ÄÏÌÖÎÏ ÂÙÔØ ÃÅÌÙÍ ÞÉÓÌÏÍ"
+#: elf/dl-fptr.c:221
+msgid "internal error: symidx out of range of fptr table"
+msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ: symidx ×ÙÈÏÄÉÔ ÚÁ ÐÒÅÄÅÌÙ ÔÁÂÌÉÃÙ fptr"
 
-#: locale/programs/charmap.c:841
-#, c-format
-msgid "%s: error in state machine"
-msgstr "%s: ÏÛÉÂËÁ × Á×ÔÏÍÁÔÅ"
+#: elf/dl-load.c:372
+msgid "cannot allocate name record"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÚÁÐÉÓØ ÉÍÅÎÉ"
 
-#: locale/programs/charmap.c:849 locale/programs/ld-address.c:605
-#: locale/programs/ld-collate.c:2650 locale/programs/ld-collate.c:3818
-#: locale/programs/ld-ctype.c:2225 locale/programs/ld-ctype.c:2994
-#: locale/programs/ld-identification.c:469
-#: locale/programs/ld-measurement.c:255 locale/programs/ld-messages.c:349
-#: locale/programs/ld-monetary.c:958 locale/programs/ld-name.c:324
-#: locale/programs/ld-numeric.c:392 locale/programs/ld-paper.c:258
-#: locale/programs/ld-telephone.c:330 locale/programs/ld-time.c:1219
-#: locale/programs/locfile.c:825 locale/programs/repertoire.c:325
-#, c-format
-msgid "%s: premature end of file"
-msgstr "%s: ÐÒÅÖÄÅ×ÒÅÍÅÎÎÙÊ ËÏÎÅàÆÁÊÌÁ"
+#: elf/dl-load.c:474 elf/dl-load.c:553 elf/dl-load.c:673 elf/dl-load.c:786
+msgid "cannot create cache for search path"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÜÛ ÄÌÑ ÐÕÔÅÊ ÐÏÉÓËÁ"
 
-#: locale/programs/charmap.c:868 locale/programs/charmap.c:879
-#, c-format
-msgid "unknown character `%s'"
-msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË `%s'"
+#: elf/dl-load.c:576
+msgid "cannot create RUNPATH/RPATH copy"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÏÐÉÀ RUNPATH/RPATH"
 
-#: locale/programs/charmap.c:887
-#, c-format
-msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d"
-msgstr "ÞÉÓÌÏ ÂÁÊÔ ÄÌÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÂÁÊÔ ÎÁÞÁÌÁ É ËÏÎÃÁ ÄÉÁÐÁÚÏÎÁ ÎÅ ÓÏ×ÐÁÄÁÀÔ: %d É %d"
+#: elf/dl-load.c:659
+msgid "cannot create search path array"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÍÁÓÓÉ× ÐÕÔÅÊ ÐÏÉÓËÁ"
 
-#: locale/programs/charmap.c:991 locale/programs/ld-collate.c:2930
-#: locale/programs/repertoire.c:420
-msgid "invalid names for character range"
-msgstr "ÎÅÄÏÐÕÓÔÉÍÙÅ ÉÍÅÎÁ ÄÌÑ ÄÉÁÐÁÚÏÎÁ ÚÎÁËÏ×"
+#: elf/dl-load.c:870
+msgid "cannot stat shared object"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat ÄÌÑ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ"
 
-#: locale/programs/charmap.c:1003 locale/programs/repertoire.c:432
-msgid "hexadecimal range format should use only capital characters"
-msgstr "× ÛÅÓÔÎÁÄÃÁÔÉÒÉÞÎÏÍ ÆÏÒÍÁÔÅ ÄÉÁÐÁÚÏÎÁ ÓÌÅÄÕÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÏÌØËÏ ÚÁÇÌÁ×ÎÙÅ ÂÕË×Ù"
+#: elf/dl-load.c:940
+msgid "cannot open zero fill device"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ-ÉÓÔÏÞÎÉË ÎÕÌÅÊ"
 
-#: locale/programs/charmap.c:1021
-#, c-format
-msgid "<%s> and <%s> are illegal names for range"
-msgstr "<%s> É <%s> -- ÎÅÄÏÐÕÓÔÉÍÙÅ ÉÍÅÎÁ ÄÌÑ ÄÉÁÐÁÚÏÎÁ"
+#: elf/dl-load.c:985 elf/dl-load.c:2215
+msgid "cannot create shared object descriptor"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÄÅÓËÒÉÐÔÏÒ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ"
 
-#: locale/programs/charmap.c:1027
-msgid "upper limit in range is not higher then lower limit"
-msgstr "×ÅÒÈÎÑÑ ÇÒÁÎÉÃÁ ÄÉÁÐÁÚÏÎÁ ÎÅ ÂÏÌØÛÅ ÎÉÖÎÅÊ ÇÒÁÎÉÃÙ"
+#: elf/dl-load.c:1004 elf/dl-load.c:1663 elf/dl-load.c:1755
+msgid "cannot read file data"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÄÁÎÎÙÅ ÆÁÊÌÁ"
 
-#: locale/programs/charmap.c:1085
-msgid "resulting bytes for range not representable."
-msgstr "ÒÅÚÕÌØÔÉÒÕÀÝÉÅ ÂÁÊÔÙ ÄÌÑ ÄÉÁÐÁÚÏÎÁ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ."
+#: elf/dl-load.c:1048
+msgid "ELF load command alignment not page-aligned"
+msgstr "×ÙÒÁ×ÎÉ×ÁÎÉÅ ËÏÍÁÎÄÙ ÚÁÇÒÕÚËÉ ELF ÎÅ ×ÙÒÏ×ÎÅÎÏ ÐÏ ÓÔÒÁÎÉÃÅ"
 
-#: locale/programs/ld-address.c:134 locale/programs/ld-collate.c:1534
-#: locale/programs/ld-ctype.c:421 locale/programs/ld-identification.c:134
-#: locale/programs/ld-measurement.c:95 locale/programs/ld-messages.c:98
-#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:95
-#: locale/programs/ld-numeric.c:99 locale/programs/ld-paper.c:92
-#: locale/programs/ld-telephone.c:95 locale/programs/ld-time.c:160
-#, c-format
-msgid "No definition for %s category found"
-msgstr "îÅ ÎÁÊÄÅÎÏ ÏÐÒÅÄÅÌÅÎÉÑ ÄÌÑ ËÁÔÅÇÏÒÉÉ %s"
+#: elf/dl-load.c:1055
+msgid "ELF load command address/offset not properly aligned"
+msgstr "ÁÄÒÅÓ/ÓÍÅÝÅÎÉÅ ËÏÍÁÎÄÙ ÚÁÇÒÕÚËÉ ELF ÎÅ ×ÙÒÏ×ÎÅÎÏ ÐÒÁ×ÉÌØÎÏ"
 
-#: locale/programs/ld-address.c:145 locale/programs/ld-address.c:183
-#: locale/programs/ld-address.c:201 locale/programs/ld-address.c:228
-#: locale/programs/ld-address.c:290 locale/programs/ld-address.c:309
-#: locale/programs/ld-address.c:322 locale/programs/ld-identification.c:147
-#: locale/programs/ld-measurement.c:106 locale/programs/ld-monetary.c:206
-#: locale/programs/ld-monetary.c:250 locale/programs/ld-monetary.c:266
-#: locale/programs/ld-monetary.c:278 locale/programs/ld-name.c:106
-#: locale/programs/ld-name.c:143 locale/programs/ld-numeric.c:113
-#: locale/programs/ld-numeric.c:127 locale/programs/ld-paper.c:103
-#: locale/programs/ld-paper.c:112 locale/programs/ld-telephone.c:106
-#: locale/programs/ld-telephone.c:163 locale/programs/ld-time.c:176
-#: locale/programs/ld-time.c:197
-#, c-format
-msgid "%s: field `%s' not defined"
-msgstr "%s: ÐÏÌÅ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎÏ"
+#: elf/dl-load.c:1139
+msgid "cannot allocate TLS data structures for initial thread"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ TLS-ÓÔÒÕËÔÕÒÙ ÄÌÑ ÎÁÞÁÌØÎÏÇÏ ÔÒÅÄÁ"
 
-#: locale/programs/ld-address.c:157 locale/programs/ld-address.c:209
-#: locale/programs/ld-address.c:235 locale/programs/ld-address.c:265
-#: locale/programs/ld-name.c:118 locale/programs/ld-telephone.c:118
-#, c-format
-msgid "%s: field `%s' must not be empty"
-msgstr "%s: ÐÏÌÅ `%s' ÄÏÌÖÎÏ ÂÙÔØ ÎÅÐÕÓÔÙÍ"
+#: elf/dl-load.c:1163
+msgid "cannot handle TLS data"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÂÒÁÂÏÔÁÔØ ÄÁÎÎÙÅ TLS"
 
-#: locale/programs/ld-address.c:169
-#, c-format
-msgid "%s: invalid escape `%%%c' sequence in field `%s'"
-msgstr "%s: ÎÅ×ÅÒÎÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ `%%%c' × ÐÏÌÅ `%s'"
+#: elf/dl-load.c:1182
+msgid "object file has no loadable segments"
+msgstr "× ÏÂßÅËÔÎÏÍ ÆÁÊÌÅ ÎÅÔ ÚÁÇÒÕÖÁÅÍÙÈ ÓÅÇÍÅÎÔÏ×"
 
-#: locale/programs/ld-address.c:220
-#, c-format
-msgid "%s: terminology language code `%s' not defined"
-msgstr ""
+#: elf/dl-load.c:1218
+msgid "failed to map segment from shared object"
+msgstr "ÓÂÏÊ ÏÔÏÂÒÁÖÅÎÉÑ ÓÅÇÍÅÎÔÁ ÉÚ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ"
 
-#: locale/programs/ld-address.c:247 locale/programs/ld-address.c:276
-#, c-format
-msgid "%s: language abbreviation `%s' not defined"
-msgstr "%s: ÓÏËÒÁÝÅÎÎÏÅ ÉÍÑ ÑÚÙËÁ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎÏ"
+#: elf/dl-load.c:1242
+msgid "cannot dynamically load executable"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÄÉÎÁÍÉÞÅÓËÉ ÚÁÇÒÕÚÉÔØ ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ"
 
-#: locale/programs/ld-address.c:254 locale/programs/ld-address.c:282
-#: locale/programs/ld-address.c:316 locale/programs/ld-address.c:328
-#, c-format
-msgid "%s: `%s' value does not match `%s' value"
-msgstr "%s: ÚÎÁÞÅÎÉÅ `%s' ÎÅ ÓÏ×ÐÁÄÁÅÔ ÓÏ ÚÎÁÞÅÎÉÅÍ `%s'"
+#: elf/dl-load.c:1303
+msgid "cannot change memory protections"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ ÚÁÝÉÔÕ ÐÁÍÑÔÉ"
 
-#: locale/programs/ld-address.c:301
-#, c-format
-msgid "%s: numeric country code `%d' not valid"
-msgstr "%s: ÎÅ×ÅÒÎÙÊ ÞÉÓÌÏ×ÏÊ ËÏÄ ÓÔÒÁÎÙ `%d'"
+#: elf/dl-load.c:1322
+msgid "cannot map zero-fill pages"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÒÁÎÉÃÙ ÚÁÐÏÌÎÅÎÉÑ ÎÕÌÑÍÉ"
 
-#: locale/programs/ld-address.c:497 locale/programs/ld-address.c:534
-#: locale/programs/ld-address.c:572 locale/programs/ld-ctype.c:2601
-#: locale/programs/ld-identification.c:365
-#: locale/programs/ld-measurement.c:222 locale/programs/ld-messages.c:302
-#: locale/programs/ld-monetary.c:700 locale/programs/ld-monetary.c:735
-#: locale/programs/ld-monetary.c:776 locale/programs/ld-name.c:281
-#: locale/programs/ld-numeric.c:264 locale/programs/ld-paper.c:225
-#: locale/programs/ld-telephone.c:289 locale/programs/ld-time.c:1108
-#: locale/programs/ld-time.c:1150
-#, c-format
-msgid "%s: field `%s' declared more than once"
-msgstr "%s: ÐÏÌÅ `%s' ÏÂßÑ×ÌÅÎÏ ÎÅÓËÏÌØËÏ ÒÁÚ"
+#: elf/dl-load.c:1336
+msgid "object file has no dynamic section"
+msgstr "× ÏÂßÅËÔÎÏÍ ÆÁÊÌÅ ÎÅÔ ÄÉÎÁÍÉÞÅÓËÏÊ ÓÅËÃÉÉ"
 
-#: locale/programs/ld-address.c:501 locale/programs/ld-address.c:539
-#: locale/programs/ld-identification.c:369 locale/programs/ld-messages.c:312
-#: locale/programs/ld-monetary.c:704 locale/programs/ld-monetary.c:739
-#: locale/programs/ld-name.c:285 locale/programs/ld-numeric.c:268
-#: locale/programs/ld-telephone.c:293 locale/programs/ld-time.c:1002
-#: locale/programs/ld-time.c:1071 locale/programs/ld-time.c:1113
-#, c-format
-msgid "%s: unknown character in field `%s'"
-msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÐÏÌÅ `%s'"
+#: elf/dl-load.c:1359
+msgid "shared object cannot be dlopen()ed"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÉÍÅÎÉÔØ dlopen() Ë ÒÁÚÄÅÌÑÅÍÏÍÕ ÏÂßÅËÔÕ"
 
-#: locale/programs/ld-address.c:586 locale/programs/ld-collate.c:3800
-#: locale/programs/ld-ctype.c:2974 locale/programs/ld-identification.c:450
-#: locale/programs/ld-measurement.c:236 locale/programs/ld-messages.c:331
-#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:306
-#: locale/programs/ld-numeric.c:374 locale/programs/ld-paper.c:240
-#: locale/programs/ld-telephone.c:312 locale/programs/ld-time.c:1201
-#, c-format
-msgid "%s: incomplete `END' line"
-msgstr "%s: ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÓÔÒÏËÁ `END'"
+#: elf/dl-load.c:1372
+msgid "cannot allocate memory for program header"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÚÁÇÏÌÏ×ÏË ÐÒÏÇÒÁÍÍÙ"
 
-#: locale/programs/ld-address.c:589 locale/programs/ld-collate.c:2653
-#: locale/programs/ld-collate.c:3802 locale/programs/ld-ctype.c:2228
-#: locale/programs/ld-ctype.c:2977 locale/programs/ld-identification.c:453
-#: locale/programs/ld-measurement.c:239 locale/programs/ld-messages.c:333
-#: locale/programs/ld-monetary.c:942 locale/programs/ld-name.c:308
-#: locale/programs/ld-numeric.c:376 locale/programs/ld-paper.c:242
-#: locale/programs/ld-telephone.c:314 locale/programs/ld-time.c:1203
-#, c-format
-msgid "%1$s: definition does not end with `END %1$s'"
-msgstr "%1$s: ÏÐÒÅÄÅÌÅÎÉÅ ÎÅ ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÎÁ `END %1$s'"
+#: elf/dl-load.c:1389 elf/dl-open.c:174
+msgid "invalid caller"
+msgstr "ÎÅ×ÅÒÎÁÑ ×ÙÚÙ×ÁÀÝÁÑ ÆÕÎËÃÉÑ"
 
-#: locale/programs/ld-address.c:596 locale/programs/ld-collate.c:523
-#: locale/programs/ld-collate.c:575 locale/programs/ld-collate.c:871
-#: locale/programs/ld-collate.c:884 locale/programs/ld-collate.c:2640
-#: locale/programs/ld-collate.c:3809 locale/programs/ld-ctype.c:1956
-#: locale/programs/ld-ctype.c:2215 locale/programs/ld-ctype.c:2799
-#: locale/programs/ld-ctype.c:2985 locale/programs/ld-identification.c:460
-#: locale/programs/ld-measurement.c:246 locale/programs/ld-messages.c:340
-#: locale/programs/ld-monetary.c:949 locale/programs/ld-name.c:315
-#: locale/programs/ld-numeric.c:383 locale/programs/ld-paper.c:249
-#: locale/programs/ld-telephone.c:321 locale/programs/ld-time.c:1210
-#, c-format
-msgid "%s: syntax error"
-msgstr "%s: ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ"
+#: elf/dl-load.c:1428
+msgid "cannot enable executable stack as shared object requires"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÄÅÊÓÔ×Ï×ÁÔØ ÉÓÐÏÌÎÑÅÍÙÊ ÓÔÅË, ËÁË ÔÒÅÂÕÅÔ ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔ"
 
-#: locale/programs/ld-collate.c:398
-#, c-format
-msgid "`%.*s' already defined in charmap"
-msgstr ""
+#: elf/dl-load.c:1443
+msgid "cannot close file descriptor"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁËÒÙÔØ ÄÅÓËÒÉÐÔÏÒ ÆÁÊÌÁ"
 
-#: locale/programs/ld-collate.c:407
-#, c-format
-msgid "`%.*s' already defined in repertoire"
-msgstr "`%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎÏ × ÒÅÐÅÒÔÕÁÒÅ"
+#: elf/dl-load.c:1485
+msgid "cannot create searchlist"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÐÉÓÏË ÐÏÉÓËÁ"
 
-#: locale/programs/ld-collate.c:414
-#, c-format
-msgid "`%.*s' already defined as collating symbol"
-msgstr "`%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎÏ ËÁË ÓÉÍ×ÏÌ ÓÏÒÔÉÒÏ×ËÉ"
+#: elf/dl-load.c:1663
+msgid "file too short"
+msgstr "ÆÁÊÌ ÓÌÉÛËÏÍ ÍÁÌ"
 
-#: locale/programs/ld-collate.c:421
-#, c-format
-msgid "`%.*s' already defined as collating element"
-msgstr "`%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎÏ ËÁË ÜÌÅÍÅÎÔ ÓÏÒÔÉÒÏ×ËÉ"
+#: elf/dl-load.c:1692
+msgid "invalid ELF header"
+msgstr "ÎÅ×ÅÒÎÙÊ ÚÁÇÏÌÏ×ÏË ELF"
 
-#: locale/programs/ld-collate.c:452 locale/programs/ld-collate.c:478
-#, c-format
-msgid "%s: `forward' and `backward' are mutually excluding each other"
-msgstr "%s: `forward' É `backward' ×ÚÁÉÍÎÏ ÉÓËÌÀÞÁÀÔÓÑ"
+#: elf/dl-load.c:1704
+msgid "ELF file data encoding not big-endian"
+msgstr "ËÏÄÉÒÏ×ËÁ ÄÁÎÎÙÈ × ELF-ÆÁÊÌÅ ÎÅ ÔÕÐÏËÏÎÅÞÎÁÑ"
 
-#: locale/programs/ld-collate.c:462 locale/programs/ld-collate.c:488
-#: locale/programs/ld-collate.c:504
-#, c-format
-msgid "%s: `%s' mentioned more than once in definition of weight %d"
-msgstr "%s: `%s' ×ÓÔÒÅÞÁÅÔÓÑ ÂÏÌÅÅ ÏÄÎÏÇÏ ÒÁÚÁ × ÏÐÒÅÄÅÌÅÎÉÉ ×ÅÓÁ %d"
+#: elf/dl-load.c:1706
+msgid "ELF file data encoding not little-endian"
+msgstr "ËÏÄÉÒÏ×ËÁ ÄÁÎÎÙÈ × ELF-ÆÁÊÌÅ ÎÅ ÏÓÔÒÏËÏÎÅÞÎÁÑ"
 
-#: locale/programs/ld-collate.c:560
-#, c-format
-msgid "%s: too many rules; first entry only had %d"
-msgstr "%s: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÐÒÁ×ÉÌ; × ÐÅÒ×ÏÍ ×ÈÏÖÄÅÎÉÉ ÂÙÌÏ ÔÏÌØËÏ %d"
+#: elf/dl-load.c:1710
+msgid "ELF file version ident does not match current one"
+msgstr "ÉÄÅÎÔÉÆÉËÁÔÏÒ ×ÅÒÓÉÉ ELF-ÆÁÊÌÁ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÔÅËÕÝÅÊ ×ÅÒÓÉÉ"
 
-#: locale/programs/ld-collate.c:596
-#, c-format
-msgid "%s: not enough sorting rules"
-msgstr "%s: ÎÅÄÏÓÔÁÔÏÞÎÏ ÐÒÁ×ÉÌ ÓÏÒÔÉÒÏ×ËÉ"
+#: elf/dl-load.c:1714
+msgid "ELF file OS ABI invalid"
+msgstr "ÎÅ×ÅÒÎÙÊ ABI ïó ELF-ÆÁÊÌÁ"
 
-#: locale/programs/ld-collate.c:761
-#, c-format
-msgid "%s: empty weight string not allowed"
-msgstr "%s: ÐÕÓÔÁÑ ÓÔÒÏËÁ ×ÅÓÁ ÎÅÄÏÐÕÓÔÉÍÁ"
+#: elf/dl-load.c:1716
+msgid "ELF file ABI version invalid"
+msgstr "ÎÅ×ÅÒÎÁÑ ×ÅÒÓÉÑ ABI ELF-ÆÁÊÌÁ"
 
-#: locale/programs/ld-collate.c:856
-#, c-format
-msgid "%s: weights must use the same ellipsis symbol as the name"
-msgstr "%s: ×ÅÓÁ ÄÏÌÖÎÙ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÁËÏÊ ÖÅ ÓÉÍ×ÏÌ ÜÌÌÉÐÓÉÓÁ, ËÁË ÉÍÑ"
+#: elf/dl-load.c:1719
+msgid "internal error"
+msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ"
 
-#: locale/programs/ld-collate.c:912
-#, c-format
-msgid "%s: too many values"
-msgstr "%s: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÚÎÁÞÅÎÉÊ"
+#: elf/dl-load.c:1726
+msgid "ELF file version does not match current one"
+msgstr "×ÅÒÓÉÑ ELF-ÆÁÊÌÁ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÔÅËÕÝÅÊ ×ÅÒÓÉÉ"
 
-#: locale/programs/ld-collate.c:1031 locale/programs/ld-collate.c:1206
-#, c-format
-msgid "order for `%.*s' already defined at %s:%Zu"
-msgstr "ÐÏÒÑÄÏË ÄÌÑ `%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅΠנ%s:%Zu"
+#: elf/dl-load.c:1734
+msgid "only ET_DYN and ET_EXEC can be loaded"
+msgstr "ÍÏÖÎÏ ÚÁÇÒÕÚÉÔØ ÔÏÌØËÏ ET_DYN É ET_EXEC"
 
-#: 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: ÎÁÞÁÌØÎÙÊ É ËÏÎÅÞÎÙÊ ÓÉÍ×ÏÌÙ ÄÉÁÐÁÚÏÎÁ ÄÏÌÖÎÙ ÏÂÏÚÎÁÞÁÔØ ÚÎÁËÉ"
+# ???
+#: elf/dl-load.c:1740
+msgid "ELF file's phentsize not the expected size"
+msgstr "phentsize ELF-ÆÁÊÌÁ ÎÅ ÓÏ×ÐÁÄÁÅÔ Ó ÏÖÉÄÁÅÍÙÍ ÒÁÚÍÅÒÏÍ"
 
-#: locale/programs/ld-collate.c:1108
-#, c-format
-msgid "%s: byte sequences of first and last character must have the same length"
-msgstr "%s: ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÂÁÊÔ ÄÌÑ ÐÅÒ×ÏÇÏ É ÐÏÓÌÅÄÎÅÇÏ ÚÎÁËÁ ÄÏÌÖÎÙ ÂÙÔØ ÏÄÉÎÁËÏ×ÏÊ ÄÌÉÎÙ"
+#: elf/dl-load.c:2231
+msgid "wrong ELF class: ELFCLASS64"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÙÊ ËÌÁÓÓ ELF: ELFCLASS64"
 
-#: 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: ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÂÁÊÔ ÄÌÑ ÐÅÒ×ÏÇÏ ÚÎÁËÁ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÎÅ ÍÅÎØÛÅ ÞÅÍ ÄÌÑ ÐÏÓÌÅÄÎÅÇÏ"
+#: elf/dl-load.c:2232
+msgid "wrong ELF class: ELFCLASS32"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÙÊ ËÌÁÓÓ ELF: ELFCLASS32"
 
-#: locale/programs/ld-collate.c:1275
-#, c-format
-msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
-msgstr "%s: ÜÌÌÉÐÓÉÓ ÓÉÍ×ÏÌØÎÏÇÏ ÄÉÁÐÁÚÏÎÁ ÎÅ ÍÏÖÅÔ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÓÌÅÄÏ×ÁÔØ ÐÏÓÌÅ `order_start'"
+#: elf/dl-load.c:2235
+msgid "cannot open shared object file"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔÎÙÊ ÆÁÊÌ"
 
-#: locale/programs/ld-collate.c:1279
-#, c-format
-msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
-msgstr "%s: ÐÏÓÌÅ ÜÌÌÉÐÓÉÓÁ ÓÉÍ×ÏÌØÎÏÇÏ ÄÉÁÐÁÚÏÎÁ ÎÅ ÍÏÖÅÔ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÓÌÅÄÏ×ÁÔØ `order_end'"
+#: elf/dl-lookup.c:261
+msgid "relocation error"
+msgstr "ÏÛÉÂËÁ ÐÅÒÅÍÅÝÅÎÉÑ"
 
-#: locale/programs/ld-collate.c:1299 locale/programs/ld-ctype.c:1476
-#, c-format
-msgid "`%s' and `%.*s' are not valid names for symbolic range"
-msgstr "`%s' É `%.*s' ÎÅ Ñ×ÌÑÀÔÓÑ ×ÅÒÎÙÍÉ ÉÍÅÎÁÍÉ ÓÉÍ×ÏÌØÎÏÇÏ ÄÉÁÐÏÚÏÎÁ"
+#: elf/dl-lookup.c:289
+msgid "symbol lookup error"
+msgstr "ÏÛÉÂËÁ ÐÏÉÓËÁ ÓÉÍ×ÏÌÁ"
 
-#: locale/programs/ld-collate.c:1348 locale/programs/ld-collate.c:3737
-#, c-format
-msgid "%s: order for `%.*s' already defined at %s:%Zu"
-msgstr "%s: ÐÏÒÑÄÏË ÄÌÑ `%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅΠנ%s:%Zu"
+#: elf/dl-open.c:112
+msgid "cannot extend global scope"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÒÁÓÛÉÒÉÔØ ÇÌÏÂÁÌØÎÕÀ ÏÂÌÁÓÔØ"
 
-#: locale/programs/ld-collate.c:1357
-#, c-format
-msgid "%s: `%s' must be a character"
-msgstr "%s: `%s' ÄÏÌÖÎÏ ÂÙÔØ ÚÎÁËÏÍ"
+#: elf/dl-open.c:237
+msgid "empty dynamic string token substitution"
+msgstr ""
 
-#: locale/programs/ld-collate.c:1550
-#, c-format
-msgid "%s: `position' must be used for a specific level in all sections or none"
-msgstr "%s: `position' ÄÏÌÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÄÌÑ ÏÄÎÏÇÏ ËÏÎËÒÅÔÎÏÇÏ ÕÒÏ×ÎÑ ÌÉÂÏ ×Ï ×ÓÅÈ ÓÅËÃÉÑÈ, ÌÉÂÏ ÎÉ × ÏÄÎÏÊ"
+#: elf/dl-open.c:406 elf/dl-open.c:417 elf/dl-open.c:425
+msgid "cannot create scope list"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÐÉÓÏË ÏÂÌÁÓÔÅÊ"
 
-#: locale/programs/ld-collate.c:1575
-#, c-format
-msgid "symbol `%s' not defined"
-msgstr "ÓÉÍ×ÏÌ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎ"
+#: elf/dl-open.c:470
+msgid "TLS generation counter wrapped!  Please report this."
+msgstr "ðÅÒÅÐÏÌÎÅÎÉÅ ÓÞÅÔÞÉËÁ ÐÏËÏÌÅÎÉÊ TLS!  ðÏÖÁÌÕÊÓÔÁ, ÓÏÏÂÝÉÔÅ Ï ÜÔÏÍ."
 
-#: locale/programs/ld-collate.c:1651 locale/programs/ld-collate.c:1757
-#, c-format
-msgid "symbol `%s' has the same encoding as"
-msgstr "ÓÉÍ×ÏÌ `%s' ÉÍÅÅÔ ÔÁËÕÀ ÖÅ ËÏÄÉÒÏ×ËÕ ËÁË"
+#: elf/dl-open.c:508
+msgid "invalid mode for dlopen()"
+msgstr "ÎÅ×ÅÒÎÙÊ ÒÅÖÉÍ ÄÌÑ dlopen()"
 
-#: locale/programs/ld-collate.c:1655 locale/programs/ld-collate.c:1761
-#, c-format
-msgid "symbol `%s'"
-msgstr "ÓÉÍ×ÏÌ `%s'"
+#: elf/dl-open.c:525
+msgid "no more namespaces available for dlmopen()"
+msgstr "ÂÏÌØÛÅ ÎÅÔ ÄÏÓÔÕÐÎÙÈ ÐÒÏÓÔÒÁÎÓÔ× ÉÍÅΠÄÌÑ dlmopen()"
 
-#: locale/programs/ld-collate.c:1803
-msgid "no definition of `UNDEFINED'"
-msgstr "ÎÅÔ ÏÐÒÅÄÅÌÅÎÉÑ ÄÌÑ `UNDEFINED'"
+#: elf/dl-open.c:538
+msgid "invalid target namespace in dlmopen()"
+msgstr "ÎÅ×ÅÒÎÏÅ ÃÅÌÅ×ÏÅ ÐÒÏÓÔÒÁÎÓÔ×Ï ÉÍÅΠנdlmopen()"
 
-#: locale/programs/ld-collate.c:1832
-msgid "too many errors; giving up"
-msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÏÛÉÂÏË; ËÏÎÅÃ"
+#: elf/dl-reloc.c:55
+msgid "cannot allocate memory in static TLS block"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ × ÓÔÁÔÉÞÎÏÍ ÂÌÏËÅ TLS"
 
-#: locale/programs/ld-collate.c:2735
-#, c-format
-msgid "%s: duplicate definition of `%s'"
-msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ `%s'"
+#: elf/dl-reloc.c:198
+msgid "cannot make segment writable for relocation"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÓÅÇÍÅÎÔ ÚÁÐÉÓÙ×ÁÅÍÙÍ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ"
 
-#: locale/programs/ld-collate.c:2771
+#: elf/dl-reloc.c:279
 #, c-format
-msgid "%s: duplicate declaration of section `%s'"
-msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÂßÑ×ÌÅÎÉÅ ÓÅËÃÉÉ `%s'"
+msgid "%s: no PLTREL found in object %s\n"
+msgstr "%s: × ÏÂßÅËÔÅ %s ÎÅ ÎÁÊÄÅÎÏ PLTREL\n"
 
-#: locale/programs/ld-collate.c:2910
+#: elf/dl-reloc.c:290
 #, c-format
-msgid "%s: unknown character in collating symbol name"
-msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÉÍÅÎÉ ÓÉÍ×ÏÌÁ ÓÏÒÔÉÒÏ×ËÉ"
+msgid "%s: out of memory to store relocation results for %s\n"
+msgstr "%s: ÎÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ ÄÌÑ ÚÁÐÉÓÉ ÒÅÚÕÌØÔÁÔÏ× ÒÅÌÏËÁÃÉÉ ÄÌÑ %s\n"
 
-#: locale/programs/ld-collate.c:3042
-#, c-format
-msgid "%s: unknown character in equivalent definition name"
-msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÉÍÅÎÉ ÏÐÒÅÄÅÌÅÎÉÑ ÜË×É×ÁÌÅÎÔÎÏÓÔÉ"
+#: elf/dl-reloc.c:306
+msgid "cannot restore segment prot after reloc"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÏÓÓÔÁÎÏ×ÉÔØ ÚÁÝÉÔÕ ÓÅÇÍÅÎÔÁ ÐÏÓÌÅ ÐÅÒÅÍÅÝÅÎÉÑ"
 
-#: locale/programs/ld-collate.c:3055
-#, c-format
-msgid "%s: unknown character in equivalent definition value"
-msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÚÎÁÞÅÎÉÉ ÏÐÒÅÄÅÌÅÎÁÑ ÜË×É×ÁÌÅÎÔÎÏÓÔÉ"
+#: elf/dl-reloc.c:331
+msgid "cannot apply additional memory protection after relocation"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÉÍÅÎÉÔØ ÄÏÐÏÌÎÉÔÅÌØÎÕÀ ÚÁÝÉÔÕ ÐÁÍÑÔÉ ÐÏÓÌÅ ÒÅÌÏËÁÃÉÉ"
 
-#: locale/programs/ld-collate.c:3065
-#, c-format
-msgid "%s: unknown symbol `%s' in equivalent definition"
-msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÓÉÍ×ÏÌ `%s' × ÏÐÒÅÄÅÌÅÎÉÉ ÜË×É×ÁÌÅÎÔÎÏÓÔÉ"
+#: elf/dl-sym.c:98
+msgid "RTLD_NEXT used in code not dynamically loaded"
+msgstr "RTLD_NEXT ÉÓÐÏÌØÚÏ×ÁÎÏ × ÎÅ ÄÉÎÁÍÉÞÅÓËÉ ÚÁÇÒÕÖÅÎÎÏÍ ËÏÄÅ"
 
-#: locale/programs/ld-collate.c:3074
-msgid "error while adding equivalent collating symbol"
-msgstr "ÏÛÉÂËÁ ÐÒÉ ÄÏÂÁ×ÌÅÎÉÉ ÜË×É×ÁÌÅÎÔÎÏÇÏ ÓÉÍ×ÏÌÁ ÓÏÒÔÉÒÏ×ËÉ"
+#: elf/dl-sysdep.c:495
+msgid "cannot create capability list"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÐÉÓÏË ×ÏÚÍÏÖÎÏÓÔÅÊ"
 
-#: locale/programs/ld-collate.c:3104
-#, c-format
-msgid "duplicate definition of script `%s'"
-msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÓÉÓÔÅÍÙ ÐÉÓØÍÁ `%s'"
+#: elf/dl-tls.c:829
+msgid "cannot create TLS data structures"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÔÒÕËÔÕÒÙ ÄÁÎÎÙÈ TLS"
 
-#: locale/programs/ld-collate.c:3152
-#, c-format
-msgid "%s: unknown section name `%s'"
-msgstr "%s: ÎÅÉÚ×ÅÓÔÎÏÅ ÉÍÑ ÓÅËÃÉÉ `%s'"
+#: elf/dl-version.c:303
+msgid "cannot allocate version reference table"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÔÁÂÌÉÃÕ ÓÓÙÌÏË ÎÁ ×ÅÒÓÉÉ"
 
-#: locale/programs/ld-collate.c:3180
-#, c-format
-msgid "%s: multiple order definitions for section `%s'"
-msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÐÏÒÑÄËÁ ÄÌÑ ÓÅËÃÉÉ `%s'"
+#: elf/ldconfig.c:133
+msgid "Print cache"
+msgstr "îÁÐÅÞÁÔÁÔØ ËÜÛ"
 
-#: locale/programs/ld-collate.c:3205
-#, c-format
-msgid "%s: invalid number of sorting rules"
-msgstr "%s: ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÒÁ×ÉÌ ÓÏÒÔÉÒÏ×ËÉ"
+#: elf/ldconfig.c:134
+msgid "Generate verbose messages"
+msgstr "çÅÎÅÒÉÒÏ×ÁÔØ ÐÏÄÒÏÂÎÙÅ ÓÏÏÂÝÅÎÉÑ"
 
-#: locale/programs/ld-collate.c:3232
-#, c-format
-msgid "%s: multiple order definitions for unnamed section"
-msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÐÏÒÑÄËÁ ÄÌÑ ÂÅÚÙÍÑÎÎÏÊ ÓÅËÃÉÉ"
+#: elf/ldconfig.c:135
+msgid "Don't build cache"
+msgstr "îÅ ÓÔÒÏÉÔØ ËÜÛ"
 
-#: locale/programs/ld-collate.c:3286 locale/programs/ld-collate.c:3414
-#: locale/programs/ld-collate.c:3778
-#, c-format
-msgid "%s: missing `order_end' keyword"
-msgstr "%s: ÐÒÏÐÕÝÅÎÏ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï `order_end'"
+#: elf/ldconfig.c:136
+msgid "Don't generate links"
+msgstr "îÅ ÇÅÎÅÒÉÒÏ×ÁÔØ ÓÓÙÌËÉ"
 
-#: locale/programs/ld-collate.c:3347
-#, c-format
-msgid "%s: order for collating symbol %.*s not yet defined"
-msgstr "%s: ÐÏÒÑÄÏË ÄÌÑ ÓÉÍ×ÏÌÁ ÓÏÒÔÉÒÏ×ËÉ %.*s ÅÝÅ ÎÅ ÏÐÒÅÄÅÌÅÎ"
+#: elf/ldconfig.c:137
+msgid "Change to and use ROOT as root directory"
+msgstr "ðÅÒÅÊÔÉ × ROOT É ÉÓÐÏÌØÚÏ×ÁÔØ ÅÇÏ ËÁË ËÏÒÎÅ×ÏÊ ËÁÔÁÌÏÇ"
 
-#: locale/programs/ld-collate.c:3365
-#, c-format
-msgid "%s: order for collating element %.*s not yet defined"
-msgstr "%s: ÐÏÒÑÄÏË ÄÌÑ ÜÌÅÍÅÎÔÁ ÓÏÒÔÉÒÏ×ËÉ %.*s ÅÝÅ ÎÅ ÏÐÒÅÄÅÌÅÎ"
+#: elf/ldconfig.c:137
+msgid "ROOT"
+msgstr ""
+
+#: elf/ldconfig.c:138
+msgid "CACHE"
+msgstr ""
+
+#: elf/ldconfig.c:138
+msgid "Use CACHE as cache file"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ CACHE × ËÁÞÅÓÔ×Å ËÜÛ-ÆÁÊÌÁ"
+
+#: elf/ldconfig.c:139
+msgid "CONF"
+msgstr ""
+
+#: elf/ldconfig.c:139
+msgid "Use CONF as configuration file"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ CONF × ËÁÞÅÓÔ×Å ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÇÏ ÆÁÊÌÁ"
+
+#: elf/ldconfig.c:140
+msgid "Only process directories specified on the command line.  Don't build cache."
+msgstr "ïÂÒÁÂÏÔÁÔØ ÔÏÌØËÏ ËÁÔÁÌÏÇÉ, ÕËÁÚÁÎÎÙÅ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ.  îÅ ÓÔÒÏÉÔØ ËÜÛ."
 
-#: locale/programs/ld-collate.c:3376
+#: elf/ldconfig.c:141
+msgid "Manually link individual libraries."
+msgstr "÷ÒÕÞÎÕÀ ÓËÏÍÐÏÎÏ×ÁÔØ ÏÔÄÅÌØÎÙÅ ÂÉÂÌÉÏÔÅËÉ."
+
+#: elf/ldconfig.c:142
+msgid "FORMAT"
+msgstr ""
+
+#: elf/ldconfig.c:142
+msgid "Format to use: new, old or compat (default)"
+msgstr "éÓÐÏÌØÚÕÅÍÙÊ ÆÏÒÍÁÔ: new, old ÉÌÉ compat (ÐÏ ÕÍÏÌÞÁÎÉÀ)"
+
+#: elf/ldconfig.c:150
+msgid "Configure Dynamic Linker Run Time Bindings."
+msgstr "ëÏÎÆÉÇÕÒÉÒÕÅÔ Ó×ÑÚÉ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ ÄÌÑ ÄÉÎÁÍÉÞÅÓËÏÇÏ ËÏÍÐÏÎÏ×ÝÉËÁ."
+
+#: elf/ldconfig.c:308
 #, c-format
-msgid "%s: cannot reorder after %.*s: symbol not known"
-msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÐÏÍÅÎÑÔØ ÐÏÒÑÄÏË ÐÏÓÌÅ %.*s: ÓÉÍ×ÏÌ ÎÅÉÚ×ÅÓÔÅÎ"
+msgid "Path `%s' given more than once"
+msgstr "ðÕÔØ `%s' ÚÁÄÁΠÎÅÓËÏÌØËÏ ÒÁÚ"
 
-#: locale/programs/ld-collate.c:3428 locale/programs/ld-collate.c:3790
+#: elf/ldconfig.c:348
 #, c-format
-msgid "%s: missing `reorder-end' keyword"
-msgstr "%s: ÐÒÏÐÕÝÅÎÏ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï `reorder-end'"
+msgid "%s is not a known library type"
+msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÉÚ×ÅÓÔÎÙÍ ÔÉÐÏÍ ÂÉÂÌÉÏÔÅËÉ"
 
-#: locale/programs/ld-collate.c:3462 locale/programs/ld-collate.c:3662
+#: elf/ldconfig.c:373
 #, c-format
-msgid "%s: section `%.*s' not known"
-msgstr "%s: ÓÅËÃÉÑ `%.*s' ÎÅÉÚ×ÅÓÔÎÁ"
+msgid "Can't stat %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat %s"
 
-#: locale/programs/ld-collate.c:3527
+#: elf/ldconfig.c:447
 #, c-format
-msgid "%s: bad symbol <%.*s>"
-msgstr "%s: ÎÅÐÒÁ×ÉÌØÎÙÊ ÓÉÍ×ÏÌ <%.*s>"
+msgid "Can't stat %s\n"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat %s\n"
 
-#: locale/programs/ld-collate.c:3725
+#: elf/ldconfig.c:457
 #, c-format
-msgid "%s: cannot have `%s' as end of ellipsis range"
-msgstr "%s: `%s' ÎÅ ÍÏÖÅÔ ÂÙÔØ ËÏÎÃÏÍ ÄÉÁÐÁÚÏÎÁ Ó ÜÌÌÉÐÓÉÓÏÍ"
+msgid "%s is not a symbolic link\n"
+msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÓÉÍ×ÏÌØÎÏÊ ÓÓÙÌËÏÊ\n"
 
-#: locale/programs/ld-collate.c:3774
+#: elf/ldconfig.c:476
 #, c-format
-msgid "%s: empty category description not allowed"
-msgstr "%s: ÐÕÓÔÙÅ ÏÐÉÓÁÎÉÑ ËÁÔÅÇÏÒÉÊ ÎÅÄÏÐÕÓÔÉÍÙ"
+msgid "Can't unlink %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÓÓÙÌËÕ %s"
 
-#: locale/programs/ld-collate.c:3793
+#: elf/ldconfig.c:482
 #, c-format
-msgid "%s: missing `reorder-sections-end' keyword"
-msgstr "%s: ÐÒÏÐÕÝÅÎÏ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï `reorder-sections-end'"
+msgid "Can't link %s to %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÓÙÌËÕ Ó %s ÎÁ %s"
 
-#: locale/programs/ld-ctype.c:440
-msgid "No character set name specified in charmap"
-msgstr ""
+#: elf/ldconfig.c:488
+msgid " (changed)\n"
+msgstr " (ÉÍÅÎÅÎÏ)\n"
 
-#: locale/programs/ld-ctype.c:469
-#, c-format
-msgid "character L'\\u%0*x' in class `%s' must be in class `%s'"
-msgstr "ÚÎÁË L'\\u%0*x' × ËÌÁÓÓÅ `%s' ÄÏÌÖÅΠÂÙÔØ × ËÌÁÓÓÅ `%s'"
+#: elf/ldconfig.c:490
+msgid " (SKIPPED)\n"
+msgstr " (ðòïðõýåîï)\n"
 
-#: locale/programs/ld-ctype.c:484
+#: elf/ldconfig.c:545
 #, c-format
-msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'"
-msgstr "ÚÎÁË L'\\u%0*x' × ËÌÁÓÓÅ `%s' ÎÅ ÄÏÌÖÅΠÂÙÔØ × ËÌÁÓÓÅ `%s'"
+msgid "Can't find %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ %s"
 
-#: locale/programs/ld-ctype.c:498 locale/programs/ld-ctype.c:556
+#: elf/ldconfig.c:561
 #, c-format
-msgid "internal error in %s, line %u"
-msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ × %s, ÓÔÒÏËÁ %u"
+msgid "Can't lstat %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ lstat %s"
 
-#: locale/programs/ld-ctype.c:527
+#: elf/ldconfig.c:568
 #, c-format
-msgid "character '%s' in class `%s' must be in class `%s'"
-msgstr "ÚÎÁË '%s' × ËÌÁÓÓÅ `%s' ÄÏÌÖÅΠÂÙÔØ × ËÌÁÓÓÅ `%s'"
+msgid "Ignored file %s since it is not a regular file."
+msgstr "æÁÊÌ %s ÉÇÎÏÒÉÒÏ×ÁÎ, ÐÏÓËÏÌØËÕ ÜÔÏ ÎÅ ÏÂÙÞÎÙÊ ÆÁÊÌ"
 
-#: locale/programs/ld-ctype.c:543
+#: elf/ldconfig.c:576
 #, c-format
-msgid "character '%s' in class `%s' must not be in class `%s'"
-msgstr "ÚÎÁË '%s' × ËÌÁÓÓÅ `%s' ÎÅ ÄÏÌÖÅΠÂÙÔØ × ËÌÁÓÓÅ `%s'"
+msgid "No link created since soname could not be found for %s"
+msgstr "óÓÙÌËÁ ÎÅ ÓÏÚÄÁÎÁ, ÐÏÓËÏÌØËÕ ÄÌÑ %s ÎÅ ÂÙÌÏ ÎÁÊÄÅÎÏ soname"
 
-#: locale/programs/ld-ctype.c:573 locale/programs/ld-ctype.c:611
+#: elf/ldconfig.c:667
 #, c-format
-msgid "<SP> character not in class `%s'"
-msgstr "ÚÎÁË <SP> ÎÅ × ËÌÁÓÓÅ `%s'"
+msgid "Can't open directory %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÔÁÌÏÇ %s"
 
-#: locale/programs/ld-ctype.c:585 locale/programs/ld-ctype.c:622
+#: elf/ldconfig.c:735 elf/ldconfig.c:782
 #, c-format
-msgid "<SP> character must not be in class `%s'"
-msgstr "ÚÎÁË <SP> ÎÅ ÄÏÌÖÅΠÂÙÔØ × ËÌÁÓÓÅ `%s'"
+msgid "Cannot lstat %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ lstat %s"
 
-#: locale/programs/ld-ctype.c:600
-msgid "character <SP> not defined in character map"
-msgstr ""
+#: elf/ldconfig.c:747
+#, c-format
+msgid "Cannot stat %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat %s"
 
-#: locale/programs/ld-ctype.c:714
-msgid "`digit' category has not entries in groups of ten"
-msgstr "×ÈÏÖÄÅÎÉÑ ËÁÔÅÇÏÒÉÉ `digit' ÎÅ ÇÒÕÐÐÉÒÕÀÔÓÑ ÐÏ ÄÅÓÑÔØ"
+#: elf/ldconfig.c:804 elf/readlib.c:90
+#, c-format
+msgid "Input file %s not found.\n"
+msgstr "÷ÈÏÄÎÏÊ ÆÁÊÌ %s ÎÅ ÎÁÊÄÅÎ.\n"
 
-#: locale/programs/ld-ctype.c:763
-msgid "no input digits defined and none of the standard names in the charmap"
-msgstr ""
+#: elf/ldconfig.c:855
+#, c-format
+msgid "libc5 library %s in wrong directory"
+msgstr "libc5-ÂÉÂÌÉÏÔÅËÁ %s × ÎÅÐÒÁ×ÉÌØÎÏÍ ËÁÔÁÌÏÇÅ"
 
-#: locale/programs/ld-ctype.c:828
-msgid "not all characters used in `outdigit' are available in the charmap"
-msgstr ""
+#: elf/ldconfig.c:858
+#, c-format
+msgid "libc6 library %s in wrong directory"
+msgstr "libc6-ÂÉÂÌÉÏÔÅËÁ %s × ÎÅÐÒÁ×ÉÌØÎÏÍ ËÁÔÁÌÏÇÅ"
 
-#: locale/programs/ld-ctype.c:845
-msgid "not all characters used in `outdigit' are available in the repertoire"
-msgstr "ÎÅ ×ÓÅ ÚÎÁËÉ, ÉÓÐÏÌØÚÏ×ÁÎÎÙÅ × `outdigit', ÄÏÓÔÕÐÎÙ × ÄÁÎÎÏÍ ÒÅÐÅÒÔÕÁÒÅ"
+#: elf/ldconfig.c:861
+#, c-format
+msgid "libc4 library %s in wrong directory"
+msgstr "libc4-ÂÉÂÌÉÏÔÅËÁ %s × ÎÅÐÒÁ×ÉÌØÎÏÍ ËÁÔÁÌÏÇÅ"
 
-#: locale/programs/ld-ctype.c:1244
+#: elf/ldconfig.c:888
 #, c-format
-msgid "character class `%s' already defined"
-msgstr "ËÌÁÓÓ ÚÎÁËÏ× `%s' ÕÖÅ ÏÐÒÅÄÅÌÅÎ"
+msgid "libraries %s and %s in directory %s have same soname but different type."
+msgstr "ÂÉÂÌÉÏÔÅËÉ %s É %s × ËÁÔÁÌÏÇÅ %s ÉÍÅÀÔ ÏÄÉÎÁËÏ×ÙÊ soname, ÎÏ ÒÁÚÎÙÅ ÔÉÐÙ."
 
-#: locale/programs/ld-ctype.c:1250
+#: elf/ldconfig.c:995
 #, c-format
-msgid "implementation limit: no more than %Zd character classes allowed"
-msgstr "ÏÇÒÁÎÉÞÅÎÉÅ ÒÅÁÌÉÚÁÃÉÉ: ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÎÅ ÂÏÌÅÅ %Zd ËÌÁÓÓÏ× ÚÎÁËÏ×"
+msgid "Can't open configuration file %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ %s"
 
-#: locale/programs/ld-ctype.c:1276
+#: elf/ldconfig.c:1059
 #, c-format
-msgid "character map `%s' already defined"
-msgstr ""
+msgid "%s:%u: bad syntax in hwcap line"
+msgstr "%s:%u: ÎÅÐÒÁ×ÉÌØÎÙÊ ÓÉÎÔÁËÓÉÓ × ÓÔÒÏËÅ hwcap"
 
-#: locale/programs/ld-ctype.c:1282
+#: elf/ldconfig.c:1065
 #, c-format
-msgid "implementation limit: no more than %d character maps allowed"
-msgstr ""
+msgid "%s:%u: hwcap index %lu above maximum %u"
+msgstr "%s:%u: ÉÎÄÅËÓ hwcap %lu ÐÒÅ×ÙÛÁÅÔ ÍÁËÓÉÍÕÍ %u"
 
-#: locale/programs/ld-ctype.c:1547 locale/programs/ld-ctype.c:1672
-#: locale/programs/ld-ctype.c:1778 locale/programs/ld-ctype.c:2464
-#: locale/programs/ld-ctype.c:3460
+#: elf/ldconfig.c:1072 elf/ldconfig.c:1080
 #, c-format
-msgid "%s: field `%s' does not contain exactly ten entries"
-msgstr "%s: ÐÏÌÅ `%s' ÎÅ ÓÏÄÅÒÖÉÔ ÒÏ×ÎÏ ÄÅÓÑÔØ ×ÈÏÖÄÅÎÉÊ"
+msgid "%s:%u: hwcap index %lu already defined as %s"
+msgstr "%s:%u: ÉÎÄÅËÓ hwcap %lu ÕÖÅ ÏÐÒÅÄÅÌÅΠËÁË %s"
 
-#: locale/programs/ld-ctype.c:1575 locale/programs/ld-ctype.c:2146
+#: elf/ldconfig.c:1083
 #, c-format
-msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>"
-msgstr "×ÅÒÈÎÅÅ ÚÎÁÞÅÎÉÅ ÄÉÁÐÁÚÏÎÁ <U%0*X> ÍÅÎØÛÅ ÞÅÍ ÎÉÖÎÅÅ ÚÎÁÞÅÎÉÅ <U%0*X>"
+msgid "%s:%u: duplicate hwcap %lu %s"
+msgstr "%s:%u: ÐÏ×ÔÏÒÎÏÅ hwcap %lu %s"
 
-#: locale/programs/ld-ctype.c:1702
-msgid "start and end character sequence of range must have the same length"
-msgstr "ÎÁÞÁÌØÎÁÑ É ËÏÎÅÞÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÚÎÁËÏ× ÄÉÁÐÁÚÏÎÁ ÄÏÌÖÎÙ ÂÙÔØ ÏÄÉÎÁËÏ×ÏÊ ÄÌÉÎÙ"
+#: elf/ldconfig.c:1105
+#, c-format
+msgid "need absolute file name for configuration file when using -r"
+msgstr "ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ -r ÎÅÏÂÈÏÄÉÍÏ ÚÁÄÁ×ÁÔØ ÁÂÓÏÌÀÔÎÏÅ ÉÍÑ ÄÌÑ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÇÏ ÆÁÊÌÁ"
 
-#: locale/programs/ld-ctype.c:1709
-msgid "to-value character sequence is smaller than from-value sequence"
-msgstr "ËÏÎÅÞÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÚÎÁËÏ× ÄÉÁÐÁÚÏÎÁ ÍÅÎØÛÅ ÞÅÍ ÎÁÞÁÌØÎÁÑ"
+#: 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
+#, c-format
+msgid "memory exhausted"
+msgstr "ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ"
 
-#: locale/programs/ld-ctype.c:2066 locale/programs/ld-ctype.c:2117
-msgid "premature end of `translit_ignore' definition"
-msgstr "ÐÒÅÖÄÅ×ÒÅÍÅÎÎÙÊ ËÏÎÅàÏÐÒÅÄÅÌÅÎÉÑ `translit_ignore'"
+#: elf/ldconfig.c:1142
+#, c-format
+msgid "%s:%u: cannot read directory %s"
+msgstr "%s:%u: ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ËÁÔÁÌÏÇ %s"
 
-#: locale/programs/ld-ctype.c:2072 locale/programs/ld-ctype.c:2123
-#: locale/programs/ld-ctype.c:2165
-msgid "syntax error"
-msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ"
+#: elf/ldconfig.c:1182
+#, c-format
+msgid "relative path `%s' used to build cache"
+msgstr "ÄÌÑ ÐÏÓÔÒÏÅÎÉÑ ËÜÛÁ ÉÓÐÏÌØÚÏ×ÁΠÏÔÎÏÓÉÔÅÌØÎÙÊ ÐÕÔØ `%s'"
 
-#: locale/programs/ld-ctype.c:2296
+#: elf/ldconfig.c:1210
 #, c-format
-msgid "%s: syntax error in definition of new character class"
-msgstr "%s: ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÏÐÒÅÄÅÌÅÎÉÉ ÎÏ×ÏÇÏ ËÌÁÓÓÁ ÚÎÁËÏ×"
+msgid "Can't chdir to /"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÊÔÉ × ËÁÔÁÌÏÇ /"
 
-#: locale/programs/ld-ctype.c:2311
+#: elf/ldconfig.c:1252
 #, c-format
-msgid "%s: syntax error in definition of new character map"
+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 ""
+"éÓÐÏÌØÚÏ×ÁÎÉÅ: ldd [ëìàþ]... æáêì...\n"
+"      --help              ÎÁÐÅÞÁÔÁÔØ ÜÔÕ ÓÐÒÁ×ËÕ É ×ÙÊÔÉ\n"
+"      --version           ÎÁÐÅÞÁÔÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ\n"
+"  -d, --data-relocs       ÏÂÒÁÂÏÔÁÔØ ÒÅÌÏËÁÃÉÉ ÄÁÎÎÙÈ\n"
+"  -r, --function-relocs   ÏÂÒÁÂÏÔÁÔØ ÒÅÌÏËÁÃÉÉ ÄÁÎÎÙÈ É ÆÕÎËÃÉÊ\n"
+"  -u, --unused            ÎÁÐÅÞÁÔÁÔØ ÎÅÉÓÐÏÌØÚÕÅÍÙÅ ÐÒÑÍÙÅ ÚÁ×ÉÓÉÍÏÓÔÉ\n"
+"  -v, --verbose           ÎÁÐÅÞÁÔÁÔØ ×ÓÀ ÉÎÆÏÒÍÁÃÉÀ\n"
+"éÎÓÔÒÕËÃÉÉ ÐÏ ÓÏÏÂÝÅÎÉÀ Ï ÏÛÉÂËÁÈ ÓÍÏÔÒÉÔÅ ÎÁ\n"
+"<http://www.gnu.org/software/libc/bugs.html>."
+
+#: 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 "ÏÔÓÕÔÓÔ×ÕÀÔ ÁÒÇÕÍÅÎÔÙ, ÚÁÄÁÀÝÉÅ ÆÁÊÌÙ"
 
-#: locale/programs/ld-ctype.c:2486
-msgid "ellipsis range must be marked by two operands of same type"
-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 "îÅÔ ÔÁËÏÇÏ ÆÁÊÌÁ ÉÌÉ ËÁÔÁÌÏÇÁ"
 
-#: locale/programs/ld-ctype.c:2495
-msgid "with symbolic name range values the absolute ellipsis `...' must not be used"
-msgstr "Ó ÓÉÍ×ÏÌØÎÙÍÉ ÉÍÅÎÁÍÉ ÚÎÁÞÅÎÉÊ ÄÉÁÐÁÚÏÎÁ ÎÅÌØÚÑ ÉÓÐÏÌØÚÏ×ÁÔØ ÁÂÓÏÌÀÔÎÙÊ ÜÌÌÉÐÓÉÓ `...'"
+#: elf/ldd.bash.in:151 inet/rcmd.c:483
+msgid "not regular file"
+msgstr "ÎÅ ÏÂÙÞÎÙÊ ÆÁÊÌ"
 
-#: locale/programs/ld-ctype.c:2510
-msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'"
-msgstr "Ó UCS-ÚÎÁÞÅÎÉÑÍÉ ÄÉÁÐÁÚÏÎÁ ÓÌÅÄÕÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÛÅÓÔÎÁÄÃÁÔÉÒÉÞÎÙÊ ÓÉÍ×ÏÌØÎÙÊ ÜÌÌÉÐÓÉÓ `..'"
+#: elf/ldd.bash.in:154
+msgid "warning: you do not have execution permission for"
+msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: Õ ×ÁÓ ÎÅÔ ÐÒÁ× ÎÁ ×ÙÐÏÌÎÅÎÉÅ"
 
-#: locale/programs/ld-ctype.c:2524
-msgid "with character code range values one must use the absolute ellipsis `...'"
-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 "ÚÁ×ÅÒÛÅÎÏ Ó ÎÅÉÚ×ÅÓÔÎÙÍ ×ÙÈÏÄÎÙÍ ËÏÄÏÍ"
 
-#: locale/programs/ld-ctype.c:2675
+#: elf/ldd.bash.in:196
+msgid "error: you do not have read permission for"
+msgstr "ÏÛÉÂËÁ: Õ ×ÁÓ ÎÅÔ ÒÁÚÒÅÛÅÎÉÑ ÎÁ ÞÔÅÎÉÅ"
+
+#: elf/readelflib.c:35
 #, c-format
-msgid "duplicated definition for mapping `%s'"
-msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÏÔÏÂÒÁÖÅÎÉÑ `%s'"
+msgid "file %s is truncated\n"
+msgstr "ÆÁÊÌ %s ÕÓÅÞÅÎ\n"
 
-#: locale/programs/ld-ctype.c:2761 locale/programs/ld-ctype.c:2905
+#: elf/readelflib.c:67
 #, c-format
-msgid "%s: `translit_start' section does not end with `translit_end'"
-msgstr "%s: ÓÅËÃÉÑ `translit_start' ÎÅ ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÎÁ `translit_end'"
+msgid "%s is a 32 bit ELF file.\n"
+msgstr "%s Ñ×ÌÑÅÔÓÑ 32-ÂÉÔÎÙÍ ELF-ÆÁÊÌÏÍ.\n"
 
-#: locale/programs/ld-ctype.c:2856
+#: elf/readelflib.c:69
 #, c-format
-msgid "%s: duplicate `default_missing' definition"
-msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ `default_missing'"
+msgid "%s is a 64 bit ELF file.\n"
+msgstr "%s Ñ×ÌÑÅÔÓÑ 64-ÂÉÔÎÙÍ ELF-ÆÁÊÌÏÍ.\n"
 
-#: locale/programs/ld-ctype.c:2861
-msgid "previous definition was here"
-msgstr "ÐÒÅÄÙÄÕÝÅÅ ÏÐÒÅÄÅÌÅÎÉÅ ÂÙÌÏ ÚÄÅÓØ"
+#: elf/readelflib.c:71
+#, c-format
+msgid "Unknown ELFCLASS in file %s.\n"
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ELFCLASS × ÆÁÊÌÅ %s.\n"
 
-#: locale/programs/ld-ctype.c:2883
+#: elf/readelflib.c:78
 #, c-format
-msgid "%s: no representable `default_missing' definition found"
-msgstr "%s: ÎÅ ÎÁÊÄÅÎÏ ÐÒÅÄÓÔÁ×ÉÍÏÇÏ ÏÐÒÅÄÅÌÅÎÉÑ `default_missing'"
+msgid "%s is not a shared object file (Type: %d).\n"
+msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÒÁÚÄÅÌÑÅÍÙÍ ÏÂßÅËÔÎÙÍ ÆÁÊÌÏÍ (ôÉÐ: %d).\n"
 
-#: locale/programs/ld-ctype.c:3036
+#: elf/readelflib.c:109
 #, c-format
-msgid "%s: character `%s' not defined in charmap while needed as default value"
-msgstr ""
+msgid "more than one dynamic segment\n"
+msgstr "ÂÏÌÅÅ ÏÄÎÏÇÏ ÄÉÎÁÍÉÞÅÓËÉÈ ÓÅÇÍÅÎÔÏ×\n"
 
-#: locale/programs/ld-ctype.c:3041 locale/programs/ld-ctype.c:3125
-#: locale/programs/ld-ctype.c:3145 locale/programs/ld-ctype.c:3166
-#: locale/programs/ld-ctype.c:3187 locale/programs/ld-ctype.c:3208
-#: locale/programs/ld-ctype.c:3229 locale/programs/ld-ctype.c:3269
-#: locale/programs/ld-ctype.c:3290 locale/programs/ld-ctype.c:3357
+#: elf/readlib.c:96
 #, c-format
-msgid "%s: character `%s' in charmap not representable with one byte"
-msgstr ""
+msgid "Cannot fstat file %s.\n"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ fstat ÄÌÑ ÆÁÊÌÁ %s.\n"
 
-#: locale/programs/ld-ctype.c:3120 locale/programs/ld-ctype.c:3140
-#: locale/programs/ld-ctype.c:3182 locale/programs/ld-ctype.c:3203
-#: locale/programs/ld-ctype.c:3224 locale/programs/ld-ctype.c:3264
-#: locale/programs/ld-ctype.c:3285 locale/programs/ld-ctype.c:3352
-#: locale/programs/ld-ctype.c:3394 locale/programs/ld-ctype.c:3419
+#: elf/readlib.c:107
 #, c-format
-msgid "%s: character `%s' not defined while needed as default value"
-msgstr "%s: ÚÎÁË `%s' ÎÅ ÏÐÒÅÄÅÌÅÎ, ÈÏÔÑ ÏΠÎÕÖÅΠËÁË ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+msgid "File %s is empty, not checked."
+msgstr "æÁÊÌ %s ÐÕÓÔ; ÎÅ ÂÙÌ ÐÒÏ×ÅÒÅÎ."
 
-#: locale/programs/ld-ctype.c:3161
+#: elf/readlib.c:113
 #, c-format
-msgid "character `%s' not defined while needed as default value"
-msgstr "ÚÎÁË `%s' ÎÅ ÏÐÒÅÄÅÌÅÎ, ÈÏÔÑ ÏΠÎÕÖÅΠËÁË ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+msgid "File %s is too small, not checked."
+msgstr "æÁÊÌ %s ÓÌÉÛËÏÍ ÍÁÌ; ÎÅ ÂÙÌ ÐÒÏ×ÅÒÅÎ."
 
-#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426
+#: elf/readlib.c:123
 #, c-format
-msgid "%s: character `%s' needed as default value not representable with one byte"
-msgstr "%s: ÚÎÁË `%s' ÎÕÖÅΠËÁË ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ, ÎÏ ÅÇÏ ÎÅÌØÚÑ ÐÒÅÄÓÔÁ×ÉÔØ ÏÄÎÉÍ ÂÁÊÔÏÍ"
+msgid "Cannot mmap file %s.\n"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ × ÐÁÍÑÔØ ÆÁÊÌ %s.\n"
 
-#: locale/programs/ld-ctype.c:3481
-msgid "no output digits defined and none of the standard names in the charmap"
+#: elf/readlib.c:161
+#, 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 ""
+"óÞÉÔÙ×ÁÅÔ É ÏÔÏÂÒÁÖÁÅÔ ÄÁÎÎÙÅ ÐÒÏÆÉÌÉÒÏ×ÁÎÉÑ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ.\véÎÓÔÒÕËÃÉÉ ÐÏ ÓÏÏÂÝÅÎÉÀ Ï ÏÛÉÂËÁÈ ÓÍÏÔÒÉÔÅ ÎÁ\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
+
+#: elf/sprof.c:94
+msgid "SHOBJ [PROFDATA]"
+msgstr "òáúä-ïâÿåëô [ðòïæ-äáîîùå]"
 
-#: locale/programs/ld-ctype.c:3772
+#: elf/sprof.c:400
 #, c-format
-msgid "%s: transliteration data from locale `%s' not available"
-msgstr "%s: ÎÅÔ ÄÁÎÎÙÈ ÄÌÑ ÔÒÁÎÓÌÉÔÅÒÁÃÉÉ ÉÚ ÌÏËÁÌÉ `%s'"
+msgid "failed to load shared object `%s'"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔ `%s'"
 
-#: locale/programs/ld-ctype.c:3868
+#: elf/sprof.c:409
 #, c-format
-msgid "%s: table for class \"%s\": %lu bytes\n"
-msgstr "%s: ÔÁÂÌÉÃÁ ÄÌÑ ËÌÁÓÓÁ \"%s\": %lu ÂÁÊÔ\n"
+msgid "cannot create internal descriptors"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÎÕÔÒÅÎÎÉÅ ÄÅÓËÒÉÐÔÏÒÙ"
 
-#: locale/programs/ld-ctype.c:3937
+#: elf/sprof.c:528
 #, c-format
-msgid "%s: table for map \"%s\": %lu bytes\n"
-msgstr ""
+msgid "Reopening shared object `%s' failed"
+msgstr "óÂÏÊ ÐÏ×ÔÏÒÎÏÇÏ ÏÔËÒÙÔÉÑ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ `%s'"
 
-#: locale/programs/ld-ctype.c:4070
+#: elf/sprof.c:535 elf/sprof.c:629
 #, c-format
-msgid "%s: table for width: %lu bytes\n"
-msgstr "%s: ÔÁÂÌÉÃÁ ÄÌÑ ÛÉÒÉÎÙ: %lu ÂÁÊÔ\n"
+msgid "reading of section headers failed"
+msgstr "ÞÔÅÎÉÅ ÚÁÇÏÌÏ×ËÏ× ÓÅËÃÉÉ ÎÅÕÓÐÅÛÎÏ"
 
-#: locale/programs/ld-identification.c:171
+#: elf/sprof.c:543 elf/sprof.c:637
 #, c-format
-msgid "%s: no identification for category `%s'"
-msgstr "%s: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÃÉÉ ÄÌÑ ËÁÔÅÇÏÒÉÉ `%s'"
+msgid "reading of section header string table failed"
+msgstr "ÞÔÅÎÉÅ ÓÔÒÏËÉ ÚÁÇÏÌÏ×ËÁ ÓÅËÃÉÉ ÎÅÕÓÐÅÛÎÏ"
 
-#: locale/programs/ld-identification.c:436
+#: elf/sprof.c:569
 #, c-format
-msgid "%s: duplicate category version definition"
-msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ×ÅÒÓÉÉ ËÁÔÅÇÏÒÉÉ"
+msgid "*** Cannot read debuginfo file name: %m\n"
+msgstr "*** îÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÆÁÊÌ Ó ÏÔÌÁÄÏÞÎÏÊ ÉÎÆÏÒÍÁÃÉÅÊ: %m\n"
 
-#: locale/programs/ld-measurement.c:114
+#: elf/sprof.c:589
 #, c-format
-msgid "%s: invalid value for field `%s'"
-msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s'"
+msgid "cannot determine file name"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÉÍÑ ÆÁÊÌÁ"
 
-#: locale/programs/ld-messages.c:115 locale/programs/ld-messages.c:149
+#: elf/sprof.c:622
 #, c-format
-msgid "%s: field `%s' undefined"
-msgstr "%s: ÐÏÌÅ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎÏ"
+msgid "reading of ELF header failed"
+msgstr "ÓÞÉÔÙ×ÁÎÉÅ ÚÁÇÏÌÏ×ËÁ ELF ÎÅÕÓÐÅÛÎÏ"
 
-#: locale/programs/ld-messages.c:122 locale/programs/ld-messages.c:156
+#: elf/sprof.c:658
 #, c-format
-msgid "%s: value for field `%s' must not be an empty string"
-msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÏ ÂÙÔØ ÐÕÓÔÏÊ ÓÔÒÏËÏÊ"
+msgid "*** The file `%s' is stripped: no detailed analysis possible\n"
+msgstr "*** æÁÊÌ `%s' ÏÞÉÝÅÎ: ÐÏÄÒÏÂÎÙÊ ÁÎÁÌÉÚ ÎÅ×ÏÚÍÏÖÅÎ\n"
 
-#: locale/programs/ld-messages.c:138 locale/programs/ld-messages.c:172
+#: elf/sprof.c:688
 #, c-format
-msgid "%s: no correct regular expression for field `%s': %s"
-msgstr "%s: ÎÅÔ ÐÒÁ×ÉÌØÎÏÇÏ ÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ ÄÌÑ ÐÏÌÑ `%s': %s"
+msgid "failed to load symbol data"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ ÄÁÎÎÙÅ Ï ÓÉÍ×ÏÌÁÈ"
 
-#: locale/programs/ld-monetary.c:224
+#: elf/sprof.c:755
 #, c-format
-msgid "%s: value of field `int_curr_symbol' has wrong length"
-msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `int_curr_symbol' ÉÍÅÅÔ ÎÅÐÒÁ×ÉÌØÎÕÀ ÄÌÉÎÕ"
+msgid "cannot load profiling data"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÅ ÄÁÎÎÙÅ"
 
-#: locale/programs/ld-monetary.c:237
+#: elf/sprof.c:764
 #, 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"
+msgid "while stat'ing profiling data file"
+msgstr "ÐÒÉ ÏÐÅÒÁÃÉÉ stat ÎÁÄ ÆÁÊÌÏÍ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ"
 
-#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:119
+#: elf/sprof.c:772
 #, c-format
-msgid "%s: value for field `%s' must not be the empty string"
-msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÏ ÂÙÔØ ÐÕÓÔÏÊ ÓÔÒÏËÏÊ"
+msgid "profiling data file `%s' does not match shared object `%s'"
+msgstr "ÆÁÊÌ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ `%s' ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÒÁÚÄÅÌÑÅÍÏÍÕ ÏÂßÅËÔÕ `%s'"
 
-#: locale/programs/ld-monetary.c:284 locale/programs/ld-monetary.c:314
+#: elf/sprof.c:783
 #, c-format
-msgid "%s: value for field `%s' must be in range %d...%d"
-msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÄÏÌÖÎÏ ÂÙÔØ × ÄÉÁÐÁÚÏÎÅ %d...%d"
+msgid "failed to mmap the profiling data file"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÔÏÂÒÁÚÉÔØ × ÐÁÍÑÔØ ÆÁÊÌ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ"
 
-#: locale/programs/ld-monetary.c:746 locale/programs/ld-numeric.c:275
+#: elf/sprof.c:791
 #, c-format
-msgid "%s: value for field `%s' must be a single character"
-msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÄÏÌÖÎÏ ÂÙÔØ ÏÄÎÉÍ ÚÎÁËÏÍ"
+msgid "error while closing the profiling data file"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ ÆÁÊÌÁ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ"
 
-#: locale/programs/ld-monetary.c:843 locale/programs/ld-numeric.c:319
+#: elf/sprof.c:800 elf/sprof.c:870
 #, c-format
-msgid "%s: `-1' must be last entry in `%s' field"
-msgstr "%s: `-1' ÄÏÌÖÎÏ ÂÙÔØ ÐÏÓÌÅÄÎÉÍ ×ÈÏÖÄÅÎÉÅ × ÐÏÌÅ `%s'"
+msgid "cannot create internal descriptor"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÎÕÔÒÅÎÎÉÊ ÄÅÓËÒÉÐÔÏÒ"
 
-#: locale/programs/ld-monetary.c:865 locale/programs/ld-numeric.c:340
+#: elf/sprof.c:846
 #, c-format
-msgid "%s: values for field `%s' must be smaller than 127"
-msgstr "%s: ÚÎÁÞÅÎÉÑ ÐÏÌÑ `%s' ÄÏÌÖÎÙ ÂÙÔØ ÍÅÎØÛÅ 127"
-
-#: locale/programs/ld-monetary.c:908
-msgid "conversion rate value cannot be zero"
-msgstr ""
+msgid "`%s' is no correct profile data file for `%s'"
+msgstr "`%s' ÎÅ Ñ×ÌÑÅÔÓÑ ×ÅÒÎÙÍ ÆÁÊÌÏÍ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ ÄÌÑ `%s'"
 
-#: locale/programs/ld-name.c:130 locale/programs/ld-telephone.c:127
-#: locale/programs/ld-telephone.c:150
+#: elf/sprof.c:1027 elf/sprof.c:1085
 #, c-format
-msgid "%s: invalid escape sequence in field `%s'"
-msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ÐÏÌÅ `%s'"
+msgid "cannot allocate symbol data"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÄÁÎÎÙÅ ÓÉÍ×ÏÌÁ"
 
-#: locale/programs/ld-time.c:248
+#: iconv/iconv_charmap.c:175 iconv/iconv_prog.c:315
 #, c-format
-msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'"
-msgstr "%s: ÆÌÁÇ ÎÁÐÒÁ×ÌÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era' ÎÅ '+' É ÎÅ '-'"
+msgid "error while closing input `%s'"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ `%s'"
 
-#: locale/programs/ld-time.c:259
+#: iconv/iconv_charmap.c:449
 #, c-format
-msgid "%s: direction flag in string %Zd in `era' field is not a single character"
-msgstr "%s:  ÆÌÁÇ ÎÁÐÒÁ×ÌÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era' ÎÅ Ñ×ÌÑÅÔÓÑ ÏÄÎÉÍ ÚÎÁËÏÍ"
+msgid "illegal input sequence at position %Zd"
+msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ×ÈÏÄÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ÐÏÚÉÃÉÉ %Zd"
 
-#: locale/programs/ld-time.c:272
+#: iconv/iconv_charmap.c:468 iconv/iconv_prog.c:525
 #, c-format
-msgid "%s: invalid number for offset in string %Zd in `era' field"
-msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÏÅ ÞÉÓÌÏ ÄÌÑ ÓÍÅÝÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+msgid "incomplete character or shift sequence at end of buffer"
+msgstr "ÎÅÐÏÌÎÙÊ ÚÎÁË ÉÌÉ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÓÄ×ÉÇÁ × ËÏÎÃÅ ÂÕÆÅÒÁ"
 
-#: locale/programs/ld-time.c:280
+#: iconv/iconv_charmap.c:513 iconv/iconv_charmap.c:549 iconv/iconv_prog.c:568
+#: iconv/iconv_prog.c:604
 #, c-format
-msgid "%s: garbage at end of offset value in string %Zd in `era' field"
-msgstr "%s: ÍÕÓÏÒ × ËÏÎÃÅ ÚÎÁÞÅÎÉÑ ÓÍÅÝÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+msgid "error while reading the input"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ ×ÈÏÄÎÏÇÏ ÆÁÊÌÁ"
 
-#: locale/programs/ld-time.c:331
+#: iconv/iconv_charmap.c:531 iconv/iconv_prog.c:586
 #, c-format
-msgid "%s: invalid starting date in string %Zd in `era' field"
-msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÁÑ ÎÁÞÁÌØÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+msgid "unable to allocate buffer for input"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÂÕÆÅÒ ÄÌÑ ××ÏÄÁ"
 
-#: locale/programs/ld-time.c:340
-#, c-format
-msgid "%s: garbage at end of starting date in string %Zd in `era' field "
-msgstr "%s: ÍÕÓÏÒ × ËÏÎÃÅ ÎÁÞÁÌØÎÏÊ ÄÁÔÙ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+#: iconv/iconv_prog.c:59
+msgid "Input/Output format specification:"
+msgstr "óÐÅÃÉÆÉËÁÃÉÑ ÆÏÒÍÁÔÁ ××ÏÄÁ/×Ù×ÏÄÁ:"
 
-#: locale/programs/ld-time.c:359
-#, c-format
-msgid "%s: starting date is invalid in string %Zd in `era' field"
-msgstr "%s: ÎÅ×ÅÒÎÁÑ ÎÁÞÁÌØÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+#: iconv/iconv_prog.c:60
+msgid "encoding of original text"
+msgstr "ËÏÄÉÒÏ×ËÁ ÏÒÉÇÉÎÁÌØÎÏÇÏ ÔÅËÓÔÁ"
+
+#: iconv/iconv_prog.c:61
+msgid "encoding for output"
+msgstr "ËÏÄÉÒÏ×ËÁ ÄÌÑ ×Ù×ÏÄÁ"
+
+#: iconv/iconv_prog.c:62
+msgid "Information:"
+msgstr "éÎÆÏÒÍÁÃÉÑ:"
+
+#: iconv/iconv_prog.c:63
+msgid "list all known coded character sets"
+msgstr "ÐÅÒÅÞÉÓÌÉÔØ ×ÓÅ ÉÚ×ÅÓÔÎÙÅ ×ÓÔÒÏÅÎÎÙÅ ËÏÄÉÒÏ×ËÉ"
+
+#: iconv/iconv_prog.c:64 locale/programs/localedef.c:126
+msgid "Output control:"
+msgstr "õÓÐÒÁ×ÌÅÎÉÅ ×Ù×ÏÄÏÍ:"
+
+#: iconv/iconv_prog.c:65
+msgid "omit invalid characters from output"
+msgstr "ÐÒÏÐÕÓËÁÔØ ÎÁ ×Ù×ÏÄÅ ÎÅÄÏÐÕÓÔÉÍÙÅ ÚÎÁËÉ"
+
+#: iconv/iconv_prog.c:66
+msgid "output file"
+msgstr "×ÙÈÏÄÎÏÊ ÆÁÊÌ"
+
+#: iconv/iconv_prog.c:67
+msgid "suppress warnings"
+msgstr "ÎÅ ÐÅÞÁÔÁÔØ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ"
+
+#: iconv/iconv_prog.c:68
+msgid "print progress information"
+msgstr "ÐÅÞÁÔÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÈÏÄÅ ÒÁÂÏÔÙ"
+
+#: iconv/iconv_prog.c:73
+msgid "Convert encoding of given files from one encoding to another."
+msgstr "ðÒÅÏÂÒÁÚÕÅÔ ÕËÁÚÁÎÎÙÅ ÆÁÊÌÙ ÉÚ ÏÄÎÏÊ ËÏÄÉÒÏ×ËÉ × ÄÒÕÇÕÀ."
+
+#: iconv/iconv_prog.c:77
+msgid "[FILE...]"
+msgstr "[æáêì...]"
 
-#: locale/programs/ld-time.c:408
+#: iconv/iconv_prog.c:199
 #, c-format
-msgid "%s: invalid stopping date in string %Zd in `era' field"
-msgstr "%s: ÎÅ×ÅÒÎÁÑ ËÏÎÅÞÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+msgid "cannot open output file"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ"
 
-#: locale/programs/ld-time.c:417
+#: iconv/iconv_prog.c:241
 #, c-format
-msgid "%s: garbage at end of stopping date in string %Zd in `era' field"
-msgstr "%s: ÍÕÓÏÒ × ËÏÎÃÅ ËÏÎÅÞÎÏÊ ÄÁÔÙ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+msgid "conversions from `%s' and to `%s' are not supported"
+msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÉÚ `%s' É × `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ"
 
-#: locale/programs/ld-time.c:436
+#: iconv/iconv_prog.c:246
 #, c-format
-msgid "%s: stopping date is invalid in string %Zd in `era' field"
-msgstr "%s: ÎÅ×ÅÒÎÁÑ ËÏÎÅÞÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+msgid "conversion from `%s' is not supported"
+msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
 
-#: locale/programs/ld-time.c:445
+#: iconv/iconv_prog.c:253
 #, c-format
-msgid "%s: missing era name in string %Zd in `era' field"
-msgstr "%s: ÐÒÏÐÕÝÅÎÏ ÉÍÑ ÜÒÙ × ÓÔÒÏËÅ %Zd  × ÐÏÌÅ `era'"
+msgid "conversion to `%s' is not supported"
+msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ × `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
 
-#: locale/programs/ld-time.c:457
+#: iconv/iconv_prog.c:257
 #, c-format
-msgid "%s: missing era format in string %Zd in `era' field"
-msgstr "%s: ÐÒÏÐÕÝÅΠÆÏÒÍÁÔ ÜÒÙ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+msgid "conversion from `%s' to `%s' is not supported"
+msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÉÚ `%s' × `%s' ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
 
-#: locale/programs/ld-time.c:486
+#: iconv/iconv_prog.c:267
 #, c-format
-msgid "%s: third operand for value of field `%s' must not be larger than %d"
-msgstr "%s: ÔÒÅÔÉÊ ÏÐÅÒÁÎÄ ÄÌÑ ÚÎÁÞÅÎÉÑ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÅΠÂÙÔØ ÂÏÌØÛÅ %d"
+msgid "failed to start conversion processing"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÎÁÞÁÔØ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ"
 
-#: locale/programs/ld-time.c:494 locale/programs/ld-time.c:502
+#: iconv/iconv_prog.c:361
 #, c-format
-msgid "%s: values of field `%s' must not be larger than %d"
-msgstr "%s: ÚÎÁÞÅÎÉÑ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÙ ÂÙÔØ ÂÏÌØÛÅ %d"
+msgid "error while closing output file"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ"
 
-#: locale/programs/ld-time.c:510
+#: iconv/iconv_prog.c:470 iconv/iconv_prog.c:496
 #, c-format
-msgid "%s: values for field `%s' must not be larger than %d"
-msgstr "%s: ÚÎÁÞÅÎÉÑ ÄÌÑ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÙ ÂÙÔØ ÂÏÌØÛÅ %d"
+msgid "conversion stopped due to problem in writing the output"
+msgstr "ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ ÏÓÔÁÎÏ×ÌÅÎÏ ÉÚ-ÚÁ ÐÒÏÂÌÅÍÙ ÐÒÉ ÚÁÐÉÓÉ ×Ù×ÏÄÁ"
 
-#: locale/programs/ld-time.c:986
+#: iconv/iconv_prog.c:521
 #, c-format
-msgid "%s: too few values for field `%s'"
-msgstr "%s: ÓÌÉÛËÏÍ ÍÁÌÏ ÚÎÁÞÅÎÉÊ ÄÌÑ ÐÏÌÑ `%s'"
+msgid "illegal input sequence at position %ld"
+msgstr "ÎÅÄÏÐÕÓÔÉÍÁÑ ×ÈÏÄÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ÐÏÚÉÃÉÉ %ld"
 
-#: locale/programs/ld-time.c:1031
-msgid "extra trailing semicolon"
-msgstr "ÌÉÛÎÅÅ Ä×ÏÅÔÏÞÉÅ × ËÏÎÃÅ"
+#: iconv/iconv_prog.c:529
+#, c-format
+msgid "internal error (illegal descriptor)"
+msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ (ÎÅ×ÅÒÎÙÊ ÄÅÓËÒÉÐÔÏÒ)"
 
-#: locale/programs/ld-time.c:1034
+#: iconv/iconv_prog.c:532
 #, c-format
-msgid "%s: too many values for field `%s'"
-msgstr "%s: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÚÎÁÞÅÎÉÊ ÄÌÑ ÐÏÌÑ `%s'"
+msgid "unknown iconv() error %d"
+msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ iconv() %d"
 
-#: locale/programs/linereader.c:130
-msgid "trailing garbage at end of line"
-msgstr "ÍÕÓÏÒ × ËÏÎÃÅ ÓÔÒÏËÉ"
+#: iconv/iconv_prog.c:778
+msgid ""
+"The following list contain all the coded character sets known.  This does\n"
+"not necessarily mean that all combinations of these names can be used for\n"
+"the FROM and TO command line parameters.  One coded character set can be\n"
+"listed with several different names (aliases).\n"
+"\n"
+"  "
+msgstr ""
+"óÌÅÄÕÀÝÉÊ ÓÐÉÓÏË ÓÏÄÅÒÖÉÔ ×ÓÅ ÉÚ×ÅÓÔÎÙÅ ×ÓÔÒÏÅÎÎÙÅ ËÏÄÉÒÏ×ËÉ.  üÔÏ ÎÅ\n"
+"ÏÂÑÚÁÔÅÌØÎÏ ÏÚÎÁÞÁÅÔ, ÞÔÏ ÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÌÀÂÙÅ ËÏÍÂÉÎÁÃÉÉ ÄÁÎÎÙÈ\n"
+"ÉÍÅΠנÐÁÒÁÍÅÔÒÁÈ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ FROM É TO.  ïÄÎÁ É ÔÁ ÖÅ ËÏÄÉÒÏ×ËÁ\n"
+"ÍÏÖÅÔ ÂÙÔØ ÐÅÒÅÞÉÓÌÅÎÁ ÐÏÄ ÎÅÓËÏÌØËÉÍÉ ÉÍÅÎÁÍÉ (ÐÓÅ×ÄÏÎÉÍÁÍÉ).\n"
+"\n"
+"  "
 
-#: locale/programs/linereader.c:304
-msgid "garbage at end of number"
-msgstr "ÍÕÓÏÒ × ËÏÎÃÅ ÞÉÓÌÁ"
+#: iconv/iconvconfig.c:109
+msgid "Create fastloading iconv module configuration file."
+msgstr "óÏÚÄÁÅÔ ÂÙÓÔÒÏÚÁÇÒÕÖÁÅÍÙÊ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ ÍÏÄÕÌÑ iconv."
 
-#: locale/programs/linereader.c:416
-msgid "garbage at end of character code specification"
-msgstr "ÍÕÓÏÒ × ËÏÎÃÅ ÓÐÅÃÉÆÉËÁÃÉÉ ËÏÄÁ ÚÎÁËÁ"
+#: iconv/iconvconfig.c:113
+msgid "[DIR...]"
+msgstr "[ëáôáìïç...]"
 
-#: locale/programs/linereader.c:502
-msgid "unterminated symbolic name"
-msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÏÅ ÓÉÍ×ÏÌØÎÏÅ ÉÍÑ"
+#: iconv/iconvconfig.c:126
+msgid "Prefix used for all file accesses"
+msgstr "ðÒÅÆÉËÓ, ÉÓÐÏÌØÚÕÅÍÙÊ ÄÌÑ ÄÏÓÔÕÐÁ ËÏ ×ÓÅÍ ÆÁÊÌÁÍ"
 
-#: locale/programs/linereader.c:566 catgets/gencat.c:1195
-msgid "invalid escape sequence"
-msgstr "ÎÅ×ÅÒÎÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ"
+#: iconv/iconvconfig.c:127
+msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)"
+msgstr "úÁÐÉÓÁÔØ ×Ù×ÏÄ × æáêì, Á ÎÅ × ÍÅÓÔÏ ÕÓÔÁÎÏ×ËÉ (--prefix ÎÅ ÐÒÉÍÅÎÑÅÔÓÑ Ë æáêìõ)"
 
-#: locale/programs/linereader.c:629
-msgid "illegal escape sequence at end of string"
-msgstr "ÎÅ×ÅÒÎÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ËÏÎÃÅ ÓÔÒÏËÉ"
+#: iconv/iconvconfig.c:131
+msgid "Do not search standard directories, only those on the command line"
+msgstr "îÅ ÉÓËÁÔØ × ÓÔÁÎÄÁÒÔÎÙÈ ËÁÔÁÌÏÇÁÈ, Á ÔÏÌØËÏ × ÕËÁÚÁÎÎÙÈ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ"
 
-#: locale/programs/linereader.c:633 locale/programs/linereader.c:861
-msgid "unterminated string"
-msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÓÔÒÏËÁ"
+#: iconv/iconvconfig.c:300
+#, c-format
+msgid "Directory arguments required when using --nostdlib"
+msgstr "ðÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ --nostdlib ÔÒÅÂÕÅÔÓÑ ÚÁÄÁ×ÁÔØ ÁÒÇÕÍÅÎÔÙ-ËÁÔÁÌÏÇÉ"
 
-#: locale/programs/linereader.c:675
-msgid "non-symbolic character value should not be used"
-msgstr "ÎÅ ÓÔÏÉÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÎÅÓÉÍ×ÏÌØÎÏÅ ÚÎÁËÏ×ÏÅ ÚÎÁÞÅÎÉÅ"
+#: iconv/iconvconfig.c:342 locale/programs/localedef.c:290
+#, c-format
+msgid "no output file produced because warnings were issued"
+msgstr "×ÙÈÏÄÎÏÊ ÆÁÊÌ ÎÅ ÓÏÚÄÁÎ, ÐÏÓËÏÌØËÕ ÂÙÌÉ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ"
 
-#: locale/programs/linereader.c:822
+#: iconv/iconvconfig.c:428
 #, c-format
-msgid "symbol `%.*s' not in charmap"
-msgstr ""
+msgid "while inserting in search tree"
+msgstr "ÐÒÉ ×ÓÔÁ×ËÅ × ÄÅÒÅ×Ï ÐÏÉÓËÁ"
 
-#: locale/programs/linereader.c:843
+#: iconv/iconvconfig.c:1236
 #, c-format
-msgid "symbol `%.*s' not in repertoire map"
-msgstr ""
+msgid "cannot generate output file"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÇÅÎÅÒÉÒÏ×ÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ"
 
-#: locale/programs/locale.c:75
-msgid "System information:"
-msgstr "éÎÆÏÒÍÁÃÉÑ Ï ÓÉÓÔÅÍÅ:"
+#: inet/rcmd.c:157
+msgid "rcmd: Cannot allocate memory\n"
+msgstr "rcmd: îÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ\n"
 
-#: locale/programs/locale.c:77
-msgid "Write names of available locales"
-msgstr "îÁÐÉÓÁÔØ ÉÍÅÎÁ ÄÏÓÔÕÐÎÙÈ ÌÏËÁÌÅÊ"
+#: inet/rcmd.c:172
+msgid "rcmd: socket: All ports in use\n"
+msgstr "rcmd: socket: ÷ÓÅ ÐÏÒÔÙ ÉÓÐÏÌØÚÕÀÔÓÑ\n"
 
-#: locale/programs/locale.c:79
-msgid "Write names of available charmaps"
-msgstr ""
+#: inet/rcmd.c:200
+#, c-format
+msgid "connect to address %s: "
+msgstr "ÓÏÅÄÉÎÅÎÉÅ Ó ÁÄÒÅÓÏÍ %s: "
 
-#: locale/programs/locale.c:80
-msgid "Modify output format:"
-msgstr "éÚÍÅÎÅÎÉÅ ×ÙÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ:"
+#: inet/rcmd.c:213
+#, c-format
+msgid "Trying %s...\n"
+msgstr "ðÏÐÙÔËÁ %s...\n"
 
-#: locale/programs/locale.c:81
-msgid "Write names of selected categories"
-msgstr "îÁÐÉÓÁÔØ ÉÍÅÎÁ ×ÙÂÒÁÎÎÙÈ ËÁÔÅÇÏÒÉÊ"
+#: inet/rcmd.c:249
+#, c-format
+msgid "rcmd: write (setting up stderr): %m\n"
+msgstr "rcmd: write (ÎÁÓÔÒÏÊËÁ stderr): %m\n"
 
-#: locale/programs/locale.c:82
-msgid "Write names of selected keywords"
-msgstr "îÁÐÉÓÁÔØ ÉÍÅÎÁ ×ÙÂÒÁÎÎÙÈ ËÌÀÞÅ×ÙÈ ÓÌÏ×"
+#: inet/rcmd.c:265
+#, c-format
+msgid "rcmd: poll (setting up stderr): %m\n"
+msgstr "rcmd: poll (ÎÁÓÔÒÏÊËÁ stderr): %m\n"
 
-#: locale/programs/locale.c:83
-msgid "Print more information"
-msgstr "îÁÐÅÞÁÔÁÔØ ÂÏÌØÛÅ ÉÎÆÏÒÍÁÃÉÉ"
+#: inet/rcmd.c:268
+msgid "poll: protocol failure in circuit setup\n"
+msgstr "poll: ÓÂÏÊ ÐÒÏÔÏËÏÌÁ ÐÒÉ ÎÁÓÔÒÏÊËÅ ÃÅÐÉ\n"
 
-#: locale/programs/locale.c:88
-msgid "Get locale-specific information."
-msgstr "ðÏÌÕÞÁÅÔ ÓÐÅÃÉÆÉÞÎÕÀ ÄÌÑ ÌÏËÁÌÉ ÉÎÆÏÒÍÁÃÉÀ."
+#: inet/rcmd.c:301
+msgid "socket: protocol failure in circuit setup\n"
+msgstr "socket: ÓÂÏÊ ÐÒÏÔÏËÏÌÁ ÐÒÉ ÎÁÓÔÒÏÊËÅ ÃÅÐÉ\n"
 
-#: locale/programs/locale.c:91
-msgid ""
-"NAME\n"
-"[-a|-m]"
-msgstr ""
-"éíñ\n"
-"[-a|-m]"
+#: inet/rcmd.c:325
+#, c-format
+msgid "rcmd: %s: short read"
+msgstr "rcmd: %s: ÎÅÐÏÌÎÏÅ ÞÔÅÎÉÅ"
 
-#: locale/programs/locale.c:195
-msgid "Cannot set LC_CTYPE to default locale"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_CTYPE × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ."
+#: inet/rcmd.c:481
+msgid "lstat failed"
+msgstr "lstat ÎÅÕÓÐÅÛÎÁ"
 
-#: locale/programs/locale.c:197
-msgid "Cannot set LC_MESSAGES to default locale"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_MESSAGES × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ."
-
-#: locale/programs/locale.c:210
-msgid "Cannot set LC_COLLATE to default locale"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_COLLATE × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ."
-
-#: locale/programs/locale.c:226
-msgid "Cannot set LC_ALL to default locale"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_ALL × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ."
-
-#: locale/programs/locale.c:517
-msgid "while preparing output"
-msgstr "ÐÒÉ ÐÏÄÇÏÔÏ×ËÅ ×Ù×ÏÄÁ"
-
-#: locale/programs/localedef.c:121
-msgid "Input Files:"
-msgstr "÷ÈÏÄÎÙÅ ÆÁÊÌÙ:"
-
-#: locale/programs/localedef.c:123
-msgid "Symbolic character names defined in FILE"
-msgstr "óÉÍ×ÏÌØÎÙÅ ÉÍÅÎÁ ÚÎÁËÏ× ÏÂßÑ×ÌÅÎÙ × æáêìå"
-
-#: locale/programs/localedef.c:124
-msgid "Source definitions are found in FILE"
-msgstr "éÓÈÏÄÎÙÅ ÏÐÒÅÄÅÌÅÎÉÑ ÎÁÈÏÄÑÔÓÑ × æáêìå"
-
-#: locale/programs/localedef.c:126
-msgid "FILE contains mapping from symbolic names to UCS4 values"
-msgstr "æáêì ÓÏÄÅÒÖÉÔ ÏÔÏÂÒÁÖÅÎÉÑ ÉÚ ÓÉÍ×ÏÌØÎÙÈ ÉÍÅΠנÚÎÁÞÅÎÉÑ UCS4"
+#: inet/rcmd.c:488
+msgid "cannot open"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ"
 
-#: locale/programs/localedef.c:130
-msgid "Create output even if warning messages were issued"
-msgstr "óÏÚÄÁ×ÁÔØ ×Ù×ÏÄ, ÄÁÖÅ ÅÓÌÉ ÂÙÌÉ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ"
+#: inet/rcmd.c:490
+msgid "fstat failed"
+msgstr "fstat ÎÅÕÓÐÅÛÎÁ"
 
-#: locale/programs/localedef.c:131
-msgid "Create old-style tables"
-msgstr "óÏÚÄÁ×ÁÔØ ÔÁÂÌÉÃÙ × ÓÔÁÒÏÍ ÓÔÉÌÅ"
+#: inet/rcmd.c:492
+msgid "bad owner"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÙÊ ×ÌÁÄÅÌÅÃ"
 
-#: locale/programs/localedef.c:132
-msgid "Optional output file prefix"
-msgstr "îÅÏÂÑÚÁÔÅÌØÎÙÊ ÐÒÅÆÉËÓ ÄÌÑ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×"
+#: inet/rcmd.c:494
+msgid "writeable by other than owner"
+msgstr "ÍÏÖÅÔ ÚÁÐÉÓÙ×ÁÔØÓÑ ÎÅ ×ÌÁÄÅÌØÃÅÍ"
 
-#: locale/programs/localedef.c:133
-msgid "Be strictly POSIX conform"
-msgstr "óÔÒÏÇÏ ÓÌÅÄÏ×ÁÔØ ÓÔÁÎÄÁÒÔÕ POSIX"
+#: inet/rcmd.c:496
+msgid "hard linked somewhere"
+msgstr "ÉÍÅÅÔÓÑ ÖÅÓÔËÁÑ ÓÓÙÌËÁ"
 
-#: locale/programs/localedef.c:135
-msgid "Suppress warnings and information messages"
-msgstr "îÅ ×Ù×ÏÄÉÔØ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ É ÉÎÆÏÒÍÁÃÉÏÎÎÙÅ ÓÏÏÂÝÅÎÉÑ"
+#: inet/ruserpass.c:170 inet/ruserpass.c:193
+msgid "out of memory"
+msgstr "ÎÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ"
 
-#: locale/programs/localedef.c:136
-msgid "Print more messages"
-msgstr "ðÅÞÁÔÁÔØ ÂÏÌØÛÅ ÓÏÏÂÝÅÎÉÊ"
+#: inet/ruserpass.c:184
+msgid "Error: .netrc file is readable by others."
+msgstr "ïÛÉÂËÁ: ÆÁÊÌ .netrc ÍÏÖÅÔ ÚÁÐÉÓÙ×ÁÔØÓÑ ÄÒÕÇÉÍÉ."
 
-#: locale/programs/localedef.c:137
-msgid "Archive control:"
-msgstr "õÐÒÁ×ÌÅÎÉÅ ÁÒÈÉ×ÏÍ:"
+#: inet/ruserpass.c:185
+msgid "Remove password or make file unreadable by others."
+msgstr "õÄÁÌÉÔÅ ÐÁÒÏÌØ ÉÌÉ ÓÄÅÌÁÊÔÅ ÆÁÊÌ ÎÅÞÉÔÁÅÍÙÍ ÄÒÕÇÉÍÉ."
 
-#: locale/programs/localedef.c:139
-msgid "Don't add new data to archive"
-msgstr "îÅ ÄÏÂÁ×ÌÑÔØ × ÁÒÈÉ× ÎÏ×ÙÅ ÄÁÎÎÙÅ"
+#: inet/ruserpass.c:277
+#, c-format
+msgid "Unknown .netrc keyword %s"
+msgstr "îÅÉÚ×ÅÓÔÎÏÅ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï .netrc %s"
 
-#: locale/programs/localedef.c:141
-msgid "Add locales named by parameters to archive"
-msgstr "äÏÂÁ×ÉÔØ × ÁÒÈÉ× ÌÏËÁÌÉ, ÕËÁÚÁÎÎÙÅ × ÐÁÒÁÍÅÔÒÁÈ"
+#: libidn/nfkc.c:464
+msgid "Character out of range for UTF-8"
+msgstr "úÎÁË ×ÎÅ ÄÉÁÐÁÚÏÎÁ ÄÌÑ UTF-8"
 
-#: locale/programs/localedef.c:142
-msgid "Replace existing archive content"
-msgstr "úÁÍÅÎÉÔØ ÓÕÝÅÓÔ×ÕÀÝÅÅ ÓÏÄÅÒÖÉÍÏÅ ÁÒÈÉ×Á"
+#: locale/programs/charmap-dir.c:57
+#, c-format
+msgid "cannot read character map directory `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ËÁÔÁÌÏÇ ÏÔÏÂÒÁÖÅÎÉÊ ÚÎÁËÏ× `%s'"
 
-#: locale/programs/localedef.c:144
-msgid "Remove locales named by parameters from archive"
-msgstr "õÄÁÌÉÔØ ÉÚ ÁÒÈÉ×Á ÌÏËÁÌÉ, ÕËÁÚÁÎÎÙÅ × ÐÁÒÁÍÅÔÒÁÈ"
+#: locale/programs/charmap.c:137
+#, c-format
+msgid "character map file `%s' not found"
+msgstr "ÆÁÊÌ ÏÔÏÂÒÁÖÅÎÉÊ ÚÎÁËÏ× `%s' ÎÅ ÎÁÊÄÅÎ"
 
-#: locale/programs/localedef.c:145
-msgid "List content of archive"
-msgstr "ðÅÒÅÞÉÓÌÉÔØ ÓÏÄÅÒÖÉÍÏÅ ÁÒÈÉ×Á"
+#: locale/programs/charmap.c:194
+#, c-format
+msgid "default character map file `%s' not found"
+msgstr "ÐÒÉÍÅÎÑÅÍÙÊ ÐÏ ÕÍÏÌÞÁÎÉÀ ÆÁÊÌ ÏÔÏÂÒÁÖÅÎÉÊ ÚÎÁËÏ× `%s' ÎÅ ÎÁÊÄÅÎ"
 
-#: locale/programs/localedef.c:147
-msgid "locale.alias file to consult when making archive"
-msgstr "ÆÁÊÌ locale.alias, Ë ËÏÔÏÒÏÍÕ ÓÌÅÄÕÅÔ ÏÂÒÁÝÁÔØÓÑ ÐÒÉ ÓÏÚÄÁÎÉÉ ÁÒÈÉ×Á"
+#: locale/programs/charmap.c:257
+#, c-format
+msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n"
+msgstr "ÏÔÏÂÒÁÖÅÎÉÅ ÚÎÁËÏ× `%s' ÎÅ ÓÏ×ÍÅÓÔÉÍÏ Ó ASCII, ÌÏËÁÌØ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÓÔÁÎÄÁÒÔÕ ISO C\n"
 
-#: locale/programs/localedef.c:152
-msgid "Compile locale specification"
-msgstr "ëÏÍÐÉÌÉÒÕÅÔ ÓÐÅÃÉÆÉËÁÃÉÀ ÌÏËÁÌÉ"
+#: locale/programs/charmap.c:336
+#, c-format
+msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n"
+msgstr "%s: <mb_cur_max> ÄÏÌÖÎÏ ÂÙÔØ ÂÏÌØÛÅ ÞÅÍ <mb_cur_min>\n"
 
-#: locale/programs/localedef.c:155
-msgid ""
-"NAME\n"
-"[--add-to-archive|--delete-from-archive] FILE...\n"
-"--list-archive [FILE]"
-msgstr ""
-"éíñ\n"
-"[--add-to-archive|--delete-from-archive] æáêì...\n"
-"--list-archive [æáêì]"
+#: locale/programs/charmap.c:356 locale/programs/charmap.c:373
+#: locale/programs/repertoire.c:174
+#, c-format
+msgid "syntax error in prolog: %s"
+msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÐÒÏÌÏÇÅ: %s"
 
-#: locale/programs/localedef.c:233
-msgid "cannot create directory for output files"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ ÄÌÑ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×"
+#: locale/programs/charmap.c:357
+msgid "invalid definition"
+msgstr "ÎÅ×ÅÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ"
 
-#: locale/programs/localedef.c:244
-msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'"
-msgstr "æáôáìøîáñ ïûéâëá: ÓÉÓÔÅÍÁ ÎÅ ÏÐÒÅÄÅÌÑÅÔ `_POSIX2_LOCALEDEF'"
+#: locale/programs/charmap.c:374 locale/programs/locfile.c:125
+#: locale/programs/locfile.c:152 locale/programs/repertoire.c:175
+msgid "bad argument"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÙÊ ÁÒÇÕÍÅÎÔ"
 
-#: locale/programs/localedef.c:258 locale/programs/localedef.c:274
-#: locale/programs/localedef.c:599 locale/programs/localedef.c:619
+#: locale/programs/charmap.c:402
 #, c-format
-msgid "cannot open locale definition file `%s'"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ Ó ÏÐÒÅÄÅÌÅÎÉÅÍ ÌÏËÁÌÉ `%s'"
+msgid "duplicate definition of <%s>"
+msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÄÌÑ <%s>"
 
-#: locale/programs/localedef.c:286
+#: locale/programs/charmap.c:409
 #, c-format
-msgid "cannot write output files to `%s'"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ×ÙÈÏÄÎÙÅ ÆÁÊÌÙ × `%s'"
+msgid "value for <%s> must be 1 or greater"
+msgstr "ÚÎÁÞÅÎÉÅ <%s> ÄÏÌÖÎÏ ÂÙÔØ 1 ÉÌÉ ÂÏÌØÛÅ"
 
-#: locale/programs/localedef.c:367
+#: locale/programs/charmap.c:421
 #, c-format
-msgid ""
-"System's directory for character maps : %s\n"
-"                       repertoire maps: %s\n"
-"                       locale path    : %s\n"
-"%s"
-msgstr ""
-
-#: locale/programs/localedef.c:567
-msgid "circular dependencies between locale definitions"
-msgstr "ÃÉËÌÉÞÅÓËÉÅ ÚÁ×ÉÓÉÍÏÓÔÉ ÍÅÖÄÕ ÏÐÒÅÄÅÌÅÎÉÑÍÉ ÌÏËÁÌÅÊ"
+msgid "value of <%s> must be greater or equal than the value of <%s>"
+msgstr "ÚÎÁÞÅÎÉÅ <%s> ÄÏÌÖÎÏ ÂÙÔØ ÂÏÌØÛÅ ÉÌÉ ÒÁ×ÎÏ ÚÎÁÞÅÎÉÀ <%s>"
 
-#: locale/programs/localedef.c:573
+#: locale/programs/charmap.c:444 locale/programs/repertoire.c:183
 #, c-format
-msgid "cannot add already read locale `%s' a second time"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÕÖÅ ÓÞÉÔÁÎÎÕÀ ÌÏËÁÌØ `%s' ×ÔÏÒÏÊ ÒÁÚ"
+msgid "argument to <%s> must be a single character"
+msgstr "ÁÒÇÕÍÅÎÔ ÄÌÑ <%s> ÄÏÌÖÅΠÂÙÔØ ÏÄÎÉÍ ÚÎÁËÏÍ"
 
-#: locale/programs/locarchive.c:89 locale/programs/locarchive.c:259
-msgid "cannot create temporary file"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ"
+#: locale/programs/charmap.c:470
+msgid "character sets with locking states are not supported"
+msgstr "ËÏÄÉÒÏ×ËÉ Ó ÂÌÏËÉÒÕÀÝÉÍÉ ÓÏÓÔÏÑÎÉÑÍÉ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ"
 
-#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
-msgid "cannot initialize archive file"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÉÎÉÃÉÁÌÉÚÉÒÏ×ÁÔØ ÁÒÈÉ×ÎÙÊ ÆÁÊÌ"
+#: locale/programs/charmap.c:497 locale/programs/charmap.c:551
+#: locale/programs/charmap.c:583 locale/programs/charmap.c:677
+#: locale/programs/charmap.c:732 locale/programs/charmap.c:773
+#: locale/programs/charmap.c:814
+#, c-format
+msgid "syntax error in %s definition: %s"
+msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÏÐÒÅÄÅÌÅÎÉÉ %s: %s"
 
-#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
-msgid "cannot resize archive file"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ ÒÁÚÍÅÒ ÁÒÈÉ×ÎÏÇÏ ÆÁÊÌÁ"
+#: locale/programs/charmap.c:498 locale/programs/charmap.c:678
+#: locale/programs/charmap.c:774 locale/programs/repertoire.c:230
+msgid "no symbolic name given"
+msgstr "ÎÅ ÚÁÄÁÎÏ ÓÉÍ×ÏÌØÎÏÅ ÉÍÑ"
 
-#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
-#: locale/programs/locarchive.c:511
-msgid "cannot map archive header"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ × ÐÁÍÑÔØ ÚÁÇÏÌÏ×ÏË ÁÒÈÉ×Á"
+#: locale/programs/charmap.c:552
+msgid "invalid encoding given"
+msgstr "ÚÁÄÁÎÁ ÎÅ×ÅÒÎÁÑ ËÏÄÉÒÏ×ËÁ"
 
-#: locale/programs/locarchive.c:156
-msgid "failed to create new locale archive"
-msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÎÏ×ÙÊ ÁÒÈÉ× ÌÏËÁÌÉ"
+#: locale/programs/charmap.c:561
+msgid "too few bytes in character encoding"
+msgstr "ÓÌÉÛËÏÍ ÍÁÌÏ ÂÁÊÔ × ËÏÄÉÒÏ×ËÅ ÚÎÁËÁ"
 
-#: locale/programs/locarchive.c:168
-msgid "cannot change mode of new locale archive"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ ÐÒÁ×Á ÄÏÓÔÕÐÁ ÄÌÑ ÎÏ×ÏÇÏ ÁÒÈÉ×ÎÏÇÏ ÆÁÊÌÁ"
+#: locale/programs/charmap.c:563
+msgid "too many bytes in character encoding"
+msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÂÁÊÔ × ËÏÄÉÒÏ×ËÅ ÚÎÁËÁ"
 
-#: locale/programs/locarchive.c:253
-msgid "cannot map locale archive file"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ × ÐÁÍÑÔØ ÁÒÈÉ×ÎÙÊ ÆÁÊÌ ÌÏËÁÌÉ"
+#: locale/programs/charmap.c:585 locale/programs/charmap.c:733
+#: locale/programs/charmap.c:816 locale/programs/repertoire.c:296
+msgid "no symbolic name given for end of range"
+msgstr "ÎÅ ÚÁÄÁÎÏ ÓÉÍ×ÏÌØÎÏÅ ÉÍÑ ÄÌÑ ËÏÎÃÁ ÄÉÁÐÁÚÏÎÁ"
 
-#: locale/programs/locarchive.c:329
-msgid "cannot lock new archive"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÎÏ×ÙÊ ÁÒÈÉ×"
+#: locale/programs/charmap.c:609 locale/programs/locfile.c:818
+#: locale/programs/repertoire.c:313
+#, c-format
+msgid "`%1$s' definition does not end with `END %1$s'"
+msgstr "ÏÐÒÅÄÅÌÅÎÉÅ `%1$s' ÎÅ ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÎÁ `END %1$s'"
 
-#: locale/programs/locarchive.c:380
-msgid "cannot extend locale archive file"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÒÁÓÛÉÒÉÔØ ÁÒÈÉ×ÎÙÊ ÆÁÊÌ ÌÏËÁÌÉ"
+#: locale/programs/charmap.c:642
+msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
+msgstr "ÐÏÓÌÅ ÏÐÒÅÄÅÌÅÎÉÑ CHARMAP ÍÏÇÕÔ ÓÌÅÄÏ×ÁÔØ ÔÏÌØËÏ ÏÐÒÅÄÅÌÅÎÉÑ WIDTH"
 
-#: locale/programs/locarchive.c:389
-msgid "cannot change mode of resized locale archive"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ ÐÒÁ×Á ÄÏÓÔÕÐÁ ÁÒÈÉ×Á ÌÏËÁÌÉ ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÚÍÅÒÁ"
+#: locale/programs/charmap.c:650 locale/programs/charmap.c:713
+#, c-format
+msgid "value for %s must be an integer"
+msgstr "ÚÎÁÞÅÎÉÅ ÄÌÑ %s ÄÏÌÖÎÏ ÂÙÔØ ÃÅÌÙÍ ÞÉÓÌÏÍ"
 
-#: locale/programs/locarchive.c:397
-msgid "cannot rename new archive"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÉÍÅÎÏ×ÁÔØ ÎÏ×ÙÊ ÁÒÈÉ×"
+#: locale/programs/charmap.c:841
+#, c-format
+msgid "%s: error in state machine"
+msgstr "%s: ÏÛÉÂËÁ × Á×ÔÏÍÁÔÅ"
 
-#: locale/programs/locarchive.c:450
+#: 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
 #, c-format
-msgid "cannot open locale archive \"%s\""
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÁÒÈÉ× ÌÏËÁÌÉ \"%s\""
+msgid "%s: premature end of file"
+msgstr "%s: ÐÒÅÖÄÅ×ÒÅÍÅÎÎÙÊ ËÏÎÅàÆÁÊÌÁ"
 
-#: locale/programs/locarchive.c:455
+#: locale/programs/charmap.c:868 locale/programs/charmap.c:879
 #, c-format
-msgid "cannot stat locale archive \"%s\""
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat ÄÌÑ ÁÒÈÉ×Á ÌÏËÁÌÉ \"%s\""
+msgid "unknown character `%s'"
+msgstr "ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË `%s'"
 
-#: locale/programs/locarchive.c:474
+#: locale/programs/charmap.c:887
 #, c-format
-msgid "cannot lock locale archive \"%s\""
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÁÒÈÉ× ÌÏËÁÌÉ \"%s\""
+msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d"
+msgstr "ÞÉÓÌÏ ÂÁÊÔ ÄÌÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÂÁÊÔ ÎÁÞÁÌÁ É ËÏÎÃÁ ÄÉÁÐÁÚÏÎÁ ÎÅ ÓÏ×ÐÁÄÁÀÔ: %d É %d"
 
-#: locale/programs/locarchive.c:497
-msgid "cannot read archive header"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË ÁÒÈÉ×Á"
+#: locale/programs/charmap.c:992 locale/programs/ld-collate.c:2933
+#: locale/programs/repertoire.c:419
+msgid "invalid names for character range"
+msgstr "ÎÅÄÏÐÕÓÔÉÍÙÅ ÉÍÅÎÁ ÄÌÑ ÄÉÁÐÁÚÏÎÁ ÚÎÁËÏ×"
+
+#: locale/programs/charmap.c:1004 locale/programs/repertoire.c:431
+msgid "hexadecimal range format should use only capital characters"
+msgstr "× ÛÅÓÔÎÁÄÃÁÔÉÒÉÞÎÏÍ ÆÏÒÍÁÔÅ ÄÉÁÐÁÚÏÎÁ ÓÌÅÄÕÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÏÌØËÏ ÚÁÇÌÁ×ÎÙÅ ÂÕË×Ù"
 
-#: locale/programs/locarchive.c:557
+#: locale/programs/charmap.c:1022
 #, c-format
-msgid "locale '%s' already exists"
-msgstr "ÌÏËÁÌØ '%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ"
+msgid "<%s> and <%s> are illegal names for range"
+msgstr "<%s> É <%s> -- ÎÅÄÏÐÕÓÔÉÍÙÅ ÉÍÅÎÁ ÄÌÑ ÄÉÁÐÁÚÏÎÁ"
 
-#: locale/programs/locarchive.c:788 locale/programs/locarchive.c:803
-#: locale/programs/locarchive.c:815 locale/programs/locarchive.c:827
-#: locale/programs/locfile.c:343
-msgid "cannot add to locale archive"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ Ë ÁÒÈÉ×Õ ÌÏËÁÌÉ"
+#: locale/programs/charmap.c:1028
+msgid "upper limit in range is not higher then lower limit"
+msgstr "×ÅÒÈÎÑÑ ÇÒÁÎÉÃÁ ÄÉÁÐÁÚÏÎÁ ÎÅ ÂÏÌØÛÅ ÎÉÖÎÅÊ ÇÒÁÎÉÃÙ"
 
-#: locale/programs/locarchive.c:982
-#, c-format
-msgid "locale alias file `%s' not found"
-msgstr "ÆÁÊÌ ÐÓÅ×ÄÏÎÉÍÏ× ÌÏËÁÌÅÊ `%s' ÎÅ ÎÁÊÄÅÎ"
+#: locale/programs/charmap.c:1086
+msgid "resulting bytes for range not representable."
+msgstr "ÒÅÚÕÌØÔÉÒÕÀÝÉÅ ÂÁÊÔÙ ÄÌÑ ÄÉÁÐÁÚÏÎÁ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ."
 
-#: locale/programs/locarchive.c:1126
+#: 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
 #, c-format
-msgid "Adding %s\n"
-msgstr "äÏÂÁ×ÌÅÎÉÅ %s\n"
+msgid "No definition for %s category found"
+msgstr "îÅ ÎÁÊÄÅÎÏ ÏÐÒÅÄÅÌÅÎÉÑ ÄÌÑ ËÁÔÅÇÏÒÉÉ %s"
 
-#: locale/programs/locarchive.c:1132
+#: 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
 #, c-format
-msgid "stat of \"%s\" failed: %s: ignored"
-msgstr "ÏÐÅÒÁÃÉÑ stat ÄÌÑ \"%s\" ÎÅÕÓÐÅÛÎÁ: %s: ÉÇÎÏÒÉÒÏ×ÁÎÏ"
+msgid "%s: field `%s' not defined"
+msgstr "%s: ÐÏÌÅ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎÏ"
 
-#: locale/programs/locarchive.c:1138
+#: 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
 #, c-format
-msgid "\"%s\" is no directory; ignored"
-msgstr "\"%s\" ÎÅ Ñ×ÌÑÅÔÓÑ ËÁÔÁÌÏÇÏÍ; ÉÇÎÏÒÉÒÏ×ÁÎÏ"
+msgid "%s: field `%s' must not be empty"
+msgstr "%s: ÐÏÌÅ `%s' ÄÏÌÖÎÏ ÂÙÔØ ÎÅÐÕÓÔÙÍ"
 
-#: locale/programs/locarchive.c:1145
+#: locale/programs/ld-address.c:167
 #, c-format
-msgid "cannot open directory \"%s\": %s: ignored"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÔÁÌÏÇ \"%s\": %s: ÉÇÎÏÒÉÒÏ×ÁÎÏ"
+msgid "%s: invalid escape `%%%c' sequence in field `%s'"
+msgstr "%s: ÎÅ×ÅÒÎÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ `%%%c' × ÐÏÌÅ `%s'"
 
-#: locale/programs/locarchive.c:1217
+#: locale/programs/ld-address.c:218
 #, c-format
-msgid "incomplete set of locale files in \"%s\""
-msgstr "ÎÅÐÏÌÎÙÊ ÎÁÂÏÒ ÆÁÊÌÏ× ÌÏËÁÌÉ × \"%s\""
+msgid "%s: terminology language code `%s' not defined"
+msgstr ""
 
-#: locale/programs/locarchive.c:1281
+#: locale/programs/ld-address.c:243
 #, c-format
-msgid "cannot read all files in \"%s\": ignored"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ×ÓÅ ÆÁÊÌÙ × \"%s\": ÉÇÎÏÒÉÒÏ×ÁÎÏ"
+msgid "%s: field `%s' must not be defined"
+msgstr "%s: ÐÏÌÅ `%s' ÎÅ ÄÏÌÖÎÏ ÂÙÔØ ÏÐÒÅÄÅÌÅÎÏ"
 
-#: locale/programs/locarchive.c:1351
+#: locale/programs/ld-address.c:257 locale/programs/ld-address.c:286
 #, c-format
-msgid "locale \"%s\" not in archive"
-msgstr "ÌÏËÁÌØ \"%s\" ÏÔÓÕÔÓÔ×ÕÅÔ × ÁÒÈÉ×Å"
+msgid "%s: language abbreviation `%s' not defined"
+msgstr "%s: ÓÏËÒÁÝÅÎÎÏÅ ÉÍÑ ÑÚÙËÁ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎÏ"
 
-#: locale/programs/locfile.c:132
+#: locale/programs/ld-address.c:264 locale/programs/ld-address.c:292
+#: locale/programs/ld-address.c:326 locale/programs/ld-address.c:338
 #, c-format
-msgid "argument to `%s' must be a single character"
-msgstr "ÁÒÇÕÍÅÎÔ ÄÌÑ `%s' ÄÏÌÖÅΠÂÙÔØ ÏÄÎÉÍ ÚÎÁËÏÍ"
-
-#: locale/programs/locfile.c:251
-msgid "syntax error: not inside a locale definition section"
-msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ: ×ÎÅ ÓÅËÃÉÉ ÏÐÒÅÄÅÌÅÎÉÑ ÌÏËÁÌÉ"
+msgid "%s: `%s' value does not match `%s' value"
+msgstr "%s: ÚÎÁÞÅÎÉÅ `%s' ÎÅ ÓÏ×ÐÁÄÁÅÔ ÓÏ ÚÎÁÞÅÎÉÅÍ `%s'"
 
-#: locale/programs/locfile.c:625
+#: locale/programs/ld-address.c:311
 #, c-format
-msgid "cannot open output file `%s' for category `%s'"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s' ÄÌÑ ËÁÔÅÇÏÒÉÉ `%s'"
+msgid "%s: numeric country code `%d' not valid"
+msgstr "%s: ÎÅ×ÅÒÎÙÊ ÞÉÓÌÏ×ÏÊ ËÏÄ ÓÔÒÁÎÙ `%d'"
 
-#: locale/programs/locfile.c:649
+#: 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
 #, c-format
-msgid "failure while writing data for category `%s'"
-msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁÐÉÓÉ ÄÁÎÎÙÈ ÄÌÑ ËÁÔÅÇÏÒÉÉ`%s'"
+msgid "%s: field `%s' declared more than once"
+msgstr "%s: ÐÏÌÅ `%s' ÏÂßÑ×ÌÅÎÏ ÎÅÓËÏÌØËÏ ÒÁÚ"
 
-#: locale/programs/locfile.c:745
+#: 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
 #, c-format
-msgid "cannot create output file `%s' for category `%s'"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s' ÄÌÑ ËÁÔÅÇÏÒÉÉ `%s'"
+msgid "%s: unknown character in field `%s'"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÐÏÌÅ `%s'"
 
-#: locale/programs/locfile.c:781
-msgid "expect string argument for `copy'"
-msgstr "ÄÌÑ `copy' ÏÖÉÄÁÅÔÓÑ ÁÒÇÕÍÅÎÔ-ÓÔÒÏËÁ"
+#: 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
+#, c-format
+msgid "%s: incomplete `END' line"
+msgstr "%s: ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÓÔÒÏËÁ `END'"
 
-#: locale/programs/locfile.c:785
-msgid "locale name should consist only of portable characters"
-msgstr "ÉÍÑ ÌÏËÁÌÉ ÄÏÌÖÎÏ ÓÏÓÔÏÑÔØ ÔÏÌØËÏ ÉÚ ÐÅÒÅÎÏÓÉÍÙÈ ÚÎÁËÏ×"
+#: 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: ÏÐÒÅÄÅÌÅÎÉÅ ÎÅ ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÎÁ `END %1$s'"
 
-#: locale/programs/locfile.c:804
-msgid "no other keyword shall be specified when `copy' is used"
-msgstr "ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ `copy' ÎÅÌØÚÑ ÚÁÄÁ×ÁÔØ ÄÒÕÇÉÅ ËÌÀÞÅ×ÙÅ ÓÌÏ×Á"
+#: 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
+#, c-format
+msgid "%s: syntax error"
+msgstr "%s: ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ"
 
-#: locale/programs/repertoire.c:230 locale/programs/repertoire.c:271
-#: locale/programs/repertoire.c:296
+#: locale/programs/ld-collate.c:396
 #, c-format
-msgid "syntax error in repertoire map definition: %s"
-msgstr ""
+msgid "`%.*s' already defined in charmap"
+msgstr "`%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅΠנÏÔÏÂÒÁÖÅÎÉÉ ÚÎÁËÏ×"
 
-#: locale/programs/repertoire.c:272
-msgid "no <Uxxxx> or <Uxxxxxxxx> value given"
-msgstr "ÎÅ ÚÁÄÁÎÏ ÚÎÁÞÅÎÉÅ <Uxxxx> ÉÌÉ <Uxxxxxxxx>"
+#: locale/programs/ld-collate.c:405
+#, c-format
+msgid "`%.*s' already defined in repertoire"
+msgstr "`%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎÏ × ÒÅÐÅÒÔÕÁÒÅ"
 
-#: locale/programs/repertoire.c:332
-msgid "cannot save new repertoire map"
-msgstr ""
+#: locale/programs/ld-collate.c:412
+#, c-format
+msgid "`%.*s' already defined as collating symbol"
+msgstr "`%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎÏ ËÁË ÓÉÍ×ÏÌ ÓÏÒÔÉÒÏ×ËÉ"
 
-#: locale/programs/repertoire.c:343
+#: locale/programs/ld-collate.c:419
 #, c-format
-msgid "repertoire map file `%s' not found"
-msgstr ""
+msgid "`%.*s' already defined as collating element"
+msgstr "`%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅÎÏ ËÁË ÜÌÅÍÅÎÔ ÓÏÒÔÉÒÏ×ËÉ"
 
-#: locale/programs/repertoire.c:450
+#: locale/programs/ld-collate.c:450 locale/programs/ld-collate.c:476
 #, c-format
-msgid "<%s> and <%s> are invalid names for range"
-msgstr "<%s> É <%s> ÎÅ Ñ×ÌÑÀÔÓÑ ÄÏÐÕÓÔÉÍÙÍÉ ÉÍÅÎÁÍÉ ÄÉÁÐÁÚÏÎÁ"
+msgid "%s: `forward' and `backward' are mutually excluding each other"
+msgstr "%s: `forward' É `backward' ×ÚÁÉÍÎÏ ÉÓËÌÀÞÁÀÔÓÑ"
 
-#: locale/programs/repertoire.c:457
-msgid "upper limit in range is not smaller then lower limit"
-msgstr "×ÅÒÈÎÑÑ ÇÒÁÎÉÃÁ ÄÉÁÐÁÚÏÎÁ ÎÅ ÍÅÎØÛÅ ÎÉÖÎÅÊ"
+#: locale/programs/ld-collate.c:460 locale/programs/ld-collate.c:486
+#: locale/programs/ld-collate.c:502
+#, c-format
+msgid "%s: `%s' mentioned more than once in definition of weight %d"
+msgstr "%s: `%s' ×ÓÔÒÅÞÁÅÔÓÑ ÂÏÌÅÅ ÏÄÎÏÇÏ ÒÁÚÁ × ÏÐÒÅÄÅÌÅÎÉÉ ×ÅÓÁ %d"
 
-#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
-#: posix/getconf.c:1007
-msgid "memory exhausted"
-msgstr "ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ"
+#: locale/programs/ld-collate.c:558
+#, c-format
+msgid "%s: too many rules; first entry only had %d"
+msgstr "%s: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÐÒÁ×ÉÌ; × ÐÅÒ×ÏÍ ×ÈÏÖÄÅÎÉÉ ÂÙÌÏ ÔÏÌØËÏ %d"
 
-#: assert/assert-perr.c:57
+#: locale/programs/ld-collate.c:594
 #, c-format
-msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n"
-msgstr "%s%s%s:%u: %s%sîÅÏÖÉÄÁÎÎÁÑ ÏÛÉÂËÁ: %s.\n"
+msgid "%s: not enough sorting rules"
+msgstr "%s: ÎÅÄÏÓÔÁÔÏÞÎÏ ÐÒÁ×ÉÌ ÓÏÒÔÉÒÏ×ËÉ"
 
-#: assert/assert.c:56
+#: locale/programs/ld-collate.c:759
 #, c-format
-msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n"
-msgstr "%s%s%s:%u: %s%sðÒÏ×ÅÒÏÞÎÏÅ ÕÔ×ÅÒÖÄÅÎÉÅ `%s' ÎÅ ×ÙÐÏÌÎÅÎÏ.\n"
+msgid "%s: empty weight string not allowed"
+msgstr "%s: ÐÕÓÔÁÑ ÓÔÒÏËÁ ×ÅÓÁ ÎÅÄÏÐÕÓÔÉÍÁ"
 
-#: intl/tst-codeset.c:40 intl/tst-codeset.c:50
-msgid "cheese"
-msgstr ""
+#: locale/programs/ld-collate.c:854
+#, c-format
+msgid "%s: weights must use the same ellipsis symbol as the name"
+msgstr "%s: ×ÅÓÁ ÄÏÌÖÎÙ ÉÓÐÏÌØÚÏ×ÁÔØ ÔÁËÏÊ ÖÅ ÓÉÍ×ÏÌ ÜÌÌÉÐÓÉÓÁ, ËÁË ÉÍÑ"
 
-#: intl/tst-gettext2.c:37
-msgid "First string for testing."
-msgstr "ðÅÒ×ÁÑ ÓÔÒÏËÁ ÄÌÑ ÔÅÓÔÁ."
+#: locale/programs/ld-collate.c:910
+#, c-format
+msgid "%s: too many values"
+msgstr "%s: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÚÎÁÞÅÎÉÊ"
 
-#: intl/tst-gettext2.c:38
-msgid "Another string for testing."
-msgstr "äÒÕÇÁÑ ÓÔÒÏËÁ ÄÌÑ ÔÅÓÔÁ."
+#: locale/programs/ld-collate.c:1029 locale/programs/ld-collate.c:1204
+#, c-format
+msgid "order for `%.*s' already defined at %s:%Zu"
+msgstr "ÐÏÒÑÄÏË ÄÌÑ `%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅΠנ%s:%Zu"
 
-#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:88
-msgid "NAME"
-msgstr "æáêì"
+#: locale/programs/ld-collate.c:1079
+#, c-format
+msgid "%s: the start and the end symbol of a range must stand for characters"
+msgstr "%s: ÎÁÞÁÌØÎÙÊ É ËÏÎÅÞÎÙÊ ÓÉÍ×ÏÌÙ ÄÉÁÐÁÚÏÎÁ ÄÏÌÖÎÙ ÏÂÏÚÎÁÞÁÔØ ÚÎÁËÉ"
 
-#: catgets/gencat.c:112
-msgid "Create C header file NAME containing symbol definitions"
-msgstr "óÏÚÄÁÅÔ ÚÁÇÏÌÏ×ÏÞÎÙÊ æáêì ÎÁ óÉ, ÓÏÄÅÒÖÁÝÉÊ ÏÐÒÅÄÅÌÅÎÉÑ ÓÉÍ×ÏÌÏ×."
+#: locale/programs/ld-collate.c:1106
+#, c-format
+msgid "%s: byte sequences of first and last character must have the same length"
+msgstr "%s: ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÂÁÊÔ ÄÌÑ ÐÅÒ×ÏÇÏ É ÐÏÓÌÅÄÎÅÇÏ ÚÎÁËÁ ÄÏÌÖÎÙ ÂÙÔØ ÏÄÉÎÁËÏ×ÏÊ ÄÌÉÎÙ"
 
-#: catgets/gencat.c:114
-msgid "Do not use existing catalog, force new output file"
-msgstr "îÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ ËÁÔÁÌÏÇ, ÐÒÉÎÕÄÉÔÅÌØÎÏ ÓÏÚÄÁÔØ ÎÏ×ÙÊ ×ÙÈÏÄÎÏÊ ÆÁÊÌ"
+#: locale/programs/ld-collate.c:1148
+#, c-format
+msgid "%s: byte sequence of first character of sequence is not lower than that of the last character"
+msgstr "%s: ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÂÁÊÔ ÄÌÑ ÐÅÒ×ÏÇÏ ÚÎÁËÁ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÎÅ ÍÅÎØÛÅ ÞÅÍ ÄÌÑ ÐÏÓÌÅÄÎÅÇÏ"
 
-#: catgets/gencat.c:115
-msgid "Write output to file NAME"
-msgstr "úÁÐÉÓÁÔØ ×Ù×ÏÄ × æáêì"
+#: locale/programs/ld-collate.c:1273
+#, c-format
+msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
+msgstr "%s: ÜÌÌÉÐÓÉÓ ÓÉÍ×ÏÌØÎÏÇÏ ÄÉÁÐÁÚÏÎÁ ÎÅ ÍÏÖÅÔ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÓÌÅÄÏ×ÁÔØ ÐÏÓÌÅ `order_start'"
 
-#: catgets/gencat.c:120
-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 ""
-"çÅÎÅÒÉÒÕÅÔ ËÁÔÁÌÏÇ ÓÏÏÂÝÅÎÉÊ.\våÓÌÉ ÷èïäîïê-æáêì ÚÁÄÁΠËÁË -, ÞÉÔÁÅÔ ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ.  åÓÌÉ\n"
-"÷ùèïäîïê-æáêì ÚÁÄÁΠËÁË -, ÒÅÚÕÌØÔÁÔ ÐÅÞÁÔÁÅÔÓÑ ÎÁ ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ.\n"
+#: locale/programs/ld-collate.c:1277
+#, c-format
+msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
+msgstr "%s: ÐÏÓÌÅ ÜÌÌÉÐÓÉÓÁ ÓÉÍ×ÏÌØÎÏÇÏ ÄÉÁÐÁÚÏÎÁ ÎÅ ÍÏÖÅÔ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ÓÌÅÄÏ×ÁÔØ `order_end'"
 
-#: catgets/gencat.c:125
-msgid ""
-"-o OUTPUT-FILE [INPUT-FILE]...\n"
-"[OUTPUT-FILE [INPUT-FILE]...]"
-msgstr ""
-"-o ÷ùèïäîïê-æáêì [÷èïäîïê-æáêì]...\n"
-"[÷ùèïäîïê-æáêì [÷èïäîïê-æáêì]...]"
+#: locale/programs/ld-collate.c:1297 locale/programs/ld-ctype.c:1475
+#, c-format
+msgid "`%s' and `%.*s' are not valid names for symbolic range"
+msgstr "`%s' É `%.*s' ÎÅ Ñ×ÌÑÀÔÓÑ ×ÅÒÎÙÍÉ ÉÍÅÎÁÍÉ ÓÉÍ×ÏÌØÎÏÇÏ ÄÉÁÐÏÚÏÎÁ"
 
-#: catgets/gencat.c:282
-msgid "*standard input*"
-msgstr "*ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ*"
+#: locale/programs/ld-collate.c:1346 locale/programs/ld-collate.c:3739
+#, c-format
+msgid "%s: order for `%.*s' already defined at %s:%Zu"
+msgstr "%s: ÐÏÒÑÄÏË ÄÌÑ `%.*s' ÕÖÅ ÏÐÒÅÄÅÌÅΠנ%s:%Zu"
 
-#: catgets/gencat.c:417 catgets/gencat.c:494
-msgid "illegal set number"
-msgstr "ÎÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÍÎÏÖÅÓÔ×Á"
+#: locale/programs/ld-collate.c:1355
+#, c-format
+msgid "%s: `%s' must be a character"
+msgstr "%s: `%s' ÄÏÌÖÎÏ ÂÙÔØ ÚÎÁËÏÍ"
 
-#: catgets/gencat.c:444
-msgid "duplicate set definition"
-msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÍÎÏÖÅÓÔ×Á"
+#: locale/programs/ld-collate.c:1548
+#, c-format
+msgid "%s: `position' must be used for a specific level in all sections or none"
+msgstr "%s: `position' ÄÏÌÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØÓÑ ÄÌÑ ÏÄÎÏÇÏ ËÏÎËÒÅÔÎÏÇÏ ÕÒÏ×ÎÑ ÌÉÂÏ ×Ï ×ÓÅÈ ÓÅËÃÉÑÈ, ÌÉÂÏ ÎÉ × ÏÄÎÏÊ"
 
-#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
-msgid "this is the first definition"
-msgstr "ÜÔÏ ÐÅÒ×ÏÅ ÏÐÒÅÄÅÌÅÎÉÅ"
+#: locale/programs/ld-collate.c:1573
+#, c-format
+msgid "symbol `%s' not defined"
+msgstr "ÓÉÍ×ÏÌ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎ"
 
-#: catgets/gencat.c:522
+#: locale/programs/ld-collate.c:1649 locale/programs/ld-collate.c:1755
 #, c-format
-msgid "unknown set `%s'"
-msgstr "ÎÅÉÚ×ÅÓÔÎÏÅ ÍÎÏÖÅÓÔ×Ï `%s'"
+msgid "symbol `%s' has the same encoding as"
+msgstr "ÓÉÍ×ÏÌ `%s' ÉÍÅÅÔ ÔÁËÕÀ ÖÅ ËÏÄÉÒÏ×ËÕ ËÁË"
 
-#: catgets/gencat.c:563
-msgid "invalid quote character"
-msgstr "ÎÅ×ÅÒÎÙÊ ÜËÒÁÎÉÒÕÀÝÉÊ ÚÎÁË"
+#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759
+#, c-format
+msgid "symbol `%s'"
+msgstr "ÓÉÍ×ÏÌ `%s'"
 
-#: catgets/gencat.c:576
+#: locale/programs/ld-collate.c:1801
 #, c-format
-msgid "unknown directive `%s': line ignored"
-msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÄÉÒÅËÔÉ×Á `%s': ÓÔÒÏËÁ ÉÇÎÏÒÉÒÏ×ÁÎÁ"
+msgid "no definition of `UNDEFINED'"
+msgstr "ÎÅÔ ÏÐÒÅÄÅÌÅÎÉÑ ÄÌÑ `UNDEFINED'"
 
-#: catgets/gencat.c:621
-msgid "duplicated message number"
-msgstr "ÐÏ×ÔÏÒÎÙÊ ÎÏÍÅÒ ÓÏÏÂÝÅÎÉÑ"
+#: locale/programs/ld-collate.c:1830
+#, c-format
+msgid "too many errors; giving up"
+msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÏÛÉÂÏË; ËÏÎÅÃ"
 
-#: catgets/gencat.c:674
-msgid "duplicated message identifier"
-msgstr "ÐÏ×ÔÏÒÎÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÓÏÏÂÝÅÎÉÑ"
+#: locale/programs/ld-collate.c:2738
+#, c-format
+msgid "%s: duplicate definition of `%s'"
+msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ `%s'"
 
-#: catgets/gencat.c:731
-msgid "invalid character: message ignored"
-msgstr "ÎÅÄÏÐÕÓÔÉÍÙÊ ÚÎÁË: ÓÏÏÂÝÅÎÉÅ ÉÇÎÏÒÉÒÏ×ÁÎÏ"
+#: locale/programs/ld-collate.c:2774
+#, c-format
+msgid "%s: duplicate declaration of section `%s'"
+msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÂßÑ×ÌÅÎÉÅ ÓÅËÃÉÉ `%s'"
 
-#: catgets/gencat.c:774
-msgid "invalid line"
-msgstr "ÎÅ×ÅÒÎÁÑ ÓÔÒÏËÁ"
+#: locale/programs/ld-collate.c:2913
+#, c-format
+msgid "%s: unknown character in collating symbol name"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÉÍÅÎÉ ÓÉÍ×ÏÌÁ ÓÏÒÔÉÒÏ×ËÉ"
 
-#: catgets/gencat.c:828
-msgid "malformed line ignored"
-msgstr "ÎÅÐÒÁ×ÉÌØÎÁÑ ÓÔÒÏËÁ ÉÇÎÏÒÉÒÏ×ÁÎÁ"
+#: locale/programs/ld-collate.c:3045
+#, c-format
+msgid "%s: unknown character in equivalent definition name"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÉÍÅÎÉ ÏÐÒÅÄÅÌÅÎÉÑ ÜË×É×ÁÌÅÎÔÎÏÓÔÉ"
 
-#: catgets/gencat.c:992 catgets/gencat.c:1033
+#: locale/programs/ld-collate.c:3058
 #, c-format
-msgid "cannot open output file `%s'"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s'"
+msgid "%s: unknown character in equivalent definition value"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÚÎÁË × ÚÎÁÞÅÎÉÉ ÏÐÒÅÄÅÌÅÎÁÑ ÜË×É×ÁÌÅÎÔÎÏÓÔÉ"
 
-#: catgets/gencat.c:1217
-msgid "unterminated message"
-msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÏÅ ÓÏÏÂÝÅÎÉÅ"
+#: locale/programs/ld-collate.c:3068
+#, c-format
+msgid "%s: unknown symbol `%s' in equivalent definition"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÙÊ ÓÉÍ×ÏÌ `%s' × ÏÐÒÅÄÅÌÅÎÉÉ ÜË×É×ÁÌÅÎÔÎÏÓÔÉ"
 
-#: catgets/gencat.c:1241
-msgid "while opening old catalog file"
-msgstr "ÐÒÉ ÏÔËÒÙÔÉÉ ÓÔÁÒÏÇÏ ÆÁÊÌÁ ËÁÔÁÌÏÇÁ"
+#: locale/programs/ld-collate.c:3077
+msgid "error while adding equivalent collating symbol"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÄÏÂÁ×ÌÅÎÉÉ ÜË×É×ÁÌÅÎÔÎÏÇÏ ÓÉÍ×ÏÌÁ ÓÏÒÔÉÒÏ×ËÉ"
 
-#: catgets/gencat.c:1332
-msgid "conversion modules not available"
-msgstr "ÍÏÄÕÌÉ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÎÅÄÏÓÔÕÐÎÙ"
+#: locale/programs/ld-collate.c:3107
+#, c-format
+msgid "duplicate definition of script `%s'"
+msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÓÉÓÔÅÍÙ ÐÉÓØÍÁ `%s'"
 
-#: catgets/gencat.c:1358
-msgid "cannot determine escape character"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÐÒÅÄÅÌÉÔØ ÚÎÁË ×ÙÈÏÄÁ"
+#: locale/programs/ld-collate.c:3155
+#, c-format
+msgid "%s: unknown section name `%s'"
+msgstr "%s: ÎÅÉÚ×ÅÓÔÎÏÅ ÉÍÑ ÓÅËÃÉÉ `%s'"
 
-#: stdlib/../sysdeps/unix/sysv/linux/ia64/makecontext.c:63
+#: locale/programs/ld-collate.c:3183
 #, c-format
-msgid "makecontext: does not know how to handle more than 8 arguments\n"
-msgstr "makecontext: ÎÅÔ ×ÏÚÍÏÖÎÏÓÔÉ ÏÂÒÁÂÏÔÁÔØ ÂÏÌÅÅ ×ÏÓØÍÉ ÁÒÇÕÍÅÎÔÏ×\n"
+msgid "%s: multiple order definitions for section `%s'"
+msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÐÏÒÑÄËÁ ÄÌÑ ÓÅËÃÉÉ `%s'"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:12 posix/regcomp.c:147
-#: nis/nis_error.c:29 nis/ypclnt.c:778 nis/ypclnt.c:852
-msgid "Success"
-msgstr "ðÏÂÅÄÁ"
+#: locale/programs/ld-collate.c:3208
+#, c-format
+msgid "%s: invalid number of sorting rules"
+msgstr "%s: ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÒÁ×ÉÌ ÓÏÒÔÉÒÏ×ËÉ"
 
-#. 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 "ïÐÅÒÁÃÉÑ ÎÅ ÐÏÚ×ÏÌÑÅÔÓÑ"
+#: locale/programs/ld-collate.c:3235
+#, c-format
+msgid "%s: multiple order definitions for unnamed section"
+msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÐÏÒÑÄËÁ ÄÌÑ ÂÅÚÙÍÑÎÎÏÊ ÓÅËÃÉÉ"
 
-#. 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 "îÅÔ ÔÁËÏÇÏ ÆÁÊÌÁ ÉÌÉ ËÁÔÁÌÏÇÁ"
+#: locale/programs/ld-collate.c:3289 locale/programs/ld-collate.c:3417
+#: locale/programs/ld-collate.c:3780
+#, c-format
+msgid "%s: missing `order_end' keyword"
+msgstr "%s: ÐÒÏÐÕÝÅÎÏ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï `order_end'"
 
-#. 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 "îÅÔ ÔÁËÏÇÏ ÐÒÏÃÅÓÓÁ"
+#: locale/programs/ld-collate.c:3350
+#, c-format
+msgid "%s: order for collating symbol %.*s not yet defined"
+msgstr "%s: ÐÏÒÑÄÏË ÄÌÑ ÓÉÍ×ÏÌÁ ÓÏÒÔÉÒÏ×ËÉ %.*s ÅÝÅ ÎÅ ÏÐÒÅÄÅÌÅÎ"
 
-#. 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 "ðÒÅÒ×ÁΠÓÉÓÔÅÍÎÙÊ ×ÙÚÏ×"
+#: locale/programs/ld-collate.c:3368
+#, c-format
+msgid "%s: order for collating element %.*s not yet defined"
+msgstr "%s: ÐÏÒÑÄÏË ÄÌÑ ÜÌÅÍÅÎÔÁ ÓÏÒÔÉÒÏ×ËÉ %.*s ÅÝÅ ÎÅ ÏÐÒÅÄÅÌÅÎ"
+
+#: locale/programs/ld-collate.c:3379
+#, c-format
+msgid "%s: cannot reorder after %.*s: symbol not known"
+msgstr "%s: ÎÅ×ÏÚÍÏÖÎÏ ÐÏÍÅÎÑÔØ ÐÏÒÑÄÏË ÐÏÓÌÅ %.*s: ÓÉÍ×ÏÌ ÎÅÉÚ×ÅÓÔÅÎ"
+
+#: locale/programs/ld-collate.c:3431 locale/programs/ld-collate.c:3792
+#, c-format
+msgid "%s: missing `reorder-end' keyword"
+msgstr "%s: ÐÒÏÐÕÝÅÎÏ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï `reorder-end'"
+
+#: locale/programs/ld-collate.c:3465 locale/programs/ld-collate.c:3664
+#, c-format
+msgid "%s: section `%.*s' not known"
+msgstr "%s: ÓÅËÃÉÑ `%.*s' ÎÅÉÚ×ÅÓÔÎÁ"
+
+#: locale/programs/ld-collate.c:3530
+#, c-format
+msgid "%s: bad symbol <%.*s>"
+msgstr "%s: ÎÅÐÒÁ×ÉÌØÎÙÊ ÓÉÍ×ÏÌ <%.*s>"
+
+#: locale/programs/ld-collate.c:3727
+#, c-format
+msgid "%s: cannot have `%s' as end of ellipsis range"
+msgstr "%s: `%s' ÎÅ ÍÏÖÅÔ ÂÙÔØ ËÏÎÃÏÍ ÄÉÁÐÁÚÏÎÁ Ó ÜÌÌÉÐÓÉÓÏÍ"
+
+#: locale/programs/ld-collate.c:3776
+#, c-format
+msgid "%s: empty category description not allowed"
+msgstr "%s: ÐÕÓÔÙÅ ÏÐÉÓÁÎÉÑ ËÁÔÅÇÏÒÉÊ ÎÅÄÏÐÕÓÔÉÍÙ"
+
+#: locale/programs/ld-collate.c:3795
+#, c-format
+msgid "%s: missing `reorder-sections-end' keyword"
+msgstr "%s: ÐÒÏÐÕÝÅÎÏ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï `reorder-sections-end'"
+
+#: locale/programs/ld-ctype.c:438
+#, c-format
+msgid "No character set name specified in charmap"
+msgstr "÷ ÏÔÏÂÒÁÖÅÎÉÉ ÚÎÁËÏ× ÎÅ ÕËÁÚÁÎÏ ÉÍÑ ÎÁÂÏÒÁ ÚÎÁËÏ×"
+
+#: locale/programs/ld-ctype.c:467
+#, c-format
+msgid "character L'\\u%0*x' in class `%s' must be in class `%s'"
+msgstr "ÚÎÁË L'\\u%0*x' × ËÌÁÓÓÅ `%s' ÄÏÌÖÅΠÂÙÔØ × ËÌÁÓÓÅ `%s'"
+
+#: locale/programs/ld-ctype.c:482
+#, c-format
+msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'"
+msgstr "ÚÎÁË L'\\u%0*x' × ËÌÁÓÓÅ `%s' ÎÅ ÄÏÌÖÅΠÂÙÔØ × ËÌÁÓÓÅ `%s'"
+
+#: locale/programs/ld-ctype.c:496 locale/programs/ld-ctype.c:554
+#, c-format
+msgid "internal error in %s, line %u"
+msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ × %s, ÓÔÒÏËÁ %u"
+
+#: locale/programs/ld-ctype.c:525
+#, c-format
+msgid "character '%s' in class `%s' must be in class `%s'"
+msgstr "ÚÎÁË '%s' × ËÌÁÓÓÅ `%s' ÄÏÌÖÅΠÂÙÔØ × ËÌÁÓÓÅ `%s'"
+
+#: locale/programs/ld-ctype.c:541
+#, c-format
+msgid "character '%s' in class `%s' must not be in class `%s'"
+msgstr "ÚÎÁË '%s' × ËÌÁÓÓÅ `%s' ÎÅ ÄÏÌÖÅΠÂÙÔØ × ËÌÁÓÓÅ `%s'"
+
+#: locale/programs/ld-ctype.c:571 locale/programs/ld-ctype.c:609
+#, c-format
+msgid "<SP> character not in class `%s'"
+msgstr "ÚÎÁË <SP> ÎÅ × ËÌÁÓÓÅ `%s'"
+
+#: locale/programs/ld-ctype.c:583 locale/programs/ld-ctype.c:620
+#, c-format
+msgid "<SP> character must not be in class `%s'"
+msgstr "ÚÎÁË <SP> ÎÅ ÄÏÌÖÅΠÂÙÔØ × ËÌÁÓÓÅ `%s'"
+
+#: locale/programs/ld-ctype.c:598
+#, c-format
+msgid "character <SP> not defined in character map"
+msgstr "ÚÎÁË <SP> ÎÅ ÏÐÒÅÄÅÌÅΠנÏÔÏÂÒÁÖÅÎÉÉ ÚÎÁËÏ×"
+
+#: locale/programs/ld-ctype.c:712
+#, c-format
+msgid "`digit' category has not entries in groups of ten"
+msgstr "×ÈÏÖÄÅÎÉÑ ËÁÔÅÇÏÒÉÉ `digit' ÎÅ ÇÒÕÐÐÉÒÕÀÔÓÑ ÐÏ ÄÅÓÑÔØ"
+
+#: locale/programs/ld-ctype.c:761
+#, c-format
+msgid "no input digits defined and none of the standard names in the charmap"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:826
+#, c-format
+msgid "not all characters used in `outdigit' are available in the charmap"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:843
+#, c-format
+msgid "not all characters used in `outdigit' are available in the repertoire"
+msgstr "ÎÅ ×ÓÅ ÚÎÁËÉ, ÉÓÐÏÌØÚÏ×ÁÎÎÙÅ × `outdigit', ÄÏÓÔÕÐÎÙ × ÄÁÎÎÏÍ ÒÅÐÅÒÔÕÁÒÅ"
+
+#: locale/programs/ld-ctype.c:1243
+#, c-format
+msgid "character class `%s' already defined"
+msgstr "ËÌÁÓÓ ÚÎÁËÏ× `%s' ÕÖÅ ÏÐÒÅÄÅÌÅÎ"
+
+#: locale/programs/ld-ctype.c:1249
+#, c-format
+msgid "implementation limit: no more than %Zd character classes allowed"
+msgstr "ÏÇÒÁÎÉÞÅÎÉÅ ÒÅÁÌÉÚÁÃÉÉ: ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÎÅ ÂÏÌÅÅ %Zd ËÌÁÓÓÏ× ÚÎÁËÏ×"
+
+#: locale/programs/ld-ctype.c:1275
+#, c-format
+msgid "character map `%s' already defined"
+msgstr "ÏÔÏÂÒÁÖÅÎÉÅ ÚÎÁËÏ× `%s' ÕÖÅ ÏÐÒÅÄÅÌÅÎÏ"
+
+#: locale/programs/ld-ctype.c:1281
+#, c-format
+msgid "implementation limit: no more than %d character maps allowed"
+msgstr "ÏÇÒÁÎÉÞÅÎÉÅ ÒÅÁÌÉÚÁÃÉÉ: ÄÏÐÕÓËÁÅÔÓÑ ÎÅ ÂÏÌÅÅ %d ÏÔÏÂÒÁÖÅÎÉÊ ÚÎÁËÏ×"
+
+#: 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
+#, c-format
+msgid "%s: field `%s' does not contain exactly ten entries"
+msgstr "%s: ÐÏÌÅ `%s' ÎÅ ÓÏÄÅÒÖÉÔ ÒÏ×ÎÏ ÄÅÓÑÔØ ×ÈÏÖÄÅÎÉÊ"
+
+#: locale/programs/ld-ctype.c:1574 locale/programs/ld-ctype.c:2145
+#, c-format
+msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>"
+msgstr "×ÅÒÈÎÅÅ ÚÎÁÞÅÎÉÅ ÄÉÁÐÁÚÏÎÁ <U%0*X> ÍÅÎØÛÅ ÞÅÍ ÎÉÖÎÅÅ ÚÎÁÞÅÎÉÅ <U%0*X>"
+
+#: locale/programs/ld-ctype.c:1701
+msgid "start and end character sequence of range must have the same length"
+msgstr "ÎÁÞÁÌØÎÁÑ É ËÏÎÅÞÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔÉ ÚÎÁËÏ× ÄÉÁÐÁÚÏÎÁ ÄÏÌÖÎÙ ÂÙÔØ ÏÄÉÎÁËÏ×ÏÊ ÄÌÉÎÙ"
+
+#: locale/programs/ld-ctype.c:1708
+msgid "to-value character sequence is smaller than from-value sequence"
+msgstr "ËÏÎÅÞÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÚÎÁËÏ× ÄÉÁÐÁÚÏÎÁ ÍÅÎØÛÅ ÞÅÍ ÎÁÞÁÌØÎÁÑ"
+
+#: locale/programs/ld-ctype.c:2065 locale/programs/ld-ctype.c:2116
+msgid "premature end of `translit_ignore' definition"
+msgstr "ÐÒÅÖÄÅ×ÒÅÍÅÎÎÙÊ ËÏÎÅàÏÐÒÅÄÅÌÅÎÉÑ `translit_ignore'"
+
+#: locale/programs/ld-ctype.c:2071 locale/programs/ld-ctype.c:2122
+#: locale/programs/ld-ctype.c:2164
+msgid "syntax error"
+msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ"
+
+#: locale/programs/ld-ctype.c:2298
+#, c-format
+msgid "%s: syntax error in definition of new character class"
+msgstr "%s: ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÏÐÒÅÄÅÌÅÎÉÉ ÎÏ×ÏÇÏ ËÌÁÓÓÁ ÚÎÁËÏ×"
+
+#: locale/programs/ld-ctype.c:2313
+#, c-format
+msgid "%s: syntax error in definition of new character map"
+msgstr "%s: ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÏÐÒÅÄÅÌÅÎÉÉ ÎÏ×ÏÇÏ ÏÔÏÂÒÁÖÅÎÉÑ ÚÎÁËÏ×"
+
+#: locale/programs/ld-ctype.c:2488
+msgid "ellipsis range must be marked by two operands of same type"
+msgstr "ÄÉÁÐÁÚÏΠӠÜÌÌÉÐÓÉÓÏÍ ÄÏÌÖÅΠÂÙÔØ ÐÏÍÅÞÅΠÄ×ÕÍÑ ÏÐÅÒÁÎÄÁÍÉ ÏÄÎÏÇÏ ÔÉÐÁ"
+
+#: locale/programs/ld-ctype.c:2497
+msgid "with symbolic name range values the absolute ellipsis `...' must not be used"
+msgstr "Ó ÓÉÍ×ÏÌØÎÙÍÉ ÉÍÅÎÁÍÉ ÚÎÁÞÅÎÉÊ ÄÉÁÐÁÚÏÎÁ ÎÅÌØÚÑ ÉÓÐÏÌØÚÏ×ÁÔØ ÁÂÓÏÌÀÔÎÙÊ ÜÌÌÉÐÓÉÓ `...'"
+
+#: locale/programs/ld-ctype.c:2512
+msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'"
+msgstr "Ó UCS-ÚÎÁÞÅÎÉÑÍÉ ÄÉÁÐÁÚÏÎÁ ÓÌÅÄÕÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÛÅÓÔÎÁÄÃÁÔÉÒÉÞÎÙÊ ÓÉÍ×ÏÌØÎÙÊ ÜÌÌÉÐÓÉÓ `..'"
+
+#: locale/programs/ld-ctype.c:2526
+msgid "with character code range values one must use the absolute ellipsis `...'"
+msgstr "ÓÏ ÚÎÁËÏ×ÙÍÉ ËÏÄÁÍÉ ÚÎÁÞÅÎÉÊ ÄÉÁÐÁÚÏÎÁ ÓÌÅÄÕÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÁÂÓÏÌÀÔÎÙÊ ÜÌÌÉÐÓÉÓ `...'"
+
+#: locale/programs/ld-ctype.c:2677
+#, c-format
+msgid "duplicated definition for mapping `%s'"
+msgstr "ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ÏÔÏÂÒÁÖÅÎÉÑ `%s'"
+
+#: locale/programs/ld-ctype.c:2763 locale/programs/ld-ctype.c:2907
+#, c-format
+msgid "%s: `translit_start' section does not end with `translit_end'"
+msgstr "%s: ÓÅËÃÉÑ `translit_start' ÎÅ ÚÁËÁÎÞÉ×ÁÅÔÓÑ ÎÁ `translit_end'"
+
+#: locale/programs/ld-ctype.c:2858
+#, c-format
+msgid "%s: duplicate `default_missing' definition"
+msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ `default_missing'"
+
+#: locale/programs/ld-ctype.c:2863
+msgid "previous definition was here"
+msgstr "ÐÒÅÄÙÄÕÝÅÅ ÏÐÒÅÄÅÌÅÎÉÅ ÂÙÌÏ ÚÄÅÓØ"
+
+#: locale/programs/ld-ctype.c:2885
+#, c-format
+msgid "%s: no representable `default_missing' definition found"
+msgstr "%s: ÎÅ ÎÁÊÄÅÎÏ ÐÒÅÄÓÔÁ×ÉÍÏÇÏ ÏÐÒÅÄÅÌÅÎÉÑ `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: ÚÎÁË `%s' ÎÅ ÏÐÒÅÄÅÌÅΠנÏÔÏÂÒÁÖÅÎÉÉ ÚÎÁËÏ×, ÏÄÎÁËÏ ÏΠÎÅÏÂÈÏÄÉÍ ËÁË ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: 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: ÚÎÁË `%s' × ÏÔÏÂÒÁÖÅÎÉÉ ÚÎÁËÏ× ÎÅÐÒÅÄÓÔÁ×ÉÍ ÏÄÎÉÍ ÂÁÊÔÏÍ"
+
+#: 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
+#, c-format
+msgid "%s: character `%s' not defined while needed as default value"
+msgstr "%s: ÚÎÁË `%s' ÎÅ ÏÐÒÅÄÅÌÅÎ, ÈÏÔÑ ÏΠÎÕÖÅΠËÁË ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: locale/programs/ld-ctype.c:3163
+#, c-format
+msgid "character `%s' not defined while needed as default value"
+msgstr "ÚÎÁË `%s' ÎÅ ÏÐÒÅÄÅÌÅÎ, ÈÏÔÑ ÏΠÎÕÖÅΠËÁË ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: locale/programs/ld-ctype.c:3403 locale/programs/ld-ctype.c:3428
+#, c-format
+msgid "%s: character `%s' needed as default value not representable with one byte"
+msgstr "%s: ÚÎÁË `%s' ÎÕÖÅΠËÁË ÚÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ, ÎÏ ÅÇÏ ÎÅÌØÚÑ ÐÒÅÄÓÔÁ×ÉÔØ ÏÄÎÉÍ ÂÁÊÔÏÍ"
+
+#: locale/programs/ld-ctype.c:3483
+#, c-format
+msgid "no output digits defined and none of the standard names in the charmap"
+msgstr ""
+
+#: locale/programs/ld-ctype.c:3774
+#, c-format
+msgid "%s: transliteration data from locale `%s' not available"
+msgstr "%s: ÎÅÔ ÄÁÎÎÙÈ ÄÌÑ ÔÒÁÎÓÌÉÔÅÒÁÃÉÉ ÉÚ ÌÏËÁÌÉ `%s'"
+
+#: locale/programs/ld-ctype.c:3875
+#, c-format
+msgid "%s: table for class \"%s\": %lu bytes\n"
+msgstr "%s: ÔÁÂÌÉÃÁ ÄÌÑ ËÌÁÓÓÁ \"%s\": %lu ÂÁÊÔ\n"
+
+#: locale/programs/ld-ctype.c:3944
+#, c-format
+msgid "%s: table for map \"%s\": %lu bytes\n"
+msgstr "%s: ÔÁÂÌÉÃÁ ÄÌÑ ÏÔÏÂÒÁÖÅÎÉÑ \"%s\": %lu ÂÁÊÔ\n"
+
+#: locale/programs/ld-ctype.c:4077
+#, c-format
+msgid "%s: table for width: %lu bytes\n"
+msgstr "%s: ÔÁÂÌÉÃÁ ÄÌÑ ÛÉÒÉÎÙ: %lu ÂÁÊÔ\n"
+
+#: locale/programs/ld-identification.c:169
+#, c-format
+msgid "%s: no identification for category `%s'"
+msgstr "%s: ÎÅÔ ÉÄÅÎÔÉÆÉËÁÃÉÉ ÄÌÑ ËÁÔÅÇÏÒÉÉ `%s'"
+
+#: locale/programs/ld-identification.c:434
+#, c-format
+msgid "%s: duplicate category version definition"
+msgstr "%s: ÐÏ×ÔÏÒÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ×ÅÒÓÉÉ ËÁÔÅÇÏÒÉÉ"
+
+#: locale/programs/ld-measurement.c:112
+#, c-format
+msgid "%s: invalid value for field `%s'"
+msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s'"
+
+#: locale/programs/ld-messages.c:113 locale/programs/ld-messages.c:147
+#, c-format
+msgid "%s: field `%s' undefined"
+msgstr "%s: ÐÏÌÅ `%s' ÎÅ ÏÐÒÅÄÅÌÅÎÏ"
+
+#: locale/programs/ld-messages.c:120 locale/programs/ld-messages.c:154
+#, c-format
+msgid "%s: value for field `%s' must not be an empty string"
+msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÏ ÂÙÔØ ÐÕÓÔÏÊ ÓÔÒÏËÏÊ"
+
+#: locale/programs/ld-messages.c:136 locale/programs/ld-messages.c:170
+#, c-format
+msgid "%s: no correct regular expression for field `%s': %s"
+msgstr "%s: ÎÅÔ ÐÒÁ×ÉÌØÎÏÇÏ ÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ ÄÌÑ ÐÏÌÑ `%s': %s"
+
+#: locale/programs/ld-monetary.c:222
+#, c-format
+msgid "%s: value of field `int_curr_symbol' has wrong length"
+msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `int_curr_symbol' ÉÍÅÅÔ ÎÅÐÒÁ×ÉÌØÎÕÀ ÄÌÉÎÕ"
+
+#: locale/programs/ld-monetary.c:235
+#, 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:254 locale/programs/ld-numeric.c:117
+#, c-format
+msgid "%s: value for field `%s' must not be the empty string"
+msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÏ ÂÙÔØ ÐÕÓÔÏÊ ÓÔÒÏËÏÊ"
+
+#: locale/programs/ld-monetary.c:282 locale/programs/ld-monetary.c:312
+#, c-format
+msgid "%s: value for field `%s' must be in range %d...%d"
+msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÄÏÌÖÎÏ ÂÙÔØ × ÄÉÁÐÁÚÏÎÅ %d...%d"
+
+#: locale/programs/ld-monetary.c:744 locale/programs/ld-numeric.c:273
+#, c-format
+msgid "%s: value for field `%s' must be a single character"
+msgstr "%s: ÚÎÁÞÅÎÉÅ ÐÏÌÑ `%s' ÄÏÌÖÎÏ ÂÙÔØ ÏÄÎÉÍ ÚÎÁËÏÍ"
+
+#: locale/programs/ld-monetary.c:841 locale/programs/ld-numeric.c:317
+#, c-format
+msgid "%s: `-1' must be last entry in `%s' field"
+msgstr "%s: `-1' ÄÏÌÖÎÏ ÂÙÔØ ÐÏÓÌÅÄÎÉÍ ×ÈÏÖÄÅÎÉÅ × ÐÏÌÅ `%s'"
+
+#: locale/programs/ld-monetary.c:863 locale/programs/ld-numeric.c:334
+#, c-format
+msgid "%s: values for field `%s' must be smaller than 127"
+msgstr "%s: ÚÎÁÞÅÎÉÑ ÐÏÌÑ `%s' ÄÏÌÖÎÙ ÂÙÔØ ÍÅÎØÛÅ 127"
+
+#: locale/programs/ld-monetary.c:906
+msgid "conversion rate value cannot be zero"
+msgstr "ÚÎÁÞÅÎÉÅ ÏÂÍÅÎÎÏÇÏ ËÕÒÓÁ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÎÕÌÅÍ"
+
+#: locale/programs/ld-name.c:128 locale/programs/ld-telephone.c:125
+#: locale/programs/ld-telephone.c:148
+#, c-format
+msgid "%s: invalid escape sequence in field `%s'"
+msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ÐÏÌÅ `%s'"
+
+#: locale/programs/ld-time.c:246
+#, c-format
+msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'"
+msgstr "%s: ÆÌÁÇ ÎÁÐÒÁ×ÌÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era' ÎÅ '+' É ÎÅ '-'"
+
+#: locale/programs/ld-time.c:257
+#, c-format
+msgid "%s: direction flag in string %Zd in `era' field is not a single character"
+msgstr "%s:  ÆÌÁÇ ÎÁÐÒÁ×ÌÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era' ÎÅ Ñ×ÌÑÅÔÓÑ ÏÄÎÉÍ ÚÎÁËÏÍ"
+
+#: locale/programs/ld-time.c:270
+#, c-format
+msgid "%s: invalid number for offset in string %Zd in `era' field"
+msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÏÅ ÞÉÓÌÏ ÄÌÑ ÓÍÅÝÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+
+#: locale/programs/ld-time.c:278
+#, c-format
+msgid "%s: garbage at end of offset value in string %Zd in `era' field"
+msgstr "%s: ÍÕÓÏÒ × ËÏÎÃÅ ÚÎÁÞÅÎÉÑ ÓÍÅÝÅÎÉÑ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+
+#: locale/programs/ld-time.c:329
+#, c-format
+msgid "%s: invalid starting date in string %Zd in `era' field"
+msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÁÑ ÎÁÞÁÌØÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+
+#: locale/programs/ld-time.c:338
+#, c-format
+msgid "%s: garbage at end of starting date in string %Zd in `era' field "
+msgstr "%s: ÍÕÓÏÒ × ËÏÎÃÅ ÎÁÞÁÌØÎÏÊ ÄÁÔÙ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+
+#: locale/programs/ld-time.c:357
+#, c-format
+msgid "%s: starting date is invalid in string %Zd in `era' field"
+msgstr "%s: ÎÅ×ÅÒÎÁÑ ÎÁÞÁÌØÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+
+#: locale/programs/ld-time.c:406
+#, c-format
+msgid "%s: invalid stopping date in string %Zd in `era' field"
+msgstr "%s: ÎÅ×ÅÒÎÁÑ ËÏÎÅÞÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+
+#: locale/programs/ld-time.c:415
+#, c-format
+msgid "%s: garbage at end of stopping date in string %Zd in `era' field"
+msgstr "%s: ÍÕÓÏÒ × ËÏÎÃÅ ËÏÎÅÞÎÏÊ ÄÁÔÙ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+
+#: locale/programs/ld-time.c:434
+#, c-format
+msgid "%s: stopping date is invalid in string %Zd in `era' field"
+msgstr "%s: ÎÅ×ÅÒÎÁÑ ËÏÎÅÞÎÁÑ ÄÁÔÁ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+
+#: locale/programs/ld-time.c:443
+#, c-format
+msgid "%s: missing era name in string %Zd in `era' field"
+msgstr "%s: ÐÒÏÐÕÝÅÎÏ ÉÍÑ ÜÒÙ × ÓÔÒÏËÅ %Zd  × ÐÏÌÅ `era'"
+
+#: locale/programs/ld-time.c:455
+#, c-format
+msgid "%s: missing era format in string %Zd in `era' field"
+msgstr "%s: ÐÒÏÐÕÝÅΠÆÏÒÍÁÔ ÜÒÙ × ÓÔÒÏËÅ %Zd × ÐÏÌÅ `era'"
+
+#: locale/programs/ld-time.c:496
+#, c-format
+msgid "%s: third operand for value of field `%s' must not be larger than %d"
+msgstr "%s: ÔÒÅÔÉÊ ÏÐÅÒÁÎÄ ÄÌÑ ÚÎÁÞÅÎÉÑ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÅΠÂÙÔØ ÂÏÌØÛÅ %d"
+
+#: locale/programs/ld-time.c:504 locale/programs/ld-time.c:512
+#, c-format
+msgid "%s: values of field `%s' must not be larger than %d"
+msgstr "%s: ÚÎÁÞÅÎÉÑ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÙ ÂÙÔØ ÂÏÌØÛÅ %d"
+
+#: locale/programs/ld-time.c:520
+#, c-format
+msgid "%s: values for field `%s' must not be larger than %d"
+msgstr "%s: ÚÎÁÞÅÎÉÑ ÄÌÑ ÐÏÌÑ `%s' ÎÅ ÄÏÌÖÎÙ ÂÙÔØ ÂÏÌØÛÅ %d"
+
+#: locale/programs/ld-time.c:1003
+#, c-format
+msgid "%s: too few values for field `%s'"
+msgstr "%s: ÓÌÉÛËÏÍ ÍÁÌÏ ÚÎÁÞÅÎÉÊ ÄÌÑ ÐÏÌÑ `%s'"
+
+#: locale/programs/ld-time.c:1048
+msgid "extra trailing semicolon"
+msgstr "ÌÉÛÎÅÅ Ä×ÏÅÔÏÞÉÅ × ËÏÎÃÅ"
+
+#: locale/programs/ld-time.c:1051
+#, c-format
+msgid "%s: too many values for field `%s'"
+msgstr "%s: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÚÎÁÞÅÎÉÊ ÄÌÑ ÐÏÌÑ `%s'"
+
+#: locale/programs/linereader.c:129
+msgid "trailing garbage at end of line"
+msgstr "ÍÕÓÏÒ × ËÏÎÃÅ ÓÔÒÏËÉ"
+
+#: locale/programs/linereader.c:297
+msgid "garbage at end of number"
+msgstr "ÍÕÓÏÒ × ËÏÎÃÅ ÞÉÓÌÁ"
+
+#: locale/programs/linereader.c:409
+msgid "garbage at end of character code specification"
+msgstr "ÍÕÓÏÒ × ËÏÎÃÅ ÓÐÅÃÉÆÉËÁÃÉÉ ËÏÄÁ ÚÎÁËÁ"
+
+#: locale/programs/linereader.c:495
+msgid "unterminated symbolic name"
+msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÏÅ ÓÉÍ×ÏÌØÎÏÅ ÉÍÑ"
+
+#: locale/programs/linereader.c:622
+msgid "illegal escape sequence at end of string"
+msgstr "ÎÅ×ÅÒÎÁÑ ÕÐÒÁ×ÌÑÀÝÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ × ËÏÎÃÅ ÓÔÒÏËÉ"
+
+#: locale/programs/linereader.c:626 locale/programs/linereader.c:854
+msgid "unterminated string"
+msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÓÔÒÏËÁ"
+
+#: locale/programs/linereader.c:668
+msgid "non-symbolic character value should not be used"
+msgstr "ÎÅ ÓÔÏÉÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÎÅÓÉÍ×ÏÌØÎÏÅ ÚÎÁËÏ×ÏÅ ÚÎÁÞÅÎÉÅ"
+
+#: locale/programs/linereader.c:815
+#, c-format
+msgid "symbol `%.*s' not in charmap"
+msgstr "ÓÉÍ×ÏÌ `%.*s' ÏÔÓÕÔÓÔ×ÕÅÔ × ÏÔÏÂÒÁÖÅÎÉÉ ÚÎÁËÏ×"
+
+#: locale/programs/linereader.c:836
+#, c-format
+msgid "symbol `%.*s' not in repertoire map"
+msgstr "ÓÉÍ×ÏÌ `%.*s' ÏÔÓÕÔÓÔ×ÕÅÔ × ÏÔÏÂÒÁÖÅÎÉÉ ÒÅÐÅÒÔÕÁÒÁ"
+
+#: locale/programs/locale.c:73
+msgid "System information:"
+msgstr "éÎÆÏÒÍÁÃÉÑ Ï ÓÉÓÔÅÍÅ:"
+
+#: locale/programs/locale.c:75
+msgid "Write names of available locales"
+msgstr "îÁÐÉÓÁÔØ ÉÍÅÎÁ ÄÏÓÔÕÐÎÙÈ ÌÏËÁÌÅÊ"
+
+#: locale/programs/locale.c:77
+msgid "Write names of available charmaps"
+msgstr "ðÅÞÁÔÁÅÔ ÉÍÅÎÁ ÄÏÓÔÕÐÎÙÈ ÏÔÏÂÒÁÖÅÎÉÊ ÚÎÁËÏ×"
+
+#: locale/programs/locale.c:78
+msgid "Modify output format:"
+msgstr "éÚÍÅÎÅÎÉÅ ×ÙÈÏÄÎÏÇÏ ÆÏÒÍÁÔÁ:"
+
+#: locale/programs/locale.c:79
+msgid "Write names of selected categories"
+msgstr "îÁÐÉÓÁÔØ ÉÍÅÎÁ ×ÙÂÒÁÎÎÙÈ ËÁÔÅÇÏÒÉÊ"
+
+#: locale/programs/locale.c:80
+msgid "Write names of selected keywords"
+msgstr "îÁÐÉÓÁÔØ ÉÍÅÎÁ ×ÙÂÒÁÎÎÙÈ ËÌÀÞÅ×ÙÈ ÓÌÏ×"
+
+#: locale/programs/locale.c:81
+msgid "Print more information"
+msgstr "îÁÐÅÞÁÔÁÔØ ÂÏÌØÛÅ ÉÎÆÏÒÍÁÃÉÉ"
+
+#: locale/programs/locale.c:86
+msgid ""
+"Get locale-specific information.\vFor bug reporting instructions, please see:\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
+msgstr ""
+"÷ÙÄÁÅÔ ÉÎÆÏÒÍÁÃÉÀ, ÏÔÎÏÓÑÝÕÀÓÑ Ë ÌÏËÁÌÉ.\véÎÓÔÒÕËÃÉÉ ÐÏ ÓÏÏÂÝÅÎÉÀ Ï ÏÛÉÂËÁÈ ÓÍÏÔÒÉÔÅ ÎÁ\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
+
+#: locale/programs/locale.c:91
+msgid ""
+"NAME\n"
+"[-a|-m]"
+msgstr ""
+"éíñ\n"
+"[-a|-m]"
+
+#: locale/programs/locale.c:192
+#, c-format
+msgid "Cannot set LC_CTYPE to default locale"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_CTYPE × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ."
+
+#: locale/programs/locale.c:194
+#, c-format
+msgid "Cannot set LC_MESSAGES to default locale"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_MESSAGES × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ."
+
+#: locale/programs/locale.c:207
+#, c-format
+msgid "Cannot set LC_COLLATE to default locale"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_COLLATE × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ."
+
+#: locale/programs/locale.c:223
+#, c-format
+msgid "Cannot set LC_ALL to default locale"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ LC_ALL × ÌÏËÁÌØ ÐÏ ÕÍÏÌÞÁÎÉÀ."
+
+#: locale/programs/locale.c:499
+#, c-format
+msgid "while preparing output"
+msgstr "ÐÒÉ ÐÏÄÇÏÔÏ×ËÅ ×Ù×ÏÄÁ"
+
+#: locale/programs/localedef.c:119
+msgid "Input Files:"
+msgstr "÷ÈÏÄÎÙÅ ÆÁÊÌÙ:"
+
+#: locale/programs/localedef.c:121
+msgid "Symbolic character names defined in FILE"
+msgstr "óÉÍ×ÏÌØÎÙÅ ÉÍÅÎÁ ÚÎÁËÏ× ÏÂßÑ×ÌÅÎÙ × æáêìå"
+
+#: locale/programs/localedef.c:122
+msgid "Source definitions are found in FILE"
+msgstr "éÓÈÏÄÎÙÅ ÏÐÒÅÄÅÌÅÎÉÑ ÎÁÈÏÄÑÔÓÑ × æáêìå"
+
+#: locale/programs/localedef.c:124
+msgid "FILE contains mapping from symbolic names to UCS4 values"
+msgstr "æáêì ÓÏÄÅÒÖÉÔ ÏÔÏÂÒÁÖÅÎÉÑ ÉÚ ÓÉÍ×ÏÌØÎÙÈ ÉÍÅΠנÚÎÁÞÅÎÉÑ UCS4"
+
+#: locale/programs/localedef.c:128
+msgid "Create output even if warning messages were issued"
+msgstr "óÏÚÄÁ×ÁÔØ ×Ù×ÏÄ, ÄÁÖÅ ÅÓÌÉ ÂÙÌÉ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ"
+
+#: locale/programs/localedef.c:129
+msgid "Create old-style tables"
+msgstr "óÏÚÄÁ×ÁÔØ ÔÁÂÌÉÃÙ × ÓÔÁÒÏÍ ÓÔÉÌÅ"
+
+#: locale/programs/localedef.c:130
+msgid "Optional output file prefix"
+msgstr "îÅÏÂÑÚÁÔÅÌØÎÙÊ ÐÒÅÆÉËÓ ÄÌÑ ×ÙÈÏÄÎÙÈ ÆÁÊÌÏ×"
+
+#: locale/programs/localedef.c:131
+msgid "Be strictly POSIX conform"
+msgstr "óÔÒÏÇÏ ÓÌÅÄÏ×ÁÔØ ÓÔÁÎÄÁÒÔÕ POSIX"
+
+#: locale/programs/localedef.c:133
+msgid "Suppress warnings and information messages"
+msgstr "îÅ ×Ù×ÏÄÉÔØ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ É ÉÎÆÏÒÍÁÃÉÏÎÎÙÅ ÓÏÏÂÝÅÎÉÑ"
+
+#: locale/programs/localedef.c:134
+msgid "Print more messages"
+msgstr "ðÅÞÁÔÁÔØ ÂÏÌØÛÅ ÓÏÏÂÝÅÎÉÊ"
+
+#: locale/programs/localedef.c:135
+msgid "Archive control:"
+msgstr "õÐÒÁ×ÌÅÎÉÅ ÁÒÈÉ×ÏÍ:"
+
+#: locale/programs/localedef.c:137
+msgid "Don't add new data to archive"
+msgstr "îÅ ÄÏÂÁ×ÌÑÔØ × ÁÒÈÉ× ÎÏ×ÙÅ ÄÁÎÎÙÅ"
+
+#: locale/programs/localedef.c:139
+msgid "Add locales named by parameters to archive"
+msgstr "äÏÂÁ×ÉÔØ × ÁÒÈÉ× ÌÏËÁÌÉ, ÕËÁÚÁÎÎÙÅ × ÐÁÒÁÍÅÔÒÁÈ"
+
+#: locale/programs/localedef.c:140
+msgid "Replace existing archive content"
+msgstr "úÁÍÅÎÉÔØ ÓÕÝÅÓÔ×ÕÀÝÅÅ ÓÏÄÅÒÖÉÍÏÅ ÁÒÈÉ×Á"
+
+#: locale/programs/localedef.c:142
+msgid "Remove locales named by parameters from archive"
+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 "ïÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ"
+#: locale/programs/localedef.c:143
+msgid "List content of archive"
+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 "îÅÔ ÔÁËÏÇÏ ÕÓÔÒÏÊÓÔ×Á ÉÌÉ ÁÄÒÅÓÁ"
+#: locale/programs/localedef.c:145
+msgid "locale.alias file to consult when making archive"
+msgstr "ÆÁÊÌ locale.alias, Ë ËÏÔÏÒÏÍÕ ÓÌÅÄÕÅÔ ÏÂÒÁÝÁÔØÓÑ ÐÒÉ ÓÏÚÄÁÎÉÉ ÁÒÈÉ×Á"
 
-#. 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 "óÌÉÛËÏÍ ÄÌÉÎÎÙÊ ÓÐÉÓÏË ÁÒÇÕÍÅÎÔÏ×"
+#: locale/programs/localedef.c:150
+msgid "Compile locale specification"
+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 "ïÛÉÂËÁ ÆÏÒÍÁÔÁ ×ÙÐÏÌÎÑÅÍÏÇÏ ÆÁÊÌÁ"
+#: locale/programs/localedef.c:153
+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 [æáêì]"
 
-#. 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 "îÅÐÒÁ×ÉÌØÎÙÊ ÄÅÓËÒÉÐÔÏÒ ÆÁÊÌÁ"
+#: locale/programs/localedef.c:231
+#, c-format
+msgid "cannot create directory for output files"
+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 "îÅÔ ÄÏÞÅÒÎÉÈ ÐÒÏÃÅÓÓÏ×"
+#: locale/programs/localedef.c:242
+#, c-format
+msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'"
+msgstr "æáôáìøîáñ ïûéâëá: ÓÉÓÔÅÍÁ ÎÅ ÏÐÒÅÄÅÌÑÅÔ `_POSIX2_LOCALEDEF'"
 
-#. 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"
+#: locale/programs/localedef.c:256 locale/programs/localedef.c:272
+#: locale/programs/localedef.c:598 locale/programs/localedef.c:618
+#, c-format
+msgid "cannot open locale definition file `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ Ó ÏÐÒÅÄÅÌÅÎÉÅÍ ÌÏËÁÌÉ `%s'"
+
+#: locale/programs/localedef.c:284
+#, c-format
+msgid "cannot write output files to `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ×ÙÈÏÄÎÙÅ ÆÁÊÌÙ × `%s'"
+
+#: locale/programs/localedef.c:365
+#, c-format
+msgid ""
+"System's directory for character maps : %s\n"
+"                       repertoire maps: %s\n"
+"                       locale path    : %s\n"
+"%s"
 msgstr ""
+"óÉÓÔÅÍÎÙÅ ËÁÔÁÌÏÇÉ ÄÌÑ ÏÔÏÂÒÁÖÅÎÉÊ ÚÎÁËÏ×: %s\n"
+"                  ÏÔÏÂÒÁÖÅÎÉÊ ÒÅÐÅÒÔÕÁÒÏ×: %s\n"
+"                       ÐÕÔØ ÌÏËÁÌÉ       : %s\n"
+"%s"
 
-#. 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 "îÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ"
+#: locale/programs/localedef.c:566
+#, c-format
+msgid "circular dependencies between locale definitions"
+msgstr "ÃÉËÌÉÞÅÓËÉÅ ÚÁ×ÉÓÉÍÏÓÔÉ ÍÅÖÄÕ ÏÐÒÅÄÅÌÅÎÉÑÍÉ ÌÏËÁÌÅÊ"
 
-#. TRANS Permission denied; the file permissions do not allow the attempted operation.
-#: stdio-common/../sysdeps/gnu/errlist.c:149
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:43
-#: nis/nis_error.c:39 nis/ypclnt.c:808
-msgid "Permission denied"
-msgstr "ïÔËÁÚÁÎÏ × ÄÏÓÔÕÐÅ"
+#: locale/programs/localedef.c:572
+#, c-format
+msgid "cannot add already read locale `%s' a second time"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ ÕÖÅ ÓÞÉÔÁÎÎÕÀ ÌÏËÁÌØ `%s' ×ÔÏÒÏÊ ÒÁÚ"
 
-#. 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 "îÅÐÒÁ×ÉÌØÎÙÊ ÁÄÒÅÓ"
+#: locale/programs/locarchive.c:87 locale/programs/locarchive.c:256
+#, c-format
+msgid "cannot create temporary file"
+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 "ôÒÅÂÕÅÔÓÑ ÂÌÏÞÎÏÅ ÕÓÔÒÏÊÓÔ×Ï"
+#: locale/programs/locarchive.c:116 locale/programs/locarchive.c:302
+#, c-format
+msgid "cannot initialize archive file"
+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 "õÓÔÒÏÊÓÔ×Ï ÉÌÉ ÒÅÓÕÒÓ ÚÁÎÑÔÏ"
+#: locale/programs/locarchive.c:123 locale/programs/locarchive.c:309
+#, c-format
+msgid "cannot resize archive file"
+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 "æÁÊÌ ÓÕÝÅÓÔ×ÕÅÔ"
+#: locale/programs/locarchive.c:132 locale/programs/locarchive.c:318
+#: locale/programs/locarchive.c:506
+#, c-format
+msgid "cannot map archive header"
+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 "îÅ×ÅÒÎÁÑ ÓÓÙÌËÁ ÍÅÖÄÕ ÕÓÔÒÏÊÓÔ×ÁÍÉ"
+#: locale/programs/locarchive.c:154
+#, c-format
+msgid "failed to create new locale archive"
+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 "îÅÔ ÔÁËÏÇÏ ÕÓÔÒÏÊÓÔ×Á"
+#: locale/programs/locarchive.c:166
+#, c-format
+msgid "cannot change mode of new locale archive"
+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 "üÔÏ ÎÅ ËÁÔÁÌÏÇ"
+#: locale/programs/locarchive.c:250
+#, c-format
+msgid "cannot map locale archive file"
+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 "üÔÏ ËÁÔÁÌÏÇ"
+#: locale/programs/locarchive.c:326
+#, c-format
+msgid "cannot lock new archive"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÎÏ×ÙÊ ÁÒÈÉ×"
+
+#: locale/programs/locarchive.c:375
+#, c-format
+msgid "cannot extend locale archive file"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÒÁÓÛÉÒÉÔØ ÁÒÈÉ×ÎÙÊ ÆÁÊÌ ÌÏËÁÌÉ"
+
+#: locale/programs/locarchive.c:384
+#, c-format
+msgid "cannot change mode of resized locale archive"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ ÐÒÁ×Á ÄÏÓÔÕÐÁ ÁÒÈÉ×Á ÌÏËÁÌÉ ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÚÍÅÒÁ"
+
+#: locale/programs/locarchive.c:392
+#, c-format
+msgid "cannot rename new archive"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÉÍÅÎÏ×ÁÔØ ÎÏ×ÙÊ ÁÒÈÉ×"
+
+#: locale/programs/locarchive.c:445
+#, c-format
+msgid "cannot open locale archive \"%s\""
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÁÒÈÉ× ÌÏËÁÌÉ \"%s\""
+
+#: locale/programs/locarchive.c:450
+#, c-format
+msgid "cannot stat locale archive \"%s\""
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat ÄÌÑ ÁÒÈÉ×Á ÌÏËÁÌÉ \"%s\""
+
+#: locale/programs/locarchive.c:469
+#, c-format
+msgid "cannot lock locale archive \"%s\""
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÂÌÏËÉÒÏ×ÁÔØ ÁÒÈÉ× ÌÏËÁÌÉ \"%s\""
+
+#: locale/programs/locarchive.c:492
+#, c-format
+msgid "cannot read archive header"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË ÁÒÈÉ×Á"
+
+#: locale/programs/locarchive.c:552
+#, c-format
+msgid "locale '%s' already exists"
+msgstr "ÌÏËÁÌØ '%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ"
+
+#: 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
+#, c-format
+msgid "cannot add to locale archive"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÄÏÂÁ×ÉÔØ Ë ÁÒÈÉ×Õ ÌÏËÁÌÉ"
+
+#: locale/programs/locarchive.c:977
+#, c-format
+msgid "locale alias file `%s' not found"
+msgstr "ÆÁÊÌ ÐÓÅ×ÄÏÎÉÍÏ× ÌÏËÁÌÅÊ `%s' ÎÅ ÎÁÊÄÅÎ"
+
+#: locale/programs/locarchive.c:1121
+#, c-format
+msgid "Adding %s\n"
+msgstr "äÏÂÁ×ÌÅÎÉÅ %s\n"
+
+#: locale/programs/locarchive.c:1127
+#, c-format
+msgid "stat of \"%s\" failed: %s: ignored"
+msgstr "ÏÐÅÒÁÃÉÑ stat ÄÌÑ \"%s\" ÎÅÕÓÐÅÛÎÁ: %s: ÉÇÎÏÒÉÒÏ×ÁÎÏ"
+
+#: locale/programs/locarchive.c:1133
+#, c-format
+msgid "\"%s\" is no directory; ignored"
+msgstr "\"%s\" ÎÅ Ñ×ÌÑÅÔÓÑ ËÁÔÁÌÏÇÏÍ; ÉÇÎÏÒÉÒÏ×ÁÎÏ"
+
+#: locale/programs/locarchive.c:1140
+#, c-format
+msgid "cannot open directory \"%s\": %s: ignored"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÔÁÌÏÇ \"%s\": %s: ÉÇÎÏÒÉÒÏ×ÁÎÏ"
+
+#: locale/programs/locarchive.c:1212
+#, c-format
+msgid "incomplete set of locale files in \"%s\""
+msgstr "ÎÅÐÏÌÎÙÊ ÎÁÂÏÒ ÆÁÊÌÏ× ÌÏËÁÌÉ × \"%s\""
+
+#: locale/programs/locarchive.c:1276
+#, c-format
+msgid "cannot read all files in \"%s\": ignored"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ×ÓÅ ÆÁÊÌÙ × \"%s\": ÉÇÎÏÒÉÒÏ×ÁÎÏ"
+
+#: locale/programs/locarchive.c:1346
+#, c-format
+msgid "locale \"%s\" not in archive"
+msgstr "ÌÏËÁÌØ \"%s\" ÏÔÓÕÔÓÔ×ÕÅÔ × ÁÒÈÉ×Å"
+
+#: locale/programs/locfile.c:131
+#, c-format
+msgid "argument to `%s' must be a single character"
+msgstr "ÁÒÇÕÍÅÎÔ ÄÌÑ `%s' ÄÏÌÖÅΠÂÙÔØ ÏÄÎÉÍ ÚÎÁËÏÍ"
+
+#: locale/programs/locfile.c:251
+msgid "syntax error: not inside a locale definition section"
+msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ: ×ÎÅ ÓÅËÃÉÉ ÏÐÒÅÄÅÌÅÎÉÑ ÌÏËÁÌÉ"
+
+#: locale/programs/locfile.c:625
+#, c-format
+msgid "cannot open output file `%s' for category `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s' ÄÌÑ ËÁÔÅÇÏÒÉÉ `%s'"
+
+#: locale/programs/locfile.c:649
+#, c-format
+msgid "failure while writing data for category `%s'"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁÐÉÓÉ ÄÁÎÎÙÈ ÄÌÑ ËÁÔÅÇÏÒÉÉ`%s'"
+
+#: locale/programs/locfile.c:745
+#, c-format
+msgid "cannot create output file `%s' for category `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÙÈÏÄÎÏÊ ÆÁÊÌ `%s' ÄÌÑ ËÁÔÅÇÏÒÉÉ `%s'"
+
+#: locale/programs/locfile.c:781
+msgid "expect string argument for `copy'"
+msgstr "ÄÌÑ `copy' ÏÖÉÄÁÅÔÓÑ ÁÒÇÕÍÅÎÔ-ÓÔÒÏËÁ"
+
+#: locale/programs/locfile.c:785
+msgid "locale name should consist only of portable characters"
+msgstr "ÉÍÑ ÌÏËÁÌÉ ÄÏÌÖÎÏ ÓÏÓÔÏÑÔØ ÔÏÌØËÏ ÉÚ ÐÅÒÅÎÏÓÉÍÙÈ ÚÎÁËÏ×"
+
+#: locale/programs/locfile.c:804
+msgid "no other keyword shall be specified when `copy' is used"
+msgstr "ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ `copy' ÎÅÌØÚÑ ÚÁÄÁ×ÁÔØ ÄÒÕÇÉÅ ËÌÀÞÅ×ÙÅ ÓÌÏ×Á"
+
+#: locale/programs/repertoire.c:229 locale/programs/repertoire.c:270
+#: locale/programs/repertoire.c:295
+#, c-format
+msgid "syntax error in repertoire map definition: %s"
+msgstr "ÓÉÎÔÁËÓÉÞÅÓËÁÑ ÏÛÉÂËÁ × ÏÐÒÅÄÅÌÅÎÉÉ ÏÔÏÂÒÁÖÅÎÉÑ ÒÅÐÅÒÔÕÁÒÁ: %s"
+
+#: locale/programs/repertoire.c:271
+msgid "no <Uxxxx> or <Uxxxxxxxx> value given"
+msgstr "ÎÅ ÚÁÄÁÎÏ ÚÎÁÞÅÎÉÅ <Uxxxx> ÉÌÉ <Uxxxxxxxx>"
+
+#: locale/programs/repertoire.c:331
+#, c-format
+msgid "cannot save new repertoire map"
+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 "îÅÄÏÐÕÓÔÉÍÙÊ ÁÒÇÕÍÅÎÔ"
+#: locale/programs/repertoire.c:342
+#, c-format
+msgid "repertoire map file `%s' not found"
+msgstr "ÆÁÊÌ ÏÔÏÂÒÁÖÅÎÉÑ ÒÅÐÅÒÔÕÁÒÁ `%s' ÎÅ ÎÁÊÄÅÎ"
 
-#. 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 "óÌÉÛËÏÍ ÍÎÏÇÏ ÏÔËÒÙÔÙÈ ÆÁÊÌÏ×"
+#: locale/programs/repertoire.c:449
+#, c-format
+msgid "<%s> and <%s> are invalid names for range"
+msgstr "<%s> É <%s> ÎÅ Ñ×ÌÑÀÔÓÑ ÄÏÐÕÓÔÉÍÙÍÉ ÉÍÅÎÁÍÉ ÄÉÁÐÁÚÏÎÁ"
 
-#. 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 "óÌÉÛËÏÍ ÍÎÏÇÏ ÏÔËÒÙÔÙÈ ÆÁÊÌÏ× × ÓÉÓÔÅÍÅ"
+#: locale/programs/repertoire.c:456
+msgid "upper limit in range is not smaller then lower limit"
+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"
+#: 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 "õÓÔÁÎÁ×ÌÉ×ÁÅÔ ×ÌÁÄÅÌØÃÁ, ÇÒÕÐÐÕ É ÐÒÁ×Á ÄÏÓÔÕÐÁ ÄÌÑ ÐÏÄÞÉÎÅÎÎÏÇÏ ÐÓÅ×ÄÏÔÅÒÍÉÎÁÌÁ, ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÇÏ ÏÓÎÏ×ÎÏÍÕ ÐÓÅ×ÄÏÔÅÒÍÉÎÁÌÕ, ÐÅÒÅÄÁÎÎÏÇÏ ÐÏ ÄÅÓËÒÉÐÔÏÒÕ ÆÁÊÌÁ `%d'.  üÔÏ ×ÓÐÏÍÏÇÁÔÅÌØÎÁÑ ÐÒÏÇÒÁÍÍÁ ÄÌÑ ÆÕÎËÃÉÉ `grantpt'.  ïÎÁ ÎÅ ÐÒÅÄÎÁÚÎÁÞÅÎÁ ÄÌÑ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏÇÏ ÚÁÐÕÓËÁ ÉÚ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ.\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.
-#: stdio-common/../sysdeps/gnu/errlist.c:290
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:56
-msgid "Text file busy"
-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 ""
+"÷ÌÁÄÅÌÅàÕÓÔÁÎÁ×ÌÅΠנÔÅËÕÝÅÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ, ÇÒÕÐÐÁ ÕÓÔÁÎÁ×ÌÅÎÁ × `%s', ÐÒÁ×Á ÄÏÓÔÕÐÁ ÕÓÔÁÎÁ×ÌÅÎÙ × `%o'.\n"
+"\n"
+"%s"
 
-#. 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 "æÁÊÌ ÓÌÉÛËÏÍ ×ÅÌÉË"
+#: login/programs/pt_chown.c:161
+#, c-format
+msgid "too many arguments"
+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 "îÁ ÕÓÔÒÏÊÓÔ×Å ËÏÎÞÉÌÏÓØ ÍÅÓÔÏ"
+#: login/programs/pt_chown.c:169
+#, c-format
+msgid "needs to be installed setuid `root'"
+msgstr "ÎÅÏÂÈÏÄÉÍÏ ÕÓÔÁÎÏ×ÉÔØ Ó setuid `root'"
 
-#. 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 "îÅÄÏÐÕÓÔÉÍÁÑ ÏÐÅÒÁÃÉÑ ÓÍÅÝÅÎÉÑ"
+#: malloc/mcheck.c:324
+msgid "memory is consistent, library is buggy\n"
+msgstr "ÐÁÍÑÔØ × ÈÏÒÏÛÅÍ ÓÏÓÔÏÑÎÉÉ, ÏÛÉÂËÉ × ÂÉÂÌÉÏÔÅËÅ\n"
 
-#. 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 "æÁÊÌÏ×ÁÑ ÓÉÓÔÅÍÁ ÄÏÓÔÕÐÎÁ ÔÏÌØËÏ ÄÌÑ ÞÔÅÎÉÑ"
+#: malloc/mcheck.c:327
+msgid "memory clobbered before allocated block\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}).
-#: stdio-common/../sysdeps/gnu/errlist.c:338
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:61
-msgid "Too many links"
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÓÓÙÌÏË"
+#: malloc/mcheck.c:330
+msgid "memory clobbered past end of allocated block\n"
+msgstr "ÐÁÍÑÔØ ÚÁÔÅÒÔÁ ÐÏÓÌÅ ËÏÎÃÁ ×ÙÄÅÌÅÎÎÏÇÏ ÂÌÏËÁ\n"
 
-#. 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 "þÉÓÌÏ×ÏÊ ÁÒÇÕÍÅÎÔ ×ÎÅ ÏÂÌÁÓÔÉ ÏÐÒÅÄÅÌÅÎÉÑ"
+#: malloc/mcheck.c:333
+msgid "block freed twice\n"
+msgstr "ÂÌÏË ÏÓ×ÏÂÏÖÄÅΠÄ×ÁÖÄÙ\n"
 
-#. 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 "þÉÓÌÏ×ÏÊ ÒÅÚÕÌØÔÁÔ ×ÎÅ ÐÒÅÄÓÔÁ×ÉÍÏÇÏ ÄÉÁÐÁÚÏÎÁ"
+#: malloc/mcheck.c:336
+msgid "bogus mcheck_status, library is buggy\n"
+msgstr "ÎÅÁÄÅË×ÁÔÎÙÊ mcheck_status, × ÂÉÂÌÉÏÔÅËÅ ÏÛÉÂËÉ\n"
 
-#. 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 "òÅÓÕÒÓ ×ÒÅÍÅÎÎÏ ÎÅÄÏÓÔÕÐÅÎ"
+#: malloc/memusage.sh:27
+msgid "Try `memusage --help' for more information."
+msgstr "ðÏÐÒÏÂÕÊÔÅ `memusage --help' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ."
 
-#. 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 "ïÐÅÒÁÃÉÑ ÐÒÉ×ÅÄÅÔ Ë ÂÌÏËÉÒÏ×ËÅ"
+#: malloc/memusage.sh:33
+msgid "memusage: option `$1' requires an argument"
+msgstr "memusage: ËÌÀÞ `$1' ÔÒÅÂÕÅÔ ÁÒÇÕÍÅÎÔ"
 
-#. 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 "ïÐÅÒÁÃÉÑ ×ÙÐÏÌÎÑÅÔÓÑ × ÄÁÎÎÙÊ ÍÏÍÅÎÔ"
+#: 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 though 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 ""
+"éÓÐÏÌØÚÏ×ÁÎÉÅ: memusage [ëìàþ]... ðòïçòáííá [ëìàþ-ðòïçòáííù]...\n"
+"ðÒÏÆÉÌÉÒÕÅÔ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÐÁÍÑÔÉ ðòïçòáííïê.\n"
+"\n"
+"   -n,--progname=éíñ      éÍÑ ÐÒÏÇÒÁÍÍÎÏÇÏ ÆÁÊÌÁ ÄÌÑ ÐÒÏÆÉÌÉÒÏ×ËÉ\n"
+"   -p,--png=æáêì          óÏÚÄÁÔØ PNG-ÇÒÁÆÉË É ÚÁÐÉÓÁÔØ ÅÇÏ × æáêì\n"
+"   -d,--data=æáêì         óÏÚÄÁÔØ ÂÉÎÁÒÎÙÊ ÆÁÊÌ ÄÁÎÎÙÈ É ÚÁÐÉÓÁÔØ ÅÇÏ æáêì\n"
+"   -u,--unbuffered        îÅ ÂÕÆÅÒÉÒÏ×ÁÔØ ×Ù×ÏÄ\n"
+"   -b,--buffer=þéóìï      óÏÂÒÁÔØ ÚÁÄÁÎÎÏÅ þéóìï ×ÈÏÖÄÅÎÉÊ ÐÅÒÅÄ ÚÁÐÉÓØÀ\n"
+"      --no-timer          îÅ ÓÏÂÉÒÁÔØ ÄÏÐÏÌÎÉÔÅÌØÎÕÀ ÉÎÆÏÒÍÁÃÉÀ ÐÏ ÔÁÊÍÅÒÕ\n"
+"   -m,--mmap              ôÒÁÓÓÉÒÏ×ÁÔØ ÔÁËÖÅ mmap É ÅÅ ÄÒÕÚÅÊ\n"
+"\n"
+"   -?,--help              îÁÐÅÞÁÔÁÔØ ÜÔÕ ÓÐÒÁ×ËÕ É ×ÙÊÔÉ\n"
+"      --usage             ðÏËÁÚÁÔØ ËÒÁÔËÕÀ ÓÐÒÁ×ËÕ Ï ÉÓÐÏÌØÚÏ×ÁÎÉÉ\n"
+"   -V,--version           îÁÐÅÞÁÔÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ É ×ÙÊÔÉ\n"
+"\n"
+" óÌÅÄÕÀÝÉÅ ËÌÀÞÉ ÐÒÉÍÅÎÉÍÙ ÔÏÌØËÏ ÐÒÉ ÇÅÎÅÒÉÒÏ×ÁÎÉÉ ÇÒÁÆÉÞÅÓËÏÇÏ ×Ù×ÏÄÁ:\n"
+"   -t,--time-based        óÄÅÌÁÔØ ÌÉÎÅÊÎÙÊ ÐÏ ×ÒÅÍÅÎÉ ÇÒÁÆÉË\n"
+"   -T,--total             îÁÞÅÒÔÉÔØ ÔÁËÖÅ ÉÔÏÇÏ×ÙÊ ÇÒÁÆÉË ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÐÁÍÑÔÉ\n"
+"      --title=óôòïëá      éÓÐÏÌØÚÏ×ÁÔØ óôòïëõ × ËÁÞÅÓÔ×Å ÚÁÇÏÌÏ×ËÁ ÇÒÁÆÉËÁ\n"
+"   -x,--x-size=þéóìï      óÄÅÌÁÔØ ÇÒÁÆÉË ×ÙÓÏÔÏÊ × ÚÁÄÁÎÎÏÅ þéóìï ÐÉËÓÅÌÏ×\n"
+"   -y,--y-size=þéóìï      óÄÅÌÁÔØ ÇÒÁÆÉË ÛÉÒÉÎÏÊ × ÚÁÄÁÎÎÏÅ þéóìï ÐÉËÓÅÌÏ×\n"
+"\n"
+"\n"
+"áÒÇÕÍÅÎÔÙ, ÏÂÑÚÁÔÅÌØÎÙÅ ÄÌÑ ÄÌÉÎÎÙÈ ËÌÀÞÅÊ, ÏÂÑÚÁÔÅÌØÎÙ É ÄÌÑ\n"
+"ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ËÏÒÏÔËÉÈ.\n"
+"\n"
+"éÎÓÔÒÕËÃÉÉ ÐÏ ÓÏÏÂÝÅÎÉÀ Ï ÏÛÉÂËÁÈ ÓÍÏÔÒÉÔÅ ÎÁ\n"
+"<http://www.gnu.org/software/libc/bugs.html>."
 
-#. 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 "ïÐÅÒÁÃÉÑ ÕÖÅ ×ÙÐÏÌÎÑÅÔÓÑ"
+#: malloc/memusage.sh:90
+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 ""
+"óÉÎÔÁËÓÉÓ: memusage [--data=æáêì] [--progname=éíñ] [--png=æáêì] [--unbuffered]\n"
+"            [--buffer=þéóìï] [--no-timer] [--time-based] [--total]\n"
+"            [--title=óôòïëá] [--x-size=þéóìï] [--y-size=þéóìï]\n"
+"            ðòïçòáííá [ëìàþ-ðòïçòáííù]..."
 
-#. 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 "ïÐÅÒÁÃÉÑ ÄÌÑ ÓÏËÅÔÁ ÐÒÉÍÅÎÅÎÁ Ë ÎÅ-ÓÏËÅÔÕ"
+#: malloc/memusage.sh:182
+msgid "memusage: option `${1##*=}' is ambiguous"
+msgstr "memusage: ËÌÀÞ `${1##*=}' ÎÅÏÄÎÏÚÎÁÞÅÎ"
 
-#. 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 "óÏÏÂÝÅÎÉÅ ÓÌÉÛËÏÍ ÄÌÉÎÎÏÅ"
+#: malloc/memusage.sh:191
+msgid "memusage: unrecognized option `$1'"
+msgstr "memusage: ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ËÌÀÞ `$1'"
 
-#. 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 "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÄÌÑ ÓÏËÅÔÁ ÔÉРÐÒÏÔÏËÏÌÁ"
+#: malloc/memusage.sh:204
+msgid "No program name given"
+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 "ðÒÏÔÏËÏÌ ÎÅÄÏÓÔÕÐÅÎ"
+#: malloc/memusagestat.c:53
+msgid "Name output file"
+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 "ðÒÏÔÏËÏÌ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
+#: malloc/memusagestat.c:54
+msgid "Title string used in output graphic"
+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 "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÔÉРÓÏËÅÔÁ"
+#: malloc/memusagestat.c:55
+msgid "Generate output linear to time (default is linear to number of function calls)"
+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 "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÁÑ ÏÐÅÒÁÃÉÑ"
+#: malloc/memusagestat.c:57
+msgid "Also draw graph for total memory consumption"
+msgstr "ðÏÓÔÒÏÉÔØ ÔÁËÖÅ ÇÒÁÆÉË ÉÔÏÇÏ×ÏÇÏ ÐÏÔÒÅÂÌÅÎÉÑ ÐÁÍÑÔÉ"
 
-#. TRANS The socket communications protocol family you requested is not supported.
-#: stdio-common/../sysdeps/gnu/errlist.c:528
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:153
-msgid "Protocol family not supported"
-msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÏÅ ÓÅÍÅÊÓÔ×Ï ÐÒÏÔÏËÏÌÏ×"
+#: malloc/memusagestat.c:58
+msgid "make output graphic VALUE pixel wide"
+msgstr "ÒÉÓÏ×ÁÔØ ÇÒÁÆÉË ÛÉÒÉÎÏÊ × VALUE ÐÉËÓÅÌÏ×"
 
-#. 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 "óÅÍÅÊÓÔ×Ï ÁÄÒÅÓÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÐÒÏÔÏËÏÌÏÍ"
+#: malloc/memusagestat.c:59
+msgid "make output graphic VALUE pixel high"
+msgstr "ÒÉÓÏ×ÁÔØ ÇÒÁÆÉË ×ÙÓÏÔÏÊ × VALUE ÐÉËÓÅÌÏ×"
 
-#. 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 "áÄÒÅÓ ÕÖÅ ÉÓÐÏÌØÚÕÅÔÓÑ"
+#: malloc/memusagestat.c:64
+msgid "Generate graphic from memory profiling data"
+msgstr "óÇÅÎÅÒÉÒÏ×ÁÔØ ÇÒÁÆÉË ÐÏ ÄÁÎÎÙÍ ÐÒÏÆÉÌÉÒÏ×ÁÎÉÑ ÐÁÍÑÔÉ"
 
-#. TRANS The requested socket address is not available; for example, you tried
-#. TRANS to give a socket a name that doesn't match the local host name.
-#. TRANS @xref{Socket Addresses}.
-#: stdio-common/../sysdeps/gnu/errlist.c:558
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:156
-msgid "Cannot assign requested address"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÚÎÁÞÉÔØ ÚÁÐÒÏÛÅÎÎÙÊ ÁÄÒÅÓ"
+#: malloc/memusagestat.c:67
+msgid "DATAFILE [OUTFILE]"
+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 "óÅÔØ ÎÅ ÒÁÂÏÔÁÅÔ"
+#: misc/error.c:118 timezone/zic.c:396
+msgid "Unknown system error"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ"
 
-#. TRANS A socket operation failed because the subnet containing the remote host
-#. TRANS was unreachable.
-#: stdio-common/../sysdeps/gnu/errlist.c:577
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:158
-msgid "Network is unreachable"
-msgstr "óÅÔØ ÎÅÄÏÓÔÕÐÎÁ"
+#: nis/nis_callback.c:189
+msgid "unable to free arguments"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ×ÙÓ×ÏÂÏÄÉÔØ ÚÁÎÑÔÕÀ ÁÒÇÕÍÅÎÔÁÍÉ ÐÁÍÑÔØ"
 
-#. TRANS A network connection was reset because the remote host crashed.
-#: stdio-common/../sysdeps/gnu/errlist.c:586
-msgid "Network dropped connection on reset"
-msgstr "óÅÔÅ×ÏÅ ÓÏÅÄÉÎÅÎÉÅ ÂÙÌÏ ÓÂÒÏÛÅÎÏ"
+#: 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 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:2
+msgid "Probable success"
+msgstr "÷ÅÒÏÑÔÎÙÊ ÕÓÐÅÈ"
 
-#. TRANS A network connection was closed for reasons outside the control of the
-#. TRANS local host, such as by the remote machine rebooting or an unrecoverable
-#. TRANS protocol violation.
-#: stdio-common/../sysdeps/gnu/errlist.c:606
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:161
-msgid "Connection reset by peer"
-msgstr "óÏÅÄÉÎÅÎÉÅ ÓÂÒÏÛÅÎÏ ÄÒÕÇÏÊ ÓÔÏÒÏÎÏÊ"
+#: nis/nis_error.h:3
+msgid "Not found"
+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 "îÅÄÏÓÔÁÔÏÞÎÏ ÂÕÆÅÒÎÏÇÏ ÐÒÏÓÔÒÁÎÓÔ×Á"
+#: nis/nis_error.h:4
+msgid "Probably not found"
+msgstr "÷ÅÒÏÑÔÎÏ, ÎÅ ÎÁÊÄÅÎÏ"
+
+#: nis/nis_error.h:5
+msgid "Cache expired"
+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 "ëÏÎÅÞÎÁÑ ÔÏÞËÁ ÐÅÒÅÄÁÞÉ ÕÖÅ ÐÏÄÓÏÅÄÉÎÅÎÁ"
+#: nis/nis_error.h:6
+msgid "NIS+ servers unreachable"
+msgstr "óÌÕÖÂÙ NIS+ ÎÅÄÏÓÔÉÖÉÍÙ"
 
-#. 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_error.h:7
+msgid "Unknown object"
+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_error.h:8
+msgid "Server busy, try again"
+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_error.h:9
+msgid "Generic system error"
+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_error.h:10
+msgid "First/next chain broken"
+msgstr "òÁÚÏÒ×ÁÎÁ ÃÅÐÏÞËÁ ÐÅÒ×ÙÊ/ÓÌÅÄÕÀÝÉÊ"
 
-#. TRANS A socket operation with a specified timeout received no response during
-#. TRANS the timeout period.
-#: stdio-common/../sysdeps/gnu/errlist.c:678
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:175
-msgid "Connection timed out"
-msgstr "÷ÒÅÍÑ ÏÖÉÄÁÎÉÑ ÓÏÅÄÉÎÅÎÉÑ ÉÓÔÅËÌÏ"
+#. TRANS 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 "ïÔËÁÚÁÎÏ × ÄÏÓÔÕÐÅ"
 
-#. 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_error.h:12
+msgid "Not owner"
+msgstr "îÅ ×ÌÁÄÅÌÅÃ"
 
-#. TRANS Too many levels of symbolic links were encountered in looking up a file name.
-#. TRANS This often indicates a cycle of symbolic links.
-#: stdio-common/../sysdeps/gnu/errlist.c:698
-msgid "Too many levels of symbolic links"
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÕÒÏ×ÎÅÊ ÓÉÍ×ÏÌØÎÙÈ ÓÓÙÌÏË"
+#: nis/nis_error.h:13
+msgid "Name not served by this server"
+msgstr "éÍÑ ÎÅ ÏÂÓÌÕÖÉ×ÁÅÔÓÑ ÄÁÎÎÙÍ ÓÅÒ×ÅÒÏÍ"
 
-#. TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for
-#. TRANS Files}) or host name too long (in @code{gethostname} or
-#. TRANS @code{sethostname}; @pxref{Host Identification}).
-#: stdio-common/../sysdeps/gnu/errlist.c:709
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:108
-msgid "File name too long"
-msgstr "óÌÉÛËÏÍ ÄÌÉÎÎÏÅ ÉÍÑ ÆÁÊÌÁ"
+#: nis/nis_error.h:14
+msgid "Server out of memory"
+msgstr "ðÁÍÑÔØ ÎÁ ÓÅÒ×ÅÒÅ ÉÓÞÅÒÐÁÎÁ"
 
-#. TRANS The remote host for a requested network connection is down.
-#: stdio-common/../sysdeps/gnu/errlist.c:718
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:177
-msgid "Host is down"
-msgstr "èÏÓÔ ×ÙËÌÀÞÅÎ"
+#: nis/nis_error.h:15
+msgid "Object with same name exists"
+msgstr "óÕÝÅÓÔ×ÕÅÔ ÏÂßÅËÔ Ó ÔÁËÉÍ ÖÅ ÉÍÅÎÅÍ"
 
-#. TRANS The remote host for a requested network connection is not reachable.
-#: stdio-common/../sysdeps/gnu/errlist.c:727
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:178
-msgid "No route to host"
-msgstr "îÅÔ ÐÕÔÉ ÄÏ ÈÏÓÔÁ"
+#: nis/nis_error.h:16
+msgid "Not master server for this domain"
+msgstr "üÔÏ ÎÅ ÍÁÓÔÅÒ-ÓÅÒ×ÅÒ ÄÌÑ ÄÁÎÎÏÇÏ ÄÏÍÅÎÁ"
 
-#. TRANS Directory not empty, where an empty directory was expected.  Typically,
-#. TRANS this error occurs when you are trying to delete a directory.
-#: stdio-common/../sysdeps/gnu/errlist.c:737
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:123
-msgid "Directory not empty"
-msgstr "ëÁÔÁÌÏÇ ÎÅ ÐÕÓÔ"
+#: nis/nis_error.h:17
+msgid "Invalid object for operation"
+msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÄÌÑ ÄÁÎÎÏÊ ÏÐÅÒÁÃÉÉ ÏÂßÅËÔ"
 
-#. TRANS This means that the per-user limit on new process would be exceeded by
-#. TRANS an attempted @code{fork}.  @xref{Limits on Resources}, for details on
-#. TRANS the @code{RLIMIT_NPROC} limit.
-#: stdio-common/../sysdeps/gnu/errlist.c:748
-msgid "Too many processes"
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÐÒÏÃÅÓÓÏ×"
+#: nis/nis_error.h:18
+msgid "Malformed name, or illegal name"
+msgstr "îÅÐÒÁ×ÉÌØÎÏ ÕËÁÚÁÎÎÏÅ ÉÌÉ ÎÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ"
 
-#. TRANS The file quota system is confused because there are too many users.
-#. TRANS @c This can probably happen in a GNU system when using NFS.
-#: stdio-common/../sysdeps/gnu/errlist.c:758
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:124
-msgid "Too many users"
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÅÊ"
+#: nis/nis_error.h:19
+msgid "Unable to create callback"
+msgstr ""
 
-#. TRANS The user's disk quota was exceeded.
-#: stdio-common/../sysdeps/gnu/errlist.c:767
-msgid "Disk quota exceeded"
-msgstr "ðÒÅ×ÙÛÅÎÁ ÄÉÓËÏ×ÁÑ Ë×ÏÔÁ"
+#: nis/nis_error.h:20
+msgid "Results sent to callback proc"
+msgstr ""
 
-#. TRANS Stale NFS file handle.  This indicates an internal confusion in the NFS
-#. TRANS system which is due to file system rearrangements on the server host.
-#. TRANS Repairing this condition usually requires unmounting and remounting
-#. TRANS the NFS file system on the local host.
-#: stdio-common/../sysdeps/gnu/errlist.c:779
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:181
-msgid "Stale NFS file handle"
-msgstr "õÓÔÁÒÅ×ÛÉÊ ÈÜÎÄÌ ÆÁÊÌÁ NFS"
+#: nis/nis_error.h:21
+msgid "Not found, no such name"
+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_error.h:22
+msgid "Name/entry isn't unique"
+msgstr "éÍÑ/ÚÁÐÉÓØ ÎÅ ÕÎÉËÁÌØÎÏ"
 
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:800
-#, fuzzy
-msgid "RPC struct is bad"
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ÓÔÒÕËÔÕÒÁ RPC"
+#: nis/nis_error.h:23
+msgid "Modification failed"
+msgstr "íÏÄÉÆÉËÁÃÉÑ ÎÅ ÕÄÁÌÁÓØ"
 
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:809
-#, fuzzy
-msgid "RPC version wrong"
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ×ÅÒÓÉÑ RPC"
+#: nis/nis_error.h:24
+msgid "Database for table does not exist"
+msgstr "âÁÚÁ ÄÁÎÎÙÈ ÄÌÑ ÔÁÂÌÉÃÙ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ"
 
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:818
-#, fuzzy
-msgid "RPC program not available"
-msgstr "ðÒÏÇÒÁÍÍÁ RPC ÎÅÄÏÓÔÕÐÎÁ"
+#: nis/nis_error.h:25
+msgid "Entry/table type mismatch"
+msgstr "îÅÓÏÏÔ×ÅÔÓÔ×ÉÅ ÔÉÐÏ× ÚÁÐÉÓÉ/ÔÁÂÌÉÃÙ"
 
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:827
-#, fuzzy
-msgid "RPC program version wrong"
-msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ×ÅÒÓÉÑ ÐÒÏÇÒÁÍÍÙ RPC"
+#: nis/nis_error.h:26
+msgid "Link points to illegal name"
+msgstr "óÓÙÌËÁ ÕËÁÚÙ×ÁÅÔ ÎÁ ÎÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ"
 
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:836
-msgid "RPC bad procedure for program"
-msgstr ""
+#: nis/nis_error.h:27
+msgid "Partial success"
+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 "îÅÔ ÄÏÓÔÕÐÎÙÈ ÂÌÏËÉÒÏ×ÏË"
+#: nis/nis_error.h:28
+msgid "Too many attributes"
+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_error.h:29
+msgid "Error in RPC subsystem"
+msgstr "ïÛÉÂËÁ × ÐÏÄÓÉÓÔÅÍÅ RPC"
 
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:870
-msgid "Authentication error"
-msgstr "ïÛÉÂËÁ ÁÕÔÅÎÆÉËÁÃÉÉ"
+#: nis/nis_error.h:30
+msgid "Missing or malformed attribute"
+msgstr "ðÒÏÐÕÝÅÎÎÙÊ ÉÌÉ ÎÅÐÒÁ×ÉÌØÎÏ ÕËÁÚÁÎÎÙÊ ÁÔÒÉÂÕÔ"
 
-#. TRANS ???
-#: stdio-common/../sysdeps/gnu/errlist.c:879
-msgid "Need authenticator"
-msgstr "îÅÏÂÈÏÄÉÍ ÁÕÔÅÎÆÉËÁÔÏÒ"
+#: nis/nis_error.h:31
+msgid "Named object is not searchable"
+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_error.h:32
+msgid "Error while talking to callback proc"
+msgstr ""
 
-#. TRANS Not supported.  A function returns this error when certain parameter
-#. TRANS values are valid, but the functionality they request is not available.
-#. TRANS This can mean that the function does not implement a particular command
-#. TRANS or option value or flag bit at all.  For functions that operate on some
-#. TRANS object given in a parameter, such as a file descriptor or a port, it
-#. TRANS might instead mean that only @emph{that specific object} (file
-#. TRANS descriptor, port, etc.) is unable to support the other parameters given;
-#. TRANS different file descriptors might support different ranges of parameter
-#. TRANS values.
-#. TRANS
-#. TRANS If the entire function is not available at all in the implementation,
-#. TRANS it returns @code{ENOSYS} instead.
-#: stdio-common/../sysdeps/gnu/errlist.c:912
-msgid "Not supported"
-msgstr "îÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
+#: nis/nis_error.h:33
+msgid "Non NIS+ namespace encountered"
+msgstr "ïÂÎÁÒÕÖÅÎÏ ÎÅ-NIS+ ÐÒÏÓÔÒÁÎÓÔ×Ï ÉÍÅÎ"
 
-#. 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_error.h:34
+msgid "Illegal object type for operation"
+msgstr "îÅ ÄÏÐÕÓÔÉÍÙÊ ÄÌÑ ÏÐÅÒÁÃÉÉ ÔÉРÏÂßÅËÔÁ"
 
-#. TRANS In the GNU system, servers supporting the @code{term} protocol return
-#. TRANS this error for certain operations when the caller is not in the
-#. TRANS foreground process group of the terminal.  Users do not usually see this
-#. TRANS error because functions such as @code{read} and @code{write} translate
-#. TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal.  @xref{Job Control},
-#. TRANS for information on process groups and these signals.
-#: stdio-common/../sysdeps/gnu/errlist.c:936
-msgid "Inappropriate operation for background process"
-msgstr "îÅÐÏÄÈÏÄÑÝÁÑ ÏÐÅÒÁÃÉÑ ÄÌÑ ÆÏÎÏ×ÏÇÏ ÐÒÏÃÅÓÓÁ"
+#: nis/nis_error.h:35
+msgid "Passed object is not the same object on server"
+msgstr "ðÅÒÅÄÁÎÎÙÊ ÏÂßÅËÔ ÎÅ ÔÏÇÏ ÖÅ ÔÉÐÁ, ÞÔÏ ÏÂßÅËÔ ÎÁ ÓÅÒ×ÅÒÅ"
 
-#. TRANS In the GNU system, opening a file returns this error when the file is
-#. TRANS translated by a program and the translator program dies while starting
-#. TRANS up, before it has connected to the file.
-#: stdio-common/../sysdeps/gnu/errlist.c:947
-msgid "Translator died"
-msgstr "ôÒÁÎÓÌÑÔÏÒ ÕÍÅÒ"
+#: nis/nis_error.h:36
+msgid "Modify operation failed"
+msgstr "ïÐÅÒÁÃÉÑ ÍÏÄÉÆÉËÁÃÉÉ ÎÅÕÓÐÅÛÎÁ"
 
-#. TRANS The experienced user will know what is wrong.
-#. TRANS @c This error code is a joke.  Its perror text is part of the joke.
-#. TRANS @c Don't change it.
-#: stdio-common/../sysdeps/gnu/errlist.c:958
-msgid "?"
-msgstr "?"
+#: nis/nis_error.h:37
+msgid "Query illegal for named table"
+msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÚÁÐÒÏÓ ÄÌÑ ÉÍÅÎÏ×ÁÎÎÏÊ ÔÁÂÌÉÃÙ"
 
-#. TRANS You did @strong{what}?
-#: stdio-common/../sysdeps/gnu/errlist.c:967
-msgid "You really blew it this time"
-msgstr "îÁ ÜÔÏÔ ÒÁÚ ×Ù ×ÓÅÈ ÏÐÒÏËÉÎÕÌÉ"
+#: nis/nis_error.h:38
+msgid "Attempt to remove a non-empty table"
+msgstr "ðÏÐÙÔËÁ ÕÄÁÌÉÔØ ÎÅÐÕÓÔÕÀ ÔÁÂÌÉÃÕ"
 
-#. TRANS Go home and have a glass of warm, dairy-fresh milk.
-#: stdio-common/../sysdeps/gnu/errlist.c:976
-msgid "Computer bought the farm"
-msgstr "ëÏÍÐØÀÔÅÒ ËÕÐÉÌ ÆÅÒÍÕ"
+#: nis/nis_error.h:39
+msgid "Error in accessing NIS+ cold start file.  Is NIS+ installed?"
+msgstr "ïÛÉÂËÁ ÏÂÒÁÝÅÎÉÑ Ë ÆÁÊÌÕ ÈÏÌÏÄÎÏÇÏ ÚÁÐÕÓËÁ NIS+.  õÓÔÁÎÏ×ÌÅΠÌÉ NIS+?"
 
-#. TRANS This error code has no purpose.
-#: stdio-common/../sysdeps/gnu/errlist.c:985
-msgid "Gratuitous error"
-msgstr "âÅÚ×ÏÚÍÅÚÄÎÁÑ ÏÛÉÂËÁ"
+#: nis/nis_error.h:40
+msgid "Full resync required for directory"
+msgstr "äÌÑ ËÁÔÁÌÏÇÁ ÔÒÅÂÕÅÔÓÑ ÐÏÌÎÁÑ ÒÅÓÉÎÈÒÏÎÉÚÁÃÉÑ"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:993
-msgid "Bad message"
-msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÓÏÏÂÝÅÎÉÅ"
+#: nis/nis_error.h:41
+msgid "NIS+ operation failed"
+msgstr "ïÐÅÒÁÃÉÑ NIS+ ÎÅÕÓÐÅÛÎÁ"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1001
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:66
-msgid "Identifier removed"
-msgstr "éÄÅÎÔÉÆÉËÁÔÏÒ ÂÙÌ ÕÄÁÌÅÎ"
+#: nis/nis_error.h:42
+msgid "NIS+ service is unavailable or not installed"
+msgstr "óÌÕÖÂÁ NIS+ ÎÅÄÏÓÔÕÐÎÁ ÉÌÉ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1009
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:104
-msgid "Multihop attempted"
-msgstr ""
+#: nis/nis_error.h:43
+msgid "Yes, 42 is the meaning of life"
+msgstr "äÁ, 42 -- ÜÔÏ ÓÍÙÓÌ ÖÉÚÎÉ"
 
-#: 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_error.h:44
+msgid "Unable to authenticate NIS+ server"
+msgstr "îÅ ÕÄÁÌÏÓØ ÁÕÔÅÎÆÉÃÉÒÏ×ÁÔØ ÓÅÒ×ÅÒ NIS+"
 
-#: 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_error.h:45
+msgid "Unable to authenticate NIS+ client"
+msgstr "îÅ ÕÄÁÌÏÓØ ÁÕÔÅÎÆÉÃÉÒÏ×ÁÔØ ËÌÉÅÎÔ NIS+"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1033
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:65
-msgid "No message of desired type"
-msgstr "îÅÔ ÓÏÏÂÝÅÎÉÑ ÖÅÌÁÅÍÏÇÏ ÔÉÐÁ"
+#: nis/nis_error.h:46
+msgid "No file space on server"
+msgstr "îÁ ÓÅÒ×ÅÒÅ ÎÅÔ ÄÉÓËÏ×ÏÇÏ ÐÒÏÓÔÒÁÎÓÔ×Á"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1041
-msgid "Out of streams resources"
-msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÐÏÔÏËÏ×ÙÈ ÒÅÓÕÒÓÏ×"
+#: nis/nis_error.h:47
+msgid "Unable to create process on server"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÐÒÏÃÅÓÓ ÎÁ ÓÅÒ×ÅÒÅ"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1049
-msgid "Device not a stream"
-msgstr "õÓÔÒÏÊÓÔ×Ï ÎÅ Ñ×ÌÑÅÔÓÑ ÐÏÔÏËÏÍ"
+#: nis/nis_error.h:48
+msgid "Master server busy, full dump rescheduled."
+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_local_names.c:122
+#, c-format
+msgid "LOCAL entry for UID %d in directory %s not unique\n"
+msgstr "úÁÐÉÓØ LOCAL ÄÌÑ UID %d × ËÁÔÁÌÏÇÅ %s ÎÅ ÕÎÉËÁÌØÎÁ\n"
 
-#: 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:51
+msgid "UNKNOWN"
+msgstr "îåéú÷åóôîï"
 
-#: 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:109
+msgid "BOGUS OBJECT\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:112
+msgid "NO OBJECT\n"
+msgstr "îåô ïâÿåëôá\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1093
-msgid "Interrupted system call should be restarted"
-msgstr "ðÒÅÒ×ÁÎÙÊ ÓÉÓÔÅÍÎÙÊ ×ÙÚÏ× ÓÌÅÄÕÅÔ ÐÅÒÅÚÁÐÕÓÔÉÔØ"
+#: nis/nis_print.c:115
+msgid "DIRECTORY\n"
+msgstr "ëáôáìïç\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:118
+msgid "GROUP\n"
+msgstr "çòõððá\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 ""
+#: nis/nis_print.c:121
+msgid "TABLE\n"
+msgstr "ôáâìéãá\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1117
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:69
-msgid "Level 3 halted"
-msgstr ""
+#: nis/nis_print.c:124
+msgid "ENTRY\n"
+msgstr "úáðéóø\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1125
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:70
-msgid "Level 3 reset"
-msgstr ""
+#: nis/nis_print.c:127
+msgid "LINK\n"
+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:130
+msgid "PRIVATE\n"
+msgstr "ðòé÷áôîïå\n"
 
-#: 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:133
+msgid "(Unknown object)\n"
+msgstr "(îÅÉÚ×ÅÓÔÎÙÊ ÏÂßÅËÔ)\n"
 
-#: 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:167
+#, c-format
+msgid "Name : `%s'\n"
+msgstr "éÍÑ : `%s'\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1157
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:74
-msgid "Level 2 halted"
-msgstr ""
+#: nis/nis_print.c:168
+#, c-format
+msgid "Type : %s\n"
+msgstr "ôÉР: %s\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1165
-msgid "Invalid exchange"
-msgstr ""
+#: nis/nis_print.c:173
+msgid "Master Server :\n"
+msgstr "íÁÓÔÅÒ-ÓÅÒ×ÅÒ :\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1173
-msgid "Invalid request descriptor"
-msgstr "îÅ×ÅÒÎÙÊ ÄÅÓËÒÉÐÔÏÒ ÚÁÐÒÏÓÁ"
+#: nis/nis_print.c:175
+msgid "Replicate :\n"
+msgstr "òÅÐÌÉËÁ :\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1181
-msgid "Exchange full"
-msgstr ""
+#: nis/nis_print.c:176
+#, c-format
+msgid "\tName       : %s\n"
+msgstr "\téÍÑ       : %s\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1189
-msgid "No anode"
-msgstr ""
+#: nis/nis_print.c:177
+msgid "\tPublic Key : "
+msgstr "\tðÕÂÌÉÞÎÙÊ ËÌÀÞ : "
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1197
-msgid "Invalid request code"
-msgstr "îÅ×ÅÒÎÙÊ ËÏÄ ÚÁÐÒÏÓÁ"
+#: nis/nis_print.c:181
+msgid "None.\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.c:184
+#, c-format
+msgid "Diffie-Hellmann (%d bits)\n"
+msgstr "äÉÆÆÉ-èÅÌÍÁΠ(%d ÂÉÔ)\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1213
-msgid "File locking deadlock error"
-msgstr "ïÛÉÂËÁ: ÔÕÐÉË ÐÒÉ ÂÌÏËÉÒÏ×ËÅ ÆÁÊÌÁ"
+#: nis/nis_print.c:189
+#, c-format
+msgid "RSA (%d bits)\n"
+msgstr "RSA (%d ÂÉÔ)\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.c:192
+msgid "Kerberos.\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.c:195
+#, c-format
+msgid "Unknown (type = %d, bits = %d)\n"
+msgstr "îÅÉÚ×ÅÓÔÎÏ (ÔÉР= %d, ÂÉÔÙ = %d)\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.c:206
+#, c-format
+msgid "\tUniversal addresses (%u)\n"
+msgstr "\tõÎÉ×ÅÒÓÁÌØÎÙÅ ÁÄÒÅÓÁ (%u)\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1245
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:98
-msgid "Advertise error"
-msgstr ""
+#: nis/nis_print.c:228
+msgid "Time to live : "
+msgstr "÷ÒÅÍÑ ÖÉÚÎÉ : "
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1253
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:99
-msgid "Srmount error"
-msgstr "ïÛÉÂËÁ Srmount"
+#: nis/nis_print.c:230
+msgid "Default Access rights :\n"
+msgstr "ðÒÁ×Á ÄÏÓÔÕÐÁ ÐÏ ÕÍÏÌÞÁÎÉÀ :\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1261
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:100
-msgid "Communication error on send"
-msgstr "ïÛÉÂËÁ Ó×ÑÚÉ ÐÒÉ ÏÔÐÒÁ×ËÅ"
+#: nis/nis_print.c:239
+#, c-format
+msgid "\tType         : %s\n"
+msgstr "\tôÉР        : %s\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1269
-msgid "RFS specific error"
-msgstr "óÐÅÃÉÆÉÞÎÁÑ ÄÌÑ RFS ÏÛÉÂËÁ"
+#: nis/nis_print.c:240
+msgid "\tAccess rights: "
+msgstr "\tðÒÁ×Á ÄÏÓÔÕÐÁ: "
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1277
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:110
-msgid "Name not unique on network"
-msgstr "éÍÑ ÎÅ ÕÎÉËÁÌØÎÏ × ÓÅÔÉ"
+#: nis/nis_print.c:254
+msgid "Group Flags :"
+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.c:257
+msgid ""
+"\n"
+"Group Members :\n"
+msgstr ""
+"\n"
+"þÌÅÎÙ ÇÒÕÐÐÙ :\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1293
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:112
-msgid "Remote address changed"
-msgstr "õÄÁÌÅÎÎÙÊ ÁÄÒÅÓ ÂÙÌ ÉÚÍÅÎÅÎ"
+#: nis/nis_print.c:269
+#, c-format
+msgid "Table Type          : %s\n"
+msgstr "ôÉРÔÁÂÌÉÃÙ          : %s\n"
 
-#: 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 "îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÄÏÓÔÕРˠÎÕÖÎÏÊ ÒÁÚÄÅÌÑÅÍÏÊ ÂÉÂÌÉÏÔÅËÅ"
+#: nis/nis_print.c:270
+#, c-format
+msgid "Number of Columns   : %d\n"
+msgstr "þÉÓÌÏ ÓÔÏÌÂÃÏ×   : %d\n"
 
-#: 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 "ïÂÒÁÝÅÎÉÅ Ë ÐÏ×ÒÅÖÄÅÎÎÏÊ ÒÁÚÄÅÌÑÅÍÏÊ ÂÉÂÌÉÏÔÅËÅ"
+#: nis/nis_print.c:271
+#, c-format
+msgid "Character Separator : %c\n"
+msgstr "úÎÁË-ÒÁÚÄÅÌÉÔÅÌØ : %c\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1317
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:115
-msgid ".lib section in a.out corrupted"
-msgstr "óÅËÃÉÑ .lib × a.out ÐÏ×ÒÅÖÄÅÎÁ"
+#: nis/nis_print.c:272
+#, c-format
+msgid "Search Path         : %s\n"
+msgstr "ðÕÔØ ÐÏÉÓËÁ         : %s\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1325
-msgid "Attempting to link in too many shared libraries"
-msgstr "ðÏÐÙÔËÁ ÐÏÄËÌÀÞÉÔØ ÓÌÉÛËÏÍ ÍÎÏÇÏ ÒÁÚÄÅÌÑÅÍÙÊ ÂÉÂÌÉÏÔÅË"
+#: nis/nis_print.c:273
+msgid "Columns             :\n"
+msgstr "óÔÏÌÂÃÙ             :\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1333
-msgid "Cannot exec a shared library directly"
-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:1341
-msgid "Streams pipe error"
-msgstr ""
+#: nis/nis_print.c:278
+msgid "\t\tAttributes    : "
+msgstr "\t\táÔÒÉÂÕÔÙ    : "
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1349
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:165
-msgid "Structure needs cleaning"
-msgstr "óÔÒÕËÔÕÒÕ ÎÅÏÂÈÏÄÉÍÏ ÐÏÞÉÓÔÉÔØ"
+#: nis/nis_print.c:280
+msgid "\t\tAccess Rights : "
+msgstr "\t\tðÒÁ×Á ÄÏÓÔÕÐÁ : "
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1357
-msgid "Not a XENIX named type file"
-msgstr ""
+#: nis/nis_print.c:290
+msgid "Linked Object Type : "
+msgstr "ôÉРÏÂßÅËÔÁ ÐÏ ÓÓÙÌËÅ : "
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1365
-msgid "No XENIX semaphores available"
-msgstr "óÅÍÁÆÏÒÙ XENIX ÎÅÄÏÓÔÕÐÎÙ"
+#: nis/nis_print.c:292
+#, c-format
+msgid "Linked to : %s\n"
+msgstr "óÓÙÌËÁ ÎÁ : %s\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1373
-msgid "Is a named type file"
-msgstr ""
+#: nis/nis_print.c:302
+#, c-format
+msgid "\tEntry data of type %s\n"
+msgstr "\täÁÎÎÙÅ ÚÁÐÉÓÉ ÔÉÐÁ %s\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1381
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:170
-msgid "Remote I/O error"
-msgstr "ïÛÉÂËÁ ÕÄÁÌÅÎÎÏÇÏ ××ÏÄÁ/×Ù×ÏÄÁ"
+#: nis/nis_print.c:305
+#, c-format
+msgid "\t[%u] - [%u bytes] "
+msgstr "\t[%u] - [%u ÂÁÊÔ] "
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1389
-msgid "No medium found"
-msgstr "îÏÓÉÔÅÌØ ÎÅ ÎÁÊÄÅÎ"
+#: nis/nis_print.c:308
+msgid "Encrypted data\n"
+msgstr "úÁÛÉÆÒÏ×ÁÎÎÙÅ ÄÁÎÎÙÅ\n"
 
-#: stdio-common/../sysdeps/gnu/errlist.c:1397
-msgid "Wrong medium type"
-msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÔÉРÎÏÓÉÔÅÌÑ"
+#: nis/nis_print.c:310
+msgid "Binary data\n"
+msgstr "âÉÎÁÒÎÙÅ ÄÁÎÎÙÅ\n"
 
-#: stdio-common/../sysdeps/unix/siglist.c:26
-msgid "Signal 0"
-msgstr "óÉÇÎÁÌ 0"
+#: nis/nis_print.c:326
+#, c-format
+msgid "Object Name   : %s\n"
+msgstr "éÍÑ ÏÂßÅËÔÁ   : %s\n"
 
-#: stdio-common/../sysdeps/unix/siglist.c:32
-msgid "IOT trap"
-msgstr "ìÏ×ÕÛËÁ IOT"
+#: nis/nis_print.c:327
+#, c-format
+msgid "Directory     : %s\n"
+msgstr "ëÁÔÁÌÏÇ     : %s\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:30
-msgid "Error 0"
-msgstr "ïÛÉÂËÁ 0"
+#: nis/nis_print.c:328
+#, c-format
+msgid "Owner         : %s\n"
+msgstr "÷ÌÁÄÅÌÅà        : %s\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:31
-#: nis/nis_error.c:40
-msgid "Not owner"
-msgstr "îÅ ×ÌÁÄÅÌÅÃ"
+#: nis/nis_print.c:329
+#, c-format
+msgid "Group         : %s\n"
+msgstr "çÒÕÐÐÁ         : %s\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:35
-msgid "I/O error"
-msgstr "ïÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ"
+# ??? ÚÄÅÓØ, ÎÉÖÅ É ×ÙÛÅ -- ÒÁÓÓÔÁ×ÉÔØ ÐÒÏÂÅÌÙ ËÁË ÎÁÄÏ
+#: nis/nis_print.c:330
+msgid "Access Rights : "
+msgstr "ðÒÁ×Á ÄÏÓÔÕÐÁ : "
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:37
-msgid "Arg list too long"
-msgstr "óÐÉÓÏË ÁÒÇÕÍÅÎÔÏ× ÓÌÉÛËÏÍ ÄÌÉÎÎÙÊ"
+#: nis/nis_print.c:332
+#, c-format
+msgid ""
+"\n"
+"Time to Live  : "
+msgstr ""
+"\n"
+"÷ÒÅÍÑ ÖÉÚÎÉ  : "
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:39
-msgid "Bad file number"
-msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÎÏÍÅÒ ÆÁÊÌÁ"
+#: nis/nis_print.c:335
+#, c-format
+msgid "Creation Time : %s"
+msgstr "÷ÒÅÍÑ ÓÏÚÄÁÎÉÑ : %s"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:42
-msgid "Not enough space"
-msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÍÅÓÔÁ"
+#: nis/nis_print.c:337
+#, c-format
+msgid "Mod. Time     : %s"
+msgstr "÷ÒÅÍÑ ÍÏÄÉÆÉËÁÃÉÉ     : %s"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:46
-msgid "Device busy"
-msgstr "õÓÔÒÏÊÓÔ×Ï ÚÁÎÑÔÏ"
+#: nis/nis_print.c:338
+msgid "Object Type   : "
+msgstr "ôÉРÏÂßÅËÔÁ   : "
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:48
-msgid "Cross-device link"
-msgstr "óÓÙÌËÁ ÍÅÖÄÕ ÕÓÔÒÏÊÓÔ×ÁÍÉ"
+#: nis/nis_print.c:358
+#, c-format
+msgid "    Data Length = %u\n"
+msgstr "    äÌÉÎÁ ÄÁÎÎÙÈ = %u\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:53
-msgid "File table overflow"
-msgstr "ðÅÒÅÐÏÌÎÅÎÉÅ ÔÁÂÌÉÃÙ ÆÁÊÌÏ×"
+#: nis/nis_print.c:372
+#, c-format
+msgid "Status            : %s\n"
+msgstr "óÔÁÔÕÓ            : %s\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:63
-msgid "Argument out of domain"
-msgstr "áÇÒÕÍÅÎÔ ×ÎÅ ÄÉÁÐÁÚÏÎÁ"
+#: nis/nis_print.c:373
+#, c-format
+msgid "Number of objects : %u\n"
+msgstr "þÉÓÌÏ ÏÂßÅËÔÏ× : %u\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:64
-msgid "Result too large"
-msgstr "òÅÚÕÌØÔÁÔ ÓÌÉÛËÏÍ ×ÅÌÉË"
+#: nis/nis_print.c:377
+#, c-format
+msgid "Object #%d:\n"
+msgstr "ïÂßÅËÔ #%d:\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:75
-msgid "Deadlock situation detected/avoided"
-msgstr "ôÕÐÉËÏ×ÁÑ ÓÉÔÕÁÃÉÑ ÏÂÎÁÒÕÖÅÎÁ/ÐÒÅÄÏÔ×ÒÁÝÅÎÁ"
+#: nis/nis_print_group_entry.c:117
+#, c-format
+msgid "Group entry for \"%s.%s\" group:\n"
+msgstr "úÁÐÉÓØ ÇÒÕÐÐÙ ÄÌÑ ÇÒÕÐÐÙ \"%s.%s\":\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:76
-msgid "No record locks available"
-msgstr "îÅÔ ÄÏÓÔÕÐÎÙÈ ÂÌÏËÉÒÏ×ÏË ÚÁÐÉÓÅÊ"
+#: nis/nis_print_group_entry.c:125
+msgid "    Explicit members:\n"
+msgstr "    ñ×ÎÙÅ ÞÌÅÎÙ:\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:79
-msgid "Disc quota exceeded"
-msgstr "ðÒÅ×ÙÛÅÎÁ ÄÉÓËÏ×ÁÑ Ë×ÏÔÁ"
+#: nis/nis_print_group_entry.c:130
+msgid "    No explicit members\n"
+msgstr "    îÅÔ Ñ×ÎÙÈ ÞÌÅÎÏ×\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:80
-msgid "Bad exchange descriptor"
-msgstr ""
+#: nis/nis_print_group_entry.c:133
+msgid "    Implicit members:\n"
+msgstr "    îÅÑ×ÎÙÅ ÞÌÅÎÙ:\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:81
-msgid "Bad request descriptor"
-msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÄÅÓËÒÉÐÔÏÒ ÚÁÐÒÏÓÁ"
+#: nis/nis_print_group_entry.c:138
+msgid "    No implicit members\n"
+msgstr "    îÅÔ ÎÅÑ×ÎÙÈ ÞÌÅÎÏ×\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:82
-msgid "Message tables full"
-msgstr "ôÁÂÌÉÃÙ ÓÏÏÂÝÅÎÉÊ ÐÅÒÅÐÏÌÎÅÎÙ"
+#: nis/nis_print_group_entry.c:141
+msgid "    Recursive members:\n"
+msgstr "    òÅËÕÒÓÉ×ÎÙÅ ÞÌÅÎÙ:\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:83
-msgid "Anode table overflow"
-msgstr ""
+#: nis/nis_print_group_entry.c:146
+msgid "    No recursive members\n"
+msgstr "    îÅÔ ÒÅËÕÒÓÉ×ÎÙÈ ÞÌÅÎÏ×\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:84
-msgid "Bad request code"
-msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ËÏÄ ÚÁÐÒÏÓÁ"
+#: nis/nis_print_group_entry.c:149 nis/nis_print_group_entry.c:165
+msgid "    Explicit nonmembers:\n"
+msgstr "    ñ×ÎÙÅ ÎÅ-ÞÌÅÎÙ:\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:86
-msgid "File locking deadlock"
-msgstr "ôÕÐÉË ÐÒÉ ÂÌÏËÉÒÏ×ËÅ ÆÁÊÌÁ"
+#: nis/nis_print_group_entry.c:154
+msgid "    No explicit nonmembers\n"
+msgstr "    îÅÔ Ñ×ÎÙÈ ÎÅ-ÞÌÅÎÏ×\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:88
-msgid "Error 58"
-msgstr "ïÛÉÂËÁ 58"
+#: nis/nis_print_group_entry.c:157
+msgid "    Implicit nonmembers:\n"
+msgstr "    îÅÑ×ÎÙÅ ÎÅ-ÞÌÅÎÙ:\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:89
-msgid "Error 59"
-msgstr "ïÛÉÂËÁ 59"
+#: nis/nis_print_group_entry.c:162
+msgid "    No implicit nonmembers\n"
+msgstr "    îÅÔ ÎÅÑ×ÎÙÈ ÎÅ-ÞÌÅÎÏ×\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:90
-msgid "Not a stream device"
-msgstr "üÔÏ ÎÅ ÐÏÔÏÞÎÏÅ ÕÓÔÒÏÊÓÔ×Ï"
+#: nis/nis_print_group_entry.c:170
+msgid "    No recursive nonmembers\n"
+msgstr "    îÅÔ ÒÅËÕÒÓÉ×ÎÙÈ ÎÅ-ÞÌÅÎÏ×\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:93
-msgid "Out of stream resources"
-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 "úÁÐÉÓØ DES ÄÌÑ netname %s ÎÅ ÕÎÉËÁÌØÎÁ\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:102
-msgid "Error 72"
-msgstr "ïÛÉÂËÁ 72"
+#: nis/nss_nisplus/nisplus-publickey.c:220
+#, c-format
+msgid "netname2user: missing group id list in `%s'."
+msgstr "netname2user: ÐÒÏÐÕÝÅΠÓÐÉÓÏË ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÇÒÕÐРנ`%s'."
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:103
-msgid "Error 73"
-msgstr "ïÛÉÂËÁ 73"
+#: 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 "netname2user: (ÐÏÉÓË × nis+): %s\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:105
-msgid "Error 75"
-msgstr "ïÛÉÂËÁ 75"
+#: nis/nss_nisplus/nisplus-publickey.c:321
+#, c-format
+msgid "netname2user: DES entry for %s in directory %s not unique"
+msgstr "netname2user: ÚÁÐÉÓØ DES ÄÌÑ %s × ËÁÔÁÌÏÇÅ %s ÎÅ ÕÎÉËÁÌØÎÁ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:106
-msgid "Error 76"
-msgstr "ïÛÉÂËÁ 76"
+#: nis/nss_nisplus/nisplus-publickey.c:339
+#, c-format
+msgid "netname2user: principal name `%s' too long"
+msgstr "netname2user: ÉÍÑ ÐÒÉÎÃÉÐÁÌÁ `%s' ÓÌÉÛËÏÍ ×ÅÌÉËÏ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:107
-msgid "Not a data message"
-msgstr "üÔÏ ÎÅ ÓÏÏÂÝÅÎÉÅ Ó ÄÁÎÎÙÍÉ"
+#: nis/nss_nisplus/nisplus-publickey.c:395
+#, c-format
+msgid "netname2user: LOCAL entry for %s in directory %s not unique"
+msgstr "netname2user: ÚÁÐÉÓØ LOCAL ÄÌÑ %s × ËÁÔÁÌÏÇÅ %s ÎÅ ÕÎÉËÁÌØÎÁ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:116
-msgid "Attempting to link in more shared libraries than system limit"
-msgstr "ðÏÐÙÔËÁ ÐÏÄËÌÀÞÉÔØ ÂÏÌØÛÅ ÒÁÚÄÅÌÑÅÍÙÈ ÂÉÂÌÉÏÔÅË, ÞÅÍ ÐÏÚ×ÏÌÑÅÔ ÓÉÓÔÅÍÁ"
+#: nis/nss_nisplus/nisplus-publickey.c:402
+msgid "netname2user: should not have uid 0"
+msgstr "netname2user: ÎÅ ÄÏÌÖÅΠÉÍÅÔØ ÎÕÌÅ×ÏÊ uid"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:117
-msgid "Can not exec a shared library directly"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ×ÙÐÏÌÎÉÔØ ÒÁÚÄÅÌÑÅÍÕÀ ÂÉÂÌÉÏÔÅËÕ"
+#: nis/ypclnt.c:825
+msgid "Request arguments bad"
+msgstr "îÅÐÒÁ×ÉÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ÚÁÐÒÏÓÁ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:118
-msgid "Illegal byte sequence"
-msgstr "îÅ×ÅÒÎÁÑ ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏÓÔØ ÂÁÊÔ"
+#: nis/ypclnt.c:828
+msgid "RPC failure on NIS operation"
+msgstr "óÂÏÊ RPC ÐÒÉ ÏÐÅÒÁÃÉÉ NIS"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:119
-msgid "Operation not applicable"
-msgstr "ïÐÅÒÁÃÉÑ ÎÅÐÒÉÍÅÎÉÍÁ"
+#: nis/ypclnt.c:831
+msgid "Can't bind to server which serves this domain"
+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"
+#: nis/ypclnt.c:834
+msgid "No such map in server's domain"
+msgstr "îÅÔ ÔÁËÏÇÏ ÏÔÏÂÒÁÖÅÎÉÑ × ÄÏÍÅÎÅ ÓÅÒ×ÅÒÁ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:121
-msgid "Error 91"
-msgstr "ïÛÉÂËÁ 91"
+#: nis/ypclnt.c:837
+msgid "No such key in map"
+msgstr "îÅÔ ÔÁËÏÇÏ ËÌÀÞÁ × ÏÔÏÂÒÁÖÅÎÉÉ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:122
-msgid "Error 92"
-msgstr "ïÛÉÂËÁ 92"
+#: nis/ypclnt.c:840
+msgid "Internal NIS error"
+msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ NIS"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:129
-msgid "Option not supported by protocol"
-msgstr "÷ÏÚÍÏÖÎÏÓÔØ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÐÒÏÔÏËÏÌÏÍ"
+#: nis/ypclnt.c:843
+msgid "Local resource allocation failure"
+msgstr "óÂÏÊ ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÌÏËÁÌØÎÏÇÏ ÒÅÓÕÒÓÁ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:130
-msgid "Error 100"
-msgstr "ïÛÉÂËÁ 100"
+#: nis/ypclnt.c:846
+msgid "No more records in map database"
+msgstr "âÏÌØÛÅ ÎÅÔ ÚÁÐÉÓÅÊ × ÂÁÚÅ ÄÁÎÎÙÈ ÏÔÏÂÒÁÖÅÎÉÊ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:131
-msgid "Error 101"
-msgstr "ïÛÉÂËÁ 101"
+#: nis/ypclnt.c:849
+msgid "Can't communicate with portmapper"
+msgstr "îÅ×ÏÚÍÏÖÎÏ Ó×ÑÚÁÔØÓÑ Ó ÏÔÏÂÒÁÖÁÔÅÌÅÍ ÐÏÒÔÏ×"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:132
-msgid "Error 102"
-msgstr "ïÛÉÂËÁ 102"
+#: nis/ypclnt.c:852
+msgid "Can't communicate with ypbind"
+msgstr "îÅ×ÏÚÍÏÖÎÏ Ó×ÑÚÁÔØÓÑ Ó ypbind"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:133
-msgid "Error 103"
-msgstr "ïÛÉÂËÁ 103"
+#: nis/ypclnt.c:855
+msgid "Can't communicate with ypserv"
+msgstr "îÅ×ÏÚÍÏÖÎÏ Ó×ÑÚÁÔØÓÑ Ó ypserv"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:134
-msgid "Error 104"
-msgstr "ïÛÉÂËÁ 104"
+#: nis/ypclnt.c:858
+msgid "Local domain name not set"
+msgstr "ìÏËÁÌØÎÏÅ ÉÍÑ ÄÏÍÅÎÁ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÏ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:135
-msgid "Error 105"
-msgstr "ïÛÉÂËÁ 105"
+#: nis/ypclnt.c:861
+msgid "NIS map database is bad"
+msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ÂÁÚÁ ÄÁÎÎÙÈ ÏÔÏÂÒÁÖÅÎÉÊ NIS"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:136
-msgid "Error 106"
-msgstr "ïÛÉÂËÁ 106"
+#: 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:137
-msgid "Error 107"
-msgstr "ïÛÉÂËÁ 107"
+#: nis/ypclnt.c:870
+msgid "Database is busy"
+msgstr "âÁÚÁ ÄÁÎÎÙÈ ÚÁÎÑÔÁ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:138
-msgid "Error 108"
-msgstr "ïÛÉÂËÁ 108"
+#: nis/ypclnt.c:873
+msgid "Unknown NIS error code"
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ËÏÄ ÏÛÉÂËÉ NIS"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:139
-msgid "Error 109"
-msgstr "ïÛÉÂËÁ 109"
+#: nis/ypclnt.c:913
+msgid "Internal ypbind error"
+msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ ypbind"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:140
-msgid "Error 110"
-msgstr "ïÛÉÂËÁ 110"
+#: nis/ypclnt.c:916
+msgid "Domain not bound"
+msgstr "äÏÍÅΠÎÅ ÎÁÊÄÅÎ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:141
-msgid "Error 111"
-msgstr "ïÛÉÂËÁ 111"
+#: nis/ypclnt.c:919
+msgid "System resource allocation failure"
+msgstr "óÂÏÊ ×ÙÄÅÌÅÎÉÑ ÓÉÓÔÅÍÎÏÇÏ ÒÅÓÕÒÓÁ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:142
-msgid "Error 112"
-msgstr "ïÛÉÂËÁ 112"
+#: nis/ypclnt.c:922
+msgid "Unknown ypbind error"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ ypbind"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:143
-msgid "Error 113"
-msgstr "ïÛÉÂËÁ 113"
+#: nis/ypclnt.c:963
+msgid "yp_update: cannot convert host to netname\n"
+msgstr "yp_update: ÎÅ×ÏÚÍÏÖÎÏ ÐÒÅÏÂÒÁÚÏ×ÁÔØ ÈÏÓÔ × netname\n"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:144
-msgid "Error 114"
-msgstr "ïÛÉÂËÁ 114"
+#: 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:145
-msgid "Error 115"
-msgstr "ïÛÉÂËÁ 115"
+#: nscd/aicache.c:76 nscd/hstcache.c:461
+#, c-format
+msgid "Haven't found \"%s\" in hosts cache!"
+msgstr "îÅ ÎÁÊÄÅÎÏ \"%s\" × ËÜÛÅ ÈÏÓÔÏ×!"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:146
-msgid "Error 116"
-msgstr "ïÛÉÂËÁ 116"
+#: nscd/aicache.c:78 nscd/hstcache.c:463
+#, c-format
+msgid "Reloading \"%s\" in hosts cache!"
+msgstr "ðÅÒÅÚÁÇÒÕÚËÁ \"%s\" × ËÜÛÅ ÈÏÓÔÏ×!"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:147
-msgid "Error 117"
-msgstr "ïÛÉÂËÁ 117"
+#: nscd/cache.c:126
+#, c-format
+msgid "add new entry \"%s\" of type %s for %s to cache%s"
+msgstr "ÄÏÂÁ×ÉÔØ ÎÏ×ÕÀ ÚÁÐÉÓØ \"%s\" ÔÉÐÁ %s ÄÌÑ %s × ËÜÛ%s"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:148
-msgid "Error 118"
-msgstr "ïÛÉÂËÁ 118"
+#: nscd/cache.c:233 nscd/connections.c:750
+#, c-format
+msgid "cannot stat() file `%s': %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat() ÄÌÑ ÆÁÊÌÁ `%s': %s"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:149
-msgid "Error 119"
-msgstr "ïÛÉÂËÁ 119"
+#: nscd/cache.c:262
+#, c-format
+msgid "pruning %s cache; time %ld"
+msgstr ""
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:152
-msgid "Operation not supported on transport endpoint"
-msgstr "ïÐÅÒÁÃÉÑ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÎÁ ËÏÎÅÞÎÏÊ ÔÏÞËÅ ÐÅÒÅÄÁÞÉ"
+#: nscd/cache.c:289
+#, c-format
+msgid "considering %s entry \"%s\", timeout %<PRIu64>"
+msgstr ""
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:154
-msgid "Address family not supported by protocol family"
-msgstr "óÅÍÅÊÓÔ×Ï ÁÄÒÅÓÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÓÅÍÅÊÓÔ×ÏÍ ÐÒÏÔÏËÏÌÏ×"
+#: nscd/connections.c:469 nscd/connections.c:481 nscd/connections.c:493
+#: nscd/connections.c:512
+#, c-format
+msgid "invalid persistent database file \"%s\": %s"
+msgstr "ÎÅ×ÅÒÎÙÊ ÆÁÊÌ Ó ÐÏÓÔÏÑÎÎÏÊ ÂÁÚÏÊ ÄÁÎÎÙÈ \"%s\": %s"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:159
-msgid "Network dropped connection because of reset"
-msgstr "óÅÔØ ÓÂÒÏÓÉÌÁ ÓÏÅÄÉÎÅÎÉÅ ÉÚ-ÚÁ ÐÅÒÅÚÁÇÒÕÚËÉ"
+#: nscd/connections.c:483
+msgid "header size does not match"
+msgstr "ÒÁÚÍÅÒ ÚÁÇÏÌÏ×ËÁ ÎÅ ÓÏ×ÐÁÄÁÅÔ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:166
-msgid "Error 136"
-msgstr "ïÛÉÂËÁ 136"
+#: nscd/connections.c:495
+msgid "file size does not match"
+msgstr "ÎÅ ÓÏ×ÐÁÄÁÅÔ ÒÁÚÍÅÒ ÆÁÊÌÁ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:167
-msgid "Not a name file"
-msgstr ""
+#: nscd/connections.c:514
+msgid "verification failed"
+msgstr "×ÅÒÉÆÉËÁÃÉÑ ÎÅ ÕÄÁÌÁÓØ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:168
-msgid "Not available"
-msgstr "îÅÄÏÓÔÕÐÎÏ"
+#: nscd/connections.c:528
+#, c-format
+msgid "suggested size of table for database %s larger than the persistent database's table"
+msgstr "ÐÒÅÄÌÁÇÁÅÍÙÊ ÒÁÚÍÅÒ ÔÁÂÌÉÃÙ ÄÌÑ ÂÁÚÙ ÄÁÎÎÙÈ %s ÂÏÌØÛÅ ÞÅÍ ÔÁÂÌÉÃÁ Õ ÐÏÓÔÏÑÎÎÏÊ ÂÁÚÙ ÄÁÎÎÙÈ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:169
-msgid "Is a name file"
-msgstr ""
+#: nscd/connections.c:538 nscd/connections.c:619
+#, 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:171
-msgid "Reserved for future use"
-msgstr "úÁÒÅÚÅÒ×ÉÒÏ×ÁÎÏ ÎÁ ÂÕÄÕÝÅÅ"
+#: nscd/connections.c:598
+#, c-format
+msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart"
+msgstr "ÂÁÚÁ ÄÁÎÎÙÈ ÄÌÑ %s ÐÏ×ÒÅÖÄÅÎÁ ÉÌÉ ÐÁÒÁÌÌÅÌØÎÏ ÉÓÐÏÌØÚÕÅÔÓÑ; ÕÄÁÌÉÔÅ %s ×ÒÕÞÎÕÀ, ÅÓÌÉ ÎÅÏÂÈÏÄÉÍÏ, É ÐÅÒÅÚÁÐÕÓÔÉÔÅ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:172
-msgid "Error 142"
-msgstr "ïÛÉÂËÁ 142"
+#: nscd/connections.c:605
+#, c-format
+msgid "cannot create %s; no persistent database used"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ %s; ÐÏÓÔÏÑÎÎÙÅ ÂÁÚÙ ÄÁÎÎÙÈ ÎÅ ÉÓÐÏÌØÚÏ×ÁÎÙ"
 
-#: stdio-common/../sysdeps/unix/sysv/sysv4/solaris2/sparc/errlist.c:173
-msgid "Cannot send after socket shutdown"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔÐÒÁ×ÉÔØ ÐÏÓÌÅ ×ÙËÌÀÞÅÎÉÑ ÓÏËÅÔÁ"
+#: nscd/connections.c:608
+#, c-format
+msgid "cannot create %s; no sharing possible"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ %s; ÒÁÚÄÅÌÅÎÉÅ ÎÅ×ÏÚÍÏÖÎÏ"
 
-#: stdio-common/psignal.c:63
+#: nscd/connections.c:679
 #, c-format
-msgid "%s%sUnknown signal %d\n"
-msgstr "%s%sîÅÉÚ×ÅÓÔÎÙÊ ÓÉÇÎÁÌ %d\n"
+msgid "cannot write to database file %s: %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ × ÆÁÊÌ ÂÁÚÙ ÄÁÎÎÙÈ %s: %s "
 
-#: dlfcn/dlinfo.c:51
-msgid "RTLD_SELF used in code not dynamically loaded"
-msgstr "RTLD_SELF ÉÓÐÏÌØÚÏ×ÁÎÏ × ÎÅ ÄÉÎÁÍÉÞÅÓËÉ ÚÁÇÒÕÖÅÎÎÏÍ ËÏÄÅ"
+#: nscd/connections.c:713
+#, c-format
+msgid "cannot set socket to close on exec: %s; disabling paranoia mode"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ÚÁËÒÙÔÉÅ ÓÏËÅÔÁ ÐÒÉ exec: %s; ÐÁÒÁÎÏÉÄÁÌØÎÙÊ ÒÅÖÉÍ ×ÙËÌÀÞÅÎ"
 
-#: dlfcn/dlinfo.c:61
-msgid "unsupported dlinfo request"
-msgstr "ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÚÁÐÒÏÓ dlinfo"
+#: nscd/connections.c:763
+#, c-format
+msgid "cannot open socket: %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÓÏËÅÔ: %s"
 
-#: malloc/mcheck.c:346
-msgid "memory is consistent, library is buggy\n"
-msgstr "ÐÁÍÑÔØ × ÈÏÒÏÛÅÍ ÓÏÓÔÏÑÎÉÉ, ÏÛÉÂËÉ × ÂÉÂÌÉÏÔÅËÅ\n"
+#: nscd/connections.c:780
+#, c-format
+msgid "cannot change socket to nonblocking mode: %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÅÒÅ×ÅÓÔÉ ÓÏËÅÔ × ÎÅÂÌÏËÉÒÕÀÝÉÊ ÒÅÖÉÍ: %s"
 
-#: malloc/mcheck.c:349
-msgid "memory clobbered before allocated block\n"
-msgstr "ÐÁÍÑÔØ ÚÁÔÅÒÔÁ ÐÅÒÅÄ ×ÙÄÅÌÅÎÎÙÍ ÂÌÏËÏÍ\n"
+#: nscd/connections.c:788
+#, c-format
+msgid "cannot set socket to close on exec: %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÓÏËÅÔ ÚÁËÒÙ×ÁÀÝÉÍÓÑ ÐÒÉ ×ÙÐÏÌÎÅÎÉÉ exec: %s"
 
-#: malloc/mcheck.c:352
-msgid "memory clobbered past end of allocated block\n"
-msgstr "ÐÁÍÑÔØ ÚÁÔÅÒÔÁ ÐÏÓÌÅ ËÏÎÃÁ ×ÙÄÅÌÅÎÎÏÇÏ ÂÌÏËÁ\n"
+#: nscd/connections.c:799
+#, c-format
+msgid "cannot enable socket to accept connections: %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÓÏËÅÔ ÐÒÉÎÉÍÁÀÝÉÍ ÓÏÅÄÉÎÅÎÉÑ: %s"
 
-#: malloc/mcheck.c:355
-msgid "block freed twice\n"
-msgstr "ÂÌÏË ÏÓ×ÏÂÏÖÄÅΠÄ×ÁÖÄÙ\n"
+#: nscd/connections.c:892
+#, c-format
+msgid "provide access to FD %d, for %s"
+msgstr ""
 
-#: malloc/mcheck.c:358
-msgid "bogus mcheck_status, library is buggy\n"
-msgstr "ÎÅÁÄÅË×ÁÔÎÙÊ mcheck_status, × ÂÉÂÌÉÏÔÅËÅ ÏÛÉÂËÉ\n"
+#: nscd/connections.c:904
+#, c-format
+msgid "cannot handle old request version %d; current version is %d"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÂÒÁÂÏÔÁÔØ ÚÁÐÒÏÓ ÓÔÁÒÏÊ ×ÅÒÓÉÉ %d; ÔÅËÕÝÁÑ ×ÅÒÓÉÑ %d"
 
-#: malloc/memusagestat.c:53
-msgid "Name output file"
-msgstr "éÍÑ ×ÙÈÏÄÎÏÇÏ ÆÁÊÌÁ"
+#: nscd/connections.c:954 nscd/connections.c:1007
+#, c-format
+msgid "cannot write result: %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÒÅÚÕÌØÔÁÔ: %s"
 
-#: malloc/memusagestat.c:54
-msgid "Title string used in output graphic"
-msgstr "úÁÇÏÌÏ×ÏË ÄÌÑ ×ÙÈÏÄÎÏÇÏ ÇÒÁÆÉËÁ"
+#: nscd/connections.c:1082
+#, c-format
+msgid "error getting caller's id: %s"
+msgstr "ÏÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ×ÙÚÙ×ÁÀÝÅÊ ÓÔÏÒÏÎÙ: %s"
 
-#: malloc/memusagestat.c:55
-msgid "Generate output linear to time (default is linear to number of function calls)"
-msgstr "çÅÎÅÒÉÒÏ×ÁÔØ ×Ù×ÏÄ ÌÉÎÅÊÎÏ ÏÔÎÏÓÉÔÅÌØÎÏ ×ÒÅÍÅÎÉ (ÐÏ ÕÍÏÌÞÁÎÉÀ ÌÉÎÅÊÎÏ ÏÔÎÏÓÉÔÅÌØÎÏ ÞÉÓÌÕ ×ÙÚÏ×Ï× ÆÕÎËÃÉÊ)"
+#: nscd/connections.c:1140 nscd/connections.c:1154
+#, c-format
+msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ /proc/self/cmdline: %s; ÐÁÒÁÎÏÉÄÁÌØÎÙÊ ÒÅÖÉÍ ×ÙËÌÀÞÅÎ"
 
-#: malloc/memusagestat.c:57
-msgid "Also draw graph for total memory consumption"
-msgstr "ðÏÓÔÒÏÉÔØ ÔÁËÖÅ ÇÒÁÆÉË ÉÔÏÇÏ×ÏÇÏ ÐÏÔÒÅÂÌÅÎÉÑ ÐÁÍÑÔÉ"
+#: nscd/connections.c:1194
+#, c-format
+msgid "cannot change to old UID: %s; disabling paranoia mode"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÍÅÎÉÔØ UID ÎÁ ÐÒÅÖÎÉÊ: %s; ÐÁÒÁÎÏÉÄÁÌØÎÙÊ ÒÅÖÉÍ ×ÙËÌÀÞÅÎ"
 
-#: malloc/memusagestat.c:58
-msgid "make output graphic VALUE pixel wide"
-msgstr "ÒÉÓÏ×ÁÔØ ÇÒÁÆÉË ÛÉÒÉÎÏÊ × VALUE ÐÉËÓÅÌÏ×"
+#: nscd/connections.c:1204
+#, c-format
+msgid "cannot change to old GID: %s; disabling paranoia mode"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÍÅÎÉÔØ GID ÎÁ ÐÒÅÖÎÉÊ: %s; ÐÁÒÁÎÏÉÄÁÌØÎÙÊ ÒÅÖÉÍ ×ÙËÌÀÞÅÎ"
 
-#: malloc/memusagestat.c:59
-msgid "make output graphic VALUE pixel high"
-msgstr "ÒÉÓÏ×ÁÔØ ÇÒÁÆÉË ×ÙÓÏÔÏÊ × VALUE ÐÉËÓÅÌÏ×"
+#: nscd/connections.c:1217
+#, c-format
+msgid "cannot change to old working directory: %s; disabling paranoia mode"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÅÒÎÕÔØÓÑ × ÐÒÅÖÎÉÊ ÒÁÂÏÞÉÊ ËÁÔÁÌÏÇ: %s; ÐÁÒÁÎÏÉÄÁÌØÎÙÊ ÒÅÖÉÍ ×ÙËÌÀÞÅÎ"
 
-#: malloc/memusagestat.c:64
-msgid "Generate graphic from memory profiling data"
-msgstr "óÇÅÎÅÒÉÒÏ×ÁÔØ ÇÒÁÆÉË ÐÏ ÄÁÎÎÙÍ ÐÒÏÆÉÌÉÒÏ×ÁÎÉÑ ÐÁÍÑÔÉ"
+#: nscd/connections.c:1245
+#, c-format
+msgid "re-exec failed: %s; disabling paranoia mode"
+msgstr "ÐÏ×ÔÏÒÎÙÊ exec ÎÅÕÓÐÅÛÅÎ: %s; ÐÁÒÁÎÏÉÄÁÌØÎÙÊ ÒÅÖÉÍ ×ÙËÌÀÞÅÎ"
 
-#: malloc/memusagestat.c:67
-msgid "DATAFILE [OUTFILE]"
-msgstr "æáêì-äáîîùè [÷ùèïäîïê-æáêì]"
+#: nscd/connections.c:1254
+#, c-format
+msgid "cannot change current working directory to \"/\": %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÍÅÎÉÔØ ÒÁÂÏÞÉÊ ËÁÔÁÌÏÇ ÎÁ \"/\": %s"
 
-#: string/strerror.c:43 posix/../sysdeps/posix/gai_strerror.c:57
-msgid "Unknown error"
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ"
+#: nscd/connections.c:1372
+#, c-format
+msgid "short read while reading request: %s"
+msgstr "ÎÅÐÏÌÎÙÊ ÓÞÉÔÁÎÎÙÊ ÂÌÏË ÐÒÉ ÞÔÅÎÉÉ ÚÁÐÒÏÓÁ: %s"
 
-#: string/strsignal.c:69
+#: nscd/connections.c:1404
 #, c-format
-msgid "Real-time signal %d"
-msgstr "óÉÇÎÁÌ ÒÅÁÌØÎÏÇÏ ×ÒÅÍÅÎÉ %d"
+msgid "key length in request too long: %d"
+msgstr "ÄÌÉÎÁ ËÌÀÞÁ × ÚÁÐÒÏÓÅ ÓÌÉÛËÏÍ ×ÅÌÉËÁ: %d"
 
-#: string/strsignal.c:73
+#: nscd/connections.c:1417
 #, c-format
-msgid "Unknown signal %d"
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÓÉÇÎÁÌ %d"
+msgid "short read while reading request key: %s"
+msgstr "ÎÅÐÏÌÎÙÊ ÓÞÉÔÁÎÎÙÊ ÂÌÏË ÐÒÉ ÞÔÅÎÉÉ ËÌÀÞÁ ÚÁÐÒÏÓÁ: %s"
 
-#: timezone/zdump.c:176
+#: nscd/connections.c:1426
 #, c-format
-msgid "%s: usage is %s [ --version ] [ -v ] [ -c cutoff ] zonename ...\n"
-msgstr "%s: ÉÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ --version ] [ -v ] [ -c cutoff ] ÉÍÑ-ÚÏÎÙ ...\n"
+msgid "handle_request: request received (Version = %d) from PID %ld"
+msgstr "handle_request: ÐÏÌÕÞÅΠÚÁÐÒÏÓ (×ÅÒÓÉÑ = %d) ÏÔ PID %ld"
 
-#: timezone/zdump.c:269
-msgid "Error writing to standard output"
-msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÎÁ ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ"
+#: nscd/connections.c:1431
+#, c-format
+msgid "handle_request: request received (Version = %d)"
+msgstr "handle_request: ÐÏÌÕÞÅΠÚÁÐÒÏÓ (×ÅÒÓÉÑ = %d)"
 
-#: timezone/zic.c:361
+#: nscd/connections.c:1792
 #, c-format
-msgid "%s: Memory exhausted: %s\n"
-msgstr "%s: ðÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ: %s\n"
+msgid "could only start %d threads; terminating"
+msgstr "ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ ÔÏÌØËÏ %d ÔÒÅÄÏ×; ÏÓÔÁÎÏ×"
 
-#: timezone/zic.c:386 misc/error.c:129 misc/error.c:157
-msgid "Unknown system error"
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÓÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ"
+#: 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
+#, c-format
+msgid "Failed to run nscd as user '%s'"
+msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ nscd ÏÔ ÉÍÅÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ '%s'"
 
-#: timezone/zic.c:420
+#: nscd/connections.c:1859
 #, c-format
-msgid "\"%s\", line %d: %s"
-msgstr "\"%s\", ÓÔÒÏËÁ %d: %s"
+msgid "initial getgrouplist failed"
+msgstr "ÐÅÒ×ÏÎÁÞÁÌØÎÁÑ getgrouplist ÎÅÕÓÐÅÛÎÁ"
 
-#: timezone/zic.c:423
+#: nscd/connections.c:1868
 #, c-format
-msgid " (rule from \"%s\", line %d)"
-msgstr " (ÐÒÁ×ÉÌÏ ÉÚ \"%s\", ÓÔÒÏËÁ %d)"
+msgid "getgrouplist failed"
+msgstr "getgrouplist ÎÅÕÓÐÅÛÎÁ"
 
-#: timezone/zic.c:435
-msgid "warning: "
-msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: "
+#: nscd/connections.c:1886
+#, c-format
+msgid "setgroups failed"
+msgstr "setgroups ÎÅÕÓÐÅÛÎÁ"
 
-#: timezone/zic.c:445
+#: nscd/grpcache.c:400 nscd/hstcache.c:411 nscd/initgrcache.c:411
+#: nscd/pwdcache.c:395
 #, c-format
-msgid ""
-"%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n"
-"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"
-msgstr ""
-"%s: ÉÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ --version ] [ -s ] [ -v ] [ -l ÍÅÓÔÎÏÅ-×ÒÅÍÑ ] [ -p ÐÒÁ×ÉÌÁ-posix ] \\\n"
-"\t[ -d ËÁÔÁÌÏÇ ] [ -L ×ÉÓÏËÏÓÎÙÅ-ÓÅËÕÎÄÙ ] [ -y yearistype ] [ ÉÍÑ-ÆÁÊÌÁ ... ]\n"
+msgid "short write in %s: %s"
+msgstr "ÎÅÐÏÌÎÁÑ ÚÁÐÉÓØ × %s: %s"
 
-#: timezone/zic.c:492
+#: nscd/grpcache.c:443 nscd/initgrcache.c:77
 #, c-format
-msgid "%s: More than one -d option specified\n"
-msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -d\n"
+msgid "Haven't found \"%s\" in group cache!"
+msgstr "îÅ ÎÁÊÄÅÎÏ \"%s\" × ËÜÛÅ ÇÒÕÐÐ!"
 
-#: timezone/zic.c:502
+#: nscd/grpcache.c:445 nscd/initgrcache.c:79
 #, c-format
-msgid "%s: More than one -l option specified\n"
-msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -l\n"
+msgid "Reloading \"%s\" in group cache!"
+msgstr "ðÅÒÅÚÁÇÒÕÚËÁ \"%s\" × ËÜÛÅ ÇÒÕÐÐ!"
 
-#: timezone/zic.c:512
+#: nscd/grpcache.c:536
 #, c-format
-msgid "%s: More than one -p option specified\n"
-msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -p\n"
+msgid "Invalid numeric gid \"%s\"!"
+msgstr "îÅ×ÅÒÎÙÊ ÞÉÓÌÏ×ÏÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÇÒÕÐÐÙ \"%s\"!"
 
-#: timezone/zic.c:522
+#: nscd/mem.c:382
 #, c-format
-msgid "%s: More than one -y option specified\n"
-msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -y\n"
+msgid "freed %zu bytes in %s cache"
+msgstr "ÏÓ×ÏÂÏÖÄÅÎÏ %zu ÂÁÊÔ × ËÜÛÅ %s"
 
-#: timezone/zic.c:532
+#: nscd/mem.c:511
 #, c-format
-msgid "%s: More than one -L option specified\n"
-msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -L\n"
+msgid "no more memory for database '%s'"
+msgstr "ÎÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ ÄÌÑ ÂÁÚÙ ÄÁÎÎÙÈ '%s'"
+
+#: nscd/nscd.c:97
+msgid "Read configuration data from NAME"
+msgstr "þÉÔÁÔØ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÅ ÄÁÎÎÙÅ ÉÚ æáêìá"
 
-#: timezone/zic.c:639
-#, c-format
-msgid "%s: Can't unlink  %s: %s\n"
-msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÓÓÙÌËÕ  %s: %s\n"
+#: nscd/nscd.c:99
+msgid "Do not fork and display messages on the current tty"
+msgstr "îÅ ÐÏÒÏÖÄÁÔØ ÄÏÞÅÒÎÉÊ ÐÒÏÃÅÓÓ, ÐÅÞÁÔÁÔØ ÓÏÏÂÝÅÎÉÑ ÎÁ ÔÅËÕÝÉÊ ÔÅÒÍÉÎÁÌ"
 
-#: timezone/zic.c:646
-msgid "hard link failed, symbolic link used"
-msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÄÅÌÁÔØ ÖÅÓÔËÕÀ ÓÓÙÌËÕ, ÉÓÐÏÌØÚÕÅÔÓÑ ÓÉÍ×ÏÌØÎÁÑ"
+#: nscd/nscd.c:100
+msgid "NUMBER"
+msgstr "þéóìï"
 
-#: timezone/zic.c:654
-#, c-format
-msgid "%s: Can't link from %s to %s: %s\n"
-msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÓÓÙÌËÕ Ó %s ÎÁ %s: %s\n"
+#: nscd/nscd.c:100
+msgid "Start NUMBER threads"
+msgstr "úÁÐÕÓÔÉÔØ ÕËÁÚÁÎÎÏÅ þéóìï ÎÉÔÅÊ"
 
-#: timezone/zic.c:752 timezone/zic.c:754
-msgid "same rule name in multiple files"
-msgstr "ÏÄÉÎÁËÏ×ÏÅ ÉÍÑ ÐÒÁ×ÉÌÁ × ÎÅÓËÏÌØËÉÈ ÆÁÊÌÁÈ"
+#: nscd/nscd.c:101
+msgid "Shut the server down"
+msgstr "÷ÙËÌÀÞÉÔØ ÓÅÒ×ÅÒ"
 
-#: timezone/zic.c:795
-msgid "unruly zone"
-msgstr "ÎÅ ÐÏÄÞÉÎÑÀÝÁÑÓÑ ÐÒÁ×ÉÌÁÍ ÚÏÎÁ"
+#: nscd/nscd.c:102
+msgid "Print current configuration statistic"
+msgstr "îÁÐÅÞÁÔÁÔØ ÓÔÁÔÉÓÔÉËÕ ÐÏ ÔÅËÕÝÅÊ ËÏÎÆÉÇÕÒÁÃÉÉ"
 
-#: timezone/zic.c:802
-#, c-format
-msgid "%s in ruleless zone"
-msgstr "%s × ÚÏÎÅ ÂÅÚ ÐÒÁ×ÉÌ"
+#: nscd/nscd.c:103
+msgid "TABLE"
+msgstr "ôáâìéãá"
 
-#: timezone/zic.c:823
-msgid "standard input"
-msgstr "ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ"
+#: nscd/nscd.c:104
+msgid "Invalidate the specified cache"
+msgstr "ïÂßÑ×ÉÔØ ÕËÁÚÁÎÎÙÊ ËÜÛ ÎÅÄÅÊÓÔ×ÉÔÅÌØÎÙÍ"
 
-#: timezone/zic.c:828
-#, c-format
-msgid "%s: Can't open %s: %s\n"
-msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n"
+#: nscd/nscd.c:105
+msgid "TABLE,yes"
+msgstr "ôáâìéãá,yes"
 
-#: timezone/zic.c:839
-msgid "line too long"
-msgstr "ÓÔÒÏËÁ ÓÌÉÛËÏÍ ÄÌÉÎÎÁÑ"
+#: nscd/nscd.c:106
+msgid "Use separate cache for each user"
+msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÏÔÄÅÌØÎÙÊ ËÜÛ ÄÌÑ ËÁÖÄÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ"
 
-#: timezone/zic.c:859
-msgid "input line of unknown type"
-msgstr "×ÈÏÄÎÁÑ ÓÔÒÏËÁ ÎÅÉÚ×ÅÓÔÎÏÇÏ ÔÉÐÁ"
+#: nscd/nscd.c:111
+msgid "Name Service Cache Daemon."
+msgstr "äÅÍÏΠËÜÛÁ ÓÌÕÖÂÙ ÉÍÅÎ."
 
-#: timezone/zic.c:875
+#: nscd/nscd.c:143 nss/getent.c:858 nss/makedb.c:123
 #, c-format
-msgid "%s: Leap line in non leap seconds file %s\n"
-msgstr "%s: ÷ÉÓÏËÏÓÎÁÑ ÓÔÒÏËÁ ×ÅË ÆÁÊÌÁ ×ÉÓÏËÏÓÎÙÈ ÓÅËÕÎÄ %s\n"
+msgid "wrong number of arguments"
+msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÞÉÓÌÏ ÁÒÇÕÍÅÎÔÏ×"
 
-#: timezone/zic.c:882 timezone/zic.c:1297 timezone/zic.c:1322
+#: nscd/nscd.c:153
 #, c-format
-msgid "%s: panic: Invalid l_value %d\n"
-msgstr "%s: ÐÁÎÉËÁ: îÅÄÏÐÕÓÔÉÍÏÅ l_value %d\n"
+msgid "failure while reading configuration file; this is fatal"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÆÁÊÌ ËÏÎÆÉÇÕÒÁÃÉÉ; ÜÔÏ ÆÁÔÁÌØÎÙÊ ÓÂÏÊ"
 
-#: timezone/zic.c:890
+#: nscd/nscd.c:162
 #, c-format
-msgid "%s: Error reading %s\n"
-msgstr "%s: ïÛÉÂËÁ ÞÔÅÎÉÑ %s\n"
+msgid "already running"
+msgstr "ÕÖÅ ÚÁÐÕÝÅÎ"
 
-#: timezone/zic.c:897
+#: nscd/nscd.c:177 nscd/nscd.c:232
 #, c-format
-msgid "%s: Error closing %s: %s\n"
-msgstr "%s: ïÛÉÂËÁ ÚÁËÒÙÔÉÑ %s: %s\n"
-
-#: timezone/zic.c:902
-msgid "expected continuation line not found"
-msgstr "ÏÖÉÄÁÅÍÁÑ ÓÔÒÏËÁ ÐÒÏÄÏÌÖÅÎÉÑ ÎÅ ÎÁÊÄÅÎÁ"
-
-#: timezone/zic.c:958
-msgid "wrong number of fields on Rule line"
-msgstr "ÎÅÐÒÁ×ÉÌØÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Rule"
-
-#: timezone/zic.c:962
-msgid "nameless rule"
-msgstr "ÂÅÚÙÍÑÎÎÏÅ ÐÒÁ×ÉÌÏ"
+msgid "cannot fork"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÒÏÄÉÔØ ÄÏÞÅÒÎÉÊ ÐÒÏÃÅÓÓ"
 
-#: timezone/zic.c:967
-msgid "invalid saved time"
-msgstr "ÎÅ×ÅÒÎÏÅ ÓÏÈÒÁÎÅÎÎÏÅ ×ÒÅÍÑ"
+#: nscd/nscd.c:240
+#, c-format
+msgid "cannot change current working directory to \"/\""
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÍÅÎÉÔØ ÒÁÂÏÞÉÊ ËÁÔÁÌÏÇ ÎÁ \"/\""
 
-#: timezone/zic.c:986
-msgid "wrong number of fields on Zone line"
-msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Zone"
+#: nscd/nscd.c:248
+msgid "Could not create log file"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÁÊÌ ÐÒÏÔÏËÏÌÁ"
 
-#: timezone/zic.c:992
+#: nscd/nscd.c:301 nscd/nscd.c:326 nscd/nscd_stat.c:172
 #, c-format
-msgid "\"Zone %s\" line and -l option are mutually exclusive"
-msgstr "ÓÔÒÏËÁ \"Zone %s\" É ËÌÀÞ -l ×ÚÁÉÍÎÏ ÉÓËÌÀÞÁÀÔÓÑ"
+msgid "Only root is allowed to use this option!"
+msgstr "ôÏÌØËÏ ÓÕÐÅÒÐÏÌØÚÏ×ÁÔÅÌØ ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÜÔÏÔ ËÌÀÞ!"
 
-#: timezone/zic.c:1000
+#: nscd/nscd.c:359 nscd/nscd_stat.c:191
 #, c-format
-msgid "\"Zone %s\" line and -p option are mutually exclusive"
-msgstr "ÓÔÒÏËÁ \"Zone %s\" É ËÌÀÞ -p ×ÚÁÉÍÎÏ ÉÓËÌÀÞÁÀÔÓÑ"
+msgid "write incomplete"
+msgstr "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÚÁÐÉÓØ"
 
-#: timezone/zic.c:1012
+#: nscd/nscd.c:370
 #, c-format
-msgid "duplicate zone name %s (file \"%s\", line %d)"
-msgstr "ÐÏ×ÔÏÒÎÏÅ ÉÍÑ ÚÏÎÙ %s (ÆÁÊÌ \"%s\", ÓÔÒÏËÁ %d)"
-
-#: timezone/zic.c:1028
-msgid "wrong number of fields on Zone continuation line"
-msgstr "ÎÅÐÒÁ×ÉÌØÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ ÐÒÏÄÏÌÖÅÎÉÑ Zone"
+msgid "cannot read invalidate ACK"
+msgstr ""
 
-#: timezone/zic.c:1068
-msgid "invalid UTC offset"
-msgstr "ÎÅ×ÅÒÎÏÅ ÓÍÅÝÅÎÉÅ ÏÔ UTC"
+#: nscd/nscd.c:376
+#, c-format
+msgid "invalidation failed"
+msgstr ""
 
-#: timezone/zic.c:1071
-msgid "invalid abbreviation format"
-msgstr "ÎÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÓÏËÒÁÝÅÎÉÑ"
+#: nscd/nscd.c:386
+#, c-format
+msgid "secure services not implemented anymore"
+msgstr ""
 
-#: timezone/zic.c:1097
-msgid "Zone continuation line end time is not after end time of previous line"
-msgstr "ËÏÎÅÞÎÏÅ ×ÒÅÍÑ × ÓÔÒÏËÅ ÐÒÏÄÏÌÖÅÎÉÑ Zone ÎÅ ÐÏÚÄÎÅÅ ËÏÎÅÞÎÏÇÏ ×ÒÅÍÅÎÉ × ÐÒÅÄÙÄÕÝÅÊ ÓÔÒÏËÅ"
+#: nscd/nscd_conf.c:55
+#, c-format
+msgid "database %s is not supported\n"
+msgstr "ÂÁÚÁ ÄÁÎÎÙÈ %s ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ\n"
 
-#: timezone/zic.c:1124
-msgid "wrong number of fields on Leap line"
-msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Leap"
+#: nscd/nscd_conf.c:106
+#, c-format
+msgid "Parse error: %s"
+msgstr "ïÛÉÂËÁ ÒÁÚÂÏÒÁ: %s"
 
-#: timezone/zic.c:1133
-msgid "invalid leaping year"
-msgstr "ÎÅ×ÅÒÎÙÊ ×ÉÓÏËÏÓÎÙÊ ÇÏÄ"
+#: nscd/nscd_conf.c:191
+#, c-format
+msgid "Must specify user name for server-user option"
+msgstr "îÕÖÎÏ ÕËÁÚÁÔØ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ËÌÀÞÁ server-user"
 
-#: timezone/zic.c:1148 timezone/zic.c:1252
-msgid "invalid month name"
-msgstr "ÎÅ×ÅÒÎÏÅ ÎÁÚ×ÁÎÉÅ ÍÅÓÑÃÁ"
+#: nscd/nscd_conf.c:198
+#, c-format
+msgid "Must specify user name for stat-user option"
+msgstr "îÕÖÎÏ ÕËÁÚÁÔØ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ËÌÀÞÁ stat-user"
 
-#: timezone/zic.c:1161 timezone/zic.c:1374 timezone/zic.c:1388
-msgid "invalid day of month"
-msgstr "ÎÅ×ÅÒÎÙÊ ÄÅÎØ ÍÅÓÑÃÁ"
+#: nscd/nscd_conf.c:242
+#, c-format
+msgid "invalid value for 'reload-count': %u"
+msgstr "ÎÅÄÏÐÕÓÔÉÍÏÅ ÚÎÁÞÅÎÉÅ ÄÌÑ 'reload-count': %u"
 
-#: timezone/zic.c:1166
-msgid "time before zero"
-msgstr "×ÒÅÍÑ ÄÏ ÎÕÌÑ"
+#: nscd/nscd_conf.c:257
+#, c-format
+msgid "Must specify value for restart-interval option"
+msgstr "îÕÖÎÏ ÕËÁÚÁÔØ ÚÎÁÞÅÎÉÅ ÄÌÑ ËÌÀÞÁ restart-interval"
 
-#: timezone/zic.c:1170
-msgid "time too small"
-msgstr "×ÒÅÍÑ ÓÌÉÛËÏÍ ÍÁÌÏ"
+#: nscd/nscd_conf.c:271
+#, c-format
+msgid "Unknown option: %s %s %s"
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ: %s %s %s"
 
-#: timezone/zic.c:1174
-msgid "time too large"
-msgstr "×ÒÅÍÑ ÓÌÉÛËÏÍ ×ÅÌÉËÏ"
+#: nscd/nscd_conf.c:284
+#, c-format
+msgid "cannot get current working directory: %s; disabling paranoia mode"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÔÅËÕÝÉÊ ÒÁÂÏÞÉÊ ËÁÔÁÌÏÇ: %s; ÐÁÒÁÎÏÉÄÁÌØÎÙÊ ÒÅÖÉÍ ×ÙËÌÀÞÅÎ"
 
-#: timezone/zic.c:1178 timezone/zic.c:1281
-msgid "invalid time of day"
-msgstr "ÎÅ×ÅÒÎÏÅ ×ÒÅÍÑ ÄÎÑ"
+#: nscd/nscd_conf.c:304
+#, c-format
+msgid "maximum file size for %s database too small"
+msgstr "ÍÁËÓÉÍÁÌØÎÙÊ ÒÁÚÍÅÒ ÆÁÊÌÁ ÄÌÑ ÂÁÚÙ ÄÁÎÎÙÈ %s ÓÌÉÛËÏÍ ÍÁÌ"
 
-#: timezone/zic.c:1197
-msgid "illegal CORRECTION field on Leap line"
-msgstr "ÎÅ×ÅÒÎÏÅ ÐÏÌÅ CORRECTION × ÓÔÒÏËÅ Leap"
+#: nscd/nscd_stat.c:141
+#, c-format
+msgid "cannot write statistics: %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÓÔÁÔÉÓÔÉËÕ: %s"
 
-#: timezone/zic.c:1201
-msgid "illegal Rolling/Stationary field on Leap line"
-msgstr "ÎÅ×ÅÒÎÏÅ ÐÏÌÅ Rolling/Stationary × ÓÔÒÏËÅ Leap"
+#: nscd/nscd_stat.c:156
+msgid "yes"
+msgstr "ÄÁ"
 
-#: timezone/zic.c:1216
-msgid "wrong number of fields on Link line"
-msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Link"
+#: nscd/nscd_stat.c:157
+msgid "no"
+msgstr "ÎÅÔ"
 
-#: timezone/zic.c:1220
-msgid "blank FROM field on Link line"
-msgstr "ÐÕÓÔÏÅ ÐÏÌÅ FROM × ÓÔÒÏËÅ Link"
+#: nscd/nscd_stat.c:168
+#, c-format
+msgid "Only root or %s is allowed to use this option!"
+msgstr "ôÏÌØËÏ ÓÕÐÅÒÐÏÌØÚÏ×ÁÔÅÌØ ÉÌÉ %s ÍÏÇÕÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÜÔÏÔ ËÌÀÞ!"
 
-#: timezone/zic.c:1224
-msgid "blank TO field on Link line"
-msgstr "ÐÕÓÔÏÅ ÐÏÌÅ TO × ÓÔÒÏËÅ Link"
+#: nscd/nscd_stat.c:179
+#, c-format
+msgid "nscd not running!\n"
+msgstr "nscd ÎÅ ÚÁÐÕÝÅÎ!\n"
 
-#: timezone/zic.c:1301
-msgid "invalid starting year"
-msgstr "ÎÅ×ÅÒÎÙÊ ÎÁÞÁÌØÎÙÊ ÇÏÄ"
+#: nscd/nscd_stat.c:203
+#, c-format
+msgid "cannot read statistics data"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÓÔÁÔÉÓÔÉÞÅÓËÉÅ ÄÁÎÎÙÅ"
 
-#: timezone/zic.c:1305
-msgid "starting year too low to be represented"
-msgstr "ÎÁÞÁÌØÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ÍÁÌ É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ"
+#: nscd/nscd_stat.c:206
+#, c-format
+msgid ""
+"nscd configuration:\n"
+"\n"
+"%15d  server debug level\n"
+msgstr ""
+"ëÏÎÆÉÇÕÒÁÃÉÑ nscd:\n"
+"\n"
+"%15d  ÕÒÏ×ÅÎØ ÏÔÌÁÄËÉ ÓÅÒ×ÅÒÁ\n"
 
-#: timezone/zic.c:1307
-msgid "starting year too high to be represented"
-msgstr "ÎÁÞÁÌØÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ×ÅÌÉË É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ"
+#: nscd/nscd_stat.c:230
+#, c-format
+msgid "%3ud %2uh %2um %2lus  server runtime\n"
+msgstr "%3ud %2uh %2um %2lus  ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n"
 
-#: timezone/zic.c:1326
-msgid "invalid ending year"
-msgstr "ÎÅ×ÅÒÎÙÊ ËÏÎÅÞÎÙÊ ÇÏÄ"
+#: nscd/nscd_stat.c:233
+#, c-format
+msgid "    %2uh %2um %2lus  server runtime\n"
+msgstr "    %2uh %2um %2lus  ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n"
 
-#: timezone/zic.c:1330
-msgid "ending year too low to be represented"
-msgstr "ËÏÎÅÞÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ÍÁÌ É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ"
+#: nscd/nscd_stat.c:235
+#, c-format
+msgid "        %2um %2lus  server runtime\n"
+msgstr "        %2um %2lus  ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n"
 
-#: timezone/zic.c:1332
-msgid "ending year too high to be represented"
-msgstr "ËÏÎÅÞÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ×ÅÌÉË É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ"
+#: nscd/nscd_stat.c:237
+#, c-format
+msgid "            %2lus  server runtime\n"
+msgstr "            %2lus  ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n"
 
-#: timezone/zic.c:1335
-msgid "starting year greater than ending year"
-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 ""
+"%15d  ÔÅËÕÝÅÅ ËÏÌÉÞÅÓÔ×Ï ÔÒÅÄÏ×\n"
+"%15d  ÍÁËÓÉÍÁÌØÎÏÅ ÞÉÓÌÏ ÔÒÅÄÏ×\n"
+"%15lu  ÞÉÓÌÏ ÓÌÕÞÁÅ×, ËÏÇÄÁ ËÌÉÅÎÔÁÍ ÐÒÉÛÌÏÓØ ÖÄÁÔØ\n"
+"%15s  ÐÁÒÁÎÏÉÄÁÌØÎÙÊ ÒÅÖÉÍ ×ËÌÀÞÅÎ\n"
+"%15lu  ×ÎÕÔÒÅÎÎÉÊ ÐÅÒÅÚÁÐÕÓË\n"
 
-#: timezone/zic.c:1342
-msgid "typed single year"
-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 ""
+"\n"
+"ëÜÛ %s:\n"
+"\n"
+"%15s  ËÜÛ ÚÁÄÅÊÓÔ×Ï×ÁÎ\n"
+"%15s  ËÜÛ ÐÏÓÔÏÑÎÎÙÊ\n"
+"%15s  ËÜÛ ÒÁÚÄÅÌÑÅÍÙÊ\n"
+"%15Zu  ÐÒÅÄÌÁÇÁÅÍÙÊ ÒÁÚÍÅÒ\n"
+"%15zu  ÏÂÝÉÊ ÏÂßÅÍ ÐÕÌÁ ÄÁÎÎÙÈ\n"
+"%15zu  ÉÓÐÏÌØÚÏ×ÁÎÎÙÊ ÏÂßÅÍ ÐÕÌÁ ÄÁÎÎÙÈ\n"
+"%15lu  ÓÅËÕÎÄÙ ÖÉÚÎÉ ÄÌÑ ÐÏÌÏÖÉÔÅÌØÎÙÈ ÚÁÐÉÓÅÊ\n"
+"%15lu  ÓÅËÕÎÄÙ ÖÉÚÎÉ ÄÌÑ ÏÔÒÉÃÁÔÅÌØÎÙÈ ÚÁÐÉÓÅÊ\n"
+"%15<PRIuMAX>  ÐÏÐÁÄÁÎÉÑ ÎÁ ÐÏÌÏÖÉÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n"
+"%15<PRIuMAX>  ÐÏÐÁÄÁÎÉÑ ÎÁ ÏÔÒÉÃÁÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n"
+"%15<PRIuMAX>  ÐÒÏÍÁÈÉ ÎÁ ÐÏÌÏÖÉÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n"
+"%15<PRIuMAX>  ÐÒÏÍÁÈÉ ÎÁ ÏÔÒÉÃÁÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n"
+"%15lu%% ÞÁÓÔÏÔÁ ÐÏÐÁÄÁÎÉÑ ÎÁ ËÜÛ\n"
+"%15zu  ÔÅËÕÝÅÅ ÞÉÓÌÏ ËÜÛÉÒÏ×ÁÎÎÙÈ ÚÎÁÞÅÎÉÊ\n"
+"%15zu  ÍÁËÓÉÍÁÌØÎÏÅ ÞÉÓÌÏ ËÜÛÉÒÏ×ÁÎÎÙÈ ÚÎÁÞÅÎÉÊ\n"
+"%15zu  ÍÁËÓÉÍÁÌØÎÁÑ ÄÌÉÎÁ ÃÅÐÏÞËÉ ÐÏÉÓËÁ\n"
+"%15<PRIuMAX>  ÞÉÓÌÏ ÚÁÄÅÒÖÅË ÎÁ rdlock\n"
+"%15<PRIuMAX>  ÞÉÓÌÏ ÚÁÄÅÒÖÅË ÎÁ wrlock\n"
+"%15<PRIuMAX>  ÞÉÓÌÏ ÏÛÉÂÏË ×ÙÄÅÌÅÎÉÑ ÐÁÍÑÔÉ\n"
+"%15s  ÏÔÓÌÅÖÉ×ÁÀÔÓÑ ÌÉ ÉÚÍÅÎÅÎÉÑ /etc/%s \n"
 
-#: timezone/zic.c:1379
-msgid "invalid weekday name"
-msgstr "ÎÅ×ÅÒÎÏÅ ÎÁÚ×ÁÎÉÑ ÄÎÑ ÎÅÄÅÌÉ"
+#: nscd/pwdcache.c:438
+#, c-format
+msgid "Haven't found \"%s\" in password cache!"
+msgstr "îÅ ÎÁÊÄÅÎÏ \"%s\" × ËÜÛÅ ÐÁÒÏÌÅÊ!"
 
-#: timezone/zic.c:1494
+#: nscd/pwdcache.c:440
 #, c-format
-msgid "%s: Can't remove %s: %s\n"
-msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ %s: %s\n"
+msgid "Reloading \"%s\" in password cache!"
+msgstr "ðÅÒÅÚÁÇÒÕÚËÁ \"%s\" × ËÜÛÅ ÐÁÒÏÌÅÊ!"
 
-#: timezone/zic.c:1504
+#: nscd/pwdcache.c:532
 #, c-format
-msgid "%s: Can't create %s: %s\n"
-msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ %s: %s\n"
+msgid "Invalid numeric uid \"%s\"!"
+msgstr "îÅ×ÅÒÎÙÊ ÞÉÓÌÏ×ÏÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ \"%s\"!"
 
-#: timezone/zic.c:1570
+#: nscd/selinux.c:151
 #, c-format
-msgid "%s: Error writing %s\n"
-msgstr "%s: ïÛÉÂËÁ ÚÁÐÉÓÉ %s\n"
+msgid "Failed opening connection to the audit subsystem: %m"
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÓÏÅÄÉÎÅÎÉÅ Ó ÐÏÄÓÉÓÔÅÍÏÊ ÁÕÄÉÔÁ: %m"
 
-#: timezone/zic.c:1760
-msgid "can't determine time zone abbreviation to use just after until time"
+#: nscd/selinux.c:172
+msgid "Failed to set keep-capabilities"
 msgstr ""
 
-#: timezone/zic.c:1803
-msgid "too many transitions?!"
-msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÐÅÒÅÈÏÄÏ×?!"
+#: nscd/selinux.c:173 nscd/selinux.c:232
+#, c-format
+msgid "prctl(KEEPCAPS) failed"
+msgstr "prctl(KEEPCAPS) ÎÅÕÓÐÅÛÎÁ"
 
-#: timezone/zic.c:1822
-msgid "internal error - addtype called with bad isdst"
-msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ -- addtype ×ÙÚ×ÁÎÁ Ó ÎÅÐÒÁ×ÉÌØÎÙÍ isdst"
+#: nscd/selinux.c:187
+msgid "Failed to initialize drop of capabilities"
+msgstr ""
 
-#: timezone/zic.c:1826
-msgid "internal error - addtype called with bad ttisstd"
-msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ -- addtype ×ÙÚ×ÁÎÁ Ó ÎÅÐÒÁ×ÉÌØÎÙÍ ttisstd"
+#: nscd/selinux.c:188
+#, c-format
+msgid "cap_init failed"
+msgstr "cap_init ÎÅÕÓÐÅÛÎÁ"
 
-#: timezone/zic.c:1830
-msgid "internal error - addtype called with bad ttisgmt"
-msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ -- addtype ×ÙÚ×ÁÎÁ Ó ÎÅÐÒÁ×ÉÌØÎÙÍ ttisgmt"
+#: nscd/selinux.c:205
+msgid "Failed to drop capabilities\n"
+msgstr ""
 
-#: timezone/zic.c:1849
-msgid "too many local time types"
-msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÔÉÐÏ× ÍÅÓÔÎÏÇÏ ×ÒÅÍÅÎÉ"
+#: nscd/selinux.c:206 nscd/selinux.c:223
+#, c-format
+msgid "cap_set_proc failed"
+msgstr "cap_set_proc ÎÅÕÓÐÅÛÎÁ"
 
-#: timezone/zic.c:1877
-msgid "too many leap seconds"
-msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ×ÉÓÏËÏÓÎÙÈ ÓÅËÕÎÄ"
+#: nscd/selinux.c:222
+msgid "Failed to drop capabilities"
+msgstr ""
 
-#: timezone/zic.c:1883
-msgid "repeated leap second moment"
-msgstr "ÐÏ×ÔÏÒÑÀÝÉÊÓÑ ÍÏÍÅÎÔ ×ÉÓÏËÏÓÎÏÊ ÓÅËÕÎÄÙ"
+#: nscd/selinux.c:231
+msgid "Failed to unset keep-capabilities"
+msgstr ""
 
-#: timezone/zic.c:1935
-msgid "Wild result from command execution"
-msgstr "îÅÁÄÅË×ÁÔÎÙÊ ÒÅÚÕÌØÔÁÔ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄÙ"
+#: nscd/selinux.c:247
+msgid "Failed to determine if kernel supports SELinux"
+msgstr "îÅ ÕÄÁÌÏÓØ ÏÐÒÅÄÅÌÉÔØ, ÐÏÄÄÅÒÖÉ×ÁÅÔ ÌÉ ÑÄÒÏ SELinux"
 
-#: timezone/zic.c:1936
+#: nscd/selinux.c:262
 #, c-format
-msgid "%s: command was '%s', result was %d\n"
-msgstr "%s: ËÏÍÁÎÄÁ ÂÙÌÁ '%s', ÒÅÚÕÌØÔÁÔ ÂÙÌ %d\n"
+msgid "Failed to start AVC thread"
+msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ ÔÒÅÄ AVC"
 
-#: timezone/zic.c:2031
-msgid "Odd number of quotation marks"
-msgstr "îÅÞÅÔÎÏÅ ÞÉÓÌÏ ËÁ×ÙÞÅË"
+#: nscd/selinux.c:284
+#, c-format
+msgid "Failed to create AVC lock"
+msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÂÌÏËÉÒÏ×ËÕ"
 
-#: timezone/zic.c:2051 timezone/zic.c:2070
-msgid "time overflow"
-msgstr "ÐÅÒÅÐÏÌÎÅÎÉÅ ×ÒÅÍÅÎÉ"
+#: nscd/selinux.c:324
+#, c-format
+msgid "Failed to start AVC"
+msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ AVC"
 
-#: timezone/zic.c:2117
-msgid "use of 2/29 in non leap-year"
-msgstr "ÉÓÐÏÌØÚÏ×ÁÎÉÅ 29 ÆÅ×ÒÁÌÑ × ÎÅ×ÉÓÏËÏÓÎÏÍ ÇÏÄÕ"
+#: nscd/selinux.c:326
+msgid "Access Vector Cache (AVC) started"
+msgstr "Access Vector Cache (AVC) ÚÁÐÕÝÅÎ"
 
-#: timezone/zic.c:2151
-msgid "no day in month matches rule"
-msgstr "ÎÉ ÏÄÉΠÄÅÎØ × ÍÅÓÑÃÅ ÎÅ ÐÏÄÈÏÄÉÔ ÐÏÄ ÐÒÁ×ÉÌÏ"
+#: nscd/selinux.c:347
+msgid "Error getting context of socket peer"
+msgstr "ïÛÉÂËÁ ÐÏÌÕÞÅÎÉÑ ËÏÎÔÅËÓÔÁ ÄÒÕÇÏÊ ÓÔÏÒÏÎÙ ÓÏËÅÔÁ"
 
-#: timezone/zic.c:2175
-msgid "too many, or too long, time zone abbreviations"
-msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÓÏËÒÁÝÅÎÉÊ ÞÁÓÏ×ÙÈ ÐÏÑÓÏ× ÉÌÉ ÏÎÉ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÅ"
+#: nscd/selinux.c:352
+msgid "Error getting context of nscd"
+msgstr "ïÛÉÂËÁ ÐÏÌÕÞÅÎÉÑ ËÏÎÔÅËÓÔÁ nscd"
 
-#: timezone/zic.c:2216
-#, c-format
-msgid "%s: Can't create directory %s: %s\n"
-msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ %s: %s\n"
+#: nscd/selinux.c:358
+msgid "Error getting sid from context"
+msgstr "ïÛÉÂËÁ ÐÏÌÕÞÅÎÉÑ sid ÉÚ ËÏÎÔÅËÓÔÁ"
 
-#: timezone/zic.c:2238
+#: nscd/selinux.c:390
 #, c-format
-msgid "%s: %d did not sign extend correctly\n"
-msgstr "%s: %d ÎÅ ÓÏÈÒÁÎÉÌÏ ÚÎÁË ÐÒÉ ÒÁÓÛÉÒÅÎÉÉ\n"
+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 ""
+"\n"
+"óÔÁÔÉÓÔÉËÁ AVC SELinux:\n"
+"\n"
+"%15u  ÐÏÉÓËÏ× ÚÁÐÉÓÅÊ\n"
+"%15u  ÐÏÐÁÄÁÎÉÊ\n"
+"%15u  ÐÒÏÍÁÈÏ×\n"
+"%15u  ÓÂÒÏÓÏ× ÚÁÐÉÓÅÊ\n"
+"%15u  ÐÏÉÓËÏ× CAV\n"
+"%15u  ÐÏÐÁÄÁÎÉÊ CAV\n"
+"%15u  ÐÒÏ×ÅÒÏË CAV\n"
+"%15u  ÐÒÏÍÁÈÏ× CAV\n"
+
+#: nss/getent.c:52
+msgid "database [key ...]"
+msgstr "ÂÁÚÁ-ÄÁÎÎÙÈ [ËÌÀÞ ...]"
 
-#: posix/../sysdeps/generic/wordexp.c:1797
-msgid "parameter null or not set"
-msgstr "ÐÁÒÁÍÅÔÒ ÐÕÓÔ ÉÌÉ ÎÅ ÚÁÄÁÎ"
+#: nss/getent.c:57
+msgid "Service configuration to be used"
+msgstr "éÓÐÏÌØÚÕÅÍÁÑ ËÏÎÆÉÇÕÒÁÃÉÑ ÓÌÕÖÂÙ"
 
-#: posix/../sysdeps/posix/gai_strerror.c:31
-msgid "Address family for hostname not supported"
-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 ""
+"ðÏÌÕÞÁÅÔ ÚÁÐÉÓÉ ÉÚ ÁÄÍÉÎÉÓÔÒÁÔÉ×ÎÏÊ ÂÁÚÙ ÄÁÎÎÙÈ.\véÎÓÔÒÕËÃÉÉ ÐÏ ÓÏÏÂÝÅÎÉÀ Ï ÏÛÉÂËÁÈ ÓÍÏÔÒÉÔÅ ÎÁ:\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
 
-#: posix/../sysdeps/posix/gai_strerror.c:32
-msgid "Temporary failure in name resolution"
-msgstr "÷ÒÅÍÅÎÎÙÊ ÓÂÏÊ × ÒÁÚÒÅÛÅÎÉÉ ÉÍÅÎ"
+#: nss/getent.c:145 nss/getent.c:394
+#, c-format
+msgid "Enumeration not supported on %s\n"
+msgstr "ðÅÒÅÞÉÓÌÅÎÉÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ %s\n"
 
-#: posix/../sysdeps/posix/gai_strerror.c:33
-msgid "Bad value for ai_flags"
-msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÚÎÁÞÅÎÉÅ ÄÌÑ ai_flags"
+#: nss/getent.c:782
+#, c-format
+msgid "Unknown database name"
+msgstr "îÅÉÚ×ÅÓÔÎÏÅ ÉÍÑ ÂÁÚÙ ÄÁÎÎÙÈ"
 
-#: posix/../sysdeps/posix/gai_strerror.c:34
-msgid "Non-recoverable failure in name resolution"
-msgstr "îÅÉÓÐÒÁ×ÉÍÁÑ ÏÛÉÂËÁ × ÒÁÚÒÅÛÅÎÉÉ ÉÍÅÎ"
+#: nss/getent.c:808
+msgid "Supported databases:\n"
+msgstr "ðÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÂÁÚÙ ÄÁÎÎÙÈ:\n"
 
-#: posix/../sysdeps/posix/gai_strerror.c:35
-msgid "ai_family not supported"
-msgstr "ai_family ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
+#: nss/getent.c:868
+#, c-format
+msgid "Unknown database: %s\n"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÂÁÚÁ ÄÁÎÎÙÈ: %s\n"
 
-#: posix/../sysdeps/posix/gai_strerror.c:36
-msgid "Memory allocation failure"
-msgstr "ïÛÉÂËÁ ×ÙÄÅÌÅÎÉÑ ÐÁÍÑÔÉ"
+#: nss/makedb.c:60
+msgid "Convert key to lower case"
+msgstr "ðÒÅÏÂÒÁÚÏ×ÁÔØ ËÌÀÞ × ÎÉÖÎÉÊ ÒÅÇÉÓÔÒ"
 
-#: posix/../sysdeps/posix/gai_strerror.c:37
-msgid "No address associated with hostname"
-msgstr "ó ÉÍÅÎÅÍ ÈÏÓÔÁ ÎÅ Ó×ÑÚÁÎÏ ÎÉ ÏÄÎÏÇÏ ÁÄÒÅÓÁ"
+#: nss/makedb.c:63
+msgid "Do not print messages while building database"
+msgstr "îÅ ÐÅÞÁÔÁÔØ ÓÏÏÂÝÅÎÉÊ ÐÒÉ ÐÏÓÔÒÏÅÎÉÉ ÂÁÚÙ ÄÁÎÎÙÈ"
 
-#: posix/../sysdeps/posix/gai_strerror.c:38
-msgid "Name or service not known"
-msgstr "éÍÑ ÉÌÉ ÓÌÕÖÂÁ ÎÅ ÉÚ×ÅÓÔÎÙ"
+#: nss/makedb.c:65
+msgid "Print content of database file, one entry a line"
+msgstr "îÁÐÅÞÁÔÁÔØ ÓÏÄÅÒÖÉÍÏÅ ÆÁÊÌÁ ÂÁÚÙ ÄÁÎÎÙÈ, ÐÏ ÏÄÎÏÊ ÚÁÐÉÓÉ × ÓÔÒÏËÕ"
 
-#: posix/../sysdeps/posix/gai_strerror.c:39
-msgid "Servname not supported for ai_socktype"
-msgstr "Servname ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ai_socktype"
+#: nss/makedb.c:70
+msgid "Create simple DB database from textual input."
+msgstr "ðÏÓÔÒÏÉÔØ ÐÒÏÓÔÕÀ ÂÁÚÕ ÄÁÎÎÙÈ DB ÉÚ ÔÅËÓÔÏ×ÏÇÏ ××ÏÄÁ."
 
-#: posix/../sysdeps/posix/gai_strerror.c:40
-msgid "ai_socktype not supported"
-msgstr "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:41
-msgid "System error"
-msgstr "óÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ"
+#: nss/makedb.c:142
+#, c-format
+msgid "No usable database library found."
+msgstr "îÅ ÎÁÊÄÅÎÏ ÐÏÄÈÏÄÑÝÅÊ ÂÉÂÌÉÏÔÅËÉ."
 
-#: posix/../sysdeps/posix/gai_strerror.c:42
-msgid "Processing request in progress"
-msgstr "ïÂÒÁÂÏÔËÁ ÚÁÐÒÏÓÁ ÐÒÏÄÏÌÖÁÅÔÓÑ"
+#: nss/makedb.c:149
+#, c-format
+msgid "cannot open database file `%s': %s"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ ÂÁÚÙ ÄÁÎÎÙÈ `%s': %s"
 
-#: posix/../sysdeps/posix/gai_strerror.c:43
-msgid "Request canceled"
-msgstr "úÁÐÒÏÓ ÏÔÍÅÎÅÎ"
+#: nss/makedb.c:151
+msgid "incorrectly formatted file"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÏ ÏÔÆÏÒÍÁÔÉÒÏ×ÁÎÎÙÊ ÆÁÊÌ"
 
-#: posix/../sysdeps/posix/gai_strerror.c:44
-msgid "Request not canceled"
-msgstr "úÁÐÒÏÓ ÎÅ ÏÔÍÅÎÅÎ"
+#: nss/makedb.c:331
+msgid "duplicate key"
+msgstr "ÄÕÂÌÉÒÏ×ÁÎÎÙÊ ËÌÀÞ"
 
-#: posix/../sysdeps/posix/gai_strerror.c:45
-msgid "All requests done"
-msgstr "÷ÓÅ ÚÁÐÒÏÓÙ ×ÙÐÏÌÎÅÎÙ"
+#: nss/makedb.c:337
+#, c-format
+msgid "while writing database file"
+msgstr "ÐÒÉ ÚÁÐÉÓÉ ÆÁÊÌÁ ÂÁÚÙ ÄÁÎÎÙÈ"
 
-#: posix/../sysdeps/posix/gai_strerror.c:46
-msgid "Interrupted by a signal"
-msgstr "ðÒÅÒ×ÁÎÏ ÐÏ ÓÉÇÎÁÌÕ"
+#: nss/makedb.c:348
+#, c-format
+msgid "problems while reading `%s'"
+msgstr "ÐÒÏÂÌÅÍÙ ÐÒÉ ÞÔÅÎÉÉ `%s'"
+
+#: nss/makedb.c:368 nss/makedb.c:385
+#, c-format
+msgid "while reading database"
+msgstr "ÐÒÉ ÞÔÅÎÉÉ ÂÁÚÙ ÄÁÎÎÙÈ"
 
-#: posix/getconf.c:892
+#: posix/getconf.c:940
 #, c-format
 msgid "Usage: %s [-v specification] variable_name [pathname]\n"
 msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [-v ÓÐÅÃÉÆÉËÁÃÉÑ] ÉÍÑ-ÐÅÒÅÍÅÎÎÏÊ [ÐÕÔØ]\n"
 
-#: posix/getconf.c:950
+#: posix/getconf.c:943
+#, c-format
+msgid "       %s -a [pathname]\n"
+msgstr "       %s -a [ÐÕÔØ]\n"
+
+#: posix/getconf.c:1062
 #, c-format
 msgid "unknown specification \"%s\""
 msgstr "ÎÅÉÚ×ÅÓÔÎÁÑ ÓÐÅÃÉÆÉËÁÃÉÑ \"%s\""
 
-#: posix/getconf.c:979 posix/getconf.c:995
+#: posix/getconf.c:1090
+#, c-format
+msgid "Couldn't execute %s"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ %s"
+
+#: posix/getconf.c:1130 posix/getconf.c:1146
 msgid "undefined"
 msgstr "ÎÅ ÏÐÒÅÄÅÌÅÎÏ"
 
-#: posix/getconf.c:1017
+#: posix/getconf.c:1168
 #, c-format
 msgid "Unrecognized variable `%s'"
 msgstr "îÅÒÁÓÐÏÚÎÁÎÎÁÑ ÐÅÒÅÍÅÎÎÁÑ `%s'"
 
-#: posix/getopt.c:692 posix/getopt.c:711
+#: posix/getopt.c:571 posix/getopt.c:587
 #, c-format
 msgid "%s: option `%s' is ambiguous\n"
 msgstr "%s: ËÌÀÞ `%s' ÎÅÏÄÎÏÚÎÁÞÅÎ\n"
 
-#: posix/getopt.c:744 posix/getopt.c:748
+#: posix/getopt.c:620 posix/getopt.c:624
 #, c-format
 msgid "%s: option `--%s' doesn't allow an argument\n"
 msgstr "%s: ËÌÀÞ `--%s' ÎÅÌØÚÑ ÉÓÐÏÌØÚÏ×ÁÔØ Ó ÁÒÇÕÍÅÎÔÏÍ\n"
 
-#: posix/getopt.c:757 posix/getopt.c:762
+#: 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"
 
-#: posix/getopt.c:807 posix/getopt.c:829 posix/getopt.c:1159
-#: posix/getopt.c:1181
+#: 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"
 
-#: posix/getopt.c:867 posix/getopt.c:870
+#: posix/getopt.c:738 posix/getopt.c:741
 #, c-format
 msgid "%s: unrecognized option `--%s'\n"
 msgstr "%s: ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ËÌÀÞ `--%s'\n"
 
-#: posix/getopt.c:878 posix/getopt.c:881
+#: posix/getopt.c:749 posix/getopt.c:752
 #, c-format
 msgid "%s: unrecognized option `%c%s'\n"
 msgstr "%s: ÎÅÒÁÓÐÏÚÎÁÎÎÙÊ ËÌÀÞ `%c%s'\n"
 
-#: posix/getopt.c:936 posix/getopt.c:939
+#: posix/getopt.c:804 posix/getopt.c:807
 #, c-format
 msgid "%s: illegal option -- %c\n"
 msgstr "%s: ÎÅÄÏÐÕÓÔÉÍÙÊ ËÌÀÞ -- %c\n"
 
-#: posix/getopt.c:945 posix/getopt.c:948
+#: posix/getopt.c:813 posix/getopt.c:816
 #, c-format
 msgid "%s: invalid option -- %c\n"
 msgstr "%s: ÎÅ×ÅÒÎÙÊ ËÌÀÞ -- %c\n"
 
-#: posix/getopt.c:1003 posix/getopt.c:1022 posix/getopt.c:1234
-#: posix/getopt.c:1255
+#: 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"
 
-#: posix/getopt.c:1074 posix/getopt.c:1093
+#: posix/getopt.c:937 posix/getopt.c:953
 #, c-format
 msgid "%s: option `-W %s' is ambiguous\n"
 msgstr "%s: ËÌÀÞ `-W %s' ÎÅÏÄÎÏÚÎÁÞÅÎ\n"
 
-#: posix/getopt.c:1117 posix/getopt.c:1138
+#: 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"
 
-#: posix/regcomp.c:150
+#: posix/regcomp.c:135
 msgid "No match"
 msgstr "îÅÔ ÓÏ×ÐÁÄÅÎÉÑ"
 
-#: posix/regcomp.c:153
+#: posix/regcomp.c:138
 msgid "Invalid regular expression"
 msgstr "îÅ×ÅÒÎÏÅ ÒÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ"
 
-#: posix/regcomp.c:156
+#: posix/regcomp.c:141
 msgid "Invalid collation character"
 msgstr "îÅ×ÅÒÎÙÊ ÚÎÁË ÓÏÒÔÉÒÏ×ËÉ"
 
-#: posix/regcomp.c:159
+#: posix/regcomp.c:144
 msgid "Invalid character class name"
 msgstr "îÅ×ÅÒÎÏÅ ÉÍÑ ËÌÁÓÓÁ ÚÎÁËÏ×"
 
-#: posix/regcomp.c:162
+#: posix/regcomp.c:147
 msgid "Trailing backslash"
 msgstr "ïÂÒÁÔÎÁÑ ËÏÓÁÑ ÞÅÒÔÁ × ËÏÎÃÅ"
 
-#: posix/regcomp.c:165
+#: posix/regcomp.c:150
 msgid "Invalid back reference"
 msgstr "îÅ×ÅÒÎÁÑ ÓÓÙÌËÁ ÎÁÚÁÄ"
 
-#: posix/regcomp.c:168
+#: posix/regcomp.c:153
 msgid "Unmatched [ or [^"
 msgstr "îÅÐÁÒÎÁÑ [ ÉÌÉ [^"
 
-#: posix/regcomp.c:171
+#: posix/regcomp.c:156
 msgid "Unmatched ( or \\("
 msgstr "îÅÐÁÒÎÁÑ ( ÉÌÉ \\("
 
-#: posix/regcomp.c:174
+#: posix/regcomp.c:159
 msgid "Unmatched \\{"
 msgstr "îÅÐÁÒÎÁÑ \\{"
 
-#: posix/regcomp.c:177
+#: posix/regcomp.c:162
 msgid "Invalid content of \\{\\}"
 msgstr "îÅ×ÅÒÎÏÅ ÓÏÄÅÒÖÉÍÏÅ × \\{\\}"
 
-#: posix/regcomp.c:180
+#: posix/regcomp.c:165
 msgid "Invalid range end"
 msgstr "îÅ×ÅÒÎÙÊ ËÏÎÅàÄÉÁÐÁÚÏÎÁ"
 
-#: posix/regcomp.c:183
+#: posix/regcomp.c:168
 msgid "Memory exhausted"
 msgstr "ðÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ"
 
-#: posix/regcomp.c:186
+#: posix/regcomp.c:171
 msgid "Invalid preceding regular expression"
 msgstr "îÅ×ÅÒÎÏÅ ÐÒÅÄÛÅÓÔ×ÕÀÝÅÅ ÒÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ"
 
-#: posix/regcomp.c:189
+#: posix/regcomp.c:174
 msgid "Premature end of regular expression"
 msgstr "ðÒÅÖÄÅ×ÒÅÍÅÎÎÙÊ ËÏÎÅàÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ"
 
-#: posix/regcomp.c:192
+#: posix/regcomp.c:177
 msgid "Regular expression too big"
 msgstr "òÅÇÕÌÑÒÎÏÅ ×ÙÒÁÖÅÎÉÅ ÓÌÉÛËÏÍ ×ÅÌÉËÏ"
 
-#: posix/regcomp.c:195
+#: posix/regcomp.c:180
 msgid "Unmatched ) or \\)"
 msgstr "îÅÐÁÒÎÁÑ ) ÉÌÉ \\)"
 
-#: posix/regcomp.c:661
+#: posix/regcomp.c:660
 msgid "No previous regular expression"
 msgstr "îÅÔ ÐÒÅÄÛÅÓÔ×ÕÀÝÅÇÏ ÒÅÇÕÌÑÒÎÏÇÏ ×ÙÒÁÖÅÎÉÑ"
 
-#: argp/argp-help.c:224
-#, c-format
-msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
-msgstr "%.*s: ÐÁÒÁÍÅÔÒ ARGP_HELP_FMT ÔÒÅÂÕÅÔ ÚÎÁÞÅÎÉÅ"
-
-#: argp/argp-help.c:233
-#, c-format
-msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
-msgstr "%.*s: ÎÅÉÚ×ÅÓÔÎÙÊ ÐÁÒÁÍÅÔÒ ARGP_HELP_FMT"
-
-#: argp/argp-help.c:245
-#, c-format
-msgid "Garbage in ARGP_HELP_FMT: %s"
-msgstr "íÕÓÏÒ × ARGP_HELP_FMT: %s"
-
-#: argp/argp-help.c:1205
-msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options."
-msgstr "ïÂÑÚÁÔÅÌØÎÙÅ ÉÌÉ ÎÅÏÂÑÚÁÔÅÌØÎÙÅ ÁÒÇÕÍÅÎÔÙ ÄÌÑ ÄÌÉÎÎÙÈ ËÌÀÞÅÊ ÔÁËÖÅ Ñ×ÌÑÀÔÓÑ ÏÂÑÚÁÔÅÌØÎÙÍÉ ÉÌÉ ÎÅÏÂÑÚÁÔÅÌØÎÙÍÉ ÄÌÑ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ËÏÒÏÔËÉÈ ËÌÀÞÅÊ."
-
-#: argp/argp-help.c:1592
-msgid "Usage:"
-msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ:"
-
-#: argp/argp-help.c:1596
-msgid "  or: "
-msgstr "  ÉÌÉ: "
-
-#: argp/argp-help.c:1608
-msgid " [OPTION...]"
-msgstr " [ëìàþ...]"
-
-#: argp/argp-help.c:1635
-#, c-format
-msgid "Try `%s --help' or `%s --usage' for more information.\n"
-msgstr "ðÏÐÒÏÂÕÊÔÅ `%s --help' ÉÌÉ `%s --usage' ÄÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ ÐÏÄÒÏÂÎÏÇÏ ÏÐÉÓÁÎÉÑ.\n"
-
-#: argp/argp-help.c:1663
-#, c-format
-msgid "Report bugs to %s.\n"
-msgstr "óÏÏÂÝÅÎÉÑ Ï ÏÛÉÂËÁÈ ÏÔÐÒÁ×ÌÑÊÔÅ ÐÏ ÁÄÒÅÓÕ %s.\n"
-
-#: argp/argp-parse.c:115
-msgid "Give this help list"
-msgstr "÷ÙÄÁÅÔ ÜÔÏÔ ÓÐÒÁ×ÏÞÎÙÊ ÓÐÉÓÏË"
-
-#: argp/argp-parse.c:116
-msgid "Give a short usage message"
-msgstr "÷ÙÄÁÅÔ ËÒÁÔËÕÀ ÉÎÆÏÒÍÁÃÉÀ Ï ÉÓÐÏÌØÚÏ×ÁÎÉÉ"
-
-#: argp/argp-parse.c:117
-msgid "Set the program name"
-msgstr "õÓÔÁÎÁ×ÌÉ×ÁÅÔ ÉÍÑ ÐÒÏÇÒÁÍÍÙ"
-
-#: argp/argp-parse.c:119
-msgid "Hang for SECS seconds (default 3600)"
-msgstr "÷ÉÓÉÔ ÕËÁÚÁÎÎÏÅ ÞÉÓÌÏ ÓÅËÕÎÄ (ÐÏ ÕÍÏÌÞÁÎÉÀ 3600)"
-
-#: argp/argp-parse.c:180
-msgid "Print program version"
-msgstr "ðÅÞÁÔÁÅÔ ×ÅÒÓÉÀ ÐÒÏÇÒÁÍÍÙ"
-
-#: argp/argp-parse.c:196
-msgid "(PROGRAM ERROR) No version known!?"
-msgstr "(ïûéâëá ðòïçòáííù) ÷ÅÒÓÉÑ ÎÅÉÚ×ÅÓÔÎÁ!?"
-
-#: argp/argp-parse.c:672
-#, c-format
-msgid "%s: Too many arguments\n"
-msgstr "%s: óÌÉÛËÏÍ ÍÎÏÇÏ ÁÒÇÕÍÅÎÔÏ×\n"
-
-#: argp/argp-parse.c:813
-msgid "(PROGRAM ERROR) Option should have been recognized!?"
-msgstr "(ïûéâëá ðòïçòáííù) ëÌÀÞ ÄÏÌÖÅΠÂÙÔØ ÒÁÓÐÏÚÎÁÎ!?"
+#: posix/wordexp.c:1798
+msgid "parameter null or not set"
+msgstr "ÐÁÒÁÍÅÔÒ ÐÕÓÔ ÉÌÉ ÎÅ ÚÁÄÁÎ"
 
 #: resolv/herror.c:68
 msgid "Resolver Error 0 (no error)"
@@ -3729,199 +4465,71 @@ msgstr "
 msgid "No address associated with name"
 msgstr "ó ÉÍÅÎÅÍ ÎÅ Ó×ÑÚÁÎÏ ÎÉ ÏÄÎÏÇÏ ÁÄÒÅÓÁ"
 
-#: resolv/herror.c:108
+#: resolv/herror.c:107
 msgid "Resolver internal error"
 msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ ÒÅÓÏÌ×ÅÒÁ"
 
-#: resolv/herror.c:111
-msgid "Unknown resolver error"
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ ÒÅÓÏÌ×ÅÒÁ"
-
-#: resolv/res_hconf.c:147
-#, c-format
-msgid "%s: line %d: expected service, found `%s'\n"
-msgstr "%s: ÓÔÒÏËÁ %d: ÏÖÉÄÁÅÔÓÑ ÓÌÕÖÂÁ, ÎÁÊÄÅÎÏ `%s'\n"
-
-#: resolv/res_hconf.c:165
-#, c-format
-msgid "%s: line %d: cannot specify more than %d services"
-msgstr "%s: ÓÔÒÏËÁ %d: ÎÅÌØÚÑ ÚÁÄÁÔØ ÂÏÌÅÅ ÞÅÍ %d ÓÌÕÖÂ"
-
-#: resolv/res_hconf.c:191
-#, c-format
-msgid "%s: line %d: list delimiter not followed by keyword"
-msgstr "%s: ÓÔÒÏËÁ %d: ÐÏÓÌÅ ÒÁÚÄÅÌÉÔÅÌÑ ÓÐÉÓËÁ ÎÅ ÓÔÏÉÔ ËÌÀÞÅ×ÏÅ ÓÌÏ×Ï"
-
-#: resolv/res_hconf.c:231
-#, c-format
-msgid "%s: line %d: cannot specify more than %d trim domains"
-msgstr ""
-
-#: resolv/res_hconf.c:256
-#, c-format
-msgid "%s: line %d: list delimiter not followed by domain"
-msgstr "%s: ÓÔÒÏËÁ %d: ÐÏÓÌÅ ÒÁÚÄÅÌÉÔÅÌÑ ÓÐÉÓËÁ ÎÅ ÓÔÏÉÔ ÄÏÍÅÎ"
-
-#: resolv/res_hconf.c:319
-#, c-format
-msgid "%s: line %d: expected `on' or `off', found `%s'\n"
-msgstr "%s: ÓÔÒÏËÁ %d: ÏÖÉÄÁÅÔÓÑ `on' ÉÌÉ `off', ÎÁÊÄÅÎÏ `%s'\n"
-
-#: resolv/res_hconf.c:366
-#, c-format
-msgid "%s: line %d: bad command `%s'\n"
-msgstr "%s: ÓÔÒÏËÁ %d: ÎÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÁ `%s'\n"
-
-#: resolv/res_hconf.c:395
-#, c-format
-msgid "%s: line %d: ignoring trailing garbage `%s'\n"
-msgstr "%s: ÓÔÒÏËÁ %d: ÉÇÎÏÒÉÒÏ×ÁΠÍÕÓÏÒ × ËÏÎÃÅ `%s'\n"
-
-#: nss/getent.c:51
-msgid "database [key ...]"
-msgstr "ÂÁÚÁ-ÄÁÎÎÙÈ [ËÌÀÞ ...]"
-
-#: nss/getent.c:56
-msgid "Service configuration to be used"
-msgstr "éÓÐÏÌØÚÕÅÍÁÑ ËÏÎÆÉÇÕÒÁÃÉÑ ÓÌÕÖÂÙ"
-
-#: nss/getent.c:136 nss/getent.c:375
-#, c-format
-msgid "Enumeration not supported on %s\n"
-msgstr "ðÅÒÅÞÉÓÌÅÎÉÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ %s\n"
-
-#: nss/getent.c:800
-msgid "getent - get entries from administrative database."
-msgstr "getent -- ÐÏÌÕÞÁÅÔ ÚÁÐÉÓÉ ÉÚ ÁÄÍÉÎÉÓÔÒÁÔÉ×ÎÏÊ ÂÁÚÙ ÄÁÎÎÙÈ."
-
-#: nss/getent.c:801
-msgid "Supported databases:"
-msgstr "ðÏÄÄÅÒÖÉ×ÁÅÍÙÅ ÂÁÚÙ ÄÁÎÎÙÈ:"
-
-#: nss/getent.c:858 nscd/nscd.c:131 nscd/nscd_nischeck.c:64
-msgid "wrong number of arguments"
-msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÞÉÓÌÏ ÁÒÇÕÍÅÎÔÏ×"
-
-#: nss/getent.c:868
-#, c-format
-msgid "Unknown database: %s\n"
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÂÁÚÁ ÄÁÎÎÙÈ: %s\n"
-
-#: debug/pcprofiledump.c:52
-msgid "Don't buffer output"
-msgstr "îÅ ÂÕÆÅÒÉÒÏ×ÁÔØ ×Ù×ÏÄ"
-
-#: debug/pcprofiledump.c:57
-msgid "Dump information generated by PC profiling."
-msgstr "óÂÒÁÓÙ×ÁÅÔ ÉÎÆÏÒÍÁÃÉÀ, ÓÏÂÒÁÎÎÕÀ ÐÒÉ ÐÒÏÆÉÌÉÒÏ×ÁÎÉÉ PC."
-
-#: debug/pcprofiledump.c:60
-msgid "[FILE]"
-msgstr "[æáêì]"
-
-#: debug/pcprofiledump.c:100
-msgid "cannot open input file"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ×ÈÏÄÎÏÊ ÆÁÊÌ"
-
-#: debug/pcprofiledump.c:106
-msgid "cannot read header"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË"
-
-#: debug/pcprofiledump.c:170
-msgid "invalid pointer size"
-msgstr "ÎÅ×ÅÒÎÙÊ ÒÁÚÍÅÒ ÕËÁÚÁÔÅÌÑ"
-
-#: inet/rcmd.c:163 inet/rcmd.c:166
-msgid "rcmd: Cannot allocate memory\n"
-msgstr "rcmd: îÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ\n"
-
-#: inet/rcmd.c:185 inet/rcmd.c:188
-msgid "rcmd: socket: All ports in use\n"
-msgstr "rcmd: socket: ÷ÓÅ ÐÏÒÔÙ ÉÓÐÏÌØÚÕÀÔÓÑ\n"
-
-#: inet/rcmd.c:222
-#, c-format
-msgid "connect to address %s: "
-msgstr "ÓÏÅÄÉÎÅÎÉÅ Ó ÁÄÒÅÓÏÍ %s: "
-
-#: inet/rcmd.c:240
-#, c-format
-msgid "Trying %s...\n"
-msgstr "ðÏÐÙÔËÁ %s...\n"
-
-#: inet/rcmd.c:289
-#, c-format
-msgid "rcmd: write (setting up stderr): %m\n"
-msgstr "rcmd: write (ÎÁÓÔÒÏÊËÁ stderr): %m\n"
-
-#: inet/rcmd.c:310
-#, c-format
-msgid "rcmd: poll (setting up stderr): %m\n"
-msgstr "rcmd: poll (ÎÁÓÔÒÏÊËÁ stderr): %m\n"
-
-#: inet/rcmd.c:313
-msgid "poll: protocol failure in circuit setup\n"
-msgstr "poll: ÓÂÏÊ ÐÒÏÔÏËÏÌÁ ÐÒÉ ÎÁÓÔÒÏÊËÅ ÃÅÐÉ\n"
-
-#: inet/rcmd.c:358
-msgid "socket: protocol failure in circuit setup\n"
-msgstr "socket: ÓÂÏÊ ÐÒÏÔÏËÏÌÁ ÐÒÉ ÎÁÓÔÒÏÊËÅ ÃÅÐÉ\n"
-
-#: inet/rcmd.c:387
-#, fuzzy, c-format
-msgid "rcmd: %s: short read"
-msgstr "rcmd: %s: ÎÅÐÏÌÎÏÅ ÞÔÅÎÉÅ"
+#: resolv/herror.c:110
+msgid "Unknown resolver error"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ ÒÅÓÏÌ×ÅÒÁ"
 
-#: inet/rcmd.c:549
-msgid "lstat failed"
-msgstr "lstat ÎÅÕÓÐÅÛÎÁ"
+#: resolv/res_hconf.c:124
+#, c-format
+msgid "%s: line %d: cannot specify more than %d trim domains"
+msgstr ""
 
-#: inet/rcmd.c:551
-msgid "not regular file"
-msgstr "ÎÅ ÏÂÙÞÎÙÊ ÆÁÊÌ"
+#: resolv/res_hconf.c:145
+#, c-format
+msgid "%s: line %d: list delimiter not followed by domain"
+msgstr "%s: ÓÔÒÏËÁ %d: ÐÏÓÌÅ ÒÁÚÄÅÌÉÔÅÌÑ ÓÐÉÓËÁ ÎÅ ÓÔÏÉÔ ÄÏÍÅÎ"
 
-#: inet/rcmd.c:556
-msgid "cannot open"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ"
+#: 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"
 
-#: inet/rcmd.c:558
-msgid "fstat failed"
-msgstr "fstat ÎÅÕÓÐÅÛÎÁ"
+#: resolv/res_hconf.c:247
+#, c-format
+msgid "%s: line %d: bad command `%s'\n"
+msgstr "%s: ÓÔÒÏËÁ %d: ÎÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÁ `%s'\n"
 
-#: inet/rcmd.c:560
-msgid "bad owner"
-msgstr "ÎÅÐÒÁ×ÉÌØÎÙÊ ×ÌÁÄÅÌÅÃ"
+#: resolv/res_hconf.c:282
+#, c-format
+msgid "%s: line %d: ignoring trailing garbage `%s'\n"
+msgstr "%s: ÓÔÒÏËÁ %d: ÉÇÎÏÒÉÒÏ×ÁΠÍÕÓÏÒ × ËÏÎÃÅ `%s'\n"
 
-#: inet/rcmd.c:562
-msgid "writeable by other than owner"
-msgstr "ÍÏÖÅÔ ÚÁÐÉÓÙ×ÁÔØÓÑ ÎÅ ×ÌÁÄÅÌØÃÅÍ"
+#: stdio-common/psignal.c:51
+#, c-format
+msgid "%s%sUnknown signal %d\n"
+msgstr "%s%sîÅÉÚ×ÅÓÔÎÙÊ ÓÉÇÎÁÌ %d\n"
 
-#: inet/rcmd.c:564
-msgid "hard linked somewhere"
-msgstr "ÉÍÅÅÔÓÑ ÖÅÓÔËÁÑ ÓÓÙÌËÁ"
+#: stdio-common/psignal.c:52
+msgid "Unknown signal"
+msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÓÉÇÎÁÌ"
 
-#: inet/ruserpass.c:170 inet/ruserpass.c:193
-msgid "out of memory"
-msgstr "ÎÅÄÏÓÔÁÔÏÞÎÏ ÐÁÍÑÔÉ"
+#: string/_strerror.c:45 sysdeps/mach/_strerror.c:87
+msgid "Unknown error "
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ "
 
-#: inet/ruserpass.c:184
-msgid "Error: .netrc file is readable by others."
-msgstr "ïÛÉÂËÁ: ÆÁÊÌ .netrc ÍÏÖÅÔ ÚÁÐÉÓÙ×ÁÔØÓÑ ÄÒÕÇÉÍÉ."
+#: string/strerror.c:43
+msgid "Unknown error"
+msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ"
 
-#: inet/ruserpass.c:185
-msgid "Remove password or make file unreadable by others."
-msgstr "õÄÁÌÉÔÅ ÐÁÒÏÌØ ÉÌÉ ÓÄÅÌÁÊÔÅ ÆÁÊÌ ÎÅÞÉÔÁÅÍÙÍ ÄÒÕÇÉÍÉ."
+#: string/strsignal.c:65
+#, c-format
+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"
 
-#: sunrpc/auth_unix.c:318
+#: sunrpc/auth_unix.c:350
 msgid "auth_none.c - Fatal marshalling problem"
 msgstr "auth_none.c -- æÁÔÁÌØÎÁÑ ÏÛÉÂËÁ ÍÁÒÛÁÌÌÉÎÇÁ"
 
@@ -3939,111 +4547,111 @@ msgstr "; 
 msgid "(unknown authentication error - %d)"
 msgstr "(ÎÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ ÁÕÔÅÎÆÉËÁÃÉÉ -- %d)"
 
-#: sunrpc/clnt_perr.c:177
+#: sunrpc/clnt_perr.c:172
 msgid "RPC: Success"
 msgstr "RPC: õÓÐÅÈ"
 
-#: sunrpc/clnt_perr.c:180
+#: sunrpc/clnt_perr.c:175
 msgid "RPC: Can't encode arguments"
 msgstr "RPC: îÅ×ÏÚÍÏÖÎÏ ÚÁËÏÄÉÒÏ×ÁÔØ ÁÒÇÕÍÅÎÔÙ"
 
-#: sunrpc/clnt_perr.c:184
+#: sunrpc/clnt_perr.c:179
 msgid "RPC: Can't decode result"
 msgstr "RPC: îÅ×ÏÚÍÏÖÎÏ ÒÁÓËÏÄÉÒÏ×ÁÔØ ÒÅÚÕÌØÔÁÔ"
 
-#: sunrpc/clnt_perr.c:188
+#: sunrpc/clnt_perr.c:183
 msgid "RPC: Unable to send"
 msgstr "RPC: îÅ ÕÄÁÌÏÓØ ÐÏÓÌÁÔØ"
 
-#: sunrpc/clnt_perr.c:192
+#: sunrpc/clnt_perr.c:187
 msgid "RPC: Unable to receive"
 msgstr "RPC: îÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ"
 
-#: sunrpc/clnt_perr.c:196
+#: sunrpc/clnt_perr.c:191
 msgid "RPC: Timed out"
 msgstr "RPC: ÷ÒÅÍÑ ÏÖÉÄÁÎÉÑ ÉÓÔÅËÌÏ"
 
-#: sunrpc/clnt_perr.c:200
+#: sunrpc/clnt_perr.c:195
 msgid "RPC: Incompatible versions of RPC"
 msgstr "RPC: îÅÓÏ×ÍÅÓÔÉÍÙÅ ×ÅÒÓÉÉ RPC"
 
-#: sunrpc/clnt_perr.c:204
+#: sunrpc/clnt_perr.c:199
 msgid "RPC: Authentication error"
 msgstr "RPC: ïÛÉÂËÁ ÁÕÔÅÎÆÉËÁÃÉÉ"
 
-#: sunrpc/clnt_perr.c:208
+#: sunrpc/clnt_perr.c:203
 msgid "RPC: Program unavailable"
 msgstr "RPC: ðÒÏÇÒÁÍÍÁ ÎÅÄÏÓÔÕÐÎÁ"
 
-#: sunrpc/clnt_perr.c:212
+#: sunrpc/clnt_perr.c:207
 msgid "RPC: Program/version mismatch"
 msgstr "RPC: îÅÓÏ×ÐÁÄÅÎÉÅ ÐÒÏÇÒÁÍÍÙ/×ÅÒÓÉÉ"
 
-#: sunrpc/clnt_perr.c:216
+#: sunrpc/clnt_perr.c:211
 msgid "RPC: Procedure unavailable"
 msgstr "RPC: ðÒÏÃÅÄÕÒÁ ÎÅÄÏÓÔÕÐÎÁ"
 
-#: sunrpc/clnt_perr.c:220
+#: sunrpc/clnt_perr.c:215
 msgid "RPC: Server can't decode arguments"
 msgstr "RPC: óÅÒ×ÅÒ ÎÅ ÍÏÖÅÔ ÒÁÓËÏÄÉÒÏ×ÁÔØ ÁÒÇÕÍÅÎÔÙ"
 
-#: sunrpc/clnt_perr.c:224
+#: sunrpc/clnt_perr.c:219
 msgid "RPC: Remote system error"
 msgstr "RPC: ïÛÉÂËÁ ÕÄÁÌÅÎÎÏÊ ÓÉÓÔÅÍÙ"
 
-#: sunrpc/clnt_perr.c:228
+#: sunrpc/clnt_perr.c:223
 msgid "RPC: Unknown host"
 msgstr "RPC: îÅÉÚ×ÅÓÔÎÙÊ ÈÏÓÔ"
 
-#: sunrpc/clnt_perr.c:232
+#: sunrpc/clnt_perr.c:227
 msgid "RPC: Unknown protocol"
 msgstr "RPC: îÅÉÚ×ÅÓÔÎÙÊ ÐÒÏÔÏËÏÌ"
 
-#: sunrpc/clnt_perr.c:236
+#: sunrpc/clnt_perr.c:231
 msgid "RPC: Port mapper failure"
 msgstr "RPC: óÂÏÊ ÏÔÏÂÒÁÖÁÔÅÌÑ ÐÏÒÔÏ×"
 
-#: sunrpc/clnt_perr.c:240
+#: sunrpc/clnt_perr.c:235
 msgid "RPC: Program not registered"
 msgstr "RPC: ðÒÏÇÒÁÍÍÁ ÎÅ ÚÁÒÅÇÉÓÔÒÉÒÏ×ÁÎÁ"
 
-#: sunrpc/clnt_perr.c:244
+#: sunrpc/clnt_perr.c:239
 msgid "RPC: Failed (unspecified error)"
 msgstr "RPC: óÂÏÊ (ÏÛÉÂËÁ ÎÅ ÕËÁÚÁÎÁ)"
 
-#: sunrpc/clnt_perr.c:285
+#: sunrpc/clnt_perr.c:280
 msgid "RPC: (unknown error code)"
 msgstr "RPC: (ÎÅÉÚ×ÅÓÔÎÙÊ ËÏÄ ÏÛÉÂËÉ)"
 
-#: sunrpc/clnt_perr.c:357
+#: sunrpc/clnt_perr.c:342
 msgid "Authentication OK"
 msgstr "áÕÔÅÎÆÉËÁÃÉÑ ÕÓÐÅÛÎÁ"
 
-#: sunrpc/clnt_perr.c:360
+#: sunrpc/clnt_perr.c:345
 msgid "Invalid client credential"
 msgstr "îÅ×ÅÒÎÙÊ ÒÅË×ÉÚÉÔ ËÌÉÅÎÔÁ"
 
-#: sunrpc/clnt_perr.c:364
+#: sunrpc/clnt_perr.c:349
 msgid "Server rejected credential"
 msgstr "óÅÒ×ÅÒ ÏÔ×ÅÒÇ ÒÅË×ÉÚÉÔ"
 
-#: sunrpc/clnt_perr.c:368
+#: sunrpc/clnt_perr.c:353
 msgid "Invalid client verifier"
 msgstr ""
 
-#: sunrpc/clnt_perr.c:372
+#: sunrpc/clnt_perr.c:357
 msgid "Server rejected verifier"
 msgstr ""
 
-#: sunrpc/clnt_perr.c:376
+#: sunrpc/clnt_perr.c:361
 msgid "Client credential too weak"
 msgstr "òÅË×ÉÚÉÔ ËÌÉÅÎÔÁ ÓÌÉÛËÏÍ ÓÌÁÂ"
 
-#: sunrpc/clnt_perr.c:380
+#: sunrpc/clnt_perr.c:365
 msgid "Invalid server verifier"
 msgstr ""
 
-#: sunrpc/clnt_perr.c:384
+#: sunrpc/clnt_perr.c:369
 msgid "Failed (unspecified error)"
 msgstr "óÂÏÊ (ÏÛÉÂËÁ ÎÅ ÕËÁÚÁÎÁ)"
 
@@ -4051,193 +4659,177 @@ msgstr "
 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"
 
-#: 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"
 
-#: 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 (ÐÏÌÕÞÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÉÎÔÅÒÆÅÊÓÁ)"
-
-#: sunrpc/pm_getmaps.c:74
+#: sunrpc/pm_getmaps.c:83
 msgid "pmap_getmaps rpc problem"
 msgstr "ÐÒÏÂÌÅÍÁ pmap_getmaps rpc"
 
-#: sunrpc/pmap_clnt.c:72
-msgid "__get_myaddress: ioctl (get interface configuration)"
-msgstr "__get_myaddress: ioctl (ÐÏÌÕÞÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÉÎÔÅÒÆÅÊÓÁ)"
-
-#: sunrpc/pmap_clnt.c:137
+#: 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 (ÐÏÌÕÞÅÎÉÅ ÆÌÁÇÏ× ÉÎÔÅÒÆÅÊÓÁ)"
-
-#: sunrpc/pmap_rmt.c:269
+#: sunrpc/pmap_rmt.c:248
 msgid "Cannot create socket for broadcast rpc"
 msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÏËÅÔ ÄÌÑ ÛÉÒÏËÏ×ÅÝÁÔÅÌØÎÏÇÏ rpc"
 
-#: sunrpc/pmap_rmt.c:276
+#: sunrpc/pmap_rmt.c:255
 msgid "Cannot set socket option SO_BROADCAST"
 msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÓÔÁÎÏ×ÉÔØ ×ÏÚÍÏÖÎÏÓÔØ ÓÏËÅÔÁ SO_BROADCAST"
 
-#: sunrpc/pmap_rmt.c:328
+#: sunrpc/pmap_rmt.c:307
 msgid "Cannot send broadcast packet"
 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 "îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÏÔ×ÅÔ ÎÁ ÛÉÒÏËÏ×ÅÝÁÔÅÌØÎÏÅ ÓÏÏÂÝÅÎÉÅ"
 
-#: sunrpc/rpc_main.c:288
+#: sunrpc/rpc_main.c:286
 #, c-format
 msgid "%s: output would overwrite %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"
 
-#: sunrpc/rpc_main.c:307
+#: sunrpc/rpc_main.c:305
 #, c-format
 msgid "%s: while writing output %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 "ÎÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÐÒÅÐÒÏÃÅÓÓÏÒ óÉ: %s \n"
 
-#: sunrpc/rpc_main.c:350
+#: sunrpc/rpc_main.c:348
 msgid "cannot find any C preprocessor (cpp)\n"
 msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ ÎÉËÁËÏÇÏ ÐÒÅÐÒÏÃÅÓÓÏÒÁ óÉ (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: ÐÒÅÐÒÏÃÅÓÓÏÒ óÉ ÚÁ×ÅÒÛÉÌÓÑ ÎÅÕÓÐÅÛÎÏ Ó ÓÉÇÎÁÌÏÍ %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: ÐÒÅÐÒÏÃÅÓÓÏÒ óÉ ÚÁ×ÅÒÛÉÌÓÑ ÎÅÕÓÐÅÛÎÏ Ó ×ÙÈÏÄÎÙÍ ËÏÄÏÍ %d\n"
 
-#: sunrpc/rpc_main.c:462
+#: sunrpc/rpc_main.c:460
 #, c-format
 msgid "illegal nettype :`%s'\n"
 msgstr "ÎÅ×ÅÒÎÙÊ nettype :`%s'\n"
 
-#: sunrpc/rpc_main.c:1104
+#: sunrpc/rpc_main.c:1122
 #, c-format
 msgid "rpcgen: too many defines\n"
 msgstr "rpcgen: ÓÌÉÛËÏÍ ÍÎÏÇÏ ÏÐÒÅÄÅÌÅÎÉÊ\n"
 
-#: sunrpc/rpc_main.c:1116
+#: sunrpc/rpc_main.c:1134
 #, c-format
 msgid "rpcgen: arglist coding error\n"
 msgstr "rpcgen: ÏÛÉÂËÁ ËÏÄÉÒÏ×ÁÎÉÑ ÓÐÉÓËÁ ÁÒÇÕÍÅÎÔÏ×\n"
 
 #. TRANS: the file will not be removed; this is an
 #. TRANS: informative message.
-#: sunrpc/rpc_main.c:1149
+#: sunrpc/rpc_main.c:1167
 #, c-format
 msgid "file `%s' already exists and may be overwritten\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"
 
-#: 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 "îÅ×ÏÚÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÆÌÁÇ netid Ó ÆÌÁÇÏÍ inetd!\n"
 
-#: sunrpc/rpc_main.c:1385
+#: sunrpc/rpc_main.c:1403
 msgid "Cannot use netid flag without TIRPC!\n"
 msgstr "îÅ×ÏÚÍÏÖÎÏ ÉÓÐÏÌØÚÏ×ÁÔØ ÆÌÁÇ netid ÂÅÚ TIRPC!\n"
 
-#: sunrpc/rpc_main.c:1392
+#: sunrpc/rpc_main.c:1410
 msgid "Cannot use table flags with newstyle!\n"
 msgstr ""
 
-#: sunrpc/rpc_main.c:1411
+#: sunrpc/rpc_main.c:1429
 #, c-format
 msgid "\"infile\" is required for template generation flags.\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"
 
-#: sunrpc/rpc_main.c:1425
+#: sunrpc/rpc_main.c:1443
 #, c-format
 msgid "usage: %s infile\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][-Dname[=ÚÎÁÞÅÎÉÅ]] [-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"
 
 # ???
-#: 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 nettype]* [-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 netid]* [-o ×ÙÈÏÄÎÏÊ-ÆÁÊÌ] [×ÈÏÄÎÏÊ-ÆÁÊÌ]\n"
 
-#: sunrpc/rpc_scan.c:116
+#: sunrpc/rpc_scan.c:114
 msgid "constant or identifier expected"
 msgstr "ÏÖÉÄÁÅÔÓÑ ËÏÎÓÔÁÎÔÁ ÉÌÉ ÉÄÅÎÔÉÆÉËÁÔÏÒ"
 
-#: sunrpc/rpc_scan.c:312
+#: sunrpc/rpc_scan.c:310
 msgid "illegal character in file: "
 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 "ÎÅÚÁ×ÅÒÛÅÎÎÁÑ ÓÔÒÏËÏ×ÁÑ ËÏÎÓÔÁÎÔÁ"
 
-#: 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 "ÏÛÉÂËÁ ÐÒÅÐÒÏÃÅÓÓÏÒÁ"
 
@@ -4327,25 +4919,25 @@ msgstr "svc_run: -- 
 msgid "can't reassign procedure number %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"
 
-#: 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"
 
-#: sunrpc/svc_simple.c:111
+#: sunrpc/svc_simple.c:113
 msgid "registerrpc: out of memory\n"
 msgstr "registerrpc: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n"
 
-#: sunrpc/svc_simple.c:175
+#: sunrpc/svc_simple.c:173
 #, c-format
 msgid "trouble replying to prog %d\n"
 msgstr "ÐÒÏÂÌÅÍÙ ÐÒÉ ÏÔÐÒÁ×ËÅ ÏÔ×ÅÔÁ ÐÒÏÇÒÁÍÍÅ  %d\n"
 
-#: sunrpc/svc_simple.c:183
+#: sunrpc/svc_simple.c:182
 #, c-format
 msgid "never registered prog %d\n"
 msgstr "ÎÉ ÒÁÚÕ ÎÅ ÒÅÇÉÓÔÒÉÒÏ×ÁÎÎÁÑ ÐÒÏÇÒÁÍÍÁ %d\n"
@@ -4358,11 +4950,11 @@ msgstr "svc_tcp.c -- 
 msgid "svc_tcp.c - cannot getsockname or 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"
 
-#: 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"
 
@@ -4374,39 +4966,39 @@ msgstr "svcudp_create: 
 msgid "svcudp_create - cannot 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"
 
-#: 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"
 
-#: sunrpc/svc_udp.c:493
+#: sunrpc/svc_udp.c:474
 msgid "enablecache: cache already enabled"
 msgstr "enablecache: ËÜÛ ÕÖÅ ÚÁÄÅÊÓÔ×Ï×ÁÎ"
 
-#: sunrpc/svc_udp.c:499
+#: sunrpc/svc_udp.c:480
 msgid "enablecache: could not allocate cache"
 msgstr "enablecache: ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÍÅÓÔÏ ÐÏÄ ËÜÛ"
 
-#: sunrpc/svc_udp.c:507
+#: sunrpc/svc_udp.c:489
 msgid "enablecache: could not allocate cache data"
 msgstr "enablecache: ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÍÅÓÔÏ ÐÏÄ ÄÁÎÎÙÅ ËÜÛÁ"
 
-#: sunrpc/svc_udp.c:514
+#: sunrpc/svc_udp.c:497
 msgid "enablecache: could not allocate cache fifo"
 msgstr "enablecache: ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÍÅÓÔÏ ÐÏÄ ÏÞÅÒÅÄØ ËÜÛÁ"
 
-#: sunrpc/svc_udp.c:550
+#: sunrpc/svc_udp.c:532
 msgid "cache_set: victim not found"
 msgstr "cache_set: ÖÅÒÔ×Á ÎÅ ÎÁÊÄÅÎÁ"
 
-#: sunrpc/svc_udp.c:561
+#: sunrpc/svc_udp.c:543
 msgid "cache_set: victim alloc failed"
 msgstr "cache_set: ÓÂÏÊ ×ÙÄÅÌÅÎÉÑ ÐÁÍÑÔÉ ÄÌÑ ÖÅÒÔ×Ù"
 
-#: sunrpc/svc_udp.c:567
+#: sunrpc/svc_udp.c:550
 msgid "cache_set: could not allocate new rpc_buffer"
 msgstr "cache_set: ÎÅ ÕÄÁÌÏÓØ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÎÏ×ÙÊ rpc_buffer"
 
@@ -4418,1582 +5010,1502 @@ msgstr "svc_unix.c -- 
 msgid "svc_unix.c - cannot getsockname or 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"
 
-#: 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"
 
-#: sunrpc/xdr.c:570 sunrpc/xdr.c:573
+#: sunrpc/xdr.c:566
 msgid "xdr_bytes: out of memory\n"
 msgstr "xdr_bytes: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n"
 
-#: sunrpc/xdr.c:728 sunrpc/xdr.c:731
+#: sunrpc/xdr.c:718
 msgid "xdr_string: out of memory\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"
 
-#: 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"
 
-#: sunrpc/xdr_ref.c:88 sunrpc/xdr_ref.c:91
-msgid "xdr_reference: out of memory\n"
-msgstr "xdr_reference: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n"
-
-#: nis/nis_callback.c:189
-msgid "unable to free arguments"
-msgstr "ÎÅ ÕÄÁÌÏÓØ ×ÙÓ×ÏÂÏÄÉÔØ ÚÁÎÑÔÕÀ ÁÒÇÕÍÅÎÔÁÍÉ ÐÁÍÑÔØ"
-
-#: nis/nis_error.c:30
-msgid "Probable success"
-msgstr "÷ÅÒÏÑÔÎÙÊ ÕÓÐÅÈ"
-
-#: nis/nis_error.c:31
-msgid "Not found"
-msgstr "îÅ ÎÁÊÄÅÎÏ"
-
-#: nis/nis_error.c:32
-msgid "Probably not found"
-msgstr "÷ÅÒÏÑÔÎÏ, ÎÅ ÎÁÊÄÅÎÏ"
-
-#: nis/nis_error.c:33
-msgid "Cache expired"
-msgstr "÷ÒÅÍÑ ÖÉÚÎÉ ËÜÛÁ ÉÓÔÅËÌÏ "
-
-#: nis/nis_error.c:34
-msgid "NIS+ servers unreachable"
-msgstr "óÌÕÖÂÙ NIS+ ÎÅÄÏÓÔÉÖÉÍÙ"
-
-#: nis/nis_error.c:35
-msgid "Unknown object"
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ÏÂßÅËÔ"
-
-#: nis/nis_error.c:36
-msgid "Server busy, try again"
-msgstr "óÅÒ×ÅÒ ÚÁÎÑÔ, ÐÏÐÒÏÂÕÊÔÅ ÅÝÅ ÒÁÚ"
-
-#: nis/nis_error.c:37
-msgid "Generic system error"
-msgstr "ïÂÝÁÑ ÏÛÉÂËÁ ÓÉÓÔÅÍÙ"
-
-#: nis/nis_error.c:38
-msgid "First/next chain broken"
-msgstr "òÁÚÏÒ×ÁÎÁ ÃÅÐÏÞËÁ ÐÅÒ×ÙÊ/ÓÌÅÄÕÀÝÉÊ"
-
-#: nis/nis_error.c:41
-msgid "Name not served by this server"
-msgstr "éÍÑ ÎÅ ÏÂÓÌÕÖÉ×ÁÅÔÓÑ ÄÁÎÎÙÍ ÓÅÒ×ÅÒÏÍ"
-
-#: nis/nis_error.c:42
-msgid "Server out of memory"
-msgstr "ðÁÍÑÔØ ÎÁ ÓÅÒ×ÅÒÅ ÉÓÞÅÒÐÁÎÁ"
-
-#: nis/nis_error.c:43
-msgid "Object with same name exists"
-msgstr "óÕÝÅÓÔ×ÕÅÔ ÏÂßÅËÔ Ó ÔÁËÉÍ ÖÅ ÉÍÅÎÅÍ"
-
-#: nis/nis_error.c:44
-msgid "Not master server for this domain"
-msgstr "üÔÏ ÎÅ ÍÁÓÔÅÒ-ÓÅÒ×ÅÒ ÄÌÑ ÄÁÎÎÏÇÏ ÄÏÍÅÎÁ"
-
-#: nis/nis_error.c:45
-msgid "Invalid object for operation"
-msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÄÌÑ ÄÁÎÎÏÊ ÏÐÅÒÁÃÉÉ ÏÂßÅËÔ"
-
-#: nis/nis_error.c:46
-msgid "Malformed name, or illegal name"
-msgstr "îÅÐÒÁ×ÉÌØÎÏ ÕËÁÚÁÎÎÏÅ ÉÌÉ ÎÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ"
-
-#: nis/nis_error.c:47
-msgid "Unable to create callback"
-msgstr ""
-
-#: nis/nis_error.c:48
-msgid "Results sent to callback proc"
-msgstr ""
-
-#: nis/nis_error.c:49
-msgid "Not found, no such name"
-msgstr "îÅ ÎÁÊÄÅÎÏ, ÎÅÔ ÔÁËÏÇÏ ÉÍÅÎÉ"
-
-#: nis/nis_error.c:50
-msgid "Name/entry isn't unique"
-msgstr "éÍÑ/ÚÁÐÉÓØ ÎÅ ÕÎÉËÁÌØÎÏ"
-
-#: nis/nis_error.c:51
-msgid "Modification failed"
-msgstr "íÏÄÉÆÉËÁÃÉÑ ÎÅ ÕÄÁÌÁÓØ"
-
-#: nis/nis_error.c:52
-msgid "Database for table does not exist"
-msgstr "âÁÚÁ ÄÁÎÎÙÈ ÄÌÑ ÔÁÂÌÉÃÙ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ"
-
-#: nis/nis_error.c:53
-msgid "Entry/table type mismatch"
-msgstr "îÅÓÏÏÔ×ÅÔÓÔ×ÉÅ ÔÉÐÏ× ÚÁÐÉÓÉ/ÔÁÂÌÉÃÙ"
-
-#: nis/nis_error.c:54
-msgid "Link points to illegal name"
-msgstr "óÓÙÌËÁ ÕËÁÚÙ×ÁÅÔ ÎÁ ÎÅÄÏÐÕÓÔÉÍÏÅ ÉÍÑ"
-
-#: nis/nis_error.c:55
-msgid "Partial success"
-msgstr "þÁÓÔÉÞÎÙÊ ÕÓÐÅÈ"
-
-#: nis/nis_error.c:56
-msgid "Too many attributes"
-msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÁÔÒÉÂÕÔÏ×"
-
-#: nis/nis_error.c:57
-msgid "Error in RPC subsystem"
-msgstr "ïÛÉÂËÁ × ÐÏÄÓÉÓÔÅÍÅ RPC"
-
-#: nis/nis_error.c:58
-msgid "Missing or malformed attribute"
-msgstr "ðÒÏÐÕÝÅÎÎÙÊ ÉÌÉ ÎÅÐÒÁ×ÉÌØÎÏ ÕËÁÚÁÎÎÙÊ ÁÔÒÉÂÕÔ"
-
-#: nis/nis_error.c:59
-msgid "Named object is not searchable"
-msgstr ""
-
-#: nis/nis_error.c:60
-msgid "Error while talking to callback proc"
-msgstr ""
-
-#: nis/nis_error.c:61
-msgid "Non NIS+ namespace encountered"
-msgstr "ïÂÎÁÒÕÖÅÎÏ ÎÅ-NIS+ ÐÒÏÓÔÒÁÎÓÔ×Ï ÉÍÅÎ"
-
-#: nis/nis_error.c:62
-msgid "Illegal object type for operation"
-msgstr "îÅ ÄÏÐÕÓÔÉÍÙÊ ÄÌÑ ÏÐÅÒÁÃÉÉ ÔÉРÏÂßÅËÔÁ"
-
-#: nis/nis_error.c:63
-msgid "Passed object is not the same object on server"
-msgstr "ðÅÒÅÄÁÎÎÙÊ ÏÂßÅËÔ ÎÅ ÔÏÇÏ ÖÅ ÔÉÐÁ, ÞÔÏ ÏÂßÅËÔ ÎÁ ÓÅÒ×ÅÒÅ"
-
-#: nis/nis_error.c:64
-msgid "Modify operation failed"
-msgstr "ïÐÅÒÁÃÉÑ ÍÏÄÉÆÉËÁÃÉÉ ÎÅÕÓÐÅÛÎÁ"
-
-#: nis/nis_error.c:65
-msgid "Query illegal for named table"
-msgstr "îÅÄÏÐÕÓÔÉÍÙÊ ÚÁÐÒÏÓ ÄÌÑ ÉÍÅÎÏ×ÁÎÎÏÊ ÔÁÂÌÉÃÙ"
-
-#: nis/nis_error.c:66
-msgid "Attempt to remove a non-empty table"
-msgstr "ðÏÐÙÔËÁ ÕÄÁÌÉÔØ ÎÅÐÕÓÔÕÀ ÔÁÂÌÉÃÕ"
-
-#: nis/nis_error.c:67
-msgid "Error in accessing NIS+ cold start file.  Is NIS+ installed?"
-msgstr "ïÛÉÂËÁ ÏÂÒÁÝÅÎÉÑ Ë ÆÁÊÌÕ ÈÏÌÏÄÎÏÇÏ ÚÁÐÕÓËÁ NIS+.  õÓÔÁÎÏ×ÌÅΠÌÉ NIS+?"
-
-#: nis/nis_error.c:68
-msgid "Full resync required for directory"
-msgstr "äÌÑ ËÁÔÁÌÏÇÁ ÔÒÅÂÕÅÔÓÑ ÐÏÌÎÁÑ ÒÅÓÉÎÈÒÏÎÉÚÁÃÉÑ"
-
-#: nis/nis_error.c:69
-msgid "NIS+ operation failed"
-msgstr "ïÐÅÒÁÃÉÑ NIS+ ÎÅÕÓÐÅÛÎÁ"
-
-#: nis/nis_error.c:70
-msgid "NIS+ service is unavailable or not installed"
-msgstr "óÌÕÖÂÁ NIS+ ÎÅÄÏÓÔÕÐÎÁ ÉÌÉ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÁ"
-
-#: nis/nis_error.c:71
-msgid "Yes, 42 is the meaning of life"
-msgstr "äÁ, 42 -- ÜÔÏ ÓÍÙÓÌ ÖÉÚÎÉ"
-
-#: nis/nis_error.c:72
-msgid "Unable to authenticate NIS+ server"
-msgstr "îÅ ÕÄÁÌÏÓØ ÁÕÔÅÎÆÉÃÉÒÏ×ÁÔØ ÓÅÒ×ÅÒ NIS+"
-
-#: nis/nis_error.c:73
-msgid "Unable to authenticate NIS+ client"
-msgstr "îÅ ÕÄÁÌÏÓØ ÁÕÔÅÎÆÉÃÉÒÏ×ÁÔØ ËÌÉÅÎÔ NIS+"
-
-#: nis/nis_error.c:74
-msgid "No file space on server"
-msgstr "îÁ ÓÅÒ×ÅÒÅ ÎÅÔ ÄÉÓËÏ×ÏÇÏ ÐÒÏÓÔÒÁÎÓÔ×Á"
-
-#: nis/nis_error.c:75
-msgid "Unable to create process on server"
-msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÐÒÏÃÅÓÓ ÎÁ ÓÅÒ×ÅÒÅ"
-
-#: nis/nis_error.c:76
-msgid "Master server busy, full dump rescheduled."
-msgstr "íÁÓÔÅÒ-ÓÅÒ×ÅÒ ÚÁÎÑÔ, ÚÁÐÌÁÎÉÒÏ×ÁΠÐÏÌÎÙÊ ÄÁÍÐ."
-
-#: nis/nis_local_names.c:126
-#, c-format
-msgid "LOCAL entry for UID %d in directory %s not unique\n"
-msgstr "úÁÐÉÓØ LOCAL ÄÌÑ UID %d × ËÁÔÁÌÏÇÅ %s ÎÅ ÕÎÉËÁÌØÎÁ\n"
-
-#: nis/nis_print.c:51
-msgid "UNKNOWN"
-msgstr "îåéú÷åóôîï"
-
-#: nis/nis_print.c:109
-msgid "BOGUS OBJECT\n"
-msgstr "îåáäåë÷áôîùê ïâÿåëô\n"
-
-#: nis/nis_print.c:112
-msgid "NO OBJECT\n"
-msgstr "îåô ïâÿåëôá\n"
-
-#: nis/nis_print.c:115
-msgid "DIRECTORY\n"
-msgstr "ëáôáìïç\n"
-
-#: nis/nis_print.c:118
-msgid "GROUP\n"
-msgstr "çòõððá\n"
-
-#: nis/nis_print.c:121
-msgid "TABLE\n"
-msgstr "ôáâìéãá\n"
-
-#: nis/nis_print.c:124
-msgid "ENTRY\n"
-msgstr "úáðéóø\n"
-
-#: nis/nis_print.c:127
-msgid "LINK\n"
-msgstr "óóùìëá\n"
-
-#: nis/nis_print.c:130
-msgid "PRIVATE\n"
-msgstr "ðòé÷áôîïå\n"
-
-#: nis/nis_print.c:133
-msgid "(Unknown object)\n"
-msgstr "(îÅÉÚ×ÅÓÔÎÙÊ ÏÂßÅËÔ)\n"
-
-#: nis/nis_print.c:166
-#, c-format
-msgid "Name : `%s'\n"
-msgstr "éÍÑ : `%s'\n"
-
-#: nis/nis_print.c:167
-#, c-format
-msgid "Type : %s\n"
-msgstr "ôÉР: %s\n"
+#: sunrpc/xdr_ref.c:86
+msgid "xdr_reference: out of memory\n"
+msgstr "xdr_reference: ÐÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ\n"
 
-#: nis/nis_print.c:172
-msgid "Master Server :\n"
-msgstr "íÁÓÔÅÒ-ÓÅÒ×ÅÒ :\n"
+#: sysdeps/generic/siglist.h:29 sysdeps/unix/siglist.c:27
+msgid "Hangup"
+msgstr "ïÂÒÙ× ÔÅÒÍÉÎÁÌØÎÏÊ ÌÉÎÉÉ"
 
-#: nis/nis_print.c:174
-msgid "Replicate :\n"
-msgstr "òÅÐÌÉËÁ :\n"
+#: sysdeps/generic/siglist.h:30 sysdeps/unix/siglist.c:28
+msgid "Interrupt"
+msgstr "ðÒÅÒÙ×ÁÎÉÅ"
 
-#: nis/nis_print.c:175
-#, c-format
-msgid "\tName       : %s\n"
-msgstr "\téÍÑ       : %s\n"
+#: sysdeps/generic/siglist.h:31 sysdeps/unix/siglist.c:29
+msgid "Quit"
+msgstr "÷ÙÈÏÄ"
 
-#: nis/nis_print.c:176
-msgid "\tPublic Key : "
-msgstr "\tðÕÂÌÉÞÎÙÊ ËÌÀÞ : "
+#: sysdeps/generic/siglist.h:32 sysdeps/unix/siglist.c:30
+msgid "Illegal instruction"
+msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ÉÎÓÔÒÕËÃÉÑ"
 
-#: nis/nis_print.c:180
-msgid "None.\n"
-msgstr "îÅÔ.\n"
+#: sysdeps/generic/siglist.h:33 sysdeps/unix/siglist.c:31
+msgid "Trace/breakpoint trap"
+msgstr "ìÏ×ÕÛËÁ ÔÒÁÓÓÉÒÏ×ËÉ/ÏÓÔÁÎÏ×Á"
 
-#: nis/nis_print.c:183
-#, c-format
-msgid "Diffie-Hellmann (%d bits)\n"
-msgstr "äÉÆÆÉ-èÅÌÍÁΠ(%d ÂÉÔ)\n"
+#: sysdeps/generic/siglist.h:34
+msgid "Aborted"
+msgstr "á×ÁÒÉÊÎÙÊ ÏÓÔÁÎÏ×"
 
-#: nis/nis_print.c:188
-#, c-format
-msgid "RSA (%d bits)\n"
-msgstr "RSA (%d ÂÉÔ)\n"
+#: sysdeps/generic/siglist.h:35 sysdeps/unix/siglist.c:34
+msgid "Floating point exception"
+msgstr "éÓËÌÀÞÅÎÉÅ × ÏÐÅÒÁÃÉÉ Ó ÐÌÁ×ÁÀÝÅÊ ÔÏÞËÏÊ"
 
-#: nis/nis_print.c:191
-msgid "Kerberos.\n"
-msgstr "ëÅÒÂÅÒÏÓ.\n"
+#: sysdeps/generic/siglist.h:36 sysdeps/unix/siglist.c:35
+msgid "Killed"
+msgstr "õÂÉÔÏ"
 
-#: nis/nis_print.c:194
-#, c-format
-msgid "Unknown (type = %d, bits = %d)\n"
-msgstr "îÅÉÚ×ÅÓÔÎÏ (ÔÉР= %d, ÂÉÔÙ = %d)\n"
+#: sysdeps/generic/siglist.h:37 sysdeps/unix/siglist.c:36
+msgid "Bus error"
+msgstr "ïÛÉÂËÁ ÛÉÎÙ"
 
-#: nis/nis_print.c:205
-#, c-format
-msgid "\tUniversal addresses (%u)\n"
-msgstr "\tõÎÉ×ÅÒÓÁÌØÎÙÅ ÁÄÒÅÓÁ (%u)\n"
+#: sysdeps/generic/siglist.h:38 sysdeps/unix/siglist.c:37
+msgid "Segmentation fault"
+msgstr "ïÛÉÂËÁ ÓÅÇÍÅÎÔÉÒÏ×ÁÎÉÑ"
 
-#: nis/nis_print.c:227
-msgid "Time to live : "
-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_print.c:229
-msgid "Default Access rights :\n"
-msgstr "ðÒÁ×Á ÄÏÓÔÕÐÁ ÐÏ ÕÍÏÌÞÁÎÉÀ :\n"
+#: sysdeps/generic/siglist.h:40 sysdeps/unix/siglist.c:40
+msgid "Alarm clock"
+msgstr "óÉÇÎÁÌ ÔÁÊÍÅÒÁ"
 
-#: nis/nis_print.c:238
-#, c-format
-msgid "\tType         : %s\n"
-msgstr "\tôÉР        : %s\n"
+#: sysdeps/generic/siglist.h:41 sysdeps/unix/siglist.c:41
+msgid "Terminated"
+msgstr "úÁ×ÅÒÛÅÎÏ"
 
-#: nis/nis_print.c:239
-msgid "\tAccess rights: "
-msgstr "\tðÒÁ×Á ÄÏÓÔÕÐÁ: "
+#: sysdeps/generic/siglist.h:42 sysdeps/unix/siglist.c:42
+msgid "Urgent I/O condition"
+msgstr "óÉÔÕÁÃÉÑ ÓÒÏÞÎÏÇÏ ××ÏÄÁ/×Ù×ÏÄÁ"
 
-#: nis/nis_print.c:252
-msgid "Group Flags :"
-msgstr "æÌÁÇÉ ÇÒÕÐÐÙ :"
+#: sysdeps/generic/siglist.h:43 sysdeps/unix/siglist.c:43
+msgid "Stopped (signal)"
+msgstr "ïÓÔÁÎÏ×ÌÅÎÏ (ÓÉÇÎÁÌ)"
 
-#: nis/nis_print.c:255
-msgid ""
-"\n"
-"Group Members :\n"
-msgstr ""
-"\n"
-"þÌÅÎÙ ÇÒÕÐÐÙ :\n"
+#: sysdeps/generic/siglist.h:44 sysdeps/unix/siglist.c:44
+msgid "Stopped"
+msgstr "ïÓÔÁÎÏ×ÌÅÎÏ"
 
-#: nis/nis_print.c:266
-#, c-format
-msgid "Table Type          : %s\n"
-msgstr "ôÉРÔÁÂÌÉÃÙ          : %s\n"
+#: sysdeps/generic/siglist.h:45 sysdeps/unix/siglist.c:45
+msgid "Continued"
+msgstr "ðÒÏÄÏÌÖÅÎÏ"
 
-#: nis/nis_print.c:267
-#, c-format
-msgid "Number of Columns   : %d\n"
-msgstr "þÉÓÌÏ ÓÔÏÌÂÃÏ×   : %d\n"
+#: sysdeps/generic/siglist.h:46 sysdeps/unix/siglist.c:46
+msgid "Child exited"
+msgstr "äÏÞÅÒÎÉÊ ÐÒÏÃÅÓÓ ÚÁ×ÅÒÛÉÌÓÑ"
 
-#: nis/nis_print.c:268
-#, c-format
-msgid "Character Separator : %c\n"
-msgstr "úÎÁË-ÒÁÚÄÅÌÉÔÅÌØ : %c\n"
+#: sysdeps/generic/siglist.h:47 sysdeps/unix/siglist.c:47
+msgid "Stopped (tty input)"
+msgstr "ïÓÔÁÎÏ×ÌÅÎÏ (××ÏÄ Ó ÔÅÒÍÉÎÁÌÁ)"
 
-#: nis/nis_print.c:269
-#, c-format
-msgid "Search Path         : %s\n"
-msgstr "ðÕÔØ ÐÏÉÓËÁ         : %s\n"
+#: sysdeps/generic/siglist.h:48 sysdeps/unix/siglist.c:48
+msgid "Stopped (tty output)"
+msgstr "ïÓÔÁÎÏ×ÌÅÎÏ (×Ù×ÏÄ ÎÁ ÔÅÒÍÉÎÁÌ)"
 
-#: nis/nis_print.c:270
-msgid "Columns             :\n"
-msgstr "óÔÏÌÂÃÙ             :\n"
+#: sysdeps/generic/siglist.h:49 sysdeps/unix/siglist.c:49
+msgid "I/O possible"
+msgstr "÷ÏÚÍÏÖÅΠ××ÏÄ/×Ù×ÏÄ"
 
-#: nis/nis_print.c:273
-#, c-format
-msgid "\t[%d]\tName          : %s\n"
-msgstr "\t[%d]\téÍÑ          : %s\n"
+#: sysdeps/generic/siglist.h:50 sysdeps/unix/siglist.c:50
+msgid "CPU time limit exceeded"
+msgstr "ðÒÅ×ÙÛÅΠÌÉÍÉÔ ÐÒÏÃÅÓÓÏÒÎÏÇÏ ×ÒÅÍÅÎÉ"
 
-#: nis/nis_print.c:275
-msgid "\t\tAttributes    : "
-msgstr "\t\táÔÒÉÂÕÔÙ    : "
+#: sysdeps/generic/siglist.h:51 sysdeps/unix/siglist.c:51
+msgid "File size limit exceeded"
+msgstr "ðÒÅ×ÙÛÅΠÌÉÍÉÔ ÒÁÚÍÅÒÁ ÆÁÊÌÁ"
 
-#: nis/nis_print.c:277
-msgid "\t\tAccess Rights : "
-msgstr "\t\tðÒÁ×Á ÄÏÓÔÕÐÁ : "
+#: sysdeps/generic/siglist.h:52 sysdeps/unix/siglist.c:52
+msgid "Virtual timer expired"
+msgstr "÷ÉÒÔÕÁÌØÎÙÊ ÔÁÊÍÅÒ ÉÓÔÅË"
 
-#: nis/nis_print.c:286
-msgid "Linked Object Type : "
-msgstr "ôÉРÏÂßÅËÔÁ ÐÏ ÓÓÙÌËÅ : "
+#: sysdeps/generic/siglist.h:53 sysdeps/unix/siglist.c:53
+msgid "Profiling timer expired"
+msgstr "ðÒÏÆÉÌÉÒÏ×ÏÞÎÙÊ ÔÁÊÍÅÒ ÉÓÔÅË"
 
-#: nis/nis_print.c:288
-#, c-format
-msgid "Linked to : %s\n"
-msgstr "óÓÙÌËÁ ÎÁ : %s\n"
+#: sysdeps/generic/siglist.h:54 sysdeps/unix/siglist.c:54
+msgid "Window changed"
+msgstr "ïËÎÏ ÉÚÍÅÎÉÌÏÓØ"
 
-#: nis/nis_print.c:297
-#, c-format
-msgid "\tEntry data of type %s\n"
-msgstr "\täÁÎÎÙÅ ÚÁÐÉÓÉ ÔÉÐÁ %s\n"
+#: sysdeps/generic/siglist.h:55 sysdeps/unix/siglist.c:56
+msgid "User defined signal 1"
+msgstr "ïÐÒÅÄÅÌÑÅÍÙÊ ÐÏÌØÚÏ×ÁÔÅÌÅÍ ÓÉÇÎÁÌ 1"
 
-#: nis/nis_print.c:300
-#, c-format
-msgid "\t[%u] - [%u bytes] "
-msgstr "\t[%u] - [%u ÂÁÊÔ] "
+#: sysdeps/generic/siglist.h:56 sysdeps/unix/siglist.c:57
+msgid "User defined signal 2"
+msgstr "ïÐÒÅÄÅÌÑÅÍÙÊ ÐÏÌØÚÏ×ÁÔÅÌÅÍ ÓÉÇÎÁÌ 2"
 
-#: nis/nis_print.c:303
-msgid "Encrypted data\n"
-msgstr "úÁÛÉÆÒÏ×ÁÎÎÙÅ ÄÁÎÎÙÅ\n"
+#: sysdeps/generic/siglist.h:60 sysdeps/unix/siglist.c:33
+msgid "EMT trap"
+msgstr "ìÏ×ÕÛËÁ EMT"
 
-#: nis/nis_print.c:305
-msgid "Binary data\n"
-msgstr "âÉÎÁÒÎÙÅ ÄÁÎÎÙÅ\n"
+#: sysdeps/generic/siglist.h:63 sysdeps/unix/siglist.c:38
+msgid "Bad system call"
+msgstr "îÅ×ÅÒÎÙÊ ÓÉÓÔÅÍÎÙÊ ×ÙÚÏ×"
 
-#: nis/nis_print.c:320
-#, c-format
-msgid "Object Name   : %s\n"
-msgstr "éÍÑ ÏÂßÅËÔÁ   : %s\n"
+#: sysdeps/generic/siglist.h:66
+msgid "Stack fault"
+msgstr "ïÛÉÂËÁ ÓÔÅËÁ"
 
-#: nis/nis_print.c:321
-#, c-format
-msgid "Directory     : %s\n"
-msgstr "ëÁÔÁÌÏÇ     : %s\n"
+#: sysdeps/generic/siglist.h:69
+msgid "Information request"
+msgstr "úÁÐÒÏÓ ÉÎÆÏÒÍÁÃÉÉ"
 
-#: nis/nis_print.c:322
-#, c-format
-msgid "Owner         : %s\n"
-msgstr "÷ÌÁÄÅÌÅà        : %s\n"
+#: sysdeps/generic/siglist.h:71
+msgid "Power failure"
+msgstr "óÂÏÊ ÐÉÔÁÎÉÑ"
 
-#: nis/nis_print.c:323
-#, c-format
-msgid "Group         : %s\n"
-msgstr "çÒÕÐÐÁ         : %s\n"
+#: sysdeps/generic/siglist.h:74 sysdeps/unix/siglist.c:55
+msgid "Resource lost"
+msgstr "ðÏÔÅÒÑ ÒÅÓÕÒÓÁ"
 
-# ??? ÚÄÅÓØ, ÎÉÖÅ É ×ÙÛÅ -- ÒÁÓÓÔÁ×ÉÔØ ÐÒÏÂÅÌÙ ËÁË ÎÁÄÏ
-#: nis/nis_print.c:324
-msgid "Access Rights : "
-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_print.c:326
-#, c-format
-msgid ""
-"\n"
-"Time to Live  : "
-msgstr ""
-"\n"
-"÷ÒÅÍÑ ÖÉÚÎÉ  : "
+#. TRANS No process matches the specified process ID.
+#: sysdeps/gnu/errlist.c:45
+msgid "No such process"
+msgstr "îÅÔ ÔÁËÏÇÏ ÐÒÏÃÅÓÓÁ"
 
-#: nis/nis_print.c:329
-#, c-format
-msgid "Creation Time : %s"
-msgstr "÷ÒÅÍÑ ÓÏÚÄÁÎÉÑ : %s"
+#. 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_print.c:331
-#, c-format
-msgid "Mod. Time     : %s"
-msgstr "÷ÒÅÍÑ ÍÏÄÉÆÉËÁÃÉÉ     : %s"
+#. TRANS Input/output error; usually used for physical read or write errors.
+#: sysdeps/gnu/errlist.c:69
+msgid "Input/output error"
+msgstr "ïÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ"
 
-#: nis/nis_print.c:332
-msgid "Object Type   : "
-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_print.c:352
-#, c-format
-msgid "    Data Length = %u\n"
-msgstr "    äÌÉÎÁ ÄÁÎÎÙÈ = %u\n"
+#. 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_print.c:365
-#, c-format
-msgid "Status            : %s\n"
-msgstr "óÔÁÔÕÓ            : %s\n"
+#. 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_print.c:366
-#, c-format
-msgid "Number of objects : %u\n"
-msgstr "þÉÓÌÏ ÏÂßÅËÔÏ× : %u\n"
+#. 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_print.c:370
-#, c-format
-msgid "Object #%d:\n"
-msgstr "ïÂßÅËÔ #%d:\n"
+#. 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_print_group_entry.c:115
-#, c-format
-msgid "Group entry for \"%s.%s\" group:\n"
-msgstr "úÁÐÉÓØ ÇÒÕÐÐÙ ÄÌÑ ÇÒÕÐÐÙ \"%s.%s\":\n"
+#. 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_print_group_entry.c:123
-msgid "    Explicit members:\n"
-msgstr "    ñ×ÎÙÅ ÞÌÅÎÙ:\n"
+#. 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_print_group_entry.c:128
-msgid "    No explicit members\n"
-msgstr "    îÅÔ Ñ×ÎÙÈ ÞÌÅÎÏ×\n"
+#. 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_print_group_entry.c:131
-msgid "    Implicit members:\n"
-msgstr "    îÅÑ×ÎÙÅ ÞÌÅÎÙ:\n"
+#. 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_print_group_entry.c:136
-msgid "    No implicit members\n"
-msgstr "    îÅÔ ÎÅÑ×ÎÙÈ ÞÌÅÎÏ×\n"
+#. 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_print_group_entry.c:139
-msgid "    Recursive members:\n"
-msgstr "    òÅËÕÒÓÉ×ÎÙÅ ÞÌÅÎÙ:\n"
+#. 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_print_group_entry.c:144
-msgid "    No recursive members\n"
-msgstr "    îÅÔ ÒÅËÕÒÓÉ×ÎÙÈ ÞÌÅÎÏ×\n"
+#. 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_group_entry.c:147 nis/nis_print_group_entry.c:163
-msgid "    Explicit nonmembers:\n"
-msgstr "    ñ×ÎÙÅ ÎÅ-ÞÌÅÎÙ:\n"
+#. 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_group_entry.c:152
-msgid "    No explicit nonmembers\n"
-msgstr "    îÅÔ Ñ×ÎÙÈ ÎÅ-ÞÌÅÎÏ×\n"
+#. 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_group_entry.c:155
-msgid "    Implicit nonmembers:\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_group_entry.c:160
-msgid "    No implicit nonmembers\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_group_entry.c:168
-msgid "    No recursive nonmembers\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/nss_nisplus/nisplus-publickey.c:101
-#: nis/nss_nisplus/nisplus-publickey.c:182
-#, c-format
-msgid "DES entry for netname %s not unique\n"
-msgstr "úÁÐÉÓØ DES ÄÌÑ netname %s ÎÅ ÕÎÉËÁÌØÎÁ\n"
+#. 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/nss_nisplus/nisplus-publickey.c:218
-#, c-format
-msgid "netname2user: missing group id list in `%s'."
-msgstr "netname2user: ÐÒÏÐÕÝÅΠÓÐÉÓÏË ÉÄÅÎÔÉÆÉËÁÔÏÒÏ× ÇÒÕÐРנ`%s'."
+#. 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/nss_nisplus/nisplus-publickey.c:300
-#: nis/nss_nisplus/nisplus-publickey.c:306
-#: nis/nss_nisplus/nisplus-publickey.c:370
-#: nis/nss_nisplus/nisplus-publickey.c:379
-#, c-format
-msgid "netname2user: (nis+ lookup): %s\n"
-msgstr "netname2user: (ÐÏÉÓË × nis+): %s\n"
+#. 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/nss_nisplus/nisplus-publickey.c:319
-#, c-format
-msgid "netname2user: DES entry for %s in directory %s not unique"
-msgstr "netname2user: ÚÁÐÉÓØ DES ÄÌÑ %s × ËÁÔÁÌÏÇÅ %s ÎÅ ÕÎÉËÁÌØÎÁ"
+#. 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/nss_nisplus/nisplus-publickey.c:337
-#, c-format
-msgid "netname2user: principal name `%s' too long"
-msgstr "netname2user: ÉÍÑ ÐÒÉÎÃÉÐÁÌÁ `%s' ÓÌÉÛËÏÍ ×ÅÌÉËÏ"
+#. 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/nss_nisplus/nisplus-publickey.c:392
-#, c-format
-msgid "netname2user: LOCAL entry for %s in directory %s not unique"
-msgstr "netname2user: ÚÁÐÉÓØ LOCAL ÄÌÑ %s × ËÁÔÁÌÏÇÅ %s ÎÅ ÕÎÉËÁÌØÎÁ"
+#. TRANS Invalid seek operation (such as on a pipe).
+#: sysdeps/gnu/errlist.c:326
+msgid "Illegal seek"
+msgstr "îÅÄÏÐÕÓÔÉÍÁÑ ÏÐÅÒÁÃÉÑ ÓÍÅÝÅÎÉÑ"
 
-#: nis/nss_nisplus/nisplus-publickey.c:399
-msgid "netname2user: should not have uid 0"
-msgstr "netname2user: ÎÅ ÄÏÌÖÅΠÉÍÅÔØ ÎÕÌÅ×ÏÊ uid"
+#. 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/ypclnt.c:171
-#, c-format
-msgid "YPBINDPROC_DOMAIN: %s\n"
-msgstr "YPBINDPROC_DOMAIN: %s\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/ypclnt.c:780
-msgid "Request arguments bad"
-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/ypclnt.c:782
-msgid "RPC failure on NIS operation"
-msgstr "óÂÏÊ RPC ÐÒÉ ÏÐÅÒÁÃÉÉ NIS"
+#. 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/ypclnt.c:784
-msgid "Can't bind to server which serves this domain"
-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 "òÅÓÕÒÓ ×ÒÅÍÅÎÎÏ ÎÅÄÏÓÔÕÐÅÎ"
 
-#: nis/ypclnt.c:786
-msgid "No such map in server's domain"
-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 "ïÐÅÒÁÃÉÑ ÐÒÉ×ÅÄÅÔ Ë ÂÌÏËÉÒÏ×ËÅ"
 
-#: nis/ypclnt.c:788
-msgid "No such key in map"
-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/ypclnt.c:790
-msgid "Internal NIS error"
-msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ NIS"
+#. 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/ypclnt.c:792
-msgid "Local resource allocation failure"
-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/ypclnt.c:794
-msgid "No more records in map database"
-msgstr ""
+#. 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/ypclnt.c:796
-msgid "Can't communicate with portmapper"
-msgstr "îÅ×ÏÚÍÏÖÎÏ Ó×ÑÚÁÔØÓÑ Ó ÏÔÏÂÒÁÖÁÔÅÌÅÍ ÐÏÒÔÏ×"
+#. TRANS The socket type does not support the requested communications protocol.
+#: sysdeps/gnu/errlist.c:483
+msgid "Protocol wrong type for socket"
+msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÄÌÑ ÓÏËÅÔÁ ÔÉРÐÒÏÔÏËÏÌÁ"
 
-#: nis/ypclnt.c:798
-msgid "Can't communicate with ypbind"
-msgstr "îÅ×ÏÚÍÏÖÎÏ Ó×ÑÚÁÔØÓÑ Ó ypbind"
+#. 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/ypclnt.c:800
-msgid "Can't communicate with ypserv"
-msgstr "îÅ×ÏÚÍÏÖÎÏ Ó×ÑÚÁÔØÓÑ Ó ypserv"
+#. 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/ypclnt.c:802
-msgid "Local domain name not set"
-msgstr "ìÏËÁÌØÎÏÅ ÉÍÑ ÄÏÍÅÎÁ ÎÅ ÕÓÔÁÎÏ×ÌÅÎÏ"
+#. TRANS The socket type is not supported.
+#: sysdeps/gnu/errlist.c:513
+msgid "Socket type not supported"
+msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÊ ÔÉРÓÏËÅÔÁ"
 
-#: nis/ypclnt.c:804
-msgid "NIS map database is bad"
-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.
+#: sysdeps/gnu/errlist.c:527
+msgid "Operation not supported"
+msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÁÑ ÏÐÅÒÁÃÉÑ"
 
-#: nis/ypclnt.c:806
-msgid "NIS client/server version mismatch - can't supply service"
-msgstr "îÅÓÏÏÔ×ÅÔÓÔ×ÉÅ ×ÅÒÓÉÊ ËÌÉÅÎÔÁ/ÓÅÒ×ÅÒÁ NIS -- ÎÅ×ÏÚÍÏÖÎÏ ÐÒÅÄÏÓÔÁ×ÉÔØ ÓÌÕÖÂÕ"
+#. TRANS The socket communications protocol family you requested is not supported.
+#: sysdeps/gnu/errlist.c:536
+msgid "Protocol family not supported"
+msgstr "îÅÐÏÄÄÅÒÖÉ×ÁÅÍÏÅ ÓÅÍÅÊÓÔ×Ï ÐÒÏÔÏËÏÌÏ×"
 
-#: nis/ypclnt.c:810
-msgid "Database is busy"
-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 "óÅÍÅÊÓÔ×Ï ÁÄÒÅÓÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÐÒÏÔÏËÏÌÏÍ"
 
-#: nis/ypclnt.c:812
-msgid "Unknown NIS error code"
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ËÏÄ ÏÛÉÂËÉ NIS"
+#. TRANS The requested socket address is already in use.  @xref{Socket Addresses}.
+#: sysdeps/gnu/errlist.c:555
+msgid "Address already in use"
+msgstr "áÄÒÅÓ ÕÖÅ ÉÓÐÏÌØÚÕÅÔÓÑ"
 
-#: nis/ypclnt.c:854
-msgid "Internal ypbind error"
-msgstr "÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ ypbind"
+#. 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/ypclnt.c:856
-msgid "Domain not bound"
-msgstr "äÏÍÅΠÎÅ ÎÁÊÄÅÎ"
+#. TRANS A socket operation failed because the network was down.
+#: sysdeps/gnu/errlist.c:575
+msgid "Network is down"
+msgstr "óÅÔØ ÎÅ ÒÁÂÏÔÁÅÔ"
 
-#: nis/ypclnt.c:858
-msgid "System resource allocation failure"
-msgstr "óÂÏÊ ×ÙÄÅÌÅÎÉÑ ÓÉÓÔÅÍÎÏÇÏ ÒÅÓÕÒÓÁ"
+#. 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/ypclnt.c:860
-msgid "Unknown ypbind error"
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ ypbind"
+#. TRANS A network connection was reset because the remote host crashed.
+#: sysdeps/gnu/errlist.c:594
+msgid "Network dropped connection on reset"
+msgstr "óÅÔÅ×ÏÅ ÓÏÅÄÉÎÅÎÉÅ ÂÙÌÏ ÓÂÒÏÛÅÎÏ"
 
-#: nis/ypclnt.c:899
-msgid "yp_update: cannot convert host to netname\n"
-msgstr "yp_update: ÎÅ×ÏÚÍÏÖÎÏ ÐÒÅÏÂÒÁÚÏ×ÁÔØ ÈÏÓÔ × netname\n"
+#. TRANS A network connection was aborted locally.
+#: sysdeps/gnu/errlist.c:603
+msgid "Software caused connection abort"
+msgstr "ðÒÏÇÒÁÍÍÁ ×ÙÚ×ÁÌÁ ÓÂÒÏÓ ÓÏÅÄÉÎÅÎÉÑ"
 
-#: nis/ypclnt.c:911
-msgid "yp_update: cannot get server address\n"
-msgstr "yp_update: ÎÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÁÄÒÅÓ ÓÅÒ×ÅÒÁ\n"
+#. 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 "óÏÅÄÉÎÅÎÉÅ ÓÂÒÏÛÅÎÏ ÄÒÕÇÏÊ ÓÔÏÒÏÎÏÊ"
 
-#: nscd/cache.c:94
-msgid "while allocating hash table entry"
-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 "îÅÄÏÓÔÁÔÏÞÎÏ ÂÕÆÅÒÎÏÇÏ ÐÒÏÓÔÒÁÎÓÔ×Á"
 
-#: nscd/cache.c:162 nscd/connections.c:184
-#, c-format
-msgid "cannot stat() file `%s': %s"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat() ÄÌÑ ÆÁÊÌÁ `%s': %s"
+#. 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 "ëÏÎÅÞÎÁÑ ÔÏÞËÁ ÐÅÒÅÄÁÞÉ ÕÖÅ ÐÏÄÓÏÅÄÉÎÅÎÁ"
 
-#: nscd/connections.c:150
-msgid "Cannot run nscd in secure mode as unprivileged user"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÚÁÐÕÓÔÉÔØ nscd × ÂÅÚÏÐÁÓÎÏÍ ÒÅÖÉÍÅ ÐÏÄ ÎÅÐÒÉ×ÅÌÉÇÅÒÏ×ÁÎÎÙÍ ÐÏÌØÚÏ×ÁÔÅÌÅÍ"
+#. 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 "ëÏÎÅÞÎÁÑ ÔÏÞËÁ ÐÅÒÅÄÁÞÉ ÎÅ ÐÏÄÓÏÅÄÉÎÅÎÁ"
 
-#: nscd/connections.c:172
-#, c-format
-msgid "while allocating cache: %s"
-msgstr "ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÐÁÍÑÔÉ ÐÏÄ ËÜÛ: %s"
+#. 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 "ôÒÅÂÕÅÔÓÑ ÕËÁÚÁÔØ ÁÄÒÅÓ ÎÁÚÎÁÞÅÎÉÑ"
 
-#: nscd/connections.c:197
-#, c-format
-msgid "cannot open socket: %s"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÓÏËÅÔ: %s"
+#. TRANS The socket has already been shut down.
+#: sysdeps/gnu/errlist.c:667
+msgid "Cannot send after transport endpoint shutdown"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÓÌÁÔØ ÄÁÎÎÙÅ ÐÏÓÌÅ ×ÙËÌÀÞÅÎÉÑ ËÏÎÅÞÎÏÊ ÔÏÞËÉ ÐÅÒÅÄÁÞÉ"
 
-#: nscd/connections.c:215
-#, c-format
-msgid "cannot enable socket to accept connections: %s"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÓÏËÅÔ ÐÒÉÎÉÍÁÀÝÉÍ ÓÏÅÄÉÎÅÎÉÑ: %s"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:676
+msgid "Too many references: cannot splice"
+msgstr "óÌÉÛËÏÍ ÍÎÏÇÏ ÓÓÙÌÏË: ÎÅ×ÏÚÍÏÖÎÏ ÏÂßÅÄÉÎÉÔØ"
 
-#: nscd/connections.c:260
-#, c-format
-msgid "cannot handle old request version %d; current version is %d"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÂÒÁÂÏÔÁÔØ ÚÁÐÒÏÓ ÓÔÁÒÏÊ ×ÅÒÓÉÉ %d; ÔÅËÕÝÁÑ ×ÅÒÓÉÑ %d"
+#. 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 "÷ÒÅÍÑ ÏÖÉÄÁÎÉÑ ÓÏÅÄÉÎÅÎÉÑ ÉÓÔÅËÌÏ"
 
-#: nscd/connections.c:298 nscd/connections.c:324
-#, c-format
-msgid "cannot write result: %s"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÒÅÚÕÌØÔÁÔ: %s"
+#. 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 "÷ ÓÏÅÄÉÎÅÎÉÉ ÏÔËÁÚÁÎÏ"
 
-#: nscd/connections.c:392 nscd/connections.c:514
-#, c-format
-msgid "error getting caller's id: %s"
-msgstr "ÏÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ×ÙÚÙ×ÁÀÝÅÊ ÓÔÏÒÏÎÙ: %s"
+#. 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 "óÌÉÛËÏÍ ÍÎÏÇÏ ÕÒÏ×ÎÅÊ ÓÉÍ×ÏÌØÎÙÈ ÓÓÙÌÏË"
 
-#: nscd/connections.c:485
-#, c-format
-msgid "while accepting connection: %s"
-msgstr "ÐÒÉ ÐÒÉÅÍÅ ÓÏÅÄÉÎÅÎÉÑ: %s"
+#. 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 "óÌÉÛËÏÍ ÄÌÉÎÎÏÅ ÉÍÑ ÆÁÊÌÁ"
 
-#: nscd/connections.c:498
-#, fuzzy, c-format
-msgid "short read while reading request: %s"
-msgstr "ÎÅÐÏÌÎÙÊ ÓÞÉÔÁÎÎÙÊ ÂÌÏË ÐÒÉ ÞÔÅÎÉÉ ÚÁÐÒÏÓÁ: %s"
+#. TRANS The remote host for a requested network connection is down.
+#: sysdeps/gnu/errlist.c:726
+msgid "Host is down"
+msgstr "èÏÓÔ ×ÙËÌÀÞÅÎ"
 
-#: nscd/connections.c:542
-#, c-format
-msgid "key length in request too long: %d"
-msgstr "ÄÌÉÎÁ ËÌÀÞÁ × ÚÁÐÒÏÓÅ ÓÌÉÛËÏÍ ×ÅÌÉËÁ: %d"
+#. TRANS The remote host for a requested network connection is not reachable.
+#: sysdeps/gnu/errlist.c:735
+msgid "No route to host"
+msgstr "îÅÔ ÐÕÔÉ ÄÏ ÈÏÓÔÁ"
 
-#: nscd/connections.c:556
-#, c-format
-msgid "short read while reading request key: %s"
-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 "ëÁÔÁÌÏÇ ÎÅ ÐÕÓÔ"
 
-#: nscd/connections.c:566
-#, c-format
-msgid "handle_request: request received (Version = %d) from PID %ld"
-msgstr "handle_request: ÐÏÌÕÞÅΠÚÁÐÒÏÓ (×ÅÒÓÉÑ = %d) ÏÔ PID %ld"
+#. 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 "óÌÉÛËÏÍ ÍÎÏÇÏ ÐÒÏÃÅÓÓÏ×"
 
-#: nscd/connections.c:571
-#, c-format
-msgid "handle_request: request received (Version = %d)"
-msgstr "handle_request: ÐÏÌÕÞÅΠÚÁÐÒÏÓ (×ÅÒÓÉÑ = %d)"
+#. 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 "óÌÉÛËÏÍ ÍÎÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÅÊ"
 
-#: nscd/connections.c:635 nscd/connections.c:636 nscd/connections.c:655
-#: nscd/connections.c:668 nscd/connections.c:674 nscd/connections.c:681
-#, c-format
-msgid "Failed to run nscd as user '%s'"
-msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ nscd ÏÔ ÉÍÅÎÉ ÐÏÌØÚÏ×ÁÔÅÌÑ '%s'"
+#. TRANS The user's disk quota was exceeded.
+#: sysdeps/gnu/errlist.c:775
+msgid "Disk quota exceeded"
+msgstr "ðÒÅ×ÙÛÅÎÁ ÄÉÓËÏ×ÁÑ Ë×ÏÔÁ"
 
-#: nscd/connections.c:656
-msgid "getgrouplist failed"
-msgstr "getgrouplist ÎÅÕÓÐÅÛÎÁ"
+#. 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"
 
-#: nscd/connections.c:669
-msgid "setgroups failed"
-msgstr "setgroups ÎÅÕÓÐÅÛÎÁ"
+#. 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 "üÔÏ ÕÄÁÌÅÎÎÙÊ ÏÂßÅËÔ"
 
-#: nscd/grpcache.c:103 nscd/hstcache.c:111 nscd/pwdcache.c:109
-msgid "while allocating key copy"
-msgstr "ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÐÁÍÑÔÉ ÐÏÄ ËÏÐÉÀ ËÌÀÞÁ"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:808
+msgid "RPC struct is bad"
+msgstr " RPC ÎÅÐÒÁ×ÉÌØÎÁÑ ÓÔÒÕËÔÕÒÁ"
 
-#: nscd/grpcache.c:153 nscd/hstcache.c:168 nscd/pwdcache.c:146
-msgid "while allocating cache entry"
-msgstr "ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÐÁÍÑÔÉ ÐÏÄ ÚÁÐÉÓØ ËÜÛÁ"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:817
+msgid "RPC version wrong"
+msgstr "RPC ÎÅÐÒÁ×ÉÌØÎÁÑ ×ÅÒÓÉÑ"
 
-#: nscd/grpcache.c:197 nscd/hstcache.c:283 nscd/pwdcache.c:193
-#, fuzzy, c-format
-msgid "short write in %s: %s"
-msgstr "ÎÅÐÏÌÎÁÑ ÚÁÐÉÓØ × %s: %s"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:826
+msgid "RPC program not available"
+msgstr "RPC ÐÒÏÇÒÁÍÍÁ ÎÅÄÏÓÔÕÐÎÁ"
 
-#: nscd/grpcache.c:219
-#, c-format
-msgid "Haven't found \"%s\" in group cache!"
-msgstr "îÅ ÎÁÊÄÅÎÏ \"%s\" × ËÜÛÅ ÇÒÕÐÐ!"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:835
+msgid "RPC program version wrong"
+msgstr "RPC ÎÅÐÒÁ×ÉÌØÎÁÑ ×ÅÒÓÉÑ ÐÒÏÇÒÁÍÍÙ"
 
-#: nscd/grpcache.c:285
-#, c-format
-msgid "Invalid numeric gid \"%s\"!"
-msgstr "îÅ×ÅÒÎÙÊ ÞÉÓÌÏ×ÏÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÇÒÕÐÐÙ \"%s\"!"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:844
+msgid "RPC bad procedure for program"
+msgstr "RPC ÎÅÐÒÁ×ÉÌØÎÁÑ ÐÒÏÃÅÄÕÒÁ ÄÌÑ ÐÒÏÇÒÁÍÍÙ"
 
-#: nscd/grpcache.c:292
-#, c-format
-msgid "Haven't found \"%d\" in group cache!"
-msgstr "îÅ ÎÁÊÄÅÎÏ \"%d\" × ËÜÛÅ ÇÒÕÐÐ!"
+#. 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 "îÅÔ ÄÏÓÔÕÐÎÙÈ ÂÌÏËÉÒÏ×ÏË"
 
-#: nscd/hstcache.c:305 nscd/hstcache.c:371 nscd/hstcache.c:436
-#: nscd/hstcache.c:501
-#, c-format
-msgid "Haven't found \"%s\" in hosts cache!"
-msgstr "îÅ ÎÁÊÄÅÎÏ \"%s\" × ËÜÛÅ ÈÏÓÔÏ×!"
+#. 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 "îÅÐÏÄÈÏÄÑÝÉÊ ÔÉРÉÌÉ ÆÏÒÍÁÔ ÆÁÊÌÁ"
 
-#: nscd/nscd.c:89
-msgid "Read configuration data from NAME"
-msgstr "þÉÔÁÔØ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÅ ÄÁÎÎÙÅ ÉÚ æáêìá"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:878
+msgid "Authentication error"
+msgstr "ïÛÉÂËÁ ÁÕÔÅÎÆÉËÁÃÉÉ"
 
-#: nscd/nscd.c:91
-msgid "Do not fork and display messages on the current tty"
-msgstr "îÅ ÐÏÒÏÖÄÁÔØ ÄÏÞÅÒÎÉÊ ÐÒÏÃÅÓÓ, ÐÅÞÁÔÁÔØ ÓÏÏÂÝÅÎÉÑ ÎÁ ÔÅËÕÝÉÊ ÔÅÒÍÉÎÁÌ"
+#. TRANS ???
+#: sysdeps/gnu/errlist.c:887
+msgid "Need authenticator"
+msgstr "îÅÏÂÈÏÄÉÍ ÁÕÔÅÎÆÉËÁÔÏÒ"
 
-#: nscd/nscd.c:92
-msgid "NUMBER"
-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.
+#: sysdeps/gnu/errlist.c:900
+msgid "Function not implemented"
+msgstr "æÕÎËÃÉÑ ÎÅ ÒÅÁÌÉÚÏ×ÁÎÁ"
 
-#: nscd/nscd.c:92
-msgid "Start NUMBER threads"
-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 "îÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
 
-#: nscd/nscd.c:93
-msgid "Shut the server down"
-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 "îÅ×ÅÒÎÙÊ ÉÌÉ ÎÅÐÏÌÎÙÊ ÍÕÌØÔÉÂÁÊÔÎÙÊ ÉÌÉ ÛÉÒÏËÉÊ ÚÎÁË"
 
-#: nscd/nscd.c:94
-msgid "Print current configuration statistic"
-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 "îÅÐÏÄÈÏÄÑÝÁÑ ÏÐÅÒÁÃÉÑ ÄÌÑ ÆÏÎÏ×ÏÇÏ ÐÒÏÃÅÓÓÁ"
 
-#: nscd/nscd.c:95
-msgid "TABLE"
-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.
+#: sysdeps/gnu/errlist.c:955
+msgid "Translator died"
+msgstr "ôÒÁÎÓÌÑÔÏÒ ÕÍÅÒ"
 
-#: nscd/nscd.c:96
-msgid "Invalidate the specified cache"
-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 "?"
 
-#: nscd/nscd.c:97
-msgid "TABLE,yes"
-msgstr "ôáâìéãá,yes"
+#. TRANS You did @strong{what}?
+#: sysdeps/gnu/errlist.c:975
+msgid "You really blew it this time"
+msgstr "îÁ ÜÔÏÔ ÒÁÚ ×Ù ×ÓÅÈ ÏÐÒÏËÉÎÕÌÉ"
 
-#: nscd/nscd.c:97
-msgid "Use separate cache for each user"
-msgstr "éÓÐÏÌØÚÏ×ÁÔØ ÏÔÄÅÌØÎÙÊ ËÜÛ ÄÌÑ ËÁÖÄÏÇÏ ÐÏÌØÚÏ×ÁÔÅÌÑ"
+#. TRANS Go home and have a glass of warm, dairy-fresh milk.
+#: sysdeps/gnu/errlist.c:984
+msgid "Computer bought the farm"
+msgstr "ëÏÍÐØÀÔÅÒ ËÕÐÉÌ ÆÅÒÍÕ"
 
-#: nscd/nscd.c:102
-msgid "Name Service Cache Daemon."
-msgstr "äÅÍÏΠËÜÛÁ ÓÌÕÖÂÙ ÉÍÅÎ."
+#. TRANS This error code has no purpose.
+#: sysdeps/gnu/errlist.c:993
+msgid "Gratuitous error"
+msgstr "âÅÚ×ÏÚÍÅÚÄÎÁÑ ÏÛÉÂËÁ"
 
-#: nscd/nscd.c:141
-msgid "cannot read configuration file; this is fatal"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÆÁÊÌ ËÏÎÆÉÇÕÒÁÃÉÉ; ÜÔÏ ÆÁÔÁÌØÎÙÊ ÓÂÏÊ"
+#: sysdeps/gnu/errlist.c:1001
+msgid "Bad message"
+msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÓÏÏÂÝÅÎÉÅ"
 
-#: nscd/nscd.c:152
-msgid "already running"
-msgstr "ÕÖÅ ÚÁÐÕÝÅÎ"
+#: sysdeps/gnu/errlist.c:1009
+msgid "Identifier removed"
+msgstr "éÄÅÎÔÉÆÉËÁÔÏÒ ÂÙÌ ÕÄÁÌÅÎ"
 
-#: nscd/nscd.c:270 nscd/nscd.c:294 nscd/nscd_stat.c:132
-msgid "Only root is allowed to use this option!"
-msgstr "ôÏÌØËÏ ÓÕÐÅÒÐÏÌØÚÏ×ÁÔÅÌØ ÍÏÖÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÜÔÏÔ ËÌÀÞ!"
+#: sysdeps/gnu/errlist.c:1017
+msgid "Multihop attempted"
+msgstr ""
 
-#: nscd/nscd_conf.c:88
-#, c-format
-msgid "Parse error: %s"
-msgstr "ïÛÉÂËÁ ÒÁÚÂÏÒÁ: %s"
+#: sysdeps/gnu/errlist.c:1025
+msgid "No data available"
+msgstr "îÅÔ ÄÏÓÔÕÐÎÙÈ ÄÁÎÎÙÈ"
 
-#: nscd/nscd_conf.c:171
-#, c-format
-msgid "Could not create log file \"%s\""
-msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ ÆÁÊÌ ÐÒÏÔÏËÏÌÁ \"%s\""
+#: sysdeps/gnu/errlist.c:1033
+msgid "Link has been severed"
+msgstr "óÏÅÄÉÎÅÎÅÎÉÅ ÂÙÌÏ ÒÁÚÏÒ×ÁÎÏ"
 
-#: nscd/nscd_conf.c:187
-msgid "Must specify user name for server-user option"
-msgstr "îÕÖÎÏ ÕËÁÚÁÔØ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ËÌÀÞÁ server-user"
+#: sysdeps/gnu/errlist.c:1041
+msgid "No message of desired type"
+msgstr "îÅÔ ÓÏÏÂÝÅÎÉÑ ÖÅÌÁÅÍÏÇÏ ÔÉÐÁ"
 
-#: nscd/nscd_conf.c:194
-msgid "Must specify user name for stat-user option"
-msgstr "îÕÖÎÏ ÕËÁÚÁÔØ ÉÍÑ ÐÏÌØÚÏ×ÁÔÅÌÑ ÄÌÑ ËÌÀÞÁ stat-user"
+#: sysdeps/gnu/errlist.c:1049
+msgid "Out of streams resources"
+msgstr "îÅÄÏÓÔÁÔÏÞÎÏ ÐÏÔÏËÏ×ÙÈ ÒÅÓÕÒÓÏ×"
 
-#: nscd/nscd_conf.c:205
-#, c-format
-msgid "Unknown option: %s %s %s"
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ËÌÀÞ: %s %s %s"
+#: sysdeps/gnu/errlist.c:1057
+msgid "Device not a stream"
+msgstr "õÓÔÒÏÊÓÔ×Ï ÎÅ Ñ×ÌÑÅÔÓÑ ÐÏÔÏËÏÍ"
 
-#: nscd/nscd_stat.c:103
-#, c-format
-msgid "cannot write statistics: %s"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÐÉÓÁÔØ ÓÔÁÔÉÓÔÉËÕ: %s"
+#: sysdeps/gnu/errlist.c:1065
+msgid "Value too large for defined data type"
+msgstr "úÎÁÞÅÎÉÅ ÓÌÉÛËÏÍ ×ÅÌÉËÏ ÄÌÑ ÔÁËÏÇÏ ÔÉÐÁ ÄÁÎÎÙÈ"
 
-#: nscd/nscd_stat.c:128
-#, c-format
-msgid "Only root or %s is allowed to use this option!"
-msgstr "ôÏÌØËÏ ÓÕÐÅÒÐÏÌØÚÏ×ÁÔÅÌØ ÉÌÉ %s ÍÏÇÕÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÜÔÏÔ ËÌÀÞ!"
+#: sysdeps/gnu/errlist.c:1073
+msgid "Protocol error"
+msgstr "ïÛÉÂËÁ ÐÒÏÔÏËÏÌÁ"
 
-#: nscd/nscd_stat.c:139
-msgid "nscd not running!\n"
-msgstr "nscd ÎÅ ÚÁÐÕÝÅÎ!\n"
+#: sysdeps/gnu/errlist.c:1081
+msgid "Timer expired"
+msgstr "ôÁÊÍÅÒ ÉÓÔÅË"
 
-#: nscd/nscd_stat.c:150
-msgid "write incomplete"
-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 "ïÐÅÒÁÃÉÑ ÏÔÍÅÎÅÎÁ"
 
-#: nscd/nscd_stat.c:162
-msgid "cannot read statistics data"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÓÔÁÔÉÓÔÉÞÅÓËÉÅ ÄÁÎÎÙÅ"
+#: sysdeps/gnu/errlist.c:1101
+msgid "Interrupted system call should be restarted"
+msgstr "ðÒÅÒ×ÁÎÙÊ ÓÉÓÔÅÍÎÙÊ ×ÙÚÏ× ÓÌÅÄÕÅÔ ÐÅÒÅÚÁÐÕÓÔÉÔØ"
 
-#: nscd/nscd_stat.c:165
-#, c-format
-msgid ""
-"nscd configuration:\n"
-"\n"
-"%15d  server debug level\n"
-msgstr ""
-"ëÏÎÆÉÇÕÒÁÃÉÑ nscd:\n"
-"\n"
-"%15d  ÕÒÏ×ÅÎØ ÏÔÌÁÄËÉ ÓÅÒ×ÅÒÁ\n"
+#: sysdeps/gnu/errlist.c:1109
+msgid "Channel number out of range"
+msgstr "îÏÍÅÒ ËÁÎÁÌÁ ×ÎÅ ÄÉÁÐÁÚÏÎÁ"
 
-#: nscd/nscd_stat.c:189
-#, c-format
-msgid "%3ud %2uh %2um %2lus  server runtime\n"
-msgstr "%3ud %2uh %2um %2lus  ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n"
+#: sysdeps/gnu/errlist.c:1117
+msgid "Level 2 not synchronized"
+msgstr "õÒÏ×ÅÎØ 2 ÎÅ ÓÉÎÈÒÏÎÉÚÉÒÏ×ÁÎ"
 
-#: nscd/nscd_stat.c:192
-#, c-format
-msgid "    %2uh %2um %2lus  server runtime\n"
-msgstr "    %2uh %2um %2lus  ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n"
+#: sysdeps/gnu/errlist.c:1125
+msgid "Level 3 halted"
+msgstr "õÒÏ×ÅÎØ 3 ÏÓÔÁÎÏ×ÌÅÎ"
 
-#: nscd/nscd_stat.c:194
-#, c-format
-msgid "        %2um %2lus  server runtime\n"
-msgstr "        %2um %2lus  ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n"
+#: sysdeps/gnu/errlist.c:1133
+msgid "Level 3 reset"
+msgstr "õÒÏ×ÅÎØ 3 ÓÂÒÏÛÅÎ"
 
-#: nscd/nscd_stat.c:196
-#, c-format
-msgid "            %2lus  server runtime\n"
-msgstr "            %2lus  ×ÒÅÍÑ ÒÁÂÏÔÙ ÓÅÒ×ÅÒÁ\n"
+#: sysdeps/gnu/errlist.c:1141
+msgid "Link number out of range"
+msgstr "þÉÓÌÏ ÓÓÙÌÏË ×ÎÅ ÄÏÐÕÓÔÉÍÏÇÏ ÄÉÁÐÁÚÏÎÁ"
 
-#: nscd/nscd_stat.c:198
-#, c-format
-msgid "%15lu  number of times clients had to wait\n"
-msgstr "%15lu  ÓËÏÌØËÏ ÒÁÚ ËÌÉÅÎÔÁÍ ÐÒÉÛÌÏÓØ ÖÄÁÔØ\n"
+#: sysdeps/gnu/errlist.c:1149
+msgid "Protocol driver not attached"
+msgstr "äÒÁÊ×ÅÒ ÐÒÏÔÏËÏÌÁ ÎÅ ÐÏÄÓÏÅÄÉÎÅÎ"
 
-#: nscd/nscd_stat.c:213 nscd/nscd_stat.c:215
-msgid "      no"
-msgstr "      ÎÅÔ"
+#: sysdeps/gnu/errlist.c:1157
+msgid "No CSI structure available"
+msgstr "îÅÔ ÄÏÓÔÕÐÎÏÊ CSI-ÓÔÒÕËÔÕÒÙ"
 
-#: nscd/nscd_stat.c:213 nscd/nscd_stat.c:215
-msgid "     yes"
-msgstr "     ÄÁ"
+#: sysdeps/gnu/errlist.c:1165
+msgid "Level 2 halted"
+msgstr "õÒÏ×ÅÎØ 2 ÏÓÔÁÎÏ×ÌÅÎ"
 
-#: nscd/nscd_stat.c:221
-#, c-format
-msgid ""
-"\n"
-"%s cache:\n"
-"\n"
-"%15s  cache is enabled\n"
-"%15Zu  suggested size\n"
-"%15lu  seconds time to live for positive entries\n"
-"%15lu  seconds time to live for negative entries\n"
-"%15lu  cache hits on positive entries\n"
-"%15lu  cache hits on negative entries\n"
-"%15lu  cache misses on positive entries\n"
-"%15lu  cache misses on negative entries\n"
-"%15lu%% cache hit rate\n"
-"%15lu  current number of cached values\n"
-"%15lu  maximum number of cached values\n"
-"%15lu  maximum chain length searched\n"
-"%15lu  number of delays on rdlock\n"
-"%15lu  number of delays on wrlock\n"
-"%15s  check /etc/%s for changes\n"
+#: sysdeps/gnu/errlist.c:1173
+msgid "Invalid exchange"
 msgstr ""
-"\n"
-"ëÜÛ %s:\n"
-"\n"
-"%15s  ËÜÛ ÚÁÄÅÊÓÔ×Ï×ÁÎ\n"
-"%15Zu  ÐÒÅÄÌÁÇÁÅÍÙÊ ÒÁÚÍÅÒ\n"
-"%15lu  ÓÅËÕÎÄÙ ÖÉÚÎÉ ÄÌÑ ÐÏÌÏÖÉÔÅÌØÎÙÈ ÚÁÐÉÓÅÊ\n"
-"%15lu  ÓÅËÕÎÄÙ ÖÉÚÎÉ ÄÌÑ ÏÔÒÉÃÁÔÅÌØÎÙÈ ÚÁÐÉÓÅÊ\n"
-"%15lu  ÐÏÐÁÄÁÎÉÑ ÎÁ ÐÏÌÏÖÉÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n"
-"%15lu  ÐÏÐÁÄÁÎÉÑ ÎÁ ÏÔÒÉÃÁÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n"
-"%15lu  ÐÒÏÍÁÈÉ ÎÁ ÐÏÌÏÖÉÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n"
-"%15lu  ÐÒÏÍÁÈÉ ÎÁ ÏÔÒÉÃÁÔÅÌØÎÙÅ ÚÁÐÉÓÉ\n"
-"%15lu%% ÐÏËÁÚÁÔÅÌØ ÐÏÐÁÄÁÎÉÑ ÎÁ ËÜÛ\n"
-"%15lu  ÔÅËÕÝÅÅ ÞÉÓÌÏ ËÜÛÉÒÏ×ÁÎÎÙÈ ÚÎÁÞÅÎÉÊ\n"
-"%15lu  ÍÁËÓÉÍÁÌØÎÏÅ ÞÉÓÌÏ ËÜÛÉÒÏ×ÁÎÎÙÈ ÚÎÁÞÅÎÉÊ\n"
-"%15lu  ÍÁËÓÉÍÁÌØÎÁÑ ÄÌÉÎÁ ÃÅÐÏÞËÉ ÐÏÉÓËÁ\n"
-"%15lu  ÞÉÓÌÏ ÚÁÄÅÒÖÅË ÎÁ rdlock\n"
-"%15lu  ÞÉÓÌÏ ÚÁÄÅÒÖÅË ÎÁ wrlock\n"
-"%15s  ÏÔÓÌÅÖÉ×ÁÀÔÓÑ ÌÉ ÉÚÍÅÎÅÎÉÑ /etc/%s \n"
-
-#: nscd/pwdcache.c:215
-#, c-format
-msgid "Haven't found \"%s\" in password cache!"
-msgstr "îÅ ÎÁÊÄÅÎÏ \"%s\" × ËÜÛÅ ÐÁÒÏÌÅÊ!"
-
-#: nscd/pwdcache.c:281
-#, c-format
-msgid "Invalid numeric uid \"%s\"!"
-msgstr "îÅ×ÅÒÎÙÊ ÞÉÓÌÏ×ÏÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ \"%s\"!"
 
-#: nscd/pwdcache.c:288
-#, c-format
-msgid "Haven't found \"%d\" in password cache!"
-msgstr "îÅ ÎÁÊÄÅÎÏ \"%d\" × ËÜÛÅ ÐÁÒÏÌÅÊ!"
+#: sysdeps/gnu/errlist.c:1181
+msgid "Invalid request descriptor"
+msgstr "îÅ×ÅÒÎÙÊ ÄÅÓËÒÉÐÔÏÒ ÚÁÐÒÏÓÁ"
 
-#: elf/../sysdeps/generic/dl-sysdep.c:422
-msgid "cannot create capability list"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÐÉÓÏË ×ÏÚÍÏÖÎÏÓÔÅÊ"
+#: sysdeps/gnu/errlist.c:1189
+msgid "Exchange full"
+msgstr ""
 
-#: elf/../sysdeps/generic/readelflib.c:35
-#, c-format
-msgid "file %s is truncated\n"
-msgstr "ÆÁÊÌ %s ÕÓÅÞÅÎ\n"
+#: sysdeps/gnu/errlist.c:1197
+msgid "No anode"
+msgstr ""
 
-#: elf/../sysdeps/generic/readelflib.c:67
-#, c-format
-msgid "%s is a 32 bit ELF file.\n"
-msgstr "%s Ñ×ÌÑÅÔÓÑ 32-ÂÉÔÎÙÍ ELF-ÆÁÊÌÏÍ.\n"
+#: sysdeps/gnu/errlist.c:1205
+msgid "Invalid request code"
+msgstr "îÅ×ÅÒÎÙÊ ËÏÄ ÚÁÐÒÏÓÁ"
 
-#: elf/../sysdeps/generic/readelflib.c:69
-#, c-format
-msgid "%s is a 64 bit ELF file.\n"
-msgstr "%s Ñ×ÌÑÅÔÓÑ 64-ÂÉÔÎÙÍ ELF-ÆÁÊÌÏÍ.\n"
+#: sysdeps/gnu/errlist.c:1213
+msgid "Invalid slot"
+msgstr ""
 
-#: elf/../sysdeps/generic/readelflib.c:71
-#, c-format
-msgid "Unknown ELFCLASS in file %s.\n"
-msgstr "îÅÉÚ×ÅÓÔÎÙÊ ELFCLASS × ÆÁÊÌÅ %s.\n"
+#: sysdeps/gnu/errlist.c:1221
+msgid "File locking deadlock error"
+msgstr "ïÛÉÂËÁ: ÔÕÐÉË ÐÒÉ ÂÌÏËÉÒÏ×ËÅ ÆÁÊÌÁ"
 
-#: elf/../sysdeps/generic/readelflib.c:78
-#, c-format
-msgid "%s is not a shared object file (Type: %d).\n"
-msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÒÁÚÄÅÌÑÅÍÙÍ ÏÂßÅËÔÎÙÍ ÆÁÊÌÏÍ (ôÉÐ: %d).\n"
+#: sysdeps/gnu/errlist.c:1229
+msgid "Bad font file format"
+msgstr "îÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÆÁÊÌÁ ÓÏ ÛÒÉÆÔÏÍ"
 
-#: elf/../sysdeps/generic/readelflib.c:109
-msgid "more than one dynamic segment\n"
-msgstr "ÂÏÌÅÅ ÏÄÎÏÇÏ ÄÉÎÁÍÉÞÅÓËÉÈ ÓÅÇÍÅÎÔÏ×\n"
+#: sysdeps/gnu/errlist.c:1237
+msgid "Machine is not on the network"
+msgstr "íÁÛÉÎÁ ÎÅ × ÓÅÔÉ"
 
-#: elf/../sysdeps/unix/sysv/linux/i386/readelflib.c:49
-#, c-format
-msgid "%s is for unknown machine %d.\n"
-msgstr "%s ÐÒÅÄÎÁÚÎÁÞÅΠÄÌÑ ÎÅÉÚ×ÅÓÔÎÏÊ ÍÁÛÉÎÙ %d.\n"
+#: sysdeps/gnu/errlist.c:1245
+msgid "Package not installed"
+msgstr "ðÁËÅÔ ÎÅ ÕÓÔÁÎÏ×ÌÅÎ"
 
-#: elf/cache.c:70
-msgid "unknown"
-msgstr "ÎÅÉÚ×ÅÓÔÎÏ"
+#: sysdeps/gnu/errlist.c:1253
+msgid "Advertise error"
+msgstr ""
 
-#: elf/cache.c:111
-msgid "Unknown OS"
-msgstr "îÅÉÚ×ÅÓÔÎÁÑ ïó"
+#: sysdeps/gnu/errlist.c:1261
+msgid "Srmount error"
+msgstr "ïÛÉÂËÁ Srmount"
 
-#: elf/cache.c:116
-#, c-format
-msgid ", OS ABI: %s %d.%d.%d"
-msgstr ", ABI ïó: %s %d.%d.%d"
+#: sysdeps/gnu/errlist.c:1269
+msgid "Communication error on send"
+msgstr "ïÛÉÂËÁ Ó×ÑÚÉ ÐÒÉ ÏÔÐÒÁ×ËÅ"
 
-#: elf/cache.c:142 elf/ldconfig.c:1078
-#, c-format
-msgid "Can't open cache file %s\n"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÜÛ-ÆÁÊÌ %s\n"
+#: sysdeps/gnu/errlist.c:1277
+msgid "RFS specific error"
+msgstr "óÐÅÃÉÆÉÞÎÁÑ ÄÌÑ RFS ÏÛÉÂËÁ"
 
-#: elf/cache.c:154
-msgid "mmap of cache file failed.\n"
-msgstr "ÏÔÏÂÒÁÖÅÎÉÅ ËÜÛ-ÆÁÊÌÁ × ÐÁÍÑÔØ ÎÅ ÕÄÁÌÏÓØ.\n"
+#: sysdeps/gnu/errlist.c:1285
+msgid "Name not unique on network"
+msgstr "éÍÑ ÎÅ ÕÎÉËÁÌØÎÏ × ÓÅÔÉ"
 
-#: elf/cache.c:158 elf/cache.c:168
-msgid "File is not a cache file.\n"
-msgstr "üÔÏ ÎÅ ËÜÛ-ÆÁÊÌ.\n"
+#: sysdeps/gnu/errlist.c:1293
+msgid "File descriptor in bad state"
+msgstr "äÅÓËÒÉÐÔÏÒ ÆÁÊÌÁ × ÐÌÏÈÏÍ ÓÏÓÔÏÑÎÉÉ"
 
-#: elf/cache.c:201 elf/cache.c:211
-#, c-format
-msgid "%d libs found in cache `%s'\n"
-msgstr "%d ÂÉÂÌÉÏÔÅË ÎÁÊÄÅÎÏ × ËÜÛÅ `%s'\n"
+#: sysdeps/gnu/errlist.c:1301
+msgid "Remote address changed"
+msgstr "õÄÁÌÅÎÎÙÊ ÁÄÒÅÓ ÂÙÌ ÉÚÍÅÎÅÎ"
 
-#: elf/cache.c:410
-#, c-format
-msgid "Can't remove old temporary cache file %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÓÔÁÒÙÊ ×ÒÅÍÅÎÎÙÊ ËÜÛ-ÆÁÊÌ %s"
+#: sysdeps/gnu/errlist.c:1309
+msgid "Can not access a needed shared library"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÏÌÕÞÉÔØ ÄÏÓÔÕРˠÎÕÖÎÏÊ ÒÁÚÄÅÌÑÅÍÏÊ ÂÉÂÌÉÏÔÅËÅ"
 
-#: elf/cache.c:417
-#, c-format
-msgid "Can't create temporary cache file %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÒÅÍÅÎÎÙÊ ËÜÛ-ÆÁÊÌ %s"
+#: sysdeps/gnu/errlist.c:1317
+msgid "Accessing a corrupted shared library"
+msgstr "ïÂÒÁÝÅÎÉÅ Ë ÐÏ×ÒÅÖÄÅÎÎÏÊ ÒÁÚÄÅÌÑÅÍÏÊ ÂÉÂÌÉÏÔÅËÅ"
 
-#: elf/cache.c:425 elf/cache.c:434 elf/cache.c:438
-msgid "Writing of cache data failed"
-msgstr "úÁÐÉÓØ ÄÁÎÎÙÈ ËÜÛÁ ÎÅÕÓÐÅÛÎÁ"
+#: sysdeps/gnu/errlist.c:1325
+msgid ".lib section in a.out corrupted"
+msgstr "óÅËÃÉÑ .lib × a.out ÐÏ×ÒÅÖÄÅÎÁ"
 
-#: elf/cache.c:442
-msgid "Writing of cache data failed."
-msgstr "úÁÐÉÓØ ÄÁÎÎÙÈ ËÜÛÁ ÎÅÕÓÐÅÛÎÁ."
+#: sysdeps/gnu/errlist.c:1333
+msgid "Attempting to link in too many shared libraries"
+msgstr "ðÏÐÙÔËÁ ÐÏÄËÌÀÞÉÔØ ÓÌÉÛËÏÍ ÍÎÏÇÏ ÒÁÚÄÅÌÑÅÍÙÊ ÂÉÂÌÉÏÔÅË"
 
-#: elf/cache.c:449
-#, c-format
-msgid "Changing access rights of %s to %#o failed"
-msgstr "éÚÍÅÎÅÎÉÅ ÐÒÁ× ÄÏÓÔÕÐÁ ÄÌÑ %s ÎÁ %#o ÎÅÕÓÐÅÛÎÏ"
+#: sysdeps/gnu/errlist.c:1341
+msgid "Cannot exec a shared library directly"
+msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÅÐÏÓÒÅÄÓÔ×ÅÎÎÏ ×ÙÐÏÌÎÉÔØ ÒÁÚÄÅÌÑÅÍÕÀ ÂÉÂÌÉÏÔÅËÕ"
 
-#: elf/cache.c:454
-#, c-format
-msgid "Renaming of %s to %s failed"
-msgstr "ðÅÒÅÉÍÅÎÏ×ÁÎÉÅ %s × %s ÎÅÕÓÐÅÛÎÏ"
+#: sysdeps/gnu/errlist.c:1349
+msgid "Streams pipe error"
+msgstr ""
 
-#: elf/dl-close.c:128
-msgid "shared object not open"
-msgstr "ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔ ÎÅ ÏÔËÒÙÔ"
+#: sysdeps/gnu/errlist.c:1357
+msgid "Structure needs cleaning"
+msgstr "óÔÒÕËÔÕÒÕ ÎÅÏÂÈÏÄÉÍÏ ÐÏÞÉÓÔÉÔØ"
 
-#: elf/dl-close.c:531 elf/dl-open.c:454
-msgid "TLS generation counter wrapped!  Please send report with the 'glibcbug' script."
+#: sysdeps/gnu/errlist.c:1365
+msgid "Not a XENIX named type file"
 msgstr ""
 
-#: elf/dl-deps.c:111 elf/dl-open.c:183
-msgid "DST not allowed in SUID/SGID programs"
-msgstr "DST ÎÅ ÄÏÐÕÓËÁÅÔÓÑ × ÐÒÏÇÒÁÍÍÁÈ Ó SUID/SGID"
+#: sysdeps/gnu/errlist.c:1373
+msgid "No XENIX semaphores available"
+msgstr "óÅÍÁÆÏÒÙ XENIX ÎÅÄÏÓÔÕÐÎÙ"
 
-#: elf/dl-deps.c:124
-msgid "empty dynamics string token substitution"
+#: sysdeps/gnu/errlist.c:1381
+msgid "Is a named type file"
 msgstr ""
 
-#: elf/dl-deps.c:130
-#, c-format
-msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n"
-msgstr ""
+#: sysdeps/gnu/errlist.c:1389
+msgid "Remote I/O error"
+msgstr "ïÛÉÂËÁ ÕÄÁÌÅÎÎÏÇÏ ××ÏÄÁ/×Ù×ÏÄÁ"
 
-#: elf/dl-deps.c:461
-msgid "cannot allocate dependency list"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÓÐÉÓÏË ÚÁ×ÉÓÉÍÏÓÔÅÊ"
+#: sysdeps/gnu/errlist.c:1397
+msgid "No medium found"
+msgstr "îÏÓÉÔÅÌØ ÎÅ ÎÁÊÄÅÎ"
 
-#: elf/dl-deps.c:494 elf/dl-deps.c:549
-msgid "cannot allocate symbol search list"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÓÐÉÓÏË ÐÏÉÓËÁ ÓÉÍ×ÏÌÏ×"
+#: sysdeps/gnu/errlist.c:1405
+msgid "Wrong medium type"
+msgstr "îÅÐÒÁ×ÉÌØÎÙÊ ÔÉРÎÏÓÉÔÅÌÑ"
 
-#: elf/dl-deps.c:534
-msgid "Filters not supported with LD_TRACE_PRELINKING"
-msgstr "æÉÌØÔÒÙ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ Ó LD_TRACE_PRELINKING"
+#: sysdeps/gnu/errlist.c:1413
+msgid "Required key not available"
+msgstr "ôÒÅÂÕÅÍÙÊ ËÌÀÞ ÎÅÄÏÓÔÕÐÅÎ"
 
-#: elf/dl-error.c:75
-msgid "DYNAMIC LINKER BUG!!!"
-msgstr "ïûéâëá äéîáíéþåóëïçï ëïíðïîï÷ýéëá!!!"
+#: sysdeps/gnu/errlist.c:1421
+msgid "Key has expired"
+msgstr "÷ÒÅÍÑ ÖÉÚÎÉ ËÌÀÞÁ ÉÓÔÅËÌÏ"
 
-#: elf/dl-error.c:108
-msgid "error while loading shared libraries"
-msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁÇÒÕÚËÅ ÒÁÚÄÅÌÑÅÍÙÈ ÂÉÂÌÉÏÔÅË"
+#: sysdeps/gnu/errlist.c:1429
+msgid "Key has been revoked"
+msgstr "ëÌÀÞ ÂÙÌ ÏÔÏÚ×ÁÎ"
 
-#: elf/dl-load.c:347
-msgid "cannot allocate name record"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÚÁÐÉÓØ ÉÍÅÎÉ"
+#: sysdeps/gnu/errlist.c:1437
+msgid "Key was rejected by service"
+msgstr "ëÌÀÞ ÂÙÌ ÏÔ×ÅÒÇÎÕÔ ÓÌÕÖÂÏÊ"
 
-#: elf/dl-load.c:449 elf/dl-load.c:528 elf/dl-load.c:648 elf/dl-load.c:743
-msgid "cannot create cache for search path"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÜÛ ÄÌÑ ÐÕÔÅÊ ÐÏÉÓËÁ"
+#: sysdeps/gnu/errlist.c:1445
+msgid "Owner died"
+msgstr "÷ÌÁÄÅÌÅàÕÍÅÒ"
 
-#: elf/dl-load.c:551
-msgid "cannot create RUNPATH/RPATH copy"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÏÐÉÀ RUNPATH/RPATH"
+#: sysdeps/gnu/errlist.c:1453
+msgid "State not recoverable"
+msgstr "óÏÓÔÏÑÎÉÅ ÎÅÌØÚÑ ×ÏÓÓÔÁÎÏ×ÉÔØ"
 
-#: elf/dl-load.c:634
-msgid "cannot create search path array"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÍÁÓÓÉ× ÐÕÔÅÊ ÐÏÉÓËÁ"
+#: sysdeps/mach/_strerror.c:57
+msgid "Error in unknown error system: "
+msgstr "ïÛÉÂËÁ × ÎÅÉÚ×ÅÓÔÎÏÊ ÓÉÓÔÅÍÅ ÏÛÉÂÏË: "
 
-#: elf/dl-load.c:830
-msgid "cannot stat shared object"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat ÄÌÑ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ"
+#: sysdeps/posix/gai_strerror-strs.h:1
+msgid "Address family for hostname not supported"
+msgstr "óÅÍÅÊÓÔ×Ï ÁÄÒÅÓÏ× ÎÅ ÐÏÄÄÅÒÖÉ×ÁÔÓÑ ÄÌÑ ÄÁÎÎÏÇÏ ÉÍÅÎÉ ÈÏÓÔÁ"
 
-#: elf/dl-load.c:874
-msgid "cannot open zero fill device"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÆÁÊÌ-ÉÓÔÏÞÎÉË ÎÕÌÅÊ"
+#: sysdeps/posix/gai_strerror-strs.h:2
+msgid "Temporary failure in name resolution"
+msgstr "÷ÒÅÍÅÎÎÙÊ ÓÂÏÊ × ÒÁÚÒÅÛÅÎÉÉ ÉÍÅÎ"
 
-#: elf/dl-load.c:883 elf/dl-load.c:1929
-msgid "cannot create shared object descriptor"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÄÅÓËÒÉÐÔÏÒ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ"
+#: sysdeps/posix/gai_strerror-strs.h:3
+msgid "Bad value for ai_flags"
+msgstr "îÅÐÒÁ×ÉÌØÎÏÅ ÚÎÁÞÅÎÉÅ ÄÌÑ ai_flags"
 
-#: elf/dl-load.c:902 elf/dl-load.c:1470 elf/dl-load.c:1553
-msgid "cannot read file data"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÏÞÉÔÁÔØ ÄÁÎÎÙÅ ÆÁÊÌÁ"
+#: sysdeps/posix/gai_strerror-strs.h:4
+msgid "Non-recoverable failure in name resolution"
+msgstr "îÅÉÓÐÒÁ×ÉÍÁÑ ÏÛÉÂËÁ × ÒÁÚÒÅÛÅÎÉÉ ÉÍÅÎ"
 
-#: elf/dl-load.c:946
-msgid "ELF load command alignment not page-aligned"
-msgstr "×ÙÒÁ×ÎÉ×ÁÎÉÅ ËÏÍÁÎÄÙ ÚÁÇÒÕÚËÉ ELF ÎÅ ×ÙÒÏ×ÎÅÎÏ ÐÏ ÓÔÒÁÎÉÃÅ"
+#: sysdeps/posix/gai_strerror-strs.h:5
+msgid "ai_family not supported"
+msgstr "ai_family ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
 
-#: elf/dl-load.c:953
-msgid "ELF load command address/offset not properly aligned"
-msgstr "ÁÄÒÅÓ/ÓÍÅÝÅÎÉÅ ËÏÍÁÎÄÙ ÚÁÇÒÕÚËÉ ELF ÎÅ ×ÙÒÏ×ÎÅÎÏ ÐÒÁ×ÉÌØÎÏ"
+#: sysdeps/posix/gai_strerror-strs.h:6
+msgid "Memory allocation failure"
+msgstr "ïÛÉÂËÁ ×ÙÄÅÌÅÎÉÑ ÐÁÍÑÔÉ"
 
-#: elf/dl-load.c:1037
-msgid "cannot allocate TLS data structures for initial thread"
-msgstr ""
+#: sysdeps/posix/gai_strerror-strs.h:7
+msgid "No address associated with hostname"
+msgstr "ó ÉÍÅÎÅÍ ÈÏÓÔÁ ÎÅ Ó×ÑÚÁÎÏ ÎÉ ÏÄÎÏÇÏ ÁÄÒÅÓÁ"
 
-#: elf/dl-load.c:1061
-msgid "cannot handle TLS data"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÂÒÁÂÏÔÁÔØ ÄÁÎÎÙÅ TLS"
+#: sysdeps/posix/gai_strerror-strs.h:8
+msgid "Name or service not known"
+msgstr "éÍÑ ÉÌÉ ÓÌÕÖÂÁ ÎÅ ÉÚ×ÅÓÔÎÙ"
 
-#: elf/dl-load.c:1075
-msgid "object file has no loadable segments"
-msgstr "× ÏÂßÅËÔÎÏÍ ÆÁÊÌÅ ÎÅÔ ÚÁÇÒÕÖÁÅÍÙÈ ÓÅÇÍÅÎÔÏ×"
+#: sysdeps/posix/gai_strerror-strs.h:9
+msgid "Servname not supported for ai_socktype"
+msgstr "Servname ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ÄÌÑ ai_socktype"
 
-#: elf/dl-load.c:1110
-msgid "failed to map segment from shared object"
-msgstr "ÓÂÏÊ ÏÔÏÂÒÁÖÅÎÉÑ ÓÅÇÍÅÎÔÁ ÉÚ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ"
+#: sysdeps/posix/gai_strerror-strs.h:10
+msgid "ai_socktype not supported"
+msgstr "ai_socktype ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ"
 
-#: elf/dl-load.c:1135
-msgid "cannot dynamically load executable"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÄÉÎÁÍÉÞÅÓËÉ ÚÁÇÒÕÚÉÔØ ÉÓÐÏÌÎÑÅÍÙÊ ÆÁÊÌ"
+#: sysdeps/posix/gai_strerror-strs.h:11
+msgid "System error"
+msgstr "óÉÓÔÅÍÎÁÑ ÏÛÉÂËÁ"
 
-#: elf/dl-load.c:1191
-msgid "cannot change memory protections"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÉÚÍÅÎÉÔØ ÚÁÝÉÔÕ ÐÁÍÑÔÉ"
+#: sysdeps/posix/gai_strerror-strs.h:12
+msgid "Processing request in progress"
+msgstr "ïÂÒÁÂÏÔËÁ ÚÁÐÒÏÓÁ ÐÒÏÄÏÌÖÁÅÔÓÑ"
 
-#: elf/dl-load.c:1210
-msgid "cannot map zero-fill pages"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ ÓÔÒÁÎÉÃÙ ÚÁÐÏÌÎÅÎÉÑ ÎÕÌÑÍÉ"
+#: sysdeps/posix/gai_strerror-strs.h:13
+msgid "Request canceled"
+msgstr "úÁÐÒÏÓ ÏÔÍÅÎÅÎ"
 
-#: elf/dl-load.c:1228
-msgid "cannot allocate memory for program header"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÚÁÇÏÌÏ×ÏË ÐÒÏÇÒÁÍÍÙ"
+#: sysdeps/posix/gai_strerror-strs.h:14
+msgid "Request not canceled"
+msgstr "úÁÐÒÏÓ ÎÅ ÏÔÍÅÎÅÎ"
 
-#: elf/dl-load.c:1259
-msgid "object file has no dynamic section"
-msgstr "× ÏÂßÅËÔÎÏÍ ÆÁÊÌÅ ÎÅÔ ÄÉÎÁÍÉÞÅÓËÏÊ ÓÅËÃÉÉ"
+#: sysdeps/posix/gai_strerror-strs.h:15
+msgid "All requests done"
+msgstr "÷ÓÅ ÚÁÐÒÏÓÙ ×ÙÐÏÌÎÅÎÙ"
 
-#: elf/dl-load.c:1299
-msgid "shared object cannot be dlopen()ed"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÐÒÉÍÅÎÉÔØ dlopen() Ë ÒÁÚÄÅÌÑÅÍÏÍÕ ÏÂßÅËÔÕ"
+#: sysdeps/posix/gai_strerror-strs.h:16
+msgid "Interrupted by a signal"
+msgstr "ðÒÅÒ×ÁÎÏ ÐÏ ÓÉÇÎÁÌÕ"
 
-#: elf/dl-load.c:1322
-msgid "cannot create searchlist"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÐÉÓÏË ÐÏÉÓËÁ"
+#: sysdeps/posix/gai_strerror-strs.h:17
+msgid "Parameter string not correctly encoded"
+msgstr "îÅÐÒÁ×ÉÌØÎÏ ÚÁËÏÄÉÒÏ×ÁÎÁ ÓÔÒÏËÁ ÐÁÒÁÍÅÔÒÁ"
 
-#: elf/dl-load.c:1352
-msgid "cannot enable executable stack as shared object requires"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÚÁÄÅÊÓÔ×Ï×ÁÔØ ÉÓÐÏÌÎÑÅÍÙÊ ÓÔÅË, ËÁË ÔÒÅÂÕÅÔ ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔ"
+#: sysdeps/unix/siglist.c:26
+msgid "Signal 0"
+msgstr "óÉÇÎÁÌ 0"
 
-#: elf/dl-load.c:1470
-msgid "file too short"
-msgstr "ÆÁÊÌ ÓÌÉÛËÏÍ ÍÁÌ"
+#: sysdeps/unix/siglist.c:32
+msgid "IOT trap"
+msgstr "ìÏ×ÕÛËÁ IOT"
 
-#: elf/dl-load.c:1493
-msgid "invalid ELF header"
-msgstr "ÎÅ×ÅÒÎÙÊ ÚÁÇÏÌÏ×ÏË ELF"
+#: sysdeps/unix/sysv/linux/i386/readelflib.c:49
+#, c-format
+msgid "%s is for unknown machine %d.\n"
+msgstr "%s ÐÒÅÄÎÁÚÎÁÞÅΠÄÌÑ ÎÅÉÚ×ÅÓÔÎÏÊ ÍÁÛÉÎÙ %d.\n"
 
-#: elf/dl-load.c:1502
-msgid "ELF file data encoding not big-endian"
-msgstr "ËÏÄÉÒÏ×ËÁ ÄÁÎÎÙÈ × ELF-ÆÁÊÌÅ ÎÅ ÔÕÐÏËÏÎÅÞÎÁÑ"
+#: sysdeps/unix/sysv/linux/ia64/makecontext.c:63
+#, c-format
+msgid "makecontext: does not know how to handle more than 8 arguments\n"
+msgstr "makecontext: ÎÅÔ ×ÏÚÍÏÖÎÏÓÔÉ ÏÂÒÁÂÏÔÁÔØ ÂÏÌÅÅ ×ÏÓØÍÉ ÁÒÇÕÍÅÎÔÏ×\n"
 
-#: elf/dl-load.c:1504
-msgid "ELF file data encoding not little-endian"
-msgstr "ËÏÄÉÒÏ×ËÁ ÄÁÎÎÙÈ × ELF-ÆÁÊÌÅ ÎÅ ÏÓÔÒÏËÏÎÅÞÎÁÑ"
+#: sysdeps/unix/sysv/linux/lddlibc4.c:64
+#, c-format
+msgid "cannot open `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ `%s'"
 
-#: elf/dl-load.c:1508
-msgid "ELF file version ident does not match current one"
-msgstr "ÉÄÅÎÔÉÆÉËÁÔÏÒ ×ÅÒÓÉÉ ELF-ÆÁÊÌÁ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÔÅËÕÝÅÊ ×ÅÒÓÉÉ"
+#: sysdeps/unix/sysv/linux/lddlibc4.c:68
+#, c-format
+msgid "cannot read header from `%s'"
+msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÞÉÔÁÔØ ÚÁÇÏÌÏ×ÏË ÉÚ `%s'"
 
-#: elf/dl-load.c:1512
-msgid "ELF file OS ABI invalid"
-msgstr "ÎÅ×ÅÒÎÙÊ ABI ïó ELF-ÆÁÊÌÁ"
+#: timezone/zdump.c:215
+msgid "lacks alphabetic at start"
+msgstr "×ÎÁÞÁÌÅ ÎÅÔ ÂÕË×Ù"
 
-#: elf/dl-load.c:1514
-msgid "ELF file ABI version invalid"
-msgstr "ÎÅ×ÅÒÎÁÑ ×ÅÒÓÉÑ ABI ELF-ÆÁÊÌÁ"
+#: timezone/zdump.c:217
+msgid "has fewer than 3 alphabetics"
+msgstr "ÓÏÄÅÒÖÉÔ ÍÅÎÅÅ 3 ÂÕË×"
 
-#: elf/dl-load.c:1517
-msgid "internal error"
-msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ"
+#: timezone/zdump.c:219
+msgid "has more than 6 alphabetics"
+msgstr "ÓÏÄÅÒÖÉÔ ÂÏÌÅÅ 6 ÂÕË×"
 
-#: elf/dl-load.c:1524
-msgid "ELF file version does not match current one"
-msgstr "×ÅÒÓÉÑ ELF-ÆÁÊÌÁ ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÔÅËÕÝÅÊ ×ÅÒÓÉÉ"
+#: timezone/zdump.c:227
+msgid "differs from POSIX standard"
+msgstr "ÏÔÌÉÞÁÅÔÓÑ ÏÔ ÓÔÁÎÄÁÒÔÁ POSIX"
 
-# ???
-#: elf/dl-load.c:1532
-msgid "ELF file's phentsize not the expected size"
-msgstr "phentsize ELF-ÆÁÊÌÁ ÎÅ ÓÏ×ÐÁÄÁÅÔ Ó ÏÖÉÄÁÅÍÙÍ ÒÁÚÍÅÒÏÍ"
+#: timezone/zdump.c:233
+#, c-format
+msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n"
+msgstr "%s: ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: ÚÏÎÁ \"%s\" ÓÏËÒÁÝÅÎÉÅ \"%s\" %s\n"
 
-#: elf/dl-load.c:1538
-msgid "only ET_DYN and ET_EXEC can be loaded"
-msgstr "ÍÏÖÎÏ ÚÁÇÒÕÚÉÔØ ÔÏÌØËÏ ET_DYN É ET_EXEC"
+#: timezone/zdump.c:284
+#, c-format
+msgid "%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"
+msgstr "%s: ÉÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ --version ] [ -v ] [ -c [ÐÅÒ×ÙÊ-ÇÏÄ,]ÐÏÓÌÅÄÎÉÊ-ÇÏÄ ] ÉÍÑ-ÚÏÎÙ ...\n"
 
-#: elf/dl-load.c:1944
-msgid "cannot open shared object file"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔÎÙÊ ÆÁÊÌ"
+#: timezone/zdump.c:301
+#, c-format
+msgid "%s: wild -c argument %s\n"
+msgstr ""
 
-#: elf/dl-lookup.c:265 elf/dl-lookup.c:443
-msgid "relocation error"
-msgstr "ÏÛÉÂËÁ ÐÅÒÅÍÅÝÅÎÉÑ"
+#: timezone/zdump.c:392
+msgid "Error writing to standard output"
+msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ ÎÁ ÓÔÁÎÄÁÒÔÎÙÊ ×Ù×ÏÄ"
 
-#: elf/dl-open.c:111
-msgid "cannot extend global scope"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÒÁÓÛÉÒÉÔØ ÇÌÏÂÁÌØÎÕÀ ÏÂÌÁÓÔØ"
+#: timezone/zdump.c:415
+#, c-format
+msgid "%s: use of -v on system with floating time_t other than float or double\n"
+msgstr "%s: ÉÓÐÏÌØÚÏ×ÁÎÉÅ -v ÎÁ ÓÉÓÔÅÍÅ, ÇÄÅ time_t ÉÍÅÅÔ ÔÉРӠÐÌÁ×ÁÀÝÅÊ ÚÁÐÑÔÏÊ, ÏÔÌÉÞÎÙÊ ÏÔ float ÉÌÉ double\n"
 
-#: elf/dl-open.c:214
-msgid "empty dynamic string token substitution"
-msgstr ""
+#: timezone/zic.c:371
+#, c-format
+msgid "%s: Memory exhausted: %s\n"
+msgstr "%s: ðÁÍÑÔØ ÉÓÞÅÒÐÁÎÁ: %s\n"
 
-#: elf/dl-open.c:361 elf/dl-open.c:372
-msgid "cannot create scope list"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÐÉÓÏË ÏÂÌÁÓÔÅÊ"
+#: timezone/zic.c:430
+#, c-format
+msgid "\"%s\", line %d: %s"
+msgstr "\"%s\", ÓÔÒÏËÁ %d: %s"
 
-#: elf/dl-open.c:434
-msgid "cannot create TLS data structures"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÔÒÕËÔÕÒÙ ÄÁÎÎÙÈ TLS"
+#: timezone/zic.c:433
+#, c-format
+msgid " (rule from \"%s\", line %d)"
+msgstr " (ÐÒÁ×ÉÌÏ ÉÚ \"%s\", ÓÔÒÏËÁ %d)"
 
-#: elf/dl-open.c:496
-msgid "invalid mode for dlopen()"
-msgstr "ÎÅ×ÅÒÎÙÊ ÒÅÖÉÍ ÄÌÑ dlopen()"
+#: timezone/zic.c:445
+msgid "warning: "
+msgstr "ÐÒÅÄÕÐÒÅÖÄÅÎÉÅ: "
 
-#: elf/dl-reloc.c:57
-msgid "cannot allocate memory in static TLS block"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ × ÓÔÁÔÉÞÎÏÍ ÂÌÏËÅ TLS"
+#: timezone/zic.c:455
+#, c-format
+msgid ""
+"%s: usage is %s [ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n"
+"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"
+msgstr ""
+"%s: ÉÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ --version ] [ -s ] [ -v ] [ -l ÍÅÓÔÎÏÅ-×ÒÅÍÑ ] [ -p ÐÒÁ×ÉÌÁ-posix ] \\\n"
+"\t[ -d ËÁÔÁÌÏÇ ] [ -L ×ÉÓÏËÏÓÎÙÅ-ÓÅËÕÎÄÙ ] [ -y yearistype ] [ ÉÍÑ-ÆÁÊÌÁ ... ]\n"
 
-#: elf/dl-reloc.c:176
-msgid "cannot make segment writable for relocation"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÓÅÇÍÅÎÔ ÚÁÐÉÓÙ×ÁÅÍÙÍ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ"
+#: timezone/zic.c:503
+#, c-format
+msgid "%s: More than one -d option specified\n"
+msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -d\n"
 
-#: elf/dl-reloc.c:277
+#: timezone/zic.c:513
 #, c-format
-msgid "%s: profiler found no PLTREL in object %s\n"
-msgstr "%s: ÐÒÏÆÁÊÌÅÒ ÎÅ ÎÁÛÅÌ PLTREL × ÏÂßÅËÔÅ %s\n"
+msgid "%s: More than one -l option specified\n"
+msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -l\n"
 
-#: elf/dl-reloc.c:289
+#: timezone/zic.c:523
 #, c-format
-msgid "%s: profiler out of memory shadowing PLTREL of %s\n"
-msgstr ""
+msgid "%s: More than one -p option specified\n"
+msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -p\n"
 
-#: elf/dl-reloc.c:304
-msgid "cannot restore segment prot after reloc"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÏÓÓÔÁÎÏ×ÉÔØ ÚÁÝÉÔÕ ÓÅÇÍÅÎÔÁ ÐÏÓÌÅ ÐÅÒÅÍÅÝÅÎÉÑ"
+#: timezone/zic.c:533
+#, c-format
+msgid "%s: More than one -y option specified\n"
+msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -y\n"
 
-#: elf/dl-sym.c:74 elf/dl-sym.c:145
-msgid "RTLD_NEXT used in code not dynamically loaded"
-msgstr "RTLD_NEXT ÉÓÐÏÌØÚÏ×ÁÎÏ × ÎÅ ÄÉÎÁÍÉÞÅÓËÉ ÚÁÇÒÕÖÅÎÎÏÍ ËÏÄÅ"
+#: timezone/zic.c:543
+#, c-format
+msgid "%s: More than one -L option specified\n"
+msgstr "%s: úÁÄÁÎÏ ÂÏÌÅÅ ÏÄÎÏÇÏ ËÌÀÞÁ -L\n"
 
-#: elf/dl-version.c:303
-msgid "cannot allocate version reference table"
-msgstr ""
+#: timezone/zic.c:592
+msgid "link to link"
+msgstr "ÓÓÙÌËÁ ÎÁ ÓÓÙÌËÕ"
 
-#: elf/ldconfig.c:122
-msgid "Print cache"
-msgstr "îÁÐÅÞÁÔÁÔØ ËÜÛ"
+#: timezone/zic.c:657
+msgid "hard link failed, symbolic link used"
+msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÄÅÌÁÔØ ÖÅÓÔËÕÀ ÓÓÙÌËÕ, ÉÓÐÏÌØÚÕÅÔÓÑ ÓÉÍ×ÏÌØÎÁÑ"
 
-#: elf/ldconfig.c:123
-msgid "Generate verbose messages"
-msgstr "çÅÎÅÒÉÒÏ×ÁÔØ ÐÏÄÒÏÂÎÙÅ ÓÏÏÂÝÅÎÉÑ"
+#: timezone/zic.c:665
+#, c-format
+msgid "%s: Can't link from %s to %s: %s\n"
+msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÓÄÅÌÁÔØ ÓÓÙÌËÕ Ó %s ÎÁ %s: %s\n"
 
-#: elf/ldconfig.c:124
-msgid "Don't build cache"
-msgstr "îÅ ÓÔÒÏÉÔØ ËÜÛ"
+#: timezone/zic.c:774 timezone/zic.c:776
+msgid "same rule name in multiple files"
+msgstr "ÏÄÉÎÁËÏ×ÏÅ ÉÍÑ ÐÒÁ×ÉÌÁ × ÎÅÓËÏÌØËÉÈ ÆÁÊÌÁÈ"
 
-#: elf/ldconfig.c:125
-msgid "Don't generate links"
-msgstr "îÅ ÇÅÎÅÒÉÒÏ×ÁÔØ ÓÓÙÌËÉ"
+#: timezone/zic.c:817
+msgid "unruly zone"
+msgstr "ÎÅ ÐÏÄÞÉÎÑÀÝÁÑÓÑ ÐÒÁ×ÉÌÁÍ ÚÏÎÁ"
+
+#: timezone/zic.c:824
+#, c-format
+msgid "%s in ruleless zone"
+msgstr "%s × ÚÏÎÅ ÂÅÚ ÐÒÁ×ÉÌ"
+
+#: timezone/zic.c:845
+msgid "standard input"
+msgstr "ÓÔÁÎÄÁÒÔÎÙÊ ××ÏÄ"
+
+#: timezone/zic.c:850
+#, c-format
+msgid "%s: Can't open %s: %s\n"
+msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ %s: %s\n"
+
+#: timezone/zic.c:861
+msgid "line too long"
+msgstr "ÓÔÒÏËÁ ÓÌÉÛËÏÍ ÄÌÉÎÎÁÑ"
+
+#: timezone/zic.c:881
+msgid "input line of unknown type"
+msgstr "×ÈÏÄÎÁÑ ÓÔÒÏËÁ ÎÅÉÚ×ÅÓÔÎÏÇÏ ÔÉÐÁ"
+
+#: timezone/zic.c:897
+#, c-format
+msgid "%s: Leap line in non leap seconds file %s\n"
+msgstr "%s: ÷ÉÓÏËÏÓÎÁÑ ÓÔÒÏËÁ ×ÅË ÆÁÊÌÁ ×ÉÓÏËÏÓÎÙÈ ÓÅËÕÎÄ %s\n"
+
+#: timezone/zic.c:904 timezone/zic.c:1325 timezone/zic.c:1350
+#, c-format
+msgid "%s: panic: Invalid l_value %d\n"
+msgstr "%s: ÐÁÎÉËÁ: îÅÄÏÐÕÓÔÉÍÏÅ l_value %d\n"
 
-#: elf/ldconfig.c:126
-msgid "Change to and use ROOT as root directory"
-msgstr "ðÅÒÅÊÔÉ × ROOT É ÉÓÐÏÌØÚÏ×ÁÔØ ÅÇÏ ËÁË ËÏÒÎÅ×ÏÊ ËÁÔÁÌÏÇ"
+#: timezone/zic.c:912
+#, c-format
+msgid "%s: Error reading %s\n"
+msgstr "%s: ïÛÉÂËÁ ÞÔÅÎÉÑ %s\n"
 
-#: elf/ldconfig.c:127
-msgid "Use CACHE as cache file"
-msgstr "éÓÐÏÌØÚÏ×ÁÔØ CACHE × ËÁÞÅÓÔ×Å ËÜÛ-ÆÁÊÌÁ"
+#: timezone/zic.c:919
+#, c-format
+msgid "%s: Error closing %s: %s\n"
+msgstr "%s: ïÛÉÂËÁ ÚÁËÒÙÔÉÑ %s: %s\n"
 
-#: elf/ldconfig.c:128
-msgid "Use CONF as configuration file"
-msgstr "éÓÐÏÌØÚÏ×ÁÔØ CONF × ËÁÞÅÓÔ×Å ËÏÎÆÉÇÕÒÁÃÉÏÎÎÏÇÏ ÆÁÊÌÁ"
+#: timezone/zic.c:924
+msgid "expected continuation line not found"
+msgstr "ÏÖÉÄÁÅÍÁÑ ÓÔÒÏËÁ ÐÒÏÄÏÌÖÅÎÉÑ ÎÅ ÎÁÊÄÅÎÁ"
 
-#: elf/ldconfig.c:129
-msgid "Only process directories specified on the command line.  Don't build cache."
-msgstr "ïÂÒÁÂÏÔÁÔØ ÔÏÌØËÏ ËÁÔÁÌÏÇÉ, ÕËÁÚÁÎÎÙÅ × ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÅ.  îÅ ÓÔÒÏÉÔØ ËÜÛ."
+#: timezone/zic.c:968
+msgid "24:00 not handled by pre-1998 versions of zic"
+msgstr "24:00 ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ ×ÅÒÓÉÑÍÉ zic ÓÔÁÒÛÅ 1998 ÇÏÄÁ"
 
-#: elf/ldconfig.c:130
-msgid "Manually link individual libraries."
-msgstr "÷ÒÕÞÎÕÀ ÓËÏÍÐÏÎÏ×ÁÔØ ÏÔÄÅÌØÎÙÅ ÂÉÂÌÉÏÔÅËÉ."
+#: timezone/zic.c:982
+msgid "wrong number of fields on Rule line"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Rule"
 
-#: elf/ldconfig.c:131
-msgid "Format to use: new, old or compat (default)"
-msgstr "éÓÐÏÌØÚÕÅÍÙÊ ÆÏÒÍÁÔ: new, old ÉÌÉ compat (ÐÏ ÕÍÏÌÞÁÎÉÀ)"
+#: timezone/zic.c:986
+msgid "nameless rule"
+msgstr "ÂÅÚÙÍÑÎÎÏÅ ÐÒÁ×ÉÌÏ"
 
-#: elf/ldconfig.c:139
-msgid "Configure Dynamic Linker Run Time Bindings."
-msgstr "ëÏÎÆÉÇÕÒÉÒÕÅÔ Ó×ÑÚÉ ×ÒÅÍÅÎÉ ×ÙÐÏÌÎÅÎÉÑ ÄÌÑ ÄÉÎÁÍÉÞÅÓËÏÇÏ ËÏÍÐÏÎÏ×ÝÉËÁ."
+#: timezone/zic.c:991
+msgid "invalid saved time"
+msgstr "ÎÅ×ÅÒÎÏÅ ÓÏÈÒÁÎÅÎÎÏÅ ×ÒÅÍÑ"
 
-#: elf/ldconfig.c:297
-#, c-format
-msgid "Path `%s' given more than once"
-msgstr "ðÕÔØ `%s' ÚÁÄÁΠÎÅÓËÏÌØËÏ ÒÁÚ"
+#: timezone/zic.c:1010
+msgid "wrong number of fields on Zone line"
+msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Zone"
 
-#: elf/ldconfig.c:341
+#: timezone/zic.c:1016
 #, c-format
-msgid "%s is not a known library type"
-msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÉÚ×ÅÓÔÎÙÍ ÔÉÐÏÍ ÂÉÂÌÉÏÔÅËÉ"
+msgid "\"Zone %s\" line and -l option are mutually exclusive"
+msgstr "ÓÔÒÏËÁ \"Zone %s\" É ËÌÀÞ -l ×ÚÁÉÍÎÏ ÉÓËÌÀÞÁÀÔÓÑ"
 
-#: elf/ldconfig.c:361
+#: timezone/zic.c:1024
 #, c-format
-msgid "Can't stat %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat %s"
+msgid "\"Zone %s\" line and -p option are mutually exclusive"
+msgstr "ÓÔÒÏËÁ \"Zone %s\" É ËÌÀÞ -p ×ÚÁÉÍÎÏ ÉÓËÌÀÞÁÀÔÓÑ"
 
-#: elf/ldconfig.c:431
+#: timezone/zic.c:1036
 #, c-format
-msgid "Can't stat %s\n"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat %s\n"
+msgid "duplicate zone name %s (file \"%s\", line %d)"
+msgstr "ÐÏ×ÔÏÒÎÏÅ ÉÍÑ ÚÏÎÙ %s (ÆÁÊÌ \"%s\", ÓÔÒÏËÁ %d)"
 
-#: elf/ldconfig.c:441
-#, c-format
-msgid "%s is not a symbolic link\n"
-msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ÓÉÍ×ÏÌØÎÏÊ ÓÓÙÌËÏÊ\n"
+#: timezone/zic.c:1052
+msgid "wrong number of fields on Zone continuation line"
+msgstr "ÎÅÐÒÁ×ÉÌØÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ ÐÒÏÄÏÌÖÅÎÉÑ Zone"
 
-#: elf/ldconfig.c:460
-#, c-format
-msgid "Can't unlink %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ ÓÓÙÌËÕ %s"
+#: timezone/zic.c:1092
+msgid "invalid UTC offset"
+msgstr "ÎÅ×ÅÒÎÏÅ ÓÍÅÝÅÎÉÅ ÏÔ UTC"
 
-#: elf/ldconfig.c:466
-#, c-format
-msgid "Can't link %s to %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ÓÓÙÌËÕ Ó %s ÎÁ %s"
+#: timezone/zic.c:1095
+msgid "invalid abbreviation format"
+msgstr "ÎÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÓÏËÒÁÝÅÎÉÑ"
 
-#: elf/ldconfig.c:472
-msgid " (changed)\n"
-msgstr " (ÉÍÅÎÅÎÏ)\n"
+#: timezone/zic.c:1122
+msgid "Zone continuation line end time is not after end time of previous line"
+msgstr "ËÏÎÅÞÎÏÅ ×ÒÅÍÑ × ÓÔÒÏËÅ ÐÒÏÄÏÌÖÅÎÉÑ Zone ÎÅ ÐÏÚÄÎÅÅ ËÏÎÅÞÎÏÇÏ ×ÒÅÍÅÎÉ × ÐÒÅÄÙÄÕÝÅÊ ÓÔÒÏËÅ"
 
-#: elf/ldconfig.c:474
-msgid " (SKIPPED)\n"
-msgstr " (ðòïðõýåîï)\n"
+#: timezone/zic.c:1150
+msgid "wrong number of fields on Leap line"
+msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Leap"
 
-#: elf/ldconfig.c:529
-#, c-format
-msgid "Can't find %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÎÁÊÔÉ %s"
+#: timezone/zic.c:1159
+msgid "invalid leaping year"
+msgstr "ÎÅ×ÅÒÎÙÊ ×ÉÓÏËÏÓÎÙÊ ÇÏÄ"
 
-#: elf/ldconfig.c:545
-#, c-format
-msgid "Can't lstat %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ lstat %s"
+#: timezone/zic.c:1174 timezone/zic.c:1280
+msgid "invalid month name"
+msgstr "ÎÅ×ÅÒÎÏÅ ÎÁÚ×ÁÎÉÅ ÍÅÓÑÃÁ"
 
-#: elf/ldconfig.c:552
-#, c-format
-msgid "Ignored file %s since it is not a regular file."
-msgstr "æÁÊÌ %s ÉÇÎÏÒÉÒÏ×ÁÎ, ÐÏÓËÏÌØËÕ ÜÔÏ ÎÅ ÏÂÙÞÎÙÊ ÆÁÊÌ"
+#: timezone/zic.c:1187 timezone/zic.c:1402 timezone/zic.c:1416
+msgid "invalid day of month"
+msgstr "ÎÅ×ÅÒÎÙÊ ÄÅÎØ ÍÅÓÑÃÁ"
 
-#: elf/ldconfig.c:560
-#, c-format
-msgid "No link created since soname could not be found for %s"
-msgstr "óÓÙÌËÁ ÎÅ ÓÏÚÄÁÎÁ, ÐÏÓËÏÌØËÕ ÄÌÑ %s ÎÅ ÂÙÌÏ ÎÁÊÄÅÎÏ soname"
+#: timezone/zic.c:1192
+msgid "time before zero"
+msgstr "×ÒÅÍÑ ÄÏ ÎÕÌÑ"
 
-#: elf/ldconfig.c:651
-#, c-format
-msgid "Can't open directory %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÔÁÌÏÇ %s"
+#: timezone/zic.c:1196
+msgid "time too small"
+msgstr "×ÒÅÍÑ ÓÌÉÛËÏÍ ÍÁÌÏ"
 
-#: elf/ldconfig.c:706 elf/ldconfig.c:753
-#, c-format
-msgid "Cannot lstat %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ lstat %s"
+#: timezone/zic.c:1200
+msgid "time too large"
+msgstr "×ÒÅÍÑ ÓÌÉÛËÏÍ ×ÅÌÉËÏ"
 
-#: elf/ldconfig.c:718
-#, c-format
-msgid "Cannot stat %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ stat %s"
+#: timezone/zic.c:1204 timezone/zic.c:1309
+msgid "invalid time of day"
+msgstr "ÎÅ×ÅÒÎÏÅ ×ÒÅÍÑ ÄÎÑ"
 
-#: elf/ldconfig.c:775 elf/readlib.c:92
-#, c-format
-msgid "Input file %s not found.\n"
-msgstr "÷ÈÏÄÎÏÊ ÆÁÊÌ %s ÎÅ ÎÁÊÄÅÎ.\n"
+#: timezone/zic.c:1223
+msgid "illegal CORRECTION field on Leap line"
+msgstr "ÎÅ×ÅÒÎÏÅ ÐÏÌÅ CORRECTION × ÓÔÒÏËÅ Leap"
 
-#: elf/ldconfig.c:826
-#, c-format
-msgid "libc5 library %s in wrong directory"
-msgstr "libc5-ÂÉÂÌÉÏÔÅËÁ %s × ÎÅÐÒÁ×ÉÌØÎÏÍ ËÁÔÁÌÏÇÅ"
+#: timezone/zic.c:1228
+msgid "illegal Rolling/Stationary field on Leap line"
+msgstr "ÎÅ×ÅÒÎÏÅ ÐÏÌÅ Rolling/Stationary × ÓÔÒÏËÅ Leap"
 
-#: elf/ldconfig.c:829
-#, c-format
-msgid "libc6 library %s in wrong directory"
-msgstr "libc6-ÂÉÂÌÉÏÔÅËÁ %s × ÎÅÐÒÁ×ÉÌØÎÏÍ ËÁÔÁÌÏÇÅ"
+#: timezone/zic.c:1244
+msgid "wrong number of fields on Link line"
+msgstr "ÎÅ×ÅÒÎÏÅ ÞÉÓÌÏ ÐÏÌÅÊ × ÓÔÒÏËÅ Link"
 
-#: elf/ldconfig.c:832
-#, c-format
-msgid "libc4 library %s in wrong directory"
-msgstr "libc4-ÂÉÂÌÉÏÔÅËÁ %s × ÎÅÐÒÁ×ÉÌØÎÏÍ ËÁÔÁÌÏÇÅ"
+#: timezone/zic.c:1248
+msgid "blank FROM field on Link line"
+msgstr "ÐÕÓÔÏÅ ÐÏÌÅ FROM × ÓÔÒÏËÅ Link"
 
-#: elf/ldconfig.c:859
-#, c-format
-msgid "libraries %s and %s in directory %s have same soname but different type."
-msgstr "ÂÉÂÌÉÏÔÅËÉ %s É %s × ËÁÔÁÌÏÇÅ %s ÉÍÅÀÔ ÏÄÉÎÁËÏ×ÙÊ soname, ÎÏ ÒÁÚÎÙÅ ÔÉÐÙ."
+#: timezone/zic.c:1252
+msgid "blank TO field on Link line"
+msgstr "ÐÕÓÔÏÅ ÐÏÌÅ TO × ÓÔÒÏËÅ Link"
 
-#: elf/ldconfig.c:962
-#, c-format
-msgid "Can't open configuration file %s"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÊ ÆÁÊÌ %s"
+#: timezone/zic.c:1329
+msgid "invalid starting year"
+msgstr "ÎÅ×ÅÒÎÙÊ ÎÁÞÁÌØÎÙÊ ÇÏÄ"
 
-#: elf/ldconfig.c:1033
-#, c-format
-msgid "relative path `%s' used to build cache"
-msgstr "ÄÌÑ ÐÏÓÔÒÏÅÎÉÑ ËÜÛÁ ÉÓÐÏÌØÚÏ×ÁΠÏÔÎÏÓÉÔÅÌØÎÙÊ ÐÕÔØ `%s'"
+#: timezone/zic.c:1333
+msgid "starting year too low to be represented"
+msgstr "ÎÁÞÁÌØÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ÍÁÌ É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ"
 
-#: elf/ldconfig.c:1057
-msgid "Can't chdir to /"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÐÅÒÅÊÔÉ × ËÁÔÁÌÏÇ /"
+#: timezone/zic.c:1335
+msgid "starting year too high to be represented"
+msgstr "ÎÁÞÁÌØÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ×ÅÌÉË É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ"
 
-#: elf/ldconfig.c:1099
-#, c-format
-msgid "Can't open cache file directory %s\n"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔËÒÙÔØ ËÁÔÁÌÏÇ ËÜÛ-ÆÁÊÌÁ %s\n"
+#: timezone/zic.c:1354
+msgid "invalid ending year"
+msgstr "ÎÅ×ÅÒÎÙÊ ËÏÎÅÞÎÙÊ ÇÏÄ"
 
-#: elf/readlib.c:98
-#, c-format
-msgid "Cannot fstat file %s.\n"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ×ÙÐÏÌÎÉÔØ fstat ÄÌÑ ÆÁÊÌÁ %s.\n"
+#: timezone/zic.c:1358
+msgid "ending year too low to be represented"
+msgstr "ËÏÎÅÞÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ÍÁÌ É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ"
 
-#: elf/readlib.c:108
-#, c-format
-msgid "File %s is too small, not checked."
-msgstr "æÁÊÌ %s ÓÌÉÛËÏÍ ÍÁÌ; ÎÅ ÂÙÌ ÐÒÏ×ÅÒÅÎ."
+#: timezone/zic.c:1360
+msgid "ending year too high to be represented"
+msgstr "ËÏÎÅÞÎÙÊ ÇÏÄ ÓÌÉÛËÏÍ ×ÅÌÉË É ÅÇÏ ÎÅ×ÏÚÍÏÖÎÏ ÍÁÛÉÎÎÏ ÐÒÅÄÓÔÁ×ÉÔØ"
+
+#: timezone/zic.c:1363
+msgid "starting year greater than ending year"
+msgstr "ÎÁÞÁÌØÎÙÊ ÇÏÄ ÂÏÌØÛÅ ËÏÎÅÞÎÏÇÏ"
+
+#: timezone/zic.c:1370
+msgid "typed single year"
+msgstr "ÏÄÉΠÔÉÐÉÚÉÒÏ×ÁÎÎÙÊ ÇÏÄ"
+
+#: timezone/zic.c:1407
+msgid "invalid weekday name"
+msgstr "ÎÅ×ÅÒÎÏÅ ÎÁÚ×ÁÎÉÑ ÄÎÑ ÎÅÄÅÌÉ"
 
-#: elf/readlib.c:117
+#: timezone/zic.c:1521
 #, c-format
-msgid "Cannot mmap file %s.\n"
-msgstr "îÅ×ÏÚÍÏÖÎÏ ÏÔÏÂÒÁÚÉÔØ × ÐÁÍÑÔØ ÆÁÊÌ %s.\n"
+msgid "%s: Can't remove %s: %s\n"
+msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÕÄÁÌÉÔØ %s: %s\n"
 
-#: elf/readlib.c:155
+#: timezone/zic.c:1531
 #, c-format
-msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n"
-msgstr "%s ÎÅ Ñ×ÌÑÅÔÓÑ ELF-ÆÁÊÌÏÍ -- Õ ÎÅÇÏ × ÎÁÞÁÌÅ ÎÅÐÒÁ×ÉÌØÎÙÅ ×ÏÌÛÅÂÎÙÅ ÂÁÊÔÙ.\n"
+msgid "%s: Can't create %s: %s\n"
+msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ %s: %s\n"
 
-#: elf/sprof.c:72
-msgid "Output selection:"
-msgstr "÷ÙÂÏÒ ÔÉÐÁ ×Ù×ÏÄÁ:"
+#: timezone/zic.c:1598
+#, c-format
+msgid "%s: Error writing %s\n"
+msgstr "%s: ïÛÉÂËÁ ÚÁÐÉÓÉ %s\n"
 
-#: elf/sprof.c:74
-msgid "print list of count paths and their number of use"
+#: timezone/zic.c:1789
+msgid "can't determine time zone abbreviation to use just after until time"
 msgstr ""
 
-#: elf/sprof.c:76
-msgid "generate flat profile with counts and ticks"
-msgstr "ÇÅÎÅÒÉÒÏ×ÁÔØ ÐÌÏÓËÉÊ ÐÒÏÆÉÌØ ÓÏ ÓÞÅÔÞÉËÁÍÉ É ÍÅÔËÁÍÉ"
-
-#: elf/sprof.c:77
-msgid "generate call graph"
-msgstr "ÇÅÎÅÒÉÒÏ×ÁÔØ ÇÒÁÆ ×ÙÚÏ×Ï×"
+#: timezone/zic.c:1832
+msgid "too many transitions?!"
+msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÐÅÒÅÈÏÄÏ×?!"
 
-#: elf/sprof.c:84
-msgid "Read and display shared object profiling data"
-msgstr "óÞÉÔÙ×ÁÅÔ É ÏÔÏÂÒÁÖÁÅÔ ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÅ ÄÁÎÎÙÅ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ"
+#: timezone/zic.c:1851
+msgid "internal error - addtype called with bad isdst"
+msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ -- addtype ×ÙÚ×ÁÎÁ Ó ÎÅÐÒÁ×ÉÌØÎÙÍ isdst"
 
-#: elf/sprof.c:87
-msgid "SHOBJ [PROFDATA]"
-msgstr "òáúä-ïâÿåëô [ðòïæ-äáîîùå]"
+#: timezone/zic.c:1855
+msgid "internal error - addtype called with bad ttisstd"
+msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ -- addtype ×ÙÚ×ÁÎÁ Ó ÎÅÐÒÁ×ÉÌØÎÙÍ ttisstd"
 
-#: elf/sprof.c:398
-#, c-format
-msgid "failed to load shared object `%s'"
-msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ ÒÁÚÄÅÌÑÅÍÙÊ ÏÂßÅËÔ `%s'"
+#: timezone/zic.c:1859
+msgid "internal error - addtype called with bad ttisgmt"
+msgstr "×ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ -- addtype ×ÙÚ×ÁÎÁ Ó ÎÅÐÒÁ×ÉÌØÎÙÍ ttisgmt"
 
-#: elf/sprof.c:407
-msgid "cannot create internal descriptors"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÎÕÔÒÅÎÎÉÅ ÄÅÓËÒÉÐÔÏÒÙ"
+#: timezone/zic.c:1878
+msgid "too many local time types"
+msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÔÉÐÏ× ÍÅÓÔÎÏÇÏ ×ÒÅÍÅÎÉ"
 
-#: elf/sprof.c:526
-#, c-format
-msgid "Reopening shared object `%s' failed"
-msgstr "óÂÏÊ ÐÏ×ÔÏÒÎÏÇÏ ÏÔËÒÙÔÉÑ ÒÁÚÄÅÌÑÅÍÏÇÏ ÏÂßÅËÔÁ `%s'"
+#: timezone/zic.c:1906
+msgid "too many leap seconds"
+msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ×ÉÓÏËÏÓÎÙÈ ÓÅËÕÎÄ"
 
-#: elf/sprof.c:534
-msgid "mapping of section headers failed"
-msgstr "ÏÔÏÂÒÁÖÅÎÉÅ ÚÁÇÏÌÏ×ËÏ× ÓÅËÃÉÊ ÎÅÕÓÐÅÛÎÏ"
+#: timezone/zic.c:1912
+msgid "repeated leap second moment"
+msgstr "ÐÏ×ÔÏÒÑÀÝÉÊÓÑ ÍÏÍÅÎÔ ×ÉÓÏËÏÓÎÏÊ ÓÅËÕÎÄÙ"
 
-#: elf/sprof.c:544
-msgid "mapping of section header string table failed"
-msgstr "ÏÔÏÂÒÁÖÅÎÉÅ ÔÁÂÌÉÃÙ ÓÔÒÏË ÉÚ ÚÁÇÏÌÏ×ËÁ ÓÅËÃÉÉ ÎÅÕÓÐÅÛÎÏ"
+#: timezone/zic.c:1964
+msgid "Wild result from command execution"
+msgstr "îÅÁÄÅË×ÁÔÎÙÊ ÒÅÚÕÌØÔÁÔ ×ÙÐÏÌÎÅÎÉÑ ËÏÍÁÎÄÙ"
 
-#: elf/sprof.c:564
+#: timezone/zic.c:1965
 #, c-format
-msgid "*** The file `%s' is stripped: no detailed analysis possible\n"
-msgstr "*** æÁÊÌ `%s' ÏÞÉÝÅÎ: ÐÏÄÒÏÂÎÙÊ ÁÎÁÌÉÚ ÎÅ×ÏÚÍÏÖÅÎ\n"
+msgid "%s: command was '%s', result was %d\n"
+msgstr "%s: ËÏÍÁÎÄÁ ÂÙÌÁ '%s', ÒÅÚÕÌØÔÁÔ ÂÙÌ %d\n"
 
-#: elf/sprof.c:594
-msgid "failed to load symbol data"
-msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ ÄÁÎÎÙÅ Ï ÓÉÍ×ÏÌÁÈ"
+#: timezone/zic.c:2062
+msgid "Odd number of quotation marks"
+msgstr "îÅÞÅÔÎÏÅ ÞÉÓÌÏ ËÁ×ÙÞÅË"
 
-#: elf/sprof.c:664
-msgid "cannot load profiling data"
-msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÅ ÄÁÎÎÙÅ"
+#: timezone/zic.c:2083 timezone/zic.c:2102
+msgid "time overflow"
+msgstr "ÐÅÒÅÐÏÌÎÅÎÉÅ ×ÒÅÍÅÎÉ"
 
-#: elf/sprof.c:673
-msgid "while stat'ing profiling data file"
-msgstr "ÐÒÉ ÏÐÅÒÁÃÉÉ stat ÎÁÄ ÆÁÊÌÏÍ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ"
+#: timezone/zic.c:2149
+msgid "use of 2/29 in non leap-year"
+msgstr "ÉÓÐÏÌØÚÏ×ÁÎÉÅ 29 ÆÅ×ÒÁÌÑ × ÎÅ×ÉÓÏËÏÓÎÏÍ ÇÏÄÕ"
 
-#: elf/sprof.c:681
-#, c-format
-msgid "profiling data file `%s' does not match shared object `%s'"
-msgstr "ÆÁÊÌ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ `%s' ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÒÁÚÄÅÌÑÅÍÏÍÕ ÏÂßÅËÔÕ `%s'"
+#: timezone/zic.c:2184
+msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic"
+msgstr "ÐÒÁ×ÉÌÏ ÐÅÒÅÈÏÄÉÔ ÚÁ ÎÁÞÁÌÏ/ËÏÎÅàÍÅÓÑÃÁ -- ÜÔÏ ÎÅ ÂÕÄÅÔ ÒÁÂÏÔÁÔØ × ×ÅÒÓÉÑÈ zic ÓÔÁÒÛÅ 2004 ÇÏÄÁ"
 
-#: elf/sprof.c:692
-msgid "failed to mmap the profiling data file"
-msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÔÏÂÒÁÚÉÔØ × ÐÁÍÑÔØ ÆÁÊÌ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ"
+#: timezone/zic.c:2218
+msgid "time zone abbreviation lacks alphabetic at start"
+msgstr "ÓÏËÒÁÝÅÎÉÅ ÞÁÓÏ×ÏÇÏ ÐÏÑÓÁ ÎÅ ÎÁÞÉÎÁÅÔÓÑ Ó ÂÕË×Ù"
 
-#: elf/sprof.c:700
-msgid "error while closing the profiling data file"
-msgstr "ÏÛÉÂËÁ ÐÒÉ ÚÁËÒÙÔÉÉ ÆÁÊÌÁ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ"
+#: timezone/zic.c:2220
+msgid "time zone abbreviation has more than 3 alphabetics"
+msgstr "ÓÏËÒÁÝÅÎÉÅ ÞÁÓÏ×ÏÇÏ ÐÏÑÓÁ ÓÏÄÅÒÖÉÔ ÂÏÌÅÅ ÔÒÅÈ ÂÕË×"
 
-#: elf/sprof.c:709 elf/sprof.c:779
-msgid "cannot create internal descriptor"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ×ÎÕÔÒÅÎÎÉÊ ÄÅÓËÒÉÐÔÏÒ"
+#: timezone/zic.c:2222
+msgid "time zone abbreviation has too many alphabetics"
+msgstr "ÓÏËÒÁÝÅÎÉÅ ÞÁÓÏ×ÏÇÏ ÐÏÑÓÁ ÓÏÄÅÒÖÉÔ ÓÌÉÛËÏÍ ÍÎÏÇÏ ÂÕË×"
 
-#: elf/sprof.c:755
+#: timezone/zic.c:2232
+msgid "time zone abbreviation differs from POSIX standard"
+msgstr "ÓÏËÒÁÝÅÎÉÅ ÞÁÓÏ×ÏÇÏ ÐÏÑÓÁ ÏÔÌÉÞÁÅÔÓÑ ÏÔ ÓÔÁÎÄÁÒÔÁ POSIX"
+
+#: timezone/zic.c:2244
+msgid "too many, or too long, time zone abbreviations"
+msgstr "ÓÌÉÛËÏÍ ÍÎÏÇÏ ÓÏËÒÁÝÅÎÉÊ ÞÁÓÏ×ÙÈ ÐÏÑÓÏ× ÉÌÉ ÏÎÉ ÓÌÉÛËÏÍ ÄÌÉÎÎÙÅ"
+
+#: timezone/zic.c:2285
 #, c-format
-msgid "`%s' is no correct profile data file for `%s'"
-msgstr "`%s' ÎÅ Ñ×ÌÑÅÔÓÑ ×ÅÒÎÙÍ ÆÁÊÌÏÍ Ó ÐÒÏÆÉÌÉÒÏ×ÏÞÎÙÍÉ ÄÁÎÎÙÍÉ ÄÌÑ `%s'"
+msgid "%s: Can't create directory %s: %s\n"
+msgstr "%s: îÅ×ÏÚÍÏÖÎÏ ÓÏÚÄÁÔØ ËÁÔÁÌÏÇ %s: %s\n"
 
-#: elf/sprof.c:936 elf/sprof.c:988
-msgid "cannot allocate symbol data"
-msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÄÅÌÉÔØ ÐÁÍÑÔØ ÐÏÄ ÄÁÎÎÙÅ ÓÉÍ×ÏÌÁ"
+#: timezone/zic.c:2307
+#, c-format
+msgid "%s: %d did not sign extend correctly\n"
+msgstr "%s: %d ÎÅ ÓÏÈÒÁÎÉÌÏ ÚÎÁË ÐÒÉ ÒÁÓÛÉÒÅÎÉÉ\n"
index 6aeb308fe53aa9b05b306edcd51fc883b1952254..07d28095b9b651c002f1f3224cde9bf52db74d47 100644 (file)
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,13 +1,13 @@
 # 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.52
+# Revision: 1.54
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: libc 2.5\n"
 "POT-Creation-Date: 2006-09-29 11:38-0700\n"
-"PO-Revision-Date: 2006-11-09 13:51+0100\n"
+"PO-Revision-Date: 2006-12-30 18:53+0100\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"
@@ -1407,7 +1407,7 @@ msgstr "misslyckades ta status (fstat)"
 
 #: inet/rcmd.c:492
 msgid "bad owner"
-msgstr "olämplig ägare"
+msgstr "felaktig ägare"
 
 #: inet/rcmd.c:494
 msgid "writeable by other than owner"
@@ -1451,7 +1451,7 @@ msgstr "teckenuppsättningsfil \"%s\" finns inte"
 #: locale/programs/charmap.c:194
 #, c-format
 msgid "default character map file `%s' not found"
-msgstr "standardteckenuppsättningsfil \"%s\" inte hittad"
+msgstr "standardteckenuppsättningsfil \"%s\" finns inte"
 
 #: locale/programs/charmap.c:257
 #, c-format
@@ -1540,7 +1540,7 @@ msgstr "definition av \"%1$s\" slutar inte med \"END %1$s\""
 
 #: locale/programs/charmap.c:642
 msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
-msgstr "endast definition av \"WIDTH\" får följa definitionen av \"CHARMAP\""
+msgstr "endast definition av \"WIDTH\" får komma efter definitionen av \"CHARMAP\""
 
 #: locale/programs/charmap.c:650 locale/programs/charmap.c:713
 #, c-format
@@ -1630,7 +1630,7 @@ msgstr "%s: fält \"%s\" är inte definierat"
 #: locale/programs/ld-name.c:116 locale/programs/ld-telephone.c:116
 #, c-format
 msgid "%s: field `%s' must not be empty"
-msgstr "%s: fält \"%s\" kan inte vara tomt"
+msgstr "%s: fält \"%s\" får inte vara tomt"
 
 #: locale/programs/ld-address.c:167
 #, c-format
@@ -1640,7 +1640,7 @@ msgstr "%s: ogiltig kontrollsekvens \"%%%c\" i fält \"%s\" "
 #: locale/programs/ld-address.c:218
 #, c-format
 msgid "%s: terminology language code `%s' not defined"
-msgstr "%s: terminologilandskod \"%s\" inte definierad"
+msgstr "%s: terminologispråkkod \"%s\" inte definierad"
 
 #: locale/programs/ld-address.c:243
 #, c-format
@@ -1800,12 +1800,12 @@ msgstr "%s: bytesekvens för första tecknet är inte mindre än den för sista
 #: locale/programs/ld-collate.c:1273
 #, c-format
 msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
-msgstr "%s: symboliskt intervall kan inte vara omedelbart efter \"order_start\""
+msgstr "%s: symboliskt intervall får inte vara omedelbart efter \"order_start\""
 
 #: locale/programs/ld-collate.c:1277
 #, c-format
 msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
-msgstr "%s: symboliskt intervall kan inte omedelbart följas av \"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
 #, c-format
@@ -2119,7 +2119,7 @@ msgstr "%s: dubbla definitioner av \"default_missing\""
 
 #: locale/programs/ld-ctype.c:2863
 msgid "previous definition was here"
-msgstr "föregående definition var här"
+msgstr "här var föregående definition"
 
 #: locale/programs/ld-ctype.c:2885
 #, c-format
@@ -2354,7 +2354,7 @@ msgstr "avslutande skräp vid radslutet"
 
 #: locale/programs/linereader.c:297
 msgid "garbage at end of number"
-msgstr "skräp i slutet av nummer"
+msgstr "skräp i slutet av tal"
 
 #: locale/programs/linereader.c:409
 msgid "garbage at end of character code specification"
@@ -2567,9 +2567,9 @@ msgid ""
 "                       locale path    : %s\n"
 "%s"
 msgstr ""
-"Systemets kataloger för teckentabeller: %s\n"
-"                     repertoartabeller: %s\n"
-"                       lokal-sökväg   : %s\n"
+"Systemets kataloger för teckentabeller   : %s\n"
+"                        repertoartabeller: %s\n"
+"                          lokal-sökväg   : %s\n"
 "%s"
 
 #: locale/programs/localedef.c:566
@@ -2673,7 +2673,7 @@ msgstr "kan inte lägga till till lokalarkiv"
 #: locale/programs/locarchive.c:977
 #, c-format
 msgid "locale alias file `%s' not found"
-msgstr "fil \"%s\" för lokalalias hittas inte"
+msgstr "fil \"%s\" för lokalalias finns inte"
 
 #: locale/programs/locarchive.c:1121
 #, c-format
@@ -2717,7 +2717,7 @@ msgstr "argumentet till \"%s\" måste vara ett enskilt tecken"
 
 #: locale/programs/locfile.c:251
 msgid "syntax error: not inside a locale definition section"
-msgstr "syntaxfel: inte inne i en lokaldefinition"
+msgstr "syntaxfel: inte inne i en lokalsektion"
 
 #: locale/programs/locfile.c:625
 #, c-format
@@ -2764,7 +2764,7 @@ msgstr "kan inte spara ny repertoartabell"
 #: locale/programs/repertoire.c:342
 #, c-format
 msgid "repertoire map file `%s' not found"
-msgstr "hittar inte repertoartabell \"%s\""
+msgstr "hittar inte repertoarfiltabell \"%s\""
 
 #: locale/programs/repertoire.c:449
 #, c-format
@@ -2859,7 +2859,7 @@ msgid ""
 "For bug reporting instructions, please see:\n"
 "<http://www.gnu.org/software/libc/bugs.html>."
 msgstr ""
-"UsageAnvändning: memusage [FLAGGA]... PROGRAM [PROGRAMFLAGGA]...\n"
+"Användning: memusage [FLAGGA]... PROGRAM [PROGRAMFLAGGA]...\n"
 "Spåra minnesanvändning för PROGRAM.\n"
 "\n"
 "   -n,--progname=NAMN     Namn på program att spåra\n"
@@ -2922,7 +2922,7 @@ msgstr "Titelsträng att använda i resultatgrafiken"
 
 #: malloc/memusagestat.c:55
 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 anta funktionsanrop)"
+msgstr "Generera utdata linjär i tiden (standardvärde är linjär mot antal funktionsanrop)"
 
 #: malloc/memusagestat.c:57
 msgid "Also draw graph for total memory consumption"
@@ -2930,11 +2930,11 @@ 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 VALUE pixlar bred"
+msgstr "gör resultatgrafiken ANTAL pixlar bred"
 
 #: malloc/memusagestat.c:59
 msgid "make output graphic VALUE pixel high"
-msgstr "gör resultatgrafiken VALUE pixlar hög"
+msgstr "gör resultatgrafiken ANTAL pixlar hög"
 
 #: malloc/memusagestat.c:64
 msgid "Generate graphic from memory profiling data"
@@ -3016,7 +3016,7 @@ msgstr "Objekt med samma namn existerar"
 
 #: nis/nis_error.h:16
 msgid "Not master server for this domain"
-msgstr "Ingen huvudserver för denna domän"
+msgstr "Inte huvudserver för denna domän"
 
 #: nis/nis_error.h:17
 msgid "Invalid object for operation"
@@ -3207,7 +3207,7 @@ msgstr "Huvudserver:\n"
 
 #: nis/nis_print.c:175
 msgid "Replicate :\n"
-msgstr "Replikerad:\n"
+msgstr "Replikera:\n"
 
 #: nis/nis_print.c:176
 #, c-format
@@ -3404,7 +3404,7 @@ msgstr "Antal objekt      : %u\n"
 #: nis/nis_print.c:377
 #, c-format
 msgid "Object #%d:\n"
-msgstr "Objekt #%d:\n"
+msgstr "Objekt nr %d:\n"
 
 #: nis/nis_print_group_entry.c:117
 #, c-format
@@ -3437,7 +3437,7 @@ msgstr "    Inga rekursiva medlemmar\n"
 
 #: nis/nis_print_group_entry.c:149 nis/nis_print_group_entry.c:165
 msgid "    Explicit nonmembers:\n"
-msgstr "    Explicit icke-medlemmar:\n"
+msgstr "    Explicita icke-medlemmar:\n"
 
 #: nis/nis_print_group_entry.c:154
 msgid "    No explicit nonmembers\n"
@@ -3609,7 +3609,7 @@ msgstr "beskär %s cache; tid %ld"
 #: nscd/cache.c:289
 #, c-format
 msgid "considering %s entry \"%s\", timeout %<PRIu64>"
-msgstr "överväger %s post \"%s\", tidsgräns %<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
@@ -3692,7 +3692,7 @@ msgstr "ge åtkomst till FD %d, för %s"
 #: nscd/connections.c:904
 #, 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"
+msgstr "kan inte hantera äldre förfrågansversion %d, nuvarande version är %d"
 
 #: nscd/connections.c:954 nscd/connections.c:1007
 #, c-format
@@ -3851,7 +3851,7 @@ msgstr "Invalidera den angivna cachen"
 
 #: nscd/nscd.c:105
 msgid "TABLE,yes"
-msgstr "TABELL,yes"
+msgstr "TABELL,ja"
 
 #: nscd/nscd.c:106
 msgid "Use separate cache for each user"
@@ -5073,7 +5073,7 @@ msgstr "Avbruten (SIGABRT)"
 
 #: sysdeps/generic/siglist.h:35 sysdeps/unix/siglist.c:34
 msgid "Floating point exception"
-msgstr "Aritmetiskt fel"
+msgstr "Flyttalsfel"
 
 #: sysdeps/generic/siglist.h:36 sysdeps/unix/siglist.c:35
 msgid "Killed"
@@ -5359,7 +5359,7 @@ msgstr "Kodfil upptagen"
 #. 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 "Fil för stor"
+msgstr "För stor fil"
 
 #. TRANS No space left on device; write operation on a file failed because the
 #. TRANS disk is full.
@@ -5514,7 +5514,7 @@ msgstr "Adressfamiljen stöds inte av protokollet"
 #. TRANS The requested socket address is already in use.  @xref{Socket Addresses}.
 #: sysdeps/gnu/errlist.c:555
 msgid "Address already in use"
-msgstr "Adressen upptagen"
+msgstr "Adressen redan upptagen"
 
 #. 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.
@@ -5577,7 +5577,7 @@ msgstr "Transportslutpunkten är inte förbunden"
 #. TRANS without first specifying a destination for the data with @code{connect}.
 #: sysdeps/gnu/errlist.c:658
 msgid "Destination address required"
-msgstr "Destination krävs"
+msgstr "Destinationsadress krävs"
 
 #. TRANS The socket has already been shut down.
 #: sysdeps/gnu/errlist.c:667
@@ -5612,7 +5612,7 @@ msgstr "För många nivåer av symboliska länkar"
 #. TRANS @code{sethostname}; @pxref{Host Identification}).
 #: sysdeps/gnu/errlist.c:717
 msgid "File name too long"
-msgstr "Filnamn för långt"
+msgstr "För långt filnamn"
 
 #. TRANS The remote host for a requested network connection is down.
 #: sysdeps/gnu/errlist.c:726
@@ -6147,7 +6147,7 @@ msgstr "%s: användning är %s [ --version ] [ -v ] [ -c [startår,}slutår ] zo
 #: timezone/zdump.c:301
 #, c-format
 msgid "%s: wild -c argument %s\n"
-msgstr "%s: flaggan -c har okänt argument %s\n"
+msgstr "%s: argument \"%s\" till flaggan -c har fel format\n"
 
 #: timezone/zdump.c:392
 msgid "Error writing to standard output"
@@ -6226,7 +6226,7 @@ msgstr "%s: Kan inte länka från %s till %s: %s\n"
 
 #: timezone/zic.c:774 timezone/zic.c:776
 msgid "same rule name in multiple files"
-msgstr "samma regel i flera filer"
+msgstr "samma regelnamn i flera filer"
 
 #: timezone/zic.c:817
 msgid "unruly zone"
@@ -6262,7 +6262,7 @@ msgstr "%s: \"Leap\"-rad i fil %s som inte är skottsekundsfil\n"
 #: timezone/zic.c:904 timezone/zic.c:1325 timezone/zic.c:1350
 #, c-format
 msgid "%s: panic: Invalid l_value %d\n"
-msgstr "%s: panik: ogiltigt l_value %d\n"
+msgstr "%s: panik: Ogiltigt l_value %d\n"
 
 #: timezone/zic.c:912
 #, c-format
@@ -6292,7 +6292,7 @@ msgstr "namnlös regel"
 
 #: timezone/zic.c:991
 msgid "invalid saved time"
-msgstr "ogiltigt sparad tid"
+msgstr "ogiltig sparad tid"
 
 #: timezone/zic.c:1010
 msgid "wrong number of fields on Zone line"
index 712e7c2069f877404efc5ec05e545c6b136c3e1d..d17e976e3c4cc4593a8fce66661b324911902926 100644 (file)
@@ -81,7 +81,8 @@ tests         := tstgetopt testfnm runtests runptests      \
                   bug-regex13 bug-regex14 bug-regex15 bug-regex16 \
                   bug-regex17 bug-regex18 bug-regex19 bug-regex20 \
                   bug-regex21 bug-regex22 bug-regex23 bug-regex24 \
-                  bug-regex25 bug-regex26 tst-nice tst-nanosleep tst-regex2 \
+                  bug-regex25 bug-regex26 bug-regex27 bug-regex28 \
+                  tst-nice tst-nanosleep tst-regex2 \
                   transbug tst-rxspencer tst-pcre tst-boost \
                   bug-ga1 tst-vfork1 tst-vfork2 tst-vfork3 tst-waitid \
                   tst-getaddrinfo2 bug-glob1 bug-glob2 tst-sysconf \
diff --git a/posix/bug-regex27.c b/posix/bug-regex27.c
new file mode 100644 (file)
index 0000000..327acd8
--- /dev/null
@@ -0,0 +1,64 @@
+/* Test REG_NEWLINE.
+   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.  */
+
+#include <regex.h>
+#include <stdio.h>
+#include <string.h>
+
+struct tests
+{
+  const char *regex;
+  const char *string;
+  int cflags;
+  int retval;
+} tests[] = {
+  { "a.b", "a\nb", REG_EXTENDED | REG_NEWLINE, REG_NOMATCH },
+  { "a.b", "a\nb", REG_EXTENDED, 0 },
+  { "a[^x]b", "a\nb", REG_EXTENDED | REG_NEWLINE, REG_NOMATCH },
+  { "a[^x]b", "a\nb", REG_EXTENDED, 0 }
+};
+
+int
+main (void)
+{
+  regex_t r;
+  size_t i;
+  int ret = 0;
+
+  for (i = 0; i < sizeof (tests) / sizeof (tests[i]); ++i)
+    {
+      memset (&r, 0, sizeof (r));
+      if (regcomp (&r, tests[i].regex, tests[i].cflags))
+       {
+         printf ("regcomp %zd failed\n", i);
+         ret = 1;
+         continue;
+       }
+      int rv = regexec (&r, tests[i].string, 0, NULL, 0);
+      if (rv != tests[i].retval)
+       {
+         printf ("regexec %zd unexpected value %d != %d\n",
+                 i, rv, tests[i].retval);
+         ret = 1;
+       }
+      regfree (&r);
+    }
+  return ret;
+}
diff --git a/posix/bug-regex28.c b/posix/bug-regex28.c
new file mode 100644 (file)
index 0000000..e58a08f
--- /dev/null
@@ -0,0 +1,75 @@
+/* Test RE_HAT_LISTS_NOT_NEWLINE and RE_DOT_NEWLINE.
+   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.  */
+
+#include <regex.h>
+#include <stdio.h>
+#include <string.h>
+
+struct tests
+{
+  const char *regex;
+  const char *string;
+  reg_syntax_t syntax;
+  int retval;
+} tests[] = {
+#define EGREP RE_SYNTAX_EGREP
+#define EGREP_NL (RE_SYNTAX_EGREP | RE_DOT_NEWLINE) & ~RE_HAT_LISTS_NOT_NEWLINE
+  { "a.b", "a\nb", EGREP, -1 },
+  { "a.b", "a\nb", EGREP_NL, 0 },
+  { "a[^x]b", "a\nb", EGREP, -1 },
+  { "a[^x]b", "a\nb", EGREP_NL, 0 },
+  /* While \S and \W are internally handled as [^[:space:]] and [^[:alnum:]_],
+     RE_HAT_LISTS_NOT_NEWLINE did not make any difference, so ensure
+     it doesn't change.  */
+  { "a\\Sb", "a\nb", EGREP, -1 },
+  { "a\\Sb", "a\nb", EGREP_NL, -1 },
+  { "a\\Wb", "a\nb", EGREP, 0 },
+  { "a\\Wb", "a\nb", EGREP_NL, 0 }
+};
+
+int
+main (void)
+{
+  struct re_pattern_buffer r;
+  size_t i;
+  int ret = 0;
+
+  for (i = 0; i < sizeof (tests) / sizeof (tests[i]); ++i)
+    {
+      re_set_syntax (tests[i].syntax);
+      memset (&r, 0, sizeof (r));
+      if (re_compile_pattern (tests[i].regex, strlen (tests[i].regex), &r))
+       {
+         printf ("re_compile_pattern %zd failed\n", i);
+         ret = 1;
+         continue;
+       }
+      size_t len = strlen (tests[i].string);
+      int rv = re_search (&r, tests[i].string, len, 0, len, NULL);
+      if (rv != tests[i].retval)
+       {
+         printf ("re_search %zd unexpected value %d != %d\n",
+                 i, rv, tests[i].retval);
+         ret = 1;
+       }
+      regfree (&r);
+    }
+  return ret;
+}
index c7a9d57628a394d4efdc8d3db8a08b3fb9b7e8a1..3c5ffe454c564ff210f9c94d769b9b940f473ac7 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 92, 1995-2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 92, 1995-2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software; you can redistribute it and/or modify
@@ -1008,7 +1008,7 @@ main (int argc, char *argv[])
 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\
-"), "2007");
+"), "2006");
       fprintf (stderr, gettext ("Written by %s.\n"), "Roland McGrath");
       return 0;
     }
index 78a1218cf866472332c87eb999c257239a692999..e99fd7492442ff2f4b58fdbc4d9246150e2bafce 100644 (file)
@@ -1,5 +1,5 @@
 /* Extended regular expression matching and search library.
-   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 Isamu Hasegawa <isamu@yamato.ibm.com>.
 
@@ -3019,7 +3019,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
 #endif /* not RE_ENABLE_I18N */
       non_match = 1;
       if (syntax & RE_HAT_LISTS_NOT_NEWLINE)
-       bitset_set (sbcset, '\0');
+       bitset_set (sbcset, '\n');
       re_string_skip_bytes (regexp, token_len); /* Skip a token.  */
       token_len = peek_token_bracket (token, regexp, syntax);
       if (BE (token->type == END_OF_RE, 0))
@@ -3549,10 +3549,6 @@ build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans,
   if (non_match)
     {
 #ifdef RE_ENABLE_I18N
-      /*
-      if (syntax & RE_HAT_LISTS_NOT_NEWLINE)
-       bitset_set(cset->sbcset, '\0');
-      */
       mbcset->non_match = 1;
 #endif /* not RE_ENABLE_I18N */
     }
index c74190dfc34cc46d56f3e36ceddfd9bb23da4a1f..4e1e9dfaa28b13c4117bedf7ccff45fea2b9f2db 100644 (file)
@@ -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
@@ -56,7 +56,9 @@ __BEGIN_DECLS
 #define _POSIX2_LOCALEDEF       200112L
 
 /* X/Open version number to which the library conforms.  It is selectable.  */
-#ifdef __USE_UNIX98
+#ifdef __USE_XOPEN2K
+# define _XOPEN_VERSION        600
+#elif defined __USE_UNIX98
 # define _XOPEN_VERSION        500
 #else
 # define _XOPEN_VERSION        4
@@ -559,7 +561,7 @@ extern long int pathconf (__const char *__path, int __name)
 extern long int fpathconf (int __fd, int __name) __THROW;
 
 /* Get the value of the system variable NAME.  */
-extern long int sysconf (int __name) __THROW;
+extern long int sysconf (int __name) __THROW __attribute__ ((__const__));
 
 #ifdef __USE_POSIX2
 /* Get the value of the string-valued system variable NAME.  */
@@ -1060,7 +1062,7 @@ extern int lockf64 (int __fd, int __cmd, __off64_t __len) __wur;
 #if defined __USE_POSIX199309 || defined __USE_UNIX98
 /* Synchronize at least the data part of a file with the underlying
    media.  */
-extern int fdatasync (int __fildes) __THROW;
+extern int fdatasync (int __fildes);
 #endif /* Use POSIX199309 */
 
 
index 765d14d81f77b08d08aae646942df2298f7de7f4..adece95ef8dec555201043a30183c1076cc1c3fb 100644 (file)
@@ -1809,7 +1809,7 @@ envsubst:
            /* Substitute parameter */
            break;
 
-         if (free_value)
+         if (free_value && value)
            free (value);
 
          if (!colon_seen && value)
@@ -1827,7 +1827,7 @@ envsubst:
        case ACT_NONNULL_SUBST:
          if (value && (*value || !colon_seen))
            {
-             if (free_value)
+             if (free_value && value)
                free (value);
 
              value = pattern ? __strdup (pattern) : pattern;
index f6230da8fbe4b563c6f5a889789338803100bd7c..6ac226735aafd67b38973db83b1c3583daf5d9dd 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1994,1995,1996,1997,1998,1999,2000,2001,2003,2004
+# Copyright (C) 1994,1995,1996,1997,1998,1999,2000,2001,2003,2004,2007
 #      Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
@@ -32,7 +32,7 @@ distribute := ../conf/portability.h mapv4v6addr.h mapv4v6hostent.h \
 routines := herror inet_addr inet_ntop inet_pton nsap_addr res_init \
            res_hconf res_libc res-state
 
-tests = tst-aton tst-leaks
+tests = tst-aton tst-leaks tst-inet_ntop
 xtests = tst-leaks2
 
 generate := mtrace-tst-leaks tst-leaks.mtrace tst-leaks2.mtrace
index 5a350cae36342815f119488782f963bfcf11411c..7016365be582829c0e23570f21e1deadcda46789 100644 (file)
@@ -2,7 +2,7 @@
 
 libc {
   GLIBC_2.0 {
-%if !HAVE___THREAD
+%if !(USE_TLS && HAVE___THREAD)
     # global variables
     _h_errno;
 %endif
@@ -17,7 +17,7 @@ libc {
 
     # variables in normal name space
     h_errlist; h_nerr;
-%if !HAVE___THREAD
+%if !(USE_TLS && HAVE___THREAD)
     h_errno;
 %endif
 
@@ -34,7 +34,7 @@ libc {
   GLIBC_PRIVATE {
     __gai_sigqueue;
 
-%if HAVE___THREAD
+%if USE_TLS && HAVE___THREAD
     # This version is for the TLS symbol, GLIBC_2.0 is the old object symbol.
     h_errno; __resp;
 %endif
index f6330a8979c05e4428f16a5bb6ee90037083f8fd..496c8dbe857499e88f21a9475588f10369a8b6c9 100644 (file)
@@ -287,7 +287,7 @@ typedef enum __ns_type {
        ns_t_naptr = 35,        /* Naming Authority PoinTeR */
        ns_t_kx = 36,           /* Key Exchange */
        ns_t_cert = 37,         /* Certification record */
-       ns_t_a6 = 38,           /* IPv6 address (deprecated, use ns_t_aaaa) */
+       ns_t_a6 = 38,           /* IPv6 address (deprecates AAAA) */
        ns_t_dname = 39,        /* Non-terminal DNAME (for IPv6) */
        ns_t_sink = 40,         /* Kitchen sink (experimentatl) */
        ns_t_opt = 41,          /* EDNS0 option (meta-RR) */
index e5553a1d3b364dc991423cd04973bed9e69fa6a4..1222d08bda891aad2e3a90da456471f7455b5424 100644 (file)
@@ -96,7 +96,7 @@ inet_ntop4(src, dst, size)
        static const char fmt[] = "%u.%u.%u.%u";
        char tmp[sizeof "255.255.255.255"];
 
-       if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) > size) {
+       if (SPRINTF((tmp, fmt, src[0], src[1], src[2], src[3])) >= size) {
                __set_errno (ENOSPC);
                return (NULL);
        }
index 7f85f7d5e393ec5f2944abcef13a623b801eb9f0..bc3290f1627e02b6a398603436c3ae7cfad874ba 100644 (file)
@@ -56,14 +56,16 @@ static void
 map_v4v6_address (const char *src, char *dst)
 {
   u_char *p = (u_char *) dst;
+  char tmp[INADDRSZ];
   int i;
 
-  /* Move the IPv4 part to the right position.  */
-  memcpy (dst + 12, src, INADDRSZ);
-
+  /* Stash a temporary copy so our caller can update in place. */
+  memcpy (tmp, src, INADDRSZ);
   /* Mark this ipv6 addr as a mapped ipv4. */
   for (i = 0; i < 10; i++)
     *p++ = 0x00;
   *p++ = 0xff;
-  *p = 0xff;
+  *p++ = 0xff;
+  /* Retrieve the saved copy and we're done. */
+  memcpy ((void *) p, tmp, INADDRSZ);
 }
index 7045c5915b66fd966db0b726465005fd648765fc..cf060be8efd56bab06c30f1d518e28a8c513d3fe 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1996-2003, 2004, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -465,8 +465,8 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype,
     char *aliases[MAX_NR_ALIASES];
     unsigned char host_addr[16];       /* IPv4 or IPv6 */
     char *h_addr_ptrs[0];
-  } *host_data = (struct host_data *) buffer;
-  int linebuflen = buflen - sizeof (struct host_data);
+  } *host_data;
+  int linebuflen;
   register const HEADER *hp;
   const u_char *end_of_message, *cp;
   int n, ancount, qdcount;
@@ -478,8 +478,9 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype,
   u_char packtmp[NS_MAXCDNAME];
   int have_to_map = 0;
   int32_t ttl = 0;
-
-  if (__builtin_expect (linebuflen, 0) < 0)
+  uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct host_data);
+  buffer += pad;
+  if (__builtin_expect (buflen < sizeof (struct host_data) + pad, 0))
     {
       /* The buffer is too small.  */
     too_small:
@@ -487,6 +488,10 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype,
       *h_errnop = NETDB_INTERNAL;
       return NSS_STATUS_TRYAGAIN;
     }
+  host_data = (struct host_data *) buffer;
+  linebuflen = buflen - sizeof (struct host_data);
+  if (buflen - sizeof (struct host_data) != linebuflen)
+    linebuflen = INT_MAX;
 
   tname = qname;
   result->h_name = NULL;
index 97d92638951d090b05e4b6d041d9fad41f71d6e9..4552b5b6787b951d73792ca8434460327788b1c9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999, 2002, 2004
+/* Copyright (C) 1996, 1997, 1998, 1999, 2002, 2004, 2007
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -102,7 +102,8 @@ extern int __ns_name_unpack (const u_char *, const u_char *,
 /* Prototypes for local functions.  */
 static enum nss_status getanswer_r (const querybuf *answer, int anslen,
                                    struct netent *result, char *buffer,
-                                   size_t buflen, lookup_method net_i);
+                                   size_t buflen, int *errnop, int *h_errnop,
+                                   lookup_method net_i);
 
 
 enum nss_status
@@ -142,7 +143,8 @@ _nss_dns_getnetbyname_r (const char *name, struct netent *result,
        ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
     }
 
-  status = getanswer_r (net_buffer.buf, anslen, result, buffer, buflen, BYNAME);
+  status = getanswer_r (net_buffer.buf, anslen, result, buffer, buflen,
+                       errnop, herrnop, BYNAME);
   if (net_buffer.buf != orig_net_buffer)
     free (net_buffer.buf);
   return status;
@@ -218,7 +220,8 @@ _nss_dns_getnetbyaddr_r (uint32_t net, int type, struct netent *result,
        ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
     }
 
-  status = getanswer_r (net_buffer.buf, anslen, result, buffer, buflen, BYADDR);
+  status = getanswer_r (net_buffer.buf, anslen, result, buffer, buflen,
+                       errnop, herrnop, BYADDR);
   if (net_buffer.buf != orig_net_buffer)
     free (net_buffer.buf);
   if (status == NSS_STATUS_SUCCESS)
@@ -240,7 +243,8 @@ _nss_dns_getnetbyaddr_r (uint32_t net, int type, struct netent *result,
 
 static enum nss_status
 getanswer_r (const querybuf *answer, int anslen, struct netent *result,
-            char *buffer, size_t buflen, lookup_method net_i)
+            char *buffer, size_t buflen, int *errnop, int *h_errnop,
+            lookup_method net_i)
 {
   /*
    * Find first satisfactory answer
@@ -260,8 +264,25 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result,
   {
     char *aliases[MAX_NR_ALIASES];
     char linebuffer[0];
-  } *net_data = (struct net_data *) buffer;
+  } *net_data;
+
+  uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct net_data);
+  buffer += pad;
+
+  if (__builtin_expect (buflen < sizeof (*net_data) + pad, 0))
+    {
+      /* The buffer is too small.  */
+    too_small:
+      *errnop = ERANGE;
+      *h_errnop = NETDB_INTERNAL;
+      return NSS_STATUS_TRYAGAIN;
+    }
+  buflen -= pad;
+
+  net_data = (struct net_data *) buffer;
   int linebuflen = buflen - offsetof (struct net_data, linebuffer);
+  if (buflen - offsetof (struct net_data, linebuffer) != linebuflen)
+    linebuflen = INT_MAX;
   const unsigned char *end_of_message = &answer->buf[anslen];
   const HEADER *header_pointer = &answer->hdr;
   /* #/records in the answer section.  */
@@ -319,10 +340,7 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result,
       if (n != -1 && __ns_name_ntop (packtmp, bp, linebuflen) == -1)
        {
          if (errno == EMSGSIZE)
-           {
-             errno = ERANGE;
-             return NSS_STATUS_TRYAGAIN;
-           }
+           goto too_small;
 
          n = -1;
        }
@@ -346,10 +364,7 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result,
          if (n != -1 && __ns_name_ntop (packtmp, bp, linebuflen) == -1)
            {
              if (errno == EMSGSIZE)
-               {
-                 errno = ERANGE;
-                 return NSS_STATUS_TRYAGAIN;
-               }
+               goto too_small;
 
              n = -1;
            }
index 8af57f7a4a429771482cccb434917b9dd6f8e24f..834773c32f8d62ca319a1afe42a8df44fef94c16 100644 (file)
@@ -33,7 +33,7 @@ extern unsigned long long int __res_initstamp attribute_hidden;
 #if __WORDSIZE == 64
 # define atomicinclock(lock) (void) 0
 # define atomicincunlock(lock) (void) 0
-# define atomicinc(var) catomic_increment (&(var))
+# define atomicinc(var) atomic_increment (&(var))
 #else
 __libc_lock_define_initialized (static, lock);
 # define atomicinclock(lock) __libc_lock_lock (lock)
diff --git a/resolv/tst-inet_ntop.c b/resolv/tst-inet_ntop.c
new file mode 100644 (file)
index 0000000..a042c74
--- /dev/null
@@ -0,0 +1,111 @@
+#include <arpa/inet.h>
+#include <errno.h>
+#include <netinet/in.h>
+#include <stdio.h>
+#include <string.h>
+
+int
+main (void)
+{
+  struct in_addr addr4;
+  struct in6_addr addr6;
+  char buf[64];
+  int result = 0;
+
+  addr4.s_addr = 0xe0e0e0e0;
+  addr6.s6_addr16[0] = 0;
+  addr6.s6_addr16[1] = 0;
+  addr6.s6_addr16[2] = 0;
+  addr6.s6_addr16[3] = 0;
+  addr6.s6_addr16[4] = 0;
+  addr6.s6_addr16[5] = 0xffff;
+  addr6.s6_addr32[3] = 0xe0e0e0e0;
+  memset (buf, 'x', sizeof buf);
+
+  if (inet_ntop (AF_INET, &addr4, buf, 15) != NULL)
+    {
+      puts ("1st inet_ntop returned non-NULL");
+      result++;
+    }
+  else if (errno != ENOSPC)
+    {
+      puts ("1st inet_ntop didn't fail with ENOSPC");
+      result++;
+    }
+  if (buf[15] != 'x')
+    {
+      puts ("1st inet_ntop wrote past the end of buffer");
+      result++;
+    }
+
+  if (inet_ntop (AF_INET, &addr4, buf, 16) != buf)
+    {
+      puts ("2nd inet_ntop did not return buf");
+      result++;
+    }
+  if (memcmp (buf, "224.224.224.224\0" "xxxxxxxx", 24) != 0)
+    {
+      puts ("2nd inet_ntop wrote past the end of buffer");
+      result++;
+    }
+
+  if (inet_ntop (AF_INET6, &addr6, buf, 22) != NULL)
+    {
+      puts ("3rd inet_ntop returned non-NULL");
+      result++;
+    }
+  else if (errno != ENOSPC)
+    {
+      puts ("3rd inet_ntop didn't fail with ENOSPC");
+      result++;
+    }
+  if (buf[22] != 'x')
+    {
+      puts ("3rd inet_ntop wrote past the end of buffer");
+      result++;
+    }
+
+  if (inet_ntop (AF_INET6, &addr6, buf, 23) != buf)
+    {
+      puts ("4th inet_ntop did not return buf");
+      result++;
+    }
+  if (memcmp (buf, "::ffff:224.224.224.224\0" "xxxxxxxx", 31) != 0)
+    {
+      puts ("4th inet_ntop wrote past the end of buffer");
+      result++;
+    }
+
+  memset (&addr6.s6_addr, 0xe0, sizeof (addr6.s6_addr));
+
+  if (inet_ntop (AF_INET6, &addr6, buf, 39) != NULL)
+    {
+      puts ("5th inet_ntop returned non-NULL");
+      result++;
+    }
+  else if (errno != ENOSPC)
+    {
+      puts ("5th inet_ntop didn't fail with ENOSPC");
+      result++;
+    }
+  if (buf[39] != 'x')
+    {
+      puts ("5th inet_ntop wrote past the end of buffer");
+      result++;
+    }
+
+  if (inet_ntop (AF_INET6, &addr6, buf, 40) != buf)
+    {
+      puts ("6th inet_ntop did not return buf");
+      result++;
+    }
+  if (memcmp (buf, "e0e0:e0e0:e0e0:e0e0:e0e0:e0e0:e0e0:e0e0\0"
+                  "xxxxxxxx", 48) != 0)
+    {
+      puts ("6th inet_ntop wrote past the end of buffer");
+      result++;
+    }
+
+  
+  return result;
+}
index 88c85f7106993b973aa9b86ee7c15578c870a5f4..98da58e927fe85ce566b0a09953a6fc8d60c673e 100755 (executable)
@@ -1,5 +1,5 @@
 #! /bin/bash
-# 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
@@ -30,6 +30,7 @@ if fgrep "$includedir" */*.d |
 fgrep -v "$includedir/asm" |
 fgrep -v "$includedir/linux" |
 fgrep -v "$includedir/selinux" |
+fgrep -v "$includedir/sys/capability.h" |
 fgrep -v "$includedir/gd"; then
   # If we found a match something is wrong.
   exit 1
index 34f5098e8c21b624c5b2afca0004535395001868..1b90535c56e582ae11cb611a4386aa49c4dc9710 100644 (file)
     r1 = x1 - y1;                                              \
     _c2 = r1 > x1;                                             \
     r1 -= _c1;                                                 \
-    _c2 |= r1 > _c1;                                           \
+    _c2 |= _c1 && (y1 == x1);                                  \
     r2 = x2 - y2 - _c2;                                                \
   } while (0)
 #endif
     r1 = x1 - y1;                                              \
     _c2 = r1 > x1;                                             \
     r1 -= _c1;                                                 \
-    _c2 |= r1 > _c1;                                           \
+    _c2 |= _c1 && (y1 == x1);                                  \
     r2 = x2 - y2;                                              \
     _c3 = r2 > x2;                                             \
     r2 -= _c2;                                                 \
-    _c3 |= r2 > _c2;                                           \
+    _c3 |= _c2 && (y2 == x2);                                  \
     r3 = x3 - y3 - _c3;                                                \
   } while (0)
 #endif
index 4ec7fade485e04dafa5b24e9b843a5a6b83bf6fc..0aa6e3e05d84772f98adb83c634dc95698752b8d 100644 (file)
@@ -1,5 +1,5 @@
 /* Software floating-point emulation. Common operations.
-   Copyright (C) 1997,1998,1999,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2006,2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson (rth@cygnus.com),
                  Jakub Jelinek (jj@ultra.linux.cz),
@@ -99,10 +99,10 @@ do {                                                        \
   else                                                 \
     {                                                  \
       X##_e = _FP_EXPMAX_##fs - 1;                     \
-      FP_SET_EXCEPTION(FP_EX_OVERFLOW);                        \
-      FP_SET_EXCEPTION(FP_EX_INEXACT);                 \
       _FP_FRAC_SET_##wc(X, _FP_MAXFRAC_##wc);          \
     }                                                  \
+    FP_SET_EXCEPTION(FP_EX_INEXACT);                   \
+    FP_SET_EXCEPTION(FP_EX_OVERFLOW);                  \
 } while (0)
 
 /* Check for a semi-raw value being a signaling NaN and raise the
@@ -1252,6 +1252,9 @@ do {                                                                           \
              _FP_FRAC_SRL_##swc(S, (_FP_WFRACBITS_##sfs                     \
                                     - _FP_WFRACBITS_##dfs));                \
              _FP_FRAC_COPY_##dwc##_##swc(D, S);                             \
+             /* Semi-raw NaN must have all workbits cleared.  */            \
+             _FP_FRAC_LOW_##dwc(D)                                          \
+               &= ~(_FP_W_TYPE) ((1 << _FP_WORKBITS) - 1);                  \
              _FP_FRAC_HIGH_##dfs(D) |= _FP_QNANBIT_SH_##dfs;                \
            }                                                                \
        }                                                                    \
index 37bcdb3bc844868278cc40f1097f19164ebf5764..7bd368bdcaaf6f539163da52f415ce1864b3e22e 100644 (file)
@@ -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
@@ -54,7 +54,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \
         tst-swprintf tst-fseek tst-fmemopen test-vfprintf tst-gets \
         tst-perror tst-sprintf tst-rndseek tst-fdopen tst-fphex bug14 bug15 \
         tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \
-        tst-fwrite bug16
+        tst-fwrite bug16 bug17 tst-sprintf2
 
 test-srcs = tst-unbputc tst-printf
 
index f61b23fceb3e25378c56b63fb898e6cab1874e66..285fde2ab91e33230d307ac9bde21950392cb863 100644 (file)
@@ -1,5 +1,5 @@
 /* Internal function for converting integers to ASCII.
-   Copyright (C) 1994, 1995, 1996, 1999, 2000, 2002, 2003, 2004
+   Copyright (C) 1994, 1995, 1996, 1999, 2000, 2002, 2003, 2004, 2007
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Torbjorn Granlund <tege@matematik.su.se>
@@ -269,6 +269,7 @@ _itoa (value, buflim, base, upper_case)
 
     default:
       {
+       char *bufend = buflim;
 #if BITS_PER_MP_LIMB == 64
        mp_limb_t base_multiplier = brec->base_multiplier;
        if (brec->flag)
@@ -454,6 +455,8 @@ _itoa (value, buflim, base, upper_case)
          }
        while (n != 0);
 #endif
+       if (buflim == bufend)
+         *--buflim = '0';
       }
       break;
     }
diff --git a/stdio-common/bug17.c b/stdio-common/bug17.c
new file mode 100644 (file)
index 0000000..2ef3986
--- /dev/null
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <string.h>
+
+static int
+do_test (void)
+{
+  static const char expect[] = "0, 0, 0";
+  char buf[100];
+  int status = 0;
+
+  static const char fmt1[] = "%0d, %0ld, %0lld";
+  snprintf (buf, sizeof (buf), fmt1, 0, 0L, 0LL);
+  if (strcmp (buf, expect) != 0)
+    {
+      printf ("\"%s\": got \"%s\", expected \"%s\"\n", fmt1, buf, expect);
+      status = 1;
+    }
+
+  static const char fmt2[] = "%0u, %0lu, %0llu";
+  snprintf (buf, sizeof (buf), fmt2, 0u, 0uL, 0uLL);
+  if (strcmp (buf, expect) != 0)
+    {
+      printf ("\"%s\": got \"%s\", expected \"%s\"\n", fmt2, buf, expect);
+      status = 1;
+    }
+
+  return status;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
index e4e32f9c2815d6180a2849b6407f3158064e83a2..b48b6896614b347eb5b6d9c81b5b5979caa7ba3e 100644 (file)
@@ -1,6 +1,5 @@
 /* Floating point output for `printf'.
-   Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2006
-   Free Software Foundation, Inc.
+   Copyright (C) 1995-2003, 2006, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
@@ -793,7 +792,7 @@ ___printf_fp (FILE *fp,
   else
     {
       /* This is a special case.  We don't need a factor because the
-        numbers are in the range of 0.0 <= fp < 8.0.  We simply
+        numbers are in the range of 1.0 <= |fp| < 8.0.  We simply
         shift it to the right place and divide it by 1.0 to get the
         leading digit.  (Of course this division is not really made.)  */
       assert (0 <= exponent && exponent < 3 &&
@@ -811,12 +810,14 @@ ___printf_fp (FILE *fp,
     int chars_needed;
     int expscale;
     int intdig_max, intdig_no = 0;
-    int fracdig_min, fracdig_max, fracdig_no = 0;
+    int fracdig_min;
+    int fracdig_max;
     int dig_max;
     int significant;
     int ngroups = 0;
+    char spec = _tolower (info->spec);
 
-    if (_tolower (info->spec) == 'e')
+    if (spec == 'e')
       {
        type = info->spec;
        intdig_max = 1;
@@ -826,7 +827,7 @@ ___printf_fp (FILE *fp,
        dig_max = INT_MAX;              /* Unlimited.  */
        significant = 1;                /* Does not matter here.  */
       }
-    else if (_tolower (info->spec) == 'f')
+    else if (spec == 'f')
       {
        type = 'f';
        fracdig_min = fracdig_max = info->prec < 0 ? 6 : info->prec;
@@ -923,7 +924,9 @@ ___printf_fp (FILE *fp,
       }
 
     /* Generate the needed number of fractional digits.         */
-    while (fracdig_no < fracdig_min
+    int fracdig_no = 0;
+    int added_zeros = 0;
+    while (fracdig_no < fracdig_min + added_zeros
           || (fracdig_no < fracdig_max && (fracsize > 1 || frac[0] != 0)))
       {
        ++fracdig_no;
@@ -934,7 +937,7 @@ ___printf_fp (FILE *fp,
          {
            ++fracdig_max;
            if (fracdig_min > 0)
-             ++fracdig_min;
+             ++added_zeros;
          }
       }
 
@@ -971,11 +974,25 @@ ___printf_fp (FILE *fp,
          {
            /* Process fractional digits.  Terminate if not rounded or
               radix character is reached.  */
+           int removed = 0;
            while (*--wtp != decimalwc && *wtp == L'9')
-             *wtp = '0';
+             {
+               *wtp = L'0';
+               ++removed;
+             }
+           if (removed == fracdig_min && added_zeros > 0)
+             --added_zeros;
            if (*wtp != decimalwc)
              /* Round up.  */
              (*wtp)++;
+           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
+                is selected.  This means the result must be "1.".  */
+             --added_zeros;
          }
 
        if (fracdig_no == 0 || *wtp == decimalwc)
@@ -997,6 +1014,12 @@ ___printf_fp (FILE *fp,
                  {
                    *wstartp = '1';
                    exponent += expsign == 0 ? 1 : -1;
+
+                   /* The above exponent adjustment could lead to 1.0e-00,
+                      e.g. for 0.999999999.  Make sure exponent 0 always
+                      uses + sign.  */
+                   if (exponent == 0)
+                     expsign = 0;
                  }
                else if (intdig_no == dig_max)
                  {
@@ -1042,7 +1065,7 @@ ___printf_fp (FILE *fp,
 
   do_expo:
     /* Now remove unnecessary '0' at the end of the string.  */
-    while (fracdig_no > fracdig_min && *(wcp - 1) == L'0')
+    while (fracdig_no > fracdig_min + added_zeros && *(wcp - 1) == L'0')
       {
        --wcp;
        --fracdig_no;
@@ -1060,26 +1083,46 @@ ___printf_fp (FILE *fp,
     /* Write the exponent if it is needed.  */
     if (type != 'f')
       {
-       *wcp++ = (wchar_t) type;
-       *wcp++ = expsign ? L'-' : L'+';
+       if (__builtin_expect (expsign != 0 && exponent == 4 && spec == 'g', 0))
+         {
+           /* This is another special case.  The exponent of the number is
+              really smaller than -4, which requires the 'e'/'E' format.
+              But after rounding the number has an exponent of -4.  */
+           assert (wcp >= wstartp + 1);
+           assert (wstartp[0] == L'1');
+           __wmemcpy (wstartp, L"0.0001", 6);
+           wstartp[1] = decimalwc;
+           if (wcp >= wstartp + 2)
+             {
+               wmemset (wstartp + 6, L'0', wcp - (wstartp + 2));
+               wcp += 4;
+             }
+           else
+             wcp += 5;
+         }
+       else
+         {
+           *wcp++ = (wchar_t) type;
+           *wcp++ = expsign ? L'-' : L'+';
 
-       /* Find the magnitude of the exponent.  */
-       expscale = 10;
-       while (expscale <= exponent)
-         expscale *= 10;
+           /* Find the magnitude of the exponent.      */
+           expscale = 10;
+           while (expscale <= exponent)
+             expscale *= 10;
 
-       if (exponent < 10)
-         /* Exponent always has at least two digits.  */
-         *wcp++ = L'0';
-       else
-         do
-           {
-             expscale /= 10;
-             *wcp++ = L'0' + (exponent / expscale);
-             exponent %= expscale;
-           }
-         while (expscale > 10);
-       *wcp++ = L'0' + exponent;
+           if (exponent < 10)
+             /* Exponent always has at least two digits.  */
+             *wcp++ = L'0';
+           else
+             do
+               {
+                 expscale /= 10;
+                 *wcp++ = L'0' + (exponent / expscale);
+                 exponent %= expscale;
+               }
+             while (expscale > 10);
+           *wcp++ = L'0' + exponent;
+         }
       }
 
     /* Compute number of characters which must be filled with the padding
index a683eac779e66ce6629a236b927e2d800a0b456c..342ac471dab14420f82d6656ffa0d6fc189a3bf5 100644 (file)
@@ -1,5 +1,5 @@
 /* Tests of *printf for very large strings.
-   Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2002, 2003, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2000.
 
@@ -94,6 +94,7 @@ main (void)
       fprintf (fp, "%.*s", 30000, large);
       large[20000] = '\0';
       fprintf (fp, large);
+      fprintf (fp, "%-1.300000000s", "hello");
 
       if (fflush (fp) != 0 || ferror (fp) != 0 || fclose (fp) != 0)
        {
@@ -108,11 +109,12 @@ main (void)
                  setlocale (LC_ALL, NULL));
          exit (1);
        }
-      else if (st.st_size != 99999)
+      else if (st.st_size != 50000 + 30000 + 19999 + 5)
        {
          printf ("file size incorrect for locale %s: %jd instead of %jd\n",
                  setlocale (LC_ALL, NULL),
-                 (intmax_t) st.st_size, (intmax_t) 99999);
+                 (intmax_t) st.st_size,
+                 (intmax_t) 50000 + 30000 + 19999 + 5);
          res = 1;
        }
       else
index ea7365b2c99ed38858fe74356fc5d875460cc387..7704ddde39856221f55b38169f53e3a2f20c87c6 100644 (file)
@@ -4012,6 +4012,32 @@ sprint_double_type sprint_doubles[] =
   {__LINE__, 16,                       "0x1.0p+4", "%.1a"},
   {__LINE__, 16,                       "0x1.00000000000000000000p+4", "%.20a"},
   {__LINE__, 4444.88888888,            "4445", "%2.F"},
+  {__LINE__, 0.956,                    "1", "%.0g"},
+  {__LINE__, 1.0956,                   "1.", "%#.0g"},
+  {__LINE__, 0.956,                    "1.", "%#.0g"},
+  {__LINE__, 0.0956,                   "0.1", "%#.0g"},
+  {__LINE__, 0.00956,                  "0.01", "%#.0g"},
+  {__LINE__, 0.000956,                 "0.001", "%#.0g"},
+  {__LINE__, 0.000098,                 "0.0001", "%#.0g"},
+  {__LINE__, 0.0000996,                        "0.00010", "%#.2g"},
+  {__LINE__, 9.999999999999999e-05,    "0.0001", "%g"},
+  {__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 }
 
@@ -4023,13 +4049,8 @@ sprint_double_type sprint_doubles[] =
 
 int required_precision = 13;
 
-#if defined(__STDC__) || defined(__cplusplus)
 static int
 matches (register char *result, register const char *desired)
-#else
-int matches(result, desired)
-     register char *result; register const char *desired;
-#endif
 {
     int digits_seen = 0;
     for (;; result++, desired++) {
@@ -4080,7 +4101,7 @@ int main(int argc, char *argv[])
 
   /* And one special test.  */
   {
-    const char ref[] = "1.7763568394002504646778106689453125e-15";
+    static const char ref[] = "1.7763568394002504646778106689453125e-15";
     int i;
     d = 1.0;
     for (i = 1; i < 50; ++i)
index c61d3b50e4f78baf32fc787bafefc49a05e6677a..c04fef18f4b14cc22943a71985e00fcbb45e22fb 100644 (file)
@@ -37,5 +37,26 @@ main (void)
       free (dst);
     }
 
+  if (sprintf (buf, "%1$d%3$.*2$s%4$d", 7, 67108863, "x", 8) != 3
+      || strcmp (buf, "7x8") != 0)
+    {
+      printf ("sprintf (buf, \"%%1$d%%3$.*2$s%%4$d\", 7, 67108863, \"x\", 8) produced `%s' output", buf);
+      result = 1;
+    }
+
+  if (sprintf (buf, "%67108863.16\"%d", 7) != 14
+      || strcmp (buf, "%67108863.16\"7") != 0)
+    {
+      printf ("sprintf (buf, \"%%67108863.16\\\"%%d\", 7) produced `%s' output", buf);
+      result = 1;
+    }
+
+  if (sprintf (buf, "%*\"%d", 0x3ffffff, 7) != 11
+      || strcmp (buf, "%67108863\"7") != 0)
+    {
+      printf ("sprintf (buf, \"%%*\\\"%%d\", 0x3ffffff, 7) produced `%s' output", buf);
+      result = 1;
+    }
+
   return result;
 }
diff --git a/stdio-common/tst-sprintf2.c b/stdio-common/tst-sprintf2.c
new file mode 100644 (file)
index 0000000..debb68e
--- /dev/null
@@ -0,0 +1,82 @@
+#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, v;
+  char buf[64];
+  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                                                                      \
+    {                                                                     \
+      u.l = (val);                                                        \
+      snprintf (buf, sizeof buf, "%LaL", u.l);                            \
+      if (strcmp (buf, #val) != 0)                                        \
+       {                                                                  \
+         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)
+
+#if LDBL_MANT_DIG >= 106
+# if LDBL_MANT_DIG == 106
+  TEST (0x0.ffffffffffffp-1022L);
+  TEST (0x0.ffffffffffff1p-1022L);
+  TEST (0x0.fffffffffffffp-1022L);
+# endif
+  TEST (0x1p-1022L);
+  TEST (0x1.0000000000001p-1022L);
+  TEST (0x1.00000000001e7p-1022L);
+  TEST (0x1.fffffffffffffp-1022L);
+  TEST (0x1p-1021L);
+  TEST (0x1.00000000000008p-1021L);
+  TEST (0x1.0000000000001p-1021L);
+  TEST (0x1.00000000000018p-1021L);
+  TEST (0x1.0000000000000f8p-1017L);
+  TEST (0x1.0000000000001p-1017L);
+  TEST (0x1.000000000000108p-1017L);
+  TEST (0x1.000000000000dcf8p-1013L);
+  TEST (0x1.000000000000ddp-1013L);
+  TEST (0x1.000000000000dd08p-1013L);
+  TEST (0x1.ffffffffffffffffffffffffffp-1L);
+  TEST (0x1.ffffffffffffffffffffffffff8p-1L);
+  TEST (0x1p+0L);
+  TEST (0x1.000000000000000000000000008p+0L);
+  TEST (0x1.00000000000000000000000001p+0L);
+  TEST (0x1.000000000000000000000000018p+0L);
+  TEST (0x1.23456789abcdef123456789abc8p+0L);
+  TEST (0x1.23456789abcde7123456789abc8p+0L);
+  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;
+}
index 44ddf49e15af856e1fc4f3e59205ec025afd4a6d..123d733e3f2fdc1caa6423934736a9d15758e9cc 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,96,97,98,99,2000,2001 Free Software Foundation, Inc.
+/* Copyright (C) 1991,92,1996-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
@@ -272,7 +272,7 @@ main (int argc, char **argv)
     res = sscanf ("0x1234", "%lf", &d);
     printf ("res = %d, d = %f\n", res, d);
 
-    if (res != 0 || d != 123456.789)
+    if (res != 1 || d != 4660)
       {
        fputs ("test failed!\n", stdout);
        result = 1;
index 53339f307842bd2bfc5f826a21ca3fd27ab7d828..bf5227873b575c7a8ba4fe9401cbf967596642e4 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006
+/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -1025,10 +1025,11 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
            const char *mbs = (const char *) string;                          \
            mbstate_t mbstate;                                                \
                                                                              \
-           len = prec != -1 ? (size_t) prec : strlen (mbs);                  \
+           len = prec != -1 ? __strnlen (mbs, (size_t) prec) : strlen (mbs); \
                                                                              \
            /* Allocate dynamically an array which definitely is long         \
-              enough for the wide character version.  */                     \
+              enough for the wide character version.  Each byte in the       \
+              multi-byte string can produce at most one wide character.  */  \
            if (__libc_use_alloca (len * sizeof (wchar_t)))                   \
              string = (CHAR_T *) alloca (len * sizeof (wchar_t));            \
            else if ((string = (CHAR_T *) malloc (len * sizeof (wchar_t)))    \
@@ -1159,19 +1160,26 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
                else                                                          \
                  {                                                           \
                    /* In case we have a multibyte character set the          \
-                      situation is more compilcated.  We must not copy       \
+                      situation is more complicated.  We must not copy       \
                       bytes at the end which form an incomplete character. */\
-                   wchar_t ignore[prec];                                     \
+                   size_t ignore_size = (unsigned) prec > 1024 ? 1024 : prec;\
+                   wchar_t ignore[ignore_size];                              \
                    const char *str2 = string;                                \
-                   mbstate_t ps;                                             \
+                   const char *strend = string + prec;                       \
+                   if (strend < string)                                      \
+                     strend = (const char *) UINTPTR_MAX;                    \
                                                                              \
+                   mbstate_t ps;                                             \
                    memset (&ps, '\0', sizeof (ps));                          \
-                   if (__mbsnrtowcs (ignore, &str2, prec, prec, &ps)         \
-                       == (size_t) -1)                                       \
-                     {                                                       \
-                       done = -1;                                            \
-                       goto all_done;                                        \
-                     }                                                       \
+                                                                             \
+                   while (str2 != NULL && str2 < strend)                     \
+                     if (__mbsnrtowcs (ignore, &str2, strend - str2,         \
+                                       ignore_size, &ps) == (size_t) -1)     \
+                       {                                                     \
+                         done = -1;                                          \
+                         goto all_done;                                      \
+                       }                                                     \
+                                                                             \
                    if (str2 == NULL)                                         \
                      len = strlen (string);                                  \
                    else                                                      \
@@ -1618,6 +1626,8 @@ do_positional:
     /* Just a counter.  */
     size_t cnt;
 
+    free (workstart);
+    workstart = NULL;
 
     if (grouping == (const char *) -1)
       {
@@ -1792,7 +1802,9 @@ do_positional:
        int use_outdigits = specs[nspecs_done].info.i18n;
        char pad = specs[nspecs_done].info.pad;
        CHAR_T spec = specs[nspecs_done].info.spec;
-       CHAR_T *workstart = NULL;
+
+       workstart = NULL;
+       workend = &work_buffer[sizeof (work_buffer) / sizeof (CHAR_T)];
 
        /* Fill in last information.  */
        if (specs[nspecs_done].width_arg != -1)
@@ -1888,8 +1900,7 @@ do_positional:
            break;
          }
 
-       if (__builtin_expect (workstart != NULL, 0))
-         free (workstart);
+       free (workstart);
        workstart = NULL;
 
        /* Write the following constant string.  */
@@ -1917,7 +1928,7 @@ printf_unknown (FILE *s, const struct printf_info *info,
 
 {
   int done = 0;
-  CHAR_T work_buffer[MAX (info->width, info->spec) + 32];
+  CHAR_T work_buffer[MAX (sizeof (info->width), sizeof (info->prec)) * 3];
   CHAR_T *const workend
     = &work_buffer[sizeof (work_buffer) / sizeof (CHAR_T)];
   register CHAR_T *w;
index 1ea9bc4e07d4273862daf22d4ccfe36cf28e3914..66716022912f3b70d7d7ee37732b41095cdfcac6 100644 (file)
@@ -1,5 +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
@@ -1888,9 +1887,8 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
 
          /* Have we read any character?  If we try to read a number
             in hexadecimal notation and we have read only the `0x'
-            prefix or no exponent this is an error.  */
-         if (__builtin_expect (wpsize == 0
-                               || (is_hexa && (wpsize == 2 || ! got_e)), 0))
+            prefix this is an error.  */
+         if (__builtin_expect (wpsize == 0 || (is_hexa && wpsize == 2), 0))
            conv_error ();
 
        scan_float:
index b4518b2bb369c95c47e6398e339c262fbf05f193..ecda85b0dd163ea1497faaa6db30238b674f3fbe 100644 (file)
@@ -104,6 +104,10 @@ CFLAGS-strfmon.c = -D_IO_MTSAFE_IO
 CFLAGS-strfmon_l.c = -D_IO_MTSAFE_IO
 endif
 
+ifeq (yes,$(have-protected))
+CFLAGS-atexit.c = -DHAVE_DOT_HIDDEN
+endif
+
 CFLAGS-tst-bsearch.c = $(stack-align-test-flags)
 CFLAGS-tst-qsort.c = $(stack-align-test-flags)
 
index 256c5fcfc0db8d388c853b7c467665c1d8f4865b..307662bdcd407ce14b647164691822086466740d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1996, 1999, 2001, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996, 1999, 2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -43,11 +43,14 @@ extern void *__dso_handle __attribute__ ((__weak__));
 
 /* Register FUNC to be executed by `exit'.  */
 int
-#ifndef atexit
-attribute_hidden
-#endif
 atexit (void (*func) (void))
 {
   return __cxa_atexit ((void (*) (void *)) func, NULL,
                       &__dso_handle == NULL ? NULL : __dso_handle);
 }
+
+/* Hide the symbol so that no definition but the one locally in the
+   executable or DSO is used.  */
+#ifdef HAVE_DOT_HIDDEN
+asm (".hidden\tatexit");
+#endif
index 148d57f200647ad70f1f7298be1bc69c8ba48426..bb49f36dddb36fb70608a0c76780da2864b83271 100644 (file)
@@ -45,8 +45,8 @@ __cxa_finalize (void *d)
              /* We don't want to run this cleanup more than once.  */
              && (cxafn = f->func.cxa.fn,
                  cxaarg = f->func.cxa.arg,
-                 ! catomic_compare_and_exchange_bool_acq (&f->flavor, ef_free,
-                                                          ef_cxa)))
+                 ! atomic_compare_and_exchange_bool_acq (&f->flavor, ef_free,
+                                                         ef_cxa)))
            {
              uint64_t check = __new_exitfn_called;
 
index 7b39bc018aa9a3ee61aa70a5eb3fa02bc12425d4..fd81cf9e5ba603d62638c76e6c5180f15025b74e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2003,2004,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1991-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
@@ -741,18 +741,18 @@ __END_NAMESPACE_STD
 
 #ifdef __USE_GNU
 /* Return a malloc'd string containing the canonical absolute name of the
-   existing named file.  */
+   named file.  The last file name component need not exist, and may be a
+   symlink to a nonexistent file.  */
 extern char *canonicalize_file_name (__const char *__name)
      __THROW __nonnull ((1)) __wur;
 #endif
 
 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
-/* Return the canonical absolute name of file NAME.  The last file name
-   component need not exist, and may be a symlink to a nonexistent file.
-   If RESOLVED is null, the result is malloc'd; otherwise, if the canonical
-   name is PATH_MAX chars or more, returns null with `errno' set to
-   ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars, returns the
-   name in RESOLVED.  */
+/* Return the canonical absolute name of file NAME.  If RESOLVED is
+   null, the result is malloc'd; otherwise, if the canonical name is
+   PATH_MAX chars or more, returns null with `errno' set to
+   ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+   returns the name in RESOLVED.  */
 extern char *realpath (__const char *__restrict __name,
                       char *__restrict __resolved) __THROW __wur;
 #endif
index 3eaf0a25ab80411d0c9c7cc8dccc52bf44d4fd7c..1740e58cdcd45baae231eadbba67ea7245aa7e0a 100644 (file)
@@ -347,7 +347,7 @@ marshal_new_auth (AUTH *auth)
   INTUSE(xdrmem_create) (xdrs, au->au_marshed, MAX_AUTH_BYTES, XDR_ENCODE);
   if ((!INTUSE(xdr_opaque_auth) (xdrs, &(auth->ah_cred))) ||
       (!INTUSE(xdr_opaque_auth) (xdrs, &(auth->ah_verf))))
-    perror (_("auth_unix.c: Fatal marshalling problem"));
+    perror (_("auth_none.c - Fatal marshalling problem"));
   else
     au->au_mpos = XDR_GETPOS (xdrs);
 
index 44ea03efb7ca38a7db9460563220993f1aac7b29..019f1bbae05f31365dda3b4a5e3bc3f3d686d59b 100644 (file)
@@ -114,7 +114,7 @@ clntraw_create (u_long prog, u_long vers)
   INTUSE(xdrmem_create) (xdrs, clp->mashl_callmsg, MCALL_MSG_SIZE, XDR_ENCODE);
   if (!INTUSE(xdr_callhdr) (xdrs, &call_msg))
     {
-      perror (_ ("clnt_raw.c: fatal header serialization error"));
+      perror (_ ("clnt_raw.c - Fatal header serialization error."));
     }
   clp->mcnt = XDR_GETPOS (xdrs);
   XDR_DESTROY (xdrs);
index b21e7ea85cc04b8d42d35b7a5e476e91d1748280..2a6876d9d808b8e3665cab8585880ba1aa0c43bb 100644 (file)
@@ -80,7 +80,7 @@ pmap_getmaps (struct sockaddr_in *address)
                     (xdrproc_t)INTUSE(xdr_pmaplist), (caddr_t)&head,
                     minutetimeout) != RPC_SUCCESS)
        {
-         clnt_perror (client, _("pmap_getmaps.c: rpc problem"));
+         clnt_perror (client, _("pmap_getmaps rpc problem"));
        }
       CLNT_DESTROY (client);
     }
index bda432d3cd0f2f1ac613687a569107d5a3d0e0f6..954657a7e4aad69e911a717dba8753e42c09c7d3 100644 (file)
@@ -457,7 +457,7 @@ check_nettype (const char *name, const char *list_to_check[])
          return 1;
        }
     }
-  fprintf (stderr, _ ("illegal nettype`%s'\n"), name);
+  fprintf (stderr, _ ("illegal nettype :`%s'\n"), name);
   return 0;
 }
 
index f1f47fbf30f87614f18f72bb418fce26f1886aa3..d5e24dd0fc95f450a6aa8525e5c62f021c8ebcdb 100644 (file)
@@ -51,52 +51,42 @@ void
 svc_run (void)
 {
   int i;
-  struct pollfd *my_pollfd = NULL;
-  int last_max_pollfd = 0;
 
   for (;;)
     {
-      int max_pollfd = svc_max_pollfd;
-      if (max_pollfd == 0 && svc_pollfd == NULL)
-       break;
+      struct pollfd *my_pollfd;
 
-      if (last_max_pollfd != max_pollfd)
-       {
-         struct pollfd *new_pollfd
-           = realloc (my_pollfd, sizeof (struct pollfd) * max_pollfd);
-
-         if (new_pollfd == NULL)
-           {
-             perror (_("svc_run: - out of memory"));
-             break;
-           }
+      if (svc_max_pollfd == 0 && svc_pollfd == NULL)
+       return;
 
-         my_pollfd = new_pollfd;
-         last_max_pollfd = max_pollfd;
+      my_pollfd = malloc (sizeof (struct pollfd) * svc_max_pollfd);
+      if (my_pollfd == NULL)
+       {
+         perror (_("svc_run: - out of memory"));
+         return;
        }
 
-      for (i = 0; i < max_pollfd; ++i)
+      for (i = 0; i < svc_max_pollfd; ++i)
        {
          my_pollfd[i].fd = svc_pollfd[i].fd;
          my_pollfd[i].events = svc_pollfd[i].events;
          my_pollfd[i].revents = 0;
        }
 
-      switch (i = __poll (my_pollfd, max_pollfd, -1))
+      switch (i = __poll (my_pollfd, svc_max_pollfd, -1))
        {
        case -1:
+         free (my_pollfd);
          if (errno == EINTR)
            continue;
          perror (_("svc_run: - poll failed"));
-         break;
+         return;
        case 0:
+         free (my_pollfd);
          continue;
        default:
          INTUSE(svc_getreq_poll) (my_pollfd, i);
-         continue;
+         free (my_pollfd);
        }
-      break;
     }
-
-  free (my_pollfd);
 }
index 29f500b2d00b56c6d8b244243def6e76a4058a21..88c357ea07b246e9ef9f3c2876b07b99316beafe 100644 (file)
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  Alpha version.
-   Copyright (C) 1996-2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1996-2002, 2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson <rth@tamu.edu>.
 
@@ -232,14 +232,14 @@ $fixup_stack:                                                     \n\
    to one of the main executable's symbols, as for a COPY reloc.
    This is unused on Alpha.  */
 
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
-# define elf_machine_type_class(type)  \
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
+#define elf_machine_type_class(type)   \
   (((type) == R_ALPHA_JMP_SLOT         \
     || (type) == R_ALPHA_DTPMOD64      \
     || (type) == R_ALPHA_DTPREL64      \
     || (type) == R_ALPHA_TPREL64) * ELF_RTYPE_CLASS_PLT)
 #else
-# define elf_machine_type_class(type)  \
+#define elf_machine_type_class(type)   \
   (((type) == R_ALPHA_JMP_SLOT) * ELF_RTYPE_CLASS_PLT)
 #endif
 
@@ -439,40 +439,40 @@ elf_machine_rela (struct link_map *map,
          memcpy (reloc_addr_arg, &sym_value, 8);
        }
 #endif
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
       else if (r_type == R_ALPHA_DTPMOD64)
        {
-# ifdef RTLD_BOOTSTRAP
+#ifdef RTLD_BOOTSTRAP
          /* During startup the dynamic linker is always index 1.  */
          *reloc_addr = 1;
-# else
+#else
          /* Get the information from the link map returned by the
             resolv function.  */
          if (sym_map != NULL)
            *reloc_addr = sym_map->l_tls_modid;
-# endif
+#endif
        }
       else if (r_type == R_ALPHA_DTPREL64)
        {
-# ifndef RTLD_BOOTSTRAP
+#ifndef RTLD_BOOTSTRAP
          /* During relocation all TLS symbols are defined and used.
             Therefore the offset is already correct.  */
          *reloc_addr = sym_raw_value;
-# endif
+#endif
        }
       else if (r_type == R_ALPHA_TPREL64)
        {
-# ifdef RTLD_BOOTSTRAP
+#ifdef RTLD_BOOTSTRAP
          *reloc_addr = sym_raw_value + map->l_tls_offset;
-# else
+#else
          if (sym_map)
            {
              CHECK_STATIC_TLS (map, sym_map);
              *reloc_addr = sym_raw_value + sym_map->l_tls_offset;
            }
-# endif
-       }
 #endif
+       }
+#endif /* USE_TLS */
       else
        _dl_reloc_bad_type (map, r_type, 0);
     }
index 7e027691713d8c8784c2262cdd7c13aeae2b432b..24629e9aca3efe2f4f4b9fde9a558933f52948e8 100644 (file)
@@ -1,5 +1,5 @@
 /* Thread-local storage handling in the ELF dynamic linker.  Alpha version.
-   Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -20,6 +20,8 @@
 #include <csu/libc-tls.c>
 #include <dl-tls.h>
 
+#if USE_TLS
+
 /* On Alpha, linker optimizations are not required, so __tls_get_addr
    can be called even in statically linked binaries.  In this case module
    must be always 1 and PT_TLS segment exist in the binary, otherwise it
@@ -31,3 +33,5 @@ __tls_get_addr (tls_index *ti)
   dtv_t *dtv = THREAD_DTV ();
   return (char *) dtv[1].pointer.val + ti->ti_offset;
 }
+
+#endif
index dda91bb80679cb31083d26a950bcddfd5fb64e5f..eee6141c6a1597475338ebdcb159f6affc49f727 100644 (file)
@@ -1,5 +1,5 @@
 /* Run-time dynamic linker data structures for loaded ELF shared objects.
-   Copyright (C) 1995-2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-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
@@ -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,23 @@ 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;
+
+  /* Keep the conditional TLS members at the end so the layout of the
+     structure used by !USE_TLS code matches the prefix of the layout in
+     the USE_TLS rtld.  Note that `struct link_map' is conditionally
+     defined as well, so _dl_rtld_map needs to be last before this.  */
+#ifdef USE_TLS
   /* 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
   {
@@ -474,10 +478,10 @@ struct rtld_global
 /* Number of additional entries in the slotinfo array of each slotinfo
    list element.  A large number makes it almost certain take we never
    have to iterate beyond the first element in the slotinfo list.  */
-#define TLS_SLOTINFO_SURPLUS (62)
+# define TLS_SLOTINFO_SURPLUS (62)
 
 /* Number of additional slots in the dtv allocated.  */
-#define DTV_SURPLUS    (14)
+# define DTV_SURPLUS   (14)
 
   /* Initial dtv of the main thread, not allocated with normal malloc.  */
   EXTERN void *_dl_initial_dtv;
@@ -485,18 +489,31 @@ struct rtld_global
   EXTERN size_t _dl_tls_generation;
 
   EXTERN void (*_dl_init_static_tls) (struct link_map *);
+#endif
+
+  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__
 # ifdef IS_IN_rtld
-#  ifdef HAVE_SDATA_SECTION
-#   define __rtld_local_attribute__ \
+#  ifdef HAVE_VISIBILITY_ATTRIBUTE
+#   ifdef HAVE_SDATA_SECTION
+#    define __rtld_local_attribute__ \
            __attribute__ ((visibility ("hidden"), section (".sdata")))
-#   undef __rtld_global_attribute__
-#   define __rtld_global_attribute__ __attribute__ ((section (".sdata")))
+#    undef __rtld_global_attribute__
+#    define __rtld_global_attribute__ __attribute__ ((section (".sdata")))
+#   else
+#    define __rtld_local_attribute__ __attribute__ ((visibility ("hidden")))
+#   endif
 #  else
-#   define __rtld_local_attribute__ __attribute__ ((visibility ("hidden")))
+#   define __rtld_local_attribute__
 #  endif
 extern struct rtld_global _rtld_local __rtld_local_attribute__;
 #  undef __rtld_local_attribute__
@@ -532,15 +549,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;
 
@@ -569,9 +586,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;
 
@@ -655,10 +669,17 @@ 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
-#  define __rtld_local_attribute__ __attribute__ ((visibility ("hidden")))
+#  ifdef HAVE_VISIBILITY_ATTRIBUTE
+#   define __rtld_local_attribute__ __attribute__ ((visibility ("hidden")))
+#  else
+#   define __rtld_local_attribute__
+#  endif
 extern struct rtld_global_ro _rtld_local_ro
     attribute_relro __rtld_local_attribute__;
 extern struct rtld_global_ro _rtld_global_ro
@@ -1023,7 +1044,9 @@ rtld_hidden_proto (_dl_allocate_tls_init)
 extern void _dl_deallocate_tls (void *tcb, bool dealloc_tcb) internal_function;
 rtld_hidden_proto (_dl_deallocate_tls)
 
+#if defined USE_TLS
 extern void _dl_nothread_init_static_tls (struct link_map *) attribute_hidden;
+#endif
 
 /* Find origin of the executable.  */
 extern const char *_dl_get_origin (void) attribute_hidden;
@@ -1046,6 +1069,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;
 
@@ -1057,6 +1085,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
 
index 06e41ad121b3a61be2163c72dbf35bc4c0555708..6a23ec05e1be507d9b710a13fb62831db37ea2fd 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  Generic version.
-   Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+/* By default no TLS support is available.  This is signaled by the
+   absence of the symbol USE_TLS.  */
+#undef USE_TLS
+
+
 /* An architecture-specific version of this file has to defined a
    number of symbols:
 
index 307c4d702098485103c35e5e5080a6076bc2a388..ab67a18f64ad899721d4bd1b4731d004985e0909 100644 (file)
@@ -1,5 +1,5 @@
 # awk script to generate errlist-compat.c
-# Copyright (C) 2002, 2004, 2006 Free Software Foundation, Inc.
+# Copyright (C) 2002, 2004 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -92,18 +92,16 @@ END {
     printf "# include <bits/wordsize.h>\n";
     printf "extern const char *const __sys_errlist_%s[NERR];\n", old;
     printf "const int __sys_nerr_%s = %d;\n", old, n;
-    printf "declare_symbol_alias (__sys_errlist_%s, _sys_errlist_internal,", \
-      old;
-    printf " object, __WORDSIZE/8*%d)\n", n;
+    printf "strong_alias (_sys_errlist_internal, __sys_errlist_%s)\n", old;
+    printf "declare_symbol (__sys_errlist_%s, object, __WORDSIZE/8*%d)\n", \
+      old, n;
     printf "compat_symbol (libc, __sys_errlist_%s, sys_errlist, %s);\n", \
       old, old;
     printf "compat_symbol (libc, __sys_nerr_%s, sys_nerr, %s);\n", old, old;
 
     printf "extern const char *const ___sys_errlist_%s[NERR];\n", old;
     printf "extern const int __sys_nerr_%s;\n", old;
-    printf "declare_symbol_alias (___sys_errlist_%s, _sys_errlist_internal,", \
-      old;
-    printf " object, __WORDSIZE/8*%d)\n", n;
+    printf "strong_alias (__sys_errlist_%s, ___sys_errlist_%s)\n", old, old;
     printf "strong_alias (__sys_nerr_%s, ___sys_nerr_%s)\n", old, old;
     printf "compat_symbol (libc, ___sys_errlist_%s, _sys_errlist, %s);\n", \
       old, old;
index 2c04ec9b7ff263969ba4297b95fb998c77bedc48..87099ec14a72797c20b898080c8d9c41b7d0a1e9 100644 (file)
@@ -49,7 +49,6 @@
 #define TCP_WINDOW_CLAMP 10    /* Bound advertised window */
 #define TCP_INFO        11     /* Information about this connection. */
 #define        TCP_QUICKACK     12     /* Bock/reenable quick ACKs.  */
-#define TCP_CONGESTION  13     /* Congestion control algorithm.  */
 
 #ifdef __USE_MISC
 # include <sys/types.h>
index 3005f867f0d1e7b98f03916eac8a9f3885883469..cb1875f9eba88c46566ec651709173526c8a10a6 100644 (file)
@@ -1,5 +1,5 @@
 /* Define list of all signal numbers and their names.
-   Copyright (C) 1997-2000, 2002, 2003, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-2000, 2002, 2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -40,30 +40,27 @@ const char *const __new_sys_sigabbrev[NSIG] =
 strong_alias (__new_sys_sigabbrev, _sys_sigabbrev_internal)
 
 #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
-declare_symbol_alias (__old_sys_siglist, __new_sys_siglist, object,
-                     OLD_SIGLIST_SIZE * __WORDSIZE / 8)
+strong_alias (_sys_siglist_internal, __old_sys_siglist)
+declare_symbol (__old_sys_siglist, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8)
 
-declare_symbol_alias (__old_sys_sigabbrev, __new_sys_sigabbrev, object,
-                     OLD_SIGLIST_SIZE * __WORDSIZE / 8)
-
-declare_symbol_alias (_old_sys_siglist, __new_sys_siglist, object,
-                     OLD_SIGLIST_SIZE * __WORDSIZE / 8)
+strong_alias (_sys_sigabbrev_internal, __old_sys_sigabbrev)
+declare_symbol (__old_sys_sigabbrev, object, OLD_SIGLIST_SIZE * __WORDSIZE / 8)
 
+strong_alias (__old_sys_siglist, _old_sys_siglist)
 compat_symbol (libc, __old_sys_siglist, _sys_siglist, GLIBC_2_0);
 compat_symbol (libc, _old_sys_siglist, sys_siglist, GLIBC_2_0);
 compat_symbol (libc, __old_sys_sigabbrev, sys_sigabbrev, GLIBC_2_0);
 #endif
 
 #if SHLIB_COMPAT (libc, GLIBC_2_1, GLIBC_2_3_3) && defined OLD2_SIGLIST_SIZE
-declare_symbol_alias (__old2_sys_siglist, __new_sys_siglist, object,
-                     OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
-
-declare_symbol_alias (__old2_sys_sigabbrev, __new_sys_sigabbrev, object,
-                     OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
+strong_alias (_sys_siglist_internal, __old2_sys_siglist)
+declare_symbol (__old2_sys_siglist, object, OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
 
-declare_symbol_alias (_old2_sys_siglist, __new_sys_siglist, object,
-                     OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
+strong_alias (_sys_sigabbrev_internal, __old2_sys_sigabbrev)
+declare_symbol (__old2_sys_sigabbrev, object,
+               OLD2_SIGLIST_SIZE * __WORDSIZE / 8)
 
+strong_alias (__old2_sys_siglist, _old2_sys_siglist)
 compat_symbol (libc, __old2_sys_siglist, _sys_siglist, GLIBC_2_1);
 compat_symbol (libc, _old2_sys_siglist, sys_siglist, GLIBC_2_1);
 compat_symbol (libc, __old2_sys_sigabbrev, sys_sigabbrev, GLIBC_2_1);
index bed27559c5c97030a0e3e79b68ef5f60746b6fea..7f2ddc2dc590ac827d9be42cdf5078b70f2b56c1 100644 (file)
@@ -1,5 +1,6 @@
 /* Macros to swap the order of bytes in integer values.
-   Copyright (C) 1997,1998,2000,2002,2003,2006 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 2000, 2002, 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
@@ -66,7 +67,8 @@ __bswap_16 (unsigned short int __bsx)
    `bswap' opcode.  On i386 we have to use three instructions.  */
 #  if !defined __i486__ && !defined __pentium__ && !defined __pentiumpro__ \
       && !defined __pentium4__ && !defined __k8__ && !defined __athlon__ \
-      && !defined __k6__
+      && !defined __k6__ && !defined __nocona__ && !defined __core2__ \
+      && !defined __geode__ && !defined __amdfam10__
 #   define __bswap_32(x)                                                     \
      (__extension__                                                          \
       ({ register unsigned int __v, __x = (x);                               \
index 04296d2a9a3a958ff711ce56b2aa2205917de506..df3edf5460268df6deea9a017dedef32aa8cd75b 100644 (file)
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  i386 version.
-   Copyright (C) 1995-2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-2002, 2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -34,7 +34,9 @@ elf_machine_matches_host (const Elf32_Ehdr *ehdr)
 }
 
 
-#ifdef PI_STATIC_AND_HIDDEN
+#if defined PI_STATIC_AND_HIDDEN \
+    && defined HAVE_VISIBILITY_ATTRIBUTE && defined HAVE_HIDDEN \
+    && !defined HAVE_BROKEN_VISIBILITY_ATTRIBUTE
 
 /* Return the link-time address of _DYNAMIC.  Conveniently, this is the
    first element of the GOT, a special entry that is never relocated.  */
@@ -242,7 +244,7 @@ _dl_start_user:\n\
    define the value.
    ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
    of the main executable's symbols, as for a COPY reloc.  */
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
 # define elf_machine_type_class(type) \
   ((((type) == R_386_JMP_SLOT || (type) == R_386_TLS_DTPMOD32                \
      || (type) == R_386_TLS_DTPOFF32 || (type) == R_386_TLS_TPOFF32          \
@@ -350,7 +352,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
          *reloc_addr = value;
          break;
 
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
        case R_386_TLS_DTPMOD32:
 # ifdef RTLD_BOOTSTRAP
          /* During startup the dynamic linker is always the module
@@ -474,6 +476,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
          *reloc_addr = (value + reloc->r_addend - (Elf32_Addr) reloc_addr);
          break;
 
+#  ifdef USE_TLS
        case R_386_TLS_DTPMOD32:
          /* Get the information from the link map returned by the
             resolv function.  */
@@ -510,6 +513,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
                            + reloc->r_addend;
            }
          break;
+#  endif       /* use TLS */
        case R_386_COPY:
          if (sym == NULL)
            /* This can happen in trace mode if an object could not be
index 5604e638f5f8eb4bc0c8ba6e0adc742db94e8299..ce55b72292ecccee37e977640d8e956edb81630c 100644 (file)
@@ -36,11 +36,15 @@ limit:      .double 0.29
 ENTRY(__ieee754_log)
        fldln2                  // log(2)
        fldl    4(%esp)         // x : log(2)
+       fxam
+       fnstsw
 #ifdef PIC
        LOAD_PIC_REG (dx)
 #endif
        fld     %st             // x : x : log(2)
-       fsubl   MO(one)         // x-1 : x : log(2)
+       sahf
+       jc      3f              // in case x is NaN or +-Inf
+4:     fsubl   MO(one)         // x-1 : x : log(2)
        fld     %st             // x-1 : x-1 : x : log(2)
        fabs                    // |x-1| : x-1 : x : log(2)
        fcompl  MO(limit)       // x-1 : x : log(2)
@@ -54,4 +58,9 @@ ENTRY(__ieee754_log)
 2:     fstp    %st(0)          // x : log(2)
        fyl2x                   // log(x)
        ret
+
+3:     jp      4b              // in case x is +-Inf
+       fstp    %st(1)
+       fstp    %st(1)
+       ret
 END (__ieee754_log)
index 128bb2754c414f9639fa1f82d3364459903e74e2..cd4538b594ed0704b62df209b1e7b529d9667f9d 100644 (file)
@@ -37,11 +37,15 @@ limit:      .double 0.29
 ENTRY(__ieee754_logf)
        fldln2                  // log(2)
        flds    4(%esp)         // x : log(2)
+       fxam
+       fnstsw
 #ifdef PIC
        LOAD_PIC_REG (dx)
 #endif
        fld     %st             // x : x : log(2)
-       fsubl   MO(one)         // x-1 : x : log(2)
+       sahf
+       jc      3f              // in case x is NaN or +-Inf
+4:     fsubl   MO(one)         // x-1 : x : log(2)
        fld     %st             // x-1 : x-1 : x : log(2)
        fabs                    // |x-1| : x-1 : x : log(2)
        fcompl  MO(limit)       // x-1 : x : log(2)
@@ -55,4 +59,9 @@ ENTRY(__ieee754_logf)
 2:     fstp    %st(0)          // x : log(2)
        fyl2x                   // log(x)
        ret
+
+3:     jp      4b              // in case x is +-Inf
+       fstp    %st(1)
+       fstp    %st(1)
+       ret
 END (__ieee754_logf)
index 5023d3012ffade32d472c1906cfef25002758452..551dcf1e464363845ad2eca986bfd3b8e94a0773 100644 (file)
@@ -37,11 +37,15 @@ limit:      .double 0.29
 ENTRY(__ieee754_logl)
        fldln2                  // log(2)
        fldt    4(%esp)         // x : log(2)
+       fxam
+       fnstsw
 #ifdef PIC
        LOAD_PIC_REG (dx)
 #endif
        fld     %st             // x : x : log(2)
-       fsubl   MO(one)         // x-1 : x : log(2)
+       sahf
+       jc      3f              // in case x is NaN or +-Inf
+4:     fsubl   MO(one)         // x-1 : x : log(2)
        fld     %st             // x-1 : x-1 : x : log(2)
        fabs                    // |x-1| : x-1 : x : log(2)
        fcompl  MO(limit)       // x-1 : x : log(2)
@@ -55,4 +59,9 @@ ENTRY(__ieee754_logl)
 2:     fstp    %st(0)          // x : log(2)
        fyl2x                   // log(x)
        ret
+
+3:     jp      4b              // in case x is +-Inf
+       fstp    %st(1)
+       fstp    %st(1)
+       ret
 END (__ieee754_logl)
index c554ca4ecbb0ece6be0edf25a6523bb475ddb83a..792f926902a7f63442c29d6e9e11eafed215276e 100644 (file)
@@ -1,5 +1,5 @@
 /* ix87 specific implementation of pow function.
-   Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004, 2005
+   Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004, 2005, 2007
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -161,10 +161,11 @@ ENTRY(__ieee754_pow)
 2:     /* y is a real number.  */
        fxch                    // x : y
        fldl    MO(one)         // 1.0 : x : y
-       fld     %st(1)          // x : 1.0 : x : y
-       fsub    %st(1)          // x-1 : 1.0 : x : y
-       fabs                    // |x-1| : 1.0 : x : y
-       fcompl  MO(limit)       // 1.0 : x : y
+       fldl    MO(limit)       // 0.29 : 1.0 : x : y
+       fld     %st(2)          // x : 0.29 : 1.0 : x : y
+       fsub    %st(2)          // x-1 : 0.29 : 1.0 : x : y
+       fabs                    // |x-1| : 0.29 : 1.0 : x : y
+       fucompp                 // 1.0 : x : y
        fnstsw
        fxch                    // x : 1.0 : y
        sahf
@@ -197,9 +198,10 @@ ENTRY(__ieee754_pow)
        // y == ±inf
        .align ALIGNARG(4)
 12:    fstp    %st(0)          // pop y
-       fldl    4(%esp)         // x
-       fabs
-       fcompl  MO(one)         // < 1, == 1, or > 1
+       fldl    MO(one)         // 1
+       fldl    4(%esp)         // x : 1
+       fabs                    // abs(x) : 1
+       fucompp                 // < 1, == 1, or > 1
        fnstsw
        andb    $0x45, %ah
        cmpb    $0x45, %ah
index c835b978b9fce6fc5c95511f523f88331ccd016f..c91545418d6142f4e327c54dec592bb953e5ccd6 100644 (file)
@@ -1,5 +1,5 @@
 /* ix87 specific implementation of pow function.
-   Copyright (C) 1996, 1997, 1999, 2001, 2004, 2005
+   Copyright (C) 1996, 1997, 1999, 2001, 2004, 2005, 2007
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -155,10 +155,11 @@ ENTRY(__ieee754_powf)
 2:     /* y is a real number.  */
        fxch                    // x : y
        fldl    MO(one)         // 1.0 : x : y
-       fld     %st(1)          // x : 1.0 : x : y
-       fsub    %st(1)          // x-1 : 1.0 : x : y
-       fabs                    // |x-1| : 1.0 : x : y
-       fcompl  MO(limit)       // 1.0 : x : y
+       fldl    MO(limit)       // 0.29 : 1.0 : x : y
+       fld     %st(2)          // x : 0.29 : 1.0 : x : y
+       fsub    %st(2)          // x-1 : 0.29 : 1.0 : x : y
+       fabs                    // |x-1| : 0.29 : 1.0 : x : y
+       fucompp                 // 1.0 : x : y
        fnstsw
        fxch                    // x : 1.0 : y
        sahf
@@ -191,9 +192,10 @@ ENTRY(__ieee754_powf)
        // y == ±inf
        .align ALIGNARG(4)
 12:    fstp    %st(0)          // pop y
-       flds    4(%esp)         // x
-       fabs
-       fcompl  MO(one)         // < 1, == 1, or > 1
+       fldl    MO(one)         // 1
+       flds    4(%esp)         // x : 1
+       fabs                    // abs(x) : 1
+       fucompp                 // < 1, == 1, or > 1
        fnstsw
        andb    $0x45, %ah
        cmpb    $0x45, %ah
index 74f422816a4d31a6f9a47ec5f29a4ecda2397272..6215496207f92ebf2e9786b09996d07f73530e3b 100644 (file)
@@ -1,5 +1,5 @@
 /* ix87 specific implementation of pow function.
-   Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004, 2005
+   Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004, 2005, 2007
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -161,10 +161,11 @@ ENTRY(__ieee754_powl)
 2:     /* y is a real number.  */
        fxch                    // x : y
        fldl    MO(one)         // 1.0 : x : y
-       fld     %st(1)          // x : 1.0 : x : y
-       fsub    %st(1)          // x-1 : 1.0 : x : y
-       fabs                    // |x-1| : 1.0 : x : y
-       fcompl  MO(limit)       // 1.0 : x : y
+       fldl    MO(limit)       // 0.29 : 1.0 : x : y
+       fld     %st(2)          // x : 0.29 : 1.0 : x : y
+       fsub    %st(2)          // x-1 : 0.29 : 1.0 : x : y
+       fabs                    // |x-1| : 0.29 : 1.0 : x : y
+       fucompp                 // 1.0 : x : y
        fnstsw
        fxch                    // x : 1.0 : y
        sahf
@@ -210,9 +211,10 @@ ENTRY(__ieee754_powl)
        // y == ±inf
        .align ALIGNARG(4)
 12:    fstp    %st(0)          // pop y
-       fldt    4(%esp)         // x
-       fabs
-       fcompl  MO(one)         // < 1, == 1, or > 1
+       fldl    MO(one)         // 1
+       fldt    4(%esp)         // x : 1
+       fabs                    // abs(x) : 1
+       fucompp                 // < 1, == 1, or > 1
        fnstsw
        andb    $0x45, %ah
        cmpb    $0x45, %ah
diff --git a/sysdeps/i386/fpu/math_private.h b/sysdeps/i386/fpu/math_private.h
new file mode 100644 (file)
index 0000000..a426788
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef _MATH_PRIVATE_H
+
+#define math_opt_barrier(x) \
+({ __typeof(x) __x;                                    \
+   __asm ("" : "=t" (__x) : "0" (x));                  \
+   __x; })
+#define math_force_eval(x) \
+do                                                     \
+  {                                                    \
+    if (sizeof (x) <= sizeof (double))                 \
+      __asm __volatile ("" : : "m" (x));               \
+    else                                               \
+      __asm __volatile ("" : : "f" (x));               \
+  }                                                    \
+while (0)
+
+#include <math/math_private.h>
+#endif
index 5b617cb4e7a0c97dcdcaa6f29f47d692c4ed2230..aef0a144e5331e8b4b95bc2be4331dfe4611efc1 100644 (file)
@@ -27,7 +27,7 @@ static char rcsid[] = "$NetBSD: $";
  */
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
 
 #ifdef __STDC__
        long double __nextafterl(long double x, long double y)
@@ -52,9 +52,12 @@ static char rcsid[] = "$NetBSD: $";
           return x+y;
        if(x==y) return y;              /* x=y, return y */
        if((ix|hx|lx)==0) {                     /* x == 0 */
+           long double u;
            SET_LDOUBLE_WORDS(x,esy&0x8000,0,1);/* return +-minsubnormal */
-           y = x*x;
-           if(y==x) return y; else return x;   /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(esx>=0) {                    /* x > 0 */
            if(esx>esy||((esx==esy) && (hx>hy||((hx==hy)&&(lx>ly))))) {
@@ -109,12 +112,9 @@ static char rcsid[] = "$NetBSD: $";
        }
        esy = esx&0x7fff;
        if(esy==0x7fff) return x+x;     /* overflow  */
-       if(esy==0) {                    /* underflow */
-           y = x*x;
-           if(y!=x) {          /* raise underflow flag */
-               SET_LDOUBLE_WORDS(y,esx,hx,lx);
-               return y;
-           }
+       if(esy==0) {
+           long double u = x*x;                /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        SET_LDOUBLE_WORDS(x,esx,hx,lx);
        return x;
index 2bd768e4487739c8ea078188fe42ecd6749a7c06..9bd86a3724a80c086386465dcd74f2c2c2fe1b42 100644 (file)
@@ -27,7 +27,8 @@ static char rcsid[] = "$NetBSD: $";
  */
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
+#include <float.h>
 
 #ifdef __STDC__
        double __nexttoward(double x, long double y)
@@ -52,10 +53,12 @@ static char rcsid[] = "$NetBSD: $";
           return x+y;
        if((long double) x==y) return y;        /* x=y, return y */
        if((ix|lx)==0) {                        /* x == 0 */
-           double x2;
+           double u;
            INSERT_WORDS(x,(esy&0x8000)<<16,1); /* return +-minsub */
-           x2 = x*x;
-           if(x2==x) return x2; else return x; /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if (esy>=0x8000||((ix>>20)&0x7ff)>iy-0x3c00
@@ -85,16 +88,14 @@ static char rcsid[] = "$NetBSD: $";
        hy = hx&0x7ff00000;
        if(hy>=0x7ff00000) {
          x = x+x;      /* overflow  */
-         /* Force conversion to double.  */
-         asm ("" : "=m"(x) : "m"(x));
+         if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
+           /* Force conversion to double.  */
+           asm ("" : "+m"(x));
          return x;
        }
-       if(hy<0x00100000) {             /* underflow */
-           double x2 = x*x;
-           if(x2!=x) {         /* raise underflow flag */
-               INSERT_WORDS(x2,hx,lx);
-               return x2;
-           }
+       if(hy<0x00100000) {
+           double u = x*x;                     /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        INSERT_WORDS(x,hx,lx);
        return x;
index 3fbe53c3382dcd335f71113b6d1322dcd069ee55..25f70e4f4d65f49bf8648d87a6fbdc2ef94b5585 100644 (file)
@@ -19,7 +19,8 @@ static char rcsid[] = "$NetBSD: $";
 #endif
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
+#include <float.h>
 
 #ifdef __STDC__
        float __nexttowardf(float x, long double y)
@@ -44,10 +45,12 @@ static char rcsid[] = "$NetBSD: $";
           return x+y;
        if((long double) x==y) return y;        /* x=y, return y */
        if(ix==0) {                             /* x == 0 */
-           float x2;
+           float u;
            SET_FLOAT_WORD(x,((esy&0x8000)<<16)|1);/* return +-minsub*/
-           x2 = x*x;
-           if(x2==x) return x2; else return x; /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if(esy>=0x8000||((ix>>23)&0xff)>iy-0x3f80
@@ -69,16 +72,14 @@ static char rcsid[] = "$NetBSD: $";
        hy = hx&0x7f800000;
        if(hy>=0x7f800000) {
          x = x+x;      /* overflow  */
-         /* Force conversion to float.  */
-         asm ("" : "=m"(x) : "m"(x));
+         if (FLT_EVAL_METHOD != 0)
+           /* Force conversion to float.  */
+           asm ("" : "+m"(x));
          return x;
        }
-       if(hy<0x00800000) {             /* underflow */
-           float x2 = x*x;
-           if(x2!=x) {         /* raise underflow flag */
-               SET_FLOAT_WORD(x2,hx);
-               return x2;
-           }
+       if(hy<0x00800000) {
+           float u = x*x;                      /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        SET_FLOAT_WORD(x,hx);
        return x;
index a27734c37e0ef4d20db188199f5dd35184c1ba3b..c748761758c36cfcd2234652e6cd9a761148bae8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+/* 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.
 
@@ -18,7 +18,6 @@
    02111-1307 USA.  */
 
 #include <stdint.h>
-#include <tls.h>       /* For tcbhead_t.  */
 
 
 typedef int8_t atomic8_t;
@@ -77,40 +76,6 @@ typedef uintmax_t uatomic_max_t;
                       : "r" (newval), "m" (*mem), "0" (oldval));             \
      ret; })
 
-
-#define __arch_c_compare_and_exchange_val_8_acq(mem, newval, oldval) \
-  ({ __typeof (*mem) ret;                                                    \
-     __asm __volatile ("cmpl $0, %%gs:%P5\n\t"                                \
-                       "je 0f\n\t"                                            \
-                       "lock\n"                                               \
-                       "0:\tcmpxchgb %b2, %1"                                \
-                      : "=a" (ret), "=m" (*mem)                              \
-                      : "q" (newval), "m" (*mem), "0" (oldval),              \
-                        "i" (offsetof (tcbhead_t, multiple_threads)));       \
-     ret; })
-
-#define __arch_c_compare_and_exchange_val_16_acq(mem, newval, oldval) \
-  ({ __typeof (*mem) ret;                                                    \
-     __asm __volatile ("cmpl $0, %%gs:%P5\n\t"                                \
-                       "je 0f\n\t"                                            \
-                       "lock\n"                                               \
-                       "0:\tcmpxchgw %w2, %1"                                \
-                      : "=a" (ret), "=m" (*mem)                              \
-                      : "r" (newval), "m" (*mem), "0" (oldval),              \
-                        "i" (offsetof (tcbhead_t, multiple_threads)));       \
-     ret; })
-
-#define __arch_c_compare_and_exchange_val_32_acq(mem, newval, oldval) \
-  ({ __typeof (*mem) ret;                                                    \
-     __asm __volatile ("cmpl $0, %%gs:%P5\n\t"                                \
-                       "je 0f\n\t"                                            \
-                       "lock\n"                                               \
-                       "0:\tcmpxchgl %2, %1"                                 \
-                      : "=a" (ret), "=m" (*mem)                              \
-                      : "r" (newval), "m" (*mem), "0" (oldval),              \
-                        "i" (offsetof (tcbhead_t, multiple_threads)));       \
-     ret; })
-
 /* XXX We do not really need 64-bit compare-and-exchange.  At least
    not in the moment.  Using it would mean causing portability
    problems since not many other 32-bit architectures have support for
@@ -120,8 +85,6 @@ typedef uintmax_t uatomic_max_t;
 #if 1
 # define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
   ({ __typeof (*mem) ret = *(mem); abort (); ret = (newval); ret = (oldval); })
-# define __arch_c_compare_and_exchange_val_64_acq(mem, newval, oldval) \
-  ({ __typeof (*mem) ret = *(mem); abort (); ret = (newval); ret = (oldval); })
 #else
 # ifdef __PIC__
 #  define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
@@ -137,24 +100,6 @@ typedef uintmax_t uatomic_max_t;
                                          & 0xffffffff),                      \
                         "d" (((unsigned long long int) (oldval)) >> 32));    \
      ret; })
-
-#  define __arch_c_compare_and_exchange_val_64_acq(mem, newval, oldval) \
-  ({ __typeof (*mem) ret;                                                    \
-     __asm __volatile ("xchgl %2, %%ebx\n\t"                                 \
-                      "cmpl $0, %%gs:%P7\n\t"                                \
-                      "je 0f\n\t"                                            \
-                      "lock\n"                                               \
-                      "0:\tcmpxchg8b %1\n\t"                                 \
-                      "xchgl %2, %%ebx"                                      \
-                      : "=A" (ret), "=m" (*mem)                              \
-                      : "DS" (((unsigned long long int) (newval))            \
-                              & 0xffffffff),                                 \
-                        "c" (((unsigned long long int) (newval)) >> 32),     \
-                        "m" (*mem), "a" (((unsigned long long int) (oldval)) \
-                                         & 0xffffffff),                      \
-                        "d" (((unsigned long long int) (oldval)) >> 32),     \
-                        "i" (offsetof (tcbhead_t, multiple_threads)));       \
-     ret; })
 # else
 #  define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
   ({ __typeof (*mem) ret;                                                    \
@@ -167,22 +112,6 @@ typedef uintmax_t uatomic_max_t;
                                          & 0xffffffff),                      \
                         "d" (((unsigned long long int) (oldval)) >> 32));    \
      ret; })
-
-#  define __arch_c_compare_and_exchange_val_64_acq(mem, newval, oldval) \
-  ({ __typeof (*mem) ret;                                                    \
-     __asm __volatile ("cmpl $0, %%gs:%P7\n\t"                               \
-                      "je 0f\n\t"                                            \
-                      "lock\n"                                               \
-                      "0:\tcmpxchg8b %1"                                     \
-                      : "=A" (ret), "=m" (*mem)                              \
-                      : "b" (((unsigned long long int) (newval))             \
-                             & 0xffffffff),                                  \
-                        "c" (((unsigned long long int) (newval)) >> 32),     \
-                        "m" (*mem), "a" (((unsigned long long int) (oldval)) \
-                                         & 0xffffffff),                      \
-                        "d" (((unsigned long long int) (oldval)) >> 32),     \
-                        "i" (offsetof (tcbhead_t, multiple_threads)));       \
-     ret; })
 # endif
 #endif
 
@@ -210,24 +139,21 @@ typedef uintmax_t uatomic_max_t;
      result; })
 
 
-#define __arch_exchange_and_add_body(lock, pfx, mem, value) \
+#define atomic_exchange_and_add(mem, value) \
   ({ __typeof (*mem) __result;                                               \
      __typeof (value) __addval = (value);                                    \
      if (sizeof (*mem) == 1)                                                 \
-       __asm __volatile (lock "xaddb %b0, %1"                                \
+       __asm __volatile (LOCK_PREFIX "xaddb %b0, %1"                         \
                         : "=r" (__result), "=m" (*mem)                       \
-                        : "0" (__addval), "m" (*mem),                        \
-                          "i" (offsetof (tcbhead_t, multiple_threads)));     \
+                        : "0" (__addval), "m" (*mem));                       \
      else if (sizeof (*mem) == 2)                                            \
-       __asm __volatile (lock "xaddw %w0, %1"                                \
+       __asm __volatile (LOCK_PREFIX "xaddw %w0, %1"                         \
                         : "=r" (__result), "=m" (*mem)                       \
-                        : "0" (__addval), "m" (*mem),                        \
-                          "i" (offsetof (tcbhead_t, multiple_threads)));     \
+                        : "0" (__addval), "m" (*mem));                       \
      else if (sizeof (*mem) == 4)                                            \
-       __asm __volatile (lock "xaddl %0, %1"                                 \
+       __asm __volatile (LOCK_PREFIX "xaddl %0, %1"                          \
                         : "=r" (__result), "=m" (*mem)                       \
-                        : "0" (__addval), "m" (*mem),                        \
-                          "i" (offsetof (tcbhead_t, multiple_threads)));     \
+                        : "0" (__addval), "m" (*mem));                       \
      else                                                                    \
        {                                                                     \
         __typeof (mem) __memp = (mem);                                       \
@@ -235,64 +161,41 @@ typedef uintmax_t uatomic_max_t;
         __result = *__memp;                                                  \
         do                                                                   \
           __tmpval = __result;                                               \
-        while ((__result = pfx##_compare_and_exchange_val_64_acq             \
+        while ((__result = __arch_compare_and_exchange_val_64_acq            \
                 (__memp, __result + __addval, __result)) == __tmpval);       \
        }                                                                     \
      __result; })
 
-#define atomic_exchange_and_add(mem, value) \
-  __arch_exchange_and_add_body (LOCK_PREFIX, __arch, mem, value)
-
-#define __arch_exchange_and_add_cprefix \
-  "cmpl $0, %%gs:%P4\n\tje 0f\n\tlock\n0:\t"
-
-#define catomic_exchange_and_add(mem, value) \
-  __arch_exchange_and_add_body (__arch_exchange_and_add_cprefix, __arch_c,    \
-                               mem, value)
-
-
-#define __arch_add_body(lock, pfx, mem, value) \
-  do {                                                                       \
-    if (__builtin_constant_p (value) && (value) == 1)                        \
-      atomic_increment (mem);                                                \
-    else if (__builtin_constant_p (value) && (value) == -1)                  \
-      atomic_decrement (mem);                                                \
-    else if (sizeof (*mem) == 1)                                             \
-      __asm __volatile (lock "addb %b1, %0"                                  \
-                       : "=m" (*mem)                                         \
-                       : "ir" (value), "m" (*mem),                           \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (lock "addw %w1, %0"                                  \
-                       : "=m" (*mem)                                         \
-                       : "ir" (value), "m" (*mem),                           \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (lock "addl %1, %0"                                   \
-                       : "=m" (*mem)                                         \
-                       : "ir" (value), "m" (*mem),                           \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else                                                                     \
-      {                                                                              \
-       __typeof (value) __addval = (value);                                  \
-       __typeof (mem) __memp = (mem);                                        \
-       __typeof (*mem) __oldval = *__memp;                                   \
-       __typeof (*mem) __tmpval;                                             \
-       do                                                                    \
-         __tmpval = __oldval;                                                \
-       while ((__oldval = pfx##_compare_and_exchange_val_64_acq              \
-               (__memp, __oldval + __addval, __oldval)) == __tmpval);        \
-      }                                                                              \
-  } while (0)
 
 #define atomic_add(mem, value) \
-  __arch_add_body (LOCK_PREFIX, __arch, mem, value)
-
-#define __arch_add_cprefix \
-  "cmpl $0, %%gs:%P3\n\tje 0f\n\tlock\n0:\t"
-
-#define catomic_add(mem, value) \
-  __arch_add_body (__arch_add_cprefix, __arch_c, mem, value)
+  (void) ({ if (__builtin_constant_p (value) && (value) == 1)                \
+             atomic_increment (mem);                                         \
+           else if (__builtin_constant_p (value) && (value) == -1)           \
+             atomic_decrement (mem);                                         \
+           else if (sizeof (*mem) == 1)                                      \
+             __asm __volatile (LOCK_PREFIX "addb %b1, %0"                    \
+                               : "=m" (*mem)                                 \
+                               : "ir" (value), "m" (*mem));                  \
+           else if (sizeof (*mem) == 2)                                      \
+             __asm __volatile (LOCK_PREFIX "addw %w1, %0"                    \
+                               : "=m" (*mem)                                 \
+                               : "ir" (value), "m" (*mem));                  \
+           else if (sizeof (*mem) == 4)                                      \
+             __asm __volatile (LOCK_PREFIX "addl %1, %0"                     \
+                               : "=m" (*mem)                                 \
+                               : "ir" (value), "m" (*mem));                  \
+           else                                                              \
+             {                                                               \
+               __typeof (value) __addval = (value);                          \
+               __typeof (mem) __memp = (mem);                                \
+               __typeof (*mem) __oldval = *__memp;                           \
+               __typeof (*mem) __tmpval;                                     \
+               do                                                            \
+                 __tmpval = __oldval;                                        \
+               while ((__oldval = __arch_compare_and_exchange_val_64_acq     \
+                      (__memp, __oldval + __addval, __oldval)) == __tmpval); \
+             }                                                               \
+           })
 
 
 #define atomic_add_negative(mem, value) \
@@ -333,42 +236,30 @@ typedef uintmax_t uatomic_max_t;
      __result; })
 
 
-#define __arch_increment_body(lock,  pfx, mem) \
-  do {                                                                       \
-    if (sizeof (*mem) == 1)                                                  \
-      __asm __volatile (lock "incb %b0"                                              \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (lock "incw %w0"                                              \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (lock "incl %0"                                       \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else                                                                     \
-      {                                                                              \
-       __typeof (mem) __memp = (mem);                                        \
-       __typeof (*mem) __oldval = *__memp;                                   \
-       __typeof (*mem) __tmpval;                                             \
-       do                                                                    \
-         __tmpval = __oldval;                                                \
-       while ((__oldval = pfx##_compare_and_exchange_val_64_acq              \
-               (__memp, __oldval + 1, __oldval)) == __tmpval);               \
-      }                                                                              \
-  } while (0)
-
-#define atomic_increment(mem) __arch_increment_body (LOCK_PREFIX, __arch, mem)
-
-#define __arch_increment_cprefix \
-  "cmpl $0, %%gs:%P2\n\tje 0f\n\tlock\n0:\t"
-
-#define catomic_increment(mem) \
-  __arch_increment_body (__arch_increment_cprefix, __arch_c, mem)
+#define atomic_increment(mem) \
+  (void) ({ if (sizeof (*mem) == 1)                                          \
+             __asm __volatile (LOCK_PREFIX "incb %b0"                        \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else if (sizeof (*mem) == 2)                                      \
+             __asm __volatile (LOCK_PREFIX "incw %w0"                        \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else if (sizeof (*mem) == 4)                                      \
+             __asm __volatile (LOCK_PREFIX "incl %0"                         \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else                                                              \
+             {                                                               \
+               __typeof (mem) __memp = (mem);                                \
+               __typeof (*mem) __oldval = *__memp;                           \
+               __typeof (*mem) __tmpval;                                     \
+               do                                                            \
+                 __tmpval = __oldval;                                        \
+               while ((__oldval = __arch_compare_and_exchange_val_64_acq     \
+                      (__memp, __oldval + 1, __oldval)) == __tmpval);        \
+             }                                                               \
+           })
 
 
 #define atomic_increment_and_test(mem) \
@@ -390,42 +281,30 @@ typedef uintmax_t uatomic_max_t;
      __result; })
 
 
-#define __arch_decrement_body(lock, pfx, mem) \
-  do {                                                                       \
-    if (sizeof (*mem) == 1)                                                  \
-      __asm __volatile (lock "decb %b0"                                              \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (lock "decw %w0"                                              \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (lock "decl %0"                                       \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else                                                                     \
-      {                                                                              \
-       __typeof (mem) __memp = (mem);                                        \
-       __typeof (*mem) __oldval = *__memp;                                   \
-       __typeof (*mem) __tmpval;                                             \
-       do                                                                    \
-         __tmpval = __oldval;                                                \
-       while ((__oldval = pfx##_compare_and_exchange_val_64_acq              \
-               (__memp, __oldval - 1, __oldval)) == __tmpval);               \
-      }                                                                              \
-  } while (0)
-
-#define atomic_decrement(mem) __arch_decrement_body (LOCK_PREFIX, __arch, mem)
-
-#define __arch_decrement_cprefix \
-  "cmpl $0, %%gs:%P2\n\tje 0f\n\tlock\n0:\t"
-
-#define catomic_decrement(mem) \
-  __arch_decrement_body (__arch_decrement_cprefix, __arch_c, mem)
+#define atomic_decrement(mem) \
+  (void) ({ if (sizeof (*mem) == 1)                                          \
+             __asm __volatile (LOCK_PREFIX "decb %b0"                        \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else if (sizeof (*mem) == 2)                                      \
+             __asm __volatile (LOCK_PREFIX "decw %w0"                        \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else if (sizeof (*mem) == 4)                                      \
+             __asm __volatile (LOCK_PREFIX "decl %0"                         \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else                                                              \
+             {                                                               \
+               __typeof (mem) __memp = (mem);                                \
+               __typeof (*mem) __oldval = *__memp;                           \
+               __typeof (*mem) __tmpval;                                     \
+               do                                                            \
+                 __tmpval = __oldval;                                        \
+               while ((__oldval = __arch_compare_and_exchange_val_64_acq     \
+                      (__memp, __oldval - 1, __oldval)) == __tmpval);        \
+             }                                                               \
+           })
 
 
 #define atomic_decrement_and_test(mem) \
@@ -448,22 +327,21 @@ typedef uintmax_t uatomic_max_t;
 
 
 #define atomic_bit_set(mem, bit) \
-  do {                                                                       \
-    if (sizeof (*mem) == 1)                                                  \
-      __asm __volatile (LOCK_PREFIX "orb %b2, %0"                            \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem), "ir" (1 << (bit)));                     \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (LOCK_PREFIX "orw %w2, %0"                            \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem), "ir" (1 << (bit)));                     \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (LOCK_PREFIX "orl %2, %0"                             \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem), "ir" (1 << (bit)));                     \
-    else                                                                     \
-      abort ();                                                                      \
-  } while (0)
+  (void) ({ if (sizeof (*mem) == 1)                                          \
+             __asm __volatile (LOCK_PREFIX "orb %b2, %0"                     \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem), "ir" (1 << (bit)));             \
+           else if (sizeof (*mem) == 2)                                      \
+             __asm __volatile (LOCK_PREFIX "orw %w2, %0"                     \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem), "ir" (1 << (bit)));             \
+           else if (sizeof (*mem) == 4)                                      \
+             __asm __volatile (LOCK_PREFIX "orl %2, %0"                      \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem), "ir" (1 << (bit)));             \
+           else                                                              \
+             abort ();                                                       \
+           })
 
 
 #define atomic_bit_test_set(mem, bit) \
@@ -486,51 +364,3 @@ typedef uintmax_t uatomic_max_t;
 
 
 #define atomic_delay() asm ("rep; nop")
-
-
-#define atomic_and(mem, mask) \
-  do {                                                                       \
-    if (sizeof (*mem) == 1)                                                  \
-      __asm __volatile (LOCK_PREFIX "andb %1, %b0"                           \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem));                           \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (LOCK_PREFIX "andw %1, %w0"                           \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem));                           \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (LOCK_PREFIX "andl %1, %0"                            \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem));                           \
-    else                                                                     \
-      abort ();                                                                      \
-  } while (0)
-
-
-#define __arch_or_body(lock, mem, mask) \
-  do {                                                                       \
-    if (sizeof (*mem) == 1)                                                  \
-      __asm __volatile (lock "orb %1, %b0"                                   \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem),                            \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (lock "orw %1, %w0"                                   \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem),                            \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (lock "orl %1, %0"                                    \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem),                            \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else                                                                     \
-      abort ();                                                                      \
-  } while (0)
-
-#define atomic_or(mem, mask) __arch_or_body (LOCK_PREFIX, mem, mask)
-
-#define __arch_or_cprefix \
-  "cmpl $0, %%gs:%P3\n\tje 0f\n\tlock\n0:\t"
-
-#define catomic_or(mem, mask) __arch_or_body (__arch_or_cprefix, mem, mask)
index 4fa6adea987e04648eb43c2f9707098473c02579..4bd5394bec11b2dd611b33232cffd8ea75841ca2 100644 (file)
@@ -1,5 +1,5 @@
 /* Compare two memory blocks for differences in the first COUNT bytes.
-   Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
      absolute address.  */                                                   \
   addl (%ebx,INDEX,4), %ebx
 
+#ifdef HAVE_HIDDEN
        .section        .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits
        .globl  __i686.get_pc_thunk.bx
        .hidden __i686.get_pc_thunk.bx
+#else
+        .text
+#endif
        ALIGN (4)
        .type   __i686.get_pc_thunk.bx,@function
 __i686.get_pc_thunk.bx:
@@ -380,38 +384,38 @@ END (BP_SYM (memcmp))
        .section        .rodata
        ALIGN (2)
 L(table_32bytes) :
-       .long   L(0bytes) - L(table_32bytes)
-       .long   L(1bytes) - L(table_32bytes)
-       .long   L(2bytes) - L(table_32bytes)
-       .long   L(3bytes) - L(table_32bytes)
-       .long   L(4bytes) - L(table_32bytes)
-       .long   L(5bytes) - L(table_32bytes)
-       .long   L(6bytes) - L(table_32bytes)
-       .long   L(7bytes) - L(table_32bytes)
-       .long   L(8bytes) - L(table_32bytes)
-       .long   L(9bytes) - L(table_32bytes)
-       .long   L(10bytes) - L(table_32bytes)
-       .long   L(11bytes) - L(table_32bytes)
-       .long   L(12bytes) - L(table_32bytes)
-       .long   L(13bytes) - L(table_32bytes)
-       .long   L(14bytes) - L(table_32bytes)
-       .long   L(15bytes) - L(table_32bytes)
-       .long   L(16bytes) - L(table_32bytes)
-       .long   L(17bytes) - L(table_32bytes)
-       .long   L(18bytes) - L(table_32bytes)
-       .long   L(19bytes) - L(table_32bytes)
-       .long   L(20bytes) - L(table_32bytes)
-       .long   L(21bytes) - L(table_32bytes)
-       .long   L(22bytes) - L(table_32bytes)
-       .long   L(23bytes) - L(table_32bytes)
-       .long   L(24bytes) - L(table_32bytes)
-       .long   L(25bytes) - L(table_32bytes)
-       .long   L(26bytes) - L(table_32bytes)
-       .long   L(27bytes) - L(table_32bytes)
-       .long   L(28bytes) - L(table_32bytes)
-       .long   L(29bytes) - L(table_32bytes)
-       .long   L(30bytes) - L(table_32bytes)
-       .long   L(31bytes) - L(table_32bytes)
+       .long   L(0bytes) - . + 0x0
+       .long   L(1bytes) - . + 0x4
+       .long   L(2bytes) - . + 0x8
+       .long   L(3bytes) - . + 0xc
+       .long   L(4bytes) - . + 0x10
+       .long   L(5bytes) - . + 0x14
+       .long   L(6bytes) - . + 0x18
+       .long   L(7bytes) - . + 0x1c
+       .long   L(8bytes) - . + 0x20
+       .long   L(9bytes) - . + 0x24
+       .long   L(10bytes) - . + 0x28
+       .long   L(11bytes) - . + 0x2c
+       .long   L(12bytes) - . + 0x30
+       .long   L(13bytes) - . + 0x34
+       .long   L(14bytes) - . + 0x38
+       .long   L(15bytes) - . + 0x3c
+       .long   L(16bytes) - . + 0x40
+       .long   L(17bytes) - . + 0x44
+       .long   L(18bytes) - . + 0x48
+       .long   L(19bytes) - . + 0x4c
+       .long   L(20bytes) - . + 0x50
+       .long   L(21bytes) - . + 0x54
+       .long   L(22bytes) - . + 0x58
+       .long   L(23bytes) - . + 0x5c
+       .long   L(24bytes) - . + 0x60
+       .long   L(25bytes) - . + 0x64
+       .long   L(26bytes) - . + 0x68
+       .long   L(27bytes) - . + 0x6c
+       .long   L(28bytes) - . + 0x70
+       .long   L(29bytes) - . + 0x74
+       .long   L(30bytes) - . + 0x78
+       .long   L(31bytes) - . + 0x7c
 
 
 #undef bcmp
index bf4e4ff43fb7e70b85efd8c8ef126f98996a8c1e..01be7772705971d2750ef2eaed0ed5c0c7a10698 100644 (file)
@@ -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/sysdeps/i386/soft-fp/sfp-machine.h b/sysdeps/i386/soft-fp/sfp-machine.h
new file mode 100644 (file)
index 0000000..ed71ae4
--- /dev/null
@@ -0,0 +1,89 @@
+#define _FP_W_TYPE_SIZE                32
+#define _FP_W_TYPE             unsigned long
+#define _FP_WS_TYPE            signed long
+#define _FP_I_TYPE             long
+
+#define __FP_FRAC_ADD_2(rh, rl, xh, xl, yh, yl)                                \
+  __asm__("addl %5,%1; adcl %3,%0"                                     \
+         : "=r"(rh), "=r"(rl)                                          \
+         : "%0"(xh), "g"(yh), "%1"(xl), "g"(yl)                        \
+         : "cc")
+
+#define __FP_FRAC_ADD_4(r3,r2,r1,r0,x3,x2,x1,x0,y3,y2,y1,y0)           \
+  do {                                                                         \
+    __asm__ volatile("addl %5,%1; adcl %3,%0"                          \
+                    : "=r"(r1), "=r"(r0)                               \
+                    : "%0"(x1), "g"(y1), "%1"(x0), "g"(y0)             \
+                    : "cc");                                           \
+    __asm__ volatile("adcl %5,%1; adcl %3,%0"                          \
+                    : "=r"(r3), "=r"(r2)                               \
+                    : "%0"(x3), "g"(y3), "%1"(x2), "g"(y2)             \
+                    : "cc");                                           \
+  } while (0)
+
+#define __FP_FRAC_SUB_2(rh, rl, xh, xl, yh, yl)                                \
+  __asm__("subl %5,%1; sbbl %4,%0"                                     \
+         : "=r"(rh), "=r"(rl)                                          \
+         : "0"(xh), "1"(xl), "g"(yh), "g"(yl)                          \
+         : "cc")
+
+#define __FP_CLZ(r, x)                                                 \
+  do {                                                                 \
+    __asm__("bsrl %1,%0" : "=r"(r) : "g"(x) : "cc");                   \
+    r ^= 31;                                                           \
+  } while (0)
+
+#define _i386_mul_32_64(rh, rl, x, y)                                  \
+  __asm__("mull %2" : "=d"(rh), "=a"(rl) : "%g"(x), "1"(y) : "cc")
+
+#define _i386_div_64_32(q, r, nh, nl, d)                               \
+  __asm__ ("divl %4" : "=a"(q), "=d"(r) : "0"(nl), "1"(nh), "g"(d) : "cc")
+
+
+#define _FP_MUL_MEAT_S(R,X,Y)                                  \
+  _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,_i386_mul_32_64)
+#define _FP_MUL_MEAT_D(R,X,Y)                                  \
+  _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,_i386_mul_32_64)
+
+#define _FP_DIV_MEAT_S(R,X,Y)  _FP_DIV_MEAT_1_udiv(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y)  _FP_DIV_MEAT_2_udiv(D,R,X,Y)
+
+#define _FP_NANFRAC_S          _FP_QNANBIT_S
+#define _FP_NANFRAC_D          _FP_QNANBIT_D, 0
+#define _FP_NANFRAC_Q          _FP_QNANBIT_Q, 0, 0, 0
+#define _FP_NANSIGN_S          1
+#define _FP_NANSIGN_D          1
+#define _FP_NANSIGN_Q          1
+
+#define _FP_KEEPNANFRACP 1
+/* Here is something Intel misdesigned: the specs don't define
+   the case where we have two NaNs with same mantissas, but
+   different sign. Different operations pick up different NaNs.
+ */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP)                     \
+  do {                                                         \
+    if (_FP_FRAC_GT_##wc(X, Y)                                 \
+       || (_FP_FRAC_EQ_##wc(X,Y) && (OP == '+' || OP == '*'))) \
+      {                                                                \
+       R##_s = X##_s;                                          \
+        _FP_FRAC_COPY_##wc(R,X);                               \
+      }                                                                \
+    else                                                       \
+      {                                                                \
+       R##_s = Y##_s;                                          \
+        _FP_FRAC_COPY_##wc(R,Y);                               \
+      }                                                                \
+    R##_c = FP_CLS_NAN;                                                \
+  } while (0)
+
+#define FP_EX_INVALID           (1 << 0)
+#define FP_EX_DENORM           (1 << 1)
+#define FP_EX_DIVZERO           (1 << 2)
+#define FP_EX_OVERFLOW          (1 << 3)
+#define FP_EX_UNDERFLOW         (1 << 4)
+#define FP_EX_INEXACT           (1 << 5)
+
+#define FP_RND_NEAREST         0
+#define FP_RND_ZERO            3
+#define FP_RND_PINF            2
+#define FP_RND_MINF            1
index e03a8e926d4d8a23149788d95a7d7ed21091a0c7..2739cb00b381fe63f58135d78498c6955eb93736 100644 (file)
@@ -1,6 +1,5 @@
 /* Assembler macros for i386.
-   Copyright (C) 1991-93,95,96,98,2002,2003,2005,2006
-   Free Software Foundation, Inc.
+   Copyright (C) 1991-93,95,96,98,2002,2003,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -133,7 +132,15 @@ lose: SYSCALL_PIC_SETUP                                                          \
     cfi_adjust_cfa_offset (-4);                                                      \
     addl $_GLOBAL_OFFSET_TABLE+[.-0b], %ebx;
 
-# define SETUP_PIC_REG(reg) \
+# ifndef HAVE_HIDDEN
+#  define SETUP_PIC_REG(reg) \
+  call 1f;                                                                   \
+  .subsection 1;                                                             \
+1:movl (%esp), %e##reg;                                                              \
+  ret;                                                                       \
+  .previous
+# else
+#  define SETUP_PIC_REG(reg) \
   .ifndef __i686.get_pc_thunk.reg;                                           \
   .section .gnu.linkonce.t.__i686.get_pc_thunk.reg,"ax",@progbits;           \
   .globl __i686.get_pc_thunk.reg;                                            \
@@ -146,6 +153,7 @@ __i686.get_pc_thunk.reg:                                                  \
   .previous;                                                                 \
   .endif;                                                                    \
   call __i686.get_pc_thunk.reg
+# endif
 
 # define LOAD_PIC_REG(reg) \
   SETUP_PIC_REG(reg); addl $_GLOBAL_OFFSET_TABLE_, %e##reg
index 61b4ea99a703f2c8a29f05e923416c71ae39e45c..55349690e316d05bbbab9c8c06ceb7ab4c48f819 100644 (file)
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  IA-64 version.
-   Copyright (C) 1995-1997, 2000-2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-1997, 2000-2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -311,7 +311,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
    of the main executable's symbols, as for a COPY reloc, which we don't
    use.  */
 /* ??? Ignore *MSB for now.  */
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
 #define elf_machine_type_class(type) \
   (((type) == R_IA64_IPLTLSB || (type) == R_IA64_DTPMOD64LSB                 \
     || (type) == R_IA64_DTPREL64LSB || (type) == R_IA64_TPREL64LSB)          \
@@ -432,7 +432,7 @@ elf_machine_rela (struct link_map *map,
            value = _dl_make_fptr (sym_map, sym, value);
          else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_PCREL64LSB))
            value -= (Elf64_Addr) reloc_addr & -16;
-#if !defined RTLD_BOOTSTRAP || defined USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || defined USE___THREAD)
          else if (R_IA64_TYPE (r_type) == R_IA64_TYPE (R_IA64_DTPMOD64LSB))
 # ifdef RTLD_BOOTSTRAP
            /* During startup the dynamic linker is always index 1.  */
index 351bcc2f105e573f1865dd5fe38a05a1118be325..13801c848b104b8ba39c0be193012cd668ed8557 100644 (file)
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 1999, 2000, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2005, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Christian Boissat <Christian.Boissat@cern.ch>, 1999.
 
@@ -26,7 +26,7 @@ fesetround (int round)
   fenv_t fpsr;
 
   if (round & ~3)
-    return 0;
+    return 1;
 
   /* Get the current state.  */
   __asm__ __volatile__ ("mov.m %0=ar.fpsr" : "=r" (fpsr));
@@ -37,6 +37,6 @@ fesetround (int round)
   /* Put the new state in effect.  */
   __asm__ __volatile__ ("mov.m ar.fpsr=%0" :: "r" (fpsr) : "memory");
 
-  return 1;
+  return 0;
 }
 libm_hidden_def (fesetround)
diff --git a/sysdeps/ia64/ldbl2mpn.c b/sysdeps/ia64/ldbl2mpn.c
new file mode 100644 (file)
index 0000000..641b789
--- /dev/null
@@ -0,0 +1 @@
+#include "../i386/ldbl2mpn.c"
index 9751284008ef52497ecd9165003703685e69a5a2..2c0eeae86fccc6641776f7a7cb89f2392a8a9641 100644 (file)
@@ -1,5 +1,5 @@
 /* Thread-local storage handling in the ELF dynamic linker.  IA-64 version.
-   Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -19,6 +19,8 @@
 
 #include <csu/libc-tls.c>
 
+#if USE_TLS
+
 /* On IA-64, as it lacks linker optimizations, __tls_get_addr can be
    called even in statically linked binaries.
    In this case module must be always 1 and PT_TLS segment
@@ -30,3 +32,5 @@ __tls_get_addr (size_t m, size_t offset)
   dtv_t *dtv = THREAD_DTV ();
   return (char *) dtv[1].pointer.val + offset;
 }
+
+#endif
index d9bd8b479f4aa8dce3a4e476575f5848b69499b0..1e159f2c0b2702682bca759b4ffa9cbaf503c1c9 100644 (file)
@@ -106,20 +106,28 @@ double __ieee754_pow(double x, double y) {
     else
       return y < 0 ? 1.0/ABS(x) : 0.0;                               /* return 0 */
   }
+
+  qx = u.i[HIGH_HALF]&0x7fffffff;  /*   no sign   */
+  qy = v.i[HIGH_HALF]&0x7fffffff;  /*   no sign   */
+
+  if (qx >= 0x7ff00000 && (qx > 0x7ff00000 || u.i[LOW_HALF] != 0)) return NaNQ.x;
+  if (qy >= 0x7ff00000 && (qy > 0x7ff00000 || v.i[LOW_HALF] != 0))
+    return x == 1.0 ? 1.0 : NaNQ.x;
+
   /* if x<0 */
   if (u.i[HIGH_HALF] < 0) {
     k = checkint(y);
     if (k==0) {
-      if ((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] == 0) {
+      if (qy == 0x7ff00000) {
        if (x == -1.0) return 1.0;
        else if (x > -1.0) return v.i[HIGH_HALF] < 0 ? INF.x : 0.0;
        else return v.i[HIGH_HALF] < 0 ? 0.0 : INF.x;
       }
-      else if (u.i[HIGH_HALF] == 0xfff00000 && u.i[LOW_HALF] == 0)
+      else if (qx == 0x7ff00000)
        return y < 0 ? 0.0 : INF.x;
       return NaNQ.x;                              /* y not integer and x<0 */
     }
-    else if (u.i[HIGH_HALF] == 0xfff00000 && u.i[LOW_HALF] == 0)
+    else if (qx == 0x7ff00000)
       {
        if (k < 0)
          return y < 0 ? nZERO.x : nINF.x;
@@ -129,14 +137,6 @@ double __ieee754_pow(double x, double y) {
     return (k==1)?__ieee754_pow(-x,y):-__ieee754_pow(-x,y); /* if y even or odd */
   }
   /* x>0 */
-  qx = u.i[HIGH_HALF]&0x7fffffff;  /*   no sign   */
-  qy = v.i[HIGH_HALF]&0x7fffffff;  /*   no sign   */
-
-  if (qx > 0x7ff00000 || (qx == 0x7ff00000 && u.i[LOW_HALF] != 0)) return NaNQ.x;
-                                                                 /*  if 0<x<2^-0x7fe */
-  if (qy > 0x7ff00000 || (qy == 0x7ff00000 && v.i[LOW_HALF] != 0))
-    return x == 1.0 ? 1.0 : NaNQ.x;
-                                                                 /*  if y<2^-0x7fe   */
 
   if (qx == 0x7ff00000)                              /* x= 2^-0x3ff */
     {if (y == 0) return NaNQ.x;
index e1568e24c93c24de8911f7a23a117096d2198b51..600c14621fac5495d7a4d4d65c4bf75348c9184f 100644 (file)
@@ -18,7 +18,7 @@ static char rcsid[] = "$NetBSD: s_nextafterf.c,v 1.4 1995/05/10 20:48:01 jtc Exp
 #endif
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
 #include <float.h>
 
 #ifdef __STDC__
@@ -40,9 +40,12 @@ static char rcsid[] = "$NetBSD: s_nextafterf.c,v 1.4 1995/05/10 20:48:01 jtc Exp
           return x+y;
        if(x==y) return y;              /* x=y, return y */
        if(ix==0) {                             /* x == 0 */
+           float u;
            SET_FLOAT_WORD(x,(hy&0x80000000)|1);/* return +-minsubnormal */
-           y = x*x;
-           if(y==x) return y; else return x;   /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u*u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if(hx>hy) {                         /* x > y, x -= ulp */
@@ -61,15 +64,12 @@ static char rcsid[] = "$NetBSD: s_nextafterf.c,v 1.4 1995/05/10 20:48:01 jtc Exp
        if(hy>=0x7f800000) {
          x = x+x;      /* overflow  */
          if (FLT_EVAL_METHOD != 0)
-           asm ("" : "=m"(x) : "m"(x));
+           asm ("" : "+m"(x));
          return x;     /* overflow  */
        }
-       if(hy<0x00800000) {             /* underflow */
-           y = x*x;
-           if(y!=x) {          /* raise underflow flag */
-               SET_FLOAT_WORD(y,hx);
-               return y;
-           }
+       if(hy<0x00800000) {
+           float u = x*x;                      /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        SET_FLOAT_WORD(x,hx);
        return x;
index d3df66817823486a0d9b1773ed50fcdb5fa74126..7bc869a518bd136d080bd52d8b5d292b0d65a7ca 100644 (file)
@@ -25,7 +25,7 @@ static char rcsid[] = "$NetBSD: $";
  */
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
 
 #ifdef __STDC__
        long double __nextafterl(long double x, long double y)
@@ -47,9 +47,12 @@ static char rcsid[] = "$NetBSD: $";
           return x+y;
        if(x==y) return y;              /* x=y, return y */
        if((ix|lx)==0) {                        /* x == 0 */
+           long double u;
            SET_LDOUBLE_WORDS64(x,hy&0x8000000000000000ULL,1);/* return +-minsubnormal */
-           y = x*x;
-           if(y==x) return y; else return x;   /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                     /* x > 0 */
            if(hx>hy||((hx==hy)&&(lx>ly))) {    /* x > y, x -= ulp */
@@ -70,12 +73,9 @@ static char rcsid[] = "$NetBSD: $";
        }
        hy = hx&0x7fff000000000000LL;
        if(hy==0x7fff000000000000LL) return x+x;/* overflow  */
-       if(hy==0) {                             /* underflow */
-           y = x*x;
-           if(y!=x) {          /* raise underflow flag */
-               SET_LDOUBLE_WORDS64(y,hx,lx);
-               return y;
-           }
+       if(hy==0) {
+           long double u = x*x;                /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        SET_LDOUBLE_WORDS64(x,hx,lx);
        return x;
index 553e4019732db89dfc2394031b1f5a29b51e2b7c..178505c58ff6c5834cb46a8fd80fac9a3ef4eaa3 100644 (file)
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: $";
  */
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
 #include <float.h>
 
 #ifdef __STDC__
@@ -53,10 +53,12 @@ static char rcsid[] = "$NetBSD: $";
           return x+y;
        if((long double) x==y) return y;        /* x=y, return y */
        if((ix|lx)==0) {                        /* x == 0 */
-           double x2;
+           double u;
            INSERT_WORDS(x,(u_int32_t)((hy>>32)&0x80000000),1);/* return +-minsub */
-           x2 = x*x;
-           if(x2==x) return x2; else return x; /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if (hy<0||(ix>>20)>(iy>>48)-0x3c00
@@ -87,16 +89,13 @@ static char rcsid[] = "$NetBSD: $";
        if(hy>=0x7ff00000) {
          x = x+x;      /* overflow  */
          if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
-           /* Force conversion to float.  */
-           asm ("" : "=m"(x) : "m"(x));
+           /* Force conversion to double.  */
+           asm ("" : "+m"(x));
          return x;
        }
-       if(hy<0x00100000) {             /* underflow */
-           double x2 = x*x;
-           if(x2!=x) {         /* raise underflow flag */
-               INSERT_WORDS(x2,hx,lx);
-               return x2;
-           }
+       if(hy<0x00100000) {
+           double u = x*x;                     /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        INSERT_WORDS(x,hx,lx);
        return x;
index 8a2d45e2d8b488c8211d7355a4ac4e939d859063..21d1e62dabd64f9fd2781d17399cbae762c693a5 100644 (file)
@@ -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);
 
index 2a7b70fabf06c61ad95a8efcc45f06f11ecbbec9..b2ad25e31f03abca6d930566562e2d2d62248f34 100644 (file)
@@ -1,5 +1,5 @@
 /* Print floating point number in hexadecimal notation according to ISO C99.
-   Copyright (C) 1997,1998,1999,2000,2001,2002,2004,2006
+   Copyright (C) 1997,1998,1999,2000,2001,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.
@@ -35,21 +35,24 @@ do {                                                                              \
                                                                              \
       lo = ((long long)eldbl.ieee.mantissa2 << 32) | eldbl.ieee.mantissa3;    \
       hi = ((long long)eldbl.ieee.mantissa0 << 32) | eldbl.ieee.mantissa1;    \
-   /* If the lower double is not a denomal or zero then set the hidden       \
-      53rd bit.  */                                                          \
-      if (eldbl.ieee.exponent2 > 0x001)                                              \
-       {                                                                     \
-         lo |= (1ULL << 52);                                                 \
-         lo = lo << 7; /* pre-shift lo to match ieee854.  */                 \
-         /* The lower double is normalized separately from the upper.  We    \
-            may need to adjust the lower manitissa to reflect this.  */      \
-         ediff = eldbl.ieee.exponent - eldbl.ieee.exponent2;                 \
-         if (ediff > 53)                                                     \
-           lo = lo >> (ediff-53);                                            \
-       }                                                                     \
-                                                                             \
-      if ((eldbl.ieee.negative != eldbl.ieee.negative2)                              \
-         && ((eldbl.ieee.exponent2 != 0) && (lo != 0L)))                     \
+      lo <<= 7; /* pre-shift lo to match ieee854.  */                        \
+      /* If the lower double is not a denomal or zero then set the hidden     \
+        53rd bit.  */                                                        \
+      if (eldbl.ieee.exponent2 != 0)                                         \
+       lo |= (1ULL << (52 + 7));                                             \
+      else                                                                   \
+       lo <<= 1;                                                             \
+      /* The lower double is normalized separately from the upper.  We       \
+        may need to adjust the lower manitissa to reflect this.  */          \
+      ediff = eldbl.ieee.exponent - eldbl.ieee.exponent2;                    \
+      if (ediff > 53 + 63)                                                   \
+       lo = 0;                                                               \
+      else if (ediff > 53)                                                   \
+       lo = lo >> (ediff - 53);                                              \
+      else if (eldbl.ieee.exponent2 == 0 && ediff < 53)                              \
+       lo = lo << (53 - ediff);                                              \
+      if (eldbl.ieee.negative != eldbl.ieee.negative2                        \
+         && (eldbl.ieee.exponent2 != 0 || lo != 0L))                         \
        {                                                                     \
          lo = (1ULL << 60) - lo;                                             \
          if (hi == 0L)                                                       \
index 3ca178a3c518d4d59222556b77dd3beb0fb934dd..6999abc2509b35eaad6a160b671b232e561f20c2 100644 (file)
@@ -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.
    * -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 */
index e35ce50829e654df99bde229660756bda691f004..39d0e6a5e345d7557a53a145efc683aa06d33f37 100644 (file)
@@ -24,8 +24,8 @@ static char rcsid[] = "$NetBSD: $";
  *   Special cases:
  */
 
-#include "math.h"
-#include "math_private.h"
+#include <math.h>
+#include <math_private.h>
 #include <math_ldbl_opt.h>
 
 #ifdef __STDC__
@@ -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 */
@@ -53,55 +52,67 @@ static char rcsid[] = "$NetBSD: $";
        if(x==y)
            return y;           /* x=y, return y */
        if(ihx == 0 && ilx == 0) {                      /* x == 0 */
-           SET_LDOUBLE_WORDS64(x,hy&0x8000000000000000ULL,1);/* return +-minsubnormal */
-           y = x*x;
-           if(y==x) return y; else return x;   /* raise underflow flag */
+           long double 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;
            }
-       }
-       hy = hx&0x7ff0000000000000LL;
-       if(hy==0x7ff0000000000000LL) return x+x;/* overflow  */
-       if(hy==0) {                             /* underflow */
-           y = x*x;
-           if(y!=x) {          /* raise underflow flag */
-               SET_LDOUBLE_WORDS64(y,hx,lx);
-               return y;
+           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;
        }
-       SET_LDOUBLE_WORDS64(x,hx,lx);
-       return x;
 }
 strong_alias (__nextafterl, __nexttowardl)
 long_double_symbol (libm, __nextafterl, nextafterl);
index 3335100592a90b096af4885ca7d2be4452fe75bc..e2f6521f5709d7b13cc16774e67c73c24507bbe8 100644 (file)
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: $";
  */
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
 #include <math_ldbl_opt.h>
 #include <float.h>
 
@@ -55,10 +55,12 @@ static char rcsid[] = "$NetBSD: $";
           return x+y;
        if((long double) x==y) return y;        /* x=y, return y */
        if((ix|lx)==0) {                        /* x == 0 */
-           double x2;
+           double u;
            INSERT_WORDS(x,(u_int32_t)((hy>>32)&0x80000000),1);/* return +-minsub */
-           x2 = x*x;
-           if(x2==x) return x2; else return x; /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if (hy<0||(ix>>20)>(iy>>52)
@@ -89,16 +91,13 @@ static char rcsid[] = "$NetBSD: $";
        if(hy>=0x7ff00000) {
          x = x+x;      /* overflow  */
          if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
-           /* Force conversion to float.  */
-           asm ("" : "=m"(x) : "m"(x));
+           /* Force conversion to double.  */
+           asm ("" : "+m"(x));
          return x;
        }
-       if(hy<0x00100000) {             /* underflow */
-           double x2 = x*x;
-           if(x2!=x) {         /* raise underflow flag */
-               INSERT_WORDS(x2,hx,lx);
-               return x2;
-           }
+       if(hy<0x00100000) {
+           double u = x*x;                     /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        INSERT_WORDS(x,hx,lx);
        return x;
index a9373ff822162becd1cc591e9afa7fc8c01a1438..cf655fad1670cbfef714889b1026585b82621b35 100644 (file)
@@ -19,8 +19,9 @@ static char rcsid[] = "$NetBSD: $";
 #endif
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
 #include <math_ldbl_opt.h>
+#include <float.h>
 
 #ifdef __STDC__
        float __nexttowardf(float x, long double y)
@@ -46,10 +47,12 @@ static char rcsid[] = "$NetBSD: $";
           return x+y;
        if((long double) x==y) return y;        /* x=y, return y */
        if(ix==0) {                             /* x == 0 */
-           float x2;
+           float u;
            SET_FLOAT_WORD(x,(u_int32_t)((hy>>32)&0x80000000)|1);/* return +-minsub*/
-           x2 = x*x;
-           if(x2==x) return x2; else return x; /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if(hy<0||(ix>>23)>(iy>>52)-0x380
@@ -69,13 +72,16 @@ static char rcsid[] = "$NetBSD: $";
            }
        }
        hy = hx&0x7f800000;
-       if(hy>=0x7f800000) return x+x;  /* overflow  */
+       if(hy>=0x7f800000) {
+         x = x+x;      /* overflow  */
+         if (FLT_EVAL_METHOD != 0)
+           /* Force conversion to float.  */
+           asm ("" : "+m"(x));
+         return x;
+       }
        if(hy<0x00800000) {             /* underflow */
-           float x2 = x*x;
-           if(x2!=x) {         /* raise underflow flag */
-               SET_FLOAT_WORD(x2,hx);
-               return x2;
-           }
+           float u = x*x;
+           math_force_eval (u);        /* raise underflow flag */
        }
        SET_FLOAT_WORD(x,hx);
        return x;
index 1798261b2808085986218d0c2cc9a24d8522a28f..ed0877d6dd8a167d87a854f5f2a8100a9cb438d8 100644 (file)
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: $";
  */
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
 
 #ifdef __STDC__
        long double __nextafterl(long double x, long double y)
@@ -48,9 +48,12 @@ static char rcsid[] = "$NetBSD: $";
           return x+y;
        if(x==y) return y;              /* x=y, return y */
        if((ix|hx|lx)==0) {                     /* x == 0 */
+           long double u;
            SET_LDOUBLE_WORDS(x,esy&0x8000,0,1);/* return +-minsubnormal */
-           y = x*x;
-           if(y==x) return y; else return x;   /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(esx<0x8000) {                        /* x > 0 */
            if(ix>iy||((ix==iy) && (hx>hy||((hx==hy)&&(lx>ly))))) {
@@ -85,13 +88,10 @@ static char rcsid[] = "$NetBSD: $";
            }
        }
        esy = esx&0x7fff;
-       if(esy==0x7fff) return x+x;     /* overflow  */
-       if(esy==0) {                    /* underflow */
-           y = x*x;
-           if(y!=x) {          /* raise underflow flag */
-               SET_LDOUBLE_WORDS(y,esx,hx,lx);
-               return y;
-           }
+       if(esy==0x7fff) return x+x;             /* overflow  */
+       if(esy==0) {
+           long double u = x*x;                /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        SET_LDOUBLE_WORDS(x,esx,hx,lx);
        return x;
index 7945cb5cb16e80338b53fb2a373d80e0a5012f16..e30438482cfa2775fff0c12b97840ab4828ce5ff 100644 (file)
@@ -26,7 +26,7 @@ static char rcsid[] = "$NetBSD: $";
  */
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
 #include <float.h>
 
 #ifdef __STDC__
@@ -50,10 +50,12 @@ static char rcsid[] = "$NetBSD: $";
           return x+y;
        if((long double) x==y) return y;        /* x=y, return y */
        if((ix|lx)==0) {                        /* x == 0 */
-           double x2;
+           double u;
            INSERT_WORDS(x,(esy&0x8000)<<16,1); /* return +-minsub */
-           x2 = x*x;
-           if(x2==x) return x2; else return x; /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if (esy>=0x8000||((ix>>20)&0x7ff)>iy-0x3c00
@@ -84,16 +86,13 @@ static char rcsid[] = "$NetBSD: $";
        if(hy>=0x7ff00000) {
          x = x+x;      /* overflow  */
          if (FLT_EVAL_METHOD != 0 && FLT_EVAL_METHOD != 1)
-           /* Force conversion to float.  */
-           asm ("" : "=m"(x) : "m"(x));
+           /* Force conversion to double.  */
+           asm ("" : "+m"(x));
          return x;
        }
-       if(hy<0x00100000) {             /* underflow */
-           double x2 = x*x;
-           if(x2!=x) {         /* raise underflow flag */
-               INSERT_WORDS(x2,hx,lx);
-               return x2;
-           }
+       if(hy<0x00100000) {
+           double u = x*x;                     /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        INSERT_WORDS(x,hx,lx);
        return x;
index a1c38b5d4c6edc9b96f39537cde85080fd3fe507..6357975ffca5344e03928472112d368598d4cfad 100644 (file)
@@ -18,7 +18,8 @@ static char rcsid[] = "$NetBSD: $";
 #endif
 
 #include "math.h"
-#include "math_private.h"
+#include <math_private.h>
+#include <float.h>
 
 #ifdef __STDC__
        float __nexttowardf(float x, long double y)
@@ -41,10 +42,12 @@ static char rcsid[] = "$NetBSD: $";
           return x+y;
        if((long double) x==y) return y;        /* x=y, return y */
        if(ix==0) {                             /* x == 0 */
-           float x2;
+           float u;
            SET_FLOAT_WORD(x,((esy&0x8000)<<16)|1);/* return +-minsub*/
-           x2 = x*x;
-           if(x2==x) return x2; else return x; /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if(esy>=0x8000||((ix>>23)&0xff)>iy-0x3f80
@@ -64,13 +67,16 @@ static char rcsid[] = "$NetBSD: $";
            }
        }
        hy = hx&0x7f800000;
-       if(hy>=0x7f800000) return x+x;  /* overflow  */
-       if(hy<0x00800000) {             /* underflow */
-           float x2 = x*x;
-           if(x2!=x) {         /* raise underflow flag */
-               SET_FLOAT_WORD(x2,hx);
-               return x2;
-           }
+       if(hy>=0x7f800000) {
+         x = x+x;      /* overflow  */
+         if (FLT_EVAL_METHOD != 0)
+           /* Force conversion to float.  */
+           asm ("" : "+m"(x));
+         return x;
+       }
+       if(hy<0x00800000) {
+           float u = x*x;                      /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        SET_FLOAT_WORD(x,hx);
        return x;
index d52526f7190ebffc22aa724c4b0baf47871d1d94..68027f26fa3c36660b0356b54b766d51002cbf2a 100644 (file)
  *   Special cases:
  */
 
+#include <math.h>
+#include <math_private.h>
 #include <math_ldbl_opt.h>
+#include <float.h>
 
 float __nldbl_nexttowardf(float x, double y);
 
@@ -39,10 +42,12 @@ float __nldbl_nexttowardf(float x, double y)
           return x+y;
        if((double) x==y) return y;             /* x=y, return y */
        if(ix==0) {                             /* x == 0 */
-           float x2;
+           float u;
            SET_FLOAT_WORD(x,(u_int32_t)(hy&0x80000000)|1);/* return +-minsub*/
-           x2 = x*x;
-           if(x2==x) return x2; else return x; /* raise underflow flag */
+           u = math_opt_barrier (x);
+           u = u * u;
+           math_force_eval (u);                /* raise underflow flag */
+           return x;
        }
        if(hx>=0) {                             /* x > 0 */
            if(hy<0||(ix>>23)>(iy>>20)-0x380
@@ -60,13 +65,16 @@ float __nldbl_nexttowardf(float x, double y)
                hx += 1;
        }
        hy = hx&0x7f800000;
-       if(hy>=0x7f800000) return x+x;  /* overflow  */
-       if(hy<0x00800000) {             /* underflow */
-           float x2 = x*x;
-           if(x2!=x) {         /* raise underflow flag */
-               SET_FLOAT_WORD(x2,hx);
-               return x2;
-           }
+       if(hy>=0x7f800000) {
+         x = x+x;      /* overflow  */
+         if (FLT_EVAL_METHOD != 0)
+           /* Force conversion to float.  */
+           asm ("" : "+m"(x));
+         return x;
+       }
+       if(hy<0x00800000) {
+           float u = x*x;                      /* underflow */
+           math_force_eval (u);                /* raise underflow flag */
        }
        SET_FLOAT_WORD(x,hx);
        return x;
index 3288f186e5066b22323a30076d71da2a10f74074..fa7da6020408290b504f3da203521dba2c180340 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994,1995,1996,1997,1999,2001,2002,2004,2005,2006
+/* Copyright (C) 1994,1995,1996,1997,1999,2001,2002,2004,2005
        Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -532,9 +532,11 @@ __fork (void)
       /* Set the child user thread up to return 1 from the setjmp above.  */
       _hurd_longjmp_thread_state (&state, env, 1);
 
+#if USE_TLS
       /* Do special thread setup for TLS if needed.  */
       if (err = _hurd_tls_fork (thread, &state))
        LOSE;
+#endif
 
       if (err = __thread_set_state (thread, MACHINE_THREAD_STATE_FLAVOR,
                                    (natural_t *) &state, statecount))
index 4628eee2c30d604b74a6482709dbaa46a943337c..ca687b8bdfa670205c3352fc645581345a6b28db 100644 (file)
@@ -1,5 +1,5 @@
 /* futimes -- change access and modification times of open file.  Hurd version.
-   Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 int
 __futimes (int fd, const struct timeval tvp[2])
 {
-  union tv
-  {
-    struct timeval tv;
-    time_value_t tvt;
-  };
-  const union tv *u = (const union tv *) tvp;
-  union tv nulltv[2];
+  struct timeval timevals[2];
   error_t err;
 
   if (tvp == NULL)
     {
       /* Setting the number of microseconds to `-1' tells the
          underlying filesystems to use the current time.  */
-      nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1;
-      u = nulltv;
+      timevals[1].tv_usec = timevals[0].tv_usec = (time_t)-1;
+      tvp = timevals;
     }
 
-  err = HURD_DPORT_USE (fd, __file_utimes (port, u[0].tvt, u[1].tvt));
+  err = HURD_DPORT_USE (fd, __file_utimes (port,
+                                          *(time_value_t *) &tvp[0],
+                                          *(time_value_t *) &tvp[1]));
   return err ? __hurd_dfail (fd, err) : 0;
 }
 weak_alias (__futimes, futimes)
index 972cac57a1d99b4b52f29e497fe8f60a94634dd6..223a47d2f2c2f9aab5db22356b8190c67cca902b 100644 (file)
@@ -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 Free Software 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,9 @@
 /* Some things really need not be machine-dependent.  */
 # include <sysdeps/mach/hurd/tls.h>
 
+/* Indiciate that TLS support is available.  */
+# define USE_TLS       1
+
 /* The TCB can have any size and the memory following the address the
    thread pointer points to is unspecified.  Allocate the TCB there.  */
 # define TLS_TCB_AT_TP 1
index bf5610c4670b1b1699743cb90924a9bd356c1dfc..cf89d8862f646861689a65ff67f0c8ddead32d44 100644 (file)
@@ -1,5 +1,5 @@
 /* lutimes -- change access and modification times of a symlink.  Hurd version.
-   Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 int
 __lutimes (const char *file, const struct timeval tvp[2])
 {
-  union tv
-  {
-    struct timeval tv;
-    time_value_t tvt;
-  };
-  const union tv *u = (const union tv *) tvp;
-  union tv nulltv[2];
+  struct timeval timevals[2];
   error_t err;
   file_t port;
 
@@ -42,14 +36,15 @@ __lutimes (const char *file, const struct timeval tvp[2])
     {
       /* Setting the number of microseconds to `-1' tells the
          underlying filesystems to use the current time.  */
-      nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1;
-      u = nulltv;
+      timevals[1].tv_usec = timevals[0].tv_usec = (time_t)-1;
+      tvp = timevals;
     }
 
   port = __file_name_lookup (file, O_NOLINK, 0);
   if (port == MACH_PORT_NULL)
     return -1;
-  err = __file_utimes (port, u[0].tvt, u[1].tvt);
+  err = __file_utimes (port,
+                      *(time_value_t *) &tvp[0], *(time_value_t *) &tvp[1]);
   __mach_port_deallocate (__mach_task_self (), port);
   if (err)
     return __hurd_fail (err);
index fdc1427feb86fd60f21943a92ca2bc0b9b418230..74f3a342f469cd040783bfcde4b016b3b989bac1 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991-1995,1997,1999,2000,2006
-       Free Software Foundation, Inc.
+/* Copyright (C) 1991-1995, 97, 99, 2000 Free Software 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,13 +28,7 @@ __utimes (file, tvp)
      const char *file;
      const struct timeval tvp[2];
 {
-  union tv
-  {
-    struct timeval tv;
-    time_value_t tvt;
-  };
-  const union tv *u = (const union tv *) tvp;
-  union tv nulltv[2];
+  struct timeval timevals[2];
   error_t err;
   file_t port;
 
@@ -43,17 +36,19 @@ __utimes (file, tvp)
     {
       /* Setting the number of microseconds to `-1' tells the
          underlying filesystems to use the current time.  */
-      nulltv[0].tvt.microseconds = nulltv[1].tvt.microseconds = -1;
-      u = nulltv;
+      timevals[1].tv_usec = timevals[0].tv_usec = (time_t)-1;
+      tvp = timevals;
     }
 
   port = __file_name_lookup (file, 0, 0);
   if (port == MACH_PORT_NULL)
     return -1;
-  err = __file_utimes (port, u[0].tvt, u[1].tvt);
+  err = __file_utimes (port,
+                      *(time_value_t *) &tvp[0], *(time_value_t *) &tvp[1]);
   __mach_port_deallocate (__mach_task_self (), port);
   if (err)
     return __hurd_fail (err);
   return 0;
 }
+
 weak_alias (__utimes, utimes)
index 76a09d455d67297421456ba148b19d4d39c9a8c3..333870cdde7643ced145f127102104a0ece08e30 100644 (file)
@@ -1,5 +1,5 @@
 /* Check if effective user id can access file
-   Copyright (C) 1990,1991,1995-2001,2005 Free Software Foundation, Inc.
+   Copyright (C) 1990,1991,1995-2001,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
@@ -128,10 +128,6 @@ euidaccess (path, mode)
 #ifdef _LIBC
   uid_t euid;
   gid_t egid;
-
-  if (! __libc_enable_secure)
-    /* If we are not set-uid or set-gid, access does the same.  */
-    return __access (path, mode);
 #else
   if (have_ids == 0)
     {
@@ -162,6 +158,10 @@ euidaccess (path, mode)
   /* Now we need the IDs.  */
   euid = __geteuid ();
   egid = __getegid ();
+
+  if (__getuid () == euid && __getgid () == egid)
+    /* If we are not set-uid or set-gid, access does the same.  */
+    return __access (path, mode);
 #endif
 
   /* The super-user can read and write any file, and execute any file
index b4966852a72e274ddec1c56bb66845462edbef8d..a7e1459c9ca2809e21656dbf8a3ad0b2811c1c58 100644 (file)
@@ -1157,7 +1157,7 @@ get_scope (const struct sockaddr_storage *ss)
         169.254/16 and 127/8 are link-local.  */
       if ((addr[0] == 169 && addr[1] == 254) || addr[0] == 127)
        scope = 2;
-      else if (addr[0] == 10 || (addr[0] == 172 && addr[1] == 16)
+      else if (addr[0] == 10 || (addr[0] == 172 && (addr[1] & 0xf0) == 16)
               || (addr[0] == 192 && addr[1] == 168))
        scope = 5;
       else
@@ -1217,6 +1217,10 @@ static const struct prefixentry default_labels[] =
        = { .u6_addr8 = { 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
       7, 6 },
+    { { .in6_u
+       = { .u6_addr8 = { 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
+      32, 7 },
     { { .in6_u
        = { .u6_addr8 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                          0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } } },
@@ -2085,12 +2089,10 @@ getaddrinfo (const char *name, const char *service,
 
                  if (q->ai_family == PF_INET6 && in6ai != NULL)
                    {
-                     /* See whether the source address is the list of
-                        deprecated or temporary addresses.  */
+                     /* See whether the address is the list of deprecated
+                        or temporary addresses.  */
                      struct in6addrinfo tmp;
-                     struct sockaddr_in6 *sin6p
-                       = (struct sockaddr_in6 *) &results[i].source_addr;
-                     memcpy (tmp.addr, &sin6p->sin6_addr, IN6ADDRSZ);
+                     memcpy (tmp.addr, q->ai_addr, IN6ADDRSZ);
 
                      struct in6addrinfo *found
                        = bsearch (&tmp, in6ai, in6ailen, sizeof (*in6ai),
index 04478309d9f993344050538217d0ac7b0dde8235..aed899e8824cc7afe9587e83878524295d180071 100644 (file)
@@ -121,4 +121,62 @@ __NTH (fdimf (float __x, float __y))
 
 #endif /* __USE_ISOC99 */
 #endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */
+
+/* This code is used internally in the GNU libc.  */
+#ifdef __LIBC_INTERNAL_MATH_INLINES
+
+#include <sysdep.h>
+#include <ldsodefs.h>
+#include <dl-procinfo.h>
+
+# if __WORDSIZE == 64 || defined _ARCH_PWR4
+#  define __CPU_HAS_FSQRT 1
+# else
+#  define __CPU_HAS_FSQRT ((GLRO(dl_hwcap) & PPC_FEATURE_64) != 0)
+# endif
+
+extern double __slow_ieee754_sqrt (double);
+__MATH_INLINE double
+__NTH (__ieee754_sqrt (double __x))
+{
+  double __z;
+
+  /* If the CPU is 64-bit we can use the optional FP instructions.  */
+  if (__CPU_HAS_FSQRT)
+  {
+    /* Volatile is required to prevent the compiler from moving the
+       fsqrt instruction above the branch.  */
+     __asm __volatile (
+       "       fsqrt   %0,%1\n"
+               : "=f" (__z)
+               : "f" (__x));
+  }
+  else
+     __z = __slow_ieee754_sqrt(__x);
+
+  return __z;
+}
+
+extern float __slow_ieee754_sqrtf (float);
+__MATH_INLINE float
+__NTH (__ieee754_sqrtf (float __x))
+{
+  float __z;
+
+  /* If the CPU is 64-bit we can use the optional FP instructions.  */
+  if (__CPU_HAS_FSQRT)
+  {
+    /* Volatile is required to prevent the compiler from moving the
+       fsqrts instruction above the branch.  */
+     __asm __volatile (
+       "       fsqrts  %0,%1\n"
+               : "=f" (__z)
+               : "f" (__x));
+  }
+  else
+     __z = __slow_ieee754_sqrtf(__x);
+
+  return __z;
+}
+#endif /* __LIBC_INTERNAL_MATH_INLINES */
 #endif /* __GNUC__ && !_SOFT_FLOAT */
diff --git a/sysdeps/powerpc/fpu/math_private.h b/sysdeps/powerpc/fpu/math_private.h
deleted file mode 100644 (file)
index 90021c6..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Private inline math functions for powerpc.
-   Copyright (C) 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
-   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., 51 Franklin St - Fifth Floor, Boston,
-   MA 02110-1301 USA  */
-
-#ifndef _PPC_MATH_PRIVATE_H_
-#define _PPC_MATH_PRIVATE_H_
-
-#include <sysdep.h>
-#include <ldsodefs.h>
-#include <dl-procinfo.h>
-
-# if __WORDSIZE == 64 || defined _ARCH_PWR4
-#  define __CPU_HAS_FSQRT 1
-# else
-#  define __CPU_HAS_FSQRT ((GLRO(dl_hwcap) & PPC_FEATURE_64) != 0)
-# endif
-
-# ifndef __LIBC_INTERNAL_MATH_INLINES
-extern double __slow_ieee754_sqrt (double);
-__inline double
-__ieee754_sqrt (double __x)
-{
-  double __z;
-
-  /* If the CPU is 64-bit we can use the optional FP instructions.  */
-  if (__CPU_HAS_FSQRT)
-  {
-    /* Volatile is required to prevent the compiler from moving the
-       fsqrt instruction above the branch.  */
-     __asm __volatile (
-       "       fsqrt   %0,%1\n"
-               : "=f" (__z)
-               : "f" (__x));
-  }
-  else
-     __z = __slow_ieee754_sqrt(__x);
-
-  return __z;
-}
-
-extern float __slow_ieee754_sqrtf (float);
-
-__inline float
-__ieee754_sqrtf (float __x)
-{
-  float __z;
-
-  /* If the CPU is 64-bit we can use the optional FP instructions.  */
-  if (__CPU_HAS_FSQRT)
-  {
-    /* Volatile is required to prevent the compiler from moving the
-       fsqrts instruction above the branch.  */
-     __asm __volatile (
-       "       fsqrts  %0,%1\n"
-               : "=f" (__z)
-               : "f" (__x));
-  }
-  else
-     __z = __slow_ieee754_sqrtf(__x);
-
-  return __z;
-}
-#endif /* __LIBC_INTERNAL_MATH_INLINES */
-
-#include <math/math_private.h>
-
-#endif /* _PPC_MATH_PRIVATE_H_ */
index fc460993b12e4aef27876375cb81b1cee05829c2..4120a0238214123e293c23fb3e40b4e8d6c8a9c5 100644 (file)
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation functions.  PowerPC version.
-   Copyright (C) 1995-2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -564,12 +564,13 @@ __process_machine_rela (struct link_map *map,
       }
       break;
 
+#ifdef USE_TLS
 #define CHECK_STATIC_TLS(map, sym_map)                                       \
     do {                                                                     \
       if (__builtin_expect ((sym_map)->l_tls_offset == NO_TLS_OFFSET, 0))     \
        _dl_allocate_static_tls (sym_map);                                    \
     } while (0)
-#define DO_TLS_RELOC(suffix)                                                 \
+# define DO_TLS_RELOC(suffix)                                                \
     case R_PPC_DTPREL##suffix:                                               \
       /* During relocation all TLS symbols are defined and used.             \
         Therefore the offset is already correct.  */                         \
@@ -608,6 +609,7 @@ __process_machine_rela (struct link_map *map,
     DO_TLS_RELOC (16_LO)
     DO_TLS_RELOC (16_HI)
     DO_TLS_RELOC (16_HA)
+#endif
 
     default:
       _dl_reloc_bad_type (map, rinfo, 0);
index a50ffdd1c215816dd56f497bb6ba1e9cca73cf87..496fa71ecc03a0bf1684eb112a39d829c456dc62 100644 (file)
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  PowerPC version.
-   Copyright (C) 1995-2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-2002, 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -138,7 +138,7 @@ __elf_preferred_address(struct link_map *loader, size_t maplength,
 /* We never want to use a PLT entry as the destination of a
    reloc, when what is being relocated is a branch. This is
    partly for efficiency, but mostly so we avoid loops.  */
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
 #define elf_machine_type_class(type)                   \
   ((((type) == R_PPC_JMP_SLOT                          \
     || (type) == R_PPC_REL24                           \
@@ -330,7 +330,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
       *reloc_addr = value;
       break;
 
-#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \
     && !defined RESOLVE_CONFLICT_FIND_MAP
 # ifdef RTLD_BOOTSTRAP
 #  define NOT_BOOTSTRAP 0
@@ -361,7 +361,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
          *reloc_addr = TLS_TPREL_VALUE (sym_map, sym, reloc);
        }
       break;
-#endif
+#endif /* USE_TLS etc. */
 
     case R_PPC_JMP_SLOT:
 #ifdef RESOLVE_CONFLICT_FIND_MAP
index 88cfe71e0bb88339be0a8b818ee2375c88dbc4ea..8fc624ebd927ea9c6ec05e018273892ae222e483 100644 (file)
@@ -96,7 +96,7 @@
 #endif
 
 #if defined SHARED && defined DO_VERSIONING && defined PIC \
-    && !defined NO_HIDDEN
+    && !defined HAVE_BROKEN_ALIAS_ATTRIBUTE && !defined NO_HIDDEN
 # undef HIDDEN_JUMPTARGET
 # define HIDDEN_JUMPTARGET(name) __GI_##name##@local
 #endif
index 89a69e1a2377d046703be694859b36fe93acdb46..cec271bb3a3aed2f56e951be6a8ae9da93bc82e0 100644 (file)
@@ -1,6 +1,7 @@
 /* Machine-dependent ELF dynamic relocation inline functions.
    PowerPC64 version.
-   Copyright 1995-2005, 2006 Free Software Foundation, Inc.
+   Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -259,7 +260,7 @@ BODY_PREFIX "_dl_start_user:\n"                                             \
    ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
    of the main executable's symbols, as for a COPY reloc.  */
 
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
 #define elf_machine_type_class(type)                                         \
   /* This covers all the TLS relocs, though most won't appear.  */           \
   (((((type) >= R_PPC64_DTPMOD64 && (type) <= R_PPC64_TPREL16_HIGHESTA)              \
@@ -494,7 +495,7 @@ elf_machine_rela_relative (Elf64_Addr l_addr, const Elf64_Rela *reloc,
   *reloc_addr = l_addr + reloc->r_addend;
 }
 
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
 /* This computes the value used by TPREL* relocs.  */
 auto inline Elf64_Addr __attribute__ ((always_inline, const))
 elf_machine_tprel (struct link_map *map,
@@ -561,7 +562,7 @@ elf_machine_rela (struct link_map *map,
 #endif
       return;
 
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
     case R_PPC64_DTPMOD64:
 # ifdef RTLD_BOOTSTRAP
       /* During startup the dynamic linker is always index 1.  */
@@ -644,7 +645,7 @@ elf_machine_rela (struct link_map *map,
       value = elf_machine_tprel (map, sym_map, sym, reloc);
       *(Elf64_Half *) reloc_addr = PPC_HIGHESTA (value);
       break;
-#endif
+#endif /* USE_TLS etc. */
 
 #ifndef RTLD_BOOTSTRAP /* None of the following appear in ld.so */
     case R_PPC64_ADDR16_LO_DS:
index 766d565a9cbcb8a2f638ea5c0f5226a13f7100ce..f177f436e93444dba5b606c90dba2c0ef8e6dddd 100644 (file)
@@ -1,5 +1,5 @@
 /* Thread-local storage handling in the ELF dynamic linker.  S390 version.
-   Copyright (C) 2003, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 #include <stdlib.h>
 #include <csu/libc-tls.c>
 
+#if USE_TLS
+
 /* On s390, the literal pool entry that refers to __tls_get_offset
    is not removed, even if all branches that use the literal pool
-   entry gets removed by TLS optimizations.  To get binaries
+   entry gets removed by TLS optimizations. To get binaries
    statically linked __tls_get_offset is defined here but
    aborts if it is used.  */
 
@@ -31,3 +33,5 @@ __tls_get_offset (size_t m, size_t offset)
 {
   abort ();
 }
+
+#endif
index 64bf3423b69453ddc8dcf03f55152a6c989de45d..8bbf858fbf092446433ea9e0613f72a628e4eebb 100644 (file)
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  S390 Version.
-   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005
    Free Software Foundation, Inc.
    Contributed by Carl Pederson & Martin Schwidefsky.
    This file is part of the GNU C Library.
@@ -209,11 +209,17 @@ _dl_start_user:\n\
    define the value.
    ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
    of the main executable's symbols, as for a COPY reloc.  */
-#define elf_machine_type_class(type) \
+#ifdef USE_TLS
+# define elf_machine_type_class(type) \
   ((((type) == R_390_JMP_SLOT || (type) == R_390_TLS_DTPMOD                  \
      || (type) == R_390_TLS_DTPOFF || (type) == R_390_TLS_TPOFF)             \
     * ELF_RTYPE_CLASS_PLT)                                                   \
    | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY))
+#else
+# define elf_machine_type_class(type) \
+  ((((type) == R_390_JMP_SLOT) * ELF_RTYPE_CLASS_PLT)  \
+   | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY))
+#endif
 
 /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
 #define ELF_MACHINE_JMP_SLOT    R_390_JMP_SLOT
@@ -309,7 +315,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
          *reloc_addr = value + reloc->r_addend;
          break;
 
-#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \
     && !defined RESOLVE_CONFLICT_FIND_MAP
        case R_390_TLS_DTPMOD:
 # ifdef RTLD_BOOTSTRAP
index fa893befdf5c9e571de4b5379cd97efed50a4c8a..5026a2edad9981d56cd27a5dc7fef630f2d1f739 100644 (file)
@@ -1,6 +1,6 @@
 /* Machine-dependent ELF dynamic relocation inline functions.
    64 bit S/390 Version.
-   Copyright (C) 2001-2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
    This file is part of the GNU C Library.
 
@@ -192,11 +192,17 @@ _dl_start_user:\n\
    define the value.
    ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
    of the main executable's symbols, as for a COPY reloc.  */
-#define elf_machine_type_class(type) \
+#ifdef USE_TLS
+# define elf_machine_type_class(type) \
   ((((type) == R_390_JMP_SLOT || (type) == R_390_TLS_DTPMOD                  \
      || (type) == R_390_TLS_DTPOFF || (type) == R_390_TLS_TPOFF)             \
     * ELF_RTYPE_CLASS_PLT)                                                   \
    | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY))
+#else
+# define elf_machine_type_class(type) \
+  ((((type) == R_390_JMP_SLOT) * ELF_RTYPE_CLASS_PLT)  \
+   | (((type) == R_390_COPY) * ELF_RTYPE_CLASS_COPY))
+#endif
 
 /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
 #define ELF_MACHINE_JMP_SLOT   R_390_JMP_SLOT
@@ -288,7 +294,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
          *reloc_addr = value + reloc->r_addend;
          break;
 
-#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \
     && !defined RESOLVE_CONFLICT_FIND_MAP
        case R_390_TLS_DTPMOD:
 # ifdef RTLD_BOOTSTRAP
index 78f70e38805d75d0f1808772756532c69e93a80c..e73c6d79c370f80d2d8b0062aaf6bb57c7864b0b 100644 (file)
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  SH version.
-   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -208,7 +208,7 @@ __fpscr_values:\n\
    define the value.
    ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
    of the main executable's symbols, as for a COPY reloc.  */
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
 # define elf_machine_type_class(type) \
   ((((type) == R_SH_JMP_SLOT || (type) == R_SH_TLS_DTPMOD32                  \
      || (type) == R_SH_TLS_DTPOFF32 || (type) == R_SH_TLS_TPOFF32)           \
@@ -354,7 +354,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
          /* These addresses are always aligned.  */
          *reloc_addr = value;
          break;
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
          /* XXX Remove TLS relocations which are not needed.  */
        case R_SH_TLS_DTPMOD32:
 # ifdef RTLD_BOOTSTRAP
index 19aac6a7fe9a0cbc8b2680bb8277a45915146749..02dabaabb44d9896fff85388d1c02e1535a11d24 100644 (file)
@@ -188,7 +188,7 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile)
    PLT entries should not be allowed to define the value.
    ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
    of the main executable's symbols, as for a COPY reloc.  */
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
 # define elf_machine_type_class(type) \
   ((((type) == R_SPARC_JMP_SLOT                                                      \
      || ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64))     \
@@ -459,7 +459,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
         so we can optimize the first instruction of .plt out.  */
       sparc_fixup_plt (reloc, reloc_addr, value, 0);
       break;
-#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \
     && !defined RESOLVE_CONFLICT_FIND_MAP
     case R_SPARC_TLS_DTPMOD32:
       /* Get the information from the link map returned by the
index 3eee6729124bdbafb5f95100139617a1d2dd8f7b..314a784dbc92925c274fcda43a82085f923bc467 100644 (file)
@@ -240,7 +240,7 @@ elf_machine_plt_value (struct link_map *map, const Elf64_Rela *reloc,
    PLT entries should not be allowed to define the value.
    ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
    of the main executable's symbols, as for a COPY reloc.  */
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
 # define elf_machine_type_class(type) \
   ((((type) == R_SPARC_JMP_SLOT                                                      \
      || ((type) >= R_SPARC_TLS_GD_HI22 && (type) <= R_SPARC_TLS_TPOFF64))     \
@@ -589,7 +589,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
       sparc64_fixup_plt (map, reloc, reloc_addr, value, reloc->r_addend, 0);
 #endif
       break;
-#if (!defined RTLD_BOOTSTRAP || USE___THREAD) \
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) \
     && !defined RESOLVE_CONFLICT_FIND_MAP
     case R_SPARC_TLS_DTPMOD64:
       /* Get the information from the link map returned by the
index 137b44c2b8731a94596952b9588b5c0c0fc5a064..7c015b1d620183faa5df03bd1b5daeabf64743a2 100644 (file)
@@ -126,9 +126,6 @@ libc {
   GLIBC_2.5 {
     splice; sync_file_range; tee; vmsplice;
   }
-  GLIBC_2.6 {
-    epoll_pwait;
-  }
   GLIBC_PRIVATE {
     # functions used in other libraries
     __syscall_rt_sigqueueinfo;
index 84717c3d96f7b1085032624acf7caba9f968031a..cca0871ac0bd00f359e9852e0e46cd2e88cb2134 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997,1998,2000,2001,2002,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -101,9 +101,7 @@ enum
 # define ST_IMMUTABLE  ST_IMMUTABLE
   ST_NOATIME = 1024,           /* Do not update access times.  */
 # define ST_NOATIME    ST_NOATIME
-  ST_NODIRATIME = 2048,                /* Do not update directory access times.  */
+  ST_NODIRATIME = 2048         /* Do not update directory access times.  */
 # define ST_NODIRATIME ST_NODIRATIME
-  ST_RELATIME = 4096           /* Update atime relative to mtime/ctime.  */
-# define ST_RELATIME   ST_RELATIME
 #endif /* Use GNU.  */
 };
index 13ccd7acb45ee5f448036e6cb25b331b99384c19..46161a806a9c7e2d34ee47654d131d738f2906ee 100644 (file)
@@ -1,5 +1,5 @@
 /* Determine protocol families for which interfaces exist.  Linux 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.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -71,17 +71,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;
@@ -101,10 +122,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;
@@ -186,7 +207,7 @@ make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6,
     {
       *in6ai = malloc (in6ailistlen * sizeof (**in6ai));
       if (*in6ai == NULL)
-       return -1;
+       goto out_fail;
 
       *in6ailen = in6ailistlen;
 
@@ -198,7 +219,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;
 }
 
 
index f73a4b5195720cd319c0e9c6679a268868b1ee35..54524ec120c9c33cb39a22ed960e6466074d5bea 100644 (file)
@@ -120,9 +120,6 @@ L(pseudo_end):
        ret
 
 L(thread_start):
-       cfi_startproc;
-       /* Clearing frame pointer is insufficient, use CFI.  */
-       cfi_undefined (eip);
        /* Note: %esi is zero.  */
        movl    %esi,%ebp       /* terminate the stack frame */
 #ifdef RESET_PID
@@ -155,7 +152,6 @@ L(nomoregetpid):
        jmp     L(haspid)
        .previous
 #endif
-       cfi_endproc;
 
        cfi_startproc
 PSEUDO_END (BP_SYM (__clone))
index f69baf943bc1eb88c25258cbce193f5f38f2a6e5..b7a0a4efd4f1ebc6c82f4fbb1a79bb72e02367f6 100644 (file)
@@ -52,6 +52,8 @@ __getgroups (int n, gid_t *groups)
     }
   else
     {
+      int i, ngids;
+      __kernel_gid_t kernel_groups[n = MIN (n, __sysconf (_SC_NGROUPS_MAX))];
 # ifdef __NR_getgroups32
       if (__libc_missing_32bit_uids <= 0)
        {
@@ -67,9 +69,6 @@ __getgroups (int n, gid_t *groups)
        }
 # endif /* __NR_getgroups32 */
 
-      int i, ngids;
-      __kernel_gid_t kernel_groups[n = MIN (n, __sysconf (_SC_NGROUPS_MAX))];
-
       ngids = INLINE_SYSCALL (getgroups, 2, n, CHECK_N (kernel_groups, n));
       if (n != 0 && ngids > 0)
        for (i = 0; i < ngids; i++)
index b5c1b98573a3d99ce7553a7005c8e03d4e4fe491..299574dac4dcb9f94eb7beddd30f20fc12b5e123 100644 (file)
@@ -1,5 +1,5 @@
 /* POSIX.1 `sigaction' call for Linux/i386.
-   Copyright (C) 1991,1995-2000,2002-2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 1991,1995-2000,2002-2004,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -46,10 +46,18 @@ int __libc_missing_rt_sigs;
 
 /* Using the hidden attribute here does not change the code but it
    helps to avoid warnings.  */
-#ifdef __NR_rt_sigaction
+#if defined HAVE_HIDDEN && defined HAVE_VISIBILITY_ATTRIBUTE \
+    && !defined HAVE_BROKEN_VISIBILITY_ATTRIBUTE
+# ifdef __NR_rt_sigaction
 extern void restore_rt (void) asm ("__restore_rt") attribute_hidden;
-#endif
+# endif
 extern void restore (void) asm ("__restore") attribute_hidden;
+#else
+# ifdef __NR_rt_sigaction
+static void restore_rt (void) asm ("__restore_rt");
+# endif
+static void restore (void) asm ("__restore");
+#endif
 
 
 /* If ACT is not NULL, change the action for SIG to *ACT.
index 82495de03e7c84115f22430519273a3e72f840da..02e693553833df3f02273f888d83e3b16ab599e7 100644 (file)
@@ -1,5 +1,5 @@
 /* getifaddrs -- get names and addresses of all network interfaces
-   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
@@ -122,36 +122,36 @@ int
 __netlink_request (struct netlink_handle *h, int type)
 {
   struct netlink_res *nlm_next;
-  struct netlink_res **new_nlm_list;
-  static volatile size_t buf_size = 4096;
-  char *buf;
   struct sockaddr_nl nladdr;
   struct nlmsghdr *nlmh;
   ssize_t read_len;
   bool done = false;
-  bool use_malloc = false;
 
-  if (__netlink_sendreq (h, type) < 0)
-    return -1;
+#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;
 
-  size_t this_buf_size = buf_size;
-  if (__libc_use_alloca (this_buf_size))
-    buf = alloca (this_buf_size);
+  if (__libc_use_alloca (buf_size))
+    buf = alloca (buf_size);
   else
     {
-      buf = malloc (this_buf_size);
+      buf = malloc (buf_size);
       if (buf != NULL)
        use_malloc = true;
       else
        goto out_fail;
     }
 
-  struct iovec iov = { buf, this_buf_size };
+  struct iovec iov = { buf, buf_size };
 
-  if (h->nlm_list != NULL)
-    new_nlm_list = &h->end_ptr->next;
-  else
-    new_nlm_list = &h->nlm_list;
+  if (__netlink_sendreq (h, type) < 0)
+    goto out_fail;
 
   while (! done)
     {
@@ -171,48 +171,7 @@ __netlink_request (struct netlink_handle *h, int type)
        continue;
 
       if (__builtin_expect (msg.msg_flags & MSG_TRUNC, 0))
-       {
-         if (this_buf_size >= SIZE_MAX / 2)
-           goto out_fail;
-
-         nlm_next = *new_nlm_list;
-         while (nlm_next != NULL)
-           {
-             struct netlink_res *tmpptr;
-
-             tmpptr = nlm_next->next;
-             free (nlm_next);
-             nlm_next = tmpptr;
-           }
-         *new_nlm_list = NULL;
-
-         if (__libc_use_alloca (2 * this_buf_size))
-           buf = extend_alloca (buf, this_buf_size, 2 * this_buf_size);
-         else
-           {
-             this_buf_size *= 2;
-
-             char *new_buf = realloc (use_malloc ? buf : NULL, this_buf_size);
-             if (new_buf == NULL)
-               goto out_fail;
-             new_buf = buf;
-
-             use_malloc = true;
-           }
-         buf_size = this_buf_size;
-
-         iov.iov_base = buf;
-         iov.iov_len = this_buf_size;
-
-         /* Increase sequence number, so that we can distinguish
-            between old and new request messages.  */
-         h->seq++;
-
-         if (__netlink_sendreq (h, type) < 0)
-           goto out_fail;
-
-         continue;
-       }
+       goto out_fail;
 
       size_t count = 0;
       size_t remaining_len = read_len;
index 28c1cb691fa1b329cf5fee60cd493b56ff85e4bd..73317ecafd4491c8ac2c1e0f66749102ac25e20f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -156,8 +156,6 @@ __statvfs_getflags (const char *name, int fstype, struct stat64 *st)
                  result |= ST_NOATIME;
                else if (strcmp (opt, "nodiratime") == 0)
                  result |= ST_NODIRATIME;
-               else if (strcmp (opt, "relatime") == 0)
-                 result |= ST_RELATIME;
 
              /* We can stop looking for more entries.  */
              success = true;
diff --git a/sysdeps/unix/sysv/linux/posix_madvise.c b/sysdeps/unix/sysv/linux/posix_madvise.c
new file mode 100644 (file)
index 0000000..880b17e
--- /dev/null
@@ -0,0 +1,38 @@
+/* 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 <sysdep.h>
+#include <sys/mman.h>
+
+
+int
+posix_madvise (void *addr, size_t len, int advice)
+{
+  /* We have one problem: the kernel's MADV_DONTNEED does not
+     correspond to POSIX's POSIX_MADV_DONTNEED.  The former simply
+     discards changes made to the memory without writing it back to
+     disk, if this would be necessary.  The POSIX behavior does not
+     allow this.  There is no functionality mapping the POSIX behavior
+     so far so we ignore that advice for now.  */
+  if (advice == POSIX_MADV_DONTNEED)
+    return 0;
+
+  INTERNAL_SYSCALL_DECL (err);
+  int result = INTERNAL_SYSCALL (madvise, err, 3, addr, len, advice);
+  return INTERNAL_SYSCALL_ERRNO (result, err);
+}
diff --git a/sysdeps/unix/sysv/linux/sh/bits/shm.h b/sysdeps/unix/sysv/linux/sh/bits/shm.h
deleted file mode 100644 (file)
index 1891793..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/* Copyright (C) 1995,1996,1997,2000,2002,2004,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
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#ifndef _SYS_SHM_H
-# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead."
-#endif
-
-#include <bits/types.h>
-
-/* Permission flag for shmget.  */
-#define SHM_R          0400            /* or S_IRUGO from <linux/stat.h> */
-#define SHM_W          0200            /* or S_IWUGO from <linux/stat.h> */
-
-/* Flags for `shmat'.  */
-#define SHM_RDONLY     010000          /* attach read-only else read-write */
-#define SHM_RND                020000          /* round attach address to SHMLBA */
-#define SHM_REMAP      040000          /* take-over region on attach */
-
-/* Commands for `shmctl'.  */
-#define SHM_LOCK       11              /* lock segment (root only) */
-#define SHM_UNLOCK     12              /* unlock segment (root only) */
-
-__BEGIN_DECLS
-
-/* Segment low boundary address multiple.  */
-#define SHMLBA         0x4000
-
-/* Type to count number of attaches.  */
-typedef unsigned long int shmatt_t;
-
-/* Data structure describing a set of semaphores.  */
-struct shmid_ds
-  {
-    struct ipc_perm shm_perm;          /* operation permission struct */
-    size_t shm_segsz;                  /* size of segment in bytes */
-    __time_t shm_atime;                        /* time of last shmat() */
-    unsigned long int __unused1;
-    __time_t shm_dtime;                        /* time of last shmdt() */
-    unsigned long int __unused2;
-    __time_t shm_ctime;                        /* time of last change by shmctl() */
-    unsigned long int __unused3;
-    __pid_t shm_cpid;                  /* pid of creator */
-    __pid_t shm_lpid;                  /* pid of last shmop */
-    shmatt_t shm_nattch;               /* number of current attaches */
-    unsigned long int __unused4;
-    unsigned long int __unused5;
-  };
-
-#ifdef __USE_MISC
-
-/* ipcs ctl commands */
-# define SHM_STAT      13
-# define SHM_INFO      14
-
-/* shm_mode upper byte flags */
-# define SHM_DEST      01000   /* segment will be destroyed on last detach */
-# define SHM_LOCKED    02000   /* segment will not be swapped */
-# define SHM_HUGETLB   04000   /* segment is mapped via hugetlb */
-# define SHM_NORESERVE 010000  /* don't check for reservations */
-
-struct shminfo
-  {
-    unsigned long int shmmax;
-    unsigned long int shmmin;
-    unsigned long int shmmni;
-    unsigned long int shmseg;
-    unsigned long int shmall;
-    unsigned long int __unused1;
-    unsigned long int __unused2;
-    unsigned long int __unused3;
-    unsigned long int __unused4;
-  };
-
-struct shm_info
-  {
-    int used_ids;
-    unsigned long int shm_tot; /* total allocated shm */
-    unsigned long int shm_rss; /* total resident shm */
-    unsigned long int shm_swp; /* total swapped shm */
-    unsigned long int swap_attempts;
-    unsigned long int swap_successes;
-  };
-
-#endif /* __USE_MISC */
-
-__END_DECLS
diff --git a/sysdeps/unix/sysv/linux/sh/sys/io.h b/sysdeps/unix/sysv/linux/sh/sys/io.h
new file mode 100644 (file)
index 0000000..6fdc44f
--- /dev/null
@@ -0,0 +1,48 @@
+/* Copyright (C) 1996, 1998, 1999, 2000 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef        _SYS_IO_H
+
+#define        _SYS_IO_H       1
+#include <features.h>
+
+__BEGIN_DECLS
+
+/* If TURN_ON is TRUE, request for permission to do direct i/o on the
+   port numbers in the range [FROM,FROM+NUM-1].  Otherwise, turn I/O
+   permission off for that range.  This call requires root privileges.  */
+extern int ioperm (unsigned long int __from, unsigned long int __num,
+                  int __turn_on) __THROW;
+
+/* Set the I/O privilege level to LEVEL.  If LEVEL is nonzero,
+   permission to access any I/O port is granted.  This call requires
+   root privileges. */
+extern int iopl (int __level) __THROW;
+
+/* The functions that actually perform reads and writes.  */
+extern unsigned char inb (unsigned long int port) __THROW;
+extern unsigned short int inw (unsigned long int port) __THROW;
+extern unsigned long int inl (unsigned long int port) __THROW;
+
+extern void outb (unsigned char value, unsigned long int port) __THROW;
+extern void outw (unsigned short value, unsigned long int port) __THROW;
+extern void outl (unsigned long value, unsigned long int port) __THROW;
+
+__END_DECLS
+
+#endif /* _SYS_IO_H */
index d8901f7d536bf147371bf35b9f506b6a9a9766d7..68f173a04d4ffa978aa00422a8689511d3040161 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 #include <stdint.h>
 #include <sys/types.h>
 
-/* Get __sigset_t.  */
-#include <bits/sigset.h>
-
-#ifndef __sigset_t_defined
-# define __sigset_t_defined
-typedef __sigset_t sigset_t;
-#endif
-
 
 enum EPOLL_EVENTS
   {
@@ -113,16 +105,6 @@ extern int epoll_ctl (int __epfd, int __op, int __fd,
 extern int epoll_wait (int __epfd, struct epoll_event *__events,
                       int __maxevents, int __timeout);
 
-
-/* Same as epoll_wait, but the thread's signal mask is temporarily
-   and atomically replaced with the one provided as parameter.
-
-   This function is a cancellation point and therefore not marked with
-   __THROW.  */
-extern int epoll_pwait (int __epfd, struct epoll_event *__events,
-                       int __maxevents, int __timeout,
-                       __const __sigset_t *__ss);
-
 __END_DECLS
 
 #endif /* sys/epoll.h */
index 5776673733bdc443af3b4457e6fa3909580ecfc4..e16110480f6c503b4eb87d4d607cc83f4834f20a 100644 (file)
@@ -10,8 +10,7 @@ delete_module EXTRA   delete_module   3       delete_module
 epoll_create   EXTRA   epoll_create    i:i     epoll_create
 epoll_ctl      EXTRA   epoll_ctl       i:iiip  epoll_ctl
 epoll_wait     EXTRA   epoll_wait      Ci:ipii epoll_wait
-epoll_pwait    EXTRA   epoll_pwait     Ci:ipiipi       epoll_pwait
-fdatasync      -       fdatasync       i:i     fdatasync
+fdatasync      -       fdatasync       Ci:i    fdatasync
 flock          -       flock           i:ii    __flock         flock
 fork           -       fork            i:      __libc_fork     __fork fork
 get_kernel_syms        EXTRA   get_kernel_syms i:p     get_kernel_syms
@@ -32,7 +31,6 @@ ioperm                -       ioperm          i:iii   ioperm
 iopl           -       iopl            i:i     iopl
 klogctl                EXTRA   syslog          i:isi   klogctl
 lchown         -       lchown          i:sii   __lchown        lchown
-posix_madvise  -       madvise         Vi:pii  posix_madvise
 madvise                -       madvise         i:pii   madvise
 mincore                -       mincore         i:anV   mincore
 mlock          -       mlock           i:bn    mlock
index bdad5063df3165ee67eed0831e7f6f7c00765d44..0f20367236664587d5d3b751167b87a95b37deec 100644 (file)
@@ -10,6 +10,6 @@ ifeq ($(subdir),stdlib)
 sysdep_routines += __start_context
 endif
 
-ifeq ($(subdir),csu)
+ifeq ($(subdir),stdlib)
 gen-as-const-headers += ucontext_i.sym
 endif
index db42f209c9fe4e827a816b753adf5b57fdf8849a..8a12b09035eeece1f9bd41cdb5077216be92f326 100644 (file)
@@ -89,9 +89,6 @@ L(pseudo_end):
        ret
 
 L(thread_start):
-       cfi_startproc;
-       /* Clearing frame pointer is insufficient, use CFI.  */
-       cfi_undefined (rip);
        /* Clear the frame pointer.  The ABI suggests this be done, to mark
           the outermost frame obviously.  */
        xorl    %ebp, %ebp
@@ -116,7 +113,6 @@ L(thread_start):
        /* Call exit with return value from function call. */
        movq    %rax, %rdi
        call    HIDDEN_JUMPTARGET (_exit)
-       cfi_endproc;
 
        cfi_startproc;
 PSEUDO_END (BP_SYM (__clone))
index ab1012385839a068dacc9d8862a160dc83999ce8..d6f4558cef696135c31e2edd6fe40ce2cf7755a0 100644 (file)
@@ -1,5 +1,5 @@
 /* POSIX.1 `sigaction' call for Linux/x86-64.
-   Copyright (C) 2001, 2002, 2003, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    translate it here.  */
 #include <kernel_sigaction.h>
 
-#include "ucontext_i.h"
-
 /* We do not globally define the SA_RESTORER flag so do it here.  */
 #define SA_RESTORER 0x04000000
 
 /* Using the hidden attribute here does not change the code but it
    helps to avoid warnings.  */
+#if defined HAVE_HIDDEN && defined HAVE_VISIBILITY_ATTRIBUTE \
+    && !defined HAVE_BROKEN_VISIBILITY_ATTRIBUTE
 extern void restore_rt (void) asm ("__restore_rt") attribute_hidden;
+#else
+static void restore_rt (void) asm ("__restore_rt");
+#endif
 
 
 /* If ACT is not NULL, change the action for SIG to *ACT.
@@ -92,95 +95,18 @@ weak_alias (__libc_sigaction, sigaction)
    signal handlers work right.  Important are both the names
    (__restore_rt) and the exact instruction sequence.
    If you ever feel the need to make any changes, please notify the
-   appropriate GDB maintainer.
-
-   The unwind information starts a byte before __restore_rt, so that
-   it is found when unwinding, to get an address the unwinder assumes
-   will be in the middle of a call instruction.  See the Linux kernel
-   (the i386 vsyscall, in particular) for an explanation of the complex
-   unwind information used here in order to get the traditional CFA.
-   We do not restore cs - it's only stored as two bytes here so that's
-   a bit tricky.  We don't use the gas cfi directives, so that we can
-   reliably add .cfi_signal_frame.  */
-
-#define do_cfa_expr                                            \
-  "    .byte 0x0f\n"           /* DW_CFA_def_cfa_expression */ \
-  "    .uleb128 2f-1f\n"       /* length */                    \
-  "1:  .byte 0x77\n"           /* DW_OP_breg7 */               \
-  "    .sleb128 " CFI_STRINGIFY (oRSP) "\n"                    \
-  "    .byte 0x06\n"           /* DW_OP_deref */               \
-  "2:"
-
-#define do_expr(regno, offset)                                 \
-  "    .byte 0x10\n"           /* DW_CFA_expression */         \
-  "    .uleb128 " CFI_STRINGIFY (regno) "\n"                   \
-  "    .uleb128 2f-1f\n"       /* length */                    \
-  "1:  .byte 0x77\n"           /* DW_OP_breg7 */               \
-  "    .sleb128 " CFI_STRINGIFY (offset) "\n"                  \
-  "2:"
+   appropriate GDB maintainer.  */
 
 #define RESTORE(name, syscall) RESTORE2 (name, syscall)
 # define RESTORE2(name, syscall) \
-asm                                                                    \
-  (                                                                    \
-   /* `nop' for debuggers assuming `call' should not disalign the code.  */ \
-   "   nop\n"                                                          \
-   ".align 16\n"                                                       \
-   ".LSTART_" #name ":\n"                                              \
-   "   .type __" #name ",@function\n"                                  \
-   "__" #name ":\n"                                                    \
-   "   movq $" #syscall ", %rax\n"                                     \
-   "   syscall\n"                                                      \
-   ".LEND_" #name ":\n"                                                        \
-   ".section .eh_frame,\"a\",@progbits\n"                              \
-   ".LSTARTFRAME_" #name ":\n"                                         \
-   "   .long .LENDCIE_" #name "-.LSTARTCIE_" #name "\n"                \
-   ".LSTARTCIE_" #name ":\n"                                           \
-   "   .long 0\n"      /* CIE ID */                                    \
-   "   .byte 1\n"      /* Version number */                            \
-   "   .string \"zRS\"\n" /* NUL-terminated augmentation string */     \
-   "   .uleb128 1\n"   /* Code alignment factor */                     \
-   "   .sleb128 -8\n"  /* Data alignment factor */                     \
-   "   .uleb128 16\n"  /* Return address register column (rip) */      \
-   /* Augmentation value length */                                     \
-   "   .uleb128 .LENDAUGMNT_" #name "-.LSTARTAUGMNT_" #name "\n"       \
-   ".LSTARTAUGMNT_" #name ":\n"                                                \
-   "   .byte 0x1b\n"   /* DW_EH_PE_pcrel|DW_EH_PE_sdata4. */           \
-   ".LENDAUGMNT_" #name ":\n"                                          \
-   "   .align 8\n"                                                     \
-   ".LENDCIE_" #name ":\n"                                             \
-   "   .long .LENDFDE_" #name "-.LSTARTFDE_" #name "\n" /* FDE len */  \
-   ".LSTARTFDE_" #name ":\n"                                           \
-   "   .long .LSTARTFDE_" #name "-.LSTARTFRAME_" #name "\n" /* CIE */  \
-   /* `LSTART_' is subtracted 1 as debuggers assume a `call' here.  */ \
-   "   .long (.LSTART_" #name "-1)-.\n" /* PC-relative start addr.  */ \
-   "   .long .LEND_" #name "-(.LSTART_" #name "-1)\n"                  \
-   "   .uleb128 0\n"                   /* FDE augmentation length */   \
-   do_cfa_expr                                                         \
-   do_expr (8 /* r8 */, oR8)                                           \
-   do_expr (9 /* r9 */, oR9)                                           \
-   do_expr (10 /* r10 */, oR10)                                                \
-   do_expr (11 /* r11 */, oR11)                                                \
-   do_expr (12 /* r12 */, oR12)                                                \
-   do_expr (13 /* r13 */, oR13)                                                \
-   do_expr (14 /* r14 */, oR14)                                                \
-   do_expr (15 /* r15 */, oR15)                                                \
-   do_expr (5 /* rdi */, oRDI)                                         \
-   do_expr (4 /* rsi */, oRSI)                                         \
-   do_expr (6 /* rbp */, oRBP)                                         \
-   do_expr (3 /* rbx */, oRBX)                                         \
-   do_expr (1 /* rdx */, oRDX)                                         \
-   do_expr (0 /* rax */, oRAX)                                         \
-   do_expr (2 /* rcx */, oRCX)                                         \
-   do_expr (7 /* rsp */, oRSP)                                         \
-   do_expr (16 /* rip */, oRIP)                                                \
-   /* libgcc-4.1.1 has only `DWARF_FRAME_REGISTERS == 17'.  */         \
-   /* do_expr (49 |* rflags *|, oEFL) */                               \
-   /* `cs'/`ds'/`fs' are unaligned and a different size.  */           \
-   /* gas: Error: register save offset not a multiple of 8  */         \
-   "   .align 8\n"                                                     \
-   ".LENDFDE_" #name ":\n"                                             \
-   "   .previous\n"                                                    \
+asm                                            \
+  (                                            \
+   ".align 16\n"                               \
+   CFI_STARTPROC "\n"                          \
+   "__" #name ":\n"                            \
+   "   movq $" #syscall ", %rax\n"             \
+   "   syscall\n"                              \
+   CFI_ENDPROC "\n"                            \
    );
 /* The return code for realtime-signals.  */
 RESTORE (restore_rt, __NR_rt_sigreturn)
index af3e0e544b87c8b34ebffdc321f118e1c653c475..b3cfe9aa4c90861580ee88151d2ee4319a02c4a7 100644 (file)
@@ -18,8 +18,6 @@ oRSP          mreg (RSP)
 oRBX           mreg (RBX)
 oR8            mreg (R8)
 oR9            mreg (R9)
-oR10           mreg (R10)
-oR11           mreg (R11)
 oR12           mreg (R12)
 oR13           mreg (R13)
 oR14           mreg (R14)
@@ -30,7 +28,6 @@ oRDX          mreg (RDX)
 oRAX           mreg (RAX)
 oRCX           mreg (RCX)
 oRIP           mreg (RIP)
-oEFL           mreg (EFL)
 oFPREGS                mcontext (fpregs)
 oSIGMASK       ucontext (uc_sigmask)
 oFPREGSMEM     ucontext (__fpregs_mem)
index 65d6b02008ff9d68c6f0dc3b8a5bc7ccccc3e96c..133a68d192ad2e701d3b7ee462706a1cf8522ca2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+/* 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.
 
@@ -18,7 +18,6 @@
    02111-1307 USA.  */
 
 #include <stdint.h>
-#include <tls.h>       /* For tcbhead_t.  */
 
 
 typedef int8_t atomic8_t;
@@ -81,54 +80,8 @@ typedef uintmax_t uatomic_max_t;
   ({ __typeof (*mem) ret;                                                    \
      __asm __volatile (LOCK_PREFIX "cmpxchgq %q2, %1"                        \
                       : "=a" (ret), "=m" (*mem)                              \
-                      : "r" ((long int) (newval)), "m" (*mem),               \
-                        "0" ((long int) (oldval)));                          \
-     ret; })
-
-
-#define __arch_c_compare_and_exchange_val_8_acq(mem, newval, oldval) \
-  ({ __typeof (*mem) ret;                                                    \
-    __asm __volatile ("cmpl $0, %%fs:%P5\n\t"                                \
-                     "je 0f\n\t"                                             \
-                     "lock\n"                                                \
-                      "0:\tcmpxchgb %b2, %1"                                 \
-                      : "=a" (ret), "=m" (*mem)                              \
-                      : "q" (newval), "m" (*mem), "0" (oldval),              \
-                        "i" (offsetof (tcbhead_t, multiple_threads)));       \
-     ret; })
-
-#define __arch_c_compare_and_exchange_val_16_acq(mem, newval, oldval) \
-  ({ __typeof (*mem) ret;                                                    \
-    __asm __volatile ("cmpl $0, %%fs:%P5\n\t"                                \
-                     "je 0f\n\t"                                             \
-                     "lock\n"                                                \
-                      "0:\tcmpxchgw %w2, %1"                                 \
-                      : "=a" (ret), "=m" (*mem)                              \
-                      : "q" (newval), "m" (*mem), "0" (oldval),              \
-                        "i" (offsetof (tcbhead_t, multiple_threads)));       \
-     ret; })
-
-#define __arch_c_compare_and_exchange_val_32_acq(mem, newval, oldval) \
-  ({ __typeof (*mem) ret;                                                    \
-    __asm __volatile ("cmpl $0, %%fs:%P5\n\t"                                \
-                     "je 0f\n\t"                                             \
-                     "lock\n"                                                \
-                      "0:\tcmpxchgl %2, %1"                                  \
-                      : "=a" (ret), "=m" (*mem)                              \
-                      : "q" (newval), "m" (*mem), "0" (oldval),              \
-                        "i" (offsetof (tcbhead_t, multiple_threads)));       \
-     ret; })
-
-#define __arch_c_compare_and_exchange_val_64_acq(mem, newval, oldval) \
-  ({ __typeof (*mem) ret;                                                    \
-     __asm __volatile ("cmpl $0, %%fs:%P5\n\t"                               \
-                      "je 0f\n\t"                                            \
-                      "lock\n"                                               \
-                      "0:\tcmpxchgq %q2, %1"                                 \
-                      : "=a" (ret), "=m" (*mem)                              \
-                      : "q" ((long int) (newval)), "m" (*mem),               \
-                        "0" ((long int)oldval),                              \
-                        "i" (offsetof (tcbhead_t, multiple_threads)));       \
+                      : "r" ((long) (newval)), "m" (*mem),                   \
+                        "0" ((long) (oldval)));                              \
      ret; })
 
 
@@ -154,76 +107,49 @@ typedef uintmax_t uatomic_max_t;
      result; })
 
 
-#define __arch_exchange_and_add_body(lock, mem, value)                       \
+#define atomic_exchange_and_add(mem, value) \
   ({ __typeof (*mem) result;                                                 \
      if (sizeof (*mem) == 1)                                                 \
-       __asm __volatile (lock "xaddb %b0, %1"                                \
+       __asm __volatile (LOCK_PREFIX "xaddb %b0, %1"                         \
                         : "=r" (result), "=m" (*mem)                         \
-                        : "0" (value), "m" (*mem),                           \
-                          "i" (offsetof (tcbhead_t, multiple_threads)));     \
+                        : "0" (value), "m" (*mem));                          \
      else if (sizeof (*mem) == 2)                                            \
-       __asm __volatile (lock "xaddw %w0, %1"                                \
+       __asm __volatile (LOCK_PREFIX "xaddw %w0, %1"                         \
                         : "=r" (result), "=m" (*mem)                         \
-                        : "0" (value), "m" (*mem),                           \
-                          "i" (offsetof (tcbhead_t, multiple_threads)));     \
+                        : "0" (value), "m" (*mem));                          \
      else if (sizeof (*mem) == 4)                                            \
-       __asm __volatile (lock "xaddl %0, %1"                                 \
+       __asm __volatile (LOCK_PREFIX "xaddl %0, %1"                          \
                         : "=r" (result), "=m" (*mem)                         \
-                        : "0" (value), "m" (*mem),                           \
-                          "i" (offsetof (tcbhead_t, multiple_threads)));     \
+                        : "0" (value), "m" (*mem));                          \
      else                                                                    \
-       __asm __volatile (lock "xaddq %q0, %1"                                \
+       __asm __volatile (LOCK_PREFIX "xaddq %q0, %1"                         \
                         : "=r" (result), "=m" (*mem)                         \
-                        : "0" ((long) (value)), "m" (*mem),                  \
-                          "i" (offsetof (tcbhead_t, multiple_threads)));     \
+                        : "0" ((long) (value)), "m" (*mem));                 \
      result; })
 
-#define atomic_exchange_and_add(mem, value) \
-  __arch_exchange_and_add_body (LOCK_PREFIX, mem, value)
-
-#define __arch_exchange_and_add_cprefix \
-  "cmpl $0, %%fs:%P4\n\tje 0f\n\tlock\n0:\t"
-
-#define catomic_exchange_and_add(mem, value) \
-  __arch_exchange_and_add_body (__arch_exchange_and_add_cprefix, mem, value)
-
-
-#define __arch_add_body(lock, pfx, mem, value)                               \
-  do {                                                                       \
-    if (__builtin_constant_p (value) && (value) == 1)                        \
-      pfx##_increment (mem);                                                 \
-    else if (__builtin_constant_p (value) && (value) == -1)                  \
-      pfx##_decrement (mem);                                                 \
-    else if (sizeof (*mem) == 1)                                             \
-      __asm __volatile (lock "addb %b1, %0"                                  \
-                       : "=m" (*mem)                                         \
-                       : "ir" (value), "m" (*mem),                           \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (lock "addw %w1, %0"                                  \
-                       : "=m" (*mem)                                         \
-                       : "ir" (value), "m" (*mem),                           \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (lock "addl %1, %0"                                   \
-                       : "=m" (*mem)                                         \
-                       : "ir" (value), "m" (*mem),                           \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else                                                                     \
-      __asm __volatile (lock "addq %q1, %0"                                  \
-                       : "=m" (*mem)                                         \
-                       : "ir" ((long) (value)), "m" (*mem),                  \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-  } while (0)
 
 #define atomic_add(mem, value) \
-  __arch_add_body (LOCK_PREFIX, atomic, mem, value)
-
-#define __arch_add_cprefix \
-  "cmpl $0, %%fs:%P3\n\tje 0f\n\tlock\n0:\t"
-
-#define catomic_add(mem, value) \
-  __arch_add_body (__arch_add_cprefix, catomic, mem, value)
+  (void) ({ if (__builtin_constant_p (value) && (value) == 1)                \
+             atomic_increment (mem);                                         \
+           else if (__builtin_constant_p (value) && (value) == 1)            \
+             atomic_decrement (mem);                                         \
+           else if (sizeof (*mem) == 1)                                      \
+             __asm __volatile (LOCK_PREFIX "addb %b1, %0"                    \
+                               : "=m" (*mem)                                 \
+                               : "ir" (value), "m" (*mem));                  \
+           else if (sizeof (*mem) == 2)                                      \
+             __asm __volatile (LOCK_PREFIX "addw %w1, %0"                    \
+                               : "=m" (*mem)                                 \
+                               : "ir" (value), "m" (*mem));                  \
+           else if (sizeof (*mem) == 4)                                      \
+             __asm __volatile (LOCK_PREFIX "addl %1, %0"                     \
+                               : "=m" (*mem)                                 \
+                               : "ir" (value), "m" (*mem));                  \
+           else                                                              \
+             __asm __volatile (LOCK_PREFIX "addq %q1, %0"                    \
+                               : "=m" (*mem)                                 \
+                               : "ir" ((long) (value)), "m" (*mem));         \
+           })
 
 
 #define atomic_add_negative(mem, value) \
@@ -268,37 +194,24 @@ typedef uintmax_t uatomic_max_t;
      __result; })
 
 
-#define __arch_increment_body(lock, mem) \
-  do {                                                                       \
-    if (sizeof (*mem) == 1)                                                  \
-      __asm __volatile (lock "incb %b0"                                              \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (lock "incw %w0"                                              \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (lock "incl %0"                                       \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else                                                                     \
-      __asm __volatile (lock "incq %q0"                                              \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-  } while (0)
-
-#define atomic_increment(mem) __arch_increment_body (LOCK_PREFIX, mem)
-
-#define __arch_increment_cprefix \
-  "cmpl $0, %%fs:%P2\n\tje 0f\n\tlock\n0:\t"
-
-#define catomic_increment(mem) \
-  __arch_increment_body (__arch_increment_cprefix, mem)
+#define atomic_increment(mem) \
+  (void) ({ if (sizeof (*mem) == 1)                                          \
+             __asm __volatile (LOCK_PREFIX "incb %b0"                        \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else if (sizeof (*mem) == 2)                                      \
+             __asm __volatile (LOCK_PREFIX "incw %w0"                        \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else if (sizeof (*mem) == 4)                                      \
+             __asm __volatile (LOCK_PREFIX "incl %0"                         \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else                                                              \
+             __asm __volatile (LOCK_PREFIX "incq %q0"                        \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           })
 
 
 #define atomic_increment_and_test(mem) \
@@ -322,37 +235,24 @@ typedef uintmax_t uatomic_max_t;
      __result; })
 
 
-#define __arch_decrement_body(lock, mem) \
-  do {                                                                       \
-    if (sizeof (*mem) == 1)                                                  \
-      __asm __volatile (lock "decb %b0"                                              \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (lock "decw %w0"                                              \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (lock "decl %0"                                       \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else                                                                     \
-      __asm __volatile (lock "decq %q0"                                              \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem),                                         \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-  } while (0)
-
-#define atomic_decrement(mem) __arch_decrement_body (LOCK_PREFIX, mem)
-
-#define __arch_decrement_cprefix \
-  "cmpl $0, %%fs:%P2\n\tje 0f\n\tlock\n0:\t"
-
-#define catomic_decrement(mem) \
-  __arch_decrement_body (__arch_decrement_cprefix, mem)
+#define atomic_decrement(mem) \
+  (void) ({ if (sizeof (*mem) == 1)                                          \
+             __asm __volatile (LOCK_PREFIX "decb %b0"                        \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else if (sizeof (*mem) == 2)                                      \
+             __asm __volatile (LOCK_PREFIX "decw %w0"                        \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else if (sizeof (*mem) == 4)                                      \
+             __asm __volatile (LOCK_PREFIX "decl %0"                         \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           else                                                              \
+             __asm __volatile (LOCK_PREFIX "decq %q0"                        \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem));                                \
+           })
 
 
 #define atomic_decrement_and_test(mem) \
@@ -377,28 +277,27 @@ typedef uintmax_t uatomic_max_t;
 
 
 #define atomic_bit_set(mem, bit) \
-  do {                                                                       \
-    if (sizeof (*mem) == 1)                                                  \
-      __asm __volatile (LOCK_PREFIX "orb %b2, %0"                            \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem), "ir" (1L << (bit)));                    \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (LOCK_PREFIX "orw %w2, %0"                            \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem), "ir" (1L << (bit)));                    \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (LOCK_PREFIX "orl %2, %0"                             \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem), "ir" (1L << (bit)));                    \
-    else if (__builtin_constant_p (bit) && (bit) < 32)                       \
-      __asm __volatile (LOCK_PREFIX "orq %2, %0"                             \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem), "i" (1L << (bit)));                     \
-    else                                                                     \
-      __asm __volatile (LOCK_PREFIX "orq %q2, %0"                            \
-                       : "=m" (*mem)                                         \
-                       : "m" (*mem), "r" (1UL << (bit)));                    \
-  } while (0)
+  (void) ({ if (sizeof (*mem) == 1)                                          \
+             __asm __volatile (LOCK_PREFIX "orb %b2, %0"                     \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem), "ir" (1L << (bit)));            \
+           else if (sizeof (*mem) == 2)                                      \
+             __asm __volatile (LOCK_PREFIX "orw %w2, %0"                     \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem), "ir" (1L << (bit)));            \
+           else if (sizeof (*mem) == 4)                                      \
+             __asm __volatile (LOCK_PREFIX "orl %2, %0"                      \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem), "ir" (1L << (bit)));            \
+           else if (__builtin_constant_p (bit) && (bit) < 32)                \
+             __asm __volatile (LOCK_PREFIX "orq %2, %0"                      \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem), "i" (1L << (bit)));             \
+           else                                                              \
+             __asm __volatile (LOCK_PREFIX "orq %q2, %0"                     \
+                               : "=m" (*mem)                                 \
+                               : "m" (*mem), "r" (1UL << (bit)));            \
+           })
 
 
 #define atomic_bit_test_set(mem, bit) \
@@ -423,56 +322,3 @@ typedef uintmax_t uatomic_max_t;
 
 
 #define atomic_delay() asm ("rep; nop")
-
-
-#define atomic_and(mem, mask) \
-  do {                                                                       \
-    if (sizeof (*mem) == 1)                                                  \
-      __asm __volatile (LOCK_PREFIX "andb %1, %b0"                           \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem));                           \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (LOCK_PREFIX "andw %1, %w0"                           \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem));                           \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (LOCK_PREFIX "andl %1, %0"                            \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem));                           \
-    else                                                                     \
-      __asm __volatile (LOCK_PREFIX "andq %1, %q0"                           \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem));                           \
-  } while (0)
-
-
-#define __arch_or_body(lock, mem, mask)                                              \
-  do {                                                                       \
-    if (sizeof (*mem) == 1)                                                  \
-      __asm __volatile (lock "orb %1, %b0"                                   \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem),                            \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 2)                                             \
-      __asm __volatile (lock "orw %1, %w0"                                   \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem),                            \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else if (sizeof (*mem) == 4)                                             \
-      __asm __volatile (lock "orl %1, %0"                                    \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem),                            \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-    else                                                                     \
-      __asm __volatile (lock "orq %1, %q0"                                   \
-                       : "=m" (*mem)                                         \
-                       : "ir" (mask), "m" (*mem),                            \
-                         "i" (offsetof (tcbhead_t, multiple_threads)));      \
-  } while (0)
-
-#define atomic_or(mem, mask) __arch_or_body (LOCK_PREFIX, mem, mask)
-
-#define __arch_or_cprefix \
-  "cmpl $0, %%fs:%P3\n\tje 0f\n\tlock\n0:\t"
-
-#define catomic_or(mem, mask) __arch_or_body (__arch_or_cprefix, mem, mask)
index e1c861c75f6ba5e22d4e76c4596430e82b493a67..ec2b17889d38fbda1360f43b107ddf3d71dc537b 100644 (file)
@@ -1,5 +1,6 @@
 /* Macros to swap the order of bytes in integer values.
-   Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc.
+   Copyright (C) 1997, 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
@@ -59,7 +60,9 @@
 # if __WORDSIZE == 64 || (defined __i486__ || defined __pentium__            \
                          || defined __pentiumpro__ || defined __pentium4__   \
                          || defined __k8__ || defined __athlon__             \
-                         || defined __k6__)
+                         || defined __k6__ || defined __nocona__             \
+                         || defined __core2__ || defined __geode__           \
+                         || defined __amdfam10__)
 /* To swap the bytes in a word the i486 processors and up provide the
    `bswap' opcode.  On i386 we have to use three instructions.  */
 #  define __bswap_32(x) \
index 31a7013d504e1546f3134ede3d7497057bf365e1..73e271775aaee05c64ac66b1b8eb7e1dcc11e369 100644 (file)
@@ -1,5 +1,5 @@
 /* Machine-dependent ELF dynamic relocation inline functions.  x86-64 version.
-   Copyright (C) 2001-2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>.
 
@@ -190,7 +190,7 @@ _dl_start_user:\n\
    define the value.
    ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one
    of the main executable's symbols, as for a COPY reloc.  */
-#if !defined RTLD_BOOTSTRAP || USE___THREAD
+#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD)
 # define elf_machine_type_class(type)                                        \
   ((((type) == R_X86_64_JUMP_SLOT                                            \
      || (type) == R_X86_64_DTPMOD64                                          \
@@ -300,7 +300,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
          *reloc_addr = value + reloc->r_addend;
          break;
 
-#ifndef RESOLVE_CONFLICT_FIND_MAP
+#if defined USE_TLS && !defined RESOLVE_CONFLICT_FIND_MAP
        case R_X86_64_DTPMOD64:
 # ifdef RTLD_BOOTSTRAP
          /* During startup the dynamic linker is always the module
@@ -339,7 +339,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
                             - sym_map->l_tls_offset);
            }
          break;
-#endif
+#endif /* use TLS */
 
 #ifndef RTLD_BOOTSTRAP
        case R_X86_64_64:
index b4343bef4570ae0e97dc7247c972712e87d2f117..633234b74431c4f64e4c79958b97087a28761614 100644 (file)
@@ -42,7 +42,7 @@ ENTRY(__ieee754_log10l)
        fxam
        fnstsw
        fld     %st             // x : x : log10(2)
-       andb    $1,%ah
+       testb   $1, %ah
        jnz     3f              // in case x is NaN or ±Inf
 4:     fsubl   MO(one)         // x-1 : x : log10(2)
        fld     %st             // x-1 : x-1 : x : log10(2)
@@ -59,7 +59,8 @@ ENTRY(__ieee754_log10l)
        fyl2x                   // log10(x)
        ret
 
-3:     jp      4b              // in case x is ±Inf
+3:     testb   $4, %ah
+       jnz     4b              // in case x is ±Inf
        fstp    %st(1)
        fstp    %st(1)
        ret
index 7a89b94d9f0a8f5d3cb3473182ab5632f713bf09..f04d30a05a0ef5d63deb8d1f0c9d106e532a1030 100644 (file)
@@ -39,7 +39,7 @@ ENTRY(__ieee754_log2l)
        fxam
        fnstsw
        fld     %st             // x : x : 1
-       andb    $1,%ah
+       testb   $1, %ah
        jnz     3f              // in case x is NaN or ±Inf
 4:     fsub    %st(2), %st     // x-1 : x : 1
        fld     %st             // x-1 : x-1 : x : 1
@@ -56,7 +56,8 @@ ENTRY(__ieee754_log2l)
        fyl2x                   // log(x)
        ret
 
-3:     jp      4b              // in case x is ±Inf
+3:     testb   $4, %ah
+       jnz     4b              // in case x is ±Inf
        fstp    %st(1)
        fstp    %st(1)
        ret
index a0bed663c848dfca13e36132f2d416ccf160bdba..2ba91eedfdc365a9744078c01b6490388381a1c9 100644 (file)
@@ -38,8 +38,12 @@ limit:       .double 0.29
 ENTRY(__ieee754_logl)
        fldln2                  // log(2)
        fldt    8(%rsp)         // x : log(2)
+       fxam
+       fnstsw
        fld     %st             // x : x : log(2)
-       fsubl   MO(one)         // x-1 : x : log(2)
+       testb   $1, %ah
+       jnz     3f              // in case x is NaN or +-Inf
+4:     fsubl   MO(one)         // x-1 : x : log(2)
        fld     %st             // x-1 : x-1 : x : log(2)
        fabs                    // |x-1| : x-1 : x : log(2)
        fcompl  MO(limit)       // x-1 : x : log(2)
@@ -53,4 +57,10 @@ ENTRY(__ieee754_logl)
 2:     fstp    %st(0)          // x : log(2)
        fyl2x                   // log(x)
        ret
+
+3:     testb   $4, %ah
+       jnz     4b              // in case x is +-Inf
+       fstp    %st(1)
+       fstp    %st(1)
+       ret
 END (__ieee754_logl)
index 85f4deb3c7e0772db16c8dd5f5a0a061c6906aaf..4959bea7ac9f8a1e67ff081a9723ac2a427c1c51 100644 (file)
@@ -1,5 +1,6 @@
 /* ix87 specific implementation of pow function.
-   Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999, 2001, 2004, 2007
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -146,10 +147,11 @@ ENTRY(__ieee754_powl)
 2:     /* y is a real number.  */
        fxch                    // x : y
        fldl    MO(one)         // 1.0 : x : y
-       fld     %st(1)          // x : 1.0 : x : y
-       fsub    %st(1)          // x-1 : 1.0 : x : y
-       fabs                    // |x-1| : 1.0 : x : y
-       fcompl  MO(limit)       // 1.0 : x : y
+       fldl    MO(limit)       // 0.29 : 1.0 : x : y
+       fld     %st(2)          // x : 0.29 : 1.0 : x : y
+       fsub    %st(2)          // x-1 : 0.29 : 1.0 : x : y
+       fabs                    // |x-1| : 0.29 : 1.0 : x : y
+       fucompp                 // 1.0 : x : y
        fnstsw
        fxch                    // x : 1.0 : y
        test    $4500,%eax
@@ -190,9 +192,10 @@ ENTRY(__ieee754_powl)
        // y == ±inf
        .align ALIGNARG(4)
 12:    fstp    %st(0)          // pop y
-       fldt    8(%rsp)         // x
-       fabs
-       fcompl  MO(one)         // < 1, == 1, or > 1
+       fldl    MO(one)         // 1
+       fldt    8(%rsp)         // x : 1
+       fabs                    // abs(x) : 1
+       fucompp                 // < 1, == 1, or > 1
        fnstsw
        andb    $0x45, %ah
        cmpb    $0x45, %ah
diff --git a/sysdeps/x86_64/fpu/math_private.h b/sysdeps/x86_64/fpu/math_private.h
new file mode 100644 (file)
index 0000000..4febcbb
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef _MATH_PRIVATE_H
+
+#define math_opt_barrier(x) \
+({ __typeof(x) __x;                                    \
+   if (sizeof (x) <= sizeof (double))                  \
+     __asm ("" : "=x" (__x) : "0" (x));                        \
+   else                                                        \
+     __asm ("" : "=t" (__x) : "0" (x));                        \
+   __x; })
+#define math_force_eval(x) \
+do                                                     \
+  {                                                    \
+    if (sizeof (x) <= sizeof (double))                 \
+      __asm __volatile ("" : : "x" (x));               \
+    else                                               \
+      __asm __volatile ("" : : "f" (x));               \
+  }                                                    \
+while (0)
+
+#include <math/math_private.h>
+#endif
index f3d9b0cbb4bde10bd0f61cc55dcd1fc076f95d8c..f1ebcf8bf19ab646dede1bdb54b1a6418fde2e1c 100644 (file)
@@ -1,5 +1,5 @@
 /* copy sign, double version.
-   Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 2002.
 
@@ -31,8 +31,6 @@
 signmask:
        .byte 0, 0, 0, 0, 0, 0, 0, 0x80
        .byte 0, 0, 0, 0, 0, 0, 0, 0
-       ASM_SIZE_DIRECTIVE(signmask)
-       ASM_TYPE_DIRECTIVE(othermask,@object)
 othermask:
        .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f
        .byte 0, 0, 0, 0, 0, 0, 0, 0
@@ -44,7 +42,6 @@ othermask:
 #define MO(op) op
 #endif
 
-       .text
 ENTRY(__copysign)
        andpd MO(othermask),%xmm0
        andpd MO(signmask),%xmm1
index 0fbe1d4c9607e163c1b2d3c5b33af60748f503ef..f5dc5f78ad97019a8bac26fb56b2f76d8040e7b9 100644 (file)
@@ -1,5 +1,5 @@
 /* copy sign, double version.
-   Copyright (C) 2002, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 2002.
 
@@ -38,7 +38,6 @@ mask:
 #define MO(op) op
 #endif
 
-       .text
 ENTRY(__copysignf)
        movss   MO(mask),%xmm3
        andps   %xmm3,%xmm0
index 7fbd0e5aaad08ef1a2b9cf52c7700b94f6c185aa..ac2bd22a4fc5fc31b758beafff689fb73fe070a2 100644 (file)
@@ -45,7 +45,7 @@ ENTRY(__log1pl)
        fxam
        fnstsw
        fld     %st
-       andb    $1,%ah
+       testb   $1, %ah
        jnz     3f              // in case x is NaN or ±Inf
 4:
        fabs
@@ -62,7 +62,8 @@ ENTRY(__log1pl)
 2:     fyl2xp1
        ret
 
-3:     jp      4b              // in case x is ±Inf
+3:     testb   $4, %ah
+       jnz     4b              // in case x is ±Inf
        fstp    %st(1)
        fstp    %st(1)
        ret
diff --git a/sysdeps/x86_64/ldbl2mpn.c b/sysdeps/x86_64/ldbl2mpn.c
new file mode 100644 (file)
index 0000000..641b789
--- /dev/null
@@ -0,0 +1 @@
+#include "../i386/ldbl2mpn.c"
diff --git a/sysdeps/x86_64/soft-fp/sfp-machine.h b/sysdeps/x86_64/soft-fp/sfp-machine.h
new file mode 100644 (file)
index 0000000..77df023
--- /dev/null
@@ -0,0 +1,51 @@
+#define _FP_W_TYPE_SIZE                64
+#define _FP_W_TYPE             unsigned long
+#define _FP_WS_TYPE            signed long
+#define _FP_I_TYPE             long
+
+#define __FP_CLZ(r, x)                                                 \
+  do {                                                                 \
+    __asm__("bsrq %1,%0" : "=r"(r) : "g"(x) : "cc");                   \
+    r ^= 63;                                                           \
+  } while (0)
+
+#define _FP_NANFRAC_S          _FP_QNANBIT_S
+#define _FP_NANFRAC_D          _FP_QNANBIT_D, 0
+#define _FP_NANFRAC_Q          _FP_QNANBIT_Q, 0, 0, 0
+#define _FP_NANSIGN_S          1
+#define _FP_NANSIGN_D          1
+#define _FP_NANSIGN_Q          1
+
+#define _FP_KEEPNANFRACP 1
+/* Here is something Intel misdesigned: the specs don't define
+   the case where we have two NaNs with same mantissas, but
+   different sign. Different operations pick up different NaNs.
+ */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP)                     \
+  do {                                                         \
+    if (_FP_FRAC_GT_##wc(X, Y)                                 \
+       || (_FP_FRAC_EQ_##wc(X,Y) && (OP == '+' || OP == '*'))) \
+      {                                                                \
+       R##_s = X##_s;                                          \
+        _FP_FRAC_COPY_##wc(R,X);                               \
+      }                                                                \
+    else                                                       \
+      {                                                                \
+       R##_s = Y##_s;                                          \
+        _FP_FRAC_COPY_##wc(R,Y);                               \
+      }                                                                \
+    R##_c = FP_CLS_NAN;                                                \
+  } while (0)
+
+#define FP_EX_INVALID           (1 << 0)
+#define FP_EX_DENORM           (1 << 1)
+#define FP_EX_DIVZERO           (1 << 2)
+#define FP_EX_OVERFLOW          (1 << 3)
+#define FP_EX_UNDERFLOW         (1 << 4)
+#define FP_EX_INEXACT           (1 << 5)
+
+#define FP_RND_NEAREST         0
+#define FP_RND_ZERO            3
+#define FP_RND_PINF            2
+#define FP_RND_MINF            1
+
index d93b84bb2f266ee5f3ce086355472cbbc67f3a5b..8ce34e456539d19afeb29c8a05b3be7b1ab89a07 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2003, 2004, 2005 Free Software Foundation, Inc.
+# Copyright (C) 1991-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
@@ -35,7 +35,8 @@ distribute := datemsk
 
 tests  := test_time clocktest tst-posixtz tst-strptime tst_wcsftime \
           tst-getdate tst-mktime tst-mktime2 tst-ftime_l tst-strftime \
-          tst-mktime3 tst-strptime2 bug-asctime bug-asctime_r bug-mktime1
+          tst-mktime3 tst-strptime2 bug-asctime bug-asctime_r bug-mktime1 \
+          tst-strptime3
 
 include ../Rules
 
index dc0cc686fd45736b591ec45125f75c86e0889c61..443a6fa88e387547d8c157f411cd034a3da1aa21 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 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
@@ -400,6 +400,7 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM)
            /* Does not match a month name.  */
            return NULL;
          tm->tm_mon = cnt;
+         have_mon = 1;
          want_xday = 1;
          break;
        case 'c':
@@ -1085,11 +1086,15 @@ __strptime_internal (rp, fmt, tm, decided, era_cnt LOCALE_PARAM)
              tm->tm_mday =
                (tm->tm_yday
                 - __mon_yday[__isleap(1900 + tm->tm_year)][t_mon - 1] + 1);
+         have_mon = 1;
+         have_mday = 1;
        }
-      day_of_the_week (tm);
+      /* Don't crash in day_of_the_week if tm_mon is uninitialized.  */
+      if (have_mon || (unsigned) tm->tm_mon <= 11)
+       day_of_the_week (tm);
     }
 
-  if (want_xday && !have_yday)
+  if (want_xday && !have_yday && (have_mon || (unsigned) tm->tm_mon <= 11))
     day_of_the_year (tm);
 
   if ((have_uweek || have_wweek) && have_wday)
diff --git a/time/tst-strptime3.c b/time/tst-strptime3.c
new file mode 100644 (file)
index 0000000..9a8c648
--- /dev/null
@@ -0,0 +1,55 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+
+int
+main (void)
+{
+  int result = 0;
+  struct tm tm;
+
+  memset (&tm, 0xaa, sizeof (tm));
+
+  /* Test we don't crash on uninitialized struct tm.
+     Some fields might contain bogus values until everything
+     needed is initialized, but we shouldn't crash.  */
+  if (strptime ("2007", "%Y", &tm) == NULL
+      || strptime ("12", "%d", &tm) == NULL
+      || strptime ("Feb", "%b", &tm) == NULL
+      || strptime ("13", "%M", &tm) == NULL
+      || strptime ("21", "%S", &tm) == NULL
+      || strptime ("16", "%H", &tm) == NULL)
+    {
+      puts ("strptimes failed");
+      result = 1;
+    }
+
+  if (tm.tm_sec != 21 || tm.tm_min != 13 || tm.tm_hour != 16
+      || tm.tm_mday != 12 || tm.tm_mon != 1 || tm.tm_year != 107
+      || tm.tm_wday != 1 || tm.tm_yday != 42)
+    {
+      puts ("unexpected tm content");
+      result = 1;
+    }
+
+  if (strptime ("8", "%d", &tm) == NULL)
+    {
+      puts ("strptime failed");
+      result = 1;
+    }
+
+  if (tm.tm_sec != 21 || tm.tm_min != 13 || tm.tm_hour != 16
+      || tm.tm_mday != 8 || tm.tm_mon != 1 || tm.tm_year != 107
+      || tm.tm_wday != 4 || tm.tm_yday != 38)
+    {
+      puts ("unexpected tm content");
+      result = 1;
+    }
+
+  if (result == 0)
+    puts ("all OK");
+
+  return 0;
+}
index ea2d7cae4ca27115889db72d64dfc15fff05a6d8..e95fd55f36fdf3e4769596db10dd68e4e26f26ba 100644 (file)
@@ -1,5 +1,4 @@
-/* Copyright (C) 1991-1993,1995-2001,2003,2004,2006
-   Free Software Foundation, Inc.
+/* Copyright (C) 1991-1993,1995-2001,2003,2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -72,34 +71,24 @@ static inline int
 __attribute ((always_inline))
 decode (const void *ptr)
 {
-  if (BYTE_ORDER == BIG_ENDIAN && sizeof (int) == 4)
+  if ((BYTE_ORDER == BIG_ENDIAN) && sizeof (int) == 4)
     return *(const int *) ptr;
-  if (sizeof (int) == 4)
+  else if (BYTE_ORDER == LITTLE_ENDIAN && sizeof (int) == 4)
     return bswap_32 (*(const int *) ptr);
+  else
+    {
+      const unsigned char *p = ptr;
+      int result = *p & (1 << (CHAR_BIT - 1)) ? ~0 : 0;
 
-  const unsigned char *p = ptr;
-  int result = *p & (1 << (CHAR_BIT - 1)) ? ~0 : 0;
-
-  result = (result << 8) | *p++;
-  result = (result << 8) | *p++;
-  result = (result << 8) | *p++;
-  result = (result << 8) | *p++;
-
-  return result;
-}
-
+      result = (result << 8) | *p++;
+      result = (result << 8) | *p++;
+      result = (result << 8) | *p++;
+      result = (result << 8) | *p++;
 
-static inline int64_t
-__attribute ((always_inline))
-decode64 (const void *ptr)
-{
-  if ((BYTE_ORDER == BIG_ENDIAN))
-    return *(const int64_t *) ptr;
-
-  return bswap_64 (*(const int64_t *) ptr);
+      return result;
+    }
 }
 
-
 void
 __tzfile_read (const char *file, size_t extra, char **extrap)
 {
@@ -113,10 +102,6 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
   size_t types_idx;
   size_t leaps_idx;
   int was_using_tzfile = __use_tzfile;
-  int trans_width = 4;
-
-  if (sizeof (time_t) != 4 && sizeof (time_t) != 8)
-    abort ();
 
   __use_tzfile = 0;
 
@@ -200,10 +185,8 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
   /* No threads reading this stream.  */
   __fsetlocking (f, FSETLOCKING_BYCALLER);
 
- read_again:
   if (__builtin_expect (fread_unlocked ((void *) &tzhead, sizeof (tzhead),
-                                       1, f) != 1, 0)
-      || memcmp (tzhead.tzh_magic, TZ_MAGIC, sizeof (tzhead.tzh_magic)) != 0)
+                                       1, f) != 1, 0))
     goto lose;
 
   num_transitions = (size_t) decode (tzhead.tzh_timecnt);
@@ -213,26 +196,6 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
   num_isstd = (size_t) decode (tzhead.tzh_ttisstdcnt);
   num_isgmt = (size_t) decode (tzhead.tzh_ttisgmtcnt);
 
-  /* For platforms with 64-bit time_t we use the new format if available.  */
-  if (sizeof (time_t) == 8 && trans_width == 4
-      && tzhead.tzh_version[0] != '\0')
-    {
-      /* We use the 8-byte format.  */
-      trans_width = 8;
-
-      /* Position the stream before the second header.  */
-      size_t to_skip = (num_transitions * (4 + 1)
-                       + num_types * 6
-                       + chars
-                       + num_leaps * 8
-                       + num_isstd
-                       + num_isgmt);
-      if (fseek (f, to_skip, SEEK_CUR) != 0)
-       goto lose;
-
-      goto read_again;
-    }
-
   total_size = num_transitions * (sizeof (time_t) + 1);
   total_size = ((total_size + __alignof__ (struct ttinfo) - 1)
                & ~(__alignof__ (struct ttinfo) - 1));
@@ -242,10 +205,10 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
                & ~(__alignof__ (struct leap) - 1));
   leaps_idx = total_size;
   total_size += num_leaps * sizeof (struct leap);
+  /* This is for the extra memory required by the caller.  */
+  total_size += extra;
 
-  /* Allocate enough memory including the extra block requested by the
-     caller.  */
-  transitions = (time_t *) malloc (total_size + extra);
+  transitions = (time_t *) malloc (total_size);
   if (transitions == NULL)
     goto lose;
 
@@ -257,11 +220,14 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
   if (extra > 0)
     *extrap = (char *) &leaps[num_leaps];
 
-  if (sizeof (time_t) == 4 || trans_width == 8)
+  if (sizeof (time_t) < 4)
+    abort ();
+
+  if (sizeof (time_t) == 4)
     {
-      if (__builtin_expect (fread_unlocked (transitions, trans_width + 1,
-                                           num_transitions, f)
-                           != num_transitions, 0))
+      if (__builtin_expect (fread_unlocked (transitions, 1,
+                                           (4 + 1) * num_transitions, f)
+                           != (4 + 1) * num_transitions, 0))
        goto lose;
     }
   else
@@ -279,9 +245,7 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
     if (__builtin_expect (type_idxs[i] >= num_types, 0))
       goto lose;
 
-  if ((BYTE_ORDER != BIG_ENDIAN && (sizeof (time_t) == 4 || trans_width == 4))
-      || (BYTE_ORDER == BIG_ENDIAN && sizeof (time_t) == 8
-         && trans_width == 4))
+  if (BYTE_ORDER != BIG_ENDIAN || sizeof (time_t) != 4)
     {
       /* Decode the transition times, stored as 4-byte integers in
         network (big-endian) byte order.  We work from the end of
@@ -291,13 +255,6 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
       while (i-- > 0)
        transitions[i] = decode ((char *) transitions + i * 4);
     }
-  else if (BYTE_ORDER != BIG_ENDIAN && sizeof (time_t) == 8)
-    {
-      /* Decode the transition times, stored as 8-byte integers in
-        network (big-endian) byte order.  */
-      for (i = 0; i < num_transitions; ++i)
-       transitions[i] = decode64 ((char *) transitions + i * 8);
-    }
 
   for (i = 0; i < num_types; ++i)
     {
@@ -323,16 +280,13 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
 
   for (i = 0; i < num_leaps; ++i)
     {
-      unsigned char x[8];
-      if (__builtin_expect (fread_unlocked (x, 1, trans_width, f)
-                           != trans_width, 0))
+      unsigned char x[4];
+      if (__builtin_expect (fread_unlocked (x, 1, sizeof (x), f) != sizeof (x),
+                           0))
        goto lose;
-      if (sizeof (time_t) == 4 || trans_width == 4)
-       leaps[i].transition = (time_t) decode (x);
-      else
-       leaps[i].transition = (time_t) decode64 (x);
-
-      if (__builtin_expect (fread_unlocked (x, 1, 4, f) != 4, 0))
+      leaps[i].transition = (time_t) decode (x);
+      if (__builtin_expect (fread_unlocked (x, 1, sizeof (x), f) != sizeof (x),
+                           0))
        goto lose;
       leaps[i].change = (long int) decode (x);
     }
@@ -357,12 +311,6 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
   while (i < num_types)
     types[i++].isgmt = 0;
 
-  /* XXX When a version 2 file is available it can contain a POSIX TZ-style
-     formatted string which specifies how times past the last one specified
-     are supposed to be handled.  We might want to handle this at some
-     point.  But it might be overhead since most/all? files have an
-     open-ended last entry.  */
-
   fclose (f);
 
   /* First "register" all timezone names.  */
index d73d340751cc951d889f3032366e00377570e32d..29625df934030f05c436237f5ca61fbf99ef1240 100644 (file)
@@ -1,15 +1,15 @@
-# @(#)africa   8.5
+# @(#)africa   8.1
 # <pre>
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (1999-03-22):
 #
 # A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
+# Thomas G. Shanks, The International Atlas (5th edition),
+# San Diego: ACS Publications, Inc. (1999).
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
@@ -17,8 +17,8 @@
 # published semiannually.  Law sent in several helpful summaries
 # of the IATA's data after 1990.
 #
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
 #
 # Another source occasionally used is Edward W. Whitman, World Time Differences,
 # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -65,7 +65,7 @@
 # Algeria
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Algeria 1916    only    -       Jun     14      23:00s  1:00    S
-Rule   Algeria 1916    1919    -       Oct     Sun>=1  23:00s  0       -
+Rule   Algeria 1916    1919    -       Oct     Sun<=7  23:00s  0       -
 Rule   Algeria 1917    only    -       Mar     24      23:00s  1:00    S
 Rule   Algeria 1918    only    -       Mar      9      23:00s  1:00    S
 Rule   Algeria 1919    only    -       Mar      1      23:00s  1:00    S
@@ -75,7 +75,7 @@ Rule  Algeria 1921    only    -       Mar     14      23:00s  1:00    S
 Rule   Algeria 1921    only    -       Jun     21      23:00s  0       -
 Rule   Algeria 1939    only    -       Sep     11      23:00s  1:00    S
 Rule   Algeria 1939    only    -       Nov     19       1:00   0       -
-Rule   Algeria 1944    1945    -       Apr     Mon>=1   2:00   1:00    S
+Rule   Algeria 1944    1945    -       Apr     Mon<=7   2:00   1:00    S
 Rule   Algeria 1944    only    -       Oct      8       2:00   0       -
 Rule   Algeria 1945    only    -       Sep     16       1:00   0       -
 Rule   Algeria 1971    only    -       Apr     25      23:00s  1:00    S
@@ -86,8 +86,7 @@ Rule  Algeria 1978    only    -       Mar     24       1:00   1:00    S
 Rule   Algeria 1978    only    -       Sep     22       3:00   0       -
 Rule   Algeria 1980    only    -       Apr     25       0:00   1:00    S
 Rule   Algeria 1980    only    -       Oct     31       2:00   0       -
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
+# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Algiers  0:12:12 -       LMT     1891 Mar 15 0:01
                        0:09:21 -       PMT     1911 Mar 11    # Paris Mean Time
@@ -107,8 +106,7 @@ Zone        Africa/Luanda   0:52:56 -       LMT     1892
                        1:00    -       WAT
 
 # Benin
-# Whitman says they switched to 1:00 in 1946, not 1934;
-# go with Shanks & Pottenger.
+# Whitman says they switched to 1:00 in 1946, not 1934; go with Shanks.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Porto-Novo 0:10:28 -       LMT     1912
                        0:00    -       GMT     1934 Feb 26
@@ -132,7 +130,7 @@ Zone Africa/Bujumbura       1:57:28 -       LMT     1890
                        2:00    -       CAT
 
 # Cameroon
-# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
+# Whitman says they switched to 1:00 in 1920; go with Shanks.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Douala   0:38:48 -       LMT     1912
                        1:00    -       WAT
@@ -211,14 +209,7 @@ Rule       Egypt   1990    1994    -       May      1      1:00    1:00    S
 # IATA (after 1990) says transitions are at 0:00.
 # Go with IATA starting in 1995, except correct 1995 entry from 09-30 to 09-29.
 Rule   Egypt   1995    max     -       Apr     lastFri  0:00s  1:00    S
-Rule   Egypt   1995    2005    -       Sep     lastThu 23:00s  0       -
-# From Steffen Thorsen (2006-09-19):
-# The Egyptian Gazette, issue 41,090 (2006-09-18), page 1, reports:
-# Egypt will turn back clocks by one hour at the midnight of Thursday
-# after observing the daylight saving time since May.
-# http://news.gom.com.eg/gazette/pdf/2006/09/18/01.pdf
-Rule   Egypt   2006    only    -       Sep     21      23:00s  0       -
-Rule   Egypt   2007    max     -       Sep     lastThu 23:00s  0       -
+Rule   Egypt   1995    max     -       Sep     lastThu 23:00s  0       -
 
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Cairo    2:05:00 -       LMT     1900 Oct
@@ -238,9 +229,9 @@ Zone        Africa/Asmera   2:35:32 -       LMT     1870
                        3:00    -       EAT
 
 # Ethiopia
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time zones
-# between 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
+# From Paul Eggert (1997-10-05):
+# Shanks writes that Ethiopia had six narrowly-spaced time zones between
+# 1870 and 1890, and that they merged to 38E50 (2:35:20) in 1890.
 # We'll guess that 38E50 is for Adis Dera.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Africa/Addis_Ababa        2:34:48 -       LMT     1870
@@ -261,8 +252,7 @@ Zone        Africa/Banjul   -1:06:36 -      LMT     1912
 
 # Ghana
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-# Whitman says DST was observed from 1931 to ``the present'';
-# go with Shanks & Pottenger.
+# Whitman says DST was observed from 1931 to ``the present''; go with Shanks.
 Rule   Ghana   1936    1942    -       Sep      1      0:00    0:20    GHST
 Rule   Ghana   1936    1942    -       Dec     31      0:00    0       GMT
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -298,14 +288,13 @@ Zone      Africa/Maseru   1:50:00 -       LMT     1903 Mar
                        2:00    -       SAST
 
 # Liberia
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2001-07-17):
 # In 1972 Liberia was the last country to switch
 # from a UTC offset that was not a multiple of 15 or 20 minutes.
 # Howse reports that it was in honor of their president's birthday.
-# Shank & Pottenger report the date as May 1, whereas Howse reports Jan;
-# go with Shanks & Pottenger.
-# For Liberia before 1972, Shanks & Pottenger report -0:44, whereas Howse and
-# Whitman each report -0:44:30; go with the more precise figure.
+# Shanks reports the date as May 1, whereas Howse reports Jan; go with Shanks.
+# For Liberia before 1972, Shanks reports -0:44, whereas Howse and Whitman
+# each report -0:44:30; go with the more precise figure.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Monrovia -0:43:08 -      LMT     1882
                        -0:43:08 -      MMT     1919 Mar # Monrovia Mean Time
@@ -335,7 +324,7 @@ Zone        Africa/Tripoli  0:52:44 -       LMT     1920
                        1:00    Libya   CE%sT   1959
                        2:00    -       EET     1982
                        1:00    Libya   CE%sT   1990 May  4
-# The following entries are from Shanks & Pottenger;
+# The following entries are all from Shanks;
 # the IATA SSIM data contain some obvious errors.
                        2:00    -       EET     1996 Sep 30
                        1:00    -       CET     1997 Apr  4
@@ -414,8 +403,8 @@ Zone        Africa/Maputo   2:10:20 -       LMT     1903 Mar
                        2:00    -       CAT
 
 # Namibia
-# The 1994-04-03 transition is from Shanks & Pottenger.
-# Shanks & Pottenger report no DST after 1998-04; go with IATA.
+# The 1994-04-03 transition is from Shanks.
+# Shanks reports no DST after 1998-04; go with IATA.
 # RULE NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Namibia 1994    max     -       Sep     Sun>=1  2:00    1:00    S
 Rule   Namibia 1995    max     -       Apr     Sun>=1  2:00    0       -
@@ -499,7 +488,7 @@ Zone        Indian/Mahe     3:41:48 -       LMT     1906 Jun        # Victoria
 
 # Sierra Leone
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks & Pottenger.
+# Whitman gives Mar 31 - Aug 31 for 1931 on; go with Shanks.
 Rule   SL      1935    1942    -       Jun      1      0:00    0:40    SLST
 Rule   SL      1935    1942    -       Oct      1      0:00    0       WAT
 Rule   SL      1957    1962    -       Jun      1      0:00    1:00    SLST
@@ -568,6 +557,7 @@ Zone        Africa/Lome     0:04:52 -       LMT     1893
 # Tunisia
 
 # From Gwillim Law (2005-04-30):
+#
 # My correspondent, Risto Nykanen, has alerted me to another adoption of DST,
 # this time in Tunisia.  According to Yahoo France News
 # <http://fr.news.yahoo.com/050426/5/4dumk.html>, in a story attributed to AP
@@ -581,12 +571,6 @@ Zone       Africa/Lome     0:04:52 -       LMT     1893
 # <http://www.lapresse.tn/archives/archives280405/actualites/lheure.html>
 # ... DST for 2005: on: Sun May 1 0h standard time, off: Fri Sept. 30,
 # 1h standard time.
-#
-# From Atef Loukil (2006-03-28):
-# The daylight saving time will be the same each year:
-# Beginning      : the last Sunday of March at 02:00
-# Ending         : the last Sunday of October at 03:00 ...
-# http://www.tap.info.tn/en/index.php?option=com_content&task=view&id=1188&Itemid=50
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Tunisia 1939    only    -       Apr     15      23:00s  1:00    S
@@ -612,11 +596,8 @@ Rule       Tunisia 1989    only    -       Mar     26       0:00s  1:00    S
 Rule   Tunisia 1990    only    -       May      1       0:00s  1:00    S
 Rule   Tunisia 2005    only    -       May      1       0:00s  1:00    S
 Rule   Tunisia 2005    only    -       Sep     30       1:00s  0       -
-Rule   Tunisia 2006    max     -       Mar     lastSun  2:00s  1:00    S
-Rule   Tunisia 2006    max     -       Oct     lastSun  2:00s  0       -
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
-# Shanks & Pottenger say the 1911 switch was on Mar 9; go with Howse's Mar 11.
+# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
+# Shanks says the 1911 switch occurred on Mar 9; go with Howse's Mar 11.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Africa/Tunis    0:40:44 -       LMT     1881 May 12
                        0:09:21 -       PMT     1911 Mar 11    # Paris Mean Time
index 2584ae4f1db10f322655cfd862de5377a4b7886e..8a9ea939c9871ba3bc3699ce1e3b2269a1cd3fc5 100644 (file)
@@ -1,4 +1,4 @@
-# @(#)antarctica       8.3
+# @(#)antarctica       8.1
 # <pre>
 
 # From Paul Eggert (1999-11-15):
@@ -33,27 +33,19 @@ Rule        RussAQ  1996    max     -       Oct     lastSun  2:00s  0       -
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   ArgAQ   1964    1966    -       Mar      1      0:00    0       -
 Rule   ArgAQ   1964    1966    -       Oct     15      0:00    1:00    S
-Rule   ArgAQ   1967    only    -       Apr      2      0:00    0       -
-Rule   ArgAQ   1967    1968    -       Oct     Sun>=1  0:00    1:00    S
-Rule   ArgAQ   1968    1969    -       Apr     Sun>=1  0:00    0       -
+Rule   ArgAQ   1967    only    -       Apr      1      0:00    0       -
+Rule   ArgAQ   1967    1968    -       Oct     Sun<=7  0:00    1:00    S
+Rule   ArgAQ   1968    1969    -       Apr     Sun<=7  0:00    0       -
 Rule   ArgAQ   1974    only    -       Jan     23      0:00    1:00    S
 Rule   ArgAQ   1974    only    -       May      1      0:00    0       -
-Rule   ChileAQ 1972    1986    -       Mar     Sun>=9  3:00u   0       -
-Rule   ChileAQ 1974    1987    -       Oct     Sun>=9  4:00u   1:00    S
-Rule   ChileAQ 1987    only    -       Apr     12      3:00u   0       -
-Rule   ChileAQ 1988    1989    -       Mar     Sun>=9  3:00u   0       -
-Rule   ChileAQ 1988    only    -       Oct     Sun>=1  4:00u   1:00    S
-Rule   ChileAQ 1989    only    -       Oct     Sun>=9  4:00u   1:00    S
-Rule   ChileAQ 1990    only    -       Mar     18      3:00u   0       -
-Rule   ChileAQ 1990    only    -       Sep     16      4:00u   1:00    S
-Rule   ChileAQ 1991    1996    -       Mar     Sun>=9  3:00u   0       -
-Rule   ChileAQ 1991    1997    -       Oct     Sun>=9  4:00u   1:00    S
-Rule   ChileAQ 1997    only    -       Mar     30      3:00u   0       -
-Rule   ChileAQ 1998    only    -       Mar     Sun>=9  3:00u   0       -
-Rule   ChileAQ 1998    only    -       Sep     27      4:00u   1:00    S
-Rule   ChileAQ 1999    only    -       Apr      4      3:00u   0       -
-Rule   ChileAQ 1999    max     -       Oct     Sun>=9  4:00u   1:00    S
-Rule   ChileAQ 2000    max     -       Mar     Sun>=9  3:00u   0       -
+Rule   ArgAQ   1974    1976    -       Oct     Sun<=7  0:00    1:00    S
+Rule   ArgAQ   1975    1977    -       Apr     Sun<=7  0:00    0       -
+Rule   ChileAQ 1966    1997    -       Oct     Sun>=9  0:00    1:00    S
+Rule   ChileAQ 1967    1998    -       Mar     Sun>=9  0:00    0       -
+Rule   ChileAQ 1998    only    -       Sep     27      0:00    1:00    S
+Rule   ChileAQ 1999    only    -       Apr      4      0:00    0       -
+Rule   ChileAQ 1999    max     -       Oct     Sun>=9  0:00    1:00    S
+Rule   ChileAQ 2000    max     -       Mar     Sun>=9  0:00    0       -
 
 
 # Argentina - year-round bases
index 04ddc863e75a02c4d35558a6666ccc60f0d03e6e..446cc16e6ff088c9b7e9a9eaa720df32d5cfdd54 100644 (file)
@@ -1,15 +1,15 @@
-# @(#)asia     8.8
+# @(#)asia     8.1
 # <pre>
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (1999-03-22):
 #
 # A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
+# Thomas G. Shanks, The International Atlas (5th edition),
+# San Diego: ACS Publications, Inc. (1999).
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
@@ -17,8 +17,8 @@
 # published semiannually.  Law sent in several helpful summaries
 # of the IATA's data after 1990.
 #
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
 #
 # Another source occasionally used is Edward W. Whitman, World Time Differences,
 # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -61,7 +61,6 @@
 # These rules are stolen from the `europe' file.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   EUAsia  1981    max     -       Mar     lastSun  1:00u  1:00    S
-Rule   EUAsia  1979    1995    -       Sep     lastSun  1:00u  0       -
 Rule   EUAsia  1996    max     -       Oct     lastSun  1:00u  0       -
 Rule E-EurAsia 1981    max     -       Mar     lastSun  0:00   1:00    S
 Rule E-EurAsia 1979    1995    -       Sep     lastSun  0:00   0       -
@@ -83,11 +82,10 @@ Zone        Asia/Kabul      4:36:48 -       LMT     1890
                        4:30    -       AFT
 
 # Armenia
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger have Yerevan switching to 3:00 (with Russian DST)
-# in spring 1991, then to 4:00 with no DST in fall 1995, then
-# readopting Russian DST in 1997.  Go with Shanks & Pottenger, even
-# when they disagree with others.  Edgar Der-Danieliantz
+# From Paul Eggert (1999-10-29):
+# Shanks has Yerevan switching to 3:00 (with Russian DST) in spring 1991,
+# then to 4:00 with no DST in fall 1995, then readopting Russian DST in 1997.
+# Go with Shanks, even when he disagrees with others.  Edgar Der-Danieliantz
 # reported (1996-05-04) that Yerevan probably wouldn't use DST
 # in 1996, though it did use DST in 1995.  IATA SSIM (1991/1998) reports that
 # Armenia switched from 3:00 to 4:00 in 1998 and observed DST after 1991,
@@ -196,15 +194,13 @@ Zone      Asia/Phnom_Penh 6:59:40 -       LMT     1906 Jun  9
 # CHINA               8 H  AHEAD OF UTC  ALL OF CHINA, INCL TAIWAN
 # CHINA               9 H  AHEAD OF UTC  APR 17 - SEP 10
 
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that China (except for Hong Kong and Macau)
-# has had a single time zone since 1980 May 1, observing summer DST
-# from 1986 through 1991; this contradicts Devine's
+# From Paul Eggert (1995-12-19):
+# Shanks writes that China has had a single time zone since 1980 May 1,
+# observing summer DST from 1986 through 1991; this contradicts Devine's
 # note about Time magazine, though apparently _something_ happened in 1986.
-# Go with Shanks & Pottenger for now.  I made up names for the other
-# pre-1980 time zones.
+# Go with Shanks for now.  I made up names for the other pre-1980 time zones.
 
-# From Shanks & Pottenger:
+# From Shanks:
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Shang   1940    only    -       Jun      3      0:00    1:00    D
 Rule   Shang   1940    1941    -       Oct      1      0:00    0       S
@@ -212,27 +208,14 @@ Rule      Shang   1941    only    -       Mar     16      0:00    1:00    D
 Rule   PRC     1986    only    -       May      4      0:00    1:00    D
 Rule   PRC     1986    1991    -       Sep     Sun>=11 0:00    0       S
 Rule   PRC     1987    1991    -       Apr     Sun>=10 0:00    1:00    D
-
+#
+# Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
+#
 # From Anthony Fok (2001-12-20):
 # BTW, I did some research on-line and found some info regarding these five
 # historic timezones from some Taiwan websites.  And yes, there are official
-# Chinese names for these locales (before 1949).
-# 
-# From Jesper Norgaard Welen (2006-07-14):
-# I have investigated the timezones around 1970 on the
-# http://www.astro.com/atlas site [with provinces and county
-# boundaries summarized below]....  A few other exceptions were two
-# counties on the Sichuan side of the Xizang-Sichuan border,
-# counties Dege and Baiyu which lies on the Sichuan side and are
-# therefore supposed to be GMT+7, Xizang region being GMT+6, but Dege
-# county is GMT+8 according to astro.com while Baiyu county is GMT+6
-# (could be true), for the moment I am assuming that those two
-# counties are mistakes in the astro.com data.
-
-
-# Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
+# Chinese names for these locales (before 1949):
 # Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
-# Heilongjiang (except Mohe county), Jilin
 Zone   Asia/Harbin     8:26:44 -       LMT     1928 # or Haerbin
                        8:30    -       CHAT    1932 Mar # Changbai Time
                        8:00    -       CST     1940
@@ -240,35 +223,18 @@ Zone      Asia/Harbin     8:26:44 -       LMT     1928 # or Haerbin
                        8:30    -       CHAT    1980 May
                        8:00    PRC     C%sT
 # Zhongyuan Time ("Central plain Time")
-# most of China
 Zone   Asia/Shanghai   8:05:52 -       LMT     1928
                        8:00    Shang   C%sT    1949
                        8:00    PRC     C%sT
 # Long-shu Time (probably due to Long and Shu being two names of that area)
-# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
-# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
-# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
-# Yangchun, Yangjiang, Yu'nan, and Yunfu.
 Zone   Asia/Chongqing  7:06:20 -       LMT     1928 # or Chungking
                        7:00    -       LONT    1980 May # Long-shu Time
                        8:00    PRC     C%sT
 # Xin-zang Time ("Xinjiang-Tibet Time")
-# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
-# the Guangdong counties  Xuwen, Haikang, Suixi, Lianjiang,
-# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
-# east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;
-# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
-# Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,
-# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
-# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
 Zone   Asia/Urumqi     5:50:20 -       LMT     1928 # or Urumchi
                        6:00    -       URUT    1980 May # Urumqi Time
                        8:00    PRC     C%sT
 # Kunlun Time
-# West Tibet, including Pulan, Aheqi, Shufu, Shule;
-# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
-# Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
-# and Yarkand.
 Zone   Asia/Kashgar    5:03:56 -       LMT     1928 # or Kashi or Kaxgar
                        5:30    -       KAST    1940     # Kashgar Time
                        5:00    -       KAST    1980 May
@@ -300,7 +266,7 @@ Zone        Asia/Hong_Kong  7:36:36 -       LMT     1904 Oct 30
 
 # Taiwan
 
-# Shanks & Pottenger write that Taiwan observed DST during 1945, when it
+# Shanks writes that Taiwan observed DST during 1945, when it
 # was still controlled by Japan.  This is hard to believe, but we don't
 # have any other information.
 
@@ -457,7 +423,7 @@ Zone        Asia/Calcutta   5:53:28 -       LMT     1880    # Kolkata
 
 # Indonesia
 #
-# From Gwillim Law (2001-05-28), overriding Shanks & Pottenger:
+# From Gwillim Law (2001-05-28), overriding Shanks:
 # <http://www.sumatera-inc.com/go_to_invest/about_indonesia.asp#standtime>
 # says that Indonesia's time zones changed on 1988-01-01.  Looking at some
 # time zone maps, I think that must refer to Western Borneo (Kalimantan Barat
@@ -465,7 +431,7 @@ Zone        Asia/Calcutta   5:53:28 -       LMT     1880    # Kolkata
 #
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Asia/Jakarta      7:07:12 -       LMT     1867 Aug 10
-# Shanks & Pottenger say the next transition was at 1924 Jan 1 0:13,
+# Shanks says the next transition was at 1924 Jan 1 0:13,
 # but this must be a typo.
                        7:07:12 -       JMT     1923 Dec 31 23:47:12 # Jakarta
                        7:20    -       JAVT    1932 Nov         # Java Time
@@ -532,8 +498,8 @@ Zone Asia/Jayapura  9:22:48 -       LMT     1932 Nov
 # leap year calculation involved.  There has never been any serious
 # plan to change that law....
 #
-# From Paul Eggert (2006-03-22):
-# Go with Shanks & Pottenger before Sept. 1991, and with Pournader thereafter.
+# From Paul Eggert (2005-04-05):
+# Go with Shanks before September 1991, and with Pournader thereafter.
 # I used Ed Reingold's cal-persia in GNU Emacs 21.2 to check Persian dates,
 # stopping after 2037 when 32-bit time_t's overflow.
 # That cal-persia used Birashk's approximation, which disagrees with the solar
@@ -553,14 +519,6 @@ Zone Asia/Jayapura 9:22:48 -       LMT     1932 Nov
 # Reingold's/Dershowitz' calculator gives correctly the Gregorian date
 # 2058-03-21 for 1 Farvardin 1437 (astronomical).
 #
-# From Paul Eggert (2006-03-22):
-# The above comments about post-2006 transitions may become relevant again,
-# if Iran ever resuscitates DST, so we'll leave the comments in.
-#
-# From Steffen Thorsen (2006-03-22):
-# Several of my users have reported that Iran will not observe DST anymore:
-# http://www.irna.ir/en/news/view/line-17/0603193812164948.htm
-#
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Iran    1978    1980    -       Mar     21      0:00    1:00    D
 Rule   Iran    1978    only    -       Oct     21      0:00    0       S
@@ -579,8 +537,38 @@ Rule       Iran    2001    2003    -       Mar     22      0:00    1:00    D
 Rule   Iran    2001    2003    -       Sep     22      0:00    0       S
 Rule   Iran    2004    only    -       Mar     21      0:00    1:00    D
 Rule   Iran    2004    only    -       Sep     21      0:00    0       S
-Rule   Iran    2005    only    -       Mar     22      0:00    1:00    D
-Rule   Iran    2005    only    -       Sep     22      0:00    0       S
+Rule   Iran    2005    2007    -       Mar     22      0:00    1:00    D
+Rule   Iran    2005    2007    -       Sep     22      0:00    0       S
+Rule   Iran    2008    only    -       Mar     21      0:00    1:00    D
+Rule   Iran    2008    only    -       Sep     21      0:00    0       S
+Rule   Iran    2009    2011    -       Mar     22      0:00    1:00    D
+Rule   Iran    2009    2011    -       Sep     22      0:00    0       S
+Rule   Iran    2012    only    -       Mar     21      0:00    1:00    D
+Rule   Iran    2012    only    -       Sep     21      0:00    0       S
+Rule   Iran    2013    2015    -       Mar     22      0:00    1:00    D
+Rule   Iran    2013    2015    -       Sep     22      0:00    0       S
+Rule   Iran    2016    only    -       Mar     21      0:00    1:00    D
+Rule   Iran    2016    only    -       Sep     21      0:00    0       S
+Rule   Iran    2017    2019    -       Mar     22      0:00    1:00    D
+Rule   Iran    2017    2019    -       Sep     22      0:00    0       S
+Rule   Iran    2020    only    -       Mar     21      0:00    1:00    D
+Rule   Iran    2020    only    -       Sep     21      0:00    0       S
+Rule   Iran    2021    2023    -       Mar     22      0:00    1:00    D
+Rule   Iran    2021    2023    -       Sep     22      0:00    0       S
+Rule   Iran    2024    only    -       Mar     21      0:00    1:00    D
+Rule   Iran    2024    only    -       Sep     21      0:00    0       S
+Rule   Iran    2025    2027    -       Mar     22      0:00    1:00    D
+Rule   Iran    2025    2027    -       Sep     22      0:00    0       S
+Rule   Iran    2028    2029    -       Mar     21      0:00    1:00    D
+Rule   Iran    2028    2029    -       Sep     21      0:00    0       S
+Rule   Iran    2030    2031    -       Mar     22      0:00    1:00    D
+Rule   Iran    2030    2031    -       Sep     22      0:00    0       S
+Rule   Iran    2032    2033    -       Mar     21      0:00    1:00    D
+Rule   Iran    2032    2033    -       Sep     21      0:00    0       S
+Rule   Iran    2034    2035    -       Mar     22      0:00    1:00    D
+Rule   Iran    2034    2035    -       Sep     22      0:00    0       S
+Rule   Iran    2036    2037    -       Mar     21      0:00    1:00    D
+Rule   Iran    2036    2037    -       Sep     21      0:00    0       S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Tehran     3:25:44 -       LMT     1916
                        3:25:44 -       TMT     1946    # Tehran Mean Time
@@ -613,8 +601,7 @@ Rule        Iraq    1984    1985    -       Apr     1       0:00    1:00    D
 Rule   Iraq    1985    1990    -       Sep     lastSun 1:00s   0       S
 Rule   Iraq    1986    1990    -       Mar     lastSun 1:00s   1:00    D
 # IATA SSIM (1991/1996) says Apr 1 12:01am UTC; guess the `:01' is a typo.
-# Shanks & Pottenger say Iraq did not observe DST 1992/1997; ignore this.
-# 
+# Shanks says Iraq did not observe DST 1992/1997 or 1999 on; ignore this.
 Rule   Iraq    1991    max     -       Apr      1      3:00s   1:00    D
 Rule   Iraq    1991    max     -       Oct      1      3:00s   0       S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -648,7 +635,7 @@ Zone        Asia/Baghdad    2:57:40 -       LMT     1890
 # high on my favorite-country list (and not only because my wife's
 # family is from India).
 
-# From Shanks & Pottenger:
+# From Shanks:
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Zion    1940    only    -       Jun      1      0:00    1:00    D
 Rule   Zion    1942    1944    -       Nov      1      0:00    0       S
@@ -887,15 +874,14 @@ Zone      Asia/Jerusalem  2:20:56 -       LMT     1880
 # of the Japanese wanted to scrap daylight-saving time, as opposed to 30% who
 # wanted to keep it.)
 
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that DST in Japan during those years was as follows:
+# Shanks writes that daylight saving in Japan during those years was as follows:
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Japan   1948    only    -       May     Sun>=1  2:00    1:00    D
 Rule   Japan   1948    1951    -       Sep     Sat>=8  2:00    0       S
 Rule   Japan   1949    only    -       Apr     Sun>=1  2:00    1:00    D
 Rule   Japan   1950    1951    -       May     Sun>=1  2:00    1:00    D
 # but the only locations using it (for birth certificates, presumably, since
-# their audience is astrologers) were US military bases.  For now, assume
+# Shanks's audience is astrologers) were US military bases.  For now, assume
 # that for most purposes daylight-saving time was observed; otherwise, what
 # would have been the point of the 1951 poll?
 
@@ -920,9 +906,8 @@ Rule        Japan   1950    1951    -       May     Sun>=1  2:00    1:00    D
 # I wrote "ordinance" above, but I don't know how to translate.
 # In Japanese it's "chokurei", which means ordinance from emperor.
 
-# Shanks & Pottenger claim JST in use since 1896, and that a few
-# places (e.g. Ishigaki) use +0800; go with Suzuki.  Guess that all
-# ordinances took effect on Jan 1.
+# Shanks claims JST in use since 1896, and that a few places (e.g. Ishigaki)
+# use +0800; go with Suzuki.  Guess that all ordinances took effect on Jan 1.
 
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Tokyo      9:18:59 -       LMT     1887 Dec 31 15:00u
@@ -953,10 +938,6 @@ Zone       Asia/Tokyo      9:18:59 -       LMT     1887 Dec 31 15:00u
 # For Jordan I have received multiple independent user reports every year
 # about DST end dates, as the end-rule is different every year.
 #
-# From Steffen Thorsen (2006-10-01), after a heads-up from Hilal Malawi:
-# http://www.petranews.gov.jo/nepras/2006/Sep/05/4000.htm
-# "Jordan will switch to winter time on Friday, October 27".
-#
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Jordan  1973    only    -       Jun     6       0:00    1:00    S
 Rule   Jordan  1973    1975    -       Oct     1       0:00    0       -
@@ -983,8 +964,7 @@ Rule        Jordan  1999    2002    -       Sep     lastThu 0:00s   0       -
 Rule   Jordan  2000    max     -       Mar     lastThu 0:00s   1:00    S
 Rule   Jordan  2003    only    -       Oct     24      0:00s   0       -
 Rule   Jordan  2004    only    -       Oct     15      0:00s   0       -
-Rule   Jordan  2005    only    -       Sep     lastFri 0:00s   0       -
-Rule   Jordan  2006    max     -       Oct     lastFri 0:00s   0       -
+Rule   Jordan  2005    max     -       Sep     lastFri 0:00s   0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Amman      2:23:44 -       LMT     1931
                        2:00    Jordan  EE%sT
@@ -999,11 +979,11 @@ Zone      Asia/Amman      2:23:44 -       LMT     1931
 # Guess that Aqtau and Aqtobe diverged in 1995, since that's the first time
 # IATA SSIM mentions a third time zone in Kazakhstan.
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2001-10-18):
 # German Iofis, ELSI, Almaty (2001-10-09) reports that Kazakhstan uses
 # RussiaAsia rules, instead of switching at 00:00 as the IATA has it.
-# Go with Shanks & Pottenger, who have them always using RussiaAsia rules.
-# Also go with the following claims of Shanks & Pottenger:
+# Go with Shanks, who has them always using RussiaAsia rules.
+# Also go with the following claims of Shanks:
 #
 # - Kazakhstan did not observe DST in 1991.
 # - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
@@ -1083,7 +1063,7 @@ Zone      Asia/Oral       3:25:24 -       LMT     1924 May  2 # or Ural'sk
                        5:00    -       ORAT
 
 # Kyrgyzstan (Kirgizstan)
-# Transitions through 1991 are from Shanks & Pottenger.
+# Transitions through 1991 are from Shanks.
 
 # From Paul Eggert (2005-08-15):
 # According to an article dated today in the Kyrgyzstan Development Gateway
@@ -1111,19 +1091,17 @@ Zone    Asia/Bishkek    4:58:24 -       LMT     1924 May  2
 
 # Korea (North and South)
 
-# From Annie I. Bang (2006-07-10) in
-# <http://www.koreaherald.co.kr/SITE/data/html_dir/2006/07/10/200607100012.asp>:
-# The Ministry of Commerce, Industry and Energy has already
-# commissioned a research project [to reintroduce DST] and has said
-# the system may begin as early as 2008....  Korea ran a daylight
-# saving program from 1949-61 but stopped it during the 1950-53 Korean War.
+# From Guy Harris:
+# According to someone at the Korean Times in San Francisco,
+# Daylight Savings Time was not observed until 1987.  He did not know
+# at what time of day DST starts or ends.
 
-# From Shanks & Pottenger:
+# From Shanks:
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   ROK     1960    only    -       May     15      0:00    1:00    D
 Rule   ROK     1960    only    -       Sep     13      0:00    0       S
-Rule   ROK     1987    1988    -       May     Sun>=8  0:00    1:00    D
-Rule   ROK     1987    1988    -       Oct     Sun>=8  0:00    0       S
+Rule   ROK     1987    1988    -       May     Sun<=14 0:00    1:00    D
+Rule   ROK     1987    1988    -       Oct     Sun<=14 0:00    0       S
 
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Seoul      8:27:52 -       LMT     1890
@@ -1206,8 +1184,8 @@ Zone Asia/Kuala_Lumpur    6:46:46 -       LMT     1901 Jan  1
                        7:30    -       MALT    1982 Jan  1
                        8:00    -       MYT     # Malaysia Time
 # Sabah & Sarawak
-# From Paul Eggert (2006-03-22):
-# The data here are mostly from Shanks & Pottenger, but the 1942, 1945 and 1982
+# From Paul Eggert (2003-11-01):
+# The data here are mostly from Shanks, but the 1942, 1945 and 1982
 # transition dates are from Mok Ly Yng.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Asia/Kuching      7:21:20 -       LMT     1926 Mar
@@ -1225,8 +1203,8 @@ Zone      Indian/Maldives 4:54:00 -       LMT     1880    # Male
 
 # Mongolia
 
-# Shanks & Pottenger say that Mongolia has three time zones, but
-# usno1995 and the CIA map Standard Time Zones of the World (2005-03)
+# Shanks says that Mongolia has three time zones, but usno1995 and the CIA map
+# Standard Time Zones of the World (1997-01)
 # both say that it has just one.
 
 # From Oscar van Vlijmen (1999-12-11):
@@ -1296,19 +1274,11 @@ Zone    Indian/Maldives 4:54:00 -       LMT     1880    # Male
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Mongol  1983    1984    -       Apr     1       0:00    1:00    S
 Rule   Mongol  1983    only    -       Oct     1       0:00    0       -
-# Shanks & Pottenger and IATA SSIM say 1990s switches occurred at 00:00,
-# but McDow says the 2001 switches occurred at 02:00.  Also, IATA SSIM
-# (1996-09) says 1996-10-25.  Go with Shanks & Pottenger through 1998.
-#
-# Shanks & Pottenger say that the Sept. 1984 through Sept. 1990 switches
-# in Choibalsan (more precisely, in Dornod and Sukhbaatar) took place
-# at 02:00 standard time, not at 00:00 local time as in the rest of
-# the country.  That would be odd, and possibly is a result of their
-# correction of 02:00 (in the previous edition) not being done correctly
-# in the latest edition; so ignore it for now.
-
-Rule   Mongol  1985    1998    -       Mar     lastSun 0:00    1:00    S
-Rule   Mongol  1984    1998    -       Sep     lastSun 0:00    0       -
+# IATA SSIM says 1990s switches occurred at 00:00, but Shanks (1995) lists
+# them at 02:00s, and McDow says the 2001 switches also occurred at 02:00.
+# Also, IATA SSIM (1996-09) says 1996-10-25.  Go with Shanks through 1998.
+Rule   Mongol  1985    1998    -       Mar     lastSun 2:00s   1:00    S
+Rule   Mongol  1984    1998    -       Sep     lastSun 2:00s   0       -
 # IATA SSIM (1999-09) says Mongolia no longer observes DST.
 Rule   Mongol  2001    only    -       Apr     lastSat 2:00    1:00    S
 Rule   Mongol  2001    max     -       Sep     lastSat 2:00    0       -
@@ -1434,8 +1404,8 @@ Zone      Asia/Karachi    4:28:12 -       LMT     1907
 # I guess more info may be available from the PA's web page (if/when they
 # have one).
 
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that Gaza did not observe DST until 1957, but go
+# From Paul Eggert (1998-02-25):
+# Shanks writes that Gaza did not observe DST until 1957, but we'll go
 # with Shapir and assume that it observed DST from 1940 through 1947,
 # and that it used Jordanian rules starting in 1996.
 # We don't yet need a separate entry for the West Bank, since
@@ -1473,23 +1443,6 @@ Zone     Asia/Karachi    4:28:12 -       LMT     1907
 # there is a good chance next year's end date will be around two weeks
 # earlier--the same goes for Jordan.
 
-# From Steffen Thorsen (2006-08-17):
-# I was informed by a user in Bethlehem that in Bethlehem it started the
-# same day as Israel, and after checking with other users in the area, I
-# was informed that they started DST one day after Israel.  I was not
-# able to find any authoritative sources at the time, nor details if
-# Gaza changed as well, but presumed Gaza to follow the same rules as
-# the West Bank.
-
-# From Steffen Thorsen (2006-09-26):
-# according to the Palestine News Network (2006-09-19):
-# http://english.pnn.ps/index.php?option=com_content&task=view&id=596&Itemid=5
-# > The Council of Ministers announced that this year its winter schedule
-# > will begin early, as of midnight Thursday.  It is also time to turn
-# > back the clocks for winter.  Friday will begin an hour late this week.
-# I guess it is likely that next year's date will be moved as well,
-# because of the Ramadan.
-
 # The rules for Egypt are stolen from the `africa' file.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule EgyptAsia 1957    only    -       May     10      0:00    1:00    S
@@ -1499,13 +1452,10 @@ Rule EgyptAsia  1959    1967    -       May      1      1:00    1:00    S
 Rule EgyptAsia 1959    1965    -       Sep     30      3:00    0       -
 Rule EgyptAsia 1966    only    -       Oct      1      3:00    0       -
 
-Rule Palestine 1999    2005    -       Apr     Fri>=15 0:00    1:00    S
+Rule Palestine 1999    max     -       Apr     Fri>=15 0:00    1:00    S
 Rule Palestine 1999    2003    -       Oct     Fri>=15 0:00    0       -
 Rule Palestine 2004    only    -       Oct      1      1:00    0       -
-Rule Palestine 2005    only    -       Oct      4      2:00    0       -
-Rule Palestine 2006    max     -       Apr      1      0:00    1:00    S
-Rule Palestine 2006    only    -       Sep     22      0:00    0       -
-Rule Palestine 2007    max     -       Oct     Fri>=15 0:00    0       -
+Rule Palestine 2005    max     -       Oct      4      2:00    0       -
 
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Gaza       2:17:52 -       LMT     1900 Oct
@@ -1523,21 +1473,7 @@ Zone     Asia/Gaza       2:17:52 -       LMT     1900 Oct
 # Philippines, issued a proclamation announcing that 1844-12-30 was to
 # be immediately followed by 1845-01-01.  Robert H. van Gent has a
 # transcript of the decree in <http://www.phys.uu.nl/~vgent/idl/idl.htm>.
-# The rest of the data are from Shanks & Pottenger.
-
-# From Paul Eggert (2006-04-25):
-# Tomorrow's Manila Standard reports that the Philippines Department of
-# Trade and Industry is considering adopting DST this June when the
-# rainy season begins.  See
-# <http://www.manilastandardtoday.com/?page=politics02_april26_2006>.
-# For now, we'll ignore this, since it's not definite and we lack details.
-#
-# From Jesper Norgaard Welen (2006-04-26):
-# ... claims that Philippines had DST last time in 1990:
-# http://story.philippinetimes.com/p.x/ct/9/id/145be20cc6b121c0/cid/3e5bbccc730d258c/
-# [a story dated 2006-04-25 by Cris Larano of Dow Jones Newswires,
-# but no details]
-
+# The rest of this data is from Shanks.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Phil    1936    only    -       Nov     1       0:00    1:00    S
 Rule   Phil    1937    only    -       Feb     1       0:00    0       -
@@ -1597,49 +1533,6 @@ Zone     Asia/Singapore  6:55:25 -       LMT     1901 Jan  1
 # With effect from 12.30 a.m. on 26th October 1996
 # Sri Lanka will be six (06) hours ahead of GMT.
 
-# From Jesper Norgaard Welen (2006-04-14), quoting Sri Lanka News Online
-# <http://news.sinhalaya.com/wmview.php?ArtID=11002> (2006-04-13):
-# 0030 hrs on April 15, 2006 (midnight of April 14, 2006 +30 minutes)
-# at present, become 2400 hours of April 14, 2006 (midnight of April 14, 2006).
-
-# From Peter Apps and Ranga Sirila of Reuters (2006-04-12) in:
-# <http://today.reuters.co.uk/news/newsArticle.aspx?type=scienceNews&storyID=2006-04-12T172228Z_01_COL295762_RTRIDST_0_SCIENCE-SRILANKA-TIME-DC.XML>
-# [The Tamil Tigers] never accepted the original 1996 time change and simply
-# kept their clocks set five and a half hours ahead of Greenwich Mean
-# Time (GMT), in line with neighbor India.
-# From Paul Eggert (2006-04-18):
-# People who live in regions under Tamil control can use TZ='Asia/Calcutta',
-# as that zone has agreed with the Tamil areas since our cutoff date of 1970.
-
-# From K Sethu (2006-04-25):
-# I think the abbreviation LKT originated from the world of computers at
-# the time of or subsequent to the time zone changes by SL Government
-# twice in 1996 and probably SL Government or its standardization
-# agencies never declared an abbreviation as a national standard.
-#
-# I recollect before the recent change the government annoucemments
-# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
-# Time and no mention was made about the abbreviation.
-#
-# If we look at Sri Lanka Department of Government's "Official News
-# Website of Sri Lanka" ... http://www.news.lk/ we can see that they
-# use SLT as abbreviation in time stamp at the beginning of each news
-# item....
-#
-# Within Sri Lanka I think LKT is well known among computer users and
-# adminsitrators.  In my opinion SLT may not be a good choice because the
-# nation's largest telcom / internet operator Sri Lanka Telcom is well
-# known by that abbreviation - simply as SLT (there IP domains are
-# slt.lk and sltnet.lk).
-#
-# But if indeed our government has adopted SLT as standard abbreviation
-# (that we have not known so far) then  it is better that it be used for
-# all computers.
-
-# From Paul Eggert (2006-04-25):
-# One possibility is that we wait for a bit for the dust to settle down
-# and then see what people actually say in practice.
-
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Colombo    5:19:24 -       LMT     1880
                        5:19:32 -       MMT     1906    # Moratuwa Mean Time
@@ -1648,8 +1541,7 @@ Zone      Asia/Colombo    5:19:24 -       LMT     1880
                        5:30    1:00    IST     1945 Oct 16 2:00
                        5:30    -       IST     1996 May 25 0:00
                        6:30    -       LKT     1996 Oct 26 0:30
-                       6:00    -       LKT     2006 Apr 15 0:30
-                       5:30    -       IST
+                       6:00    -       LKT
 
 # Syria
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
@@ -1684,24 +1576,17 @@ Rule    Syria   1993    only    -       Sep     25      0:00    0       -
 # IATA SSIM (1998-02) says 1998-04-02;
 # (1998-09) says 1999-03-29 and 1999-09-29; (1999-02) says 1999-04-02,
 # 2000-04-02, and 2001-04-02; (1999-09) says 2000-03-31 and 2001-03-31;
-# (2006) says 2006-03-31 and 2006-09-22;
-# for now ignore all these claims and go with Shanks & Pottenger,
-# except for the 2006-09-22 claim (which seems right for Ramadan).
+# ignore all these claims and go with Shanks.
 Rule   Syria   1994    1996    -       Apr      1      0:00    1:00    S
-Rule   Syria   1994    2005    -       Oct      1      0:00    0       -
+Rule   Syria   1994    max     -       Oct      1      0:00    0       -
 Rule   Syria   1997    1998    -       Mar     lastMon 0:00    1:00    S
 Rule   Syria   1999    max     -       Apr      1      0:00    1:00    S
-# From Stephen Colebourne (2006-09-18):
-# According to IATA data, Syria will change DST on 21st September [21:00 UTC]
-# this year [only]....  This is probably related to Ramadan, like Egypt.
-Rule   Syria   2006    only    -       Sep     22      0:00    0       -
-Rule   Syria   2007    max     -       Oct      1      0:00    0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Damascus   2:25:12 -       LMT     1920    # Dimashq
                        2:00    Syria   EE%sT
 
 # Tajikistan
-# From Shanks & Pottenger.
+# From Shanks.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Dushanbe   4:35:12 -       LMT     1924 May  2
                        5:00    -       DUST    1930 Jun 21 # Dushanbe Time
@@ -1716,13 +1601,13 @@ Zone    Asia/Bangkok    6:42:04 -       LMT     1880
                        7:00    -       ICT
 
 # Turkmenistan
-# From Shanks & Pottenger.
+# From Shanks.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Ashgabat   3:53:32 -       LMT     1924 May  2 # or Ashkhabad
                        4:00    -       ASHT    1930 Jun 21 # Ashkhabad Time
                        5:00 RussiaAsia ASH%sT  1991 Mar 31 2:00
                        4:00 RussiaAsia ASH%sT  1991 Oct 27 # independence
-                       4:00 RussiaAsia TM%sT   1992 Jan 19 2:00
+                       4:00 RussiaAsia TM%sT   1992 Jan 19 2:00
                        5:00    -       TMT
 
 # United Arab Emirates
@@ -1736,24 +1621,24 @@ Zone    Asia/Samarkand  4:27:12 -       LMT     1924 May  2
                        4:00    -       SAMT    1930 Jun 21 # Samarkand Time
                        5:00    -       SAMT    1981 Apr  1
                        5:00    1:00    SAMST   1981 Oct  1
-                       6:00    -       TAST    1982 Apr  1 # Tashkent Time
-                       5:00 RussiaAsia SAM%sT  1991 Sep  1 # independence
+                       6:00 RussiaAsia TAS%sT  1991 Mar 31 2:00 # Tashkent Time
+                       5:00 RussiaAsia TAS%sT  1991 Sep  1 # independence
                        5:00 RussiaAsia UZ%sT   1992
+                       5:00 RussiaAsia UZ%sT   1993
                        5:00    -       UZT
 Zone   Asia/Tashkent   4:37:12 -       LMT     1924 May  2
                        5:00    -       TAST    1930 Jun 21 # Tashkent Time
-                       6:00 RussiaAsia TAS%sT  1991 Mar 31 2:00
+                       6:00 RussiaAsia TAS%sT  1991 Mar 31 2:00s
                        5:00 RussiaAsia TAS%sT  1991 Sep  1 # independence
                        5:00 RussiaAsia UZ%sT   1992
+                       5:00 RussiaAsia UZ%sT   1993
                        5:00    -       UZT
 
 # Vietnam
-
 # From Paul Eggert (1993-11-18):
 # Saigon's official name is Thanh-Pho Ho Chi Minh, but it's too long.
 # We'll stick with the traditional name for now.
-
-# From Shanks & Pottenger:
+# From Shanks:
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Asia/Saigon     7:06:40 -       LMT     1906 Jun  9
                        7:06:20 -       SMT     1911 Mar 11 0:01 # Saigon MT?
index 2e17bcc0c3ce08efbb6a01ee24711288f3c06d46..70b845560e4389ed2286ed735d93b9c2397d6233 100644 (file)
@@ -1,4 +1,4 @@
-# @(#)australasia      8.3
+# @(#)australasia      8.1
 # <pre>
 
 # This file also includes Pacific islands.
@@ -210,7 +210,7 @@ Zone Indian/Christmas       7:02:52 -       LMT     1895 Feb
                        7:00    -       CXT     # Christmas Island Time
 
 # Cook Is
-# From Shanks & Pottenger:
+# From Shanks:
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Cook    1978    only    -       Nov     12      0:00    0:30    HS
 Rule   Cook    1979    1991    -       Mar     Sun>=1  0:00    0       -
@@ -308,7 +308,7 @@ Zone        Pacific/Nauru   11:07:40 -      LMT     1921 Jan 15     # Uaobe
 Rule   NC      1977    1978    -       Dec     Sun>=1  0:00    1:00    S
 Rule   NC      1978    1979    -       Feb     27      0:00    0       -
 Rule   NC      1996    only    -       Dec      1      2:00s   1:00    S
-# Shanks & Pottenger say the following was at 2:00; go with IATA.
+# Shanks says the following was at 2:00; go with IATA.
 Rule   NC      1997    only    -       Mar      2      2:00s   0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Pacific/Noumea  11:05:48 -      LMT     1912 Jan 13
@@ -507,10 +507,10 @@ Zone      Pacific/Wallis  12:15:20 -      LMT     1901
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (1999-10-29):
 # A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
+# Thomas G. Shanks, The International Atlas (5th edition),
+# San Diego: ACS Publications, Inc. (1999).
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
@@ -518,8 +518,8 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 # published semiannually.  Law sent in several helpful summaries
 # of the IATA's data after 1990.
 #
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
 #
 # Another source occasionally used is Edward W. Whitman, World Time Differences,
 # Whitman Publishing Co, 2 Niagara Av, Ealing, London (undated), which
@@ -587,12 +587,6 @@ Zone       Pacific/Wallis  12:15:20 -      LMT     1901
 #      WST     for any place operating at a GMTOFF of 8:00
 #      EST     for any place operating at a GMTOFF of 10:00
 
-# From Chuck Soper (2006-06-01):
-# I recently found this Australian government web page on time zones:
-# <http://www.australia.gov.au/about-australia-13time>
-# And this government web page lists time zone names and abbreviations:
-# <http://www.bom.gov.au/climate/averages/tables/daysavtm.shtml>
-
 # From Paul Eggert (2001-04-05), summarizing a long discussion about "EST"
 # versus "AEST" etc.:
 #
@@ -675,7 +669,7 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 #   understood in Australia.
 
 # From Paul Eggert (1995-12-19):
-# Shanks & Pottenger report 2:00 for all autumn changes in Australia and NZ.
+# Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
 # Mark Prior writes that his newspaper
 # reports that NSW's fall 1995 change will occur at 2:00,
 # but Robert Elz says it's been 3:00 in Victoria since 1970
@@ -848,14 +842,14 @@ Zone      Pacific/Wallis  12:15:20 -      LMT     1901
 # current DST ending dates, no worries.
 #
 # Rule Oz      1971    1985    -       Oct     lastSun 2:00    1:00    -
-# Rule Oz      1986    max     -       Oct     Sun>=18 2:00    1:00    -
+# Rule Oz      1986    max     -       Oct     Sun<=24 2:00    1:00    -
 # Rule Oz      1972    only    -       Feb     27      3:00    0       -
 # Rule Oz      1973    1986    -       Mar     Sun>=1  3:00    0       -
-# Rule Oz      1987    max     -       Mar     Sun>=15 3:00    0       -
+# Rule Oz      1987    max     -       Mar     Sun<=21 3:00    0       -
 # Zone Australia/Tasmania      10:00   Oz      EST
 # Zone Australia/South         9:30    Oz      CST
 # Zone Australia/Victoria      10:00   Oz      EST     1985 Oct lastSun 2:00
-#                              10:00   1:00    EST     1986 Mar Sun>=15 3:00
+#                              10:00   1:00    EST     1986 Mar Sun<=21 3:00
 #                              10:00   Oz      EST
 
 # From Robert Elz (1991-03-06):
@@ -881,7 +875,7 @@ Zone        Pacific/Wallis  12:15:20 -      LMT     1901
 # ...
 # Rule  AS     1971    max     -       Oct     lastSun 2:00    1:00    D
 # Rule  AS     1972    1985    -       Mar     Sun>=1  3:00    0       C
-# Rule  AS     1986    1990    -       Mar     Sun>=15 3:00    0       C
+# Rule  AS     1986    1990    -       Mar     Sun<=21 3:00    0       C
 # Rule  AS     1991    max     -       Mar     Sun>=1  3:00    0       C
 
 # From Bradley White (1992-03-11):
@@ -1074,9 +1068,9 @@ Zone      Pacific/Wallis  12:15:20 -      LMT     1901
 # shown on clocks on LHI. I guess this means that for 30 minutes at the start
 # of DST, LHI is actually 1 hour ahead of the rest of NSW.
 
-# From Paul Eggert (2006-03-22):
-# For Lord Howe dates we use Shanks & Pottenger through 1989, and
-# Lonergan thereafter.  For times we use Lonergan.
+# From Paul Eggert (2001-02-09):
+# For Lord Howe dates we use Shanks through 1989, and Lonergan thereafter.
+# For times we use Lonergan.
 
 ###############################################################################
 
@@ -1107,16 +1101,16 @@ Zone    Pacific/Wallis  12:15:20 -      LMT     1901
 # rather than the October 1 value.
 
 # From Paul Eggert (1995-12-19);
-# Shank & Pottenger report 2:00 for all autumn changes in Australia and NZ.
+# Shanks reports 2:00 for all autumn changes in Australia and New Zealand.
 # Robert Uzgalis writes that the New Zealand Daylight
 # Savings Time Order in Council dated 1990-06-18 specifies 2:00 standard
 # time on both the first Sunday in October and the third Sunday in March.
 # As with Australia, we'll assume the tradition is 2:00s, not 2:00.
 #
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2003-05-26):
 # The Department of Internal Affairs (DIA) maintains a brief history,
 # as does Carol Squires; see tz-link.htm for the full references.
-# Use these sources in preference to Shanks & Pottenger.
+# Use these sources in preference to Shanks.
 #
 # For Chatham, IATA SSIM (1991/1999) gives the NZ rules but with
 # transitions at 2:45 local standard time; this confirms that Chatham
@@ -1191,8 +1185,8 @@ Zone      Pacific/Wallis  12:15:20 -      LMT     1901
 # ``I am certain, having lived there for the past decade, that "Truk"
 # (now properly known as Chuuk) ... is in the time zone GMT+10.''
 #
-# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
-# on 1978-10-01; ignore this for now.
+# Shanks writes that Truk switched from UTC+10 to UTC+11 on 1978-10-01;
+# ignore this for now.
 
 # From Paul Eggert (1999-10-29):
 # The Federated States of Micronesia Visitors Board writes in
@@ -1285,8 +1279,8 @@ Zone      Pacific/Wallis  12:15:20 -      LMT     1901
 # on the World Day of Prayer, you would be the first people on Earth
 # to say your prayers in the morning."
 
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say the transition was on 1968-10-01; go with Mundell.
+# From Paul Eggert (1999-08-12):
+# Shanks says the transition was on 1968-10-01; go with Mundell.
 
 # From Eric Ulevik (1999-05-03):
 # Tonga's director of tourism, who is also secretary of the National Millenium
index 00824407faf5a0579366c82f7b6c73b48e353fde..66fbf3061889fb3efd9cd50dd01d3bb19fb2c921 100644 (file)
@@ -1,4 +1,4 @@
-# @(#)backward 8.2
+# @(#)backward 8.1
 
 # This file provides links between current names for time zones
 # and their old names.  Many names changed in late 1993.
@@ -8,7 +8,6 @@ Link    America/Argentina/Catamarca     America/Argentina/ComodRivadavia
 Link   America/Adak            America/Atka
 Link   America/Argentina/Buenos_Aires  America/Buenos_Aires
 Link   America/Argentina/Catamarca     America/Catamarca
-Link   America/Atikokan        America/Coral_Harbour
 Link   America/Argentina/Cordoba       America/Cordoba
 Link   America/Tijuana         America/Ensenada
 Link   America/Indiana/Indianapolis    America/Fort_Wayne
index 80ad7d57015891ffa8ac9f3fccd4e96af1b9c55c..6d532141e6323957b7d178b42100359805f5754b 100644 (file)
@@ -1,6 +1,6 @@
 # Check tz tables for consistency.
 
-# @(#)checktab.awk     8.1
+# @(#)checktab.awk     1.7
 
 # Contributed by Paul Eggert.
 
index b3a3b269d3ab857c543f72aacd00f043d8d25b66..54146d7400b5eeb5f30b583e3d1317d43395da35 100644 (file)
@@ -1,14 +1,14 @@
-# @(#)europe   8.6
+# @(#)europe   8.1
 # <pre>
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (1999-10-29):
 # A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
+# Thomas G. Shanks, The International Atlas (5th edition),
+# San Diego: ACS Publications, Inc. (1999).
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
@@ -16,8 +16,8 @@
 # published semiannually.  Law sent in several helpful summaries
 # of the IATA's data after 1990.
 #
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1991, and IATA SSIM is the source for entries afterwards.
+# Except where otherwise noted, Shanks is the source for entries through 1991,
+# and IATA SSIM is the source for entries afterwards.
 #
 # Other sources occasionally used include:
 #
 # (Lords Hansard 11 June 1997 columns 964 to 976)
 # </a>.
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2001-07-18):
 #
-# For lack of other data, follow Shanks & Pottenger for Eire in 1940-1948.
+# For lack of other data, we'll follow Shanks for Eire in 1940-1948.
 #
-# Given Ilieve and Myers's data, the following claims by Shanks & Pottenger
-# are incorrect:
+# Given Ilieve and Myers's data, the following claims by Shanks are incorrect:
 #     * Wales did not switch from GMT to daylight saving time until
 #      1921 Apr 3, when they began to conform with the rest of Great Britain.
 # Actually, Wales was identical after 1880.
 # Actually, that date saw the usual switch to summer time.
 # Standard time was not changed until 1968-10-27 (the clocks didn't change).
 #
-# Here is another incorrect claim by Shanks & Pottenger:
+# Here is another incorrect claim by Shanks:
 #     * Jersey, Guernsey, and the Isle of Man did not switch from GMT
 #      to daylight saving time until 1921 Apr 3, when they began to
 #      conform with Great Britain.
 # S.R.&O. 1916, No. 382 and HO 45/10811/312364 (quoted above) say otherwise.
 #
-# The following claim by Shanks & Pottenger is possible though doubtful;
+# The following claim by Shanks is possible though doubtful;
 # we'll ignore it for now.
 #     * Dublin's 1971-10-31 switch was at 02:00, even though London's was 03:00.
 #
 #
-# Whitman says Dublin Mean Time was -0:25:21, which is more precise than
-# Shanks & Pottenger.
+# Whitman says Dublin Mean Time was -0:25:21, which is more precise than Shanks.
 # Perhaps this was Dunsink Observatory Time, as Dunsink Observatory
 # (8 km NW of Dublin's center) seemingly was to Dublin as Greenwich was
 # to London.  For example:
@@ -420,14 +418,11 @@ Rule      GB-Eire 1990    1995    -       Oct     Sun>=22 1:00u   0       GMT
 # See EU for rules starting in 1996.
 
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-Zone   Europe/London   -0:01:15 -      LMT     1847 Dec  1 0:00s
+Zone   Europe/London   -0:01:15 -      LMT     1847 Dec  1
                         0:00   GB-Eire %s      1968 Oct 27
                         1:00   -       BST     1971 Oct 31 2:00u
                         0:00   GB-Eire %s      1996
                         0:00   EU      GMT/BST
-Link   Europe/London   Europe/Jersey
-Link   Europe/London   Europe/Guernsey
-Link   Europe/London   Europe/Isle_of_Man
 Zone   Europe/Dublin   -0:25:00 -      LMT     1880 Aug  2
                        -0:25:21 -      DMT     1916 May 21 2:00
                        -0:25:21 1:00   IST     1916 Oct  1 2:00s
@@ -481,7 +476,7 @@ Rule        C-Eur   1942    only    -       Nov      2       2:00s  0       -
 Rule   C-Eur   1943    only    -       Mar     29       2:00s  1:00    S
 Rule   C-Eur   1943    only    -       Oct      4       2:00s  0       -
 Rule   C-Eur   1944    only    -       Apr      3       2:00s  1:00    S
-# Whitman gives 1944 Oct 7; go with Shanks & Pottenger.
+# Whitman gives 1944 Oct 7; go with Shanks.
 Rule   C-Eur   1944    only    -       Oct      2       2:00s  0       -
 Rule   C-Eur   1977    1980    -       Apr     Sun>=1   2:00s  1:00    S
 Rule   C-Eur   1977    only    -       Sep     lastSun  2:00s  0       -
@@ -601,12 +596,12 @@ Zone      Europe/Andorra  0:06:04 -       LMT     1901
 
 # Austria
 
-# From Paul Eggert (2006-03-22): Shanks & Pottenger give 1918-06-16 and
+# From Paul Eggert (2003-02-28): Shanks gives 1918-06-16 and
 # 1945-11-18, but the Austrian Federal Office of Metrology and
 # Surveying (BEV) gives 1918-09-16 and for Vienna gives the "alleged"
 # date of 1945-04-12 with no time.  For the 1980-04-06 transition
-# Shanks & Pottenger give 02:00, the BEV 00:00.  Go with the BEV,
-# and guess 02:00 for 1945-04-12.
+# Shanks gives 02:00, the BEV 00:00.  Go with the BEV, and guess 02:00
+# for 1945-04-12.
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Austria 1920    only    -       Apr      5      2:00s   1:00    S
@@ -706,7 +701,7 @@ Zone        Europe/Brussels 0:17:30 -       LMT     1880
                        1:00    EU      CE%sT
 
 # Bosnia and Herzegovina
-# see Serbia
+# see Serbia and Montenegro
 
 # Bulgaria
 #
@@ -718,7 +713,7 @@ Zone        Europe/Brussels 0:17:30 -       LMT     1880
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Bulg    1979    only    -       Mar     31      23:00   1:00    S
 Rule   Bulg    1979    only    -       Oct      1       1:00   0       -
-Rule   Bulg    1980    1982    -       Apr     Sat>=1  23:00   1:00    S
+Rule   Bulg    1980    1982    -       Apr     Sat<=7  23:00   1:00    S
 Rule   Bulg    1980    only    -       Sep     29       1:00   0       -
 Rule   Bulg    1981    only    -       Sep     27       2:00   0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -733,7 +728,7 @@ Zone        Europe/Sofia    1:33:16 -       LMT     1880
                        2:00    EU      EE%sT
 
 # Croatia
-# see Serbia
+# see Serbia and Montenegro
 
 # Cyprus
 # Please see the `asia' file for Asia/Nicosia.
@@ -818,10 +813,10 @@ Zone Atlantic/Faeroe      -0:27:04 -      LMT     1908 Jan 11     # Torshavn
 # East Greenland and Franz Josef Land, but we don't know their time zones.
 # My source for this is Wilhelm Dege's book mentioned under Svalbard.
 #
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (1996-11-22):
 # Greenland joined the EU as part of Denmark, obtained home rule on 1979-05-01,
 # and left the EU on 1985-02-01.  It therefore should have been using EU
-# rules at least through 1984.  Shanks & Pottenger say Scoresbysund and Godthab
+# rules at least through 1984.  Shanks says Scoresbysund and Godthab
 # used C-Eur rules after 1980, but IATA SSIM (1991/1996) says they use EU
 # rules since at least 1991.  Assume EU rules since 1980.
 
@@ -876,28 +871,24 @@ Zone Atlantic/Faeroe      -0:27:04 -      LMT     1908 Jan 11     # Torshavn
 # I heard back from someone stationed at Thule; the time change took place
 # there at 2:00 AM.
 
-# From Paul Eggert (2006-03-22):
-# From 1997 on the CIA map shows Danmarkshavn on GMT;
-# the 1995 map as like Godthab.
+# From Paul Eggert (2001-11-19):
+# The 1997 CIA map shows Danmarkshavn on GMT; the 1995 map as like Godthab.
 # For lack of better info, assume they were like Godthab before 1996.
 # startkart.no says Thule does not observe DST, but this is clearly an error,
-# so go with Shanks & Pottenger for Thule transitions until this year.
-# For 2007 on assume Thule will stay in sync with US DST rules.
+# so go with Shanks for all Thule transitions.
 #
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Thule   1991    1992    -       Mar     lastSun 2:00    1:00    D
 Rule   Thule   1991    1992    -       Sep     lastSun 2:00    0       S
-Rule   Thule   1993    2006    -       Apr     Sun>=1  2:00    1:00    D
-Rule   Thule   1993    2006    -       Oct     lastSun 2:00    0       S
-Rule   Thule   2007    max     -       Mar     Sun>=8  2:00    1:00    D
-Rule   Thule   2007    max     -       Nov     Sun>=1  2:00    0       S
+Rule   Thule   1993    max     -       Apr     Sun>=1  2:00    1:00    D
+Rule   Thule   1993    max     -       Oct     lastSun 2:00    0       S
 #
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Danmarkshavn -1:14:40 -   LMT     1916 Jul 28
                        -3:00   -       WGT     1980 Apr  6 2:00
                        -3:00   EU      WG%sT   1996
                        0:00    -       GMT
-Zone America/Scoresbysund -1:27:52 -   LMT     1916 Jul 28 # Ittoqqortoormiit
+Zone America/Scoresbysund -1:29:00 -   LMT     1916 Jul 28 # Ittoqqortoormiit
                        -2:00   -       CGT     1980 Apr  6 2:00
                        -2:00   C-Eur   CG%sT   1981 Mar 29
                        -1:00   EU      EG%sT
@@ -972,13 +963,13 @@ Zone      Europe/Tallinn  1:39:00 -       LMT     1880
 
 # Finland
 #
-# From Hannu Strang (1994-09-25 06:03:37 UTC):
+# From Hannu Strang (25 Sep 1994 06:03:37 UTC):
 # Well, here in Helsinki we're just changing from summer time to regular one,
 # and it's supposed to change at 4am...
 #
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say Finland has switched at 02:00 standard time
-# since 1981.  Go with Strang instead.
+# From Paul Eggert (25 Sep 1994):
+# Shanks says Finland has switched at 02:00 standard time since 1981.
+# Go with Strang instead.
 #
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Finland 1942    only    -       Apr     3       0:00    1:00    S
@@ -1008,7 +999,7 @@ Link       Europe/Helsinki Europe/Mariehamn
 
 
 #
-# Shank & Pottenger seem to use `24:00' ambiguously; resolve it with Whitman.
+# Shanks seems to use `24:00' ambiguously; we resolve it with Whitman.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   France  1916    only    -       Jun     14      23:00s  1:00    S
 Rule   France  1916    1919    -       Oct     Sun>=1  23:00s  0       -
@@ -1022,7 +1013,7 @@ Rule      France  1921    only    -       Oct     25      23:00s  0       -
 Rule   France  1922    only    -       Mar     25      23:00s  1:00    S
 # DSH writes that a law of 1923-05-24 specified 3rd Sat in Apr at 23:00 to 1st
 # Sat in Oct at 24:00; and that in 1930, because of Easter, the transitions
-# were Apr 12 and Oct 5.  Go with Shanks & Pottenger.
+# were Apr 12 and Oct 5.  Go with Shanks.
 Rule   France  1922    1938    -       Oct     Sat>=1  23:00s  0       -
 Rule   France  1923    only    -       May     26      23:00s  1:00    S
 Rule   France  1924    only    -       Mar     29      23:00s  1:00    S
@@ -1043,8 +1034,8 @@ Rule      France  1938    only    -       Mar     26      23:00s  1:00    S
 Rule   France  1939    only    -       Apr     15      23:00s  1:00    S
 Rule   France  1939    only    -       Nov     18      23:00s  0       -
 Rule   France  1940    only    -       Feb     25       2:00   1:00    S
-# The French rules for 1941-1944 were not used in Paris, but Shanks & Pottenger
-# write that they were used in Monaco and in many French locations.
+# The French rules for 1941-1944 were not used in Paris, but Shanks writes
+# that they were used in Monaco and in many French locations.
 # Le Corre writes that the upper limit of the free zone was Arneguy, Orthez,
 # Mont-de-Marsan, Bazas, Langon, Lamotte-Montravel, Marouil, La
 # Rochefoucault, Champagne-Mouton, La Roche-Posay, La Haye-Decartes,
@@ -1052,7 +1043,7 @@ Rule      France  1940    only    -       Feb     25       2:00   1:00    S
 # Paray-le-Monial, Montceau-les-Mines, Chalons-sur-Saone, Arbois,
 # Dole, Morez, St-Claude, and Collognes (Haute-Savioe).
 Rule   France  1941    only    -       May      5       0:00   2:00    M # Midsummer
-# Shanks & Pottenger say this transition occurred at Oct 6 1:00,
+# Shanks says this transition occurred at Oct 6 1:00,
 # but go with Denis Excoffier (1997-12-12),
 # who quotes the Ephemerides Astronomiques for 1998 from Bureau des Longitudes
 # as saying 5/10/41 22hUT.
@@ -1065,21 +1056,21 @@ Rule    France  1944    only    -       Apr      3       2:00   2:00    M
 Rule   France  1944    only    -       Oct      8       1:00   1:00    S
 Rule   France  1945    only    -       Apr      2       2:00   2:00    M
 Rule   France  1945    only    -       Sep     16       3:00   0       -
-# Shanks & Pottenger give Mar 28 2:00 and Sep 26 3:00;
+# Shanks gives Mar 28 2:00 and Sep 26 3:00;
 # go with Excoffier's 28/3/76 0hUT and 25/9/76 23hUT.
 Rule   France  1976    only    -       Mar     28       1:00   1:00    S
 Rule   France  1976    only    -       Sep     26       1:00   0       -
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time, and Whitman 0:09:05,
+# Shanks gives 0:09 for Paris Mean Time, and Whitman gives 0:09:05,
 # but Howse quotes the actual French legislation as saying 0:09:21.
 # Go with Howse.  Howse writes that the time in France was officially based
 # on PMT-0:09:21 until 1978-08-09, when the time base finally switched to UTC.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Europe/Paris    0:09:21 -       LMT     1891 Mar 15  0:01
                        0:09:21 -       PMT     1911 Mar 11  0:01  # Paris MT
-# Shanks & Pottenger give 1940 Jun 14 0:00; go with Excoffier and Le Corre.
+# Shanks gives 1940 Jun 14 0:00; go with Excoffier and Le Corre.
                        0:00    France  WE%sT   1940 Jun 14 23:00
 # Le Corre says Paris stuck with occupied-France time after the liberation;
-# go with Shanks & Pottenger.
+# go with Shanks.
                        1:00    C-Eur   CE%sT   1944 Aug 25
                        0:00    France  WE%sT   1945 Sep 16  3:00
                        1:00    France  CE%sT   1977
@@ -1130,23 +1121,23 @@ Zone    Europe/Berlin   0:53:28 -       LMT     1893 Apr
 
 # Gibraltar
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-Zone Europe/Gibraltar  -0:21:24 -      LMT     1880 Aug  2 0:00s
+Zone Europe/Gibraltar  -0:21:24 -      LMT     1880 Aug  2
                        0:00    GB-Eire %s      1957 Apr 14 2:00
                        1:00    -       CET     1982
                        1:00    EU      CE%sT
 
 # Greece
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks & Pottenger.
+# Whitman gives 1932 Jul 5 - Nov 1; go with Shanks.
 Rule   Greece  1932    only    -       Jul      7      0:00    1:00    S
 Rule   Greece  1932    only    -       Sep      1      0:00    0       -
-# Whitman gives 1941 Apr 25 - ?; go with Shanks & Pottenger.
+# Whitman gives 1941 Apr 25 - ?; go with Shanks.
 Rule   Greece  1941    only    -       Apr      7      0:00    1:00    S
-# Whitman gives 1942 Feb 2 - ?; go with Shanks & Pottenger.
+# Whitman gives 1942 Feb 2 - ?; go with Shanks.
 Rule   Greece  1942    only    -       Nov      2      3:00    0       -
 Rule   Greece  1943    only    -       Mar     30      0:00    1:00    S
 Rule   Greece  1943    only    -       Oct      4      0:00    0       -
-# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks & Pottenger.
+# Whitman gives 1944 Oct 3 - Oct 31; go with Shanks.
 Rule   Greece  1952    only    -       Jul      1      0:00    1:00    S
 Rule   Greece  1952    only    -       Nov      2      0:00    0       -
 Rule   Greece  1975    only    -       Apr     12      0:00s   1:00    S
@@ -1166,7 +1157,7 @@ Zone      Europe/Athens   1:34:52 -       LMT     1895 Sep 14
                        2:00    Greece  EE%sT   1941 Apr 30
                        1:00    Greece  CE%sT   1944 Apr  4
                        2:00    Greece  EE%sT   1981
-                       # Shanks & Pottenger say it switched to C-Eur in 1981;
+                       # Shanks says they switched to C-Eur in 1981;
                        # go with EU instead, since Greece joined it on Jan 1.
                        2:00    EU      EE%sT
 
@@ -1229,10 +1220,10 @@ Zone    Europe/Budapest 1:16:20 -       LMT     1890 Oct
 # might be a reference to the Julian calendar as opposed to Gregorian, or it
 # might mean something else (???).
 #
-# From Paul Eggert (2006-03-22):
-# The Iceland Almanak, Shanks & Pottenger, and Whitman disagree on many points.
-# We go with the Almanak, except for one claim from Shanks & Pottenger, namely
-# that Reykavik was 21W57 from 1837 to 1908, local mean time before that.
+# From Paul Eggert (1999-10-29):
+# The Iceland Almanak, Shanks and Whitman disagree on many points.
+# We go with the Almanak, except for one claim from Shanks, namely that
+# Reykavik was 21W57 from 1837 to 1908, local mean time before that.
 #
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Iceland 1917    1918    -       Feb     19      23:00   1:00    S
@@ -1270,16 +1261,15 @@ Zone Atlantic/Reykjavik -1:27:24 -      LMT     1837
 # But these events all occurred before the 1970 cutoff,
 # so record only the time in Rome.
 #
-# From Paul Eggert (2006-03-22):
-# For Italian DST we have three sources: Shanks & Pottenger, Whitman, and
-# F. Pollastri
+# From Paul Eggert (1996-05-06):
+# For Italian DST we have three sources: Shanks, Whitman, and F. Pollastri
 # <a href="http://toi.iriti.cnr.it/uk/ienitlt.html">
-# Day-light Saving Time in Italy (2006-02-03)
+# Day-light Saving Time in Italy (1996-03-14)
 # </a>
 # (`FP' below), taken from an Italian National Electrotechnical Institute
 # publication. When the three sources disagree, guess who's right, as follows:
 #
-# year FP      Shanks&P. (S)   Whitman (W)     Go with:
+# year FP      Shanks (S)      Whitman (W)     Go with:
 # 1916 06-03   06-03 24:00     06-03 00:00     FP & W
 #      09-30   09-30 24:00     09-30 01:00     FP; guess 24:00s
 # 1917 04-01   03-31 24:00     03-31 00:00     FP & S
@@ -1335,7 +1325,7 @@ Rule      Italy   1978    only    -       Oct      1      0:00s   0       -
 Rule   Italy   1979    only    -       Sep     30      0:00s   0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Europe/Rome     0:49:56 -       LMT     1866 Sep 22
-                       0:49:56 -       RMT     1893 Nov  1 0:00s # Rome Mean
+                       0:49:56 -       RMT     1893 Nov        # Rome Mean Time
                        1:00    Italy   CE%sT   1942 Nov  2 2:00s
                        1:00    C-Eur   CE%sT   1944 Jul
                        1:00    Italy   CE%sT   1980
@@ -1477,8 +1467,7 @@ Zone      Europe/Vilnius  1:41:16 -       LMT     1880
                        2:00    EU      EE%sT
 
 # Luxembourg
-# Whitman disagrees with most of these dates in minor ways;
-# go with Shanks & Pottenger.
+# Whitman disagrees with most of these dates in minor ways; go with Shanks.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Lux     1916    only    -       May     14      23:00   1:00    S
 Rule   Lux     1916    only    -       Oct      1       1:00   0       -
@@ -1513,7 +1502,7 @@ Zone Europe/Luxembourg    0:24:36 -       LMT     1904 Jun
                        1:00    EU      CE%sT
 
 # Macedonia
-# see Serbia
+# see Serbia and Montenegro
 
 # Malta
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
@@ -1525,7 +1514,7 @@ Rule      Malta   1975    1979    -       Apr     Sun>=15 2:00    1:00    S
 Rule   Malta   1975    1980    -       Sep     Sun>=15 2:00    0       -
 Rule   Malta   1980    only    -       Mar     31      2:00    1:00    S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-Zone   Europe/Malta    0:58:04 -       LMT     1893 Nov  2 0:00s # Valletta
+Zone   Europe/Malta    0:58:04 -       LMT     1893 Nov  2     # Valletta
                        1:00    Italy   CE%sT   1942 Nov  2 2:00s
                        1:00    C-Eur   CE%sT   1945 Apr  2 2:00s
                        1:00    Italy   CE%sT   1973 Mar 31
@@ -1534,9 +1523,9 @@ Zone      Europe/Malta    0:58:04 -       LMT     1893 Nov  2 0:00s # Valletta
 
 # Moldova
 
-# From Paul Eggert (2006-03-22):
-# A previous version of this database followed Shanks & Pottenger, who write
-# that Tiraspol switched to Moscow time on 1992-01-19 at 02:00.
+# From Paul Eggert (2001-02-11):
+# A previous version of this database followed Shanks, who writes that
+# Tiraspol switched to Moscow time on 1992-01-19 at 02:00.
 # However, this is most likely an error, as Moldova declared independence
 # on 1991-08-27 (the 1992-01-19 date is that of a Russian decree).
 # In early 1992 there was large-scale interethnic violence in the area
@@ -1561,8 +1550,7 @@ Zone      Europe/Chisinau 1:55:20 -       LMT     1880
                        2:00    EU      EE%sT
 
 # Monaco
-# Shanks & Pottenger give 0:09:20 for Paris Mean Time; go with Howse's
-# more precise 0:09:21.
+# Shanks gives 0:09 for Paris Mean Time; go with Howse's more precise 0:09:21.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Europe/Monaco   0:29:32 -       LMT     1891 Mar 15
                        0:09:21 -       PMT     1911 Mar 11    # Paris Mean Time
@@ -1570,9 +1558,6 @@ Zone      Europe/Monaco   0:29:32 -       LMT     1891 Mar 15
                        1:00    France  CE%sT   1977
                        1:00    EU      CE%sT
 
-# Montenegro
-# see Serbia
-
 # Netherlands
 
 # Howse writes that the Netherlands' railways used GMT between 1892 and 1940,
@@ -1648,8 +1633,7 @@ Zone Europe/Amsterdam     0:19:32 -       LMT     1835
                        1:00    EU      CE%sT
 
 # Norway
-# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks &
-# Pottenger.
+# http://met.no/met/met_lex/q_u/sommertid.html (2004-01) agrees with Shanks.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Norway  1916    only    -       May     22      1:00    1:00    S
 Rule   Norway  1916    only    -       Sep     30      0:00    0       -
@@ -1720,10 +1704,9 @@ Link     Europe/Oslo     Atlantic/Jan_Mayen
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Poland  1918    1919    -       Sep     16      2:00s   0       -
 Rule   Poland  1919    only    -       Apr     15      2:00s   1:00    S
-Rule   Poland  1944    only    -       Apr      3      2:00s   1:00    S
-# Whitman gives 1944 Nov 30; go with Shanks & Pottenger.
+# Whitman gives 1944 Nov 30; go with Shanks.
 Rule   Poland  1944    only    -       Oct      4      2:00    0       -
-# For 1944-1948 Whitman gives the previous day; go with Shanks & Pottenger.
+# For 1944-1948 Whitman gives the previous day; go with Shanks.
 Rule   Poland  1945    only    -       Apr     29      0:00    1:00    S
 Rule   Poland  1945    only    -       Nov      1      0:00    0       -
 # For 1946 on the source is Kazimierz Borkowski,
@@ -1779,9 +1762,9 @@ Zone      Europe/Warsaw   1:24:00 -       LMT     1880
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 # DSH writes that despite Decree 1,469 (1915), the change to the clocks was not
 # done every year, depending on what Spain did, because of railroad schedules.
-# Go with Shanks & Pottenger.
+# Go with Shanks.
 Rule   Port    1916    only    -       Jun     17      23:00   1:00    S
-# Whitman gives 1916 Oct 31; go with Shanks & Pottenger.
+# Whitman gives 1916 Oct 31; go with Shanks.
 Rule   Port    1916    only    -       Nov      1       1:00   0       -
 Rule   Port    1917    only    -       Feb     28      23:00s  1:00    S
 Rule   Port    1917    1921    -       Oct     14      23:00s  0       -
@@ -1797,23 +1780,24 @@ Rule    Port    1927    only    -       Apr      9      23:00s  1:00    S
 Rule   Port    1928    only    -       Apr     14      23:00s  1:00    S
 Rule   Port    1929    only    -       Apr     20      23:00s  1:00    S
 Rule   Port    1931    only    -       Apr     18      23:00s  1:00    S
-# Whitman gives 1931 Oct 8; go with Shanks & Pottenger.
+# Whitman gives 1931 Oct 8; go with Shanks.
 Rule   Port    1931    1932    -       Oct     Sat>=1  23:00s  0       -
 Rule   Port    1932    only    -       Apr      2      23:00s  1:00    S
+# Shanks gives 1934 Apr 4; go with Whitman.
 Rule   Port    1934    only    -       Apr      7      23:00s  1:00    S
-# Whitman gives 1934 Oct 5; go with Shanks & Pottenger.
+# Whitman gives 1934 Oct 5; go with Shanks.
 Rule   Port    1934    1938    -       Oct     Sat>=1  23:00s  0       -
-# Shanks & Pottenger give 1935 Apr 30; go with Whitman.
+# Shanks gives 1935 Apr 30; go with Whitman.
 Rule   Port    1935    only    -       Mar     30      23:00s  1:00    S
 Rule   Port    1936    only    -       Apr     18      23:00s  1:00    S
-# Whitman gives 1937 Apr 2; go with Shanks & Pottenger.
+# Whitman gives 1937 Apr 2; go with Shanks.
 Rule   Port    1937    only    -       Apr      3      23:00s  1:00    S
 Rule   Port    1938    only    -       Mar     26      23:00s  1:00    S
 Rule   Port    1939    only    -       Apr     15      23:00s  1:00    S
-# Whitman gives 1939 Oct 7; go with Shanks & Pottenger.
+# Whitman gives 1939 Oct 7; go with Shanks.
 Rule   Port    1939    only    -       Nov     18      23:00s  0       -
 Rule   Port    1940    only    -       Feb     24      23:00s  1:00    S
-# Shanks & Pottenger give 1940 Oct 7; go with Whitman.
+# Shanks gives 1940 Oct 7; go with Whitman.
 Rule   Port    1940    1941    -       Oct      5      23:00s  0       -
 Rule   Port    1941    only    -       Apr      5      23:00s  1:00    S
 Rule   Port    1942    1945    -       Mar     Sat>=8  23:00s  1:00    S
@@ -1827,8 +1811,8 @@ Rule      Port    1946    only    -       Apr     Sat>=1  23:00s  1:00    S
 Rule   Port    1946    only    -       Oct     Sat>=1  23:00s  0       -
 Rule   Port    1947    1949    -       Apr     Sun>=1   2:00s  1:00    S
 Rule   Port    1947    1949    -       Oct     Sun>=1   2:00s  0       -
-# Shanks & Pottenger say DST was observed in 1950; go with Whitman.
-# Whitman gives Oct lastSun for 1952 on; go with Shanks & Pottenger.
+# Shanks says DST was observed in 1950; go with Whitman.
+# Whitman gives Oct lastSun for 1952 on; go with Shanks.
 Rule   Port    1951    1965    -       Apr     Sun>=1   2:00s  1:00    S
 Rule   Port    1951    1965    -       Oct     Sun>=1   2:00s  0       -
 Rule   Port    1977    only    -       Mar     27       0:00s  1:00    S
@@ -1840,7 +1824,7 @@ Rule      Port    1980    only    -       Mar     lastSun  0:00s  1:00    S
 Rule   Port    1981    1982    -       Mar     lastSun  1:00s  1:00    S
 Rule   Port    1983    only    -       Mar     lastSun  2:00s  1:00    S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-# Shanks & Pottenger say the transition from LMT to WET occurred 1911-05-24;
+# Shanks says that the transition from LMT to WET occurred 1911-05-24;
 # Willett says 1912-01-01.  Go with Willett.
 Zone   Europe/Lisbon   -0:36:32 -      LMT     1884
                        -0:36:32 -      LMT     1912 Jan  1  # Lisbon Mean Time
@@ -1893,12 +1877,11 @@ Zone Europe/Bucharest   1:44:24 -       LMT     1891 Oct
 
 # Russia
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (1999-11-12):
 # Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
 # Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
-# are from Andrey A. Chernov.  The rest is from Shanks & Pottenger,
-# except we follow Chernov's report that 1992 DST transitions were Sat
-# 23:00, not Sun 02:00s.
+# are from Andrey A. Chernov.  The rest is from Shanks, except we follow
+# Chernov's report that 1992 DST transitions were Sat 23:00, not Sun 02:00s.
 #
 # From Stanislaw A. Kuzikowski (1994-06-29):
 # But now it is some months since Novosibirsk is 3 hours ahead of Moscow!
@@ -1943,20 +1926,20 @@ Zone Europe/Kaliningrad  1:22:00 -      LMT     1893 Apr
                         2:00   Russia  EE%sT
 #
 # From Oscar van Vlijmen (2001-08-25): [This region consists of]
-# Respublika Adygeya, Arkhangel'skaya oblast',
+# Respublika Adygeya, Arkhangel'skaya oblast', Astrakhanskaya oblast',
 # Belgorodskaya oblast', Bryanskaya oblast', Vladimirskaya oblast',
-# Vologodskaya oblast', Voronezhskaya oblast',
+# Volgogradskaya oblast', Vologodskaya oblast', Voronezhskaya oblast',
 # Respublika Dagestan, Ivanovskaya oblast', Respublika Ingushetiya,
 # Kabarbino-Balkarskaya Respublika, Respublika Kalmykiya,
 # Kalyzhskaya oblast', Respublika Karachaevo-Cherkessiya,
-# Respublika Kareliya, Respublika Komi,
+# Respublika Kareliya, Kirovskaya oblast', Respublika Komi,
 # Kostromskaya oblast', Krasnodarskij kraj, Kurskaya oblast',
 # Leningradskaya oblast', Lipetskaya oblast', Respublika Marij El,
 # Respublika Mordoviya, Moskva, Moskovskaya oblast',
 # Murmanskaya oblast', Nenetskij avtonomnyj okrug,
 # Nizhegorodskaya oblast', Novgorodskaya oblast', Orlovskaya oblast',
 # Penzenskaya oblast', Pskovskaya oblast', Rostovskaya oblast',
-# Ryazanskaya oblast', Sankt-Peterburg,
+# Ryazanskaya oblast', Sankt-Peterburg, Saratovskaya oblast',
 # Respublika Severnaya Osetiya, Smolenskaya oblast',
 # Stavropol'skij kraj, Tambovskaya oblast', Respublika Tatarstan,
 # Tverskaya oblast', Tyl'skaya oblast', Ul'yanovskaya oblast',
@@ -1971,25 +1954,11 @@ Zone Europe/Moscow       2:30:20 -      LMT     1880
                         2:00   Russia  EE%sT   1992 Jan 19 2:00s
                         3:00   Russia  MSK/MSD
 #
-# Astrakhanskaya oblast', Kirovskaya oblast', Saratovskaya oblast',
-# Volgogradskaya oblast'.  Shanks & Pottenger say Kirov is still at +0400
-# but Wikipedia (2006-05-09) says +0300.  Perhaps it switched after the
-# others?  But we have no data.
-Zone Europe/Volgograd   2:57:40 -      LMT     1920 Jan  3
-                        3:00   -       TSAT    1925 Apr  6 # Tsaritsyn Time
-                        3:00   -       STAT    1930 Jun 21 # Stalingrad Time
-                        4:00   -       STAT    1961 Nov 11
-                        4:00   Russia  VOL%sT  1989 Mar 26 2:00s # Volgograd T
-                        3:00   Russia  VOL%sT  1991 Mar 31 2:00s
-                        4:00   -       VOLT    1992 Mar 29 2:00s
-                        3:00   Russia  VOL%sT
-#
 # From Oscar van Vlijmen (2001-08-25): [This region consists of]
 # Samarskaya oblast', Udmyrtskaya respublika
 Zone Europe/Samara      3:20:36 -      LMT     1919 Jul  1 2:00
-                        3:00   -       SAMT    1930 Jun 21
-                        4:00   -       SAMT    1935 Jan 27
-                        4:00   Russia  KUY%sT  1989 Mar 26 2:00s # Kuybyshev
+                        3:00   -       KUYT    1930 Jun 21 # Kuybyshev
+                        4:00   Russia  KUY%sT  1989 Mar 26 2:00s
                         3:00   Russia  KUY%sT  1991 Mar 31 2:00s
                         2:00   Russia  KUY%sT  1991 Sep 29 2:00s
                         3:00   -       KUYT    1991 Oct 20 3:00
@@ -2015,19 +1984,17 @@ Zone Asia/Omsk           4:53:36 -      LMT     1919 Nov 14
                         5:00   Russia  OMS%sT  1992 Jan 19 2:00s
                         6:00   Russia  OMS%sT
 #
-# From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's
-# not clear when it switched from +7 to +6.
-# Novosibirskaya oblast', Tomskaya oblast'.
+# Novosibirskaya oblast'.
 Zone Asia/Novosibirsk   5:31:40 -      LMT     1919 Dec 14 6:00
                         6:00   -       NOVT    1930 Jun 21 # Novosibirsk Time
                         7:00   Russia  NOV%sT  1991 Mar 31 2:00s
                         6:00   Russia  NOV%sT  1992 Jan 19 2:00s
-                        7:00   Russia  NOV%sT  1993 May 23 # say Shanks & P.
+                        7:00   Russia  NOV%sT  1993 May 23 # says Shanks
                         6:00   Russia  NOV%sT
 #
 # From Oscar van Vlijmen (2001-08-25): [This region consists of]
 # Kemerovskaya oblast', Krasnoyarskij kraj,
-# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug,
+# Tajmyrskij (Dolgano-Nenetskij) avtonomnyj okrug, Tomskaya oblast',
 # Respublika Tuva, Respublika Khakasiya, Evenkijskij avtonomnyj okrug.
 Zone Asia/Krasnoyarsk   6:11:20 -      LMT     1920 Jan  6
                         6:00   -       KRAT    1930 Jun 21 # Krasnoyarsk Time
@@ -2110,7 +2077,7 @@ Zone Asia/Anadyr  11:49:56 -      LMT     1924 May  2
                        11:00   Russia  ANA%sT  1992 Jan 19 2:00s
                        12:00   Russia  ANA%sT
 
-# Serbia
+# Serbia and Montenegro
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   Europe/Belgrade 1:22:00 -       LMT     1884
                        1:00    -       CET     1941 Apr 18 23:00
@@ -2118,11 +2085,10 @@ Zone    Europe/Belgrade 1:22:00 -       LMT     1884
                        1:00    1:00    CEST    1945 Sep 16  2:00s
 # Metod Kozelj reports that the legal date of
 # transition to EU rules was 1982-11-27, for all of Yugoslavia at the time.
-# Shanks & Pottenger don't give as much detail, so go with Kozelj.
+# Shanks doesn't give as much detail, so go with Kozelj.
                        1:00    -       CET     1982 Nov 27
                        1:00    EU      CE%sT
 Link Europe/Belgrade Europe/Ljubljana  # Slovenia
-Link Europe/Belgrade Europe/Podgorica  # Montenegro
 Link Europe/Belgrade Europe/Sarajevo   # Bosnia and Herzegovina
 Link Europe/Belgrade Europe/Skopje     # Macedonia
 Link Europe/Belgrade Europe/Zagreb     # Croatia
@@ -2131,34 +2097,32 @@ Link Europe/Belgrade Europe/Zagreb      # Croatia
 Link Europe/Prague Europe/Bratislava
 
 # Slovenia
-# see Serbia
+# see Serbia and Montenegro
 
 # Spain
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1;
-# go with Shanks & Pottenger.
+# For 1917-1919 Whitman gives Apr Sat>=1 - Oct Sat>=1; go with Shanks.
 Rule   Spain   1917    only    -       May      5      23:00s  1:00    S
 Rule   Spain   1917    1919    -       Oct      6      23:00s  0       -
 Rule   Spain   1918    only    -       Apr     15      23:00s  1:00    S
 Rule   Spain   1919    only    -       Apr      5      23:00s  1:00    S
-# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks & Pottenger.
+# Whitman gives 1921 Feb 28 - Oct 14; go with Shanks.
 Rule   Spain   1924    only    -       Apr     16      23:00s  1:00    S
-# Whitman gives 1924 Oct 14; go with Shanks & Pottenger.
+# Whitman gives 1924 Oct 14; go with Shanks.
 Rule   Spain   1924    only    -       Oct      4      23:00s  0       -
 Rule   Spain   1926    only    -       Apr     17      23:00s  1:00    S
-# Whitman says no DST in 1929; go with Shanks & Pottenger.
+# Whitman says no DST in 1929; go with Shanks.
 Rule   Spain   1926    1929    -       Oct     Sat>=1  23:00s  0       -
 Rule   Spain   1927    only    -       Apr      9      23:00s  1:00    S
 Rule   Spain   1928    only    -       Apr     14      23:00s  1:00    S
 Rule   Spain   1929    only    -       Apr     20      23:00s  1:00    S
-# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13;
-# go with Shanks & Pottenger.
+# Whitman gives 1937 Jun 16, 1938 Apr 16, 1940 Apr 13; go with Shanks.
 Rule   Spain   1937    only    -       May     22      23:00s  1:00    S
 Rule   Spain   1937    1939    -       Oct     Sat>=1  23:00s  0       -
 Rule   Spain   1938    only    -       Mar     22      23:00s  1:00    S
 Rule   Spain   1939    only    -       Apr     15      23:00s  1:00    S
 Rule   Spain   1940    only    -       Mar     16      23:00s  1:00    S
-# Whitman says no DST 1942-1945; go with Shanks & Pottenger.
+# Whitman says no DST 1942-1945; go with Shanks.
 Rule   Spain   1942    only    -       May      2      22:00s  2:00    M # Midsummer
 Rule   Spain   1942    only    -       Sep      1      22:00s  1:00    S
 Rule   Spain   1943    1946    -       Apr     Sat>=13 22:00s  2:00    M
@@ -2185,7 +2149,7 @@ Rule SpainAfrica 1977     only    -       Sep     28       0:00   0       -
 Rule SpainAfrica 1978  only    -       Jun      1       0:00   1:00    S
 Rule SpainAfrica 1978  only    -       Aug      4       0:00   0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-Zone   Europe/Madrid   -0:14:44 -      LMT     1901 Jan  1  0:00s
+Zone   Europe/Madrid   -0:14:44 -      LMT     1901
                         0:00   Spain   WE%sT   1946 Sep 30
                         1:00   Spain   CE%sT   1979
                         1:00   EU      CE%sT
@@ -2207,7 +2171,7 @@ Zone      Atlantic/Canary -1:01:36 -      LMT     1922 Mar # Las Palmas de Gran C.
 
 # Sweden
 
-# From Ivan Nilsson (2001-04-13), superseding Shanks & Pottenger:
+# From Ivan Nilsson (2001-04-13), superseding Shanks:
 #
 # The law "Svensk forfattningssamling 1878, no 14" about standard time in 1879:
 # From the beginning of 1879 (that is 01-01 00:00) the time for all
@@ -2268,7 +2232,7 @@ Zone Europe/Stockholm     1:12:12 -       LMT     1879 Jan  1
 # From Whitman (who writes ``Midnight?''):
 Rule   Swiss   1940    only    -       Nov      2      0:00    1:00    S
 Rule   Swiss   1940    only    -       Dec     31      0:00    0       -
-# From Shanks & Pottenger:
+# From Shanks:
 Rule   Swiss   1941    1942    -       May     Sun>=1  2:00    1:00    S
 Rule   Swiss   1941    1942    -       Oct     Sun>=1  0:00    0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -2287,8 +2251,7 @@ Rule      Turkey  1921    only    -       Apr      3      0:00    1:00    S
 Rule   Turkey  1921    only    -       Oct      3      0:00    0       -
 Rule   Turkey  1922    only    -       Mar     26      0:00    1:00    S
 Rule   Turkey  1922    only    -       Oct      8      0:00    0       -
-# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925;
-# go with Shanks & Pottenger.
+# Whitman gives 1923 Apr 28 - Sep 16 and no DST in 1924-1925; go with Shanks.
 Rule   Turkey  1924    only    -       May     13      0:00    1:00    S
 Rule   Turkey  1924    1925    -       Oct      1      0:00    0       -
 Rule   Turkey  1925    only    -       May      1      0:00    1:00    S
@@ -2297,8 +2260,7 @@ Rule      Turkey  1940    only    -       Oct      5      0:00    0       -
 Rule   Turkey  1940    only    -       Dec      1      0:00    1:00    S
 Rule   Turkey  1941    only    -       Sep     21      0:00    0       -
 Rule   Turkey  1942    only    -       Apr      1      0:00    1:00    S
-# Whitman omits the next two transition and gives 1945 Oct 1;
-# go with Shanks & Pottenger.
+# Whitman omits the next two transition and gives 1945 Oct 1; go with Shanks.
 Rule   Turkey  1942    only    -       Nov      1      0:00    0       -
 Rule   Turkey  1945    only    -       Apr      2      0:00    1:00    S
 Rule   Turkey  1945    only    -       Oct      8      0:00    0       -
@@ -2395,13 +2357,11 @@ Zone Europe/Simferopol  2:16:24 -       LMT     1880
                        3:00    Russia  MSK/MSD 1990
                        3:00    -       MSK     1990 Jul  1 2:00
                        2:00    -       EET     1992
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (1999-11-12):
 # The _Economist_ (1994-05-28, p 45) reports that central Crimea switched
 # from Kiev to Moscow time sometime after the January 1994 elections.
-# Shanks (1999) says ``date of change uncertain'', but implies that it happened
-# sometime between the 1994 DST switches.  Shanks & Pottenger simply say
-# 1994-09-25 03:00, but that can't be right.  For now, guess it
-# changed in May.
+# Shanks says ``date of change uncertain'', but implies that it happened
+# sometime between the 1994 DST switches.  For now, guess it changed in May.
                        2:00    E-Eur   EE%sT   1994 May
 # From IATA SSIM (1994/1997), which also says that Kerch is still like Kiev.
                        3:00    E-Eur   MSK/MSD 1996 Mar 31 3:00s
index 1fc2035f45292b2e8ea101bb681b49bded5ca0c0..8a0c7015789022a3dbf82bdf2257bd8fb0512975 100644 (file)
@@ -1,11 +1,6 @@
-/*
-** This file is in the public domain, so clarified as of
-** 2006-07-17 by Arthur David Olson.
-*/
-
 #ifndef lint
 #ifndef NOID
-static char    elsieid[] = "@(#)ialloc.c       8.30";
+static char    elsieid[] = "@(#)ialloc.c       8.29";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
index 8bb8231055f2c70c4d5291ccba17bbe168e76d86..1cfaf265c21ffde81de1cfa715ab0c45fe6eee5c 100644 (file)
@@ -1,12 +1,12 @@
 # ISO 3166 alpha-2 country codes
 #
-# @(#)iso3166.tab      8.3
+# @(#)iso3166.tab      8.1
 #
-# From Paul Eggert (2006-09-27):
+# From Paul Eggert (2004-06-14):
 #
 # This file contains a table with the following columns:
 # 1.  ISO 3166-1 alpha-2 country code, current as of
-#     ISO 3166-1 Newsletter No. V-12 (2006-09-26).  See:
+#     ISO 3166-1 Newsletter No. V-10 (2004-04-26).  See:
 #     <a href="http://www.iso.org/iso/en/prods-services/iso3166ma/index.html">
 #     ISO 3166 Maintenance agency (ISO 3166/MA)
 #     </a>.
@@ -70,6 +70,7 @@ CM    Cameroon
 CN     China
 CO     Colombia
 CR     Costa Rica
+CS     Serbia and Montenegro
 CU     Cuba
 CV     Cape Verde
 CX     Christmas Island
@@ -99,7 +100,6 @@ GB   Britain (UK)
 GD     Grenada
 GE     Georgia
 GF     French Guiana
-GG     Guernsey
 GH     Ghana
 GI     Gibraltar
 GL     Greenland
@@ -122,14 +122,12 @@ HU        Hungary
 ID     Indonesia
 IE     Ireland
 IL     Israel
-IM     Isle of Man
 IN     India
 IO     British Indian Ocean Territory
 IQ     Iraq
 IR     Iran
 IS     Iceland
 IT     Italy
-JE     Jersey
 JM     Jamaica
 JO     Jordan
 JP     Japan
@@ -158,7 +156,6 @@ LY  Libya
 MA     Morocco
 MC     Monaco
 MD     Moldova
-ME     Montenegro
 MG     Madagascar
 MH     Marshall Islands
 MK     Macedonia
@@ -207,7 +204,6 @@ PY  Paraguay
 QA     Qatar
 RE     Reunion
 RO     Romania
-RS     Serbia
 RU     Russia
 RW     Rwanda
 SA     Saudi Arabia
index 3d80c5e3c28931b3c6e988e05cd4e2c6e0f6a095..73e2470e0b1c19a08ee70b7154be254a36bf585a 100644 (file)
@@ -1,4 +1,4 @@
-# @(#)northamerica     8.10
+# @(#)northamerica     8.1
 # <pre>
 
 # also includes Central America and the Caribbean
 # That 1883 transition occurred at 12:00 new time, not at 12:00 old time.
 # See p 46 of David Prerau, Seize the daylight, Thunder's Mouth Press (2005).
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (1995-12-19):
 # A good source for time zone historical data in the US is
 # Thomas G. Shanks, The American Atlas (5th edition),
 # San Diego: ACS Publications, Inc. (1991).
 # Make sure you have the errata sheet; the book is somewhat useless without it.
-# It is the source for most of the pre-1991 US entries below.
+# It is the source for most of the pre-1991 US and Puerto Rico entries below.
 
 # From Paul Eggert (2001-03-06):
 # Daylight Saving Time was first suggested as a joke by Benjamin Franklin
@@ -229,7 +229,7 @@ Zone        PST8PDT          -8:00  US      P%sT
 # Public law 106-564 (2000-12-23) introduced the abbreviation
 # "Chamorro Standard Time" for time in Guam and the Northern Marianas.
 # See the file "australasia".
-
 # From Arthur David Olson, 2005-08-09
 # The following was signed into law on 2005-08-08.
 #
@@ -274,7 +274,7 @@ Zone        PST8PDT          -8:00  US      P%sT
 # set their watches and clocks on Eastern time."  It quotes H.H. "Bubba"
 # Roberts, city administrator in Phenix City. as saying "We are in the Central
 # time zone, but we do go by the Eastern time zone because so many people work
-# in Columbus."
+# in Columbus." 
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER
 Rule   NYC     1920    only    -       Mar     lastSun 2:00    1:00    D
@@ -301,13 +301,6 @@ Zone America/New_York      -4:56:02 -      LMT     1883 Nov 18 12:03:58
 # Nebraska, eastern North Dakota, Oklahoma, eastern South Dakota,
 # western Tennessee, most of Texas, Wisconsin
 
-# From Larry M. Smith (2006-04-26) re Wisconsin:
-# http://www.legis.state.wi.us/statutes/Stat0175.pdf ...
-# is currently enforced at the 01:00 time of change.  Because the local
-# "bar time" in the state corresponds to 02:00, a number of citations
-# are issued for the "sale of class 'B' alcohol after prohibited
-# hours" within the deviated hour of this change every year....
-
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER
 Rule   Chicago 1920    only    -       Jun     13      2:00    1:00    D
 Rule   Chicago 1920    1921    -       Oct     lastSun 2:00    0       S
@@ -328,16 +321,14 @@ Zone America/Chicago      -5:50:36 -      LMT     1883 Nov 18 12:09:24
 Zone America/North_Dakota/Center -6:45:12 - LMT        1883 Nov 18 12:14:48
                        -7:00   US      M%sT    1992 Oct 25 02:00
                        -6:00   US      C%sT
-# Morton County, ND, switched from mountain to central time on
-# 2003-10-26, except for the area around Mandan which was already central time.
-# See <http://dmses.dot.gov/docimages/p63/135818.pdf>.
-# Officially this switch also included part of Sioux County, and
-# Jones, Mellette, and Todd Counties in South Dakota;
-# but in practice these other counties were already observing central time.
-# See <http://www.epa.gov/fedrgstr/EPA-IMPACT/2003/October/Day-28/i27056.htm>.
-Zone America/North_Dakota/New_Salem -6:45:39 - LMT 1883 Nov 18 12:14:21
-                       -7:00   US      M%sT    2003 Oct 26 02:00
-                       -6:00   US      C%sT
+# From Paul Eggert (2006-01-20):
+# The following is not implemented yet.
+# What is the most populous city in that area?
+# From http://www.statoids.com/tus.html (2006-01-20):
+# 2003-10-26 02:00: All of Morton County, ND, and the part of Sioux
+# County, ND east of ND route 31 moved from MT to CT.  (The area
+# around Fort Yates in Sioux County and the area around Mandan in
+# Morton County were already in CT.)
 
 # US mountain time, represented by Denver
 #
@@ -416,8 +407,7 @@ Zone America/Yakutat         14:41:05 -     LMT     1867 Oct 18
 Zone America/Anchorage  14:00:24 -     LMT     1867 Oct 18
                         -9:59:36 -     LMT     1900 Aug 20 12:00
                        -10:00  -       CAT     1942
-                       -10:00  US      CAT/CAWT 1945 Aug 14 23:00u
-                       -10:00  US      CAT/CAPT 1946 # Peace
+                       -10:00  US      CAT/CAWT 1946
                        -10:00  -       CAT     1967 Apr
                        -10:00  -       AHST    1969
                        -10:00  US      AH%sT   1983 Oct 30 2:00
@@ -537,9 +527,9 @@ Zone America/Boise  -7:44:49 -      LMT     1883 Nov 18 12:15:11
 # For a map of Indiana's time zone regions, see:
 # <a href="http://www.mccsc.edu/time.html">
 # What time is it in Indiana?
-# </a> (2006-03-01)
+# </a> (2005-10-30)
 #
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2006-01-20):
 # Since 1970, most of Indiana has been like America/Indiana/Indianapolis,
 # with the following exceptions:
 #
@@ -559,7 +549,6 @@ Zone America/Boise  -7:44:49 -      LMT     1883 Nov 18 12:15:11
 #
 # Shanks partitioned Indiana into 345 regions, each with its own time history,
 # and wrote ``Even newspaper reports present contradictory information.''
-# Those Hoosiers!  Such a flighty and changeable people!
 # Fortunately, most of the complexity occurred before our cutoff date of 1970.
 #
 # Other than Indianapolis, the Indiana place names are so nondescript
@@ -569,10 +558,8 @@ Zone America/Boise -7:44:49 -      LMT     1883 Nov 18 12:15:11
 # From Paul Eggert (2005-08-16):
 # http://www.mccsc.edu/time.html says that Indiana will use DST starting 2006.
 
-# From Nathan Stratton Treadway (2006-03-30):
-# http://www.dot.gov/affairs/dot0406.htm [3705 B]
 # From Deborah Goldsmith (2006-01-18):
-# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf [2.9 MB]
+# http://dmses.dot.gov/docimages/pdf95/382329_web.pdf
 # From Paul Eggert (2006-01-20):
 # It says "DOT is relocating the time zone boundary in Indiana to move Starke,
 # Pulaski, Knox, Daviess, Martin, Pike, Dubois, and Perry Counties from the
@@ -638,7 +625,7 @@ Zone America/Indiana/Vincennes -5:50:07 - LMT       1883 Nov 18 12:09:53
                        -5:00   US      E%sT    1971
                        -5:00   -       EST     2006 Apr  2 2:00
                        -6:00   US      C%sT
-#
+# 
 # Pike County, Indiana moved from central to eastern time in 1977,
 # then switched back in 2006.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER
@@ -831,10 +818,10 @@ Zone America/Menominee    -5:50:27 -      LMT     1885 Sep 18 12:00
 ################################################################################
 
 
-# From Paul Eggert (2006-03-22):
-# A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
+# From Paul Eggert (1999-10-29):
+# A good source for time zone historical data outside the US is
+# Thomas G. Shanks, The International Atlas (5th edition),
+# San Diego: ACS Publications, Inc. (1999).
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
@@ -842,8 +829,8 @@ Zone America/Menominee      -5:50:27 -      LMT     1885 Sep 18 12:00
 # published semiannually.  Law sent in several helpful summaries
 # of the IATA's data after 1990.
 #
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
 #
 # Other sources occasionally used include:
 #
@@ -891,51 +878,9 @@ Zone America/Menominee     -5:50:27 -      LMT     1885 Sep 18 12:00
 # From Paul Eggert (1994-11-22):
 # Alas, this sort of thing must be handled by localization software.
 
-# Unless otherwise specified, the data for Canada are all from Shanks
-# & Pottenger.
-
-# From Chris Walton (2006-04-01):
-# The British Columbia government announced yesterday that it will
-# adjust daylight savings next year to align with changes in the
-# U.S. and the rest of Canada....
-# http://www2.news.gov.bc.ca/news_releases_2005-2009/2006AG0014-000330.htm
-
-# From Chris Walton (2006-04-25):
-# Daylight saving time will be extended by four weeks starting in 2007....
-# Here is a news release which was issued today by the Nova Scotia government:
-# http://www.gov.ns.ca/news/details.asp?id=20060425004
-
-# From Chris Walton (2006-06-26):
-# [For New Brunswick] the new legislation dictates that the time change is to
-# be done at 02:00 instead of 00:01.
-# http://www.gnb.ca/0062/acts/BBA-2006/Chap-19.pdf
-# ...
-# Manitoba has traditionally changed the clock every fall at 03:00.
-# As of 2006, the transition is to take place one hour earlier at 02:00.
-# http://web2.gov.mb.ca/laws/statutes/ccsm/o030e.php
-# ...
-# [Alberta, Ontario, Quebec] will follow US rules.
-# http://www.qp.gov.ab.ca/documents/Acts/2006CH03_UNPR.cfm?frm_isbn=0779744934
-# http://www.e-laws.gov.on.ca/DBLaws/Source/Regs/English/2006/R06111_e.htm
-# http://www.assnat.qc.ca/eng/37legislature2/Projets-loi/Publics/06-a002.htm
-# ...
-# P.E.I. will follow US rules.  The new legislation is not law yet.
-# It passed first reading on April 20....
-# http://www.assembly.pe.ca/bills/pdf_first/62/3/bill-101.pdf
-# ...
-# Province of Newfoundland and Labrador.... The change is being considered.
-# http://www.releases.gov.nl.ca/releases/2006/mpa/0331n01.htm
-# ...
-# N.W.T. will follow US rules.  Whoever maintains the government web site
-# does not seem to believe in bookmarks.  To see the news release, click the
-# following link and search for "Daylight Savings Time Change".  Press the
-# "Daylight Savings Time Change" link; it will fire off a popup using
-# JavaScript.
-# http://www.exec.gov.nt.ca/currentnews/currentPR.asp?mode=archive
-
-
-
-# From Paul Eggert (2006-04-25):
+# Unless otherwise specified, the data for Canada are all from Shanks.
+
+# From Paul Eggert (2005-12-21):
 # H. David Matthews and Mary Vincent's map
 # <a href="http://www.canadiangeographic.ca/Magazine/SO98/geomap.asp">
 # "It's about TIME", _Canadian Geographic_ (September-October 1998)
@@ -947,10 +892,25 @@ Zone America/Menominee    -5:50:27 -      LMT     1885 Sep 18 12:00
 # information about standard and daylight saving time zones in Canada.
 # </a> (updated periodically).
 # Its unofficial information is often taken from Matthews and Vincent.
-
-# From Paul Eggert (2006-06-27):
-# For now, assume all of DST-observing Canada will fall into line with the
-# new US DST rules,
+#
+# CBC News reported that Ontario and Manitoba have announced plans to
+# follow the US change, and that Nova Scotia is considering it; see
+# <http://www.cbc.ca/news/background/daylightsavingtime/> (2005-10-21).
+# CBC news also reported that Prince Edward Island is the first
+# province in Atlantic Canada to follow the US change, and that Quebec
+# had agreed; see <http://www.cbc.ca/pei/story/pe_daylight_20051207.html>
+# (2005-12-07).
+#
+# To reflect all this, the Canada and Winn rules have been adjusted to
+# agree with the 2007 US change.  This means we assume most of Canada
+# will fall into line.  However, Alberta, British Columbia,
+# Newfoundland, Northwest Territories, and Yukon already have separate
+# rules in our database, so for now we'll leave them alone, which
+# means that we currently assume these regions will not change their
+# rules and will disagree with the US starting in 2007.  This
+# assumption is probably incorrect, with the possible exception of
+# Newfoundland.  We plan to adjust the Edm, Vanc, StJohns, and NT_YK
+# rules as the corresponding provinces make their announcements.
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Canada  1918    only    -       Apr     14      2:00    1:00    D
@@ -965,7 +925,7 @@ Rule        Canada  2007    max     -       Mar     Sun>=8  2:00    1:00    D
 Rule   Canada  2007    max     -       Nov     Sun>=1  2:00    0       S
 
 
-# Newfoundland and Labrador
+# Newfoundland (and far southeast Labrador)
 
 # From Paul Eggert (2000-10-02):
 # Matthews and Vincent (1998) write that Labrador should use NST/NDT,
@@ -976,21 +936,20 @@ Rule      Canada  2007    max     -       Nov     Sun>=1  2:00    0       S
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   StJohns 1917    only    -       Apr      8      2:00    1:00    D
 Rule   StJohns 1917    only    -       Sep     17      2:00    0       S
-# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks & Pottenger.
+# Whitman gives 1919 Apr 5 and 1920 Apr 5; go with Shanks.
 Rule   StJohns 1919    only    -       May      5      23:00   1:00    D
 Rule   StJohns 1919    only    -       Aug     12      23:00   0       S
-# For 1931-1935 Whitman gives Apr same date; go with Shanks & Pottenger.
+# For 1931-1935 Whitman gives Apr same date; go with Shanks.
 Rule   StJohns 1920    1935    -       May     Sun>=1  23:00   1:00    D
 Rule   StJohns 1920    1935    -       Oct     lastSun 23:00   0       S
-# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks &
-# Pottenger.
+# For 1936-1941 Whitman gives May Sun>=8 and Oct Sun>=1; go with Shanks.
 Rule   StJohns 1936    1941    -       May     Mon>=9  0:00    1:00    D
 Rule   StJohns 1936    1941    -       Oct     Mon>=2  0:00    0       S
 # Whitman gives the following transitions:
 # 1942 03-01/12-31, 1943 05-30/09-05, 1944 07-10/09-02, 1945 01-01/10-07
-# but go with Shanks & Pottenger and assume they used Canadian rules.
+# but go with Shanks and assume they used Canadian rules.
 # For 1946-9 Whitman gives May 5,4,9,1 - Oct 1,5,3,2, and for 1950 he gives
-# Apr 30 - Sep 24; go with Shanks & Pottenger.
+# Apr 30 - Sep 24; go with Shanks.
 Rule   StJohns 1946    1950    -       May     Sun>=8  2:00    1:00    D
 Rule   StJohns 1946    1950    -       Oct     Sun>=2  2:00    0       S
 Rule   StJohns 1951    1986    -       Apr     lastSun 2:00    1:00    D
@@ -1000,12 +959,9 @@ Rule      StJohns 1960    1986    -       Oct     lastSun 2:00    0       S
 # INMS (2000-09-12) says that, since 1988 at least, Newfoundland switches
 # at 00:01 local time.  For now, assume it started in 1987.
 Rule   StJohns 1987    only    -       Apr     Sun>=1  0:01    1:00    D
-Rule   StJohns 1987    2006    -       Oct     lastSun 0:01    0       S
+Rule   StJohns 1987    max     -       Oct     lastSun 0:01    0       S
 Rule   StJohns 1988    only    -       Apr     Sun>=1  0:01    2:00    DD
-Rule   StJohns 1989    2006    -       Apr     Sun>=1  0:01    1:00    D
-Rule   StJohns 2007    max     -       Mar     Sun>=8  0:01    1:00    D
-Rule   StJohns 2007    max     -       Nov     Sun>=1  0:01    0       S
-#
+Rule   StJohns 1989    max     -       Apr     Sun>=1  0:01    1:00    D
 # St John's has an apostrophe, but Posix file names can't have apostrophes.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/St_Johns  -3:30:52 -      LMT     1884
@@ -1033,13 +989,12 @@ Zone America/Goose_Bay   -4:01:40 -      LMT     1884 # Happy Valley-Goose Bay
 
 # west Labrador, Nova Scotia, Prince Edward I
 
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that since 1970 most of this region has been like
-# Halifax.  Many locales did not observe peacetime DST until 1972;
+# From Paul Eggert (1996-06-12):
+# Shanks writes that since 1970 most of this region has been like Halifax.
+# Many locales did not observe peacetime DST until 1972;
 # Glace Bay, NS is the largest that we know of.
-# Shanks & Pottenger also write that Liverpool, NS was the only town
-# in Canada to observe DST in 1971 but not 1970; for now we'll assume
-# this is a typo.
+# Shanks also writes that Liverpool, NS was the only town in Canada to observe
+# DST in 1971 but not 1970; for now we'll assume this is a typo.
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Halifax 1916    only    -       Apr      1      0:00    1:00    D
@@ -1105,7 +1060,10 @@ Zone America/Glace_Bay   -3:59:48 -      LMT     1902 Jun 15
 # <http://www.gnb.ca/0062/PDF-acts/t-06.pdf> says they change at 00:01, and
 # <http://www.canlii.org/nb/laws/sta/t-6/20030127/whole.html> makes it
 # clear that this has been the case since at least 1993.
-# For now, assume it started in 1993.
+# For now, assume it started in 1993.  The Office of the Premier announced
+# <http://www.gnb.ca/cnb/news/pre/2005e1737pr.htm> (2005-12-23)
+# that they will bring forward proposed amendments to harmonize with the US;
+# for now assume that this will happen, but they'll still switch at 00:01.
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Moncton 1933    1935    -       Jun     Sun>=8  1:00    1:00    D
@@ -1118,9 +1076,11 @@ Rule     Moncton 1940    only    -       May     19      1:00    1:00    D
 Rule   Moncton 1941    only    -       May      4      1:00    1:00    D
 Rule   Moncton 1946    1972    -       Apr     lastSun 2:00    1:00    D
 Rule   Moncton 1946    1956    -       Sep     lastSun 2:00    0       S
-Rule   Moncton 1957    1972    -       Oct     lastSun 2:00    0       S
+Rule   Moncton 1956    1972    -       Oct     lastSun 2:00    0       S
 Rule   Moncton 1993    2006    -       Apr     Sun>=1  0:01    1:00    D
 Rule   Moncton 1993    2006    -       Oct     lastSun 0:01    0       S
+Rule   Moncton 2007    max     -       Mar     Sun>=8  0:01    1:00    D
+Rule   Moncton 2007    max     -       Nov     Sun>=1  0:01    0       S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Moncton   -4:19:08 -      LMT     1883 Dec  9
                        -5:00   -       EST     1902 Jun 15
@@ -1129,79 +1089,13 @@ Zone America/Moncton    -4:19:08 -      LMT     1883 Dec  9
                        -4:00   Canada  A%sT    1946
                        -4:00   Moncton A%sT    1973
                        -4:00   Canada  A%sT    1993
-                       -4:00   Moncton A%sT    2007
-                       -4:00   Canada  A%sT
+                       -4:00   Moncton A%sT
 
-# Quebec
-
-# From Paul Eggert (2006-07-09):
-# Shanks & Pottenger write that since 1970 most of Quebec has been
-# like Montreal.
-
-# From Paul Eggert (2006-06-27):
-# Matthews and Vincent (1998) also write that Quebec east of the -63
-# meridian is supposed to observe AST, but residents as far east as
-# Natashquan use EST/EDT, and residents east of Natashquan use AST.
-# In "Official time in Quebec" the Quebec department of justice writes in
-# http://www.justice.gouv.qc.ca/english/publications/generale/temps-regl-1-a.htm
-# that "The residents of the Municipality of the
-# Cote-Nord-du-Golfe-Saint-Laurent and the municipalities of Saint-Augustin,
-# Bonne-Esperance and Blanc-Sablon apply the Official Time Act as it is
-# written and use Atlantic standard time all year round. The same applies to
-# the residents of the Native facilities along the lower North Shore."
-# <http://www.assnat.qc.ca/eng/37legislature2/Projets-loi/Publics/06-a002.htm>
-# says this common practice was codified into law as of 2007.
-# For lack of better info, guess this practice began around 1970, contra to
-# Shanks & Pottenger who have this region observing AST/ADT.
+# Ontario, Quebec
 
-# Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-Rule   Mont    1917    only    -       Mar     25      2:00    1:00    D
-Rule   Mont    1917    only    -       Apr     24      0:00    0       S
-Rule   Mont    1919    only    -       Mar     31      2:30    1:00    D
-Rule   Mont    1919    only    -       Oct     25      2:30    0       S
-Rule   Mont    1920    only    -       May      2      2:30    1:00    D
-Rule   Mont    1920    1922    -       Oct     Sun>=1  2:30    0       S
-Rule   Mont    1921    only    -       May      1      2:00    1:00    D
-Rule   Mont    1922    only    -       Apr     30      2:00    1:00    D
-Rule   Mont    1924    only    -       May     17      2:00    1:00    D
-Rule   Mont    1924    1926    -       Sep     lastSun 2:30    0       S
-Rule   Mont    1925    1926    -       May     Sun>=1  2:00    1:00    D
-# The 1927-to-1937 rules can be expressed more simply as
-# Rule Mont    1927    1937    -       Apr     lastSat 24:00   1:00    D
-# Rule Mont    1927    1937    -       Sep     lastSat 24:00   0       S
-# The rules below avoid use of 24:00
-# (which pre-1998 versions of zic cannot handle).
-Rule   Mont    1927    only    -       May     1       0:00    1:00    D
-Rule   Mont    1927    1932    -       Sep     lastSun 0:00    0       S
-Rule   Mont    1928    1931    -       Apr     lastSun 0:00    1:00    D
-Rule   Mont    1932    only    -       May     1       0:00    1:00    D
-Rule   Mont    1933    1940    -       Apr     lastSun 0:00    1:00    D
-Rule   Mont    1933    only    -       Oct     1       0:00    0       S
-Rule   Mont    1934    1939    -       Sep     lastSun 0:00    0       S
-Rule   Mont    1946    1973    -       Apr     lastSun 2:00    1:00    D
-Rule   Mont    1945    1948    -       Sep     lastSun 2:00    0       S
-Rule   Mont    1949    1950    -       Oct     lastSun 2:00    0       S
-Rule   Mont    1951    1956    -       Sep     lastSun 2:00    0       S
-Rule   Mont    1957    1973    -       Oct     lastSun 2:00    0       S
-
-# Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-Zone America/Blanc-Sablon -3:48:28 -   LMT     1884
-                       -4:00   Canada  A%sT    1970
-                       -4:00   -       AST
-Zone America/Montreal  -4:54:16 -      LMT     1884
-                       -5:00   Mont    E%sT    1918
-                       -5:00   Canada  E%sT    1919
-                       -5:00   Mont    E%sT    1942 Feb  9 2:00s
-                       -5:00   Canada  E%sT    1946
-                       -5:00   Mont    E%sT    1974
-                       -5:00   Canada  E%sT
-
-
-# Ontario
-
-# From Paul Eggert (2006-07-09):
-# Shanks & Pottenger write that since 1970 most of Ontario has been like
-# Toronto.
+# From Paul Eggert (1996-06-12):
+# Shanks writes that since 1970 most of Ontario has been like Toronto,
+# and most of Quebec has been like Montreal.
 # Thunder Bay skipped DST in 1973.
 # Many smaller locales did not observe peacetime DST until 1974;
 # Nipigon (EST) and Rainy River (CST) are the largest that we know of.
@@ -1231,46 +1125,50 @@ Zone America/Montreal   -4:54:16 -      LMT     1884
 # says that Ontario east of 90W uses EST/EDT, and west of 90W uses CST/CDT.
 # Officially Atikokan is therefore on CST/CDT, and most likely this report
 # concerns a non-official time observed as a matter of local practice.
-#
+# For what it's worth, Shanks says that Atikokan has agreed with
+# Rainy River ever since standard time was introduced.
+
 # From Paul Eggert (2000-10-02):
 # Matthews and Vincent (1998) write that Atikokan, Pickle Lake, and
 # New Osnaburgh observe CST all year, that Big Trout Lake observes
 # CST/CDT, and that Upsala and Shebandowan observe EST/EDT, all in
 # violation of the official Ontario rules.
-#
-# From Paul Eggert (2006-07-09):
-# Chris Walton (2006-07-06) mentioned an article by Stephanie MacLellan in the
-# 2005-07-21 Chronicle-Journal, which said:
-#
-#      The clocks in Atikokan stay set on standard time year-round.
-#      This means they spend about half the time on central time and
-#      the other half on eastern time.
-#
-#      For the most part, the system works, Mayor Dennis Brown said.
-#
-#      "The majority of businesses in Atikokan deal more with Eastern
-#      Canada, but there are some that deal with Western Canada," he
-#      said.  "I don't see any changes happening here."
-#
-# Walton also writes "Supposedly Pickle Lake and Mishkeegogamang
-# [New Osnaburgh] follow the same practice."
-
-# From Garry McKinnon (2006-07-14) via Chris Walton:
-# I chatted with a member of my board who has an outstanding memory
-# and a long history in Atikokan (and in the telecom industry) and he
-# can say for certain that Atikokan has been practicing the current
-# time keeping since 1952, at least.
-
-# From Paul Eggert (2006-07-17):
-# Shanks & Pottenger say that Atikokan has agreed with Rainy River
-# ever since standard time was introduced, but the information from
-# McKinnon sounds more authoritative.  For now, assume that Atikokan
-# switched to EST immediately after WWII era daylight saving time
-# ended.  This matches the old (less-populous) America/Coral_Harbour
-# entry since our cutoff date of 1970, so we can move
-# America/Coral_Harbour to the 'backward' file.
+# They also write that Quebec east of the -63 meridian is supposed to
+# observe AST, but residents as far east as Natashquan use EST/EDT,
+# and residents east of Natashquan use AST.
+# We probably need Zones for far east Quebec and for Atikokan,
+# but we don't know when their practices started.
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
+Rule   Mont    1917    only    -       Mar     25      2:00    1:00    D
+Rule   Mont    1917    only    -       Apr     24      0:00    0       S
+Rule   Mont    1919    only    -       Mar     31      2:30    1:00    D
+Rule   Mont    1919    only    -       Oct     25      2:30    0       S
+Rule   Mont    1920    only    -       May      2      2:30    1:00    D
+Rule   Mont    1920    1922    -       Oct     Sun>=1  2:30    0       S
+Rule   Mont    1921    only    -       May      1      2:00    1:00    D
+Rule   Mont    1922    only    -       Apr     30      2:00    1:00    D
+Rule   Mont    1924    only    -       May     17      2:00    1:00    D
+Rule   Mont    1924    1926    -       Sep     lastSun 2:30    0       S
+Rule   Mont    1925    1926    -       May     Sun>=1  2:00    1:00    D
+# The 1927-to-1937 rules can be expressed more simply as
+# Rule Mont    1927    1937    -       Apr     lastSat 24:00   1:00    D
+# Rule Mont    1927    1937    -       Sep     lastSat 24:00   0       S
+# The rules below avoid use of 24:00
+# (which pre-1998 versions of zic cannot handle).
+Rule   Mont    1927    only    -       May     1       0:00    1:00    D
+Rule   Mont    1927    1932    -       Sep     lastSun 0:00    0       S
+Rule   Mont    1928    1931    -       Apr     lastSun 0:00    1:00    D
+Rule   Mont    1932    only    -       May     1       0:00    1:00    D
+Rule   Mont    1933    1940    -       Apr     lastSun 0:00    1:00    D
+Rule   Mont    1933    only    -       Oct     1       0:00    0       S
+Rule   Mont    1934    1939    -       Sep     lastSun 0:00    0       S
+Rule   Mont    1946    1973    -       Apr     lastSun 2:00    1:00    D
+Rule   Mont    1945    1948    -       Sep     lastSun 2:00    0       S
+Rule   Mont    1949    1950    -       Oct     lastSun 2:00    0       S
+Rule   Mont    1951    1956    -       Sep     lastSun 2:00    0       S
+Rule   Mont    1957    1973    -       Oct     lastSun 2:00    0       S
+
 Rule   Toronto 1919    only    -       Mar     30      23:30   1:00    D
 Rule   Toronto 1919    only    -       Oct     26      0:00    0       S
 Rule   Toronto 1920    only    -       May      2      2:00    1:00    D
@@ -1278,8 +1176,7 @@ Rule      Toronto 1920    only    -       Sep     26      0:00    0       S
 Rule   Toronto 1921    only    -       May     15      2:00    1:00    D
 Rule   Toronto 1921    only    -       Sep     15      2:00    0       S
 Rule   Toronto 1922    1923    -       May     Sun>=8  2:00    1:00    D
-# Shanks & Pottenger say 1923-09-19; assume it's a typo and that "-16"
-# was meant.
+# Shanks says 1923-09-19; assume it's a typo and that "-16" was meant.
 Rule   Toronto 1922    1926    -       Sep     Sun>=15 2:00    0       S
 Rule   Toronto 1924    1927    -       May     Sun>=1  2:00    1:00    D
 # The 1927-to-1939 rules can be expressed more simply as
@@ -1303,10 +1200,9 @@ Rule     Toronto 1949    only    -       Nov     lastSun 0:00    0       S
 Rule   Toronto 1950    1973    -       Apr     lastSun 2:00    1:00    D
 Rule   Toronto 1950    only    -       Nov     lastSun 2:00    0       S
 Rule   Toronto 1951    1956    -       Sep     lastSun 2:00    0       S
-# Shanks & Pottenger say Toronto ended DST a week early in 1971,
-# namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that this
-# is wrong, and that he had confirmed it by checking the 1971-10-30
-# Toronto Star, which said that DST was ending 1971-10-31 as usual.
+# Shanks says Toronto ended DST a week early in 1971, namely on 1971-10-24,
+# but Mark Brader wrote (2003-05-31) that he checked the 1971-10-30 issue
+# of the Toronto Star, and it said that DST ended 1971-10-31 as usual.
 Rule   Toronto 1957    1973    -       Oct     lastSun 2:00    0       S
 
 # From Paul Eggert (2003-07-27):
@@ -1328,6 +1224,13 @@ Rule     Toronto 1957    1973    -       Oct     lastSun 2:00    0       S
 # months for the remainder of the war years.
 
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
+Zone America/Montreal  -4:54:16 -      LMT     1884
+                       -5:00   Mont    E%sT    1918
+                       -5:00   Canada  E%sT    1919
+                       -5:00   Mont    E%sT    1942 Feb  9 2:00s
+                       -5:00   Canada  E%sT    1946
+                       -5:00   Mont    E%sT    1974
+                       -5:00   Canada  E%sT
 Zone America/Toronto   -5:17:32 -      LMT     1895
                        -5:00   Canada  E%sT    1919
                        -5:00   Toronto E%sT    1942 Feb  9 2:00s
@@ -1345,38 +1248,14 @@ Zone America/Nipigon    -5:53:04 -      LMT     1895
                        -5:00   Canada  E%sT    1940 Sep 29
                        -5:00   1:00    EDT     1942 Feb  9 2:00s
                        -5:00   Canada  E%sT
-Zone America/Rainy_River -6:18:16 -    LMT     1895
+Zone America/Rainy_River -6:17:56 -    LMT     1895
                        -6:00   Canada  C%sT    1940 Sep 29
                        -6:00   1:00    CDT     1942 Feb  9 2:00s
                        -6:00   Canada  C%sT
-Zone America/Atikokan  -6:06:28 -      LMT     1895
-                       -6:00   Canada  C%sT    1940 Sep 29
-                       -6:00   1:00    CDT     1942 Feb  9 2:00s
-                       -6:00   Canada  C%sT    1945 Sep 30 2:00
-                       -5:00   -       EST
 
 
 # Manitoba
 
-# From Rob Douglas (2006-04-06):
-# the old Manitoba Time Act - as amended by Bill 2, assented to
-# March 27, 1987 ... said ...
-# "between two o'clock Central Standard Time in the morning of
-# the first Sunday of April of each year and two o'clock Central
-# Standard Time in the morning of the last Sunday of October next
-# following, one hour in advance of Central Standard Time."...
-# I believe that the English legislation [of the old time act] had =
-# been assented to (March 22, 1967)....
-# Also, as far as I can tell, there was no order-in-council varying
-# the time of Daylight Saving Time for 2005 and so the provisions of
-# the 1987 version would apply - the changeover was at 2:00 Central
-# Standard Time (i.e. not until 3:00 Central Daylight Time).
-
-# From Paul Eggert (2006-04-10):
-# Shanks & Pottenger say Manitoba switched at 02:00 (not 02:00s)
-# starting 1966.  Since 02:00s is clearly correct for 1967 on, assume
-# it was also 02:00s in 1966.
-
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Winn    1916    only    -       Apr     23      0:00    1:00    D
 Rule   Winn    1916    only    -       Sep     17      0:00    0       S
@@ -1399,13 +1278,18 @@ Rule    Winn    1959    only    -       Oct     lastSun 2:00    0       S
 Rule   Winn    1960    only    -       Sep     lastSun 2:00    0       S
 Rule   Winn    1963    only    -       Apr     lastSun 2:00    1:00    D
 Rule   Winn    1963    only    -       Sep     22      2:00    0       S
-Rule   Winn    1966    1986    -       Apr     lastSun 2:00s   1:00    D
-Rule   Winn    1966    2005    -       Oct     lastSun 2:00s   0       S
-Rule   Winn    1987    2005    -       Apr     Sun>=1  2:00s   1:00    D
+Rule   Winn    1966    1986    -       Apr     lastSun 2:00    1:00    D
+Rule   Winn    1966    1986    -       Oct     lastSun 2:00    0       S
+Rule   Winn    1987    2006    -       Apr     Sun>=1  2:00s   1:00    D
+# From Paul Eggert (2000-10-02):
+# INMS (2000-09-12) says that, since 1988 at least, Manitoba switches from
+# DST at 03:00 local time.  For now, assume it started in 1987.
+Rule   Winn    1987    2006    -       Oct     lastSun 2:00s   0       S
+Rule   Winn    2007    max     -       Mar     Sun>=8  2:00s   1:00    D
+Rule   Winn    2007    max     -       Nov     Sun>=1  2:00s   0       S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Winnipeg  -6:28:36 -      LMT     1887 Jul 16
-                       -6:00   Winn    C%sT    2006
-                       -6:00   Canada  C%sT
+                       -6:00   Winn    C%sT
 
 
 # Saskatchewan
@@ -1424,8 +1308,8 @@ Zone America/Winnipeg     -6:28:36 -      LMT     1887 Jul 16
 # Willett (1914-03) notes that DST "has been in operation ... in the
 # City of Moose Jaw, Saskatchewan, for one year."
 
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say that since 1970 this region has mostly been as Regina.
+# From Paul Eggert (2000-10-02):
+# Shanks writes that since 1970 most of this region has been like Regina.
 # Some western towns (e.g. Swift Current) switched from MST/MDT to CST in 1972.
 # Other western towns (e.g. Lloydminster) are like Edmonton.
 # Matthews and Vincent (1998) write that Denare Beach and Creighton
@@ -1457,11 +1341,6 @@ Zone America/Winnipeg    -6:28:36 -      LMT     1887 Jul 16
 # rules any more; all other districts appear to have used CST year round
 # since sometime in the 1960s.
 
-# From Chris Walton (2006-06-26):
-# The Saskatchewan time act which was last updated in 1996 is about 30 pages
-# long and rather painful to read.
-# http://www.qp.gov.sk.ca/documents/English/Statutes/Statutes/T14.pdf
-
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Regina  1918    only    -       Apr     14      2:00    1:00    D
 Rule   Regina  1918    only    -       Oct     31      2:00    0       S
@@ -1516,18 +1395,17 @@ Rule    Edm     1967    only    -       Oct     lastSun 2:00    0       S
 Rule   Edm     1969    only    -       Apr     lastSun 2:00    1:00    D
 Rule   Edm     1969    only    -       Oct     lastSun 2:00    0       S
 Rule   Edm     1972    1986    -       Apr     lastSun 2:00    1:00    D
-Rule   Edm     1972    2006    -       Oct     lastSun 2:00    0       S
+Rule   Edm     1972    max     -       Oct     lastSun 2:00    0       S
+Rule   Edm     1987    max     -       Apr     Sun>=1  2:00    1:00    D
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Edmonton  -7:33:52 -      LMT     1906 Sep
-                       -7:00   Edm     M%sT    1987
-                       -7:00   Canada  M%sT
+                       -7:00   Edm     M%sT
 
 
 # British Columbia
 
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger write that since 1970 most of this region has
-# been like Vancouver.
+# From Paul Eggert (2000-10-02):
+# Shanks writes that since 1970 most of this region has been like Vancouver.
 # Dawson Creek uses MST.  Much of east BC is like Edmonton.
 # Matthews and Vincent (1998) write that Creston is like Dawson Creek.
 
@@ -1540,11 +1418,11 @@ Rule    Vanc    1945    only    -       Sep     30      2:00    0       S
 Rule   Vanc    1946    1986    -       Apr     lastSun 2:00    1:00    D
 Rule   Vanc    1946    only    -       Oct     13      2:00    0       S
 Rule   Vanc    1947    1961    -       Sep     lastSun 2:00    0       S
-Rule   Vanc    1962    2006    -       Oct     lastSun 2:00    0       S
+Rule   Vanc    1962    max     -       Oct     lastSun 2:00    0       S
+Rule   Vanc    1987    max     -       Apr     Sun>=1  2:00    1:00    D
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Vancouver -8:12:28 -      LMT     1884
-                       -8:00   Vanc    P%sT    1987
-                       -8:00   Canada  P%sT
+                       -8:00   Vanc    P%sT
 Zone America/Dawson_Creek -8:00:56 -   LMT     1884
                        -8:00   Canada  P%sT    1947
                        -8:00   Vanc    P%sT    1972 Aug 30 2:00
@@ -1553,7 +1431,7 @@ Zone America/Dawson_Creek -8:00:56 -      LMT     1884
 
 # Northwest Territories, Nunavut, Yukon
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (1999-10-29):
 # Dawson switched to PST in 1973.  Inuvik switched to MST in 1979.
 # Mathew Englander (1996-10-07) gives the following refs:
 #      * 1967. Paragraph 28(34)(g) of the Interpretation Act, S.C. 1967-68,
@@ -1562,12 +1440,7 @@ Zone America/Dawson_Creek -8:00:56 -     LMT     1884
 #      * C.O. 1973/214 switched Yukon to PST on 1973-10-28 00:00.
 #      * O.I.C. 1980/02 established DST.
 #      * O.I.C. 1987/056 changed DST to Apr firstSun 2:00 to Oct lastSun 2:00.
-# Shanks & Pottenger say Yukon's 1973-10-28 switch was at 2:00; go
-# with Englander.
-# From Chris Walton (2006-06-26):
-# Here is a link to the old daylight saving portion of the interpretation
-# act which was last updated in 1987:
-# http://www.gov.yk.ca/legislation/regs/oic1987_056.pdf
+# Shanks says Yukon's 1973-10-28 switch was at 2:00; go with Englander.
 
 # From Rives McDow (1999-09-04):
 # Nunavut ... moved ... to incorporate the whole territory into one time zone.
@@ -1676,10 +1549,6 @@ Zone America/Dawson_Creek -8:00:56 -     LMT     1884
 # For lack of better information, assume that Southampton Island observed
 # daylight saving only during wartime.
 
-# From Chris Walton (2006-07-19):
-# The government of Yukon Territory ... recently announced it will extend
-# daylight saving in 2007....  http://www.gov.yk.ca/news/2006/06-164.html
-
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   NT_YK   1918    only    -       Apr     14      2:00    1:00    D
 Rule   NT_YK   1918    only    -       Oct     27      2:00    0       S
@@ -1691,8 +1560,8 @@ Rule      NT_YK   1945    only    -       Sep     30      2:00    0       S
 Rule   NT_YK   1965    only    -       Apr     lastSun 0:00    2:00    DD
 Rule   NT_YK   1965    only    -       Oct     lastSun 2:00    0       S
 Rule   NT_YK   1980    1986    -       Apr     lastSun 2:00    1:00    D
-Rule   NT_YK   1980    2006    -       Oct     lastSun 2:00    0       S
-Rule   NT_YK   1987    2006    -       Apr     Sun>=1  2:00    1:00    D
+Rule   NT_YK   1980    max     -       Oct     lastSun 2:00    0       S
+Rule   NT_YK   1987    max     -       Apr     Sun>=1  2:00    1:00    D
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Pangnirtung -4:22:56 -    LMT     1884
                        -4:00   NT_YK   A%sT    1995 Apr Sun>=1 2:00
@@ -1703,11 +1572,10 @@ Zone America/Iqaluit    -4:33:52 -      LMT     1884 # Frobisher Bay before 1987
                        -5:00   NT_YK   E%sT    1999 Oct 31 2:00
                        -6:00   Canada  C%sT    2000 Oct 29 2:00
                        -5:00   Canada  E%sT
-# Now subsumed by America/Atikokan.
-#Zone America/Coral_Harbour -5:32:40 - LMT     1884
-#                      -5:00   NT_YK   E%sT    1946
-#                      -5:00   -       EST
-Zone America/Rankin_Inlet -6:08:20 -   LMT     1884
+Zone America/Coral_Harbour -5:32:40 -  LMT     1884
+                       -5:00   NT_YK   E%sT    1946
+                       -5:00   -       EST
+Zone America/Rankin_Inlet -6:08:40 -   LMT     1884
                        -6:00   NT_YK   C%sT    2000 Oct 29 2:00
                        -5:00   -       EST     2001 Apr  1 3:00
                        -6:00   Canada  C%sT
@@ -1718,20 +1586,16 @@ Zone America/Cambridge_Bay -7:00:20 -   LMT     1884
                        -6:00   -       CST     2001 Apr  1 3:00
                        -7:00   Canada  M%sT
 Zone America/Yellowknife -7:37:24 -    LMT     1884
-                       -7:00   NT_YK   M%sT    1980
-                       -7:00   Canada  M%sT
-Zone America/Inuvik    -8:54:52 -      LMT     1884
+                       -7:00   NT_YK   M%sT
+Zone America/Inuvik    -8:54:00 -      LMT     1884
                        -8:00   NT_YK   P%sT    1979 Apr lastSun 2:00
-                       -7:00   NT_YK   M%sT    1980
-                       -7:00   Canada  M%sT
+                       -7:00   NT_YK   M%sT
 Zone America/Whitehorse        -9:00:12 -      LMT     1900 Aug 20
                        -9:00   NT_YK   Y%sT    1966 Jul 1 2:00
-                       -8:00   NT_YK   P%sT    1980
-                       -8:00   Canada  P%sT
+                       -8:00   NT_YK   P%sT
 Zone America/Dawson    -9:17:40 -      LMT     1900 Aug 20
                        -9:00   NT_YK   Y%sT    1973 Oct 28 0:00
-                       -8:00   NT_YK   P%sT    1980
-                       -8:00   Canada  P%sT
+                       -8:00   NT_YK   P%sT
 
 
 ###############################################################################
@@ -1745,12 +1609,16 @@ Zone America/Dawson     -9:17:40 -      LMT     1900 Aug 20
 # history of Mexican local time (in Spanish)
 # </a>.
 #
-# Here are the discrepancies between Shanks & Pottenger (S&P) and the MLoC.
+# Here are the discrepancies between Shanks and the MLoC.
 # (In all cases we go with the MLoC.)
-# S&P report that Baja was at -8:00 in 1922/1923.
-# S&P say the 1930 transition in Baja was 1930-11-16.
-# S&P report no DST during summer 1931.
-# S&P report a transition at 1932-03-30 23:00, not 1932-04-01.
+# Shanks reports that Baja was at -8:00 in 1922/1923.
+# Shanks says the 1930 transition in Baja was 1930-11-16.
+# Shanks reports no DST during summer 1931.
+# Shanks reports a transition at 1932-03-30 23:00, not 1932-04-01.
+# Shanks does not report transitions for Baja in 1945 or 1948.
+# Shanks reports southern Mexico transitions on 1981-12-01, not 12-23.
+# Shanks says Quintana Roo switched to -6:00 on 1982-12-02, and to -5:00
+# on 1997-10-26 at 02:00.
 
 # From Gwillim Law (2001-02-20):
 # There are some other discrepancies between the Decrees page and the
@@ -1758,6 +1626,10 @@ Zone America/Dawson      -9:17:40 -      LMT     1900 Aug 20
 # the researchers who prepared the Decrees page failed to find some of
 # the relevant documents.
 
+# From Paul Eggert (2000-07-26):
+# Shanks gives 1942-04-01 instead of 1942-04-24, and omits the 1981
+# and 1988 DST experiments.  Go with spin.com.mx.
+
 # From Alan Perry (1996-02-15):
 # A guy from our Mexico subsidiary finally found the Presidential Decree
 # outlining the timezone changes in Mexico.
@@ -1957,8 +1829,7 @@ Zone America/Tijuana      -7:48:04 -      LMT     1922 Jan  1  0:11:56
                        -8:00   -       PST     1931 Apr  1
                        -8:00   1:00    PDT     1931 Sep 30
                        -8:00   -       PST     1942 Apr 24
-                       -8:00   1:00    PWT     1945 Aug 14 23:00u
-                       -8:00   1:00    PPT     1945 Nov 12 # Peace
+                       -8:00   1:00    PWT     1945 Nov 12
                        -8:00   -       PST     1948 Apr  5
                        -8:00   1:00    PDT     1949 Jan 14
                        -8:00   -       PST     1954
@@ -1968,13 +1839,12 @@ Zone America/Tijuana    -7:48:04 -      LMT     1922 Jan  1  0:11:56
                        -8:00   Mexico  P%sT    2001
                        -8:00   US      P%sT    2002 Feb 20
                        -8:00   Mexico  P%sT
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2001-03-05):
 # Formerly there was an America/Ensenada zone, which differed from
 # America/Tijuana only in that it did not observe DST from 1976
-# through 1995.  This was as per Shanks (1999).  But Shanks & Pottenger say
-# Ensenada did not observe DST from 1948 through 1975.  Guy Harris reports
+# through 1995.  This was as per Shanks.  However, Guy Harris reports
 # that the 1987 OAG says "Only Ensenada, Mexicale, San Felipe and
-# Tijuana observe DST," which agrees with Shanks & Pottenger but implies that
+# Tijuana observe DST," which contradicts Shanks but does imply that
 # DST-observance was a town-by-town matter back then.  This concerns
 # data after 1970 so most likely there should be at least one Zone
 # other than America/Tijuana for Baja, but it's not clear yet what its
@@ -2018,7 +1888,7 @@ Zone America/Barbados     -3:58:28 -      LMT     1924            # Bridgetown
                        -4:00   Barb    A%sT
 
 # Belize
-# Whitman entirely disagrees with Shanks; go with Shanks & Pottenger.
+# Whitman entirely disagrees with Shanks; go with Shanks.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Belize  1918    1942    -       Oct     Sun>=2  0:00    0:30    HD
 Rule   Belize  1919    1943    -       Feb     Sun>=9  0:00    0       S
@@ -2031,20 +1901,10 @@ Zone    America/Belize  -5:52:48 -      LMT     1912 Apr
                        -6:00   Belize  C%sT
 
 # Bermuda
-
-# From Dan Jones, reporting in The Royal Gazette (2006-06-26):
-
-# Next year, however, clocks in the US will go forward on the second Sunday
-# in March, until the first Sunday in November.  And, after the Time Zone
-# (Seasonal Variation) Bill 2006 was passed in the House of Assembly on
-# Friday, the same thing will happen in Bermuda.
-# http://www.theroyalgazette.com/apps/pbcs.dll/article?AID=/20060529/NEWS/105290135
-
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone Atlantic/Bermuda  -4:19:04 -      LMT     1930 Jan  1 2:00    # Hamilton
                        -4:00   -       AST     1974 Apr 28 2:00
-                       -4:00   Bahamas A%sT    1976
-                       -4:00   US      A%sT
+                       -4:00   Bahamas A%sT
 
 # Cayman Is
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -2057,8 +1917,7 @@ Zone      America/Cayman  -5:25:32 -      LMT     1890            # Georgetown
 Rule   CR      1979    1980    -       Feb     lastSun 0:00    1:00    D
 Rule   CR      1979    1980    -       Jun     Sun>=1  0:00    0       S
 Rule   CR      1991    1992    -       Jan     Sat>=15 0:00    1:00    D
-# IATA SSIM (1991-09) says the following was at 1:00;
-# go with Shanks & Pottenger.
+# IATA SSIM (1991-09) says the following was at 1:00; go with Shanks.
 Rule   CR      1991    only    -       Jul      1      0:00    0       S
 Rule   CR      1992    only    -       Mar     15      0:00    0       S
 # There are too many San Joses elsewhere, so we'll use `Costa Rica'.
@@ -2084,26 +1943,18 @@ Zone America/Costa_Rica -5:36:20 -      LMT     1890            # San Jose
 
 # From Evert van der Veer via Steffen Thorsen (2004-10-28):
 # Cuba is not going back to standard time this year.
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2004-10-28):
 # http://www.granma.cu/ingles/2004/septiembre/juev30/41medid-i.html
 # says that it's due to a problem at the Antonio Guiteras
 # thermoelectric plant, and says "This October there will be no return
 # to normal hours (after daylight saving time)".
-# For now, let's assume that it's a temporary measure.
+# For now, let's assume that it's a one-year temporary measure.
 
 # From Carlos A. Carnero Delgado (2005-11-12):
 # This year (just like in 2004-2005) there's no change in time zone
 # adjustment in Cuba.  We will stay in daylight saving time:
 # http://www.granma.cu/espanol/2005/noviembre/mier9/horario.html
 
-# From Jesper Norgaard Welen (2006-10-21):
-# An article in GRANMA INTERNACIONAL claims that Cuba will end
-# the 3 years of permanent DST next weekend, see
-# http://www.granma.cu/ingles/2006/octubre/lun16/43horario.html
-# "On Saturday night, October 28 going into Sunday, October 29, at 01:00,
-# watches should be set back one hour -- going back to 00:00 hours -- returning
-# to the normal schedule....
-
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Cuba    1928    only    -       Jun     10      0:00    1:00    D
 Rule   Cuba    1928    only    -       Oct     10      0:00    0       S
@@ -2182,7 +2033,6 @@ Zone America/Santo_Domingo -4:39:36 -     LMT     1890
                        -4:00   -       AST
 
 # El Salvador
-
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Salv    1987    1988    -       May     Sun>=1  0:00    1:00    D
 Rule   Salv    1987    1988    -       Sep     lastSun 0:00    0       S
@@ -2203,19 +2053,6 @@ Zone America/Guadeloupe  -4:06:08 -      LMT     1911 Jun 8      # Pointe a Pitre
                        -4:00   -       AST
 
 # Guatemala
-#
-# From Gwillim Law (2006-04-22), after a heads-up from Oscar van Vlijmen:
-# Diario Co Latino, at
-# http://www.diariocolatino.com/internacionales/detalles.asp?NewsID=8079,
-# says in an article dated 2006-04-19 that the Guatemalan government had
-# decided on that date to advance official time by 60 minutes, to lessen the
-# impact of the elevated cost of oil....  Daylight saving time will last from
-# 2006-04-29 24:00 (Guatemalan standard time) to 2006-09-30 (time unspecified).
-# From Paul Eggert (2006-06-22):
-# The Ministry of Energy and Mines, press release CP-15/2006
-# (2006-04-19), says DST ends at 24:00.  See
-# <http://www.sieca.org.gt/Sitio_publico/Energeticos/Doc/Medidas/Cambio_Horario_Nac_190406.pdf>.
-
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Guat    1973    only    -       Nov     25      0:00    1:00    D
 Rule   Guat    1974    only    -       Feb     24      0:00    0       S
@@ -2223,8 +2060,6 @@ Rule      Guat    1983    only    -       May     21      0:00    1:00    D
 Rule   Guat    1983    only    -       Sep     22      0:00    0       S
 Rule   Guat    1991    only    -       Mar     23      0:00    1:00    D
 Rule   Guat    1991    only    -       Sep      7      0:00    0       S
-Rule   Guat    2006    only    -       Apr     30      0:00    1:00    D
-Rule   Guat    2006    only    -       Oct      1      0:00    0       S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Guatemala -6:02:04 -      LMT     1918 Oct 5
                        -6:00   Guat    C%sT
@@ -2249,67 +2084,26 @@ Zone America/Guatemala  -6:02:04 -      LMT     1918 Oct 5
 #   October 2005.
 #
 #  "Port-au-Prince, March 31, 2005"
-#
-# From Steffen Thorsen (2006-04-04):
-# I have been informed by users that Haiti observes DST this year like
-# last year, so the current "only" rule for 2005 might be changed to a
-# "max" rule or to last until 2006. (Who knows if they will observe DST
-# next year or if they will extend their DST like US/Canada next year).
-#
-# I have found this article about it (in French):
-# http://www.haitipressnetwork.com/news.cfm?articleID=7612
-#
-# The reason seems to be an energy crisis.
-
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Haiti   1983    only    -       May     8       0:00    1:00    D
 Rule   Haiti   1984    1987    -       Apr     lastSun 0:00    1:00    D
 Rule   Haiti   1983    1987    -       Oct     lastSun 0:00    0       S
-# Shanks & Pottenger say AT is 2:00, but IATA SSIM (1991/1997) says 1:00s.
-# Go with IATA.
+# Shanks says AT is 2:00, but IATA SSIM (1991/1997) says 1:00s.  Go with IATA.
 Rule   Haiti   1988    1997    -       Apr     Sun>=1  1:00s   1:00    D
 Rule   Haiti   1988    1997    -       Oct     lastSun 1:00s   0       S
-Rule   Haiti   2005    max     -       Apr     Sun>=1  0:00    1:00    D
-Rule   Haiti   2005    max     -       Oct     lastSun 0:00    0       S
+Rule   Haiti   2005    only    -       Apr     Sun>=1  0:00    1:00    D
+Rule   Haiti   2005    only    -       Oct     lastSun 0:00    0       S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Port-au-Prince -4:49:20 - LMT     1890
                        -4:49   -       PPMT    1917 Jan 24 12:00 # P-a-P MT
                        -5:00   Haiti   E%sT
 
 # Honduras
-# Shanks & Pottenger say 1921 Jan 1; go with Whitman's more precise Apr 1.
-
-# From Paul Eggert (2006-05-05):
-# worldtimezone.com reports a 2006-05-02 Spanish-language AP article
-# saying Honduras will start using DST midnight Saturday, effective 4
-# months until September.  La Tribuna reported today
-# <http://www.latribuna.hn/99299.html> that Manuel Zelaya, the president
-# of Honduras, refused to back down on this.
-
-# From Jesper Norgaard Welen (2006-08-08):
-# It seems that Honduras has returned from DST to standard time this Monday at
-# 00:00 hours (prolonging Sunday to 25 hours duration).
-# http://www.worldtimezone.com/dst_news/dst_news_honduras04.html
-
-# From Paul Eggert (2006-08-08):
-# Also see Diario El Heraldo, The country returns to standard time (2006-08-08)
-# <http://www.elheraldo.hn/nota.php?nid=54941&sec=12>.
-# It mentions executive decree 18-2006.
-
-# From Steffen Thorsen (2006-08-17):
-# Honduras will observe DST from 2007 to 2009, exact dates are not
-# published, I have located this authoritative source:
-# http://www.presidencia.gob.hn/noticia.aspx?nId=47
-
-# Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-Rule   Hond    1987    1988    -       May     Sun>=1  0:00    1:00    D
-Rule   Hond    1987    1988    -       Sep     lastSun 0:00    0       S
-Rule   Hond    2006    2009    -       May     Sun>=1  0:00    1:00    D
-Rule   Hond    2006    2009    -       Aug     Mon>=1  0:00    0       S
+# Shanks says 1921 Jan 1; go with Whitman's more precise Apr 1.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Tegucigalpa -5:48:52 -    LMT     1921 Apr
-                       -6:00   Hond    C%sT
+                       -6:00   Salv    C%sT
 #
 # Great Swan I ceded by US to Honduras in 1972
 
@@ -2321,7 +2115,7 @@ Zone America/Tegucigalpa -5:48:52 -       LMT     1921 Apr
 # From U. S. Naval Observatory (1989-01-19):
 # JAMAICA             5 H  BEHIND UTC
 
-# From Shanks & Pottenger:
+# From Shanks:
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   America/Jamaica -5:07:12 -      LMT     1890            # Kingston
                        -5:07:12 -      KMT     1912 Feb    # Kingston Mean Time
@@ -2338,16 +2132,18 @@ Zone America/Martinique -4:04:20 -      LMT     1890            # Fort-de-France
                        -4:00   -       AST
 
 # Montserrat
-# From Paul Eggert (2006-03-22):
-# In 1995 volcanic eruptions forced evacuation of Plymouth, the capital.
-# world.gazetteer.com says Cork Hill is the most populous location now.
+# From Paul Eggert (1997-08-31):
+# Recent volcanic eruptions have forced evacuation of Plymouth, the capital.
+# Luckily, Olveston, the current de facto capital, has the same longitude.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-Zone America/Montserrat        -4:08:52 -      LMT     1911 Jul 1 0:01   # Cork Hill
+Zone America/Montserrat        -4:08:52 -      LMT     1911 Jul 1 0:01   # Olveston
                        -4:00   -       AST
 
 # Nicaragua
 #
-# This uses Shanks & Pottenger for times before 2005.
+# From Steffen Thorsen (1998-12-29):
+# Nicaragua seems to be back at -6:00 but I have not been able to find when
+# they changed from -5:00.
 #
 # From Steffen Thorsen (2005-04-12):
 # I've got reports from 8 different people that Nicaragua just started
@@ -2361,7 +2157,8 @@ Zone America/Montserrat   -4:08:52 -      LMT     1911 Jul 1 0:01   # Cork Hill
 #
 # From Paul Eggert (2005-05-01):
 # The decree doesn't say anything about daylight saving, but for now let's
-# assume that it is daylight saving....
+# assume that it is daylight saving and that they'll switch back on the
+# 3rd Sunday in September.
 #
 # From Gwillim Law (2005-04-21):
 # The Associated Press story on the time change, which can be found at
@@ -2379,35 +2176,20 @@ Zone America/Montserrat -4:08:52 -      LMT     1911 Jul 1 0:01   # Cork Hill
 # http://www.presidencia.gob.ni/presidencia/files_index/secretaria/comunicados/2005/septiembre/26septiembre-cambio-hora.htm
 # (2005-09-26)
 #
-# From Jesper Norgaard Welen (2006-05-05):
-# http://www.elnuevodiario.com.ni/2006/05/01/nacionales/18410
-# (my informal translation)
-# By order of the president of the republic, Enrique Bolanos, Nicaragua
-# advanced by sixty minutes their official time, yesterday at 2 in the
-# morning, and will stay that way until 30.th. of september.
-#
-# From Jesper Norgaard Welen (2006-09-30):
-# http://www.presidencia.gob.ni/buscador_gaceta/BD/DECRETOS/2006/D-063-2006P-PRN-Cambio-Hora.pdf
-# My informal translation runs:
-# The natural sun time is restored in all the national territory, in that the
-# time is returned one hour at 01:00 am of October 1 of 2006.
-#
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Nic     1979    1980    -       Mar     Sun>=16 0:00    1:00    D
 Rule   Nic     1979    1980    -       Jun     Mon>=23 0:00    0       S
+Rule   Nic     1992    only    -       Jan      1      4:00    1:00    D
+Rule   Nic     1992    only    -       Sep     24      0:00    0       S
 Rule   Nic     2005    only    -       Apr     10      0:00    1:00    D
-Rule   Nic     2005    only    -       Oct     Sun>=1  0:00    0       S
-Rule   Nic     2006    only    -       Apr     30      2:00    1:00    D
-Rule   Nic     2006    only    -       Oct     Sun>=1  1:00    0       S
+Rule   Nic     2005    only    -       Oct      2      0:00    0       S
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   America/Managua -5:45:08 -      LMT     1890
                        -5:45:12 -      MMT     1934 Jun 23 # Managua Mean Time?
                        -6:00   -       CST     1973 May
                        -5:00   -       EST     1975 Feb 16
-                       -6:00   Nic     C%sT    1992 Jan  1 4:00
-                       -5:00   -       EST     1992 Sep 24
-                       -6:00   -       CST     1993
-                       -5:00   -       EST     1997
+                       -6:00   Nic     C%sT    1993 Jan 1 4:00
+                       -5:00   -       EST     1998 Dec
                        -6:00   Nic     C%sT
 
 # Panama
@@ -2421,7 +2203,7 @@ Zone      America/Panama  -5:18:08 -      LMT     1890
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Puerto_Rico -4:24:25 -    LMT     1899 Mar 28 12:00    # San Juan
                        -4:00   -       AST     1942 May  3
-                       -4:00   US      A%sT    1946
+                       -4:00   1:00    AWT     1945 Sep 30  2:00
                        -4:00   -       AST
 
 # St Kitts-Nevis
@@ -2450,8 +2232,8 @@ Zone America/St_Vincent   -4:04:56 -      LMT     1890            # Kingstown
                        -4:00   -       AST
 
 # Turks and Caicos
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say they use US DST rules, but IATA SSIM (1991/1998)
+# From Paul Eggert (1998-08-06):
+# Shanks says they use US DST rules, but IATA SSIM (1991/1998)
 # says they switch at midnight.  Go with IATA SSIM.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   TC      1979    1986    -       Apr     lastSun 0:00    1:00    D
index 2837b70c101e59df916d3bb49b44a21aa0d797f5..d9f232c8e387051547f6ed1eeac2de7deef87c71 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 #ifndef NOID
-static char    privatehid[] = "@(#)private.h   8.2";
+static char    privatehid[] = "@(#)private.h   7.55";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -89,7 +89,7 @@ static char   privatehid[] = "@(#)private.h   8.2";
 #include "stdio.h"
 #include "errno.h"
 #include "string.h"
-#include "limits.h"    /* for CHAR_BIT et al. */
+#include "limits.h"    /* for CHAR_BIT */
 #include "time.h"
 #include "stdlib.h"
 
@@ -124,52 +124,21 @@ static char       privatehid[] = "@(#)private.h   8.2";
 /* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */
 #define is_digit(c) ((unsigned)(c) - '0' <= 9)
 
-/*
-** Define HAVE_STDINT_H's default value here, rather than at the
-** start, since __GLIBC__'s value depends on previously-included
-** files.
-** (glibc 2.1 and later have stdint.h, even with pre-C99 compilers.)
-*/
-#ifndef HAVE_STDINT_H
-#define HAVE_STDINT_H \
-       (199901 <= __STDC_VERSION__ || \
-       2 < (__GLIBC__ + (0 < __GLIBC_MINOR__)))
-#endif /* !defined HAVE_STDINT_H */
-
-#if HAVE_STDINT_H
-#include "stdint.h"
-#endif /* !HAVE_STDINT_H */
-
-#ifndef INT_FAST64_MAX
-/* Pre-C99 GCC compilers define __LONG_LONG_MAX__ instead of LLONG_MAX.  */
-#if defined LLONG_MAX || defined __LONG_LONG_MAX__
-typedef long long      int_fast64_t;
-#else /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
-#if (LONG_MAX >> 31) < 0xffffffff
-Please use a compiler that supports a 64-bit integer type (or wider);
-you may need to compile with "-DHAVE_STDINT_H".
-#endif /* (LONG_MAX >> 31) < 0xffffffff */
-typedef long           int_fast64_t;
-#endif /* ! (defined LLONG_MAX || defined __LONG_LONG_MAX__) */
-#endif /* !defined INT_FAST64_MAX */
-
-#ifndef INT32_MAX
-#define INT32_MAX 0x7fffffff
-#endif /* !defined INT32_MAX */
-#ifndef INT32_MIN
-#define INT32_MIN (-1 - INT32_MAX)
-#endif /* !defined INT32_MIN */
-
 /*
 ** Workarounds for compilers/systems.
 */
 
 /*
-** If your compiler lacks prototypes, "#define P(x) ()".
+** SunOS 4.1.1 cc lacks prototypes.
 */
 
 #ifndef P
+#ifdef __STDC__
 #define P(x)   x
+#endif /* defined __STDC__ */
+#ifndef __STDC__
+#define P(x)   ()
+#endif /* !defined __STDC__ */
 #endif /* !defined P */
 
 /*
@@ -242,14 +211,14 @@ extern char *     asctime_r();
 ** Private function declarations.
 */
 
-char *         icalloc P((int nelem, int elsize));
-char *         icatalloc P((char * old, const char * new));
-char *         icpyalloc P((const char * string));
-char *         imalloc P((int n));
-void *         irealloc P((void * pointer, int size));
-void           icfree P((char * pointer));
-void           ifree P((char * pointer));
-const char *   scheck P((const char * string, const char * format));
+char * icalloc P((int nelem, int elsize));
+char * icatalloc P((char * old, const char * new));
+char * icpyalloc P((const char * string));
+char * imalloc P((int n));
+void * irealloc P((void * pointer, int size));
+void   icfree P((char * pointer));
+void   ifree P((char * pointer));
+const char *scheck P((const char *string, const char *format));
 
 /*
 ** Finally, some convenience items.
@@ -341,26 +310,6 @@ char *asctime_r P((struct tm const *, char *));
 char *ctime_r P((time_t const *, char *));
 #endif /* HAVE_INCOMPATIBLE_CTIME_R */
 
-#ifndef YEARSPERREPEAT
-#define YEARSPERREPEAT         400     /* years before a Gregorian repeat */
-#endif /* !defined YEARSPERREPEAT */
-
-/*
-** The Gregorian year averages 365.2425 days, which is 31556952 seconds.
-*/
-
-#ifndef AVGSECSPERYEAR
-#define AVGSECSPERYEAR         31556952L
-#endif /* !defined AVGSECSPERYEAR */
-
-#ifndef SECSPERREPEAT
-#define SECSPERREPEAT          ((int_fast64_t) YEARSPERREPEAT * (int_fast64_t) AVGSECSPERYEAR)
-#endif /* !defined SECSPERREPEAT */
-#ifndef SECSPERREPEAT_BITS
-#define SECSPERREPEAT_BITS     34      /* ceil(log2(SECSPERREPEAT)) */
-#endif /* !defined SECSPERREPEAT_BITS */
-
 /*
 ** UNIX was a registered trademark of The Open Group in 2003.
 */
index 74d9b07c149bb963c25a417c2e48cd8d3e8b9266..bc156379a001f96e483589f09e6872b96ba1b9f0 100644 (file)
@@ -1,11 +1,6 @@
-/*
-** This file is in the public domain, so clarified as of
-** 2006-07-17 by Arthur David Olson.
-*/
-
 #ifndef lint
 #ifndef NOID
-static char    elsieid[] = "@(#)scheck.c       8.19";
+static char    elsieid[] = "@(#)scheck.c       8.17";
 #endif /* !defined lint */
 #endif /* !defined NOID */
 
index ca6c492f3e3ee46f42a129fed8e1360f4cbfc401..3a61cd717af94c06ccbefa906e2fd95caddf55c3 100644 (file)
@@ -1,14 +1,14 @@
-# @(#)southamerica     8.6
+# @(#)southamerica     8.1
 # <pre>
 
 # This data is by no means authoritative; if you think you know better,
 # go ahead and edit the file (and please send any changes to
 # tz@elsie.nci.nih.gov for general use in the future).
 
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (1999-07-07):
 # A good source for time zone historical data outside the U.S. is
-# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
-# San Diego: ACS Publications, Inc. (2003).
+# Thomas G. Shanks, The International Atlas (5th edition),
+# San Diego: ACS Publications, Inc. (1999).
 #
 # Gwillim Law writes that a good source
 # for recent time zone data is the International Air Transport
@@ -16,8 +16,8 @@
 # published semiannually.  Law sent in several helpful summaries
 # of the IATA's data after 1990.
 #
-# Except where otherwise noted, Shanks & Pottenger is the source for
-# entries through 1990, and IATA SSIM is the source for entries afterwards.
+# Except where otherwise noted, Shanks is the source for entries through 1990,
+# and IATA SSIM is the source for entries after 1990.
 #
 # Earlier editions of these tables used the North American style (e.g. ARST and
 # ARDT for Argentine Standard and Daylight Time), but the following quote
@@ -92,6 +92,8 @@ Rule  Arg     1988    only    -       Dec      1      0:00    1:00    S
 # obtaining the data from the:
 # Talleres de Hidrografia Naval Argentina
 # (Argentine Naval Hydrography Institute)
+#
+# Shanks stops after 1992-03-01; go with Otero.
 Rule   Arg     1989    1993    -       Mar     Sun>=1  0:00    0       -
 Rule   Arg     1989    1992    -       Oct     Sun>=15 0:00    1:00    S
 #
@@ -148,12 +150,12 @@ Rule      Arg     2000    only    -       Mar     Sun>=1  0:00    0       -
 # It's Law No. 7,210.  This change is due to a public power emergency, so for
 # now we'll assume it's for this year only.
 #
-# From Paul Eggert (2006-03-22):
+# From Paul Eggert (2002-01-22):
 # <a href="http://www.spicasc.net/horvera.html">
-# Hora de verano para la Republica Argentina (2003-06-08)
+# Hora de verano para la Republica Argentina (2000-10-01)
 # </a> says that standard time in Argentina from 1894-10-31
 # to 1920-05-01 was -4:16:48.25.  Go with this more-precise value
-# over Shanks & Pottenger.
+# over Shanks.
 #
 # From Mariano Absatz (2004-06-05):
 # These media articles from a major newspaper mostly cover the current state:
@@ -200,8 +202,8 @@ Rule        Arg     2000    only    -       Mar     Sun>=1  0:00    0       -
 # http://www.sanjuan.gov.ar/prensa/archivo/000426.html
 # http://www.sanjuan.gov.ar/prensa/archivo/000441.html
 
-# Unless otherwise specified, data are from Shanks & Pottenger through 1992,
-# from the IATA otherwise.  As noted below, Shanks & Pottenger say that
+# Unless otherwise specified, data are from Shanks through 1992, from
+# the IATA otherwise.  As noted below, Shanks says that
 # America/Cordoba split into 6 subregions during 1991/1992, but we
 # haven't verified this yet so for now we'll keep it a single region.
 #
@@ -220,7 +222,7 @@ Zone America/Argentina/Buenos_Aires -3:53:48 - LMT 1894 Oct 31
 # Formosa (FM), Salta (SA), Santiago del Estero (SE), Cordoba (CB),
 # San Luis (SL), La Pampa (LP), Neuquen (NQ), Rio Negro (RN)
 #
-# Shanks & Pottenger also make the following claims, which we haven't verified:
+# Shanks also makes the following claims, which we haven't verified:
 # - Formosa switched to -3:00 on 1991-01-07.
 # - Misiones switched to -3:00 on 1990-12-29.
 # - Chaco switched to -3:00 on 1991-01-04.
@@ -428,7 +430,11 @@ Zone       America/La_Paz  -4:32:36 -      LMT     1890
 # The official decrees referenced below are mostly taken from
 # <a href="http://pcdsh01.on.br/DecHV.html">
 # Decretos sobre o Horario de Verao no Brasil
-# </a>.
+# </a> (2001-09-20, in Portuguese).
+# The official site for all decrees, including those not related to time, is
+# <a href="http://www.presidencia.gov.br/CCIVIL/decreto/principal_ano.htm">
+# Presidencia da Republica, Subchefia para Assuntos Juridicos, Decretos
+# </a> (in Portuguese).
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 # Decree <a href="http://pcdsh01.on.br/HV20466.htm">20,466</a> (1931-10-01)
@@ -544,7 +550,7 @@ Rule        Brazil  2000    only    -       Feb     27       0:00   0       -
 # Decree <a href="http://pcdsh01.on.br/figuras/HV3916.gif">3,916</a>
 # (2001-09-13) reestablishes DST in AL, CE, MA, PB, PE, PI, RN, SE.
 Rule   Brazil  2000    2001    -       Oct     Sun>=8   0:00   1:00    S
-Rule   Brazil  2001    2006    -       Feb     Sun>=15  0:00   0       -
+Rule   Brazil  2001    max     -       Feb     Sun>=15  0:00   0       -
 # Decree 4,399 (2002-10-01) repeals DST in AL, CE, MA, PB, PE, PI, RN, SE.
 # <a href="http://www.presidencia.gov.br/CCIVIL/decreto/2002/D4399.htm"></a>
 Rule   Brazil  2002    only    -       Nov      3       0:00   1:00    S
@@ -556,14 +562,10 @@ Rule      Brazil  2003    only    -       Oct     19       0:00   1:00    S
 Rule   Brazil  2004    only    -       Nov      2       0:00   1:00    S
 # Decree <a href="http://pcdsh01.on.br/DecHV5539.gif">5,539</a> (2005-09-19),
 # adopted by the same states as before.
-Rule   Brazil  2005    only    -       Oct     16       0:00   1:00    S
-# Decree <a href="http://www.planalto.gov.br/ccivil_03/_Ato2004-2006/2006/Decreto/D5920.htm">5,920</a>
-# (2006-10-03), adopted by the same states as before.
-Rule   Brazil  2006    max     -       Nov     Sun>=1   0:00   1:00    S
-Rule   Brazil  2007    max     -       Feb     lastSun  0:00   0       -
+Rule   Brazil  2005    max     -       Oct     Sun>=15  0:00   1:00    S
 # The latest ruleset listed above says that the following states observe DST:
 # DF, ES, GO, MG, MS, MT, PR, RJ, RS, SC, SP.
-# For dates after mid-2007, the above rules with TO="max" are guesses
+# For dates after mid-2006, the above rules with TO="max" are guesses
 # and are quite possibly wrong, but are more likely than no DST at all.
 
 
@@ -704,64 +706,53 @@ Zone America/Rio_Branco   -4:31:12 -      LMT     1914
 # Because of the same drought, the government decided to end DST later,
 # on April 3, (one-time change).
 
-# From Oscar van Vlijmen (2006-10-08):
-# http://www.horaoficial.cl/cambio.htm
+# From Gwillim Law (2001-05-04):
+# I came across another article in "La Tercera" about Chilean DST.
+# <http://www.tercera.cl/diario/2000/10/13/t-extras.html>
+# It clearly confirms my earlier suggestion, that DST begins at 22:00
+# on Easter Island....  But it also seems to be saying that the
+# observance of DST in Chile began in 1966, rather than 1969 as
+# ... [Shanks] has it....
+#
+# My translation:
+#
+# "The Chilean Army has announced that summer time will begin tomorrow,
+# Saturday, October 14 in continental Chile, insular Chile, and
+# Antarctica, as provided by Supreme Decree 25 of January 11, 1966.
+# By the preceding, official time in continental Chile and Chilean
+# Antarctic, and official time in Western Insular Chile, which applies
+# to Easter Island and Sala y Gomez Island, will be set forward at
+# midnight and at 22:00, respectively, by 20 minutes."
 
-# From Jesper Norgaard Welen (2006-10-08):
-# I think that there are some obvious mistakes in the suggested link
-# from Oscar van Vlijmen,... for instance entry 66 says that GMT-4
-# ended 1990-09-12 while entry 67 only begins GMT-3 at 1990-09-15
-# (they should have been 1990-09-15 and 1990-09-16 respectively), but
-# anyhow it clears up some doubts too.
+# From Paul Eggert (2001-05-04):
+# Go with this article in preference to Shanks's 1969 date for modern DST.
+# Assume this rule has been used since DST was introduced in the islands.
 
-# The following data are from <http://www.horaoficial.cl/horaof.htm>
-# (2006-09-20), transcribed by Jesper Norgaard Welen.
+# From Paul Eggert (2002-10-24):
+# <http://www.shoa.cl/shoa/faqhoraoficial.htm> gives many details that
+# disagree with the following table, but we haven't had time to compare them.
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-Rule   Chile   1927    1932    -       Sep      1      0:00    1:00    S
+Rule   Chile   1918    only    -       Sep      1      0:00    1:00    S
+Rule   Chile   1919    only    -       Jul      2      0:00    0       -
+Rule   Chile   1927    1931    -       Sep      1      0:00    1:00    S
 Rule   Chile   1928    1932    -       Apr      1      0:00    0       -
-Rule   Chile   1942    only    -       Jun      1      4:00u   0       -
-Rule   Chile   1942    only    -       Aug      1      5:00u   1:00    S
-Rule   Chile   1946    only    -       Jul     15      4:00u   1:00    S
-Rule   Chile   1946    only    -       Sep      1      3:00u   0:00    -
-Rule   Chile   1947    only    -       Apr      1      4:00u   0       -
-Rule   Chile   1968    only    -       Nov      3      4:00u   1:00    S
-Rule   Chile   1969    only    -       Mar     30      3:00u   0       -
-Rule   Chile   1969    only    -       Nov     23      4:00u   1:00    S
-Rule   Chile   1970    only    -       Mar     29      3:00u   0       -
-Rule   Chile   1971    only    -       Mar     14      3:00u   0       -
-Rule   Chile   1970    1972    -       Oct     Sun>=9  4:00u   1:00    S
-Rule   Chile   1972    1986    -       Mar     Sun>=9  3:00u   0       -
-Rule   Chile   1973    only    -       Sep     30      4:00u   1:00    S
-Rule   Chile   1974    1987    -       Oct     Sun>=9  4:00u   1:00    S
-Rule   Chile   1987    only    -       Apr     12      3:00u   0       -
-Rule   Chile   1988    1989    -       Mar     Sun>=9  3:00u   0       -
-Rule   Chile   1988    only    -       Oct     Sun>=1  4:00u   1:00    S
-Rule   Chile   1989    only    -       Oct     Sun>=9  4:00u   1:00    S
-Rule   Chile   1990    only    -       Mar     18      3:00u   0       -
-Rule   Chile   1990    only    -       Sep     16      4:00u   1:00    S
-Rule   Chile   1991    1996    -       Mar     Sun>=9  3:00u   0       -
-Rule   Chile   1991    1997    -       Oct     Sun>=9  4:00u   1:00    S
-Rule   Chile   1997    only    -       Mar     30      3:00u   0       -
-Rule   Chile   1998    only    -       Mar     Sun>=9  3:00u   0       -
+Rule   Chile   1966    1997    -       Oct     Sun>=9  4:00u   1:00    S
+Rule   Chile   1967    1998    -       Mar     Sun>=9  3:00u   0       -
 Rule   Chile   1998    only    -       Sep     27      4:00u   1:00    S
 Rule   Chile   1999    only    -       Apr      4      3:00u   0       -
 Rule   Chile   1999    max     -       Oct     Sun>=9  4:00u   1:00    S
 Rule   Chile   2000    max     -       Mar     Sun>=9  3:00u   0       -
-# IATA SSIM anomalies: (1992-02) says 1992-03-14;
+# IATA SSIM anomalies: (1990-09) says 1990-09-16; (1992-02) says 1992-03-14;
 # (1996-09) says 1998-03-08.  Ignore these.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
-Zone America/Santiago  -4:42:46 -      LMT     1890
-                       -4:42:46 -      SMT     1910        # Santiago Mean Time
-                       -5:00   -       CLT     1916 Jul  1 # Chile Time
-                       -4:42:46 -      SMT     1918 Sep  1 # Santiago Mean Time
-                       -4:00   -       CLT     1919 Jul  1 # Chile Time
-                       -4:42:46 -      SMT     1927 Sep  1 # Santiago Mean Time
-                       -5:00   Chile   CL%sT   1947 May 22 # Chile Time
+Zone America/Santiago  -4:42:40 -      LMT     1890
+                       -4:42:40 -      SMT     1910        # Santiago Mean Time
+                       -5:00   Chile   CL%sT   1932 Sep    # Chile Time
                        -4:00   Chile   CL%sT
 Zone Pacific/Easter    -7:17:28 -      LMT     1890        # Mataveri
                        -7:17:28 -      MMT     1932 Sep    # Mataveri Mean Time
-                       -7:00   Chile   EAS%sT  1982 Jan 18 21:00 # Easter I Time
+                       -7:00   Chile   EAS%sT  1982 Mar 14 # Easter I Time
                        -6:00   Chile   EAS%sT
 #
 # Sala y Gomez Island is like Pacific/Easter.
@@ -769,9 +760,11 @@ Zone Pacific/Easter        -7:17:28 -      LMT     1890        # Mataveri
 # San Felix, and Antarctic bases, are like America/Santiago.
 
 # Colombia
+# Shanks specifies 24:00 for 1992 transition times; go with IATA,
+# as it seems implausible to change clocks at midnight New Year's Eve.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-Rule   CO      1992    only    -       May      3      0:00    1:00    S
-Rule   CO      1993    only    -       Apr      4      0:00    0       -
+Rule   CO      1992    only    -       May      2      0:00    1:00    S
+Rule   CO      1992    only    -       Dec     31      0:00    0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   America/Bogota  -4:56:20 -      LMT     1884 Mar 13
                        -4:56:20 -      BMT     1914 Nov 23 # Bogota Mean Time
@@ -780,21 +773,10 @@ Zone      America/Bogota  -4:56:20 -      LMT     1884 Mar 13
 # no information; probably like America/Bogota
 
 # Curacao
-#
-# From Paul Eggert (2006-03-22): 
-# Shanks & Pottenger say that The Bottom and Philipsburg have been at
-# -4:00 since standard time was introduced on 1912-03-02; and that
-# Kralendijk and Rincon used Kralendijk Mean Time (-4:33:08) from
-# 1912-02-02 to 1965-01-01.  The former is dubious, since S&P also say
-# Saba Island has been like Curacao.
-# This all predates our 1970 cutoff, though.  
-#
-# By July 2007 Curacao and St Maarten are planned to become
-# associated states within the Netherlands, much like Aruba;
-# Bonaire, Saba and St Eustatius would become directly part of the
-# Netherlands as Kingdom Islands.  This won't affect their time zones
-# though, as far as we know.
-# 
+# Shanks says that Bottom and Oranjestad have been at -4:00 since
+# standard time was introduced on 1912-03-02; and that Kralendijk and Rincon
+# used Kralendijk Mean Time (-4:33:08) from 1912-02-02 to 1965-01-01.
+# This all predates our 1970 cutoff, though.
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone   America/Curacao -4:35:44 -      LMT     1912 Feb 12     # Willemstad
                        -4:30   -       ANT     1965 # Netherlands Antilles Time
@@ -811,9 +793,9 @@ Zone Pacific/Galapagos      -5:58:24 -      LMT     1931 # Puerto Baquerizo Moreno
 
 # Falklands
 
-# From Paul Eggert (2006-03-22):
-# Between 1990 and 2000 inclusive, Shanks & Pottenger and the IATA agree except
-# the IATA gives 1996-09-08.  Go with Shanks & Pottenger.
+# From Paul Eggert (2001-03-05):
+# Between 1990 and 2000 inclusive, Shanks and the IATA agree except
+# the IATA gives 1996-09-08.  Go with Shanks.
 
 # From Falkland Islands Government Office, London (2001-01-22)
 # via Jesper Norgaard:
@@ -896,9 +878,9 @@ Zone        America/Guyana  -3:52:40 -      LMT     1915 Mar        # Georgetown
                        -4:00   -       GYT
 
 # Paraguay
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger say that spring transitions are from 01:00 -> 02:00,
-# and autumn transitions are from 00:00 -> 23:00.  Go with pre-1999
+# From Paul Eggert (1999-10-29):
+# Shanks (1999) says that spring transitions are from 01:00 -> 02:00,
+# and autumn transitions are from 00:00 -> 23:00.  Go with earlier
 # editions of Shanks, and with the IATA, who say transitions occur at 00:00.
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Para    1975    1988    -       Oct      1      0:00    1:00    S
@@ -929,10 +911,13 @@ Rule      Para    1996    only    -       Mar      1      0:00    0       -
 # year, the time will change on the first Sunday of October; likewise, the
 # clock will be set back on the first Sunday of March.
 #
+# From Jesper Norgaard (2001-03-06) [an official URL saying similar things]:
+# http://gateway.abc.com.py:8000/pub/pag04.mbr/artic?FHA=2001-03-03-02.24.52.900592
+#
 Rule   Para    1996    2001    -       Oct     Sun>=1  0:00    1:00    S
-# IATA SSIM (1997-09) says Mar 1; go with Shanks & Pottenger.
+# IATA SSIM (1997-09) says Mar 1; go with Shanks.
 Rule   Para    1997    only    -       Feb     lastSun 0:00    0       -
-# Shanks & Pottenger say 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but
+# Shanks says 1999-02-28; IATA SSIM (1999-02) says 1999-02-27, but
 # (1999-09) reports no date; go with above sources and Gerd Knops (2001-02-27).
 Rule   Para    1998    2001    -       Mar     Sun>=1  0:00    0       -
 # From Rives McDow (2002-02-28):
@@ -946,9 +931,7 @@ Rule        Para    2002    2003    -       Sep     Sun>=1  0:00    1:00    S
 # There are several sources that claim that Paraguay made
 # a timezone rule change in autumn 2004.
 # From Steffen Thorsen (2005-01-05):
-# Decree 1,867 (2004-03-05)
-# From Carlos Raul Perasso via Jesper Norgaard Welen (2006-10-13)
-# <http://www.presidencia.gov.py/decretos/D1867.pdf>
+# Decree 1,867 (2004-03-05) <http://www.labor.com.py/noticias.asp?id=27>
 Rule   Para    2004    max     -       Oct     Sun>=15 0:00    1:00    S
 Rule   Para    2005    max     -       Mar     Sun>=8  0:00    0       -
 
@@ -966,8 +949,8 @@ Zone America/Asuncion       -3:50:40 -      LMT     1890
 # When we were in Peru in 1985-1986, they apparently switched over
 # sometime between December 29 and January 3 while we were on the Amazon.
 #
-# From Paul Eggert (2006-03-22):
-# Shanks & Pottenger don't have this transition.  Assume 1986 was like 1987.
+# From Paul Eggert (2003-11-02):
+# Shanks doesn't have this transition.  Assume 1986 was like 1987.
 
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
 Rule   Peru    1938    only    -       Jan      1      0:00    1:00    S
@@ -978,7 +961,7 @@ Rule        Peru    1986    1987    -       Jan      1      0:00    1:00    S
 Rule   Peru    1986    1987    -       Apr      1      0:00    0       -
 Rule   Peru    1990    only    -       Jan      1      0:00    1:00    S
 Rule   Peru    1990    only    -       Apr      1      0:00    0       -
-# IATA is ambiguous for 1993/1995; go with Shanks & Pottenger.
+# IATA is ambiguous for 1993/1995; go with Shanks.
 Rule   Peru    1994    only    -       Jan      1      0:00    1:00    S
 Rule   Peru    1994    only    -       Apr      1      0:00    0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
@@ -1011,23 +994,23 @@ Zone America/Port_of_Spain -4:06:04 -    LMT     1912 Mar 2
 # Uruguay
 # From Paul Eggert (1993-11-18):
 # Uruguay wins the prize for the strangest peacetime manipulation of the rules.
-# From Shanks & Pottenger:
+# From Shanks:
 # Rule NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
-# Whitman gives 1923 Oct 1; go with Shanks & Pottenger.
+# Whitman gives 1923 Oct 1; go with Shanks.
 Rule   Uruguay 1923    only    -       Oct      2       0:00   0:30    HS
 Rule   Uruguay 1924    1926    -       Apr      1       0:00   0       -
 Rule   Uruguay 1924    1925    -       Oct      1       0:00   0:30    HS
 Rule   Uruguay 1933    1935    -       Oct     lastSun  0:00   0:30    HS
-# Shanks & Pottenger give 1935 Apr 1 0:00 & 1936 Mar 30 0:00; go with Whitman.
+# Shanks gives 1935 Apr 1 0:00 and 1936 Mar 30 0:00; go with Whitman.
 Rule   Uruguay 1934    1936    -       Mar     Sat>=25 23:30s  0       -
 Rule   Uruguay 1936    only    -       Nov      1       0:00   0:30    HS
 Rule   Uruguay 1937    1941    -       Mar     lastSun  0:00   0       -
-# Whitman gives 1937 Oct 3; go with Shanks & Pottenger.
+# Whitman gives 1937 Oct 3; go with Shanks.
 Rule   Uruguay 1937    1940    -       Oct     lastSun  0:00   0:30    HS
 # Whitman gives 1941 Oct 24 - 1942 Mar 27, 1942 Dec 14 - 1943 Apr 13,
-# and 1943 Apr 13 ``to present time''; go with Shanks & Pottenger.
-Rule   Uruguay 1941    only    -       Aug      1       0:00   0:30    HS
-Rule   Uruguay 1942    only    -       Jan      1       0:00   0       -
+# and 1943 Apr 13 ``to present time''; go with Shanks.
+Rule   Uruguay 1941    only    -       Aug      1       0:00   0       -
+Rule   Uruguay 1942    only    -       Jan      1       0:00   0:30    HS
 Rule   Uruguay 1942    only    -       Dec     14       0:00   1:00    S
 Rule   Uruguay 1943    only    -       Mar     14       0:00   0       -
 Rule   Uruguay 1959    only    -       May     24       0:00   1:00    S
@@ -1053,7 +1036,7 @@ Rule      Uruguay 1988    only    -       Mar     14       0:00   0       -
 Rule   Uruguay 1988    only    -       Dec     11       0:00   1:00    S
 Rule   Uruguay 1989    only    -       Mar     12       0:00   0       -
 Rule   Uruguay 1989    only    -       Oct     29       0:00   1:00    S
-# Shanks & Pottenger say no DST was observed in 1990/1 and 1991/2,
+# Shanks says no DST was observed in 1990/1 and 1991/2,
 # and that 1992/3's DST was from 10-25 to 03-01.  Go with IATA.
 Rule   Uruguay 1990    1992    -       Mar     Sun>=1   0:00   0       -
 Rule   Uruguay 1990    1991    -       Oct     Sun>=21  0:00   1:00    S
@@ -1074,10 +1057,6 @@ Rule     Uruguay 2005    only    -       Mar     27       2:00   0       -
 # 02:00 local time, official time in Uruguay will be at GMT -2.
 Rule   Uruguay 2005    only    -       Oct      9       2:00   1:00    S
 Rule   Uruguay 2006    only    -       Mar     12       2:00   0       -
-# From Jesper Norgaard Welen (2006-09-06):
-# http://www.presidencia.gub.uy/_web/decretos/2006/09/CM%20210_08%2006%202006_00001.PDF
-Rule   Uruguay 2006    max     -       Oct     Sun>=1   2:00   1:00    S
-Rule   Uruguay 2007    max     -       Mar     Sun>=8   2:00   0       -
 # Zone NAME            GMTOFF  RULES   FORMAT  [UNTIL]
 Zone America/Montevideo        -3:44:44 -      LMT     1898 Jun 28
                        -3:44:44 -      MMT     1920 May  1     # Montevideo MT
index 3a9eee305a53cc7bea4c9abb390a631b6fd16e76..fb6ca9880f38843882733bc3438fe2f9e3928ee5 100644 (file)
@@ -21,7 +21,7 @@
 
 #ifndef lint
 #ifndef NOID
-static char    tzfilehid[] = "@(#)tzfile.h     8.1";
+static char    tzfilehid[] = "@(#)tzfile.h     7.18";
 #endif /* !defined NOID */
 #endif /* !defined lint */
 
@@ -49,8 +49,7 @@ static char   tzfilehid[] = "@(#)tzfile.h     8.1";
 
 struct tzhead {
        char    tzh_magic[4];           /* TZ_MAGIC */
-       char    tzh_version[1];         /* '\0' or '2' as of 2005 */
-       char    tzh_reserved[15];       /* reserved--must be zero */
+       char    tzh_reserved[16];       /* reserved for future use */
        char    tzh_ttisgmtcnt[4];      /* coded number of trans. time flags */
        char    tzh_ttisstdcnt[4];      /* coded number of trans. time flags */
        char    tzh_leapcnt[4];         /* coded number of leap seconds */
@@ -84,23 +83,19 @@ struct tzhead {
 **                                     assumed to be local time
 */
 
-/*
-** If tzh_version is '2' or greater, the above is followed by a second instance
-** of tzhead and a second instance of the data in which each coded transition
-** time uses 8 rather than 4 chars,
-** then a POSIX-TZ-environment-variable-style string for use in handling
-** instants after the last transition time stored in the file
-** (with nothing between the newlines if there is no POSIX representation for
-** such instants).
-*/
-
 /*
 ** In the current implementation, "tzset()" refuses to deal with files that
 ** exceed any of the limits below.
 */
 
 #ifndef TZ_MAX_TIMES
-#define TZ_MAX_TIMES   1200
+/*
+** The TZ_MAX_TIMES value below is enough to handle a bit more than a
+** year's worth of solar time (corrected daily to the nearest second) or
+** 138 years of Pacific Presidential Election time
+** (where there are three time zone transitions every fourth year).
+*/
+#define TZ_MAX_TIMES   370
 #endif /* !defined TZ_MAX_TIMES */
 
 #ifndef TZ_MAX_TYPES
index b99af8273b008c55d64fb0f37c16416a801da3c3..f6e28bfdab13bb2f5be07f4304b751c454e3bade 100644 (file)
@@ -1,6 +1,6 @@
 #! @KSH@
 
-# '@(#)tzselect.ksh    8.1'
+# '@(#)tzselect.ksh    1.8'
 
 # Ask the user about the time zone, and output the resulting TZ value to stdout.
 # Interact with the user via stderr and stdin.
index ae4d286b122ffccb87514f97423d1bd14c5e95dc..d525da1baeaa8babff74360a676ccd883580081e 100644 (file)
@@ -1,4 +1,4 @@
-static char    elsieid[] = "@(#)zdump.c        8.2";
+static char    elsieid[] = "@(#)zdump.c        7.74";
 
 /*
 ** This code has been made independent of the rest of the time
@@ -15,7 +15,7 @@ static char   elsieid[] = "@(#)zdump.c        8.2";
 #include "ctype.h"     /* for isalpha et al. */
 #ifndef isascii
 #define isascii(x) 1
-#endif /* !defined isascii */
+#endif
 
 #ifndef ZDUMP_LO_YEAR
 #define ZDUMP_LO_YEAR  (-500)
@@ -130,7 +130,11 @@ static char        elsieid[] = "@(#)zdump.c        8.2";
 #endif /* !defined TZ_DOMAIN */
 
 #ifndef P
+#ifdef __STDC__
 #define P(x)   x
+#else /* !defined __STDC__ */
+#define P(x)   ()
+#endif /* !defined __STDC__ */
 #endif /* !defined P */
 
 extern char ** environ;
@@ -414,21 +418,14 @@ _("%s: use of -v on system with floating time_t other than float or double\n"),
                }
        } else if (0 > (time_t) -1) {
                /*
-               ** time_t is signed.  Assume overflow wraps around.
+               ** time_t is signed.
                */
-               time_t t = 0;
-               time_t t1 = 1;
+               register time_t hibit;
 
-               while (t < t1) {
-                       t = t1;
-                       t1 = 2 * t1 + 1;
-               }
-
-               absolute_max_time = t;
-               t = -t;
-               absolute_min_time = t - 1;
-               if (t < absolute_min_time)
-                       absolute_min_time = t;
+               for (hibit = 1; (hibit * 2) != 0; hibit *= 2)
+                       continue;
+               absolute_min_time = hibit;
+               absolute_max_time = -(hibit + 1);
        } else {
                /*
                ** time_t is unsigned.
@@ -471,7 +468,10 @@ const long y;
 }
 
 static time_t
-hunt(char *name, time_t lot, time_t hit)
+hunt(name, lot, hit)
+char * name;
+time_t lot;
+time_t hit;
 {
        time_t                  t;
        long                    diff;
@@ -541,7 +541,10 @@ struct tm *        oldp;
 }
 
 static void
-show(char *zone, time_t t, int v)
+show(zone, t, v)
+char * zone;
+time_t t;
+int    v;
 {
        register struct tm *    tmp;
 
index f7393ea7ba307fb0cabaaf03411353d8f5393efc..acb76fb3bab62fbb836043b78194439b41404dab 100644 (file)
@@ -1,18 +1,15 @@
+static char    elsieid[] = "@(#)zic.c  7.128";
+
 /*
-** This file is in the public domain, so clarified as of
-** 2006-07-17 by Arthur David Olson.
+** Regardless of the type of time_t, we do our work using this type.
 */
 
-static char    elsieid[] = "@(#)zic.c  8.7";
+typedef int    zic_t;
 
 #include "private.h"
 #include "locale.h"
 #include "tzfile.h"
 
-#define        ZIC_VERSION     '2'
-
-typedef int_fast64_t   zic_t;
-
 #ifndef ZIC_MAX_ABBR_LEN_WO_WARN
 #define ZIC_MAX_ABBR_LEN_WO_WARN       6
 #endif /* !defined ZIC_MAX_ABBR_LEN_WO_WARN */
@@ -39,11 +36,6 @@ typedef int_fast64_t zic_t;
 #define isascii(x) 1
 #endif
 
-#define OFFSET_STRLEN_MAXIMUM  (7 + INT_STRLEN_MAXIMUM(long))
-#define RULE_STRLEN_MAXIMUM    8       /* "Mdd.dd.d" */
-
-#define end(cp)        (strchr((cp), '\0'))
-
 struct rule {
        const char *    r_filename;
        int             r_linenum;
@@ -52,8 +44,6 @@ struct rule {
        int             r_loyear;       /* for example, 1986 */
        int             r_hiyear;       /* for example, 1986 */
        const char *    r_yrtype;
-       int             r_lowasnum;
-       int             r_hiwasnum;
 
        int             r_month;        /* 0..11 */
 
@@ -113,10 +103,9 @@ static void        adjleap P((void));
 static void    associate P((void));
 static int     ciequal P((const char * ap, const char * bp));
 static void    convert P((long val, char * buf));
-static void    convert64 P((zic_t val, char * buf));
 static void    dolink P((const char * fromfile, const char * tofile));
 static void    doabbr P((char * abbr, const char * format,
-                       const char * letters, int isdst, int doquotes));
+                       const char * letters, int isdst));
 static void    eat P((const char * name, int num));
 static void    eats P((const char * name, int num,
                        const char * rname, int rnum));
@@ -132,7 +121,6 @@ static void inrule P((char ** fields, int nfields));
 static int     inzcont P((char ** fields, int nfields));
 static int     inzone P((char ** fields, int nfields));
 static int     inzsub P((char ** fields, int nfields, int iscont));
-static int     is32 P((zic_t x));
 static int     itsabbr P((const char * abbr, const char * word));
 static int     itsdir P((const char * name));
 static int     lowerit P((int c));
@@ -142,22 +130,16 @@ static void       newabbr P((const char * abbr));
 static long    oadd P((long t1, long t2));
 static void    outzone P((const struct zone * zp, int ntzones));
 static void    puttzcode P((long code, FILE * fp));
-static void    puttzcode64 P((zic_t code, FILE * fp));
 static int     rcomp P((const void * leftp, const void * rightp));
 static zic_t   rpytime P((const struct rule * rp, int wantedy));
 static void    rulesub P((struct rule * rp,
                        const char * loyearp, const char * hiyearp,
                        const char * typep, const char * monthp,
                        const char * dayp, const char * timep));
-static int     stringoffset P((char * result, long offset));
-static int     stringrule P((char * result, const struct rule * rp,
-                       long dstoff, long gmtoff));
-static void    stringzone P((char * result,
-                       const struct zone * zp, int ntzones));
 static void    setboundaries P((void));
 static zic_t   tadd P((zic_t t1, long t2));
 static void    usage P((void));
-static void    writezone P((const char * name, const char * string));
+static void    writezone P((const char * name));
 static int     yearistype P((int year, const char * type));
 
 #if !HAVE_STRERROR
@@ -168,16 +150,13 @@ static int                charcnt;
 static int             errors;
 static const char *    filename;
 static int             leapcnt;
-static int             leapseen;
-static int             leapminyear;
-static int             leapmaxyear;
 static int             linenum;
-static int             max_abbrvar_len;
-static int             max_format_len;
 static zic_t           max_time;
 static int             max_year;
+static int             max_year_representable;
 static zic_t           min_time;
 static int             min_year;
+static int             min_year_representable;
 static int             noise;
 static const char *    rfilename;
 static int             rlinenum;
@@ -474,7 +453,7 @@ static void
 usage P((void))
 {
        (void) fprintf(stderr, _("%s: usage is %s \
-[ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
+[ --version ] [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
 \t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
                progname, progname);
        exit(EXIT_FAILURE);
@@ -485,6 +464,7 @@ static const char * lcltime;
 static const char *    directory;
 static const char *    leapsec;
 static const char *    yitcommand;
+static int             sflag = FALSE;
 
 int
 main(argc, argv)
@@ -506,11 +486,6 @@ char *     argv[];
        (void) textdomain(TZ_DOMAIN);
 #endif /* HAVE_GETTEXT */
        progname = argv[0];
-       if (TYPE_BIT(zic_t) < 64) {
-               (void) fprintf(stderr, "%s: %s\n", progname,
-                       _("wild compilation-time specification of zic_t"));
-               exit(EXIT_FAILURE);
-       }
        for (i = 1; i < argc; ++i)
                if (strcmp(argv[i], "--version") == 0) {
                        (void) printf("%s\n", elsieid);
@@ -574,7 +549,7 @@ _("%s: More than one -L option specified\n"),
                                noise = TRUE;
                                break;
                        case 's':
-                               (void) printf("%s: -s ignored\n", progname);
+                               sflag = TRUE;
                                break;
                }
        if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
@@ -696,17 +671,54 @@ warning(_("hard link failed, symbolic link used"));
        ifree(toname);
 }
 
-#define TIME_T_BITS_IN_FILE    64
+#ifndef INT_MAX
+#define INT_MAX        ((int) (((unsigned)~0)>>1))
+#endif /* !defined INT_MAX */
+
+#ifndef INT_MIN
+#define INT_MIN        ((int) ~(((unsigned)~0)>>1))
+#endif /* !defined INT_MIN */
+
+/*
+** The tz file format currently allows at most 32-bit quantities.
+** This restriction should be removed before signed 32-bit values
+** wrap around in 2038, but unfortunately this will require a
+** change to the tz file format.
+*/
+
+#define MAX_BITS_IN_FILE       32
+#define TIME_T_BITS_IN_FILE    ((TYPE_BIT(zic_t) < MAX_BITS_IN_FILE) ? \
+                                       TYPE_BIT(zic_t) : MAX_BITS_IN_FILE)
 
 static void
 setboundaries P((void))
 {
        register int    i;
 
-       min_time = -1;
-       for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
-               min_time *= 2;
-       max_time = -(min_time + 1);
+       if (TYPE_SIGNED(zic_t)) {
+               min_time = -1;
+               for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
+                       min_time *= 2;
+               max_time = -(min_time + 1);
+               if (sflag)
+                       min_time = 0;
+       } else {
+               min_time = 0;
+               max_time = 2 - sflag;
+               for (i = 0; i < TIME_T_BITS_IN_FILE - 1; ++i)
+                       max_time *= 2;
+               --max_time;
+       }
+       {
+               time_t  t;
+
+               t = (time_t) min_time;
+               min_year = TM_YEAR_BASE + gmtime(&t)->tm_year;
+               t = (time_t) max_time;
+               max_year = TM_YEAR_BASE + gmtime(&t)->tm_year;
+       }
+       min_year_representable = min_year;
+       max_year_representable = max_year;
 }
 
 static int
@@ -981,8 +993,6 @@ const int           nfields;
                fields[RF_MONTH], fields[RF_DAY], fields[RF_TOD]);
        r.r_name = ecpyalloc(fields[RF_NAME]);
        r.r_abbrvar = ecpyalloc(fields[RF_ABBRVAR]);
-       if (max_abbrvar_len < strlen(r.r_abbrvar))
-               max_abbrvar_len = strlen(r.r_abbrvar);
        rules = (struct rule *) (void *) erealloc((char *) rules,
                (int) ((nrules + 1) * sizeof *rules));
        rules[nrules++] = r;
@@ -1088,8 +1098,6 @@ const int         iscont;
        }
        z.z_rule = ecpyalloc(fields[i_rule]);
        z.z_format = ecpyalloc(fields[i_format]);
-       if (max_format_len < strlen(z.z_format))
-               max_format_len = strlen(z.z_format);
        hasuntil = nfields > i_untilyear;
        if (hasuntil) {
                z.z_untilrule.r_filename = filename;
@@ -1151,11 +1159,6 @@ const int                nfields;
                error(_("invalid leaping year"));
                return;
        }
-       if (!leapseen || leapmaxyear < year)
-               leapmaxyear = year;
-       if (!leapseen || leapminyear > year)
-               leapminyear = year;
-       leapseen = TRUE;
        j = EPOCH_YEAR;
        while (j != year) {
                if (year > j) {
@@ -1310,8 +1313,7 @@ const char * const                timep;
        */
        cp = loyearp;
        lp = byword(cp, begin_years);
-       rp->r_lowasnum = lp == NULL;
-       if (!rp->r_lowasnum) switch ((int) lp->l_value) {
+       if (lp != NULL) switch ((int) lp->l_value) {
                case YR_MINIMUM:
                        rp->r_loyear = INT_MIN;
                        break;
@@ -1326,11 +1328,14 @@ const char * const              timep;
        } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_loyear) != 1) {
                error(_("invalid starting year"));
                return;
+       } else if (noise) {
+               if (rp->r_loyear < min_year_representable)
+                       warning(_("starting year too low to be represented"));
+               else if (rp->r_loyear > max_year_representable)
+                       warning(_("starting year too high to be represented"));
        }
        cp = hiyearp;
-       lp = byword(cp, end_years);
-       rp->r_hiwasnum = lp == NULL;
-       if (!rp->r_hiwasnum) switch ((int) lp->l_value) {
+       if ((lp = byword(cp, end_years)) != NULL) switch ((int) lp->l_value) {
                case YR_MINIMUM:
                        rp->r_hiyear = INT_MIN;
                        break;
@@ -1348,6 +1353,11 @@ const char * const               timep;
        } else if (sscanf(cp, scheck(cp, "%d"), &rp->r_hiyear) != 1) {
                error(_("invalid ending year"));
                return;
+       } else if (noise) {
+               if (rp->r_loyear < min_year_representable)
+                       warning(_("ending year too low to be represented"));
+               else if (rp->r_loyear > max_year_representable)
+                       warning(_("ending year too high to be represented"));
        }
        if (rp->r_loyear > rp->r_hiyear) {
                error(_("starting year greater than ending year"));
@@ -1362,6 +1372,8 @@ const char * const                timep;
                }
                rp->r_yrtype = ecpyalloc(typep);
        }
+       if (rp->r_loyear < min_year && rp->r_loyear > 0)
+               min_year = rp->r_loyear;
        /*
        ** Day work.
        ** Accept things such as:
@@ -1415,24 +1427,12 @@ const long      val;
 char * const   buf;
 {
        register int    i;
-       register int    shift;
+       register long   shift;
 
        for (i = 0, shift = 24; i < 4; ++i, shift -= 8)
                buf[i] = val >> shift;
 }
 
-static void
-convert64(val, buf)
-const zic_t    val;
-char * const   buf;
-{
-       register int    i;
-       register int    shift;
-
-       for (i = 0, shift = 56; i < 8; ++i, shift -= 8)
-               buf[i] = val >> shift;
-}
-
 static void
 puttzcode(val, fp)
 const long     val;
@@ -1444,50 +1444,28 @@ FILE * const    fp;
        (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
 }
 
-static void
-puttzcode64(val, fp)
-const zic_t    val;
-FILE * const   fp;
-{
-       char    buf[8];
-
-       convert64(val, buf);
-       (void) fwrite((void *) buf, (size_t) sizeof buf, (size_t) 1, fp);
-}
-
 static int
 atcomp(avp, bvp)
-const void *   avp;
-const void *   bvp;
+void * avp;
+void * bvp;
 {
-       const zic_t     a = ((const struct attype *) avp)->at;
-       const zic_t     b = ((const struct attype *) bvp)->at;
-
-       return (a < b) ? -1 : (a > b);
-}
-
-static int
-is32(x)
-const zic_t    x;
-{
-       return INT32_MIN <= x && x <= INT32_MAX;
+       if (((struct attype *) avp)->at < ((struct attype *) bvp)->at)
+               return -1;
+       else if (((struct attype *) avp)->at > ((struct attype *) bvp)->at)
+               return 1;
+       else    return 0;
 }
 
 static void
-writezone(name, string)
+writezone(name)
 const char * const     name;
-const char * const     string;
 {
-       register FILE *                 fp;
-       register int                    i, j;
-       register int                    leapcnt32, leapi32;
-       register int                    timecnt32, timei32;
-       register int                    pass;
-       static char *                   fullname;
-       static const struct tzhead      tzh0;
-       static struct tzhead            tzh;
-       zic_t                           ats[TZ_MAX_TIMES];
-       unsigned char                   types[TZ_MAX_TIMES];
+       register FILE *         fp;
+       register int            i, j;
+       static char *           fullname;
+       static struct tzhead    tzh;
+       zic_t                   ats[TZ_MAX_TIMES];
+       unsigned char           types[TZ_MAX_TIMES];
 
        /*
        ** Sort.
@@ -1531,36 +1509,6 @@ const char * const       string;
                ats[i] = attypes[i].at;
                types[i] = attypes[i].type;
        }
-       /*
-       ** Correct for leap seconds.
-       */
-       for (i = 0; i < timecnt; ++i) {
-               j = leapcnt;
-               while (--j >= 0)
-                       if (ats[i] > trans[j] - corr[j]) {
-                               ats[i] = tadd(ats[i], corr[j]);
-                               break;
-                       }
-       }
-       /*
-       ** Figure out 32-bit-limited starts and counts.
-       */
-       timecnt32 = timecnt;
-       timei32 = 0;
-       leapcnt32 = leapcnt;
-       leapi32 = 0;
-       while (timecnt32 > 0 && !is32(ats[timecnt32 - 1]))
-               --timecnt32;
-       while (timecnt32 > 0 && !is32(ats[timei32])) {
-               --timecnt32;
-               ++timei32;
-       }
-       while (leapcnt32 > 0 && !is32(trans[leapcnt32 - 1]))
-               --leapcnt32;
-       while (leapcnt32 > 0 && !is32(trans[leapi32])) {
-               --leapcnt32;
-               ++leapi32;
-       }
        fullname = erealloc(fullname,
                (int) (strlen(directory) + 1 + strlen(name) + 1));
        (void) sprintf(fullname, "%s/%s", directory, name);
@@ -1585,150 +1533,67 @@ const char * const     string;
                        exit(EXIT_FAILURE);
                }
        }
-       for (pass = 1; pass <= 2; ++pass) {
-               register int    thistimei, thistimecnt;
-               register int    thisleapi, thisleapcnt;
-               register int    thistimelim, thisleaplim;
-               int             writetype[TZ_MAX_TIMES];
-               int             typemap[TZ_MAX_TYPES];
-               register int    thistypecnt;
-               char            thischars[TZ_MAX_CHARS];
-               char            thischarcnt;
-               int             indmap[TZ_MAX_CHARS];
-
-               if (pass == 1) {
-                       thistimei = timei32;
-                       thistimecnt = timecnt32;
-                       thisleapi = leapi32;
-                       thisleapcnt = leapcnt32;
-               } else {
-                       thistimei = 0;
-                       thistimecnt = timecnt;
-                       thisleapi = 0;
-                       thisleapcnt = leapcnt;
-               }
-               thistimelim = thistimei + thistimecnt;
-               thisleaplim = thisleapi + thisleapcnt;
-               for (i = 0; i < typecnt; ++i)
-                       writetype[i] = thistimecnt == timecnt;
-               if (thistimecnt == 0) {
-                       /*
-                       ** No transition times fall in the current
-                       ** (32- or 64-bit) window.
-                       */
-                       if (typecnt != 0)
-                               writetype[typecnt - 1] = TRUE;
-               } else {
-                       for (i = thistimei - 1; i < thistimelim; ++i)
-                               if (i >= 0)
-                                       writetype[types[i]] = TRUE;
-                       /*
-                       ** For America/Godthab and Antarctica/Palmer
-                       */
-                       if (thistimei == 0)
-                               writetype[0] = TRUE;
-               }
-               thistypecnt = 0;
-               for (i = 0; i < typecnt; ++i)
-                       typemap[i] = writetype[i] ?  thistypecnt++ : -1;
-               for (i = 0; i < sizeof indmap / sizeof indmap[0]; ++i)
-                       indmap[i] = -1;
-               thischarcnt = 0;
-               for (i = 0; i < typecnt; ++i) {
-                       register char * thisabbr;
-
-                       if (!writetype[i])
-                               continue;
-                       if (indmap[abbrinds[i]] >= 0)
-                               continue;
-                       thisabbr = &chars[abbrinds[i]];
-                       for (j = 0; j < thischarcnt; ++j)
-                               if (strcmp(&thischars[j], thisabbr) == 0)
-                                       break;
-                       if (j == thischarcnt) {
-                               (void) strcpy(&thischars[(int) thischarcnt],
-                                       thisabbr);
-                               thischarcnt += strlen(thisabbr) + 1;
-                       }
-                       indmap[abbrinds[i]] = j;
-               }
+       convert(eitol(typecnt), tzh.tzh_ttisgmtcnt);
+       convert(eitol(typecnt), tzh.tzh_ttisstdcnt);
+       convert(eitol(leapcnt), tzh.tzh_leapcnt);
+       convert(eitol(timecnt), tzh.tzh_timecnt);
+       convert(eitol(typecnt), tzh.tzh_typecnt);
+       convert(eitol(charcnt), tzh.tzh_charcnt);
+       (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
 #define DO(field)      (void) fwrite((void *) tzh.field, \
                                (size_t) sizeof tzh.field, (size_t) 1, fp)
-               tzh = tzh0;
-               (void) strncpy(tzh.tzh_magic, TZ_MAGIC, sizeof tzh.tzh_magic);
-               tzh.tzh_version[0] = ZIC_VERSION;
-               convert(eitol(thistypecnt), tzh.tzh_ttisgmtcnt);
-               convert(eitol(thistypecnt), tzh.tzh_ttisstdcnt);
-               convert(eitol(thisleapcnt), tzh.tzh_leapcnt);
-               convert(eitol(thistimecnt), tzh.tzh_timecnt);
-               convert(eitol(thistypecnt), tzh.tzh_typecnt);
-               convert(eitol(thischarcnt), tzh.tzh_charcnt);
-               DO(tzh_magic);
-               DO(tzh_version);
-               DO(tzh_reserved);
-               DO(tzh_ttisgmtcnt);
-               DO(tzh_ttisstdcnt);
-               DO(tzh_leapcnt);
-               DO(tzh_timecnt);
-               DO(tzh_typecnt);
-               DO(tzh_charcnt);
+       DO(tzh_magic);
+       DO(tzh_reserved);
+       DO(tzh_ttisgmtcnt);
+       DO(tzh_ttisstdcnt);
+       DO(tzh_leapcnt);
+       DO(tzh_timecnt);
+       DO(tzh_typecnt);
+       DO(tzh_charcnt);
 #undef DO
-               for (i = thistimei; i < thistimelim; ++i)
-                       if (pass == 1)
-                               puttzcode((long) ats[i], fp);
-                       else    puttzcode64(ats[i], fp);
-               for (i = thistimei; i < thistimelim; ++i) {
-                       unsigned char   uc;
-
-                       uc = typemap[types[i]];
-                       (void) fwrite((void *) &uc,
-                               (size_t) sizeof uc,
-                               (size_t) 1,
-                               fp);
-               }
-               for (i = 0; i < typecnt; ++i)
-                       if (writetype[i]) {
-                               puttzcode(gmtoffs[i], fp);
-                               (void) putc(isdsts[i], fp);
-                               (void) putc((unsigned char) indmap[abbrinds[i]], fp);
+       for (i = 0; i < timecnt; ++i) {
+               j = leapcnt;
+               while (--j >= 0)
+                       if (ats[i] >= trans[j]) {
+                               ats[i] = tadd(ats[i], corr[j]);
+                               break;
                        }
-               if (thischarcnt != 0)
-                       (void) fwrite((void *) thischars,
-                               (size_t) sizeof thischars[0],
-                               (size_t) thischarcnt, fp);
-               for (i = thisleapi; i < thisleaplim; ++i) {
-                       register zic_t  todo;
-
-                       if (roll[i]) {
-                               if (timecnt == 0 || trans[i] < ats[0]) {
-                                       j = 0;
-                                       while (isdsts[j])
-                                               if (++j >= typecnt) {
-                                                       j = 0;
-                                                       break;
-                                               }
-                               } else {
-                                       j = 1;
-                                       while (j < timecnt &&
-                                               trans[i] >= ats[j])
-                                                       ++j;
-                                       j = types[j - 1];
-                               }
-                               todo = tadd(trans[i], -gmtoffs[j]);
-                       } else  todo = trans[i];
-                       if (pass == 1)
-                               puttzcode((long) todo, fp);
-                       else    puttzcode64(todo, fp);
-                       puttzcode(corr[i], fp);
-               }
-               for (i = 0; i < typecnt; ++i)
-                       if (writetype[i])
-                               (void) putc(ttisstds[i], fp);
-               for (i = 0; i < typecnt; ++i)
-                       if (writetype[i])
-                               (void) putc(ttisgmts[i], fp);
-       }
-       (void) fprintf(fp, "\n%s\n", string);
+               puttzcode((long) ats[i], fp);
+       }
+       if (timecnt > 0)
+               (void) fwrite((void *) types, (size_t) sizeof types[0],
+                       (size_t) timecnt, fp);
+       for (i = 0; i < typecnt; ++i) {
+               puttzcode((long) gmtoffs[i], fp);
+               (void) putc(isdsts[i], fp);
+               (void) putc(abbrinds[i], fp);
+       }
+       if (charcnt != 0)
+               (void) fwrite((void *) chars, (size_t) sizeof chars[0],
+                       (size_t) charcnt, fp);
+       for (i = 0; i < leapcnt; ++i) {
+               if (roll[i]) {
+                       if (timecnt == 0 || trans[i] < ats[0]) {
+                               j = 0;
+                               while (isdsts[j])
+                                       if (++j >= typecnt) {
+                                               j = 0;
+                                               break;
+                                       }
+                       } else {
+                               j = 1;
+                               while (j < timecnt && trans[i] >= ats[j])
+                                       ++j;
+                               j = types[j - 1];
+                       }
+                       puttzcode((long) tadd(trans[i], -gmtoffs[j]), fp);
+               } else  puttzcode((long) trans[i], fp);
+               puttzcode((long) corr[i], fp);
+       }
+       for (i = 0; i < typecnt; ++i)
+               (void) putc(ttisstds[i], fp);
+       for (i = 0; i < typecnt; ++i)
+               (void) putc(ttisgmts[i], fp);
        if (ferror(fp) || fclose(fp)) {
                (void) fprintf(stderr, _("%s: Error writing %s\n"),
                        progname, fullname);
@@ -1737,223 +1602,21 @@ const char * const     string;
 }
 
 static void
-doabbr(abbr, format, letters, isdst, doquotes)
+doabbr(abbr, format, letters, isdst)
 char * const           abbr;
 const char * const     format;
 const char * const     letters;
 const int              isdst;
-const int              doquotes;
 {
-       register char * cp;
-       register char * slashp;
-       register int    len;
-
-       slashp = strchr(format, '/');
-       if (slashp == NULL) {
+       if (strchr(format, '/') == NULL) {
                if (letters == NULL)
                        (void) strcpy(abbr, format);
                else    (void) sprintf(abbr, format, letters);
-       } else if (isdst) {
-               (void) strcpy(abbr, slashp + 1);
-       } else {
-               if (slashp > format)
-                       (void) strncpy(abbr, format,
-                               (unsigned) (slashp - format));
-               abbr[slashp - format] = '\0';
-       }
-       if (!doquotes)
-               return;
-       for (cp = abbr; *cp != '\0'; ++cp)
-               if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", *cp) == NULL &&
-                       strchr("abcdefghijklmnopqrstuvwxyz", *cp) == NULL)
-                               break;
-       len = strlen(abbr);
-       if (len > 0 && *cp == '\0')
-               return;
-       abbr[len + 2] = '\0';
-       abbr[len + 1] = '>';
-       for ( ; len > 0; --len)
-               abbr[len] = abbr[len - 1];
-       abbr[0] = '<';
-}
-
-static void
-updateminmax(x)
-const int      x;
-{
-       if (min_year > x)
-               min_year = x;
-       if (max_year < x)
-               max_year = x;
-}
-
-static int
-stringoffset(result, offset)
-char * result;
-long   offset;
-{
-       register int    hours;
-       register int    minutes;
-       register int    seconds;
-
-       result[0] = '\0';
-       if (offset < 0) {
-               (void) strcpy(result, "-");
-               offset = -offset;
-       }
-       seconds = offset % SECSPERMIN;
-       offset /= SECSPERMIN;
-       minutes = offset % MINSPERHOUR;
-       offset /= MINSPERHOUR;
-       hours = offset;
-       if (hours >= HOURSPERDAY) {
-               result[0] = '\0';
-               return -1;
-       }
-       (void) sprintf(end(result), "%d", hours);
-       if (minutes != 0 || seconds != 0) {
-               (void) sprintf(end(result), ":%02d", minutes);
-               if (seconds != 0)
-                       (void) sprintf(end(result), ":%02d", seconds);
-       }
-       return 0;
-}
-
-static int
-stringrule(result, rp, dstoff, gmtoff)
-char *                         result;
-const struct rule * const      rp;
-const long                     dstoff;
-const long                     gmtoff;
-{
-       register long   tod;
-
-       result = end(result);
-       if (rp->r_dycode == DC_DOM) {
-               register int    month, total;
-
-               if (rp->r_dayofmonth == 29 && rp->r_month == TM_FEBRUARY)
-                       return -1;
-               total = 0;
-               for (month = 0; month < rp->r_month; ++month)
-                       total += len_months[0][month];
-               (void) sprintf(result, "J%d", total + rp->r_dayofmonth);
-       } else {
-               register int    week;
-
-               if (rp->r_dycode == DC_DOWGEQ) {
-                       week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
-                       if ((week - 1) * DAYSPERWEEK + 1 != rp->r_dayofmonth)
-                               return -1;
-               } else if (rp->r_dycode == DC_DOWLEQ) {
-                       if (rp->r_dayofmonth == len_months[1][rp->r_month])
-                               week = 5;
-                       else {
-                               week = 1 + rp->r_dayofmonth / DAYSPERWEEK;
-                               if (week * DAYSPERWEEK - 1 != rp->r_dayofmonth)
-                                       return -1;
-                       }
-               } else  return -1;      /* "cannot happen" */
-               (void) sprintf(result, "M%d.%d.%d",
-                       rp->r_month + 1, week, rp->r_wday);
-       }
-       tod = rp->r_tod;
-       if (rp->r_todisgmt)
-               tod += gmtoff;
-       if (rp->r_todisstd && rp->r_stdoff == 0)
-               tod += dstoff;
-       if (tod < 0) {
-               result[0] = '\0';
-               return -1;
-       }
-       if (tod != 2 * SECSPERMIN * MINSPERHOUR) {
-               (void) strcat(result, "/");
-               if (stringoffset(end(result), tod) != 0)
-                       return -1;
-       }
-       return 0;
-}
-
-static void
-stringzone(result, zpfirst, zonecount)
-char *                         result;
-const struct zone * const      zpfirst;
-const int                      zonecount;
-{
-       register const struct zone *    zp;
-       register struct rule *          rp;
-       register struct rule *          stdrp;
-       register struct rule *          dstrp;
-       register int                    i;
-       register const char *           abbrvar;
-
-       result[0] = '\0';
-       zp = zpfirst + zonecount - 1;
-       stdrp = dstrp = NULL;
-       for (i = 0; i < zp->z_nrules; ++i) {
-               rp = &zp->z_rules[i];
-               if (rp->r_hiwasnum || rp->r_hiyear != INT_MAX)
-                       continue;
-               if (rp->r_yrtype != NULL)
-                       continue;
-               if (rp->r_stdoff == 0) {
-                       if (stdrp == NULL)
-                               stdrp = rp;
-                       else    return;
-               } else {
-                       if (dstrp == NULL)
-                               dstrp = rp;
-                       else    return;
-               }
-       }
-       if (stdrp == NULL && dstrp == NULL) {
-               /*
-               ** There are no rules running through "max".
-               ** Let's find the latest rule.
-               */
-               for (i = 0; i < zp->z_nrules; ++i) {
-                       rp = &zp->z_rules[i];
-                       if (stdrp == NULL || rp->r_hiyear > stdrp->r_hiyear ||
-                               (rp->r_hiyear == stdrp->r_hiyear &&
-                               rp->r_month > stdrp->r_month))
-                                       stdrp = rp;
-               }
-               if (stdrp != NULL && stdrp->r_stdoff != 0)
-                       return; /* We end up in DST (a POSIX no-no). */
-               /*
-               ** Horrid special case: if year is 2037,
-               ** presume this is a zone handled on a year-by-year basis;
-               ** do not try to apply a rule to the zone.
-               */
-               if (stdrp != NULL && stdrp->r_hiyear == 2037)
-                       return;
-       }
-       if (stdrp == NULL && zp->z_nrules != 0)
-               return;
-       abbrvar = (stdrp == NULL) ? "" : stdrp->r_abbrvar;
-       doabbr(result, zp->z_format, abbrvar, FALSE, TRUE);
-       if (stringoffset(end(result), -zp->z_gmtoff) != 0) {
-               result[0] = '\0';
-               return;
-       }
-       if (dstrp == NULL)
-               return;
-       doabbr(end(result), zp->z_format, dstrp->r_abbrvar, TRUE, TRUE);
-       if (dstrp->r_stdoff != SECSPERMIN * MINSPERHOUR)
-               if (stringoffset(end(result),
-                       -(zp->z_gmtoff + dstrp->r_stdoff)) != 0) {
-                               result[0] = '\0';
-                               return;
-               }
-       (void) strcat(result, ",");
-       if (stringrule(result, dstrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) {
-               result[0] = '\0';
-               return;
-       }
-       (void) strcat(result, ",");
-       if (stringrule(result, stdrp, dstrp->r_stdoff, zp->z_gmtoff) != 0) {
-               result[0] = '\0';
-               return;
+       } else if (isdst)
+               (void) strcpy(abbr, strchr(format, '/') + 1);
+       else {
+               (void) strcpy(abbr, format);
+               *strchr(abbr, '/') = '\0';
        }
 }
 
@@ -1974,17 +1637,8 @@ const int                        zonecount;
        register int                    startttisstd;
        register int                    startttisgmt;
        register int                    type;
-       register char *                 startbuf;
-       register char *                 ab;
-       register char *                 envvar;
-       register int                    max_abbr_len;
-       register int                    max_envvar_len;
-
-       max_abbr_len = 2 + max_format_len + max_abbrvar_len;
-       max_envvar_len = 2 * max_abbr_len + 5 * 9;
-       startbuf = emalloc(max_abbr_len + 1);
-       ab = emalloc(max_abbr_len + 1);
-       envvar = emalloc(max_envvar_len + 1);
+       char                            startbuf[BUFSIZ];
+
        INITIALIZE(untiltime);
        INITIALIZE(starttime);
        /*
@@ -1999,48 +1653,6 @@ const int                        zonecount;
        */
        startttisstd = FALSE;
        startttisgmt = FALSE;
-       min_year = max_year = EPOCH_YEAR;
-       if (leapseen) {
-               updateminmax(leapminyear);
-               updateminmax(leapmaxyear);
-       }
-       for (i = 0; i < zonecount; ++i) {
-               zp = &zpfirst[i];
-               updateminmax(zp->z_untilrule.r_loyear);
-               for (j = 0; j < zp->z_nrules; ++j) {
-                       rp = &zp->z_rules[j];
-                       if (rp->r_lowasnum)
-                               updateminmax(rp->r_loyear);
-                       if (rp->r_hiwasnum)
-                               updateminmax(rp->r_hiyear);
-               }
-       }
-       /*
-       ** Generate lots of data if a rule can't cover all future times.
-       */
-       stringzone(envvar, zpfirst, zonecount);
-       if (noise && envvar[0] == '\0') {
-               register char * wp;
-
-wp = ecpyalloc(_("no POSIX environment variable for zone"));
-               wp = ecatalloc(wp, " ");
-               wp = ecatalloc(wp, zpfirst->z_name); 
-               warning(wp);
-               ifree(wp);
-       }
-       if (envvar[0] == '\0') {
-               if (min_year >= INT_MIN + YEARSPERREPEAT)
-                       min_year -= YEARSPERREPEAT;
-               else    min_year = INT_MIN;
-               if (max_year <= INT_MAX - YEARSPERREPEAT)
-                       max_year += YEARSPERREPEAT;
-               else    max_year = INT_MAX;
-       }
-       /*
-       ** For the benefit of older systems, generate data through 2037.
-       */
-       if (max_year < 2037)
-               max_year = 2037;
        for (i = 0; i < zonecount; ++i) {
                /*
                ** A guess that may well be corrected later.
@@ -2058,7 +1670,7 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
                if (zp->z_nrules == 0) {
                        stdoff = zp->z_stdoff;
                        doabbr(startbuf, zp->z_format,
-                               (char *) NULL, stdoff != 0, FALSE);
+                               (char *) NULL, stdoff != 0);
                        type = addtype(oadd(zp->z_gmtoff, stdoff),
                                startbuf, stdoff != 0, startttisstd,
                                startttisgmt);
@@ -2088,6 +1700,7 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
                                register int    k;
                                register zic_t  jtime, ktime;
                                register long   offset;
+                               char            buf[BUFSIZ];
 
                                INITIALIZE(ktime);
                                if (useuntil) {
@@ -2143,27 +1756,24 @@ wp = ecpyalloc(_("no POSIX environment variable for zone"));
                                                        stdoff);
                                                doabbr(startbuf, zp->z_format,
                                                        rp->r_abbrvar,
-                                                       rp->r_stdoff != 0,
-                                                       FALSE);
+                                                       rp->r_stdoff != 0);
                                                continue;
                                        }
                                        if (*startbuf == '\0' &&
                                                startoff == oadd(zp->z_gmtoff,
-                                               stdoff)) {
+                                               stdoff))
                                                        doabbr(startbuf,
                                                                zp->z_format,
                                                                rp->r_abbrvar,
                                                                rp->r_stdoff !=
-                                                               0,
-                                                               FALSE);
-                                       }
+                                                               0);
                                }
                                eats(zp->z_filename, zp->z_linenum,
                                        rp->r_filename, rp->r_linenum);
-                               doabbr(ab, zp->z_format, rp->r_abbrvar,
-                                       rp->r_stdoff != 0, FALSE);
+                               doabbr(buf, zp->z_format, rp->r_abbrvar,
+                                       rp->r_stdoff != 0);
                                offset = oadd(zp->z_gmtoff, rp->r_stdoff);
-                               type = addtype(offset, ab, rp->r_stdoff != 0,
+                               type = addtype(offset, buf, rp->r_stdoff != 0,
                                        rp->r_todisstd, rp->r_todisgmt);
                                addtt(ktime, type);
                        }
@@ -2196,10 +1806,7 @@ error(_("can't determine time zone abbreviation to use just after until time"));
                                starttime = tadd(starttime, -gmtoff);
                }
        }
-       writezone(zpfirst->z_name, envvar);
-       ifree(startbuf);
-       ifree(ab);
-       ifree(envvar);
+       writezone(zpfirst->z_name);
 }
 
 static void
@@ -2578,6 +2185,8 @@ register const int                        wantedy;
 will not work with pre-2004 versions of zic"));
                }
        }
+       if (dayoff < 0 && !TYPE_SIGNED(zic_t))
+               return min_time;
        if (dayoff < min_time / SECSPERDAY)
                return min_time;
        if (dayoff > max_time / SECSPERDAY)
index aecb5bb94c97574e6a76dca269b4bc02e70720bb..09cdf6940aa7b6a668bca6dd19b4f83f6e93c1bd 100644 (file)
@@ -1,4 +1,4 @@
-# @(#)zone.tab 8.5
+# @(#)zone.tab 8.1
 #
 # TZ zone descriptions
 #
@@ -44,7 +44,7 @@ AQ    -690022+0393524 Antarctica/Syowa        Syowa Station, E Ongul I
 AR     -3436-05827     America/Argentina/Buenos_Aires  Buenos Aires (BA, CF)
 AR     -3124-06411     America/Argentina/Cordoba       most locations (CB, CC, CN, ER, FM, LP, MN, NQ, RN, SA, SE, SF, SL)
 AR     -2411-06518     America/Argentina/Jujuy Jujuy (JY)
-AR     -2649-06513     America/Argentina/Tucuman       Tucuman (TM)
+AR     -3124-06411     America/Argentina/Tucuman       Tucuman (TM)
 AR     -2828-06547     America/Argentina/Catamarca     Catamarca (CT), Chubut (CH)
 AR     -2926-06651     America/Argentina/La_Rioja      La Rioja (LR)
 AR     -3132-06831     America/Argentina/San_Juan      San Juan (SJ)
@@ -99,28 +99,27 @@ BT  +2728+08939     Asia/Thimphu
 BW     -2545+02555     Africa/Gaborone
 BY     +5354+02734     Europe/Minsk
 BZ     +1730-08812     America/Belize
-CA     +4734-05243     America/St_Johns        Newfoundland Time, including SE Labrador
-CA     +4439-06336     America/Halifax Atlantic Time - Nova Scotia (most places), PEI
+CA     +4734-05243     America/St_Johns        Newfoundland Island
+CA     +4439-06336     America/Halifax Atlantic Time - Nova Scotia (most places), W Labrador, E Quebec & PEI
 CA     +4612-05957     America/Glace_Bay       Atlantic Time - Nova Scotia - places that did not observe DST 1966-1971
 CA     +4606-06447     America/Moncton Atlantic Time - New Brunswick
-CA     +5320-06025     America/Goose_Bay       Atlantic Time - Labrador - most locations
-CA     +5125-05707     America/Blanc-Sablon    Atlantic Standard Time - Quebec - Lower North Shore
+CA     +5320-06025     America/Goose_Bay       Atlantic Time - E Labrador
 CA     +4531-07334     America/Montreal        Eastern Time - Quebec - most locations
 CA     +4339-07923     America/Toronto Eastern Time - Ontario - most locations
 CA     +4901-08816     America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
 CA     +4823-08915     America/Thunder_Bay     Eastern Time - Thunder Bay, Ontario
 CA     +6608-06544     America/Pangnirtung     Eastern Time - Pangnirtung, Nunavut
 CA     +6344-06828     America/Iqaluit Eastern Time - east Nunavut
-CA     +484531-0913718 America/Atikokan        Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
-CA     +624900-0920459 America/Rankin_Inlet    Central Time - central Nunavut
+CA     +6408-08310     America/Coral_Harbour   Eastern Standard Time - Southampton Island
+CA     +6245-09210     America/Rankin_Inlet    Central Time - central Nunavut
 CA     +4953-09709     America/Winnipeg        Central Time - Manitoba & west Ontario
-CA     +4843-09434     America/Rainy_River     Central Time - Rainy River & Fort Frances, Ontario
+CA     +4843-09429     America/Rainy_River     Central Time - Rainy River & Fort Frances, Ontario
 CA     +6903-10505     America/Cambridge_Bay   Central Time - west Nunavut
 CA     +5024-10439     America/Regina  Central Standard Time - Saskatchewan - most locations
 CA     +5017-10750     America/Swift_Current   Central Standard Time - Saskatchewan - midwest
 CA     +5333-11328     America/Edmonton        Mountain Time - Alberta, east British Columbia & west Saskatchewan
 CA     +6227-11421     America/Yellowknife     Mountain Time - central Northwest Territories
-CA     +682059-1334300 America/Inuvik  Mountain Time - west Northwest Territories
+CA     +6825-11330     America/Inuvik  Mountain Time - west Northwest Territories
 CA     +5946-12014     America/Dawson_Creek    Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
 CA     +4916-12307     America/Vancouver       Pacific Time - west British Columbia
 CA     +6043-13503     America/Whitehorse      Pacific Time - south Yukon
@@ -137,12 +136,13 @@ CL        -3327-07040     America/Santiago        most locations
 CL     -2710-10927     Pacific/Easter  Easter Island & Sala y Gomez
 CM     +0403+00942     Africa/Douala
 CN     +3114+12128     Asia/Shanghai   east China - Beijing, Guangdong, Shanghai, etc.
-CN     +4545+12641     Asia/Harbin     Heilongjiang (except Mohe), Jilin
-CN     +2934+10635     Asia/Chongqing  central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.
-CN     +4348+08735     Asia/Urumqi     most of Tibet & Xinjiang
-CN     +3929+07559     Asia/Kashgar    west Tibet & Xinjiang
+CN     +4545+12641     Asia/Harbin     Heilongjiang
+CN     +2934+10635     Asia/Chongqing  central China - Gansu, Guizhou, Sichuan, Yunnan, etc.
+CN     +4348+08735     Asia/Urumqi     Tibet & most of Xinjiang Uyghur
+CN     +3929+07559     Asia/Kashgar    southwest Xinjiang Uyghur
 CO     +0436-07405     America/Bogota
 CR     +0956-08405     America/Costa_Rica
+CS     +4450+02030     Europe/Belgrade
 CU     +2308-08222     America/Havana
 CV     +1455-02331     Atlantic/Cape_Verde
 CX     -1025+10543     Indian/Christmas
@@ -177,12 +177,11 @@ GB        +512830-0001845 Europe/London
 GD     +1203-06145     America/Grenada
 GE     +4143+04449     Asia/Tbilisi
 GF     +0456-05220     America/Cayenne
-GG     +4927-00232     Europe/Guernsey
 GH     +0533-00013     Africa/Accra
 GI     +3608-00521     Europe/Gibraltar
 GL     +6411-05144     America/Godthab most locations
 GL     +7646-01840     America/Danmarkshavn    east coast, north of Scoresbysund
-GL     +7029-02158     America/Scoresbysund    Scoresbysund / Ittoqqortoormiit
+GL     +7030-02215     America/Scoresbysund    Scoresbysund / Ittoqqortoormiit
 GL     +7634-06847     America/Thule   Thule / Pituffik
 GM     +1328-01639     Africa/Banjul
 GN     +0931-01343     Africa/Conakry
@@ -205,14 +204,12 @@ ID        -0507+11924     Asia/Makassar   east & south Borneo, Celebes, Bali, Nusa Tengarra,
 ID     -0232+14042     Asia/Jayapura   Irian Jaya & the Moluccas
 IE     +5320-00615     Europe/Dublin
 IL     +3146+03514     Asia/Jerusalem
-IM     +5409-00428     Europe/Isle_of_Man
 IN     +2232+08822     Asia/Calcutta
 IO     -0720+07225     Indian/Chagos
 IQ     +3321+04425     Asia/Baghdad
 IR     +3540+05126     Asia/Tehran
 IS     +6409-02151     Atlantic/Reykjavik
 IT     +4154+01229     Europe/Rome
-JE     +4912-00237     Europe/Jersey
 JM     +1800-07648     America/Jamaica
 JO     +3157+03556     Asia/Amman
 JP     +353916+1394441 Asia/Tokyo
@@ -247,7 +244,6 @@ LY  +3254+01311     Africa/Tripoli
 MA     +3339-00735     Africa/Casablanca
 MC     +4342+00723     Europe/Monaco
 MD     +4700+02850     Europe/Chisinau
-ME     +4247+01928     Europe/Podgorica
 MG     -1855+04731     Indian/Antananarivo
 MH     +0709+17112     Pacific/Majuro  most locations
 MH     +0905+16720     Pacific/Kwajalein       Kwajalein
@@ -261,7 +257,7 @@ MO  +2214+11335     Asia/Macau
 MP     +1512+14545     Pacific/Saipan
 MQ     +1436-06105     America/Martinique
 MR     +1806-01557     Africa/Nouakchott
-MS     +1643-06213     America/Montserrat
+MS     +1644-06213     America/Montserrat
 MT     +3554+01431     Europe/Malta
 MU     -2010+05730     Indian/Mauritius
 MV     +0410+07330     Indian/Maldives
@@ -312,11 +308,9 @@ PY -2516-05740     America/Asuncion
 QA     +2517+05132     Asia/Qatar
 RE     -2052+05528     Indian/Reunion
 RO     +4426+02606     Europe/Bucharest
-RS     +4450+02030     Europe/Belgrade
 RU     +5443+02030     Europe/Kaliningrad      Moscow-01 - Kaliningrad
 RU     +5545+03735     Europe/Moscow   Moscow+00 - west Russia
-RU     +4844+04425     Europe/Volgograd        Moscow+00 - Caspian Sea
-RU     +5312+05009     Europe/Samara   Moscow+01 - Samara, Udmurtia
+RU     +5312+05009     Europe/Samara   Moscow+01 - Caspian Sea
 RU     +5651+06036     Asia/Yekaterinburg      Moscow+02 - Urals
 RU     +5500+07324     Asia/Omsk       Moscow+03 - west Siberia
 RU     +5502+08255     Asia/Novosibirsk        Moscow+03 - Novosibirsk
@@ -382,11 +376,10 @@ US        +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford Cou
 US     +411745-0863730 America/Indiana/Knox    Eastern Time - Indiana - Starke County
 US     +384452-0850402 America/Indiana/Vevay   Eastern Time - Indiana - Switzerland County
 US     +415100-0873900 America/Chicago Central Time
-US     +384038-0873143 America/Indiana/Vincennes       Central Time - Indiana - Daviess, Dubois, Knox, Martin, Perry & Pulaski Counties
+US     +384038-0873143 America/Indiana/Vincennes       Central Time - Indiana - Daviess, Dubois, Knox, Martin, Perry & Pulaski
 US     +382931-0871643 America/Indiana/Petersburg      Central Time - Indiana - Pike County
 US     +450628-0873651 America/Menominee       Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
 US     +470659-1011757 America/North_Dakota/Center     Central Time - North Dakota - Oliver County
-US     +465042-1012439 America/North_Dakota/New_Salem  Central Time - North Dakota - Morton County (except Mandan area)
 US     +394421-1045903 America/Denver  Mountain Time
 US     +433649-1161209 America/Boise   Mountain Time - south Idaho & east Oregon
 US     +364708-1084111 America/Shiprock        Mountain Time - Navajo
index 6bcd2479c6f7469d84d91e2bc09091fad8786afb..778d8ef0be587a9f1a38bd071537c2453bacba5d 100644 (file)
@@ -2,6 +2,12 @@
 
 #include <tls.h>
 
+#if USE_TLS
+@@@ use-tls = yes @@@
+#else
+@@@ use-tls = no @@@
+#endif
+
 #if USE___THREAD
 @@@ use-thread = yes @@@
 #else
index acd0ed11eb77ed42312db09018a3cefa75786bbf..5428240d43432d32c94f26d5b8ba4a041031112d 100644 (file)
--- a/version.h
+++ b/version.h
@@ -1,4 +1,4 @@
 /* This file just defines the current version number of libc.  */
 
-#define RELEASE "development"
-#define VERSION "2.5.90"
+#define RELEASE "stable"
+#define VERSION "2.5.1"