Updated to fedora-glibc-20061025T1857 fedora-glibc-2_5_90-1
authorjakub <jakub>
Wed, 25 Oct 2006 19:13:31 +0000 (19:13 +0000)
committerjakub <jakub>
Wed, 25 Oct 2006 19:13:31 +0000 (19:13 +0000)
92 files changed:
ChangeLog
NEWS
Versions.def
configure
configure.in
csu/tst-atomic.c
elf/dl-close.c
elf/dl-fptr.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-runtime.c
elf/dl-sym.c
elf/rtld.c
fedora/branch.mk
fedora/glibc.spec.in
gmon/mcount.c
include/atomic.h
include/features.h
include/link.h
include/shlib-compat.h
libio/Banner [deleted file]
libio/stdio.h
localedata/ChangeLog
localedata/locales/es_ES
localedata/locales/pa_IN
localedata/locales/tt_RU
malloc/malloc.c
malloc/memusage.c
manual/conf.texi
manual/search.texi
manual/stdio.texi
math/atest-exp.c
math/atest-exp2.c
math/atest-sincos.c
nis/Banner [deleted file]
nis/Makefile
nis/Versions
nis/nis_defaults.c
nis/nis_subr.c
nis/nis_table.c
nis/nss_nisplus/nisplus-grp.c
nis/nss_nisplus/nisplus-initgroups.c [new file with mode: 0644]
nptl/ChangeLog
nptl/pthread_attr_setstack.c
nptl/pthread_attr_setstacksize.c
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/i386/bits/semaphore.h
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/powerpc/Versions
nptl/sysdeps/unix/sysv/linux/powerpc/bits/local_lim.h [new file with mode: 0644]
nptl/sysdeps/unix/sysv/linux/powerpc/bits/semaphore.h
nptl/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c [new file with mode: 0644]
nptl/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstacksize.c [new file with mode: 0644]
nptl/sysdeps/unix/sysv/linux/rtld-lowlevel.h [new file with mode: 0644]
nptl/sysdeps/unix/sysv/linux/s390/bits/semaphore.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/x86_64/bits/semaphore.h
nscd/nscd.c
po/pl.po
po/sv.po
po/tr.po
resolv/arpa/nameser.h
resolv/res_libc.c
stdlib/cxa_finalize.c
sunrpc/Makefile
sunrpc/tst-xdrmem2.c [new file with mode: 0644]
sunrpc/xdr_mem.c
sysdeps/generic/ldsodefs.h
sysdeps/generic/rtld-lowlevel.h [new file with mode: 0644]
sysdeps/generic/unsecvars.h
sysdeps/i386/i486/bits/atomic.h
sysdeps/mach/hurd/futimes.c
sysdeps/mach/hurd/lutimes.c
sysdeps/mach/hurd/utimes.c
sysdeps/posix/getaddrinfo.c
sysdeps/unix/sysv/linux/Versions
sysdeps/unix/sysv/linux/i386/sysdep.h
sysdeps/unix/sysv/linux/sys/epoll.h
sysdeps/unix/sysv/linux/syscalls.list
sysdeps/x86_64/bits/atomic.h
version.h

index 7c213e1..41a8cb1 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,232 @@
+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
+       as signed longs, check for x_base + pos overflow.
+       * 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>
+
+       [BZ #3352]
+       * 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
+       components which lack them.
+
+       * nis/nis_subr.c (nis_getnames): Make sure that we always return
+       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.
+
+       * po/tr.po: Update from translation team.
+
+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.
+
+2006-09-27  Jakub Jelinek  <jakub@redhat.com>
+
+       * nis/nis_table.c (nis_list): Handle FOLLOW_PATH | ALL_RESULTS
+       when callback is NULL.
+
+       * nis/Versions (libnss_nisplus): Add
+       _nss_nisplus_initgroups_dyn@@GLIBC_PRIVATE.
+       * nis/Makefile (libnss_nisplus-routines): Add nisplus-initgroups.
+       * nis/nss_nisplus/nisplus-grp.c (tablename_val, tablename_len,
+       _nss_create_tablename): Rename to...
+       (grp_tablename_val, grp_tablename_len, _nss_grp_create_tablename):
+       ... these.  No longer static.
+       (internal_setgrent): Adjust users.
+       (_nss_nisplus_getgrnam_r, _nss_nisplus_getgrgid_r): Likewise.
+       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.
+
+2006-10-06  Ulrich Drepper  <drepper@redhat.com>
+
+       * po/pl.po: Update from translation team.
+
+       * nscd/nscd.c (main): Fix typo in message.
+       Patch by Jakub Bogsz <qboosh@pld-linux.org>.
+
 2006-10-02  Jakub Jelinek  <jakub@redhat.com>
 
        [BZ #3291]
        * nis/nis_xdr.c: Avoid some function calls.
 
 2006-08-07  Jakub Jelinek  <jakub@redhat.com>
-            Ulrich Drepper  <drepper@redhat.com>
+           Ulrich Drepper  <drepper@redhat.com>
 
        * nis/nis_call.c (rec_dirsearch) [case LOWER_NAME]: Don't take
        short cut if only one name component is stripped away.
diff --git a/NEWS b/NEWS
index 83b6a5e..f078f3c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,10 +1,15 @@
-GNU C Library NEWS -- history of user-visible changes.  2006-09-29
+GNU C Library NEWS -- history of user-visible changes.  2006-10-11
 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
+
+* New Linux interfaces: epoll_pwait.
+
+\f
 Version 2.5
 
 * For Linux, the sorting of addresses returned by getaddrinfo now also
index b492caa..2542084 100644 (file)
@@ -22,6 +22,7 @@ libc {
   GLIBC_2.3.4
   GLIBC_2.4
   GLIBC_2.5
+  GLIBC_2.6
 %ifdef USE_IN_LIBIO
   HURD_CTHREADS_0.3
 %endif
@@ -82,6 +83,7 @@ libpthread {
   GLIBC_2.3.3
   GLIBC_2.3.4
   GLIBC_2.4
+  GLIBC_2.6
   GLIBC_PRIVATE
 }
 libresolv {
index d14f89a..8bd2144 100755 (executable)
--- a/configure
+++ b/configure
@@ -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=yes]
+  --enable-profile        build profiled library [default=no]
   --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=yes
+  profile=no
 fi;
 # Check whether --enable-omitfp or --disable-omitfp was given.
 if test "${enable_omitfp+set}" = set; then
index 924b040..6a7e51d 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=yes@:>@]),
+                             [build profiled library @<:@default=no@:>@]),
              [profile=$enableval],
-             [profile=yes])
+             [profile=no])
 AC_ARG_ENABLE([omitfp],
               AC_HELP_STRING([--enable-omitfp],
                              [build undebuggable optimized library @<:@default=no@:>@]),
index 7a2e3d0..7c0b022 100644 (file)
@@ -1,5 +1,5 @@
 /* Tests for atomic.h macros.
-   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
 
@@ -379,6 +379,117 @@ 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 6a2ad97..bfcceea 100644 (file)
@@ -19,6 +19,7 @@
 
 #include <assert.h>
 #include <dlfcn.h>
+#include <errno.h>
 #include <libintl.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <ldsodefs.h>
 #include <sys/types.h>
 #include <sys/mman.h>
+#include <sysdep-cancel.h>
 
 
 /* Type of the constructor functions.  */
 typedef void (*fini_t) (void);
 
 
+/* Special l_idx value used to indicate which objects remain loaded.  */
+#define IDX_STILL_USED -1
+
+
 #ifdef USE_TLS
 /* Returns true we an non-empty was found.  */
 static bool
@@ -188,7 +194,7 @@ _dl_close (void *_map)
       done[done_index] = 1;
       used[done_index] = 1;
       /* Signal the object is still needed.  */
-      l->l_idx = -1;
+      l->l_idx = IDX_STILL_USED;
 
       /* Mark all dependencies as used.  */
       if (l->l_initfini != NULL)
@@ -196,7 +202,7 @@ _dl_close (void *_map)
          struct link_map **lp = &l->l_initfini[1];
          while (*lp != NULL)
            {
-             if ((*lp)->l_idx != -1)
+             if ((*lp)->l_idx != IDX_STILL_USED)
                {
                  assert ((*lp)->l_idx >= 0 && (*lp)->l_idx < nloaded);
 
@@ -217,7 +223,7 @@ _dl_close (void *_map)
          {
            struct link_map *jmap = l->l_reldeps[j];
 
-           if (jmap->l_idx != -1)
+           if (jmap->l_idx != IDX_STILL_USED)
              {
                assert (jmap->l_idx >= 0 && jmap->l_idx < nloaded);
 
@@ -310,8 +316,9 @@ _dl_close (void *_map)
       /* Else used[i].  */
       else if (imap->l_type == lt_loaded)
        {
-         if (imap->l_searchlist.r_list == NULL
-             && imap->l_initfini != NULL)
+         struct r_scope_elem *new_list = NULL;
+
+         if (imap->l_searchlist.r_list == NULL && imap->l_initfini != NULL)
            {
              /* The object is still used.  But one of the objects we are
                 unloading right now is responsible for loading it.  If
@@ -328,44 +335,119 @@ _dl_close (void *_map)
              imap->l_searchlist.r_list = &imap->l_initfini[cnt + 1];
              imap->l_searchlist.r_nlist = cnt;
 
-             for (cnt = 0; imap->l_scope[cnt] != NULL; ++cnt)
-               /* This relies on l_scope[] entries being always set either
-                  to its own l_symbolic_searchlist address, or some map's
-                  l_searchlist address.  */
-               if (imap->l_scope[cnt] != &imap->l_symbolic_searchlist)
-                 {
-                   struct link_map *tmap;
-
-                   tmap = (struct link_map *) ((char *) imap->l_scope[cnt]
-                                               - offsetof (struct link_map,
-                                                           l_searchlist));
-                   assert (tmap->l_ns == ns);
-                   if (tmap->l_idx != -1)
-                     {
-                       imap->l_scope[cnt] = &imap->l_searchlist;
-                       break;
-                     }
-                 }
+             new_list = &imap->l_searchlist;
            }
-         else
+
+         /* Count the number of scopes which remain after the unload.
+            When we add the local search list count it.  Always add
+            one for the terminating NULL pointer.  */
+         size_t remain = (new_list != NULL) + 1;
+         bool removed_any = false;
+         for (size_t cnt = 0; imap->l_scoperec->scope[cnt] != NULL; ++cnt)
+           /* This relies on l_scope[] entries being always set either
+              to its own l_symbolic_searchlist address, or some map's
+              l_searchlist address.  */
+           if (imap->l_scoperec->scope[cnt] != &imap->l_symbolic_searchlist)
+             {
+               struct link_map *tmap = (struct link_map *)
+                 ((char *) imap->l_scoperec->scope[cnt]
+                  - offsetof (struct link_map, l_searchlist));
+               assert (tmap->l_ns == ns);
+               if (tmap->l_idx == IDX_STILL_USED)
+                 ++remain;
+               else
+                 removed_any = true;
+             }
+           else
+             ++remain;
+
+         if (removed_any)
            {
-             unsigned int cnt = 0;
-             while (imap->l_scope[cnt] != NULL)
+             /* Always allocate a new array for the scope.  This is
+                necessary since we must be able to determine the last
+                user of the current array.  If possible use the link map's
+                memory.  */
+             size_t new_size;
+             struct r_scoperec *newp;
+             if (imap->l_scoperec != &imap->l_scoperec_mem
+                 && remain < NINIT_SCOPE_ELEMS (imap)
+                 && imap->l_scoperec_mem.nusers == 0)
+               {
+                 new_size = NINIT_SCOPE_ELEMS (imap);
+                 newp = &imap->l_scoperec_mem;
+               }
+             else
+               {
+                 new_size = imap->l_scope_max;
+                 newp = (struct r_scoperec *)
+                   malloc (sizeof (struct r_scoperec)
+                           + new_size * sizeof (struct r_scope_elem *));
+                 if (newp == NULL)
+                   _dl_signal_error (ENOMEM, "dlclose", NULL,
+                                     N_("cannot create scope list"));
+               }
+
+             newp->nusers = 0;
+             newp->remove_after_use = false;
+             newp->notify = false;
+
+             /* Copy over the remaining scope elements.  */
+             remain = 0;
+             for (size_t cnt = 0; imap->l_scoperec->scope[cnt] != NULL; ++cnt)
+               {
+                 if (imap->l_scoperec->scope[cnt]
+                     != &imap->l_symbolic_searchlist)
+                   {
+                     struct link_map *tmap = (struct link_map *)
+                       ((char *) imap->l_scoperec->scope[cnt]
+                        - offsetof (struct link_map, l_searchlist));
+                     if (tmap->l_idx != IDX_STILL_USED)
+                       {
+                         /* Remove the scope.  Or replace with own map's
+                            scope.  */
+                         if (new_list != NULL)
+                           {
+                             newp->scope[remain++] = new_list;
+                             new_list = NULL;
+                           }
+                         continue;
+                       }
+                   }
+
+                 newp->scope[remain++] = imap->l_scoperec->scope[cnt];
+               }
+             newp->scope[remain] = NULL;
+
+             struct r_scoperec *old = imap->l_scoperec;
+
+             if (SINGLE_THREAD_P)
+               imap->l_scoperec = newp;
+             else
                {
-                 if (imap->l_scope[cnt] == &map->l_searchlist)
+                 __rtld_mrlock_change (imap->l_scoperec_lock);
+                 imap->l_scoperec = newp;
+                 __rtld_mrlock_done (imap->l_scoperec_lock);
+
+                 if (atomic_increment_val (&old->nusers) != 1)
                    {
-                     while ((imap->l_scope[cnt] = imap->l_scope[cnt + 1])
-                            != NULL)
-                       ++cnt;
-                     break;
+                     old->remove_after_use = true;
+                     old->notify = true;
+                     if (atomic_decrement_val (&old->nusers) != 0)
+                       __rtld_waitzero (old->nusers);
                    }
-                 ++cnt;
                }
+
+             /* No user anymore, we can free it now.  */
+             if (old != &imap->l_scoperec_mem)
+               free (old);
+
+             imap->l_scope_max = new_size;
            }
 
          /* The loader is gone, so mark the object as not having one.
-            Note: l_idx != -1 -> object will be removed.  */
-         if (imap->l_loader != NULL && imap->l_loader->l_idx != -1)
+            Note: l_idx != IDX_STILL_USED -> object will be removed.  */
+         if (imap->l_loader != NULL
+             && imap->l_loader->l_idx != IDX_STILL_USED)
            imap->l_loader = NULL;
 
          /* Remember where the first dynamically loaded object is.  */
@@ -570,8 +652,8 @@ _dl_close (void *_map)
          free (imap->l_initfini);
 
          /* Remove the scope array if we allocated it.  */
-         if (imap->l_scope != imap->l_scope_mem)
-           free (imap->l_scope);
+         if (imap->l_scoperec != &imap->l_scoperec_mem)
+           free (imap->l_scoperec);
 
          if (imap->l_phdr_allocated)
            free ((void *) imap->l_phdr);
index 78beecf..e068124 100644 (file)
@@ -1,5 +1,5 @@
 /* Manage function descriptors.  Generic version.
-   Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
+   Copyright (C) 1999-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
@@ -40,7 +40,7 @@
 
 #ifndef COMPARE_AND_SWAP
 # define COMPARE_AND_SWAP(ptr, old, new) \
-  (atomic_compare_and_exchange_bool_acq (ptr, new, old) == 0)
+  (catomic_compare_and_exchange_bool_acq (ptr, new, old) == 0)
 #endif
 
 ElfW(Addr) _dl_boot_fptr_table [ELF_MACHINE_BOOT_FPTR_TABLE_LEN];
index 1b995ed..8b78a7a 100644 (file)
@@ -1,5 +1,5 @@
 /* Handle loading and unloading shared objects for internal libc purposes.
-   Copyright (C) 1999,2000,2001,2002,2004,2005 Free Software Foundation, Inc.
+   Copyright (C) 1999-2002,2004,2005,2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Zack Weinberg <zack@rabi.columbia.edu>, 1999.
 
@@ -133,7 +133,8 @@ do_dlsym_private (void *ptr)
   struct do_dlsym_args *args = (struct do_dlsym_args *) ptr;
   args->ref = NULL;
   l = GLRO(dl_lookup_symbol_x) (args->name, args->map, &args->ref,
-                               args->map->l_scope, &vers, 0, 0, NULL);
+                               args->map->l_scoperec->scope, &vers, 0, 0,
+                               NULL);
   args->loadbase = l;
 }
 
index 36dc123..172fb2f 100644 (file)
@@ -1473,7 +1473,7 @@ cannot enable executable stack as shared object requires");
      have to do this for the main map.  */
   if ((mode & RTLD_DEEPBIND) == 0
       && __builtin_expect (l->l_info[DT_SYMBOLIC] != NULL, 0)
-      && &l->l_searchlist != l->l_scope[0])
+      && &l->l_searchlist != l->l_scoperec->scope[0])
     {
       /* Create an appropriate searchlist.  It contains only this map.
         This is the definition of DT_SYMBOLIC in SysVr4.  */
@@ -1490,11 +1490,11 @@ cannot enable executable stack as shared object requires");
       l->l_symbolic_searchlist.r_nlist = 1;
 
       /* Now move the existing entries one back.  */
-      memmove (&l->l_scope[1], &l->l_scope[0],
-              (l->l_scope_max - 1) * sizeof (l->l_scope[0]));
+      memmove (&l->l_scoperec->scope[1], &l->l_scoperec->scope[0],
+              (l->l_scope_max - 1) * sizeof (l->l_scoperec->scope[0]));
 
       /* Now add the new entry.  */
-      l->l_scope[0] = &l->l_symbolic_searchlist;
+      l->l_scoperec->scope[0] = &l->l_symbolic_searchlist;
     }
 
   /* Remember whether this object must be initialized first.  */
index 7cfcc62..7238169 100644 (file)
@@ -207,7 +207,11 @@ _dl_debug_bindings (const char *undef_name, struct link_map *undef_map,
 
 
 /* Search loaded objects' symbol tables for a definition of the symbol
-   UNDEF_NAME, perhaps with a requested version for the symbol.  */
+   UNDEF_NAME, perhaps with a requested version for the symbol.
+
+   We must never have calls to the audit functions inside this function
+   or in any function which gets called.  If this would happen the audit
+   code might create a thread which can throw off all the scope locking.  */
 lookup_t
 internal_function
 _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
index 868d3bd..8e78709 100644 (file)
@@ -1,5 +1,6 @@
 /* Minimal replacements for basic facilities used in the dynamic linker.
-   Copyright (C) 1995-1998,2000-2002,2004,2005 Free Software Foundation, Inc.
+   Copyright (C) 1995-1998,2000-2002,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
@@ -128,14 +129,13 @@ free (void *ptr)
 void * weak_function
 realloc (void *ptr, size_t n)
 {
-  void *new;
   if (ptr == NULL)
     return malloc (n);
   assert (ptr == alloc_last_block);
+  size_t old_size = alloc_ptr - alloc_last_block;
   alloc_ptr = alloc_last_block;
-  new = malloc (n);
-  assert (new == ptr);
-  return new;
+  void *new = malloc (n);
+  return new != ptr ? memcpy (new, ptr, old_size) : new;
 }
 \f
 /* Avoid signal frobnication in setjmp/longjmp.  Keeps things smaller.  */
index 86f7a8e..c5dae9e 100644 (file)
@@ -1,5 +1,5 @@
 /* Storage management for the chain of loaded shared objects.
-   Copyright (C) 1995-2002, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1995-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
@@ -82,8 +82,14 @@ _dl_new_object (char *realname, const char *libname, int type,
   /* Use the 'l_scope_mem' array by default for the the 'l_scope'
      information.  If we need more entries we will allocate a large
      array dynamically.  */
-  new->l_scope = new->l_scope_mem;
-  new->l_scope_max = sizeof (new->l_scope_mem) / sizeof (new->l_scope_mem[0]);
+  new->l_scoperec = &new->l_scoperec_mem;
+  new->l_scope_max = (sizeof (new->l_scope_realmem.scope_elems)
+                     / sizeof (new->l_scope_realmem.scope_elems[0]));
+
+  /* No need to initialize the scope lock if the initializer is zero.  */
+#if _RTLD_MRLOCK_INITIALIZER != 0
+  __rtld_mrlock_initialize (new->l_scoperec_mem.lock);
+#endif
 
   /* Counter for the scopes we have to handle.  */
   idx = 0;
@@ -98,7 +104,8 @@ _dl_new_object (char *realname, const char *libname, int type,
       l->l_next = new;
 
       /* Add the global scope.  */
-      new->l_scope[idx++] = &GL(dl_ns)[nsid]._ns_loaded->l_searchlist;
+      new->l_scoperec->scope[idx++]
+       = &GL(dl_ns)[nsid]._ns_loaded->l_searchlist;
     }
   else
     GL(dl_ns)[nsid]._ns_loaded = new;
@@ -114,15 +121,15 @@ _dl_new_object (char *realname, const char *libname, int type,
       loader = loader->l_loader;
 
   /* Insert the scope if it isn't the global scope we already added.  */
-  if (idx == 0 || &loader->l_searchlist != new->l_scope[0])
+  if (idx == 0 || &loader->l_searchlist != new->l_scoperec->scope[0])
     {
       if ((mode & RTLD_DEEPBIND) != 0 && idx != 0)
        {
-         new->l_scope[1] = new->l_scope[0];
+         new->l_scoperec->scope[1] = new->l_scoperec->scope[0];
          idx = 0;
        }
 
-      new->l_scope[idx] = &loader->l_searchlist;
+      new->l_scoperec->scope[idx] = &loader->l_searchlist;
     }
 
   new->l_local_scope[0] = &new->l_searchlist;
index 8d057f8..85b9637 100644 (file)
@@ -31,6 +31,7 @@
 #include <ldsodefs.h>
 #include <bp-sym.h>
 #include <caller.h>
+#include <sysdep-cancel.h>
 
 #include <dl-dst.h>
 
@@ -343,7 +344,7 @@ dl_open_worker (void *a)
                 start the profiling.  */
              struct link_map *old_profile_map = GL(dl_profile_map);
 
-             _dl_relocate_object (l, l->l_scope, 1, 1);
+             _dl_relocate_object (l, l->l_scoperec->scope, 1, 1);
 
              if (old_profile_map == NULL && GL(dl_profile_map) != NULL)
                {
@@ -356,7 +357,7 @@ dl_open_worker (void *a)
            }
          else
 #endif
-           _dl_relocate_object (l, l->l_scope, lazy, 0);
+           _dl_relocate_object (l, l->l_scoperec->scope, lazy, 0);
        }
 
       if (l == new)
@@ -374,11 +375,13 @@ dl_open_worker (void *a)
         not been loaded here and now.  */
       if (imap->l_init_called && imap->l_type == lt_loaded)
        {
-         struct r_scope_elem **runp = imap->l_scope;
+         struct r_scope_elem **runp = imap->l_scoperec->scope;
          size_t cnt = 0;
 
          while (*runp != NULL)
            {
+             if (*runp == &new->l_searchlist)
+               break;
              ++cnt;
              ++runp;
            }
@@ -391,35 +394,63 @@ dl_open_worker (void *a)
            {
              /* The 'r_scope' array is too small.  Allocate a new one
                 dynamically.  */
-             struct r_scope_elem **newp;
-             size_t new_size = imap->l_scope_max * 2;
+             size_t new_size;
+             struct r_scoperec *newp;
 
-             if (imap->l_scope == imap->l_scope_mem)
+             if (imap->l_scoperec != &imap->l_scoperec_mem
+                 && imap->l_scope_max < NINIT_SCOPE_ELEMS (imap)
+                 && imap->l_scoperec_mem.nusers == 0)
                {
-                 newp = (struct r_scope_elem **)
-                   malloc (new_size * sizeof (struct r_scope_elem *));
-                 if (newp == NULL)
-                   _dl_signal_error (ENOMEM, "dlopen", NULL,
-                                     N_("cannot create scope list"));
-                 imap->l_scope = memcpy (newp, imap->l_scope,
-                                         cnt * sizeof (imap->l_scope[0]));
+                 new_size = NINIT_SCOPE_ELEMS (imap);
+                 newp = &imap->l_scoperec_mem;
                }
              else
                {
-                 newp = (struct r_scope_elem **)
-                   realloc (imap->l_scope,
-                            new_size * sizeof (struct r_scope_elem *));
+                 new_size = imap->l_scope_max * 2;
+                 newp = (struct r_scoperec *)
+                   malloc (sizeof (struct r_scoperec)
+                           + new_size * sizeof (struct r_scope_elem *));
                  if (newp == NULL)
                    _dl_signal_error (ENOMEM, "dlopen", NULL,
                                      N_("cannot create scope list"));
-                 imap->l_scope = newp;
+               }
+
+             newp->nusers = 0;
+             newp->remove_after_use = false;
+             newp->notify = false;
+             memcpy (newp->scope, imap->l_scoperec->scope,
+                     cnt * sizeof (imap->l_scoperec->scope[0]));
+             struct r_scoperec *old = imap->l_scoperec;
+
+             if (old == &imap->l_scoperec_mem)
+               imap->l_scoperec = newp;
+             else if (SINGLE_THREAD_P)
+               {
+                 imap->l_scoperec = newp;
+                 free (old);
+               }
+             else
+               {
+                 __rtld_mrlock_change (imap->l_scoperec_lock);
+                 imap->l_scoperec = newp;
+                 __rtld_mrlock_done (imap->l_scoperec_lock);
+
+                 atomic_increment (&old->nusers);
+                 old->remove_after_use = true;
+                 if (atomic_decrement_val (&old->nusers) == 0)
+                   /* No user, we can free it here and now.  */
+                   free (old);
                }
 
              imap->l_scope_max = new_size;
            }
 
-         imap->l_scope[cnt++] = &new->l_searchlist;
-         imap->l_scope[cnt] = NULL;
+         /* First terminate the extended list.  Otherwise a thread
+            might use the new last element and then use the garbage
+            at offset IDX+1.  */
+         imap->l_scoperec->scope[cnt + 1] = NULL;
+         atomic_write_barrier ();
+         imap->l_scoperec->scope[cnt] = &new->l_searchlist;
        }
 #if USE_TLS
       /* Only add TLS memory if this object is loaded now and
index 41214c1..47033f3 100644 (file)
@@ -1,5 +1,5 @@
 /* Profiling of shared libraries.
-   Copyright (C) 1997-2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1997-2002, 2003, 2004, 2006 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 = atomic_exchange_and_add (&fromidx, 1) + 1;
+             newfromidx = catomic_exchange_and_add (&fromidx, 1) + 1;
              froms[newfromidx].here = &data[narcs];
              froms[newfromidx].link = tos[to_index];
              tos[to_index] = newfromidx;
-             atomic_increment (&narcs);
+             catomic_increment (&narcs);
            }
 
          /* If we still have no entry stop searching and insert.  */
          if (*topcindex == 0)
            {
-             uint_fast32_t newarc = atomic_exchange_and_add (narcsp, 1);
+             uint_fast32_t newarc = catomic_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 = atomic_exchange_and_add (&fromidx, 1) + 1;
+             *topcindex = catomic_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;
-             atomic_increment (&narcs);
+             catomic_increment (&narcs);
 
              break;
            }
@@ -547,7 +547,7 @@ _dl_mcount (ElfW(Addr) frompc, ElfW(Addr) selfpc)
     }
 
   /* Increment the counter.  */
-  atomic_increment (&fromp->here->count);
+  catomic_increment (&fromp->here->count);
 
  done:
   ;
index f92cbe2..8bf5b89 100644 (file)
@@ -1,5 +1,5 @@
 /* On-demand PLT fixup for shared objects.
-   Copyright (C) 1995-2002,2003,2004,2005 Free Software Foundation, Inc.
+   Copyright (C) 1995-2002,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
@@ -24,6 +24,7 @@
 #include <unistd.h>
 #include <sys/param.h>
 #include <ldsodefs.h>
+#include <sysdep-cancel.h>
 #include "dynamic-link.h"
 
 #if (!defined ELF_MACHINE_NO_RELA && !defined ELF_MACHINE_PLT_REL) \
@@ -92,16 +93,36 @@ _dl_fixup (
            version = NULL;
        }
 
+      struct r_scoperec *scoperec = l->l_scoperec;
+      if (l->l_type == lt_loaded && !SINGLE_THREAD_P)
+       {
+         __rtld_mrlock_lock (l->l_scoperec_lock);
+         scoperec = l->l_scoperec;
+         atomic_increment (&scoperec->nusers);
+         __rtld_mrlock_unlock (l->l_scoperec_lock);
+       }
+
       result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym,
-                                   l->l_scope, version, ELF_RTYPE_CLASS_PLT,
+                                   scoperec->scope, version,
+                                   ELF_RTYPE_CLASS_PLT,
                                    DL_LOOKUP_ADD_DEPENDENCY, NULL);
 
+      if (l->l_type == lt_loaded && !SINGLE_THREAD_P
+         && atomic_decrement_val (&scoperec->nusers) == 0
+         && __builtin_expect (scoperec->remove_after_use, 0))
+       {
+         if (scoperec->notify)
+           __rtld_notify (scoperec->nusers);
+         else
+           free (scoperec);
+       }
+
       /* Currently result contains the base load address (or link map)
         of the object that defines sym.  Now add in the symbol
         offset.  */
       value = DL_FIXUP_MAKE_VALUE (result,
-                                  sym ? LOOKUP_VALUE_ADDRESS (result)
-                                        + sym->st_value : 0);
+                                  sym ? (LOOKUP_VALUE_ADDRESS (result)
+                                         + sym->st_value) : 0);
     }
   else
     {
@@ -174,11 +195,30 @@ _dl_profile_fixup (
                version = NULL;
            }
 
+         struct r_scoperec *scoperec = l->l_scoperec;
+         if (l->l_type == lt_loaded && !SINGLE_THREAD_P)
+           {
+             __rtld_mrlock_lock (l->l_scoperec_lock);
+             scoperec = l->l_scoperec;
+             atomic_increment (&scoperec->nusers);
+             __rtld_mrlock_unlock (l->l_scoperec_lock);
+           }
+
          result = _dl_lookup_symbol_x (strtab + refsym->st_name, l, &defsym,
-                                       l->l_scope, version,
+                                       scoperec->scope, version,
                                        ELF_RTYPE_CLASS_PLT,
                                        DL_LOOKUP_ADD_DEPENDENCY, NULL);
 
+         if (l->l_type == lt_loaded && !SINGLE_THREAD_P
+             && atomic_decrement_val (&scoperec->nusers) == 0
+             && __builtin_expect (scoperec->remove_after_use, 0))
+           {
+             if (scoperec->notify)
+               __rtld_notify (scoperec->nusers);
+             else
+               free (scoperec);
+           }
+
          /* Currently result contains the base load address (or link map)
             of the object that defines sym.  Now add in the symbol
             offset.  */
index d2b0ec0..34d75a1 100644 (file)
@@ -17,6 +17,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <assert.h>
 #include <stddef.h>
 #include <setjmp.h>
 #include <libintl.h>
@@ -24,6 +25,7 @@
 #include <dlfcn.h>
 #include <ldsodefs.h>
 #include <dl-hash.h>
+#include <sysdep-cancel.h>
 #ifdef USE_TLS
 # include <dl-tls.h>
 #endif
@@ -58,6 +60,30 @@ _dl_tls_symaddr (struct link_map *map, const ElfW(Sym) *ref)
 #endif
 
 
+struct call_dl_lookup_args
+{
+  /* Arguments to do_dlsym.  */
+  struct link_map *map;
+  const char *name;
+  struct r_scope_elem **scope;
+  struct r_found_version *vers;
+  int flags;
+
+  /* Return values of do_dlsym.  */
+  lookup_t loadbase;
+  const ElfW(Sym) **refp;
+};
+
+static void
+call_dl_lookup (void *ptr)
+{
+  struct call_dl_lookup_args *args = (struct call_dl_lookup_args *) ptr;
+  args->map = GLRO(dl_lookup_symbol_x) (args->name, args->map, args->refp,
+                                       args->scope, args->vers, 0,
+                                       args->flags, NULL);
+}
+
+
 static void *
 internal_function
 do_sym (void *handle, const char *name, void *who,
@@ -84,10 +110,62 @@ do_sym (void *handle, const char *name, void *who,
        }
 
   if (handle == RTLD_DEFAULT)
-    /* Search the global scope.  */
-    result = GLRO(dl_lookup_symbol_x) (name, match, &ref, match->l_scope,
-                                      vers, 0, flags|DL_LOOKUP_ADD_DEPENDENCY,
-                                      NULL);
+    {
+      /* Search the global scope.  We have the simple case where
+        we look up in the scope of an object which was part of
+        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 || SINGLE_THREAD_P)
+       result = GLRO(dl_lookup_symbol_x) (name, match, &ref,
+                                          match->l_scoperec->scope, vers, 0,
+                                          flags | DL_LOOKUP_ADD_DEPENDENCY,
+                                          NULL);
+      else
+       {
+         __rtld_mrlock_lock (match->l_scoperec_lock);
+         struct r_scoperec *scoperec = match->l_scoperec;
+         atomic_increment (&scoperec->nusers);
+         __rtld_mrlock_unlock (match->l_scoperec_lock);
+
+         struct call_dl_lookup_args args;
+         args.name = name;
+         args.map = match;
+         args.scope = scoperec->scope;
+         args.vers = vers;
+         args.flags = flags | DL_LOOKUP_ADD_DEPENDENCY;
+         args.refp = &ref;
+
+         const char *objname;
+         const char *errstring = NULL;
+         bool malloced;
+         int err = GLRO(dl_catch_error) (&objname, &errstring, &malloced,
+                                         call_dl_lookup, &args);
+
+         if (atomic_decrement_val (&scoperec->nusers) == 0
+             && __builtin_expect (scoperec->remove_after_use, 0))
+           {
+             if (scoperec->notify)
+               __rtld_notify (scoperec->nusers);
+             else
+               free (scoperec);
+           }
+
+         if (__builtin_expect (errstring != NULL, 0))
+           {
+             /* The lookup was unsuccessful.  Rethrow the error.  */
+             char *errstring_dup = strdupa (errstring);
+             char *objname_dup = strdupa (objname);
+             if (malloced)
+               free ((char *) errstring);
+
+             GLRO(dl_signal_error) (err, objname_dup, NULL, errstring_dup);
+             /* NOTREACHED */
+           }
+
+         result = args.map;
+       }
+    }
   else if (handle == RTLD_NEXT)
     {
       if (__builtin_expect (match == GL(dl_ns)[LM_ID_BASE]._ns_loaded, 0))
index 7746377..ace3a30 100644 (file)
@@ -609,7 +609,7 @@ relocate_doit (void *a)
 {
   struct relocate_args *args = (struct relocate_args *) a;
 
-  _dl_relocate_object (args->l, args->l->l_scope, args->lazy, 0);
+  _dl_relocate_object (args->l, args->l->l_scoperec->scope, args->lazy, 0);
 }
 
 static void
@@ -1963,8 +1963,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_scoperec->scope,
+                                         NULL, ELF_RTYPE_CLASS_PLT,
                                          DL_LOOKUP_ADD_DEPENDENCY, NULL);
 
            loadbase = LOOKUP_VALUE_ADDRESS (result);
@@ -2006,8 +2006,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_scoperec->scope, 0, 0);
                }
             }
 #define VERNEEDTAG (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGIDX (DT_VERNEED))
