diff options
59 files changed, 10317 insertions, 333 deletions
diff --git a/libc/ChangeLog b/libc/ChangeLog index 2c21a7d57..28b65e3e6 100644 --- a/libc/ChangeLog +++ b/libc/ChangeLog @@ -1,3 +1,142 @@ +2008-05-14 Ulrich Drepper <drepper@redhat.com> + + * string/Makefile (distribute): Add str-two-way.h. + +2008-03-29 Eric Blake <ebb9@byu.net> + + Rewrite string searches to O(n) rather than O(n^2). + * string/str-two-way.h: New file. For linear fixed-allocation + string searching. + * string/memmem.c: New implementation. + * string/strstr.c: New implementation. + * string/strcasestr.c: New implementation. + +2008-04-11 Paolo Bonzini <bonzini@gnu.org> + + * posix/regcomp.c (optimize_utf8): Add a note on why we test + opr.ctx_type. + (calc_first): Initialize constraint field. + (duplicate_node_closure): Use it instead of special casing ANCHORS. + Use search_duplicated_node to avoid loops. Fix grammar. + (duplicate_node): Merge constraint field for all node types. + (calc_eclosure_iter): Look at constraint field for all node types. + * posix/regex_internal.c (create_cd_newstate): Don't look at + create_cd_newstate. + +2008-05-14 Ulrich Drepper <drepper@redhat.com> + + [BZ #6428] + * configure.in: Don't use $CFLAGS when assembling, use $ASFLAGS. + + [BZ #6442] + * string/endian.h: Add macros for fixed-size endian conversion. + * bits/byteswap.h: Allow inclusion from <endian.h>. + * sysdeps/i386/bits/byteswap.h: Likewise. + * sysdeps/ia64/bits/byteswap.h: Likewise. + * sysdeps/s390/bits/byteswap.h: Likewise. + * sysdeps/x86_64/bits/byteswap.h: Likewise. + * string/Makefile (tests): Add tst-endian. + * string/tst-endian.c: New file. + + * iconvdata/run-iconv-test.sh: Use = instead of == in test. + Patch by Reuben Thomas. + +2008-05-14 Joseph Myers <joseph@codesourcery.com> + + * iconvdata/Makefile (bug-iconv6-ENV, tst-iconv7-ENV): Define. + +2008-05-14 Ulrich Drepper <drepper@redhat.com> + + * iconvdata/bug-iconv6.c (do_test): Use de_DE.UTF-8 locale. + + [BZ #6461] + * iconv/gconv_simple.c (BODY for __gconv_transform_ascii_internal): + Add missing braces. + (BODY for __gconv_transform_internal_ascii): Likewise. + + [BZ #6472] + * sysdeps/posix/getaddrinfo.c (get_scope): Loopback addresses have + to be treated like link-local addresses. + (match_prefix): Don't treat IPv4 loopback address special when + converting to v4 mapped addressed. + + * sysdeps/posix/getaddrinfo.c (getaddrinfo): Call _res_hconf_init + if necessary. + * posix/tst-rfc3484.c: Add dummy definition of _res_hconf_init. + * posix/tst-rfc3484-2.c: Likewise. + * posix/tst-rfc3484-3.c: Likewise. + + * sysdeps/posix/getaddrinfo.c: Implement handling of DCCP, UDPlite, + and SCTP. + + * nss/getent.c (ahosts_keys_int): Handle all known socket types. + + * inet/netinet/in.h (IPPIPPROTO_DCCP, IPPROTO_UDPLITE): Define. + + * sysdeps/unix/sysv/linux/bits/socket.h (SOCK_DCCP): Define. + +2008-05-13 Ulrich Drepper <drepper@redhat.com> + + * po/lt.po: New file. From Lituanian translation team. + +2008-01-30 Alexandre Oliva <aoliva@redhat.com> + + Introduce TLS descriptors for i386 and x86_64. + * include/inline-hashtab.h: New file, copied from 2005's + libiberty, with fix for memory leak imported afterwards by + Glauber de Oliveira Costa. + * elf/tlsdeschtab.h: New file. + * elf/dl-reloc.c (_dl_try_allocate_static_tls): Extract from... + (_dl_allocate_static_tls): ... here. Rearrange failure path. + (CHECK_STATIC_TLS): Move to... + * elf/dynamic-link.h: ... this file. + (TRY_STATIC_TLS): New macro. + * elf/dl-conflict.c (CHECK_STATIC_TLS, TRY_STATIC_TLS): Override. + * elf/elf.h (R_386_TLS_GOTDESC, R_386_TLS_DESC_CALL, + R_386_TLS_DESC): Define. + (R_X86_64_PC64, R_X86_GOTOFF64, R_X86_64_GOTPC32): Merge from + binutils. + (R_X86_64_GOTPC32_TLSDESC, R_X86_64_TLSDESC_CALL, + R_X86_64_TLSDESC): Define. + (R_386_NUM, R_X86_64_NUM): Adjust. + * sysdeps/i386/Makefile (sysdep-dl-routines, sysdep_routines, + sysdep-rtld-routines): Add tlsdesc and dl-tlsdesc for elf subdir. + (gen-as-const-headers): Add tlsdesc.sym to csu subdir. + * sysdeps/i386/dl-lookupcfg.h: New file. Introduce _dl_unmap to + release tlsdesc_table. + * sysdeps/i386/dl-machine.h: Include dl-tlsdesc.h. + (elf_machine_type_class): Mark R_386_TLS_DESC as PLT class. + (elf_machine_rel): Handle R_386_TLS_DESC. + (elf_machine_rela): Likewise. + (elf_machine_lazy_rel): Likewise. + (elf_machine_lazy_rela): Likewise. + * sysdeps/i386/dl-tls.h (struct dl_tls_index): Name it. + * sysdeps/i386/dl-tlsdesc.S: New file. + * sysdeps/i386/dl-tlsdesc.h: New file. + * sysdeps/i386/tlsdesc.c: New file. + * sysdeps/i386/tlsdesc.sym: New file. + * sysdeps/i386/bits/linkmap.h (struct link_map_machine): Add + tlsdesc_table. + * sysdeps/x86_64/Makefile (sysdep-dl-routines, sysdep_routines, + sysdep-rtld-routines): Add tlsdesc and dl-tlsdesc for elf subdir. + (gen-as-const-headers): Add tlsdesc.sym to csu subdir. + * sysdeps/x86_64/dl-lookupcfg.h: New file. Introduce _dl_unmap to + release tlsdesc_table. + * sysdeps/x86_64/dl-machine.h: Include dl-tlsdesc.h. + (elf_machine_runtime_setup): Set up lazy TLSDESC GOT entry. + (elf_machine_type_class): Mark R_X86_64_TLSDESC as PLT class. + (elf_machine_rel): Handle R_X86_64_TLSDESC. + (elf_machine_rela): Likewise. + (elf_machine_lazy_rel): Likewise. + * sysdeps/x86_64/dl-tls.h (struct dl_tls_index): Name it. + (__tls_get_addr): Do not declare for non-shared compiles. + * sysdeps/x86_64/dl-tlsdesc.S: New file. + * sysdeps/x86_64/dl-tlsdesc.h: New file. + * sysdeps/x86_64/tlsdesc.c: New file. + * sysdeps/x86_64/tlsdesc.sym: New file. + * sysdeps/x86_64/bits/linkmap.h (struct link_map_machine): Add + tlsdesc_table for both 32- and 64-bit structs. + 2008-05-11 Ulrich Drepper <drepper@redhat.com> * elf/dl-tls.c (__tls_get_addr): Optimize by moving slow path in @@ -1,4 +1,4 @@ -GNU C Library NEWS -- history of user-visible changes. 2008-5-10 +GNU C Library NEWS -- history of user-visible changes. 2008-5-14 Copyright (C) 1992-2007, 2008 Free Software Foundation, Inc. See the end for copying conditions. @@ -8,7 +8,20 @@ using `glibc' in the "product" field. Version 2.9 * Unified lookup for getaddrinfo: IPv4 and IPv6 addresses are now looked - up at the same time. + up at the same time. Implemented by Ulrich Drepper. + +* TLS descriptors for LD and GD on x86 and x86-64. + Implemented by Alexandre Oliva. + +* getaddrinfo now handles DCCP and UDPlite. + Implemented by Ulrich Drepper. + +* New fixed-size conversion macros: htobe16, htole16, be16toh, le16toh, + htobe32, htole32, be32toh, le32toh, htobe64, htole64, be64toh, le64toh. + Implemented by Ulrich Drepper. + +* New implementation of memmem, strstr, and strcasestr which is O(n). + Implemented by Eric Blake. Version 2.8 diff --git a/libc/bits/byteswap.h b/libc/bits/byteswap.h index 949ed0bc9..45cb9471e 100644 --- a/libc/bits/byteswap.h +++ b/libc/bits/byteswap.h @@ -1,5 +1,5 @@ /* Macros to swap the order of bytes in integer values. - Copyright (C) 1997,1998,2000,2001,2002,2005 Free Software Foundation, Inc. + Copyright (C) 1997,1998,2000-2002,2005,2008 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,7 +17,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#if !defined _BYTESWAP_H && !defined _NETINET_IN_H +#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H # error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead." #endif diff --git a/libc/configure b/libc/configure index 131c236b5..2b7f0da0e 100755 --- a/libc/configure +++ b/libc/configure @@ -5766,7 +5766,7 @@ EOF echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; } \ && grep -q .note.GNU-stack conftest.s \ - && { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -Wa,--noexecstack + && { ac_try='${CC-cc} $ASFLAGS -Wa,--noexecstack -c -o conftest.o conftest.s 1>&5' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 diff --git a/libc/configure.in b/libc/configure.in index 43b29e438..3129ba9fd 100644 --- a/libc/configure.in +++ b/libc/configure.in @@ -1523,7 +1523,7 @@ EOF if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -S -o conftest.s conftest.c 1>&AS_MESSAGE_LOG_FD]) \ && grep -q .note.GNU-stack conftest.s \ - && AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Wa,--noexecstack + && AC_TRY_COMMAND([${CC-cc} $ASFLAGS -Wa,--noexecstack -c -o conftest.o conftest.s 1>&AS_MESSAGE_LOG_FD]) then libc_cv_as_noexecstack=yes diff --git a/libc/elf/dl-conflict.c b/libc/elf/dl-conflict.c index 9b49e77d2..b73010562 100644 --- a/libc/elf/dl-conflict.c +++ b/libc/elf/dl-conflict.c @@ -1,5 +1,5 @@ /* Resolve conflicts against already prelinked libraries. - Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2004, 2005, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2001. @@ -44,7 +44,6 @@ _dl_resolve_conflicts (struct link_map *l, ElfW(Rela) *conflict, /* This macro is used as a callback from the ELF_DYNAMIC_RELOCATE code. */ #define RESOLVE_MAP(ref, version, flags) (*ref = NULL, NULL) #define RESOLVE(ref, version, flags) (*ref = NULL, 0) -#define CHECK_STATIC_TLS(ref_map, sym_map) ((void) 0) #define RESOLVE_CONFLICT_FIND_MAP(map, r_offset) \ do { \ while ((resolve_conflict_map->l_map_end < (ElfW(Addr)) (r_offset)) \ @@ -61,6 +60,12 @@ _dl_resolve_conflicts (struct link_map *l, ElfW(Rela) *conflict, #include "dynamic-link.h" + /* Override these, defined in dynamic-link.h. */ +#undef CHECK_STATIC_TLS +#define CHECK_STATIC_TLS(ref_map, sym_map) ((void) 0) +#undef TRY_STATIC_TLS +#define TRY_STATIC_TLS(ref_map, sym_map) (0) + GL(dl_num_cache_relocations) += conflictend - conflict; for (; conflict < conflictend; ++conflict) diff --git a/libc/elf/dl-reloc.c b/libc/elf/dl-reloc.c index 496bf6ec4..877360f5c 100644 --- a/libc/elf/dl-reloc.c +++ b/libc/elf/dl-reloc.c @@ -1,5 +1,5 @@ /* Relocate a shared object and resolve its references to other loaded objects. - Copyright (C) 1995-2004, 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2004, 2005, 2006, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -43,9 +43,9 @@ This function intentionally does not return any value but signals error directly, as static TLS should be rare and code handling it should not be inlined as much as possible. */ -void -internal_function __attribute_noinline__ -_dl_allocate_static_tls (struct link_map *map) +int +internal_function +_dl_try_allocate_static_tls (struct link_map *map) { /* If we've already used the variable with dynamic access, or if the alignment requirements are too high, fail. */ @@ -53,8 +53,7 @@ _dl_allocate_static_tls (struct link_map *map) || map->l_tls_align > GL(dl_tls_static_align)) { fail: - _dl_signal_error (0, map->l_name, NULL, N_("\ -cannot allocate memory in static TLS block")); + return -1; } #if TLS_TCB_AT_TP @@ -108,6 +107,20 @@ cannot allocate memory in static TLS block")); } else map->l_need_tls_init = 1; + + return 0; +} + +void +internal_function __attribute_noinline__ +_dl_allocate_static_tls (struct link_map *map) +{ + if (map->l_tls_offset == FORCED_DYNAMIC_TLS_OFFSET + || _dl_try_allocate_static_tls (map)) + { + _dl_signal_error (0, map->l_name, NULL, N_("\ +cannot allocate memory in static TLS block")); + } } /* Initialize static TLS area and DTV for current (only) thread. @@ -248,23 +261,6 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[], l->l_lookup_cache.value = _lr; })) \ : l) - /* This macro is used as a callback from elf_machine_rel{a,} when a - static TLS reloc is about to be performed. Since (in dl-load.c) we - permit dynamic loading of objects that might use such relocs, we - have to check whether each use is actually doable. If the object - whose TLS segment the reference resolves to was allocated space in - the static TLS block at startup, then it's ok. Otherwise, we make - an attempt to allocate it in surplus space on the fly. If that - can't be done, we fall back to the error that DF_STATIC_TLS is - intended to produce. */ -#define CHECK_STATIC_TLS(map, sym_map) \ - do { \ - if (__builtin_expect ((sym_map)->l_tls_offset == NO_TLS_OFFSET \ - || ((sym_map)->l_tls_offset \ - == FORCED_DYNAMIC_TLS_OFFSET), 0)) \ - _dl_allocate_static_tls (sym_map); \ - } while (0) - #include "dynamic-link.h" ELF_DYNAMIC_RELOCATE (l, lazy, consider_profiling); diff --git a/libc/elf/dynamic-link.h b/libc/elf/dynamic-link.h index 7eb9a3613..c34cbcd43 100644 --- a/libc/elf/dynamic-link.h +++ b/libc/elf/dynamic-link.h @@ -1,5 +1,5 @@ /* Inline functions for dynamic linking. - Copyright (C) 1995-2005, 2006 Free Software Foundation, Inc. + Copyright (C) 1995-2005, 2006, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,6 +17,31 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +/* This macro is used as a callback from elf_machine_rel{a,} when a + static TLS reloc is about to be performed. Since (in dl-load.c) we + permit dynamic loading of objects that might use such relocs, we + have to check whether each use is actually doable. If the object + whose TLS segment the reference resolves to was allocated space in + the static TLS block at startup, then it's ok. Otherwise, we make + an attempt to allocate it in surplus space on the fly. If that + can't be done, we fall back to the error that DF_STATIC_TLS is + intended to produce. */ +#define CHECK_STATIC_TLS(map, sym_map) \ + do { \ + if (__builtin_expect ((sym_map)->l_tls_offset == NO_TLS_OFFSET \ + || ((sym_map)->l_tls_offset \ + == FORCED_DYNAMIC_TLS_OFFSET), 0)) \ + _dl_allocate_static_tls (sym_map); \ + } while (0) + +#define TRY_STATIC_TLS(map, sym_map) \ + (__builtin_expect ((sym_map)->l_tls_offset \ + != FORCED_DYNAMIC_TLS_OFFSET, 1) \ + && (__builtin_expect ((sym_map)->l_tls_offset != NO_TLS_OFFSET, 1) \ + || _dl_try_allocate_static_tls (sym_map) == 0)) + +int internal_function _dl_try_allocate_static_tls (struct link_map *map); + #include <elf.h> #include <assert.h> diff --git a/libc/elf/elf.h b/libc/elf/elf.h index 928e9ec97..269de527e 100644 --- a/libc/elf/elf.h +++ b/libc/elf/elf.h @@ -1159,8 +1159,17 @@ typedef struct #define R_386_TLS_DTPMOD32 35 /* ID of module containing symbol */ #define R_386_TLS_DTPOFF32 36 /* Offset in TLS block */ #define R_386_TLS_TPOFF32 37 /* Negated offset in static TLS block */ +/* 38? */ +#define R_386_TLS_GOTDESC 39 /* GOT offset for TLS descriptor. */ +#define R_386_TLS_DESC_CALL 40 /* Marker of call through TLS + descriptor for + relaxation. */ +#define R_386_TLS_DESC 41 /* TLS descriptor containing + pointer to code and to + argument, returning the TLS + offset for the symbol. */ /* Keep this the last entry. */ -#define R_386_NUM 38 +#define R_386_NUM 42 /* SUN SPARC specific definitions. */ @@ -2557,8 +2566,17 @@ typedef Elf32_Addr Elf32_Conflict; #define R_X86_64_GOTTPOFF 22 /* 32 bit signed PC relative offset to GOT entry for IE symbol */ #define R_X86_64_TPOFF32 23 /* Offset in initial TLS block */ +#define R_X86_64_PC64 24 /* PC relative 64 bit */ +#define R_X86_64_GOTOFF64 25 /* 64 bit offset to GOT */ +#define R_X86_64_GOTPC32 26 /* 32 bit signed pc relative + offset to GOT */ +/* 27 .. 33 */ +#define R_X86_64_GOTPC32_TLSDESC 34 /* GOT offset for TLS descriptor. */ +#define R_X86_64_TLSDESC_CALL 35 /* Marker for call through TLS + descriptor. */ +#define R_X86_64_TLSDESC 36 /* TLS descriptor. */ -#define R_X86_64_NUM 24 +#define R_X86_64_NUM 37 /* AM33 relocations. */ diff --git a/libc/elf/tlsdeschtab.h b/libc/elf/tlsdeschtab.h new file mode 100644 index 000000000..c3cbc3fb7 --- /dev/null +++ b/libc/elf/tlsdeschtab.h @@ -0,0 +1,157 @@ +/* Hash table for TLS descriptors. + Copyright (C) 2005, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Alexandre Oliva <aoliva@redhat.com> + + 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 TLSDESCHTAB_H +# define TLSDESCHTAB_H 1 + +# ifdef SHARED + +# include <inline-hashtab.h> + +inline static int +hash_tlsdesc (void *p) +{ + struct tlsdesc_dynamic_arg *td = p; + + /* We know all entries are for the same module, so ti_offset is the + only distinguishing entry. */ + return td->tlsinfo.ti_offset; +} + +inline static int +eq_tlsdesc (void *p, void *q) +{ + struct tlsdesc_dynamic_arg *tdp = p, *tdq = q; + + return tdp->tlsinfo.ti_offset == tdq->tlsinfo.ti_offset; +} + +inline static int +map_generation (struct link_map *map) +{ + size_t idx = map->l_tls_modid; + struct dtv_slotinfo_list *listp = GL(dl_tls_dtv_slotinfo_list); + + /* Find the place in the dtv slotinfo list. */ + do + { + /* Does it fit in the array of this list element? */ + if (idx < listp->len) + { + /* We should never get here for a module in static TLS, so + we can assume that, if the generation count is zero, we + still haven't determined the generation count for this + module. */ + if (listp->slotinfo[idx].gen) + return listp->slotinfo[idx].gen; + else + break; + } + idx -= listp->len; + listp = listp->next; + } + while (listp != NULL); + + /* If we get to this point, the module still hasn't been assigned an + entry in the dtv slotinfo data structures, and it will when we're + done with relocations. At that point, the module will get a + generation number that is one past the current generation, so + return exactly that. */ + return GL(dl_tls_generation) + 1; +} + +void * +internal_function +_dl_make_tlsdesc_dynamic (struct link_map *map, size_t ti_offset) +{ + struct hashtab *ht; + void **entry; + struct tlsdesc_dynamic_arg *td, test; + + /* FIXME: We could use a per-map lock here, but is it worth it? */ + __rtld_lock_lock_recursive (GL(dl_load_lock)); + + ht = map->l_mach.tlsdesc_table; + if (! ht) + { + ht = htab_create (); + if (! ht) + { + __rtld_lock_unlock_recursive (GL(dl_load_lock)); + return 0; + } + map->l_mach.tlsdesc_table = ht; + } + + test.tlsinfo.ti_module = map->l_tls_modid; + test.tlsinfo.ti_offset = ti_offset; + entry = htab_find_slot (ht, &test, 1, hash_tlsdesc, eq_tlsdesc); + if (*entry) + { + td = *entry; + __rtld_lock_unlock_recursive (GL(dl_load_lock)); + return td; + } + + *entry = td = malloc (sizeof (struct tlsdesc_dynamic_arg)); + /* This may be higher than the map's generation, but it doesn't + matter much. Worst case, we'll have one extra DTV update per + thread. */ + td->gen_count = map_generation (map); + td->tlsinfo = test.tlsinfo; + + __rtld_lock_unlock_recursive (GL(dl_load_lock)); + return td; +} + +# endif /* SHARED */ + +/* The idea of the following two functions is to stop multiple threads + from attempting to resolve the same TLS descriptor without busy + waiting. Ideally, we should be able to release the lock right + after changing td->entry, and then using say a condition variable + or a futex wake to wake up any waiting threads, but let's try to + avoid introducing such dependencies. */ + +inline static int +_dl_tlsdesc_resolve_early_return_p (struct tlsdesc volatile *td, void *caller) +{ + if (caller != td->entry) + return 1; + + __rtld_lock_lock_recursive (GL(dl_load_lock)); + if (caller != td->entry) + { + __rtld_lock_unlock_recursive (GL(dl_load_lock)); + return 1; + } + + td->entry = _dl_tlsdesc_resolve_hold; + + return 0; +} + +inline static void +_dl_tlsdesc_wake_up_held_fixups (void) +{ + __rtld_lock_unlock_recursive (GL(dl_load_lock)); +} + +#endif diff --git a/libc/iconv/gconv_simple.c b/libc/iconv/gconv_simple.c index ec8f38a96..5cf3237ab 100644 --- a/libc/iconv/gconv_simple.c +++ b/libc/iconv/gconv_simple.c @@ -1,5 +1,5 @@ /* Simple transformations functions. - Copyright (C) 1997-2003, 2004, 2005, 2007 Free Software Foundation, Inc. + Copyright (C) 1997-2005, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -820,9 +820,11 @@ ucs4le_internal_loop_single (struct __gconv_step *step, STANDARD_FROM_LOOP_ERR_HANDLER (1); \ } \ else \ - /* It's an one byte sequence. */ \ - *((uint32_t *) outptr) = *inptr++; \ - outptr += sizeof (uint32_t); \ + { \ + /* It's an one byte sequence. */ \ + *((uint32_t *) outptr) = *inptr++; \ + outptr += sizeof (uint32_t); \ + } \ } #define LOOP_NEED_FLAGS #include <iconv/loop.c> @@ -851,9 +853,11 @@ ucs4le_internal_loop_single (struct __gconv_step *step, STANDARD_TO_LOOP_ERR_HANDLER (4); \ } \ else \ - /* It's an one byte sequence. */ \ - *outptr++ = *((const uint32_t *) inptr); \ - inptr += sizeof (uint32_t); \ + { \ + /* It's an one byte sequence. */ \ + *outptr++ = *((const uint32_t *) inptr); \ + inptr += sizeof (uint32_t); \ + } \ } #define LOOP_NEED_FLAGS #include <iconv/loop.c> diff --git a/libc/iconvdata/Makefile b/libc/iconvdata/Makefile index cdb767505..6a8daed5f 100644 --- a/libc/iconvdata/Makefile +++ b/libc/iconvdata/Makefile @@ -75,10 +75,10 @@ ifeq ($(have-thread-library),yes) tests += bug-iconv3 endif +test-srcs := tst-table-from tst-table-to + bug-iconv6-ENV = LOCPATH=$(common-objpfx)localedata tst-iconv7-ENV = LOCPATH=$(common-objpfx)localedata - -test-srcs := tst-table-from tst-table-to endif # No code here is in libc.so. diff --git a/libc/iconvdata/bug-iconv6.c b/libc/iconvdata/bug-iconv6.c index f920954bc..b364f4c16 100644 --- a/libc/iconvdata/bug-iconv6.c +++ b/libc/iconvdata/bug-iconv6.c @@ -13,7 +13,7 @@ static const char testbuf[] = { static int do_test (void) { - setlocale (LC_ALL, "en_US.UTF-8"); + setlocale (LC_ALL, "de_DE.UTF-8"); iconv_t ic = iconv_open ("ISO-2022-JP//TRANSLIT", "UTF-8"); if (ic == (iconv_t) -1) { diff --git a/libc/iconvdata/run-iconv-test.sh b/libc/iconvdata/run-iconv-test.sh index d2361c314..03f53b187 100755 --- a/libc/iconvdata/run-iconv-test.sh +++ b/libc/iconvdata/run-iconv-test.sh @@ -1,6 +1,6 @@ #! /bin/sh -f # Run available iconv(1) tests. -# Copyright (C) 1998-2002, 2005, 2006 Free Software Foundation, Inc. +# Copyright (C) 1998-2002, 2005, 2006, 2008 Free Software Foundation, Inc. # This file is part of the GNU C Library. # Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. # @@ -137,7 +137,7 @@ while read from to subset targets <&5; do done fi - if test "$subset" == N; then + if test "$subset" = N; then echo $ac_n " suntzu: ASCII -> $to -> ASCII $ac_c" $PROG -f ASCII -t $to testdata/suntzus | $PROG -f $to -t ASCII > $temp1 || diff --git a/libc/include/inline-hashtab.h b/libc/include/inline-hashtab.h new file mode 100644 index 000000000..1c36bd7fc --- /dev/null +++ b/libc/include/inline-hashtab.h @@ -0,0 +1,302 @@ +/* Fully-inline hash table, used mainly for managing TLS descriptors. + + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2005, 2008 + Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Alexandre Oliva <aoliva@redhat.com> + + This file is derived from a 2003's version of libiberty's + hashtab.c, contributed by Vladimir Makarov (vmakarov@cygnus.com), + but with most adaptation points and support for deleting elements + removed. + + 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 INLINE_HASHTAB_H +# define INLINE_HASHTAB_H 1 + +extern void weak_function free (void *ptr); + +inline static unsigned long +higher_prime_number (unsigned long n) +{ + /* These are primes that are near, but slightly smaller than, a + power of two. */ + static const uint32_t primes[] = { + UINT32_C (7), + UINT32_C (13), + UINT32_C (31), + UINT32_C (61), + UINT32_C (127), + UINT32_C (251), + UINT32_C (509), + UINT32_C (1021), + UINT32_C (2039), + UINT32_C (4093), + UINT32_C (8191), + UINT32_C (16381), + UINT32_C (32749), + UINT32_C (65521), + UINT32_C (131071), + UINT32_C (262139), + UINT32_C (524287), + UINT32_C (1048573), + UINT32_C (2097143), + UINT32_C (4194301), + UINT32_C (8388593), + UINT32_C (16777213), + UINT32_C (33554393), + UINT32_C (67108859), + UINT32_C (134217689), + UINT32_C (268435399), + UINT32_C (536870909), + UINT32_C (1073741789), + UINT32_C (2147483647), + /* 4294967291L */ + UINT32_C (2147483647) + UINT32_C (2147483644) + }; + + const uint32_t *low = &primes[0]; + const uint32_t *high = &primes[sizeof (primes) / sizeof (primes[0])]; + + while (low != high) + { + const unsigned long *mid = low + (high - low) / 2; + if (n > *mid) + low = mid + 1; + else + high = mid; + } + +#if 0 + /* If we've run out of primes, abort. */ + if (n > *low) + { + fprintf (stderr, "Cannot find prime bigger than %lu\n", n); + abort (); + } +#endif + + return *low; +} + +struct hashtab +{ + /* Table itself. */ + void **entries; + + /* Current size (in entries) of the hash table */ + size_t size; + + /* Current number of elements. */ + size_t n_elements; + + /* Free function for the entries array. This may vary depending on + how early the array was allocated. If it is NULL, then the array + can't be freed. */ + void (*free) (void *ptr); +}; + +inline static struct hashtab * +htab_create (void) +{ + struct hashtab *ht = malloc (sizeof (struct hashtab)); + + if (! ht) + return NULL; + ht->size = 3; + ht->entries = malloc (sizeof (void *) * ht->size); + ht->free = free; + if (! ht->entries) + { + if (ht->free) + ht->free (ht); + return NULL; + } + + ht->n_elements = 0; + + memset (ht->entries, 0, sizeof (void *) * ht->size); + + return ht; +} + +/* This is only called from _dl_unmap, so it's safe to call + free(). */ +inline static void +htab_delete (struct hashtab *htab) +{ + int i; + + for (i = htab->size - 1; i >= 0; i--) + if (htab->entries[i]) + free (htab->entries[i]); + + if (htab->free) + htab->free (htab->entries); + free (htab); +} + +/* Similar to htab_find_slot, but without several unwanted side effects: + - Does not call htab->eq_f when it finds an existing entry. + - Does not change the count of elements/searches/collisions in the + hash table. + This function also assumes there are no deleted entries in the table. + HASH is the hash value for the element to be inserted. */ + +inline static void ** +find_empty_slot_for_expand (struct hashtab *htab, int hash) +{ + size_t size = htab->size; + unsigned int index = hash % size; + void **slot = htab->entries + index; + int hash2; + + if (! *slot) + return slot; + + hash2 = 1 + hash % (size - 2); + for (;;) + { + index += hash2; + if (index >= size) + index -= size; + + slot = htab->entries + index; + if (! *slot) + return slot; + } +} + +/* The following function changes size of memory allocated for the + entries and repeatedly inserts the table elements. The occupancy + of the table after the call will be about 50%. Naturally the hash + table must already exist. Remember also that the place of the + table entries is changed. If memory allocation failures are allowed, + this function will return zero, indicating that the table could not be + expanded. If all goes well, it will return a non-zero value. */ + +inline static int +htab_expand (struct hashtab *htab, int (*hash_fn) (void *)) +{ + void **oentries; + void **olimit; + void **p; + void **nentries; + size_t nsize; + + oentries = htab->entries; + olimit = oentries + htab->size; + + /* Resize only when table after removal of unused elements is either + too full or too empty. */ + if (htab->n_elements * 2 > htab->size) + nsize = higher_prime_number (htab->n_elements * 2); + else + nsize = htab->size; + + nentries = malloc (sizeof (void *) * nsize); + memset (nentries, 0, sizeof (void *) * nsize); + if (nentries == NULL) + return 0; + htab->entries = nentries; + htab->size = nsize; + + p = oentries; + do + { + if (*p) + *find_empty_slot_for_expand (htab, hash_fn (*p)) + = *p; + + p++; + } + while (p < olimit); + + /* Without recording the free corresponding to the malloc used to + allocate the table, we couldn't tell whether this was allocated + by the malloc() built into ld.so or the one in the main + executable or libc. Calling free() for something that was + allocated by the early malloc(), rather than the final run-time + malloc() could do Very Bad Things (TM). We will waste memory + allocated early as long as there's no corresponding free(), but + this isn't so much memory as to be significant. */ + + if (htab->free) + htab->free (oentries); + + /* Use the free() corresponding to the malloc() above to free this + up. */ + htab->free = free; + + return 1; +} + +/* This function searches for a hash table slot containing an entry + equal to the given element. To delete an entry, call this with + INSERT = 0, then call htab_clear_slot on the slot returned (possibly + after doing some checks). To insert an entry, call this with + INSERT = 1, then write the value you want into the returned slot. + When inserting an entry, NULL may be returned if memory allocation + fails. */ + +inline static void ** +htab_find_slot (struct hashtab *htab, void *ptr, int insert, + int (*hash_fn)(void *), int (*eq_fn)(void *, void *)) +{ + unsigned int index; + int hash, hash2; + size_t size; + void **entry; + + if (htab->size * 3 <= htab->n_elements * 4 + && htab_expand (htab, hash_fn) == 0) + return NULL; + + hash = hash_fn (ptr); + + size = htab->size; + index = hash % size; + + entry = &htab->entries[index]; + if (!*entry) + goto empty_entry; + else if (eq_fn (*entry, ptr)) + return entry; + + hash2 = 1 + hash % (size - 2); + for (;;) + { + index += hash2; + if (index >= size) + index -= size; + + entry = &htab->entries[index]; + if (!*entry) + goto empty_entry; + else if (eq_fn (*entry, ptr)) + return entry; + } + + empty_entry: + if (!insert) + return NULL; + + htab->n_elements++; + return entry; +} + +#endif /* INLINE_HASHTAB_H */ diff --git a/libc/inet/netinet/in.h b/libc/inet/netinet/in.h index e3446a999..180227af5 100644 --- a/libc/inet/netinet/in.h +++ b/libc/inet/netinet/in.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2001, 2003, 2004, 2006, 2007 +/* Copyright (C) 1991-2001, 2003, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -53,6 +53,8 @@ enum #define IPPROTO_IDP IPPROTO_IDP IPPROTO_TP = 29, /* SO Transport Protocol Class 4. */ #define IPPROTO_TP IPPROTO_TP + IPPROTO_DCCP = 33, /* Datagram Congestion Control Protocol. */ +#define IPPROTO_DCCP IPPROTO_DCCP IPPROTO_IPV6 = 41, /* IPv6 header. */ #define IPPROTO_IPV6 IPPROTO_IPV6 IPPROTO_ROUTING = 43, /* IPv6 routing header. */ @@ -83,6 +85,8 @@ enum #define IPPROTO_COMP IPPROTO_COMP IPPROTO_SCTP = 132, /* Stream Control Transmission Protocol. */ #define IPPROTO_SCTP IPPROTO_SCTP + IPPROTO_UDPLITE = 136, /* UDP-Lite protocol. */ +#define IPPROTO_UDPLITE IPPROTO_UDPLITE IPPROTO_RAW = 255, /* Raw IP packets. */ #define IPPROTO_RAW IPPROTO_RAW IPPROTO_MAX diff --git a/libc/localedata/ChangeLog b/libc/localedata/ChangeLog index 5c9cbf221..93fc456e7 100644 --- a/libc/localedata/ChangeLog +++ b/libc/localedata/ChangeLog @@ -1,3 +1,12 @@ +2008-05-14 Ulrich Drepper <drepper@redhat.com> + + [BZ #6438] + * locales/iso14651_t1_common: Add sorting data for Telugu. + + [BZ #6447] + * locales/be_BY: Fix yesexpr. + Patch by Alexander Mikhailian <mikhailian@altern.org>. + 2008-04-15 Ulrich Drepper <drepper@redhat.com> * charmaps/UTF-8: Update for Unicode v5.1. diff --git a/libc/localedata/locales/be_BY b/libc/localedata/locales/be_BY index 3111a6a62..0e02ac4de 100644 --- a/libc/localedata/locales/be_BY +++ b/libc/localedata/locales/be_BY @@ -69,7 +69,7 @@ translit_end END LC_CTYPE LC_MESSAGES -yesexpr "<U005E><U005B><U0414><U0434><U0059><U0079><U005D><U002E><U002A>" +yesexpr "<U005E><U005B><U0422><U0442><U0059><U0079><U005D><U002E><U002A>" noexpr "<U005E><U005B><U041D><U043D><U004E><U006E><U005D><U002E><U002A>" END LC_MESSAGES diff --git a/libc/localedata/locales/iso14651_t1_common b/libc/localedata/locales/iso14651_t1_common index ab36f0ed9..ca3a8144c 100644 --- a/libc/localedata/locales/iso14651_t1_common +++ b/libc/localedata/locales/iso14651_t1_common @@ -62,6 +62,7 @@ script <ARMENIAN> script <GEORGIAN> script <DEVANAGARI> script <GUJARATI> +script <TELUGU> # Déclaration des symboles internes / Declaration of internal symbols # @@ -652,6 +653,95 @@ collating-symbol <gvd-chandrabindu> collating-symbol <gvd-visarg> collating-symbol <g-halant> +# <TELUGU> +# +# tvd - denotes Telugu vowel modifier +# tm - denotes Telugu matras +# tvw - denotes Telugu vowels + +# defining symbols +collating-symbol <tummu> +collating-symbol <tvw-a> +collating-symbol <tvw-aa> +collating-symbol <tvw-i> +collating-symbol <tvw-ii> +collating-symbol <tvw-u> +collating-symbol <tvw-uu> +collating-symbol <tvw-vocalicr> +collating-symbol <tvw-vocalicrr> +collating-symbol <tvw-vocalicl> +collating-symbol <tvw-vocalicll> +collating-symbol <tvw-candrae> +collating-symbol <tvw-shorte> +collating-symbol <tvw-e> +collating-symbol <tvw-ai> +collating-symbol <tvw-shorto> +collating-symbol <tvw-o> +collating-symbol <tvw-au> +collating-symbol <t-ka> +collating-symbol <t-kha> +collating-symbol <t-ga> +collating-symbol <t-gga> +collating-symbol <t-gha> +collating-symbol <t-nga> +collating-symbol <t-ca> +collating-symbol <t-tsa> +collating-symbol <t-cha> +collating-symbol <t-ja> +collating-symbol <t-dza> +collating-symbol <t-jja> +collating-symbol <t-jha> +collating-symbol <t-nya> +collating-symbol <t-tta> +collating-symbol <t-ttha> +collating-symbol <t-dda> +collating-symbol <t-ddda> +collating-symbol <t-ddha> +collating-symbol <t-nna> +collating-symbol <t-ta> +collating-symbol <t-tha> +collating-symbol <t-da> +collating-symbol <t-dha> +collating-symbol <t-na> +collating-symbol <t-pa> +collating-symbol <t-pha> +collating-symbol <t-ba> +collating-symbol <t-bba> +collating-symbol <t-bha> +collating-symbol <t-ma> +collating-symbol <t-ya> +collating-symbol <t-ra> +collating-symbol <t-rra> +collating-symbol <t-la> +collating-symbol <t-lla> +collating-symbol <t-va> +collating-symbol <t-sha> +collating-symbol <t-ssa> +collating-symbol <t-sa> +collating-symbol <t-ha> +collating-symbol <t-avagrah> +collating-symbol <tm-aa> +collating-symbol <tm-i> +collating-symbol <tm-ii> +collating-symbol <tm-u> +collating-symbol <tm-uu> +collating-symbol <tm-vocalicr> +collating-symbol <tm-vocalicrr> +collating-symbol <tm-vocalicl> +collating-symbol <tm-vocalicll> +collating-symbol <tm-shorte> +collating-symbol <tm-e> +collating-symbol <tm-ai> +collating-symbol <tm-shorto> +collating-symbol <tm-o> +collating-symbol <tm-au> +collating-symbol <tvd-chandrabindu> +collating-symbol <tvd-anuswara> +collating-symbol <tvd-visarg> +collating-symbol <t-halant> +collating-symbol <t-lenghtmark> +collating-symbol <t-ailenghtmark> + # Ordre des symboles internes / Order of internal symbols # # SYMB. N° @@ -1236,6 +1326,92 @@ collating-symbol <g-halant> <gvd-chandrabindu> <gvd-visarg> <g-halant> +# +#<TELUGU> +# +# collation weights in order + +<tummu> +<tvw-a> +<tvw-aa> +<tvw-i> +<tvw-ii> +<tvw-u> +<tvw-uu> +<tvw-vocalicr> +<tvw-vocalicrr> +<tvw-vocalicl> +<tvw-vocalicll> +<tvw-candrae> +<tvw-shorte> +<tvw-e> +<tvw-ai> +<tvw-shorto> +<tvw-o> +<tvw-au> +<t-ka> +<t-kha> +<t-ga> +<t-gga> +<t-gha> +<t-nga> +<t-ca> +<t-tsa> +<t-cha> +<t-ja> +<t-dza> +<t-jja> +<t-jha> +<t-nya> +<t-tta> +<t-ttha> +<t-dda> +<t-ddda> +<t-ddha> +<t-nna> +<t-ta> +<t-tha> +<t-da> +<t-dha> +<t-na> +<t-pa> +<t-pha> +<t-ba> +<t-bba> +<t-bha> +<t-ma> +<t-ya> +<t-ra> +<t-rra> +<t-la> +<t-lla> +<t-va> +<t-sha> +<t-ssa> +<t-sa> +<t-ha> +<t-avagrah> +<tm-aa> +<tm-i> +<tm-ii> +<tm-u> +<tm-uu> +<tm-vocalicr> +<tm-vocalicrr> +<tm-vocalicl> +<tm-vocalicll> +<tm-shorte> +<tm-e> +<tm-ai> +<tm-shorto> +<tm-o> +<tm-au> +<tvd-chandrabindu> +<tvd-anuswara> +<tvd-visarg> +<t-halant> +<t-lenghtmark> +<t-ailenghtmark> order_start <SPECIAL>;forward;backward;forward;forward,position # @@ -3201,6 +3377,103 @@ order_start <GUJARATI>;forward;forward;forward;forward,position <U0ACD> <g-halant>;<BAS>;<MIN>;IGNORE <U0ABC> IGNORE;<GNKT>;<MIN>;IGNORE +order_start <TELUGU>;forward;forward;forward;forward,position +<U0C66> <0>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C78> <0>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C67> <1>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C79> <1>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C7C> <1>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C68> <2>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C7A> <2>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C7D> <2>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C69> <3>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C7B> <3>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C7E> <3>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C6A> <4>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C6B> <5>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C6C> <6>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C6D> <7>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C6E> <8>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C6F> <9>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0C7F> <tummu> ;<BAS>;<MIN>;IGNORE +<U0C05> <tvw-a> ;<BAS>;<MIN>;IGNORE +<U0C06> <tvw-aa> ;<BAS>;<MIN>;IGNORE +<U0C07> <tvw-i> ;<BAS>;<MIN>;IGNORE +<U0C08> <tvw-ii> ;<BAS>;<MIN>;IGNORE +<U0C09> <tvw-u> ;<BAS>;<MIN>;IGNORE +<U0C0A> <tvw-uu>;<BAS>;<MIN>;IGNORE +<U0C0B> <tvw-vocalicr>;<BAS>;<MIN>;IGNORE +<U0C60> <tvw-vocalicrr>;<BAS>;<MIN>;IGNORE +<U0C0C> <tvw-vocalicl>;<BAS>;<MIN>;IGNORE +<U0C61> <tvw-vocalicll>;<BAS>;<MIN>;IGNORE +<U0C0D> <tvw-candrae>;<BAS>;<MIN>;IGNORE +<U0C0E> <tvw-shorte>;<BAS>;<MIN>;IGNORE +<U0C0F> <tvw-e>;<BAS>;<MIN>;IGNORE +<U0C10> <tvw-ai>;<BAS>;<MIN>;IGNORE +<U0C12> <tvw-shorto>;<BAS>;<MIN>;IGNORE +<U0C13> <tvw-o>;<BAS>;<MIN>;IGNORE +<U0C14> <tvw-au>;<BAS>;<MIN>;IGNORE +<U0C15> <t-ka>;<BAS>;<MIN>;IGNORE +<U0C16> <t-kha>;<BAS>;<MIN>;IGNORE +<U0C17> <t-ga>;<BAS>;<MIN>;IGNORE +<U0C7B> <t-gga>;<BAS>;<MIN>;IGNORE +<U0C18> <t-gha>;<BAS>;<MIN>;IGNORE +<U0C19> <t-nga>;<BAS>;<MIN>;IGNORE +<U0C1A> <t-ca>;<BAS>;<MIN>;IGNORE +<U0C58> <t-tsa>;<BAS>;<MIN>;IGNORE +<U0C1B> <t-cha>;<BAS>;<MIN>;IGNORE +<U0C1C> <t-ja>;<BAS>;<MIN>;IGNORE +<U0C59> <t-dza>;<BAS>;<MIN>;IGNORE +<U0C1D> <t-jha>;<BAS>;<MIN>;IGNORE +<U0C1E> <t-nya>;<BAS>;<MIN>;IGNORE +<U0C1F> <t-tta>;<BAS>;<MIN>;IGNORE +<U0C20> <t-ttha>;<BAS>;<MIN>;IGNORE +<U0C21> <t-dda>;<BAS>;<MIN>;IGNORE +<U0C22> <t-ddha>;<BAS>;<MIN>;IGNORE +<U0C23> <t-nna>;<BAS>;<MIN>;IGNORE +<U0C24> <t-ta>;<BAS>;<MIN>;IGNORE +<U0C25> <t-tha>;<BAS>;<MIN>;IGNORE +<U0C26> <t-da>;<BAS>;<MIN>;IGNORE +<U0C27> <t-dha>;<BAS>;<MIN>;IGNORE +<U0C28> <t-na>;<BAS>;<MIN>;IGNORE +<U0C2A> <t-pa>;<BAS>;<MIN>;IGNORE +<U0C2B> <t-pha>;<BAS>;<MIN>;IGNORE +<U0C2C> <t-ba>;<BAS>;<MIN>;IGNORE +<U0C2D> <t-bha>;<BAS>;<MIN>;IGNORE +<U0C2E> <t-ma>;<BAS>;<MIN>;IGNORE +<U0C2F> <t-ya>;<BAS>;<MIN>;IGNORE +<U0C30> <t-ra>;<BAS>;<MIN>;IGNORE +<U0C31> <t-rra>;<BAS>;<MIN>;IGNORE +<U0C32> <t-la>;<BAS>;<MIN>;IGNORE +<U0C33> <t-lla>;<BAS>;<MIN>;IGNORE +<U0C35> <t-va>;<BAS>;<MIN>;IGNORE +<U0C36> <t-sha>;<BAS>;<MIN>;IGNORE +<U0C37> <t-ssa>;<BAS>;<MIN>;IGNORE +<U0C38> <t-sa>;<BAS>;<MIN>;IGNORE +<U0C39> <t-ha>;<BAS>;<MIN>;IGNORE +<U0C3D> <t-avagrah>;<BAS>;<MIN>;IGNORE +<U0C3E> <tm-aa>;<BAS>;<MIN>;IGNORE +<U0C3F> <tm-i>;<BAS>;<MIN>;IGNORE +<U0C40> <tm-ii>;<BAS>;<MIN>;IGNORE +<U0C41> <tm-u>;<BAS>;<MIN>;IGNORE +<U0C42> <tm-uu>;<BAS>;<MIN>;IGNORE +<U0C43> <tm-vocalicr>;<BAS>;<MIN>;IGNORE +<U0C44> <tm-vocalicrr>;<BAS>;<MIN>;IGNORE +<U0C62> <tm-vocalicl>;<BAS>;<MIN>;IGNORE +<U0C63> <tm-vocalicll>;<BAS>;<MIN>;IGNORE +<U0C46> <tm-shorte>;<BAS>;<MIN>;IGNORE +<U0C47> <tm-e>;<BAS>;<MIN>;IGNORE +<U0C48> <tm-ai>;<BAS>;<MIN>;IGNORE +<U0C4A> <tm-shorto>;<BAS>;<MIN>;IGNORE +<U0C4B> <tm-o>;<BAS>;<MIN>;IGNORE +<U0C4C> <tm-au>;<BAS>;<MIN>;IGNORE +<U0C01> <tvd-chandrabindu>;<BAS>;<MIN>;IGNORE +<U0C02> <tvd-anuswara>;<BAS>;<MIN>;IGNORE +<U0C03> <tvd-visarg>;<BAS>;<MIN>;IGNORE +<U0C4D> <t-halant>;<BAS>;<MIN>;IGNORE +<U0C55> <t-lenghtmark>;<BAS>;<MIN>;IGNORE +<U0C56> <t-ailenghtmark>;<BAS>;<MIN>;IGNORE + order_end END LC_COLLATE diff --git a/libc/nss/getent.c b/libc/nss/getent.c index 420095945..1ca445b7c 100644 --- a/libc/nss/getent.c +++ b/libc/nss/getent.c @@ -343,6 +343,22 @@ ahosts_keys_int (int af, int xflags, int number, char *key[]) sockstr = "DGRAM"; else if (runp->ai_socktype == SOCK_RAW) sockstr = "RAW"; +#ifdef SOCK_SEQPACKET + else if (runp->ai_socktype == SOCK_SEQPACKET) + sockstr = "SEQPACKET"; +#endif +#ifdef SOCK_RDM + else if (runp->ai_socktype == SOCK_RDM) + sockstr = "RDM"; +#endif +#ifdef SOCK_DCCP + else if (runp->ai_socktype == SOCK_DCCP) + sockstr = "DCCP"; +#endif +#ifdef SOCK_PACKET + else if (runp->ai_socktype == SOCK_PACKET) + sockstr = "PACKET"; +#endif else { snprintf (sockbuf, sizeof (sockbuf), "%d", diff --git a/libc/po/lt.po b/libc/po/lt.po new file mode 100644 index 000000000..3556ba06c --- /dev/null +++ b/libc/po/lt.po @@ -0,0 +1,7082 @@ +# translation of libc-2.7 to Lithuanian +# Copyright (C) 2008 Free Software Foundation, Inc. +# This file is distributed under the same license as the glibc package. +# +# Gintautas Miliauskas <gintas@akl.lt>, 2008. +msgid "" +msgstr "" +"Project-Id-Version: libc-2.7\n" +"POT-Creation-Date: 2007-10-15 21:18-0700\n" +"PO-Revision-Date: 2008-05-14 01:35+0300\n" +"Last-Translator: Gintautas Miliauskas <gintas@akl.lt>\n" +"Language-Team: Lithuanian <komp_lt@konferencijos.lt>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#: argp/argp-help.c:228 +#, c-format +msgid "%.*s: ARGP_HELP_FMT parameter requires a value" +msgstr "%.*s: ARGP_HELP_FMT parametrui rekia reikšmės" + +#: argp/argp-help.c:238 +#, c-format +msgid "%.*s: Unknown ARGP_HELP_FMT parameter" +msgstr "%.*s: Nežinomas ARGP_HELP_FMT parametras" + +#: argp/argp-help.c:251 +#, c-format +msgid "Garbage in ARGP_HELP_FMT: %s" +msgstr "Šiukšlės ARGP_HELP_FMT: %s" + +#: argp/argp-help.c:1215 +msgid "Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options." +msgstr "Būtini ar nebūtini argumentai ilgiems parametrams atitinkamai būtini ar nebūtini trumpoms jų formoms." + +#: argp/argp-help.c:1601 +msgid "Usage:" +msgstr "Naudojimas:" + +#: argp/argp-help.c:1605 +msgid " or: " +msgstr " arba: " + +#: argp/argp-help.c:1617 +msgid " [OPTION...]" +msgstr "[PARAMETRAS...]" + +#: argp/argp-help.c:1644 +#, fuzzy, c-format +msgid "Try `%s --help' or `%s --usage' for more information.\n" +msgstr "Pabandykite „memusage --help“, jei norite gauti daugiau informacijos." + +#: argp/argp-help.c:1672 +#, c-format +msgid "Report bugs to %s.\n" +msgstr "Praneškite apie klaidas %s.\n" + +#: argp/argp-parse.c:102 +msgid "Give this help list" +msgstr "Pateikti šį pagalbinį sąrašą" + +#: argp/argp-parse.c:103 +msgid "Give a short usage message" +msgstr "Pateikti trumpą pranešimą apie naudojimą" + +#: argp/argp-parse.c:104 +msgid "Set the program name" +msgstr "Nustatyti programos pavadinimą" + +#: argp/argp-parse.c:106 +msgid "Hang for SECS seconds (default 3600)" +msgstr "Laukti SECS sekundžių (standartiškai 3600)" + +#: argp/argp-parse.c:167 +msgid "Print program version" +msgstr "Išspausdinti programos versiją" + +#: argp/argp-parse.c:183 +msgid "(PROGRAM ERROR) No version known!?" +msgstr "(PROGRAM ERROR) Nežinoma joka versija!?" + +#: argp/argp-parse.c:623 +#, c-format +msgid "%s: Too many arguments\n" +msgstr "%s: Per daug argumentų\n" + +#: argp/argp-parse.c:766 +#, fuzzy +msgid "(PROGRAM ERROR) Option should have been recognized!?" +msgstr "(PROGRAM ERROR) Nežinoma joka versija!?" + +#: assert/assert-perr.c:57 +#, c-format +msgid "%s%s%s:%u: %s%sUnexpected error: %s.\n" +msgstr "%s%s%s:%u: %s%sNetikėta klaida: %s.\n" + +#: assert/assert.c:57 +#, c-format +msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" +msgstr "%s%s%s:%u: %s%sPrielaida „%s“ pažeista.\n" + +#: catgets/gencat.c:110 catgets/gencat.c:114 nscd/nscd.c:97 nss/makedb.c:61 +msgid "NAME" +msgstr "PAVADINIMAS" + +#: catgets/gencat.c:111 +msgid "Create C header file NAME containing symbol definitions" +msgstr "Sukurti C antraščių failą duotu PAVADINIMU, kuriame surašyti simbolių apibrėžimus" + +#: catgets/gencat.c:113 +msgid "Do not use existing catalog, force new output file" +msgstr "Nenaudoti egzistuojančio katalogo, kurti naują išvedimo failą" + +#: catgets/gencat.c:114 nss/makedb.c:61 +msgid "Write output to file NAME" +msgstr "Išvesti į failą duotu PAVADINIMU" + +#: catgets/gencat.c:119 +msgid "" +"Generate message catalog.\vIf INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n" +"is -, output is written to standard output.\n" +msgstr "" + +#: catgets/gencat.c:124 +msgid "" +"-o OUTPUT-FILE [INPUT-FILE]...\n" +"[OUTPUT-FILE [INPUT-FILE]...]" +msgstr "" +"-o IŠVEDIMO-FAILAS [DUOMENŲ-FAILAS]...\n" +"[IŠVEDIMO-FAILAS [DUOMENŲ-FAILAS]...]" + +#: catgets/gencat.c:232 debug/pcprofiledump.c:204 iconv/iconv_prog.c:411 +#: iconv/iconvconfig.c:380 locale/programs/localedef.c:371 +#: login/programs/pt_chown.c:88 malloc/memusagestat.c:526 nss/makedb.c:231 +msgid "" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" + +#: catgets/gencat.c:246 debug/xtrace.sh:64 elf/ldconfig.c:296 +#: elf/ldd.bash.in:39 elf/sprof.c:355 iconv/iconv_prog.c:426 +#: iconv/iconvconfig.c:395 locale/programs/locale.c:275 +#: locale/programs/localedef.c:387 login/programs/pt_chown.c:59 +#: malloc/memusage.sh:71 nscd/nscd.c:406 nss/getent.c:83 nss/makedb.c:245 +#: posix/getconf.c:1012 +#, c-format +msgid "" +"Copyright (C) %s Free Software Foundation, Inc.\n" +"This is free software; see the source for copying conditions. There is NO\n" +"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" +msgstr "" + +#: catgets/gencat.c:251 debug/xtrace.sh:68 elf/ldconfig.c:301 elf/sprof.c:361 +#: iconv/iconv_prog.c:431 iconv/iconvconfig.c:400 locale/programs/locale.c:280 +#: locale/programs/localedef.c:392 malloc/memusage.sh:75 nscd/nscd.c:411 +#: nss/getent.c:88 nss/makedb.c:250 posix/getconf.c:1017 +#, c-format +msgid "Written by %s.\n" +msgstr "Parašė %s.\n" + +#: catgets/gencat.c:282 +msgid "*standard input*" +msgstr "*standartinis įvedimas*" + +#: catgets/gencat.c:288 iconv/iconv_charmap.c:158 iconv/iconv_prog.c:298 +#: nss/makedb.c:170 +#, fuzzy, c-format +msgid "cannot open input file `%s'" +msgstr "%s: nepavyko atverti laikinojo failo: %s" + +#: catgets/gencat.c:417 catgets/gencat.c:494 +#, fuzzy +msgid "illegal set number" +msgstr "nekorektiška eilutė" + +#: catgets/gencat.c:444 +msgid "duplicate set definition" +msgstr "pakartotinis rinkinio apibrėžimas" + +#: catgets/gencat.c:446 catgets/gencat.c:623 catgets/gencat.c:677 +msgid "this is the first definition" +msgstr "šis apibrėžimas pirmasis" + +#: catgets/gencat.c:522 +#, c-format +msgid "unknown set `%s'" +msgstr "nežinomas rinkinys „%s“" + +#: catgets/gencat.c:563 +#, fuzzy +msgid "invalid quote character" +msgstr "netaisyklingas kabučių simbolis" + +#: catgets/gencat.c:576 +#, c-format +msgid "unknown directive `%s': line ignored" +msgstr "nežinoma direktyva „%s“: eilutė ignoruota" + +#: catgets/gencat.c:621 +msgid "duplicated message number" +msgstr "pakartotas pranešimo numeris" + +#: catgets/gencat.c:674 +msgid "duplicated message identifier" +msgstr "pakartotas pranešimo identifikatorius" + +#: catgets/gencat.c:731 +#, fuzzy +msgid "invalid character: message ignored" +msgstr "netaisyklingas simbolis: pranešimas ignoruotas" + +#: catgets/gencat.c:774 +#, fuzzy +msgid "invalid line" +msgstr "nekorektiška eilutė" + +#: catgets/gencat.c:828 +msgid "malformed line ignored" +msgstr "nekorektiška eilutė ignoruota" + +#: catgets/gencat.c:992 catgets/gencat.c:1033 nss/makedb.c:183 +#, fuzzy, c-format +msgid "cannot open output file `%s'" +msgstr "%s: nepavyko atverti laikinojo failo: %s" + +#: catgets/gencat.c:1195 locale/programs/linereader.c:560 +#, fuzzy +msgid "invalid escape sequence" +msgstr "netaisyklingas naudotojas" + +#: catgets/gencat.c:1217 +msgid "unterminated message" +msgstr "neužbaigtas pranešimas" + +#: catgets/gencat.c:1241 +#, fuzzy, c-format +msgid "while opening old catalog file" +msgstr "rašant duomenų bazės failą" + +#: catgets/gencat.c:1332 +#, fuzzy, c-format +msgid "conversion modules not available" +msgstr "RPC programa nerasta" + +#: catgets/gencat.c:1358 +#, c-format +msgid "cannot determine escape character" +msgstr "" + +#: debug/pcprofiledump.c:53 +msgid "Don't buffer output" +msgstr "" + +#: debug/pcprofiledump.c:58 +msgid "Dump information generated by PC profiling." +msgstr "" + +#: debug/pcprofiledump.c:61 +msgid "[FILE]" +msgstr "[FAILAS]" + +#: debug/pcprofiledump.c:104 +#, fuzzy, c-format +msgid "cannot open input file" +msgstr "%s: nepavyko atverti laikinojo failo: %s" + +#: debug/pcprofiledump.c:111 +#, c-format +msgid "cannot read header" +msgstr "nepavyko perskaityti antraštės" + +#: debug/pcprofiledump.c:175 +#, fuzzy, c-format +msgid "invalid pointer size" +msgstr "netaisyklingas naudotojas" + +#: debug/xtrace.sh:27 debug/xtrace.sh:45 +msgid "Usage: xtrace [OPTION]... PROGRAM [PROGRAMOPTION]...\\n" +msgstr "" + +#: debug/xtrace.sh:33 +#, fuzzy +msgid "Try \\`xtrace --help' for more information.\\n" +msgstr "Pabandykite „memusage --help“, jei norite gauti daugiau informacijos." + +#: debug/xtrace.sh:39 +#, fuzzy +msgid "xtrace: option \\`$1' requires an argument.\\n" +msgstr "memusage: parametrui „$1“ reikia argumento" + +#: debug/xtrace.sh:46 +msgid "" +"Trace execution of program by printing currently executed function.\n" +"\n" +" --data=FILE Don't run the program, just print the data from FILE.\n" +"\n" +" -?,--help Print this help and exit\n" +" --usage Give a short usage message\n" +" -V,--version Print version information and exit\n" +"\n" +"Mandatory arguments to long options are also mandatory for any corresponding\n" +"short options.\n" +"\n" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\\n" +msgstr "" + +#: debug/xtrace.sh:125 +#, fuzzy +msgid "xtrace: unrecognized option \\`$1'\\n" +msgstr "%s: neatpažintas parametras „--%s“\n" + +#: debug/xtrace.sh:138 +msgid "No program name given\\n" +msgstr "Nenurodytas programos vardas\\n" + +#: debug/xtrace.sh:146 +#, sh-format +msgid "executable \\`$program' not found\\n" +msgstr "" + +#: debug/xtrace.sh:150 +#, sh-format +msgid "\\`$program' is no executable\\n" +msgstr "" + +#: dlfcn/dlinfo.c:64 +msgid "RTLD_SELF used in code not dynamically loaded" +msgstr "RTLD_SELF panaudotas ne dinamiškai įkeltame kode" + +#: dlfcn/dlinfo.c:73 +msgid "unsupported dlinfo request" +msgstr "nepalaikoma dlinfo užklausa" + +#: dlfcn/dlmopen.c:64 +#, fuzzy +msgid "invalid namespace" +msgstr "netaisyklingas kvietėjas" + +#: dlfcn/dlmopen.c:69 +msgid "invalid mode" +msgstr "netaisyklinga veiksena" + +#: dlfcn/dlopen.c:64 +#, fuzzy +msgid "invalid mode parameter" +msgstr "netaisyklinga veiksena" + +#: elf/cache.c:69 +#, fuzzy +msgid "unknown" +msgstr "%s: adresas nežinomas" + +#: elf/cache.c:112 +msgid "Unknown OS" +msgstr "Nežinoma OS" + +#: elf/cache.c:117 +#, c-format +msgid ", OS ABI: %s %d.%d.%d" +msgstr "" + +#: elf/cache.c:134 elf/ldconfig.c:1270 +#, c-format +msgid "Can't open cache file %s\n" +msgstr "Nepavyko atverti podėlio failo %s\n" + +#: elf/cache.c:148 +#, fuzzy, c-format +msgid "mmap of cache file failed.\n" +msgstr "Nepavyko atverti podėlio failo %s\n" + +#: elf/cache.c:152 elf/cache.c:166 +#, c-format +msgid "File is not a cache file.\n" +msgstr "Failas nėra podėlio failas.\n" + +#: elf/cache.c:199 elf/cache.c:209 +#, c-format +msgid "%d libs found in cache `%s'\n" +msgstr "Rasta %d bibliotekų podėlyje „%s“\n" + +#: elf/cache.c:403 +#, fuzzy, c-format +msgid "Can't create temporary cache file %s" +msgstr "Nepavyko atverti podėlio failo %s\n" + +#: elf/cache.c:411 elf/cache.c:421 elf/cache.c:425 elf/cache.c:430 +#, c-format +msgid "Writing of cache data failed" +msgstr "" + +#: elf/cache.c:435 +#, fuzzy, c-format +msgid "Changing access rights of %s to %#o failed" +msgstr "%s pervardinimas į %s nesėkmingas" + +#: elf/cache.c:440 +#, c-format +msgid "Renaming of %s to %s failed" +msgstr "%s pervardinimas į %s nesėkmingas" + +#: elf/dl-close.c:378 elf/dl-open.c:460 +#, fuzzy +msgid "cannot create scope list" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: elf/dl-close.c:724 +msgid "shared object not open" +msgstr "bendrasis objektas neatvertas" + +#: elf/dl-deps.c:114 +msgid "DST not allowed in SUID/SGID programs" +msgstr "DST neleidžiamas SUID/SGID programose" + +#: elf/dl-deps.c:127 elf/dl-open.c:282 +msgid "empty dynamic string token substitution" +msgstr "" + +#: elf/dl-deps.c:133 +#, c-format +msgid "cannot load auxiliary `%s' because of empty dynamic string token substitution\n" +msgstr "" + +#: elf/dl-deps.c:474 +#, fuzzy +msgid "cannot allocate dependency list" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: elf/dl-deps.c:510 elf/dl-deps.c:565 +#, fuzzy +msgid "cannot allocate symbol search list" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: elf/dl-deps.c:550 +msgid "Filters not supported with LD_TRACE_PRELINKING" +msgstr "" + +#: elf/dl-error.c:77 +msgid "DYNAMIC LINKER BUG!!!" +msgstr "" + +#: elf/dl-error.c:124 +msgid "error while loading shared libraries" +msgstr "klaida įkeliant bendrąsias bibliotekas" + +#: elf/dl-fptr.c:88 +msgid "cannot map pages for fdesc table" +msgstr "" + +#: elf/dl-fptr.c:192 +msgid "cannot map pages for fptr table" +msgstr "" + +#: elf/dl-fptr.c:221 +msgid "internal error: symidx out of range of fptr table" +msgstr "" + +#: elf/dl-load.c:372 +#, fuzzy +msgid "cannot allocate name record" +msgstr "Nepavyko išskirti atminties" + +#: elf/dl-load.c:474 elf/dl-load.c:582 elf/dl-load.c:667 elf/dl-load.c:780 +#, fuzzy +msgid "cannot create cache for search path" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: elf/dl-load.c:565 +msgid "cannot create RUNPATH/RPATH copy" +msgstr "" + +#: elf/dl-load.c:653 +#, fuzzy +msgid "cannot create search path array" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: elf/dl-load.c:864 +#, fuzzy +msgid "cannot stat shared object" +msgstr "nepavyko atverti bendrojo objekto failo" + +#: elf/dl-load.c:934 +#, fuzzy +msgid "cannot open zero fill device" +msgstr "nepavyko atverti duomenų failo „%s“" + +#: elf/dl-load.c:979 elf/dl-load.c:2224 +#, fuzzy +msgid "cannot create shared object descriptor" +msgstr "nepavyko užverti failo deskriptoriaus" + +#: elf/dl-load.c:998 elf/dl-load.c:1656 elf/dl-load.c:1748 +msgid "cannot read file data" +msgstr "nepavyko nuskaityti failo duomenų" + +#: elf/dl-load.c:1042 +msgid "ELF load command alignment not page-aligned" +msgstr "" + +#: elf/dl-load.c:1049 +msgid "ELF load command address/offset not properly aligned" +msgstr "" + +#: elf/dl-load.c:1132 +msgid "cannot allocate TLS data structures for initial thread" +msgstr "" + +#: elf/dl-load.c:1155 +msgid "cannot handle TLS data" +msgstr "nepavyko apdoroti TLS duomenų" + +#: elf/dl-load.c:1174 +msgid "object file has no loadable segments" +msgstr "objektiniame faile nėra įkeliamų segmentų" + +#: elf/dl-load.c:1210 +msgid "failed to map segment from shared object" +msgstr "" + +#: elf/dl-load.c:1236 +#, fuzzy +msgid "cannot dynamically load executable" +msgstr "\tne dinaminis paleidžiamasis failas" + +#: elf/dl-load.c:1298 +#, fuzzy +msgid "cannot change memory protections" +msgstr "nepavyko išskirti atminties programos antraštei" + +#: elf/dl-load.c:1317 +msgid "cannot map zero-fill pages" +msgstr "" + +#: elf/dl-load.c:1331 +msgid "object file has no dynamic section" +msgstr "objektiniame faile nėra dinaminės sekcijos" + +#: elf/dl-load.c:1354 +msgid "shared object cannot be dlopen()ed" +msgstr "bendrasis objektas negali būti atvertas su dlopen()" + +#: elf/dl-load.c:1367 +msgid "cannot allocate memory for program header" +msgstr "nepavyko išskirti atminties programos antraštei" + +#: elf/dl-load.c:1384 elf/dl-open.c:218 +#, fuzzy +msgid "invalid caller" +msgstr "netaisyklingas kvietėjas" + +#: elf/dl-load.c:1423 +msgid "cannot enable executable stack as shared object requires" +msgstr "" + +#: elf/dl-load.c:1436 +msgid "cannot close file descriptor" +msgstr "nepavyko užverti failo deskriptoriaus" + +#: elf/dl-load.c:1478 +msgid "cannot create searchlist" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: elf/dl-load.c:1656 +msgid "file too short" +msgstr "failas per trumpas" + +#: elf/dl-load.c:1685 +msgid "invalid ELF header" +msgstr "netaisyklinga ELF antraštė" + +#: elf/dl-load.c:1697 +#, fuzzy +msgid "ELF file data encoding not big-endian" +msgstr "ELF failo duomenų koduotė ne big-endian" + +#: elf/dl-load.c:1699 +#, fuzzy +msgid "ELF file data encoding not little-endian" +msgstr "ELF failo duomenų koduotė ne big-endian" + +#: elf/dl-load.c:1703 +msgid "ELF file version ident does not match current one" +msgstr "ELF failo versijos identifikatorius neatitinka esamo" + +#: elf/dl-load.c:1707 +msgid "ELF file OS ABI invalid" +msgstr "ELF failo OS ABI netaisyklingas" + +#: elf/dl-load.c:1709 +msgid "ELF file ABI version invalid" +msgstr "ELF failo ABI versioja netaisyklinga" + +#: elf/dl-load.c:1712 +#, fuzzy +msgid "internal error" +msgstr "Vardų paieškos vidinė klaida" + +#: elf/dl-load.c:1719 +msgid "ELF file version does not match current one" +msgstr "ELF failo versija neatitinka esamos" + +#: elf/dl-load.c:1727 +msgid "only ET_DYN and ET_EXEC can be loaded" +msgstr "" + +#: elf/dl-load.c:1733 +msgid "ELF file's phentsize not the expected size" +msgstr "" + +#: elf/dl-load.c:2240 +msgid "wrong ELF class: ELFCLASS64" +msgstr "klaidinga ELF klasė: ELFCLASS64" + +#: elf/dl-load.c:2241 +msgid "wrong ELF class: ELFCLASS32" +msgstr "klaidinga ELF klasė: ELFCLASS32" + +#: elf/dl-load.c:2244 +#, fuzzy +msgid "cannot open shared object file" +msgstr "nepavyko atverti bendrojo objekto failo" + +#: elf/dl-lookup.c:356 +msgid "relocation error" +msgstr "relokacijos klaida" + +#: elf/dl-lookup.c:384 +msgid "symbol lookup error" +msgstr "simbolio paieškos klaida" + +#: elf/dl-open.c:114 +msgid "cannot extend global scope" +msgstr "" + +#: elf/dl-open.c:512 +msgid "TLS generation counter wrapped! Please report this." +msgstr "TLS kartų skaitiklis persivertė! Prašytume apie tai pranešti." + +#: elf/dl-open.c:549 +#, fuzzy +msgid "invalid mode for dlopen()" +msgstr "netaisyklinga veiksena dlopen()" + +#: elf/dl-open.c:566 +msgid "no more namespaces available for dlmopen()" +msgstr "" + +#: elf/dl-open.c:579 +#, fuzzy +msgid "invalid target namespace in dlmopen()" +msgstr "netaisyklinga veiksena dlopen()" + +#: elf/dl-reloc.c:54 +#, fuzzy +msgid "cannot allocate memory in static TLS block" +msgstr "Nepavyko išskirti atminties" + +#: elf/dl-reloc.c:196 +msgid "cannot make segment writable for relocation" +msgstr "" + +#: elf/dl-reloc.c:277 +#, c-format +msgid "%s: no PLTREL found in object %s\n" +msgstr "%s: objekte %s nerasta PLTREL\n" + +#: elf/dl-reloc.c:288 +#, c-format +msgid "%s: out of memory to store relocation results for %s\n" +msgstr "" + +#: elf/dl-reloc.c:304 +msgid "cannot restore segment prot after reloc" +msgstr "" + +#: elf/dl-reloc.c:329 +msgid "cannot apply additional memory protection after relocation" +msgstr "" + +#: elf/dl-sym.c:162 +#, fuzzy +msgid "RTLD_NEXT used in code not dynamically loaded" +msgstr "RTLD_SELF panaudotas ne dinamiškai įkeltame kode" + +#: elf/dl-sysdep.c:469 elf/dl-sysdep.c:481 +#, fuzzy +msgid "cannot create capability list" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: elf/dl-tls.c:825 +#, fuzzy +msgid "cannot create TLS data structures" +msgstr "nepavyko apdoroti TLS duomenų" + +#: elf/dl-version.c:303 +#, fuzzy +msgid "cannot allocate version reference table" +msgstr "nepavyko išskirti atminties programos antraštei" + +#: elf/ldconfig.c:138 +msgid "Print cache" +msgstr "Spausdinti podėlį" + +#: elf/ldconfig.c:139 +msgid "Generate verbose messages" +msgstr "Generuoti išsamius pranešimus" + +#: elf/ldconfig.c:140 +msgid "Don't build cache" +msgstr "Nekurti podėlio" + +#: elf/ldconfig.c:141 +msgid "Don't generate links" +msgstr "Nekurti nuorodų" + +#: elf/ldconfig.c:142 +msgid "Change to and use ROOT as root directory" +msgstr "Naudoti ŠAKNĮ kaip šakninį aplanką" + +#: elf/ldconfig.c:142 +msgid "ROOT" +msgstr "ŠAKNIS" + +#: elf/ldconfig.c:143 +msgid "CACHE" +msgstr "PODĖLIS" + +#: elf/ldconfig.c:143 +msgid "Use CACHE as cache file" +msgstr "Naudoti PODĖLĮ kaip podėlio failą" + +#: elf/ldconfig.c:144 +msgid "CONF" +msgstr "KONF" + +#: elf/ldconfig.c:144 +msgid "Use CONF as configuration file" +msgstr "Naudoti KONF kaip konfigūracijos failą" + +#: elf/ldconfig.c:145 +msgid "Only process directories specified on the command line. Don't build cache." +msgstr "Apdoroti tik aplankus, nurodytus komandų eilutėje. Nekurti podėlio." + +#: elf/ldconfig.c:146 +msgid "Manually link individual libraries." +msgstr "Rankiniu būdu susaistyti (link) atskiras bibliotekas." + +#: elf/ldconfig.c:147 +msgid "FORMAT" +msgstr "FORMATAS" + +#: elf/ldconfig.c:147 +msgid "Format to use: new, old or compat (default)" +msgstr "Formatas: new (naujas), old (senas) arba compat (numatytasis)" + +#: elf/ldconfig.c:148 +msgid "Ignore auxiliary cache file" +msgstr "Ignoruoti pagalbinį podėlio failą" + +#: elf/ldconfig.c:156 +msgid "Configure Dynamic Linker Run Time Bindings." +msgstr "" + +#: elf/ldconfig.c:319 +#, fuzzy, c-format +msgid "Path `%s' given more than once" +msgstr "%s: laukas „%s“ apibrėžtas daugiau negu vieną kartą" + +#: elf/ldconfig.c:359 +#, c-format +msgid "%s is not a known library type" +msgstr "%s nėra žinomas bibliotekos tipas" + +#: elf/ldconfig.c:384 +#, fuzzy, c-format +msgid "Can't stat %s" +msgstr "Nepavyko rasti %s" + +#: elf/ldconfig.c:458 +#, fuzzy, c-format +msgid "Can't stat %s\n" +msgstr "Nepavyko susaistyti (link) %s su %s" + +#: elf/ldconfig.c:468 +#, fuzzy, c-format +msgid "%s is not a symbolic link\n" +msgstr "simbolinė nuoroda" + +#: elf/ldconfig.c:487 +#, fuzzy, c-format +msgid "Can't unlink %s" +msgstr "Nepavyko rasti %s" + +#: elf/ldconfig.c:493 +#, c-format +msgid "Can't link %s to %s" +msgstr "Nepavyko susaistyti (link) %s su %s" + +#: elf/ldconfig.c:499 +msgid " (changed)\n" +msgstr " (pakeista)\n" + +#: elf/ldconfig.c:501 +msgid " (SKIPPED)\n" +msgstr " (PRALEISTA)\n" + +#: elf/ldconfig.c:556 +#, c-format +msgid "Can't find %s" +msgstr "Nepavyko rasti %s" + +#: elf/ldconfig.c:572 elf/ldconfig.c:745 elf/ldconfig.c:793 elf/ldconfig.c:827 +#, fuzzy, c-format +msgid "Cannot lstat %s" +msgstr "%s: nepavyko perskaityti: %s" + +#: elf/ldconfig.c:579 +#, fuzzy, c-format +msgid "Ignored file %s since it is not a regular file." +msgstr "ne paprastas failas" + +#: elf/ldconfig.c:588 +#, c-format +msgid "No link created since soname could not be found for %s" +msgstr "" + +#: elf/ldconfig.c:671 +#, c-format +msgid "Can't open directory %s" +msgstr "Nepavyko atverti aplanko %s" + +#: elf/ldconfig.c:759 +#, fuzzy, c-format +msgid "Cannot stat %s" +msgstr "%s: nepavyko perskaityti: %s" + +#: elf/ldconfig.c:814 elf/readlib.c:91 +#, fuzzy, c-format +msgid "Input file %s not found.\n" +msgstr "Duomenų failas %s nerastas.\n" + +#: elf/ldconfig.c:888 +#, c-format +msgid "libc5 library %s in wrong directory" +msgstr "libc5 biblioteka %s ne tame aplanke" + +#: elf/ldconfig.c:891 +#, c-format +msgid "libc6 library %s in wrong directory" +msgstr "libc6 biblioteka %s ne tame aplanke" + +#: elf/ldconfig.c:894 +#, c-format +msgid "libc4 library %s in wrong directory" +msgstr "libc4 biblioteka %s ne tame aplanke" + +#: elf/ldconfig.c:922 +#, c-format +msgid "libraries %s and %s in directory %s have same soname but different type." +msgstr "" + +#: elf/ldconfig.c:1031 +#, c-format +msgid "Can't open configuration file %s" +msgstr "Nepavyko atverti konfigūracijos failo %s" + +#: elf/ldconfig.c:1095 +#, c-format +msgid "%s:%u: bad syntax in hwcap line" +msgstr "%s:%u: klaidinga sintaksė hwcap eilutėje" + +#: elf/ldconfig.c:1101 +#, c-format +msgid "%s:%u: hwcap index %lu above maximum %u" +msgstr "" + +#: elf/ldconfig.c:1108 elf/ldconfig.c:1116 +#, c-format +msgid "%s:%u: hwcap index %lu already defined as %s" +msgstr "" + +#: elf/ldconfig.c:1119 +#, c-format +msgid "%s:%u: duplicate hwcap %lu %s" +msgstr "" + +#: elf/ldconfig.c:1141 +#, c-format +msgid "need absolute file name for configuration file when using -r" +msgstr "" + +#: elf/ldconfig.c:1148 locale/programs/xmalloc.c:70 malloc/obstack.c:434 +#: malloc/obstack.c:436 posix/getconf.c:985 posix/getconf.c:1163 +#, c-format +msgid "memory exhausted" +msgstr "baigėsi atmintis" + +#: elf/ldconfig.c:1178 +#, fuzzy, c-format +msgid "%s:%u: cannot read directory %s" +msgstr "nepavyko atverti aplanko %s" + +#: elf/ldconfig.c:1223 +#, c-format +msgid "relative path `%s' used to build cache" +msgstr "" + +#: elf/ldconfig.c:1249 +#, fuzzy, c-format +msgid "Can't chdir to /" +msgstr "Nepavyko susaistyti (link) %s su %s" + +#: elf/ldconfig.c:1291 +#, c-format +msgid "Can't open cache file directory %s\n" +msgstr "Nepavyko atverti podėlio failo aplanko %s\n" + +#: elf/ldd.bash.in:43 +msgid "Written by %s and %s.\n" +msgstr "Parašė %s ir %s.\n" + +#: elf/ldd.bash.in:48 +msgid "" +"Usage: ldd [OPTION]... FILE...\n" +" --help print this help and exit\n" +" --version print version information and exit\n" +" -d, --data-relocs process data relocations\n" +" -r, --function-relocs process data and function relocations\n" +" -u, --unused print unused direct dependencies\n" +" -v, --verbose print all information\n" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>." +msgstr "" + +#: elf/ldd.bash.in:80 +msgid "ldd: option \\`$1' is ambiguous" +msgstr "ldd: parametras „$1“ dviprasmis" + +#: elf/ldd.bash.in:87 +msgid "unrecognized option" +msgstr "neatpažintas parametras" + +#: elf/ldd.bash.in:88 elf/ldd.bash.in:126 +#, fuzzy +msgid "Try \\`ldd --help' for more information." +msgstr "Pabandykite „memusage --help“, jei norite gauti daugiau informacijos." + +#: elf/ldd.bash.in:125 +msgid "missing file arguments" +msgstr "trūksta failo argumento" + +#. 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 "Toks failas ar aplankas neegzistuoja" + +#: elf/ldd.bash.in:151 inet/rcmd.c:483 +#, fuzzy +msgid "not regular file" +msgstr "paprastas failas" + +#: elf/ldd.bash.in:154 +msgid "warning: you do not have execution permission for" +msgstr "įspėjimas: neturite teisės paleisti" + +#: elf/ldd.bash.in:183 +msgid "\tnot a dynamic executable" +msgstr "\tne dinaminis paleidžiamasis failas" + +#: elf/ldd.bash.in:191 +msgid "exited with unknown exit code" +msgstr "išėjo su nežinomu išėjimo kodu" + +#: elf/ldd.bash.in:196 +msgid "error: you do not have read permission for" +msgstr "klaida: neturite skaitymo teisių" + +#: elf/readelflib.c:35 +#, c-format +msgid "file %s is truncated\n" +msgstr "" + +#: elf/readelflib.c:67 +#, c-format +msgid "%s is a 32 bit ELF file.\n" +msgstr "%s yra 32 bitų ELF failas.\n" + +#: elf/readelflib.c:69 +#, c-format +msgid "%s is a 64 bit ELF file.\n" +msgstr "%s yra 64 bitų ELF failas.\n" + +#: elf/readelflib.c:71 +#, c-format +msgid "Unknown ELFCLASS in file %s.\n" +msgstr "Netaisyklinga ELFCLASS faile %s.\n" + +#: elf/readelflib.c:78 +#, c-format +msgid "%s is not a shared object file (Type: %d).\n" +msgstr "" + +#: elf/readelflib.c:109 +#, c-format +msgid "more than one dynamic segment\n" +msgstr "daugiau negu vienas dinaminis segmentas\n" + +#: elf/readlib.c:97 +#, fuzzy, c-format +msgid "Cannot fstat file %s.\n" +msgstr "%s: nepavyko atverti laikinojo failo: %s" + +#: elf/readlib.c:108 +#, c-format +msgid "File %s is empty, not checked." +msgstr "Failas %s tuščias, todėl netikrintas." + +#: elf/readlib.c:114 +#, c-format +msgid "File %s is too small, not checked." +msgstr "Failas %s per mažas, todėl netikrintas." + +#: elf/readlib.c:124 +#, fuzzy, c-format +msgid "Cannot mmap file %s.\n" +msgstr "%s: nepavyko atverti laikinojo failo: %s" + +#: elf/readlib.c:162 +#, c-format +msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n" +msgstr "%s nėra ELF failas - magiškieji baitai failo pradžioje neteisingi.\n" + +#: elf/sprof.c:77 +msgid "Output selection:" +msgstr "" + +#: elf/sprof.c:79 +msgid "print list of count paths and their number of use" +msgstr "" + +#: elf/sprof.c:81 +msgid "generate flat profile with counts and ticks" +msgstr "" + +#: elf/sprof.c:82 +msgid "generate call graph" +msgstr "" + +#: elf/sprof.c:89 +msgid "" +"Read and display shared object profiling data.\vFor bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" + +#: elf/sprof.c:94 +msgid "SHOBJ [PROFDATA]" +msgstr "" + +#: elf/sprof.c:400 +#, fuzzy, c-format +msgid "failed to load shared object `%s'" +msgstr "nepavyko atverti bendrojo objekto failo" + +#: elf/sprof.c:409 +#, fuzzy, c-format +msgid "cannot create internal descriptors" +msgstr "nepavyko užverti failo deskriptoriaus" + +#: elf/sprof.c:528 +#, fuzzy, c-format +msgid "Reopening shared object `%s' failed" +msgstr "nepavyko atverti bendrojo objekto failo" + +#: elf/sprof.c:535 elf/sprof.c:629 +#, fuzzy, c-format +msgid "reading of section headers failed" +msgstr "%s pervardinimas į %s nesėkmingas" + +#: elf/sprof.c:543 elf/sprof.c:637 +#, c-format +msgid "reading of section header string table failed" +msgstr "" + +#: elf/sprof.c:569 +#, c-format +msgid "*** Cannot read debuginfo file name: %m\n" +msgstr "" + +#: elf/sprof.c:589 +#, fuzzy, c-format +msgid "cannot determine file name" +msgstr "nepavyko nuskaityti failo duomenų" + +#: elf/sprof.c:622 +#, fuzzy, c-format +msgid "reading of ELF header failed" +msgstr "%s pervardinimas į %s nesėkmingas" + +#: elf/sprof.c:658 +#, c-format +msgid "*** The file `%s' is stripped: no detailed analysis possible\n" +msgstr "" + +#: elf/sprof.c:688 +#, fuzzy, c-format +msgid "failed to load symbol data" +msgstr "failas per trumpas" + +#: elf/sprof.c:755 +#, fuzzy, c-format +msgid "cannot load profiling data" +msgstr "nepavyko nuskaityti failo duomenų" + +#: elf/sprof.c:764 +#, fuzzy, c-format +msgid "while stat'ing profiling data file" +msgstr "rašant duomenų bazės failą" + +#: elf/sprof.c:772 +#, c-format +msgid "profiling data file `%s' does not match shared object `%s'" +msgstr "" + +#: elf/sprof.c:783 +#, c-format +msgid "failed to mmap the profiling data file" +msgstr "" + +#: elf/sprof.c:791 +#, fuzzy, c-format +msgid "error while closing the profiling data file" +msgstr "klaida užveriant išvedimo failą" + +#: elf/sprof.c:800 elf/sprof.c:870 +#, fuzzy, c-format +msgid "cannot create internal descriptor" +msgstr "nepavyko užverti failo deskriptoriaus" + +#: elf/sprof.c:846 +#, c-format +msgid "`%s' is no correct profile data file for `%s'" +msgstr "" + +#: elf/sprof.c:1027 elf/sprof.c:1085 +#, fuzzy, c-format +msgid "cannot allocate symbol data" +msgstr "Nepavyko išskirti atminties" + +#: iconv/iconv_charmap.c:176 iconv/iconv_prog.c:316 +#, fuzzy, c-format +msgid "error while closing input `%s'" +msgstr "klaida užveriant išvedimo failą" + +#: iconv/iconv_charmap.c:450 +#, c-format +msgid "illegal input sequence at position %Zd" +msgstr "" + +#: iconv/iconv_charmap.c:469 iconv/iconv_prog.c:526 +#, c-format +msgid "incomplete character or shift sequence at end of buffer" +msgstr "" + +#: iconv/iconv_charmap.c:514 iconv/iconv_charmap.c:550 iconv/iconv_prog.c:569 +#: iconv/iconv_prog.c:605 +#, fuzzy, c-format +msgid "error while reading the input" +msgstr "klaida įkeliant bendrąsias bibliotekas" + +#: iconv/iconv_charmap.c:532 iconv/iconv_prog.c:587 +#, c-format +msgid "unable to allocate buffer for input" +msgstr "" + +#: iconv/iconv_prog.c:60 +msgid "Input/Output format specification:" +msgstr "" + +#: iconv/iconv_prog.c:61 +msgid "encoding of original text" +msgstr "originalaus teksto koduotė" + +#: iconv/iconv_prog.c:62 +#, fuzzy +msgid "encoding for output" +msgstr "originalaus teksto koduotė" + +#: iconv/iconv_prog.c:63 +msgid "Information:" +msgstr "Informacija:" + +#: iconv/iconv_prog.c:64 +msgid "list all known coded character sets" +msgstr "" + +#: iconv/iconv_prog.c:65 locale/programs/localedef.c:127 +msgid "Output control:" +msgstr "" + +#: iconv/iconv_prog.c:66 +msgid "omit invalid characters from output" +msgstr "" + +#: iconv/iconv_prog.c:67 +#, fuzzy +msgid "output file" +msgstr "Išvesti į failą duotu PAVADINIMU" + +#: iconv/iconv_prog.c:68 +#, fuzzy +msgid "suppress warnings" +msgstr "įspėjimas: " + +#: iconv/iconv_prog.c:69 +#, fuzzy +msgid "print progress information" +msgstr "Spausdinti daugiau informacijos" + +#: iconv/iconv_prog.c:74 +msgid "Convert encoding of given files from one encoding to another." +msgstr "" + +#: iconv/iconv_prog.c:78 +msgid "[FILE...]" +msgstr "[FAILAS...]" + +#: iconv/iconv_prog.c:200 +#, fuzzy, c-format +msgid "cannot open output file" +msgstr "%s: nepavyko atverti laikinojo failo: %s" + +#: iconv/iconv_prog.c:242 +#, c-format +msgid "conversions from `%s' and to `%s' are not supported" +msgstr "" + +#: iconv/iconv_prog.c:247 +#, fuzzy, c-format +msgid "conversion from `%s' is not supported" +msgstr "Operacija nepalaikoma" + +#: iconv/iconv_prog.c:254 +#, fuzzy, c-format +msgid "conversion to `%s' is not supported" +msgstr "Protokolas nepalaikomas" + +#: iconv/iconv_prog.c:258 +#, c-format +msgid "conversion from `%s' to `%s' is not supported" +msgstr "" + +#: iconv/iconv_prog.c:268 +#, c-format +msgid "failed to start conversion processing" +msgstr "" + +#: iconv/iconv_prog.c:362 +#, c-format +msgid "error while closing output file" +msgstr "klaida užveriant išvedimo failą" + +#: iconv/iconv_prog.c:471 iconv/iconv_prog.c:497 +#, c-format +msgid "conversion stopped due to problem in writing the output" +msgstr "" + +#: iconv/iconv_prog.c:522 +#, c-format +msgid "illegal input sequence at position %ld" +msgstr "" + +#: iconv/iconv_prog.c:530 +#, c-format +msgid "internal error (illegal descriptor)" +msgstr "vidinė klaida (nekorektiškas deskriptorius)" + +#: iconv/iconv_prog.c:533 +#, fuzzy, c-format +msgid "unknown iconv() error %d" +msgstr "nežinoma iconv() klaida %d" + +#: iconv/iconv_prog.c:779 +msgid "" +"The following list contain all the coded character sets known. This does\n" +"not necessarily mean that all combinations of these names can be used for\n" +"the FROM and TO command line parameters. One coded character set can be\n" +"listed with several different names (aliases).\n" +"\n" +" " +msgstr "" + +#: iconv/iconvconfig.c:110 +#, fuzzy +msgid "Create fastloading iconv module configuration file." +msgstr "Nepavyko atverti konfigūracijos failo %s" + +#: iconv/iconvconfig.c:114 +#, fuzzy +msgid "[DIR...]" +msgstr "[FAILAS...]" + +#: iconv/iconvconfig.c:127 +msgid "Prefix used for all file accesses" +msgstr "" + +#: iconv/iconvconfig.c:128 +msgid "Put output in FILE instead of installed location (--prefix does not apply to FILE)" +msgstr "" + +#: iconv/iconvconfig.c:132 +msgid "Do not search standard directories, only those on the command line" +msgstr "" + +#: iconv/iconvconfig.c:301 +#, c-format +msgid "Directory arguments required when using --nostdlib" +msgstr "" + +#: iconv/iconvconfig.c:343 locale/programs/localedef.c:291 +#, c-format +msgid "no output file produced because warnings were issued" +msgstr "" + +#: iconv/iconvconfig.c:429 +#, c-format +msgid "while inserting in search tree" +msgstr "" + +#: iconv/iconvconfig.c:1238 +#, fuzzy, c-format +msgid "cannot generate output file" +msgstr "%s: nepavyko atverti laikinojo failo: %s" + +#: inet/rcmd.c:157 +#, fuzzy +msgid "rcmd: Cannot allocate memory\n" +msgstr "Nepavyko išskirti atminties" + +#: inet/rcmd.c:172 +msgid "rcmd: socket: All ports in use\n" +msgstr "" + +#: inet/rcmd.c:200 +#, c-format +msgid "connect to address %s: " +msgstr "jungtis prie adreso %s: " + +#: inet/rcmd.c:213 +#, c-format +msgid "Trying %s...\n" +msgstr "Bandoma %s...\n" + +#: inet/rcmd.c:249 +#, c-format +msgid "rcmd: write (setting up stderr): %m\n" +msgstr "" + +#: inet/rcmd.c:265 +#, c-format +msgid "rcmd: poll (setting up stderr): %m\n" +msgstr "" + +#: inet/rcmd.c:268 +msgid "poll: protocol failure in circuit setup\n" +msgstr "" + +#: inet/rcmd.c:301 +msgid "socket: protocol failure in circuit setup\n" +msgstr "" + +#: inet/rcmd.c:325 +#, c-format +msgid "rcmd: %s: short read" +msgstr "" + +#: inet/rcmd.c:481 +msgid "lstat failed" +msgstr "" + +#: inet/rcmd.c:488 +#, fuzzy +msgid "cannot open" +msgstr "nepavyko atverti" + +#: inet/rcmd.c:490 +msgid "fstat failed" +msgstr "" + +#: inet/rcmd.c:492 +#, fuzzy +msgid "bad owner" +msgstr "blogas jungtukas" + +#: inet/rcmd.c:494 +msgid "writeable by other than owner" +msgstr "" + +#: inet/rcmd.c:496 +msgid "hard linked somewhere" +msgstr "" + +#: inet/ruserpass.c:170 inet/ruserpass.c:193 +msgid "out of memory" +msgstr "baigėsi atmintis" + +#: inet/ruserpass.c:184 +msgid "Error: .netrc file is readable by others." +msgstr "" + +#: inet/ruserpass.c:185 +msgid "Remove password or make file unreadable by others." +msgstr "" + +#: inet/ruserpass.c:277 +#, fuzzy, c-format +msgid "Unknown .netrc keyword %s" +msgstr "Nežinoma klaida " + +#: libidn/nfkc.c:464 +#, fuzzy +msgid "Character out of range for UTF-8" +msgstr "Kanalo numeris už ribų" + +#: locale/programs/charmap-dir.c:59 +#, fuzzy, c-format +msgid "cannot read character map directory `%s'" +msgstr "nepavyko atverti aplanko %s" + +#: locale/programs/charmap.c:138 +#, fuzzy, c-format +msgid "character map file `%s' not found" +msgstr "Duomenų failas %s nerastas.\n" + +#: locale/programs/charmap.c:195 +#, c-format +msgid "default character map file `%s' not found" +msgstr "" + +#: locale/programs/charmap.c:258 +#, c-format +msgid "character map `%s' is not ASCII compatible, locale not ISO C compliant\n" +msgstr "" + +#: locale/programs/charmap.c:337 +#, c-format +msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n" +msgstr "" + +#: locale/programs/charmap.c:357 locale/programs/charmap.c:374 +#: locale/programs/repertoire.c:174 +#, fuzzy, c-format +msgid "syntax error in prolog: %s" +msgstr "sintaksės klaida prologe: %s" + +#: locale/programs/charmap.c:358 +#, fuzzy +msgid "invalid definition" +msgstr "%s: netaisyklingas parametras --%c\n" + +#: locale/programs/charmap.c:375 locale/programs/locfile.c:126 +#: locale/programs/locfile.c:153 locale/programs/repertoire.c:175 +#, fuzzy +msgid "bad argument" +msgstr "blogas argumentas" + +#: locale/programs/charmap.c:403 +#, c-format +msgid "duplicate definition of <%s>" +msgstr "kartotinis <%s> apibrėžimas" + +#: locale/programs/charmap.c:410 +#, c-format +msgid "value for <%s> must be 1 or greater" +msgstr "<%s> reikšmė turi būti 1 arba didesnė" + +#: locale/programs/charmap.c:422 +#, c-format +msgid "value of <%s> must be greater or equal than the value of <%s>" +msgstr "<%s> reikšmė turi būti lygi arba didesnė už <%s> reikšmę" + +#: locale/programs/charmap.c:445 locale/programs/repertoire.c:183 +#, c-format +msgid "argument to <%s> must be a single character" +msgstr "<%s> argumentas turi būti vienas simbolis" + +#: locale/programs/charmap.c:471 +msgid "character sets with locking states are not supported" +msgstr "" + +#: locale/programs/charmap.c:498 locale/programs/charmap.c:552 +#: locale/programs/charmap.c:584 locale/programs/charmap.c:678 +#: locale/programs/charmap.c:733 locale/programs/charmap.c:774 +#: locale/programs/charmap.c:815 +#, fuzzy, c-format +msgid "syntax error in %s definition: %s" +msgstr "sintaksės klaida prologe: %s" + +#: locale/programs/charmap.c:499 locale/programs/charmap.c:679 +#: locale/programs/charmap.c:775 locale/programs/repertoire.c:230 +msgid "no symbolic name given" +msgstr "neduotas joks simbolinis vardas" + +#: locale/programs/charmap.c:553 +msgid "invalid encoding given" +msgstr "nurodyta netaisyklinga koduotė" + +#: locale/programs/charmap.c:562 +msgid "too few bytes in character encoding" +msgstr "per mažai baitų simbolio koduotėje" + +#: locale/programs/charmap.c:564 +msgid "too many bytes in character encoding" +msgstr "per daug baitų simbolio koduotėje" + +#: locale/programs/charmap.c:586 locale/programs/charmap.c:734 +#: locale/programs/charmap.c:817 locale/programs/repertoire.c:296 +#, fuzzy +msgid "no symbolic name given for end of range" +msgstr "neduotas joks simbolinis vardas" + +#: locale/programs/charmap.c:610 locale/programs/ld-address.c:600 +#: locale/programs/ld-collate.c:2767 locale/programs/ld-collate.c:3924 +#: locale/programs/ld-ctype.c:2232 locale/programs/ld-ctype.c:2984 +#: locale/programs/ld-identification.c:452 +#: locale/programs/ld-measurement.c:238 locale/programs/ld-messages.c:332 +#: locale/programs/ld-monetary.c:943 locale/programs/ld-name.c:307 +#: locale/programs/ld-numeric.c:368 locale/programs/ld-paper.c:241 +#: locale/programs/ld-telephone.c:313 locale/programs/ld-time.c:1221 +#: locale/programs/repertoire.c:313 +#, c-format +msgid "%1$s: definition does not end with `END %1$s'" +msgstr "%1$s: apibrėžimas neužbaigtas „END %1$s“" + +#: locale/programs/charmap.c:643 +msgid "only WIDTH definitions are allowed to follow the CHARMAP definition" +msgstr "" + +#: locale/programs/charmap.c:651 locale/programs/charmap.c:714 +#, c-format +msgid "value for %s must be an integer" +msgstr "%s reikšmė turi būti sveikasis skaičius" + +#: locale/programs/charmap.c:842 +#, c-format +msgid "%s: error in state machine" +msgstr "%s: klaida būsenų automate" + +#: locale/programs/charmap.c:850 locale/programs/ld-address.c:616 +#: locale/programs/ld-collate.c:2764 locale/programs/ld-collate.c:4115 +#: locale/programs/ld-ctype.c:2229 locale/programs/ld-ctype.c:3001 +#: locale/programs/ld-identification.c:468 +#: locale/programs/ld-measurement.c:254 locale/programs/ld-messages.c:348 +#: locale/programs/ld-monetary.c:959 locale/programs/ld-name.c:323 +#: locale/programs/ld-numeric.c:384 locale/programs/ld-paper.c:257 +#: locale/programs/ld-telephone.c:329 locale/programs/ld-time.c:1237 +#: locale/programs/locfile.c:826 locale/programs/repertoire.c:324 +#, fuzzy, c-format +msgid "%s: premature end of file" +msgstr "%s: failo pabaiga" + +#: locale/programs/charmap.c:869 locale/programs/charmap.c:880 +#, c-format +msgid "unknown character `%s'" +msgstr "nežinomas simbolis „%s“" + +#: locale/programs/charmap.c:888 +#, c-format +msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d" +msgstr "" + +#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:3047 +#: locale/programs/repertoire.c:419 +#, fuzzy +msgid "invalid names for character range" +msgstr "netaisyklingas kabučių simbolis" + +#: locale/programs/charmap.c:1005 locale/programs/repertoire.c:431 +msgid "hexadecimal range format should use only capital characters" +msgstr "" + +#: locale/programs/charmap.c:1023 locale/programs/repertoire.c:449 +#, c-format +msgid "<%s> and <%s> are invalid names for range" +msgstr "" + +#: locale/programs/charmap.c:1029 locale/programs/repertoire.c:456 +msgid "upper limit in range is smaller than lower limit" +msgstr "viršutinė riba mažesnė už apatinę ribą" + +#: locale/programs/charmap.c:1087 +msgid "resulting bytes for range not representable." +msgstr "" + +#: locale/programs/ld-address.c:133 locale/programs/ld-collate.c:1556 +#: locale/programs/ld-ctype.c:420 locale/programs/ld-identification.c:133 +#: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97 +#: locale/programs/ld-monetary.c:194 locale/programs/ld-name.c:94 +#: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91 +#: locale/programs/ld-telephone.c:94 locale/programs/ld-time.c:159 +#, c-format +msgid "No definition for %s category found" +msgstr "Nerastas %s kategorijos apibrėžimas" + +#: locale/programs/ld-address.c:144 locale/programs/ld-address.c:182 +#: locale/programs/ld-address.c:200 locale/programs/ld-address.c:229 +#: locale/programs/ld-address.c:301 locale/programs/ld-address.c:320 +#: locale/programs/ld-address.c:333 locale/programs/ld-identification.c:146 +#: locale/programs/ld-measurement.c:105 locale/programs/ld-monetary.c:206 +#: locale/programs/ld-monetary.c:250 locale/programs/ld-monetary.c:266 +#: locale/programs/ld-monetary.c:278 locale/programs/ld-name.c:105 +#: locale/programs/ld-name.c:142 locale/programs/ld-numeric.c:112 +#: locale/programs/ld-numeric.c:126 locale/programs/ld-paper.c:102 +#: locale/programs/ld-paper.c:111 locale/programs/ld-telephone.c:105 +#: locale/programs/ld-telephone.c:162 locale/programs/ld-time.c:175 +#: locale/programs/ld-time.c:196 +#, fuzzy, c-format +msgid "%s: field `%s' not defined" +msgstr "simbolis „%s“ neapibrėžtas" + +#: locale/programs/ld-address.c:156 locale/programs/ld-address.c:208 +#: locale/programs/ld-address.c:238 locale/programs/ld-address.c:276 +#: locale/programs/ld-name.c:117 locale/programs/ld-telephone.c:117 +#, c-format +msgid "%s: field `%s' must not be empty" +msgstr "" + +#: locale/programs/ld-address.c:168 +#, c-format +msgid "%s: invalid escape `%%%c' sequence in field `%s'" +msgstr "" + +#: locale/programs/ld-address.c:219 +#, fuzzy, c-format +msgid "%s: terminology language code `%s' not defined" +msgstr "simbolis „%s“ neapibrėžtas" + +#: locale/programs/ld-address.c:244 +#, fuzzy, c-format +msgid "%s: field `%s' must not be defined" +msgstr "simbolis „%s“ neapibrėžtas" + +#: locale/programs/ld-address.c:258 locale/programs/ld-address.c:287 +#, fuzzy, c-format +msgid "%s: language abbreviation `%s' not defined" +msgstr "simbolis „%s“ neapibrėžtas" + +#: locale/programs/ld-address.c:265 locale/programs/ld-address.c:293 +#: locale/programs/ld-address.c:327 locale/programs/ld-address.c:339 +#, c-format +msgid "%s: `%s' value does not match `%s' value" +msgstr "" + +#: locale/programs/ld-address.c:312 +#, c-format +msgid "%s: numeric country code `%d' not valid" +msgstr "" + +#: locale/programs/ld-address.c:508 locale/programs/ld-address.c:545 +#: locale/programs/ld-address.c:583 locale/programs/ld-ctype.c:2608 +#: locale/programs/ld-identification.c:364 +#: locale/programs/ld-measurement.c:221 locale/programs/ld-messages.c:301 +#: locale/programs/ld-monetary.c:701 locale/programs/ld-monetary.c:736 +#: locale/programs/ld-monetary.c:777 locale/programs/ld-name.c:280 +#: locale/programs/ld-numeric.c:263 locale/programs/ld-paper.c:224 +#: locale/programs/ld-telephone.c:288 locale/programs/ld-time.c:1126 +#: locale/programs/ld-time.c:1168 +#, c-format +msgid "%s: field `%s' declared more than once" +msgstr "%s: laukas „%s“ apibrėžtas daugiau negu vieną kartą" + +#: locale/programs/ld-address.c:512 locale/programs/ld-address.c:550 +#: locale/programs/ld-identification.c:368 locale/programs/ld-messages.c:311 +#: locale/programs/ld-monetary.c:705 locale/programs/ld-monetary.c:740 +#: locale/programs/ld-name.c:284 locale/programs/ld-numeric.c:267 +#: locale/programs/ld-telephone.c:292 locale/programs/ld-time.c:1020 +#: locale/programs/ld-time.c:1089 locale/programs/ld-time.c:1131 +#, c-format +msgid "%s: unknown character in field `%s'" +msgstr "%s: nežinomas simbolis lauke „%s“" + +#: locale/programs/ld-address.c:597 locale/programs/ld-collate.c:3922 +#: locale/programs/ld-ctype.c:2981 locale/programs/ld-identification.c:449 +#: locale/programs/ld-measurement.c:235 locale/programs/ld-messages.c:330 +#: locale/programs/ld-monetary.c:941 locale/programs/ld-name.c:305 +#: locale/programs/ld-numeric.c:366 locale/programs/ld-paper.c:239 +#: locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1219 +#, c-format +msgid "%s: incomplete `END' line" +msgstr "%s: nepilna „END“ eilutė" + +#: locale/programs/ld-address.c:607 locale/programs/ld-collate.c:542 +#: locale/programs/ld-collate.c:594 locale/programs/ld-collate.c:890 +#: locale/programs/ld-collate.c:903 locale/programs/ld-collate.c:2733 +#: locale/programs/ld-collate.c:2754 locale/programs/ld-collate.c:4105 +#: locale/programs/ld-ctype.c:1960 locale/programs/ld-ctype.c:2219 +#: locale/programs/ld-ctype.c:2806 locale/programs/ld-ctype.c:2992 +#: locale/programs/ld-identification.c:459 +#: locale/programs/ld-measurement.c:245 locale/programs/ld-messages.c:339 +#: locale/programs/ld-monetary.c:950 locale/programs/ld-name.c:314 +#: locale/programs/ld-numeric.c:375 locale/programs/ld-paper.c:248 +#: locale/programs/ld-telephone.c:320 locale/programs/ld-time.c:1228 +#, c-format +msgid "%s: syntax error" +msgstr "%s: sintaksės klaida" + +#: locale/programs/ld-collate.c:417 +#, c-format +msgid "`%.*s' already defined in charmap" +msgstr "" + +#: locale/programs/ld-collate.c:426 +#, c-format +msgid "`%.*s' already defined in repertoire" +msgstr "" + +#: locale/programs/ld-collate.c:433 +#, c-format +msgid "`%.*s' already defined as collating symbol" +msgstr "" + +#: locale/programs/ld-collate.c:440 +#, c-format +msgid "`%.*s' already defined as collating element" +msgstr "" + +#: locale/programs/ld-collate.c:471 locale/programs/ld-collate.c:497 +#, c-format +msgid "%s: `forward' and `backward' are mutually excluding each other" +msgstr "" + +#: locale/programs/ld-collate.c:481 locale/programs/ld-collate.c:507 +#: locale/programs/ld-collate.c:523 +#, c-format +msgid "%s: `%s' mentioned more than once in definition of weight %d" +msgstr "" + +#: locale/programs/ld-collate.c:579 +#, c-format +msgid "%s: too many rules; first entry only had %d" +msgstr "" + +#: locale/programs/ld-collate.c:615 +#, c-format +msgid "%s: not enough sorting rules" +msgstr "" + +#: locale/programs/ld-collate.c:780 +#, c-format +msgid "%s: empty weight string not allowed" +msgstr "" + +#: locale/programs/ld-collate.c:875 +#, c-format +msgid "%s: weights must use the same ellipsis symbol as the name" +msgstr "" + +#: locale/programs/ld-collate.c:931 +#, fuzzy, c-format +msgid "%s: too many values" +msgstr "%s: Per daug argumentų\n" + +#: locale/programs/ld-collate.c:1051 locale/programs/ld-collate.c:1226 +#, c-format +msgid "order for `%.*s' already defined at %s:%Zu" +msgstr "" + +#: locale/programs/ld-collate.c:1101 +#, c-format +msgid "%s: the start and the end symbol of a range must stand for characters" +msgstr "" + +#: locale/programs/ld-collate.c:1128 +#, c-format +msgid "%s: byte sequences of first and last character must have the same length" +msgstr "" + +#: locale/programs/ld-collate.c:1170 +#, c-format +msgid "%s: byte sequence of first character of range is not lower than that of the last character" +msgstr "" + +#: locale/programs/ld-collate.c:1295 +#, c-format +msgid "%s: symbolic range ellipsis must not directly follow `order_start'" +msgstr "" + +#: locale/programs/ld-collate.c:1299 +#, c-format +msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'" +msgstr "" + +#: locale/programs/ld-collate.c:1319 locale/programs/ld-ctype.c:1477 +#, c-format +msgid "`%s' and `%.*s' are not valid names for symbolic range" +msgstr "" + +#: locale/programs/ld-collate.c:1369 locale/programs/ld-collate.c:3858 +#, c-format +msgid "%s: order for `%.*s' already defined at %s:%Zu" +msgstr "" + +#: locale/programs/ld-collate.c:1378 +#, fuzzy, c-format +msgid "%s: `%s' must be a character" +msgstr "„%s“: trūksta formato simbolio" + +#: locale/programs/ld-collate.c:1573 +#, c-format +msgid "%s: `position' must be used for a specific level in all sections or none" +msgstr "" + +#: locale/programs/ld-collate.c:1598 +#, c-format +msgid "symbol `%s' not defined" +msgstr "simbolis „%s“ neapibrėžtas" + +#: locale/programs/ld-collate.c:1674 locale/programs/ld-collate.c:1780 +#, c-format +msgid "symbol `%s' has the same encoding as" +msgstr "" + +#: locale/programs/ld-collate.c:1678 locale/programs/ld-collate.c:1784 +#, c-format +msgid "symbol `%s'" +msgstr "simbolis „%s“" + +#: locale/programs/ld-collate.c:1826 +#, c-format +msgid "no definition of `UNDEFINED'" +msgstr "" + +#: locale/programs/ld-collate.c:1855 +#, c-format +msgid "too many errors; giving up" +msgstr "per daug klaidų; pasiduodu" + +#: locale/programs/ld-collate.c:2659 locale/programs/ld-collate.c:4044 +#, fuzzy, c-format +msgid "%s: nested conditionals not supported" +msgstr "Operacija nepalaikoma" + +#: locale/programs/ld-collate.c:2677 +#, c-format +msgid "%s: more then one 'else'" +msgstr "" + +#: locale/programs/ld-collate.c:2852 +#, fuzzy, c-format +msgid "%s: duplicate definition of `%s'" +msgstr "kartotinis <%s> apibrėžimas" + +#: locale/programs/ld-collate.c:2888 +#, fuzzy, c-format +msgid "%s: duplicate declaration of section `%s'" +msgstr "kartotinis <%s> apibrėžimas" + +#: locale/programs/ld-collate.c:3027 +#, fuzzy, c-format +msgid "%s: unknown character in collating symbol name" +msgstr "%s: nežinomas simbolis lauke „%s“" + +#: locale/programs/ld-collate.c:3159 +#, fuzzy, c-format +msgid "%s: unknown character in equivalent definition name" +msgstr "%s: nežinomas simbolis lauke „%s“" + +#: locale/programs/ld-collate.c:3172 +#, fuzzy, c-format +msgid "%s: unknown character in equivalent definition value" +msgstr "%s: nežinomas simbolis lauke „%s“" + +#: locale/programs/ld-collate.c:3182 +#, c-format +msgid "%s: unknown symbol `%s' in equivalent definition" +msgstr "" + +#: locale/programs/ld-collate.c:3191 +#, fuzzy +msgid "error while adding equivalent collating symbol" +msgstr "klaida įkeliant bendrąsias bibliotekas" + +#: locale/programs/ld-collate.c:3221 +#, fuzzy, c-format +msgid "duplicate definition of script `%s'" +msgstr "kartotinis <%s> apibrėžimas" + +#: locale/programs/ld-collate.c:3269 +#, fuzzy, c-format +msgid "%s: unknown section name `%.*s'" +msgstr "„%s“: nežinomas funkcijos pavadinimas" + +#: locale/programs/ld-collate.c:3298 +#, c-format +msgid "%s: multiple order definitions for section `%s'" +msgstr "" + +#: locale/programs/ld-collate.c:3326 +#, fuzzy, c-format +msgid "%s: invalid number of sorting rules" +msgstr "%s: netaisyklingas argumentas" + +#: locale/programs/ld-collate.c:3353 +#, c-format +msgid "%s: multiple order definitions for unnamed section" +msgstr "" + +#: locale/programs/ld-collate.c:3407 locale/programs/ld-collate.c:3537 +#: locale/programs/ld-collate.c:3900 +#, fuzzy, c-format +msgid "%s: missing `order_end' keyword" +msgstr "%s: trūksta dvitaškio skirtuko" + +#: locale/programs/ld-collate.c:3470 +#, c-format +msgid "%s: order for collating symbol %.*s not yet defined" +msgstr "" + +#: locale/programs/ld-collate.c:3488 +#, c-format +msgid "%s: order for collating element %.*s not yet defined" +msgstr "" + +#: locale/programs/ld-collate.c:3499 +#, c-format +msgid "%s: cannot reorder after %.*s: symbol not known" +msgstr "" + +#: locale/programs/ld-collate.c:3551 locale/programs/ld-collate.c:3912 +#, fuzzy, c-format +msgid "%s: missing `reorder-end' keyword" +msgstr "%s: trūksta dvitaškio skirtuko" + +#: locale/programs/ld-collate.c:3585 locale/programs/ld-collate.c:3783 +#, fuzzy, c-format +msgid "%s: section `%.*s' not known" +msgstr "Duomenų failas %s nerastas.\n" + +#: locale/programs/ld-collate.c:3650 +#, c-format +msgid "%s: bad symbol <%.*s>" +msgstr "" + +#: locale/programs/ld-collate.c:3846 +#, c-format +msgid "%s: cannot have `%s' as end of ellipsis range" +msgstr "" + +#: locale/programs/ld-collate.c:3896 +#, c-format +msgid "%s: empty category description not allowed" +msgstr "" + +#: locale/programs/ld-collate.c:3915 +#, c-format +msgid "%s: missing `reorder-sections-end' keyword" +msgstr "" + +#: locale/programs/ld-collate.c:4077 +#, c-format +msgid "%s: '%s' without matching 'ifdef' or 'ifndef'" +msgstr "" + +#: locale/programs/ld-collate.c:4095 +#, c-format +msgid "%s: 'endif' without matching 'ifdef' or 'ifndef'" +msgstr "" + +#: locale/programs/ld-ctype.c:439 +#, c-format +msgid "No character set name specified in charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:468 +#, c-format +msgid "character L'\\u%0*x' in class `%s' must be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:483 +#, c-format +msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:497 locale/programs/ld-ctype.c:555 +#, c-format +msgid "internal error in %s, line %u" +msgstr "" + +#: locale/programs/ld-ctype.c:526 +#, c-format +msgid "character '%s' in class `%s' must be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:542 +#, c-format +msgid "character '%s' in class `%s' must not be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:572 locale/programs/ld-ctype.c:610 +#, c-format +msgid "<SP> character not in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:584 locale/programs/ld-ctype.c:621 +#, c-format +msgid "<SP> character must not be in class `%s'" +msgstr "" + +#: locale/programs/ld-ctype.c:599 +#, c-format +msgid "character <SP> not defined in character map" +msgstr "" + +#: locale/programs/ld-ctype.c:714 +#, c-format +msgid "`digit' category has not entries in groups of ten" +msgstr "" + +#: locale/programs/ld-ctype.c:763 +#, c-format +msgid "no input digits defined and none of the standard names in the charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:828 +#, c-format +msgid "not all characters used in `outdigit' are available in the charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:845 +#, c-format +msgid "not all characters used in `outdigit' are available in the repertoire" +msgstr "" + +#: locale/programs/ld-ctype.c:1245 +#, c-format +msgid "character class `%s' already defined" +msgstr "" + +#: locale/programs/ld-ctype.c:1251 +#, c-format +msgid "implementation limit: no more than %Zd character classes allowed" +msgstr "" + +#: locale/programs/ld-ctype.c:1277 +#, c-format +msgid "character map `%s' already defined" +msgstr "" + +#: locale/programs/ld-ctype.c:1283 +#, c-format +msgid "implementation limit: no more than %d character maps allowed" +msgstr "" + +#: locale/programs/ld-ctype.c:1548 locale/programs/ld-ctype.c:1673 +#: locale/programs/ld-ctype.c:1779 locale/programs/ld-ctype.c:2471 +#: locale/programs/ld-ctype.c:3467 +#, fuzzy, c-format +msgid "%s: field `%s' does not contain exactly ten entries" +msgstr "%s: laukas „%s“ apibrėžtas daugiau negu vieną kartą" + +#: locale/programs/ld-ctype.c:1576 locale/programs/ld-ctype.c:2150 +#, c-format +msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>" +msgstr "" + +#: locale/programs/ld-ctype.c:1703 +msgid "start and end character sequence of range must have the same length" +msgstr "" + +#: locale/programs/ld-ctype.c:1710 +msgid "to-value character sequence is smaller than from-value sequence" +msgstr "" + +#: locale/programs/ld-ctype.c:2070 locale/programs/ld-ctype.c:2121 +msgid "premature end of `translit_ignore' definition" +msgstr "" + +#: locale/programs/ld-ctype.c:2076 locale/programs/ld-ctype.c:2127 +#: locale/programs/ld-ctype.c:2169 +msgid "syntax error" +msgstr "sintaksės klaida" + +#: locale/programs/ld-ctype.c:2303 +#, fuzzy, c-format +msgid "%s: syntax error in definition of new character class" +msgstr "sintaksės klaida %s aprašyme: %s" + +#: locale/programs/ld-ctype.c:2318 +#, c-format +msgid "%s: syntax error in definition of new character map" +msgstr "" + +#: locale/programs/ld-ctype.c:2493 +msgid "ellipsis range must be marked by two operands of same type" +msgstr "" + +#: locale/programs/ld-ctype.c:2502 +msgid "with symbolic name range values the absolute ellipsis `...' must not be used" +msgstr "" + +#: locale/programs/ld-ctype.c:2517 +msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'" +msgstr "" + +#: locale/programs/ld-ctype.c:2531 +msgid "with character code range values one must use the absolute ellipsis `...'" +msgstr "" + +#: locale/programs/ld-ctype.c:2682 +#, fuzzy, c-format +msgid "duplicated definition for mapping `%s'" +msgstr "kartotinis <%s> apibrėžimas" + +#: locale/programs/ld-ctype.c:2768 locale/programs/ld-ctype.c:2912 +#, fuzzy, c-format +msgid "%s: `translit_start' section does not end with `translit_end'" +msgstr "%1$s: apibrėžimas neužbaigtas „END %1$s“" + +#: locale/programs/ld-ctype.c:2863 +#, fuzzy, c-format +msgid "%s: duplicate `default_missing' definition" +msgstr "pakartotinis rinkinio apibrėžimas" + +#: locale/programs/ld-ctype.c:2868 +msgid "previous definition was here" +msgstr "" + +#: locale/programs/ld-ctype.c:2890 +#, c-format +msgid "%s: no representable `default_missing' definition found" +msgstr "" + +#: locale/programs/ld-ctype.c:3043 locale/programs/ld-ctype.c:3127 +#: locale/programs/ld-ctype.c:3147 locale/programs/ld-ctype.c:3168 +#: locale/programs/ld-ctype.c:3189 locale/programs/ld-ctype.c:3210 +#: locale/programs/ld-ctype.c:3231 locale/programs/ld-ctype.c:3271 +#: locale/programs/ld-ctype.c:3292 locale/programs/ld-ctype.c:3359 +#: locale/programs/ld-ctype.c:3401 locale/programs/ld-ctype.c:3426 +#, c-format +msgid "%s: character `%s' not defined while needed as default value" +msgstr "" + +#: locale/programs/ld-ctype.c:3048 locale/programs/ld-ctype.c:3132 +#: locale/programs/ld-ctype.c:3152 locale/programs/ld-ctype.c:3173 +#: locale/programs/ld-ctype.c:3194 locale/programs/ld-ctype.c:3215 +#: locale/programs/ld-ctype.c:3236 locale/programs/ld-ctype.c:3276 +#: locale/programs/ld-ctype.c:3297 locale/programs/ld-ctype.c:3364 +#, c-format +msgid "%s: character `%s' in charmap not representable with one byte" +msgstr "" + +#: locale/programs/ld-ctype.c:3408 locale/programs/ld-ctype.c:3433 +#, c-format +msgid "%s: character `%s' needed as default value not representable with one byte" +msgstr "" + +#: locale/programs/ld-ctype.c:3489 +#, c-format +msgid "no output digits defined and none of the standard names in the charmap" +msgstr "" + +#: locale/programs/ld-ctype.c:3780 +#, c-format +msgid "%s: transliteration data from locale `%s' not available" +msgstr "" + +#: locale/programs/ld-ctype.c:3881 +#, c-format +msgid "%s: table for class \"%s\": %lu bytes\n" +msgstr "" + +#: locale/programs/ld-ctype.c:3950 +#, fuzzy, c-format +msgid "%s: table for map \"%s\": %lu bytes\n" +msgstr "%s: nepavyko atverti %s: %m\n" + +#: locale/programs/ld-ctype.c:4083 +#, c-format +msgid "%s: table for width: %lu bytes\n" +msgstr "" + +#: locale/programs/ld-identification.c:170 +#, fuzzy, c-format +msgid "%s: no identification for category `%s'" +msgstr "Nerastas %s kategorijos apibrėžimas" + +#: locale/programs/ld-identification.c:435 +#, fuzzy, c-format +msgid "%s: duplicate category version definition" +msgstr "pakartotinis rinkinio apibrėžimas" + +#: locale/programs/ld-measurement.c:113 +#, fuzzy, c-format +msgid "%s: invalid value for field `%s'" +msgstr "%s: per mažai reikšmių laukui „%s“" + +#: locale/programs/ld-messages.c:114 locale/programs/ld-messages.c:148 +#, fuzzy, c-format +msgid "%s: field `%s' undefined" +msgstr "simbolis „%s“ neapibrėžtas" + +#: locale/programs/ld-messages.c:121 locale/programs/ld-messages.c:155 +#: locale/programs/ld-monetary.c:256 locale/programs/ld-numeric.c:118 +#, fuzzy, c-format +msgid "%s: value for field `%s' must not be an empty string" +msgstr "%s reikšmė turi būti sveikasis skaičius" + +#: locale/programs/ld-messages.c:137 locale/programs/ld-messages.c:171 +#, fuzzy, c-format +msgid "%s: no correct regular expression for field `%s': %s" +msgstr "%s: nežinomas simbolis lauke „%s“" + +#: locale/programs/ld-monetary.c:224 +#, c-format +msgid "%s: value of field `int_curr_symbol' has wrong length" +msgstr "" + +#: locale/programs/ld-monetary.c:237 +#, c-format +msgid "%s: value of field `int_curr_symbol' does not correspond to a valid name in ISO 4217" +msgstr "" + +#: locale/programs/ld-monetary.c:285 locale/programs/ld-monetary.c:315 +#, fuzzy, c-format +msgid "%s: value for field `%s' must be in range %d...%d" +msgstr "%s reikšmė turi būti sveikasis skaičius" + +#: locale/programs/ld-monetary.c:747 locale/programs/ld-numeric.c:274 +#, fuzzy, c-format +msgid "%s: value for field `%s' must be a single character" +msgstr "<%s> argumentas turi būti vienas simbolis" + +#: locale/programs/ld-monetary.c:844 locale/programs/ld-numeric.c:318 +#, c-format +msgid "%s: `-1' must be last entry in `%s' field" +msgstr "" + +#: locale/programs/ld-monetary.c:866 locale/programs/ld-numeric.c:335 +#, fuzzy, c-format +msgid "%s: values for field `%s' must be smaller than 127" +msgstr "%s: per mažai reikšmių laukui „%s“" + +#: locale/programs/ld-monetary.c:909 +msgid "conversion rate value cannot be zero" +msgstr "" + +#: locale/programs/ld-name.c:129 locale/programs/ld-telephone.c:126 +#: locale/programs/ld-telephone.c:149 +#, fuzzy, c-format +msgid "%s: invalid escape sequence in field `%s'" +msgstr "%s: nežinomas simbolis lauke „%s“" + +#: locale/programs/ld-time.c:247 +#, c-format +msgid "%s: direction flag in string %Zd in `era' field is not '+' nor '-'" +msgstr "" + +#: locale/programs/ld-time.c:258 +#, c-format +msgid "%s: direction flag in string %Zd in `era' field is not a single character" +msgstr "" + +#: locale/programs/ld-time.c:271 +#, c-format +msgid "%s: invalid number for offset in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:279 +#, c-format +msgid "%s: garbage at end of offset value in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:330 +#, c-format +msgid "%s: invalid starting date in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:339 +#, c-format +msgid "%s: garbage at end of starting date in string %Zd in `era' field " +msgstr "" + +#: locale/programs/ld-time.c:358 +#, c-format +msgid "%s: starting date is invalid in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:407 +#, c-format +msgid "%s: invalid stopping date in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:416 +#, c-format +msgid "%s: garbage at end of stopping date in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:435 +#, c-format +msgid "%s: stopping date is invalid in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:444 +#, c-format +msgid "%s: missing era name in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:456 +#, c-format +msgid "%s: missing era format in string %Zd in `era' field" +msgstr "" + +#: locale/programs/ld-time.c:497 +#, c-format +msgid "%s: third operand for value of field `%s' must not be larger than %d" +msgstr "" + +#: locale/programs/ld-time.c:505 locale/programs/ld-time.c:513 +#: locale/programs/ld-time.c:521 +#, fuzzy, c-format +msgid "%s: values for field `%s' must not be larger than %d" +msgstr "%s reikšmė turi būti sveikasis skaičius" + +#: locale/programs/ld-time.c:1004 +#, c-format +msgid "%s: too few values for field `%s'" +msgstr "%s: per mažai reikšmių laukui „%s“" + +#: locale/programs/ld-time.c:1049 +msgid "extra trailing semicolon" +msgstr "papildomas kabliataškis pabaigoje" + +#: locale/programs/ld-time.c:1052 +#, fuzzy, c-format +msgid "%s: too many values for field `%s'" +msgstr "%s: per mažai reikšmių laukui „%s“" + +#: locale/programs/linereader.c:130 +msgid "trailing garbage at end of line" +msgstr "šiukšlės eilutės pabaigoje" + +#: locale/programs/linereader.c:298 +msgid "garbage at end of number" +msgstr "šiukšlės skaičiaus pabaigoje" + +#: locale/programs/linereader.c:410 +msgid "garbage at end of character code specification" +msgstr "" + +#: locale/programs/linereader.c:496 +#, fuzzy +msgid "unterminated symbolic name" +msgstr "neužbaigtas pranešimas" + +#: locale/programs/linereader.c:623 +msgid "illegal escape sequence at end of string" +msgstr "" + +#: locale/programs/linereader.c:627 locale/programs/linereader.c:855 +#, fuzzy +msgid "unterminated string" +msgstr "neužbaigtas pranešimas" + +#: locale/programs/linereader.c:669 +msgid "non-symbolic character value should not be used" +msgstr "" + +#: locale/programs/linereader.c:816 +#, fuzzy, c-format +msgid "symbol `%.*s' not in charmap" +msgstr "simbolis „%s“ neapibrėžtas" + +#: locale/programs/linereader.c:837 +#, fuzzy, c-format +msgid "symbol `%.*s' not in repertoire map" +msgstr "simbolis „%s“ neapibrėžtas" + +#: locale/programs/locale.c:74 +msgid "System information:" +msgstr "Sistemos informacija:" + +#: locale/programs/locale.c:76 +msgid "Write names of available locales" +msgstr "" + +#: locale/programs/locale.c:78 +msgid "Write names of available charmaps" +msgstr "" + +#: locale/programs/locale.c:79 +msgid "Modify output format:" +msgstr "" + +#: locale/programs/locale.c:80 +msgid "Write names of selected categories" +msgstr "" + +#: locale/programs/locale.c:81 +msgid "Write names of selected keywords" +msgstr "" + +#: locale/programs/locale.c:82 +msgid "Print more information" +msgstr "Spausdinti daugiau informacijos" + +#: locale/programs/locale.c:87 +msgid "" +"Get locale-specific information.\vFor bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" + +#: locale/programs/locale.c:92 +msgid "" +"NAME\n" +"[-a|-m]" +msgstr "" + +#: locale/programs/locale.c:193 +#, c-format +msgid "Cannot set LC_CTYPE to default locale" +msgstr "Nepavyko nustatyti LC_CTYPE į numatytąją lokalę" + +#: locale/programs/locale.c:195 +#, c-format +msgid "Cannot set LC_MESSAGES to default locale" +msgstr "Nepavyko nustatyti LC_MESSAGES į numatytąją lokalę" + +#: locale/programs/locale.c:208 +#, c-format +msgid "Cannot set LC_COLLATE to default locale" +msgstr "Nepavyko nustatyti LC_COLLATE į numatytąją lokalę" + +#: locale/programs/locale.c:224 +#, c-format +msgid "Cannot set LC_ALL to default locale" +msgstr "Nepavyko nustatyti LC_ALL į numatytąją lokalę" + +#: locale/programs/locale.c:500 +#, fuzzy, c-format +msgid "while preparing output" +msgstr "skaitant duomenų bazę" + +#: locale/programs/localedef.c:120 +msgid "Input Files:" +msgstr "" + +#: locale/programs/localedef.c:122 +msgid "Symbolic character names defined in FILE" +msgstr "" + +#: locale/programs/localedef.c:123 +#, fuzzy +msgid "Source definitions are found in FILE" +msgstr "Nerastas %s kategorijos apibrėžimas" + +#: locale/programs/localedef.c:125 +msgid "FILE contains mapping from symbolic names to UCS4 values" +msgstr "" + +#: locale/programs/localedef.c:129 +msgid "Create output even if warning messages were issued" +msgstr "" + +#: locale/programs/localedef.c:130 +msgid "Create old-style tables" +msgstr "" + +#: locale/programs/localedef.c:131 +#, fuzzy +msgid "Optional output file prefix" +msgstr "netaisyklinga grupė" + +#: locale/programs/localedef.c:132 +msgid "Be strictly POSIX conform" +msgstr "" + +#: locale/programs/localedef.c:134 +msgid "Suppress warnings and information messages" +msgstr "" + +#: locale/programs/localedef.c:135 +#, fuzzy +msgid "Print more messages" +msgstr "neužbaigtas pranešimas" + +#: locale/programs/localedef.c:136 +msgid "Archive control:" +msgstr "" + +#: locale/programs/localedef.c:138 +msgid "Don't add new data to archive" +msgstr "" + +#: locale/programs/localedef.c:140 +msgid "Add locales named by parameters to archive" +msgstr "" + +#: locale/programs/localedef.c:141 +msgid "Replace existing archive content" +msgstr "" + +#: locale/programs/localedef.c:143 +msgid "Remove locales named by parameters from archive" +msgstr "" + +#: locale/programs/localedef.c:144 +msgid "List content of archive" +msgstr "" + +#: locale/programs/localedef.c:146 +msgid "locale.alias file to consult when making archive" +msgstr "" + +#: locale/programs/localedef.c:151 +#, fuzzy +msgid "Compile locale specification" +msgstr "%s: nėra baigimo specifikacijos" + +#: locale/programs/localedef.c:154 +msgid "" +"NAME\n" +"[--add-to-archive|--delete-from-archive] FILE...\n" +"--list-archive [FILE]" +msgstr "" + +#: locale/programs/localedef.c:232 +#, fuzzy, c-format +msgid "cannot create directory for output files" +msgstr "nepavyko atverti aplanko %s" + +#: locale/programs/localedef.c:243 +#, c-format +msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" +msgstr "" + +#: locale/programs/localedef.c:257 locale/programs/localedef.c:273 +#: locale/programs/localedef.c:599 locale/programs/localedef.c:619 +#, fuzzy, c-format +msgid "cannot open locale definition file `%s'" +msgstr "%s: nepavyko atverti laikinojo failo: %s" + +#: locale/programs/localedef.c:285 +#, fuzzy, c-format +msgid "cannot write output files to `%s'" +msgstr "%s: nepavyko atverti laikinojo failo: %s" + +#: locale/programs/localedef.c:366 +#, c-format +msgid "" +"System's directory for character maps : %s\n" +" repertoire maps: %s\n" +" locale path : %s\n" +"%s" +msgstr "" + +#: locale/programs/localedef.c:567 +#, c-format +msgid "circular dependencies between locale definitions" +msgstr "" + +#: locale/programs/localedef.c:573 +#, c-format +msgid "cannot add already read locale `%s' a second time" +msgstr "" + +#: locale/programs/locarchive.c:88 locale/programs/locarchive.c:261 +#, c-format +msgid "cannot create temporary file" +msgstr "" + +#: locale/programs/locarchive.c:118 locale/programs/locarchive.c:307 +#, c-format +msgid "cannot initialize archive file" +msgstr "" + +#: locale/programs/locarchive.c:125 locale/programs/locarchive.c:314 +#, fuzzy, c-format +msgid "cannot resize archive file" +msgstr "%s: nepavyko perskaityti: %s" + +#: locale/programs/locarchive.c:134 locale/programs/locarchive.c:323 +#: locale/programs/locarchive.c:527 +#, fuzzy, c-format +msgid "cannot map archive header" +msgstr "nepavyko perskaityti antraštės" + +#: locale/programs/locarchive.c:156 +#, c-format +msgid "failed to create new locale archive" +msgstr "" + +#: locale/programs/locarchive.c:168 +#, c-format +msgid "cannot change mode of new locale archive" +msgstr "" + +#: locale/programs/locarchive.c:255 +#, c-format +msgid "cannot map locale archive file" +msgstr "" + +#: locale/programs/locarchive.c:331 +#, fuzzy, c-format +msgid "cannot lock new archive" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: locale/programs/locarchive.c:396 +#, fuzzy, c-format +msgid "cannot extend locale archive file" +msgstr "nepavyko atverti duomenų failo" + +#: locale/programs/locarchive.c:405 +#, c-format +msgid "cannot change mode of resized locale archive" +msgstr "" + +#: locale/programs/locarchive.c:413 +#, fuzzy, c-format +msgid "cannot rename new archive" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: locale/programs/locarchive.c:466 +#, fuzzy, c-format +msgid "cannot open locale archive \"%s\"" +msgstr "Nepavyko atverti podėlio failo %s\n" + +#: locale/programs/locarchive.c:471 +#, fuzzy, c-format +msgid "cannot stat locale archive \"%s\"" +msgstr "%s: nepavyko perskaityti: %s" + +#: locale/programs/locarchive.c:490 +#, fuzzy, c-format +msgid "cannot lock locale archive \"%s\"" +msgstr "%s: nepavyko perskaityti: %s" + +#: locale/programs/locarchive.c:513 +#, fuzzy, c-format +msgid "cannot read archive header" +msgstr "nepavyko perskaityti antraštės" + +#: locale/programs/locarchive.c:573 +#, c-format +msgid "locale '%s' already exists" +msgstr "" + +#: locale/programs/locarchive.c:804 locale/programs/locarchive.c:819 +#: locale/programs/locarchive.c:831 locale/programs/locarchive.c:843 +#: locale/programs/locfile.c:344 +#, fuzzy, c-format +msgid "cannot add to locale archive" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: locale/programs/locarchive.c:998 +#, fuzzy, c-format +msgid "locale alias file `%s' not found" +msgstr "Duomenų failas %s nerastas.\n" + +#: locale/programs/locarchive.c:1142 +#, fuzzy, c-format +msgid "Adding %s\n" +msgstr "skaitomas %s" + +#: locale/programs/locarchive.c:1148 +#, c-format +msgid "stat of \"%s\" failed: %s: ignored" +msgstr "" + +#: locale/programs/locarchive.c:1154 +#, fuzzy, c-format +msgid "\"%s\" is no directory; ignored" +msgstr "Aplankas" + +#: locale/programs/locarchive.c:1161 +#, fuzzy, c-format +msgid "cannot open directory \"%s\": %s: ignored" +msgstr "nepavyko atverti aplanko %s" + +#: locale/programs/locarchive.c:1233 +#, c-format +msgid "incomplete set of locale files in \"%s\"" +msgstr "" + +#: locale/programs/locarchive.c:1297 +#, fuzzy, c-format +msgid "cannot read all files in \"%s\": ignored" +msgstr "nepavyko nuskaityti failo duomenų" + +#: locale/programs/locarchive.c:1367 +#, c-format +msgid "locale \"%s\" not in archive" +msgstr "" + +#: locale/programs/locfile.c:132 +#, fuzzy, c-format +msgid "argument to `%s' must be a single character" +msgstr "<%s> argumentas turi būti vienas simbolis" + +#: locale/programs/locfile.c:252 +#, fuzzy +msgid "syntax error: not inside a locale definition section" +msgstr "sintaksės klaida %s aprašyme: %s" + +#: locale/programs/locfile.c:626 +#, fuzzy, c-format +msgid "cannot open output file `%s' for category `%s'" +msgstr "nepavyko atverti duomenų bazės failo „%s“: %s" + +#: locale/programs/locfile.c:650 +#, c-format +msgid "failure while writing data for category `%s'" +msgstr "" + +#: locale/programs/locfile.c:746 +#, fuzzy, c-format +msgid "cannot create output file `%s' for category `%s'" +msgstr "nepavyko sukurti laikino failo „here“ dokumentui: %s" + +#: locale/programs/locfile.c:782 +#, fuzzy +msgid "expect string argument for `copy'" +msgstr "„%s“ trūksta parametro" + +#: locale/programs/locfile.c:786 +msgid "locale name should consist only of portable characters" +msgstr "" + +#: locale/programs/locfile.c:805 +msgid "no other keyword shall be specified when `copy' is used" +msgstr "" + +#: locale/programs/locfile.c:819 +#, fuzzy, c-format +msgid "`%1$s' definition does not end with `END %1$s'" +msgstr "%1$s: apibrėžimas neužbaigtas „END %1$s“" + +#: locale/programs/repertoire.c:229 locale/programs/repertoire.c:270 +#: locale/programs/repertoire.c:295 +#, fuzzy, c-format +msgid "syntax error in repertoire map definition: %s" +msgstr "sintaksės klaida prologe: %s" + +#: locale/programs/repertoire.c:271 +msgid "no <Uxxxx> or <Uxxxxxxxx> value given" +msgstr "" + +#: locale/programs/repertoire.c:331 +#, c-format +msgid "cannot save new repertoire map" +msgstr "" + +#: locale/programs/repertoire.c:342 +#, fuzzy, c-format +msgid "repertoire map file `%s' not found" +msgstr "Duomenų failas %s nerastas.\n" + +#: login/programs/pt_chown.c:74 +#, c-format +msgid "Set the owner, group and access permission of the slave pseudo terminal corresponding to the master pseudo terminal passed on file descriptor `%d'. This is the helper program for the `grantpt' function. It is not intended to be run directly from the command line.\n" +msgstr "" + +#: login/programs/pt_chown.c:84 +#, c-format +msgid "" +"The owner is set to the current user, the group is set to `%s', and the access permission is set to `%o'.\n" +"\n" +"%s" +msgstr "" + +#: login/programs/pt_chown.c:161 +#, c-format +msgid "too many arguments" +msgstr "per daug argumentų" + +#: login/programs/pt_chown.c:169 +#, c-format +msgid "needs to be installed setuid `root'" +msgstr "turi būti instaliuota setuid „root“" + +#: malloc/mcheck.c:330 +msgid "memory is consistent, library is buggy\n" +msgstr "atminties turinys korektiškas, bibliotekoje yra klaida\n" + +#: malloc/mcheck.c:333 +msgid "memory clobbered before allocated block\n" +msgstr "" + +#: malloc/mcheck.c:336 +msgid "memory clobbered past end of allocated block\n" +msgstr "" + +#: malloc/mcheck.c:339 +msgid "block freed twice\n" +msgstr "blokas atlaisvintas du kartus\n" + +#: malloc/mcheck.c:342 +#, fuzzy +msgid "bogus mcheck_status, library is buggy\n" +msgstr "atminties turinys korektiškas, bibliotekoje yra klaida\n" + +#: malloc/memusage.sh:27 +msgid "Try \\`memusage --help' for more information." +msgstr "Pabandykite „memusage --help“, jei norite gauti daugiau informacijos." + +#: malloc/memusage.sh:33 +msgid "memusage: option \\`$1' requires an argument" +msgstr "memusage: parametrui „$1“ reikia argumento" + +#: malloc/memusage.sh:39 +msgid "" +"Usage: memusage [OPTION]... PROGRAM [PROGRAMOPTION]...\n" +"Profile memory usage of PROGRAM.\n" +"\n" +" -n,--progname=NAME Name of the program file to profile\n" +" -p,--png=FILE Generate PNG graphic and store it in FILE\n" +" -d,--data=FILE Generate binary data file and store it in FILE\n" +" -u,--unbuffered Don't buffer output\n" +" -b,--buffer=SIZE Collect SIZE entries before writing them out\n" +" --no-timer Don't collect additional information through timer\n" +" -m,--mmap Also trace mmap & friends\n" +"\n" +" -?,--help Print this help and exit\n" +" --usage Give a short usage message\n" +" -V,--version Print version information and exit\n" +"\n" +" The following options only apply when generating graphical output:\n" +" -t,--time-based Make graph linear in time\n" +" -T,--total Also draw graph of total memory use\n" +" --title=STRING Use STRING as title of the graph\n" +" -x,--x-size=SIZE Make graphic SIZE pixels wide\n" +" -y,--y-size=SIZE Make graphic SIZE pixels high\n" +"\n" +"Mandatory arguments to long options are also mandatory for any corresponding\n" +"short options.\n" +"\n" +"For bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>." +msgstr "" + +#: malloc/memusage.sh:99 +msgid "" +"Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]\n" +" [--buffer=SIZE] [--no-timer] [--time-based] [--total]\n" +" [--title=STRING] [--x-size=SIZE] [--y-size=SIZE]\n" +" PROGRAM [PROGRAMOPTION]..." +msgstr "" + +#: malloc/memusage.sh:191 +#, fuzzy +msgid "memusage: option \\`${1##*=}' is ambiguous" +msgstr "ldd: parametras „$1“ dviprasmis" + +#: malloc/memusage.sh:200 +#, fuzzy +msgid "memusage: unrecognized option \\`$1'" +msgstr "%s: neatpažintas parametras „--%s“\n" + +#: malloc/memusage.sh:213 +msgid "No program name given" +msgstr "Nenurodytas programos vardas" + +#: malloc/memusagestat.c:54 +#, fuzzy +msgid "Name output file" +msgstr "Išvesti į failą duotu PAVADINIMU" + +#: malloc/memusagestat.c:55 +msgid "Title string used in output graphic" +msgstr "" + +#: malloc/memusagestat.c:56 +msgid "Generate output linear to time (default is linear to number of function calls)" +msgstr "" + +#: malloc/memusagestat.c:58 +msgid "Also draw graph for total memory consumption" +msgstr "" + +#: malloc/memusagestat.c:59 +msgid "Make output graphic VALUE pixels wide" +msgstr "" + +#: malloc/memusagestat.c:60 +msgid "Make output graphic VALUE pixels high" +msgstr "" + +#: malloc/memusagestat.c:65 +msgid "Generate graphic from memory profiling data" +msgstr "" + +#: malloc/memusagestat.c:68 +msgid "DATAFILE [OUTFILE]" +msgstr "" + +#: misc/error.c:118 timezone/zic.c:417 +msgid "Unknown system error" +msgstr "" + +#: nis/nis_callback.c:189 +#, fuzzy +msgid "unable to free arguments" +msgstr "per daug argumentų" + +#: nis/nis_error.h:1 nis/ypclnt.c:822 nis/ypclnt.c:910 posix/regcomp.c:132 +#: sysdeps/gnu/errlist.c:20 +msgid "Success" +msgstr "Sėkmė" + +#: nis/nis_error.h:2 +#, fuzzy +msgid "Probable success" +msgstr "Dalinė sėkmė" + +#: nis/nis_error.h:3 +#, fuzzy +msgid "Not found" +msgstr "Duomenų failas %s nerastas.\n" + +#: nis/nis_error.h:4 +#, fuzzy +msgid "Probably not found" +msgstr "Duomenų failas %s nerastas.\n" + +#: nis/nis_error.h:5 +#, fuzzy +msgid "Cache expired" +msgstr "Baigėsi rakto galiojimo laikas" + +#: nis/nis_error.h:6 +#, fuzzy +msgid "NIS+ servers unreachable" +msgstr "Tinklas neprieinamas" + +#: nis/nis_error.h:7 +#, fuzzy +msgid "Unknown object" +msgstr "Nežinomas serveris" + +#: nis/nis_error.h:8 +msgid "Server busy, try again" +msgstr "" + +#: nis/nis_error.h:9 +msgid "Generic system error" +msgstr "" + +#: nis/nis_error.h:10 +msgid "First/next chain broken" +msgstr "" + +#. TRANS Permission denied; the file permissions do not allow the attempted operation. +#: nis/nis_error.h:11 nis/ypclnt.c:867 sysdeps/gnu/errlist.c:157 +#, fuzzy +msgid "Permission denied" +msgstr "Priėjimas uždraustas" + +#: nis/nis_error.h:12 +msgid "Not owner" +msgstr "" + +#: nis/nis_error.h:13 +msgid "Name not served by this server" +msgstr "" + +#: nis/nis_error.h:14 +#, fuzzy +msgid "Server out of memory" +msgstr "baigėsi atmintis" + +#: nis/nis_error.h:15 +msgid "Object with same name exists" +msgstr "" + +#: nis/nis_error.h:16 +msgid "Not master server for this domain" +msgstr "" + +#: nis/nis_error.h:17 +#, fuzzy +msgid "Invalid object for operation" +msgstr "netaisyklinga veiksena dlopen()" + +#: nis/nis_error.h:18 +#, fuzzy +msgid "Malformed name, or illegal name" +msgstr "nekorektiška eilutė ignoruota" + +#: nis/nis_error.h:19 +msgid "Unable to create callback" +msgstr "" + +#: nis/nis_error.h:20 +msgid "Results sent to callback proc" +msgstr "" + +#: nis/nis_error.h:21 +msgid "Not found, no such name" +msgstr "" + +#: nis/nis_error.h:22 +msgid "Name/entry isn't unique" +msgstr "" + +#: nis/nis_error.h:23 +#, fuzzy +msgid "Modification failed" +msgstr "Atminties išskyrimo klaida" + +#: nis/nis_error.h:24 +msgid "Database for table does not exist" +msgstr "" + +#: nis/nis_error.h:25 +msgid "Entry/table type mismatch" +msgstr "" + +#: nis/nis_error.h:26 +msgid "Link points to illegal name" +msgstr "" + +#: nis/nis_error.h:27 +msgid "Partial success" +msgstr "Dalinė sėkmė" + +#: nis/nis_error.h:28 +msgid "Too many attributes" +msgstr "Per daug atributų" + +#: nis/nis_error.h:29 +msgid "Error in RPC subsystem" +msgstr "" + +#: nis/nis_error.h:30 +msgid "Missing or malformed attribute" +msgstr "" + +#: nis/nis_error.h:31 +#, fuzzy +msgid "Named object is not searchable" +msgstr "bendrasis objektas neatvertas" + +#: nis/nis_error.h:32 +msgid "Error while talking to callback proc" +msgstr "" + +#: nis/nis_error.h:33 +msgid "Non NIS+ namespace encountered" +msgstr "" + +#: nis/nis_error.h:34 +msgid "Illegal object type for operation" +msgstr "" + +#: nis/nis_error.h:35 +msgid "Passed object is not the same object on server" +msgstr "" + +#: nis/nis_error.h:36 +#, fuzzy +msgid "Modify operation failed" +msgstr "Atminties išskyrimo klaida" + +#: nis/nis_error.h:37 +msgid "Query illegal for named table" +msgstr "" + +#: nis/nis_error.h:38 +msgid "Attempt to remove a non-empty table" +msgstr "" + +#: nis/nis_error.h:39 +msgid "Error in accessing NIS+ cold start file. Is NIS+ installed?" +msgstr "" + +#: nis/nis_error.h:40 +#, fuzzy +msgid "Full resync required for directory" +msgstr "Toks failas ar aplankas neegzistuoja" + +#: nis/nis_error.h:41 +#, fuzzy +msgid "NIS+ operation failed" +msgstr "Operacija nutraukta" + +#: nis/nis_error.h:42 +msgid "NIS+ service is unavailable or not installed" +msgstr "" + +#: nis/nis_error.h:43 +msgid "Yes, 42 is the meaning of life" +msgstr "" + +#: nis/nis_error.h:44 +msgid "Unable to authenticate NIS+ server" +msgstr "" + +#: nis/nis_error.h:45 +msgid "Unable to authenticate NIS+ client" +msgstr "" + +#: nis/nis_error.h:46 +#, fuzzy +msgid "No file space on server" +msgstr "Įrenginyje neliko vietos" + +#: nis/nis_error.h:47 +msgid "Unable to create process on server" +msgstr "" + +#: nis/nis_error.h:48 +msgid "Master server busy, full dump rescheduled." +msgstr "" + +#: nis/nis_local_names.c:122 +#, c-format +msgid "LOCAL entry for UID %d in directory %s not unique\n" +msgstr "" + +#: nis/nis_print.c:51 +msgid "UNKNOWN" +msgstr "NEŽINOMA" + +#: nis/nis_print.c:109 +msgid "BOGUS OBJECT\n" +msgstr "" + +#: nis/nis_print.c:112 +msgid "NO OBJECT\n" +msgstr "" + +#: nis/nis_print.c:115 +msgid "DIRECTORY\n" +msgstr "" + +#: nis/nis_print.c:118 +msgid "GROUP\n" +msgstr "" + +#: nis/nis_print.c:121 +msgid "TABLE\n" +msgstr "" + +#: nis/nis_print.c:124 +msgid "ENTRY\n" +msgstr "" + +#: nis/nis_print.c:127 +msgid "LINK\n" +msgstr "" + +#: nis/nis_print.c:130 +msgid "PRIVATE\n" +msgstr "" + +#: nis/nis_print.c:133 +#, fuzzy +msgid "(Unknown object)\n" +msgstr "Nežinomas serveris" + +#: nis/nis_print.c:167 +#, c-format +msgid "Name : `%s'\n" +msgstr "" + +#: nis/nis_print.c:168 +#, c-format +msgid "Type : %s\n" +msgstr "" + +#: nis/nis_print.c:173 +msgid "Master Server :\n" +msgstr "" + +#: nis/nis_print.c:175 +msgid "Replicate :\n" +msgstr "" + +#: nis/nis_print.c:176 +#, c-format +msgid "\tName : %s\n" +msgstr "" + +#: nis/nis_print.c:177 +msgid "\tPublic Key : " +msgstr "" + +#: nis/nis_print.c:181 +msgid "None.\n" +msgstr "" + +#: nis/nis_print.c:184 +#, c-format +msgid "Diffie-Hellmann (%d bits)\n" +msgstr "" + +#: nis/nis_print.c:189 +#, c-format +msgid "RSA (%d bits)\n" +msgstr "" + +#: nis/nis_print.c:192 +msgid "Kerberos.\n" +msgstr "" + +#: nis/nis_print.c:195 +#, c-format +msgid "Unknown (type = %d, bits = %d)\n" +msgstr "" + +#: nis/nis_print.c:206 +#, c-format +msgid "\tUniversal addresses (%u)\n" +msgstr "" + +#: nis/nis_print.c:228 +msgid "Time to live : " +msgstr "" + +#: nis/nis_print.c:230 +msgid "Default Access rights :\n" +msgstr "" + +#: nis/nis_print.c:239 +#, c-format +msgid "\tType : %s\n" +msgstr "" + +#: nis/nis_print.c:240 +msgid "\tAccess rights: " +msgstr "" + +#: nis/nis_print.c:254 +msgid "Group Flags :" +msgstr "" + +#: nis/nis_print.c:257 +msgid "" +"\n" +"Group Members :\n" +msgstr "" + +#: nis/nis_print.c:269 +#, c-format +msgid "Table Type : %s\n" +msgstr "" + +#: nis/nis_print.c:270 +#, c-format +msgid "Number of Columns : %d\n" +msgstr "" + +#: nis/nis_print.c:271 +#, c-format +msgid "Character Separator : %c\n" +msgstr "" + +#: nis/nis_print.c:272 +#, c-format +msgid "Search Path : %s\n" +msgstr "" + +#: nis/nis_print.c:273 +msgid "Columns :\n" +msgstr "" + +#: nis/nis_print.c:276 +#, c-format +msgid "\t[%d]\tName : %s\n" +msgstr "" + +#: nis/nis_print.c:278 +msgid "\t\tAttributes : " +msgstr "" + +#: nis/nis_print.c:280 +msgid "\t\tAccess Rights : " +msgstr "" + +#: nis/nis_print.c:290 +msgid "Linked Object Type : " +msgstr "" + +#: nis/nis_print.c:292 +#, c-format +msgid "Linked to : %s\n" +msgstr "" + +#: nis/nis_print.c:302 +#, c-format +msgid "\tEntry data of type %s\n" +msgstr "" + +#: nis/nis_print.c:305 +#, c-format +msgid "\t[%u] - [%u bytes] " +msgstr "" + +#: nis/nis_print.c:308 +msgid "Encrypted data\n" +msgstr "" + +#: nis/nis_print.c:310 +msgid "Binary data\n" +msgstr "" + +#: nis/nis_print.c:326 +#, c-format +msgid "Object Name : %s\n" +msgstr "" + +#: nis/nis_print.c:327 +#, c-format +msgid "Directory : %s\n" +msgstr "" + +#: nis/nis_print.c:328 +#, c-format +msgid "Owner : %s\n" +msgstr "" + +#: nis/nis_print.c:329 +#, c-format +msgid "Group : %s\n" +msgstr "" + +#: nis/nis_print.c:330 +msgid "Access Rights : " +msgstr "" + +#: nis/nis_print.c:332 +#, c-format +msgid "" +"\n" +"Time to Live : " +msgstr "" + +#: nis/nis_print.c:335 +#, c-format +msgid "Creation Time : %s" +msgstr "" + +#: nis/nis_print.c:337 +#, c-format +msgid "Mod. Time : %s" +msgstr "" + +#: nis/nis_print.c:338 +msgid "Object Type : " +msgstr "" + +#: nis/nis_print.c:358 +#, c-format +msgid " Data Length = %u\n" +msgstr "" + +#: nis/nis_print.c:372 +#, c-format +msgid "Status : %s\n" +msgstr "" + +#: nis/nis_print.c:373 +#, c-format +msgid "Number of objects : %u\n" +msgstr "" + +#: nis/nis_print.c:377 +#, c-format +msgid "Object #%d:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:117 +#, c-format +msgid "Group entry for \"%s.%s\" group:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:125 +msgid " Explicit members:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:130 +msgid " No explicit members\n" +msgstr "" + +#: nis/nis_print_group_entry.c:133 +msgid " Implicit members:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:138 +msgid " No implicit members\n" +msgstr "" + +#: nis/nis_print_group_entry.c:141 +msgid " Recursive members:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:146 +msgid " No recursive members\n" +msgstr "" + +#: nis/nis_print_group_entry.c:149 +msgid " Explicit nonmembers:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:154 +msgid " No explicit nonmembers\n" +msgstr "" + +#: nis/nis_print_group_entry.c:157 +msgid " Implicit nonmembers:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:162 +msgid " No implicit nonmembers\n" +msgstr "" + +#: nis/nis_print_group_entry.c:165 +msgid " Recursive nonmembers:\n" +msgstr "" + +#: nis/nis_print_group_entry.c:170 +msgid " No recursive nonmembers\n" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:101 +#: nis/nss_nisplus/nisplus-publickey.c:183 +#, c-format +msgid "DES entry for netname %s not unique\n" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:220 +#, c-format +msgid "netname2user: missing group id list in `%s'" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:302 +#: nis/nss_nisplus/nisplus-publickey.c:308 +#: nis/nss_nisplus/nisplus-publickey.c:373 +#: nis/nss_nisplus/nisplus-publickey.c:382 +#, c-format +msgid "netname2user: (nis+ lookup): %s\n" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:321 +#, c-format +msgid "netname2user: DES entry for %s in directory %s not unique" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:339 +#, c-format +msgid "netname2user: principal name `%s' too long" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:395 +#, c-format +msgid "netname2user: LOCAL entry for %s in directory %s not unique" +msgstr "" + +#: nis/nss_nisplus/nisplus-publickey.c:402 +msgid "netname2user: should not have uid 0" +msgstr "" + +#: nis/ypclnt.c:825 +#, fuzzy +msgid "Request arguments bad" +msgstr "Užklausa nenutraukta" + +#: nis/ypclnt.c:828 +msgid "RPC failure on NIS operation" +msgstr "" + +#: nis/ypclnt.c:831 +msgid "Can't bind to server which serves this domain" +msgstr "" + +#: nis/ypclnt.c:834 +msgid "No such map in server's domain" +msgstr "" + +#: nis/ypclnt.c:837 +#, fuzzy +msgid "No such key in map" +msgstr "Tokio įrenginio nėra" + +#: nis/ypclnt.c:840 +#, fuzzy +msgid "Internal NIS error" +msgstr "Vardų paieškos vidinė klaida" + +#: nis/ypclnt.c:843 +#, fuzzy +msgid "Local resource allocation failure" +msgstr "Sistemos resursų išskyrimo sutrikimas" + +#: nis/ypclnt.c:846 +#, fuzzy +msgid "No more records in map database" +msgstr "skaitant duomenų bazę" + +#: nis/ypclnt.c:849 +msgid "Can't communicate with portmapper" +msgstr "" + +#: nis/ypclnt.c:852 +msgid "Can't communicate with ypbind" +msgstr "" + +#: nis/ypclnt.c:855 +msgid "Can't communicate with ypserv" +msgstr "" + +#: nis/ypclnt.c:858 +msgid "Local domain name not set" +msgstr "" + +#: nis/ypclnt.c:861 +#, fuzzy +msgid "NIS map database is bad" +msgstr "Duomenų bazė užimta" + +#: nis/ypclnt.c:864 +msgid "NIS client/server version mismatch - can't supply service" +msgstr "" + +#: nis/ypclnt.c:870 +msgid "Database is busy" +msgstr "Duomenų bazė užimta" + +#: nis/ypclnt.c:873 +#, fuzzy +msgid "Unknown NIS error code" +msgstr "Nežinoma klaida " + +#: nis/ypclnt.c:913 +msgid "Internal ypbind error" +msgstr "" + +#: nis/ypclnt.c:916 +#, fuzzy +msgid "Domain not bound" +msgstr "%s: komanda nerasta" + +#: nis/ypclnt.c:919 +msgid "System resource allocation failure" +msgstr "Sistemos resursų išskyrimo sutrikimas" + +#: nis/ypclnt.c:922 +#, fuzzy +msgid "Unknown ypbind error" +msgstr "Nežinoma klaida" + +#: nis/ypclnt.c:963 +msgid "yp_update: cannot convert host to netname\n" +msgstr "" + +#: nis/ypclnt.c:981 +msgid "yp_update: cannot get server address\n" +msgstr "" + +#: nscd/aicache.c:77 nscd/hstcache.c:468 +#, c-format +msgid "Haven't found \"%s\" in hosts cache!" +msgstr "" + +#: nscd/aicache.c:79 nscd/hstcache.c:470 +#, c-format +msgid "Reloading \"%s\" in hosts cache!" +msgstr "" + +#: nscd/cache.c:146 +#, c-format +msgid "add new entry \"%s\" of type %s for %s to cache%s" +msgstr "" + +#: nscd/cache.c:148 +msgid " (first)" +msgstr "" + +#: nscd/cache.c:256 nscd/connections.c:810 +#, fuzzy, c-format +msgid "cannot stat() file `%s': %s" +msgstr "nepavyko atverti duomenų bazės failo „%s“: %s" + +#: nscd/cache.c:285 +#, c-format +msgid "pruning %s cache; time %ld" +msgstr "" + +#: nscd/cache.c:312 +#, c-format +msgid "considering %s entry \"%s\", timeout %<PRIu64>" +msgstr "" + +#: nscd/connections.c:521 nscd/connections.c:533 nscd/connections.c:545 +#: nscd/connections.c:564 +#, fuzzy, c-format +msgid "invalid persistent database file \"%s\": %s" +msgstr "nepavyko atverti duomenų bazės failo „%s“: %s" + +#: nscd/connections.c:535 +msgid "header size does not match" +msgstr "" + +#: nscd/connections.c:547 +#, fuzzy +msgid "file size does not match" +msgstr "ELF failo versija neatitinka esamos" + +#: nscd/connections.c:566 +#, fuzzy +msgid "verification failed" +msgstr "Operacija nutraukta" + +#: nscd/connections.c:580 +#, c-format +msgid "suggested size of table for database %s larger than the persistent database's table" +msgstr "" + +#: nscd/connections.c:591 nscd/connections.c:673 +#, c-format +msgid "cannot create read-only descriptor for \"%s\"; no mmap" +msgstr "" + +#: nscd/connections.c:652 +#, c-format +msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart" +msgstr "" + +#: nscd/connections.c:659 +#, c-format +msgid "cannot create %s; no persistent database used" +msgstr "" + +#: nscd/connections.c:662 +#, fuzzy, c-format +msgid "cannot create %s; no sharing possible" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: nscd/connections.c:733 +#, fuzzy, c-format +msgid "cannot write to database file %s: %s" +msgstr "nepavyko atverti duomenų bazės failo „%s“: %s" + +#: nscd/connections.c:772 +#, c-format +msgid "cannot set socket to close on exec: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:823 +#, fuzzy, c-format +msgid "cannot open socket: %s" +msgstr "nepavyko atverti bendrojo objekto failo" + +#: nscd/connections.c:840 +#, c-format +msgid "cannot change socket to nonblocking mode: %s" +msgstr "" + +#: nscd/connections.c:848 +#, fuzzy, c-format +msgid "cannot set socket to close on exec: %s" +msgstr "nepavyko sukurti laikino failo „here“ dokumentui: %s" + +#: nscd/connections.c:859 +#, c-format +msgid "cannot enable socket to accept connections: %s" +msgstr "" + +#: nscd/connections.c:955 +#, c-format +msgid "provide access to FD %d, for %s" +msgstr "" + +#: nscd/connections.c:967 +#, c-format +msgid "cannot handle old request version %d; current version is %d" +msgstr "" + +#: nscd/connections.c:1009 nscd/connections.c:1062 +#, fuzzy, c-format +msgid "cannot write result: %s" +msgstr "%s:%u: nepavyko perskaityti aplanko %s" + +#: nscd/connections.c:1145 +#, fuzzy, c-format +msgid "error getting caller's id: %s" +msgstr "rašomas %s" + +#: nscd/connections.c:1204 +#, c-format +msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1218 +#, c-format +msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1258 +#, c-format +msgid "cannot change to old UID: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1268 +#, c-format +msgid "cannot change to old GID: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1281 +#, c-format +msgid "cannot change to old working directory: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1310 +#, c-format +msgid "re-exec failed: %s; disabling paranoia mode" +msgstr "" + +#: nscd/connections.c:1319 +#, fuzzy, c-format +msgid "cannot change current working directory to \"/\": %s" +msgstr "<nėra esamo aplanko>" + +#: nscd/connections.c:1437 +#, fuzzy, c-format +msgid "short read while reading request: %s" +msgstr "problemos skaitant „%s“" + +#: nscd/connections.c:1468 +#, c-format +msgid "key length in request too long: %d" +msgstr "" + +#: nscd/connections.c:1481 +#, c-format +msgid "short read while reading request key: %s" +msgstr "" + +#: nscd/connections.c:1490 +#, c-format +msgid "handle_request: request received (Version = %d) from PID %ld" +msgstr "" + +#: nscd/connections.c:1495 +#, c-format +msgid "handle_request: request received (Version = %d)" +msgstr "" + +#: nscd/connections.c:1856 +#, c-format +msgid "could only start %d threads; terminating" +msgstr "" + +#: nscd/connections.c:1904 nscd/connections.c:1905 nscd/connections.c:1922 +#: nscd/connections.c:1931 nscd/connections.c:1949 nscd/connections.c:1960 +#: nscd/connections.c:1971 +#, c-format +msgid "Failed to run nscd as user '%s'" +msgstr "" + +#: nscd/connections.c:1923 +#, c-format +msgid "initial getgrouplist failed" +msgstr "" + +#: nscd/connections.c:1932 +#, c-format +msgid "getgrouplist failed" +msgstr "" + +#: nscd/connections.c:1950 +#, c-format +msgid "setgroups failed" +msgstr "" + +#: nscd/grpcache.c:402 nscd/hstcache.c:418 nscd/initgrcache.c:412 +#: nscd/pwdcache.c:397 nscd/servicescache.c:343 +#, fuzzy, c-format +msgid "short write in %s: %s" +msgstr "%s: Klaida rašant %s\n" + +#: nscd/grpcache.c:445 nscd/initgrcache.c:78 +#, c-format +msgid "Haven't found \"%s\" in group cache!" +msgstr "" + +#: nscd/grpcache.c:447 nscd/initgrcache.c:80 +#, c-format +msgid "Reloading \"%s\" in group cache!" +msgstr "" + +#: nscd/grpcache.c:524 +#, fuzzy, c-format +msgid "Invalid numeric gid \"%s\"!" +msgstr "nekorektiška eilutė" + +#: nscd/mem.c:383 +#, c-format +msgid "freed %zu bytes in %s cache" +msgstr "" + +#: nscd/mem.c:512 +#, c-format +msgid "no more memory for database '%s'" +msgstr "" + +#: nscd/nscd.c:98 +msgid "Read configuration data from NAME" +msgstr "" + +#: nscd/nscd.c:100 +msgid "Do not fork and display messages on the current tty" +msgstr "" + +#: nscd/nscd.c:101 +#, fuzzy +msgid "NUMBER" +msgstr "PAVADINIMAS" + +#: nscd/nscd.c:101 +msgid "Start NUMBER threads" +msgstr "" + +#: nscd/nscd.c:102 +msgid "Shut the server down" +msgstr "" + +#: nscd/nscd.c:103 +#, fuzzy +msgid "Print current configuration statistic" +msgstr "Nepavyko atverti konfigūracijos failo %s" + +#: nscd/nscd.c:104 +msgid "TABLE" +msgstr "" + +#: nscd/nscd.c:105 +#, fuzzy +msgid "Invalidate the specified cache" +msgstr "%s: netaisyklingas parametras --%c\n" + +#: nscd/nscd.c:106 +msgid "TABLE,yes" +msgstr "" + +#: nscd/nscd.c:107 +msgid "Use separate cache for each user" +msgstr "" + +#: nscd/nscd.c:112 +msgid "Name Service Cache Daemon." +msgstr "" + +#: nscd/nscd.c:144 nss/getent.c:858 nss/makedb.c:123 +#, fuzzy, c-format +msgid "wrong number of arguments" +msgstr "per daug argumentų" + +#: nscd/nscd.c:154 +#, c-format +msgid "failure while reading configuration file; this is fatal" +msgstr "" + +#: nscd/nscd.c:163 +#, c-format +msgid "already running" +msgstr "" + +#: nscd/nscd.c:178 nscd/nscd.c:233 +#, c-format +msgid "cannot fork" +msgstr "" + +#: nscd/nscd.c:241 +#, fuzzy, c-format +msgid "cannot change current working directory to \"/\"" +msgstr "<nėra esamo aplanko>" + +#: nscd/nscd.c:249 +msgid "Could not create log file" +msgstr "" + +#: nscd/nscd.c:302 nscd/nscd.c:327 nscd/nscd_stat.c:172 +#, c-format +msgid "Only root is allowed to use this option!" +msgstr "" + +#: nscd/nscd.c:364 nscd/nscd_stat.c:191 +#, c-format +msgid "write incomplete" +msgstr "" + +#: nscd/nscd.c:375 +#, fuzzy, c-format +msgid "cannot read invalidate ACK" +msgstr "nepavyko nuskaityti failo duomenų" + +#: nscd/nscd.c:381 +#, fuzzy, c-format +msgid "invalidation failed" +msgstr "netinkamas mėnesio pavadinimas" + +#: nscd/nscd.c:391 +#, c-format +msgid "secure services not implemented anymore" +msgstr "" + +#: nscd/nscd_conf.c:57 +#, fuzzy, c-format +msgid "database %s is not supported" +msgstr "Duomenų bazės %s formatas yra %s.\n" + +#: nscd/nscd_conf.c:108 +#, fuzzy, c-format +msgid "Parse error: %s" +msgstr "vidinė klaida" + +#: nscd/nscd_conf.c:193 +#, c-format +msgid "Must specify user name for server-user option" +msgstr "" + +#: nscd/nscd_conf.c:200 +#, c-format +msgid "Must specify user name for stat-user option" +msgstr "" + +#: nscd/nscd_conf.c:244 +#, c-format +msgid "invalid value for 'reload-count': %u" +msgstr "" + +#: nscd/nscd_conf.c:259 +#, c-format +msgid "Must specify value for restart-interval option" +msgstr "" + +#: nscd/nscd_conf.c:273 +#, c-format +msgid "Unknown option: %s %s %s" +msgstr "" + +#: nscd/nscd_conf.c:286 +#, c-format +msgid "cannot get current working directory: %s; disabling paranoia mode" +msgstr "" + +#: nscd/nscd_conf.c:306 +#, c-format +msgid "maximum file size for %s database too small" +msgstr "" + +#: nscd/nscd_stat.c:141 +#, fuzzy, c-format +msgid "cannot write statistics: %s" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: nscd/nscd_stat.c:156 +msgid "yes" +msgstr "" + +#: nscd/nscd_stat.c:157 +msgid "no" +msgstr "" + +#: nscd/nscd_stat.c:168 +#, c-format +msgid "Only root or %s is allowed to use this option!" +msgstr "" + +#: nscd/nscd_stat.c:179 +#, c-format +msgid "nscd not running!\n" +msgstr "" + +#: nscd/nscd_stat.c:203 +#, fuzzy, c-format +msgid "cannot read statistics data" +msgstr "nepavyko nuskaityti failo duomenų" + +#: nscd/nscd_stat.c:206 +#, c-format +msgid "" +"nscd configuration:\n" +"\n" +"%15d server debug level\n" +msgstr "" + +#: nscd/nscd_stat.c:230 +#, c-format +msgid "%3ud %2uh %2um %2lus server runtime\n" +msgstr "" + +#: nscd/nscd_stat.c:233 +#, c-format +msgid " %2uh %2um %2lus server runtime\n" +msgstr "" + +#: nscd/nscd_stat.c:235 +#, c-format +msgid " %2um %2lus server runtime\n" +msgstr "" + +#: nscd/nscd_stat.c:237 +#, c-format +msgid " %2lus server runtime\n" +msgstr "" + +#: nscd/nscd_stat.c:239 +#, c-format +msgid "" +"%15d current number of threads\n" +"%15d maximum number of threads\n" +"%15lu number of times clients had to wait\n" +"%15s paranoia mode enabled\n" +"%15lu restart internal\n" +msgstr "" + +#: nscd/nscd_stat.c:273 +#, c-format +msgid "" +"\n" +"%s cache:\n" +"\n" +"%15s cache is enabled\n" +"%15s cache is persistent\n" +"%15s cache is shared\n" +"%15zu suggested size\n" +"%15zu total data pool size\n" +"%15zu used data pool size\n" +"%15lu seconds time to live for positive entries\n" +"%15lu seconds time to live for negative entries\n" +"%15<PRIuMAX> cache hits on positive entries\n" +"%15<PRIuMAX> cache hits on negative entries\n" +"%15<PRIuMAX> cache misses on positive entries\n" +"%15<PRIuMAX> cache misses on negative entries\n" +"%15lu%% cache hit rate\n" +"%15zu current number of cached values\n" +"%15zu maximum number of cached values\n" +"%15zu maximum chain length searched\n" +"%15<PRIuMAX> number of delays on rdlock\n" +"%15<PRIuMAX> number of delays on wrlock\n" +"%15<PRIuMAX> memory allocations failed\n" +"%15s check /etc/%s for changes\n" +msgstr "" + +#: nscd/pwdcache.c:440 +#, c-format +msgid "Haven't found \"%s\" in password cache!" +msgstr "" + +#: nscd/pwdcache.c:442 +#, c-format +msgid "Reloading \"%s\" in password cache!" +msgstr "" + +#: nscd/pwdcache.c:520 +#, fuzzy, c-format +msgid "Invalid numeric uid \"%s\"!" +msgstr "nekorektiška eilutė" + +#: nscd/selinux.c:156 +#, c-format +msgid "Failed opening connection to the audit subsystem: %m" +msgstr "" + +#: nscd/selinux.c:177 +msgid "Failed to set keep-capabilities" +msgstr "" + +#: nscd/selinux.c:178 nscd/selinux.c:241 +#, c-format +msgid "prctl(KEEPCAPS) failed" +msgstr "" + +#: nscd/selinux.c:192 +msgid "Failed to initialize drop of capabilities" +msgstr "" + +#: nscd/selinux.c:193 +#, c-format +msgid "cap_init failed" +msgstr "" + +#: nscd/selinux.c:214 nscd/selinux.c:231 +msgid "Failed to drop capabilities" +msgstr "" + +#: nscd/selinux.c:215 nscd/selinux.c:232 +#, c-format +msgid "cap_set_proc failed" +msgstr "" + +#: nscd/selinux.c:240 +msgid "Failed to unset keep-capabilities" +msgstr "" + +#: nscd/selinux.c:256 +msgid "Failed to determine if kernel supports SELinux" +msgstr "" + +#: nscd/selinux.c:271 +#, c-format +msgid "Failed to start AVC thread" +msgstr "" + +#: nscd/selinux.c:293 +#, c-format +msgid "Failed to create AVC lock" +msgstr "" + +#: nscd/selinux.c:333 +#, fuzzy, c-format +msgid "Failed to start AVC" +msgstr "failas per trumpas" + +#: nscd/selinux.c:335 +msgid "Access Vector Cache (AVC) started" +msgstr "" + +#: nscd/selinux.c:356 +msgid "Error getting context of socket peer" +msgstr "" + +#: nscd/selinux.c:361 +msgid "Error getting context of nscd" +msgstr "" + +#: nscd/selinux.c:367 +msgid "Error getting sid from context" +msgstr "" + +#: nscd/selinux.c:399 +#, c-format +msgid "" +"\n" +"SELinux AVC Statistics:\n" +"\n" +"%15u entry lookups\n" +"%15u entry hits\n" +"%15u entry misses\n" +"%15u entry discards\n" +"%15u CAV lookups\n" +"%15u CAV hits\n" +"%15u CAV probes\n" +"%15u CAV misses\n" +msgstr "" + +#: nscd/servicescache.c:390 +#, c-format +msgid "Haven't found \"%s\" in services cache!" +msgstr "" + +#: nscd/servicescache.c:392 +#, c-format +msgid "Reloading \"%s\" in services cache!" +msgstr "" + +#: nss/getent.c:52 +msgid "database [key ...]" +msgstr "" + +#: nss/getent.c:57 +msgid "Service configuration to be used" +msgstr "" + +#: nss/getent.c:62 +msgid "" +"Get entries from administrative database.\vFor bug reporting instructions, please see:\n" +"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgstr "" + +#: nss/getent.c:145 nss/getent.c:394 +#, fuzzy, c-format +msgid "Enumeration not supported on %s\n" +msgstr "Operacija nepalaikoma" + +#: nss/getent.c:782 +#, c-format +msgid "Unknown database name" +msgstr "Nežinomas duomenų bazės vardas" + +#: nss/getent.c:808 +msgid "Supported databases:\n" +msgstr "Palaikomos duomenų bazės:\n" + +#: nss/getent.c:868 +#, c-format +msgid "Unknown database: %s\n" +msgstr "Nežinoma duomenų bazė: %s\n" + +#: nss/makedb.c:60 +msgid "Convert key to lower case" +msgstr "" + +#: nss/makedb.c:63 +msgid "Do not print messages while building database" +msgstr "" + +#: nss/makedb.c:65 +msgid "Print content of database file, one entry a line" +msgstr "" + +#: nss/makedb.c:70 +msgid "Create simple DB database from textual input." +msgstr "" + +#: nss/makedb.c:73 +#, fuzzy +msgid "" +"INPUT-FILE OUTPUT-FILE\n" +"-o OUTPUT-FILE INPUT-FILE\n" +"-u INPUT-FILE" +msgstr "" +"-o IŠVEDIMO-FAILAS [DUOMENŲ-FAILAS]...\n" +"[IŠVEDIMO-FAILAS [DUOMENŲ-FAILAS]...]" + +#: nss/makedb.c:142 +#, c-format +msgid "No usable database library found." +msgstr "" + +#: nss/makedb.c:149 +#, c-format +msgid "cannot open database file `%s': %s" +msgstr "nepavyko atverti duomenų bazės failo „%s“: %s" + +#: nss/makedb.c:151 +msgid "incorrectly formatted file" +msgstr "netaisyklingas failo formatas" + +#: nss/makedb.c:331 +msgid "duplicate key" +msgstr "" + +#: nss/makedb.c:337 +#, c-format +msgid "while writing database file" +msgstr "rašant duomenų bazės failą" + +#: nss/makedb.c:348 +#, c-format +msgid "problems while reading `%s'" +msgstr "problemos skaitant „%s“" + +#: nss/makedb.c:368 nss/makedb.c:385 +#, c-format +msgid "while reading database" +msgstr "skaitant duomenų bazę" + +#: posix/getconf.c:945 +#, c-format +msgid "Usage: %s [-v specification] variable_name [pathname]\n" +msgstr "" + +#: posix/getconf.c:948 +#, c-format +msgid " %s -a [pathname]\n" +msgstr "" + +#: posix/getconf.c:1067 +#, fuzzy, c-format +msgid "unknown specification \"%s\"" +msgstr "nežinomas predikatas „%s“" + +#: posix/getconf.c:1095 +#, c-format +msgid "Couldn't execute %s" +msgstr "Nepavyko paleisti %s" + +#: posix/getconf.c:1135 posix/getconf.c:1151 +msgid "undefined" +msgstr "neapibrėžta" + +#: posix/getconf.c:1173 +#, c-format +msgid "Unrecognized variable `%s'" +msgstr "Neatpažintas kintamasis „%s“" + +#: posix/getopt.c:571 posix/getopt.c:587 +#, c-format +msgid "%s: option `%s' is ambiguous\n" +msgstr "%s: parametras „%s“ dviprasmis\n" + +#: posix/getopt.c:620 posix/getopt.c:624 +#, c-format +msgid "%s: option `--%s' doesn't allow an argument\n" +msgstr "%s: parametras „--%s“ neleidžia argumento\n" + +#: posix/getopt.c:633 posix/getopt.c:638 +#, c-format +msgid "%s: option `%c%s' doesn't allow an argument\n" +msgstr "%s: parametras „%c%s“ neleidžia argumento\n" + +#: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016 +#: posix/getopt.c:1035 +#, c-format +msgid "%s: option `%s' requires an argument\n" +msgstr "" + +#: posix/getopt.c:738 posix/getopt.c:741 +#, c-format +msgid "%s: unrecognized option `--%s'\n" +msgstr "%s: neatpažintas parametras „--%s“\n" + +#: posix/getopt.c:749 posix/getopt.c:752 +#, c-format +msgid "%s: unrecognized option `%c%s'\n" +msgstr "%s: neatpažintas parametras „%c%s“\n" + +#: posix/getopt.c:804 posix/getopt.c:807 +#, c-format +msgid "%s: illegal option -- %c\n" +msgstr "%s: netinkamas parametras -- %c\n" + +#: posix/getopt.c:813 posix/getopt.c:816 +#, c-format +msgid "%s: invalid option -- %c\n" +msgstr "" + +#: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088 +#: posix/getopt.c:1106 +#, c-format +msgid "%s: option requires an argument -- %c\n" +msgstr "%s: parametrui reikia argumento -- %c\n" + +#: posix/getopt.c:937 posix/getopt.c:953 +#, c-format +msgid "%s: option `-W %s' is ambiguous\n" +msgstr "%s: parametras „-W %s“ dviprasmis\n" + +#: posix/getopt.c:977 posix/getopt.c:995 +#, c-format +msgid "%s: option `-W %s' doesn't allow an argument\n" +msgstr "%s: parametras „-W %s“ neleidžia argumento\n" + +#: posix/regcomp.c:135 +msgid "No match" +msgstr "" + +#: posix/regcomp.c:138 +msgid "Invalid regular expression" +msgstr "Netaisyklinga reguliarioji išraiška" + +#: posix/regcomp.c:141 +msgid "Invalid collation character" +msgstr "" + +#: posix/regcomp.c:144 +msgid "Invalid character class name" +msgstr "" + +#: posix/regcomp.c:147 +msgid "Trailing backslash" +msgstr "" + +#: posix/regcomp.c:150 +msgid "Invalid back reference" +msgstr "" + +#: posix/regcomp.c:153 +msgid "Unmatched [ or [^" +msgstr "" + +#: posix/regcomp.c:156 +msgid "Unmatched ( or \\(" +msgstr "" + +#: posix/regcomp.c:159 +msgid "Unmatched \\{" +msgstr "" + +#: posix/regcomp.c:162 +msgid "Invalid content of \\{\\}" +msgstr "" + +#: posix/regcomp.c:165 +msgid "Invalid range end" +msgstr "" + +#: posix/regcomp.c:168 +msgid "Memory exhausted" +msgstr "Baigėsi atmintis" + +#: posix/regcomp.c:171 +msgid "Invalid preceding regular expression" +msgstr "" + +#: posix/regcomp.c:174 +msgid "Premature end of regular expression" +msgstr "" + +#: posix/regcomp.c:177 +msgid "Regular expression too big" +msgstr "" + +#: posix/regcomp.c:180 +msgid "Unmatched ) or \\)" +msgstr "Nesuderintas ) arba \\)" + +#: posix/regcomp.c:660 +msgid "No previous regular expression" +msgstr "" + +#: posix/wordexp.c:1798 +#, fuzzy +msgid "parameter null or not set" +msgstr "%s: parametras tuščias arba nenustatytas" + +#: resolv/herror.c:68 +msgid "Resolver Error 0 (no error)" +msgstr "Paieškos klaida 0 (jokios klaidos)" + +#: resolv/herror.c:69 +msgid "Unknown host" +msgstr "Nežinomas serveris" + +#: resolv/herror.c:70 +msgid "Host name lookup failure" +msgstr "Adreso paieškos sutrikimas" + +#: resolv/herror.c:71 +msgid "Unknown server error" +msgstr "Nežinoma serverio klaida" + +#: resolv/herror.c:72 +msgid "No address associated with name" +msgstr "Su vardu susietų adresų nėra" + +#: resolv/herror.c:107 +msgid "Resolver internal error" +msgstr "Vardų paieškos vidinė klaida" + +#: resolv/herror.c:110 +msgid "Unknown resolver error" +msgstr "Nežinoma vardų paieškos klaida" + +#: resolv/res_hconf.c:124 +#, fuzzy, c-format +msgid "%s: line %d: cannot specify more than %d trim domains" +msgstr "%s: apribota: negalima naudoti „/“ komandų pavadinimuose" + +#: resolv/res_hconf.c:145 +#, c-format +msgid "%s: line %d: list delimiter not followed by domain" +msgstr "" + +#: resolv/res_hconf.c:204 +#, fuzzy, c-format +msgid "%s: line %d: expected `on' or `off', found `%s'\n" +msgstr "%s: eilutė %d: bloga komanda „%s“\n" + +#: resolv/res_hconf.c:247 +#, c-format +msgid "%s: line %d: bad command `%s'\n" +msgstr "%s: eilutė %d: bloga komanda „%s“\n" + +#: resolv/res_hconf.c:282 +#, c-format +msgid "%s: line %d: ignoring trailing garbage `%s'\n" +msgstr "" + +#: stdio-common/psignal.c:51 +#, c-format +msgid "%s%sUnknown signal %d\n" +msgstr "%s%sNežinomas signalas %d\n" + +#: stdio-common/psignal.c:52 +msgid "Unknown signal" +msgstr "Nežinomas signalas" + +#: string/_strerror.c:45 sysdeps/mach/_strerror.c:87 +msgid "Unknown error " +msgstr "Nežinoma klaida " + +#: string/strerror.c:43 +msgid "Unknown error" +msgstr "Nežinoma klaida" + +#: string/strsignal.c:65 +#, fuzzy, c-format +msgid "Real-time signal %d" +msgstr "%s: nutrauktas signalo %d" + +#: string/strsignal.c:69 +#, c-format +msgid "Unknown signal %d" +msgstr "Nežinomas signalas %d" + +#: sunrpc/auth_unix.c:114 +msgid "authunix_create: out of memory\n" +msgstr "" + +#: sunrpc/auth_unix.c:350 +msgid "auth_unix.c: Fatal marshalling problem" +msgstr "" + +#: sunrpc/clnt_perr.c:118 sunrpc/clnt_perr.c:139 +#, c-format +msgid "; low version = %lu, high version = %lu" +msgstr "" + +#: sunrpc/clnt_perr.c:125 +msgid "; why = " +msgstr "; kodėl =" + +#: sunrpc/clnt_perr.c:132 +#, c-format +msgid "(unknown authentication error - %d)" +msgstr "(nežinoma autentikacijos klaida - %d)" + +#: sunrpc/clnt_perr.c:172 +msgid "RPC: Success" +msgstr "RPC: Sėkmės" + +#: sunrpc/clnt_perr.c:175 +msgid "RPC: Can't encode arguments" +msgstr "" + +#: sunrpc/clnt_perr.c:179 +msgid "RPC: Can't decode result" +msgstr "" + +#: sunrpc/clnt_perr.c:183 +msgid "RPC: Unable to send" +msgstr "" + +#: sunrpc/clnt_perr.c:187 +msgid "RPC: Unable to receive" +msgstr "" + +#: sunrpc/clnt_perr.c:191 +msgid "RPC: Timed out" +msgstr "" + +#: sunrpc/clnt_perr.c:195 +msgid "RPC: Incompatible versions of RPC" +msgstr "" + +#: sunrpc/clnt_perr.c:199 +#, fuzzy +msgid "RPC: Authentication error" +msgstr "Autentikacijos klaida" + +#: sunrpc/clnt_perr.c:203 +#, fuzzy +msgid "RPC: Program unavailable" +msgstr "RPC: Programa neregistruota" + +#: sunrpc/clnt_perr.c:207 +#, fuzzy +msgid "RPC: Program/version mismatch" +msgstr "netinkama RPC programos versija" + +#: sunrpc/clnt_perr.c:211 +#, fuzzy +msgid "RPC: Procedure unavailable" +msgstr "Reikalingas raktas nerastas" + +#: sunrpc/clnt_perr.c:215 +msgid "RPC: Server can't decode arguments" +msgstr "" + +#: sunrpc/clnt_perr.c:219 +#, fuzzy +msgid "RPC: Remote system error" +msgstr "Nutolusio įvedimo/išvedimo klaida" + +#: sunrpc/clnt_perr.c:223 +msgid "RPC: Unknown host" +msgstr "RPC: Nežinomas serveris" + +#: sunrpc/clnt_perr.c:227 +#, fuzzy +msgid "RPC: Unknown protocol" +msgstr "RPC: Nežinomas serveris" + +#: sunrpc/clnt_perr.c:231 +#, fuzzy +msgid "RPC: Port mapper failure" +msgstr "Elektros maitinimo sutrikimas" + +#: sunrpc/clnt_perr.c:235 +msgid "RPC: Program not registered" +msgstr "RPC: Programa neregistruota" + +#: sunrpc/clnt_perr.c:239 +#, fuzzy +msgid "RPC: Failed (unspecified error)" +msgstr "Nesėkmė (nenurodyta klaida)" + +#: sunrpc/clnt_perr.c:280 +#, fuzzy +msgid "RPC: (unknown error code)" +msgstr "Nežinoma klaida " + +#: sunrpc/clnt_perr.c:342 +msgid "Authentication OK" +msgstr "Autentikacija sėkminga" + +#: sunrpc/clnt_perr.c:345 +msgid "Invalid client credential" +msgstr "" + +#: sunrpc/clnt_perr.c:349 +msgid "Server rejected credential" +msgstr "" + +#: sunrpc/clnt_perr.c:353 +#, fuzzy +msgid "Invalid client verifier" +msgstr "netaisyklingas naudotojas" + +#: sunrpc/clnt_perr.c:357 +msgid "Server rejected verifier" +msgstr "" + +#: sunrpc/clnt_perr.c:361 +msgid "Client credential too weak" +msgstr "" + +#: sunrpc/clnt_perr.c:365 +#, fuzzy +msgid "Invalid server verifier" +msgstr "nekorektiška eilutė" + +#: sunrpc/clnt_perr.c:369 +msgid "Failed (unspecified error)" +msgstr "Nesėkmė (nenurodyta klaida)" + +#: sunrpc/clnt_raw.c:117 +msgid "clnt_raw.c: fatal header serialization error" +msgstr "" + +#: sunrpc/clnt_tcp.c:131 +#, fuzzy +msgid "clnttcp_create: out of memory\n" +msgstr "baigėsi atmintis" + +#: sunrpc/clnt_udp.c:139 +#, fuzzy +msgid "clntudp_create: out of memory\n" +msgstr "baigėsi atmintis" + +#: sunrpc/clnt_unix.c:128 +msgid "clntunix_create: out of memory\n" +msgstr "" + +#: sunrpc/pm_getmaps.c:83 +msgid "pmap_getmaps.c: rpc problem" +msgstr "" + +#: sunrpc/pmap_clnt.c:129 +msgid "Cannot register service" +msgstr "Nepavyko užregistruoti tarnybos" + +#: sunrpc/pmap_rmt.c:248 +#, fuzzy +msgid "Cannot create socket for broadcast rpc" +msgstr "nepavyko sukurti paieškos sąrašo" + +#: sunrpc/pmap_rmt.c:255 +msgid "Cannot set socket option SO_BROADCAST" +msgstr "" + +#: sunrpc/pmap_rmt.c:307 +msgid "Cannot send broadcast packet" +msgstr "" + +#: sunrpc/pmap_rmt.c:332 +msgid "Broadcast poll problem" +msgstr "" + +#: sunrpc/pmap_rmt.c:345 +msgid "Cannot receive reply to broadcast" +msgstr "" + +#: sunrpc/rpc_main.c:286 +#, c-format +msgid "%s: output would overwrite %s\n" +msgstr "" + +#: sunrpc/rpc_main.c:293 +#, c-format +msgid "%s: unable to open %s: %m\n" +msgstr "%s: nepavyko atverti %s: %m\n" + +#: sunrpc/rpc_main.c:305 +#, fuzzy, c-format +msgid "%s: while writing output %s: %m" +msgstr "%s: nepavyko atverti %s: %m\n" + +#: sunrpc/rpc_main.c:340 +#, fuzzy, c-format +msgid "cannot find C preprocessor: %s \n" +msgstr "nepavyko atverti bendrojo objekto failo" + +#: sunrpc/rpc_main.c:348 +msgid "cannot find any C preprocessor (cpp)\n" +msgstr "" + +#: sunrpc/rpc_main.c:417 +#, c-format +msgid "%s: C preprocessor failed with signal %d\n" +msgstr "" + +#: sunrpc/rpc_main.c:420 +#, c-format +msgid "%s: C preprocessor failed with exit code %d\n" +msgstr "" + +#: sunrpc/rpc_main.c:460 +#, c-format +msgid "illegal nettype: `%s'\n" +msgstr "" + +#: sunrpc/rpc_main.c:1122 +#, c-format +msgid "rpcgen: too many defines\n" +msgstr "" + +#: sunrpc/rpc_main.c:1134 +#, c-format +msgid "rpcgen: arglist coding error\n" +msgstr "" + +#. TRANS: the file will not be removed; this is an +#. TRANS: informative message. +#: sunrpc/rpc_main.c:1167 +#, c-format +msgid "file `%s' already exists and may be overwritten\n" +msgstr "failas „%s“ jau egzistuoja ir gali būti perrašytas\n" + +#: sunrpc/rpc_main.c:1212 +#, fuzzy, c-format +msgid "Cannot specify more than one input file!\n" +msgstr "Kelias „%s“ nurodytas daugiau negu vieną kartą" + +#: sunrpc/rpc_main.c:1382 +msgid "This implementation doesn't support newstyle or MT-safe code!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1391 +#, c-format +msgid "Cannot use netid flag with inetd flag!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1403 +msgid "Cannot use netid flag without TIRPC!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1410 +msgid "Cannot use table flags with newstyle!\n" +msgstr "" + +#: sunrpc/rpc_main.c:1429 +#, c-format +msgid "\"infile\" is required for template generation flags.\n" +msgstr "" + +#: sunrpc/rpc_main.c:1434 +#, fuzzy, c-format +msgid "Cannot have more than one file generation flag!\n" +msgstr "Kelias „%s“ nurodytas daugiau negu vieną kartą" + +#: sunrpc/rpc_main.c:1443 +#, c-format +msgid "usage: %s infile\n" +msgstr "" + +#: sunrpc/rpc_main.c:1444 +#, c-format +msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n" +msgstr "" + +#: sunrpc/rpc_main.c:1446 +#, c-format +msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n" +msgstr "" + +#: sunrpc/rpc_main.c:1448 +#, c-format +msgid "\t%s [-s nettype]* [-o outfile] [infile]\n" +msgstr "" + +#: sunrpc/rpc_main.c:1449 +#, c-format +msgid "\t%s [-n netid]* [-o outfile] [infile]\n" +msgstr "" + +#: sunrpc/rpc_scan.c:114 +msgid "constant or identifier expected" +msgstr "" + +#: sunrpc/rpc_scan.c:310 +msgid "illegal character in file: " +msgstr "netaisyklingas simbolis faile: " + +#: sunrpc/rpc_scan.c:349 sunrpc/rpc_scan.c:375 +#, fuzzy +msgid "unterminated string constant" +msgstr "neužbaigtas pranešimas" + +#: sunrpc/rpc_scan.c:381 +msgid "empty char string" +msgstr "tuščia simbolių eilutė" + +#: sunrpc/rpc_scan.c:523 sunrpc/rpc_scan.c:533 +#, fuzzy +msgid "preprocessor error" +msgstr "relokacijos klaida" + +#: sunrpc/rpcinfo.c:237 sunrpc/rpcinfo.c:383 +#, fuzzy, c-format +msgid "program %lu is not available\n" +msgstr "RPC programa nerasta" + +#: sunrpc/rpcinfo.c:264 sunrpc/rpcinfo.c:310 sunrpc/rpcinfo.c:333 +#: sunrpc/rpcinfo.c:407 sunrpc/rpcinfo.c:453 sunrpc/rpcinfo.c:476 +#: sunrpc/rpcinfo.c:510 +#, c-format +msgid "program %lu version %lu is not available\n" +msgstr "" + +#: sunrpc/rpcinfo.c:515 +#, c-format +msgid "program %lu version %lu ready and waiting\n" +msgstr "" + +#: sunrpc/rpcinfo.c:556 sunrpc/rpcinfo.c:563 +msgid "rpcinfo: can't contact portmapper" +msgstr "" + +#: sunrpc/rpcinfo.c:570 +#, fuzzy +msgid "No remote programs registered.\n" +msgstr "RPC: Programa neregistruota" + +#: sunrpc/rpcinfo.c:574 +msgid " program vers proto port\n" +msgstr "" + +#: sunrpc/rpcinfo.c:613 +msgid "(unknown)" +msgstr "(nežinoma)" + +#: sunrpc/rpcinfo.c:637 +#, c-format +msgid "rpcinfo: broadcast failed: %s\n" +msgstr "" + +#: sunrpc/rpcinfo.c:658 +msgid "Sorry. You are not root\n" +msgstr "Atsiprašome. Jūs nesate administratorius\n" + +#: sunrpc/rpcinfo.c:665 +#, c-format +msgid "rpcinfo: Could not delete registration for prog %s version %s\n" +msgstr "" + +#: sunrpc/rpcinfo.c:674 +msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n" +msgstr "" + +#: sunrpc/rpcinfo.c:676 +msgid " rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n" +msgstr "" + +#: sunrpc/rpcinfo.c:678 +msgid " rpcinfo -p [ host ]\n" +msgstr "" + +#: sunrpc/rpcinfo.c:679 +msgid " rpcinfo -b prognum versnum\n" +msgstr "" + +#: sunrpc/rpcinfo.c:680 +msgid " rpcinfo -d prognum versnum\n" +msgstr "" + +#: sunrpc/rpcinfo.c:695 +#, c-format +msgid "rpcinfo: %s is unknown service\n" +msgstr "" + +#: sunrpc/rpcinfo.c:732 +#, c-format +msgid "rpcinfo: %s is unknown host\n" +msgstr "" + +#: sunrpc/svc_run.c:70 +#, fuzzy +msgid "svc_run: - out of memory" +msgstr "baigėsi atmintis" + +#: sunrpc/svc_run.c:90 +msgid "svc_run: - poll failed" +msgstr "" + +#: sunrpc/svc_simple.c:87 +#, c-format +msgid "can't reassign procedure number %ld\n" +msgstr "" + +#: sunrpc/svc_simple.c:97 +msgid "couldn't create an rpc server\n" +msgstr "" + +#: sunrpc/svc_simple.c:105 +#, c-format +msgid "couldn't register prog %ld vers %ld\n" +msgstr "" + +#: sunrpc/svc_simple.c:113 +#, fuzzy +msgid "registerrpc: out of memory\n" +msgstr "baigėsi atmintis" + +#: sunrpc/svc_simple.c:173 +#, c-format +msgid "trouble replying to prog %d\n" +msgstr "" + +#: sunrpc/svc_simple.c:182 +#, c-format +msgid "never registered prog %d\n" +msgstr "" + +#: sunrpc/svc_tcp.c:155 +msgid "svc_tcp.c - tcp socket creation problem" +msgstr "" + +#: sunrpc/svc_tcp.c:170 +msgid "svc_tcp.c - cannot getsockname or listen" +msgstr "" + +#: sunrpc/svc_tcp.c:179 +#, fuzzy +msgid "svctcp_create: out of memory\n" +msgstr "baigėsi atmintis" + +#: sunrpc/svc_tcp.c:218 +msgid "svc_tcp: makefd_xprt: out of memory\n" +msgstr "" + +#: sunrpc/svc_udp.c:128 +msgid "svcudp_create: socket creation problem" +msgstr "" + +#: sunrpc/svc_udp.c:142 +msgid "svcudp_create - cannot getsockname" +msgstr "" + +#: sunrpc/svc_udp.c:152 +#, fuzzy +msgid "svcudp_create: out of memory\n" +msgstr "baigėsi atmintis" + +#: sunrpc/svc_udp.c:174 +msgid "svcudp_create: xp_pad is too small for IP_PKTINFO\n" +msgstr "" + +#: sunrpc/svc_udp.c:474 +msgid "enablecache: cache already enabled" +msgstr "" + +#: sunrpc/svc_udp.c:480 +msgid "enablecache: could not allocate cache" +msgstr "" + +#: sunrpc/svc_udp.c:489 +msgid "enablecache: could not allocate cache data" +msgstr "" + +#: sunrpc/svc_udp.c:497 +msgid "enablecache: could not allocate cache fifo" +msgstr "" + +#: sunrpc/svc_udp.c:532 +#, fuzzy +msgid "cache_set: victim not found" +msgstr "%s: komanda nerasta" + +#: sunrpc/svc_udp.c:543 +msgid "cache_set: victim alloc failed" +msgstr "" + +#: sunrpc/svc_udp.c:550 +msgid "cache_set: could not allocate new rpc_buffer" +msgstr "" + +#: sunrpc/svc_unix.c:150 +msgid "svc_unix.c - AF_UNIX socket creation problem" +msgstr "" + +#: sunrpc/svc_unix.c:166 +msgid "svc_unix.c - cannot getsockname or listen" +msgstr "" + +#: sunrpc/svc_unix.c:176 +#, fuzzy +msgid "svcunix_create: out of memory\n" +msgstr "baigėsi atmintis" + +#: sunrpc/svc_unix.c:215 +msgid "svc_unix: makefd_xprt: out of memory\n" +msgstr "" + +#: sunrpc/xdr.c:566 +#, fuzzy +msgid "xdr_bytes: out of memory\n" +msgstr "baigėsi atmintis" + +#: sunrpc/xdr.c:718 +#, fuzzy +msgid "xdr_string: out of memory\n" +msgstr "baigėsi atmintis" + +#: sunrpc/xdr_array.c:106 +#, fuzzy +msgid "xdr_array: out of memory\n" +msgstr "baigėsi atmintis" + +#: sunrpc/xdr_rec.c:156 +#, fuzzy +msgid "xdrrec_create: out of memory\n" +msgstr "baigėsi atmintis" + +#: sunrpc/xdr_ref.c:86 +#, fuzzy +msgid "xdr_reference: out of memory\n" +msgstr "baigėsi atmintis" + +#: sysdeps/generic/siglist.h:29 sysdeps/unix/siglist.c:27 +msgid "Hangup" +msgstr "" + +#: sysdeps/generic/siglist.h:30 sysdeps/unix/siglist.c:28 +msgid "Interrupt" +msgstr "Pertraukimas" + +#: sysdeps/generic/siglist.h:31 sysdeps/unix/siglist.c:29 +msgid "Quit" +msgstr "Išeita" + +#: sysdeps/generic/siglist.h:32 sysdeps/unix/siglist.c:30 +msgid "Illegal instruction" +msgstr "Netaisyklinga instrukcija" + +#: sysdeps/generic/siglist.h:33 sysdeps/unix/siglist.c:31 +msgid "Trace/breakpoint trap" +msgstr "" + +#: sysdeps/generic/siglist.h:34 +msgid "Aborted" +msgstr "" + +#: sysdeps/generic/siglist.h:35 sysdeps/unix/siglist.c:34 +msgid "Floating point exception" +msgstr "Slankaus kablelio klaida" + +#: sysdeps/generic/siglist.h:36 sysdeps/unix/siglist.c:35 +msgid "Killed" +msgstr "Nutraukta" + +#: sysdeps/generic/siglist.h:37 sysdeps/unix/siglist.c:36 +msgid "Bus error" +msgstr "Magistralės klaida" + +#: sysdeps/generic/siglist.h:38 sysdeps/unix/siglist.c:37 +msgid "Segmentation fault" +msgstr "Segmentavimo klaida" + +#. TRANS Broken pipe; there is no process reading from the other end of a pipe. +#. TRANS Every library function that returns this error code also generates a +#. TRANS @code{SIGPIPE} signal; this signal terminates the program if not handled +#. TRANS or blocked. Thus, your program will never actually see @code{EPIPE} +#. TRANS unless it has handled or blocked @code{SIGPIPE}. +#: sysdeps/generic/siglist.h:39 sysdeps/gnu/errlist.c:359 +#: sysdeps/unix/siglist.c:39 +msgid "Broken pipe" +msgstr "" + +#: sysdeps/generic/siglist.h:40 sysdeps/unix/siglist.c:40 +msgid "Alarm clock" +msgstr "Žadintuvas" + +#: sysdeps/generic/siglist.h:41 sysdeps/unix/siglist.c:41 +#, fuzzy +msgid "Terminated" +msgstr "Užbaigta" + +#: sysdeps/generic/siglist.h:42 sysdeps/unix/siglist.c:42 +msgid "Urgent I/O condition" +msgstr "" + +#: sysdeps/generic/siglist.h:43 sysdeps/unix/siglist.c:43 +msgid "Stopped (signal)" +msgstr "Sustabdyta (signalas)" + +#: sysdeps/generic/siglist.h:44 sysdeps/unix/siglist.c:44 +msgid "Stopped" +msgstr "Sustabdyta" + +#: sysdeps/generic/siglist.h:45 sysdeps/unix/siglist.c:45 +msgid "Continued" +msgstr "Pratęsta" + +#: sysdeps/generic/siglist.h:46 sysdeps/unix/siglist.c:46 +#, fuzzy +msgid "Child exited" +msgstr "Failas jau egzistuoja" + +#: sysdeps/generic/siglist.h:47 sysdeps/unix/siglist.c:47 +#, fuzzy +msgid "Stopped (tty input)" +msgstr "Sustabdyta (signalas)" + +#: sysdeps/generic/siglist.h:48 sysdeps/unix/siglist.c:48 +msgid "Stopped (tty output)" +msgstr "" + +#: sysdeps/generic/siglist.h:49 sysdeps/unix/siglist.c:49 +msgid "I/O possible" +msgstr "" + +#: sysdeps/generic/siglist.h:50 sysdeps/unix/siglist.c:50 +msgid "CPU time limit exceeded" +msgstr "Viršyta CPU laiko riba" + +#: sysdeps/generic/siglist.h:51 sysdeps/unix/siglist.c:51 +msgid "File size limit exceeded" +msgstr "Viršyta failo dydžio riba" + +#: sysdeps/generic/siglist.h:52 sysdeps/unix/siglist.c:52 +msgid "Virtual timer expired" +msgstr "" + +#: sysdeps/generic/siglist.h:53 sysdeps/unix/siglist.c:53 +msgid "Profiling timer expired" +msgstr "" + +#: sysdeps/generic/siglist.h:54 sysdeps/unix/siglist.c:54 +msgid "Window changed" +msgstr "Langas pasikeitė" + +#: sysdeps/generic/siglist.h:55 sysdeps/unix/siglist.c:56 +msgid "User defined signal 1" +msgstr "Naudotojo apibrėžtas signalas 1" + +#: sysdeps/generic/siglist.h:56 sysdeps/unix/siglist.c:57 +msgid "User defined signal 2" +msgstr "Naudotojo apibrėžtas signalas 2" + +#: sysdeps/generic/siglist.h:60 sysdeps/unix/siglist.c:33 +msgid "EMT trap" +msgstr "EMT gaudyklė" + +#: sysdeps/generic/siglist.h:63 sysdeps/unix/siglist.c:38 +msgid "Bad system call" +msgstr "Blogas sisteminis kvietimas" + +#: sysdeps/generic/siglist.h:66 +msgid "Stack fault" +msgstr "Steko klaida" + +#: sysdeps/generic/siglist.h:69 +msgid "Information request" +msgstr "Informacijos užklausa" + +#: sysdeps/generic/siglist.h:71 +msgid "Power failure" +msgstr "Elektros maitinimo sutrikimas" + +#: sysdeps/generic/siglist.h:74 sysdeps/unix/siglist.c:55 +msgid "Resource lost" +msgstr "Resursas prarastas" + +#. TRANS Operation not permitted; only the owner of the file (or other resource) +#. TRANS or processes with special privileges can perform the operation. +#: sysdeps/gnu/errlist.c:25 +msgid "Operation not permitted" +msgstr "Operacija neleidžiama" + +#. TRANS No process matches the specified process ID. +#: sysdeps/gnu/errlist.c:45 +msgid "No such process" +msgstr "Tokio proceso nėra" + +#. TRANS Interrupted function call; an asynchronous signal occurred and prevented +#. TRANS completion of the call. When this happens, you should try the call +#. TRANS again. +#. TRANS +#. TRANS You can choose to have functions resume after a signal that is handled, +#. TRANS rather than failing with @code{EINTR}; see @ref{Interrupted +#. TRANS Primitives}. +#: sysdeps/gnu/errlist.c:60 +msgid "Interrupted system call" +msgstr "Nutrauktas sistemos iškvietimas" + +#. TRANS Input/output error; usually used for physical read or write errors. +#: sysdeps/gnu/errlist.c:69 +msgid "Input/output error" +msgstr "Įvedimo/išvedimo klaida" + +#. TRANS No such device or address. The system tried to use the device +#. TRANS represented by a file you specified, and it couldn't find the device. +#. TRANS This can mean that the device file was installed incorrectly, or that +#. TRANS the physical device is missing or not correctly attached to the +#. TRANS computer. +#: sysdeps/gnu/errlist.c:82 +msgid "No such device or address" +msgstr "Nėra tokio įrenginio ar adreso" + +#. TRANS Argument list too long; used when the arguments passed to a new program +#. TRANS being executed with one of the @code{exec} functions (@pxref{Executing a +#. TRANS File}) occupy too much memory space. This condition never arises in the +#. TRANS GNU system. +#: sysdeps/gnu/errlist.c:94 +msgid "Argument list too long" +msgstr "Argumentų sąrašas per ilgas" + +#. TRANS Invalid executable file format. This condition is detected by the +#. TRANS @code{exec} functions; see @ref{Executing a File}. +#: sysdeps/gnu/errlist.c:104 +#, fuzzy +msgid "Exec format error" +msgstr "relokacijos klaida" + +#. TRANS Bad file descriptor; for example, I/O on a descriptor that has been +#. TRANS closed or reading from a descriptor open only for writing (or vice +#. TRANS versa). +#: sysdeps/gnu/errlist.c:115 +#, fuzzy +msgid "Bad file descriptor" +msgstr "nepavyko užverti failo deskriptoriaus" + +#. TRANS There are no child processes. This error happens on operations that are +#. TRANS supposed to manipulate child processes, when there aren't any processes +#. TRANS to manipulate. +#: sysdeps/gnu/errlist.c:126 +#, fuzzy +msgid "No child processes" +msgstr "Tokio proceso nėra" + +#. TRANS Deadlock avoided; allocating a system resource would have resulted in a +#. TRANS deadlock situation. The system does not guarantee that it will notice +#. TRANS all such situations. This error means you got lucky and the system +#. TRANS noticed; it might just hang. @xref{File Locks}, for an example. +#: sysdeps/gnu/errlist.c:138 +msgid "Resource deadlock avoided" +msgstr "" + +#. TRANS No memory available. The system cannot allocate more virtual memory +#. TRANS because its capacity is full. +#: sysdeps/gnu/errlist.c:148 +msgid "Cannot allocate memory" +msgstr "Nepavyko išskirti atminties" + +#. TRANS Bad address; an invalid pointer was detected. +#. TRANS In the GNU system, this error never happens; you get a signal instead. +#: sysdeps/gnu/errlist.c:167 +msgid "Bad address" +msgstr "Blogas adresas" + +#. TRANS A file that isn't a block special file was given in a situation that +#. TRANS requires one. For example, trying to mount an ordinary file as a file +#. TRANS system in Unix gives this error. +#: sysdeps/gnu/errlist.c:178 +msgid "Block device required" +msgstr "Reikalingas blokinis įrenginys" + +#. TRANS Resource busy; a system resource that can't be shared is already in use. +#. TRANS For example, if you try to delete a file that is the root of a currently +#. TRANS mounted filesystem, you get this error. +#: sysdeps/gnu/errlist.c:189 +msgid "Device or resource busy" +msgstr "Įrenginys ar resursas užimtas" + +#. TRANS File exists; an existing file was specified in a context where it only +#. TRANS makes sense to specify a new file. +#: sysdeps/gnu/errlist.c:199 +msgid "File exists" +msgstr "Failas jau egzistuoja" + +#. TRANS An attempt to make an improper link across file systems was detected. +#. TRANS This happens not only when you use @code{link} (@pxref{Hard Links}) but +#. TRANS also when you rename a file with @code{rename} (@pxref{Renaming Files}). +#: sysdeps/gnu/errlist.c:210 +#, fuzzy +msgid "Invalid cross-device link" +msgstr "netaisyklingas naudotojas" + +#. TRANS The wrong type of device was given to a function that expects a +#. TRANS particular sort of device. +#: sysdeps/gnu/errlist.c:220 +msgid "No such device" +msgstr "Tokio įrenginio nėra" + +#. TRANS A file that isn't a directory was specified when a directory is required. +#: sysdeps/gnu/errlist.c:229 +#, fuzzy +msgid "Not a directory" +msgstr "Ne aplankas" + +#. TRANS File is a directory; you cannot open a directory for writing, +#. TRANS or create or remove hard links to it. +#: sysdeps/gnu/errlist.c:239 +#, fuzzy +msgid "Is a directory" +msgstr "Aplankas" + +#. TRANS Invalid argument. This is used to indicate various kinds of problems +#. TRANS with passing the wrong argument to a library function. +#: sysdeps/gnu/errlist.c:249 +#, fuzzy +msgid "Invalid argument" +msgstr "Galimi argumentai:" + +#. TRANS The current process has too many files open and can't open any more. +#. TRANS Duplicate descriptors do count toward this limit. +#. TRANS +#. TRANS In BSD and GNU, the number of open files is controlled by a resource +#. TRANS limit that can usually be increased. If you get this error, you might +#. TRANS want to increase the @code{RLIMIT_NOFILE} limit or make it unlimited; +#. TRANS @pxref{Limits on Resources}. +#: sysdeps/gnu/errlist.c:264 +msgid "Too many open files" +msgstr "Per daug atvertų failų" + +#. TRANS There are too many distinct file openings in the entire system. Note +#. TRANS that any number of linked channels count as just one file opening; see +#. TRANS @ref{Linked Channels}. This error never occurs in the GNU system. +#: sysdeps/gnu/errlist.c:275 +msgid "Too many open files in system" +msgstr "Sistemoje per daug atvertų failų" + +#. TRANS Inappropriate I/O control operation, such as trying to set terminal +#. TRANS modes on an ordinary file. +#: sysdeps/gnu/errlist.c:285 +#, fuzzy +msgid "Inappropriate ioctl for device" +msgstr "Netinkamas failo tipas ar formatas" + +#. TRANS An attempt to execute a file that is currently open for writing, or +#. TRANS write to a file that is currently being executed. Often using a +#. TRANS debugger to run a program is considered having it open for writing and +#. TRANS will cause this error. (The name stands for ``text file busy''.) This +#. TRANS is not an error in the GNU system; the text is copied as necessary. +#: sysdeps/gnu/errlist.c:298 +msgid "Text file busy" +msgstr "Tekstinis failas užimtas" + +#. TRANS File too big; the size of a file would be larger than allowed by the system. +#: sysdeps/gnu/errlist.c:307 +#, fuzzy +msgid "File too large" +msgstr "Failas per didelis" + +#. TRANS No space left on device; write operation on a file failed because the +#. TRANS disk is full. +#: sysdeps/gnu/errlist.c:317 +msgid "No space left on device" +msgstr "Įrenginyje neliko vietos" + +#. TRANS Invalid seek operation (such as on a pipe). +#: sysdeps/gnu/errlist.c:326 +msgid "Illegal seek" +msgstr "" + +#. TRANS An attempt was made to modify something on a read-only file system. +#: sysdeps/gnu/errlist.c:335 +msgid "Read-only file system" +msgstr "Failų sistema tik skaitymui" + +#. TRANS Too many links; the link count of a single file would become too large. +#. TRANS @code{rename} can cause this error if the file being renamed already has +#. TRANS as many links as it can take (@pxref{Renaming Files}). +#: sysdeps/gnu/errlist.c:346 +msgid "Too many links" +msgstr "Per daug nuorodų" + +#. TRANS Domain error; used by mathematical functions when an argument value does +#. TRANS not fall into the domain over which the function is defined. +#: sysdeps/gnu/errlist.c:369 +msgid "Numerical argument out of domain" +msgstr "Skaitinis argumentas už apibrėžimo srities" + +#. TRANS Range error; used by mathematical functions when the result value is +#. TRANS not representable because of overflow or underflow. +#: sysdeps/gnu/errlist.c:379 +msgid "Numerical result out of range" +msgstr "Skaitinis rezultatas už ribų" + +#. TRANS Resource temporarily unavailable; the call might work if you try again +#. TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN}; +#. TRANS they are always the same in the GNU C library. +#. TRANS +#. TRANS This error can happen in a few different situations: +#. TRANS +#. TRANS @itemize @bullet +#. TRANS @item +#. TRANS An operation that would block was attempted on an object that has +#. TRANS non-blocking mode selected. Trying the same operation again will block +#. TRANS until some external condition makes it possible to read, write, or +#. TRANS connect (whatever the operation). You can use @code{select} to find out +#. TRANS when the operation will be possible; @pxref{Waiting for I/O}. +#. TRANS +#. TRANS @strong{Portability Note:} In many older Unix systems, this condition +#. TRANS was indicated by @code{EWOULDBLOCK}, which was a distinct error code +#. TRANS different from @code{EAGAIN}. To make your program portable, you should +#. TRANS check for both codes and treat them the same. +#. TRANS +#. TRANS @item +#. TRANS A temporary resource shortage made an operation impossible. @code{fork} +#. TRANS can return this error. It indicates that the shortage is expected to +#. TRANS pass, so your program can try the call again later and it may succeed. +#. TRANS It is probably a good idea to delay for a few seconds before trying it +#. TRANS again, to allow time for other processes to release scarce resources. +#. TRANS Such shortages are usually fairly serious and affect the whole system, +#. TRANS so usually an interactive program should report the error to the user +#. TRANS and return to its command loop. +#. TRANS @end itemize +#: sysdeps/gnu/errlist.c:416 +msgid "Resource temporarily unavailable" +msgstr "Resursas laikinai neprieinamas" + +#. TRANS In the GNU C library, this is another name for @code{EAGAIN} (above). +#. TRANS The values are always the same, on every operating system. +#. TRANS +#. TRANS C libraries in many older Unix systems have @code{EWOULDBLOCK} as a +#. TRANS separate error code. +#: sysdeps/gnu/errlist.c:429 +msgid "Operation would block" +msgstr "Operacija blokuotųsi" + +#. TRANS An operation that cannot complete immediately was initiated on an object +#. TRANS that has non-blocking mode selected. Some functions that must always +#. TRANS block (such as @code{connect}; @pxref{Connecting}) never return +#. TRANS @code{EAGAIN}. Instead, they return @code{EINPROGRESS} to indicate that +#. TRANS the operation has begun and will take some time. Attempts to manipulate +#. TRANS the object before the call completes return @code{EALREADY}. You can +#. TRANS use the @code{select} function to find out when the pending operation +#. TRANS has completed; @pxref{Waiting for I/O}. +#: sysdeps/gnu/errlist.c:445 +msgid "Operation now in progress" +msgstr "Operacija dabar vykdoma" + +#. TRANS An operation is already in progress on an object that has non-blocking +#. TRANS mode selected. +#: sysdeps/gnu/errlist.c:455 +msgid "Operation already in progress" +msgstr "Operacija jau vykdoma" + +#. TRANS A file that isn't a socket was specified when a socket is required. +#: sysdeps/gnu/errlist.c:464 +msgid "Socket operation on non-socket" +msgstr "Lizdo operacija taikoma ne lizdui" + +#. TRANS The size of a message sent on a socket was larger than the supported +#. TRANS maximum size. +#: sysdeps/gnu/errlist.c:474 +msgid "Message too long" +msgstr "Pranešimas per ilgas" + +#. TRANS The socket type does not support the requested communications protocol. +#: sysdeps/gnu/errlist.c:483 +msgid "Protocol wrong type for socket" +msgstr "" + +#. TRANS You specified a socket option that doesn't make sense for the +#. TRANS particular protocol being used by the socket. @xref{Socket Options}. +#: sysdeps/gnu/errlist.c:493 +#, fuzzy +msgid "Protocol not available" +msgstr "Protokolas nepalaikomas" + +#. TRANS The socket domain does not support the requested communications protocol +#. TRANS (perhaps because the requested protocol is completely invalid). +#. TRANS @xref{Creating a Socket}. +#: sysdeps/gnu/errlist.c:504 +msgid "Protocol not supported" +msgstr "Protokolas nepalaikomas" + +#. TRANS The socket type is not supported. +#: sysdeps/gnu/errlist.c:513 +msgid "Socket type not supported" +msgstr "Lizdo tipas nepalaikomas" + +#. TRANS The operation you requested is not supported. Some socket functions +#. TRANS don't make sense for all types of sockets, and others may not be +#. TRANS implemented for all communications protocols. In the GNU system, this +#. TRANS error can happen for many calls when the object does not support the +#. TRANS particular operation; it is a generic indication that the server knows +#. TRANS nothing to do for that call. +#: sysdeps/gnu/errlist.c:527 +#, fuzzy +msgid "Operation not supported" +msgstr "Operacija neleidžiama" + +#. TRANS The socket communications protocol family you requested is not supported. +#: sysdeps/gnu/errlist.c:536 +msgid "Protocol family not supported" +msgstr "Protokolo šeima nepalaikoma" + +#. TRANS The address family specified for a socket is not supported; it is +#. TRANS inconsistent with the protocol being used on the socket. @xref{Sockets}. +#: sysdeps/gnu/errlist.c:546 +msgid "Address family not supported by protocol" +msgstr "Adreso šeima nepalaikoma protokolo" + +#. TRANS The requested socket address is already in use. @xref{Socket Addresses}. +#: sysdeps/gnu/errlist.c:555 +msgid "Address already in use" +msgstr "Adresas jau naudojamas" + +#. TRANS The requested socket address is not available; for example, you tried +#. TRANS to give a socket a name that doesn't match the local host name. +#. TRANS @xref{Socket Addresses}. +#: sysdeps/gnu/errlist.c:566 +msgid "Cannot assign requested address" +msgstr "Nepavyko priskirti prašomo adreso" + +#. TRANS A socket operation failed because the network was down. +#: sysdeps/gnu/errlist.c:575 +msgid "Network is down" +msgstr "Tinklas išjungtas" + +#. TRANS A socket operation failed because the subnet containing the remote host +#. TRANS was unreachable. +#: sysdeps/gnu/errlist.c:585 +msgid "Network is unreachable" +msgstr "Tinklas neprieinamas" + +#. TRANS A network connection was reset because the remote host crashed. +#: sysdeps/gnu/errlist.c:594 +msgid "Network dropped connection on reset" +msgstr "" + +#. TRANS A network connection was aborted locally. +#: sysdeps/gnu/errlist.c:603 +msgid "Software caused connection abort" +msgstr "" + +#. TRANS A network connection was closed for reasons outside the control of the +#. TRANS local host, such as by the remote machine rebooting or an unrecoverable +#. TRANS protocol violation. +#: sysdeps/gnu/errlist.c:614 +msgid "Connection reset by peer" +msgstr "Prisijungimas nutrauktas kito serverio" + +#. TRANS The kernel's buffers for I/O operations are all in use. In GNU, this +#. TRANS error is always synonymous with @code{ENOMEM}; you may get one or the +#. TRANS other from network operations. +#: sysdeps/gnu/errlist.c:625 +msgid "No buffer space available" +msgstr "Nėra vietos buferyje" + +#. TRANS You tried to connect a socket that is already connected. +#. TRANS @xref{Connecting}. +#: sysdeps/gnu/errlist.c:635 +msgid "Transport endpoint is already connected" +msgstr "Transporto galinis taškas jau prijungtas" + +#. TRANS The socket is not connected to anything. You get this error when you +#. TRANS try to transmit data over a socket, without first specifying a +#. TRANS destination for the data. For a connectionless socket (for datagram +#. TRANS protocols, such as UDP), you get @code{EDESTADDRREQ} instead. +#: sysdeps/gnu/errlist.c:647 +msgid "Transport endpoint is not connected" +msgstr "Transporto galinis taškas neprijungtas" + +#. TRANS No default destination address was set for the socket. You get this +#. TRANS error when you try to transmit data over a connectionless socket, +#. TRANS without first specifying a destination for the data with @code{connect}. +#: sysdeps/gnu/errlist.c:658 +msgid "Destination address required" +msgstr "Reikia paskirties adreso" + +#. TRANS The socket has already been shut down. +#: sysdeps/gnu/errlist.c:667 +msgid "Cannot send after transport endpoint shutdown" +msgstr "Negalima siųsti po transporto galinio taško išjungimo (shutdown)" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:676 +#, fuzzy +msgid "Too many references: cannot splice" +msgstr "Per daug nuorodų: negalima skaidyti" + +#. TRANS A socket operation with a specified timeout received no response during +#. TRANS the timeout period. +#: sysdeps/gnu/errlist.c:686 +msgid "Connection timed out" +msgstr "Baigėsi prisijungimo laukimo laikas" + +#. TRANS A remote host refused to allow the network connection (typically because +#. TRANS it is not running the requested service). +#: sysdeps/gnu/errlist.c:696 +msgid "Connection refused" +msgstr "Prisijungimas atmestas" + +#. TRANS Too many levels of symbolic links were encountered in looking up a file name. +#. TRANS This often indicates a cycle of symbolic links. +#: sysdeps/gnu/errlist.c:706 +msgid "Too many levels of symbolic links" +msgstr "Per daug simbolinių nuorodų lygmenų" + +#. TRANS Filename too long (longer than @code{PATH_MAX}; @pxref{Limits for +#. TRANS Files}) or host name too long (in @code{gethostname} or +#. TRANS @code{sethostname}; @pxref{Host Identification}). +#: sysdeps/gnu/errlist.c:717 +msgid "File name too long" +msgstr "Failo vardas per ilgas" + +#. TRANS The remote host for a requested network connection is down. +#: sysdeps/gnu/errlist.c:726 +msgid "Host is down" +msgstr "Serveris neveikia" + +#. TRANS The remote host for a requested network connection is not reachable. +#: sysdeps/gnu/errlist.c:735 +msgid "No route to host" +msgstr "Nėra kelio iki serverio" + +#. TRANS Directory not empty, where an empty directory was expected. Typically, +#. TRANS this error occurs when you are trying to delete a directory. +#: sysdeps/gnu/errlist.c:745 +msgid "Directory not empty" +msgstr "Aplankas netuščias" + +#. TRANS This means that the per-user limit on new process would be exceeded by +#. TRANS an attempted @code{fork}. @xref{Limits on Resources}, for details on +#. TRANS the @code{RLIMIT_NPROC} limit. +#: sysdeps/gnu/errlist.c:756 +msgid "Too many processes" +msgstr "Per daug procesų" + +#. TRANS The file quota system is confused because there are too many users. +#. TRANS @c This can probably happen in a GNU system when using NFS. +#: sysdeps/gnu/errlist.c:766 +msgid "Too many users" +msgstr "Per daug naudotojų" + +#. TRANS The user's disk quota was exceeded. +#: sysdeps/gnu/errlist.c:775 +msgid "Disk quota exceeded" +msgstr "Viršyta disko kvota" + +#. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS +#. TRANS system which is due to file system rearrangements on the server host. +#. TRANS Repairing this condition usually requires unmounting and remounting +#. TRANS the NFS file system on the local host. +#: sysdeps/gnu/errlist.c:787 +msgid "Stale NFS file handle" +msgstr "" + +#. TRANS An attempt was made to NFS-mount a remote file system with a file name that +#. TRANS already specifies an NFS-mounted file. +#. TRANS (This is an error on some operating systems, but we expect it to work +#. TRANS properly on the GNU system, making this error code impossible.) +#: sysdeps/gnu/errlist.c:799 +msgid "Object is remote" +msgstr "Objektas nutolęs" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:808 +msgid "RPC struct is bad" +msgstr "bloga RPC struktūra" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:817 +msgid "RPC version wrong" +msgstr "netinkama RPC versija" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:826 +#, fuzzy +msgid "RPC program not available" +msgstr "RPC: Programa neregistruota" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:835 +msgid "RPC program version wrong" +msgstr "netinkama RPC programos versija" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:844 +msgid "RPC bad procedure for program" +msgstr "" + +#. TRANS No locks available. This is used by the file locking facilities; see +#. TRANS @ref{File Locks}. This error is never generated by the GNU system, but +#. TRANS it can result from an operation to an NFS server running another +#. TRANS operating system. +#: sysdeps/gnu/errlist.c:856 +#, fuzzy +msgid "No locks available" +msgstr "Nėra vietos buferyje" + +#. TRANS Inappropriate file type or format. The file was the wrong type for the +#. TRANS operation, or a data file had the wrong format. +#. TRANS +#. TRANS On some systems @code{chmod} returns this error if you try to set the +#. TRANS sticky bit on a non-directory file; @pxref{Setting Permissions}. +#: sysdeps/gnu/errlist.c:869 +msgid "Inappropriate file type or format" +msgstr "Netinkamas failo tipas ar formatas" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:878 +msgid "Authentication error" +msgstr "Autentikacijos klaida" + +#. TRANS ??? +#: sysdeps/gnu/errlist.c:887 +#, fuzzy +msgid "Need authenticator" +msgstr "Autentikacijos klaida" + +#. TRANS Function not implemented. This indicates that the function called is +#. TRANS not implemented at all, either in the C library itself or in the +#. TRANS operating system. When you get this error, you can be sure that this +#. TRANS particular function will always fail with @code{ENOSYS} unless you +#. TRANS install a new version of the C library or the operating system. +#: sysdeps/gnu/errlist.c:900 +msgid "Function not implemented" +msgstr "Funkcija nerealizuota" + +#. TRANS Not supported. A function returns this error when certain parameter +#. TRANS values are valid, but the functionality they request is not available. +#. TRANS This can mean that the function does not implement a particular command +#. TRANS or option value or flag bit at all. For functions that operate on some +#. TRANS object given in a parameter, such as a file descriptor or a port, it +#. TRANS might instead mean that only @emph{that specific object} (file +#. TRANS descriptor, port, etc.) is unable to support the other parameters given; +#. TRANS different file descriptors might support different ranges of parameter +#. TRANS values. +#. TRANS +#. TRANS If the entire function is not available at all in the implementation, +#. TRANS it returns @code{ENOSYS} instead. +#: sysdeps/gnu/errlist.c:920 +msgid "Not supported" +msgstr "Nepalaikoma" + +#. TRANS While decoding a multibyte character the function came along an invalid +#. TRANS or an incomplete sequence of bytes or the given wide character is invalid. +#: sysdeps/gnu/errlist.c:930 +msgid "Invalid or incomplete multibyte or wide character" +msgstr "Netaisyklingas arba nepilnas daugiabaitis simbolis" + +#. TRANS In the GNU system, servers supporting the @code{term} protocol return +#. TRANS this error for certain operations when the caller is not in the +#. TRANS foreground process group of the terminal. Users do not usually see this +#. TRANS error because functions such as @code{read} and @code{write} translate +#. TRANS it into a @code{SIGTTIN} or @code{SIGTTOU} signal. @xref{Job Control}, +#. TRANS for information on process groups and these signals. +#: sysdeps/gnu/errlist.c:944 +msgid "Inappropriate operation for background process" +msgstr "" + +#. TRANS In the GNU system, opening a file returns this error when the file is +#. TRANS translated by a program and the translator program dies while starting +#. TRANS up, before it has connected to the file. +#: sysdeps/gnu/errlist.c:955 +msgid "Translator died" +msgstr "" + +#. TRANS The experienced user will know what is wrong. +#. TRANS @c This error code is a joke. Its perror text is part of the joke. +#. TRANS @c Don't change it. +#: sysdeps/gnu/errlist.c:966 +msgid "?" +msgstr "?" + +#. TRANS You did @strong{what}? +#: sysdeps/gnu/errlist.c:975 +msgid "You really blew it this time" +msgstr "Šįkart susimovei kaip reikiant" + +#. TRANS Go home and have a glass of warm, dairy-fresh milk. +#: sysdeps/gnu/errlist.c:984 +msgid "Computer bought the farm" +msgstr "Kompiuteris nupirko fermą" + +#. TRANS This error code has no purpose. +#: sysdeps/gnu/errlist.c:993 +#, fuzzy +msgid "Gratuitous error" +msgstr "relokacijos klaida" + +#: sysdeps/gnu/errlist.c:1001 +#, fuzzy +msgid "Bad message" +msgstr "neužbaigtas pranešimas" + +#: sysdeps/gnu/errlist.c:1009 +msgid "Identifier removed" +msgstr "" + +#: sysdeps/gnu/errlist.c:1017 +msgid "Multihop attempted" +msgstr "" + +#: sysdeps/gnu/errlist.c:1025 +#, fuzzy +msgid "No data available" +msgstr "Nėra vietos buferyje" + +#: sysdeps/gnu/errlist.c:1033 +#, fuzzy +msgid "Link has been severed" +msgstr "Raktas atšauktas" + +#: sysdeps/gnu/errlist.c:1041 +msgid "No message of desired type" +msgstr "" + +#: sysdeps/gnu/errlist.c:1049 +msgid "Out of streams resources" +msgstr "" + +#: sysdeps/gnu/errlist.c:1057 +msgid "Device not a stream" +msgstr "Įrenginys nėra srautas" + +#: sysdeps/gnu/errlist.c:1065 +msgid "Value too large for defined data type" +msgstr "Reikšmė per didelė apibrėžtam duomenų tipui" + +#: sysdeps/gnu/errlist.c:1073 +msgid "Protocol error" +msgstr "Protokolo klaida" + +#: sysdeps/gnu/errlist.c:1081 +#, fuzzy +msgid "Timer expired" +msgstr "Baigėsi rakto galiojimo laikas" + +#. TRANS Operation canceled; an asynchronous operation was canceled before it +#. TRANS completed. @xref{Asynchronous I/O}. When you call @code{aio_cancel}, +#. TRANS the normal result is for the operations affected to complete with this +#. TRANS error; @pxref{Cancel AIO Operations}. +#: sysdeps/gnu/errlist.c:1093 +msgid "Operation canceled" +msgstr "Operacija nutraukta" + +#: sysdeps/gnu/errlist.c:1101 +msgid "Interrupted system call should be restarted" +msgstr "Pertrauktas sistemos iškvietimas turėtų būti įvykdytas iš naujo" + +#: sysdeps/gnu/errlist.c:1109 +msgid "Channel number out of range" +msgstr "Kanalo numeris už ribų" + +#: sysdeps/gnu/errlist.c:1117 +msgid "Level 2 not synchronized" +msgstr "2 lygmuo nesinchonizuotas" + +#: sysdeps/gnu/errlist.c:1125 +msgid "Level 3 halted" +msgstr "3 lygmuo sustabdytas" + +#: sysdeps/gnu/errlist.c:1133 +#, fuzzy +msgid "Level 3 reset" +msgstr "3 lygmuo sustabdytas" + +#: sysdeps/gnu/errlist.c:1141 +#, fuzzy +msgid "Link number out of range" +msgstr "%s: eilutės numeris už ribų" + +#: sysdeps/gnu/errlist.c:1149 +#, fuzzy +msgid "Protocol driver not attached" +msgstr "Protokolas nepalaikomas" + +#: sysdeps/gnu/errlist.c:1157 +#, fuzzy +msgid "No CSI structure available" +msgstr "Nėra vietos buferyje" + +#: sysdeps/gnu/errlist.c:1165 +msgid "Level 2 halted" +msgstr "2 lygmuo sustabdytas" + +#: sysdeps/gnu/errlist.c:1173 +#, fuzzy +msgid "Invalid exchange" +msgstr "netaisyklingas kvietėjas" + +#: sysdeps/gnu/errlist.c:1181 +#, fuzzy +msgid "Invalid request descriptor" +msgstr "Blogas failo deskriptorius" + +#: sysdeps/gnu/errlist.c:1189 +msgid "Exchange full" +msgstr "" + +#: sysdeps/gnu/errlist.c:1197 +msgid "No anode" +msgstr "" + +#: sysdeps/gnu/errlist.c:1205 +#, fuzzy +msgid "Invalid request code" +msgstr "Visos užklausos baigtos" + +#: sysdeps/gnu/errlist.c:1213 +#, fuzzy +msgid "Invalid slot" +msgstr "netaisyklingas kvietėjas" + +#: sysdeps/gnu/errlist.c:1221 +msgid "File locking deadlock error" +msgstr "" + +#: sysdeps/gnu/errlist.c:1229 +msgid "Bad font file format" +msgstr "" + +#: sysdeps/gnu/errlist.c:1237 +msgid "Machine is not on the network" +msgstr "Kompiuterio nėra tinkle" + +#: sysdeps/gnu/errlist.c:1245 +msgid "Package not installed" +msgstr "Paketas neįdiegtas" + +#: sysdeps/gnu/errlist.c:1253 +#, fuzzy +msgid "Advertise error" +msgstr "vidinė klaida" + +#: sysdeps/gnu/errlist.c:1261 +#, fuzzy +msgid "Srmount error" +msgstr "Protokolo klaida" + +#: sysdeps/gnu/errlist.c:1269 +msgid "Communication error on send" +msgstr "Komunikacijos klaida siunčiant" + +#: sysdeps/gnu/errlist.c:1277 +msgid "RFS specific error" +msgstr "RFS specifinė klaida" + +#: sysdeps/gnu/errlist.c:1285 +msgid "Name not unique on network" +msgstr "Vardas tinkle neunikalus" + +#: sysdeps/gnu/errlist.c:1293 +#, fuzzy +msgid "File descriptor in bad state" +msgstr "Failo deskriptorius nekorektiškoje būsenoje" + +#: sysdeps/gnu/errlist.c:1301 +msgid "Remote address changed" +msgstr "Nutolęs adresas pasikeitė" + +#: sysdeps/gnu/errlist.c:1309 +msgid "Can not access a needed shared library" +msgstr "" + +#: sysdeps/gnu/errlist.c:1317 +msgid "Accessing a corrupted shared library" +msgstr "" + +#: sysdeps/gnu/errlist.c:1325 +msgid ".lib section in a.out corrupted" +msgstr "" + +#: sysdeps/gnu/errlist.c:1333 +#, fuzzy +msgid "Attempting to link in too many shared libraries" +msgstr "klaida įkeliant bendrąsias bibliotekas" + +#: sysdeps/gnu/errlist.c:1341 +msgid "Cannot exec a shared library directly" +msgstr "" + +#: sysdeps/gnu/errlist.c:1349 +msgid "Streams pipe error" +msgstr "" + +#: sysdeps/gnu/errlist.c:1357 +msgid "Structure needs cleaning" +msgstr "" + +#: sysdeps/gnu/errlist.c:1365 +msgid "Not a XENIX named type file" +msgstr "" + +#: sysdeps/gnu/errlist.c:1373 +#, fuzzy +msgid "No XENIX semaphores available" +msgstr "Nėra vietos buferyje" + +#: sysdeps/gnu/errlist.c:1381 +msgid "Is a named type file" +msgstr "" + +#: sysdeps/gnu/errlist.c:1389 +msgid "Remote I/O error" +msgstr "Nutolusio įvedimo/išvedimo klaida" + +#: sysdeps/gnu/errlist.c:1397 +#, fuzzy +msgid "No medium found" +msgstr "Nerasta laikmena" + +#: sysdeps/gnu/errlist.c:1405 +msgid "Wrong medium type" +msgstr "Netinkamas laikmenos tipas" + +#: sysdeps/gnu/errlist.c:1413 +msgid "Required key not available" +msgstr "Reikalingas raktas nerastas" + +#: sysdeps/gnu/errlist.c:1421 +msgid "Key has expired" +msgstr "Baigėsi rakto galiojimo laikas" + +#: sysdeps/gnu/errlist.c:1429 +msgid "Key has been revoked" +msgstr "Raktas atšauktas" + +#: sysdeps/gnu/errlist.c:1437 +msgid "Key was rejected by service" +msgstr "Raktas atmestas tarnybos" + +#: sysdeps/gnu/errlist.c:1445 +msgid "Owner died" +msgstr "" + +#: sysdeps/gnu/errlist.c:1453 +msgid "State not recoverable" +msgstr "" + +#: sysdeps/mach/_strerror.c:57 +msgid "Error in unknown error system: " +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:1 +msgid "Address family for hostname not supported" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:2 +msgid "Temporary failure in name resolution" +msgstr "Laikinas vardų paieškos sutrikimas" + +#: sysdeps/posix/gai_strerror-strs.h:3 +msgid "Bad value for ai_flags" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:4 +msgid "Non-recoverable failure in name resolution" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:5 +msgid "ai_family not supported" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:6 +msgid "Memory allocation failure" +msgstr "Atminties išskyrimo klaida" + +#: sysdeps/posix/gai_strerror-strs.h:7 +msgid "No address associated with hostname" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:8 +msgid "Name or service not known" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:9 +msgid "Servname not supported for ai_socktype" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:10 +msgid "ai_socktype not supported" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:11 +msgid "System error" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:12 +msgid "Processing request in progress" +msgstr "" + +#: sysdeps/posix/gai_strerror-strs.h:13 +msgid "Request canceled" +msgstr "Užklausa nutraukta" + +#: sysdeps/posix/gai_strerror-strs.h:14 +msgid "Request not canceled" +msgstr "Užklausa nenutraukta" + +#: sysdeps/posix/gai_strerror-strs.h:15 +msgid "All requests done" +msgstr "Visos užklausos baigtos" + +#: sysdeps/posix/gai_strerror-strs.h:16 +msgid "Interrupted by a signal" +msgstr "Nutraukta signalo" + +#: sysdeps/posix/gai_strerror-strs.h:17 +msgid "Parameter string not correctly encoded" +msgstr "" + +#: sysdeps/unix/siglist.c:26 +msgid "Signal 0" +msgstr "" + +#: sysdeps/unix/siglist.c:32 +#, fuzzy +msgid "IOT trap" +msgstr "EMT gaudyklė" + +#: sysdeps/unix/sysv/linux/i386/readelflib.c:49 +#, fuzzy, c-format +msgid "%s is for unknown machine %d.\n" +msgstr "Rasta %d bibliotekų podėlyje „%s“\n" + +#: sysdeps/unix/sysv/linux/ia64/makecontext.c:63 +#, c-format +msgid "makecontext: does not know how to handle more than 8 arguments\n" +msgstr "" + +#: sysdeps/unix/sysv/linux/lddlibc4.c:64 +#, fuzzy, c-format +msgid "cannot open `%s'" +msgstr "nepavyko atverti" + +#: sysdeps/unix/sysv/linux/lddlibc4.c:68 +#, fuzzy, c-format +msgid "cannot read header from `%s'" +msgstr "nepavyko perskaityti antraštės" + +#: timezone/zdump.c:211 +#, fuzzy +msgid "lacks alphabetic at start" +msgstr "laiko zonos santrumpos pradžioje nėra raidės" + +#: timezone/zdump.c:213 +#, fuzzy +msgid "has fewer than 3 alphabetics" +msgstr "laiko zonos santrumpoje yra daugiau negu 3 raidės" + +#: timezone/zdump.c:215 +#, fuzzy +msgid "has more than 6 alphabetics" +msgstr "laiko zonos santrumpoje yra daugiau negu 3 raidės" + +#: timezone/zdump.c:223 +msgid "differs from POSIX standard" +msgstr "" + +#: timezone/zdump.c:229 +#, c-format +msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n" +msgstr "" + +#: timezone/zdump.c:280 +#, c-format +msgid "%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n" +msgstr "" + +#: timezone/zdump.c:297 +#, fuzzy, c-format +msgid "%s: wild -c argument %s\n" +msgstr "%s: Per daug argumentų\n" + +#: timezone/zdump.c:388 +#, fuzzy +msgid "Error writing to standard output" +msgstr "standartinis išvedimas" + +#: timezone/zdump.c:411 +#, c-format +msgid "%s: use of -v on system with floating time_t other than float or double\n" +msgstr "" + +#: timezone/zic.c:392 +#, fuzzy, c-format +msgid "%s: Memory exhausted: %s\n" +msgstr "Baigėsi atmintis" + +#: timezone/zic.c:451 +#, c-format +msgid "\"%s\", line %d: %s" +msgstr "" + +#: timezone/zic.c:454 +#, c-format +msgid " (rule from \"%s\", line %d)" +msgstr "" + +#: timezone/zic.c:466 +#, fuzzy +msgid "warning: " +msgstr "įspėjimas: " + +#: timezone/zic.c:476 +#, c-format +msgid "" +"%s: usage is %s [ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" +"\t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n" +msgstr "" + +#: timezone/zic.c:511 +#, fuzzy +msgid "wild compilation-time specification of zic_t" +msgstr "%s: nėra baigimo specifikacijos" + +#: timezone/zic.c:528 +#, fuzzy, c-format +msgid "%s: More than one -d option specified\n" +msgstr "%s: nėra baigimo specifikacijos" + +#: timezone/zic.c:538 +#, fuzzy, c-format +msgid "%s: More than one -l option specified\n" +msgstr "%s: nėra baigimo specifikacijos" + +#: timezone/zic.c:548 +#, fuzzy, c-format +msgid "%s: More than one -p option specified\n" +msgstr "%s: nėra baigimo specifikacijos" + +#: timezone/zic.c:558 +#, fuzzy, c-format +msgid "%s: More than one -y option specified\n" +msgstr "%s: nėra baigimo specifikacijos" + +#: timezone/zic.c:568 +#, fuzzy, c-format +msgid "%s: More than one -L option specified\n" +msgstr "%s: nėra baigimo specifikacijos" + +#: timezone/zic.c:617 +msgid "link to link" +msgstr "" + +#: timezone/zic.c:682 +msgid "hard link failed, symbolic link used" +msgstr "" + +#: timezone/zic.c:690 +#, fuzzy, c-format +msgid "%s: Can't link from %s to %s: %s\n" +msgstr "Nepavyko susaistyti (link) %s su %s" + +#: timezone/zic.c:762 timezone/zic.c:764 +msgid "same rule name in multiple files" +msgstr "" + +#: timezone/zic.c:805 +msgid "unruly zone" +msgstr "" + +#: timezone/zic.c:812 +#, c-format +msgid "%s in ruleless zone" +msgstr "" + +#: timezone/zic.c:833 +msgid "standard input" +msgstr "" + +#: timezone/zic.c:838 +#, fuzzy, c-format +msgid "%s: Can't open %s: %s\n" +msgstr "nepavyko atverti" + +#: timezone/zic.c:849 +#, fuzzy +msgid "line too long" +msgstr "Failo vardas per ilgas" + +#: timezone/zic.c:869 +msgid "input line of unknown type" +msgstr "" + +#: timezone/zic.c:885 +#, c-format +msgid "%s: Leap line in non leap seconds file %s\n" +msgstr "" + +#: timezone/zic.c:892 timezone/zic.c:1329 timezone/zic.c:1351 +#, c-format +msgid "%s: panic: Invalid l_value %d\n" +msgstr "" + +#: timezone/zic.c:900 +#, fuzzy, c-format +msgid "%s: Error reading %s\n" +msgstr "%s: Klaida rašant %s\n" + +#: timezone/zic.c:907 +#, fuzzy, c-format +msgid "%s: Error closing %s: %s\n" +msgstr "%s: Klaida rašant %s\n" + +#: timezone/zic.c:912 +msgid "expected continuation line not found" +msgstr "" + +#: timezone/zic.c:956 timezone/zic.c:2489 timezone/zic.c:2508 +msgid "time overflow" +msgstr "" + +#: timezone/zic.c:960 +msgid "24:00 not handled by pre-1998 versions of zic" +msgstr "" + +#: timezone/zic.c:963 +msgid "values over 24 hours not handled by pre-2007 versions of zic" +msgstr "" + +#: timezone/zic.c:976 +msgid "wrong number of fields on Rule line" +msgstr "" + +#: timezone/zic.c:980 +msgid "nameless rule" +msgstr "" + +#: timezone/zic.c:985 +#, fuzzy +msgid "invalid saved time" +msgstr "netaisyklingas kvietėjas" + +#: timezone/zic.c:1006 +msgid "wrong number of fields on Zone line" +msgstr "" + +#: timezone/zic.c:1012 +#, c-format +msgid "\"Zone %s\" line and -l option are mutually exclusive" +msgstr "" + +#: timezone/zic.c:1020 +#, c-format +msgid "\"Zone %s\" line and -p option are mutually exclusive" +msgstr "" + +#: timezone/zic.c:1032 +#, c-format +msgid "duplicate zone name %s (file \"%s\", line %d)" +msgstr "" + +#: timezone/zic.c:1048 +msgid "wrong number of fields on Zone continuation line" +msgstr "" + +#: timezone/zic.c:1088 +#, fuzzy +msgid "invalid UTC offset" +msgstr "netaisyklingas kvietėjas" + +#: timezone/zic.c:1091 +#, fuzzy +msgid "invalid abbreviation format" +msgstr "netinkamas mėnesio pavadinimas" + +#: timezone/zic.c:1120 +msgid "Zone continuation line end time is not after end time of previous line" +msgstr "" + +#: timezone/zic.c:1148 +msgid "wrong number of fields on Leap line" +msgstr "" + +#: timezone/zic.c:1157 +#, fuzzy +msgid "invalid leaping year" +msgstr "nurodyta netaisyklinga koduotė" + +#: timezone/zic.c:1177 timezone/zic.c:1283 +#, fuzzy +msgid "invalid month name" +msgstr "netaisyklinga veiksena" + +#: timezone/zic.c:1190 timezone/zic.c:1396 timezone/zic.c:1410 +msgid "invalid day of month" +msgstr "netinkama mėnesio diena" + +#: timezone/zic.c:1195 +msgid "time before zero" +msgstr "" + +#: timezone/zic.c:1199 +msgid "time too small" +msgstr "" + +#: timezone/zic.c:1203 +#, fuzzy +msgid "time too large" +msgstr "Failas per didelis" + +#: timezone/zic.c:1207 timezone/zic.c:1312 +#, fuzzy +msgid "invalid time of day" +msgstr "netaisyklinga veiksena" + +#: timezone/zic.c:1226 +msgid "illegal CORRECTION field on Leap line" +msgstr "" + +#: timezone/zic.c:1231 +msgid "illegal Rolling/Stationary field on Leap line" +msgstr "" + +#: timezone/zic.c:1247 +msgid "wrong number of fields on Link line" +msgstr "" + +#: timezone/zic.c:1251 +msgid "blank FROM field on Link line" +msgstr "" + +#: timezone/zic.c:1255 +msgid "blank TO field on Link line" +msgstr "" + +#: timezone/zic.c:1333 +#, fuzzy +msgid "invalid starting year" +msgstr "netaisyklingas naudotojas" + +#: timezone/zic.c:1355 +#, fuzzy +msgid "invalid ending year" +msgstr "nurodyta netaisyklinga koduotė" + +#: timezone/zic.c:1359 +msgid "starting year greater than ending year" +msgstr "" + +#: timezone/zic.c:1366 +msgid "typed single year" +msgstr "" + +#: timezone/zic.c:1401 +#, fuzzy +msgid "invalid weekday name" +msgstr "netinkamas mėnesio pavadinimas" + +#: timezone/zic.c:1579 +#, fuzzy, c-format +msgid "%s: Can't remove %s: %s\n" +msgstr "%s:%u: nepavyko perskaityti aplanko %s" + +#: timezone/zic.c:1589 +#, fuzzy, c-format +msgid "%s: Can't create %s: %s\n" +msgstr "%s:%u: nepavyko perskaityti aplanko %s" + +#: timezone/zic.c:1739 +#, c-format +msgid "%s: Error writing %s\n" +msgstr "%s: Klaida rašant %s\n" + +#: timezone/zic.c:2031 +msgid "no POSIX environment variable for zone" +msgstr "" + +#: timezone/zic.c:2185 +msgid "can't determine time zone abbreviation to use just after until time" +msgstr "" + +#: timezone/zic.c:2231 +#, fuzzy +msgid "too many transitions?!" +msgstr "per daug keliamųjų sekundžių" + +#: timezone/zic.c:2250 +msgid "internal error - addtype called with bad isdst" +msgstr "" + +#: timezone/zic.c:2254 +msgid "internal error - addtype called with bad ttisstd" +msgstr "" + +#: timezone/zic.c:2258 +msgid "internal error - addtype called with bad ttisgmt" +msgstr "" + +#: timezone/zic.c:2277 +msgid "too many local time types" +msgstr "per daug lokalaus laiko tipų" + +#: timezone/zic.c:2281 +#, fuzzy +msgid "UTC offset out of range" +msgstr "UTC poslinkis už ribų" + +#: timezone/zic.c:2309 +msgid "too many leap seconds" +msgstr "per daug keliamųjų sekundžių" + +#: timezone/zic.c:2315 +msgid "repeated leap second moment" +msgstr "Pakartotinis keliamosios sekundės momentas" + +#: timezone/zic.c:2367 +msgid "Wild result from command execution" +msgstr "" + +#: timezone/zic.c:2368 +#, c-format +msgid "%s: command was '%s', result was %d\n" +msgstr "" + +#: timezone/zic.c:2466 +msgid "Odd number of quotation marks" +msgstr "Nelyginis kabučių skaičius" + +#: timezone/zic.c:2555 +msgid "use of 2/29 in non leap-year" +msgstr "vasario 29 d. nekeliamuosiuose metuose" + +#: timezone/zic.c:2590 +msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic" +msgstr "" + +#: timezone/zic.c:2622 +msgid "time zone abbreviation lacks alphabetic at start" +msgstr "laiko zonos santrumpos pradžioje nėra raidės" + +#: timezone/zic.c:2624 +msgid "time zone abbreviation has more than 3 alphabetics" +msgstr "laiko zonos santrumpoje yra daugiau negu 3 raidės" + +#: timezone/zic.c:2626 +#, fuzzy +msgid "time zone abbreviation has too many alphabetics" +msgstr "laiko zonos santrumpoje yra daugiau negu 3 raidės" + +#: timezone/zic.c:2636 +#, fuzzy +msgid "time zone abbreviation differs from POSIX standard" +msgstr "laiko zonos santrumpos pradžioje nėra raidės" + +#: timezone/zic.c:2648 +msgid "too many, or too long, time zone abbreviations" +msgstr "" + +#: timezone/zic.c:2689 +#, fuzzy, c-format +msgid "%s: Can't create directory %s: %s\n" +msgstr "Nepavyko atverti aplanko %s" + +#: timezone/zic.c:2711 +#, c-format +msgid "%s: %d did not sign extend correctly\n" +msgstr "" + +#~ msgid "%s: first non-whitespace character is not `\"'" +#~ msgstr "%s: pirmas ne tarpo simbolis nėra „\"“" + +#~ msgid "no closing `%c' in %s" +#~ msgstr "nėra uždarančiojo „%c“ %s" + +#, fuzzy +#~ msgid "%s: cannot read: %s" +#~ msgstr "%s:%u: nepavyko perskaityti aplanko %s" + +#~ msgid "%s is not bound to any keys.\n" +#~ msgstr "%s nėra priskirtas jokiam klavišui.\n" + +#~ msgid "%s can be invoked via " +#~ msgstr "%s gali būti iškviestas su" + +#~ msgid "only meaningful in a `for', `while', or `until' loop" +#~ msgstr "prasminga tik „for“, „while“ arba „until“ cikle" + +#~ msgid " " +#~ msgstr " " + +#~ msgid "HOME not set" +#~ msgstr "HOME nenustatytas" + +#~ msgid "OLDPWD not set" +#~ msgstr "OLDPWD nenustatytas" + +#, fuzzy +#~ msgid "%s: option requires an argument" +#~ msgstr "%s: parametrui „%s“ reikia argumento\n" + +#~ msgid "%s: numeric argument required" +#~ msgstr "%s: reikia skaitinio argumento" + +#, fuzzy +#~ msgid "%s: invalid option name" +#~ msgstr "%s: netaisyklingas parametras --%c\n" + +#~ msgid "`%s': not a valid identifier" +#~ msgstr "`%s': netaisyklingas identifikatorius" + +#, fuzzy +#~ msgid "%s: invalid number" +#~ msgstr "nekorektiška eilutė" + +#, fuzzy +#~ msgid "%s: invalid signal specification" +#~ msgstr "netaisyklingas apibrėžimas" + +#~ msgid "`%s': not a pid or valid job spec" +#~ msgstr "„%s“: ne pid'as ar taisyklinga darbo specifikacija" + +#~ msgid "%s: readonly variable" +#~ msgstr "%s: kintamasis tik skaitymui" + +#, fuzzy +#~ msgid "%s: %s out of range" +#~ msgstr "UTC poslinkis už ribų" + +#~ msgid "%s: no such job" +#~ msgstr "%s: nėra tokio darbo" + +#~ msgid "%s: no job control" +#~ msgstr "%s: nėra darbų valdymo" + +#~ msgid "no job control" +#~ msgstr "nėra darbų valdymo" + +#~ msgid "%s: restricted" +#~ msgstr "%s: apribota" + +#, fuzzy +#~ msgid "%s: not a shell builtin" +#~ msgstr "%s nėra simbolinė nuoroda\n" + +#, fuzzy +#~ msgid "%s: error retrieving current directory: %s: %s\n" +#~ msgstr "%s: Nepavyko sukurti aplanko %s: %s\n" + +#~ msgid "%s: ambiguous job spec" +#~ msgstr "%s: dviprasmis darbo aprašymas" + +#~ msgid "warning: -F option may not work as you expect" +#~ msgstr "įspėjimas: parametras -F gali neveikti taip, kaip tikitės" + +#~ msgid "warning: -C option may not work as you expect" +#~ msgstr "įspėjimas: parametras -C gali neveikti taip, kaip tikitės" + +#~ msgid "can only be used in a function" +#~ msgstr "galima naudoti tik funkcijoje" + +#~ msgid "cannot use `-f' to make functions" +#~ msgstr "negalima naudoti „-f“ funkcijoms kurti" + +#~ msgid "%s: readonly function" +#~ msgstr "%s: funkcija tik skaitymui" + +#~ msgid "%s: cannot destroy array variables in this way" +#~ msgstr "%s: negalima tokiu būdu sunaikinti masyvų kintamųjų" + +#, fuzzy +#~ msgid "%s: not dynamically loaded" +#~ msgstr "nepavyko dinamiškai įkelti paleidžiamojo failo" + +#, fuzzy +#~ msgid "%s: cannot delete: %s" +#~ msgstr "%s:%u: nepavyko perskaityti aplanko %s" + +#~ msgid "There are stopped jobs.\n" +#~ msgstr "Yra sustabdytų darbų.\n" + +#~ msgid "%s: hash table empty\n" +#~ msgstr "%s: maišos lentelė tuščia\n" + +#~ msgid "no help topics match `%s'. Try `help help' or `man -k %s' or `info %s'." +#~ msgstr "nėra žinyno temų, atitinkančių „%s“. Bandykite „help help“, „man -k %s“ arba „info %s“." + +#~ msgid "missing hex digit for \\x" +#~ msgstr "trūksta šešioliktainio skaitmens išraiškoje \\x" + +#, fuzzy +#~ msgid "no other directory" +#~ msgstr "Ne aplankas" + +#, fuzzy +#~ msgid "<no current directory>" +#~ msgstr "Ne aplankas" + +#, fuzzy +#~ msgid "%s: invalid file descriptor specification" +#~ msgstr "Blogas failo deskriptorius" + +#~ msgid "read error: %d: %s" +#~ msgstr "skaitymo klaida: %d: %s" + +#~ msgid "can only `return' from a function or sourced script" +#~ msgstr "galima grįžti (return) tik iš funkcijos ar scenarijaus" + +#, fuzzy +#~ msgid "%s: cannot unset: readonly %s" +#~ msgstr "%s:%u: nepavyko perskaityti aplanko %s" + +#~ msgid "%s: not an array variable" +#~ msgstr "%s: ne masyvo kintamasis" + +#~ msgid "%s: not a function" +#~ msgstr "%s: ne funkcija" + +#~ msgid "shift count" +#~ msgstr "postūmių skaičius" + +#, fuzzy +#~ msgid "%s: invalid shell option name" +#~ msgstr "%s: netaisyklingas parametras --%c\n" + +#~ msgid "filename argument required" +#~ msgstr "reikia failo pavadinimo argumento" + +#, fuzzy +#~ msgid "cannot suspend a login shell" +#~ msgstr "nepavyko atverti duomenų failo" + +#~ msgid "%s is aliased to `%s'\n" +#~ msgstr "%s yra „%s“ sinonimas\n" + +#~ msgid "%s is a shell keyword\n" +#~ msgstr "%s yra aplinkos raktinis žodis\n" + +#~ msgid "%s is a function\n" +#~ msgstr "%s yra funkcija\n" + +#, fuzzy +#~ msgid "%s is a shell builtin\n" +#~ msgstr "%s nėra simbolinė nuoroda\n" + +#~ msgid "%s is %s\n" +#~ msgstr "%s yra %s\n" + +#, fuzzy +#~ msgid "%s: invalid limit argument" +#~ msgstr "Netaisyklingas argumentas" + +#~ msgid "`%c': bad command" +#~ msgstr "`%c': bloga komanda" + +#, fuzzy +#~ msgid "%s: cannot get limit: %s" +#~ msgstr "%s:%u: nepavyko perskaityti aplanko %s" + +#, fuzzy +#~ msgid "%s: cannot modify limit: %s" +#~ msgstr "%s:%u: nepavyko perskaityti aplanko %s" + +#, fuzzy +#~ msgid "octal number" +#~ msgstr "netaisyklingas rinkinio numeris" + +#, fuzzy +#~ msgid "`%c': invalid symbolic mode character" +#~ msgstr "netaisyklingas kabučių simbolis" + +#~ msgid "last command: %s\n" +#~ msgstr "paskutinė komanda: %s\n" + +#~ msgid "Aborting..." +#~ msgstr "Nutraukiama..." + +#~ msgid "bad command type" +#~ msgstr "blogas komandos tipas" + +#, fuzzy +#~ msgid "bad jump" +#~ msgstr "blogas argumentas" + +#~ msgid "%s: unbound variable" +#~ msgstr "%s: nepriskirtas kintamasis" + +#~ msgid "\atimed out waiting for input: auto-logout\n" +#~ msgstr "\alaukiant įvedimo baigėsi laikas: automatiškai atsijungta\n" + +#, fuzzy +#~ msgid "TIMEFORMAT: `%c': invalid format character" +#~ msgstr "netaisyklingas kabučių simbolis" + +#~ msgid "%s: %s: bad interpreter" +#~ msgstr "%s: %s: blogas interpretatorius" + +#~ msgid "expression recursion level exceeded" +#~ msgstr "viršytas išraiškos rekursijos lygis" + +#~ msgid "recursion stack underflow" +#~ msgstr "rekursijos steko atvirkštinis perpildymas" + +#~ msgid "attempted assignment to non-variable" +#~ msgstr "bandymas priskirti ne kintamajam" + +#~ msgid "division by 0" +#~ msgstr "dalyba iš 0" + +#~ msgid "bug: bad expassign token" +#~ msgstr "klaida: bloga expassign leksema" + +#~ msgid "`:' expected for conditional expression" +#~ msgstr "sąlygos išraiškoje tikėtasi „:“" + +#~ msgid "exponent less than 0" +#~ msgstr "eksponentas mažesnis už 0" + +#~ msgid "missing `)'" +#~ msgstr "Trūksta „)“" + +#~ msgid "syntax error: operand expected" +#~ msgstr "sintaksės klaida: tikėtasi operando" + +#~ msgid "syntax error: invalid arithmetic operator" +#~ msgstr "sintaksės klaida: netaisyklingas aritmetinis operatorius" + +#, fuzzy +#~ msgid "invalid arithmetic base" +#~ msgstr "netaisyklinga vardų sritis" + +#~ msgid "value too great for base" +#~ msgstr "per didelė pagrindo reikšmė" + +#~ msgid "getcwd: cannot access parent directories" +#~ msgstr "getcwd: nepavyko pasiekti aukštesnių aplankų" + +#~ msgid "describe_pid: %ld: no such pid" +#~ msgstr "describe_pid: %ld: tokio pid nėra" + +#~ msgid "wait_for: No record of process %ld" +#~ msgstr "wait_for: nėra proceso %ld įrašo" + +#~ msgid "wait_for_job: job %d is stopped" +#~ msgstr "wait_for_job: darbas %d yra sustabdytas" + +#~ msgid "%s: job has terminated" +#~ msgstr "%s: darbas baigtas" + +#~ msgid "%s: job %d already in background" +#~ msgstr "%s: darbas %d jau fone" + +#~ msgid "no job control in this shell" +#~ msgstr "šioje aplinkoje nėra darbų valdymo" + +#~ msgid "malloc: failed assertion: %s\n" +#~ msgstr "malloc: pažeista prielaida: %s\n" + +#~ msgid "" +#~ "\r\n" +#~ "malloc: %s:%d: assertion botched\r\n" +#~ msgstr "" +#~ "\r\n" +#~ "malloc: %s:%d: prielaida pažeista\r\n" + +#~ msgid "allocated" +#~ msgstr "išskirta" + +#~ msgid "freed" +#~ msgstr "atlaisvinta" + +#~ msgid "requesting resize" +#~ msgstr "prašoma dydžio keitimo" + +#~ msgid "just resized" +#~ msgstr "tik ką pakeistas dydis" + +#, fuzzy +#~ msgid "bug: unknown operation" +#~ msgstr "RPC: Nežinomas protokolas" + +#, fuzzy +#~ msgid "%s: host unknown" +#~ msgstr "nežinoma" + +#~ msgid "%s: bad network path specification" +#~ msgstr "%s: netaisyklingas tinklo kelias" + +#~ msgid "You have mail in $_" +#~ msgstr "Turite laiškų $_" + +#~ msgid "You have new mail in $_" +#~ msgstr "Turite naujų laiškų $_" + +#~ msgid "The mail in %s has been read\n" +#~ msgstr "Paštas %s perskaitytas\n" + +#~ msgid "syntax error: arithmetic expression required" +#~ msgstr "sintaksės klaida: reikia aritmetinės išraiškos" + +#~ msgid "syntax error: `;' unexpected" +#~ msgstr "sintaksės klaida: netikėtas „;“" + +#, fuzzy +#~ msgid "syntax error: `((%s))'" +#~ msgstr "sintaksės klaida prologe: %s" + +#~ msgid "make_here_document: bad instruction type %d" +#~ msgstr "make_here_document: blogas instrukcijos tipas %d" + +#~ msgid "make_redirection: redirection instruction `%d' out of range" +#~ msgstr "make_redirection: nukreipimo instrukcija „%d“ už ribų" + +#~ msgid "unexpected EOF while looking for matching `%c'" +#~ msgstr "netikėta failo pabaiga ieškant atitinkamo „%c“" + +#~ msgid "unexpected EOF while looking for `]]'" +#~ msgstr "netikėta failo pabaiga ieškant „]]“" + +#~ msgid "syntax error in conditional expression: unexpected token `%s'" +#~ msgstr "sintaksės klaida sąlygos išraiškoje: netikėta leksema „%s“" + +#~ msgid "unexpected token `%s', expected `)'" +#~ msgstr "netikėta leksema „%s“, tikėtasi „)“" + +#~ msgid "expected `)'" +#~ msgstr "tikėtasi „)“" + +#~ msgid "unexpected argument `%s' to conditional unary operator" +#~ msgstr "netikėtas argumentas „%s“ sąlygos unariniam operatoriui" + +#~ msgid "unexpected argument to conditional unary operator" +#~ msgstr "netikėtas argumentas sąlygos unariniam operatoriui" + +#~ msgid "unexpected token `%s', conditional binary operator expected" +#~ msgstr "netikėta leksema „%s“, tikėtasi sąlyginio binarinio operatoriaus" + +#~ msgid "conditional binary operator expected" +#~ msgstr "tikėtasi sąlygos binarinio operatoriaus" + +#~ msgid "unexpected argument `%s' to conditional binary operator" +#~ msgstr "netikėtas argumentas „%s“ sąlygos binariniam operatoriui" + +#~ msgid "unexpected argument to conditional binary operator" +#~ msgstr "netikėtas argumentas sąlygos binariniam operatoriui" + +#~ msgid "unexpected token `%c' in conditional command" +#~ msgstr "netikėta leksema „%c“ sąlygos komandoje" + +#~ msgid "unexpected token `%s' in conditional command" +#~ msgstr "netikėta leksema „%s“ sąlygos komandoje" + +#~ msgid "unexpected token %d in conditional command" +#~ msgstr "netikėta leksema %d sąlygos komandoje" + +#, fuzzy +#~ msgid "syntax error near unexpected token `%s'" +#~ msgstr "sintaksės klaida prologe: %s" + +#, fuzzy +#~ msgid "syntax error: unexpected end of file" +#~ msgstr "%s: per ankstyva failo pabaiga" + +#~ msgid "Use \"%s\" to leave the shell.\n" +#~ msgstr "Naudokite „%s“, jei norite išeiti iš ap.\n" + +#~ msgid "unexpected EOF while looking for matching `)'" +#~ msgstr "netikėta failo pabaiga ieškant atitinkamo „)“" + +#~ msgid "progcomp_insert: %s: NULL COMPSPEC" +#~ msgstr "progcomp_insert: %s: NULL COMPSPEC" + +#~ msgid "print_command: bad connector `%d'" +#~ msgstr "print_command: blogas jungtukas „%d“" + +#, fuzzy +#~ msgid "cprintf: `%c': invalid format character" +#~ msgstr "netaisyklingas kabučių simbolis" + +#~ msgid "%s: ambiguous redirect" +#~ msgstr "%s: ambiguous redirect" + +#, fuzzy +#~ msgid "%s: cannot overwrite existing file" +#~ msgstr "nepavyko atverti duomenų failo" + +#, fuzzy +#~ msgid "%s: restricted: cannot redirect output" +#~ msgstr "%s:%u: nepavyko perskaityti aplanko %s" + +#~ msgid "/dev/(tcp|udp)/host/port not supported without networking" +#~ msgstr "/dev/(tcp|udp)/komp/prievadas nepalaikoma be tinklo" + +#~ msgid "redirection error: cannot duplicate fd" +#~ msgstr "nukreipimo klaida: nepavyko dublikuoti fd" + +#~ msgid "could not find /tmp, please create!" +#~ msgstr "nepavyko rasti /tmp, sukurkite šį aplanką!" + +#~ msgid "/tmp must be a valid directory name" +#~ msgstr "/tmp turi būti taisyklingas aplanko pavadinimas" + +#, fuzzy +#~ msgid "%c%c: invalid option" +#~ msgstr "%s: netaisyklingas parametras --%c\n" + +#~ msgid "I have no name!" +#~ msgstr "Neturiu vardo!" + +#, fuzzy +#~ msgid "Type `%s -c \"help set\"' for more information about shell options.\n" +#~ msgstr "Bandykite „%s --help“ arba „%s --usage“, jei norite gauti daugiau informacijos.\n" + +#, fuzzy +#~ msgid "Type `%s -c help' for more information about shell builtin commands.\n" +#~ msgstr "Bandykite „ldd --help“, jei norite daugiau informacijos." + +#~ msgid "sigprocmask: %d: invalid operation" +#~ msgstr "sigprocmask: %d: netaisyklinga operacija" + +#, fuzzy +#~ msgid "cannot duplicate named pipe %s as fd %d" +#~ msgstr "nepavyko išskirti vardo įrašo" + +#~ msgid "$%s: cannot assign in this way" +#~ msgstr "$%s: negalima tokiu būdu priskirti" + +#, fuzzy +#~ msgid "no match: %s" +#~ msgstr "Atitikmenų nėra" + +#~ msgid "argument expected" +#~ msgstr "tikėtasi argumento" + +#~ msgid "%s: integer expression expected" +#~ msgstr "%s: tikėtasi skaitinės išraiškos" + +#~ msgid "`)' expected" +#~ msgstr "tikėtasi „)“" + +#~ msgid "`)' expected, found %s" +#~ msgstr "tikėtasi „)“, rasta %s" + +#~ msgid "%s: unary operator expected" +#~ msgstr "%s: tikėtasi unarinio operatoriaus" + +#~ msgid "%s: binary operator expected" +#~ msgstr "%s: tikėtasi binarinio operatoriaus" + +#~ msgid "missing `]'" +#~ msgstr "trūksta „]“" + +#, fuzzy +#~ msgid "invalid signal number" +#~ msgstr "netaisyklingas kvietėjas" + +#~ msgid "run_pending_traps: bad value in trap_list[%d]: %p" +#~ msgstr "run_pending_traps: bloga trap_list[%d] reikšmė: %p" + +#~ msgid "trap_handler: bad signal %d" +#~ msgstr "trap_handler: blogas signalas %d" + +#~ msgid "error importing function definition for `%s'" +#~ msgstr "klaida importuojant funkcijos apibrėžimą „%s“" + +#, fuzzy +#~ msgid "make_local_variable: no function context at current scope" +#~ msgstr "make_local_variable: " + +#~ msgid "Copyright (C) 2006 Free Software Foundation, Inc.\n" +#~ msgstr "Autorinės teisės (C) 2006 Free Software Foundation, Inc.\n" + +#~ msgid "xmalloc: cannot allocate %lu bytes (%lu bytes allocated)" +#~ msgstr "xmalloc: nepavyko išskirti %lu baitų (%lu baitų išskirta)" + +#~ msgid "xmalloc: cannot allocate %lu bytes" +#~ msgstr "xmalloc: nepavyko išskirti %lu baitų" + +#~ msgid "xrealloc: cannot allocate %lu bytes" +#~ msgstr "xrealloc: nepavyko išskirti %lu baitų" + +#~ msgid "xmalloc: %s:%d: cannot allocate %lu bytes" +#~ msgstr "xmalloc: %s:%d: nepavyko išskirti %lu baitų" + +#~ msgid "xrealloc: %s:%d: cannot allocate %lu bytes" +#~ msgstr "xrealloc: %s:%d: nepavyko išskirti %lu baitų" diff --git a/libc/posix/regcomp.c b/libc/posix/regcomp.c index 5049da401..0701e49be 100644 --- a/libc/posix/regcomp.c +++ b/libc/posix/regcomp.c @@ -1046,7 +1046,9 @@ optimize_utf8 (re_dfa_t *dfa) case BUF_LAST: break; default: - /* Word anchors etc. cannot be handled. */ + /* Word anchors etc. cannot be handled. It's okay to test + opr.ctx_type since constraints (for all DFA nodes) are + created by ORing one or more opr.ctx_type values. */ return; } break; @@ -1326,6 +1328,8 @@ calc_first (void *extra, bin_tree_t *node) node->node_idx = re_dfa_add_node (dfa, node->token); if (BE (node->node_idx == -1, 0)) return REG_ESPACE; + if (node->token.type == ANCHOR) + dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type; } return REG_NOERROR; } @@ -1454,22 +1458,17 @@ duplicate_node_closure (re_dfa_t *dfa, int top_org_node, int top_clone_node, destination. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); - if (dfa->nodes[org_node].type == ANCHOR) + /* If the node is root_node itself, it means the epsilon clsoure + has a loop. Then tie it to the destination of the root_node. */ + if (org_node == root_node && clone_node != org_node) { - /* In case of the node has another constraint, append it. */ - if (org_node == root_node && clone_node != org_node) - { - /* ...but if the node is root_node itself, it means the - epsilon closure have a loop, then tie it to the - destination of the root_node. */ - ret = re_node_set_insert (dfa->edests + clone_node, - org_dest); - if (BE (ret < 0, 0)) - return REG_ESPACE; - break; - } - constraint |= dfa->nodes[org_node].opr.ctx_type; + ret = re_node_set_insert (dfa->edests + clone_node, org_dest); + if (BE (ret < 0, 0)) + return REG_ESPACE; + break; } + /* In case of the node has another constraint, add it. */ + constraint |= dfa->nodes[org_node].constraint; clone_dest = duplicate_node (dfa, org_dest, constraint); if (BE (clone_dest == -1, 0)) return REG_ESPACE; @@ -1487,7 +1486,7 @@ duplicate_node_closure (re_dfa_t *dfa, int top_org_node, int top_clone_node, clone_dest = search_duplicated_node (dfa, org_dest, constraint); if (clone_dest == -1) { - /* There are no such a duplicated node, create a new one. */ + /* There is no such duplicated node, create a new one. */ reg_errcode_t err; clone_dest = duplicate_node (dfa, org_dest, constraint); if (BE (clone_dest == -1, 0)) @@ -1502,7 +1501,7 @@ duplicate_node_closure (re_dfa_t *dfa, int top_org_node, int top_clone_node, } else { - /* There are a duplicated node which satisfy the constraint, + /* There is a duplicated node which satisfies the constraint, use it to avoid infinite loop. */ ret = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (BE (ret < 0, 0)) @@ -1551,8 +1550,7 @@ duplicate_node (re_dfa_t *dfa, int org_idx, unsigned int constraint) if (BE (dup_idx != -1, 1)) { dfa->nodes[dup_idx].constraint = constraint; - if (dfa->nodes[org_idx].type == ANCHOR) - dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].opr.ctx_type; + dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint; dfa->nodes[dup_idx].duplicated = 1; /* Store the index of the original node. */ @@ -1632,7 +1630,6 @@ static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, int node, int root) { reg_errcode_t err; - unsigned int constraint; int i, incomplete; re_node_set eclosure; incomplete = 0; @@ -1644,15 +1641,14 @@ calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, int node, int root) We reference this value to avoid infinite loop. */ dfa->eclosures[node].nelem = -1; - constraint = ((dfa->nodes[node].type == ANCHOR) - ? dfa->nodes[node].opr.ctx_type : 0); - /* If the current node has constraints, duplicate all nodes. - Since they must inherit the constraints. */ - if (constraint + /* If the current node has constraints, duplicate all nodes + since they must inherit the constraints. */ + if (dfa->nodes[node].constraint && dfa->edests[node].nelem && !dfa->nodes[dfa->edests[node].elems[0]].duplicated) { - err = duplicate_node_closure (dfa, node, node, node, constraint); + err = duplicate_node_closure (dfa, node, node, node, + dfa->nodes[node].constraint); if (BE (err != REG_NOERROR, 0)) return err; } diff --git a/libc/posix/regex_internal.c b/libc/posix/regex_internal.c index 08c8cca24..9b3bc8b01 100644 --- a/libc/posix/regex_internal.c +++ b/libc/posix/regex_internal.c @@ -1666,11 +1666,9 @@ create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, for (i = 0 ; i < nodes->nelem ; i++) { - unsigned int constraint = 0; re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; - if (node->constraint) - constraint = node->constraint; + unsigned int constraint = node->constraint; if (type == CHARACTER && !constraint) continue; @@ -1683,8 +1681,6 @@ create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; - else if (type == ANCHOR) - constraint = node->opr.ctx_type; if (constraint) { diff --git a/libc/posix/tst-rfc3484-2.c b/libc/posix/tst-rfc3484-2.c index 56c0277b1..c85fdd074 100644 --- a/libc/posix/tst-rfc3484-2.c +++ b/libc/posix/tst-rfc3484-2.c @@ -18,24 +18,35 @@ __check_pf (bool *p1, bool *p2, struct in6addrinfo **in6ai, size_t *in6ailen) *in6ai = NULL; *in6ailen = 0; } + void attribute_hidden __check_native (uint32_t a1_index, int *a1_native, uint32_t a2_index, int *a2_native) { } + int +attribute_hidden __idna_to_ascii_lz (const char *input, char **output, int flags) { return 0; } + int +attribute_hidden __idna_to_unicode_lzlz (const char *input, char **output, int flags) { *output = NULL; return 0; } +void +attribute_hidden +_res_hconf_init (void) +{ +} + #include "../sysdeps/posix/getaddrinfo.c" service_user *__nss_hosts_database attribute_hidden; diff --git a/libc/posix/tst-rfc3484-3.c b/libc/posix/tst-rfc3484-3.c index 616722eb1..3aa4563c0 100644 --- a/libc/posix/tst-rfc3484-3.c +++ b/libc/posix/tst-rfc3484-3.c @@ -18,24 +18,35 @@ __check_pf (bool *p1, bool *p2, struct in6addrinfo **in6ai, size_t *in6ailen) *in6ai = NULL; *in6ailen = 0; } + void attribute_hidden __check_native (uint32_t a1_index, int *a1_native, uint32_t a2_index, int *a2_native) { } + int +attribute_hidden __idna_to_ascii_lz (const char *input, char **output, int flags) { return 0; } + int +attribute_hidden __idna_to_unicode_lzlz (const char *input, char **output, int flags) { *output = NULL; return 0; } +void +attribute_hidden +_res_hconf_init (void) +{ +} + #include "../sysdeps/posix/getaddrinfo.c" service_user *__nss_hosts_database attribute_hidden; diff --git a/libc/posix/tst-rfc3484.c b/libc/posix/tst-rfc3484.c index 4df5b2951..15d0c94a5 100644 --- a/libc/posix/tst-rfc3484.c +++ b/libc/posix/tst-rfc3484.c @@ -18,24 +18,35 @@ __check_pf (bool *p1, bool *p2, struct in6addrinfo **in6ai, size_t *in6ailen) *in6ai = NULL; *in6ailen = 0; } + void attribute_hidden __check_native (uint32_t a1_index, int *a1_native, uint32_t a2_index, int *a2_native) { } + int +attribute_hidden __idna_to_ascii_lz (const char *input, char **output, int flags) { return 0; } + int +attribute_hidden __idna_to_unicode_lzlz (const char *input, char **output, int flags) { *output = NULL; return 0; } +void +attribute_hidden +_res_hconf_init (void) +{ +} + #include "../sysdeps/posix/getaddrinfo.c" service_user *__nss_hosts_database attribute_hidden; diff --git a/libc/string/Makefile b/libc/string/Makefile index 18a5d5b2c..cee45de17 100644 --- a/libc/string/Makefile +++ b/libc/string/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991-2002, 2005, 2006, 2007 Free Software Foundation, Inc. +# Copyright (C) 1991-2002, 2005-2007, 2008 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -58,11 +58,12 @@ tests := tester inl-tester noinl-tester testcopy test-ffs \ bug-strncat1 bug-strspn1 bug-strpbrk1 tst-bswap \ tst-strtok tst-strfry \ bug-strtok1 $(addprefix test-,$(strop-tests)) \ - tst-strxfrm2 + tst-strxfrm2 tst-endian tests-$(OPTION_EGLIBC_ENVZ) += bug-envz1 tests-$(OPTION_EGLIBC_LOCALE_CODE) \ += tst-strxfrm bug-strcoll1 -distribute := memcopy.h pagecopy.h tst-svc.expect test-string.h +distribute := memcopy.h pagecopy.h tst-svc.expect test-string.h \ + str-two-way.h include ../Rules diff --git a/libc/string/endian.h b/libc/string/endian.h index 2f7bce100..430fb3a5c 100644 --- a/libc/string/endian.h +++ b/libc/string/endian.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1996, 1997, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1996, 1997, 2000, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -55,4 +55,40 @@ # define __LONG_LONG_PAIR(HI, LO) HI, LO #endif + +/* Conversion interfaces. */ +#include <bits/byteswap.h> + +#if __BYTE_ORDER == __LITTLE_ENDIAN +# define htobe16(x) __bswap_16 (x) +# define htole16(x) (x) +# define be16toh(x) __bswap_16 (x) +# define le16toh(x) (x) + +# define htobe32(x) __bswap_32 (x) +# define htole32(x) (x) +# define be32toh(x) __bswap_32 (x) +# define le32toh(x) (x) + +# define htobe64(x) __bswap_64 (x) +# define htole64(x) (x) +# define be64toh(x) __bswap_64 (x) +# define le64toh(x) (x) +#else +# define htobe16(x) (x) +# define htole16(x) __bswap_16 (x) +# define be16toh(x) (x) +# define le16toh(x) __bswap_16 (x) + +# define htobe32(x) (x) +# define htole32(x) __bswap_32 (x) +# define be32toh(x) (x) +# define le32toh(x) __bswap_32 (x) + +# define htobe64(x) (x) +# define htole64(x) __bswap_64 (x) +# define be64toh(x) (x) +# define le64toh(x) __bswap_64 (x) +#endif + #endif /* endian.h */ diff --git a/libc/string/memmem.c b/libc/string/memmem.c index c40462104..3176ab775 100644 --- a/libc/string/memmem.c +++ b/libc/string/memmem.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991,92,93,94,96,97,98,2000,2004 Free Software Foundation, Inc. +/* Copyright (C) 1991,92,93,94,96,97,98,2000,2004,2008 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,26 +16,36 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#include <stddef.h> +/* This particular implementation was written by Eric Blake, 2008. */ + +#ifndef _LIBC +# include <config.h> +#endif + +/* Specification of memmem. */ #include <string.h> #ifndef _LIBC # define __builtin_expect(expr, val) (expr) #endif +#define RETURN_TYPE void * +#define AVAILABLE(h, h_l, j, n_l) ((j) <= (h_l) - (n_l)) +#include "str-two-way.h" + #undef memmem -/* Return the first occurrence of NEEDLE in HAYSTACK. */ +/* Return the first occurrence of NEEDLE in HAYSTACK. Return HAYSTACK + if NEEDLE_LEN is 0, otherwise NULL if NEEDLE is not found in + HAYSTACK. */ void * -memmem (haystack, haystack_len, needle, needle_len) - const void *haystack; - size_t haystack_len; - const void *needle; - size_t needle_len; +memmem (const void *haystack_start, size_t haystack_len, + const void *needle_start, size_t needle_len) { - const char *begin; - const char *const last_possible - = (const char *) haystack + haystack_len - needle_len; + /* Abstract memory is considered to be an array of 'unsigned char' values, + not an array of 'char' values. See ISO C 99 section 6.2.6.1. */ + const unsigned char *haystack = (const unsigned char *) haystack_start; + const unsigned char *needle = (const unsigned char *) needle_start; if (needle_len == 0) /* The first occurrence of the empty string is deemed to occur at @@ -47,12 +57,22 @@ memmem (haystack, haystack_len, needle, needle_len) if (__builtin_expect (haystack_len < needle_len, 0)) return NULL; - for (begin = (const char *) haystack; begin <= last_possible; ++begin) - if (begin[0] == ((const char *) needle)[0] && - !memcmp ((const void *) &begin[1], - (const void *) ((const char *) needle + 1), - needle_len - 1)) - return (void *) begin; - - return NULL; + /* Use optimizations in memchr when possible, to reduce the search + size of haystack using a linear algorithm with a smaller + coefficient. However, avoid memchr for long needles, since we + can often achieve sublinear performance. */ + if (needle_len < LONG_NEEDLE_THRESHOLD) + { + haystack = memchr (haystack, *needle, haystack_len); + if (!haystack || __builtin_expect (needle_len == 1, 0)) + return (void *) haystack; + haystack_len -= haystack - (const unsigned char *) haystack_start; + if (haystack_len < needle_len) + return NULL; + return two_way_short_needle (haystack, haystack_len, needle, needle_len); + } + else + return two_way_long_needle (haystack, haystack_len, needle, needle_len); } + +#undef LONG_NEEDLE_THRESHOLD diff --git a/libc/string/str-two-way.h b/libc/string/str-two-way.h new file mode 100644 index 000000000..87ed8a036 --- /dev/null +++ b/libc/string/str-two-way.h @@ -0,0 +1,430 @@ +/* Byte-wise substring search, using the Two-Way algorithm. + Copyright (C) 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Written by Eric Blake <ebb9@byu.net>, 2008. + + 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. */ + +/* Before including this file, you need to include <string.h> (and + <config.h> before that, if not part of libc), and define: + RESULT_TYPE A macro that expands to the return type. + AVAILABLE(h, h_l, j, n_l) + A macro that returns nonzero if there are + at least N_L bytes left starting at H[J]. + H is 'unsigned char *', H_L, J, and N_L + are 'size_t'; H_L is an lvalue. For + NUL-terminated searches, H_L can be + modified each iteration to avoid having + to compute the end of H up front. + + For case-insensitivity, you may optionally define: + CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L + characters of P1 and P2 are equal. + CANON_ELEMENT(c) A macro that canonicalizes an element right after + it has been fetched from one of the two strings. + The argument is an 'unsigned char'; the result + must be an 'unsigned char' as well. + + This file undefines the macros documented above, and defines + LONG_NEEDLE_THRESHOLD. +*/ + +#include <limits.h> +#include <stdint.h> + +/* We use the Two-Way string matching algorithm, which guarantees + linear complexity with constant space. Additionally, for long + needles, we also use a bad character shift table similar to the + Boyer-Moore algorithm to achieve improved (potentially sub-linear) + performance. + + See http://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260 + and http://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm +*/ + +/* Point at which computing a bad-byte shift table is likely to be + worthwhile. Small needles should not compute a table, since it + adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a + speedup no greater than a factor of NEEDLE_LEN. The larger the + needle, the better the potential performance gain. On the other + hand, on non-POSIX systems with CHAR_BIT larger than eight, the + memory required for the table is prohibitive. */ +#if CHAR_BIT < 10 +# define LONG_NEEDLE_THRESHOLD 32U +#else +# define LONG_NEEDLE_THRESHOLD SIZE_MAX +#endif + +#ifndef MAX +# define MAX(a, b) ((a < b) ? (b) : (a)) +#endif + +#ifndef CANON_ELEMENT +# define CANON_ELEMENT(c) c +#endif +#ifndef CMP_FUNC +# define CMP_FUNC memcmp +#endif + +/* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN. + Return the index of the first byte in the right half, and set + *PERIOD to the global period of the right half. + + The global period of a string is the smallest index (possibly its + length) at which all remaining bytes in the string are repetitions + of the prefix (the last repetition may be a subset of the prefix). + + When NEEDLE is factored into two halves, a local period is the + length of the smallest word that shares a suffix with the left half + and shares a prefix with the right half. All factorizations of a + non-empty NEEDLE have a local period of at least 1 and no greater + than NEEDLE_LEN. + + A critical factorization has the property that the local period + equals the global period. All strings have at least one critical + factorization with the left half smaller than the global period. + + Given an ordered alphabet, a critical factorization can be computed + in linear time, with 2 * NEEDLE_LEN comparisons, by computing the + larger of two ordered maximal suffixes. The ordered maximal + suffixes are determined by lexicographic comparison of + periodicity. */ +static size_t +critical_factorization (const unsigned char *needle, size_t needle_len, + size_t *period) +{ + /* Index of last byte of left half, or SIZE_MAX. */ + size_t max_suffix, max_suffix_rev; + size_t j; /* Index into NEEDLE for current candidate suffix. */ + size_t k; /* Offset into current period. */ + size_t p; /* Intermediate period. */ + unsigned char a, b; /* Current comparison bytes. */ + + /* Invariants: + 0 <= j < NEEDLE_LEN - 1 + -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) + min(max_suffix, max_suffix_rev) < global period of NEEDLE + 1 <= p <= global period of NEEDLE + p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] + 1 <= k <= p + */ + + /* Perform lexicographic search. */ + max_suffix = SIZE_MAX; + j = 0; + k = p = 1; + while (j + k < needle_len) + { + a = CANON_ELEMENT (needle[j + k]); + b = CANON_ELEMENT (needle[max_suffix + k]); + if (a < b) + { + /* Suffix is smaller, period is entire prefix so far. */ + j += k; + k = 1; + p = j - max_suffix; + } + else if (a == b) + { + /* Advance through repetition of the current period. */ + if (k != p) + ++k; + else + { + j += p; + k = 1; + } + } + else /* b < a */ + { + /* Suffix is larger, start over from current location. */ + max_suffix = j++; + k = p = 1; + } + } + *period = p; + + /* Perform reverse lexicographic search. */ + max_suffix_rev = SIZE_MAX; + j = 0; + k = p = 1; + while (j + k < needle_len) + { + a = CANON_ELEMENT (needle[j + k]); + b = CANON_ELEMENT (needle[max_suffix_rev + k]); + if (b < a) + { + /* Suffix is smaller, period is entire prefix so far. */ + j += k; + k = 1; + p = j - max_suffix_rev; + } + else if (a == b) + { + /* Advance through repetition of the current period. */ + if (k != p) + ++k; + else + { + j += p; + k = 1; + } + } + else /* a < b */ + { + /* Suffix is larger, start over from current location. */ + max_suffix_rev = j++; + k = p = 1; + } + } + + /* Choose the longer suffix. Return the first byte of the right + half, rather than the last byte of the left half. */ + if (max_suffix_rev + 1 < max_suffix + 1) + return max_suffix + 1; + *period = p; + return max_suffix_rev + 1; +} + +/* Return the first location of non-empty NEEDLE within HAYSTACK, or + NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This + method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. + Performance is guaranteed to be linear, with an initialization cost + of 2 * NEEDLE_LEN comparisons. + + If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at + most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. + If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * + HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ +static RETURN_TYPE +two_way_short_needle (const unsigned char *haystack, size_t haystack_len, + const unsigned char *needle, size_t needle_len) +{ + size_t i; /* Index into current byte of NEEDLE. */ + size_t j; /* Index into current window of HAYSTACK. */ + size_t period; /* The period of the right half of needle. */ + size_t suffix; /* The index of the right half of needle. */ + + /* Factor the needle into two halves, such that the left half is + smaller than the global period, and the right half is + periodic (with a period as large as NEEDLE_LEN - suffix). */ + suffix = critical_factorization (needle, needle_len, &period); + + /* Perform the search. Each iteration compares the right half + first. */ + if (CMP_FUNC (needle, needle + period, suffix) == 0) + { + /* Entire needle is periodic; a mismatch can only advance by the + period, so use memory to avoid rescanning known occurrences + of the period. */ + size_t memory = 0; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Scan for matches in right half. */ + i = MAX (suffix, memory); + while (i < needle_len && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (memory < i + 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i + 1 < memory + 1) + return (RETURN_TYPE) (haystack + j); + /* No match, so remember how many repetitions of period + on the right half were scanned. */ + j += period; + memory = needle_len - period; + } + else + { + j += i - suffix + 1; + memory = 0; + } + } + } + else + { + /* The two halves of needle are distinct; no extra memory is + required, and any mismatch results in a maximal shift. */ + period = MAX (suffix, needle_len - suffix) + 1; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Scan for matches in right half. */ + i = suffix; + while (i < needle_len && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i == SIZE_MAX) + return (RETURN_TYPE) (haystack + j); + j += period; + } + else + j += i - suffix + 1; + } + } + return NULL; +} + +/* Return the first location of non-empty NEEDLE within HAYSTACK, or + NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This + method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN. + Performance is guaranteed to be linear, with an initialization cost + of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations. + + If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at + most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, + and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible. + If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * + HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and + sublinear performance is not possible. */ +static RETURN_TYPE +two_way_long_needle (const unsigned char *haystack, size_t haystack_len, + const unsigned char *needle, size_t needle_len) +{ + size_t i; /* Index into current byte of NEEDLE. */ + size_t j; /* Index into current window of HAYSTACK. */ + size_t period; /* The period of the right half of needle. */ + size_t suffix; /* The index of the right half of needle. */ + size_t shift_table[1U << CHAR_BIT]; /* See below. */ + + /* Factor the needle into two halves, such that the left half is + smaller than the global period, and the right half is + periodic (with a period as large as NEEDLE_LEN - suffix). */ + suffix = critical_factorization (needle, needle_len, &period); + + /* Populate shift_table. For each possible byte value c, + shift_table[c] is the distance from the last occurrence of c to + the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE. + shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */ + for (i = 0; i < 1U << CHAR_BIT; i++) + shift_table[i] = needle_len; + for (i = 0; i < needle_len; i++) + shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1; + + /* Perform the search. Each iteration compares the right half + first. */ + if (CMP_FUNC (needle, needle + period, suffix) == 0) + { + /* Entire needle is periodic; a mismatch can only advance by the + period, so use memory to avoid rescanning known occurrences + of the period. */ + size_t memory = 0; + size_t shift; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Check the last byte first; if it does not match, then + shift to the next possible match location. */ + shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; + if (0 < shift) + { + if (memory && shift < period) + { + /* Since needle is periodic, but the last period has + a byte out of place, there can be no match until + after the mismatch. */ + shift = needle_len - period; + memory = 0; + } + j += shift; + continue; + } + /* Scan for matches in right half. The last byte has + already been matched, by virtue of the shift table. */ + i = MAX (suffix, memory); + while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len - 1 <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (memory < i + 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i + 1 < memory + 1) + return (RETURN_TYPE) (haystack + j); + /* No match, so remember how many repetitions of period + on the right half were scanned. */ + j += period; + memory = needle_len - period; + } + else + { + j += i - suffix + 1; + memory = 0; + } + } + } + else + { + /* The two halves of needle are distinct; no extra memory is + required, and any mismatch results in a maximal shift. */ + size_t shift; + period = MAX (suffix, needle_len - suffix) + 1; + j = 0; + while (AVAILABLE (haystack, haystack_len, j, needle_len)) + { + /* Check the last byte first; if it does not match, then + shift to the next possible match location. */ + shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; + if (0 < shift) + { + j += shift; + continue; + } + /* Scan for matches in right half. The last byte has + already been matched, by virtue of the shift table. */ + i = suffix; + while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + ++i; + if (needle_len - 1 <= i) + { + /* Scan for matches in left half. */ + i = suffix - 1; + while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) + == CANON_ELEMENT (haystack[i + j]))) + --i; + if (i == SIZE_MAX) + return (RETURN_TYPE) (haystack + j); + j += period; + } + else + j += i - suffix + 1; + } + } + return NULL; +} + +#undef AVAILABLE +#undef CANON_ELEMENT +#undef CMP_FUNC +#undef MAX +#undef RETURN_TYPE diff --git a/libc/string/strcasestr.c b/libc/string/strcasestr.c index 1dde43c60..9de19aafa 100644 --- a/libc/string/strcasestr.c +++ b/libc/string/strcasestr.c @@ -1,5 +1,5 @@ /* Return the offset of one string within another. - Copyright (C) 1994, 1996-2000, 2004 Free Software Foundation, Inc. + Copyright (C) 1994, 1996-2000, 2004, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -30,113 +30,71 @@ # include <config.h> #endif +/* Specification. */ +#include <string.h> + #include <ctype.h> +#include <stdbool.h> +#include <strings.h> -#if defined _LIBC || defined HAVE_STRING_H -# include <string.h> -#endif +#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) -#ifdef _LIBC -# include <locale/localeinfo.h> -# define TOLOWER(c) __tolower_l ((unsigned char) c, loc) -#else -# define TOLOWER(c) _tolower (c) -#endif - -typedef unsigned chartype; +/* Two-Way algorithm. */ +#define RETURN_TYPE char * +#define AVAILABLE(h, h_l, j, n_l) \ + (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ + && ((h_l) = (j) + (n_l))) +#define CANON_ELEMENT(c) TOLOWER (c) +#define CMP_FUNC(p1, p2, l) \ + strncasecmp ((const char *) (p1), (const char *) (p2), l) +#include "str-two-way.h" #undef strcasestr #undef __strcasestr +/* Find the first occurrence of NEEDLE in HAYSTACK, using + case-insensitive comparison. This function gives unspecified + results in multibyte locales. */ char * -__strcasestr (phaystack, pneedle) - const char *phaystack; - const char *pneedle; +__strcasestr (const char *haystack_start, const char *needle_start) { - register const unsigned char *haystack, *needle; - register chartype b, c; -#ifdef _LIBC - __locale_t loc = _NL_CURRENT_LOCALE; -#endif - - haystack = (const unsigned char *) phaystack; - needle = (const unsigned char *) pneedle; - - b = TOLOWER (*needle); - if (b != '\0') + const char *haystack = haystack_start; + const char *needle = needle_start; + size_t needle_len; /* Length of NEEDLE. */ + size_t haystack_len; /* Known minimum length of HAYSTACK. */ + bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */ + + /* Determine length of NEEDLE, and in the process, make sure + HAYSTACK is at least as long (no point processing all of a long + NEEDLE if HAYSTACK is too short). */ + while (*haystack && *needle) { - haystack--; /* possible ANSI violation */ - do - { - c = *++haystack; - if (c == '\0') - goto ret0; - } - while (TOLOWER (c) != (int) b); - - c = TOLOWER (*++needle); - if (c == '\0') - goto foundneedle; - ++needle; - goto jin; - - for (;;) - { - register chartype a; - register const unsigned char *rhaystack, *rneedle; - - do - { - a = *++haystack; - if (a == '\0') - goto ret0; - if (TOLOWER (a) == (int) b) - break; - a = *++haystack; - if (a == '\0') - goto ret0; -shloop: - ; - } - while (TOLOWER (a) != (int) b); - -jin: a = *++haystack; - if (a == '\0') - goto ret0; - - if (TOLOWER (a) != (int) c) - goto shloop; - - rhaystack = haystack-- + 1; - rneedle = needle; - a = TOLOWER (*rneedle); - - if (TOLOWER (*rhaystack) == (int) a) - do - { - if (a == '\0') - goto foundneedle; - ++rhaystack; - a = TOLOWER (*++needle); - if (TOLOWER (*rhaystack) != (int) a) - break; - if (a == '\0') - goto foundneedle; - ++rhaystack; - a = TOLOWER (*++needle); - } - while (TOLOWER (*rhaystack) == (int) a); - - needle = rneedle; /* took the register-poor approach */ - - if (a == '\0') - break; - } + ok &= (TOLOWER ((unsigned char) *haystack) + == TOLOWER ((unsigned char) *needle)); + haystack++; + needle++; } -foundneedle: - return (char*) haystack; -ret0: - return 0; + if (*needle) + return NULL; + if (ok) + return (char *) haystack_start; + needle_len = needle - needle_start; + haystack = haystack_start + 1; + haystack_len = needle_len - 1; + + /* Perform the search. Abstract memory is considered to be an array + of 'unsigned char' values, not an array of 'char' values. See + ISO C 99 section 6.2.6.1. */ + if (needle_len < LONG_NEEDLE_THRESHOLD) + return two_way_short_needle ((const unsigned char *) haystack, + haystack_len, + (const unsigned char *) needle_start, + needle_len); + return two_way_long_needle ((const unsigned char *) haystack, haystack_len, + (const unsigned char *) needle_start, + needle_len); } +#undef LONG_NEEDLE_THRESHOLD + weak_alias (__strcasestr, strcasestr) diff --git a/libc/string/strstr.c b/libc/string/strstr.c index fce1f2a75..a9dc31299 100644 --- a/libc/string/strstr.c +++ b/libc/string/strstr.c @@ -1,5 +1,5 @@ /* Return the offset of one string within another. - Copyright (C) 1994,1996,1997,2000,2001,2003 Free Software Foundation, Inc. + Copyright (C) 1994,1996,1997,2000,2001,2003,2008 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,107 +17,71 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -/* - * My personal strstr() implementation that beats most other algorithms. - * Until someone tells me otherwise, I assume that this is the - * fastest implementation of strstr() in C. - * I deliberately chose not to comment it. You should have at least - * as much fun trying to understand it, as I had to write it :-). - * - * Stephen R. van den Berg, berg@pool.informatik.rwth-aachen.de */ +/* This particular implementation was written by Eric Blake, 2008. */ -#if HAVE_CONFIG_H +#ifndef _LIBC # include <config.h> #endif -#if defined _LIBC || defined HAVE_STRING_H -# include <string.h> +/* Specification of strstr. */ +#include <string.h> + +#include <stdbool.h> + +#ifndef _LIBC +# define __builtin_expect(expr, val) (expr) #endif -typedef unsigned chartype; +#define RETURN_TYPE char * +#define AVAILABLE(h, h_l, j, n_l) \ + (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ + && ((h_l) = (j) + (n_l))) +#include "str-two-way.h" #undef strstr +/* Return the first occurrence of NEEDLE in HAYSTACK. Return HAYSTACK + if NEEDLE is empty, otherwise NULL if NEEDLE is not found in + HAYSTACK. */ char * -strstr (phaystack, pneedle) - const char *phaystack; - const char *pneedle; +strstr (const char *haystack_start, const char *needle_start) { - const unsigned char *haystack, *needle; - chartype b; - const unsigned char *rneedle; - - haystack = (const unsigned char *) phaystack; + const char *haystack = haystack_start; + const char *needle = needle_start; + size_t needle_len; /* Length of NEEDLE. */ + size_t haystack_len; /* Known minimum length of HAYSTACK. */ + bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */ - if ((b = *(needle = (const unsigned char *) pneedle))) - { - chartype c; - haystack--; /* possible ANSI violation */ + /* Determine length of NEEDLE, and in the process, make sure + HAYSTACK is at least as long (no point processing all of a long + NEEDLE if HAYSTACK is too short). */ + while (*haystack && *needle) + ok &= *haystack++ == *needle++; + if (*needle) + return NULL; + if (ok) + return (char *) haystack_start; - { - chartype a; - do - if (!(a = *++haystack)) - goto ret0; - while (a != b); - } + /* Reduce the size of haystack using strchr, since it has a smaller + linear coefficient than the Two-Way algorithm. */ + needle_len = needle - needle_start; + haystack = strchr (haystack_start + 1, *needle_start); + if (!haystack || __builtin_expect (needle_len == 1, 0)) + return (char *) haystack; + needle -= needle_len; + haystack_len = (haystack > haystack_start + needle_len ? 1 + : needle_len + haystack_start - haystack); - if (!(c = *++needle)) - goto foundneedle; - ++needle; - goto jin; - - for (;;) - { - { - chartype a; - if (0) - jin:{ - if ((a = *++haystack) == c) - goto crest; - } - else - a = *++haystack; - do - { - for (; a != b; a = *++haystack) - { - if (!a) - goto ret0; - if ((a = *++haystack) == b) - break; - if (!a) - goto ret0; - } - } - while ((a = *++haystack) != c); - } - crest: - { - chartype a; - { - const unsigned char *rhaystack; - if (*(rhaystack = haystack-- + 1) == (a = *(rneedle = needle))) - do - { - if (!a) - goto foundneedle; - if (*++rhaystack != (a = *++needle)) - break; - if (!a) - goto foundneedle; - } - while (*++rhaystack == (a = *++needle)); - needle = rneedle; /* took the register-poor aproach */ - } - if (!a) - break; - } - } - } -foundneedle: - return (char *) haystack; -ret0: - return 0; + /* Perform the search. Abstract memory is considered to be an array + of 'unsigned char' values, not an array of 'char' values. See + ISO C 99 section 6.2.6.1. */ + if (needle_len < LONG_NEEDLE_THRESHOLD) + return two_way_short_needle ((const unsigned char *) haystack, + haystack_len, + (const unsigned char *) needle, needle_len); + return two_way_long_needle ((const unsigned char *) haystack, haystack_len, + (const unsigned char *) needle, needle_len); } libc_hidden_builtin_def (strstr) + +#undef LONG_NEEDLE_THRESHOLD diff --git a/libc/string/tst-endian.c b/libc/string/tst-endian.c new file mode 100644 index 000000000..c34dc456a --- /dev/null +++ b/libc/string/tst-endian.c @@ -0,0 +1,112 @@ +#include <byteswap.h> +#include <endian.h> +#include <inttypes.h> +#include <stdio.h> + + +static int +do_test (void) +{ + int result = 0; + + for (uint64_t i = 0; i < (~UINT64_C (0)) >> 2; i = (i << 1) + 3) + { + if (i < UINT64_C (65536)) + { + if (htobe16 (be16toh (i)) != i) + { + printf ("htobe16 (be16toh (%" PRIx64 ")) == %" PRIx16 "\n", + i, (uint16_t) htobe16 (be16toh (i))); + result = 1; + } + if (htole16 (le16toh (i)) != i) + { + printf ("htole16 (le16toh (%" PRIx64 ")) == %" PRIx16 "\n", + i, (uint16_t) htole16 (le16toh (i))); + result = 1; + } + + uint16_t n[2]; + n[__BYTE_ORDER == __LITTLE_ENDIAN] = bswap_16 (i); + n[__BYTE_ORDER == __BIG_ENDIAN] = i; + if (htole16 (i) != n[0]) + { + printf ("htole16 (%" PRIx64 ") == %" PRIx16 " != %" PRIx16 "\n", + i, (uint16_t) htole16 (i), n[0]); + result = 1; + } + if (htobe16 (i) != n[1]) + { + printf ("htobe16 (%" PRIx64 ") == %" PRIx16 " != %" PRIx16 "\n", + i, (uint16_t) htobe16 (i), n[1]); + result = 1; + } + } + + if (i < UINT64_C (4294967296)) + { + if (htobe32 (be32toh (i)) != i) + { + printf ("htobe32 (be32toh (%" PRIx64 ")) == %" PRIx32 "\n", + i, (uint32_t) htobe32 (be32toh (i))); + result = 1; + } + if (htole32 (le32toh (i)) != i) + { + printf ("htole32 (le32toh (%" PRIx64 ")) == %" PRIx32 "\n", + i, (uint32_t) htole32 (le32toh (i))); + result = 1; + } + + uint32_t n[2]; + n[__BYTE_ORDER == __LITTLE_ENDIAN] = bswap_32 (i); + n[__BYTE_ORDER == __BIG_ENDIAN] = i; + if (htole32 (i) != n[0]) + { + printf ("htole32 (%" PRIx64 ") == %" PRIx32 " != %" PRIx32 "\n", + i, (uint32_t) htole32 (i), n[0]); + result = 1; + } + if (htobe32 (i) != n[1]) + { + printf ("htobe32 (%" PRIx64 ") == %" PRIx32 " != %" PRIx32 "\n", + i, (uint32_t) htobe32 (i), n[1]); + result = 1; + } + } + + if (htobe64 (be64toh (i)) != i) + { + printf ("htobe64 (be64toh (%" PRIx64 ")) == %" PRIx64 "\n", + i, htobe64 (be64toh (i))); + result = 1; + } + if (htole64 (le64toh (i)) != i) + { + printf ("htole64 (le64toh (%" PRIx64 ")) == %" PRIx64 "\n", + i, htole64 (le64toh (i))); + result = 1; + } + + uint64_t n[2]; + n[__BYTE_ORDER == __LITTLE_ENDIAN] = bswap_64 (i); + n[__BYTE_ORDER == __BIG_ENDIAN] = i; + if (htole64 (i) != n[0]) + { + printf ("htole64 (%" PRIx64 ") == %" PRIx64 " != %" PRIx64 "\n", + i, htole64 (i), n[0]); + result = 1; + } + if (htobe64 (i) != n[1]) + { + printf ("htobe64 (%" PRIx64 ") == %" PRIx64 " != %" PRIx64 "\n", + i, htobe64 (i), n[1]); + result = 1; + } + } + + return result; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/libc/sysdeps/i386/Makefile b/libc/sysdeps/i386/Makefile index ddd3d04e0..ef45ce6e7 100644 --- a/libc/sysdeps/i386/Makefile +++ b/libc/sysdeps/i386/Makefile @@ -65,3 +65,13 @@ endif ifneq (,$(filter -mno-tls-direct-seg-refs,$(CFLAGS))) defines += -DNO_TLS_DIRECT_SEG_REFS endif + +ifeq ($(subdir),elf) +sysdep-dl-routines += tlsdesc dl-tlsdesc +sysdep_routines += tlsdesc dl-tlsdesc +sysdep-rtld-routines += tlsdesc dl-tlsdesc +endif + +ifeq ($(subdir),csu) +gen-as-const-headers += tlsdesc.sym +endif diff --git a/libc/sysdeps/i386/bits/byteswap.h b/libc/sysdeps/i386/bits/byteswap.h index 7f2ddc2dc..1f3fc5e52 100644 --- a/libc/sysdeps/i386/bits/byteswap.h +++ b/libc/sysdeps/i386/bits/byteswap.h @@ -1,5 +1,5 @@ /* Macros to swap the order of bytes in integer values. - Copyright (C) 1997, 1998, 2000, 2002, 2003, 2006, 2007 + Copyright (C) 1997, 1998, 2000, 2002, 2003, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -18,7 +18,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#if !defined _BYTESWAP_H && !defined _NETINET_IN_H +#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H # error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead." #endif diff --git a/libc/sysdeps/i386/bits/linkmap.h b/libc/sysdeps/i386/bits/linkmap.h index 3be9b7eae..978d52621 100644 --- a/libc/sysdeps/i386/bits/linkmap.h +++ b/libc/sysdeps/i386/bits/linkmap.h @@ -2,4 +2,5 @@ struct link_map_machine { Elf32_Addr plt; /* Address of .plt + 0x16 */ Elf32_Addr gotplt; /* Address of .got + 0x0c */ + void *tlsdesc_table; /* Address of TLS descriptor hash table. */ }; diff --git a/libc/sysdeps/i386/dl-lookupcfg.h b/libc/sysdeps/i386/dl-lookupcfg.h new file mode 100644 index 000000000..2af2b9e8f --- /dev/null +++ b/libc/sysdeps/i386/dl-lookupcfg.h @@ -0,0 +1,28 @@ +/* Configuration of lookup functions. + Copyright (C) 2005, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#define DL_UNMAP_IS_SPECIAL + +#include_next <dl-lookupcfg.h> + +struct link_map; + +extern void internal_function _dl_unmap (struct link_map *map); + +#define DL_UNMAP(map) _dl_unmap (map) diff --git a/libc/sysdeps/i386/dl-machine.h b/libc/sysdeps/i386/dl-machine.h index 04296d2a9..e3342d8e1 100644 --- a/libc/sysdeps/i386/dl-machine.h +++ b/libc/sysdeps/i386/dl-machine.h @@ -25,6 +25,7 @@ #include <sys/param.h> #include <sysdep.h> #include <tls.h> +#include <dl-tlsdesc.h> /* Return nonzero iff ELF header is compatible with the running host. */ static inline int __attribute__ ((unused)) @@ -246,7 +247,7 @@ _dl_start_user:\n\ # define elf_machine_type_class(type) \ ((((type) == R_386_JMP_SLOT || (type) == R_386_TLS_DTPMOD32 \ || (type) == R_386_TLS_DTPOFF32 || (type) == R_386_TLS_TPOFF32 \ - || (type) == R_386_TLS_TPOFF) \ + || (type) == R_386_TLS_TPOFF || (type) == R_386_TLS_DESC) \ * ELF_RTYPE_CLASS_PLT) \ | (((type) == R_386_COPY) * ELF_RTYPE_CLASS_COPY)) #else @@ -373,6 +374,38 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, *reloc_addr = sym->st_value; # endif break; + case R_386_TLS_DESC: + { + struct tlsdesc volatile *td = + (struct tlsdesc volatile *)reloc_addr; + +# ifndef RTLD_BOOTSTRAP + if (! sym) + td->entry = _dl_tlsdesc_undefweak; + else +# endif + { +# ifndef RTLD_BOOTSTRAP +# ifndef SHARED + CHECK_STATIC_TLS (map, sym_map); +# else + if (!TRY_STATIC_TLS (map, sym_map)) + { + td->arg = _dl_make_tlsdesc_dynamic + (sym_map, sym->st_value + (ElfW(Word))td->arg); + td->entry = _dl_tlsdesc_dynamic; + } + else +# endif +# endif + { + td->arg = (void*)(sym->st_value - sym_map->l_tls_offset + + (ElfW(Word))td->arg); + td->entry = _dl_tlsdesc_return; + } + } + break; + } case R_386_TLS_TPOFF32: /* The offset is positive, backward from the thread pointer. */ # ifdef RTLD_BOOTSTRAP @@ -485,6 +518,41 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc, Therefore the offset is already correct. */ *reloc_addr = (sym == NULL ? 0 : sym->st_value) + reloc->r_addend; break; + case R_386_TLS_DESC: + { + struct tlsdesc volatile *td = + (struct tlsdesc volatile *)reloc_addr; + +# ifndef RTLD_BOOTSTRAP + if (!sym) + { + td->arg = (void*)reloc->r_addend; + td->entry = _dl_tlsdesc_undefweak; + } + else +# endif + { +# ifndef RTLD_BOOTSTRAP +# ifndef SHARED + CHECK_STATIC_TLS (map, sym_map); +# else + if (!TRY_STATIC_TLS (map, sym_map)) + { + td->arg = _dl_make_tlsdesc_dynamic + (sym_map, sym->st_value + reloc->r_addend); + td->entry = _dl_tlsdesc_dynamic; + } + else +# endif +# endif + { + td->arg = (void*)(sym->st_value - sym_map->l_tls_offset + + reloc->r_addend); + td->entry = _dl_tlsdesc_return; + } + } + } + break; case R_386_TLS_TPOFF32: /* The offset is positive, backward from the thread pointer. */ /* We know the offset of object the symbol is contained in. @@ -578,6 +646,53 @@ elf_machine_lazy_rel (struct link_map *map, *reloc_addr = (map->l_mach.plt + (((Elf32_Addr) reloc_addr) - map->l_mach.gotplt) * 4); } + else if (__builtin_expect (r_type == R_386_TLS_DESC, 1)) + { + struct tlsdesc volatile * __attribute__((__unused__)) td = + (struct tlsdesc volatile *)reloc_addr; + + /* Handle relocations that reference the local *ABS* in a simple + way, so as to preserve a potential addend. */ + if (ELF32_R_SYM (reloc->r_info) == 0) + td->entry = _dl_tlsdesc_resolve_abs_plus_addend; + /* Given a known-zero addend, we can store a pointer to the + reloc in the arg position. */ + else if (td->arg == 0) + { + td->arg = (void*)reloc; + td->entry = _dl_tlsdesc_resolve_rel; + } + else + { + /* We could handle non-*ABS* relocations with non-zero addends + by allocating dynamically an arg to hold a pointer to the + reloc, but that sounds pointless. */ + const Elf32_Rel *const r = reloc; + /* The code below was borrowed from elf_dynamic_do_rel(). */ + const ElfW(Sym) *const symtab = + (const void *) D_PTR (map, l_info[DT_SYMTAB]); + +#ifdef RTLD_BOOTSTRAP + /* The dynamic linker always uses versioning. */ + assert (map->l_info[VERSYMIDX (DT_VERSYM)] != NULL); +#else + if (map->l_info[VERSYMIDX (DT_VERSYM)]) +#endif + { + const ElfW(Half) *const version = + (const void *) D_PTR (map, l_info[VERSYMIDX (DT_VERSYM)]); + ElfW(Half) ndx = version[ELFW(R_SYM) (r->r_info)] & 0x7fff; + elf_machine_rel (map, r, &symtab[ELFW(R_SYM) (r->r_info)], + &map->l_versions[ndx], + (void *) (l_addr + r->r_offset)); + } +#ifndef RTLD_BOOTSTRAP + else + elf_machine_rel (map, r, &symtab[ELFW(R_SYM) (r->r_info)], NULL, + (void *) (l_addr + r->r_offset)); +#endif + } + } else _dl_reloc_bad_type (map, r_type, 1); } @@ -589,6 +704,20 @@ __attribute__ ((always_inline)) elf_machine_lazy_rela (struct link_map *map, Elf32_Addr l_addr, const Elf32_Rela *reloc) { + Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset); + const unsigned int r_type = ELF32_R_TYPE (reloc->r_info); + if (__builtin_expect (r_type == R_386_JMP_SLOT, 1)) + ; + else if (__builtin_expect (r_type == R_386_TLS_DESC, 1)) + { + struct tlsdesc volatile * __attribute__((__unused__)) td = + (struct tlsdesc volatile *)reloc_addr; + + td->arg = (void*)reloc; + td->entry = _dl_tlsdesc_resolve_rela; + } + else + _dl_reloc_bad_type (map, r_type, 1); } #endif /* !RTLD_BOOTSTRAP */ diff --git a/libc/sysdeps/i386/dl-tls.h b/libc/sysdeps/i386/dl-tls.h index a1707197c..58705c778 100644 --- a/libc/sysdeps/i386/dl-tls.h +++ b/libc/sysdeps/i386/dl-tls.h @@ -19,7 +19,7 @@ /* Type used for the representation of TLS information in the GOT. */ -typedef struct +typedef struct dl_tls_index { unsigned long int ti_module; unsigned long int ti_offset; diff --git a/libc/sysdeps/i386/dl-tlsdesc.S b/libc/sysdeps/i386/dl-tlsdesc.S new file mode 100644 index 000000000..db5005d9f --- /dev/null +++ b/libc/sysdeps/i386/dl-tlsdesc.S @@ -0,0 +1,290 @@ +/* Thread-local storage handling in the ELF dynamic linker. i386 version. + Copyright (C) 2004, 2005, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <sysdep.h> +#include <tls.h> +#include "tlsdesc.h" + + .text + + /* This function is used to compute the TP offset for symbols in + Static TLS, i.e., whose TP offset is the same for all + threads. + + The incoming %eax points to the TLS descriptor, such that + 0(%eax) points to _dl_tlsdesc_return itself, and 4(%eax) holds + the TP offset of the symbol corresponding to the object + denoted by the argument. */ + + .hidden _dl_tlsdesc_return + .global _dl_tlsdesc_return + .type _dl_tlsdesc_return,@function + cfi_startproc + .align 16 +_dl_tlsdesc_return: + movl 4(%eax), %eax + ret + cfi_endproc + .size _dl_tlsdesc_return, .-_dl_tlsdesc_return + + /* This function is used for undefined weak TLS symbols, for + which the base address (i.e., disregarding any addend) should + resolve to NULL. + + %eax points to the TLS descriptor, such that 0(%eax) points to + _dl_tlsdesc_undefweak itself, and 4(%eax) holds the addend. + We return the addend minus the TP, such that, when the caller + adds TP, it gets the addend back. If that's zero, as usual, + that's most likely a NULL pointer. */ + + .hidden _dl_tlsdesc_undefweak + .global _dl_tlsdesc_undefweak + .type _dl_tlsdesc_undefweak,@function + cfi_startproc + .align 16 +_dl_tlsdesc_undefweak: + movl 4(%eax), %eax + subl %gs:0, %eax + ret + cfi_endproc + .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak + +#ifdef SHARED + .hidden _dl_tlsdesc_dynamic + .global _dl_tlsdesc_dynamic + .type _dl_tlsdesc_dynamic,@function + + /* This function is used for symbols that need dynamic TLS. + + %eax points to the TLS descriptor, such that 0(%eax) points to + _dl_tlsdesc_dynamic itself, and 4(%eax) points to a struct + tlsdesc_dynamic_arg object. It must return in %eax the offset + between the thread pointer and the object denoted by the + argument, without clobbering any registers. + + The assembly code that follows is a rendition of the following + C code, hand-optimized a little bit. + +ptrdiff_t +__attribute__ ((__regparm__ (1))) +_dl_tlsdesc_dynamic (struct tlsdesc *tdp) +{ + struct tlsdesc_dynamic_arg *td = tdp->arg; + dtv_t *dtv = *(dtv_t **)((char *)__thread_pointer + DTV_OFFSET); + if (__builtin_expect (td->gen_count <= dtv[0].counter + && (dtv[td->tlsinfo.ti_module].pointer.val + != TLS_DTV_UNALLOCATED), + 1)) + return dtv[td->tlsinfo.ti_module].pointer.val + td->tlsinfo.ti_offset + - __thread_pointer; + + return ___tls_get_addr (&td->tlsinfo) - __thread_pointer; +} +*/ + cfi_startproc + .align 16 +_dl_tlsdesc_dynamic: + /* Like all TLS resolvers, preserve call-clobbered registers. + We need two scratch regs anyway. */ + subl $28, %esp + cfi_adjust_cfa_offset (28) + movl %ecx, 20(%esp) + movl %edx, 24(%esp) + movl TLSDESC_ARG(%eax), %eax + movl %gs:DTV_OFFSET, %edx + movl TLSDESC_GEN_COUNT(%eax), %ecx + cmpl (%edx), %ecx + ja .Lslow + movl TLSDESC_MODID(%eax), %ecx + movl (%edx,%ecx,8), %edx + cmpl $-1, %edx + je .Lslow + movl TLSDESC_MODOFF(%eax), %eax + addl %edx, %eax +.Lret: + movl 20(%esp), %ecx + subl %gs:0, %eax + movl 24(%esp), %edx + addl $28, %esp + cfi_adjust_cfa_offset (-28) + ret + .p2align 4,,7 +.Lslow: + cfi_adjust_cfa_offset (28) + movl %ebx, 16(%esp) + call __i686.get_pc_thunk.bx + addl $_GLOBAL_OFFSET_TABLE_, %ebx + call ___tls_get_addr@PLT + movl 16(%esp), %ebx + jmp .Lret + cfi_endproc + .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic +#endif /* SHARED */ + + /* This function is a wrapper for a lazy resolver for TLS_DESC + REL relocations that reference the *ABS* segment in their own + link maps. %ebx points to the caller's GOT. %eax points to a + TLS descriptor, such that 0(%eax) holds the address of the + resolver wrapper itself (unless some other thread beat us to + it) and 4(%eax) holds the addend in the relocation. + + When the actual resolver returns, it will have adjusted the + TLS descriptor such that we can tail-call it for it to return + the TP offset of the symbol. */ + + .hidden _dl_tlsdesc_resolve_abs_plus_addend + .global _dl_tlsdesc_resolve_abs_plus_addend + .type _dl_tlsdesc_resolve_abs_plus_addend,@function + cfi_startproc + .align 16 +_dl_tlsdesc_resolve_abs_plus_addend: +0: + pushl %eax + cfi_adjust_cfa_offset (4) + pushl %ecx + cfi_adjust_cfa_offset (4) + pushl %edx + cfi_adjust_cfa_offset (4) + movl $1f - 0b, %ecx + movl 4(%ebx), %edx + call _dl_tlsdesc_resolve_abs_plus_addend_fixup +1: + popl %edx + cfi_adjust_cfa_offset (-4) + popl %ecx + cfi_adjust_cfa_offset (-4) + popl %eax + cfi_adjust_cfa_offset (-4) + jmp *(%eax) + cfi_endproc + .size _dl_tlsdesc_resolve_abs_plus_addend, .-_dl_tlsdesc_resolve_abs_plus_addend + + /* This function is a wrapper for a lazy resolver for TLS_DESC + REL relocations that had zero addends. %ebx points to the + caller's GOT. %eax points to a TLS descriptor, such that + 0(%eax) holds the address of the resolver wrapper itself + (unless some other thread beat us to it) and 4(%eax) holds a + pointer to the relocation. + + When the actual resolver returns, it will have adjusted the + TLS descriptor such that we can tail-call it for it to return + the TP offset of the symbol. */ + + .hidden _dl_tlsdesc_resolve_rel + .global _dl_tlsdesc_resolve_rel + .type _dl_tlsdesc_resolve_rel,@function + cfi_startproc + .align 16 +_dl_tlsdesc_resolve_rel: +0: + pushl %eax + cfi_adjust_cfa_offset (4) + pushl %ecx + cfi_adjust_cfa_offset (4) + pushl %edx + cfi_adjust_cfa_offset (4) + movl $1f - 0b, %ecx + movl 4(%ebx), %edx + call _dl_tlsdesc_resolve_rel_fixup +1: + popl %edx + cfi_adjust_cfa_offset (-4) + popl %ecx + cfi_adjust_cfa_offset (-4) + popl %eax + cfi_adjust_cfa_offset (-4) + jmp *(%eax) + cfi_endproc + .size _dl_tlsdesc_resolve_rel, .-_dl_tlsdesc_resolve_rel + + /* This function is a wrapper for a lazy resolver for TLS_DESC + RELA relocations. %ebx points to the caller's GOT. %eax + points to a TLS descriptor, such that 0(%eax) holds the + address of the resolver wrapper itself (unless some other + thread beat us to it) and 4(%eax) holds a pointer to the + relocation. + + When the actual resolver returns, it will have adjusted the + TLS descriptor such that we can tail-call it for it to return + the TP offset of the symbol. */ + + .hidden _dl_tlsdesc_resolve_rela + .global _dl_tlsdesc_resolve_rela + .type _dl_tlsdesc_resolve_rela,@function + cfi_startproc + .align 16 +_dl_tlsdesc_resolve_rela: +0: + pushl %eax + cfi_adjust_cfa_offset (4) + pushl %ecx + cfi_adjust_cfa_offset (4) + pushl %edx + cfi_adjust_cfa_offset (4) + movl $1f - 0b, %ecx + movl 4(%ebx), %edx + call _dl_tlsdesc_resolve_rela_fixup +1: + popl %edx + cfi_adjust_cfa_offset (-4) + popl %ecx + cfi_adjust_cfa_offset (-4) + popl %eax + cfi_adjust_cfa_offset (-4) + jmp *(%eax) + cfi_endproc + .size _dl_tlsdesc_resolve_rela, .-_dl_tlsdesc_resolve_rela + + /* This function is a placeholder for lazy resolving of TLS + relocations. Once some thread starts resolving a TLS + relocation, it sets up the TLS descriptor to use this + resolver, such that other threads that would attempt to + resolve it concurrently may skip the call to the original lazy + resolver and go straight to a condition wait. + + When the actual resolver returns, it will have adjusted the + TLS descriptor such that we can tail-call it for it to return + the TP offset of the symbol. */ + + .hidden _dl_tlsdesc_resolve_hold + .global _dl_tlsdesc_resolve_hold + .type _dl_tlsdesc_resolve_hold,@function + cfi_startproc + .align 16 +_dl_tlsdesc_resolve_hold: +0: + pushl %eax + cfi_adjust_cfa_offset (4) + pushl %ecx + cfi_adjust_cfa_offset (4) + pushl %edx + cfi_adjust_cfa_offset (4) + movl $1f - 0b, %ecx + movl 4(%ebx), %edx + call _dl_tlsdesc_resolve_hold_fixup +1: + popl %edx + cfi_adjust_cfa_offset (-4) + popl %ecx + cfi_adjust_cfa_offset (-4) + popl %eax + cfi_adjust_cfa_offset (-4) + jmp *(%eax) + cfi_endproc + .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold diff --git a/libc/sysdeps/i386/dl-tlsdesc.h b/libc/sysdeps/i386/dl-tlsdesc.h new file mode 100644 index 000000000..df4a646fe --- /dev/null +++ b/libc/sysdeps/i386/dl-tlsdesc.h @@ -0,0 +1,61 @@ +/* Thread-local storage descriptor handling in the ELF dynamic linker. + i386 version. + Copyright (C) 2005, 2008 Free Software 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 _I386_DL_TLSDESC_H +# define _I386_DL_TLSDESC_H 1 + +/* Type used to represent a TLS descriptor in the GOT. */ +struct tlsdesc +{ + ptrdiff_t __attribute__ ((regparm (1))) (*entry) (struct tlsdesc *); + void *arg; +}; + +typedef struct dl_tls_index +{ + unsigned long int ti_module; + unsigned long int ti_offset; +} tls_index; + +/* Type used as the argument in a TLS descriptor for a symbol that + needs dynamic TLS offsets. */ +struct tlsdesc_dynamic_arg +{ + tls_index tlsinfo; + size_t gen_count; +}; + +extern ptrdiff_t attribute_hidden __attribute__ ((regparm (1))) + _dl_tlsdesc_return (struct tlsdesc *), + _dl_tlsdesc_undefweak (struct tlsdesc *), + _dl_tlsdesc_resolve_abs_plus_addend (struct tlsdesc *), + _dl_tlsdesc_resolve_rel (struct tlsdesc *), + _dl_tlsdesc_resolve_rela (struct tlsdesc *), + _dl_tlsdesc_resolve_hold (struct tlsdesc *); + +# ifdef SHARED +extern void *internal_function _dl_make_tlsdesc_dynamic (struct link_map *map, + size_t ti_offset); + +extern ptrdiff_t attribute_hidden __attribute__ ((regparm (1))) + _dl_tlsdesc_dynamic (struct tlsdesc *); +# endif + +#endif diff --git a/libc/sysdeps/i386/tlsdesc.c b/libc/sysdeps/i386/tlsdesc.c new file mode 100644 index 000000000..28287d574 --- /dev/null +++ b/libc/sysdeps/i386/tlsdesc.c @@ -0,0 +1,269 @@ +/* Manage TLS descriptors. i386 version. + Copyright (C) 2005, 2008 Free Software 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 <link.h> +#include <ldsodefs.h> +#include <elf/dynamic-link.h> +#include <tls.h> +#include <dl-tlsdesc.h> +#include <tlsdeschtab.h> + +/* The following 4 functions take an entry_check_offset argument. + It's computed by the caller as an offset between its entry point + and the call site, such that by adding the built-in return address + that is implicitly passed to the function with this offset, we can + easily obtain the caller's entry point to compare with the entry + point given in the TLS descriptor. If it's changed, we want to + return immediately. */ + +/* This function is used to lazily resolve TLS_DESC REL relocations + that reference the *ABS* segment in their own link maps. The + argument is the addend originally stored there. */ + +void +__attribute__ ((regparm (3))) attribute_hidden +_dl_tlsdesc_resolve_abs_plus_addend_fixup (struct tlsdesc volatile *td, + struct link_map *l, + ptrdiff_t entry_check_offset) +{ + ptrdiff_t addend = (ptrdiff_t) td->arg; + + if (_dl_tlsdesc_resolve_early_return_p (td, __builtin_return_address (0) + - entry_check_offset)) + return; + +#ifndef SHARED + CHECK_STATIC_TLS (l, l); +#else + if (!TRY_STATIC_TLS (l, l)) + { + td->arg = _dl_make_tlsdesc_dynamic (l, addend); + td->entry = _dl_tlsdesc_dynamic; + } + else +#endif + { + td->arg = (void*) (addend - l->l_tls_offset); + td->entry = _dl_tlsdesc_return; + } + + _dl_tlsdesc_wake_up_held_fixups (); +} + +/* This function is used to lazily resolve TLS_DESC REL relocations + that originally had zero addends. The argument location, that + originally held the addend, is used to hold a pointer to the + relocation, but it has to be restored before we call the function + that applies relocations. */ + +void +__attribute__ ((regparm (3))) attribute_hidden +_dl_tlsdesc_resolve_rel_fixup (struct tlsdesc volatile *td, + struct link_map *l, + ptrdiff_t entry_check_offset) +{ + const ElfW(Rel) *reloc = td->arg; + + if (_dl_tlsdesc_resolve_early_return_p (td, __builtin_return_address (0) + - entry_check_offset)) + return; + + /* The code below was borrowed from _dl_fixup(), + except for checking for STB_LOCAL. */ + const ElfW(Sym) *const symtab + = (const void *) D_PTR (l, l_info[DT_SYMTAB]); + const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); + const ElfW(Sym) *sym = &symtab[ELFW(R_SYM) (reloc->r_info)]; + lookup_t result; + + /* Look up the target symbol. If the normal lookup rules are not + used don't look in the global scope. */ + if (ELFW(ST_BIND) (sym->st_info) != STB_LOCAL + && __builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) + { + const struct r_found_version *version = NULL; + + if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL) + { + const ElfW(Half) *vernum = + (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); + ElfW(Half) ndx = vernum[ELFW(R_SYM) (reloc->r_info)] & 0x7fff; + version = &l->l_versions[ndx]; + if (version->hash == 0) + version = NULL; + } + + result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, + l->l_scope, version, ELF_RTYPE_CLASS_PLT, + DL_LOOKUP_ADD_DEPENDENCY, NULL); + } + else + { + /* We already found the symbol. The module (and therefore its load + address) is also known. */ + result = l; + } + + if (!sym) + { + td->arg = 0; + td->entry = _dl_tlsdesc_undefweak; + } + else + { +# ifndef SHARED + CHECK_STATIC_TLS (l, result); +# else + if (!TRY_STATIC_TLS (l, result)) + { + td->arg = _dl_make_tlsdesc_dynamic (result, sym->st_value); + td->entry = _dl_tlsdesc_dynamic; + } + else +# endif + { + td->arg = (void*)(sym->st_value - result->l_tls_offset); + td->entry = _dl_tlsdesc_return; + } + } + + _dl_tlsdesc_wake_up_held_fixups (); +} + +/* This function is used to lazily resolve TLS_DESC RELA relocations. + The argument location is used to hold a pointer to the relocation. */ + +void +__attribute__ ((regparm (3))) attribute_hidden +_dl_tlsdesc_resolve_rela_fixup (struct tlsdesc volatile *td, + struct link_map *l, + ptrdiff_t entry_check_offset) +{ + const ElfW(Rela) *reloc = td->arg; + + if (_dl_tlsdesc_resolve_early_return_p (td, __builtin_return_address (0) + - entry_check_offset)) + return; + + /* The code below was borrowed from _dl_fixup(), + except for checking for STB_LOCAL. */ + const ElfW(Sym) *const symtab + = (const void *) D_PTR (l, l_info[DT_SYMTAB]); + const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); + const ElfW(Sym) *sym = &symtab[ELFW(R_SYM) (reloc->r_info)]; + lookup_t result; + + /* Look up the target symbol. If the normal lookup rules are not + used don't look in the global scope. */ + if (ELFW(ST_BIND) (sym->st_info) != STB_LOCAL + && __builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) + { + const struct r_found_version *version = NULL; + + if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL) + { + const ElfW(Half) *vernum = + (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); + ElfW(Half) ndx = vernum[ELFW(R_SYM) (reloc->r_info)] & 0x7fff; + version = &l->l_versions[ndx]; + if (version->hash == 0) + version = NULL; + } + + result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, + l->l_scope, version, ELF_RTYPE_CLASS_PLT, + DL_LOOKUP_ADD_DEPENDENCY, NULL); + } + else + { + /* We already found the symbol. The module (and therefore its load + address) is also known. */ + result = l; + } + + if (!sym) + { + td->arg = (void*) reloc->r_addend; + td->entry = _dl_tlsdesc_undefweak; + } + else + { +# ifndef SHARED + CHECK_STATIC_TLS (l, result); +# else + if (!TRY_STATIC_TLS (l, result)) + { + td->arg = _dl_make_tlsdesc_dynamic (result, sym->st_value + + reloc->r_addend); + td->entry = _dl_tlsdesc_dynamic; + } + else +# endif + { + td->arg = (void*) (sym->st_value - result->l_tls_offset + + reloc->r_addend); + td->entry = _dl_tlsdesc_return; + } + } + + _dl_tlsdesc_wake_up_held_fixups (); +} + +/* This function is used to avoid busy waiting for other threads to + complete the lazy relocation. Once another thread wins the race to + relocate a TLS descriptor, it sets the descriptor up such that this + function is called to wait until the resolver releases the + lock. */ + +void +__attribute__ ((regparm (3))) attribute_hidden +_dl_tlsdesc_resolve_hold_fixup (struct tlsdesc volatile *td, + struct link_map *l __attribute__((__unused__)), + ptrdiff_t entry_check_offset) +{ + /* Maybe we're lucky and can return early. */ + if (__builtin_return_address (0) - entry_check_offset != td->entry) + return; + + /* Locking here will stop execution until the running resolver runs + _dl_tlsdesc_wake_up_held_fixups(), releasing the lock. + + FIXME: We'd be better off waiting on a condition variable, such + that we didn't have to hold the lock throughout the relocation + processing. */ + __rtld_lock_lock_recursive (GL(dl_load_lock)); + __rtld_lock_unlock_recursive (GL(dl_load_lock)); +} + + +/* Unmap the dynamic object, but also release its TLS descriptor table + if there is one. */ + +void +internal_function +_dl_unmap (struct link_map *map) +{ + __munmap ((void *) (map)->l_map_start, + (map)->l_map_end - (map)->l_map_start); + +#if SHARED + if (map->l_mach.tlsdesc_table) + htab_delete (map->l_mach.tlsdesc_table); +#endif +} diff --git a/libc/sysdeps/i386/tlsdesc.sym b/libc/sysdeps/i386/tlsdesc.sym new file mode 100644 index 000000000..33854975d --- /dev/null +++ b/libc/sysdeps/i386/tlsdesc.sym @@ -0,0 +1,17 @@ +#include <stddef.h> +#include <sysdep.h> +#include <tls.h> +#include <link.h> +#include <dl-tlsdesc.h> + +-- + +-- Abuse tls.h macros to derive offsets relative to the thread register. + +DTV_OFFSET offsetof(struct pthread, header.dtv) + +TLSDESC_ARG offsetof(struct tlsdesc, arg) + +TLSDESC_GEN_COUNT offsetof(struct tlsdesc_dynamic_arg, gen_count) +TLSDESC_MODID offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_module) +TLSDESC_MODOFF offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_offset) diff --git a/libc/sysdeps/ia64/bits/byteswap.h b/libc/sysdeps/ia64/bits/byteswap.h index 6862aa0b6..d64914f36 100644 --- a/libc/sysdeps/ia64/bits/byteswap.h +++ b/libc/sysdeps/ia64/bits/byteswap.h @@ -1,5 +1,5 @@ /* Macros to swap the order of bytes in integer values. - Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 1997,1998,2000,2002,2003,2008 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,7 +17,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#if !defined _BYTESWAP_H && !defined _NETINET_IN_H +#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H # error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead." #endif diff --git a/libc/sysdeps/posix/getaddrinfo.c b/libc/sysdeps/posix/getaddrinfo.c index 3de83e394..8908fc10c 100644 --- a/libc/sysdeps/posix/getaddrinfo.c +++ b/libc/sysdeps/posix/getaddrinfo.c @@ -61,6 +61,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <not-cancel.h> #include <nscd/nscd-client.h> #include <nscd/nscd_proto.h> +#include <resolv/res_hconf.h> #ifdef HAVE_LIBIDN extern int __idna_to_ascii_lz (const char *input, char **output, int flags); @@ -97,8 +98,9 @@ struct gaih_typeproto { int socktype; int protocol; - char name[4]; - int protoflag; + uint8_t protoflag; + bool defaultflag; + char name[8]; }; /* Values for `protoflag'. */ @@ -107,11 +109,21 @@ struct gaih_typeproto static const struct gaih_typeproto gaih_inet_typeproto[] = { - { 0, 0, "", 0 }, - { SOCK_STREAM, IPPROTO_TCP, "tcp", 0 }, - { SOCK_DGRAM, IPPROTO_UDP, "udp", 0 }, - { SOCK_RAW, 0, "raw", GAI_PROTO_PROTOANY|GAI_PROTO_NOSERVICE }, - { 0, 0, "", 0 } + { 0, 0, 0, false, "" }, + { SOCK_STREAM, IPPROTO_TCP, 0, true, "tcp" }, + { SOCK_DGRAM, IPPROTO_UDP, 0, true, "udp" }, +#if defined SOCK_DCCP && defined IPPROTO_DCCP + { SOCK_DCCP, IPPROTO_DCCP, 0, false, "dccp" }, +#endif +#ifdef IPPROTO_UDPLITE + { SOCK_DGRAM, IPPROTO_UDPLITE, 0, false, "udplite" }, +#endif +#ifdef IPPROTO_SCTP + { SOCK_STREAM, IPPROTO_SCTP, 0, false, "sctp" }, + { SOCK_SEQPACKET, IPPROTO_SCTP, 0, false, "sctp" }, +#endif + { SOCK_RAW, 0, GAI_PROTO_PROTOANY|GAI_PROTO_NOSERVICE, true, "raw" }, + { 0, 0, 0, false, "" } }; struct gaih @@ -363,18 +375,19 @@ gaih_inet (const char *name, const struct gaih_service *service, we know about. */ struct gaih_servtuple **lastp = &st; for (++tp; tp->name[0]; ++tp) - { - struct gaih_servtuple *newp; + if (tp->defaultflag) + { + struct gaih_servtuple *newp; - newp = __alloca (sizeof (struct gaih_servtuple)); - newp->next = NULL; - newp->socktype = tp->socktype; - newp->protocol = tp->protocol; - newp->port = port; + newp = __alloca (sizeof (struct gaih_servtuple)); + newp->next = NULL; + newp->socktype = tp->socktype; + newp->protocol = tp->protocol; + newp->port = port; - *lastp = newp; - lastp = &newp->next; - } + *lastp = newp; + lastp = &newp->next; + } } } @@ -1099,7 +1112,10 @@ get_scope (const struct sockaddr_in6 *in6) { if (! IN6_IS_ADDR_MULTICAST (&in6->sin6_addr)) { - if (IN6_IS_ADDR_LINKLOCAL (&in6->sin6_addr)) + if (IN6_IS_ADDR_LINKLOCAL (&in6->sin6_addr) + /* RFC 4291 2.5.3 says that the loopback address is to be + treated like a link-local address. */ + || IN6_IS_ADDR_LOOPBACK (&in6->sin6_addr)) scope = 2; else if (IN6_IS_ADDR_SITELOCAL (&in6->sin6_addr)) scope = 5; @@ -1232,20 +1248,14 @@ match_prefix (const struct sockaddr_in6 *in6, { const struct sockaddr_in *in = (const struct sockaddr_in *) in6; - /* Convert to IPv6 address. */ + /* Construct a V4-to-6 mapped address. */ in6_mem.sin6_family = PF_INET6; in6_mem.sin6_port = in->sin_port; in6_mem.sin6_flowinfo = 0; - if (in->sin_addr.s_addr == htonl (0x7f000001)) - in6_mem.sin6_addr = (struct in6_addr) IN6ADDR_LOOPBACK_INIT; - else - { - /* Construct a V4-to-6 mapped address. */ - memset (&in6_mem.sin6_addr, '\0', sizeof (in6_mem.sin6_addr)); - in6_mem.sin6_addr.s6_addr16[5] = 0xffff; - in6_mem.sin6_addr.s6_addr32[3] = in->sin_addr.s_addr; - in6_mem.sin6_scope_id = 0; - } + memset (&in6_mem.sin6_addr, '\0', sizeof (in6_mem.sin6_addr)); + in6_mem.sin6_addr.s6_addr16[5] = 0xffff; + in6_mem.sin6_addr.s6_addr32[3] = in->sin_addr.s_addr; + in6_mem.sin6_scope_id = 0; in6 = &in6_mem; } @@ -2077,6 +2087,10 @@ getaddrinfo (const char *name, const char *service, if ((hints->ai_flags & AI_CANONNAME) && name == NULL) return EAI_BADFLAGS; + /* Initialize configurations. */ + if (__builtin_expect (!_res_hconf.initialized, 0)) + _res_hconf_init (); + struct in6addrinfo *in6ai = NULL; size_t in6ailen = 0; bool seen_ipv4 = false; diff --git a/libc/sysdeps/s390/bits/byteswap.h b/libc/sysdeps/s390/bits/byteswap.h index d0e31b836..4bfd5fa06 100644 --- a/libc/sysdeps/s390/bits/byteswap.h +++ b/libc/sysdeps/s390/bits/byteswap.h @@ -1,5 +1,5 @@ /* Macros to swap the order of bytes in integer values. s390 version. - Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + Copyright (C) 2000, 2001, 2002, 2003, 2008 Free Software Foundation, Inc. Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com). This file is part of the GNU C Library. @@ -18,7 +18,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#if !defined _BYTESWAP_H && !defined _NETINET_IN_H +#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H # error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead." #endif diff --git a/libc/sysdeps/unix/sysv/linux/bits/socket.h b/libc/sysdeps/unix/sysv/linux/bits/socket.h index ceb60133e..3dda3d1c2 100644 --- a/libc/sysdeps/unix/sysv/linux/bits/socket.h +++ b/libc/sysdeps/unix/sysv/linux/bits/socket.h @@ -1,5 +1,5 @@ /* System-specific socket constants and types. Linux version. - Copyright (C) 1991, 1992, 1994-2001, 2004, 2006, 2007 + Copyright (C) 1991, 1992, 1994-2001, 2004, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -52,6 +52,8 @@ enum __socket_type SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, datagrams of fixed maximum length. */ #define SOCK_SEQPACKET SOCK_SEQPACKET + SOCK_DCCP = 6, +#define SOCK_DCCP SOCK_DCCP /* Datagram Congestion Control Protocol. */ SOCK_PACKET = 10 /* Linux specific way of getting packets at the dev level. For writing rarp and other similar things on the user level. */ diff --git a/libc/sysdeps/x86_64/Makefile b/libc/sysdeps/x86_64/Makefile index edbdac0e3..da8209338 100644 --- a/libc/sysdeps/x86_64/Makefile +++ b/libc/sysdeps/x86_64/Makefile @@ -13,3 +13,13 @@ endif ifeq ($(subdir),string) sysdep_routines += cacheinfo endif + +ifeq ($(subdir),elf) +sysdep-dl-routines += tlsdesc dl-tlsdesc +sysdep_routines += tlsdesc dl-tlsdesc +sysdep-rtld-routines += tlsdesc dl-tlsdesc +endif + +ifeq ($(subdir),csu) +gen-as-const-headers += tlsdesc.sym +endif diff --git a/libc/sysdeps/x86_64/bits/byteswap.h b/libc/sysdeps/x86_64/bits/byteswap.h index ec2b17889..08b38e852 100644 --- a/libc/sysdeps/x86_64/bits/byteswap.h +++ b/libc/sysdeps/x86_64/bits/byteswap.h @@ -1,5 +1,5 @@ /* Macros to swap the order of bytes in integer values. - Copyright (C) 1997, 1998, 2000, 2002, 2003, 2007 + Copyright (C) 1997, 1998, 2000, 2002, 2003, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -18,7 +18,7 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -#if !defined _BYTESWAP_H && !defined _NETINET_IN_H +#if !defined _BYTESWAP_H && !defined _NETINET_IN_H && !defined _ENDIAN_H # error "Never use <bits/byteswap.h> directly; include <byteswap.h> instead." #endif diff --git a/libc/sysdeps/x86_64/bits/linkmap.h b/libc/sysdeps/x86_64/bits/linkmap.h index 8ea715715..dd0d14087 100644 --- a/libc/sysdeps/x86_64/bits/linkmap.h +++ b/libc/sysdeps/x86_64/bits/linkmap.h @@ -3,6 +3,7 @@ struct link_map_machine { Elf64_Addr plt; /* Address of .plt + 0x16 */ Elf64_Addr gotplt; /* Address of .got + 0x18 */ + void *tlsdesc_table; /* Address of TLS descriptor hash table. */ }; #else @@ -10,5 +11,6 @@ struct link_map_machine { Elf32_Addr plt; /* Address of .plt + 0x16 */ Elf32_Addr gotplt; /* Address of .got + 0x0c */ + void *tlsdesc_table; /* Address of TLS descriptor hash table. */ }; #endif diff --git a/libc/sysdeps/x86_64/dl-lookupcfg.h b/libc/sysdeps/x86_64/dl-lookupcfg.h new file mode 100644 index 000000000..2af2b9e8f --- /dev/null +++ b/libc/sysdeps/x86_64/dl-lookupcfg.h @@ -0,0 +1,28 @@ +/* Configuration of lookup functions. + Copyright (C) 2005, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#define DL_UNMAP_IS_SPECIAL + +#include_next <dl-lookupcfg.h> + +struct link_map; + +extern void internal_function _dl_unmap (struct link_map *map); + +#define DL_UNMAP(map) _dl_unmap (map) diff --git a/libc/sysdeps/x86_64/dl-machine.h b/libc/sysdeps/x86_64/dl-machine.h index 31a7013d5..959b1328d 100644 --- a/libc/sysdeps/x86_64/dl-machine.h +++ b/libc/sysdeps/x86_64/dl-machine.h @@ -26,6 +26,7 @@ #include <sys/param.h> #include <sysdep.h> #include <tls.h> +#include <dl-tlsdesc.h> /* Return nonzero iff ELF header is compatible with the running host. */ static inline int __attribute__ ((unused)) @@ -131,6 +132,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) got[2] = (Elf64_Addr) &_dl_runtime_resolve; } + if (l->l_info[ADDRIDX (DT_TLSDESC_GOT)] && lazy) + *(Elf64_Addr*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_GOT)]) + l->l_addr) + = (Elf64_Addr) &_dl_tlsdesc_resolve_rela; + return lazy; } @@ -194,7 +199,9 @@ _dl_start_user:\n\ # define elf_machine_type_class(type) \ ((((type) == R_X86_64_JUMP_SLOT \ || (type) == R_X86_64_DTPMOD64 \ - || (type) == R_X86_64_DTPOFF64 || (type) == R_X86_64_TPOFF64) \ + || (type) == R_X86_64_DTPOFF64 \ + || (type) == R_X86_64_TPOFF64 \ + || (type) == R_X86_64_TLSDESC) \ * ELF_RTYPE_CLASS_PLT) \ | (((type) == R_X86_64_COPY) * ELF_RTYPE_CLASS_COPY)) #else @@ -323,6 +330,41 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc, *reloc_addr = sym->st_value + reloc->r_addend; # endif break; + case R_X86_64_TLSDESC: + { + struct tlsdesc volatile *td = + (struct tlsdesc volatile *)reloc_addr; + +# ifndef RTLD_BOOTSTRAP + if (! sym) + { + td->arg = (void*)reloc->r_addend; + td->entry = _dl_tlsdesc_undefweak; + } + else +# endif + { +# ifndef RTLD_BOOTSTRAP +# ifndef SHARED + CHECK_STATIC_TLS (map, sym_map); +# else + if (!TRY_STATIC_TLS (map, sym_map)) + { + td->arg = _dl_make_tlsdesc_dynamic + (sym_map, sym->st_value + reloc->r_addend); + td->entry = _dl_tlsdesc_dynamic; + } + else +# endif +# endif + { + td->arg = (void*)(sym->st_value - sym_map->l_tls_offset + + reloc->r_addend); + td->entry = _dl_tlsdesc_return; + } + } + break; + } case R_X86_64_TPOFF64: /* The offset is negative, forward from the thread pointer. */ # ifndef RTLD_BOOTSTRAP @@ -435,6 +477,15 @@ elf_machine_lazy_rel (struct link_map *map, map->l_mach.plt + (((Elf64_Addr) reloc_addr) - map->l_mach.gotplt) * 2; } + else if (__builtin_expect (r_type == R_X86_64_TLSDESC, 1)) + { + struct tlsdesc volatile * __attribute__((__unused__)) td = + (struct tlsdesc volatile *)reloc_addr; + + td->arg = (void*)reloc; + td->entry = (void*)(D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + + map->l_addr); + } else _dl_reloc_bad_type (map, r_type, 1); } diff --git a/libc/sysdeps/x86_64/dl-tls.h b/libc/sysdeps/x86_64/dl-tls.h index 3e4768dc1..9b389edb4 100644 --- a/libc/sysdeps/x86_64/dl-tls.h +++ b/libc/sysdeps/x86_64/dl-tls.h @@ -1,5 +1,5 @@ /* Thread-local storage handling in the ELF dynamic linker. x86-64 version. - Copyright (C) 2002 Free Software Foundation, Inc. + Copyright (C) 2002, 2005 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -19,7 +19,7 @@ /* Type used for the representation of TLS information in the GOT. */ -typedef struct +typedef struct dl_tls_index { unsigned long int ti_module; unsigned long int ti_offset; diff --git a/libc/sysdeps/x86_64/dl-tlsdesc.S b/libc/sysdeps/x86_64/dl-tlsdesc.S new file mode 100644 index 000000000..5eac1f2a5 --- /dev/null +++ b/libc/sysdeps/x86_64/dl-tlsdesc.S @@ -0,0 +1,245 @@ +/* Thread-local storage handling in the ELF dynamic linker. x86_64 version. + Copyright (C) 2004, 2005, 2008 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#include <sysdep.h> +#include <tls.h> +#include "tlsdesc.h" + + .text + + /* This function is used to compute the TP offset for symbols in + Static TLS, i.e., whose TP offset is the same for all + threads. + + The incoming %rax points to the TLS descriptor, such that + 0(%rax) points to _dl_tlsdesc_return itself, and 8(%rax) holds + the TP offset of the symbol corresponding to the object + denoted by the argument. */ + + .hidden _dl_tlsdesc_return + .global _dl_tlsdesc_return + .type _dl_tlsdesc_return,@function + cfi_startproc + .align 16 +_dl_tlsdesc_return: + movq 8(%rax), %rax + ret + cfi_endproc + .size _dl_tlsdesc_return, .-_dl_tlsdesc_return + + /* This function is used for undefined weak TLS symbols, for + which the base address (i.e., disregarding any addend) should + resolve to NULL. + + %rax points to the TLS descriptor, such that 0(%rax) points to + _dl_tlsdesc_undefweak itself, and 8(%rax) holds the addend. + We return the addend minus the TP, such that, when the caller + adds TP, it gets the addend back. If that's zero, as usual, + that's most likely a NULL pointer. */ + + .hidden _dl_tlsdesc_undefweak + .global _dl_tlsdesc_undefweak + .type _dl_tlsdesc_undefweak,@function + cfi_startproc + .align 16 +_dl_tlsdesc_undefweak: + movq 8(%rax), %rax + subq %fs:0, %rax + ret + cfi_endproc + .size _dl_tlsdesc_undefweak, .-_dl_tlsdesc_undefweak + +#ifdef SHARED + .hidden _dl_tlsdesc_dynamic + .global _dl_tlsdesc_dynamic + .type _dl_tlsdesc_dynamic,@function + + /* %rax points to the TLS descriptor, such that 0(%rax) points to + _dl_tlsdesc_dynamic itself, and 8(%rax) points to a struct + tlsdesc_dynamic_arg object. It must return in %rax the offset + between the thread pointer and the object denoted by the + argument, without clobbering any registers. + + The assembly code that follows is a rendition of the following + C code, hand-optimized a little bit. + +ptrdiff_t +_dl_tlsdesc_dynamic (register struct tlsdesc *tdp asm ("%rax")) +{ + struct tlsdesc_dynamic_arg *td = tdp->arg; + dtv_t *dtv = *(dtv_t **)((char *)__thread_pointer + DTV_OFFSET); + if (__builtin_expect (td->gen_count <= dtv[0].counter + && (dtv[td->tlsinfo.ti_module].pointer.val + != TLS_DTV_UNALLOCATED), + 1)) + return dtv[td->tlsinfo.ti_module].pointer.val + td->tlsinfo.ti_offset + - __thread_pointer; + + return __tls_get_addr_internal (&td->tlsinfo) - __thread_pointer; +} +*/ + cfi_startproc + .align 16 +_dl_tlsdesc_dynamic: + /* Preserve call-clobbered registers that we modify. + We need two scratch regs anyway. */ + movq %rsi, -16(%rsp) + movq %fs:DTV_OFFSET, %rsi + movq %rdi, -8(%rsp) + movq TLSDESC_ARG(%rax), %rdi + movq (%rsi), %rax + cmpq %rax, TLSDESC_GEN_COUNT(%rdi) + ja .Lslow + movq TLSDESC_MODID(%rdi), %rax + salq $4, %rax + movq (%rax,%rsi), %rax + cmpq $-1, %rax + je .Lslow + addq TLSDESC_MODOFF(%rdi), %rax +.Lret: + movq -16(%rsp), %rsi + subq %fs:0, %rax + movq -8(%rsp), %rdi + ret +.Lslow: + /* Besides rdi and rsi, saved above, save rdx, rcx, r8, r9, + r10 and r11. Also, align the stack, that's off by 8 bytes. */ + subq $72, %rsp + cfi_adjust_cfa_offset (72) + movq %rdx, 8(%rsp) + movq %rcx, 16(%rsp) + movq %r8, 24(%rsp) + movq %r9, 32(%rsp) + movq %r10, 40(%rsp) + movq %r11, 48(%rsp) + /* %rdi already points to the tlsinfo data structure. */ + call __tls_get_addr@PLT + movq 8(%rsp), %rdx + movq 16(%rsp), %rcx + movq 24(%rsp), %r8 + movq 32(%rsp), %r9 + movq 40(%rsp), %r10 + movq 48(%rsp), %r11 + addq $72, %rsp + cfi_adjust_cfa_offset (-72) + jmp .Lret + cfi_endproc + .size _dl_tlsdesc_dynamic, .-_dl_tlsdesc_dynamic +#endif /* SHARED */ + + /* This function is a wrapper for a lazy resolver for TLS_DESC + RELA relocations. The incoming 0(%rsp) points to the caller's + link map, pushed by the dynamic object's internal lazy TLS + resolver front-end before tail-calling us. We need to pop it + ourselves. %rax points to a TLS descriptor, such that 0(%rax) + holds the address of the internal resolver front-end (unless + some other thread beat us to resolving it) and 8(%rax) holds a + pointer to the relocation. + + When the actual resolver returns, it will have adjusted the + TLS descriptor such that we can tail-call it for it to return + the TP offset of the symbol. */ + + .hidden _dl_tlsdesc_resolve_rela + .global _dl_tlsdesc_resolve_rela + .type _dl_tlsdesc_resolve_rela,@function + cfi_startproc + .align 16 + /* The PLT entry will have pushed the link_map pointer. */ +_dl_tlsdesc_resolve_rela: + cfi_adjust_cfa_offset (8) + /* Save all call-clobbered registers. */ + subq $72, %rsp + cfi_adjust_cfa_offset (72) + movq %rax, (%rsp) + movq %rdi, 8(%rsp) + movq %rax, %rdi /* Pass tlsdesc* in %rdi. */ + movq %rsi, 16(%rsp) + movq 72(%rsp), %rsi /* Pass link_map* in %rsi. */ + movq %r8, 24(%rsp) + movq %r9, 32(%rsp) + movq %r10, 40(%rsp) + movq %r11, 48(%rsp) + movq %rdx, 56(%rsp) + movq %rcx, 64(%rsp) + call _dl_tlsdesc_resolve_rela_fixup + movq (%rsp), %rax + movq 8(%rsp), %rdi + movq 16(%rsp), %rsi + movq 24(%rsp), %r8 + movq 32(%rsp), %r9 + movq 40(%rsp), %r10 + movq 48(%rsp), %r11 + movq 56(%rsp), %rdx + movq 64(%rsp), %rcx + addq $80, %rsp + cfi_adjust_cfa_offset (-80) + jmp *(%rax) + cfi_endproc + .size _dl_tlsdesc_resolve_rela, .-_dl_tlsdesc_resolve_rela + + /* This function is a placeholder for lazy resolving of TLS + relocations. Once some thread starts resolving a TLS + relocation, it sets up the TLS descriptor to use this + resolver, such that other threads that would attempt to + resolve it concurrently may skip the call to the original lazy + resolver and go straight to a condition wait. + + When the actual resolver returns, it will have adjusted the + TLS descriptor such that we can tail-call it for it to return + the TP offset of the symbol. */ + + .hidden _dl_tlsdesc_resolve_hold + .global _dl_tlsdesc_resolve_hold + .type _dl_tlsdesc_resolve_hold,@function + cfi_startproc + .align 16 +_dl_tlsdesc_resolve_hold: +0: + /* Save all call-clobbered registers. */ + subq $72, %rsp + cfi_adjust_cfa_offset (72) + movq %rax, (%rsp) + movq %rdi, 8(%rsp) + movq %rax, %rdi /* Pass tlsdesc* in %rdi. */ + movq %rsi, 16(%rsp) + /* Pass _dl_tlsdesc_resolve_hold's address in %rsi. */ + leaq . - _dl_tlsdesc_resolve_hold(%rip), %rsi + movq %r8, 24(%rsp) + movq %r9, 32(%rsp) + movq %r10, 40(%rsp) + movq %r11, 48(%rsp) + movq %rdx, 56(%rsp) + movq %rcx, 64(%rsp) + call _dl_tlsdesc_resolve_hold_fixup +1: + movq (%rsp), %rax + movq 8(%rsp), %rdi + movq 16(%rsp), %rsi + movq 24(%rsp), %r8 + movq 32(%rsp), %r9 + movq 40(%rsp), %r10 + movq 48(%rsp), %r11 + movq 56(%rsp), %rdx + movq 64(%rsp), %rcx + addq $72, %rsp + cfi_adjust_cfa_offset (-72) + jmp *(%eax) + cfi_endproc + .size _dl_tlsdesc_resolve_hold, .-_dl_tlsdesc_resolve_hold diff --git a/libc/sysdeps/x86_64/dl-tlsdesc.h b/libc/sysdeps/x86_64/dl-tlsdesc.h new file mode 100644 index 000000000..9e64aab5a --- /dev/null +++ b/libc/sysdeps/x86_64/dl-tlsdesc.h @@ -0,0 +1,64 @@ +/* Thread-local storage descriptor handling in the ELF dynamic linker. + x86_64 version. + Copyright (C) 2005, 2008 Free Software 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 _X86_64_DL_TLSDESC_H +# define _X86_64_DL_TLSDESC_H 1 + +/* Use this to access DT_TLSDESC_PLT and DT_TLSDESC_GOT. */ +#ifndef ADDRIDX +# define ADDRIDX(tag) (DT_NUM + DT_THISPROCNUM + DT_VERSIONTAGNUM \ + + DT_EXTRANUM + DT_VALNUM + DT_ADDRTAGIDX (tag)) +#endif + +/* Type used to represent a TLS descriptor in the GOT. */ +struct tlsdesc +{ + ptrdiff_t (*entry)(struct tlsdesc *on_rax); + void *arg; +}; + +typedef struct dl_tls_index +{ + unsigned long int ti_module; + unsigned long int ti_offset; +} tls_index; + +/* Type used as the argument in a TLS descriptor for a symbol that + needs dynamic TLS offsets. */ +struct tlsdesc_dynamic_arg +{ + tls_index tlsinfo; + size_t gen_count; +}; + +extern ptrdiff_t attribute_hidden + _dl_tlsdesc_return(struct tlsdesc *on_rax), + _dl_tlsdesc_undefweak(struct tlsdesc *on_rax), + _dl_tlsdesc_resolve_rela(struct tlsdesc *on_rax), + _dl_tlsdesc_resolve_hold(struct tlsdesc *on_rax); + +# ifdef SHARED +extern void *internal_function _dl_make_tlsdesc_dynamic (struct link_map *map, + size_t ti_offset); + +extern ptrdiff_t attribute_hidden _dl_tlsdesc_dynamic(struct tlsdesc *); +# endif + +#endif diff --git a/libc/sysdeps/x86_64/tlsdesc.c b/libc/sysdeps/x86_64/tlsdesc.c new file mode 100644 index 000000000..0cc32aab6 --- /dev/null +++ b/libc/sysdeps/x86_64/tlsdesc.c @@ -0,0 +1,151 @@ +/* Manage TLS descriptors. x86_64 version. + Copyright (C) 2005, 2008 Free Software 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 <link.h> +#include <ldsodefs.h> +#include <elf/dynamic-link.h> +#include <tls.h> +#include <dl-tlsdesc.h> +#include <tlsdeschtab.h> + +/* The following 2 functions take a caller argument, that contains the + address expected to be in the TLS descriptor. If it's changed, we + want to return immediately. */ + +/* This function is used to lazily resolve TLS_DESC RELA relocations. + The argument location is used to hold a pointer to the relocation. */ + +void +attribute_hidden +_dl_tlsdesc_resolve_rela_fixup (struct tlsdesc volatile *td, + struct link_map *l) +{ + const ElfW(Rela) *reloc = td->arg; + + if (_dl_tlsdesc_resolve_early_return_p + (td, (void*)(D_PTR (l, l_info[ADDRIDX (DT_TLSDESC_PLT)]) + l->l_addr))) + return; + + /* The code below was borrowed from _dl_fixup(). */ + const ElfW(Sym) *const symtab + = (const void *) D_PTR (l, l_info[DT_SYMTAB]); + const char *strtab = (const void *) D_PTR (l, l_info[DT_STRTAB]); + const ElfW(Sym) *sym = &symtab[ELFW(R_SYM) (reloc->r_info)]; + lookup_t result; + + /* Look up the target symbol. If the normal lookup rules are not + used don't look in the global scope. */ + if (ELFW(ST_BIND) (sym->st_info) != STB_LOCAL + && __builtin_expect (ELFW(ST_VISIBILITY) (sym->st_other), 0) == 0) + { + const struct r_found_version *version = NULL; + + if (l->l_info[VERSYMIDX (DT_VERSYM)] != NULL) + { + const ElfW(Half) *vernum = + (const void *) D_PTR (l, l_info[VERSYMIDX (DT_VERSYM)]); + ElfW(Half) ndx = vernum[ELFW(R_SYM) (reloc->r_info)] & 0x7fff; + version = &l->l_versions[ndx]; + if (version->hash == 0) + version = NULL; + } + + result = _dl_lookup_symbol_x (strtab + sym->st_name, l, &sym, + l->l_scope, version, ELF_RTYPE_CLASS_PLT, + DL_LOOKUP_ADD_DEPENDENCY, NULL); + } + else + { + /* We already found the symbol. The module (and therefore its load + address) is also known. */ + result = l; + } + + if (! sym) + { + td->arg = (void*)reloc->r_addend; + td->entry = _dl_tlsdesc_undefweak; + } + else + { +# ifndef SHARED + CHECK_STATIC_TLS (l, result); +# else + if (!TRY_STATIC_TLS (l, result)) + { + td->arg = _dl_make_tlsdesc_dynamic (result, sym->st_value + + reloc->r_addend); + td->entry = _dl_tlsdesc_dynamic; + } + else +# endif + { + td->arg = (void*)(sym->st_value - result->l_tls_offset + + reloc->r_addend); + td->entry = _dl_tlsdesc_return; + } + } + + _dl_tlsdesc_wake_up_held_fixups (); +} + +/* This function is used to avoid busy waiting for other threads to + complete the lazy relocation. Once another thread wins the race to + relocate a TLS descriptor, it sets the descriptor up such that this + function is called to wait until the resolver releases the + lock. */ + +void +attribute_hidden +_dl_tlsdesc_resolve_hold_fixup (struct tlsdesc volatile *td, + void *caller) +{ + /* Maybe we're lucky and can return early. */ + if (caller != td->entry) + return; + + /* Locking here will stop execution until the running resolver runs + _dl_tlsdesc_wake_up_held_fixups(), releasing the lock. + + FIXME: We'd be better off waiting on a condition variable, such + that we didn't have to hold the lock throughout the relocation + processing. */ + __rtld_lock_lock_recursive (GL(dl_load_lock)); + __rtld_lock_unlock_recursive (GL(dl_load_lock)); +} + +/* Unmap the dynamic object, but also release its TLS descriptor table + if there is one. */ + +void +internal_function +_dl_unmap (struct link_map *map) +{ + __munmap ((void *) (map)->l_map_start, + (map)->l_map_end - (map)->l_map_start); + +#if SHARED + /* _dl_unmap is only called for dlopen()ed libraries, for which + calling free() is safe, or before we've completed the initial + relocation, in which case calling free() is probably pointless, + but still safe. */ + if (map->l_mach.tlsdesc_table) + htab_delete (map->l_mach.tlsdesc_table); +#endif +} diff --git a/libc/sysdeps/x86_64/tlsdesc.sym b/libc/sysdeps/x86_64/tlsdesc.sym new file mode 100644 index 000000000..33854975d --- /dev/null +++ b/libc/sysdeps/x86_64/tlsdesc.sym @@ -0,0 +1,17 @@ +#include <stddef.h> +#include <sysdep.h> +#include <tls.h> +#include <link.h> +#include <dl-tlsdesc.h> + +-- + +-- Abuse tls.h macros to derive offsets relative to the thread register. + +DTV_OFFSET offsetof(struct pthread, header.dtv) + +TLSDESC_ARG offsetof(struct tlsdesc, arg) + +TLSDESC_GEN_COUNT offsetof(struct tlsdesc_dynamic_arg, gen_count) +TLSDESC_MODID offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_module) +TLSDESC_MODOFF offsetof(struct tlsdesc_dynamic_arg, tlsinfo.ti_offset) diff --git a/ports/ChangeLog.hppa b/ports/ChangeLog.hppa index 1bc6138db..67524bae3 100644 --- a/ports/ChangeLog.hppa +++ b/ports/ChangeLog.hppa @@ -1,3 +1,9 @@ +2008-05-12 Aurelien Jarno <aurelien@aurel32.net> + + [BZ #6506] + * sysdeps/hppa/fpu/fesetenv.c: bufptr is always read, temp is + read while writing back status word. + 2008-04-21 Daniel Jacobowitz <dan@codesourcery.com> * sysdeps/unix/sysv/linux/hppa/bits/shm.h: Fix comment describing diff --git a/ports/sysdeps/hppa/fpu/fesetenv.c b/ports/sysdeps/hppa/fpu/fesetenv.c index b5753efab..1a5ca6592 100644 --- a/ports/sysdeps/hppa/fpu/fesetenv.c +++ b/ports/sysdeps/hppa/fpu/fesetenv.c @@ -35,7 +35,7 @@ fesetenv (const fenv_t *envp) bufptr = temp.buf; __asm__ ( "fstd,ma %%fr0,8(%1)\n" - : "=m" (temp), "+r" (bufptr) : : "%r0"); + : "=m" (temp) : "r" (bufptr) : "%r0"); temp.env.__status_word &= ~(FE_ALL_EXCEPT | (FE_ALL_EXCEPT << 27) @@ -56,7 +56,7 @@ fesetenv (const fenv_t *envp) is loaded last and T-Bit is enabled. */ __asm__ ( "fldd,mb -8(%1),%%fr0\n" - : "=m" (temp), "+r" (bufptr) : : "%r0" ); + : : "m" (temp), "r" (bufptr) : "%r0" ); /* Success. */ return 0; |