diff options
72 files changed, 2332 insertions, 827 deletions
diff --git a/ChangeLog b/ChangeLog index bbe8284c45..ed8a7becf3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,149 @@ +2009-04-23 Ulrich Drepper <drepper@redhat.com> + + [BZ #9920] + * stdlib/random_r.c (__srandom_r): Change type of word to int32_t + to get consistency between 32 and 64 bit architectures. + + [BZ #10052] + * sysdeps/unix/make-syscalls.sh: Add rule to create target + directory for dummy syscall rules. + Patch by Chris Steinbroner <hesh@pobox.com>. + +2009-04-23 Aurelien Jarno <aurelien@aurel32.net> + + [BZ #10092] + * sysdeps/unix/sysv/linux/sys/mount.h: Define MNT_DETACH and + MNT_EXPIRE. + +2009-04-23 Ulrich Drepper <drepper@redhat.com> + + * sysdeps/unix/sysv/linux/preadv.c: The kernel API changed. Adjust. + * sysdeps/unix/sysv/linux/pwritev.c: Likewise. + +2009-04-23 Jakub Jelinek <jakub@redhat.com> + + * sysdeps/posix/pwritev.c (PWRITEV): Fix up comment. Copy + data from vector to temporary buffer and call PWRITEV after it + instead of vice versa. + * sysdeps/posix/preadv.c: Fix up comment. + * misc/preadv.c: Likewise. + * misc/preadv64.c: Likewise. + * misc/pwritev.c: Likewise. + * misc/pwritev64.c: Likewise. + * misc/sys/uio.h (preadv, pwritev, preadv64, pwritev64): Likewise. + +2009-04-23 Ulrich Drepper <drepper@redhat.com> + + * shadow/sgetspent_r.c (__sgetspent_r): Recognize too small buffers. + + * shadow/Makefile (tests): Add tst-shadow. + * shadow/tst-shadow.c: New file. + + [BZ #9955] + * gshadow/Makefile: New file. + * gshadow/Versions: New file. + * gshadow/fgetsgent.c: New file. + * gshadow/fgetsgent_r.c: New file. + * gshadow/getsgent.c: New file. + * gshadow/getsgent_r.c: New file. + * gshadow/getsgnam.c: New file. + * gshadow/getsgnam_r.c: New file. + * gshadow/gshadow.h: New file. + * gshadow/putsgent.c: New file. + * gshadow/sgetsgent.c: New file. + * gshadow/sgetsgent_r.c: New file. + * gshadow/tst-gshadow.c: New file. + * include/gshadow.h: New file. + * Makeconfig (all-subdirs): Add gshadow. + * Makefile (installed-headers): Add gshadow/gshadow.h. + * nss/Makefile (databases): Add sgrp. + * nss/Versions: Add gshadow functions as private exports. + * nss/nsswitch.conf: Add gshadow entry. + * nss/sgrp-lookup.c: New file. + * nss/nss_files/files-parse.c: Add STRING_LIST macro. Rewrite + parse_list to handle STRING_LIST and TRAILING_LIST_PARSER. + * nss/nss_files/files-sgrp.c: New file. + * sysdeps/generic/paths.h: Add _PATH_GSHADOW. + * sysdeps/unix/sysv/linux/paths.h: Likewise. + +2009-04-22 Ulrich Drepper <drepper@redhat.com> + + * stdio-common/printf.h: Add missing const to register_printf_modifier. + * stdio-common/reg-modifier.c: Likewise. + +2009-04-22 Andrew Stubbs <ams@codesourcery.com> + + * sysdeps/sh/sh4/setjmp.S (__sigsetjmp): Adjust JB_SIZE when there + is no FPU. + +2009-04-20 Ulrich Drepper <drepper@redhat.com> + + [BZ #10086] + * sysdeps/unix/sysv/linux/sys/timex.h: Add definitions from kernel + headers up to 2.6.30. + + * po/ca.po: Update from translation team. + +2009-04-19 Ulrich Drepper <drepper@redhat.com> + + [BZ #10069] + * elf/dl-open.c (dl_open_worker): We cannot guarantee that we can load + an object that uses static TLS if the TLS modid is higher than the + reserve we always allocate. At least for multi-threaded code. + +2009-04-18 Ulrich Drepper <drepper@redhat.com> + + * stdlib/strfmon_l.c (__vstrfmon_l): Don't wrap when computing width. + Numerically stable check for valid width. + + * locale/programs/locarchive.c (open_archive): Map the entire file + and not just the administrative data. + (add_locale): When we find a hash sum match compare the content + to be sure. + + * malloc/malloc.c (malloc_info): Output address space information. + +2009-04-17 Ulrich Drepper <drepper@redhat.com> + + * malloc/malloc.c (malloc_info): Also output system memory information. + + * sysdeps/unix/sysv/linux/kernel-features.h: All supported + architectures have preadv/pwritev in 2.6.30. + + * sysdeps/posix/preadv.c: Reading of zero bytes is no error. + * sysdeps/posix/readv.c: Likewise. + Reported by Markus Armbruster <armbru@redhat.com>. + + * malloc/hooks.c (top_check): Force hook value into register. + +2009-04-16 Samuel Thibault <samuel.thibault@ens-lyon.org> + + * elf/rtld.c (dl_main): Really call _dl_sysdep_start_cleanup after all + calls to _dl_relocate_object. + +2009-04-16 Ulrich Drepper <drepper@redhat.com> + + [BZ #9957] + * malloc/malloc.c (force_reg): Define. + (sYSMALLOc): Load hook variable into variable + before test and force into register. + (sYSTRIm): Likewise. + (public_mALLOc): Force hook value into register. + (public_fREe): Likewise. + (public_rEALLOc): Likewise. + (public_mEMALIGn): Likewise. + (public_vALLOc): Likewise. + (public_pVALLOc): Likewise. + (public_cALLOc): Likewise. + (__posix_memalign): Likewise. + * malloc/arena.c (ptmalloc_init): Load hook variable into variable + before test and force into register. + * malloc/hooks.c (top_check): Likewise. + (public_sET_STATe): Pretty printing. + + * resolv/res_send.c (send_dg): Don't just ignore the result we got + in case we only receive one reply in single-request mode. + 2009-04-16 Jakub Jelinek <jakub@redhat.com> * elf/dl-open.c (_dl_open): Bump GL(dl_nns) to 1 if no libraries diff --git a/Makeconfig b/Makeconfig index c904a83957..64886aee26 100644 --- a/Makeconfig +++ b/Makeconfig @@ -918,7 +918,7 @@ endif all-subdirs = csu assert ctype locale intl catgets math setjmp signal \ stdlib stdio-common libio malloc string wcsmbs time dirent \ grp pwd posix io termios resource misc socket sysvipc gmon \ - gnulib iconv iconvdata wctype manual shadow po argp \ + gnulib iconv iconvdata wctype manual shadow gshadow po argp \ crypt nss localedata timezone rt conform debug \ $(add-on-subdirs) $(dlfcn) $(binfmt-subdir) diff --git a/Makefile b/Makefile index a5df22be67..cab5ff3a17 100644 --- a/Makefile +++ b/Makefile @@ -271,7 +271,7 @@ installed-headers = argp/argp.h assert/assert.h catgets/nl_types.h \ crypt/crypt.h ctype/ctype.h debug/execinfo.h \ dirent/dirent.h dlfcn/dlfcn.h elf/elf.h elf/link.h \ gmon/sys/gmon.h gmon/sys/gmon_out.h gmon/sys/profil.h \ - grp/grp.h iconv/iconv.h iconv/gconv.h \ + grp/grp.h gshadow/gshadow.h iconv/iconv.h iconv/gconv.h \ $(wildcard inet/netinet/*.h) \ $(wildcard inet/arpa/*.h inet/protocols/*.h) \ inet/aliases.h inet/ifaddrs.h inet/netinet/ip6.h \ diff --git a/NEWS b/NEWS index d7e52f8982..411c2c3bc8 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -GNU C Library NEWS -- history of user-visible changes. 2009-4-13 +GNU C Library NEWS -- history of user-visible changes. 2009-4-23 Copyright (C) 1992-2008, 2009 Free Software Foundation, Inc. See the end for copying conditions. @@ -44,6 +44,9 @@ Version 2.10 and extend existing format specifiers. Implemented by Ulrich Drepper. +* Handling for group shadow files has been added. + Implemented by Ulrich Drepper. + Version 2.9 diff --git a/elf/dl-open.c b/elf/dl-open.c index 458cf0cd13..c3f0e42d5e 100644 --- a/elf/dl-open.c +++ b/elf/dl-open.c @@ -490,6 +490,18 @@ dl_open_worker (void *a) if (imap->l_need_tls_init) { + /* For static TLS we have to allocate the memory here + and now. This includes allocating memory in the DTV. + But we cannot change any DTV other than our own. So, + if we cannot guarantee that there is room in the DTV + we don't even try it and fail the load. + + XXX We could track the minimum DTV slots allocated in + all threads. */ + if (! RTLD_SINGLE_THREAD_P && imap->l_tls_modid > DTV_SURPLUS) + _dl_signal_error (0, "dlopen", NULL, N_("\ +cannot load any more object with static TLS")); + imap->l_need_tls_init = 0; #ifdef SHARED /* Update the slot information data for at least the diff --git a/elf/rtld.c b/elf/rtld.c index 69c27cc4ac..f97de9ac08 100644 --- a/elf/rtld.c +++ b/elf/rtld.c @@ -2181,8 +2181,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", if (l->l_tls_blocksize != 0 && tls_init_tp_called) _dl_add_to_slotinfo (l); } - - _dl_sysdep_start_cleanup (); } else { @@ -2237,13 +2235,6 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", HP_TIMING_DIFF (relocate_time, start, stop); - /* Do any necessary cleanups for the startup OS interface code. - We do these now so that no calls are made after rtld re-relocation - which might be resolved to different functions than we expect. - We cannot do this before relocating the other objects because - _dl_relocate_object might need to call `mprotect' for DT_TEXTREL. */ - _dl_sysdep_start_cleanup (); - /* Now enable profiling if needed. Like the previous call, this has to go here because the calls it makes should use the rtld versions of the functions (particularly calloc()), but it @@ -2299,6 +2290,13 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n", HP_TIMING_ACCUM_NT (relocate_time, add); } + /* Do any necessary cleanups for the startup OS interface code. + We do these now so that no calls are made after rtld re-relocation + which might be resolved to different functions than we expect. + We cannot do this before relocating the other objects because + _dl_relocate_object might need to call `mprotect' for DT_TEXTREL. */ + _dl_sysdep_start_cleanup (); + #ifdef SHARED /* Auditing checkpoint: we have added all objects. */ if (__builtin_expect (GLRO(dl_naudit) > 0, 0)) diff --git a/fedora/branch.mk b/fedora/branch.mk index 253166a762..f025d9286f 100644 --- a/fedora/branch.mk +++ b/fedora/branch.mk @@ -3,5 +3,5 @@ glibc-branch := fedora glibc-base := HEAD DIST_BRANCH := devel COLLECTION := dist-f8 -fedora-sync-date := 2009-04-16 16:10 UTC -fedora-sync-tag := fedora-glibc-20090416T1610 +fedora-sync-date := 2009-04-24 07:47 UTC +fedora-sync-tag := fedora-glibc-20090424T0747 diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in index 85bcd04cc6..493e4c6057 100644 --- a/fedora/glibc.spec.in +++ b/fedora/glibc.spec.in @@ -19,7 +19,7 @@ Summary: The GNU libc libraries Name: glibc Version: @glibcversion@ -Release: 19 +Release: 20 # GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries. # Things that are linked directly into dynamically linked programs # and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional @@ -1009,6 +1009,11 @@ rm -f *.filelist* %endif %changelog +* Fri Apr 24 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-20 +- update from trunk + - fix p{read,write}v{,64} (#497429, #497434) + - fix strfmon (#496386) + * Thu Apr 16 2009 Jakub Jelinek <jakub@redhat.com> 2.9.90-19 - update from trunk - fix dlopen from statically linked binaries (#495830) diff --git a/gshadow/Makefile b/gshadow/Makefile new file mode 100644 index 0000000000..0c3d42b317 --- /dev/null +++ b/gshadow/Makefile @@ -0,0 +1,38 @@ +# Copyright (C) 2009 Free Software 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. + +# +# Makefile for gshadow. +# +subdir := gshadow + +headers = gshadow.h +routines = getsgent getsgnam sgetsgent fgetsgent putsgent \ + getsgent_r getsgnam_r sgetsgent_r fgetsgent_r + +tests = tst-gshadow + +CFLAGS-getsgent_r.c = -fexceptions +CFLAGS-getsgent.c = -fexceptions +CFLAGS-fgetsgent.c = -fexceptions +CFLAGS-fgetsgent_r.c = -fexceptions -D_IO_MTSAFE_IO +CFLAGS-putsgent.c = -fexceptions -D_IO_MTSAFE_IO +CFLAGS-getsgnam.c = -fexceptions +CFLAGS-getsgnam_r.c = -fexceptions + +include ../Rules diff --git a/gshadow/Versions b/gshadow/Versions new file mode 100644 index 0000000000..00a410b74f --- /dev/null +++ b/gshadow/Versions @@ -0,0 +1,21 @@ +libc { + GLIBC_2.10 { + # e* + endsgent; + + # f* + fgetsgent; fgetsgent_r; + + # g* + getsgent; getsgent_r; getsgnam; getsgnam_r; getsgent_r; getsgnam_r; + + # p* + putsgent; + + # s* + setsgent; + + # s* + sgetsgent; sgetsgent_r; + } +} diff --git a/gshadow/fgetsgent.c b/gshadow/fgetsgent.c new file mode 100644 index 0000000000..098edfe52e --- /dev/null +++ b/gshadow/fgetsgent.c @@ -0,0 +1,88 @@ +/* Copyright (C) 2009 Free Software 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 <errno.h> +#include <bits/libc-lock.h> +#include <gshadow.h> +#include <stdio.h> +#include <stdlib.h> + + +/* A reasonable size for a buffer to start with. */ +#define BUFLEN_SPWD 1024 + +/* We need to protect the dynamic buffer handling. */ +__libc_lock_define_initialized (static, lock); + +libc_freeres_ptr (static char *buffer); + +/* Read one shadow entry from the given stream. */ +struct sgrp * +fgetsgent (FILE *stream) +{ + static size_t buffer_size; + static struct sgrp resbuf; + fpos_t pos; + struct sgrp *result; + int save; + + if (fgetpos (stream, &pos) != 0) + return NULL; + + /* Get lock. */ + __libc_lock_lock (lock); + + /* Allocate buffer if not yet available. */ + if (buffer == NULL) + { + buffer_size = BUFLEN_SPWD; + buffer = malloc (buffer_size); + } + + while (buffer != NULL + && (__fgetsgent_r (stream, &resbuf, buffer, buffer_size, &result) + == ERANGE)) + { + char *new_buf; + buffer_size += BUFLEN_SPWD; + new_buf = realloc (buffer, buffer_size); + if (new_buf == NULL) + { + /* We are out of memory. Free the current buffer so that the + process gets a chance for a normal termination. */ + save = errno; + free (buffer); + __set_errno (save); + } + buffer = new_buf; + + /* Reset the stream. */ + if (fsetpos (stream, &pos) != 0) + buffer = NULL; + } + + if (buffer == NULL) + result = NULL; + + /* Release lock. Preserve error value. */ + save = errno; + __libc_lock_unlock (lock); + __set_errno (save); + + return result; +} diff --git a/gshadow/fgetsgent_r.c b/gshadow/fgetsgent_r.c new file mode 100644 index 0000000000..25c05bf7ea --- /dev/null +++ b/gshadow/fgetsgent_r.c @@ -0,0 +1,76 @@ +/* Copyright (C) 2009 Free Software 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 <ctype.h> +#include <errno.h> +#include <gshadow.h> +#include <stdio.h> + +/* Define a line parsing function using the common code + used in the nss_files module. */ + +#define STRUCTURE sgrp +#define ENTNAME sgent +#define EXTERN_PARSER 1 +struct sgent_data {}; + +#include <nss/nss_files/files-parse.c> + + +/* Read one shadow entry from the given stream. */ +int +__fgetsgent_r (FILE *stream, struct sgrp *resbuf, char *buffer, size_t buflen, + struct sgrp **result) +{ + char *p; + + _IO_flockfile (stream); + do + { + buffer[buflen - 1] = '\xff'; + p = fgets_unlocked (buffer, buflen, stream); + if (p == NULL && feof_unlocked (stream)) + { + _IO_funlockfile (stream); + *result = NULL; + __set_errno (ENOENT); + return errno; + } + if (p == NULL || buffer[buflen - 1] != '\xff') + { + _IO_funlockfile (stream); + *result = NULL; + __set_errno (ERANGE); + return errno; + } + + /* Skip leading blanks. */ + while (isspace (*p)) + ++p; + } while (*p == '\0' || *p == '#' || /* Ignore empty and comment lines. */ + /* Parse the line. If it is invalid, loop to + get the next line of the file to parse. */ + ! parse_line (buffer, (void *) resbuf, (void *) buffer, buflen, + &errno)); + + _IO_funlockfile (stream); + + *result = resbuf; + return 0; +} +weak_alias (__fgetsgent_r, fgetsgent_r) diff --git a/gshadow/getsgent.c b/gshadow/getsgent.c new file mode 100644 index 0000000000..544227c537 --- /dev/null +++ b/gshadow/getsgent.c @@ -0,0 +1,30 @@ +/* Copyright (C) 2009 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2009. + + 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 <gshadow.h> + + +#define LOOKUP_TYPE struct sgrp +#define SETFUNC_NAME setsgent +#define GETFUNC_NAME getsgent +#define ENDFUNC_NAME endsgent +#define DATABASE_NAME gshadow +#define BUFLEN 1024 + +#include "../nss/getXXent.c" diff --git a/gshadow/getsgent_r.c b/gshadow/getsgent_r.c new file mode 100644 index 0000000000..336110ec89 --- /dev/null +++ b/gshadow/getsgent_r.c @@ -0,0 +1,30 @@ +/* Copyright (C) 2009 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2009. + + 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 <gshadow.h> + + +#define LOOKUP_TYPE struct sgrp +#define SETFUNC_NAME setsgent +#define GETFUNC_NAME getsgent +#define ENDFUNC_NAME endsgent +#define DATABASE_NAME gshadow +#define BUFLEN 1024 + +#include "../nss/getXXent_r.c" diff --git a/gshadow/getsgnam.c b/gshadow/getsgnam.c new file mode 100644 index 0000000000..7cd5b44210 --- /dev/null +++ b/gshadow/getsgnam.c @@ -0,0 +1,30 @@ +/* Copyright (C) 2009 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2009. + + 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 <gshadow.h> + + +#define LOOKUP_TYPE struct sgrp +#define FUNCTION_NAME getsgnam +#define DATABASE_NAME gshadow +#define ADD_PARAMS const char *name +#define ADD_VARIABLES name +#define BUFLEN 1024 + +#include "../nss/getXXbyYY.c" diff --git a/gshadow/getsgnam_r.c b/gshadow/getsgnam_r.c new file mode 100644 index 0000000000..c89fb06bfa --- /dev/null +++ b/gshadow/getsgnam_r.c @@ -0,0 +1,30 @@ +/* Copyright (C) 2009 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2009. + + 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 <gshadow.h> + + +#define LOOKUP_TYPE struct sgrp +#define FUNCTION_NAME getsgnam +#define DATABASE_NAME gshadow +#define ADD_PARAMS const char *name +#define ADD_VARIABLES name +#define BUFLEN 1024 + +#include "../nss/getXXbyYY_r.c" diff --git a/gshadow/gshadow.h b/gshadow/gshadow.h new file mode 100644 index 0000000000..d0b28aeaa3 --- /dev/null +++ b/gshadow/gshadow.h @@ -0,0 +1,131 @@ +/* Copyright (C) 2009 Free Software 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. */ + +/* Declaration of types and functions for shadow group suite. */ + +#ifndef _GSHADOW_H +#define _GSHADOW_H 1 + +#include <features.h> + +#include <paths.h> + +#define __need_FILE +#include <stdio.h> +#define __need_size_t +#include <stddef.h> + +/* Path to the user database files. */ +#define GSHADOW _PATH_GSHADOW + + +__BEGIN_DECLS + +/* Structure of the group file. */ +struct sgrp + { + char *sg_namp; /* Group name. */ + char *sg_passwd; /* Encrypted password. */ + char **sg_adm; /* Group administrator list. */ + char **sg_mem; /* Group member list. */ + }; + + +/* Open database for reading. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern void setsgent (void); + +/* Close database. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern void endsgent (void); + +/* Get next entry from database, perhaps after opening the file. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern struct sgrp *getsgent (void); + +/* Get shadow entry matching NAME. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern struct sgrp *getsgnam (__const char *__name); + +/* Read shadow entry from STRING. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern struct sgrp *sgetsgent (__const char *__string); + +/* Read next shadow entry from STREAM. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern struct sgrp *fgetsgent (FILE *__stream); + +/* Write line containing shadow password entry to stream. + + This function is not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation it is a cancellation point and + therefore not marked with __THROW. */ +extern int putsgent (__const struct sgrp *__g, FILE *__stream); + + +#ifdef __USE_MISC +/* Reentrant versions of some of the functions above. + + These functions are not part of POSIX and therefore no official + cancellation point. But due to similarity with an POSIX interface + or due to the implementation they are cancellation points and + therefore not marked with __THROW. */ +extern int getsgent_r (struct sgrp *__result_buf, char *__buffer, + size_t __buflen, struct sgrp **__result); + +extern int getsgnam_r (__const char *__name, struct sgrp *__result_buf, + char *__buffer, size_t __buflen, + struct sgrp **__result); + +extern int sgetsgent_r (__const char *__string, struct sgrp *__result_buf, + char *__buffer, size_t __buflen, + struct sgrp **__result); + +extern int fgetsgent_r (FILE *__stream, struct sgrp *__result_buf, + char *__buffer, size_t __buflen, + struct sgrp **__result); +#endif /* misc */ + +__END_DECLS + +#endif /* gshadow.h */ diff --git a/gshadow/putsgent.c b/gshadow/putsgent.c new file mode 100644 index 0000000000..938a71334c --- /dev/null +++ b/gshadow/putsgent.c @@ -0,0 +1,71 @@ +/* Copyright (C) 2009 Free Software 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 <stdbool.h> +#include <stdio.h> +#include <gshadow.h> + +#define _S(x) x ? x : "" + + +/* Write an entry to the given stream. + This must know the format of the group file. */ +int +putsgent (const struct sgrp *g, FILE *stream) +{ + int errors = 0; + + _IO_flockfile (stream); + + if (fprintf (stream, "%s:%s:", g->sg_namp, _S (g->sg_passwd)) < 0) + ++errors; + + bool first = true; + char **sp = g->sg_adm; + if (sp != NULL) + while (*sp != NULL) + { + if (fprintf (stream, "%s%s", first ? "" : ",", *sp++) < 0) + { + ++errors; + break; + } + first = false; + } + if (putc_unlocked (':', stream) == EOF) + ++errors; + + first = true; + sp = g->sg_mem; + if (sp != NULL) + while (*sp != NULL) + { + if (fprintf (stream, "%s%s", first ? "" : ",", *sp++) < 0) + { + ++errors; + break; + } + first = false; + } + if (putc_unlocked ('\n', stream) == EOF) + ++errors; + + _IO_funlockfile (stream); + + return errors ? -1 : 0; +} diff --git a/gshadow/sgetsgent.c b/gshadow/sgetsgent.c new file mode 100644 index 0000000000..94e131566b --- /dev/null +++ b/gshadow/sgetsgent.c @@ -0,0 +1,78 @@ +/* Copyright (C) 2009 Free Software 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 <errno.h> +#include <bits/libc-lock.h> +#include <gshadow.h> +#include <stdlib.h> + + +/* A reasonable size for a buffer to start with. */ +#define BUFLEN_SPWD 1024 + +/* We need to protect the dynamic buffer handling. */ +__libc_lock_define_initialized (static, lock); + +/* Read one shadow entry from the given stream. */ +struct sgrp * +sgetsgent (const char *string) +{ + static char *buffer; + static size_t buffer_size; + static struct sgrp resbuf; + struct sgrp *result; + int save; + + /* Get lock. */ + __libc_lock_lock (lock); + + /* Allocate buffer if not yet available. */ + if (buffer == NULL) + { + buffer_size = BUFLEN_SPWD; + buffer = malloc (buffer_size); + } + + while (buffer != NULL + && __sgetsgent_r (string, &resbuf, buffer, buffer_size, &result) != 0 + && errno == ERANGE) + { + char *new_buf; + buffer_size += BUFLEN_SPWD; + new_buf = realloc (buffer, buffer_size); + if (new_buf == NULL) + { + /* We are out of memory. Free the current buffer so that the + process gets a chance for a normal termination. */ + save = errno; + free (buffer); + __set_errno (save); + } + buffer = new_buf; + } + + if (buffer == NULL) + result = NULL; + + /* Release lock. Preserve error value. */ + save = errno; + __libc_lock_unlock (lock); + __set_errno (save); + + return result; +} diff --git a/gshadow/sgetsgent_r.c b/gshadow/sgetsgent_r.c new file mode 100644 index 0000000000..2292719af9 --- /dev/null +++ b/gshadow/sgetsgent_r.c @@ -0,0 +1,75 @@ +/* Copyright (C) 2009 Free Software 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 <ctype.h> +#include <errno.h> +#include <gshadow.h> +#include <stdio.h> +#include <string.h> + +/* Define a line parsing function using the common code + used in the nss_files module. */ + +#define STRUCTURE sgrp +#define ENTNAME sgent +struct sgent_data {}; + + +#define TRAILING_LIST_MEMBER sg_mem +#define TRAILING_LIST_SEPARATOR_P(c) ((c) == ',') +#include <nss/nss_files/files-parse.c> +LINE_PARSER +(, + STRING_FIELD (result->sg_namp, ISCOLON, 0); + if (line[0] == '\0' + && (result->sg_namp[0] == '+' || result->sg_namp[0] == '-')) + { + result->sg_passwd = NULL; + result->sg_adm = NULL; + result->sg_mem = NULL; + } + else + { + STRING_FIELD (result->sg_passwd, ISCOLON, 0); + STRING_LIST (result->sg_adm, ':'); + } + ) + + +/* Read one shadow entry from the given stream. */ +int +__sgetsgent_r (const char *string, struct sgrp *resbuf, char *buffer, + size_t buflen, struct sgrp **result) +{ + char *sp; + if (string < buffer || string >= buffer + buflen) + { + buffer[buflen - 1] = '\0'; + sp = strncpy (buffer, string, buflen); + if (buffer[buflen - 1] != '\0') + return ERANGE; + } + else + sp = (char *) string; + + int parse_result = parse_line (sp, resbuf, (void *) buffer, buflen, &errno); + *result = parse_result > 0 ? resbuf : NULL; + + return *result == NULL ? errno : 0; +} +weak_alias (__sgetsgent_r, sgetsgent_r) diff --git a/gshadow/tst-gshadow.c b/gshadow/tst-gshadow.c new file mode 100644 index 0000000000..8b469b723d --- /dev/null +++ b/gshadow/tst-gshadow.c @@ -0,0 +1,141 @@ +#include <gshadow.h> +#include <stdio.h> +#include <string.h> + + +static const struct sgrp data[] = + { + { (char *) "one", (char *) "pwdone", + (char *[]) { (char *) "admoneone", (char *) "admonetwo", + (char *) "admonethree", NULL }, + (char *[]) { (char *) "memoneone", (char *) "memonetwo", + (char *) "memonethree", NULL } }, + { (char *) "two", (char *) "pwdtwo", + (char *[]) { (char *) "admtwoone", (char *) "admtwotwo", NULL }, + (char *[]) { (char *) "memtwoone", (char *) "memtwotwo", + (char *) "memtwothree", NULL } }, + { (char *) "three", (char *) "pwdthree", + (char *[]) { (char *) "admthreeone", (char *) "admthreetwo", NULL }, + (char *[]) { (char *) "memthreeone", (char *) "memthreetwo", NULL } }, + { (char *) "four", (char *) "pwdfour", + (char *[]) { (char *) "admfourone", (char *) "admfourtwo", NULL }, + (char *[]) { NULL } }, + { (char *) "five", (char *) "pwdfive", + (char *[]) { NULL }, + (char *[]) { (char *) "memfiveone", (char *) "memfivetwo", NULL } }, + }; +#define ndata (sizeof (data) / sizeof (data[0])) + + +static int +do_test (void) +{ + FILE *fp = tmpfile (); + if (fp == NULL) + { + puts ("cannot open temporary file"); + return 1; + } + + for (size_t i = 0; i < ndata; ++i) + if (putsgent (&data[i], fp) != 0) + { + printf ("putsgent call %zu failed\n", i + 1); + return 1; + } + + rewind (fp); + + int result = 0; + int seen = -1; + struct sgrp *g; + while ((g = fgetsgent (fp)) != NULL) + { + ++seen; + if (strcmp (g->sg_namp, data[seen].sg_namp) != 0) + { + printf ("sg_namp of entry %d does not match: %s vs %s\n", + seen + 1, g->sg_namp, data[seen].sg_namp); + result = 1; + } + if (strcmp (g->sg_passwd, data[seen].sg_passwd) != 0) + { + printf ("sg_passwd of entry %d does not match: %s vs %s\n", + seen + 1, g->sg_passwd, data[seen].sg_passwd); + result = 1; + } + if (g->sg_adm == NULL) + { + printf ("sg_adm of entry %d is NULL\n", seen + 1); + result = 1; + } + else + { + int i = 1; + char **sp1 = g->sg_adm; + char **sp2 = data[seen].sg_adm; + while (*sp1 != NULL && *sp2 != NULL) + { + if (strcmp (*sp1, *sp2) != 0) + { + printf ("sg_adm[%d] of entry %d does not match: %s vs %s\n", + i, seen + 1, *sp1, *sp2); + result = 1; + } + ++sp1; + ++sp2; + ++i; + } + if (*sp1 == NULL && *sp2 != NULL) + { + printf ("sg_adm of entry %d has too few entries\n", seen + 1); + result = 1; + } + else if (*sp1 != NULL && *sp2 == NULL) + { + printf ("sg_adm of entry %d has too many entries\n", seen + 1); + result = 1; + } + } + if (g->sg_mem == NULL) + { + printf ("sg_mem of entry %d is NULL\n", seen + 1); + result = 1; + } + else + { + int i = 1; + char **sp1 = g->sg_mem; + char **sp2 = data[seen].sg_mem; + while (*sp1 != NULL && *sp2 != NULL) + { + if (strcmp (*sp1, *sp2) != 0) + { + printf ("sg_mem[%d] of entry %d does not match: %s vs %s\n", + i, seen + 1, *sp1, *sp2); + result = 1; + } + ++sp1; + ++sp2; + ++i; + } + if (*sp1 == NULL && *sp2 != NULL) + { + printf ("sg_mem of entry %d has too few entries\n", seen + 1); + result = 1; + } + else if (*sp1 != NULL && *sp2 == NULL) + { + printf ("sg_mem of entry %d has too many entries\n", seen + 1); + result = 1; + } + } + } + + fclose (fp); + + return result; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/include/gshadow.h b/include/gshadow.h new file mode 100644 index 0000000000..8a981f688a --- /dev/null +++ b/include/gshadow.h @@ -0,0 +1,15 @@ +#ifndef _GSHADOW_H +#include <gshadow/gshadow.h> + +extern int __fgetsgent_r (FILE *stream, struct sgrp *resbuf, char *buffer, + size_t buflen, struct sgrp **result); +extern int __sgetsgent_r (const char *string, struct sgrp *resbuf, + char *buffer, size_t buflen, struct sgrp **result); + +struct parser_data; +extern int _nss_files_parse_sgent (char *line, struct sgrp *result, + struct parser_data *data, + size_t datalen, int *errnop); +libc_hidden_proto (_nss_files_parse_sgent) + +#endif diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c index 9e316d3a0d..e6f7f7fa48 100644 --- a/locale/programs/locarchive.c +++ b/locale/programs/locarchive.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -380,7 +380,7 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head) = ((char *) ah->addr + oldnamehashtab[oldlocrecarray[cnt - 1].cnt].name_offset); - add_alias (&new_ah, + add_alias (&new_ah, ((char *) ah->addr + oldnamehashtab[oldlocrecarray[cnt].cnt].name_offset), 0, oldname, &last_locrec_offset); @@ -517,9 +517,9 @@ open_archive (struct locarhandle *ah, bool readonly) ah->len = (head.sumhash_offset + head.sumhash_size * sizeof (struct sumhashent)); - /* Now we know how large the administrative information part is. - Map all of it. */ - ah->addr = mmap64 (NULL, ah->len, PROT_READ | (readonly ? 0 : PROT_WRITE), + /* Map the entire file. We might need to compare the category data + in the file with the newly added data. */ + ah->addr = mmap64 (NULL, st.st_size, PROT_READ | (readonly ? 0 : PROT_WRITE), MAP_SHARED, fd, 0); if (ah->addr == MAP_FAILED) { @@ -760,10 +760,32 @@ add_locale (struct locarhandle *ah, { if (memcmp (data[cnt].sum, sumhashtab[idx].sum, 16) == 0) { - /* Found it. */ - file_offsets[cnt] = sumhashtab[idx].file_offset; - --num_new_offsets; - break; + /* Check the content, there could be a collision of + the hash sum. + + Unfortunately the sumhashent record does not include + the size of the stored data. So we have to search for + it. */ + locrecent = (struct locrecent *) ((char *) ah->addr + + head->locrectab_offset); + size_t iloc; + for (iloc = 0; iloc < head->locrectab_used; ++iloc) + if (locrecent[iloc].refs != 0 + && (locrecent[iloc].record[cnt].offset + == sumhashtab[idx].file_offset)) + break; + + if (iloc != head->locrectab_used + && data[cnt].size == locrecent[iloc].record[cnt].len + && memcmp (data[cnt].addr, + (char *) ah->addr + sumhashtab[idx].file_offset, + data[cnt].size) == 0) + { + /* Found it. */ + file_offsets[cnt] = sumhashtab[idx].file_offset; + --num_new_offsets; + break; + } } idx += incr; diff --git a/localedata/ChangeLog b/localedata/ChangeLog index 8958c21bbc..c13533b4ff 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,3 +1,21 @@ +2009-04-22 Ulrich Drepper <drepper@redhat.com> + + [BZ #9963] + * locales/en_PH: Fix LC_PAPER. + * locales/es_CL: Likewise. + * locales/es_CO: Likewise. + * locales/es_MX: Likewise. + * locales/es_US: Likewise. + * locales/es_VE: Likewise. + * locales/fil_PH: Likewise. + * locales/ik_CA: Likewise. + * locales/iu_CA: Likewise. + * locales/tl_PH: Likewise. + +2009-04-18 Ulrich Drepper <drepper@redhat.com> + + * SUPPORTED: Add ks_IN. + 2009-04-07 Ulrich Drepper <drepper@redhat.com> * locales/ks_IN@devanagari: Replace duplicated information with copy. diff --git a/localedata/SUPPORTED b/localedata/SUPPORTED index 9a9cbd1275..d05c623d82 100644 --- a/localedata/SUPPORTED +++ b/localedata/SUPPORTED @@ -261,6 +261,7 @@ km_KH/UTF-8 \ kn_IN/UTF-8 \ ko_KR.EUC-KR/EUC-KR \ ko_KR.UTF-8/UTF-8 \ +ks_IN/UTF-8 \ ks_IN@devanagari/UTF-8 \ ku_TR.UTF-8/UTF-8 \ ku_TR/ISO-8859-9 \ diff --git a/localedata/locales/en_PH b/localedata/locales/en_PH index 13da351db0..895e7c890a 100644 --- a/localedata/locales/en_PH +++ b/localedata/locales/en_PH @@ -166,11 +166,7 @@ END LC_MESSAGES LC_PAPER -% This is the ISO_IEC TR14652 Locale definition for the LC_PAPER category -% generated by IBM Basic CountryPack Transformer. -height 297 -width 210 - +copy "tl_PH" END LC_PAPER diff --git a/localedata/locales/es_CL b/localedata/locales/es_CL index 2f44845862..ff44fa8c5f 100644 --- a/localedata/locales/es_CL +++ b/localedata/locales/es_CL @@ -125,10 +125,8 @@ date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/ END LC_TIME LC_PAPER -% FIXME -height 297 -% FIXME -width 210 +height 279 +width 216 END LC_PAPER LC_TELEPHONE diff --git a/localedata/locales/es_CO b/localedata/locales/es_CO index 630ee75d4b..bb983d7e7f 100644 --- a/localedata/locales/es_CO +++ b/localedata/locales/es_CO @@ -125,10 +125,8 @@ date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/ END LC_TIME LC_PAPER -% FIXME -height 297 -% FIXME -width 210 +height 279 +width 216 END LC_PAPER LC_TELEPHONE diff --git a/localedata/locales/es_MX b/localedata/locales/es_MX index 0149865018..91dac23d8a 100644 --- a/localedata/locales/es_MX +++ b/localedata/locales/es_MX @@ -125,10 +125,8 @@ date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/ END LC_TIME LC_PAPER -% FIXME -height 297 -% FIXME -width 210 +height 279 +width 216 END LC_PAPER LC_TELEPHONE diff --git a/localedata/locales/es_US b/localedata/locales/es_US index 031483965c..71e8ac803c 100644 --- a/localedata/locales/es_US +++ b/localedata/locales/es_US @@ -177,8 +177,7 @@ date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/ END LC_TIME LC_PAPER -height 279 -width 216 +copy "en_US" END LC_PAPER LC_TELEPHONE diff --git a/localedata/locales/es_VE b/localedata/locales/es_VE index c9e916a286..ca6637a6df 100644 --- a/localedata/locales/es_VE +++ b/localedata/locales/es_VE @@ -126,10 +126,8 @@ date_fmt "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/ END LC_TIME LC_PAPER -% FIXME -height 297 -% FIXME -width 210 +height 279 +width 216 END LC_PAPER LC_TELEPHONE diff --git a/localedata/locales/fil_PH b/localedata/locales/fil_PH index 799a43c3de..ad3ea8eab2 100644 --- a/localedata/locales/fil_PH +++ b/localedata/locales/fil_PH @@ -150,8 +150,7 @@ noexpr "<U005B><U0068><U0048><U006E><U004E><U005D><U002E><U002A>" END LC_MESSAGES LC_PAPER -height 297 -width 210 +copy "tl_PH" END LC_PAPER LC_MEASUREMENT diff --git a/localedata/locales/ik_CA b/localedata/locales/ik_CA index fdcb8afe16..1b967423ed 100644 --- a/localedata/locales/ik_CA +++ b/localedata/locales/ik_CA @@ -207,10 +207,8 @@ yesexpr "<U005B><U0079><U0059><U0069><U0049><U0061><U0041><U005D><U002E><U00 noexpr "<U005B><U006E><U004E><U0071><U0051><U005D><U002E><U002A>" END LC_MESSAGES -% Default paper: A4 LC_PAPER -height 297 -width 210 +copy "en_CA" END LC_PAPER % Metric System (ISO 1000) diff --git a/localedata/locales/iu_CA b/localedata/locales/iu_CA index da08366ddb..cb91f3ddfd 100644 --- a/localedata/locales/iu_CA +++ b/localedata/locales/iu_CA @@ -119,10 +119,8 @@ yesexpr "<U005B><U0079><U0059><U0073><U0053><U005D><U002E><U002A>" noexpr "<U005B><U006E><U004E><U005D><U002E><U002A>" END LC_MESSAGES -% Default paper: A4 LC_PAPER -height 297 -width 210 +copy "en_CA" END LC_PAPER % FIXME diff --git a/localedata/locales/tl_PH b/localedata/locales/tl_PH index 250f276298..40c6a715ad 100644 --- a/localedata/locales/tl_PH +++ b/localedata/locales/tl_PH @@ -144,8 +144,8 @@ copy "en_US" END LC_MESSAGES LC_PAPER -height 297 -width 210 +height 279 +width 216 END LC_PAPER LC_MEASUREMENT diff --git a/malloc/arena.c b/malloc/arena.c index f280d38811..4d0deefe19 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -624,8 +624,9 @@ ptmalloc_init (void) if (check_action != 0) __malloc_check_init(); } - if(__malloc_initialize_hook != NULL) - (*__malloc_initialize_hook)(); + void (*hook) (void) = force_reg (__malloc_initialize_hook); + if (hook != NULL) + (*hook)(); __malloc_initialized = 1; } diff --git a/malloc/hooks.c b/malloc/hooks.c index 72c29293d9..622a815f32 100644 --- a/malloc/hooks.c +++ b/malloc/hooks.c @@ -235,8 +235,9 @@ top_check() return -1; } /* Call the `morecore' hook if necessary. */ - if (__after_morecore_hook) - (*__after_morecore_hook) (); + void (*hook) (void) = force_reg (__after_morecore_hook); + if (hook) + (*hook) (); main_arena.system_mem = (new_brk - mp_.sbrk_base) + sbrk_size; top(&main_arena) = (mchunkptr)(brk + front_misalign); @@ -669,10 +670,10 @@ public_sET_STATe(Void_t* msptr) !disallow_malloc_check) __malloc_check_init (); else if (!ms->using_malloc_checking && using_malloc_checking) { - __malloc_hook = 0; - __free_hook = 0; - __realloc_hook = 0; - __memalign_hook = 0; + __malloc_hook = NULL; + __free_hook = NULL; + __realloc_hook = NULL; + __memalign_hook = NULL; using_malloc_checking = 0; } } diff --git a/malloc/malloc.c b/malloc/malloc.c index 17e4e03bac..0b9facefd4 100644 --- a/malloc/malloc.c +++ b/malloc/malloc.c @@ -23,6 +23,10 @@ This is a version (aka ptmalloc2) of malloc/free/realloc written by Doug Lea and adapted to multiple threads/arenas by Wolfram Gloger. + There have been substantial changesmade after the integration into + glibc in all parts of the code. Do not look for much commonality + with the ptmalloc2 version. + * Version ptmalloc2-20011215 based on: VERSION 2.7.0 Sun Mar 11 14:14:06 2001 Doug Lea (dl at gee) @@ -564,6 +568,13 @@ Void_t* memcpy(); #endif #endif + +/* Force a value to be in a register and stop the compiler referring + to the source (mostly memory location) again. */ +#define force_reg(val) \ + ({ __typeof (val) _v; asm ("" : "=r" (_v) : "0" (val)); _v; }) + + /* MALLOC_FAILURE_ACTION is the action to take before "return 0" when malloc fails to be able to return memory, either because memory is @@ -3165,8 +3176,9 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av; if (brk != (char*)(MORECORE_FAILURE)) { /* Call the `morecore' hook if necessary. */ - if (__builtin_expect (__after_morecore_hook != NULL, 0)) - (*__after_morecore_hook) (); + void (*hook) (void) = force_reg (__after_morecore_hook); + if (__builtin_expect (hook != NULL, 0)) + (*hook) (); } else { /* If have mmap, try using it as a backup when MORECORE fails or @@ -3302,10 +3314,12 @@ static Void_t* sYSMALLOc(nb, av) INTERNAL_SIZE_T nb; mstate av; if (snd_brk == (char*)(MORECORE_FAILURE)) { correction = 0; snd_brk = (char*)(MORECORE(0)); - } else + } else { /* Call the `morecore' hook if necessary. */ - if (__builtin_expect (__after_morecore_hook != NULL, 0)) - (*__after_morecore_hook) (); + void (*hook) (void) = force_reg (__after_morecore_hook); + if (__builtin_expect (hook != NULL, 0)) + (*hook) (); + } } /* handle non-contiguous cases */ @@ -3453,8 +3467,9 @@ static int sYSTRIm(pad, av) size_t pad; mstate av; MORECORE(-extra); /* Call the `morecore' hook if necessary. */ - if (__builtin_expect (__after_morecore_hook != NULL, 0)) - (*__after_morecore_hook) (); + void (*hook) (void) = force_reg (__after_morecore_hook); + if (__builtin_expect (hook != NULL, 0)) + (*hook) (); new_brk = (char*)(MORECORE(0)); if (new_brk != (char*)MORECORE_FAILURE) { @@ -3579,7 +3594,8 @@ public_mALLOc(size_t bytes) mstate ar_ptr; Void_t *victim; - __malloc_ptr_t (*hook) (size_t, __const __malloc_ptr_t) = __malloc_hook; + __malloc_ptr_t (*hook) (size_t, __const __malloc_ptr_t) + = force_reg (__malloc_hook); if (__builtin_expect (hook != NULL, 0)) return (*hook)(bytes, RETURN_ADDRESS (0)); @@ -3655,7 +3671,8 @@ public_fREe(Void_t* mem) mstate ar_ptr; mchunkptr p; /* chunk corresponding to mem */ - void (*hook) (__malloc_ptr_t, __const __malloc_ptr_t) = __free_hook; + void (*hook) (__malloc_ptr_t, __const __malloc_ptr_t) + = force_reg (__free_hook); if (__builtin_expect (hook != NULL, 0)) { (*hook)(mem, RETURN_ADDRESS (0)); return; @@ -3713,7 +3730,7 @@ public_rEALLOc(Void_t* oldmem, size_t bytes) Void_t* newp; /* chunk to return */ __malloc_ptr_t (*hook) (__malloc_ptr_t, size_t, __const __malloc_ptr_t) = - __realloc_hook; + force_reg (__realloc_hook); if (__builtin_expect (hook != NULL, 0)) return (*hook)(oldmem, bytes, RETURN_ADDRESS (0)); @@ -3825,7 +3842,7 @@ public_mEMALIGn(size_t alignment, size_t bytes) __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t, __const __malloc_ptr_t)) = - __memalign_hook; + force_reg (__memalign_hook); if (__builtin_expect (hook != NULL, 0)) return (*hook)(alignment, bytes, RETURN_ADDRESS (0)); @@ -3882,7 +3899,7 @@ public_vALLOc(size_t bytes) __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t, __const __malloc_ptr_t)) = - __memalign_hook; + force_reg (__memalign_hook); if (__builtin_expect (hook != NULL, 0)) return (*hook)(pagesz, bytes, RETURN_ADDRESS (0)); @@ -3929,7 +3946,7 @@ public_pVALLOc(size_t bytes) __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t, __const __malloc_ptr_t)) = - __memalign_hook; + force_reg (__memalign_hook); if (__builtin_expect (hook != NULL, 0)) return (*hook)(pagesz, rounded_bytes, RETURN_ADDRESS (0)); @@ -3970,8 +3987,6 @@ public_cALLOc(size_t n, size_t elem_size) unsigned long clearsize; unsigned long nclears; INTERNAL_SIZE_T* d; - __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, __const __malloc_ptr_t)) = - __malloc_hook; /* size_t is unsigned so the behavior on overflow is defined. */ bytes = n * elem_size; @@ -3984,6 +3999,8 @@ public_cALLOc(size_t n, size_t elem_size) } } + __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, __const __malloc_ptr_t)) = + force_reg (__malloc_hook); if (__builtin_expect (hook != NULL, 0)) { sz = bytes; mem = (*hook)(sz, RETURN_ADDRESS (0)); @@ -6192,9 +6209,6 @@ int __posix_memalign (void **memptr, size_t alignment, size_t size) { void *mem; - __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t, - __const __malloc_ptr_t)) = - __memalign_hook; /* Test whether the SIZE argument is valid. It must be a power of two multiple of sizeof (void *). */ @@ -6205,6 +6219,9 @@ __posix_memalign (void **memptr, size_t alignment, size_t size) /* Call the hook here, so that caller is posix_memalign's caller and not posix_memalign itself. */ + __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t, + __const __malloc_ptr_t)) = + force_reg (__memalign_hook); if (__builtin_expect (hook != NULL, 0)) mem = (*hook)(alignment, size, RETURN_ADDRESS (0)); else @@ -6232,6 +6249,10 @@ malloc_info (int options, FILE *fp) size_t total_nfastblocks = 0; size_t total_avail = 0; size_t total_fastavail = 0; + size_t total_system = 0; + size_t total_max_system = 0; + size_t total_aspace = 0; + size_t total_aspace_mprotect = 0; void mi_arena (mstate ar_ptr) { @@ -6337,11 +6358,38 @@ malloc_info (int options, FILE *fp) sizes[NFASTBINS].from, sizes[NFASTBINS].to, sizes[NFASTBINS].total, sizes[NFASTBINS].count); + total_system += ar_ptr->system_mem; + total_max_system += ar_ptr->max_system_mem; + fprintf (fp, "</sizes>\n<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n" "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n" - "</heap>\n", - nfastblocks, fastavail, nblocks, avail); + "<system type=\"current\" size=\"%zu\"/>\n" + "<system type=\"max\" size=\"%zu\"/>\n", + nfastblocks, fastavail, nblocks, avail, + ar_ptr->system_mem, ar_ptr->max_system_mem); + + if (ar_ptr != &main_arena) + { + heap_info *heap = heap_for_ptr(top(ar_ptr)); + fprintf (fp, + "<aspace type=\"total\" size=\"%zu\"/>\n" + "<aspace type=\"mprotect\" size=\"%zu\"/>\n", + heap->size, heap->mprotect_size); + total_aspace += heap->size; + total_aspace_mprotect += heap->mprotect_size; + } + else + { + fprintf (fp, + "<aspace type=\"total\" size=\"%zu\"/>\n" + "<aspace type=\"mprotect\" size=\"%zu\"/>\n", + ar_ptr->system_mem, ar_ptr->system_mem); + total_aspace += ar_ptr->system_mem; + total_aspace_mprotect += ar_ptr->system_mem; + } + + fputs ("</heap>\n", fp); } fputs ("<malloc version=\"1\">\n", fp); @@ -6358,8 +6406,14 @@ malloc_info (int options, FILE *fp) fprintf (fp, "<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n" "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n" + "<system type=\"current\" size=\"%zu\n/>\n" + "<system type=\"max\" size=\"%zu\n/>\n" + "<aspace type=\"total\" size=\"%zu\"/>\n" + "<aspace type=\"mprotect\" size=\"%zu\"/>\n" "</malloc>\n", - total_nfastblocks, total_fastavail, total_nblocks, total_avail); + total_nfastblocks, total_fastavail, total_nblocks, total_avail, + total_system, total_max_system, + total_aspace, total_aspace_mprotect); return 0; } diff --git a/misc/preadv.c b/misc/preadv.c index 3e2cc689e6..facd8ca017 100644 --- a/misc/preadv.c +++ b/misc/preadv.c @@ -24,7 +24,7 @@ without change the file pointer, and put the result in the buffers described by VECTOR, which is a vector of COUNT 'struct iovec's. The buffers are filled in the order specified. Operates just like - 'read' (see <unistd.h>) except that data are put in VECTOR instead + 'pread' (see <unistd.h>) except that data are put in VECTOR instead of a contiguous buffer. */ ssize_t preadv (fd, vector, count, offset) diff --git a/misc/preadv64.c b/misc/preadv64.c index ea675bb359..4b4e5717f8 100644 --- a/misc/preadv64.c +++ b/misc/preadv64.c @@ -24,7 +24,7 @@ without change the file pointer, and put the result in the buffers described by VECTOR, which is a vector of COUNT 'struct iovec's. The buffers are filled in the order specified. Operates just like - 'read' (see <unistd.h>) except that data are put in VECTOR instead + 'pread' (see <unistd.h>) except that data are put in VECTOR instead of a contiguous buffer. */ ssize_t preadv64 (fd, vector, count, offset) diff --git a/misc/pwritev.c b/misc/pwritev.c index d45ed23351..2ee47708e1 100644 --- a/misc/pwritev.c +++ b/misc/pwritev.c @@ -23,7 +23,7 @@ /* Write data pointed by the buffers described by VECTOR, which is a vector of COUNT 'struct iovec's, to file descriptor FD at the given position OFFSET without change the file pointer. The data is - written in the order specified. Operates just like 'write' (see + written in the order specified. Operates just like 'pwrite' (see <unistd.h>) except that the data are taken from VECTOR instead of a contiguous buffer. */ ssize_t diff --git a/misc/pwritev64.c b/misc/pwritev64.c index fe95857554..6cff749083 100644 --- a/misc/pwritev64.c +++ b/misc/pwritev64.c @@ -23,7 +23,7 @@ /* Write data pointed by the buffers described by VECTOR, which is a vector of COUNT 'struct iovec's, to file descriptor FD at the given position OFFSET without change the file pointer. The data is - written in the order specified. Operates just like 'write' (see + written in the order specified. Operates just like 'pwrite' (see <unistd.h>) except that the data are taken from VECTOR instead of a contiguous buffer. */ ssize_t diff --git a/misc/sys/uio.h b/misc/sys/uio.h index a3c782917a..05d956bfd3 100644 --- a/misc/sys/uio.h +++ b/misc/sys/uio.h @@ -58,7 +58,7 @@ extern ssize_t writev (int __fd, __const struct iovec *__iovec, int __count) without change the file pointer, and put the result in the buffers described by IOVEC, which is a vector of COUNT 'struct iovec's. The buffers are filled in the order specified. Operates just like - 'read' (see <unistd.h>) except that data are put in IOVEC instead + 'pread' (see <unistd.h>) except that data are put in IOVEC instead of a contiguous buffer. This function is a cancellation point and therefore not marked with @@ -69,7 +69,7 @@ extern ssize_t preadv (int __fd, __const struct iovec *__iovec, int __count, /* Write data pointed by the buffers described by IOVEC, which is a vector of COUNT 'struct iovec's, to file descriptor FD at the given position OFFSET without change the file pointer. The data is - written in the order specified. Operates just like 'write' (see + written in the order specified. Operates just like 'pwrite' (see <unistd.h>) except that the data are taken from IOVEC instead of a contiguous buffer. @@ -96,7 +96,7 @@ extern ssize_t __REDIRECT (pwritev, (int __fd, __const struct iovec *__iovec, without change the file pointer, and put the result in the buffers described by IOVEC, which is a vector of COUNT 'struct iovec's. The buffers are filled in the order specified. Operates just like - 'read' (see <unistd.h>) except that data are put in IOVEC instead + 'pread' (see <unistd.h>) except that data are put in IOVEC instead of a contiguous buffer. This function is a cancellation point and therefore not marked with @@ -107,7 +107,7 @@ extern ssize_t preadv64 (int __fd, __const struct iovec *__iovec, int __count, /* Write data pointed by the buffers described by IOVEC, which is a vector of COUNT 'struct iovec's, to file descriptor FD at the given position OFFSET without change the file pointer. The data is - written in the order specified. Operates just like 'write' (see + written in the order specified. Operates just like 'pwrite' (see <unistd.h>) except that the data are taken from IOVEC instead of a contiguous buffer. diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 60adce37d9..6015f40737 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,10 @@ +2009-04-22 Ulrich Drepper <drepper@redhat.com> + + [BZ #10090] + * pthread_attr_setschedparam.c (__pthread_attr_setschedparam): + Check policy and priority for validity. + Patch mostly by Zhang Xiliang <zhangxiliang@cn.fujitsu.com>. + 2009-03-15 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S diff --git a/nptl/pthread_attr_setschedparam.c b/nptl/pthread_attr_setschedparam.c index 976ad13873..b4d4bbe055 100644 --- a/nptl/pthread_attr_setschedparam.c +++ b/nptl/pthread_attr_setschedparam.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2002, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2004, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -31,6 +31,12 @@ __pthread_attr_setschedparam (attr, param) assert (sizeof (*attr) >= sizeof (struct pthread_attr)); struct pthread_attr *iattr = (struct pthread_attr *) attr; + int min = sched_get_priority_min (iattr->schedpolicy); + int max = sched_get_priority_max (iattr->schedpolicy); + if (min == -1 || max == -1 + || param->sched_priority > max || param->sched_priority < min) + return EINVAL; + /* Copy the new values. */ memcpy (&iattr->schedparam, param, sizeof (struct sched_param)); diff --git a/nss/Makefile b/nss/Makefile index f2ecadb2a7..670e6b2f16 100644 --- a/nss/Makefile +++ b/nss/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1996-1998,2000,2001,2002,2007 Free Software Foundation, Inc. +# Copyright (C) 1996-1998,2000-2002,2007,2009 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -34,7 +34,7 @@ routines = nsswitch getnssent getnssent_r digits_dots \ # Caution: if you add a database here, you must add its real name # in databases.def, too. databases = proto service hosts network grp pwd rpc ethers \ - spwd netgrp key alias + spwd netgrp key alias sgrp others := getent install-bin := getent diff --git a/nss/Versions b/nss/Versions index f7f0e56979..7a9d67b429 100644 --- a/nss/Versions +++ b/nss/Versions @@ -9,7 +9,7 @@ libc { } GLIBC_PRIVATE { _nss_files_parse_grent; _nss_files_parse_pwent; _nss_files_parse_spent; - __nss_disable_nscd; __nss_lookup_function; + __nss_disable_nscd; __nss_lookup_function; _nss_files_parse_sgent; __nss_passwd_lookup2; __nss_group_lookup2; __nss_hosts_lookup2; __nss_services_lookup2; __nss_next2; @@ -87,6 +87,11 @@ libnss_files { _nss_files_getspent_r; _nss_files_getspnam_r; + _nss_files_setsgent; + _nss_files_endsgent; + _nss_files_getsgent_r; + _nss_files_getsgnam_r; + _nss_netgroup_parseline; _nss_files_getpublickey; _nss_files_getsecretkey; diff --git a/nss/nss_files/files-parse.c b/nss/nss_files/files-parse.c index 66615da26c..3603762f8e 100644 --- a/nss/nss_files/files-parse.c +++ b/nss/nss_files/files-parse.c @@ -103,6 +103,7 @@ parse_line (char *line, struct STRUCTURE *result, \ EXTRA_ARGS_DECL) \ { \ ENTDATA_DECL (data) \ + BUFFER_PREPARE \ char *p = strpbrk (line, EOLSET "\n"); \ if (p != NULL) \ *p = '\0'; \ @@ -127,6 +128,21 @@ nss_files_parse_hidden_def (parse_line) } \ } +# define STRING_LIST(variable, terminator_c) \ + { \ + char **list = parse_list (&line, buf_start, buf_end, terminator_c, \ + errnop); \ + if (list) \ + variable = list; \ + else \ + return -1; /* -1 indicates we ran out of space. */ \ + \ + /* Determine the new end of the buffer. */ \ + while (*list != NULL) \ + ++list; \ + buf_start = (char *) (list + 1); \ + } + /* Helper function. */ static inline uint32_t __attribute__ ((always_inline)) @@ -178,12 +194,39 @@ strtou32 (const char *nptr, char **endptr, int base) # ifndef TRAILING_LIST_MEMBER +# define BUFFER_PREPARE /* Nothing to do. */ # define TRAILING_LIST_PARSER /* Nothing to do. */ # else -# define TRAILING_LIST_PARSER \ +# define BUFFER_PREPARE \ + char *buf_start = NULL; \ + char *buf_end = (char *) data + datalen; \ + if (line >= data->linebuffer && line < buf_end) \ + /* Find the end of the line buffer, we will use the space in \ + DATA after it for storing the vector of pointers. */ \ + buf_start = strchr (line, '\0') + 1; \ + else \ + /* LINE does not point within DATA->linebuffer, so that space is \ + not being used for scratch space right now. We can use all of \ + it for the pointer vector storage. */ \ + buf_start = data->linebuffer; \ + +# define TRAILING_LIST_PARSER \ { \ - char **list = parse_list (line, data, datalen, errnop); \ + if (buf_start == NULL) \ + { \ + if (line >= data->linebuffer && line < buf_end) \ + /* Find the end of the line buffer, we will use the space in \ + DATA after it for storing the vector of pointers. */ \ + buf_start = strchr (line, '\0') + 1; \ + else \ + /* LINE does not point within DATA->linebuffer, so that space is \ + not being used for scratch space right now. We can use all of \ + it for the pointer vector storage. */ \ + buf_start = data->linebuffer; \ + } \ + \ + char **list = parse_list (&line, buf_start, buf_end, '\0', errnop); \ if (list) \ result->TRAILING_LIST_MEMBER = list; \ else \ @@ -192,19 +235,12 @@ strtou32 (const char *nptr, char **endptr, int base) static inline char ** __attribute ((always_inline)) -parse_list (char *line, struct parser_data *data, size_t datalen, int *errnop) +parse_list (char **linep, char *eol, char *buf_end, int terminator_c, + int *errnop) { - char *eol, **list, **p; - - if (line >= data->linebuffer && line < (char *) data + datalen) - /* Find the end of the line buffer, we will use the space in DATA after - it for storing the vector of pointers. */ - eol = strchr (line, '\0') + 1; - else - /* LINE does not point within DATA->linebuffer, so that space is - not being used for scratch space right now. We can use all of - it for the pointer vector storage. */ - eol = data->linebuffer; + char *line = *linep; + char **list, **p; + /* Adjust the pointer so it is aligned for storing pointers. */ eol += __alignof__ (char *) - 1; eol -= (eol - (char *) 0) % __alignof__ (char *); @@ -214,25 +250,30 @@ parse_list (char *line, struct parser_data *data, size_t datalen, int *errnop) p = list; while (1) { - char *elt; - - if ((size_t) ((char *) &p[1] - (char *) data) > datalen) + if ((char *) (p + 2) > buf_end) { /* We cannot fit another pointer in the buffer. */ *errnop = ERANGE; return NULL; } + if (*line == '\0') break; + if (*line == terminator_c) + { + ++line; + break; + } /* Skip leading white space. This might not be portable but useful. */ while (isspace (*line)) ++line; - elt = line; + char *elt = line; while (1) { - if (*line == '\0' || TRAILING_LIST_SEPARATOR_P (*line)) + if (*line == '\0' || *line == terminator_c + || TRAILING_LIST_SEPARATOR_P (*line)) { /* End of the next entry. */ if (line > elt) @@ -241,13 +282,20 @@ parse_list (char *line, struct parser_data *data, size_t datalen, int *errnop) /* Terminate string if necessary. */ if (*line != '\0') - *line++ = '\0'; + { + char endc = *line; + *line++ = '\0'; + if (endc == terminator_c) + goto out; + } break; } ++line; } } + out: *p = NULL; + *linep = line; return list; } diff --git a/nss/nss_files/files-sgrp.c b/nss/nss_files/files-sgrp.c new file mode 100644 index 0000000000..4e12cd83d4 --- /dev/null +++ b/nss/nss_files/files-sgrp.c @@ -0,0 +1,38 @@ +/* User file parser in nss_files module. + Copyright (C) 2009 Free Software 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 <gshadow.h> + +#define STRUCTURE sgrp +#define ENTNAME sgent +#define DATABASE "gshadow" +struct sgent_data {}; + +/* Our parser function is already defined in sgetspent_r.c, so use that + to parse lines from the database file. */ +#define EXTERN_PARSER +#include "files-parse.c" +#include GENERIC + +DB_LOOKUP (sgnam, 1 + strlen (name), (".%s", name), + { + if (name[0] != '+' && name[0] != '-' + && ! strcmp (name, result->sg_namp)) + break; + }, const char *name) diff --git a/nss/nsswitch.conf b/nss/nsswitch.conf index 63a78758d6..4d2a76376d 100644 --- a/nss/nsswitch.conf +++ b/nss/nsswitch.conf @@ -6,6 +6,7 @@ passwd: db files group: db files shadow: db files +gshadow: files hosts: files dns networks: files dns diff --git a/nss/sgrp-lookup.c b/nss/sgrp-lookup.c new file mode 100644 index 0000000000..be3933f26b --- /dev/null +++ b/nss/sgrp-lookup.c @@ -0,0 +1,24 @@ +/* Copyright (C) 2009 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@redhat.com>, 2009. + + 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 DATABASE_NAME gshadow +#define ALTERNATE_NAME group +#define DEFAULT_CONFIG "files" + +#include "XXX-lookup.c" diff --git a/po/ca.po b/po/ca.po index 98b9bd65ac..0872dcbb59 100644 --- a/po/ca.po +++ b/po/ca.po @@ -1,6 +1,7 @@ # Catalan messages for GNU libc. -# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. -# Ivan Vilata i Balaguer <ivan@selidor.net>, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007. +# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2009 Free Software Foundation, Inc. +# This file is distributed under the same license as the glibc package. +# Ivan Vilata i Balaguer <ivan@selidor.net>, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2009. # # Sóc Ivan, aquestes són les convencions que adopte per a la 2.4: # @@ -46,9 +47,9 @@ # bonic, excepte quan quede realment horrend o porte a confusió). msgid "" msgstr "" -"Project-Id-Version: libc 2.7\n" -"POT-Creation-Date: 2007-10-15 21:18-0700\n" -"PO-Revision-Date: 2007-12-02 18:45+0100\n" +"Project-Id-Version: libc 2.9.90\n" +"POT-Creation-Date: 2009-02-06 12:40-0800\n" +"PO-Revision-Date: 2009-04-20 15:27+0200\n" "Last-Translator: Ivan Vilata i Balaguer <ivan@selidor.net>\n" "Language-Team: Catalan <ca@dodds.net>\n" "MIME-Version: 1.0\n" @@ -142,7 +143,7 @@ msgstr "%s%s%s:%u: %s%sError inesperat: %s.\n" msgid "%s%s%s:%u: %s%sAssertion `%s' failed.\n" msgstr "%s%s%s:%u: %s%sL’asserció «%s» ha fallat.\n" -#: catgets/gencat.c:110 catgets/gencat.c:114 nscd/nscd.c:97 nss/makedb.c:61 +#: catgets/gencat.c:110 catgets/gencat.c:114 nscd/nscd.c:100 nss/makedb.c:61 msgid "NAME" msgstr "NOM" @@ -178,9 +179,15 @@ msgstr "" "-o FITXER_EIXIDA [FITXER_ENTRADA]…\n" "[FITXER_EIXIDA [FITXER_ENTRADA]…]" -#: 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 +#: catgets/gencat.c:232 debug/pcprofiledump.c:208 debug/xtrace.sh:58 +#: elf/ldconfig.c:302 elf/ldd.bash.in:56 elf/sln.c:86 elf/sprof.c:360 +#: iconv/iconv_prog.c:408 iconv/iconvconfig.c:380 locale/programs/locale.c:278 +#: locale/programs/localedef.c:371 login/programs/pt_chown.c:88 +#: malloc/memusage.sh:65 malloc/memusagestat.c:533 nscd/nscd.c:415 +#: nss/getent.c:842 nss/makedb.c:231 posix/getconf.c:1030 +#: sunrpc/rpc_main.c:1494 sunrpc/rpcinfo.c:699 +#: sysdeps/unix/sysv/linux/lddlibc4.c:62 +#, c-format msgid "" "For bug reporting instructions, please see:\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" @@ -188,12 +195,13 @@ msgstr "" "Per a obtenir instruccions sobre com informar d’un error, vegeu\n" "<http://www.gnu.org/software/libc/bugs.html>.\n" -#: 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 +#: catgets/gencat.c:246 debug/pcprofiledump.c:222 debug/xtrace.sh:66 +#: elf/ldconfig.c:316 elf/ldd.bash.in:39 elf/sprof.c:375 +#: iconv/iconv_prog.c:423 iconv/iconvconfig.c:395 locale/programs/locale.c:293 #: 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 +#: malloc/memusage.sh:73 malloc/memusagestat.c:551 nscd/nscd.c:429 +#: nss/getent.c:81 nss/makedb.c:245 posix/getconf.c:1012 +#: sysdeps/unix/sysv/linux/lddlibc4.c:69 #, c-format msgid "" "Copyright (C) %s Free Software Foundation, Inc.\n" @@ -205,10 +213,12 @@ msgstr "" "de còpia. No hi ha CAP garantia; ni tan sols de COMERCIABILITAT o\n" "ADEQUACIÓ PER A UN PROPÒSIT PARTICULAR.\n" -#: 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 +#: catgets/gencat.c:251 debug/pcprofiledump.c:227 debug/xtrace.sh:70 +#: elf/ldconfig.c:321 elf/sprof.c:381 iconv/iconv_prog.c:428 +#: iconv/iconvconfig.c:400 locale/programs/locale.c:298 +#: locale/programs/localedef.c:392 malloc/memusage.sh:77 +#: malloc/memusagestat.c:556 nscd/nscd.c:434 nss/getent.c:86 nss/makedb.c:250 +#: posix/getconf.c:1017 #, c-format msgid "Written by %s.\n" msgstr "Escrit per %s.\n" @@ -217,7 +227,7 @@ msgstr "Escrit per %s.\n" msgid "*standard input*" msgstr "*entrada estàndard*" -#: catgets/gencat.c:288 iconv/iconv_charmap.c:158 iconv/iconv_prog.c:298 +#: catgets/gencat.c:288 iconv/iconv_charmap.c:170 iconv/iconv_prog.c:294 #: nss/makedb.c:170 #, c-format msgid "cannot open input file `%s'" @@ -318,17 +328,17 @@ msgstr "Bolca la informació generada en perfilar el comptador de programa." msgid "[FILE]" msgstr "[FITXER]" -#: debug/pcprofiledump.c:104 +#: debug/pcprofiledump.c:108 #, c-format msgid "cannot open input file" msgstr "no s’ha pogut obrir el fitxer d’entrada" -#: debug/pcprofiledump.c:111 +#: debug/pcprofiledump.c:115 #, c-format msgid "cannot read header" msgstr "no s’ha pogut llegir la capçalera" -#: debug/pcprofiledump.c:175 +#: debug/pcprofiledump.c:179 #, c-format msgid "invalid pointer size" msgstr "la mida del punter no és vàlida" @@ -358,8 +368,6 @@ msgid "" "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 "" "Traça l’execució d’un programa mostrant la funció que s’està executant\n" "actualment.\n" @@ -374,23 +382,21 @@ msgstr "" "Els arguments obligatoris per a les opcions llargues també ho són per a les\n" "opcions curtes corresponents.\n" "\n" -"Per a obtenir instruccions sobre com informar d’un error, vegeu\n" -"<http://www.gnu.org/software/libc/bugs.html>.\\n" -#: debug/xtrace.sh:125 +#: debug/xtrace.sh:127 msgid "xtrace: unrecognized option \\`$1'\\n" msgstr "xtrace: l’opció «$1» no és reconeguda\\n" -#: debug/xtrace.sh:138 +#: debug/xtrace.sh:140 msgid "No program name given\\n" msgstr "no s’ha indicat un nom de programa\\n" -#: debug/xtrace.sh:146 +#: debug/xtrace.sh:148 #, sh-format msgid "executable \\`$program' not found\\n" msgstr "no s’ha trobat l’executable «$program»\\n" -#: debug/xtrace.sh:150 +#: debug/xtrace.sh:152 #, sh-format msgid "\\`$program' is no executable\\n" msgstr "«$program» no és executable\\n" @@ -411,7 +417,7 @@ msgstr "l’espai de noms no és vàlid" msgid "invalid mode" msgstr "el mode no és vàlid" -#: dlfcn/dlopen.c:64 +#: dlfcn/dlopen.c:65 msgid "invalid mode parameter" msgstr "el paràmetre de mode no és vàlid" @@ -434,7 +440,7 @@ msgstr "SO desconegut" msgid ", OS ABI: %s %d.%d.%d" msgstr ", ABI del SO: %s %d.%d.%d" -#: elf/cache.c:134 elf/ldconfig.c:1270 +#: elf/cache.c:134 elf/ldconfig.c:1289 #, c-format msgid "Can't open cache file %s\n" msgstr "no s’ha pogut obrir el fitxer «%s» de memòria cau\n" @@ -479,7 +485,7 @@ msgstr "no s’ha pogut reanomenar «%s» a «%s»" msgid "cannot create scope list" msgstr "no s’ha pogut crear la llista d’àmbits" -#: elf/dl-close.c:724 +#: elf/dl-close.c:725 msgid "shared object not open" msgstr "l’objecte compartit no és obert" @@ -560,11 +566,11 @@ msgstr "ha fallat stat() sobre l’objecte compartit" msgid "cannot open zero fill device" msgstr "no s’ha pogut obrir el dispositiu de zeros" -#: elf/dl-load.c:979 elf/dl-load.c:2224 +#: elf/dl-load.c:979 elf/dl-load.c:2215 msgid "cannot create shared object descriptor" msgstr "no s’ha pogut crear el descriptor d’objecte compartit" -#: elf/dl-load.c:998 elf/dl-load.c:1656 elf/dl-load.c:1748 +#: elf/dl-load.c:998 elf/dl-load.c:1647 elf/dl-load.c:1739 msgid "cannot read file data" msgstr "no s’han pogut llegir les dades del fitxer" @@ -628,68 +634,64 @@ msgstr "no s’ha pogut habilitar la pila executable a requeriment de l’object msgid "cannot close file descriptor" msgstr "no s’ha pogut tancar un descriptor de fitxer" -#: elf/dl-load.c:1478 -msgid "cannot create searchlist" -msgstr "no s’ha pogut crear la llista de cerca" - -#: elf/dl-load.c:1656 +#: elf/dl-load.c:1647 msgid "file too short" msgstr "el fitxer és massa curt" -#: elf/dl-load.c:1685 +#: elf/dl-load.c:1676 msgid "invalid ELF header" msgstr "la capçalera ELF no és vàlida" -#: elf/dl-load.c:1697 +#: elf/dl-load.c:1688 msgid "ELF file data encoding not big-endian" msgstr "la codificació de les dades del fitxer ELF no és big‐endian" -#: elf/dl-load.c:1699 +#: elf/dl-load.c:1690 msgid "ELF file data encoding not little-endian" msgstr "la codificació de les dades del fitxer ELF no és little‐endian" -#: elf/dl-load.c:1703 +#: elf/dl-load.c:1694 msgid "ELF file version ident does not match current one" msgstr "la identificació de la versió del fitxer ELF no concorda amb l’actual" # ivb (2001/11(06) # ivb ABI = Application Binary Interface (interfície binària d'aplicació) -#: elf/dl-load.c:1707 +#: elf/dl-load.c:1698 msgid "ELF file OS ABI invalid" msgstr "l’ABI de sistema operatiu del fitxer ELF no és vàlida" -#: elf/dl-load.c:1709 +#: elf/dl-load.c:1700 msgid "ELF file ABI version invalid" msgstr "la versió de l’ABI del fitxer ELF no és vàlida" -#: elf/dl-load.c:1712 +#: elf/dl-load.c:1703 msgid "internal error" msgstr "error intern" -#: elf/dl-load.c:1719 +#: elf/dl-load.c:1710 msgid "ELF file version does not match current one" msgstr "la versió del fitxer ELF no concorda amb l’actual" -#: elf/dl-load.c:1727 +#: elf/dl-load.c:1718 msgid "only ET_DYN and ET_EXEC can be loaded" msgstr "només es poden carregar els tipus ET_DYN i ET_EXEC" # ivb (2001/11/01) # ivb La traducció completa de «phentsize» vindria a ser: mida d'entrada # ivb de taula de la capçalera de programa. -#: elf/dl-load.c:1733 +#: elf/dl-load.c:1724 msgid "ELF file's phentsize not the expected size" msgstr "el valor de «phentsize» del fitxer ELF no és l’esperat" -#: elf/dl-load.c:2240 +#: elf/dl-load.c:2231 msgid "wrong ELF class: ELFCLASS64" msgstr "la classe ELF no és vàlida: ELFCLASS64" -#: elf/dl-load.c:2241 +#: elf/dl-load.c:2232 msgid "wrong ELF class: ELFCLASS32" msgstr "la classe ELF no és vàlida: ELFCLASS32" -#: elf/dl-load.c:2244 +#: elf/dl-load.c:2235 msgid "cannot open shared object file" msgstr "no s’ha pogut obrir el fitxer objecte compartit" @@ -723,11 +725,11 @@ msgstr "no resten espais de noms disponibles per a dlmopen()" msgid "invalid target namespace in dlmopen()" msgstr "l’espai de noms destí de dlmopen() no és vàlid" -#: elf/dl-reloc.c:54 +#: elf/dl-reloc.c:121 msgid "cannot allocate memory in static TLS block" msgstr "no s’ha pogut reservar memòria al bloc TLS estàtic" -#: elf/dl-reloc.c:196 +#: elf/dl-reloc.c:211 msgid "cannot make segment writable for relocation" msgstr "no s’ha pogut fer escrivible el segment per a reubicar‐lo" @@ -756,11 +758,11 @@ msgstr "no s’ha pogut protegir la memòria després de reubicar" msgid "RTLD_NEXT used in code not dynamically loaded" msgstr "s’ha emprat RTLD_NEXT en un codi no carregat dinàmicament" -#: elf/dl-sysdep.c:469 elf/dl-sysdep.c:481 +#: elf/dl-sysdep.c:481 elf/dl-sysdep.c:493 msgid "cannot create capability list" msgstr "no s’ha pogut crear la llista de capacitats" -#: elf/dl-tls.c:825 +#: elf/dl-tls.c:864 msgid "cannot create TLS data structures" msgstr "no s’han pogut crear les estructures de dades TLS" @@ -769,225 +771,225 @@ msgid "cannot allocate version reference table" msgstr "no s’ha pogut reservar la taula de referències de versions" # Més ajudes. ivb -#: elf/ldconfig.c:138 +#: elf/ldconfig.c:141 msgid "Print cache" msgstr "Mostra la memòria cau." -#: elf/ldconfig.c:139 +#: elf/ldconfig.c:142 msgid "Generate verbose messages" msgstr "Genera missatges detallats." -#: elf/ldconfig.c:140 +#: elf/ldconfig.c:143 msgid "Don't build cache" msgstr "No construeix la memòria cau." -#: elf/ldconfig.c:141 +#: elf/ldconfig.c:144 msgid "Don't generate links" msgstr "No genera enllaços." -#: elf/ldconfig.c:142 +#: elf/ldconfig.c:145 msgid "Change to and use ROOT as root directory" msgstr "Canvia a i empra ARREL com a directori arrel." -#: elf/ldconfig.c:142 +#: elf/ldconfig.c:145 msgid "ROOT" msgstr "ARREL" -#: elf/ldconfig.c:143 +#: elf/ldconfig.c:146 msgid "CACHE" msgstr "CACHE" -#: elf/ldconfig.c:143 +#: elf/ldconfig.c:146 msgid "Use CACHE as cache file" msgstr "Empra CACHE com a fitxer de memòria cau." -#: elf/ldconfig.c:144 +#: elf/ldconfig.c:147 msgid "CONF" msgstr "CONF" -#: elf/ldconfig.c:144 +#: elf/ldconfig.c:147 msgid "Use CONF as configuration file" msgstr "Empra CONF com a fitxer de configuració." -#: elf/ldconfig.c:145 +#: elf/ldconfig.c:148 msgid "Only process directories specified on the command line. Don't build cache." msgstr "Només processa els directoris especificats a la línia d’ordres. No construeix la memòria cau." -#: elf/ldconfig.c:146 +#: elf/ldconfig.c:149 msgid "Manually link individual libraries." msgstr "Per a enllaçar les biblioteques manualment." -#: elf/ldconfig.c:147 +#: elf/ldconfig.c:150 msgid "FORMAT" msgstr "FORMAT" -#: elf/ldconfig.c:147 +#: elf/ldconfig.c:150 msgid "Format to use: new, old or compat (default)" msgstr "FORMAT a emprar: «new» (nou), «old» (antic) o «compat» (compatible, per defecte)." -#: elf/ldconfig.c:148 +#: elf/ldconfig.c:151 msgid "Ignore auxiliary cache file" msgstr "No té en compte el fitxer de memòria cau auxilar." -#: elf/ldconfig.c:156 +#: elf/ldconfig.c:159 msgid "Configure Dynamic Linker Run Time Bindings." msgstr "Configura els vincles en temps d’execució de l’enllaçador dinàmic." -#: elf/ldconfig.c:319 +#: elf/ldconfig.c:339 #, c-format msgid "Path `%s' given more than once" msgstr "s’ha indicat el camí «%s» més d’una volta" -#: elf/ldconfig.c:359 +#: elf/ldconfig.c:379 #, c-format msgid "%s is not a known library type" msgstr "«%s» no és un tipus conegut de biblioteca" -#: elf/ldconfig.c:384 +#: elf/ldconfig.c:404 #, c-format msgid "Can't stat %s" msgstr "ha fallat stat() sobre «%s»" -#: elf/ldconfig.c:458 +#: elf/ldconfig.c:478 #, c-format msgid "Can't stat %s\n" msgstr "ha fallat stat() sobre «%s»\n" -#: elf/ldconfig.c:468 +#: elf/ldconfig.c:488 #, c-format msgid "%s is not a symbolic link\n" msgstr "«%s» no és un enllaç simbòlic\n" -#: elf/ldconfig.c:487 +#: elf/ldconfig.c:507 #, c-format msgid "Can't unlink %s" msgstr "no s’ha pogut desenllaçar «%s»" -#: elf/ldconfig.c:493 +#: elf/ldconfig.c:513 #, c-format msgid "Can't link %s to %s" msgstr "no s’ha pogut crear un enllaç des de «%s» cap a «%s»" # ivb (2001/10/28) # ivb Es refereix a un enllaç -> masculí. -#: elf/ldconfig.c:499 +#: elf/ldconfig.c:519 msgid " (changed)\n" msgstr " (canviat)\n" # ivb (2001/10/28) # ivb Es refereix a fer o no l'enllaç, no importa el gènere. -#: elf/ldconfig.c:501 +#: elf/ldconfig.c:521 msgid " (SKIPPED)\n" msgstr " (SALTAT)\n" -#: elf/ldconfig.c:556 +#: elf/ldconfig.c:576 #, c-format msgid "Can't find %s" msgstr "no s’ha pogut trobar «%s»" -#: elf/ldconfig.c:572 elf/ldconfig.c:745 elf/ldconfig.c:793 elf/ldconfig.c:827 +#: elf/ldconfig.c:592 elf/ldconfig.c:765 elf/ldconfig.c:813 elf/ldconfig.c:847 #, c-format msgid "Cannot lstat %s" msgstr "ha fallat lstat() sobre «%s»" -#: elf/ldconfig.c:579 +#: elf/ldconfig.c:599 #, c-format msgid "Ignored file %s since it is not a regular file." msgstr "es descarta el fitxer «%s» que no és un fitxer ordinari" -#: elf/ldconfig.c:588 +#: elf/ldconfig.c:608 #, c-format msgid "No link created since soname could not be found for %s" msgstr "no s’ha creat l’enllaç perquè no s’ha trobat el nom d’objecte compartit de «%s»" -#: elf/ldconfig.c:671 +#: elf/ldconfig.c:691 #, c-format msgid "Can't open directory %s" msgstr "no s’ha pogut obrir el directori «%s»" -#: elf/ldconfig.c:759 +#: elf/ldconfig.c:779 #, c-format msgid "Cannot stat %s" msgstr "ha fallat stat() sobre «%s»" -#: elf/ldconfig.c:814 elf/readlib.c:91 +#: elf/ldconfig.c:834 elf/readlib.c:91 #, c-format msgid "Input file %s not found.\n" msgstr "no s’ha trobat el fitxer d’entrada «%s»\n" -#: elf/ldconfig.c:888 +#: elf/ldconfig.c:908 #, c-format msgid "libc5 library %s in wrong directory" msgstr "la biblioteca «%s» per a libc5 es troba en un directori incorrecte" -#: elf/ldconfig.c:891 +#: elf/ldconfig.c:911 #, c-format msgid "libc6 library %s in wrong directory" msgstr "la biblioteca «%s» per a libc6 es troba en un directori incorrecte" -#: elf/ldconfig.c:894 +#: elf/ldconfig.c:914 #, c-format msgid "libc4 library %s in wrong directory" msgstr "la biblioteca «%s» per a libc4 es troba en un directori incorrecte" -#: elf/ldconfig.c:922 +#: elf/ldconfig.c:942 #, c-format msgid "libraries %s and %s in directory %s have same soname but different type." msgstr "les biblioteques «%s» i «%s» del directori «%s» tenen el mateix nom d’objecte compartit però diferent tipus." -#: elf/ldconfig.c:1031 +#: elf/ldconfig.c:1051 #, c-format msgid "Can't open configuration file %s" msgstr "no s’ha pogut obrir el fitxer «%s» de configuració" -#: elf/ldconfig.c:1095 +#: elf/ldconfig.c:1115 #, c-format msgid "%s:%u: bad syntax in hwcap line" msgstr "%s:%u: la sintaxi de la línia «hwcap» no és vàlida" -#: elf/ldconfig.c:1101 +#: elf/ldconfig.c:1121 #, c-format msgid "%s:%u: hwcap index %lu above maximum %u" msgstr "%s:%u: la «hwcap» amb índex %lu està sobre el màxim %u" # La substitució final és per un nom. ivb -#: elf/ldconfig.c:1108 elf/ldconfig.c:1116 +#: elf/ldconfig.c:1128 elf/ldconfig.c:1136 #, c-format msgid "%s:%u: hwcap index %lu already defined as %s" msgstr "%s:%u: la «hwcap» amb índex %lu ja ha estat definida com a «%s»" -#: elf/ldconfig.c:1119 +#: elf/ldconfig.c:1139 #, c-format msgid "%s:%u: duplicate hwcap %lu %s" msgstr "%s:%u: la «hwcap» %lu amb nom «%s» està duplicada" -#: elf/ldconfig.c:1141 +#: elf/ldconfig.c:1161 #, c-format msgid "need absolute file name for configuration file when using -r" msgstr "cal indicar el camí absolut del fitxer de configuració en emprar «-r»" -#: 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 +#: elf/ldconfig.c:1168 locale/programs/xmalloc.c:70 malloc/obstack.c:434 +#: malloc/obstack.c:436 posix/getconf.c:985 posix/getconf.c:1177 #, c-format msgid "memory exhausted" msgstr "la memòria s’ha exhaurit" -#: elf/ldconfig.c:1178 +#: elf/ldconfig.c:1198 #, c-format msgid "%s:%u: cannot read directory %s" msgstr "%s:%u: no s’ha pogut llegir el directori «%s»" -#: elf/ldconfig.c:1223 +#: elf/ldconfig.c:1242 #, c-format msgid "relative path `%s' used to build cache" msgstr "s’ha indicat el camí relatiu «%s» per a construir la memòria cau" -#: elf/ldconfig.c:1249 +#: elf/ldconfig.c:1268 #, c-format msgid "Can't chdir to /" msgstr "no s’ha pogut canviar al directori arrel" -#: elf/ldconfig.c:1291 +#: elf/ldconfig.c:1310 #, c-format msgid "Can't open cache file directory %s\n" msgstr "no s’ha pogut obrir el directori «%s» de fitxers de memòria cau\n" @@ -1005,8 +1007,6 @@ msgid "" " -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 "" "Forma d’ús: ldd [OPCIÓ]… FITXER…\n" "\n" @@ -1017,54 +1017,52 @@ msgstr "" " --help Mostra aquesta ajuda i ix.\n" " --version Mostra informació sobre la versió i ix.\n" "\n" -"Per a obtenir instruccions sobre com informar d’un error, vegeu\n" -"<http://www.gnu.org/software/libc/bugs.html>." -#: elf/ldd.bash.in:80 +#: elf/ldd.bash.in:82 msgid "ldd: option \\`$1' is ambiguous" msgstr "ldd: l’opció «$1» és ambígua" -#: elf/ldd.bash.in:87 +#: elf/ldd.bash.in:89 msgid "unrecognized option" msgstr "l’opció no és reconeguda" -#: elf/ldd.bash.in:88 elf/ldd.bash.in:126 +#: elf/ldd.bash.in:90 elf/ldd.bash.in:128 msgid "Try \\`ldd --help' for more information." msgstr "Proveu «ldd --help» per a obtenir més informació." -#: elf/ldd.bash.in:125 +#: elf/ldd.bash.in:127 msgid "missing file arguments" msgstr "manquen arguments fitxer" #. 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 +#: elf/ldd.bash.in:150 sysdeps/gnu/errlist.c:36 msgid "No such file or directory" msgstr "El fitxer o directori no existeix" # ivb (2001/10/31) # ivb Cal tenir en compte que «ordinary» a l'anglés és cosa pler diferent ;) -#: elf/ldd.bash.in:151 inet/rcmd.c:483 +#: elf/ldd.bash.in:153 inet/rcmd.c:483 msgid "not regular file" msgstr "no és un fitxer ordinari" # Darrere va el nom de fitxer, no puc canviar les cometes. :( ivb -#: elf/ldd.bash.in:154 +#: elf/ldd.bash.in:156 msgid "warning: you do not have execution permission for" msgstr "avís: no teniu permís d’execució per a" -#: elf/ldd.bash.in:183 +#: elf/ldd.bash.in:185 msgid "\tnot a dynamic executable" msgstr "\tno és un executable dinàmic" # Davant va el nom de fitxer, no puc canviar les cometes. :( ivb -#: elf/ldd.bash.in:191 +#: elf/ldd.bash.in:193 msgid "exited with unknown exit code" msgstr "ha finalitzat amb un codi d’eixida desconegut" # Darrere va el nom de fitxer, no puc canviar les cometes. :( ivb -#: elf/ldd.bash.in:196 +#: elf/ldd.bash.in:198 msgid "error: you do not have read permission for" msgstr "error: no teniu permís de lectura per a" @@ -1123,6 +1121,45 @@ msgstr "ha fallat mmap() sobre el fitxer «%s»\n" msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n" msgstr "«%s» no és un fitxer ELF: els octets màgics del començament no són correctes\n" +#: elf/sln.c:85 +#, c-format +msgid "" +"Usage: sln src dest|file\n" +"\n" +msgstr "" +"Forma d’ús: sln ORIGEN DESTÍ|FITXER\n" +"\n" + +#: elf/sln.c:110 +#, c-format +msgid "%s: file open error: %m\n" +msgstr "%s: error en obrir el fitxer: %m\n" + +#: elf/sln.c:147 +#, c-format +msgid "No target in line %d\n" +msgstr "manca un destí a la línia %d\n" + +#: elf/sln.c:179 +#, c-format +msgid "%s: destination must not be a directory\n" +msgstr "%s: el destí no ha de ser un directori\n" + +#: elf/sln.c:185 +#, c-format +msgid "%s: failed to remove the old destination\n" +msgstr "%s: no s’ha pogut esborrar el destí antic\n" + +#: elf/sln.c:193 +#, c-format +msgid "%s: invalid destination: %s\n" +msgstr "%s: el destí no és vàlid: %s\n" + +#: elf/sln.c:208 elf/sln.c:217 +#, c-format +msgid "Invalid link from \"%s\" to \"%s\": %s\n" +msgstr "l’enllaç des de «%s» cap a «%s» no és vàlid: %s\n" + # Més ajudes. ivb #: elf/sprof.c:77 msgid "Output selection:" @@ -1140,133 +1177,131 @@ msgstr "Genera un perfil pla amb recomptes i unitats de temps." msgid "generate call graph" msgstr "Genera un gràfic de crides." -# FIXME: Don't use \v. #: 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 "" -"Llig i mostra les dades de perfilat d’un objecte compartit.\n" -"\n" -"Per a obtenir instruccions sobre com informar d’un error, vegeu\n" -"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgid "Read and display shared object profiling data." +msgstr "Llig i mostra les dades de perfilat d’un objecte compartit." #: elf/sprof.c:94 msgid "SHOBJ [PROFDATA]" msgstr "OBJECTE_COMPARTIT [DADES_PERFILAT]" -#: elf/sprof.c:400 +#: elf/sprof.c:420 #, c-format msgid "failed to load shared object `%s'" msgstr "no s’ha pogut carregar l’objecte compartit «%s»" -#: elf/sprof.c:409 +#: elf/sprof.c:429 #, c-format msgid "cannot create internal descriptors" msgstr "no s’han pogut crear els descriptors interns" -#: elf/sprof.c:528 +#: elf/sprof.c:548 #, c-format msgid "Reopening shared object `%s' failed" msgstr "no s’ha pogut reobrir l’objecte compartit «%s»" -#: elf/sprof.c:535 elf/sprof.c:629 +#: elf/sprof.c:555 elf/sprof.c:649 #, c-format msgid "reading of section headers failed" msgstr "la lectura de les capçaleres de secció ha fallat" -#: elf/sprof.c:543 elf/sprof.c:637 +#: elf/sprof.c:563 elf/sprof.c:657 #, c-format msgid "reading of section header string table failed" msgstr "la lectura de la taula de cadenes de capçalera de secció ha fallat" -#: elf/sprof.c:569 +#: elf/sprof.c:589 #, c-format msgid "*** Cannot read debuginfo file name: %m\n" msgstr "*** No s’ha pogut llegir el nom del fitxer d’informació de depuració: %m\n" -#: elf/sprof.c:589 +#: elf/sprof.c:609 #, c-format msgid "cannot determine file name" msgstr "no s’ha pogut determinar un nom de fitxer" -#: elf/sprof.c:622 +#: elf/sprof.c:642 #, c-format msgid "reading of ELF header failed" msgstr "la lectura de la capçalera ELF ha fallat" -#: elf/sprof.c:658 +#: elf/sprof.c:678 #, c-format msgid "*** The file `%s' is stripped: no detailed analysis possible\n" msgstr "*** El fitxer «%s» no conté símbols: no és possible l’anàlisi detallada\n" -#: elf/sprof.c:688 +#: elf/sprof.c:708 #, c-format msgid "failed to load symbol data" msgstr "no s’han pogut carregar les dades simbòliques" -#: elf/sprof.c:755 +#: elf/sprof.c:775 #, c-format msgid "cannot load profiling data" msgstr "no s’han pogut carregar les dades de perfilat" -#: elf/sprof.c:764 +#: elf/sprof.c:784 #, c-format msgid "while stat'ing profiling data file" msgstr "en cridar stat() sobre el fitxer de dades de perfilat" -#: elf/sprof.c:772 +#: elf/sprof.c:792 #, c-format msgid "profiling data file `%s' does not match shared object `%s'" msgstr "el fitxer «%s» de dades de perfilat no correspon a l’objecte compartit «%s»" -#: elf/sprof.c:783 +#: elf/sprof.c:803 #, c-format msgid "failed to mmap the profiling data file" msgstr "ha fallat mmap() sobre el fitxer de dades de perfilat" -#: elf/sprof.c:791 +#: elf/sprof.c:811 #, c-format msgid "error while closing the profiling data file" msgstr "error en tancar el fitxer de dades de perfilat" -#: elf/sprof.c:800 elf/sprof.c:870 +#: elf/sprof.c:820 elf/sprof.c:890 #, c-format msgid "cannot create internal descriptor" msgstr "no s’ha pogut crear un descriptor intern" -#: elf/sprof.c:846 +#: elf/sprof.c:866 #, c-format msgid "`%s' is no correct profile data file for `%s'" msgstr "«%s» no és un fitxer vàlid de perfilat de «%s»" -#: elf/sprof.c:1027 elf/sprof.c:1085 +#: elf/sprof.c:1047 elf/sprof.c:1105 #, c-format msgid "cannot allocate symbol data" msgstr "no s’han pogut reservar les dades de símbols" -#: iconv/iconv_charmap.c:176 iconv/iconv_prog.c:316 +#: iconv/iconv_charmap.c:142 iconv/iconv_prog.c:446 +#, c-format +msgid "cannot open output file" +msgstr "no s’ha pogut obrir el fitxer d’eixida" + +#: iconv/iconv_charmap.c:188 iconv/iconv_prog.c:312 #, c-format msgid "error while closing input `%s'" msgstr "error en tancar l’entrada «%s»" -#: iconv/iconv_charmap.c:450 +#: iconv/iconv_charmap.c:462 #, c-format msgid "illegal input sequence at position %Zd" msgstr "hi ha una seqüència d’entrada no vàlida a la posició %Zd" -#: iconv/iconv_charmap.c:469 iconv/iconv_prog.c:526 +#: iconv/iconv_charmap.c:481 iconv/iconv_prog.c:537 #, c-format msgid "incomplete character or shift sequence at end of buffer" msgstr "hi ha un caràcter o seqüència de desplaçament incompleta al final de la memòria intermèdia" -#: iconv/iconv_charmap.c:514 iconv/iconv_charmap.c:550 iconv/iconv_prog.c:569 -#: iconv/iconv_prog.c:605 +#: iconv/iconv_charmap.c:526 iconv/iconv_charmap.c:562 iconv/iconv_prog.c:580 +#: iconv/iconv_prog.c:616 #, c-format msgid "error while reading the input" msgstr "error en llegir l’entrada" -#: iconv/iconv_charmap.c:532 iconv/iconv_prog.c:587 +#: iconv/iconv_charmap.c:544 iconv/iconv_prog.c:598 #, c-format msgid "unable to allocate buffer for input" msgstr "no s’ha pogut reservar memòria intermèdia per a l’entrada" @@ -1320,62 +1355,57 @@ msgstr "Converteix els fitxers especificats d’una codificació a una altra." msgid "[FILE...]" msgstr "[FITXER…]" -#: iconv/iconv_prog.c:200 -#, c-format -msgid "cannot open output file" -msgstr "no s’ha pogut obrir el fitxer d’eixida" - -#: iconv/iconv_prog.c:242 +#: iconv/iconv_prog.c:234 #, c-format msgid "conversions from `%s' and to `%s' are not supported" msgstr "les conversions de «%s» i a «%s» no estan implementades" -#: iconv/iconv_prog.c:247 +#: iconv/iconv_prog.c:239 #, c-format msgid "conversion from `%s' is not supported" msgstr "la conversió de «%s» no està implementada" -#: iconv/iconv_prog.c:254 +#: iconv/iconv_prog.c:246 #, c-format msgid "conversion to `%s' is not supported" msgstr "la conversió a «%s» no està implementada" -#: iconv/iconv_prog.c:258 +#: iconv/iconv_prog.c:250 #, c-format msgid "conversion from `%s' to `%s' is not supported" msgstr "la conversió de «%s» a «%s» no està implementada" -#: iconv/iconv_prog.c:268 +#: iconv/iconv_prog.c:260 #, c-format msgid "failed to start conversion processing" msgstr "no s’ha pogut començar a processar la conversió" -#: iconv/iconv_prog.c:362 +#: iconv/iconv_prog.c:358 #, c-format msgid "error while closing output file" msgstr "error en tancar el fitxer d’eixida" -#: iconv/iconv_prog.c:471 iconv/iconv_prog.c:497 +#: iconv/iconv_prog.c:456 #, c-format msgid "conversion stopped due to problem in writing the output" msgstr "la conversió s’ha detingut a causa d’un problema en escriure l’eixida" -#: iconv/iconv_prog.c:522 +#: iconv/iconv_prog.c:533 #, c-format msgid "illegal input sequence at position %ld" msgstr "hi ha una seqüència d’entrada no vàlida a la posició %ld" -#: iconv/iconv_prog.c:530 +#: iconv/iconv_prog.c:541 #, c-format msgid "internal error (illegal descriptor)" msgstr "error intern (el descriptor no és vàlid)" -#: iconv/iconv_prog.c:533 +#: iconv/iconv_prog.c:544 #, c-format msgid "unknown iconv() error %d" msgstr "error desconegut %d a iconv()" -#: iconv/iconv_prog.c:779 +#: iconv/iconv_prog.c:790 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" @@ -1617,7 +1647,7 @@ msgstr "sobren octets a la codificació del caràcter" msgid "no symbolic name given for end of range" msgstr "no s’ha indicat un nom simbòlic per a la fi del rang" -#: locale/programs/charmap.c:610 locale/programs/ld-address.c:600 +#: locale/programs/charmap.c:610 locale/programs/ld-address.c:602 #: 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 @@ -1645,8 +1675,8 @@ msgstr "el valor de %s ha de ser un enter" msgid "%s: error in state machine" msgstr "%s: error a la màquina d’estats" -#: 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/charmap.c:850 locale/programs/ld-address.c:618 +#: locale/programs/ld-collate.c:2764 locale/programs/ld-collate.c:4117 #: 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 @@ -1668,7 +1698,7 @@ msgstr "el caràcter «%s» no és conegut" msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d" msgstr "el nombre d’octets de les seqüències d’inici i final del rang no són iguals: %d i %d" -#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:3047 +#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:3044 #: locale/programs/repertoire.c:419 msgid "invalid names for character range" msgstr "els noms del rang de caràcters no són vàlids" @@ -1693,7 +1723,7 @@ msgstr "el límit superior del rang és menor que l’inferior" msgid "resulting bytes for range not representable." msgstr "els octets resultants del rang no són representables" -#: locale/programs/ld-address.c:133 locale/programs/ld-collate.c:1556 +#: locale/programs/ld-address.c:135 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 @@ -1703,10 +1733,10 @@ msgstr "els octets resultants del rang no són representables" msgid "No definition for %s category found" msgstr "no s’ha trobat cap definició de la categoria «%s»" -#: 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-address.c:146 locale/programs/ld-address.c:184 +#: locale/programs/ld-address.c:202 locale/programs/ld-address.c:231 +#: locale/programs/ld-address.c:303 locale/programs/ld-address.c:322 +#: locale/programs/ld-address.c:335 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 @@ -1719,14 +1749,14 @@ msgstr "no s’ha trobat cap definició de la categoria «%s»" msgid "%s: field `%s' not defined" msgstr "%s: no s’ha definit el camp «%s»" -#: 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-address.c:158 locale/programs/ld-address.c:210 +#: locale/programs/ld-address.c:240 locale/programs/ld-address.c:278 #: locale/programs/ld-name.c:117 locale/programs/ld-telephone.c:117 #, c-format msgid "%s: field `%s' must not be empty" msgstr "%s: el camp «%s» no ha d’estar buit" -#: locale/programs/ld-address.c:168 +#: locale/programs/ld-address.c:170 #, c-format msgid "%s: invalid escape `%%%c' sequence in field `%s'" msgstr "%s: la seqüència d’escapada «%%%c» del camp «%s» no és vàlida" @@ -1735,34 +1765,34 @@ msgstr "%s: la seqüència d’escapada «%%%c» del camp «%s» no és vàlida" # ivb Pel que sembla hi ha un codi terminològic de llengua i un # ivb codi bibliogràfic de llengua. # ivb http://anubis.dkuug.dk/i18n/iso-639-2-dis.txt -#: locale/programs/ld-address.c:219 +#: locale/programs/ld-address.c:221 #, c-format msgid "%s: terminology language code `%s' not defined" msgstr "%s: no s’ha definit el codi terminològic de llengua «%s»" -#: locale/programs/ld-address.c:244 +#: locale/programs/ld-address.c:246 #, c-format msgid "%s: field `%s' must not be defined" msgstr "%s: no s’ha de definir el camp «%s»" -#: locale/programs/ld-address.c:258 locale/programs/ld-address.c:287 +#: locale/programs/ld-address.c:260 locale/programs/ld-address.c:289 #, c-format msgid "%s: language abbreviation `%s' not defined" msgstr "%s: no s’ha definit l’abreviatura de llengua «%s»" -#: locale/programs/ld-address.c:265 locale/programs/ld-address.c:293 -#: locale/programs/ld-address.c:327 locale/programs/ld-address.c:339 +#: locale/programs/ld-address.c:267 locale/programs/ld-address.c:295 +#: locale/programs/ld-address.c:329 locale/programs/ld-address.c:341 #, c-format msgid "%s: `%s' value does not match `%s' value" msgstr "%s: el valor de «%s» no concorda amb el valor de «%s»" -#: locale/programs/ld-address.c:312 +#: locale/programs/ld-address.c:314 #, c-format msgid "%s: numeric country code `%d' not valid" msgstr "%s: el codi numèric de país «%d» no és vàlid" -#: 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-address.c:510 locale/programs/ld-address.c:547 +#: locale/programs/ld-address.c:585 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 @@ -1774,7 +1804,7 @@ msgstr "%s: el codi numèric de país «%d» no és vàlid" msgid "%s: field `%s' declared more than once" msgstr "%s: el camp «%s» ha estat declarat més d’una volta" -#: locale/programs/ld-address.c:512 locale/programs/ld-address.c:550 +#: locale/programs/ld-address.c:514 locale/programs/ld-address.c:552 #: 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 @@ -1784,7 +1814,7 @@ msgstr "%s: el camp «%s» ha estat declarat més d’una volta" msgid "%s: unknown character in field `%s'" msgstr "%s: el camp «%s» conté un caràcter desconegut" -#: locale/programs/ld-address.c:597 locale/programs/ld-collate.c:3922 +#: locale/programs/ld-address.c:599 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 @@ -1794,10 +1824,10 @@ msgstr "%s: el camp «%s» conté un caràcter desconegut" msgid "%s: incomplete `END' line" msgstr "%s: la línia «END» és incompleta" -#: locale/programs/ld-address.c:607 locale/programs/ld-collate.c:542 +#: locale/programs/ld-address.c:609 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-collate.c:2754 locale/programs/ld-collate.c:4107 #: 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 @@ -1940,7 +1970,7 @@ msgstr "no s’ha definit «UNDEFINED»" msgid "too many errors; giving up" msgstr "hi ha massa errors: s’abandona" -#: locale/programs/ld-collate.c:2659 locale/programs/ld-collate.c:4044 +#: locale/programs/ld-collate.c:2659 locale/programs/ld-collate.c:4046 #, c-format msgid "%s: nested conditionals not supported" msgstr "%s: no es permeten els condicionals niats" @@ -1960,27 +1990,27 @@ msgstr "%s: la definició de «%s» és duplicada" msgid "%s: duplicate declaration of section `%s'" msgstr "%s: la declaració de la secció «%s» és duplicada" -#: locale/programs/ld-collate.c:3027 +#: locale/programs/ld-collate.c:3024 #, c-format msgid "%s: unknown character in collating symbol name" msgstr "%s: el nom del símbol d’ordenació conté un caràcter desconegut" -#: locale/programs/ld-collate.c:3159 +#: locale/programs/ld-collate.c:3153 #, c-format msgid "%s: unknown character in equivalent definition name" msgstr "%s: el nom de la definició equivalent conté un caràcter desconegut" -#: locale/programs/ld-collate.c:3172 +#: locale/programs/ld-collate.c:3164 #, c-format msgid "%s: unknown character in equivalent definition value" msgstr "%s: el valor de la definició equivalent conté un caràcter desconegut" -#: locale/programs/ld-collate.c:3182 +#: locale/programs/ld-collate.c:3174 #, c-format msgid "%s: unknown symbol `%s' in equivalent definition" msgstr "%s: la definició equivalent conté el símbol desconegut «%s»" -#: locale/programs/ld-collate.c:3191 +#: locale/programs/ld-collate.c:3183 msgid "error while adding equivalent collating symbol" msgstr "error en afegir un símbol d’ordenació equivalent" @@ -2060,12 +2090,12 @@ msgstr "%s: no es permet una descripció buida de la categoria" msgid "%s: missing `reorder-sections-end' keyword" msgstr "%s: manca la paraula clau «reorder-sections-end»" -#: locale/programs/ld-collate.c:4077 +#: locale/programs/ld-collate.c:4079 #, c-format msgid "%s: '%s' without matching 'ifdef' or 'ifndef'" msgstr "%s: s’ha trobat un «%s» sense el corresponent «ifdef» o «ifndef»" -#: locale/programs/ld-collate.c:4095 +#: locale/programs/ld-collate.c:4097 #, c-format msgid "%s: 'endif' without matching 'ifdef' or 'ifndef'" msgstr "%s: s’ha trobat un «endif» sense el corresponent «ifdef» o «ifndef»" @@ -2389,7 +2419,7 @@ msgstr "%s: brossa al final de la data de començament de la cadena %Zd del camp msgid "%s: starting date is invalid in string %Zd in `era' field" msgstr "%s: la data de començament de la cadena %Zd del camp «era» no és vàlida" -#: locale/programs/ld-time.c:407 +#: locale/programs/ld-time.c:407 locale/programs/ld-time.c:435 #, c-format msgid "%s: invalid stopping date in string %Zd in `era' field" msgstr "%s: la data d’acabament de la cadena %Zd del camp «era» no és vàlida" @@ -2399,11 +2429,6 @@ msgstr "%s: la data d’acabament de la cadena %Zd del camp «era» no és vàli msgid "%s: garbage at end of stopping date in string %Zd in `era' field" msgstr "%s: brossa al final de la data d’acabament de la cadena %Zd del camp «era»" -#: locale/programs/ld-time.c:435 -#, c-format -msgid "%s: stopping date is invalid in string %Zd in `era' field" -msgstr "%s: la data d’acabament de la cadena %Zd del camp «era» no és vàlida" - #: locale/programs/ld-time.c:444 #, c-format msgid "%s: missing era name in string %Zd in `era' field" @@ -2508,18 +2533,11 @@ msgstr "Mostra els noms de les paraules clau seleccionades." msgid "Print more information" msgstr "Mostra més informació." -# FIXME: Don't use \v. #: 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 "" -"Obté informació específica del locale.\n" -"\n" -"Per a obtenir instruccions sobre com informar d’un error, vegeu\n" -"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgid "Get locale-specific information." +msgstr "Obté informació específica del locale." -#: locale/programs/locale.c:92 +#: locale/programs/locale.c:90 msgid "" "NAME\n" "[-a|-m]" @@ -2527,27 +2545,27 @@ msgstr "" "NOM\n" "[-a | -m]" -#: locale/programs/locale.c:193 +#: locale/programs/locale.c:194 #, c-format msgid "Cannot set LC_CTYPE to default locale" msgstr "no s’ha pogut establir LC_CTYPE al locale per defecte" -#: locale/programs/locale.c:195 +#: locale/programs/locale.c:196 #, c-format msgid "Cannot set LC_MESSAGES to default locale" msgstr "no s’ha pogut establir LC_MESSAGES al locale per defecte" -#: locale/programs/locale.c:208 +#: locale/programs/locale.c:209 #, c-format msgid "Cannot set LC_COLLATE to default locale" msgstr "no s’ha pogut establir LC_COLLATE al locale per defecte" -#: locale/programs/locale.c:224 +#: locale/programs/locale.c:225 #, c-format msgid "Cannot set LC_ALL to default locale" msgstr "no s’ha pogut establir LC_ALL al locale per defecte" -#: locale/programs/locale.c:500 +#: locale/programs/locale.c:518 #, c-format msgid "while preparing output" msgstr "en preparar l’eixida" @@ -2844,7 +2862,7 @@ msgid "cannot create output file `%s' for category `%s'" msgstr "no s’ha pogut crear el fitxer d’eixida «%s» de la categoria «%s»" #: locale/programs/locfile.c:782 -msgid "expect string argument for `copy'" +msgid "expecting string argument for `copy'" msgstr "cal una cadena com a argument de «copy»" #: locale/programs/locfile.c:786 @@ -2963,8 +2981,6 @@ msgid "" "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 "" "Forma d’ús: memusage [OPCIÓ]… PROGRAMA [OPCIÓ_DE_PROGRAMA]…\n" "Fa un perfilat de l’ús de memòria del PROGRAMA.\n" @@ -2982,6 +2998,7 @@ msgstr "" " -V, --version Mostra informació sobre la versió i ix.\n" "\n" "Les opcions següents només es tenen en compte en generar un gràfic d’eixida:\n" +"\n" " -t, --time-based Genera un gràfic lineal en el temps.\n" " -T, --total Inclou un gràfic de l’ús total de memòria.\n" " --title=CADENA Empra la CADENA com a títol del gràfic.\n" @@ -2991,11 +3008,9 @@ msgstr "" "Els arguments obligatoris per a les opcions llargues també ho són per a les\n" "opcions curtes corresponents.\n" "\n" -"Per a obtenir instruccions sobre com informar d’un error, vegeu\n" -"<http://www.gnu.org/software/libc/bugs.html>." # Resumit com la resta. ivb -#: malloc/memusage.sh:99 +#: malloc/memusage.sh:101 msgid "" "Syntax: memusage [--data=FILE] [--progname=NAME] [--png=FILE] [--unbuffered]\n" " [--buffer=SIZE] [--no-timer] [--time-based] [--total]\n" @@ -3003,52 +3018,52 @@ msgid "" " PROGRAM [PROGRAMOPTION]..." msgstr "Sintaxi: memusage [OPCIÓ]… PROGRAMA [OPCIÓ_DE_PROGRAMA]…" -#: malloc/memusage.sh:191 +#: malloc/memusage.sh:193 msgid "memusage: option \\`${1##*=}' is ambiguous" msgstr "memusage: l’opció «${1##*=}» és ambígua" -#: malloc/memusage.sh:200 +#: malloc/memusage.sh:202 msgid "memusage: unrecognized option \\`$1'" msgstr "memusage: l’opció «$1» no és reconeguda" -#: malloc/memusage.sh:213 +#: malloc/memusage.sh:215 msgid "No program name given" msgstr "No s’ha indicat un nom de programa" # Més ajudes. ivb -#: malloc/memusagestat.c:54 +#: malloc/memusagestat.c:57 msgid "Name output file" msgstr "Especifica el fitxer d’eixida." -#: malloc/memusagestat.c:55 +#: malloc/memusagestat.c:58 msgid "Title string used in output graphic" msgstr "Cadena amb el títol a emprar al gràfic d’eixida." -#: malloc/memusagestat.c:56 +#: malloc/memusagestat.c:59 msgid "Generate output linear to time (default is linear to number of function calls)" msgstr "Genera una eixida lineal respecte el temps (per defecte és lineal respecte el nombre de crides a funció)." -#: malloc/memusagestat.c:58 +#: malloc/memusagestat.c:61 msgid "Also draw graph for total memory consumption" msgstr "També mostra un gràfic del consum total de memòria." -#: malloc/memusagestat.c:59 +#: malloc/memusagestat.c:62 msgid "Make output graphic VALUE pixels wide" msgstr "Fa el gràfic d’eixida de VALOR píxels d’amplada." -#: malloc/memusagestat.c:60 +#: malloc/memusagestat.c:63 msgid "Make output graphic VALUE pixels high" msgstr "Fa el gràfic d’eixida de VALOR píxels d’altura." -#: malloc/memusagestat.c:65 +#: malloc/memusagestat.c:68 msgid "Generate graphic from memory profiling data" msgstr "Genera un gràfic amb les dades de perfilat de memòria." -#: malloc/memusagestat.c:68 +#: malloc/memusagestat.c:71 msgid "DATAFILE [OUTFILE]" msgstr "FITXER_DADES [FITXER_EIXIDA]" -#: misc/error.c:118 timezone/zic.c:417 +#: misc/error.c:118 msgid "Unknown system error" msgstr "error desconegut del sistema" @@ -3056,7 +3071,7 @@ msgstr "error desconegut del sistema" msgid "unable to free arguments" msgstr "no s’han pogut alliberar els arguments" -#: nis/nis_error.h:1 nis/ypclnt.c:822 nis/ypclnt.c:910 posix/regcomp.c:132 +#: nis/nis_error.h:1 nis/ypclnt.c:833 nis/ypclnt.c:921 posix/regcomp.c:133 #: sysdeps/gnu/errlist.c:20 msgid "Success" msgstr "Èxit" @@ -3098,7 +3113,7 @@ msgid "First/next chain broken" msgstr "S’ha trencat la cadena de primer/següent" #. 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 +#: nis/nis_error.h:11 nis/ypclnt.c:878 sysdeps/gnu/errlist.c:157 msgid "Permission denied" msgstr "S’ha denegat el permís" @@ -3618,219 +3633,241 @@ msgstr "netname2user: l’entrada LOCAL de «%s» al directori «%s» no és ún msgid "netname2user: should not have uid 0" msgstr "netname2user: no ha de tenir l’UID 0" -#: nis/ypclnt.c:825 +#: nis/ypclnt.c:836 msgid "Request arguments bad" msgstr "Els arguments de la petició són incorrectes" -#: nis/ypclnt.c:828 +#: nis/ypclnt.c:839 msgid "RPC failure on NIS operation" msgstr "El procediment RPC ha fallat en una operació NIS" -#: nis/ypclnt.c:831 +#: nis/ypclnt.c:842 msgid "Can't bind to server which serves this domain" msgstr "No s’ha pogut enllaçar amb el servidor d’aquest domini" -#: nis/ypclnt.c:834 +#: nis/ypclnt.c:845 msgid "No such map in server's domain" msgstr "El mapa no és al domini del servidor" -#: nis/ypclnt.c:837 +#: nis/ypclnt.c:848 msgid "No such key in map" msgstr "La clau no és al mapa" -#: nis/ypclnt.c:840 +#: nis/ypclnt.c:851 msgid "Internal NIS error" msgstr "Error intern de NIS" -#: nis/ypclnt.c:843 +#: nis/ypclnt.c:854 msgid "Local resource allocation failure" msgstr "No s’ha pogut assignar un recurs local" -#: nis/ypclnt.c:846 +#: nis/ypclnt.c:857 msgid "No more records in map database" msgstr "No hi ha més registres a la base de dades del mapa" -#: nis/ypclnt.c:849 +#: nis/ypclnt.c:860 msgid "Can't communicate with portmapper" msgstr "No s’ha pogut comunicar amb el mapador de ports" -#: nis/ypclnt.c:852 +#: nis/ypclnt.c:863 msgid "Can't communicate with ypbind" msgstr "No s’ha pogut comunicar amb «ypbind»" -#: nis/ypclnt.c:855 +#: nis/ypclnt.c:866 msgid "Can't communicate with ypserv" msgstr "No s’ha pogut comunicar amb «ypserv»" -#: nis/ypclnt.c:858 +#: nis/ypclnt.c:869 msgid "Local domain name not set" msgstr "No s’ha establert nom del domini local" -#: nis/ypclnt.c:861 +#: nis/ypclnt.c:872 msgid "NIS map database is bad" msgstr "La base de dades de mapes NIS és feta malbé" -#: nis/ypclnt.c:864 +#: nis/ypclnt.c:875 msgid "NIS client/server version mismatch - can't supply service" msgstr "Les versions de client i servidor NIS difereixen; no es pot donar servei" -#: nis/ypclnt.c:870 +#: nis/ypclnt.c:881 msgid "Database is busy" msgstr "La base de dades es troba ocupada" -#: nis/ypclnt.c:873 +#: nis/ypclnt.c:884 msgid "Unknown NIS error code" msgstr "Codi d’error desconegut de NIS" -#: nis/ypclnt.c:913 +#: nis/ypclnt.c:924 msgid "Internal ypbind error" msgstr "Error intern d’«ypbind»" -#: nis/ypclnt.c:916 +#: nis/ypclnt.c:927 msgid "Domain not bound" msgstr "El domini no és vinculat" -#: nis/ypclnt.c:919 +#: nis/ypclnt.c:930 msgid "System resource allocation failure" msgstr "No s’han pogut assignar recursos del sistema" -#: nis/ypclnt.c:922 +#: nis/ypclnt.c:933 msgid "Unknown ypbind error" msgstr "Error desconegut d’«ypbind»" -#: nis/ypclnt.c:963 +#: nis/ypclnt.c:974 msgid "yp_update: cannot convert host to netname\n" msgstr "yp_update: no s’ha pogut convertir el nom d’estació a nom de xarxa\n" -#: nis/ypclnt.c:981 +#: nis/ypclnt.c:992 msgid "yp_update: cannot get server address\n" msgstr "yp_update: no s’ha pogut obtenir l’adreça del servidor\n" # El nom de la base de dades s’usa més a sovint que la descripció. ivb -#: nscd/aicache.c:77 nscd/hstcache.c:468 +#: nscd/aicache.c:82 nscd/hstcache.c:481 #, c-format msgid "Haven't found \"%s\" in hosts cache!" msgstr "no s’ha trobat «%s» a la memòria cau de «hosts»" # El nom de la base de dades s’usa més a sovint que la descripció. ivb -#: nscd/aicache.c:79 nscd/hstcache.c:470 +#: nscd/aicache.c:84 nscd/hstcache.c:483 #, c-format msgid "Reloading \"%s\" in hosts cache!" msgstr "es torna a carregar «%s» a la memòria cau de «hosts»" # La 2a. és de l’estil de «GETPWBYNAME», la 3a. com «passwd». ivb # Al darrere pot anar « (first)» o no. ivb -#: nscd/cache.c:146 +#: nscd/cache.c:150 #, c-format msgid "add new entry \"%s\" of type %s for %s to cache%s" msgstr "s’afegeix una nova entrada «%s» de tipus %s a la memòria cau de «%s»%s" # FIXME: language-dependent construct ivb # Supose que vol dir «abans». ivb -#: nscd/cache.c:148 +#: nscd/cache.c:152 msgid " (first)" msgstr " (primer)" -#: nscd/cache.c:256 nscd/connections.c:810 +#: nscd/cache.c:286 nscd/connections.c:866 #, c-format msgid "cannot stat() file `%s': %s" msgstr "ha fallat stat() sobre el fitxer «%s»: %s" -#: nscd/cache.c:285 +#: nscd/cache.c:328 #, c-format msgid "pruning %s cache; time %ld" msgstr "neteja de la memòria cau de «%s», hora %ld" # La 2a. és de l’estil de «GETPWBYNAME». ivb -#: nscd/cache.c:312 +#: nscd/cache.c:357 #, c-format msgid "considering %s entry \"%s\", timeout %<PRIu64>" msgstr "es considera l’entrada %s «%s», expiració %<PRIu64>" -#: nscd/connections.c:521 nscd/connections.c:533 nscd/connections.c:545 -#: nscd/connections.c:564 +#: nscd/connections.c:570 #, c-format msgid "invalid persistent database file \"%s\": %s" msgstr "el fitxer de base de dades persistent «%s» no és vàlid: %s" -#: nscd/connections.c:535 +#: nscd/connections.c:578 +msgid "uninitialized header" +msgstr "la capçalera no es troba iniciada" + +#: nscd/connections.c:583 msgid "header size does not match" msgstr "la mida de la capçalera no concorda" -#: nscd/connections.c:547 +#: nscd/connections.c:593 msgid "file size does not match" msgstr "la mida del fitxer no concorda" -#: nscd/connections.c:566 +#: nscd/connections.c:610 msgid "verification failed" msgstr "la verificació ha fallat" -#: nscd/connections.c:580 +#: nscd/connections.c:624 #, c-format msgid "suggested size of table for database %s larger than the persistent database's table" msgstr "la mida de taula suggerida per a la base de dades «%s» és major que la de la base de dades persistent" -#: nscd/connections.c:591 nscd/connections.c:673 +#: nscd/connections.c:635 nscd/connections.c:720 #, c-format msgid "cannot create read-only descriptor for \"%s\"; no mmap" msgstr "no s’ha pogut crear un descriptor de només lectura per a «%s»; no s’emprarà mmap()" -#: nscd/connections.c:652 +#: nscd/connections.c:651 +#, c-format +msgid "cannot access '%s'" +msgstr "no s’ha pogut accedir a «%s»" + +#: nscd/connections.c:699 #, c-format msgid "database for %s corrupted or simultaneously used; remove %s manually if necessary and restart" msgstr "la base de dades de «%s» està corrupta o sent emprada concurrentment; elimineu «%s» manualment si cal i reinicieu" -#: nscd/connections.c:659 +#: nscd/connections.c:706 #, c-format msgid "cannot create %s; no persistent database used" msgstr "no s’ha pogut crear «%s»; no s’emprarà una base de dades persistent" -#: nscd/connections.c:662 +#: nscd/connections.c:709 #, c-format msgid "cannot create %s; no sharing possible" msgstr "no s’ha pogut crear «%s»; no es podrà compartir" -#: nscd/connections.c:733 +#: nscd/connections.c:780 #, c-format msgid "cannot write to database file %s: %s" msgstr "no s’ha pogut escriure al fitxer de base de dades «%s»: %s" -#: nscd/connections.c:772 +#: nscd/connections.c:819 #, c-format msgid "cannot set socket to close on exec: %s; disabling paranoia mode" msgstr "no s’ha pogut indicar que el connector es tanque en fer exec(): %s; s’inhabilita el mode paranoic" -#: nscd/connections.c:823 +#: nscd/connections.c:902 #, c-format msgid "cannot open socket: %s" msgstr "no s’ha pogut obrir el connector: %s" -#: nscd/connections.c:840 +#: nscd/connections.c:922 #, c-format msgid "cannot change socket to nonblocking mode: %s" msgstr "no s’ha pogut canviar el connector al mode no blocador: %s" -#: nscd/connections.c:848 +#: nscd/connections.c:930 #, c-format msgid "cannot set socket to close on exec: %s" msgstr "no s’ha pogut indicar que el connector es tanque en fer exec(): %s" -#: nscd/connections.c:859 +#: nscd/connections.c:943 #, c-format msgid "cannot enable socket to accept connections: %s" msgstr "no s’ha pogut habilitar el connector per a acceptar connexions: %s" -#: nscd/connections.c:955 +#: nscd/connections.c:1043 #, c-format msgid "provide access to FD %d, for %s" msgstr "es proporciona accés al descriptor de fitxer %d, per a «%s»" -#: nscd/connections.c:967 +#: nscd/connections.c:1055 #, c-format msgid "cannot handle old request version %d; current version is %d" msgstr "no s’ha pogut atendre la petició amb versió antiga %d; la versió actual és %d" -#: nscd/connections.c:1009 nscd/connections.c:1062 +#: nscd/connections.c:1077 +#, c-format +msgid "request from %ld not handled due to missing permission" +msgstr "no s’atén la petició de %ld per manca de permissos" + +#: nscd/connections.c:1082 +#, c-format +msgid "request from '%s' [%ld] not handled due to missing permission" +msgstr "no s’atén la petició de «%s» (%ld) per manca de permissos" + +#: nscd/connections.c:1087 +msgid "request not handled due to missing permission" +msgstr "no s’atén la petició per manca de permissos" + +#: nscd/connections.c:1125 nscd/connections.c:1178 #, c-format msgid "cannot write result: %s" msgstr "no s’ha pogut escriure el resultat: %s" @@ -3840,228 +3877,245 @@ msgstr "no s’ha pogut escriure el resultat: %s" # ivb dimoni «nscd» per consultar la memòria cau o invalidar-la. Per # ivb això faig servir «programa de control» (com «ndc» amb «named» o # ivb «chronyc» amb «chronyd»). -#: nscd/connections.c:1145 +#: nscd/connections.c:1261 #, c-format msgid "error getting caller's id: %s" msgstr "error en obtenir l’identificador del programa de control: %s" -#: nscd/connections.c:1204 +#: nscd/connections.c:1320 #, c-format msgid "cannot open /proc/self/cmdline: %s; disabling paranoia mode" msgstr "no s’ha pogut obrir «/proc/self/cmdline»: %s; s’inhabilita el mode paranoic" -#: nscd/connections.c:1218 +#: nscd/connections.c:1334 #, c-format msgid "cannot read /proc/self/cmdline: %s; disabling paranoia mode" msgstr "no s’ha pogut llegir «/proc/self/cmdline»: %s; s’inhabilita el mode paranoic" -#: nscd/connections.c:1258 +#: nscd/connections.c:1374 #, c-format msgid "cannot change to old UID: %s; disabling paranoia mode" msgstr "no s’ha pogut tornar a l’UID vell: %s; s’inhabilita el mode paranoic" -#: nscd/connections.c:1268 +#: nscd/connections.c:1384 #, c-format msgid "cannot change to old GID: %s; disabling paranoia mode" msgstr "no s’ha pogut tornar al GID vell: %s; s’inhabilita el mode paranoic" -#: nscd/connections.c:1281 +#: nscd/connections.c:1397 #, c-format msgid "cannot change to old working directory: %s; disabling paranoia mode" msgstr "no s’ha pogut tornar al directori vell de treball: %s; s’inhabilita el mode paranoic" -#: nscd/connections.c:1310 +#: nscd/connections.c:1429 #, c-format msgid "re-exec failed: %s; disabling paranoia mode" msgstr "ha fallat la reexecució: %s; s’inhabilita el mode paranoic" -#: nscd/connections.c:1319 +#: nscd/connections.c:1438 #, c-format msgid "cannot change current working directory to \"/\": %s" msgstr "no s’ha pogut canviar el directori de treball a «/»: %s" -#: nscd/connections.c:1437 +#: nscd/connections.c:1644 #, c-format msgid "short read while reading request: %s" msgstr "lectura incompleta en llegir la petició: %s" -#: nscd/connections.c:1468 +#: nscd/connections.c:1677 #, c-format msgid "key length in request too long: %d" msgstr "la longitud de la clau de la petició és massa gran: %d" -#: nscd/connections.c:1481 +#: nscd/connections.c:1690 #, c-format msgid "short read while reading request key: %s" msgstr "lectura incompleta en llegir la clau de la petició: %s" -#: nscd/connections.c:1490 +#: nscd/connections.c:1699 #, c-format msgid "handle_request: request received (Version = %d) from PID %ld" msgstr "handle_request: s’ha rebut una petició (amb versió %d) del PID %ld" -#: nscd/connections.c:1495 +#: nscd/connections.c:1704 #, c-format msgid "handle_request: request received (Version = %d)" msgstr "handle_request: s’ha rebut una petició (amb versió %d)" -#: nscd/connections.c:1856 +#: nscd/connections.c:1903 nscd/connections.c:2101 #, c-format -msgid "could only start %d threads; terminating" -msgstr "no s’han pogut iniciar %d fils d’execució; s’està finalitzant" +msgid "disabled inotify after read error %d" +msgstr "s’inhabilita «inotify» per l’error de lectura amb codi %d" + +#: nscd/connections.c:2230 +msgid "could not initialize conditional variable" +msgstr "no s’ha pogut iniciar la variable condicional" -#: 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 +#: nscd/connections.c:2238 +msgid "could not start clean-up thread; terminating" +msgstr "no s’ha pogut iniciar el fil d’execució de neteja; s’està finalitzant" + +#: nscd/connections.c:2252 +msgid "could not start any worker thread; terminating" +msgstr "no s’ha pogut iniciar cap fil d’execució treballador; s’està finalitzant" + +#: nscd/connections.c:2303 nscd/connections.c:2304 nscd/connections.c:2321 +#: nscd/connections.c:2330 nscd/connections.c:2348 nscd/connections.c:2359 +#: nscd/connections.c:2370 #, c-format msgid "Failed to run nscd as user '%s'" msgstr "no s’ha pogut executar «nscd» com a l’usuari «%s»" -#: nscd/connections.c:1923 +#: nscd/connections.c:2322 #, c-format msgid "initial getgrouplist failed" msgstr "ha fallat getgrouplist() inicial" -#: nscd/connections.c:1932 +#: nscd/connections.c:2331 #, c-format msgid "getgrouplist failed" msgstr "ha fallat getgrouplist()" -#: nscd/connections.c:1950 +#: nscd/connections.c:2349 #, c-format msgid "setgroups failed" msgstr "ha fallat setgroups()" -#: nscd/grpcache.c:402 nscd/hstcache.c:418 nscd/initgrcache.c:412 -#: nscd/pwdcache.c:397 nscd/servicescache.c:343 +#: nscd/grpcache.c:395 nscd/hstcache.c:430 nscd/initgrcache.c:416 +#: nscd/pwdcache.c:400 nscd/servicescache.c:343 #, c-format msgid "short write in %s: %s" msgstr "escriptura incompleta a «%s»: %s" # El nom de la base de dades s’usa més a sovint que la descripció. ivb -#: nscd/grpcache.c:445 nscd/initgrcache.c:78 +#: nscd/grpcache.c:438 nscd/initgrcache.c:78 #, c-format msgid "Haven't found \"%s\" in group cache!" msgstr "no s’ha trobat «%s» a la memòria cau de «group»" # El nom de la base de dades s’usa més a sovint que la descripció. ivb -#: nscd/grpcache.c:447 nscd/initgrcache.c:80 +#: nscd/grpcache.c:440 nscd/initgrcache.c:80 #, c-format msgid "Reloading \"%s\" in group cache!" msgstr "es torna a carregar «%s» a la memòria cau de «group»" -#: nscd/grpcache.c:524 +#: nscd/grpcache.c:517 #, c-format msgid "Invalid numeric gid \"%s\"!" msgstr "«%s» no és un identificador numèric de grup vàlid" -#: nscd/mem.c:383 +#: nscd/mem.c:457 #, c-format msgid "freed %zu bytes in %s cache" msgstr "s’han alliberat %zu octets de la memòria cau de «%s»" -#: nscd/mem.c:512 +#: nscd/mem.c:594 #, c-format msgid "no more memory for database '%s'" msgstr "no resta memòria per a la base de dades «%s»" # Més ajudes. ivb -#: nscd/nscd.c:98 +#: nscd/nscd.c:101 msgid "Read configuration data from NAME" msgstr "Llegeix les dades de configuració de NOM." -#: nscd/nscd.c:100 +#: nscd/nscd.c:103 msgid "Do not fork and display messages on the current tty" msgstr "No fa fork() i mostra els missatges al terminal actual." # ivb (2001/10/30) # ivb Es refereix al _nombre_ de fils a llançar. -#: nscd/nscd.c:101 +#: nscd/nscd.c:104 msgid "NUMBER" msgstr "NOMBRE" -#: nscd/nscd.c:101 +#: nscd/nscd.c:104 msgid "Start NUMBER threads" msgstr "Llança NOMBRE fils d’exeució." -#: nscd/nscd.c:102 +#: nscd/nscd.c:105 msgid "Shut the server down" msgstr "Finalitza el servidor." -#: nscd/nscd.c:103 -msgid "Print current configuration statistic" +#: nscd/nscd.c:106 +msgid "Print current configuration statistics" msgstr "Mostra estadístiques de la configuració actual." -#: nscd/nscd.c:104 +#: nscd/nscd.c:107 msgid "TABLE" msgstr "TAULA" -#: nscd/nscd.c:105 +#: nscd/nscd.c:108 msgid "Invalidate the specified cache" msgstr "Invalida la memòria cau especificada." -#: nscd/nscd.c:106 +#: nscd/nscd.c:109 msgid "TABLE,yes" msgstr "TAULA,yes" -#: nscd/nscd.c:107 +#: nscd/nscd.c:110 msgid "Use separate cache for each user" msgstr "Empra una memòria cau diferent per a cada usuari." -#: nscd/nscd.c:112 +#: nscd/nscd.c:115 msgid "Name Service Cache Daemon." msgstr "Dimoni de memòria cau del servei de noms." -#: nscd/nscd.c:144 nss/getent.c:858 nss/makedb.c:123 +#: nscd/nscd.c:147 nss/getent.c:876 nss/makedb.c:123 #, c-format msgid "wrong number of arguments" msgstr "el nombre d’arguments és incorrecte" -#: nscd/nscd.c:154 +#: nscd/nscd.c:157 #, c-format msgid "failure while reading configuration file; this is fatal" msgstr "error en llegir el fitxer de configuració; açò és fatal" -#: nscd/nscd.c:163 +#: nscd/nscd.c:166 #, c-format msgid "already running" msgstr "ja es troba en marxa" -#: nscd/nscd.c:178 nscd/nscd.c:233 +#: nscd/nscd.c:181 nscd/nscd.c:236 #, c-format msgid "cannot fork" msgstr "ha fallat fork()" -#: nscd/nscd.c:241 +#: nscd/nscd.c:244 #, c-format msgid "cannot change current working directory to \"/\"" msgstr "no s’ha pogut canviar el directori de treball a «/»" -#: nscd/nscd.c:249 +#: nscd/nscd.c:252 msgid "Could not create log file" msgstr "no s’ha pogut crear el fitxer de registre" -#: nscd/nscd.c:302 nscd/nscd.c:327 nscd/nscd_stat.c:172 +#: nscd/nscd.c:305 nscd/nscd.c:330 nscd/nscd_stat.c:172 #, c-format msgid "Only root is allowed to use this option!" msgstr "només root pot emprar aquesta opció" -#: nscd/nscd.c:364 nscd/nscd_stat.c:191 +#: nscd/nscd.c:345 +#, c-format +msgid "'%s' is not a known database" +msgstr "«%s» no és una base de dades coneguda" + +#: nscd/nscd.c:370 nscd/nscd_stat.c:191 #, c-format msgid "write incomplete" msgstr "escriptura incompleta" -#: nscd/nscd.c:375 +#: nscd/nscd.c:381 #, c-format msgid "cannot read invalidate ACK" msgstr "no s’ha pogut llegir l’ACK d’invalidació" -#: nscd/nscd.c:381 +#: nscd/nscd.c:387 #, c-format msgid "invalidation failed" msgstr "la invalidació ha fallat" -#: nscd/nscd.c:391 +#: nscd/nscd.c:397 #, c-format msgid "secure services not implemented anymore" msgstr "ja no s’implementen els serveis segurs" @@ -4076,37 +4130,37 @@ msgstr "la base de dades «%s» no s’accepta" msgid "Parse error: %s" msgstr "error d’anàlisi: %s" -#: nscd/nscd_conf.c:193 +#: nscd/nscd_conf.c:194 #, c-format msgid "Must specify user name for server-user option" msgstr "cal especificar un nom d’usuari per a l’opció «server-user»" -#: nscd/nscd_conf.c:200 +#: nscd/nscd_conf.c:201 #, c-format msgid "Must specify user name for stat-user option" msgstr "cal especificar un nom d’usuari per a l’opció «stat-user»" -#: nscd/nscd_conf.c:244 +#: nscd/nscd_conf.c:245 #, c-format msgid "invalid value for 'reload-count': %u" msgstr "el valor de «reload-count» no és vàlid: %u" -#: nscd/nscd_conf.c:259 +#: nscd/nscd_conf.c:260 #, c-format msgid "Must specify value for restart-interval option" msgstr "cal especificar un valor per a l’opció «restart-interval»" -#: nscd/nscd_conf.c:273 +#: nscd/nscd_conf.c:274 #, c-format msgid "Unknown option: %s %s %s" msgstr "l’opció no és coneguda: %s %s %s" -#: nscd/nscd_conf.c:286 +#: nscd/nscd_conf.c:287 #, c-format msgid "cannot get current working directory: %s; disabling paranoia mode" msgstr "no s’ha pogut obtenir el directori de treball actual: %s; s’inhabilita el mode paranoic" -#: nscd/nscd_conf.c:306 +#: nscd/nscd_conf.c:307 #, c-format msgid "maximum file size for %s database too small" msgstr "la mida màxima de fitxer per a la base de dades «%s» és massa menuda" @@ -4239,18 +4293,18 @@ msgstr "" "%15s comprovar «/etc/%s» per si hi ha hagut canvis?\n" # El nom de la base de dades s’usa més a sovint que la descripció. ivb -#: nscd/pwdcache.c:440 +#: nscd/pwdcache.c:443 #, c-format msgid "Haven't found \"%s\" in password cache!" msgstr "no s’ha trobat «%s» a la memòria cau de «passwd»" # El nom de la base de dades s’usa més a sovint que la descripció. ivb -#: nscd/pwdcache.c:442 +#: nscd/pwdcache.c:445 #, c-format msgid "Reloading \"%s\" in password cache!" msgstr "es torna a carregar «%s» a la memòria cau de «passwd»" -#: nscd/pwdcache.c:520 +#: nscd/pwdcache.c:523 #, c-format msgid "Invalid numeric uid \"%s\"!" msgstr "«%s» no és un identificador numèric d’usuari vàlid" @@ -4326,7 +4380,11 @@ msgstr "error en obtenir el context d’«nscd»" msgid "Error getting sid from context" msgstr "error en obtenir el SID del context" -#: nscd/selinux.c:399 +#: nscd/selinux.c:374 +msgid "compile-time support for database policy missing" +msgstr "no s’ha compiŀlat la compatibilitat amb polítiques de bases de dades" + +#: nscd/selinux.c:407 #, c-format msgid "" "\n" @@ -4374,32 +4432,25 @@ msgstr "BASE_DE_DADES [CLAU…]" msgid "Service configuration to be used" msgstr "Configuració a emprar del servei." -# FIXME: Don't use \v. #: 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 "" -"Obté entrades de les bases de dades d’administració.\n" -"\n" -"Per a obtenir instruccions sobre com informar d’un error, vegeu\n" -"<http://www.gnu.org/software/libc/bugs.html>.\n" +msgid "Get entries from administrative database." +msgstr "Obté entrades de les bases de dades d’administració." -#: nss/getent.c:145 nss/getent.c:394 +#: nss/getent.c:143 nss/getent.c:408 #, c-format msgid "Enumeration not supported on %s\n" msgstr "no es permet l’enumeració sobre «%s»\n" -#: nss/getent.c:782 +#: nss/getent.c:794 #, c-format msgid "Unknown database name" msgstr "el nom de la base de dades no és conegut" -#: nss/getent.c:808 +#: nss/getent.c:820 msgid "Supported databases:\n" msgstr "Bases de dades acceptades:\n" -#: nss/getent.c:868 +#: nss/getent.c:886 #, c-format msgid "Unknown database: %s\n" msgstr "la base de dades no és coneguda: %s\n" @@ -4474,153 +4525,167 @@ msgstr "Forma d’ús: %s [-v ESPECIFICACIÓ] NOM_DE_VARIABLE [CAMÍ]\n" msgid " %s -a [pathname]\n" msgstr " %s -a [CAMÍ]\n" -#: posix/getconf.c:1067 +#: posix/getconf.c:1023 +#, c-format +msgid "" +"Usage: getconf [-v SPEC] VAR\n" +" or: getconf [-v SPEC] PATH_VAR PATH\n" +"\n" +"Get the configuration value for variable VAR, or for variable PATH_VAR\n" +"for path PATH. If SPEC is given, give values for compilation\n" +"environment SPEC.\n" +"\n" +msgstr "" +"Forma d’ús: getconf [-v ESPECIFICACIÓ] VARIABLE\n" +" o bé: getconf [-v ESPECIFICACIÓ] VARIABLE_DE_CAMÍ CAMÍ\n" +"\n" +"Obté el valor de configuració per a la VARIABLE, o per a la VARIABLE_DE_CAMÍ\n" +"donat un CAMÍ. Si s’indica una ESPECIFICACIÓ, mostra els valors per a l’entorn\n" +"de compiŀlació indicat.\n" +"\n" + +#: posix/getconf.c:1081 #, c-format msgid "unknown specification \"%s\"" msgstr "l’especificació «%s» no és coneguda" -#: posix/getconf.c:1095 +#: posix/getconf.c:1109 #, c-format msgid "Couldn't execute %s" msgstr "no s’ha pogut executar «%s»" # ivb (2001/11/01) # ivb Es refereix a variables de configuració -> femení. -#: posix/getconf.c:1135 posix/getconf.c:1151 +#: posix/getconf.c:1149 posix/getconf.c:1165 msgid "undefined" msgstr "indefinida" -#: posix/getconf.c:1173 +#: posix/getconf.c:1187 #, c-format msgid "Unrecognized variable `%s'" msgstr "la variable «%s» no és reconeguda" -#: posix/getopt.c:571 posix/getopt.c:587 +#: posix/getopt.c:570 posix/getopt.c:586 #, c-format msgid "%s: option '%s' is ambiguous\n" msgstr "%s: l’opció «%s» és ambígua\n" -#: posix/getopt.c:620 posix/getopt.c:624 +#: posix/getopt.c:619 posix/getopt.c:623 #, c-format msgid "%s: option '--%s' doesn't allow an argument\n" msgstr "%s: l’opció «--%s» no admet arguments\n" -#: posix/getopt.c:633 posix/getopt.c:638 +#: posix/getopt.c:632 posix/getopt.c:637 #, c-format msgid "%s: option '%c%s' doesn't allow an argument\n" msgstr "%s: l’opció «%c%s» no admet arguments\n" -#: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016 -#: posix/getopt.c:1035 +#: posix/getopt.c:680 posix/getopt.c:699 posix/getopt.c:1002 +#: posix/getopt.c:1021 #, c-format msgid "%s: option '%s' requires an argument\n" msgstr "%s: l’opció «%s» necessita un argument\n" -#: posix/getopt.c:738 posix/getopt.c:741 +#: posix/getopt.c:737 posix/getopt.c:740 #, c-format msgid "%s: unrecognized option '--%s'\n" msgstr "%s: l’opció «--%s» no és reconeguda\n" -#: posix/getopt.c:749 posix/getopt.c:752 +#: posix/getopt.c:748 posix/getopt.c:751 #, c-format msgid "%s: unrecognized option '%c%s'\n" msgstr "%s: l’opció «%c%s» no és reconeguda\n" -#: posix/getopt.c:804 posix/getopt.c:807 -#, c-format -msgid "%s: illegal option -- '%c'\n" -msgstr "%s: no es permet l’opció «%c»\n" - -#: posix/getopt.c:813 posix/getopt.c:816 +#: posix/getopt.c:800 posix/getopt.c:803 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: l’opció «%c» no és vàlida\n" -#: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088 -#: posix/getopt.c:1106 +#: posix/getopt.c:853 posix/getopt.c:870 posix/getopt.c:1073 +#: posix/getopt.c:1091 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: l’opció «%c» necessita un argument\n" -#: posix/getopt.c:937 posix/getopt.c:953 +#: posix/getopt.c:923 posix/getopt.c:939 #, c-format msgid "%s: option '-W %s' is ambiguous\n" msgstr "%s: l’opció «-W %s» és ambígua\n" -#: posix/getopt.c:977 posix/getopt.c:995 +#: posix/getopt.c:963 posix/getopt.c:981 #, c-format msgid "%s: option '-W %s' doesn't allow an argument\n" msgstr "%s: l’opció «-W %s» no admet arguments\n" -#: posix/regcomp.c:135 +#: posix/regcomp.c:136 msgid "No match" msgstr "No hi ha cap coincidència" -#: posix/regcomp.c:138 +#: posix/regcomp.c:139 msgid "Invalid regular expression" msgstr "L’expressió regular no és vàlida" -#: posix/regcomp.c:141 +#: posix/regcomp.c:142 msgid "Invalid collation character" msgstr "El caràcter d’ordenació no és vàlid" -#: posix/regcomp.c:144 +#: posix/regcomp.c:145 msgid "Invalid character class name" msgstr "El nom de la classe de caràcters no és vàlid" -#: posix/regcomp.c:147 +#: posix/regcomp.c:148 msgid "Trailing backslash" msgstr "Hi ha una barra invertida sobrant al final" -#: posix/regcomp.c:150 +#: posix/regcomp.c:151 msgid "Invalid back reference" msgstr "La referència cap enrere no és vàlida" -#: posix/regcomp.c:153 +#: posix/regcomp.c:154 msgid "Unmatched [ or [^" msgstr "«[» o «[^» desaparellat" -#: posix/regcomp.c:156 +#: posix/regcomp.c:157 msgid "Unmatched ( or \\(" msgstr "«(» o «\\(» desaparellat" -#: posix/regcomp.c:159 +#: posix/regcomp.c:160 msgid "Unmatched \\{" msgstr "«\\{» desaparellat" -#: posix/regcomp.c:162 +#: posix/regcomp.c:163 msgid "Invalid content of \\{\\}" msgstr "El contingut de «\\{\\}» no és vàlid" -#: posix/regcomp.c:165 +#: posix/regcomp.c:166 msgid "Invalid range end" msgstr "El final del rang no és vàlid" -#: posix/regcomp.c:168 +#: posix/regcomp.c:169 msgid "Memory exhausted" msgstr "La memòria s’ha exhaurit" -#: posix/regcomp.c:171 +#: posix/regcomp.c:172 msgid "Invalid preceding regular expression" msgstr "L’expressió regular precedent és incorrecta" -#: posix/regcomp.c:174 +#: posix/regcomp.c:175 msgid "Premature end of regular expression" msgstr "Fi prematura de l’expressió regular" -#: posix/regcomp.c:177 +#: posix/regcomp.c:178 msgid "Regular expression too big" msgstr "L’expressió regular és massa llarga" -#: posix/regcomp.c:180 +#: posix/regcomp.c:181 msgid "Unmatched ) or \\)" msgstr "«)» o «\\)» desaparellat" -#: posix/regcomp.c:660 +#: posix/regcomp.c:681 msgid "No previous regular expression" msgstr "No hi ha expressió regular prèvia" -#: posix/wordexp.c:1798 +#: posix/wordexp.c:1832 msgid "parameter null or not set" msgstr "el paràmetre és nul o no s’ha establert" @@ -4707,9 +4772,13 @@ msgstr "Senyal de temps real %d" msgid "Unknown signal %d" msgstr "Senyal desconegut %d" -#: sunrpc/auth_unix.c:114 -msgid "authunix_create: out of memory\n" -msgstr "authunix_create: no resta memòria\n" +#: sunrpc/auth_unix.c:114 sunrpc/clnt_tcp.c:131 sunrpc/clnt_udp.c:143 +#: sunrpc/clnt_unix.c:128 sunrpc/svc_tcp.c:179 sunrpc/svc_tcp.c:218 +#: sunrpc/svc_udp.c:153 sunrpc/svc_unix.c:176 sunrpc/svc_unix.c:215 +#: sunrpc/xdr.c:566 sunrpc/xdr.c:718 sunrpc/xdr_array.c:106 +#: sunrpc/xdr_rec.c:156 sunrpc/xdr_ref.c:85 +msgid "out of memory\n" +msgstr "no resta memòria\n" # ivb (2001/11/01) # ivb D'acord amb un comentari del propi fitxer. @@ -4717,125 +4786,126 @@ msgstr "authunix_create: no resta memòria\n" msgid "auth_unix.c: Fatal marshalling problem" msgstr "auth_none.c: error fatal de preserialització" -#: sunrpc/clnt_perr.c:118 sunrpc/clnt_perr.c:139 +#: sunrpc/clnt_perr.c:105 sunrpc/clnt_perr.c:121 #, c-format -msgid "; low version = %lu, high version = %lu" -msgstr "; versió menor = %lu, versió major = %lu" +msgid "%s: %s; low version = %lu, high version = %lu" +msgstr "%s: %s; versió menor = %lu, versió major = %lu" -#: sunrpc/clnt_perr.c:125 -msgid "; why = " -msgstr "; causa = " +#: sunrpc/clnt_perr.c:112 +#, c-format +msgid "%s: %s; why = %s\n" +msgstr "%s: %s; causa = %s\n" -#: sunrpc/clnt_perr.c:132 +#: sunrpc/clnt_perr.c:114 #, c-format -msgid "(unknown authentication error - %d)" -msgstr "(error desconegut d’autenticació: %d)" +msgid "%s: %s; why = (unknown authentication error - %d)\n" +msgstr "%s: %s; causa = (error desconegut d’autenticació: %d)\n" -#: sunrpc/clnt_perr.c:172 +#: sunrpc/clnt_perr.c:159 msgid "RPC: Success" msgstr "RPC: Èxit" -#: sunrpc/clnt_perr.c:175 +#: sunrpc/clnt_perr.c:162 msgid "RPC: Can't encode arguments" msgstr "RPC: No s’han pogut codificar els arguments" -#: sunrpc/clnt_perr.c:179 +#: sunrpc/clnt_perr.c:166 msgid "RPC: Can't decode result" msgstr "RPC: No s’ha pogut descodificar el resultat" -#: sunrpc/clnt_perr.c:183 +#: sunrpc/clnt_perr.c:170 msgid "RPC: Unable to send" msgstr "RPC: No s’ha pogut fer l’enviament" -#: sunrpc/clnt_perr.c:187 +#: sunrpc/clnt_perr.c:174 msgid "RPC: Unable to receive" msgstr "RPC: No s’ha pogut rebre" -#: sunrpc/clnt_perr.c:191 +#: sunrpc/clnt_perr.c:178 msgid "RPC: Timed out" msgstr "RPC: S’ha excedit el temps" -#: sunrpc/clnt_perr.c:195 +#: sunrpc/clnt_perr.c:182 msgid "RPC: Incompatible versions of RPC" msgstr "RPC: Les versions d’RPC són incompatibles" -#: sunrpc/clnt_perr.c:199 +#: sunrpc/clnt_perr.c:186 msgid "RPC: Authentication error" msgstr "RPC: Error d’autenticació" -#: sunrpc/clnt_perr.c:203 +#: sunrpc/clnt_perr.c:190 msgid "RPC: Program unavailable" msgstr "RPC: El programa no es troba disponible" -#: sunrpc/clnt_perr.c:207 +#: sunrpc/clnt_perr.c:194 msgid "RPC: Program/version mismatch" msgstr "RPC: No hi ha coincidència programa/versió" -#: sunrpc/clnt_perr.c:211 +#: sunrpc/clnt_perr.c:198 msgid "RPC: Procedure unavailable" msgstr "RPC: El procediment no es troba disponible" -#: sunrpc/clnt_perr.c:215 +#: sunrpc/clnt_perr.c:202 msgid "RPC: Server can't decode arguments" msgstr "RPC: El servidor no ha pogut descodificar els arguments" -#: sunrpc/clnt_perr.c:219 +#: sunrpc/clnt_perr.c:206 msgid "RPC: Remote system error" msgstr "RPC: Error al sistema remot" -#: sunrpc/clnt_perr.c:223 +#: sunrpc/clnt_perr.c:210 msgid "RPC: Unknown host" msgstr "RPC: L’estació no és coneguda" -#: sunrpc/clnt_perr.c:227 +#: sunrpc/clnt_perr.c:214 msgid "RPC: Unknown protocol" msgstr "RPC: El protocol no és conegut" -#: sunrpc/clnt_perr.c:231 +#: sunrpc/clnt_perr.c:218 msgid "RPC: Port mapper failure" msgstr "RPC: Fallada del mapador de ports" -#: sunrpc/clnt_perr.c:235 +#: sunrpc/clnt_perr.c:222 msgid "RPC: Program not registered" msgstr "RPC: El programa no s’ha donat d’alta" -#: sunrpc/clnt_perr.c:239 +#: sunrpc/clnt_perr.c:226 msgid "RPC: Failed (unspecified error)" msgstr "RPC: Ha fallat (error no especificat)" -#: sunrpc/clnt_perr.c:280 +#: sunrpc/clnt_perr.c:267 msgid "RPC: (unknown error code)" msgstr "RPC: (codi d’error desconegut)" -#: sunrpc/clnt_perr.c:342 +#: sunrpc/clnt_perr.c:330 msgid "Authentication OK" msgstr "L’autenticació és vàlida" -#: sunrpc/clnt_perr.c:345 +#: sunrpc/clnt_perr.c:333 msgid "Invalid client credential" msgstr "La credencial donada pel client no és vàlida" -#: sunrpc/clnt_perr.c:349 +#: sunrpc/clnt_perr.c:337 msgid "Server rejected credential" msgstr "El servidor ha rebutjat la credencial" -#: sunrpc/clnt_perr.c:353 +#: sunrpc/clnt_perr.c:341 msgid "Invalid client verifier" msgstr "El verificador del client no és vàlid" -#: sunrpc/clnt_perr.c:357 +#: sunrpc/clnt_perr.c:345 msgid "Server rejected verifier" msgstr "El servidor ha rebutjat el verificador" -#: sunrpc/clnt_perr.c:361 +#: sunrpc/clnt_perr.c:349 msgid "Client credential too weak" msgstr "La credencial del client és massa fluixa" -#: sunrpc/clnt_perr.c:365 +#: sunrpc/clnt_perr.c:353 msgid "Invalid server verifier" msgstr "El verificador del servidor no és vàlid" -#: sunrpc/clnt_perr.c:369 +#: sunrpc/clnt_perr.c:357 msgid "Failed (unspecified error)" msgstr "Ha fallat (no s’especifica l’error)" @@ -4843,18 +4913,6 @@ msgstr "Ha fallat (no s’especifica l’error)" msgid "clnt_raw.c: fatal header serialization error" msgstr "clnt_raw.c: error fatal de serialització de capçaleres" -#: sunrpc/clnt_tcp.c:131 -msgid "clnttcp_create: out of memory\n" -msgstr "clnttcp_create: no resta memòria\n" - -#: sunrpc/clnt_udp.c:139 -msgid "clntudp_create: out of memory\n" -msgstr "clntudp_create: no resta memòria\n" - -#: sunrpc/clnt_unix.c:128 -msgid "clntunix_create: out of memory\n" -msgstr "clntunix_create: no resta memòria\n" - #: sunrpc/pm_getmaps.c:83 msgid "pmap_getmaps.c: rpc problem" msgstr "pmap_getmaps.c: problema d’RPC" @@ -4887,118 +4945,262 @@ msgstr "problema amb el sondeig de la difusió" msgid "Cannot receive reply to broadcast" msgstr "no s’ha pogut rebre una resposta a la difusió" -#: sunrpc/rpc_main.c:286 +#: sunrpc/rpc_main.c:290 #, c-format msgid "%s: output would overwrite %s\n" msgstr "%s: l’eixida sobreescriuria «%s»\n" -#: sunrpc/rpc_main.c:293 +#: sunrpc/rpc_main.c:297 #, c-format msgid "%s: unable to open %s: %m\n" msgstr "%s: no s’ha pogut obrir «%s»: %m\n" -#: sunrpc/rpc_main.c:305 +#: sunrpc/rpc_main.c:309 #, c-format msgid "%s: while writing output %s: %m" msgstr "%s: en escriure a l’eixida «%s»: %m" -#: sunrpc/rpc_main.c:340 +#: sunrpc/rpc_main.c:344 #, c-format msgid "cannot find C preprocessor: %s \n" msgstr "no s’ha pogut trobar el preprocessador de C: %s\n" -#: sunrpc/rpc_main.c:348 +#: sunrpc/rpc_main.c:352 msgid "cannot find any C preprocessor (cpp)\n" msgstr "no s’ha pogut trobar cap preprocessador de C (cpp)\n" -#: sunrpc/rpc_main.c:417 +#: sunrpc/rpc_main.c:421 #, c-format msgid "%s: C preprocessor failed with signal %d\n" msgstr "%s: el preprocessador de C ha fallat amb el senyal %d\n" -#: sunrpc/rpc_main.c:420 +#: sunrpc/rpc_main.c:424 #, c-format msgid "%s: C preprocessor failed with exit code %d\n" msgstr "%s: el preprocessador de C ha fallat amb el codi d’eixida %d\n" -#: sunrpc/rpc_main.c:460 +#: sunrpc/rpc_main.c:464 #, c-format msgid "illegal nettype: `%s'\n" msgstr "el tipus de xarxa no és permès: «%s»\n" -#: sunrpc/rpc_main.c:1122 +#: sunrpc/rpc_main.c:1130 #, c-format msgid "rpcgen: too many defines\n" msgstr "rpcgen: hi ha massa definicions\n" -#: sunrpc/rpc_main.c:1134 +#: sunrpc/rpc_main.c:1142 #, c-format msgid "rpcgen: arglist coding error\n" msgstr "rpcgen: error en codificar els arguments\n" #. TRANS: the file will not be removed; this is an #. TRANS: informative message. -#: sunrpc/rpc_main.c:1167 +#: sunrpc/rpc_main.c:1175 #, c-format msgid "file `%s' already exists and may be overwritten\n" msgstr "el fitxer «%s» ja existeix i podria ser sobreescrit\n" -#: sunrpc/rpc_main.c:1212 +#: sunrpc/rpc_main.c:1220 #, c-format msgid "Cannot specify more than one input file!\n" msgstr "no es pot especificar més d’un fitxer d’entrada\n" -#: sunrpc/rpc_main.c:1382 +#: sunrpc/rpc_main.c:1394 +#, c-format msgid "This implementation doesn't support newstyle or MT-safe code!\n" msgstr "aquesta implementació no accepta l’estil nou ni el codi compatible amb MT\n" -#: sunrpc/rpc_main.c:1391 +#: sunrpc/rpc_main.c:1403 #, c-format msgid "Cannot use netid flag with inetd flag!\n" msgstr "no es pot emprar l’opció IDXARXA («-n») amb l’opció d’inetd («-I»)\n" -#: sunrpc/rpc_main.c:1403 +#: sunrpc/rpc_main.c:1415 +#, c-format msgid "Cannot use netid flag without TIRPC!\n" msgstr "no es pot emprar l’opció IDXARXA («-n») sense TIRPC\n" -#: sunrpc/rpc_main.c:1410 +#: sunrpc/rpc_main.c:1422 +#, c-format msgid "Cannot use table flags with newstyle!\n" msgstr "no es poden emprar opcions de taula amb l’estil nou («-N»)\n" -#: sunrpc/rpc_main.c:1429 +#: sunrpc/rpc_main.c:1441 #, c-format msgid "\"infile\" is required for template generation flags.\n" msgstr "cal FITXER_ENTRADA per als senyaladors de generació de plantilles\n" -#: sunrpc/rpc_main.c:1434 +#: sunrpc/rpc_main.c:1446 #, c-format msgid "Cannot have more than one file generation flag!\n" msgstr "no es pot tenir més d’un senyalador de generació de fitxers\n" -#: sunrpc/rpc_main.c:1443 +#: sunrpc/rpc_main.c:1455 #, c-format msgid "usage: %s infile\n" msgstr "Forma d’ús: %s FITXER_ENTRADA\n" -#: sunrpc/rpc_main.c:1444 +#: sunrpc/rpc_main.c:1456 #, c-format msgid "\t%s [-abkCLNTM][-Dname[=value]] [-i size] [-I [-K seconds]] [-Y path] infile\n" -msgstr "\t%s [-abkCLNTM][-D NOM[=VALOR]] [-i MIDA] [-I [-K SEGONS]] [-Y CAMÍ] FITXER_ENTRADA\n" +msgstr "" +" %s [-abkCLNTM] [-DNOM[=VALOR]] [-i MIDA] [-I [-K SEGONS]]\n" +" [-Y CAMÍ] FITXER_ENTRADA\n" -#: sunrpc/rpc_main.c:1446 +#: sunrpc/rpc_main.c:1458 #, c-format msgid "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o outfile] [infile]\n" -msgstr "\t%s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o FITXER_EIXIDA] [FITXER_ENTRADA]\n" +msgstr "" +" %s [-c | -h | -l | -m | -t | -Sc | -Ss | -Sm] [-o FITXER_EIXIDA]\n" +" [FITXER_ENTRADA]\n" -#: sunrpc/rpc_main.c:1448 +#: sunrpc/rpc_main.c:1460 #, c-format msgid "\t%s [-s nettype]* [-o outfile] [infile]\n" -msgstr "\t%s [-s TIPUS_DE_XARXA]… [-o FITXER_EIXIDA] [FITXER_ENTRADA]\n" +msgstr " %s [-s TIPUS_DE_XARXA]… [-o FITXER_EIXIDA] [FITXER_ENTRADA]\n" -#: sunrpc/rpc_main.c:1449 +#: sunrpc/rpc_main.c:1461 #, c-format msgid "\t%s [-n netid]* [-o outfile] [infile]\n" -msgstr "\t%s [-n IDXARXA]… [-o FITXER_EIXIDA] [FITXER_ENTRADA]\n" +msgstr " %s [-n IDXARXA]… [-o FITXER_EIXIDA] [FITXER_ENTRADA]\n" + +#: sunrpc/rpc_main.c:1469 +#, c-format +msgid "options:\n" +msgstr "" +"Opcions:\n" +"\n" + +#: sunrpc/rpc_main.c:1470 +#, c-format +msgid "-a\t\tgenerate all files, including samples\n" +msgstr " -a Genera tots els fitxers, incloent els exemples.\n" + +#: sunrpc/rpc_main.c:1471 +#, c-format +msgid "-b\t\tbackward compatibility mode (generates code for SunOS 4.1)\n" +msgstr "" +" -b Mode de compatibilitat cap enrere (genera codi per a\n" +" SunOS 4.1).\n" + +#: sunrpc/rpc_main.c:1472 +#, c-format +msgid "-c\t\tgenerate XDR routines\n" +msgstr " -c Genera rutines XDR.\n" + +#: sunrpc/rpc_main.c:1473 +#, c-format +msgid "-C\t\tANSI C mode\n" +msgstr " -C Mode ANSI C.\n" + +#: sunrpc/rpc_main.c:1474 +#, c-format +msgid "-Dname[=value]\tdefine a symbol (same as #define)\n" +msgstr " -DNOM[=VALOR] Defineix un símbol (equival a «#define»).\n" + +#: sunrpc/rpc_main.c:1475 +#, c-format +msgid "-h\t\tgenerate header file\n" +msgstr " -h Genera un fitxer de capçaleres.\n" + +#: sunrpc/rpc_main.c:1476 +#, c-format +msgid "-i size\t\tsize at which to start generating inline code\n" +msgstr " -i MIDA Indica la MIDA on començar a generar codi en línia.\n" + +#: sunrpc/rpc_main.c:1477 +#, c-format +msgid "-I\t\tgenerate code for inetd support in server (for SunOS 4.1)\n" +msgstr "" +" -I Genera codi de compatibilitat amb «inetd» per al\n" +" servidor (per a SunOS 4.1).\n" + +#: sunrpc/rpc_main.c:1478 +#, c-format +msgid "-K seconds\tserver exits after K seconds of inactivity\n" +msgstr "" +" -K SEGONS Fa que el servidor isca després del nombre indicat de\n" +" SEGONS d’inactivitat.\n" + +#: sunrpc/rpc_main.c:1479 +#, c-format +msgid "-l\t\tgenerate client side stubs\n" +msgstr " -l Genera esquelets per a la part del client.\n" + +#: sunrpc/rpc_main.c:1480 +#, c-format +msgid "-L\t\tserver errors will be printed to syslog\n" +msgstr " -L Fa que els errors del servidor s’envien a «syslog».\n" + +#: sunrpc/rpc_main.c:1481 +#, c-format +msgid "-m\t\tgenerate server side stubs\n" +msgstr " -m Genera esquelets per a la part del servidor.\n" + +#: sunrpc/rpc_main.c:1482 +#, c-format +msgid "-M\t\tgenerate MT-safe code\n" +msgstr " -M Genera codi compatible amb múltiples fils d’execució.\n" + +# Sembla que «netid» és una expressió de la jerga RPC. ivb +#: sunrpc/rpc_main.c:1483 +#, c-format +msgid "-n netid\tgenerate server code that supports named netid\n" +msgstr " -n NETID Genera codi compatible amb el NETID indicat.\n" + +#: sunrpc/rpc_main.c:1484 +#, c-format +msgid "-N\t\tsupports multiple arguments and call-by-value\n" +msgstr " -N Permet arguments múltiples i pas d’arguments per valor.\n" + +#: sunrpc/rpc_main.c:1485 +#, c-format +msgid "-o outfile\tname of the output file\n" +msgstr " -o FITXER_EIXIDA Nom del fitxer d’eixida.\n" + +#: sunrpc/rpc_main.c:1486 +#, c-format +msgid "-s nettype\tgenerate server code that supports named nettype\n" +msgstr "" +" -s TIPUS_DE_XARXA Genera codi de servidor compatible amb el TIPUS_DE_XARXA\n" +" indicat.\n" + +#: sunrpc/rpc_main.c:1487 +#, c-format +msgid "-Sc\t\tgenerate sample client code that uses remote procedures\n" +msgstr "" +" -Sc Genera codi d’exemple per a un client que empra\n" +" procediments remots.\n" + +#: sunrpc/rpc_main.c:1488 +#, c-format +msgid "-Ss\t\tgenerate sample server code that defines remote procedures\n" +msgstr "" +" -Ss Genera codi d’exemple per a un servidor que defineix\n" +" procediments remots.\n" + +#: sunrpc/rpc_main.c:1489 +#, c-format +msgid "-Sm \t\tgenerate makefile template \n" +msgstr " -Sm Genera una plantilla de fitxer «Makefile».\n" + +#: sunrpc/rpc_main.c:1490 +#, c-format +msgid "-t\t\tgenerate RPC dispatch table\n" +msgstr " -t Genera una taula de despatxat de crides RPC.\n" + +#: sunrpc/rpc_main.c:1491 +#, c-format +msgid "-T\t\tgenerate code to support RPC dispatch tables\n" +msgstr "" +" -T Genera codi per a treballar amb taules de despatxat de\n" +" crides RPC.\n" + +#: sunrpc/rpc_main.c:1492 +#, c-format +msgid "-Y path\t\tdirectory name to find C preprocessor (cpp)\n" +msgstr " -Y CAMÍ Directori on es troba el preprocessador de C (cpp).\n" #: sunrpc/rpc_scan.c:114 msgid "constant or identifier expected" @@ -5020,81 +5222,81 @@ msgstr "la cadena de caràcters és buida" msgid "preprocessor error" msgstr "error del preprocessador" -#: sunrpc/rpcinfo.c:237 sunrpc/rpcinfo.c:383 +#: sunrpc/rpcinfo.c:254 sunrpc/rpcinfo.c:400 #, c-format msgid "program %lu is not available\n" msgstr "el programa %lu no es troba disponible\n" -#: sunrpc/rpcinfo.c:264 sunrpc/rpcinfo.c:310 sunrpc/rpcinfo.c:333 -#: sunrpc/rpcinfo.c:407 sunrpc/rpcinfo.c:453 sunrpc/rpcinfo.c:476 -#: sunrpc/rpcinfo.c:510 +#: sunrpc/rpcinfo.c:281 sunrpc/rpcinfo.c:327 sunrpc/rpcinfo.c:350 +#: sunrpc/rpcinfo.c:424 sunrpc/rpcinfo.c:470 sunrpc/rpcinfo.c:493 +#: sunrpc/rpcinfo.c:527 #, c-format msgid "program %lu version %lu is not available\n" msgstr "el programa %lu, versió %lu, no es troba disponible\n" -#: sunrpc/rpcinfo.c:515 +#: sunrpc/rpcinfo.c:532 #, c-format msgid "program %lu version %lu ready and waiting\n" msgstr "el programa %lu, versió %lu, es troba llest i esperant\n" -#: sunrpc/rpcinfo.c:556 sunrpc/rpcinfo.c:563 +#: sunrpc/rpcinfo.c:573 sunrpc/rpcinfo.c:580 msgid "rpcinfo: can't contact portmapper" msgstr "rpcinfo: no s’ha pogut contactar amb el mapador de ports" -#: sunrpc/rpcinfo.c:570 +#: sunrpc/rpcinfo.c:587 msgid "No remote programs registered.\n" msgstr "no hi ha cap programa remot donat d’alta\n" -#: sunrpc/rpcinfo.c:574 +#: sunrpc/rpcinfo.c:591 msgid " program vers proto port\n" msgstr " programa vers proto port\n" # ivb (2001/10/28) # ivb Es refereix al nom d'una estació -> masculí. -#: sunrpc/rpcinfo.c:613 +#: sunrpc/rpcinfo.c:630 msgid "(unknown)" msgstr "(desconegut)" -#: sunrpc/rpcinfo.c:637 +#: sunrpc/rpcinfo.c:654 #, c-format msgid "rpcinfo: broadcast failed: %s\n" msgstr "rpcinfo: la difusió ha fallat: %s\n" -#: sunrpc/rpcinfo.c:658 +#: sunrpc/rpcinfo.c:675 msgid "Sorry. You are not root\n" msgstr "ho sent, no sou root\n" -#: sunrpc/rpcinfo.c:665 +#: sunrpc/rpcinfo.c:682 #, c-format msgid "rpcinfo: Could not delete registration for prog %s version %s\n" msgstr "rpcinfo: no s’ha pogut donar de baixa el programa «%s», versió %s\n" -#: sunrpc/rpcinfo.c:674 +#: sunrpc/rpcinfo.c:691 msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n" msgstr "Forma d’ús: rpcinfo [-n NÚMPORT] -u ESTACIÓ NÚMPROGRAMA [NÚMVERSIÓ]\n" -#: sunrpc/rpcinfo.c:676 +#: sunrpc/rpcinfo.c:693 msgid " rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n" msgstr " rpcinfo [-n NÚMPORT] -t ESTACIÓ NÚMPROGRAMA [NÚMVERSIÓ]\n" -#: sunrpc/rpcinfo.c:678 +#: sunrpc/rpcinfo.c:695 msgid " rpcinfo -p [ host ]\n" msgstr " rpcinfo -p [ESTACIÓ]\n" -#: sunrpc/rpcinfo.c:679 +#: sunrpc/rpcinfo.c:696 msgid " rpcinfo -b prognum versnum\n" msgstr " rpcinfo -b NÚMPROGRAMA NÚMVERSIÓ\n" -#: sunrpc/rpcinfo.c:680 +#: sunrpc/rpcinfo.c:697 msgid " rpcinfo -d prognum versnum\n" msgstr " rpcinfo -d NÚMPROGRAMA NÚMVERSIÓ\n" -#: sunrpc/rpcinfo.c:695 +#: sunrpc/rpcinfo.c:722 #, c-format msgid "rpcinfo: %s is unknown service\n" msgstr "rpcinfo: el servei «%s» no és conegut\n" -#: sunrpc/rpcinfo.c:732 +#: sunrpc/rpcinfo.c:759 #, c-format msgid "rpcinfo: %s is unknown host\n" msgstr "rpcinfo: l’estació «%s» no és coneguda\n" @@ -5145,14 +5347,6 @@ msgstr "svc_tcp.c: problemes en crear un connector TCP" msgid "svc_tcp.c - cannot getsockname or listen" msgstr "svc_tcp.c: ha fallat getsockname() o listen()" -#: sunrpc/svc_tcp.c:179 -msgid "svctcp_create: out of memory\n" -msgstr "svctcp_create: no resta memòria\n" - -#: sunrpc/svc_tcp.c:218 -msgid "svc_tcp: makefd_xprt: out of memory\n" -msgstr "svc_tcp: makefd_xprt: no resta memòria\n" - #: sunrpc/svc_udp.c:128 msgid "svcudp_create: socket creation problem" msgstr "svcudp_create: problemes en crear un connector" @@ -5161,39 +5355,35 @@ msgstr "svcudp_create: problemes en crear un connector" msgid "svcudp_create - cannot getsockname" msgstr "svcudp_create: ha fallat getsockname()" -#: sunrpc/svc_udp.c:152 -msgid "svcudp_create: out of memory\n" -msgstr "svcudp_create: no resta memòria\n" - -#: sunrpc/svc_udp.c:174 +#: sunrpc/svc_udp.c:175 msgid "svcudp_create: xp_pad is too small for IP_PKTINFO\n" msgstr "svcudp_create: «xp_pad» és massa menut per a IP_PKTINFO\n" -#: sunrpc/svc_udp.c:474 +#: sunrpc/svc_udp.c:475 msgid "enablecache: cache already enabled" msgstr "enablecache: la memòria cau ja està habilitada" -#: sunrpc/svc_udp.c:480 +#: sunrpc/svc_udp.c:481 msgid "enablecache: could not allocate cache" msgstr "enablecache: no s’ha pogut reservar espai per a la memòria cau" -#: sunrpc/svc_udp.c:489 +#: sunrpc/svc_udp.c:490 msgid "enablecache: could not allocate cache data" msgstr "enablecache: no s’ha pogut reservar espai per a les dades de la memòria cau" -#: sunrpc/svc_udp.c:497 +#: sunrpc/svc_udp.c:498 msgid "enablecache: could not allocate cache fifo" msgstr "enablecache: no s’ha pogut reservar la cua FIFO de la memòria cau" -#: sunrpc/svc_udp.c:532 +#: sunrpc/svc_udp.c:533 msgid "cache_set: victim not found" msgstr "cache_set: no s’ha trobat la víctima" -#: sunrpc/svc_udp.c:543 +#: sunrpc/svc_udp.c:544 msgid "cache_set: victim alloc failed" msgstr "cache_set: no s’ha pogut reservar la víctima" -#: sunrpc/svc_udp.c:550 +#: sunrpc/svc_udp.c:551 msgid "cache_set: could not allocate new rpc_buffer" msgstr "cache_set: no s’ha pogut reservar un nou «rpc_buffer»" @@ -5205,34 +5395,6 @@ msgstr "svc_unix.c: problemes en crear un connector AF_UNIX" msgid "svc_unix.c - cannot getsockname or listen" msgstr "svc_unix.c: ha fallat getsockname() o listen()" -#: sunrpc/svc_unix.c:176 -msgid "svcunix_create: out of memory\n" -msgstr "svcunix_create: no resta memòria\n" - -#: sunrpc/svc_unix.c:215 -msgid "svc_unix: makefd_xprt: out of memory\n" -msgstr "svc_unix: makefd_xprt: no resta memòria\n" - -#: sunrpc/xdr.c:566 -msgid "xdr_bytes: out of memory\n" -msgstr "xdr_bytes: no resta memòria\n" - -#: sunrpc/xdr.c:718 -msgid "xdr_string: out of memory\n" -msgstr "xdr_string: no resta memòria\n" - -#: sunrpc/xdr_array.c:106 -msgid "xdr_array: out of memory\n" -msgstr "xdr_array: no resta memòria\n" - -#: sunrpc/xdr_rec.c:156 -msgid "xdrrec_create: out of memory\n" -msgstr "xdrrec_create: no resta memòria\n" - -#: sunrpc/xdr_ref.c:86 -msgid "xdr_reference: out of memory\n" -msgstr "xdr_reference: no resta memòria\n" - #: sysdeps/generic/siglist.h:29 sysdeps/unix/siglist.c:27 msgid "Hangup" msgstr "Penjat" @@ -6312,74 +6474,83 @@ msgstr "«%s» és per a la màquina desconeguda %d\n" msgid "makecontext: does not know how to handle more than 8 arguments\n" msgstr "makecontext: no es poden tractar més de 8 arguments\n" -#: sysdeps/unix/sysv/linux/lddlibc4.c:64 +#: sysdeps/unix/sysv/linux/lddlibc4.c:61 +#, c-format +msgid "" +"Usage: lddlibc4 FILE\n" +"\n" +msgstr "" +"Forma d’ús: lddlibc4 FITXER\n" +"\n" + +#: sysdeps/unix/sysv/linux/lddlibc4.c:82 #, c-format msgid "cannot open `%s'" msgstr "no s’ha pogut obrir «%s»" -#: sysdeps/unix/sysv/linux/lddlibc4.c:68 +#: sysdeps/unix/sysv/linux/lddlibc4.c:86 #, c-format msgid "cannot read header from `%s'" msgstr "no s’ha pogut llegir la capçalera de «%s»" -#: timezone/zdump.c:211 +#: timezone/zdump.c:210 msgid "lacks alphabetic at start" msgstr "no comença per un caràcter alfabètic" -#: timezone/zdump.c:213 +#: timezone/zdump.c:212 msgid "has fewer than 3 alphabetics" msgstr "té menys de 3 caràcters alfabètics" -#: timezone/zdump.c:215 +#: timezone/zdump.c:214 msgid "has more than 6 alphabetics" msgstr "té més de 6 caràcters alfabètics" -#: timezone/zdump.c:223 +#: timezone/zdump.c:222 msgid "differs from POSIX standard" msgstr "difereix de l’estàndard POSIX" # FIXME: language-dependent # La cadena final és una de les anteriors. ivb -#: timezone/zdump.c:229 +#: timezone/zdump.c:228 #, c-format msgid "%s: warning: zone \"%s\" abbreviation \"%s\" %s\n" msgstr "%1$s: avís: l’abreviatura «%3$s» de la zona «%2$s» %4$s\n" -#: timezone/zdump.c:280 +#: timezone/zdump.c:279 #, c-format msgid "%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n" msgstr "%s: la forma d’ús és %s [--version] [-v] [-c [ANY_INF,]ANY_SUP] NOM_DE_ZONA…\n" -#: timezone/zdump.c:297 +#: timezone/zdump.c:296 #, c-format msgid "%s: wild -c argument %s\n" msgstr "%s: l’argument de l’opció «-c» no és vàlid: %s\n" -#: timezone/zdump.c:388 +#: timezone/zdump.c:387 msgid "Error writing to standard output" msgstr "error en escriure a l’eixida estàndard" -#: timezone/zdump.c:411 +#: timezone/zdump.c:410 #, c-format msgid "%s: use of -v on system with floating time_t other than float or double\n" msgstr "%s: no es pot emprar «-v» ja que «time_t» en aquest sistema és un tipus flotant diferent de «float» i «double»\n" -#: timezone/zic.c:392 +#: timezone/zic.c:388 #, c-format msgid "%s: Memory exhausted: %s\n" msgstr "%s: la memòria s’ha exhaurit: %s\n" -#: timezone/zic.c:451 +#: timezone/zic.c:434 #, c-format msgid "\"%s\", line %d: %s" msgstr "«%s», línia %d: %s" -#: timezone/zic.c:454 +#: timezone/zic.c:437 #, c-format msgid " (rule from \"%s\", line %d)" msgstr " (regla de «%s», línia %d)" -#: timezone/zic.c:466 +#: timezone/zic.c:449 msgid "warning: " msgstr "avís: " @@ -6387,7 +6558,7 @@ msgstr "avís: " # ivb Deixe algunes paraules per traduir perquè es refereixen a paraules # ivb reservades dels fitxers amb què treballa zic. # Sembla que la barra al final de la línia no pinta res. ivb -#: timezone/zic.c:476 +#: timezone/zic.c:459 #, c-format msgid "" "%s: usage is %s [ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n" @@ -6397,341 +6568,341 @@ msgstr "" "\t[-d DIRECTORI] [-L FITXER_SEGONS_INTERCALARS] [-y yearistype]\n" "\t[FITXER…]\n" -#: timezone/zic.c:511 +#: timezone/zic.c:494 msgid "wild compilation-time specification of zic_t" msgstr "l’especificació de «zic_t» en temps de compiŀlació no és vàlida" -#: timezone/zic.c:528 +#: timezone/zic.c:511 #, c-format msgid "%s: More than one -d option specified\n" msgstr "%s: s’ha indicat l’opció «-d» més d’una volta\n" -#: timezone/zic.c:538 +#: timezone/zic.c:521 #, c-format msgid "%s: More than one -l option specified\n" msgstr "%s: s’ha indicat l’opció «-l» més d’una volta\n" -#: timezone/zic.c:548 +#: timezone/zic.c:531 #, c-format msgid "%s: More than one -p option specified\n" msgstr "%s: s’ha indicat l’opció «-p» més d’una volta\n" -#: timezone/zic.c:558 +#: timezone/zic.c:541 #, c-format msgid "%s: More than one -y option specified\n" msgstr "%s: s’ha indicat l’opció «-y» més d’una volta\n" -#: timezone/zic.c:568 +#: timezone/zic.c:551 #, c-format msgid "%s: More than one -L option specified\n" msgstr "%s: s’ha indicat l’opció «-L» més d’una volta\n" -#: timezone/zic.c:617 +#: timezone/zic.c:600 msgid "link to link" msgstr "enllaç a un altre enllaç" -#: timezone/zic.c:682 +#: timezone/zic.c:665 msgid "hard link failed, symbolic link used" msgstr "no s’ha pogut crear un enllaç fort, se n’ha emprat un de simbòlic" -#: timezone/zic.c:690 +#: timezone/zic.c:673 #, c-format msgid "%s: Can't link from %s to %s: %s\n" msgstr "%s: no s’ha pogut crear un enllaç des de «%s» cap a «%s»: %s\n" -#: timezone/zic.c:762 timezone/zic.c:764 +#: timezone/zic.c:745 timezone/zic.c:747 msgid "same rule name in multiple files" msgstr "el mateix nom de regla és repetit a diversos fitxers" -#: timezone/zic.c:805 +#: timezone/zic.c:788 msgid "unruly zone" msgstr "la zona no té regles" -#: timezone/zic.c:812 +#: timezone/zic.c:795 #, c-format msgid "%s in ruleless zone" msgstr "«%s» en una zona sense regles" -#: timezone/zic.c:833 +#: timezone/zic.c:816 msgid "standard input" msgstr "entrada estàndard" -#: timezone/zic.c:838 +#: timezone/zic.c:821 #, c-format msgid "%s: Can't open %s: %s\n" msgstr "%s: no s’ha pogut obrir «%s»: %s\n" -#: timezone/zic.c:849 +#: timezone/zic.c:832 msgid "line too long" msgstr "la línia és massa llarga" -#: timezone/zic.c:869 +#: timezone/zic.c:852 msgid "input line of unknown type" msgstr "la línia introduïda pertany a un tipus desconegut" -#: timezone/zic.c:885 +#: timezone/zic.c:868 #, c-format msgid "%s: Leap line in non leap seconds file %s\n" msgstr "%s: línia «Leap» en fitxer no de segons intercalars «%s»\n" -#: timezone/zic.c:892 timezone/zic.c:1329 timezone/zic.c:1351 +#: timezone/zic.c:875 timezone/zic.c:1312 timezone/zic.c:1334 #, c-format msgid "%s: panic: Invalid l_value %d\n" msgstr "%s: pànic: el valor esquerre %d no és vàlid\n" -#: timezone/zic.c:900 +#: timezone/zic.c:883 #, c-format msgid "%s: Error reading %s\n" msgstr "%s: error en llegir «%s»\n" -#: timezone/zic.c:907 +#: timezone/zic.c:890 #, c-format msgid "%s: Error closing %s: %s\n" msgstr "%s: error en tancar «%s»: %s\n" -#: timezone/zic.c:912 +#: timezone/zic.c:895 msgid "expected continuation line not found" msgstr "cal una línia de continuació, però se’n troba cap" -#: timezone/zic.c:956 timezone/zic.c:2489 timezone/zic.c:2508 +#: timezone/zic.c:939 timezone/zic.c:2476 timezone/zic.c:2495 msgid "time overflow" msgstr "desbordament de l’hora" -#: timezone/zic.c:960 +#: timezone/zic.c:943 msgid "24:00 not handled by pre-1998 versions of zic" msgstr "les versions de «zic» anteriors a 1998 no admeten «24:00»" -#: timezone/zic.c:963 +#: timezone/zic.c:946 msgid "values over 24 hours not handled by pre-2007 versions of zic" msgstr "les versions de «zic» anteriors a 2007 no admeten valors majors que 24 hores" -#: timezone/zic.c:976 +#: timezone/zic.c:959 msgid "wrong number of fields on Rule line" msgstr "el nombre de camps de la línia «Rule» és incorrecte" -#: timezone/zic.c:980 +#: timezone/zic.c:963 msgid "nameless rule" msgstr "la regla no té nom" -#: timezone/zic.c:985 +#: timezone/zic.c:968 msgid "invalid saved time" msgstr "el temps estalviat no és vàlid" -#: timezone/zic.c:1006 +#: timezone/zic.c:989 msgid "wrong number of fields on Zone line" msgstr "el nombre de camps de la línia «Zone» no és correcte" -#: timezone/zic.c:1012 +#: timezone/zic.c:995 #, c-format msgid "\"Zone %s\" line and -l option are mutually exclusive" msgstr "la línia «Zone %s» i l’opció «-l» són mútuament excloents" -#: timezone/zic.c:1020 +#: timezone/zic.c:1003 #, c-format msgid "\"Zone %s\" line and -p option are mutually exclusive" msgstr "la línia «Zone %s» i l’opció «-p» són mútuament excloents" -#: timezone/zic.c:1032 +#: timezone/zic.c:1015 #, c-format msgid "duplicate zone name %s (file \"%s\", line %d)" msgstr "el nom de zona «%s» (fitxer «%s», línia %d) és duplicat" -#: timezone/zic.c:1048 +#: timezone/zic.c:1031 msgid "wrong number of fields on Zone continuation line" msgstr "el nombre de camps de la línia de continuació de «Zone» no és correcte" -#: timezone/zic.c:1088 +#: timezone/zic.c:1071 msgid "invalid UTC offset" msgstr "el desplaçament d’UTC no és vàlid" -#: timezone/zic.c:1091 +#: timezone/zic.c:1074 msgid "invalid abbreviation format" msgstr "el format de l’abreviatura no és vàlid" -#: timezone/zic.c:1120 +#: timezone/zic.c:1103 msgid "Zone continuation line end time is not after end time of previous line" msgstr "el temps final de la línia de continuació de «Zone» no ve darrere del temps final de la línia anterior" -#: timezone/zic.c:1148 +#: timezone/zic.c:1131 msgid "wrong number of fields on Leap line" msgstr "el nombre de camps de la línia «Leap» no és correcte" -#: timezone/zic.c:1157 +#: timezone/zic.c:1140 msgid "invalid leaping year" msgstr "l’any bixest no és vàlid" -#: timezone/zic.c:1177 timezone/zic.c:1283 +#: timezone/zic.c:1160 timezone/zic.c:1266 msgid "invalid month name" msgstr "el nom del mes no és vàlid" -#: timezone/zic.c:1190 timezone/zic.c:1396 timezone/zic.c:1410 +#: timezone/zic.c:1173 timezone/zic.c:1379 timezone/zic.c:1393 msgid "invalid day of month" msgstr "el dia del mes no és vàlid" -#: timezone/zic.c:1195 +#: timezone/zic.c:1178 msgid "time before zero" msgstr "l’hora és anterior a zero" -#: timezone/zic.c:1199 +#: timezone/zic.c:1182 msgid "time too small" msgstr "l’hora és massa menuda" -#: timezone/zic.c:1203 +#: timezone/zic.c:1186 msgid "time too large" msgstr "l’hora és massa gran" -#: timezone/zic.c:1207 timezone/zic.c:1312 +#: timezone/zic.c:1190 timezone/zic.c:1295 msgid "invalid time of day" msgstr "l’hora del dia no és vàlida" -#: timezone/zic.c:1226 +#: timezone/zic.c:1209 msgid "illegal CORRECTION field on Leap line" msgstr "el camp de correcció de la línia de «Leap» no és vàlid" -#: timezone/zic.c:1231 +#: timezone/zic.c:1214 msgid "illegal Rolling/Stationary field on Leap line" msgstr "el camp «Rolling/Stationary» de la línia «Leap» no és vàlid" -#: timezone/zic.c:1247 +#: timezone/zic.c:1230 msgid "wrong number of fields on Link line" msgstr "el nombre de camps de la línia «Link» no és correcte" # El nom del camp no és una paraula clau del fitxer. ivb -#: timezone/zic.c:1251 +#: timezone/zic.c:1234 msgid "blank FROM field on Link line" msgstr "el camp d’inici de la línia «Link» és buit" # El nom del camp no és una paraula clau del fitxer. ivb -#: timezone/zic.c:1255 +#: timezone/zic.c:1238 msgid "blank TO field on Link line" msgstr "el camp d’acabament de la línia «Link» és buit" -#: timezone/zic.c:1333 +#: timezone/zic.c:1316 msgid "invalid starting year" msgstr "l’any de començament no és vàlid" -#: timezone/zic.c:1355 +#: timezone/zic.c:1338 msgid "invalid ending year" msgstr "l’any d’acabament no és vàlid" -#: timezone/zic.c:1359 +#: timezone/zic.c:1342 msgid "starting year greater than ending year" msgstr "l’any de començament és major que el d’acabament" -#: timezone/zic.c:1366 +#: timezone/zic.c:1349 msgid "typed single year" msgstr "s’ha especificat un sol any" -#: timezone/zic.c:1401 +#: timezone/zic.c:1384 msgid "invalid weekday name" msgstr "el nom del dia de la setmana no és vàlid" -#: timezone/zic.c:1579 +#: timezone/zic.c:1562 #, c-format msgid "%s: Can't remove %s: %s\n" msgstr "%s: no s’ha pogut eliminar «%s»: %s\n" -#: timezone/zic.c:1589 +#: timezone/zic.c:1572 #, c-format msgid "%s: Can't create %s: %s\n" msgstr "%s: no s’ha pogut crear «%s»: %s\n" -#: timezone/zic.c:1739 +#: timezone/zic.c:1722 #, c-format msgid "%s: Error writing %s\n" msgstr "%s: error en escriure «%s»\n" -#: timezone/zic.c:2031 +#: timezone/zic.c:2015 msgid "no POSIX environment variable for zone" msgstr "no s’ha establert una variable d’entorn POSIX per a la zona" -#: timezone/zic.c:2185 +#: timezone/zic.c:2172 msgid "can't determine time zone abbreviation to use just after until time" msgstr "no s’ha pogut determinar l’abreviatura de zona horària a emprar just després de la data límit (until)" -#: timezone/zic.c:2231 +#: timezone/zic.c:2218 msgid "too many transitions?!" msgstr "hi ha massa transicions?!" -#: timezone/zic.c:2250 +#: timezone/zic.c:2237 msgid "internal error - addtype called with bad isdst" msgstr "error intern: s’ha cridat addtype() amb un valor erroni per a «isdst»" -#: timezone/zic.c:2254 +#: timezone/zic.c:2241 msgid "internal error - addtype called with bad ttisstd" msgstr "error intern: s’ha cridat addtype() amb un valor erroni per a «ttisstd»" -#: timezone/zic.c:2258 +#: timezone/zic.c:2245 msgid "internal error - addtype called with bad ttisgmt" msgstr "error intern: s’ha cridat addtype() amb un valor erroni per a «ttisgmt»" -#: timezone/zic.c:2277 +#: timezone/zic.c:2264 msgid "too many local time types" msgstr "hi ha massa tipus d’hora local" -#: timezone/zic.c:2281 +#: timezone/zic.c:2268 msgid "UTC offset out of range" msgstr "el desplaçament respecte UTC és fora de rang" -#: timezone/zic.c:2309 +#: timezone/zic.c:2296 msgid "too many leap seconds" msgstr "hi ha massa segons intercalars" -#: timezone/zic.c:2315 +#: timezone/zic.c:2302 msgid "repeated leap second moment" msgstr "el moment de segon intercalar és repetit" -#: timezone/zic.c:2367 +#: timezone/zic.c:2354 msgid "Wild result from command execution" msgstr "l’execució de l’ordre ha donat un resultat estrany" -#: timezone/zic.c:2368 +#: timezone/zic.c:2355 #, c-format msgid "%s: command was '%s', result was %d\n" msgstr "%s: l’ordre ha estat «%s», el resultat ha estat %d\n" # ivb (2001/10/30) # ivb Es refereix a les cometes dobles «"». -#: timezone/zic.c:2466 +#: timezone/zic.c:2453 msgid "Odd number of quotation marks" msgstr "el nombre de cometes és senar" -#: timezone/zic.c:2555 +#: timezone/zic.c:2542 msgid "use of 2/29 in non leap-year" msgstr "s’ha emprat el dia 29 de febrer en un any no bixest" -#: timezone/zic.c:2590 +#: timezone/zic.c:2577 msgid "rule goes past start/end of month--will not work with pre-2004 versions of zic" msgstr "la regla va més enllà de l’inici o fi del mes; no funcionarà en les versions de «zic» anteriors a 2004" -#: timezone/zic.c:2622 +#: timezone/zic.c:2609 msgid "time zone abbreviation lacks alphabetic at start" msgstr "l’abreviatura de la zona horària no comença per un caràcter alfabètic" -#: timezone/zic.c:2624 +#: timezone/zic.c:2611 msgid "time zone abbreviation has more than 3 alphabetics" msgstr "l’abreviatura de la zona horària té més de 3 caràcters alfabètics" -#: timezone/zic.c:2626 +#: timezone/zic.c:2613 msgid "time zone abbreviation has too many alphabetics" msgstr "l’abreviatura de la zona horària té massa caràcters alfabètics" -#: timezone/zic.c:2636 +#: timezone/zic.c:2623 msgid "time zone abbreviation differs from POSIX standard" msgstr "l’abreviatura de la zona horària difereix de l’estàndard POSIX" -#: timezone/zic.c:2648 +#: timezone/zic.c:2635 msgid "too many, or too long, time zone abbreviations" msgstr "hi ha massa abreviatures de zona horària (o són massa llargues)" -#: timezone/zic.c:2689 +#: timezone/zic.c:2676 #, c-format msgid "%s: Can't create directory %s: %s\n" msgstr "%s: no s’ha pogut crear el directori «%s»: %s\n" # ivb (2001/10/28) # ivb Resulta d'assignar un «int» a un «long». -#: timezone/zic.c:2711 +#: timezone/zic.c:2698 #, c-format msgid "%s: %d did not sign extend correctly\n" msgstr "%s: el signe de %d no s’ha estès correctament\n" diff --git a/resolv/res_send.c b/resolv/res_send.c index a339c2be51..25a854f72e 100644 --- a/resolv/res_send.c +++ b/resolv/res_send.c @@ -1048,9 +1048,7 @@ send_dg(res_state statp, } if (n == 0) { Dprint(statp->options & RES_DEBUG, (stdout, ";; timeout\n")); - if (!single_request - && resplen > 1 - && (recvresp1 || (buf2 != NULL && recvresp2))) + if (resplen > 1 && (recvresp1 || (buf2 != NULL && recvresp2))) { /* There are quite a few broken name servers out there which don't handle two outstanding @@ -1059,9 +1057,15 @@ send_dg(res_state statp, having received one answer switch to the mode where we send the second request only once we have received the first answer. */ - single_request = true; - *gotsomewhere = save_gotsomewhere; - goto retry; + if (!single_request) + { + single_request = true; + *gotsomewhere = save_gotsomewhere; + goto retry; + } + + *resplen2 = 1; + return resplen; } *gotsomewhere = 1; diff --git a/shadow/Makefile b/shadow/Makefile index cc0efaff6c..4755fab04a 100644 --- a/shadow/Makefile +++ b/shadow/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1996, 2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 1996, 2003, 2004, 2009 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -26,6 +26,8 @@ routines = getspent getspnam sgetspent fgetspent putspent \ getspent_r getspnam_r sgetspent_r fgetspent_r \ lckpwdf +tests = tst-shadow + CFLAGS-getspent_r.c = -fexceptions CFLAGS-getspent.c = -fexceptions CFLAGS-fgetspent.c = -fexceptions diff --git a/shadow/sgetspent_r.c b/shadow/sgetspent_r.c index 2ed350a1ad..5599ee4ec8 100644 --- a/shadow/sgetspent_r.c +++ b/shadow/sgetspent_r.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997, 1998, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997, 1998, 2005, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -91,8 +91,12 @@ int __sgetspent_r (const char *string, struct spwd *resbuf, char *buffer, size_t buflen, struct spwd **result) { - int parse_result = parse_line (strncpy (buffer, string, buflen), - resbuf, NULL, 0, &errno); + buffer[buflen - 1] = '\0'; + char *sp = strncpy (buffer, string, buflen); + if (buffer[buflen - 1] != '\0') + return ERANGE; + + int parse_result = parse_line (sp, resbuf, NULL, 0, &errno); *result = parse_result > 0 ? resbuf : NULL; return *result == NULL ? errno : 0; diff --git a/shadow/tst-shadow.c b/shadow/tst-shadow.c new file mode 100644 index 0000000000..48f7167baa --- /dev/null +++ b/shadow/tst-shadow.c @@ -0,0 +1,84 @@ +#include <shadow.h> +#include <stdio.h> +#include <string.h> + + +static const struct spwd data[] = + { + { (char *) "one", (char *) "pwdone", 1, 2, 3, 4, 5, 6, 7 }, + { (char *) "two", (char *) "pwdtwo", 11, 12, 13, 14, 15, 16, 17 }, + { (char *) "three", (char *) "pwdthree", -1, 22, 23, 24, 25, 26, 27 }, + { (char *) "four", (char *) "pwdfour", 31, -1, 33, 34, 35, 36, 37 }, + { (char *) "five", (char *) "pwdfive", 41, 42, -1, 44, 45, 46, 47 }, + { (char *) "six", (char *) "pwdsix", 51, 52, 53, -1, 55, 56, 57 }, + { (char *) "seven", (char *) "pwdseven", 61, 62, 63, 64, -1, 66, 67 }, + { (char *) "eight", (char *) "pwdeigth", 71, 72, 73, 74, 75, -1, 77 }, + { (char *) "nine", (char *) "pwdnine", 81, 82, 83, 84, 85, 86, ~0ul }, + }; +#define ndata (sizeof (data) / sizeof (data[0])) + + +static int +do_test (void) +{ + FILE *fp = tmpfile (); + if (fp == NULL) + { + puts ("cannot open temporary file"); + return 1; + } + + for (size_t i = 0; i < ndata; ++i) + if (putspent (&data[i], fp) != 0) + { + printf ("putspent call %zu failed\n", i + 1); + return 1; + } + + rewind (fp); + + int result = 0; + int seen = -1; + struct spwd *p; + while ((p = fgetspent (fp)) != NULL) + { + ++seen; + if (strcmp (p->sp_namp, data[seen].sp_namp) != 0) + { + printf ("sp_namp of entry %d does not match: %s vs %s\n", + seen + 1, p->sp_namp, data[seen].sp_namp); + result = 1; + } + if (strcmp (p->sp_pwdp, data[seen].sp_pwdp) != 0) + { + printf ("sp_pwdp of entry %d does not match: %s vs %s\n", + seen + 1, p->sp_pwdp, data[seen].sp_pwdp); + result = 1; + } +#define T(f) \ + if (p->f != data[seen].f) \ + { \ + printf ("%s of entry %d wrong: %ld vs %ld\n", \ + #f, seen + 1, p->f, data[seen].f); \ + result = 1; \ + } + T (sp_lstchg); + T (sp_min); + T (sp_max); + T (sp_warn); + T (sp_expire); + if (p->sp_flag != data[seen].sp_flag) + { + printf ("sp_flag of entry %d wrong: %lu vs %lu\n", + seen + 1, p->sp_flag, data[seen].sp_flag); + result = 1; + } + } + + fclose (fp); + + return result; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/stdio-common/printf.h b/stdio-common/printf.h index a11af02274..af8cf34fcc 100644 --- a/stdio-common/printf.h +++ b/stdio-common/printf.h @@ -113,7 +113,7 @@ extern int register_printf_function (int __spec, printf_function __func, it returns a positive value representing the bit set in the USER field in 'struct printf_info'. */ -extern int register_printf_modifier (wchar_t *__str) __wur __THROW; +extern int register_printf_modifier (__const wchar_t *__str) __wur __THROW; /* Register variable argument handler for user type. The return value diff --git a/stdio-common/reg-modifier.c b/stdio-common/reg-modifier.c index 69bb2ef3d5..ea3bdada13 100644 --- a/stdio-common/reg-modifier.c +++ b/stdio-common/reg-modifier.c @@ -39,7 +39,7 @@ static int next_bit; int -__register_printf_modifier (wchar_t *str) +__register_printf_modifier (const wchar_t *str) { if (str[0] == L'\0') { @@ -48,7 +48,7 @@ __register_printf_modifier (wchar_t *str) return -1; } - wchar_t *wc = str; + const wchar_t *wc = str; while (*wc != L'\0') if (*wc < 0 || *wc > (wchar_t) UCHAR_MAX) goto einval; diff --git a/stdlib/random_r.c b/stdlib/random_r.c index 5e564a737d..a30055f598 100644 --- a/stdlib/random_r.c +++ b/stdlib/random_r.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1995, 2005 Free Software Foundation + Copyright (C) 1995, 2005, 2009 Free Software Foundation The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -166,7 +166,7 @@ __srandom_r (seed, buf) int type; int32_t *state; long int i; - long int word; + int32_t word; int32_t *dst; int kc; diff --git a/stdlib/strfmon_l.c b/stdlib/strfmon_l.c index c9f3a47b41..8e63d459e3 100644 --- a/stdlib/strfmon_l.c +++ b/stdlib/strfmon_l.c @@ -1,5 +1,5 @@ /* Formatting a monetary value according to the given locale. - Copyright (C) 1996, 1997, 2002, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 1996,1997,2002,2004,2006,2009 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. @@ -133,7 +133,7 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, int done; const char *currency_symbol; size_t currency_symbol_len; - int width; + long int width; char *startp; const void *ptr; char space_char; @@ -221,13 +221,21 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, while (isdigit (*++fmt)) { - width *= 10; - width += to_digit (*fmt); + int val = to_digit (*fmt); + + if (width > LONG_MAX / 10 + || (width == LONG_MAX && val > LONG_MAX % 10)) + { + __set_errno (E2BIG); + return -1; + } + + width = width * 10 + val; } /* If we don't have enough room for the demanded width we can stop now and return an error. */ - if (dest + width >= s + maxsize) + if (width >= maxsize - (dest - s)) { __set_errno (E2BIG); return -1; @@ -560,7 +568,7 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, out_char (space_char); out_nstring (currency_symbol, currency_symbol_len); } - + if (sign_posn == 4) { if (sep_by_space == 2) @@ -589,9 +597,8 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, while (dest - startp < width); else { - int dist = width - (dest - startp); - char *cp; - for (cp = dest - 1; cp >= startp; --cp) + long int dist = width - (dest - startp); + for (char *cp = dest - 1; cp >= startp; --cp) cp[dist] = cp[0]; dest += dist; diff --git a/sysdeps/generic/paths.h b/sysdeps/generic/paths.h index 03bf0f355f..439992fe7b 100644 --- a/sysdeps/generic/paths.h +++ b/sysdeps/generic/paths.h @@ -44,6 +44,7 @@ #define _PATH_DEVDB "/var/run/dev.db" #define _PATH_DEVNULL "/dev/null" #define _PATH_DRUM "/dev/drum" +#define _PATH_GSHADOW "/etc/gshadow" #define _PATH_KMEM "/dev/kmem" #define _PATH_MAILDIR "/var/mail" #define _PATH_LASTLOG "/var/log/lastlog" diff --git a/sysdeps/posix/preadv.c b/sysdeps/posix/preadv.c index e697604c19..791077399e 100644 --- a/sysdeps/posix/preadv.c +++ b/sysdeps/posix/preadv.c @@ -48,7 +48,7 @@ ifree (char **ptrp) without change the file pointer, and put the result in the buffers described by VECTOR, which is a vector of COUNT 'struct iovec's. The buffers are filled in the order specified. Operates just like - 'read' (see <unistd.h>) except that data are put in VECTOR instead + 'pread' (see <unistd.h>) except that data are put in VECTOR instead of a contiguous buffer. */ ssize_t PREADV (int fd, const struct iovec *vector, int count, OFF_T offset) @@ -83,7 +83,7 @@ PREADV (int fd, const struct iovec *vector, int count, OFF_T offset) /* Read the data. */ ssize_t bytes_read = PREAD (fd, buffer, bytes, offset); - if (bytes_read <= 0) + if (bytes_read < 0) return -1; /* Copy the data from BUFFER into the memory specified by VECTOR. */ diff --git a/sysdeps/posix/pwritev.c b/sysdeps/posix/pwritev.c index 0b6627dc9d..f2f0574aac 100644 --- a/sysdeps/posix/pwritev.c +++ b/sysdeps/posix/pwritev.c @@ -44,12 +44,12 @@ ifree (char **ptrp) } -/* Read data from file descriptor FD at the given position OFFSET - without change the file pointer, and put the result in the buffers - described by VECTOR, which is a vector of COUNT 'struct iovec's. - The buffers are filled in the order specified. Operates just like - 'read' (see <unistd.h>) except that data are put in VECTOR instead - of a contiguous buffer. */ +/* Write data pointed by the buffers described by IOVEC, which is a + vector of COUNT 'struct iovec's, to file descriptor FD at the given + position OFFSET without change the file pointer. The data is + written in the order specified. Operates just like 'write' (see + <unistd.h>) except that the data are taken from IOVEC instead of a + contiguous buffer. */ ssize_t PWRITEV (int fd, const struct iovec *vector, int count, OFF_T offset) { @@ -81,26 +81,14 @@ PWRITEV (int fd, const struct iovec *vector, int count, OFF_T offset) return -1; } - /* Read the data. */ - ssize_t bytes_read = PWRITE (fd, buffer, bytes, offset); - if (bytes_read <= 0) - return -1; - /* Copy the data from BUFFER into the memory specified by VECTOR. */ - bytes = bytes_read; + char *ptr = buffer; for (int i = 0; i < count; ++i) - { - size_t copy = MIN (vector[i].iov_len, bytes); - - (void) memcpy ((void *) vector[i].iov_base, (void *) buffer, copy); - - buffer += copy; - bytes -= copy; - if (bytes == 0) - break; - } + ptr = __mempcpy ((void *) ptr, (void *) vector[i].iov_base, + vector[i].iov_len); - return bytes_read; + /* Write the data. */ + return PWRITE (fd, buffer, bytes, offset); } #if __WORDSIZE == 64 && defined pwritev64 # undef pwritev64 diff --git a/sysdeps/posix/readv.c b/sysdeps/posix/readv.c index 50bcc91315..6f16b9d946 100644 --- a/sysdeps/posix/readv.c +++ b/sysdeps/posix/readv.c @@ -70,7 +70,7 @@ __libc_readv (int fd, const struct iovec *vector, int count) /* Read the data. */ ssize_t bytes_read = __read (fd, buffer, bytes); - if (bytes_read <= 0) + if (bytes_read < 0) return -1; /* Copy the data from BUFFER into the memory specified by VECTOR. */ diff --git a/sysdeps/sh/sh4/setjmp.S b/sysdeps/sh/sh4/setjmp.S index 03f0b08dcd..9d8fab7a99 100644 --- a/sysdeps/sh/sh4/setjmp.S +++ b/sysdeps/sh/sh4/setjmp.S @@ -22,13 +22,15 @@ ENTRY (__sigsetjmp) /* Save registers */ - add #JB_SIZE, r4 #ifdef __SH_FPU_ANY__ + add #JB_SIZE, r4 fmov.s fr15, @-r4 fmov.s fr14, @-r4 fmov.s fr13, @-r4 fmov.s fr12, @-r4 sts.l fpscr, @-r4 +#else + add #(JB_SIZE - 4 * 5), r4 #endif /* __SH_FPU_ANY__ */ stc.l gbr, @-r4 #ifdef PTR_MANGLE diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh index ca82e1f331..8abb0349bf 100644 --- a/sysdeps/unix/make-syscalls.sh +++ b/sysdeps/unix/make-syscalls.sh @@ -155,6 +155,7 @@ shared-only-routines += $file case x"$callnum" in x_) echo "\ + \$(make-target-directory) (echo '/* Dummy module requested by syscalls.list */'; \\" ;; x*) diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 2fa8524db9..97725e7291 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -531,9 +531,7 @@ #endif /* Support for preadv and pwritev was added in 2.6.30. */ -#if __LINUX_KERNEL_VERSION >= 0x02061e \ - && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \ - || defined __ia64__ || defined __sparc__ && defined __sh__) +#if __LINUX_KERNEL_VERSION >= 0x02061e # define __ASSUME_PREADV 1 # define __ASSUME_PWRITEV 1 #endif diff --git a/sysdeps/unix/sysv/linux/paths.h b/sysdeps/unix/sysv/linux/paths.h index a87831e74a..1b01c0d179 100644 --- a/sysdeps/unix/sysv/linux/paths.h +++ b/sysdeps/unix/sysv/linux/paths.h @@ -44,6 +44,7 @@ #define _PATH_DEVDB "/var/run/dev.db" #define _PATH_DEVNULL "/dev/null" #define _PATH_DRUM "/dev/drum" +#define _PATH_GSHADOW "/etc/gshadow" #define _PATH_KLOG "/proc/kmsg" #define _PATH_KMEM "/dev/kmem" #define _PATH_LASTLOG "/var/log/lastlog" diff --git a/sysdeps/unix/sysv/linux/preadv.c b/sysdeps/unix/sysv/linux/preadv.c index 0d4a6c3803..72722ebc0d 100644 --- a/sysdeps/unix/sysv/linux/preadv.c +++ b/sysdeps/unix/sysv/linux/preadv.c @@ -37,6 +37,10 @@ # define OFF_T off_t #endif +#define LO_HI_LONG(val) \ + (off_t) val, \ + (off_t) ((((uint64_t) (val)) >> (sizeof (long) * 4)) >> (sizeof (long) * 4)) + #ifndef __ASSUME_PREADV static ssize_t PREADV_REPLACEMENT (int, __const struct iovec *, int, OFF_T) internal_function; @@ -55,15 +59,13 @@ PREADV (fd, vector, count, offset) if (SINGLE_THREAD_P) result = INLINE_SYSCALL (preadv, 5, fd, vector, count, - (off_t) ((off64_t) offset >> 32), - (off_t) (offset & 0xffffffff)); + LO_HI_LONG (offset)); else { int oldtype = LIBC_CANCEL_ASYNC (); result = INLINE_SYSCALL (preadv, 5, fd, vector, count, - (off_t) ((off64_t) offset >> 32), - (off_t) (offset & 0xffffffff)); + LO_HI_LONG (offset)); LIBC_CANCEL_RESET (oldtype); } diff --git a/sysdeps/unix/sysv/linux/pwritev.c b/sysdeps/unix/sysv/linux/pwritev.c index 5c30eae51f..2e9cbb2536 100644 --- a/sysdeps/unix/sysv/linux/pwritev.c +++ b/sysdeps/unix/sysv/linux/pwritev.c @@ -37,6 +37,10 @@ # define OFF_T off_t #endif +#define LO_HI_LONG(val) \ + (off_t) val, \ + (off_t) ((((uint64_t) (val)) >> (sizeof (long) * 4)) >> (sizeof (long) * 4)) + #ifndef __ASSUME_PWRITEV static ssize_t PWRITEV_REPLACEMENT (int, __const struct iovec *, int, OFF_T) internal_function; @@ -55,15 +59,13 @@ PWRITEV (fd, vector, count, offset) if (SINGLE_THREAD_P) result = INLINE_SYSCALL (pwritev, 5, fd, vector, count, - (off_t) ((off64_t) offset >> 32), - (off_t) (offset & 0xffffffff)); + LO_HI_LONG (offset)); else { int oldtype = LIBC_CANCEL_ASYNC (); result = INLINE_SYSCALL (pwritev, 5, fd, vector, count, - (off_t) ((off64_t) offset >> 32), - (off_t) (offset & 0xffffffff)); + LO_HI_LONG (offset)); LIBC_CANCEL_RESET (oldtype); } diff --git a/sysdeps/unix/sysv/linux/sys/mount.h b/sysdeps/unix/sysv/linux/sys/mount.h index b30554987a..57d440f273 100644 --- a/sysdeps/unix/sysv/linux/sys/mount.h +++ b/sysdeps/unix/sysv/linux/sys/mount.h @@ -96,8 +96,12 @@ enum /* Possible value for FLAGS parameter of `umount2'. */ enum { - MNT_FORCE = 1 /* Force unmounting. */ + MNT_FORCE = 1, /* Force unmounting. */ #define MNT_FORCE MNT_FORCE + MNT_DETACH = 2, /* Just detach from the tree. */ +#define MNT_DETACH MNT_DETACH + MNT_EXPIRE = 4 /* Mark for expiry. */ +#define MNT_EXPIRE MNT_EXPIRE }; diff --git a/sysdeps/unix/sysv/linux/sys/timex.h b/sysdeps/unix/sysv/linux/sys/timex.h index f7bd6e7929..5f10c7fa4c 100644 --- a/sysdeps/unix/sysv/linux/sys/timex.h +++ b/sysdeps/unix/sysv/linux/sys/timex.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1995, 1996, 1997, 1999, 2007 Free Software Foundation, Inc. +/* Copyright (C) 1995-1997, 1999, 2007, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -22,7 +22,7 @@ #include <features.h> #include <sys/time.h> -/* These definitions from linux/timex.h as of 2.2.0. */ +/* These definitions from linux/timex.h as of 2.6.30. */ struct ntptimeval { @@ -54,10 +54,12 @@ struct timex long int errcnt; /* calibration errors (ro) */ long int stbcnt; /* stability limit exceeded (ro) */ + int tai; /* TAI offset (ro) */ + /* ??? */ int :32; int :32; int :32; int :32; int :32; int :32; int :32; int :32; - int :32; int :32; int :32; int :32; + int :32; int :32; int :32; }; /* Mode codes (timex.mode) */ @@ -67,6 +69,9 @@ struct timex #define ADJ_ESTERROR 0x0008 /* estimated time error */ #define ADJ_STATUS 0x0010 /* clock status */ #define ADJ_TIMECONST 0x0020 /* pll time constant */ +#define ADJ_TAI 0x0080 /* set TAI offset */ +#define ADJ_MICRO 0x1000 /* select microsecond resolution */ +#define ADJ_NANO 0x2000 /* select nanosecond resolution */ #define ADJ_TICK 0x4000 /* tick value */ #define ADJ_OFFSET_SINGLESHOT 0x8001 /* old-fashioned adjtime */ #define ADJ_OFFSET_SS_READ 0xa001 /* read-only adjtime */ @@ -99,6 +104,9 @@ struct timex #define STA_PPSERROR 0x0800 /* PPS signal calibration error (ro) */ #define STA_CLOCKERR 0x1000 /* clock hardware fault (ro) */ +#define STA_NANO 0x2000 /* resolution (0 = us, 1 = ns) (ro) */ +#define STA_MODE 0x4000 /* mode (0 = PLL, 1 = FLL) (ro) */ +#define STA_CLK 0x8000 /* clock source (0 = A, 1 = B) (ro) */ #define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \ STA_PPSERROR | STA_CLOCKERR) /* read-only bits */ |