@@ -2227,7 +2227,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
            }
 
          if (l != &GL(dl_rtld_map))
-           _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy),
+           _dl_relocate_object (l, l->l_scoperec->scope, GLRO(dl_lazy),
                                 consider_profiling);
 
 #ifdef USE_TLS
@@ -2303,7 +2303,8 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
       HP_TIMING_NOW (start);
       /* 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_scoperec->scope,
+                          0, 0);
       HP_TIMING_NOW (stop);
       HP_TIMING_DIFF (add, start, stop);
       HP_TIMING_ACCUM_NT (relocate_time, add);
index 5c112f2..3f862e4 100644 (file)
@@ -3,5 +3,5 @@ glibc-branch := fedora
 glibc-base := HEAD
 DIST_BRANCH := devel
 COLLECTION := dist-fc4
-fedora-sync-date := 2006-10-02 18:58 UTC
-fedora-sync-tag := fedora-glibc-20061002T1858
+fedora-sync-date := 2006-10-25 18:57 UTC
+fedora-sync-tag := fedora-glibc-20061025T1857
index 37cda60..dca78b1 100644 (file)
@@ -1,4 +1,4 @@
-%define glibcrelease 2
+%define glibcrelease 1
 %define auxarches i586 i686 athlon sparcv9 alphaev6
 %define xenarches i686 athlon
 %ifarch %{xenarches}
@@ -1528,6 +1528,16 @@ rm -f *.filelist*
 %endif
 
 %changelog
+* Wed Oct 25 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-1
+- fix i?86 6 argument syscalls (e.g. splice)
+- fix rtld minimal realloc (BZ#3352)
+- fix RFC3484 getaddrinfo sorting according to rules 4 and 7 (BZ#3369)
+- fix xdrmem_setpos (#211452)
+- bump __GLIBC_MINOR__
+- increase PTHREAD_STACK_MIN on ppc{,64} to 128K to allow
+  64K pagesize kernels (#209877)
+- speed up initgroups on NIS+ (#208203)
+
 * Mon Oct  2 2006 Jakub Jelinek <jakub@redhat.com> 2.5-2
 - fix nscd database growing (#207928)
 - bypass prelinking when LD_DYNAMIC_WEAK=1 is in the environment
index 32a5f1e..5a4a249 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 (atomic_compare_and_exchange_bool_acq (&p->state, GMON_PROF_BUSY,
-                                                 GMON_PROF_ON))
+       if (catomic_compare_and_exchange_bool_acq (&p->state, GMON_PROF_BUSY,
+                                                  GMON_PROF_ON))
          return;
 
        /*
index a1598e3..ec1e989 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) __result;                                                \
+    __typeof (*mem) __atg1_result;                                           \
     if (sizeof (*mem) == 1)                                                  \
-      __result = pre##_8_##post (mem, __VA_ARGS__);                          \
+      __atg1_result = pre##_8_##post (mem, __VA_ARGS__);                     \
     else if (sizeof (*mem) == 2)                                             \
-      __result = pre##_16_##post (mem, __VA_ARGS__);                         \
+      __atg1_result = pre##_16_##post (mem, __VA_ARGS__);                    \
     else if (sizeof (*mem) == 4)                                             \
-      __result = pre##_32_##post (mem, __VA_ARGS__);                         \
+      __atg1_result = pre##_32_##post (mem, __VA_ARGS__);                    \
     else if (sizeof (*mem) == 8)                                             \
-      __result = pre##_64_##post (mem, __VA_ARGS__);                         \
+      __atg1_result = pre##_64_##post (mem, __VA_ARGS__);                    \
     else                                                                     \
       abort ();                                                                      \
-    __result;                                                                \
+    __atg1_result;                                                           \
   })
 #define __atomic_bool_bysize(pre, post, mem, ...)                            \
   ({                                                                         \
-    int __result;                                                            \
+    int __atg2_result;                                                       \
     if (sizeof (*mem) == 1)                                                  \
-      __result = pre##_8_##post (mem, __VA_ARGS__);                          \
+      __atg2_result = pre##_8_##post (mem, __VA_ARGS__);                     \
     else if (sizeof (*mem) == 2)                                             \
-      __result = pre##_16_##post (mem, __VA_ARGS__);                         \
+      __atg2_result = pre##_16_##post (mem, __VA_ARGS__);                    \
     else if (sizeof (*mem) == 4)                                             \
-      __result = pre##_32_##post (mem, __VA_ARGS__);                         \
+      __atg2_result = pre##_32_##post (mem, __VA_ARGS__);                    \
     else if (sizeof (*mem) == 8)                                             \
-      __result = pre##_64_##post (mem, __VA_ARGS__);                         \
+      __atg2_result = pre##_64_##post (mem, __VA_ARGS__);                    \
     else                                                                     \
       abort ();                                                                      \
-    __result;                                                                \
+    __atg2_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) __old = (oldval);                                     \
-     atomic_compare_and_exchange_val_acq (mem, newval, __old) != __old;              \
+     __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;                                                        \
   })
 # 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)) __oldval;                                             \
-     __typeof (mem) __memp = (mem);                                          \
-     __typeof (*(mem)) __value = (newvalue);                                 \
+  ({ __typeof (*(mem)) __atg5_oldval;                                        \
+     __typeof (mem) __atg5_memp = (mem);                                     \
+     __typeof (*(mem)) __atg5_value = (newvalue);                            \
                                                                              \
      do                                                                              \
-       __oldval = *__memp;                                                   \
-     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
-                                                                   __value,  \
-                                                                   __oldval),\
-                             0));                                            \
+       __atg5_oldval = *__atg5_memp;                                         \
+     while (__builtin_expect                                                 \
+           (atomic_compare_and_exchange_bool_acq (__atg5_memp, __atg5_value, \
+                                                  __atg5_oldval), 0));       \
                                                                              \
-     __oldval; })
+     __atg5_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)) __oldval;                                             \
-     __typeof (mem) __memp = (mem);                                          \
-     __typeof (*(mem)) __value = (value);                                    \
+  ({ __typeof (*(mem)) __atg6_oldval;                                        \
+     __typeof (mem) __atg6_memp = (mem);                                     \
+     __typeof (*(mem)) __atg6_value = (value);                               \
                                                                              \
      do                                                                              \
-       __oldval = *__memp;                                                   \
-     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
-                                                                   __oldval  \
-                                                                   + __value,\
-                                                                   __oldval),\
-                             0));                                            \
+       __atg6_oldval = *__atg6_memp;                                         \
+     while (__builtin_expect                                                 \
+           (atomic_compare_and_exchange_bool_acq (__atg6_memp,               \
+                                                  __atg6_oldval              \
+                                                  + __atg6_value,            \
+                                                  __atg6_oldval), 0));       \
                                                                              \
-     __oldval; })
+     __atg6_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)) __oldval;                                                      \
-    __typeof (mem) __memp = (mem);                                           \
-    __typeof (*(mem)) __value = (value);                                     \
+    __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);                                \
     do {                                                                     \
-      __oldval = *__memp;                                                    \
-      if (__oldval >= __value)                                               \
+      __atg9_oldv = *__atg9_memp;                                            \
+      if (__atg9_oldv >= __atg9_value)                                       \
        break;                                                                \
-    } while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,  \
-                                                                    __value, \
-                                                                    __oldval),\
-                              0));                                           \
+    } while (__builtin_expect                                                \
+            (catomic_compare_and_exchange_bool_acq (__atg9_memp,             \
+                                                    __atg9_value,            \
+                                                    __atg9_oldv), 0));       \
   } while (0)
 #endif
 
+
 #ifndef atomic_min
 # define atomic_min(mem, value) \
   do {                                                                       \
-    __typeof (*(mem)) __oldval;                                                      \
-    __typeof (mem) __memp = (mem);                                           \
-    __typeof (*(mem)) __value = (value);                                     \
+    __typeof (*(mem)) __atg10_oldval;                                        \
+    __typeof (mem) __atg10_memp = (mem);                                     \
+    __typeof (*(mem)) __atg10_value = (value);                               \
     do {                                                                     \
-      __oldval = *__memp;                                                    \
-      if (__oldval <= __value)                                               \
+      __atg10_oldval = *__atg10_memp;                                        \
+      if (__atg10_oldval <= __atg10_value)                                   \
        break;                                                                \
-    } while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,  \
-                                                                    __value, \
-                                                                    __oldval),\
-                              0));                                           \
+    } while (__builtin_expect                                                \
+            (atomic_compare_and_exchange_bool_acq (__atg10_memp,             \
+                                                   __atg10_value,            \
+                                                   __atg10_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)) __oldval;                                             \
-     __typeof (mem) __memp = (mem);                                          \
+  ({ __typeof (*(mem)) __atg11_oldval;                                       \
+     __typeof (mem) __atg11_memp = (mem);                                    \
                                                                              \
      do                                                                              \
        {                                                                     \
-        __oldval = *__memp;                                                  \
-        if (__builtin_expect (__oldval <= 0, 0))                             \
+        __atg11_oldval = *__atg11_memp;                                      \
+        if (__builtin_expect (__atg11_oldval <= 0, 0))                       \
           break;                                                             \
        }                                                                     \
-     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
-                                                                   __oldval  \
-                                                                   - 1,      \
-                                                                   __oldval),\
-                             0));\
-     __oldval; })
+     while (__builtin_expect                                                 \
+           (atomic_compare_and_exchange_bool_acq (__atg11_memp,              \
+                                                  __atg11_oldval - 1,        \
+                                                  __atg11_oldval), 0));      \
+     __atg11_oldval; })
 #endif
 
 
 #ifndef atomic_add_negative
 # define atomic_add_negative(mem, value)                                     \
-  ({ __typeof (value) __aan_value = (value);                                 \
-     atomic_exchange_and_add (mem, __aan_value) < -__aan_value; })
+  ({ __typeof (value) __atg12_value = (value);                               \
+     atomic_exchange_and_add (mem, __atg12_value) < -__atg12_value; })
 #endif
 
 
 #ifndef atomic_add_zero
 # define atomic_add_zero(mem, value)                                         \
-  ({ __typeof (value) __aaz_value = (value);                                 \
-     atomic_exchange_and_add (mem, __aaz_value) == -__aaz_value; })
+  ({ __typeof (value) __atg13_value = (value);                               \
+     atomic_exchange_and_add (mem, __atg13_value) == -__atg13_value; })
 #endif
 
 
 
 #ifndef atomic_bit_test_set
 # define atomic_bit_test_set(mem, bit) \
-  ({ __typeof (*(mem)) __oldval;                                             \
-     __typeof (mem) __memp = (mem);                                          \
-     __typeof (*(mem)) __mask = ((__typeof (*(mem))) 1 << (bit));            \
+  ({ __typeof (*(mem)) __atg14_old;                                          \
+     __typeof (mem) __atg14_memp = (mem);                                    \
+     __typeof (*(mem)) __atg14_mask = ((__typeof (*(mem))) 1 << (bit));              \
                                                                              \
      do                                                                              \
-       __oldval = (*__memp);                                                 \
-     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
-                                                                   __oldval  \
-                                                                   | __mask, \
-                                                                   __oldval),\
-                             0));                                            \
+       __atg14_old = (*__atg14_memp);                                        \
+     while (__builtin_expect                                                 \
+           (atomic_compare_and_exchange_bool_acq (__atg14_memp,              \
+                                                  __atg14_old | __atg14_mask,\
+                                                  __atg14_old), 0));         \
                                                                              \
-     __oldval & __mask; })
+     __atg14_old & __atg14_mask; })
 #endif
 
-/* Atomically *mem &= mask and return the old value of *mem.  */
+/* Atomically *mem &= mask.  */
 #ifndef atomic_and
 # define atomic_and(mem, mask) \
-  ({ __typeof (*(mem)) __oldval;                                             \
-     __typeof (mem) __memp = (mem);                                          \
-     __typeof (*(mem)) __mask = (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);                                \
                                                                              \
      do                                                                              \
-       __oldval = (*__memp);                                                 \
-     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
-                                                                   __oldval  \
-                                                                   & __mask, \
-                                                                   __oldval),\
-                             0));                                            \
+       __atg16_old = (*__atg16_memp);                                        \
+     while (__builtin_expect                                                 \
+           (atomic_compare_and_exchange_bool_acq (__atg16_memp,              \
+                                                  __atg16_old & __atg16_mask,\
+                                                  __atg16_old), 0));         \
                                                                              \
-     __oldval; })
+     __atg16_old; })
 #endif
 
 /* Atomically *mem |= mask and return the old value of *mem.  */
 #ifndef atomic_or
 # define atomic_or(mem, mask) \
-  ({ __typeof (*(mem)) __oldval;                                             \
-     __typeof (mem) __memp = (mem);                                          \
-     __typeof (*(mem)) __mask = (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);                                \
                                                                              \
      do                                                                              \
-       __oldval = (*__memp);                                                 \
-     while (__builtin_expect (atomic_compare_and_exchange_bool_acq (__memp,   \
-                                                                   __oldval  \
-                                                                   | __mask, \
-                                                                   __oldval),\
-                             0));                                            \
+       __atg19_old = (*__atg19_memp);                                        \
+     while (__builtin_expect                                                 \
+           (atomic_compare_and_exchange_bool_acq (__atg19_memp,              \
+                                                  __atg19_old | __atg19_mask,\
+                                                  __atg19_old), 0));         \
                                                                              \
-     __oldval; })
+     __atg19_old; })
 #endif
 
 #ifndef atomic_full_barrier
index 2428e08..aeeb3a5 100644 (file)
 /* Major and minor version number of the GNU C library package.  Use
    these macros to test for features in specific releases.  */
 #define        __GLIBC__       2
-#define        __GLIBC_MINOR__ 4
+#define        __GLIBC_MINOR__ 5
 
 #define __GLIBC_PREREQ(maj, min) \
        ((__GLIBC__ << 16) + __GLIBC_MINOR__ >= ((maj) << 16) + (min))
index 0d6b661..4b2f07e 100644 (file)
@@ -43,6 +43,8 @@ extern unsigned int la_objopen (struct link_map *__map, Lmid_t __lmid,
 #include <bits/linkmap.h>
 #include <dl-lookupcfg.h>
 #include <tls.h>               /* Defines USE_TLS.  */
+#include <bits/libc-lock.h>
+#include <rtld-lowlevel.h>
 
 
 /* Some internal data structures of the dynamic linker used in the
@@ -73,6 +75,18 @@ struct r_search_path_struct
   };
 
 
+/* Structure for a scope.  Each such data structure has a lock.  The
+   lock allows many readers.  It can be invalidated by setting bit 31
+   which means that no more lockers are allowe */
+struct r_scoperec
+{
+  bool remove_after_use;
+  bool notify;
+  int nusers;
+  struct r_scope_elem *scope[0];
+};
+
+
 /* Structure describing a loaded shared object.  The `l_next' and `l_prev'
    members form a chain of all the shared objects loaded at startup.
 
@@ -120,7 +134,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.  */
@@ -212,12 +226,27 @@ struct link_map
     ElfW(Addr) l_text_end;
 
     /* Default array for 'l_scope'.  */
-    struct r_scope_elem *l_scope_mem[4];
+    union
+    {
+      struct r_scoperec l_scoperec_mem;
+      struct
+      {
+       struct r_scoperec scoperec_struct;
+       /* XXX This number should be increased once the scope memory
+          handling has been tested.  */
+       struct r_scope_elem *scope_elems[4];
+#define NINIT_SCOPE_ELEMS(map) \
+       (sizeof ((map)->l_scope_realmem.scope_elems)                          \
+        / sizeof ((map)->l_scope_realmem.scope_elems[0]))
+      } l_scope_realmem;
+    };
     /* Size of array allocated for 'l_scope'.  */
     size_t l_scope_max;
     /* 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;
+    struct r_scoperec *l_scoperec;
+    /* We need to protect using the SCOPEREC.  */
+    __rtld_mrlock_define (, l_scoperec_lock)
 
     /* A similar array, this time only with the local scope.  This is
        used occasionally.  */
index 1e6d178..79246df 100644 (file)
@@ -1,5 +1,5 @@
 /* Macros for managing ABI-compatibility definitions using ELF symbol versions.
-   Copyright (C) 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2002, 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
@@ -44,6 +44,8 @@
    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 (local, symbol, VERSION_##lib##_##version)
-# define versioned_symbol_1(local, symbol, name) \
+  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) \
   default_symbol_version (local, symbol, name)
 
 # define compat_symbol(lib, local, symbol, version) \
-  compat_symbol_1 (local, symbol, VERSION_##lib##_##version)
-# define compat_symbol_1(local, symbol, name) \
+  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) \
   symbol_version (local, symbol, name)
 
 #else
diff --git a/libio/Banner b/libio/Banner
deleted file mode 100644 (file)
index 8ec3141..0000000
+++ /dev/null
@@ -1 +0,0 @@
-GNU libio by Per Bothner
index c8fe52c..c8f2386 100644 (file)
@@ -168,27 +168,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);
+extern FILE *tmpfile (void) __wur;
 #else
 # ifdef __REDIRECT
-extern FILE *__REDIRECT (tmpfile, (void), tmpfile64);
+extern FILE *__REDIRECT (tmpfile, (void), tmpfile64) __wur;
 # else
 #  define tmpfile tmpfile64
 # endif
 #endif
 
 #ifdef __USE_LARGEFILE64
-extern FILE *tmpfile64 (void);
+extern FILE *tmpfile64 (void) __wur;
 #endif
 
 /* Generate a temporary filename.  */
-extern char *tmpnam (char *__s) __THROW;
+extern char *tmpnam (char *__s) __THROW __wur;
 __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;
+extern char *tmpnam_r (char *__s) __THROW __wur;
 #endif
 
 
@@ -201,7 +201,7 @@ extern char *tmpnam_r (char *__s) __THROW;
    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__;
+     __THROW __attribute_malloc__ __wur;
 #endif
 
 
@@ -246,21 +246,23 @@ __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);
+                   __const char *__restrict __modes) __wur;
 /* 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);
+                     FILE *__restrict __stream) __wur;
 #else
 # ifdef __REDIRECT
 extern FILE *__REDIRECT (fopen, (__const char *__restrict __filename,
-                                __const char *__restrict __modes), fopen64);
+                                __const char *__restrict __modes), fopen64)
+  __wur;
 extern FILE *__REDIRECT (freopen, (__const char *__restrict __filename,
                                   __const char *__restrict __modes,
-                                  FILE *__restrict __stream), freopen64);
+                                  FILE *__restrict __stream), freopen64)
+  __wur;
 # else
 #  define fopen fopen64
 #  define freopen freopen64
@@ -269,15 +271,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);
+                     __const char *__restrict __modes) __wur;
 extern FILE *freopen64 (__const char *__restrict __filename,
                        __const char *__restrict __modes,
-                       FILE *__restrict __stream);
+                       FILE *__restrict __stream) __wur;
 #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;
+extern FILE *fdopen (int __fd, __const char *__modes) __THROW __wur;
 #endif
 
 #ifdef __USE_GNU
@@ -285,15 +287,16 @@ extern FILE *fdopen (int __fd, __const char *__modes) __THROW;
    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;
+                         _IO_cookie_io_functions_t __io_funcs) __THROW __wur;
 
 /* Create a new stream that refers to a memory buffer.  */
-extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes) __THROW;
+extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)
+  __THROW __wur;
 
 /* 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;
+extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur;
 #endif
 
 
@@ -369,13 +372,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)));
+     __THROW __attribute__ ((__format__ (__printf__, 2, 0))) __wur;
 extern int __asprintf (char **__restrict __ptr,
                       __const char *__restrict __fmt, ...)
-     __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
+     __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
 extern int asprintf (char **__restrict __ptr,
                     __const char *__restrict __fmt, ...)
-     __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
+     __THROW __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
 
 /* Write formatted output to a file descriptor.
 
index 78414d5..f805ee8 100644 (file)
@@ -1,3 +1,17 @@
+2006-10-12  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #3320]
+       * locales/es_ES (LC_TIME): Add week, first_weekday, and first_workday.
+
+2006-10-05  Dmitry V. Levin  <ldv@altlinux.org>
+
+       * locales/tt_RU: Fix territory, title and descriptive comment.
+
+2006-10-05  Ulrich Drepper  <drepper@redhat.com>
+
+       * locales/pa_IN (abday): Fix spelling of Sunday.
+       Patch by Mayank Jain <majain@redhat.com>.
+
 2006-10-01  Ulrich Drepper  <drepper@redhat.com>
 
        * locales/en_GB: Use more complete en_US data in LC_NAME.
index c710d58..feefeec 100644 (file)
@@ -2187,12 +2187,13 @@ 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>"
+week    7;19971130;5
+first_weekday   2
+first_workday   2
 END LC_TIME
 
 LC_PAPER
-% FIXME
 height   297
-% FIXME
 width    210
 END LC_PAPER
 
index e38308d..b269472 100644 (file)
@@ -80,7 +80,7 @@ abday       "<U0A10><U0A24><U0020>";/
             "<U0A2C><U0A41><U0A71><U0A27><U0020>";/
             "<U0A35><U0A40><U0A30><U0020>";/
             "<U0A36><U0A41><U0A71><U0A15><U0A30><U0020>";/
-            "<U0A36><U0A28><U0A40><U0A1A><U0A30><U0020>"
+            "<U0A36><U0A28><U0A3F><U0A71><U0A1A><U0A30><U0020>"
 %
 % Full weekday names (%A)
 day       "<U0A10><U0A24><U0A35><U0A3E><U0A30><U0020>";/
index 3bac711..bfa6bb8 100644 (file)
@@ -1,7 +1,7 @@
 comment_char %
 escape_char  /
 %
-% Tatar Language Locale for Tatarstan
+% Tatar Language Locale for Russia
 % Source:
 % Contact: Pablo Saratxaga, Rinat Norkin
 % Email: <pablo@mandrakesoft.com>, <rinat@taif.ru>
@@ -24,7 +24,7 @@ escape_char  /
 % replace cyrillic alphabet
 
 LC_IDENTIFICATION
-title "Tatar language locale for Tatarstan"
+title "Tatar language locale for Russia"
 source "Rinat Norkin"
 address ""
 contact "Pablo Saratxaga, Rinat Norkin"
@@ -32,7 +32,7 @@ email "pablo@mandrakesoft.com, rinat@taif.ru"
 tel ""
 fax ""
 language "Tatar"
-territory "Tatarstan"
+territory "Russia"
 revision "0.4"
 date "2001-01-28"
 
index a369001..4cbce04 100644 (file)
@@ -2741,8 +2741,19 @@ 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 (i > max_fast_bin)
+    if (av == &main_arena && i > max_fast_bin)
       assert(p == 0);
 
     while (p != 0) {
@@ -4097,7 +4108,6 @@ _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)
@@ -4194,8 +4204,6 @@ _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;
@@ -4684,7 +4692,15 @@ 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 8b37c43..9003d80 100644 (file)
@@ -1,5 +1,5 @@
 /* Profile heap and stack memory usage of running program.
-   Copyright (C) 1998-2002, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1998-2002, 2004, 2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -128,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
-    = atomic_exchange_and_add (&current_heap, len - old_len) + len - old_len;
-  atomic_max (&peak_heap, heap);
+    = catomic_exchange_and_add (&current_heap, len - old_len) + len - old_len;
+  catomic_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
@@ -152,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
-  atomic_max (&peak_stack, current_stack);
+  catomic_max (&peak_stack, current_stack);
 
   /* Add up heap and stack usage and compare it with the maximum value.  */
-  atomic_max (&peak_total, heap + current_stack);
+  catomic_max (&peak_total, heap + current_stack);
 
   /* Store the value only if we are writing to a file.  */
   if (fd != -1)
     {
-      uatomic32_t idx = atomic_exchange_and_add (&buffer_cnt, 1);
+      uatomic32_t idx = catomic_exchange_and_add (&buffer_cnt, 1);
       if (idx >= 2 * buffer_size)
        {
          /* We try to reset the counter to the correct range.  If
@@ -168,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;
-         atomic_compare_and_exchange_val_acq (&buffer_size, reset, idx);
+         catomic_compare_and_exchange_val_acq (&buffer_size, reset, idx);
          idx = reset;
        }
 
@@ -337,24 +337,24 @@ malloc (size_t len)
     return (*mallocp) (len);
 
   /* Keep track of number of calls.  */
-  atomic_increment (&calls[idx_malloc]);
+  catomic_increment (&calls[idx_malloc]);
   /* Keep track of total memory consumption for `malloc'.  */
-  atomic_add (&total[idx_malloc], len);
+  catomic_add (&total[idx_malloc], len);
   /* Keep track of total memory requirement.  */
-  atomic_add (&grand_total, len);
+  catomic_add (&grand_total, len);
   /* Remember the size of the request.  */
   if (len < 65536)
-    atomic_increment (&histogram[len / 16]);
+    catomic_increment (&histogram[len / 16]);
   else
-    atomic_increment (&large);
+    catomic_increment (&large);
   /* Total number of calls of any of the functions.  */
-  atomic_increment (&calls_total);
+  catomic_increment (&calls_total);
 
   /* Do the real work.  */
   result = (struct header *) (*mallocp) (len + sizeof (struct header));
   if (result == NULL)
     {
-      atomic_increment (&failed[idx_malloc]);
+      catomic_increment (&failed[idx_malloc]);
       return NULL;
     }
 
@@ -403,36 +403,36 @@ realloc (void *old, size_t len)
     }
 
   /* Keep track of number of calls.  */
-  atomic_increment (&calls[idx_realloc]);
+  catomic_increment (&calls[idx_realloc]);
   if (len > old_len)
     {
       /* Keep track of total memory consumption for `realloc'.  */
-      atomic_add (&total[idx_realloc], len - old_len);
+      catomic_add (&total[idx_realloc], len - old_len);
       /* Keep track of total memory requirement.  */
-      atomic_add (&grand_total, len - old_len);
+      catomic_add (&grand_total, len - old_len);
     }
   /* Remember the size of the request.  */
   if (len < 65536)
-    atomic_increment (&histogram[len / 16]);
+    catomic_increment (&histogram[len / 16]);
   else
-    atomic_increment (&large);
+    catomic_increment (&large);
   /* Total number of calls of any of the functions.  */
-  atomic_increment (&calls_total);
+  catomic_increment (&calls_total);
 
   /* Do the real work.  */
   result = (struct header *) (*reallocp) (real, len + sizeof (struct header));
   if (result == NULL)
     {
-      atomic_increment (&failed[idx_realloc]);
+      catomic_increment (&failed[idx_realloc]);
       return NULL;
     }
 
   /* Record whether the reduction/increase happened in place.  */
   if (real == result)
-    atomic_increment (&inplace);
+    catomic_increment (&inplace);
   /* Was the buffer increased?  */
   if (old_len > len)
-    atomic_increment (&decreasing);
+    catomic_increment (&decreasing);
 
   /* Update the allocation data and write out the records if necessary.  */
   update_data (result, len, old_len);
@@ -463,16 +463,16 @@ calloc (size_t n, size_t len)
     return (*callocp) (n, len);
 
   /* Keep track of number of calls.  */
-  atomic_increment (&calls[idx_calloc]);
+  catomic_increment (&calls[idx_calloc]);
   /* Keep track of total memory consumption for `calloc'.  */
-  atomic_add (&total[idx_calloc], size);
+  catomic_add (&total[idx_calloc], size);
   /* Keep track of total memory requirement.  */
-  atomic_add (&grand_total, size);
+  catomic_add (&grand_total, size);
   /* Remember the size of the request.  */
   if (size < 65536)
-    atomic_increment (&histogram[size / 16]);
+    catomic_increment (&histogram[size / 16]);
   else
-    atomic_increment (&large);
+    catomic_increment (&large);
   /* Total number of calls of any of the functions.  */
   ++calls_total;
 
@@ -480,7 +480,7 @@ calloc (size_t n, size_t len)
   result = (struct header *) (*mallocp) (size + sizeof (struct header));
   if (result == NULL)
     {
-      atomic_increment (&failed[idx_calloc]);
+      catomic_increment (&failed[idx_calloc]);
       return NULL;
     }
 
@@ -517,7 +517,7 @@ free (void *ptr)
   /* `free (NULL)' has no effect.  */
   if (ptr == NULL)
     {
-      atomic_increment (&calls[idx_free]);
+      catomic_increment (&calls[idx_free]);
       return;
     }
 
@@ -531,9 +531,9 @@ free (void *ptr)
     }
 
   /* Keep track of number of calls.  */
-  atomic_increment (&calls[idx_free]);
+  catomic_increment (&calls[idx_free]);
   /* Keep track of total memory freed using `free'.  */
-  atomic_add (&total[idx_free], real->length);
+  catomic_add (&total[idx_free], real->length);
 
   /* Update the allocation data and write out the records if necessary.  */
   update_data (NULL, 0, real->length);
@@ -567,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.  */
-      atomic_increment (&calls[idx]);
+      catomic_increment (&calls[idx]);
       /* Keep track of total memory consumption for `malloc'.  */
-      atomic_add (&total[idx], len);
+      catomic_add (&total[idx], len);
       /* Keep track of total memory requirement.  */
-      atomic_add (&grand_total, len);
+      catomic_add (&grand_total, len);
       /* Remember the size of the request.  */
       if (len < 65536)
-       atomic_increment (&histogram[len / 16]);
+       catomic_increment (&histogram[len / 16]);
       else
-       atomic_increment (&large);
+       catomic_increment (&large);
       /* Total number of calls of any of the functions.  */
-      atomic_increment (&calls_total);
+      catomic_increment (&calls_total);
 
       /* Check for failures.  */
       if (result == NULL)
-       atomic_increment (&failed[idx]);
+       catomic_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
@@ -619,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.  */
-      atomic_increment (&calls[idx]);
+      catomic_increment (&calls[idx]);
       /* Keep track of total memory consumption for `malloc'.  */
-      atomic_add (&total[idx], len);
+      catomic_add (&total[idx], len);
       /* Keep track of total memory requirement.  */
-      atomic_add (&grand_total, len);
+      catomic_add (&grand_total, len);
       /* Remember the size of the request.  */
       if (len < 65536)
-       atomic_increment (&histogram[len / 16]);
+       catomic_increment (&histogram[len / 16]);
       else
-       atomic_increment (&large);
+       catomic_increment (&large);
       /* Total number of calls of any of the functions.  */
-      atomic_increment (&calls_total);
+      catomic_increment (&calls_total);
 
       /* Check for failures.  */
       if (result == NULL)
-       atomic_increment (&failed[idx]);
+       catomic_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
@@ -673,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.  */
-      atomic_increment (&calls[idx_mremap]);
+      catomic_increment (&calls[idx_mremap]);
       if (len > old_len)
        {
          /* Keep track of total memory consumption for `malloc'.  */
-         atomic_add (&total[idx_mremap], len - old_len);
+         catomic_add (&total[idx_mremap], len - old_len);
          /* Keep track of total memory requirement.  */
-         atomic_add (&grand_total, len - old_len);
+         catomic_add (&grand_total, len - old_len);
        }
       /* Remember the size of the request.  */
       if (len < 65536)
-       atomic_increment (&histogram[len / 16]);
+       catomic_increment (&histogram[len / 16]);
       else
-       atomic_increment (&large);
+       catomic_increment (&large);
       /* Total number of calls of any of the functions.  */
-      atomic_increment (&calls_total);
+      catomic_increment (&calls_total);
 
       /* Check for failures.  */
       if (result == NULL)
-       atomic_increment (&failed[idx_mremap]);
+       catomic_increment (&failed[idx_mremap]);
       else
        {
          /* Record whether the reduction/increase happened in place.  */
          if (start == result)
-           atomic_increment (&inplace_mremap);
+           catomic_increment (&inplace_mremap);
          /* Was the buffer increased?  */
          if (old_len > len)
-           atomic_increment (&decreasing_mremap);
+           catomic_increment (&decreasing_mremap);
 
          /* Update the allocation data and write out the records if
             necessary.  Note the first parameter is NULL which means
@@ -733,19 +733,19 @@ munmap (void *start, size_t len)
   if (!not_me && trace_mmap)
     {
       /* Keep track of number of calls.  */
-      atomic_increment (&calls[idx_munmap]);
+      catomic_increment (&calls[idx_munmap]);
 
       if (__builtin_expect (result == 0, 1))
        {
          /* Keep track of total memory freed using `free'.  */
-         atomic_add (&total[idx_munmap], len);
+         catomic_add (&total[idx_munmap], len);
 
          /* Update the allocation data and write out the records if
             necessary.  */
          update_data (NULL, 0, len);
        }
       else
-       atomic_increment (&failed[idx_munmap]);
+       catomic_increment (&failed[idx_munmap]);
     }
 
   return result;
index ef00db6..605e305 100644 (file)
@@ -1455,11 +1455,6 @@ Inquire about the value of @code{_POSIX_ASYNC_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
 Inquire about the availability of large files on the filesystem.
index 1ac2653..b98fca9 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 elements often get added to or deleted from
+function should only be used if 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 searching in a sorted
+The functions mentioned so far in this chapter are for 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 the header file @file{search.h}.
+The following functions are declared in 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 used
-methods to implement this function might make it necessary to make the
+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
 number of elements in the hashing table larger than the expected maximal
-number of elements.  Hashing tables usually work inefficient if they are
+number of elements.  Hashing tables usually work inefficiently 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
index c471209..977989d 100644 (file)
@@ -2393,8 +2393,9 @@ This function is similar to @code{sprintf}, except that it dynamically
 allocates a string (as with @code{malloc}; @pxref{Unconstrained
 Allocation}) to hold the output, instead of putting the output in a
 buffer you allocate in advance.  The @var{ptr} argument should be the
-address of a @code{char *} object, and @code{asprintf} stores a pointer
-to the newly allocated string at that location.
+address of a @code{char *} object, and a successful call to
+@code{asprintf} stores a pointer to the newly allocated string at that
+location.
 
 The return value is the number of characters allocated for the buffer, or
 less than zero if an error occurred. Usually this means that the buffer
index 158be42..2f168c9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Geoffrey Keating <Geoff.Keating@anu.edu.au>, 1997.
 
@@ -171,8 +171,10 @@ main (void)
 
    memset (e2, '\0', sizeof (mp1));
    for (i = -1; i < 100 && i < FRAC / 4; i++)
-     e2[(FRAC - i * 4 - 4) / mpbpl] |= ((strchr (hexdig, exp1[i + 1]) - hexdig)
-                                       << (FRAC - i * 4 - 4) % mpbpl);
+     e2[(FRAC - i * 4 - 4) / mpbpl] |= ((mp_limb_t) (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 33d942f..2c028a2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Geoffrey Keating <Geoff.Keating@anu.edu.au>, 1997.
 
@@ -73,8 +73,9 @@ 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] |= ((strchr (hexdig, str[i + 1]) - hexdig)
-                                     << (FRAC - i * 4 - 4) % mpbpl);
+    x[(FRAC - i * 4 - 4) / mpbpl] |= ((mp_limb_t) (strchr (hexdig, str[i + 1])
+                                                  - hexdig)
+                                     << (FRAC - i * 4 - 4) % mpbpl);
 }
 
 static mp_limb_t *get_log2(void) __attribute__((const));
index 911aaec..bef3521 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Geoffrey Keating <Geoff.Keating@anu.edu.au>, 1997.
 
@@ -239,9 +239,11 @@ main (void)
    memset (c2, 0, sizeof (mp1));
    for (i = 0; i < 100 && i < FRAC / 4; i++)
      {
-       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)
+       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)
                                          << (FRAC - i * 4 - 4) % mpbpl);
      }
 
diff --git a/nis/Banner b/nis/Banner
deleted file mode 100644 (file)
index cf79871..0000000
+++ /dev/null
@@ -1 +0,0 @@
-NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk
index c912a2d..8083ee8 100644 (file)
@@ -64,7 +64,7 @@ libnss_nis-routines   := $(addprefix nis-,$(databases)) nis-initgroups \
 libnss_nis-inhibit-o   = $(filter-out .os,$(object-suffixes))
 
 libnss_nisplus-routines        := $(addprefix nisplus-,$(databases)) nisplus-parser \
-                          nss-nisplus
+                          nss-nisplus nisplus-initgroups
 libnss_nisplus-inhibit-o = $(filter-out .os,$(object-suffixes))
 
 include ../Rules
index c7d87bd..be4453e 100644 (file)
@@ -125,6 +125,6 @@ libnss_nisplus {
     _nss_nisplus_setetherent; _nss_nisplus_setgrent; _nss_nisplus_sethostent;
     _nss_nisplus_setnetent; _nss_nisplus_setnetgrent; _nss_nisplus_setprotoent;
     _nss_nisplus_setpwent; _nss_nisplus_setrpcent; _nss_nisplus_setservent;
-    _nss_nisplus_setspent;
+    _nss_nisplus_setspent; _nss_nisplus_initgroups_dyn;
   }
 }
index 59fbbe4..ed79b59 100644 (file)
@@ -447,7 +447,7 @@ __nis_default_access (char *param, unsigned int defaults)
     {
       cptr = getenv ("NIS_DEFAULTS");
       if (cptr != NULL && strstr (cptr, "access=") != NULL)
-       result = searchaccess (getenv ("NIS_DEFAULTS"), result);
+       result = searchaccess (cptr, result);
     }
 
   return result;
index 40c9270..258479c 100644 (file)
@@ -178,7 +178,7 @@ nis_getnames (const_nis_name name)
     }
 
   /* Get the search path, where we have to search "name" */
-  path = getenv ("NIS_PATH");
+  path = __secure_getenv ("NIS_PATH");
   if (path == NULL)
     path = strdupa ("$");
   else
@@ -251,13 +251,16 @@ nis_getnames (const_nis_name name)
            {
              char *p;
 
-             tmp = malloc (cplen + name_len + 2);
+             tmp = malloc (cplen + name_len + 3);
              if (__builtin_expect (tmp == NULL, 0))
                goto free_null;
 
-             p = __stpcpy (tmp, name);
+             p = __mempcpy (tmp, name, name_len);
              *p++ = '.';
-             memcpy (p, cp, cplen + 1);
+             p = __mempcpy (p, cp, cplen);
+             if (p[-1] != '.')
+               *p++ = '.';
+             *p = '\0';
            }
 
          if (pos >= count)
@@ -275,6 +278,13 @@ nis_getnames (const_nis_name name)
       cp = __strtok_r (NULL, ":", &saveptr);
     }
 
+  if (pos == 0
+      && __asprintf (&getnames[pos++], "%s%s%s%s",
+                    name, name[name_len - 1] == '.' ? "" : ".",
+                    local_domain,
+                    local_domain[local_domain_len - 1] == '.' ? "" : ".") < 0)
+    goto free_null;
+
   getnames[pos] = NULL;
 
   return getnames;
index a92a4b6..cb25be6 100644 (file)
@@ -215,6 +215,7 @@ nis_list (const_nis_name name, unsigned int flags,
   char *tableptr;
   char *tablepath = NULL;
   int first_try = 0; /* Do we try the old binding at first ? */
+  nis_result *allres = NULL;
 
   if (res == NULL)
     return NULL;
@@ -223,6 +224,7 @@ nis_list (const_nis_name name, unsigned int flags,
     {
       status = NIS_BADNAME;
     err_out:
+      nis_freeresult (allres);
       memset (res, '\0', sizeof (nis_result));
       NIS_RES_STATUS (res) = status;
       return res;
@@ -349,6 +351,7 @@ nis_list (const_nis_name name, unsigned int flags,
                    if (names != namebuf)
                      nis_freenames (names);
                    nis_free_request (ibreq);
+                   nis_freeresult (allres);
                    return res;
                  }
                if (NIS_RES_OBJECT (res)->LI_data.li_attrs.li_attrs_len)
@@ -392,6 +395,57 @@ nis_list (const_nis_name name, unsigned int flags,
                    goto again;
                  }
              }
+           else if ((flags & (FOLLOW_PATH | ALL_RESULTS))
+                    == (FOLLOW_PATH | ALL_RESULTS))
+             {
+               if (allres == NULL)
+                 {
+                   allres = res;
+                   res = malloc (sizeof (nis_result));
+                   if (res == NULL)
+                     {
+                       res = allres;
+                       allres = NULL;
+                       NIS_RES_STATUS (res) = NIS_NOMEMORY;
+                       goto fail;
+                     }
+                   NIS_RES_STATUS (res) = NIS_RES_STATUS (allres);
+                 }
+               else
+                 {
+                   nis_object *objects_val
+                     = realloc (NIS_RES_OBJECT (allres),
+                                (NIS_RES_NUMOBJ (allres)
+                                 + NIS_RES_NUMOBJ (res))
+                                * sizeof (nis_object));
+                   if (objects_val == NULL)
+                     {
+                       NIS_RES_STATUS (res) = NIS_NOMEMORY;
+                       goto fail;
+                     }
+                   NIS_RES_OBJECT (allres) = objects_val;
+                   memcpy (NIS_RES_OBJECT (allres) + NIS_RES_NUMOBJ (allres),
+                           NIS_RES_OBJECT (res),
+                           NIS_RES_NUMOBJ (res) * sizeof (nis_object));
+                   NIS_RES_NUMOBJ (allres) += NIS_RES_NUMOBJ (res);
+                   NIS_RES_NUMOBJ (res) = 0;
+                   free (NIS_RES_OBJECT (res));
+                   NIS_RES_OBJECT (res) = NULL;
+                   NIS_RES_STATUS (allres) = NIS_RES_STATUS (res);
+                   xdr_free ((xdrproc_t) _xdr_nis_result, (char *) res);
+                 }
+               clnt_status = __follow_path (&tablepath, &tableptr, ibreq,
+                                            &bptr);
+               if (clnt_status != NIS_SUCCESS)
+                 {
+                   /* Prepare for the nis_freeresult call.  */
+                   memset (res, '\0', sizeof (*res));
+
+                   if (clnt_status == NIS_NOMEMORY)
+                     NIS_RES_STATUS (allres) = clnt_status;
+                   ++done;
+                 }
+             }
            else
              ++done;
            break;
@@ -485,6 +539,12 @@ nis_list (const_nis_name name, unsigned int flags,
 
   nis_free_request (ibreq);
 
+  if (allres)
+    {
+      nis_freeresult (res);
+      return allres;
+    }
+
   return res;
 }
 libnsl_hidden_def (nis_list)
index c1adc98..7cc762f 100644 (file)
@@ -46,13 +46,13 @@ static char *tableptr;
 static netobj cursor;
 
 
-static nis_name tablename_val;
-static size_t tablename_len;
+nis_name grp_tablename_val attribute_hidden;
+size_t grp_tablename_len attribute_hidden;
 
-static enum nss_status
-_nss_create_tablename (int *errnop)
+enum nss_status
+_nss_grp_create_tablename (int *errnop)
 {
-  if (tablename_val == NULL)
+  if (grp_tablename_val == NULL)
     {
       const char *local_dir = nis_local_directory ();
       size_t local_dir_len = strlen (local_dir);
@@ -67,11 +67,16 @@ _nss_create_tablename (int *errnop)
 
       memcpy (__stpcpy (p, prefix), local_dir, local_dir_len + 1);
 
-      tablename_len = sizeof (prefix) - 1 + local_dir_len;
+      grp_tablename_len = sizeof (prefix) - 1 + local_dir_len;
 
       atomic_write_barrier ();
 
-      tablename_val = p;
+      if (atomic_compare_and_exchange_bool_acq (&grp_tablename_val, p, NULL))
+       {
+         /* Another thread already installed the value.  */
+         free (p);
+         grp_tablename_len = strlen (grp_tablename_val);
+       }
     }
 
   return NSS_STATUS_SUCCESS;
@@ -103,19 +108,19 @@ internal_setgrent (int *errnop)
 {
   enum nss_status status = NSS_STATUS_SUCCESS;
 
-  if (tablename_val == NULL)
-    status = _nss_create_tablename (errnop);
+  if (grp_tablename_val == NULL)
+    status = _nss_grp_create_tablename (errnop);
 
   if (status == NSS_STATUS_SUCCESS)
     {
-      ibreq = __create_ib_request (tablename_val, 0);
+      ibreq = __create_ib_request (grp_tablename_val, 0);
       if (ibreq == NULL)
        {
          *errnop = errno;
          return NSS_STATUS_TRYAGAIN;
        }
 
-      nis_error retcode = __prepare_niscall (tablename_val, &dir, &bptr, 0);
+      nis_error retcode = __prepare_niscall (grp_tablename_val, &dir, &bptr, 0);
       if (retcode != NIS_SUCCESS)
        {
          nis_free_request (ibreq);
@@ -285,13 +290,9 @@ _nss_nisplus_getgrnam_r (const char *name, struct group *gr,
 {
   int parse_res;
 
-  if (tablename_val == NULL)
+  if (grp_tablename_val == NULL)
     {
-      __libc_lock_lock (lock);
-
-      enum nss_status status = _nss_create_tablename (errnop);
-
-      __libc_lock_unlock (lock);
+      enum nss_status status = _nss_grp_create_tablename (errnop);
 
       if (status != NSS_STATUS_SUCCESS)
        return status;
@@ -304,10 +305,10 @@ _nss_nisplus_getgrnam_r (const char *name, struct group *gr,
     }
 
   nis_result *result;
-  char buf[strlen (name) + 9 + tablename_len];
+  char buf[strlen (name) + 9 + grp_tablename_len];
   int olderr = errno;
 
-  snprintf (buf, sizeof (buf), "[name=%s],%s", name, tablename_val);
+  snprintf (buf, sizeof (buf), "[name=%s],%s", name, grp_tablename_val);
 
   result = nis_list (buf, FOLLOW_LINKS | FOLLOW_PATH, NULL, NULL);
 
@@ -348,13 +349,9 @@ enum nss_status
 _nss_nisplus_getgrgid_r (const gid_t gid, struct group *gr,
                         char *buffer, size_t buflen, int *errnop)
 {
-  if (tablename_val == NULL)
+  if (grp_tablename_val == NULL)
     {
-      __libc_lock_lock (lock);
-
-      enum nss_status status = _nss_create_tablename (errnop);
-
-      __libc_lock_unlock (lock);
+      enum nss_status status = _nss_grp_create_tablename (errnop);
 
       if (status != NSS_STATUS_SUCCESS)
        return status;
@@ -362,11 +359,11 @@ _nss_nisplus_getgrgid_r (const gid_t gid, struct group *gr,
 
   int parse_res;
   nis_result *result;
-  char buf[8 + 3 * sizeof (unsigned long int) + tablename_len];
+  char buf[8 + 3 * sizeof (unsigned long int) + grp_tablename_len];
   int olderr = errno;
 
   snprintf (buf, sizeof (buf), "[gid=%lu],%s",
-           (unsigned long int) gid, tablename_val);
+           (unsigned long int) gid, grp_tablename_val);
 
   result = nis_list (buf, FOLLOW_PATH | FOLLOW_LINKS, NULL, NULL);
 
diff --git a/nis/nss_nisplus/nisplus-initgroups.c b/nis/nss_nisplus/nisplus-initgroups.c
new file mode 100644 (file)
index 0000000..6588ec2
--- /dev/null
@@ -0,0 +1,150 @@
+/* Copyright (C) 1997, 2001, 2002, 2003, 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
+   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 <atomic.h>
+#include <nss.h>
+#include <grp.h>
+#include <ctype.h>
+#include <errno.h>
+#include <string.h>
+#include <bits/libc-lock.h>
+#include <rpcsvc/nis.h>
+
+#include "nss-nisplus.h"
+#include "nisplus-parser.h"
+#include <libnsl.h>
+#include <nis_intern.h>
+#include <nis_xdr.h>
+
+#define NISOBJVAL(col, obj) \
+  ((obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val)
+
+#define NISOBJLEN(col, obj) \
+  ((obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len)
+
+extern nis_name grp_tablename_val attribute_hidden;
+extern size_t grp_tablename_len attribute_hidden;
+extern enum nss_status _nss_grp_create_tablename (int *errnop);
+
+
+enum nss_status
+_nss_nisplus_initgroups_dyn (const char *user, gid_t group, long int *start,
+                            long int *size, gid_t **groupsp, long int limit,
+                            int *errnop)
+{
+  if (grp_tablename_val == NULL)
+    {
+      enum nss_status status = _nss_grp_create_tablename (errnop);
+
+      if (status != NSS_STATUS_SUCCESS)
+       return status;
+    }
+
+  nis_result *result;
+  char buf[strlen (user) + 12 + grp_tablename_len];
+
+  snprintf (buf, sizeof (buf), "[members=%s],%s", user, grp_tablename_val);
+
+  result = nis_list (buf, FOLLOW_LINKS | FOLLOW_PATH | ALL_RESULTS, NULL, NULL);
+
+  if (result == NULL)
+    {
+      *errnop = ENOMEM;
+      return NSS_STATUS_TRYAGAIN;
+    }
+
+  if (__builtin_expect (niserr2nss (result->status) != NSS_STATUS_SUCCESS, 0))
+    {
+      enum nss_status status = niserr2nss (result->status);
+
+      nis_freeresult (result);
+      return status;
+    }
+
+  if (NIS_RES_NUMOBJ (result) == 0)
+    {
+    errout:
+      nis_freeresult (result);
+      return NSS_STATUS_NOTFOUND;
+    }
+
+  gid_t *groups = *groupsp;
+  nis_object *obj = NIS_RES_OBJECT (result);
+  for (unsigned int cnt = 0; cnt < NIS_RES_NUMOBJ (result); ++cnt, ++obj)
+    {
+      if (__type_of (obj) != NIS_ENTRY_OBJ
+         || strcmp (obj->EN_data.en_type, "group_tbl") != 0
+         || obj->EN_data.en_cols.en_cols_len < 4)
+       continue;
+
+      char *numstr = NISOBJVAL (2, obj);
+      size_t len = NISOBJLEN (2, obj);
+      if (len == 0 || numstr[0] == '\0')
+       continue;
+
+      gid_t gid;
+      char *endp;
+      if (__builtin_expect (numstr[len - 1] != '\0', 0))
+       {
+         char numstrbuf[len + 1];
+         memcpy (numstrbuf, numstr, len);
+         numstrbuf[len] = '\0';
+         gid = strtoul (numstrbuf, &endp, 10);
+         if (*endp)
+           continue;
+       }
+      else
+       {
+         gid = strtoul (numstr, &endp, 10);
+         if (*endp)
+           continue;
+       }
+
+      if (gid == group)
+       continue;
+
+      /* Insert this group.  */
+      if (*start == *size)
+       {
+         /* Need a bigger buffer.  */
+         long int newsize;
+
+         if (limit > 0 && *size == limit)
+           /* We reached the maximum.  */
+           break;
+
+         if (limit <= 0)
+           newsize = 2 * *size;
+         else
+           newsize = MIN (limit, 2 * *size);
+
+         gid_t *newgroups = realloc (groups, newsize * sizeof (*groups));
+         if (newgroups == NULL)
+           goto errout;
+         *groupsp = groups = newgroups;
+         *size = newsize;
+       }
+
+      groups[*start] = gid;
+      *start += 1;
+    }
+
+  nis_freeresult (result);
+  return NSS_STATUS_SUCCESS;
+}
index 8024bd3..3bcd7c3 100644 (file)
@@ -1,3 +1,52 @@
+2006-10-17  Jakub Jelinek  <jakub@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.
+
+2006-10-12  Ulrich Drepper  <drepper@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.
+
+2006-10-11  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h: Add support for
+       cancelable syscalls with six parameters.
+
+       * sysdeps/unix/sysv/linux/rtld-lowlevel.h: Use catomic_*
+       operations instead of atomic_*.
+
+2006-10-09  Ulrich Drepper  <drepper@redhat.com>
+
+       * sysdeps/unix/sysv/linux/rtld-lowlevel.h: New file..
+
+2006-10-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.
+
 2006-09-24  Ulrich Drepper  <drepper@redhat.com>
 
        [BZ #3251]
index 622e4a2..be79e32 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2006 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;
@@ -54,9 +59,9 @@ strong_alias (__pthread_attr_setstack, pthread_attr_setstack)
 #else
 # include <shlib-compat.h>
 versioned_symbol (libpthread, __pthread_attr_setstack, pthread_attr_setstack,
-                 GLIBC_2_3_3);
+                 NEW_VERNUM);
 
-# if SHLIB_COMPAT(libpthread, GLIBC_2_2, GLIBC_2_3_3)
+# if SHLIB_COMPAT(libpthread, GLIBC_2_2, NEW_VERNUM)
 
 int
 __old_pthread_attr_setstack (pthread_attr_t *attr, void *stackaddr,
@@ -71,9 +76,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 f84a9f6..cfafb0a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2006 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 2_3_3
+#endif
+
 
 int
 __pthread_attr_setstacksize (attr, stacksize)
@@ -47,9 +51,9 @@ strong_alias (__pthread_attr_setstacksize, pthread_attr_setstacksize)
 #else
 # include <shlib-compat.h>
 versioned_symbol (libpthread, __pthread_attr_setstacksize,
-                 pthread_attr_setstacksize, GLIBC_2_3_3);
+                 pthread_attr_setstacksize, NEW_VERNUM);
 
-# if SHLIB_COMPAT(libpthread, GLIBC_2_1, GLIBC_2_3_3)
+# if SHLIB_COMPAT(libpthread, GLIBC_2_1, NEW_VERNUM)
 
 int
 __old_pthread_attr_setstacksize (pthread_attr_t *attr, size_t stacksize)
@@ -63,6 +67,10 @@ __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 e071878..9b27b1f 100644 (file)
@@ -87,3 +87,6 @@
 
 /* Maximum message queue priority level.  */
 #define MQ_PRIO_MAX            32768
+
+/* Maximum value the semaphore can have.  */
+#define SEM_VALUE_MAX   (2147483647)
index 6dadfda..be4469c 100644 (file)
@@ -26,9 +26,6 @@
 /* Value returned if `sem_open' failed.  */
 #define SEM_FAILED      ((sem_t *) 0)
 
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
-
 
 typedef union
 {
index b639ba4..4b7b297 100644 (file)
@@ -87,3 +87,6 @@
 
 /* Maximum message queue priority level.  */
 #define MQ_PRIO_MAX            32768
+
+/* Maximum value the semaphore can have.  */
+#define SEM_VALUE_MAX   (2147483647)
index e6c5d84..934493c 100644 (file)
@@ -28,9 +28,6 @@
 /* Value returned if `sem_open' failed.  */
 #define SEM_FAILED      ((sem_t *) 0)
 
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
-
 
 typedef union
 {
index 147f5c8..2d1ad3d 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
 
@@ -58,6 +58,7 @@
 # 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 f837250..83db31e 100644 (file)
@@ -87,3 +87,6 @@
 
 /* Maximum message queue priority level.  */
 #define MQ_PRIO_MAX            32768
+
+/* Maximum value the semaphore can have.  */
+#define SEM_VALUE_MAX   (2147483647)
index 2329e98..0684aeb 100644 (file)
@@ -28,9 +28,6 @@
 /* Value returned if `sem_open' failed.  */
 #define SEM_FAILED      ((sem_t *) 0)
 
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
-
 
 typedef union
 {
index 9977847..6b5a036 100644 (file)
@@ -2,4 +2,8 @@ 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
new file mode 100644 (file)
index 0000000..02e2d17
--- /dev/null
@@ -0,0 +1,93 @@
+/* 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 8123b41..c7f121b 100644 (file)
@@ -33,9 +33,6 @@
 /* Value returned if `sem_open' failed.  */
 #define SEM_FAILED      ((sem_t *) 0)
 
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
-
 
 typedef union
 {
diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c b/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_attr_setstack.c
new file mode 100644 (file)
index 0000000..2cb0a13
--- /dev/null
@@ -0,0 +1,2 @@
+#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
new file mode 100644 (file)
index 0000000..9472dd1
--- /dev/null
@@ -0,0 +1,8 @@
+#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>
diff --git a/nptl/sysdeps/unix/sysv/linux/rtld-lowlevel.h b/nptl/sysdeps/unix/sysv/linux/rtld-lowlevel.h
new file mode 100644 (file)
index 0000000..7152dd2
--- /dev/null
@@ -0,0 +1,151 @@
+/* Defintions for lowlevel handling in ld.so.
+   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., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _RTLD_LOWLEVEL_H
+#define  _RTLD_LOWLEVEL_H 1
+
+#include <atomic.h>
+#include <lowlevellock.h>
+
+
+/* Special multi-reader lock used in ld.so.  */
+#define __RTLD_MRLOCK_WRITER 1
+#define __RTLD_MRLOCK_RWAIT 2
+#define __RTLD_MRLOCK_WWAIT 4
+#define __RTLD_MRLOCK_RBITS \
+  ~(__RTLD_MRLOCK_WRITER | __RTLD_MRLOCK_RWAIT | __RTLD_MRLOCK_WWAIT)
+#define __RTLD_MRLOCK_INC 8
+#define __RTLD_MRLOCK_TRIES 5
+
+
+typedef int __rtld_mrlock_t;
+
+
+#define __rtld_mrlock_define(CLASS,NAME) \
+  CLASS __rtld_mrlock_t NAME;
+
+
+#define _RTLD_MRLOCK_INITIALIZER 0
+#define __rtld_mrlock_initialize(NAME) \
+  (void) ((NAME) = 0
+
+
+#define __rtld_mrlock_lock(lock) \
+  do {                                                                       \
+    __label__ out;                                                           \
+    while (1)                                                                \
+      {                                                                              \
+       int oldval;                                                           \
+       for (int tries = 0; tries < __RTLD_MRLOCK_TRIES; ++tries)             \
+         {                                                                   \
+           oldval = lock;                                                    \
+           while (__builtin_expect ((oldval                                  \
+                                     & (__RTLD_MRLOCK_WRITER                 \
+                                        | __RTLD_MRLOCK_WWAIT))              \
+                                    == 0, 1))                                \
+             {                                                               \
+               int newval = ((oldval & __RTLD_MRLOCK_RBITS)                  \
+                             + __RTLD_MRLOCK_INC);                           \
+               int ret = atomic_compare_and_exchange_val_acq (&(lock),       \
+                                                              newval,        \
+                                                              oldval);       \
+               if (__builtin_expect (ret == oldval, 1))                      \
+                 goto out;                                                   \
+             }                                                               \
+           atomic_delay ();                                                  \
+         }                                                                   \
+       if ((oldval & __RTLD_MRLOCK_RWAIT) == 0)                              \
+         {                                                                   \
+           atomic_or (&(lock), __RTLD_MRLOCK_RWAIT);                         \
+           oldval |= __RTLD_MRLOCK_RWAIT;                                    \
+         }                                                                   \
+       lll_futex_wait (lock, oldval);                                        \
+      }                                                                              \
+  out:;                                                                              \
+  } while (0)
+
+
+#define __rtld_mrlock_unlock(lock) \
+  do {                                                                       \
+    int oldval = atomic_exchange_and_add (&(lock), -__RTLD_MRLOCK_INC);              \
+    if (__builtin_expect ((oldval                                            \
+                          & (__RTLD_MRLOCK_RBITS | __RTLD_MRLOCK_WWAIT))     \
+                         == (__RTLD_MRLOCK_INC | __RTLD_MRLOCK_WWAIT), 0))   \
+      /* We have to wake all threads since there might be some queued        \
+        readers already.  */                                                 \
+      lll_futex_wake (&(lock), 0x7fffffff);                                  \
+  } while (0)
+
+
+/* There can only ever be one thread trying to get the exclusive lock.  */
+#define __rtld_mrlock_change(lock) \
+  do {                                                                       \
+    __label__ out;                                                           \
+    while (1)                                                                \
+      {                                                                              \
+       int oldval;                                                           \
+       for (int tries = 0; tries < __RTLD_MRLOCK_TRIES; ++tries)             \
+         {                                                                   \
+           oldval = lock;                                                    \
+           while (__builtin_expect ((oldval & __RTLD_MRLOCK_RBITS) == 0, 1)) \
+             {                                                               \
+               int newval = ((oldval & __RTLD_MRLOCK_RWAIT)                  \
+                             + __RTLD_MRLOCK_WRITER);                        \
+               int ret = atomic_compare_and_exchange_val_acq (&(lock),       \
+                                                              newval,        \
+                                                              oldval);       \
+               if (__builtin_expect (ret == oldval, 1))                      \
+                 goto out;                                                   \
+             }                                                               \
+           atomic_delay ();                                                  \
+         }                                                                   \
+       atomic_or (&(lock), __RTLD_MRLOCK_WWAIT);                             \
+       oldval |= __RTLD_MRLOCK_WWAIT;                                        \
+       lll_futex_wait (lock, oldval);                                        \
+      }                                                                              \
+  out:;                                                                              \
+  } while (0)
+
+
+#define __rtld_mrlock_done(lock) \
+  do {                          \
+    int oldval = atomic_exchange_and_add (&(lock), -__RTLD_MRLOCK_WRITER);    \
+    if (__builtin_expect ((oldval & __RTLD_MRLOCK_RWAIT) != 0, 0))           \
+      lll_futex_wake (&(lock), 0x7fffffff);                                  \
+  } while (0)
+
+
+/* Function to wait for variable become zero.  Used in ld.so for
+   reference counters.  */
+#define __rtld_waitzero(word) \
+  do {                                                                       \
+    while (1)                                                                \
+      {                                                                              \
+       int val = word;                                                       \
+       if (val == 0)                                                         \
+         break;                                                              \
+       lll_futex_wait (&(word), val);                                        \
+      }                                                                              \
+  } while (0)
+
+
+#define __rtld_notify(word) \
+  lll_futex_wake (&(word), 1)
+
+#endif
index ead2663..111462f 100644 (file)
@@ -32,9 +32,6 @@
 /* Value returned if `sem_open' failed.  */
 #define SEM_FAILED      ((sem_t *) 0)
 
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
-
 
 typedef union
 {
index e6c5d84..934493c 100644 (file)
@@ -28,9 +28,6 @@
 /* Value returned if `sem_open' failed.  */
 #define SEM_FAILED      ((sem_t *) 0)
 
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
-
 
 typedef union
 {
index e082ea8..2576f12 100644 (file)
@@ -87,3 +87,6 @@
 
 /* Maximum message queue priority level.  */
 #define MQ_PRIO_MAX            32768
+
+/* Maximum value the semaphore can have.  */
+#define SEM_VALUE_MAX   (2147483647)
index 7f3a328..8fd7d34 100644 (file)
@@ -33,9 +33,6 @@
 /* Value returned if `sem_open' failed.  */
 #define SEM_FAILED      ((sem_t *) 0)
 
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
-
 
 typedef union
 {
index 57edbbb..e973bc5 100644 (file)
@@ -33,9 +33,6 @@
 /* Value returned if `sem_open' failed.  */
 #define SEM_FAILED      ((sem_t *) 0)
 
-/* Maximum value the semaphore can have.  */
-#define SEM_VALUE_MAX   (2147483647)
-
 
 typedef union
 {
index 03359f3..588b09d 100644 (file)
@@ -240,7 +240,7 @@ main (int argc, char **argv)
 
       if (chdir ("/") != 0)
        error (EXIT_FAILURE, errno,
-              _("cannot change current working cirectory to \"/\""));
+              _("cannot change current working directory to \"/\""));
 
       openlog ("nscd", LOG_CONS | LOG_ODELAY, LOG_DAEMON);
 
index b4f9b29..2928cdc 100644 (file)
--- a/po/pl.po
+++ b/po/pl.po
 # Polish translation for GNU libc.
-# Copyright (C) 1996, 1997, 1998, 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 # Pawe³ Krawczyk <kravietz@ceti.pl>, 1996,97,98,99.
-# Jakub Bogusz <qboosh@pld-linux.org>, 2002, 2003, 2004.
+# Jakub Bogusz <qboosh@pld-linux.org>, 2002-2006.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: libc 2.3.3\n"
-"POT-Creation-Date: 2004-08-05 09:16+0200\n"
-"PO-Revision-Date: 2004-08-06 00:01+0200\n"
+"Project-Id-Version: libc 2.5\n"
+"POT-Creation-Date: 2006-09-29 11:38-0700\n"
+"PO-Revision-Date: 2006-10-05 20:01+0200\n"
 "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
 "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO-8859-2\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: sysdeps/generic/siglist.h:29 stdio-common/../sysdeps/unix/siglist.c:27
-msgid "Hangup"
-msgstr "Roz³±czenie"
+#: argp/argp-help.c:227
+#, c-format
+msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
+msgstr "%.*s: parametr ARGP_HELP_FMT wymaga podania warto¶ci"
 
-#: sysdeps/generic/siglist.h:30 stdio-common/../sysdeps/unix/siglist.c:28
-msgid "Interrupt"
-msgstr "Przerwanie"
+#: argp/argp-help.c:237
+#, c-format
+msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
+msgstr "%.*s: Nieznany parametr ARGP_HELP_FMT"
 
-# XXX -PK
-#: sysdeps/generic/siglist.h:31 stdio-common/../sysdeps/unix/siglist.c:29
-msgid "Quit"
-msgstr "Wyj¶cie"
+#: argp/argp-help.c:250
+#, c-format
+msgid "Garbage in ARGP_HELP_FMT: %s"
+msgstr "B³êdne dane w ARGP_HELP_FMT: %s"
 
-#: sysdeps/generic/siglist.h:32 stdio-common/../sysdeps/unix/siglist.c:30
-msgid "Illegal instruction"
-msgstr "B³êdna instrukcja"
+#: argp/argp-help.c:1214
+msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options."
+msgstr "Argumenty obowi±zkowe lub opcjonalne dla d³ugich opcji s± równie¿ obowi±zkowe lub opcjonalne dla odpowiednich krótkich opcji."
 
-#: sysdeps/generic/siglist.h:33 stdio-common/../sysdeps/unix/siglist.c:31
-msgid "Trace/breakpoint trap"
-msgstr "Pu³apka debuggera/breakpoint"
+#: argp/argp-help.c:1600
+msgid "Usage:"
+msgstr "Sk³adnia:"
 
-#: sysdeps/generic/siglist.h:34
-msgid "Aborted"
-msgstr "Przerwane"
+#: argp/argp-help.c:1604
+msgid "  or: "
+msgstr "    lub: "
 
-#: sysdeps/generic/siglist.h:35 stdio-common/../sysdeps/unix/siglist.c:34
-msgid "Floating point exception"
-msgstr "B³±d w obliczeniach zmiennoprzecinkowych"
+#: argp/argp-help.c:1616
+msgid " [OPTION...]"
+msgstr " [OPCJA...]"
 
-#: sysdeps/generic/siglist.h:36 stdio-common/../sysdeps/unix/siglist.c:35
-msgid "Killed"
-msgstr "Unicestwiony"
+#: argp/argp-help.c:1643
+#, c-format
+msgid "Try `%s --help' or `%s --usage' for more information.\n"
+msgstr "Polecenie `%s --help' lub `%s --usage' pozwoli uzyskaæ wiêcej informacji.\n"
 
-#: sysdeps/generic/siglist.h:37 stdio-common/../sysdeps/unix/siglist.c:36
-msgid "Bus error"
-msgstr "B³±d szyny"
+#: argp/argp-help.c:1671
+#, c-format
+msgid "Report bugs to %s.\n"
+msgstr "Prosimy zg³aszaæ b³êdy na adres %s.\n"
 
-#: sysdeps/generic/siglist.h:38 stdio-common/../sysdeps/unix/siglist.c:37
-msgid "Segmentation fault"
-msgstr "Naruszenie ochrony pamiêci"
+#: argp/argp-parse.c:102
+msgid "Give this help list"
+msgstr "Wy¶wietlenie tego tekstu pomocy"
 
-#. 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 "Przerwany potok"
+#: argp/argp-parse.c:103
+msgid "Give a short usage message"
+msgstr "Wy¶wietlenie krótkiej informacji o sk³adni polecenia"
 
-#: sysdeps/generic/siglist.h:40 stdio-common/../sysdeps/unix/siglist.c:40
-msgid "Alarm clock"
-msgstr "Budzik"
+#: argp/argp-parse.c:104
+msgid "Set the program name"
+msgstr "Okre¶lenie nazwy programu"
 
-#: sysdeps/generic/siglist.h:41 stdio-common/../sysdeps/unix/siglist.c:41
-msgid "Terminated"
-msgstr "Zakoñczony"
+#: argp/argp-parse.c:106
+msgid "Hang for SECS seconds (default 3600)"
+msgstr "Zatrzymanie na SECS sekund (domy¶lnie 3600)"
 
-#: sysdeps/generic/siglist.h:42 stdio-common/../sysdeps/unix/siglist.c:42
-msgid "Urgent I/O condition"
-msgstr "Nag³y wypadek I/O"
+#: argp/argp-parse.c:167
+msgid "Print program version"
+msgstr "Wy¶wietlenie wersji programu"
 
-#: sysdeps/generic/siglist.h:43 stdio-common/../sysdeps/unix/siglist.c:43
-msgid "Stopped (signal)"
-msgstr "Zatrzymany (sygna³)"
+#: argp/argp-parse.c:183
+msgid "(PROGRAM ERROR) No version known!?"
+msgstr "(B£¡D PROGRAMU) Nieznana wersja?!"
 
-#: sysdeps/generic/siglist.h:44 stdio-common/../sysdeps/unix/siglist.c:44
-msgid "Stopped"
-msgstr "Zatrzymany"
+#: argp/argp-parse.c:623
+#, c-format
+msgid "%s: Too many arguments\n"
+msgstr "%s: Za du¿o argumentów\n"
 
-#: sysdeps/generic/siglist.h:45 stdio-common/../sysdeps/unix/siglist.c:45
-msgid "Continued"
-msgstr "Kontynuacja"
+#: argp/argp-parse.c:766
+msgid "(PROGRAM ERROR) Option should have been recognized!?"
+msgstr "(B£¡D PROGRAMU) Opcja powinna zostaæ rozpoznana?!"
 
-#: sysdeps/generic/siglist.h:46 stdio-common/../sysdeps/unix/siglist.c:46
-msgid "Child exited"
-msgstr "Potomek zakoñczy³ pracê"
+#: assert/assert-perr.c:57
+#, c-format
+msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n"
+msgstr "%s%s%s:%u %s%sNiespodziewany b³±d: %s.\n"
 
-#: sysdeps/generic/siglist.h:47 stdio-common/../sysdeps/unix/siglist.c:47
-msgid "Stopped (tty input)"
-msgstr "Zatrzymany (wej¶cie z tty)"
+#: assert/assert.c:57
+#, c-format
+msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n"
+msgstr "%s%s%s:%u: %s%sWarunek zapewnienia `%s' nie zosta³ spe³niony.\n"
 
-#: sysdeps/generic/siglist.h:48 stdio-common/../sysdeps/unix/siglist.c:48
-msgid "Stopped (tty output)"
-msgstr "Zatrzymany (wyj¶cie na tty)"
+#: catgets/gencat.c:109 catgets/gencat.c:113 nscd/nscd.c:96 nss/makedb.c:61
+msgid "NAME"
+msgstr "NAZWA"
 
-#: sysdeps/generic/siglist.h:49 stdio-common/../sysdeps/unix/siglist.c:49
-msgid "I/O possible"
-msgstr "We/Wy dozwolone"
+#: catgets/gencat.c:110
+msgid "Create C header file NAME containing symbol definitions"
+msgstr "Tworzenie pliku nag³ówkowego C o tej NAZWIE zawieraj±cego definicje symboli"
 
-#: sysdeps/generic/siglist.h:50 stdio-common/../sysdeps/unix/siglist.c:50
-msgid "CPU time limit exceeded"
-msgstr "Przekroczony limit czasu procesora"
+#: catgets/gencat.c:112
+msgid "Do not use existing catalog, force new output file"
+msgstr "Zamiast do istniej±cego katalogu, zapisanie do nowego pliku"
 
-#: sysdeps/generic/siglist.h:51 stdio-common/../sysdeps/unix/siglist.c:51
-msgid "File size limit exceeded"
-msgstr "Przekroczony limit wielko¶ci pliku"
+#: catgets/gencat.c:113 nss/makedb.c:61
+msgid "Write output to file NAME"
+msgstr "Zapisanie wyników do pliku NAZWA"
 
-#: sysdeps/generic/siglist.h:52 stdio-common/../sysdeps/unix/siglist.c:52
-msgid "Virtual timer expired"
-msgstr "Up³yn±³ czas stopera wirtualnego"
+#: 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 ""
+"Generowanie katalogu komunikatów.\vJe¶li PLIK-WE to -, dane s± czytane ze standardowego wej¶cia. Je¶li PLIK-WY\n"
+"to -, dane s± zapisywane na standardowe wyj¶cie.\n"
 
-#: sysdeps/generic/siglist.h:53 stdio-common/../sysdeps/unix/siglist.c:53
-msgid "Profiling timer expired"
-msgstr "Up³yn±³ czas stopera profiluj±cego"
+#: catgets/gencat.c:123
+msgid ""
+"-o OUTPUT-FILE [INPUT-FILE]...\n"
+"[OUTPUT-FILE [INPUT-FILE]...]"
+msgstr ""
+"-o PLIK-WY [PLIK-WE]...\n"
+"[PLIK-WY [PLIK-WE]...]"
 
-#: sysdeps/generic/siglist.h:54 stdio-common/../sysdeps/unix/siglist.c:54
-msgid "Window changed"
-msgstr "Okno zmienione"
+#: 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 ""
+"Instrukcje dotycz±ce zg³aszania b³êdów znajduj± siê pod adresem:\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
+
+#: catgets/gencat.c:245 debug/xtrace.sh:64 elf/ldconfig.c:285
+#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:425
+#: iconv/iconvconfig.c:394 locale/programs/locale.c:274
+#: locale/programs/localedef.c:386 login/programs/pt_chown.c:59
+#: malloc/memusage.sh:71 nscd/nscd.c:401 nss/getent.c:83 nss/makedb.c:245
+#: posix/getconf.c:1007
+#, 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"
+"To oprogramowanie jest darmowe; warunki kopiowania s± opisane w ¼ród³ach.\n"
+"Autorzy nie daj± ¯ADNYCH gwarancji, w tym równie¿ gwarancji MO¯LIWO¦CI\n"
+"SPRZEDA¯Y lub PRZYDATNO¦CI DO KONKRETNYCH ZASTOSOWAÑ.\n"
 
-#: sysdeps/generic/siglist.h:55 stdio-common/../sysdeps/unix/siglist.c:56
-msgid "User defined signal 1"
-msgstr "Sygna³ u¿ytkownika 1"
+# w %s wchodzi nazwisko autora danego programu/procedury -PK
+#: catgets/gencat.c:250 debug/xtrace.sh:68 elf/ldconfig.c:290 elf/sprof.c:361
+#: iconv/iconv_prog.c:430 iconv/iconvconfig.c:399 locale/programs/locale.c:279
+#: locale/programs/localedef.c:391 malloc/memusage.sh:75 nscd/nscd.c:406
+#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1012
+#, c-format
+msgid "Written by %s.\n"
+msgstr "Autorem jest %s.\n"
 
-#: sysdeps/generic/siglist.h:56 stdio-common/../sysdeps/unix/siglist.c:57
-msgid "User defined signal 2"
-msgstr "Sygna³ u¿ytkownika 2"
+#: catgets/gencat.c:281
+msgid "*standard input*"
+msgstr "*standardowe wej¶cie*"
 
-#: sysdeps/generic/siglist.h:60 stdio-common/../sysdeps/unix/siglist.c:33
-msgid "EMT trap"
-msgstr "Pu³apka 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 "nie mo¿na otworzyæ pliku wej¶ciowego `%s'"
 
-#: sysdeps/generic/siglist.h:63 stdio-common/../sysdeps/unix/siglist.c:38
-msgid "Bad system call"
-msgstr "B³êdne wywo³anie systemowe"
+#: catgets/gencat.c:416 catgets/gencat.c:493
+msgid "illegal set number"
+msgstr "b³êdny numer zbioru"
 
-#: sysdeps/generic/siglist.h:66
-msgid "Stack fault"
-msgstr "B³±d stosu"
+#: catgets/gencat.c:443
+msgid "duplicate set definition"
+msgstr "powtórzona definicja zbioru"
 
-#: sysdeps/generic/siglist.h:69
-msgid "Information request"
-msgstr "¯±danie informacji"
+#: catgets/gencat.c:445 catgets/gencat.c:622 catgets/gencat.c:676
+msgid "this is the first definition"
+msgstr "to pierwsza definicja"
 
-#: sysdeps/generic/siglist.h:71
-msgid "Power failure"
-msgstr "Awaria zasilania"
+#: catgets/gencat.c:521
+#, c-format
+msgid "unknown set `%s'"
+msgstr "nieznany zbiór `%s'"
 
-#: sysdeps/generic/siglist.h:74 stdio-common/../sysdeps/unix/siglist.c:55
-msgid "Resource lost"
-msgstr "Zasoby zosta³y stracone"
+#: catgets/gencat.c:562
+msgid "invalid quote character"
+msgstr "niepoprawny znak cudzys³owu"
 
-#: sysdeps/mach/hurd/mips/dl-machine.c:68
-#: string/../sysdeps/mach/_strerror.c:57
-msgid "Error in unknown error system: "
-msgstr "B³±d w nieznanym systemie b³êdów: "
+#: catgets/gencat.c:575
+#, c-format
+msgid "unknown directive `%s': line ignored"
+msgstr "nieznana dyrektywa `%s': linia zignorowana"
 
-#: sysdeps/mach/hurd/mips/dl-machine.c:83
-#: string/../sysdeps/generic/_strerror.c:44
-#: string/../sysdeps/mach/_strerror.c:87
-msgid "Unknown error "
-msgstr "Nieznany b³±d "
+#: catgets/gencat.c:620
+msgid "duplicated message number"
+msgstr "powtórzony numer komunikatu"
 
-#: sysdeps/unix/sysv/linux/lddlibc4.c:64
-#, c-format
-msgid "cannot open `%s'"
-msgstr "nie mo¿na otworzyæ `%s'"
+#: catgets/gencat.c:673
+msgid "duplicated message identifier"
+msgstr "powtórzony identyfikator komunikatu"
 
-#: sysdeps/unix/sysv/linux/lddlibc4.c:68
-#, c-format
-msgid "cannot read header from `%s'"
-msgstr "nie mo¿na przeczytaæ nag³ówka z `%s'"
+#: catgets/gencat.c:730
+msgid "invalid character: message ignored"
+msgstr "niepoprawny znak: komunikat zignorowany"
 
-#: iconv/iconv_charmap.c:159 iconv/iconv_prog.c:295 catgets/gencat.c:288
-#, c-format
-msgid "cannot open input file `%s'"
-msgstr "nie mo¿na otworzyæ pliku wej¶ciowego `%s'"
+#: catgets/gencat.c:773
+msgid "invalid line"
+msgstr "niepoprawna linia"
 
-#: iconv/iconv_charmap.c:177 iconv/iconv_prog.c:313
-#, c-format
-msgid "error while closing input `%s'"
-msgstr "b³±d podczas zamykania wej¶cia `%s'"
+#: catgets/gencat.c:827
+msgid "malformed line ignored"
+msgstr "b³êdnie sformu³owana linia zosta³a pominiêta"
 
-#: 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 "b³êdna sekwencja wej¶ciowa na pozycji %Zd"
+msgid "cannot open output file `%s'"
+msgstr "nie mo¿na otworzyæ pliku wyj¶ciowego `%s'"
 
-#: iconv/iconv_charmap.c:462 iconv/iconv_prog.c:506
-msgid "incomplete character or shift sequence at end of buffer"
-msgstr "niekompletny znak lub sekwencja steruj±ca na koñcu bufora"
+#: catgets/gencat.c:1194 locale/programs/linereader.c:559
+msgid "invalid escape sequence"
+msgstr "b³êdna sekwencja escape"
 
-#: 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 "b³±d podczas czytania danych wej¶ciowych"
+#: catgets/gencat.c:1216
+msgid "unterminated message"
+msgstr "nie zakoñczony komunikat"
 
-#: iconv/iconv_charmap.c:525 iconv/iconv_prog.c:567
-msgid "unable to allocate buffer for input"
-msgstr "przydzielenie bufora dla danych wej¶ciowych by³o niemo¿liwe"
+#: catgets/gencat.c:1240
+#, c-format
+msgid "while opening old catalog file"
+msgstr "podczas otwierania starego pliku katalogu"
 
-#: iconv/iconv_prog.c:61
-msgid "Input/Output format specification:"
-msgstr "Specyfikacja formatu wej¶cia/wyj¶cia:"
+#: catgets/gencat.c:1331
+#, c-format
+msgid "conversion modules not available"
+msgstr "modu³y konwersji niedostêpny"
 
-#: iconv/iconv_prog.c:62
-msgid "encoding of original text"
-msgstr "kodowanie oryginalnego tekstu"
+#: catgets/gencat.c:1357
+#, c-format
+msgid "cannot determine escape character"
+msgstr "nie mo¿na okre¶liæ znaku escape"
 
-#: iconv/iconv_prog.c:63
-msgid "encoding for output"
-msgstr "kodowanie wyników"
+#: debug/pcprofiledump.c:52
+msgid "Don't buffer output"
+msgstr "Nie buforowanie wyj¶cia"
 
-#: iconv/iconv_prog.c:64
-msgid "Information:"
-msgstr "Informacje:"
+#: debug/pcprofiledump.c:57
+msgid "Dump information generated by PC profiling."
+msgstr "Zrzut informacji wygenerowanych przez profilowanie PC."
 
-#: iconv/iconv_prog.c:65
-msgid "list all known coded character sets"
-msgstr "wy¶wietlenie wszystkich znanych zestawów znaków"
+#: debug/pcprofiledump.c:60
+msgid "[FILE]"
+msgstr "[PLIK]"
 
-#: iconv/iconv_prog.c:66 locale/programs/localedef.c:128
-msgid "Output control:"
-msgstr "Kontrola wyj¶cia:"
-
-#: iconv/iconv_prog.c:67
-msgid "omit invalid characters from output"
-msgstr "pominiêcie nieprawid³owych znaków z wyj¶cia"
-
-#: iconv/iconv_prog.c:68
-msgid "output file"
-msgstr "plik wynikowy"
-
-#: iconv/iconv_prog.c:69
-msgid "suppress warnings"
-msgstr "nie wypisywanie ostrze¿eñ"
-
-#: iconv/iconv_prog.c:70
-msgid "print progress information"
-msgstr "wy¶wietlanie informacji o postêpie konwersji"
-
-#: iconv/iconv_prog.c:75
-msgid "Convert encoding of given files from one encoding to another."
-msgstr "Konwersja podanych plików miêdzy ró¿nymi metodami kodowania."
-
-#: iconv/iconv_prog.c:79
-msgid "[FILE...]"
-msgstr "[PLIK...]"
-
-#: iconv/iconv_prog.c:201
-msgid "cannot open output file"
-msgstr "nie mo¿na otworzyæ pliku wyj¶ciowego"
-
-#: iconv/iconv_prog.c:243
-#, c-format
-msgid "conversions from `%s' and to `%s' are not supported"
-msgstr "konwersja z `%s' oraz do `%s' nie jest obs³ugiwana"
-
-#: iconv/iconv_prog.c:248
+#: debug/pcprofiledump.c:100
 #, c-format
-msgid "conversion from `%s' is not supported"
-msgstr "konwersja z `%s' nie jest obs³ugiwana"
+msgid "cannot open input file"
+msgstr "nie mo¿na otworzyæ pliku wej¶ciowego"
 
-#: iconv/iconv_prog.c:255
+#: debug/pcprofiledump.c:106
 #, c-format
-msgid "conversion to `%s' is not supported"
-msgstr "konwersja do `%s' nie jest obs³ugiwana"
+msgid "cannot read header"
+msgstr "nie mo¿na odczytaæ nag³ówka"
 
-#: iconv/iconv_prog.c:259
+#: debug/pcprofiledump.c:170
 #, c-format
-msgid "conversion from `%s' to `%s' is not supported"
-msgstr "konwersja z `%s' do `%s' nie jest obs³ugiwana"
+msgid "invalid pointer size"
+msgstr "nieprawid³owy rozmiar wska¼nika"
 
-#: iconv/iconv_prog.c:265
-msgid "failed to start conversion processing"
-msgstr "nie uda³o siê rozpocz±æ konwersji"
+#: debug/xtrace.sh:27 debug/xtrace.sh:45
+msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n"
+msgstr "Sk³adnia: xtrace [OPCJA]... PROGRAM [OPCJA-PROGRAMU]...\\n"
 
-#: iconv/iconv_prog.c:360
-msgid "error while closing output file"
-msgstr "b³±d podczas zamykania pliku wyj¶ciowego"
+#: debug/xtrace.sh:33
+#, fuzzy
+msgid "Try `xtrace --help' for more information.\\n"
+msgstr "Polecenie \\`xtrace --help' pozwoli uzyskaæ wiêcej informacji.\\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 "Prosimy zg³aszaæ b³êdy za pomoc± skryptu `glibcbug' na adres <bugs@gnu.org>.\n"
+#: debug/xtrace.sh:39
+#, fuzzy
+msgid "xtrace: option `$1' requires an argument.\\n"
+msgstr "xtrace: opcja \\`$1' musi mieæ argument.\\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"
-"To oprogramowanie jest darmowe; warunki kopiowania s± opisane w ¼ród³ach.\n"
-"Autorzy nie daj± ¯ADNYCH gwarancji, w tym równie¿ gwarancji MO¯LIWO¦CI\n"
-"SPRZEDA¯Y lub PRZYDATNO¦CI DO KONKRETNYCH ZASTOSOWAÑ.\n"
-
-# w %s wchodzi nazwisko autora danego programu/procedury -PK
-#: 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 "Autorem jest %s.\n"
+"¦ledzenie wykonywania programu poprzez wypisywanie aktualnie wykonywanych\n"
+"funkcji.\n"
+"\n"
+"     --data=PLIK          Wypisanie danych z PLIKU zamiast uruchamiania programu\n"
+"\n"
+"   -?,--help              Wypisanie tego opisu i zakoñczenie\n"
+"      --usage             Podanie krótkiego opisu sk³adni polecenia\n"
+"   -V,--version           Wypisanie informacji o wersji i zakoñczenie\n"
+"\n"
+"Argumenty obowi±zkowe dla d³ugich opcji s± obowi±zkowe równie¿ dla odpowiednich\n"
+"krótkich opcji.\n"
+"\n"
+"Informacje na temat zg³aszania b³êdów mo¿na znale¼æ pod adresem:\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\\n"
 
-#: iconv/iconv_prog.c:458 iconv/iconv_prog.c:484
-msgid "conversion stopped due to problem in writing the output"
-msgstr "konwersja przerwana z powodu problemu z zapisaniem wyników"
+#: debug/xtrace.sh:125
+#, fuzzy
+msgid "xtrace: unrecognized option `$1'\\n"
+msgstr "xtrace: nieznana opcja \\`$1'\\n"
 
-#: iconv/iconv_prog.c:502
-#, c-format
-msgid "illegal input sequence at position %ld"
-msgstr "b³êdna sekwencja wej¶ciowa na pozycji %ld"
+#: debug/xtrace.sh:138
+msgid "No program name given\\n"
+msgstr "Nie podano nazwy programu\\n"
 
-#: iconv/iconv_prog.c:510
-msgid "internal error (illegal descriptor)"
-msgstr "b³±d wewnêtrzny (nieprawid³owy deskryptor)"
+#: debug/xtrace.sh:146
+#, fuzzy, sh-format
+msgid "executable `$program' not found\\n"
+msgstr "nie znaleziono programu wykonywalnego \\`$program'\\n"
 
-#: iconv/iconv_prog.c:513
-#, c-format
-msgid "unknown iconv() error %d"
-msgstr "nieznany b³±d iconv() %d"
+#: debug/xtrace.sh:150
+#, fuzzy, sh-format
+msgid "`$program' is no executable\\n"
+msgstr "\\`$program' nie jest wykonywalny\\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 ""
-"Poni¿sza lista zawiera wszystkie znane zakodowane zestawy znaków. Nie oznacza\n"
-"to, ¿e wszystkie kombinacje zestawów mog± byæ u¿ywane jako parametry OD i DO.\n"
-"Jeden zestaw znaków mo¿e znajdowaæ siê na li¶cie pod wieloma nazwami\n"
-"(aliasami).\n"
-"\n"
-"  "
+#: dlfcn/dlinfo.c:67
+msgid "RTLD_SELF used in code not dynamically loaded"
+msgstr "RTLD_SELF wyst±pi³o w kodzie nie ³adowanym dynamicznie"
 
-#: iconv/iconvconfig.c:110
-msgid "Create fastloading iconv module configuration file."
-msgstr "Tworzenie pliku konfiguracyjnego do szybkiego wczytywania modu³ów iconv."
+#: dlfcn/dlinfo.c:76
+msgid "unsupported dlinfo request"
+msgstr "nieobs³ugiwane ¿±danie dlinfo"
 
-#: iconv/iconvconfig.c:114
-msgid "[DIR...]"
-msgstr "[KATALOG...]"
+#: dlfcn/dlmopen.c:64
+msgid "invalid namespace"
+msgstr "niepoprawna przestrzeñ nazw"
 
-#: iconv/iconvconfig.c:126
-msgid "Prefix used for all file accesses"
-msgstr "Prefiks u¿ywany przy ka¿dym dostêpie do pliku"
+#: dlfcn/dlmopen.c:69
+msgid "invalid mode"
+msgstr "niepoprawny tryb"
 
-#: iconv/iconvconfig.c:327 locale/programs/localedef.c:292
-msgid "no output file produced because warnings were issued"
-msgstr "nie utworzono pliku wyj¶ciowego, poniewa¿ wyst±pi³y ostrze¿enia"
+#: dlfcn/dlopen.c:64
+msgid "invalid mode parameter"
+msgstr "niepoprawny parametr trybu"
 
-#: iconv/iconvconfig.c:405
-msgid "while inserting in search tree"
-msgstr "b³±d podczas wstawiania do drzewa wyszukiwañ"
+#: elf/cache.c:67
+msgid "unknown"
+msgstr "nieznany"
 
-#: iconv/iconvconfig.c:1204
-msgid "cannot generate output file"
-msgstr "nie mo¿na wygenerowaæ pliku wyj¶ciowego"
+#: elf/cache.c:110
+msgid "Unknown OS"
+msgstr "Nieznany system"
 
-#: locale/programs/charmap-dir.c:59
+#: elf/cache.c:115
 #, c-format
-msgid "cannot read character map directory `%s'"
-msgstr "nie mo¿na odczytaæ katalogu mapy znaków `%s'"
+msgid ", OS ABI: %s %d.%d.%d"
+msgstr ", ABI systemu: %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 "nie znaleziono pliku tablicy znaków `%s'"
+msgid "Can't open cache file %s\n"
+msgstr "Nie mo¿na otworzyæ pliku bufora %s\n"
 
-#: locale/programs/charmap.c:194
+#: elf/cache.c:153
 #, c-format
-msgid "default character map file `%s' not found"
-msgstr "nie znaleziono domy¶lnej tablicy znaków `%s'"
+msgid "mmap of cache file failed.\n"
+msgstr "mmap pliku bufora nie powiod³o siê.\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 "tablica znaków `%s' niekompatybilna z ASCII, lokalizacja niekompatybilna z ISO C\n"
+msgid "File is not a cache file.\n"
+msgstr "Plik nie jest plikiem bufora.\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> musi byæ wiêkszy ni¿ <mb_cur_min>\n"
+msgid "%d libs found in cache `%s'\n"
+msgstr "Znaleziono %d bibliotek w buforze `%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 "b³±d sk³adni w prologu: %s"
-
-#: locale/programs/charmap.c:357
-msgid "invalid definition"
-msgstr "niepoprawna definicja"
-
-#: locale/programs/charmap.c:374 locale/programs/locfile.c:126
-#: locale/programs/locfile.c:153 locale/programs/repertoire.c:176
-msgid "bad argument"
-msgstr "b³êdny argument"
+msgid "Can't remove old temporary cache file %s"
+msgstr "Nie mo¿na usun±æ starego tymczasowego pliku bufora %s"
 
-#: locale/programs/charmap.c:402
+#: elf/cache.c:416
 #, c-format
-msgid "duplicate definition of <%s>"
-msgstr "powtórzona definicja <%s>"
+msgid "Can't create temporary cache file %s"
+msgstr "Nie mo¿na utworzyæ tymczasowego pliku bufora %s"
 
-#: locale/programs/charmap.c:409
+#: elf/cache.c:424 elf/cache.c:434 elf/cache.c:438
 #, c-format
-msgid "value for <%s> must be 1 or greater"
-msgstr "warto¶æ <%s> musi wynosiæ 1 lub wiêcej"
+msgid "Writing of cache data failed"
+msgstr "Zapis danych bufora nie powiód³ siê"
 
-#: locale/programs/charmap.c:421
+#: elf/cache.c:442
 #, c-format
-msgid "value of <%s> must be greater or equal than the value of <%s>"
-msgstr "warto¶æ <%s> musi byæ wiêksza lub równa warto¶ci <%s>"
+msgid "Writing of cache data failed."
+msgstr "Zapis danych bufora nie powiód³ siê."
 
-#: locale/programs/charmap.c:444 locale/programs/repertoire.c:184
+#: elf/cache.c:449
 #, c-format
-msgid "argument to <%s> must be a single character"
-msgstr "argument <%s> musi byæ pojedynczym znakiem"
-
-#: locale/programs/charmap.c:470
-msgid "character sets with locking states are not supported"
-msgstr "zestawy znaków ze stanami blokowania nie s± obs³ugiwane"
+msgid "Changing access rights of %s to %#o failed"
+msgstr "Zmiana praw dostêpu %s na %#o nie powiod³a siê"
 
-#: 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/cache.c:454
 #, c-format
-msgid "syntax error in %s definition: %s"
-msgstr "b³±d sk³adni w definicji %s: %s"
-
-#: locale/programs/charmap.c:498 locale/programs/charmap.c:678
-#: locale/programs/charmap.c:774 locale/programs/repertoire.c:231
-msgid "no symbolic name given"
-msgstr "brak nazwy symbolicznej"
-
-#: locale/programs/charmap.c:552
-msgid "invalid encoding given"
-msgstr "niepoprawne kodowanie"
+msgid "Renaming of %s to %s failed"
+msgstr "Zmiana nazwy %s na %s nie powiod³a siê"
 
-#: locale/programs/charmap.c:561
-msgid "too few bytes in character encoding"
-msgstr "za ma³o bajtów w kodzie znaku"
+#: elf/dl-close.c:116
+msgid "shared object not open"
+msgstr "obiekt dzielony nie jest otwarty"
 
-#: locale/programs/charmap.c:563
-msgid "too many bytes in character encoding"
-msgstr "za du¿o bajtów w kodzie znaku"
+#: elf/dl-deps.c:112
+msgid "DST not allowed in SUID/SGID programs"
+msgstr "DST nie dozwolone dla programów SUID/SGID"
 
-#: 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 "brak nazwy symbolicznej dla koñca przedzia³u"
+#: elf/dl-deps.c:125
+msgid "empty dynamics string token substitution"
+msgstr "puste dynamiczne podstawienie znaku ³añcucha"
 
-#: locale/programs/charmap.c:609 locale/programs/locfile.c:818
-#: locale/programs/repertoire.c:314
+#: elf/dl-deps.c:131
 #, c-format
-msgid "`%1$s' definition does not end with `END %1$s'"
-msgstr "definicja `%1$s' musi koñczyæ siê wyra¿eniem `END %1$s'"
+msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n"
+msgstr "nie mo¿na wczytaæ pomocniczego `%s' z powodu pustego dynamicznego podstawienia\n"
 
-#: locale/programs/charmap.c:642
-msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
-msgstr "po definicji CHARMAP mog± wystêpowaæ tylko definicje WIDTH"
+#: elf/dl-deps.c:472
+msgid "cannot allocate dependency list"
+msgstr "nie mo¿na przydzieliæ pamiêci dla listy zale¿no¶ci"
 
-#: locale/programs/charmap.c:650 locale/programs/charmap.c:713
-#, c-format
-msgid "value for %s must be an integer"
-msgstr "warto¶æ %s musi byæ liczb± ca³kowit±"
+#: elf/dl-deps.c:505 elf/dl-deps.c:560
+msgid "cannot allocate symbol search list"
+msgstr "nie mo¿na przydzieliæ pamiêci dla listy przeszukiwania symboli"
 
-# state machine = finite state machine =
-# automat skoñczony -PK
-#: locale/programs/charmap.c:841
-#, c-format
-msgid "%s: error in state machine"
-msgstr "%s: b³±d w automacie skoñczonym"
+#: elf/dl-deps.c:545
+msgid "Filters not supported with LD_TRACE_PRELINKING"
+msgstr "Filtry nie s± obs³ugiwane z LD_TRACE_PRELINKING"
 
-#: 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: przedwczesny koniec pliku"
+#: elf/dl-error.c:77
+msgid "DYNAMIC LINKER BUG!!!"
+msgstr "B£¡D DYNAMICZNEGO LINKERA!!!"
 
-#: locale/programs/charmap.c:868 locale/programs/charmap.c:879
-#, c-format
-msgid "unknown character `%s'"
-msgstr "nieznany znak `%s'"
+#: elf/dl-error.c:124
+msgid "error while loading shared libraries"
+msgstr "b³±d podczas wczytywania bibliotek dzielonych"
 
-#: 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 "liczba bajtów dla sekwencji bajtów pocz±tku i koñca przedzia³u jest ró¿na: %d i %d"
+#: elf/dl-fptr.c:88
+msgid "cannot map pages for fdesc table"
+msgstr "nie mo¿na odwzorowaæ stron dla tablicy fdesc"
 
-#: locale/programs/charmap.c:991 locale/programs/ld-collate.c:2930
-#: locale/programs/repertoire.c:420
-msgid "invalid names for character range"
-msgstr "nieprawid³owe nazwy dla przedzia³u znaków"
+#: elf/dl-fptr.c:192
+msgid "cannot map pages for fptr table"
+msgstr "nie mo¿na odwzorowaæ stron dla tablicy fptr"
 
-#: locale/programs/charmap.c:1003 locale/programs/repertoire.c:432
-msgid "hexadecimal range format should use only capital characters"
-msgstr "w szesnastkowym formacie przedzia³u powinny byæ u¿ywane wielkie litery"
+#: elf/dl-fptr.c:221
+msgid "internal error: symidx out of range of fptr table"
+msgstr "b³±d wewnêtrzny: symidx spoza zakresu tablicy fptr"
 
-#: locale/programs/charmap.c:1021
-#, c-format
-msgid "<%s> and <%s> are illegal names for range"
-msgstr "<%s> i <%s> nie s± poprawnymi nazwami dla przedzia³u"
+#: elf/dl-load.c:372
+msgid "cannot allocate name record"
+msgstr "nie mo¿na przydzieliæ pamiêci dla rekordu nazwy"
 
-#: locale/programs/charmap.c:1027
-msgid "upper limit in range is not higher then lower limit"
-msgstr "górna granica przedzia³u nie jest wiêksza ni¿ dolna"
+#: 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 "nie mo¿na utworzyæ bufora dla ¶cie¿ki przeszukiwania"
 
-#: locale/programs/charmap.c:1085
-msgid "resulting bytes for range not representable."
-msgstr "wynikowe bajty dla przedzia³u nie mog± zostaæ wyra¿one."
+#: elf/dl-load.c:576
+msgid "cannot create RUNPATH/RPATH copy"
+msgstr "nie mo¿na utworzyæ kopii RUNPATH/RPATH"
 
-#: 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 "Nie znaleziono definicji dla kategorii %s"
+#: elf/dl-load.c:659
+msgid "cannot create search path array"
+msgstr "nie mo¿na utworzyæ tablicy ¶cie¿ki przeszukiwania"
 
-#: 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: pole `%s' nie jest zdefiniowane"
+#: elf/dl-load.c:870
+msgid "cannot stat shared object"
+msgstr "nie mo¿na wykonaæ stat na obiekcie dzielonym"
 
-#: 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: pole `%s' nie mo¿e byæ puste"
+#: elf/dl-load.c:940
+msgid "cannot open zero fill device"
+msgstr "nie mo¿na otworzyæ urz±dzenia wype³niaj±cego zerami"
 
-#: locale/programs/ld-address.c:169
-#, c-format
-msgid "%s: invalid escape `%%%c' sequence in field `%s'"
-msgstr "%s: niepoprawna sekwencja escape `%%%c' w polu `%s'"
+#: elf/dl-load.c:985 elf/dl-load.c:2215
+msgid "cannot create shared object descriptor"
+msgstr "nie mo¿na utworzyæ deskryptora obiektu dzielonego"
 
-#: locale/programs/ld-address.c:220
-#, c-format
-msgid "%s: terminology language code `%s' not defined"
-msgstr "%s: kod jêzyka terminologii `%s' nie jest zdefiniowany"
+#: elf/dl-load.c:1004 elf/dl-load.c:1663 elf/dl-load.c:1755
+msgid "cannot read file data"
+msgstr "nie mo¿na odczytaæ danych z pliku"
 
-#: locale/programs/ld-address.c:247 locale/programs/ld-address.c:276
-#, c-format
-msgid "%s: language abbreviation `%s' not defined"
-msgstr "%s: skrót jêzyka `%s' nie jest zdefiniowany"
+#: elf/dl-load.c:1048
+msgid "ELF load command alignment not page-aligned"
+msgstr "wyrównanie polecenia wczytania ELF nie wyrównane do granicy stron"
 
-#: 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: warto¶æ `%s' nie pasuje do warto¶ci `%s'"
+#: elf/dl-load.c:1055
+msgid "ELF load command address/offset not properly aligned"
+msgstr "adres/przesuniêcie polecenia wczytania ELF niew³a¶ciwie wyrównane"
 
-#: locale/programs/ld-address.c:301
-#, c-format
-msgid "%s: numeric country code `%d' not valid"
-msgstr "%s: liczbowy kod kraju `%d' jest niepoprawny"
+#: elf/dl-load.c:1139
+msgid "cannot allocate TLS data structures for initial thread"
+msgstr "nie mo¿na przydzieliæ struktur danych TLS dla pocz±tkowego w±tku"
 
-#: 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: pole `%s' zadeklarowane wiêcej ni¿ raz"
+#: elf/dl-load.c:1163
+msgid "cannot handle TLS data"
+msgstr "nie mo¿na obs³u¿yæ danych TLS"
 
-#: 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: nieznany znak w polu `%s'"
+#: elf/dl-load.c:1182
+msgid "object file has no loadable segments"
+msgstr "plik obiektu nie ma segmentów ³adowalnych"
 
-#: 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: niekompletna linia `END'"
+#: elf/dl-load.c:1218
+msgid "failed to map segment from shared object"
+msgstr "odwzorowanie segmentu z obiektu dzielonego nie powiod³o siê"
 
-#: 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: definicja nie koñczy siê przez `END %1$s'"
+#: elf/dl-load.c:1242
+msgid "cannot dynamically load executable"
+msgstr "nie mo¿na dynamicznie wczytaæ pliku wykonywalnego"
 
-#: 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: b³±d sk³adni"
+#: elf/dl-load.c:1303
+msgid "cannot change memory protections"
+msgstr "nie mo¿na zmieniæ ochrony pamiêci"
 
-#: locale/programs/ld-collate.c:398
-#, c-format
-msgid "`%.*s' already defined in charmap"
-msgstr "`%.*s' ju¿ zdefiniowany w tablicy znaków"
+#: elf/dl-load.c:1322
+msgid "cannot map zero-fill pages"
+msgstr "nie mo¿na odwzorowaæ stron wype³nionych zerami"
 
-#: locale/programs/ld-collate.c:407
-#, c-format
-msgid "`%.*s' already defined in repertoire"
-msgstr "`%.*s' ju¿ zdefiniowany w repertuarze"
+#: elf/dl-load.c:1336
+msgid "object file has no dynamic section"
+msgstr "plik obiektu nie ma sekcji dynamicznej"
 
-#: locale/programs/ld-collate.c:414
-#, c-format
-msgid "`%.*s' already defined as collating symbol"
-msgstr "`%.*s' ju¿ zdefiniowany jako symbol scalaj±cy"
+#: elf/dl-load.c:1359
+msgid "shared object cannot be dlopen()ed"
+msgstr "obiekt dzielony nie mo¿e byæ otwarty przez dlopen()"
 
-#: locale/programs/ld-collate.c:421
-#, c-format
-msgid "`%.*s' already defined as collating element"
-msgstr "`%.*s' ju¿ zdefiniowany jako element scalaj±cy"
+#: elf/dl-load.c:1372
+msgid "cannot allocate memory for program header"
+msgstr "nie mo¿na przydzieliæ pamiêci na nag³ówek programu"
 
-#: 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: porz±dki `forward' i `backward' wykluczaj± siê wzajemnie"
+#: elf/dl-load.c:1389 elf/dl-open.c:174
+msgid "invalid caller"
+msgstr "niepoprawny wywo³uj±cy"
 
-#: 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' wyst±pi³o wiêcej ni¿ raz w definicji wagi %d"
+#: elf/dl-load.c:1428
+msgid "cannot enable executable stack as shared object requires"
+msgstr "nie mo¿na w³±czyæ wykonywalnego stosu wymaganego przez obiekt dzielony"
 
-#: locale/programs/ld-collate.c:560
-#, c-format
-msgid "%s: too many rules; first entry only had %d"
-msgstr "%s: zbyt du¿o regu³; pierwszy wpis mia³ tylko %d"
+#: elf/dl-load.c:1443
+msgid "cannot close file descriptor"
+msgstr "nie mo¿na zamkn±æ deskryptora pliku"
 
-#: locale/programs/ld-collate.c:596
-#, c-format
-msgid "%s: not enough sorting rules"
-msgstr "%s: za ma³o regu³ sortowania"
+#: elf/dl-load.c:1485
+msgid "cannot create searchlist"
+msgstr "nie mo¿na utworzyæ listy przeszukiwañ"
 
-#: locale/programs/ld-collate.c:761
-#, c-format
-msgid "%s: empty weight string not allowed"
-msgstr "%s: pusty ³añcuch wagi jest niedozwolony"
+#: elf/dl-load.c:1663
+msgid "file too short"
+msgstr "plik za krótki"
 
-# ellipsis = wyrzutnia jezykowa - sprawdzilem. nawet pamietam ze cos takiego
-# istnieje ze szkoly, ale za cholere nie pamietam co to jest ;) -PK
-#: locale/programs/ld-collate.c:856
-#, c-format
-msgid "%s: weights must use the same ellipsis symbol as the name"
-msgstr "%s: wagi musz± u¿ywaæ jako nazwy tego samego symbolu wyrzutni"
+#: elf/dl-load.c:1692
+msgid "invalid ELF header"
+msgstr "nieprawid³owy nag³ówek ELF"
 
-#: locale/programs/ld-collate.c:912
-#, c-format
-msgid "%s: too many values"
-msgstr "%s: zbyt du¿o warto¶ci"
+#: elf/dl-load.c:1704
+msgid "ELF file data encoding not big-endian"
+msgstr "kodowanie danych w pliku ELF nie jest big-endian"
 
-#: locale/programs/ld-collate.c:1031 locale/programs/ld-collate.c:1206
-#, c-format
-msgid "order for `%.*s' already defined at %s:%Zu"
-msgstr "porz±dek dla `%.*s' zosta³ ju¿ zdefiniowany w %s:%Zu"
+#: elf/dl-load.c:1706
+msgid "ELF file data encoding not little-endian"
+msgstr "kodowanie danych w pliku ELF nie jest little-endian"
 
-#: locale/programs/ld-collate.c:1081
-#, c-format
-msgid "%s: the start and the end symbol of a range must stand for characters"
-msgstr "%s: pocz±tkowy i koñcowy symbol przedzia³u musz± byæ znakami"
+#: elf/dl-load.c:1710
+msgid "ELF file version ident does not match current one"
+msgstr "identyfikator wersji pliku ELF nie zgadza siê z aktualnym"
 
-#: locale/programs/ld-collate.c:1108
-#, c-format
-msgid "%s: byte sequences of first and last character must have the same length"
-msgstr "%s: sekwencje bajtów pierwszego i ostatniego znaku musz± mieæ tê sam± d³ugo¶æ"
+#: elf/dl-load.c:1714
+msgid "ELF file OS ABI invalid"
+msgstr "niepoprawne ABI systemu w pliku ELF"
 
-#: locale/programs/ld-collate.c:1150
-#, c-format
-msgid "%s: byte sequence of first character of sequence is not lower than that of the last character"
-msgstr "%s: sekwencja bajtów pierwszego znaku sekwencji nie jest mniejsza ni¿ ostatniego znaku"
+#: elf/dl-load.c:1716
+msgid "ELF file ABI version invalid"
+msgstr "niepoprawna wersja ABI w pliku ELF"
 
-#: locale/programs/ld-collate.c:1275
-#, c-format
-msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
-msgstr "%s: wyrzutnia symbolicznego przedzia³u nie mo¿e byæ bezpo¶rednio po `order_start'"
+#: elf/dl-load.c:1719
+msgid "internal error"
+msgstr "b³±d wewnêtrzny"
 
-#: locale/programs/ld-collate.c:1279
-#, c-format
-msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
-msgstr "%s: wyrzutnia symbolicznego przedzia³u nie mo¿e byæ bezpo¶rednio przed `order_end'"
+#: elf/dl-load.c:1726
+msgid "ELF file version does not match current one"
+msgstr "wersja pliku ELF nie zgadza siê z aktualn±"
 
-#: 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' i `%.*s' nie s± poprawnymi nazwami dla symbolicznego przedzia³u"
+#: elf/dl-load.c:1734
+msgid "only ET_DYN and ET_EXEC can be loaded"
+msgstr "tylko ET_DYN i ET_EXEC mog± byæ wczytane"
 
-#: 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: porz±dek dla `%.*s' zosta³ ju¿ zdefiniowany w %s:%Zu"
+#: elf/dl-load.c:1740
+msgid "ELF file's phentsize not the expected size"
+msgstr "phentsize w pliku ELF nie jest oczekiwanym rozmiarem"
 
-#: locale/programs/ld-collate.c:1357
-#, c-format
-msgid "%s: `%s' must be a character"
-msgstr "%s: `%s' musi byæ znakiem"
+#: elf/dl-load.c:2231
+msgid "wrong ELF class: ELFCLASS64"
+msgstr "niew³a¶ciwa klasa ELF: ELFCLASS64"
 
-#: 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' musi byæ u¿yte dla konkretnego poziomu we wszystkich sekcjach lub ¿adnej"
+#: elf/dl-load.c:2232
+msgid "wrong ELF class: ELFCLASS32"
+msgstr "niew³a¶ciwa klasa ELF: ELFCLASS32"
 
-#: locale/programs/ld-collate.c:1575
-#, c-format
-msgid "symbol `%s' not defined"
-msgstr "nie zdefiniowany symbol `%s'"
+#: elf/dl-load.c:2235
+msgid "cannot open shared object file"
+msgstr "nie mo¿na otworzyæ pliku obiektu dzielonego"
 
-#: locale/programs/ld-collate.c:1651 locale/programs/ld-collate.c:1757
-#, c-format
-msgid "symbol `%s' has the same encoding as"
-msgstr "symbol `%s' ma to samo kodowanie co"
+#: elf/dl-lookup.c:261
+msgid "relocation error"
+msgstr "b³±d relokacji"
 
-#: locale/programs/ld-collate.c:1655 locale/programs/ld-collate.c:1761
-#, c-format
-msgid "symbol `%s'"
-msgstr "symbol `%s'"
+#: elf/dl-lookup.c:289
+msgid "symbol lookup error"
+msgstr "b³±d poszukiwania symbolu"
 
-#: locale/programs/ld-collate.c:1803
-msgid "no definition of `UNDEFINED'"
-msgstr "brak definicji `UNDEFINED'"
+#: elf/dl-open.c:112
+msgid "cannot extend global scope"
+msgstr "nie mo¿na rozszerzyæ zakresu globalnego"
 
-#: locale/programs/ld-collate.c:1832
-msgid "too many errors; giving up"
-msgstr "zbyt du¿o b³êdów; poddajê siê"
+#: elf/dl-open.c:237
+msgid "empty dynamic string token substitution"
+msgstr "puste dynamiczne podstawienie znaku ³añcucha"
 
-#: locale/programs/ld-collate.c:2735
-#, c-format
-msgid "%s: duplicate definition of `%s'"
-msgstr "%s: powtórzona definicja `%s'"
+#: elf/dl-open.c:406 elf/dl-open.c:417 elf/dl-open.c:425
+msgid "cannot create scope list"
+msgstr "nie mo¿na utworzyæ listy zakresów"
 
-#: locale/programs/ld-collate.c:2771
-#, c-format
-msgid "%s: duplicate declaration of section `%s'"
-msgstr "%s: powtórzona deklaracja sekcji `%s'"
+#: elf/dl-open.c:470
+msgid "TLS generation counter wrapped!  Please report this."
+msgstr "Licznik generacji TLS przekrêci³ siê! Proszê to zg³osiæ."
 
-#: locale/programs/ld-collate.c:2910
-#, c-format
-msgid "%s: unknown character in collating symbol name"
-msgstr "%s: nieznany znak w nazwie symbolu scalaj±cego"
+#: elf/dl-open.c:508
+msgid "invalid mode for dlopen()"
+msgstr "b³êdny typ dla dlopen()"
 
-#: locale/programs/ld-collate.c:3042
-#, c-format
-msgid "%s: unknown character in equivalent definition name"
-msgstr "%s: nieznany znak w nazwie definicji równowa¿no¶ci"
+#: elf/dl-open.c:525
+msgid "no more namespaces available for dlmopen()"
+msgstr "nie ma wiêcej dostêpnych przestrzeni nazw dla dlmopen()"
 
-#: locale/programs/ld-collate.c:3055
-#, c-format
-msgid "%s: unknown character in equivalent definition value"
-msgstr "%s: nieznany znak w warto¶ci definicji równowa¿no¶ci"
+#: elf/dl-open.c:538
+msgid "invalid target namespace in dlmopen()"
+msgstr "b³êdna przestrzeñ nazw dla celu w dlmopen()"
 
-#: locale/programs/ld-collate.c:3065
-#, c-format
-msgid "%s: unknown symbol `%s' in equivalent definition"
-msgstr "%s: nieznany symbol `%s' w definicji równowa¿no¶ci"
+#: elf/dl-reloc.c:55
+msgid "cannot allocate memory in static TLS block"
+msgstr "nie mo¿na przydzieliæ pamiêci w statycznym bloku TLS"
 
-#: locale/programs/ld-collate.c:3074
-msgid "error while adding equivalent collating symbol"
-msgstr "b³±d podczas dodawania równowa¿nego symbolu scalaj±cego"
+#: elf/dl-reloc.c:198
+msgid "cannot make segment writable for relocation"
+msgstr "nie mo¿na uczyniæ segmentu zapisywalnym w celu relokacji"
 
-#: locale/programs/ld-collate.c:3104
+#: elf/dl-reloc.c:279
 #, c-format
-msgid "duplicate definition of script `%s'"
-msgstr "powtórzona definicja skryptu `%s'"
+msgid "%s: no PLTREL found in object %s\n"
+msgstr "%s: nie znaleziono PLTREL w obiekcie %s\n"
 
-#: locale/programs/ld-collate.c:3152
+#: elf/dl-reloc.c:290
 #, c-format
-msgid "%s: unknown section name `%s'"
-msgstr "%s: nieznana nazwa sekcji `%s'"
+msgid "%s: out of memory to store relocation results for %s\n"
+msgstr "%s: brak pamiêci na zapisanie wyników relokacji dla %s\n"
 
-#: locale/programs/ld-collate.c:3180
-#, c-format
-msgid "%s: multiple order definitions for section `%s'"
-msgstr "%s: wielokrotna definicja porz±dku dla sekcji `%s'"
+#: elf/dl-reloc.c:306
+msgid "cannot restore segment prot after reloc"
+msgstr "nie mo¿na odtworzyæ ochrony segmentu po relokacji"
 
-#: locale/programs/ld-collate.c:3205
-#, c-format
-msgid "%s: invalid number of sorting rules"
-msgstr "%s: b³êdna liczba regu³ sortowania"
+#: elf/dl-reloc.c:331
+msgid "cannot apply additional memory protection after relocation"
+msgstr "nie mo¿na na³o¿yæ dodatkowej ochrony pamiêci po relokacji"
 
-#: locale/programs/ld-collate.c:3232
-#, c-format
-msgid "%s: multiple order definitions for unnamed section"
-msgstr "%s: wielokrotna definicja porz±dku dla nie nazwanej sekcji"
+#: elf/dl-sym.c:98
+msgid "RTLD_NEXT used in code not dynamically loaded"
+msgstr "RTLD_NEXT wyst±pi³o w kodzie nie ³adowanym dynamicznie"
 
-#: 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: brak s³owa kluczowego `order_end'"
+#: elf/dl-sysdep.c:495
+msgid "cannot create capability list"
+msgstr "nie mo¿na utworzyæ listy uprawnieñ"
 
-#: locale/programs/ld-collate.c:3347
-#, c-format
-msgid "%s: order for collating symbol %.*s not yet defined"
-msgstr "%s: porz±dek dla symbolu scalaj±cego %.*s jeszcze nie zdefiniowany"
+#: elf/dl-tls.c:829
+msgid "cannot create TLS data structures"
+msgstr "nie mo¿na utworzyæ struktur danych TLS"
 
-#: locale/programs/ld-collate.c:3365
-#, c-format
-msgid "%s: order for collating element %.*s not yet defined"
-msgstr "%s: porz±dek dla elementu scalaj±cego %.*s jeszcze nie zdefiniowany"
+#: elf/dl-version.c:303
+msgid "cannot allocate version reference table"
+msgstr "nie mo¿na przydzieliæ tablicy odniesieñ do wersji"
 
-#: locale/programs/ld-collate.c:3376
-#, c-format
-msgid "%s: cannot reorder after %.*s: symbol not known"
-msgstr "%s: nie mo¿na zmieniæ porz±dku po %.*s: nieznany symbol"
+#: elf/ldconfig.c:133
+msgid "Print cache"
+msgstr "Wypisanie zawarto¶ci bufora"
 
-#: locale/programs/ld-collate.c:3428 locale/programs/ld-collate.c:3790
-#, c-format
-msgid "%s: missing `reorder-end' keyword"
-msgstr "%s: brak s³owa kluczowego `reorder-end'"
+#: elf/ldconfig.c:134
+msgid "Generate verbose messages"
+msgstr "Wy¶wietlanie wiêkszej liczby komunikatów"
 
-#: locale/programs/ld-collate.c:3462 locale/programs/ld-collate.c:3662
-#, c-format
-msgid "%s: section `%.*s' not known"
-msgstr "%s: nieznana sekcja `%.*s'"
+#: elf/ldconfig.c:135
+msgid "Don't build cache"
+msgstr "Nie budowanie bufora"
 
-#: locale/programs/ld-collate.c:3527
-#, c-format
-msgid "%s: bad symbol <%.*s>"
-msgstr "%s: b³êdny symbol <%.*s>"
+#: elf/ldconfig.c:136
+msgid "Don't generate links"
+msgstr "Nie tworzenie dowi±zañ"
 
-#: locale/programs/ld-collate.c:3725
-#, c-format
-msgid "%s: cannot have `%s' as end of ellipsis range"
-msgstr "%s: nie mo¿na u¿yæ `%s' jako koñca przedzia³u wyrzutni"
+#: elf/ldconfig.c:137
+msgid "Change to and use ROOT as root directory"
+msgstr "Przej¶cie do i u¿ywanie KATALOGU jako g³ównego katalogu"
 
-#: locale/programs/ld-collate.c:3774
-#, c-format
-msgid "%s: empty category description not allowed"
-msgstr "%s: pusty opis kategorii niedozwolony"
+#: elf/ldconfig.c:137
+msgid "ROOT"
+msgstr "KATALOG"
 
-#: locale/programs/ld-collate.c:3793
-#, c-format
-msgid "%s: missing `reorder-sections-end' keyword"
-msgstr "%s: brak s³owa kluczowego `reorder-sections-end'"
+#: elf/ldconfig.c:138
+msgid "CACHE"
+msgstr "BUFOR"
 
-#: locale/programs/ld-ctype.c:440
-msgid "No character set name specified in charmap"
-msgstr "Brak nazwy zestawu znaków w tablicy znaków"
+#: elf/ldconfig.c:138
+msgid "Use CACHE as cache file"
+msgstr "U¿ycie BUFORA jako pliku bufora"
 
-#: locale/programs/ld-ctype.c:469
-#, c-format
-msgid "character L'\\u%0*x' in class `%s' must be in class `%s'"
-msgstr "znak L'\\u%0*x' z klasy `%s' musi byæ w klasie `%s'"
+#: elf/ldconfig.c:139
+msgid "CONF"
+msgstr "KONF"
 
-#: locale/programs/ld-ctype.c:484
-#, c-format
-msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'"
-msgstr "znak L'\\u%0*x' z klasy `%s' nie mo¿e byæ w klasie `%s'"
+#: elf/ldconfig.c:139
+msgid "Use CONF as configuration file"
+msgstr "U¿ycie KONF jako pliku konfiguracyjnego"
 
-#: locale/programs/ld-ctype.c:498 locale/programs/ld-ctype.c:556
-#, c-format
-msgid "internal error in %s, line %u"
-msgstr "b³±d wewnêtrzny w %s, linia %u"
+#: elf/ldconfig.c:140
+msgid "Only process directories specified on the command line.  Don't build cache."
+msgstr "Przetwarzanie wy³±cznie katalogów podanych z linii poleceñ; nie budowanie bufora."
+
+#: elf/ldconfig.c:141
+msgid "Manually link individual libraries."
+msgstr "Rêczne tworzenie dowi±zañ do pojedynczych bibliotek."
 
-#: locale/programs/ld-ctype.c:527
+#: elf/ldconfig.c:142
+msgid "FORMAT"
+msgstr "FORMAT"
+
+#: elf/ldconfig.c:142
+msgid "Format to use: new, old or compat (default)"
+msgstr "U¿ywany format: new, old lub compat (domy¶lny)"
+
+#: elf/ldconfig.c:150
+msgid "Configure Dynamic Linker Run Time Bindings."
+msgstr "Konfiguracja powi±zañ dynamicznego linkera."
+
+#: elf/ldconfig.c:308
 #, c-format
-msgid "character '%s' in class `%s' must be in class `%s'"
-msgstr "znak '%s' z klasy `%s' musi byæ w klasie `%s'"
+msgid "Path `%s' given more than once"
+msgstr "¦cie¿ka `%s' podana wiêcej ni¿ raz"
 
-#: locale/programs/ld-ctype.c:543
+#: elf/ldconfig.c:348
 #, c-format
-msgid "character '%s' in class `%s' must not be in class `%s'"
-msgstr "znak '%s' z klasy `%s' nie mo¿e byæ w klasie `%s'"
+msgid "%s is not a known library type"
+msgstr "%s nie jest znanym rodzajem biblioteki"
 
-#: locale/programs/ld-ctype.c:573 locale/programs/ld-ctype.c:611
+#: elf/ldconfig.c:373
 #, c-format
-msgid "<SP> character not in class `%s'"
-msgstr "znak <SP> nie jest w klasie `%s'"
+msgid "Can't stat %s"
+msgstr "Nie mo¿na wykonaæ stat na %s"
 
-#: locale/programs/ld-ctype.c:585 locale/programs/ld-ctype.c:622
+#: elf/ldconfig.c:447
 #, c-format
-msgid "<SP> character must not be in class `%s'"
-msgstr "znak <SP> nie mo¿e byæ w klasie `%s'"
+msgid "Can't stat %s\n"
+msgstr "Nie mo¿na wykonaæ stat na %s\n"
 
-#: locale/programs/ld-ctype.c:600
-msgid "character <SP> not defined in character map"
-msgstr "znak <SP> nie zdefiniowany w tablicy znaków"
+#: elf/ldconfig.c:457
+#, c-format
+msgid "%s is not a symbolic link\n"
+msgstr "%s nie jest dowi±zaniem symbolicznym\n"
 
-#: locale/programs/ld-ctype.c:714
-msgid "`digit' category has not entries in groups of ten"
-msgstr "kategoria `digit' nie ma wpisów w grupach po dziesiêæ"
+#: elf/ldconfig.c:476
+#, c-format
+msgid "Can't unlink %s"
+msgstr "Nie mo¿na usun±æ %s"
 
-#: locale/programs/ld-ctype.c:763
-msgid "no input digits defined and none of the standard names in the charmap"
-msgstr "brak cyfr wej¶ciowych ani ¿adnej ze standardowych nazw w tablicy znaków"
+#: elf/ldconfig.c:482
+#, c-format
+msgid "Can't link %s to %s"
+msgstr "Nie mo¿na dowi±zaæ %s do %s"
 
-#: locale/programs/ld-ctype.c:828
-msgid "not all characters used in `outdigit' are available in the charmap"
-msgstr "nie wszystkie znaki u¿yte w `outdigit' s± dostêpne w tablicy znaków"
+#: elf/ldconfig.c:488
+msgid " (changed)\n"
+msgstr " (zmieniono)\n"
 
-#: locale/programs/ld-ctype.c:845
-msgid "not all characters used in `outdigit' are available in the repertoire"
-msgstr "nie wszystkie znaki u¿yte w `outdigit' s± dostêpne w repertuarze"
+#: elf/ldconfig.c:490
+msgid " (SKIPPED)\n"
+msgstr " (POMINIÊTO)\n"
 
-#: locale/programs/ld-ctype.c:1244
+#: elf/ldconfig.c:545
 #, c-format
-msgid "character class `%s' already defined"
-msgstr "klasa znaków `%s' jest ju¿ zdefiniowana"
+msgid "Can't find %s"
+msgstr "Nie mo¿na znale¼æ %s"
 
-#: locale/programs/ld-ctype.c:1250
+#: elf/ldconfig.c:561
 #, c-format
-msgid "implementation limit: no more than %Zd character classes allowed"
-msgstr "ograniczenie implementacji: dozwolone maksymalnie %Zd klas znaków"
+msgid "Can't lstat %s"
+msgstr "Nie mo¿na wykonaæ lstat na %s"
 
-#: locale/programs/ld-ctype.c:1276
+#: elf/ldconfig.c:568
 #, c-format
-msgid "character map `%s' already defined"
-msgstr "tablica znaków `%s' jest ju¿ zdefiniowana"
+msgid "Ignored file %s since it is not a regular file."
+msgstr "Zignorowano plik %s poniewa¿ nie jest zwyk³ym plikiem."
 
-#: locale/programs/ld-ctype.c:1282
+#: elf/ldconfig.c:576
 #, c-format
-msgid "implementation limit: no more than %d character maps allowed"
-msgstr "ograniczenie implementacji: dozwolone maksymalnie %d tablic znaków"
+msgid "No link created since soname could not be found for %s"
+msgstr "Nie utworzono dowi±zania poniewa¿ nie znaleziono soname dla %s"
 
-#: 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:667
 #, c-format
-msgid "%s: field `%s' does not contain exactly ten entries"
-msgstr "%s: pole `%s' nie zawiera dok³adnie dziesiêciu elementów"
+msgid "Can't open directory %s"
+msgstr "Nie mo¿na otworzyæ katalogu %s"
 
-#: locale/programs/ld-ctype.c:1575 locale/programs/ld-ctype.c:2146
+#: elf/ldconfig.c:735 elf/ldconfig.c:782
 #, c-format
-msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>"
-msgstr "warto¶æ-do <U%0*X> przedzia³u jest mniejsza ni¿ warto¶æ-od <U%0*X>"
-
-#: locale/programs/ld-ctype.c:1702
-msgid "start and end character sequence of range must have the same length"
-msgstr "pocz±tkowa i koñcowa sekwencja znaków przedzia³u musz± mieæ tê sam± d³ugo¶æ"
-
-#: locale/programs/ld-ctype.c:1709
-msgid "to-value character sequence is smaller than from-value sequence"
-msgstr "sekwencja znaków warto¶æ-do jest mniejsza ni¿ sekwencja warto¶æ-od"
-
-#: locale/programs/ld-ctype.c:2066 locale/programs/ld-ctype.c:2117
-msgid "premature end of `translit_ignore' definition"
-msgstr "przedwczesny koniec definicji `translit_ignore'"
+msgid "Cannot lstat %s"
+msgstr "Nie mo¿na wykonaæ lstat na %s"
 
-#: locale/programs/ld-ctype.c:2072 locale/programs/ld-ctype.c:2123
-#: locale/programs/ld-ctype.c:2165
-msgid "syntax error"
-msgstr "b³±d sk³adni"
+#: elf/ldconfig.c:747
+#, c-format
+msgid "Cannot stat %s"
+msgstr "Nie mo¿na wykonaæ stat na %s"
 
-#: locale/programs/ld-ctype.c:2296
+#: elf/ldconfig.c:804 elf/readlib.c:90
 #, c-format
-msgid "%s: syntax error in definition of new character class"
-msgstr "%s: b³±d sk³adni w definicji nowej klasy znaków"
+msgid "Input file %s not found.\n"
+msgstr "Nie znaleziono pliku wej¶ciowego %s.\n"
 
-#: locale/programs/ld-ctype.c:2311
+#: elf/ldconfig.c:855
 #, c-format
-msgid "%s: syntax error in definition of new character map"
-msgstr "%s: b³±d sk³adni w definicji nowej tablicy znaków"
+msgid "libc5 library %s in wrong directory"
+msgstr "biblioteka libc5 %s w z³ym katalogu"
 
-#: locale/programs/ld-ctype.c:2486
-msgid "ellipsis range must be marked by two operands of same type"
-msgstr "przedzia³ wyrzutni musi byæ oznaczony dwoma argumentami tego samego typu"
+#: elf/ldconfig.c:858
+#, c-format
+msgid "libc6 library %s in wrong directory"
+msgstr "biblioteka libc6 %s w z³ym katalogu"
 
-#: locale/programs/ld-ctype.c:2495
-msgid "with symbolic name range values the absolute ellipsis `...' must not be used"
-msgstr "dla warto¶ci przedzia³u bêd±cych nazwami nie mo¿na u¿yæ bezwzglêdnej wyrzutni `...'"
+#: elf/ldconfig.c:861
+#, c-format
+msgid "libc4 library %s in wrong directory"
+msgstr "biblioteka libc4 %s w z³ym katalogu"
 
-#: locale/programs/ld-ctype.c:2510
-msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'"
-msgstr "dla warto¶ci przedzia³u w kodzie UCS trzeba u¿yæ wyrzutni szesnastkowej `..'"
+#: elf/ldconfig.c:888
+#, c-format
+msgid "libraries %s and %s in directory %s have same soname but different type."
+msgstr "biblioteki %s i %s w katalogu %s maj± to samo soname ale inny rodzaj."
 
-#: locale/programs/ld-ctype.c:2524
-msgid "with character code range values one must use the absolute ellipsis `...'"
-msgstr "dla warto¶ci przedzia³u z kodami znaków trzeba u¿yæ bezwzglêdnej wyrzutni `...'"
+#: elf/ldconfig.c:995
+#, c-format
+msgid "Can't open configuration file %s"
+msgstr "Nie mo¿na otworzyæ pliku konfiguracyjnego %s"
 
-#: locale/programs/ld-ctype.c:2675
+#: elf/ldconfig.c:1059
 #, c-format
-msgid "duplicated definition for mapping `%s'"
-msgstr "powtórzona definicja odwzorowania `%s'"
+msgid "%s:%u: bad syntax in hwcap line"
+msgstr "%s:%u: b³êdna sk³adnia w linii hwcap"
 
-#: locale/programs/ld-ctype.c:2761 locale/programs/ld-ctype.c:2905
+#: elf/ldconfig.c:1065
 #, c-format
-msgid "%s: `translit_start' section does not end with `translit_end'"
-msgstr "%s: sekcja `translit_start' nie koñczy siê przez `translit_end'"
+msgid "%s:%u: hwcap index %lu above maximum %u"
+msgstr "%s:%u: indeks hwcap %lu powy¿ej maksymalnego %u"
 
-#: locale/programs/ld-ctype.c:2856
+#: elf/ldconfig.c:1072 elf/ldconfig.c:1080
 #, c-format
-msgid "%s: duplicate `default_missing' definition"
-msgstr "%s: powtórzona definicja `default_missing'"
+msgid "%s:%u: hwcap index %lu already defined as %s"
+msgstr "%s:%u: indeks hwcap %lu ju¿ zdefiniowany jako %s"
 
-#: locale/programs/ld-ctype.c:2861
-msgid "previous definition was here"
-msgstr "tutaj by³a poprzednia definicja"
+#: elf/ldconfig.c:1083
+#, c-format
+msgid "%s:%u: duplicate hwcap %lu %s"
+msgstr "%s:%u: powtórzony hwcap %lu %s"
 
-#: locale/programs/ld-ctype.c:2883
+#: elf/ldconfig.c:1105
 #, c-format
-msgid "%s: no representable `default_missing' definition found"
-msgstr "%s: nie znaleziono daj±cej siê wyraziæ definicji `default_missing'"
+msgid "need absolute file name for configuration file when using -r"
+msgstr "opcja -r wymaga bezwzglêdnej ¶cie¿ki pliku konfiguracyjnego"
 
-#: locale/programs/ld-ctype.c:3036
+#: 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 "%s: character `%s' not defined in charmap while needed as default value"
-msgstr "%s: znak `%s', wymagany jako domy¶lny, nie zosta³ zdefiniowany w tablicy znaków"
+msgid "memory exhausted"
+msgstr "pamiêæ wyczerpana"
 
-#: 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/ldconfig.c:1142
 #, c-format
-msgid "%s: character `%s' in charmap not representable with one byte"
-msgstr "%s: znak `%s' z tablicy znaków nie mo¿e byæ wyra¿ony w jednym bajcie"
+msgid "%s:%u: cannot read directory %s"
+msgstr "%s:%u: nie mo¿na odczytaæ %s"
 
-#: 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/ldconfig.c:1182
 #, c-format
-msgid "%s: character `%s' not defined while needed as default value"
-msgstr "%s: znak `%s', wymagany jako domy¶lny, nie zosta³ zdefiniowany"
+msgid "relative path `%s' used to build cache"
+msgstr "u¿yto wzglêdnej ¶cie¿ki `%s' do utworzenia bufora"
 
-#: locale/programs/ld-ctype.c:3161
+#: elf/ldconfig.c:1210
 #, c-format
-msgid "character `%s' not defined while needed as default value"
-msgstr "znak `%s', wymagany jako domy¶lny, nie zosta³ zdefiniowany"
+msgid "Can't chdir to /"
+msgstr "Nie mo¿na przej¶æ do katalogu /"
 
-#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426
+#: elf/ldconfig.c:1252
 #, c-format
-msgid "%s: character `%s' needed as default value not representable with one byte"
-msgstr "%s: znak `%s', wymagany jako domy¶lny, nie mo¿e byæ wyra¿ony w jednym bajcie"
+msgid "Can't open cache file directory %s\n"
+msgstr "Nie mo¿na otworzyæ katalogu pliku bufora %s\n"
 
-#: locale/programs/ld-ctype.c:3481
-msgid "no output digits defined and none of the standard names in the charmap"
-msgstr "brak definicji cyfr wyj¶ciowych ani ¿adnej standardowej nazwy w tablicy znaków"
+#: elf/ldd.bash.in:43
+msgid "Written by %s and %s.\n"
+msgstr "Autorami s± %s i %s.\n"
 
-#: locale/programs/ld-ctype.c:3772
-#, c-format
-msgid "%s: transliteration data from locale `%s' not available"
-msgstr "%s: dane do transliteracji z lokalizacji `%s' niedostêpne"
+#: 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 ""
+"Sk³adnia: ldd [OPCJA]... PLIK...\n"
+"      --help              wypisanie tego opisu i zakoñczenie\n"
+"      --version           wypisanie informacji o wersji i zakoñczenie\n"
+"  -d, --data-relocs       przetworzenie relokacji danych\n"
+"  -r, --function-relocs   przetworzenie relokacji danych i funkcji\n"
+"  -u, --unused            wypisanie nieu¿ywanych bezpo¶rednich zale¿no¶ci\n"
+"  -v, --verbose           wypisanie wszystkich informacji\n"
+"Instrukcje dotycz±ce zg³aszania b³êdów znajduj± siê pod adresem:\n"
+"<http://www.gnu.org/software/libc/bugs.html>."
+
+#: elf/ldd.bash.in:80
+#, fuzzy
+msgid "ldd: option `$1' is ambiguous"
+msgstr "ldd: opcja \\`$1' jest niejednoznaczna"
+
+#: elf/ldd.bash.in:87
+msgid "unrecognized option"
+msgstr "nieznana opcja"
+
+#: elf/ldd.bash.in:88 elf/ldd.bash.in:126
+#, fuzzy
+msgid "Try `ldd --help' for more information."
+msgstr "Polecenie \\`ldd --help' pozwoli uzyskaæ wiêcej informacji."
+
+#: elf/ldd.bash.in:125
+msgid "missing file arguments"
+msgstr "brakuj±ce argumenty plikowe"
 
-#: locale/programs/ld-ctype.c:3868
-#, c-format
-msgid "%s: table for class \"%s\": %lu bytes\n"
-msgstr "%s: tablica dla klasy \"%s\": %lu bajtów\n"
+#. 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 "Nie ma takiego pliku ani katalogu"
 
-#: locale/programs/ld-ctype.c:3937
-#, c-format
-msgid "%s: table for map \"%s\": %lu bytes\n"
-msgstr "%s: tablica dla odwzorowania \"%s\": %lu bajtów\n"
+#: elf/ldd.bash.in:151 inet/rcmd.c:483
+msgid "not regular file"
+msgstr "nie jest zwyk³ym plikiem"
 
-#: locale/programs/ld-ctype.c:4070
-#, c-format
-msgid "%s: table for width: %lu bytes\n"
-msgstr "%s: tablica dla szeroko¶ci: %lu bajtów\n"
+#: elf/ldd.bash.in:154
+msgid "warning: you do not have execution permission for"
+msgstr "uwaga: brak uprawnieñ do wykonywania"
 
-#: locale/programs/ld-identification.c:171
-#, c-format
-msgid "%s: no identification for category `%s'"
-msgstr "%s: brak identyfikacji dla kategorii `%s'"
+#: elf/ldd.bash.in:183
+msgid "\tnot a dynamic executable"
+msgstr "\tnie jest dynamicznym programem wykonywalnym"
 
-#: locale/programs/ld-identification.c:436
-#, c-format
-msgid "%s: duplicate category version definition"
-msgstr "%s: powtórzona definicja wersji kategorii"
+#: elf/ldd.bash.in:191
+msgid "exited with unknown exit code"
+msgstr "zakoñczy³ dzia³anie z nieznanym kodem wyj¶cia"
 
-#: locale/programs/ld-measurement.c:114
-#, c-format
-msgid "%s: invalid value for field `%s'"
-msgstr "%s: b³êdna warto¶æ dla pola `%s'"
+#: elf/ldd.bash.in:196
+msgid "error: you do not have read permission for"
+msgstr "b³±d: brak uprawnieñ do odczytu"
 
-#: locale/programs/ld-messages.c:115 locale/programs/ld-messages.c:149
+#: elf/readelflib.c:35
 #, c-format
-msgid "%s: field `%s' undefined"
-msgstr "%s: pole `%s' nie zdefiniowane"
+msgid "file %s is truncated\n"
+msgstr "plik %s jest skrócony\n"
 
-#: locale/programs/ld-messages.c:122 locale/programs/ld-messages.c:156
+#: elf/readelflib.c:67
 #, c-format
-msgid "%s: value for field `%s' must not be an empty string"
-msgstr "%s: warto¶æ pola `%s' nie mo¿e byæ ³añcuchem pustym"
+msgid "%s is a 32 bit ELF file.\n"
+msgstr "%s jest 32-bitowym plikiem ELF.\n"
 
-#: locale/programs/ld-messages.c:138 locale/programs/ld-messages.c:172
+#: elf/readelflib.c:69
 #, c-format
-msgid "%s: no correct regular expression for field `%s': %s"
-msgstr "%s: brak poprawnego wyra¿enia regularnego dla pola `%s': %s"
+msgid "%s is a 64 bit ELF file.\n"
+msgstr "%s jest 64-bitowym plikiem ELF.\n"
 
-#: locale/programs/ld-monetary.c:224
+#: elf/readelflib.c:71
 #, c-format
-msgid "%s: value of field `int_curr_symbol' has wrong length"
-msgstr "%s: warto¶æ pola `int_curr_symbol' ma z³± d³ugo¶æ"
+msgid "Unknown ELFCLASS in file %s.\n"
+msgstr "Nieznana ELFCLASS w pliku %s.\n"
 
-#: locale/programs/ld-monetary.c:237
+#: elf/readelflib.c:78
 #, c-format
-msgid "%s: value of field `int_curr_symbol' does not correspond to a valid name in ISO 4217"
-msgstr "%s: warto¶æ pola `int_curr_symbol' nie jest zgodna z nazwami ISO 4217"
+msgid "%s is not a shared object file (Type: %d).\n"
+msgstr "%s nie jest plikiem obiektu dzielonego (Typ: %d).\n"
 
-#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:119
+#: elf/readelflib.c:109
 #, c-format
-msgid "%s: value for field `%s' must not be the empty string"
-msgstr "%s: warto¶æ pola `%s' nie mo¿e byæ ³añcuchem pustym"
+msgid "more than one dynamic segment\n"
+msgstr "wiêcej ni¿ jeden segment dynamiczny\n"
 
-#: locale/programs/ld-monetary.c:284 locale/programs/ld-monetary.c:314
+#: elf/readlib.c:96
 #, c-format
-msgid "%s: value for field `%s' must be in range %d...%d"
-msgstr "%s: warto¶æ pola `%s' musi mie¶ciæ siê w przedziale %d...%d"
+msgid "Cannot fstat file %s.\n"
+msgstr "Nie mo¿na wykonaæ fstat na pliku %s.\n"
 
-#: locale/programs/ld-monetary.c:746 locale/programs/ld-numeric.c:275
+#: elf/readlib.c:107
 #, c-format
-msgid "%s: value for field `%s' must be a single character"
-msgstr "%s: warto¶æ pola `%s' musi byæ pojedynczym znakiem"
+msgid "File %s is empty, not checked."
+msgstr "Plik %s jest pusty, nie sprawdzony."
 
-#: locale/programs/ld-monetary.c:843 locale/programs/ld-numeric.c:319
+#: elf/readlib.c:113
 #, c-format
-msgid "%s: `-1' must be last entry in `%s' field"
-msgstr "%s: `-1' musi byæ ostatnim elementem w polu `%s'"
+msgid "File %s is too small, not checked."
+msgstr "Plik %s jest za ma³y, nie sprawdzony."
 
-#: locale/programs/ld-monetary.c:865 locale/programs/ld-numeric.c:340
+#: elf/readlib.c:123
 #, c-format
-msgid "%s: values for field `%s' must be smaller than 127"
-msgstr "%s: warto¶ci pola `%s' musz± byæ mniejsze ni¿ 127"
-
-#: locale/programs/ld-monetary.c:908
-msgid "conversion rate value cannot be zero"
-msgstr "warto¶æ stopnia konwersji nie mo¿e byæ zerem"
+msgid "Cannot mmap file %s.\n"
+msgstr "Nie mo¿na wykonaæ mmap pliku %s.\n"
 
-#: locale/programs/ld-name.c:130 locale/programs/ld-telephone.c:127
-#: locale/programs/ld-telephone.c:150
+#: elf/readlib.c:161
 #, c-format
-msgid "%s: invalid escape sequence in field `%s'"
-msgstr "%s: niepoprawna sekwencja escape w polu `%s'"
+msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n"
+msgstr "%s nie jest plikiem ELF - ma z³e bajty magiczne na pocz±tku.\n"
 
-#: locale/programs/ld-time.c:248
-#, c-format
-msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'"
-msgstr "%s: znacznik kierunku w ³añcuchu %Zd w polu `era' nie jest '+' ani '-'"
+#: elf/sprof.c:77
+msgid "Output selection:"
+msgstr "Wybór wyj¶cia:"
 
-#: locale/programs/ld-time.c:259
-#, c-format
-msgid "%s: direction flag in string %Zd in `era' field is not a single character"
-msgstr "%s: znacznik kierunku w ³añcuchu %Zd w polu `era' nie jest pojedynczym znakiem"
+# XXX poprawic -PK
+#: elf/sprof.c:79
+msgid "print list of count paths and their number of use"
+msgstr "wypisanie listy ¶cie¿ek zliczania i ich liczników u¿ycia"
 
-#: locale/programs/ld-time.c:272
-#, c-format
-msgid "%s: invalid number for offset in string %Zd in `era' field"
-msgstr "%s: niepoprawna warto¶æ przesuniêcia w ³añcuchu %Zd w polu `era'"
+#: elf/sprof.c:81
+msgid "generate flat profile with counts and ticks"
+msgstr "generowanie prostego profilu z licznikami i czasami"
 
-#: locale/programs/ld-time.c:280
-#, c-format
-msgid "%s: garbage at end of offset value in string %Zd in `era' field"
-msgstr "%s: ¶mieci na koñcu warto¶ci przesuniêcia w ³añcuchu %Zd w polu `era'"
+#: elf/sprof.c:82
+msgid "generate call graph"
+msgstr "generowanie wykresu wywo³añ"
 
-#: locale/programs/ld-time.c:331
-#, c-format
-msgid "%s: invalid starting date in string %Zd in `era' field"
-msgstr "%s: niepoprawna data pocz±tkowa w ³añcuchu %Zd w polu `era'"
+#: 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 ""
+"Odczyt i wy¶wietlanie danych profiluj±cych dla obiektów wspó³dzielonych.\vInstrukcje dotycz±ce zg³aszania b³êdów znajduj± siê pod adresem:\n"
+"<http://www.gnu.org/software/libc/bugs.html>.\n"
+
+#: elf/sprof.c:94
+msgid "SHOBJ [PROFDATA]"
+msgstr "OBIEKT_DZIELONY [DANE_PROFILUJ¡CE]"
 
-#: locale/programs/ld-time.c:340
+#: elf/sprof.c:400
 #, c-format
-msgid "%s: garbage at end of starting date in string %Zd in `era' field "
-msgstr "%s: ¶mieci na koñcu daty pocz±tkowej w ³añcuchu %Zd w polu `era' "
+msgid "failed to load shared object `%s'"
+msgstr "za³adowanie dzielonego obiektu `%s' nie powiod³o siê"
 
-#: locale/programs/ld-time.c:359
+#: elf/sprof.c:409
 #, c-format
-msgid "%s: starting date is invalid in string %Zd in `era' field"
-msgstr "%s: niepoprawna data pocz±tkowa w ³añcuchu %Zd w polu `era'"
+msgid "cannot create internal descriptors"
+msgstr "nie mo¿na utworzyæ wewnêtrznych deskryptorów"
 
-#: locale/programs/ld-time.c:408
+#: elf/sprof.c:528
 #, c-format
-msgid "%s: invalid stopping date in string %Zd in `era' field"
-msgstr "%s: niepoprawna data koñcowa w ³añcuchu %Zd w polu `era'"
+msgid "Reopening shared object `%s' failed"
+msgstr "Ponowne otwarcie obiektu dzielonego `%s' nie powiod³o siê"
 
-#: locale/programs/ld-time.c:417
+#: elf/sprof.c:535 elf/sprof.c:629
 #, c-format
-msgid "%s: garbage at end of stopping date in string %Zd in `era' field"
-msgstr "%s: ¶mieci na koñcu daty koñcowej w ³añcuchu %Zd w polu `era'"
+msgid "reading of section headers failed"
+msgstr "odczyt nag³ówków sekcji nie powiód³ siê"
 
-#: locale/programs/ld-time.c:436
+#: elf/sprof.c:543 elf/sprof.c:637
 #, c-format
-msgid "%s: stopping date is invalid in string %Zd in `era' field"
-msgstr "%s: niepoprawna data koñcowa w ³añcuchu %Zd w polu `era'"
+msgid "reading of section header string table failed"
+msgstr "odczyt tablicy ³añcuchów nag³ówków sekcji nie powiód³ siê"
 
-#: locale/programs/ld-time.c:445
+#: elf/sprof.c:569
 #, c-format
-msgid "%s: missing era name in string %Zd in `era' field"
-msgstr "%s: brak nazwy ery w ³añcuchu %Zd w polu `era'"
+msgid "*** Cannot read debuginfo file name: %m\n"
+msgstr "*** Nie mo¿na odczytaæ nazwy pliku informacji diagnostycznych: %m\n"
 
-#: locale/programs/ld-time.c:457
+#: elf/sprof.c:589
 #, c-format
-msgid "%s: missing era format in string %Zd in `era' field"
-msgstr "%s: brak formatu ery w ³añcuchu %Zd w polu `era'"
+msgid "cannot determine file name"
+msgstr "nie mo¿na okre¶liæ nazwy pliku"
 
-#: locale/programs/ld-time.c:486
+#: elf/sprof.c:622
 #, c-format
-msgid "%s: third operand for value of field `%s' must not be larger than %d"
-msgstr "%s: warto¶æ trzeciego argumentu pola `%s' nie mo¿e byæ wiêksza ni¿ %d"
+msgid "reading of ELF header failed"
+msgstr "odczyt nag³ówka ELF nie powiód³ siê"
 
-#: locale/programs/ld-time.c:494 locale/programs/ld-time.c:502
+#: elf/sprof.c:658
 #, c-format
-msgid "%s: values of field `%s' must not be larger than %d"
-msgstr "%s: warto¶ci pola `%s' nie mog± byæ wiêksze ni¿ %d"
+msgid "*** The file `%s' is stripped: no detailed analysis possible\n"
+msgstr "*** Symbole z pliku `%s' zosta³y usuniête, dok³adna analiza jest niemo¿liwa\n"
 
-#: locale/programs/ld-time.c:510
+#: elf/sprof.c:688
 #, c-format
-msgid "%s: values for field `%s' must not be larger than %d"
-msgstr "%s: warto¶ci w polu `%s' nie mog± byæ wiêksze ni¿ %d"
+msgid "failed to load symbol data"
+msgstr "za³adowanie danych o symbolach nie powiod³o siê"
 
-#: locale/programs/ld-time.c:986
+#: elf/sprof.c:755
 #, c-format
-msgid "%s: too few values for field `%s'"
-msgstr "%s: zbyt ma³o warto¶ci w polu `%s'"
+msgid "cannot load profiling data"
+msgstr "nie mo¿na za³adowaæ danych do profilowania"
 
-#: locale/programs/ld-time.c:1031
-msgid "extra trailing semicolon"
-msgstr "nadmiarowy ¶rednik na koñcu"
+#: elf/sprof.c:764
+#, c-format
+msgid "while stat'ing profiling data file"
+msgstr "podczas wykonywania stat na pliku z danymi profiluj±cymi"
 
-#: locale/programs/ld-time.c:1034
+#: elf/sprof.c:772
 #, c-format
-msgid "%s: too many values for field `%s'"
-msgstr "%s: zbyt du¿o warto¶ci w polu `%s'"
+msgid "profiling data file `%s' does not match shared object `%s'"
+msgstr "dane profiluj±ce w pliku `%s' nie pasuj± do obiektu dzielonego `%s'"
 
-#: locale/programs/linereader.c:130
-msgid "trailing garbage at end of line"
-msgstr "¶mieci na koñcu linii"
+#: elf/sprof.c:783
+#, c-format
+msgid "failed to mmap the profiling data file"
+msgstr "wykonanie mmap danych profiluj±cych nie powiod³o siê"
 
-#: locale/programs/linereader.c:304
-msgid "garbage at end of number"
-msgstr "¶mieci na koñcu liczby"
+#: elf/sprof.c:791
+#, c-format
+msgid "error while closing the profiling data file"
+msgstr "b³±d podczas zamykania pliku z danymi profiluj±cymi"
 
-#: locale/programs/linereader.c:416
-msgid "garbage at end of character code specification"
-msgstr "¶mieci na koñcu specyfikacji kodu znaku"
+#: elf/sprof.c:800 elf/sprof.c:870
+#, c-format
+msgid "cannot create internal descriptor"
+msgstr "nie mo¿na utworzyæ wewnêtrznego deskryptora"
 
-#: locale/programs/linereader.c:502
-msgid "unterminated symbolic name"
-msgstr "nie zakoñczona nazwa symboliczna"
+#: elf/sprof.c:846
+#, c-format
+msgid "`%s' is no correct profile data file for `%s'"
+msgstr "`%s' nie jest poprawnym plikiem danych profiluj±cych dla `%s'"
 
-#: locale/programs/linereader.c:566 catgets/gencat.c:1195
-msgid "invalid escape sequence"
-msgstr "b³êdna sekwencja escape"
+#: elf/sprof.c:1027 elf/sprof.c:1085
+#, c-format
+msgid "cannot allocate symbol data"
+msgstr "nie mo¿na przydzieliæ pamiêci dla symboli"
 
-#: locale/programs/linereader.c:629
-msgid "illegal escape sequence at end of string"
-msgstr "niepoprawna sekwencja escape na koñcu ³añcucha"
+#: iconv/iconv_charmap.c:175 iconv/iconv_prog.c:315
+#, c-format
+msgid "error while closing input `%s'"
+msgstr "b³±d podczas zamykania wej¶cia `%s'"
 
-#: locale/programs/linereader.c:633 locale/programs/linereader.c:861
-msgid "unterminated string"
-msgstr "nie zakoñczony ³añcuch"
+#: iconv/iconv_charmap.c:449
+#, c-format
+msgid "illegal input sequence at position %Zd"
+msgstr "b³êdna sekwencja wej¶ciowa na pozycji %Zd"
 
-#: locale/programs/linereader.c:675
-msgid "non-symbolic character value should not be used"
-msgstr "nie symboliczna warto¶æ znaku nie powinna byæ u¿yta"
+#: iconv/iconv_charmap.c:468 iconv/iconv_prog.c:525
+#, c-format
+msgid "incomplete character or shift sequence at end of buffer"
+msgstr "niekompletny znak lub sekwencja steruj±ca na koñcu bufora"
 
-#: locale/programs/linereader.c:822
+#: iconv/iconv_charmap.c:513 iconv/iconv_charmap.c:549 iconv/iconv_prog.c:568
+#: iconv/iconv_prog.c:604
 #, c-format
-msgid "symbol `%.*s' not in charmap"
-msgstr "brak symbolu `%.*s' w tablicy znaków"
+msgid "error while reading the input"
+msgstr "b³±d podczas czytania danych wej¶ciowych"
 
-#: locale/programs/linereader.c:843
+#: iconv/iconv_charmap.c:531 iconv/iconv_prog.c:586
 #, c-format
-msgid "symbol `%.*s' not in repertoire map"
-msgstr "brak symbolu `%.*s' w tablicy repertuaru"
+msgid "unable to allocate buffer for input"
+msgstr "przydzielenie bufora dla danych wej¶ciowych by³o niemo¿liwe"
 
-#: locale/programs/locale.c:75
-msgid "System information:"
-msgstr "Informacja o systemie:"
+#: iconv/iconv_prog.c:59
+msgid "Input/Output format specification:"
+msgstr "Specyfikacja formatu wej¶cia/wyj¶cia:"
 
-#: locale/programs/locale.c:77
-msgid "Write names of available locales"
-msgstr "Wypisanie nazw dostêpnych lokalizacji"
+#: iconv/iconv_prog.c:60
+msgid "encoding of original text"
+msgstr "kodowanie oryginalnego tekstu"
 
-#: locale/programs/locale.c:79
-msgid "Write names of available charmaps"
-msgstr "Wypisanie nazw dostêpnych tablic znaków"
+#: iconv/iconv_prog.c:61
+msgid "encoding for output"
+msgstr "kodowanie wyników"
 
-#: locale/programs/locale.c:80
-msgid "Modify output format:"
-msgstr "Modyfikacja formatu wyj¶ciowego:"
+#: iconv/iconv_prog.c:62
+msgid "Information:"
+msgstr "Informacje:"
 
-#: locale/programs/locale.c:81
-msgid "Write names of selected categories"
-msgstr "Wypisanie nazw wybranych kategorii"
+#: iconv/iconv_prog.c:63
+msgid "list all known coded character sets"
+msgstr "wy¶wietlenie wszystkich znanych zestawów znaków"
 
-#: locale/programs/locale.c:82
-msgid "Write names of selected keywords"
-msgstr "Wypisanie nazw wybranych s³ów kluczowych"
+#: iconv/iconv_prog.c:64 locale/programs/localedef.c:126
+msgid "Output control:"
+msgstr "Kontrola wyj¶cia:"
 
-#: locale/programs/locale.c:83
-msgid "Print more information"
-msgstr "Wypisanie wiêkszej ilo¶ci informacji"
+#: iconv/iconv_prog.c:65
+msgid "omit invalid characters from output"
+msgstr "pominiêcie nieprawid³owych znaków z wyj¶cia"
 
-#: locale/programs/locale.c:88
-msgid "Get locale-specific information."
-msgstr "Wy¶wietlanie danych dotycz±cych lokalizacji."
+#: iconv/iconv_prog.c:66
+msgid "output file"
+msgstr "plik wynikowy"
 
-#: locale/programs/locale.c:91
-msgid ""
-"NAME\n"
-"[-a|-m]"
-msgstr ""
-"NAZWA\n"
-"[-a|-m]"
+#: iconv/iconv_prog.c:67
+msgid "suppress warnings"
+msgstr "nie wypisywanie ostrze¿eñ"
 
-#: locale/programs/locale.c:195
-msgid "Cannot set LC_CTYPE to default locale"
-msgstr "Nie mo¿na ustawiæ LC_CTYPE na domy¶ln± lokalizacjê"
+#: iconv/iconv_prog.c:68
+msgid "print progress information"
+msgstr "wy¶wietlanie informacji o postêpie konwersji"
 
-#: locale/programs/locale.c:197
-msgid "Cannot set LC_MESSAGES to default locale"
-msgstr "Nie mo¿na ustawiæ LC_MESSAGES na domy¶ln± lokalizacjê"
+#: iconv/iconv_prog.c:73
+msgid "Convert encoding of given files from one encoding to another."
+msgstr "Konwersja podanych plików miêdzy ró¿nymi metodami kodowania."
 
-#: locale/programs/locale.c:210
-msgid "Cannot set LC_COLLATE to default locale"
-msgstr "Nie mo¿na ustawiæ LC_COLLATE na domy¶ln± lokalizacjê"
+#: iconv/iconv_prog.c:77
+msgid "[FILE...]"
+msgstr "[PLIK...]"
 
-#: locale/programs/locale.c:226
-msgid "Cannot set LC_ALL to default locale"
-msgstr "Nie mo¿na ustawiæ LC_ALL na domy¶ln± lokalizacjê"
+#: iconv/iconv_prog.c:199
+#, c-format
+msgid "cannot open output file"
+msgstr "nie mo¿na otworzyæ pliku wyj¶ciowego"
 
-#: locale/programs/locale.c:517
-msgid "while preparing output"
-msgstr "podczas przygotowywania wyników"
+#: iconv/iconv_prog.c:241
+#, c-format
+msgid "conversions from `%s' and to `%s' are not supported"
+msgstr "konwersje z `%s' oraz do `%s' nie s± obs³ugiwane"
 
-#: locale/programs/localedef.c:121
-msgid "Input Files:"
-msgstr "Pliki wej¶ciowe:"
+#: iconv/iconv_prog.c:246
+#, c-format
+msgid "conversion from `%s' is not supported"
+msgstr "konwersja z `%s' nie jest obs³ugiwana"
 
-#: locale/programs/localedef.c:123
-msgid "Symbolic character names defined in FILE"
-msgstr "Nazwy symboliczne znaków s± zdefiniowane w PLIKU"
+#: iconv/iconv_prog.c:253
+#, c-format
+msgid "conversion to `%s' is not supported"
+msgstr "konwersja do `%s' nie jest obs³ugiwana"
 
-#: locale/programs/localedef.c:124
-msgid "Source definitions are found in FILE"
-msgstr "Definicje ¼ród³owe znajduj± siê w PLIKU"
+#: iconv/iconv_prog.c:257
+#, c-format
+msgid "conversion from `%s' to `%s' is not supported"
+msgstr "konwersja z `%s' do `%s' nie jest obs³ugiwana"
 
-#: locale/programs/localedef.c:126
-msgid "FILE contains mapping from symbolic names to UCS4 values"
-msgstr "PLIK zawiera odwzorowania nazw symbolicznych na warto¶ci UCS4"
+#: iconv/iconv_prog.c:267
+#, c-format
+msgid "failed to start conversion processing"
+msgstr "nie uda³o siê rozpocz±æ konwersji"
 
-#: locale/programs/localedef.c:130
-msgid "Create output even if warning messages were issued"
-msgstr "Tworzenie pliku wyj¶ciowego nawet je¶li wyst±pi³y ostrze¿enia"
+#: iconv/iconv_prog.c:361
+#, c-format
+msgid "error while closing output file"
+msgstr "b³±d podczas zamykania pliku wyj¶ciowego"
 
-#: locale/programs/localedef.c:131
-msgid "Create old-style tables"
-msgstr "Tworzenie tablic w starym stylu"
+#: iconv/iconv_prog.c:470 iconv/iconv_prog.c:496
+#, c-format
+msgid "conversion stopped due to problem in writing the output"
+msgstr "konwersja przerwana z powodu problemu z zapisaniem wyników"
 
-#: locale/programs/localedef.c:132
-msgid "Optional output file prefix"
-msgstr "Opcjonalny prefiks plików wyj¶ciowych"
+#: iconv/iconv_prog.c:521
+#, c-format
+msgid "illegal input sequence at position %ld"
+msgstr "b³êdna sekwencja wej¶ciowa na pozycji %ld"
 
-#: locale/programs/localedef.c:133
-msgid "Be strictly POSIX conform"
-msgstr "¦cis³e przestrzeganie POSIX"
+#: iconv/iconv_prog.c:529
+#, c-format
+msgid "internal error (illegal descriptor)"
+msgstr "b³±d wewnêtrzny (nieprawid³owy deskryptor)"
 
-#: locale/programs/localedef.c:135
-msgid "Suppress warnings and information messages"
-msgstr "Pominiêcie wy¶wietlania ostrze¿eñ i informacji"
+#: iconv/iconv_prog.c:532
+#, c-format
+msgid "unknown iconv() error %d"
+msgstr "nieznany b³±d iconv() %d"
 
-#: locale/programs/localedef.c:136
-msgid "Print more messages"
-msgstr "Wy¶wietlanie wiêcej liczby komunikatów"
+#: 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 ""
+"Poni¿sza lista zawiera wszystkie znane zakodowane zestawy znaków. Nie oznacza\n"
+"to, ¿e wszystkie kombinacje zestawów mog± byæ u¿ywane jako parametry OD i DO.\n"
+"Jeden zestaw znaków mo¿e znajdowaæ siê na li¶cie pod wieloma nazwami\n"
+"(aliasami).\n"
+"\n"
+"  "
 
-#: locale/programs/localedef.c:137
-msgid "Archive control:"
-msgstr "Kontrola archiwum:"
+#: iconv/iconvconfig.c:109
+msgid "Create fastloading iconv module configuration file."
+msgstr "Tworzenie pliku konfiguracyjnego do szybkiego wczytywania modu³ów iconv."
 
-#: locale/programs/localedef.c:139
-msgid "Don't add new data to archive"
-msgstr "Nie dodawanie nowych danych do archiwum"
+#: iconv/iconvconfig.c:113
+msgid "[DIR...]"
+msgstr "[KATALOG...]"
 
-#: locale/programs/localedef.c:141
-msgid "Add locales named by parameters to archive"
-msgstr "Dodanie do archiwum lokalizacji okre¶lonych parametrami"
+#: iconv/iconvconfig.c:126
+msgid "Prefix used for all file accesses"
+msgstr "Prefiks u¿ywany przy ka¿dym dostêpie do pliku"
 
-#: locale/programs/localedef.c:142
-msgid "Replace existing archive content"
-msgstr "Zast±pienie aktualnej zawarto¶ci archiwum"
+#: iconv/iconvconfig.c:127
+msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)"
+msgstr "Umieszczenie wyj¶cia w PLIKU zamiast miejsca instalacji (--prefix nie wp³ywa na PLIK)"
 
-#: locale/programs/localedef.c:144
-msgid "Remove locales named by parameters from archive"
-msgstr "Usuniêcie z archiwum lokalizacji okre¶lonych parametrami"
+#: iconv/iconvconfig.c:131
+msgid "Do not search standard directories, only those on the command line"
+msgstr "Nie przeszukiwanie standardowych katalogów, a wy³±cznie podanych z linii poleceñ"
 
-#: locale/programs/localedef.c:145
-msgid "List content of archive"
-msgstr "Lista zawarto¶ci archiwum"
+#: iconv/iconvconfig.c:300
+#, c-format
+msgid "Directory arguments required when using --nostdlib"
+msgstr "W przypadku u¿ycia --nostdlib wymagane jest podanie katalogów jako argumentów"
 
-#: locale/programs/localedef.c:147
-msgid "locale.alias file to consult when making archive"
-msgstr "Plik locale.alias u¿ywany przy tworzeniu archiwum"
+#: iconv/iconvconfig.c:342 locale/programs/localedef.c:290
+#, c-format
+msgid "no output file produced because warnings were issued"
+msgstr "nie utworzono pliku wyj¶ciowego, poniewa¿ wyst±pi³y ostrze¿enia"
 
-#: locale/programs/localedef.c:152
-msgid "Compile locale specification"
-msgstr "Kompilowanie specyfikacji lokalizacji"
+#: iconv/iconvconfig.c:428
+#, c-format
+msgid "while inserting in search tree"
+msgstr "b³±d podczas wstawiania do drzewa wyszukiwañ"
 
-#: locale/programs/localedef.c:155
-msgid ""
-"NAME\n"
-"[--add-to-archive|--delete-from-archive] FILE...\n"
-"--list-archive [FILE]"
-msgstr ""
-"NAZWA\n"
-"[--add-to-archive|--delete-from-archive] PLIK...\n"
-"--list-archive [PLIK]"
+#: iconv/iconvconfig.c:1236
+#, c-format
+msgid "cannot generate output file"
+msgstr "nie mo¿na wygenerowaæ pliku wyj¶ciowego"
 
-#: locale/programs/localedef.c:233
-msgid "cannot create directory for output files"
-msgstr "nie mo¿na utworzyæ katalogu na pliki wyj¶ciowe"
+#: inet/rcmd.c:157
+msgid "rcmd: Cannot allocate memory\n"
+msgstr "rcmd: Nie mo¿na przydzieliæ pamiêci\n"
 
-#: locale/programs/localedef.c:244
-msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'"
-msgstr "OSTATECZNE: system nie definiuje `_POSIX2_LOCALEDEF'"
+#: inet/rcmd.c:172
+msgid "rcmd: socket: All ports in use\n"
+msgstr "rcmd: socket: Wszystkie porty zajête\n"
 
-#: locale/programs/localedef.c:258 locale/programs/localedef.c:274
-#: locale/programs/localedef.c:599 locale/programs/localedef.c:619
+#: inet/rcmd.c:200
 #, c-format
-msgid "cannot open locale definition file `%s'"
-msgstr "nie mo¿na otworzyæ pliku definicji lokalizacji `%s'"
+msgid "connect to address %s: "
+msgstr "po³±czenie do adresu %s: "
 
-#: locale/programs/localedef.c:286
+#: inet/rcmd.c:213
 #, c-format
-msgid "cannot write output files to `%s'"
-msgstr "nie mo¿na zapisaæ plików wyj¶ciowych do `%s'"
+msgid "Trying %s...\n"
+msgstr "Próbowanie %s...\n"
 
-# wyjatkowo nieladne tlumaczenia repertoire i locale -PK
-# XXX
-#: locale/programs/localedef.c:367
+#: inet/rcmd.c:249
 #, c-format
-msgid ""
-"System's directory for character maps : %s\n"
-"                       repertoire maps: %s\n"
-"                       locale path    : %s\n"
-"%s"
-msgstr ""
-"Katalog systemowy dla tablic znaków: %s\n"
-"                 tablic repertuarów: %s\n"
-"                ¶cie¿ka lokalizacji: %s\n"
-"%s"
-
-#: locale/programs/localedef.c:567
-msgid "circular dependencies between locale definitions"
-msgstr "zapêtlone zale¿no¶ci pomiêdzy definicjami lokalizacji"
+msgid "rcmd: write (setting up stderr): %m\n"
+msgstr "rcmd: write (podczas ustawiania stderr): %m\n"
 
-#: locale/programs/localedef.c:573
+#: inet/rcmd.c:265
 #, c-format
-msgid "cannot add already read locale `%s' a second time"
-msgstr "nie mo¿na dodaæ po raz drugi ju¿ odczytanej lokalizacji `%s'"
-
-#: locale/programs/locarchive.c:89 locale/programs/locarchive.c:259
-msgid "cannot create temporary file"
-msgstr "nie mo¿na utworzyæ pliku tymczasowego"
+msgid "rcmd: poll (setting up stderr): %m\n"
+msgstr "rcmd: poll (podczas ustawiania stderr): %m\n"
 
-#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:305
-msgid "cannot initialize archive file"
-msgstr "nie mo¿na zainicjowaæ pliku archiwum"
+#: inet/rcmd.c:268
+msgid "poll: protocol failure in circuit setup\n"
+msgstr "poll: b³±d protoko³u podczas zestawiania pêtli\n"
 
-#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:312
-msgid "cannot resize archive file"
-msgstr "nie mo¿na zmieniæ rozmiaru pliku archiwum"
+#: inet/rcmd.c:301
+msgid "socket: protocol failure in circuit setup\n"
+msgstr "socket: b³±d protoko³u podczas zestawiania pêtli\n"
 
-#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:321
-#: locale/programs/locarchive.c:511
-msgid "cannot map archive header"
-msgstr "nie mo¿na odwzorowaæ nag³ówka archiwum"
+#: inet/rcmd.c:325
+#, c-format
+msgid "rcmd: %s: short read"
+msgstr "rcmd: %s: odczyt skrócony"
 
-#: locale/programs/locarchive.c:156
-msgid "failed to create new locale archive"
-msgstr "tworzenie nowego archiwum lokalizacji nie powiod³o siê"
+#: inet/rcmd.c:481
+msgid "lstat failed"
+msgstr "lstat nie powiod³o siê"
 
-#: locale/programs/locarchive.c:168
-msgid "cannot change mode of new locale archive"
-msgstr "nie mo¿na zmieniæ uprawnieñ nowego archiwum lokalizacji"
+#: inet/rcmd.c:488
+msgid "cannot open"
+msgstr "nie mo¿na otworzyæ"
 
-#: locale/programs/locarchive.c:253
-msgid "cannot map locale archive file"
-msgstr "nie mo¿na odwzorowaæ pliku archiwum lokalizacji"
+#: inet/rcmd.c:490
+msgid "fstat failed"
+msgstr "fstat nie powiod³o siê"
 
-#: locale/programs/locarchive.c:329
-msgid "cannot lock new archive"
-msgstr "nie mo¿na zablokowaæ nowego archiwum"
+#: inet/rcmd.c:492
+msgid "bad owner"
+msgstr "nieodpowiedni w³a¶ciciel"
 
-#: locale/programs/locarchive.c:380
-msgid "cannot extend locale archive file"
-msgstr "nie mo¿na rozszerzyæ pliku archiwum lokalizacji"
+#: inet/rcmd.c:494
+msgid "writeable by other than owner"
+msgstr "zapisywalny nie tylko przez w³a¶ciciela"
 
-#: locale/programs/locarchive.c:389
-msgid "cannot change mode of resized locale archive"
-msgstr "nie mo¿na zmieniæ uprawnieñ archiwum lokalizacji po zmianie rozmiaru"
+#: inet/rcmd.c:496
+msgid "hard linked somewhere"
+msgstr "gdzie¶ twardo dowi±zany"
 
-#: locale/programs/locarchive.c:397
-msgid "cannot rename new archive"
-msgstr "nie mo¿na zmieniæ nazwy nowego archiwum"
+#: inet/ruserpass.c:170 inet/ruserpass.c:193
+msgid "out of memory"
+msgstr "brak pamiêci"
 
-#: locale/programs/locarchive.c:450
-#, c-format
-msgid "cannot open locale archive \"%s\""
-msgstr "nie mo¿na otworzyæ archiwum lokalizacji \"%s\""
+#: inet/ruserpass.c:184
+msgid "Error: .netrc file is readable by others."
+msgstr "B³±d: plik .netrc mo¿e byæ czytany przez innych."
 
-#: locale/programs/locarchive.c:455
-#, c-format
-msgid "cannot stat locale archive \"%s\""
-msgstr "nie mo¿na wykonaæ stat na archiwum lokalizacji \"%s\""
+#: inet/ruserpass.c:185
+msgid "Remove password or make file unreadable by others."
+msgstr "Nale¿y usun±æ has³o lub uczyniæ plik niedostêpnym dla innych."
 
-#: locale/programs/locarchive.c:474
+#: inet/ruserpass.c:277
 #, c-format
-msgid "cannot lock locale archive \"%s\""
-msgstr "nie mo¿na zablokowaæ archiwum lokalizacji \"%s\""
+msgid "Unknown .netrc keyword %s"
+msgstr "Nieznane s³owo kluczowe w .netrc: %s"
 
-#: locale/programs/locarchive.c:497
-msgid "cannot read archive header"
-msgstr "nie mo¿na odczytaæ nag³ówka archiwum"
+#: libidn/nfkc.c:464
+msgid "Character out of range for UTF-8"
+msgstr "Znak spoza zakresu UTF-8"
 
-#: locale/programs/locarchive.c:557
+#: locale/programs/charmap-dir.c:57
 #, c-format
-msgid "locale '%s' already exists"
-msgstr "lokalizacja '%s' ju¿ istnieje"
-
-#: 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 "nie mo¿na dodaæ do archiwum lokalizacji"
+msgid "cannot read character map directory `%s'"
+msgstr "nie mo¿na odczytaæ katalogu mapy znaków `%s'"
 
-#: locale/programs/locarchive.c:982
+#: locale/programs/charmap.c:137
 #, c-format
-msgid "locale alias file `%s' not found"
-msgstr "nie znaleziono pliku aliasów lokalizacji `%s'"
+msgid "character map file `%s' not found"
+msgstr "nie znaleziono pliku tablicy znaków `%s'"
 
-#: locale/programs/locarchive.c:1126
+#: locale/programs/charmap.c:194
 #, c-format
-msgid "Adding %s\n"
-msgstr "Dodawanie %s\n"
+msgid "default character map file `%s' not found"
+msgstr "nie znaleziono domy¶lnej tablicy znaków `%s'"
 
-#: locale/programs/locarchive.c:1132
+#: locale/programs/charmap.c:257
 #, c-format
-msgid "stat of \"%s\" failed: %s: ignored"
-msgstr "stat na \"%s\" nie powiod³o siê: %s: zignorowano"
+msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n"
+msgstr "tablica znaków `%s' niekompatybilna z ASCII, lokalizacja niekompatybilna z ISO C\n"
 
-#: locale/programs/locarchive.c:1138
+#: locale/programs/charmap.c:336
 #, c-format
-msgid "\"%s\" is no directory; ignored"
-msgstr "\"%s\" nie jest katalogiem; zignorowano"
+msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n"
+msgstr "%s: <mb_cur_max> musi byæ wiêkszy ni¿ <mb_cur_min>\n"
 
-#: locale/programs/locarchive.c:1145
+#: locale/programs/charmap.c:356 locale/programs/charmap.c:373
+#: locale/programs/repertoire.c:174
 #, c-format
-msgid "cannot open directory \"%s\": %s: ignored"
-msgstr "nie mo¿na otworzyæ katalogu \"%s\": %s: zignorowano"
+msgid "syntax error in prolog: %s"
+msgstr "b³±d sk³adni w prologu: %s"
 
-#: locale/programs/locarchive.c:1217
-#, c-format
-msgid "incomplete set of locale files in \"%s\""
-msgstr "niekompletny zestaw plików lokalizacji w \"%s\""
+#: locale/programs/charmap.c:357
+msgid "invalid definition"
+msgstr "niepoprawna definicja"
 
-#: locale/programs/locarchive.c:1281
-#, c-format
-msgid "cannot read all files in \"%s\": ignored"
-msgstr "nie mo¿na przeczytaæ wszystkich plików w \"%s\": zignorowano"
+#: locale/programs/charmap.c:374 locale/programs/locfile.c:125
+#: locale/programs/locfile.c:152 locale/programs/repertoire.c:175
+msgid "bad argument"
+msgstr "b³êdny argument"
 
-#: locale/programs/locarchive.c:1351
+#: locale/programs/charmap.c:402
 #, c-format
-msgid "locale \"%s\" not in archive"
-msgstr "lokalizacji \"%s\" nie ma w archiwum"
+msgid "duplicate definition of <%s>"
+msgstr "powtórzona definicja <%s>"
 
-#: locale/programs/locfile.c:132
+#: locale/programs/charmap.c:409
 #, c-format
-msgid "argument to `%s' must be a single character"
-msgstr "argument `%s' musi byæ pojedynczym znakiem"
-
-#: locale/programs/locfile.c:251
-msgid "syntax error: not inside a locale definition section"
-msgstr "b³±d sk³adni: poza sekcj± definicji lokalizacji"
+msgid "value for <%s> must be 1 or greater"
+msgstr "warto¶æ <%s> musi wynosiæ 1 lub wiêcej"
 
-#: locale/programs/locfile.c:625
+#: locale/programs/charmap.c:421
 #, c-format
-msgid "cannot open output file `%s' for category `%s'"
-msgstr "nie mo¿na otworzyæ pliku wyj¶ciowego `%s' dla kategorii `%s'"
+msgid "value of <%s> must be greater or equal than the value of <%s>"
+msgstr "warto¶æ <%s> musi byæ wiêksza lub równa warto¶ci <%s>"
 
-#: locale/programs/locfile.c:649
+#: locale/programs/charmap.c:444 locale/programs/repertoire.c:183
 #, c-format
-msgid "failure while writing data for category `%s'"
-msgstr "niepowodzenie podczas zapisu danych dla kategorii `%s'"
+msgid "argument to <%s> must be a single character"
+msgstr "argument <%s> musi byæ pojedynczym znakiem"
 
-#: locale/programs/locfile.c:745
+#: locale/programs/charmap.c:470
+msgid "character sets with locking states are not supported"
+msgstr "zestawy znaków ze stanami blokowania nie s± obs³ugiwane"
+
+#: locale/programs/charmap.c:497 locale/programs/charmap.c:551
+#: locale/programs/charmap.c:583 locale/programs/charmap.c:677
+#: locale/programs/charmap.c:732 locale/programs/charmap.c:773
+#: locale/programs/charmap.c:814
 #, c-format
-msgid "cannot create output file `%s' for category `%s'"
-msgstr "nie mo¿na utworzyæ pliku wyj¶ciowego `%s' dla kategorii `%s'"
+msgid "syntax error in %s definition: %s"
+msgstr "b³±d sk³adni w definicji %s: %s"
 
-#: locale/programs/locfile.c:781
-msgid "expect string argument for `copy'"
-msgstr "spodziewanym argumentem dla `copy' jest ³añcuch"
+#: 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 "brak nazwy symbolicznej"
 
-#: locale/programs/locfile.c:785
-msgid "locale name should consist only of portable characters"
-msgstr "nazwa lokalizacji powinna sk³adaæ siê wy³±cznie ze znaków przeno¶nych"
+#: locale/programs/charmap.c:552
+msgid "invalid encoding given"
+msgstr "niepoprawne kodowanie"
 
-#: locale/programs/locfile.c:804
-msgid "no other keyword shall be specified when `copy' is used"
-msgstr "¿adne inne s³owo kluczowe nie powinno wystêpowaæ razem z `copy'"
-
-#: locale/programs/repertoire.c:230 locale/programs/repertoire.c:271
-#: locale/programs/repertoire.c:296
-#, c-format
-msgid "syntax error in repertoire map definition: %s"
-msgstr "b³±d sk³adni w definicji tablicy repertuaru: %s"
+#: locale/programs/charmap.c:561
+msgid "too few bytes in character encoding"
+msgstr "za ma³o bajtów w kodzie znaku"
 
-#: locale/programs/repertoire.c:272
-msgid "no <Uxxxx> or <Uxxxxxxxx> value given"
-msgstr "nie podano ¿adnych warto¶ci <Uxxxx> lub <Uxxxxxxxx>"
+#: locale/programs/charmap.c:563
+msgid "too many bytes in character encoding"
+msgstr "za du¿o bajtów w kodzie znaku"
 
-#: locale/programs/repertoire.c:332
-msgid "cannot save new repertoire map"
-msgstr "nie mo¿na zachowaæ nowej tablicy repertuaru"
+#: 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 "brak nazwy symbolicznej dla koñca przedzia³u"
 
-#: locale/programs/repertoire.c:343
+#: locale/programs/charmap.c:609 locale/programs/locfile.c:818
+#: locale/programs/repertoire.c:313
 #, c-format
-msgid "repertoire map file `%s' not found"
-msgstr "nie znaleziono pliku tablicy repertuaru `%s'"
+msgid "`%1$s' definition does not end with `END %1$s'"
+msgstr "definicja `%1$s' musi koñczyæ siê wyra¿eniem `END %1$s'"
 
-#: locale/programs/repertoire.c:450
+#: locale/programs/charmap.c:642
+msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
+msgstr "po definicji CHARMAP mog± wystêpowaæ tylko definicje WIDTH"
+
+#: locale/programs/charmap.c:650 locale/programs/charmap.c:713
 #, c-format
-msgid "<%s> and <%s> are invalid names for range"
-msgstr "<%s> i <%s> s± niepoprawnymi nazwami dla przedzia³u"
+msgid "value for %s must be an integer"
+msgstr "warto¶æ %s musi byæ liczb± ca³kowit±"
 
-#: locale/programs/repertoire.c:457
-msgid "upper limit in range is not smaller then lower limit"
-msgstr "górna granica przedzia³u nie jest mniejsza ni¿ dolna"
+# state machine = finite state machine =
+# automat skoñczony -PK
+#: locale/programs/charmap.c:841
+#, c-format
+msgid "%s: error in state machine"
+msgstr "%s: b³±d w automacie skoñczonym"
 
-#: locale/programs/xmalloc.c:70 malloc/obstack.c:505 malloc/obstack.c:508
-#: posix/getconf.c:1007
-msgid "memory exhausted"
-msgstr "pamiêæ wyczerpana"
+#: 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 "%s: premature end of file"
+msgstr "%s: przedwczesny koniec pliku"
 
-#: assert/assert-perr.c:57
+#: locale/programs/charmap.c:868 locale/programs/charmap.c:879
 #, c-format
-msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n"
-msgstr "%s%s%s:%u %s%sNiespodziewany b³±d: %s.\n"
+msgid "unknown character `%s'"
+msgstr "nieznany znak `%s'"
 
-#: assert/assert.c:56
+#: locale/programs/charmap.c:887
 #, c-format
-msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n"
-msgstr "%s%s%s:%u: %s%sWarunek zapewnienia `%s' nie zosta³ spe³niony.\n"
+msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d"
+msgstr "liczba bajtów dla sekwencji bajtów pocz±tku i koñca przedzia³u jest ró¿na: %d i %d"
 
-#: intl/tst-codeset.c:40 intl/tst-codeset.c:50
-msgid "cheese"
-msgstr "ser"
+#: locale/programs/charmap.c:992 locale/programs/ld-collate.c:2933
+#: locale/programs/repertoire.c:419
+msgid "invalid names for character range"
+msgstr "nieprawid³owe nazwy dla przedzia³u znaków"
 
-#: intl/tst-gettext2.c:37
-msgid "First string for testing."
-msgstr "Pierwszy ³añcuch do testów."
+#: locale/programs/charmap.c:1004 locale/programs/repertoire.c:431
+msgid "hexadecimal range format should use only capital characters"
+msgstr "w szesnastkowym formacie przedzia³u powinny byæ u¿ywane wielkie litery"
 
-#: intl/tst-gettext2.c:38
-msgid "Another string for testing."
-msgstr "Inny ³añcuch do testów."
+#: locale/programs/charmap.c:1022
+#, c-format
+msgid "<%s> and <%s> are illegal names for range"
+msgstr "<%s> i <%s> nie s± poprawnymi nazwami dla przedzia³u"
 
-#: catgets/gencat.c:111 catgets/gencat.c:115 nscd/nscd.c:88
-msgid "NAME"
-msgstr "NAZWA"
+#: locale/programs/charmap.c:1028
+msgid "upper limit in range is not higher then lower limit"
+msgstr "górna granica przedzia³u nie jest wiêksza ni¿ dolna"
 
-#: catgets/gencat.c:112
-msgid "Create C header file NAME containing symbol definitions"
-msgstr "Tworzenie pliku nag³ówkowego C o tej NAZWIE zawieraj±cego definicje symboli"
+#: locale/programs/charmap.c:1086
+msgid "resulting bytes for range not representable."
+msgstr "wynikowe bajty dla przedzia³u nie mog± zostaæ wyra¿one."
 
-#: catgets/gencat.c:114
-msgid "Do not use existing catalog, force new output file"
-msgstr "Zamiast do istniej±cego katalogu, zapisanie do nowego pliku"
+#: 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 "No definition for %s category found"
+msgstr "Nie znaleziono definicji dla kategorii %s"
 
-#: catgets/gencat.c:115
-msgid "Write output to file NAME"
-msgstr "Zapisanie wyników do pliku NAZWA"
+#: 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 "%s: field `%s' not defined"
+msgstr "%s: pole `%s' nie jest zdefiniowane"
 
-#: 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 ""
-"Generowanie katalogu komunikatów.\vJe¶li PLIK-WE to -, dane s± czytane ze standardowego wej¶cia. Je¶li PLIK-WY\n"
-"to -, dane s± zapisywane na standardowe wyj¶cie.\n"
+#: 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: field `%s' must not be empty"
+msgstr "%s: pole `%s' nie mo¿e byæ puste"
 
-#: catgets/gencat.c:125
-msgid ""
-"-o OUTPUT-FILE [INPUT-FILE]...\n"
-"[OUTPUT-FILE [INPUT-FILE]...]"
-msgstr ""
-"-o PLIK-WY [PLIK-WE]...\n"
-"[PLIK-WY [PLIK-WE]...]"
+#: locale/programs/ld-address.c:167
+#, c-format
+msgid "%s: invalid escape `%%%c' sequence in field `%s'"
+msgstr "%s: niepoprawna sekwencja escape `%%%c' w polu `%s'"
 
-#: catgets/gencat.c:282
-msgid "*standard input*"
-msgstr "*standardowe wej¶cie*"
+#: locale/programs/ld-address.c:218
+#, c-format
+msgid "%s: terminology language code `%s' not defined"
+msgstr "%s: kod jêzyka terminologii `%s' nie jest zdefiniowany"
 
-#: catgets/gencat.c:417 catgets/gencat.c:494
-msgid "illegal set number"
-msgstr "b³êdny numer zbioru"
+#: locale/programs/ld-address.c:243
+#, c-format
+msgid "%s: field `%s' must not be defined"
+msgstr "%s: pole `%s' nie mo¿e byæ zdefiniowane"
 
-#: catgets/gencat.c:444
-msgid "duplicate set definition"
-msgstr "powtórzona definicja zbioru"
+#: locale/programs/ld-address.c:257 locale/programs/ld-address.c:286
+#, c-format
+msgid "%s: language abbreviation `%s' not defined"
+msgstr "%s: skrót jêzyka `%s' nie jest zdefiniowany"
 
-#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677
-msgid "this is the first definition"
-msgstr "to pierwsza definicja"
+#: 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 "%s: `%s' value does not match `%s' value"
+msgstr "%s: warto¶æ `%s' nie pasuje do warto¶ci `%s'"
 
-#: catgets/gencat.c:522
+#: locale/programs/ld-address.c:311
 #, c-format
-msgid "unknown set `%s'"
-msgstr "nieznany zbiór `%s'"
+msgid "%s: numeric country code `%d' not valid"
+msgstr "%s: liczbowy kod kraju `%d' jest niepoprawny"
 
-#: catgets/gencat.c:563
-msgid "invalid quote character"
-msgstr "niepoprawny znak cudzys³owu"
+#: 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 "%s: field `%s' declared more than once"
+msgstr "%s: pole `%s' zadeklarowane wiêcej ni¿ raz"
 
-#: catgets/gencat.c:576
+#: 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 "unknown directive `%s': line ignored"
-msgstr "nieznana dyrektywa `%s': linia zignorowana"
+msgid "%s: unknown character in field `%s'"
+msgstr "%s: nieznany znak w polu `%s'"
 
-#: catgets/gencat.c:621
-msgid "duplicated message number"
-msgstr "powtórzony numer komunikatu"
+#: 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: niekompletna linia `END'"
 
-#: catgets/gencat.c:674
-msgid "duplicated message identifier"
-msgstr "powtórzony identyfikator komunikatu"
+#: locale/programs/ld-address.c:599 locale/programs/ld-collate.c:2653
+#: locale/programs/ld-collate.c:3804 locale/programs/ld-ctype.c:2227
+#: locale/programs/ld-ctype.c:2979 locale/programs/ld-identification.c:451
+#: locale/programs/ld-measurement.c:237 locale/programs/ld-messages.c:331
+#: locale/programs/ld-monetary.c:940 locale/programs/ld-name.c:306
+#: locale/programs/ld-numeric.c:367 locale/programs/ld-paper.c:240
+#: locale/programs/ld-telephone.c:312 locale/programs/ld-time.c:1220
+#, c-format
+msgid "%1$s: definition does not end with `END %1$s'"
+msgstr "%1$s: definicja nie koñczy siê przez `END %1$s'"
 
-#: catgets/gencat.c:731
-msgid "invalid character: message ignored"
-msgstr "niepoprawny znak: komunikat zignorowany"
+#: 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: b³±d sk³adni"
 
-#: catgets/gencat.c:774
-msgid "invalid line"
-msgstr "niepoprawna linia"
+#: locale/programs/ld-collate.c:396
+#, c-format
+msgid "`%.*s' already defined in charmap"
+msgstr "`%.*s' ju¿ zdefiniowany w tablicy znaków"
 
-#: catgets/gencat.c:828
-msgid "malformed line ignored"
-msgstr "b³êdnie sformu³owana linia zosta³a pominiêta"
+#: locale/programs/ld-collate.c:405
+#, c-format
+msgid "`%.*s' already defined in repertoire"
+msgstr "`%.*s' ju¿ zdefiniowany w repertuarze"
 
-#: catgets/gencat.c:992 catgets/gencat.c:1033
+#: locale/programs/ld-collate.c:412
 #, c-format
-msgid "cannot open output file `%s'"
-msgstr "nie mo¿na otworzyæ pliku wyj¶ciowego `%s'"
+msgid "`%.*s' already defined as collating symbol"
+msgstr "`%.*s' ju¿ zdefiniowany jako symbol scalaj±cy"
 
-#: catgets/gencat.c:1217
-msgid "unterminated message"
-msgstr "nie zakoñczony komunikat"
+#: locale/programs/ld-collate.c:419
+#, c-format
+msgid "`%.*s' already defined as collating element"
+msgstr "`%.*s' ju¿ zdefiniowany jako element scalaj±cy"
 
-#: catgets/gencat.c:1241
-msgid "while opening old catalog file"
-msgstr "podczas otwierania starego pliku katalogu"
+#: locale/programs/ld-collate.c:450 locale/programs/ld-collate.c:476
+#, c-format
+msgid "%s: `forward' and `backward' are mutually excluding each other"
+msgstr "%s: porz±dki `forward' i `backward' wykluczaj± siê wzajemnie"
 
-#: catgets/gencat.c:1332
-msgid "conversion modules not available"
-msgstr "modu³y konwersji niedostêpny"
+#: 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' wyst±pi³o wiêcej ni¿ raz w definicji wagi %d"
 
-#: catgets/gencat.c:1358
-msgid "cannot determine escape character"
-msgstr "nie mo¿na okre¶liæ znaku escape"
+#: locale/programs/ld-collate.c:558
+#, c-format
+msgid "%s: too many rules; first entry only had %d"
+msgstr "%s: zbyt du¿o regu³; pierwszy wpis mia³ tylko %d"
 
-#: stdlib/../sysdeps/unix/sysv/linux/ia64/makecontext.c:63
+#: locale/programs/ld-collate.c:594
 #, c-format
-msgid "makecontext: does not know how to handle more than 8 arguments\n"
-msgstr "makecontext: nie wiadomo jak obs³u¿yæ wiêcej ni¿ 8 argumentów\n"
+msgid "%s: not enough sorting rules"
+msgstr "%s: za ma³o regu³ sortowania"
 
-#: 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 "Sukces"
+#: locale/programs/ld-collate.c:759
+#, c-format
+msgid "%s: empty weight string not allowed"
+msgstr "%s: pusty ³añcuch wagi jest niedozwolony"
 
-#. 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 "Operacja niedozwolona"
+# ellipsis = wyrzutnia jezykowa - sprawdzilem. nawet pamietam ze cos takiego
+# istnieje ze szkoly, ale za cholere nie pamietam co to jest ;) -PK
+#: locale/programs/ld-collate.c:854
+#, c-format
+msgid "%s: weights must use the same ellipsis symbol as the name"
+msgstr "%s: wagi musz± u¿ywaæ jako nazwy tego samego symbolu wyrzutni"
 
-#. 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 "Nie ma takiego pliku ani katalogu"
+#: locale/programs/ld-collate.c:910
+#, c-format
+msgid "%s: too many values"
+msgstr "%s: zbyt du¿o warto¶ci"
 
-#. 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 "Nie ma takiego procesu"
+#: locale/programs/ld-collate.c:1029 locale/programs/ld-collate.c:1204
+#, c-format
+msgid "order for `%.*s' already defined at %s:%Zu"
+msgstr "porz±dek dla `%.*s' zosta³ ju¿ zdefiniowany w %s:%Zu"
 
-#. 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 "Przerwane wywo³anie systemowe"
+#: 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: pocz±tkowy i koñcowy symbol przedzia³u musz± byæ znakami"
 
-#. TRANS Input/output error; usually used for physical read or write errors.
-#: stdio-common/../sysdeps/gnu/errlist.c:61
-msgid "Input/output error"
-msgstr "B³±d wej¶cia/wyj¶cia"
+#: locale/programs/ld-collate.c:1106
+#, c-format
+msgid "%s: byte sequences of first and last character must have the same length"
+msgstr "%s: sekwencje bajtów pierwszego i ostatniego znaku musz± mieæ tê sam± d³ugo¶æ"
 
-#. 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 "Nie ma takiego urz±dzenia ani adresu"
+#: 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: sekwencja bajtów pierwszego znaku sekwencji nie jest mniejsza ni¿ ostatniego znaku"
 
-#. 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 "Lista argumentów za d³uga"
+#: locale/programs/ld-collate.c:1273
+#, c-format
+msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
+msgstr "%s: wyrzutnia symbolicznego przedzia³u nie mo¿e byæ bezpo¶rednio po `order_start'"
 
-#. 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 "B³êdny format pliku wykonywalnego"
+#: locale/programs/ld-collate.c:1277
+#, c-format
+msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
+msgstr "%s: wyrzutnia symbolicznego przedzia³u nie mo¿e byæ bezpo¶rednio przed `order_end'"
+
+#: locale/programs/ld-collate.c:1297 locale/programs/ld-ctype.c:1475
+#, c-format
+msgid "`%s' and `%.*s' are not valid names for symbolic range"
+msgstr "`%s' i `%.*s' nie s± poprawnymi nazwami dla symbolicznego przedzia³u"
+
+#: locale/programs/ld-collate.c:1346 locale/programs/ld-collate.c:3739
+#, c-format
+msgid "%s: order for `%.*s' already defined at %s:%Zu"
+msgstr "%s: porz±dek dla `%.*s' zosta³ ju¿ zdefiniowany w %s:%Zu"
+
+#: locale/programs/ld-collate.c:1355
+#, c-format
+msgid "%s: `%s' must be a character"
+msgstr "%s: `%s' musi byæ znakiem"
+
+#: 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' musi byæ u¿yte dla konkretnego poziomu we wszystkich sekcjach lub ¿adnej"
+
+#: locale/programs/ld-collate.c:1573
+#, c-format
+msgid "symbol `%s' not defined"
+msgstr "nie zdefiniowany symbol `%s'"
+
+#: locale/programs/ld-collate.c:1649 locale/programs/ld-collate.c:1755
+#, c-format
+msgid "symbol `%s' has the same encoding as"
+msgstr "symbol `%s' ma to samo kodowanie co"
+
+#: locale/programs/ld-collate.c:1653 locale/programs/ld-collate.c:1759
+#, c-format
+msgid "symbol `%s'"
+msgstr "symbol `%s'"
+
+#: locale/programs/ld-collate.c:1801
+#, c-format
+msgid "no definition of `UNDEFINED'"
+msgstr "brak definicji `UNDEFINED'"
+
+#: locale/programs/ld-collate.c:1830
+#, c-format
+msgid "too many errors; giving up"
+msgstr "zbyt du¿o b³êdów; poddajê siê"
+
+#: locale/programs/ld-collate.c:2738
+#, c-format
+msgid "%s: duplicate definition of `%s'"
+msgstr "%s: powtórzona definicja `%s'"
+
+#: locale/programs/ld-collate.c:2774
+#, c-format
+msgid "%s: duplicate declaration of section `%s'"
+msgstr "%s: powtórzona deklaracja sekcji `%s'"
+
+#: locale/programs/ld-collate.c:2913
+#, c-format
+msgid "%s: unknown character in collating symbol name"
+msgstr "%s: nieznany znak w nazwie symbolu scalaj±cego"
+
+#: locale/programs/ld-collate.c:3045
+#, c-format
+msgid "%s: unknown character in equivalent definition name"
+msgstr "%s: nieznany znak w nazwie definicji równowa¿no¶ci"
+
+#: locale/programs/ld-collate.c:3058
+#, c-format
+msgid "%s: unknown character in equivalent definition value"
+msgstr "%s: nieznany znak w warto¶ci definicji równowa¿no¶ci"
+
+#: locale/programs/ld-collate.c:3068
+#, c-format
+msgid "%s: unknown symbol `%s' in equivalent definition"
+msgstr "%s: nieznany symbol `%s' w definicji równowa¿no¶ci"
+
+#: locale/programs/ld-collate.c:3077
+msgid "error while adding equivalent collating symbol"
+msgstr "b³±d podczas dodawania równowa¿nego symbolu scalaj±cego"
+
+#: locale/programs/ld-collate.c:3107
+#, c-format
+msgid "duplicate definition of script `%s'"
+msgstr "powtórzona definicja skryptu `%s'"
+
+#: locale/programs/ld-collate.c:3155
+#, c-format
+msgid "%s: unknown section name `%s'"
+msgstr "%s: nieznana nazwa sekcji `%s'"
+
+#: locale/programs/ld-collate.c:3183
+#, c-format
+msgid "%s: multiple order definitions for section `%s'"
+msgstr "%s: wielokrotna definicja porz±dku dla sekcji `%s'"
+
+#: locale/programs/ld-collate.c:3208
+#, c-format
+msgid "%s: invalid number of sorting rules"
+msgstr "%s: b³êdna liczba regu³ sortowania"
+
+#: locale/programs/ld-collate.c:3235
+#, c-format
+msgid "%s: multiple order definitions for unnamed section"
+msgstr "%s: wielokrotna definicja porz±dku dla nie nazwanej sekcji"
+
+#: locale/programs/ld-collate.c:3289 locale/programs/ld-collate.c:3417
+#: locale/programs/ld-collate.c:3780
+#, c-format
+msgid "%s: missing `order_end' keyword"
+msgstr "%s: brak s³owa kluczowego `order_end'"
+
+#: locale/programs/ld-collate.c:3350
+#, c-format
+msgid "%s: order for collating symbol %.*s not yet defined"
+msgstr "%s: porz±dek dla symbolu scalaj±cego %.*s jeszcze nie zdefiniowany"
+
+#: locale/programs/ld-collate.c:3368
+#, c-format
+msgid "%s: order for collating element %.*s not yet defined"
+msgstr "%s: porz±dek dla elementu scalaj±cego %.*s jeszcze nie zdefiniowany"
+
+#: locale/programs/ld-collate.c:3379
+#, c-format
+msgid "%s: cannot reorder after %.*s: symbol not known"
+msgstr "%s: nie mo¿na zmieniæ porz±dku po %.*s: nieznany symbol"
+
+#: locale/programs/ld-collate.c:3431 locale/programs/ld-collate.c:3792
+#, c-format
+msgid "%s: missing `reorder-end' keyword"
+msgstr "%s: brak s³owa kluczowego `reorder-end'"
+
+#: locale/programs/ld-collate.c:3465 locale/programs/ld-collate.c:3664
+#, c-format
+msgid "%s: section `%.*s' not known"
+msgstr "%s: nieznana sekcja `%.*s'"
+
+#: locale/programs/ld-collate.c:3530
+#, c-format
+msgid "%s: bad symbol <%.*s>"
+msgstr "%s: b³êdny symbol <%.*s>"
+
+#: locale/programs/ld-collate.c:3727
+#, c-format
+msgid "%s: cannot have `%s' as end of ellipsis range"
+msgstr "%s: nie mo¿na u¿yæ `%s' jako koñca przedzia³u wyrzutni"
+
+#: locale/programs/ld-collate.c:3776
+#, c-format
+msgid "%s: empty category description not allowed"
+msgstr "%s: pusty opis kategorii niedozwolony"
+
+#: locale/programs/ld-collate.c:3795
+#, c-format
+msgid "%s: missing `reorder-sections-end' keyword"
+msgstr "%s: brak s³owa kluczowego `reorder-sections-end'"
+
+#: locale/programs/ld-ctype.c:438
+#, c-format
+msgid "No character set name specified in charmap"
+msgstr "Brak nazwy zestawu znaków w tablicy znaków"
+
+#: locale/programs/ld-ctype.c:467
+#, c-format
+msgid "character L'\\u%0*x' in class `%s' must be in class `%s'"
+msgstr "z