diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-04-05 01:26:47 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-04-05 01:26:47 +0000 |
commit | 26dee9c49cbbec8826db4c29e99fb50d9392a047 (patch) | |
tree | 98cce94e2e72bcb491b108c3c8f82192070b4b8f | |
parent | Update. (diff) | |
download | glibc-26dee9c49cbbec8826db4c29e99fb50d9392a047.tar.gz glibc-26dee9c49cbbec8826db4c29e99fb50d9392a047.tar.bz2 glibc-26dee9c49cbbec8826db4c29e99fb50d9392a047.zip |
Update.cvs/libc-ud-970404cvs/libc-970412cvs/libc-970411cvs/libc-970410cvs/libc-970409cvs/libc-970408cvs/libc-970407cvs/libc-970406cvs/libc-970405
1997-04-05 03:11 Ulrich Drepper <drepper@cygnus.com>
* inet/arpa/inet.h: Rewrite. Don't use the ugly BSD way to write
headers but instead add comments and parameter names.
Don't use BSD specific types in prototypes.
* manual/nss.texi: Correct a few typos and errors.
* sysdeps/libm-ieee754/s_cbrt.c: Complete rewrite based on better
algorithm.
* sysdeps/libm-ieee754/s_cbrtf.c: Likewise.
* sysdeps/libm-ieee754/s_cbrtl.c: Likewise.
* sysdeps/libm-i387/s_cbrt.S: New file. Optimized assembler version
with new algorithm.
* sysdeps/libm-i387/s_cbrtf.S: New file.
* sysdeps/libm-i387/s_cbrtl.S: New file.
* sysdeps/libm-i387/s_frexp.S: Optimize even more.
* sysdeps/libm-i387/s_frexpf.S: Likewise.
* sysdeps/libm-i387/s_frexpl.S: Likewise.
1997-04-04 18:55 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
* nis/Makefile: Remove CFLAGS-*, add publickey to databases.
* nis/nis_call.c: Add MASTER_ONLY and HARD_LOOKUP flags, compile
DES part only with secure RPC add-on.
* nis/nis_names.c (nis_modify): Fix rpc function number.
* nis/nis_server.c: Fix typos.
* nis/nss_compat/compat-grp.c: Add NIS+ support.
* nis/nss_compat/compat-pwd.c: Likewise.
* nis/nss_compat/compat-spwd.c: Likewise.
* nis/nss_nis/nis-grp.c: Only a return value > 0 from parse_line
signals success.
* nis/nss_nis/nis-publickey.c: Changes for compiling with/without
secure RPC.
* nis/nss_nisplus/nisplus-publickey.c: Likewise.
* nis/ypclnt.c: Likewise.
* nis/nis_intern.h: Likewise.
* nis/nss_nisplus/nisplus-alias.c: Correct parser return code.
* nis/nss_nisplus/nisplus-ethers.c: Likewise.
* nis/nss_nisplus/nisplus-hosts.c: Likewise.
* nis/nss_nisplus/nisplus-network.c: Likewise.
* nis/nss_nisplus/nisplus-proto.c: Likewise.
* nis/nss_nisplus/nisplus-pwd.c: Likewise.
* nis/nss_nisplus/nisplus-rpc.c: Likewise.
* nis/nss_nisplus/nisplus-service.c: Likewise.
* nis/nss_nisplus/nisplus-spwd.c: Likewise.
* nis/nss_nisplus/nisplus-grp.c: Rewrite parser for fixing errors
and speedup.
* nis/nss_nisplus/nisplus-netgrp.c: Likewise.
1997-04-04 17:03 Ulrich Drepper <drepper@cygnus.com>
* math/libm-test.c (cbrt_test): Add tests for +-inf and NaN
arguments.
1997-04-03 19:24 H.J. Lu <hjl@gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/sigset.h (__sigisemptyset): Fix a
typo.
1997-04-03 16:10 Andreas Jaeger <aj@arthur.pfalz.de>
* sysdeps/libm-ieee754/s_nanf.c:
* sysdeps/libm-ieee754/s_nan.c:
* sysdeps/libm-ieee754/s_nanl.c: Include <stdio.h> for
declaration of sprintf.
1997-04-03 13:37 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/libm-ieee754/s_cexp.c: Fix type: string_alias ->
strong_alias.
Reported by sun <asun@zoology.washington.edu>.
* rpc/auth.h: Removed.
* rpc/auth_des.h: Removed.
* sunrpc/rpc/auth.h: Moved to ...
* sysdeps/generic/rpc/auth.h: ...here.
* sunrpc/rpc/auth_des.h: Moved to ...
* sysdeps/generic/rpc/auth_des.h: ...here.
1997-04-03 04:28 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/libm-i387/s_frexp.S: New file. ix87 optimized version.
* sysdeps/libm-i387/s_frexpf.S: New file.
* sysdeps/libm-i387/s_frexpl.S: New file.
1997-04-01 10:11 H.J. Lu <hjl@gnu.ai.mit.edu>
* sysdeps/unix/sysv/linux/Makefile [$(subdir)=inet]
(sysdep_headers): Remove netinet/icmp.h.
Describe `inf', `infinity', `nan', `nan(...)' inputs for strtod
* sysdeps/i386/memcmp.S: Likewise.
* time/antarctica: Likewise.
* time/australasia: Likewise.
49 files changed, 2768 insertions, 1089 deletions
@@ -1,3 +1,104 @@ +1997-04-05 03:11 Ulrich Drepper <drepper@cygnus.com> + + * inet/arpa/inet.h: Rewrite. Don't use the ugly BSD way to write + headers but instead add comments and parameter names. + Don't use BSD specific types in prototypes. + + * manual/nss.texi: Correct a few typos and errors. + + * sysdeps/libm-ieee754/s_cbrt.c: Complete rewrite based on better + algorithm. + * sysdeps/libm-ieee754/s_cbrtf.c: Likewise. + * sysdeps/libm-ieee754/s_cbrtl.c: Likewise. + + * sysdeps/libm-i387/s_cbrt.S: New file. Optimized assembler version + with new algorithm. + * sysdeps/libm-i387/s_cbrtf.S: New file. + * sysdeps/libm-i387/s_cbrtl.S: New file. + + * sysdeps/libm-i387/s_frexp.S: Optimize even more. + * sysdeps/libm-i387/s_frexpf.S: Likewise. + * sysdeps/libm-i387/s_frexpl.S: Likewise. + +1997-04-04 18:55 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> + + * nis/Makefile: Remove CFLAGS-*, add publickey to databases. + + * nis/nis_call.c: Add MASTER_ONLY and HARD_LOOKUP flags, compile + DES part only with secure RPC add-on. + + * nis/nis_names.c (nis_modify): Fix rpc function number. + + * nis/nis_server.c: Fix typos. + + * nis/nss_compat/compat-grp.c: Add NIS+ support. + * nis/nss_compat/compat-pwd.c: Likewise. + * nis/nss_compat/compat-spwd.c: Likewise. + + * nis/nss_nis/nis-grp.c: Only a return value > 0 from parse_line + signals success. + + * nis/nss_nis/nis-publickey.c: Changes for compiling with/without + secure RPC. + * nis/nss_nisplus/nisplus-publickey.c: Likewise. + * nis/ypclnt.c: Likewise. + * nis/nis_intern.h: Likewise. + + * nis/nss_nisplus/nisplus-alias.c: Correct parser return code. + * nis/nss_nisplus/nisplus-ethers.c: Likewise. + * nis/nss_nisplus/nisplus-hosts.c: Likewise. + * nis/nss_nisplus/nisplus-network.c: Likewise. + * nis/nss_nisplus/nisplus-proto.c: Likewise. + * nis/nss_nisplus/nisplus-pwd.c: Likewise. + * nis/nss_nisplus/nisplus-rpc.c: Likewise. + * nis/nss_nisplus/nisplus-service.c: Likewise. + * nis/nss_nisplus/nisplus-spwd.c: Likewise. + + * nis/nss_nisplus/nisplus-grp.c: Rewrite parser for fixing errors + and speedup. + * nis/nss_nisplus/nisplus-netgrp.c: Likewise. + +1997-04-04 17:03 Ulrich Drepper <drepper@cygnus.com> + + * math/libm-test.c (cbrt_test): Add tests for +-inf and NaN + arguments. + +1997-04-03 19:24 H.J. Lu <hjl@gnu.ai.mit.edu> + + * sysdeps/unix/sysv/linux/sigset.h (__sigisemptyset): Fix a + typo. + +1997-04-03 16:10 Andreas Jaeger <aj@arthur.pfalz.de> + + * sysdeps/libm-ieee754/s_nanf.c: + * sysdeps/libm-ieee754/s_nan.c: + * sysdeps/libm-ieee754/s_nanl.c: Include <stdio.h> for + declaration of sprintf. + +1997-04-03 13:37 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/libm-ieee754/s_cexp.c: Fix type: string_alias -> + strong_alias. + Reported by sun <asun@zoology.washington.edu>. + + * rpc/auth.h: Removed. + * rpc/auth_des.h: Removed. + * sunrpc/rpc/auth.h: Moved to ... + * sysdeps/generic/rpc/auth.h: ...here. + * sunrpc/rpc/auth_des.h: Moved to ... + * sysdeps/generic/rpc/auth_des.h: ...here. + +1997-04-03 04:28 Ulrich Drepper <drepper@cygnus.com> + + * sysdeps/libm-i387/s_frexp.S: New file. ix87 optimized version. + * sysdeps/libm-i387/s_frexpf.S: New file. + * sysdeps/libm-i387/s_frexpl.S: New file. + +1997-04-01 10:11 H.J. Lu <hjl@gnu.ai.mit.edu> + + * sysdeps/unix/sysv/linux/Makefile [$(subdir)=inet] + (sysdep_headers): Remove netinet/icmp.h. + 1997-04-02 16:55 Ulrich Drepper <drepper@cygnus.com> * manual/socket.texi: Document behaviour of inet_ntoa in multi- @@ -12,7 +113,7 @@ * manual/arith.texi: Add description of lldiv_t, lldiv, and atoll. Change description of strtoll and strtoull to make clear these are the preferred names. - Describe `inf', `inifinity', `nan', `nan(...)' inputs for strtod + Describe `inf', `infinity', `nan', `nan(...)' inputs for strtod and friends. Change references to HUGE_VALf and HUGE_VALl to HUGE_VALF and HUGE_VALL. @@ -146,7 +247,7 @@ * sysdeps/i386/addmul_1.S: Likewise. * sysdeps/i386/lshift.S: Likewise. * sysdeps/i386/memchr.S: Likewise. - * sysdeps/i386/memset.S: Likewise. + * sysdeps/i386/memcmp.S: Likewise. * sysdeps/i386/mul_1.S: Likewise. * sysdeps/i386/rshift.S: Likewise. * sysdeps/i386/stpcpy.S: Likewise. @@ -176,9 +277,9 @@ * sysdeps/stub/s_log2l.c: Correct function name. * time/africa: Updated from ADO tzdata1997e. - * time/aantarctica: Likewise. + * time/antarctica: Likewise. * time/asia: Likewise. - * time/australia: Likewise. + * time/australasia: Likewise. * time/europe: Likewise. * time/northamerica: Likewise. * time/southamerica: Likewise. @@ -84,6 +84,9 @@ please let me know. [Q23] ``When compiling GNU libc I get lots of errors saying functions in glibc are duplicated in libgcc.'' + +[Q24] ``I have set up /etc/nis.conf, and the Linux libc 5 with NYS + works great. But the glibc NIS+ doesn't seem to work.'' ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ [Q1] ``What systems does the GNU C Library run on?'' @@ -674,6 +677,21 @@ you first delete config.cache. some problems of this kind. The setting of CFLAGS is checked at the very beginning and if it is not usable `configure' will bark. + + +~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ +[Q24] ``I have set up /etc/nis.conf, and the Linux libc 5 with NYS + works great. But the glibc NIS+ doesn't seem to work.'' + +[A24] The glibc NIS+ implementation uses a /var/nis/NIS_COLD_START + file for storing information about the NIS+ server and their + public keys, because the nis.conf file do not contain all + necessary information. You have to copy a NIS_COLD_START file + from a Solaris client (the NIS_COLD_START file is byte order + independend) or generate it new with nisinit from the nis-tools + (look at http://www-vt.uni-paderborn.de/~kukuk/linux/nisplus.html). + + ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Answers were given by: @@ -1,6 +1,6 @@ Open jobs for finishing GNU libc: --------------------------------- -Status: March 1997 +Status: April 1997 If you have time and talent to take over any of the jobs below please contact <bug-glibc@prep.ai.mit.edu> @@ -57,7 +57,6 @@ contact <bug-glibc@prep.ai.mit.edu> [ 7] Several math functions have to be written: - exp2 - - log2 - nearbyint - ceil - round @@ -138,7 +137,9 @@ contact <bug-glibc@prep.ai.mit.edu> + tcgetid() and waitid() from XPG4.2 + grantpt(), ptsname(), unlockpt() from XPG4.2 + getdate() from XPG4.2 + *** Probably underway + fmtmsg() from SVID + *** Probably underway More information are available on request. @@ -147,3 +148,14 @@ contact <bug-glibc@prep.ai.mit.edu> of text. In fact, this would be a recode-library (you know, GNU recode). This is needed in several places in the GNU libc and I already have rather concrete plans but so far no possibility to start this. + + +[15] Cleaning up the header files. Ideally, each header style should + follow the "good examples". Each variable and function should have + a short description of the function and its parameters. The prototypes + should always contain variable names which can help to identify their + meaning; better than + + int foo __P ((int, int, int, int)); + + Blargh! diff --git a/inet/arpa/inet.h b/inet/arpa/inet.h index 03021e614c..0593c8fad6 100644 --- a/inet/arpa/inet.h +++ b/inet/arpa/inet.h @@ -1,62 +1,95 @@ -/* - * Copyright (c) 1983, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)inet.h 8.1 (Berkeley) 6/2/93 - */ - -#ifndef _INET_H_ -#define _INET_H_ - -/* External definitions for functions in inet(3) */ - -#include <sys/cdefs.h> +/* Copyright (C) 1997 Free Software 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 Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _ARPA_INET_H + +#define _ARPA_INET_H 1 +#include <features.h> + #include <sys/types.h> #include <netinet/in.h> /* To define `struct in_addr'. */ __BEGIN_DECLS -u_long inet_addr __P((const char *)); -int inet_aton __P((const char *, struct in_addr *)); -u_int32_t inet_lnaof __P((struct in_addr)); -struct in_addr inet_makeaddr __P((u_int32_t , u_int32_t)); -char * inet_neta __P((u_long, char *, size_t)); -u_int32_t inet_netof __P((struct in_addr)); -u_int32_t inet_network __P((const char *)); -char *inet_net_ntop __P((int, const void *, int, char *, size_t)); -int inet_net_pton __P((int, const char *, void *, size_t)); -char *inet_ntoa __P((struct in_addr)); -int inet_pton __P((int, const char *, void *)); -const char *inet_ntop __P((int, const void *, char *, size_t)); -u_int inet_nsap_addr __P((const char *, u_char *, int)); -char *inet_nsap_ntoa __P((int, const u_char *, char *)); + +/* Convert Internet host address from numbers-and-dots notation in CP + into binary data in network byte order. */ +extern unsigned long int inet_addr __P ((__const char *__cp)); + +/* Convert Internet host address from numbers-and-dots notation in CP + into binary data and store the result in the structure INP. */ +extern int inet_aton __P ((__const char *__cp, struct in_addr *__inp)); + +/* Return the local host address part of the Internet address in IN. */ +extern u_int32_t inet_lnaof __P ((struct in_addr __in)); + +/* Make Internet host address in network byte order by combining the + network number NET with the local address HOST. */ +extern struct in_addr inet_makeaddr __P ((u_int32_t __net, u_int32_t __host)); + +/* Format a network number NET into presentation format and place result + in buffer starting at BUF with length of LEN bytes. */ +extern char *inet_neta __P ((u_long __net, char *__buf, size_t __len)); + +/* Return network number part of the Internet address IN. */ +extern u_int32_t inet_netof __P ((struct in_addr __in)); + +/* Extract the network number in network byte order from the address + in numbers-and-dots natation starting at CP. */ +extern u_int32_t inet_network __P ((__const char *__cp)); + +/* Convert network number for interface type AF in buffer starting at + CP to presentation format. The result will specifiy BITS bits of + the number. */ +extern char *inet_net_ntop __P((int __af, __const void *__cp, int __bits, + char *__buf, size_t __len)); + +/* Convert network number for interface type AF from presentation in + buffer starting at CP to network format and store result int + buffer starting at BUF of size LEN. */ +extern int inet_net_pton __P ((int __af, __const char *__cp, + void *__buf, size_t __len)); + +/* Convert Internet number in IN to ASCII representation. The return value + is a pointer to an internal array containing the string. */ +extern char *inet_ntoa __P ((struct in_addr __in)); + +/* Convert from presentation format of an Internet number in buffer + starting at CP to the binary network format and store result for + interface type AF in buffer starting at BUF. */ +extern int inet_pton __P ((int __af, __const char *__cp, void *__buf)); + +/* Convert a Internet address in binary network format for interface + type AF in buffer starting at CP to presentation form and place + result in buffer of length LEN astarting at BUF. */ +extern __const char *inet_ntop __P ((int __af, __const void *__cp, + char *__buf, size_t __len)); + +/* Convert ASCII representation in hexadecimal form of the Internet + address to binary form and place result in buffer of length LEN + starting at BUF. */ +extern unsigned int inet_nsap_addr __P ((__const char *__cp, + unsigned char *__buf, int __len)); + +/* Convert internet address in binary form in LEN bytes starting at CP + a presentation form and place result in BUF. */ +extern char *inet_nsap_ntoa __P ((int __len, __const unsigned char *__cp, + char *__buf)); + __END_DECLS -#endif /* !_INET_H_ */ +#endif /* arpa/inet.h */ diff --git a/manual/nss.texi b/manual/nss.texi index ba333e02aa..0ed50afe7a 100644 --- a/manual/nss.texi +++ b/manual/nss.texi @@ -68,6 +68,9 @@ The databases available in the NSS are @cindex services @cindex shadow @vtable @code +@item aliases +Mail aliases +@comment @pxref{Mail Aliases}. @item ethers Ethernet numbers, @comment @pxref{Ethernet Numbers}. @@ -94,8 +97,8 @@ Shadow user passwords, @end vtable @noindent -There will be some more added later (@code{aliases}, @code{automount}, -@code{bootparams}, @code{netmasks}, and @code{publickey}). +There will be some more added later (@code{automount}, @code{bootparams}, +@code{netmasks}, and @code{publickey}). @node NSS Configuration File, NSS Module Internals, NSS Basics, Name Service Switch @section The NSS Configuration File @@ -123,7 +126,7 @@ different items: @item the service specification like @code{files}, @code{db}, or @code{nis}. @item -the reaction on lookup result line @code{[NOTFOUND=return]}. +the reaction on lookup result like @code{[NOTFOUND=return]}. @end itemize @menu @@ -346,8 +349,9 @@ functions. I.e., if the user would call the @code{gethostbyname_r} function this also would end in the above function. For all user interface functions the C library maps this call to a call to the reentrant function. For reentrant functions this is trivial since the -interface is (nearly) the same. For the non-reentrant version pointers -to static buffers are used to replace the user supplied buffers. +interface is (nearly) the same. For the non-reentrant version The +library keeps internal buffers which are used to replace the user +supplied buffer. I.e., the reentrant functions @emph{can} have counterparts. No service module is forced to have functions for all databases and all kinds to @@ -399,9 +403,9 @@ enum nss_status _nss_files_gethostbyname_r (const char *name, @end smallexample I.e., the interface function is in fact the reentrant function with the -change of the return value. While the user-level function returns a -pointer to the result the reentrant function return an @code{enum -nss_status} value: +change of the return value and the omission of the @var{result} +parameter. While the user-level function returns a pointer to the +result the reentrant function return an @code{enum nss_status} value: @vindex NSS_STATUS_TRYAGAIN @vindex NSS_STATUS_UNAVAIL @@ -458,13 +462,13 @@ function; the next three arguments are: @table @code -@item STRUCT_TYPE result_buf +@item STRUCT_TYPE *result_buf pointer to buffer where the result is stored. @code{STRUCT_TYPE} is normally a struct which corresponds to the database. @item char *buffer pointer to a buffer where the function can store additional adata for the result etc. -@item int buflen +@item size_t buflen length of the buffer pointed to by @var{buffer}. @end table diff --git a/math/libm-test.c b/math/libm-test.c index a7a53cb6bc..0c65eb174f 100644 --- a/math/libm-test.c +++ b/math/libm-test.c @@ -572,6 +572,10 @@ cbrt_test (void) check ("cbrt (+0) == +0", FUNC(cbrt) (0.0), 0.0); check ("cbrt (-0) == -0", FUNC(cbrt) (minus_zero), minus_zero); + check_isinfp ("cbrt (+inf) == +inf", FUNC(cbrt) (plus_infty)); + check_isinfn ("cbrt (-inf) == -inf", FUNC(cbrt) (minus_infty)); + check_isnan ("cbrt (NaN) == NaN", FUNC(cbrt) (nan_value)); + check ("cbrt (8) == 2", FUNC(cbrt) (8), 2); check ("cbrt (-27) == -3", FUNC(cbrt) (-27.0), -3.0); } diff --git a/nis/Makefile b/nis/Makefile index 31fda25a45..fe4dd94ebb 100644 --- a/nis/Makefile +++ b/nis/Makefile @@ -27,7 +27,7 @@ distribute := nss-nis.h nss-nisplus.h # These are the databases available for the nis (and perhaps later nisplus) # service. This must be a superset of the services in nss. databases = proto service hosts network grp pwd rpc ethers \ - spwd netgrp alias + spwd netgrp alias publickey # Specify rules for the nss_* modules. services := nis compat nisplus @@ -55,57 +55,12 @@ libnss_nis-inhibit-o = $(filter-out .so,$(object-suffixes)) libnss_nisplus-routines := $(addprefix nisplus-,$(databases)) libnss_nisplus-inhibit-o = $(filter-out .so,$(object-suffixes)) -# Sun's header files are not too clean. -CFLAGS-compat-pwd.c = -Wno-strict-prototypes -CFLAGS-compat-spwd.c = -Wno-strict-prototypes -CFLAGS-compat-grp.c = -Wno-strict-prototypes -CFLAGS-nis-alias.c = -Wno-strict-prototypes -CFLAGS-nis-ethers.c = -Wno-strict-prototypes -CFLAGS-nis-grp.c = -Wno-strict-prototypes -CFLAGS-nis-hosts.c = -Wno-strict-prototypes -CFLAGS-nis-netgrp.c = -Wno-strict-prototypes -CFLAGS-nis-network.c = -Wno-strict-prototypes -CFLAGS-nis-proto.c = -Wno-strict-prototypes -CFLAGS-nis-publickey.c = -Wno-strict-prototypes -CFLAGS-nis-pwd.c = -Wno-strict-prototypes -CFLAGS-nis-rpc.c = -Wno-strict-prototypes -CFLAGS-nis-service.c = -Wno-strict-prototypes -CFLAGS-nis-spwd.c = -Wno-strict-prototypes -CFLAGS-ypclnt.c = -Wno-strict-prototypes -Wno-write-strings -Irpcsvc -CFLAGS-yp_xdr.c = -Wno-strict-prototypes -Irpcsvc -CFLAGS-ypupdate_xdr.c = -Wno-strict-prototypes -Irpcsvc -# For the NIS+ Code -CFLAGS-nis_call.c = -DNO_DES_RPC -Wno-strict-prototypes -CFLAGS-nis_subr.c = -Wno-strict-prototypes -CFLAGS-nis_local_names.c = -Wno-strict-prototypes -CFLAGS-nis_free.c = -Wno-strict-prototypes -CFLAGS-nis_file.c = -Wno-strict-prototypes -CFLAGS-nis_print.c = -Wno-strict-prototypes -CFLAGS-nis_error.c = -Wno-strict-prototypes -CFLAGS-nis_names.c = -Wno-strict-prototypes -CFLAGS-nis_clone.c = -Wno-strict-prototypes -CFLAGS-nis_table.c = -Wno-strict-prototypes -CFLAGS-nis_server.c = -Wno-strict-prototypes -CFLAGS-nis_xdr.c = -Wno-strict-prototypes -CFLAGS-nis_intern.c = -Wno-strict-prototypes -CFLAGS-nisplus-alias.c = -Wno-strict-prototypes -CFLAGS-nisplus-ethers.c = -Wno-strict-prototypes -CFLAGS-nisplus-grp.c = -Wno-strict-prototypes -CFLAGS-nisplus-hosts.c = -Wno-strict-prototypes -CFLAGS-nisplus-netgrp.c = -Wno-strict-prototypes -CFLAGS-nisplus-network.c = -Wno-strict-prototypes -CFLAGS-nisplus-proto.c = -Wno-strict-prototypes -CFLAGS-nisplus-publickey.c = -Wno-strict-prototypes -CFLAGS-nisplus-pwd.c = -Wno-strict-prototypes -CFLAGS-nisplus-rpc.c = -Wno-strict-prototypes -CFLAGS-nisplus-service.c = -Wno-strict-prototypes -CFLAGS-nisplus-spwd.c = -Wno-strict-prototypes - include ../Rules $(objpfx)libnss_compat.so: $(objpfx)libnsl.so$(libnsl.so-version) \ - $(common-objpfx)nss/libnss_files.so + $(common-objpfx)nss/libnss_files.so \ + $(common-objpfx)nis/libnss_nisplus.so $(objpfx)libnss_nis.so: $(objpfx)libnsl.so$(libnsl.so-version) \ $(common-objpfx)nss/libnss_files.so $(objpfx)libnss_nisplus.so: $(objpfx)libnsl.so$(libnsl.so-version) @@ -1,8 +1,9 @@ * nss_nisplus: When using parser form nss_files, rewrite parser - - * compat could use data from nisplus, too. Implement this + * nss_nisplus: Search the data in the complete NIS+ namespace + specified by NIS_PATH + * nis_server: implement nis_getservlist, nis_stats, nis_servstate * nis_groups: implement it @@ -22,10 +23,10 @@ * Possible flags: - FOLLOW_LINKS (nis_list, nis_lookup) - FOLLOW_PATH (nis_list, not supported) - - HARD_LOOKUP (__do_niscall, not supported) + - HARD_LOOKUP (__do_niscall) - ALL_RESULTS (nis_list, not supported, needs server callback) - NO_CACHE (__do_niscall, cache not supported yet) - - MASTER_ONLY (__do_niscall, not supported) + - MASTER_ONLY (__do_niscall) - EXPAND_NAME (nis_lookup, nis_list) - RETURN_RESULT (nis_table.c) - ADD_OVERWRITE (nis_table.c) @@ -37,4 +38,3 @@ - USE_DGRAM (__do_niscall) - NO_AUTHINFO (__do_niscall) - diff --git a/nis/nis_call.c b/nis/nis_call.c index bf64558adc..78e8767318 100644 --- a/nis/nis_call.c +++ b/nis/nis_call.c @@ -60,13 +60,11 @@ __nis_dobind (const nis_server *server, u_long flags) int clnt_sock; size_t i; CLIENT *client = NULL; - /* XXX What is this variable for? */ - void *out = NULL; + memset (&clnt_saddr, '\0', sizeof clnt_saddr); + clnt_saddr.sin_family = AF_INET; for (i = 0; i < server->ep.ep_len; i++) { - memset (&clnt_saddr, '\0', sizeof clnt_saddr); - clnt_saddr.sin_family = AF_INET; if (strcmp (server->ep.ep_val[i].family,"loopback") == 0) { if (server->ep.ep_val[i].uaddr[i] == '-') @@ -79,14 +77,14 @@ __nis_dobind (const nis_server *server, u_long flags) else continue; } - else - if (strcmp (server->ep.ep_val[i].proto,"tcp") == 0) - { - if ((flags & USE_DGRAM) == USE_DGRAM) - continue; - else - clnt_saddr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); - } + else + if (strcmp (server->ep.ep_val[i].proto,"tcp") == 0) + { + if ((flags & USE_DGRAM) == USE_DGRAM) + continue; + else + clnt_saddr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); + } } else if (strcmp (server->ep.ep_val[i].family,"inet") == 0) @@ -115,7 +113,7 @@ __nis_dobind (const nis_server *server, u_long flags) } else continue; - + clnt_sock = RPC_ANYSOCK; if ((flags & USE_DGRAM) == USE_DGRAM) client = clntudp_create (&clnt_saddr, NIS_PROG, NIS_VERSION, @@ -123,42 +121,41 @@ __nis_dobind (const nis_server *server, u_long flags) else client = clnttcp_create (&clnt_saddr, NIS_PROG, NIS_VERSION, &clnt_sock, 0, 0); - + if (client == NULL) continue; -#if 1 if (clnt_call (client, 0, (xdrproc_t) xdr_void, NULL, - (xdrproc_t) xdr_void, out, TIMEOUT) != RPC_SUCCESS) + (xdrproc_t) xdr_void, NULL, TIMEOUT) != RPC_SUCCESS) { clnt_destroy (client); continue; } -#endif + if ((flags & NO_AUTHINFO) != NO_AUTHINFO) - { -#if !defined(NO_DES_RPC) - if (server->key_type == NIS_PK_DH) - { - char netname[MAXNETNAMELEN+1]; - char *p; - - strcpy (netname, "unix."); - strncat (netname, server->name,MAXNETNAMELEN-5); - netname[MAXNETNAMELEN-5] = '\0'; - p = strchr (netname, '.'); - *p = '@'; - client->cl_auth = - authdes_pk_create (netname, &server->pkey, 300, NULL, NULL); - if (!client->cl_auth) - client->cl_auth = authunix_create_default (); - } - else + { +#if defined(HAVE_SECURE_RPC) + if (server->key_type == NIS_PK_DH) + { + char netname[MAXNETNAMELEN+1]; + char *p; + + p = stpcpy (netname, "unix."); + strncpy (p, server->name,MAXNETNAMELEN-5); + netname[MAXNETNAMELEN] = '\0'; + p = strchr (netname, '.'); + *p = '@'; + client->cl_auth = + authdes_pk_create (netname, &server->pkey, 300, NULL, NULL); + if (!client->cl_auth) + client->cl_auth = authunix_create_default (); + } + else #endif - client->cl_auth = authunix_create_default (); - } + client->cl_auth = authunix_create_default (); + } return client; } - + return NULL; } @@ -189,14 +186,19 @@ __do_niscall (const nis_server *serv, int serv_len, u_long prog, server_len = serv_len; } + if (((flags & MASTER_ONLY) == MASTER_ONLY) && server_len > 1) + server_len = 1; /* The first entry is the master */ + try = 0; result = NIS_NAMEUNREACHABLE; while (try < MAXTRIES && result != RPC_SUCCESS) { unsigned int i; - - ++try; + + if ((flags & HARD_LOOKUP) == 0) + ++try; + for (i = 0; i < server_len; i++) { if ((clnt = __nis_dobind (&server[i], flags)) == NULL) @@ -206,9 +208,7 @@ __do_niscall (const nis_server *serv, int serv_len, u_long prog, if (result != RPC_SUCCESS) { - /* XXX Grrr. The cast is needed for now since Sun code does - note know about `const'. */ - clnt_perror (clnt, (char *) "do_niscall: clnt_call"); + clnt_perror (clnt, "do_niscall: clnt_call"); clnt_destroy (clnt); result = NIS_RPCERROR; } diff --git a/nis/nis_intern.h b/nis/nis_intern.h index b5fb605506..8201ccd533 100644 --- a/nis/nis_intern.h +++ b/nis/nis_intern.h @@ -27,11 +27,10 @@ __BEGIN_DECLS extern nis_error __do_niscall (__const nis_server *server, int server_len, u_long prog, xdrproc_t xargs, caddr_t req, xdrproc_t xres, caddr_t resp, u_long flags); -#if !defined(NO_DES_RPC) -extern AUTH *authdes_pk_create (char *, netobj *, u_int, +#if defined (HAVE_SECURE_RPC) +extern AUTH *authdes_pk_create (const char *, const netobj *, u_int, struct sockaddr *, des_block *); #endif - extern nis_name *__nis_expandname (__const nis_name); __END_DECLS diff --git a/nis/nis_names.c b/nis/nis_names.c index 92f8040b3d..aa8c880249 100644 --- a/nis/nis_names.c +++ b/nis/nis_names.c @@ -227,7 +227,7 @@ nis_modify (const nis_name name, const nis_object *obj) req.ns_object.ns_object_len = 1; req.ns_object.ns_object_val = nis_clone_object (obj, NULL); - if ((status = __do_niscall (NULL, 0, NIS_REMOVE, (xdrproc_t) xdr_ns_request, + if ((status = __do_niscall (NULL, 0, NIS_MODIFY, (xdrproc_t) xdr_ns_request, (caddr_t) & req, (xdrproc_t) xdr_nis_result, (caddr_t) res, 0)) != RPC_SUCCESS) res->status = status; diff --git a/nis/nis_server.c b/nis/nis_server.c index 48d2144c78..0ed3c81042 100644 --- a/nis/nis_server.c +++ b/nis/nis_server.c @@ -30,8 +30,8 @@ nis_mkdir (const nis_name dir, const nis_server *server) { int result; if ((result = __do_niscall (NULL, 0, NIS_MKDIR, (xdrproc_t) xdr_nis_name, - (caddr_t) dir, (xdrproc_t) xdr_nis_error, - (caddr_t) & res, 0)) != RPC_SUCCESS) + (caddr_t) &dir, (xdrproc_t) xdr_nis_error, + (caddr_t) &res, 0)) != RPC_SUCCESS) { fprintf (stderr, _("__do_niscall: Error #%d\n"), result); return NIS_RPCERROR; @@ -42,8 +42,8 @@ nis_mkdir (const nis_name dir, const nis_server *server) int result; if ((result = __do_niscall (server, 1, NIS_MKDIR, (xdrproc_t) xdr_nis_name, - (caddr_t) dir, (xdrproc_t) xdr_nis_error, - (caddr_t) & res, 0)) != RPC_SUCCESS) + (caddr_t) &dir, (xdrproc_t) xdr_nis_error, + (caddr_t) &res, 0)) != RPC_SUCCESS) { fprintf (stderr, _("__do_niscall: Error #%d\n"), result); return NIS_RPCERROR; @@ -62,8 +62,8 @@ nis_rmdir (const nis_name dir, const nis_server *server) { int result; if ((result = __do_niscall (NULL, 0, NIS_RMDIR, (xdrproc_t) xdr_nis_name, - (caddr_t) dir, (xdrproc_t) xdr_nis_error, - (caddr_t) & res, 0)) != RPC_SUCCESS) + (caddr_t) &dir, (xdrproc_t) xdr_nis_error, + (caddr_t) &res, 0)) != RPC_SUCCESS) { fprintf (stderr, _("__do_niscall: Error #%d\n"), result); return NIS_RPCERROR; @@ -74,8 +74,8 @@ nis_rmdir (const nis_name dir, const nis_server *server) int result; if ((result = __do_niscall (server, 1, NIS_RMDIR, (xdrproc_t) xdr_nis_name, - (caddr_t) dir, (xdrproc_t) xdr_nis_error, - (caddr_t) & res, 0)) != RPC_SUCCESS) + (caddr_t) &dir, (xdrproc_t) xdr_nis_error, + (caddr_t) &res, 0)) != RPC_SUCCESS) { fprintf (stderr, _("__do_niscall: Error #%d\n"), result); return NIS_RPCERROR; diff --git a/nis/nss_compat/compat-grp.c b/nis/nss_compat/compat-grp.c index de96dbbeb6..6231a1e911 100644 --- a/nis/nss_compat/compat-grp.c +++ b/nis/nss_compat/compat-grp.c @@ -25,6 +25,14 @@ #include <string.h> #include <rpcsvc/yp.h> #include <rpcsvc/ypclnt.h> +#include <rpcsvc/nis.h> +#include <rpcsvc/nislib.h> +#include <nsswitch.h> + +#include "nss-nisplus.h" + +static service_user *ni = NULL; +static bool_t use_nisplus = FALSE; /* default: group_compat: nis */ /* Get the declaration of the parser function. */ #define ENTNAME grent @@ -32,7 +40,7 @@ #define EXTERN_PARSER #include "../../nss/nss_files/files-parse.c" -/* Structure for remembering -@netgroup and -user members ... */ +/* Structure for remembering -group members ... */ #define BLACKLIST_INITIAL_SIZE 512 #define BLACKLIST_INCREMENT 256 struct blacklist_t @@ -48,12 +56,15 @@ struct ent_t bool_t nis_first; char *oldkey; int oldkeylen; + nis_result *result; + nis_name *names; + u_long names_nr; FILE *stream; struct blacklist_t blacklist; - }; +}; typedef struct ent_t ent_t; -static ent_t ext_ent = {0, 0, NULL, 0, NULL, {NULL, 0, 0}}; +static ent_t ext_ent = {0, 0, NULL, 0, NULL, NULL, 0, NULL, {NULL, 0, 0}}; /* Protect global state against multiple changers. */ __libc_lock_define_initialized (static, lock) @@ -61,6 +72,8 @@ __libc_lock_define_initialized (static, lock) /* Prototypes for local functions. */ static void blacklist_store_name (const char *, ent_t *); static int in_blacklist (const char *, int, ent_t *); +extern int _nss_nisplus_parse_grent (nis_result *, struct group *, + char *, size_t); static enum nss_status internal_setgrent (ent_t *ent) @@ -75,15 +88,27 @@ internal_setgrent (ent_t *ent) ent->oldkey = NULL; ent->oldkeylen = 0; } - + + if (ent->result != NULL) + { + nis_freeresult (ent->result); + ent->result = NULL; + } + + if (ent->names != NULL) + { + nis_freenames (ent->names); + ent->names = NULL; + } + ent->names_nr = 0; ent->blacklist.current = 0; if (ent->blacklist.data != NULL) ent->blacklist.data[0] = '\0'; - + if (ent->stream == NULL) { ent->stream = fopen ("/etc/group", "r"); - + if (ent->stream == NULL) status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL; } @@ -101,6 +126,12 @@ _nss_compat_setgrent (void) __libc_lock_lock (lock); + if (ni == NULL) + { + __nss_database_lookup ("group_compat", NULL, "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + result = internal_setgrent (&ext_ent); __libc_lock_unlock (lock); @@ -127,6 +158,18 @@ internal_endgrent (ent_t *ent) ent->oldkeylen = 0; } + if (ent->result != NULL) + { + nis_freeresult (ent->result); + ent->result = NULL; + } + + if (ent->names != NULL) + { + nis_freenames (ent->names); + ent->names = NULL; + } + ent->names_nr = 0; ent->blacklist.current = 0; if (ent->blacklist.data != NULL) ent->blacklist.data[0] = '\0'; @@ -155,7 +198,7 @@ getgrent_next_nis (struct group *result, ent_t *ent, char *buffer, struct parser_data *data = (void *) buffer; char *domain; char *outkey, *outval; - int outkeylen, outvallen; + int outkeylen, outvallen, parse_res; char *p; if (yp_get_default_domain (&domain) != YPERR_SUCCESS) @@ -202,13 +245,133 @@ getgrent_next_nis (struct group *result, ent_t *ent, char *buffer, while (isspace (*p)) ++p; + + parse_res = _nss_files_parse_grent (p, result, data, buflen); + + if (parse_res && + in_blacklist (result->gr_name, strlen (result->gr_name), ent)) + parse_res = 0; /* if result->gr_name in blacklist,search next entry */ + } + while (!parse_res); + + return NSS_STATUS_SUCCESS; +} + +static enum nss_status +getgrent_next_nisplus (struct group *result, ent_t *ent, char *buffer, + size_t buflen) +{ + int parse_res; + + if (ent->names == NULL) + { + ent->names = nis_getnames ("group.org_dir"); + if (ent->names == NULL || ent->names[0] == NULL) + { + ent->nis = 0; + return NSS_STATUS_UNAVAIL; + } } - while (!_nss_files_parse_grent (p, result, data, buflen)); + + do + { + if (ent->nis_first) + { + next_name: + ent->result = nis_first_entry(ent->names[ent->names_nr]); + if (niserr2nss (ent->result->status) != NSS_STATUS_SUCCESS) + { + ent->nis = 0; + return niserr2nss (ent->result->status); + } + ent->nis_first = FALSE; + } + else + { + nis_result *res; + + res = nis_next_entry(ent->names[ent->names_nr], + &ent->result->cookie); + nis_freeresult (ent->result); + ent->result = res; + if (niserr2nss (ent->result->status) != NSS_STATUS_SUCCESS) + { + if ((ent->result->status == NIS_NOTFOUND) && + ent->names[ent->names_nr + 1] != NULL) + { + nis_freeresult (ent->result); + ent->names_nr += 1; + goto next_name; + } + else + { + ent->nis = 0; + return niserr2nss (ent->result->status); + } + } + } + parse_res = _nss_nisplus_parse_grent (ent->result, result, buffer, + buflen); + if (parse_res && + in_blacklist (result->gr_name, strlen (result->gr_name), ent)) + parse_res = 0; /* if result->gr_name in blacklist,search next entry */ + } + while (!parse_res); + + return NSS_STATUS_SUCCESS; +} - if (!in_blacklist (result->gr_name, strlen (result->gr_name), ent)) +/* This function handle the +group entrys in /etc/group */ +static enum nss_status +getgrent_next_file_plusgroup (struct group *result, char *buffer, + size_t buflen) +{ + struct parser_data *data = (void *) buffer; + int parse_res; + + if (use_nisplus) /* Do the NIS+ query here */ + { + nis_result *res; + char buf[strlen (result->gr_name) + 24]; + + sprintf(buf, "[name=%s],group.org_dir", + &result->gr_name[1]); + res = nis_list(buf, EXPAND_NAME, NULL, NULL); + if (niserr2nss (res->status) != NSS_STATUS_SUCCESS) + { + enum nss_status status = niserr2nss (res->status); + + nis_freeresult (res); + return status; + } + parse_res = _nss_nisplus_parse_grent (res, result, buffer, buflen); + nis_freeresult (res); + } + else /* Use NIS */ + { + char *domain, *outval, *p; + int outvallen; + + if (yp_get_default_domain (&domain) != YPERR_SUCCESS) + return NSS_STATUS_TRYAGAIN; + + if (yp_match (domain, "group.byname", &result->gr_name[1], + strlen (result->gr_name) - 1, &outval, &outvallen) + != YPERR_SUCCESS) + return NSS_STATUS_TRYAGAIN; + p = strncpy (buffer, outval, + buflen < outvallen ? buflen : outvallen); + free (outval); + while (isspace (*p)) + p++; + parse_res = _nss_files_parse_grent (p, result, data, buflen); + } + + if (parse_res) + /* We found the entry. */ return NSS_STATUS_SUCCESS; else - return NSS_STATUS_NOTFOUND; + return NSS_STATUS_RETURN; } @@ -256,27 +419,16 @@ getgrent_next_file (struct group *result, ent_t *ent, if (result->gr_name[0] == '+' && result->gr_name[1] != '\0' && result->gr_name[1] != '@') { - char *domain; - char *outval; - int outvallen; - - if (yp_get_default_domain (&domain) != YPERR_SUCCESS) - /* XXX Should we regard this as an fatal error? I don't - think so. Just continue working. --drepper@gnu */ - continue; - - if (yp_match (domain, "group.byname", &result->gr_name[1], - strlen (result->gr_name) - 1, &outval, &outvallen) - != YPERR_SUCCESS) - continue; - - p = strncpy (buffer, outval, buflen); - while (isspace (*p)) - p++; - free (outval); - if (_nss_files_parse_grent (p, result, data, buflen)) - /* We found the entry. */ - break; + enum nss_status status; + + status = getgrent_next_file_plusgroup (result, buffer, buflen); + if (status == NSS_STATUS_SUCCESS) /* We found the entry. */ + break; + else + if (status == NSS_STATUS_RETURN) /* We couldn't parse the entry */ + continue; + else + return status; } /* +:... */ @@ -285,7 +437,10 @@ getgrent_next_file (struct group *result, ent_t *ent, ent->nis = TRUE; ent->nis_first = TRUE; - return getgrent_next_nis (result, ent, buffer, buflen); + if (use_nisplus) + return getgrent_next_nisplus (result, ent, buffer, buflen); + else + return getgrent_next_nis (result, ent, buffer, buflen); } } @@ -298,7 +453,12 @@ internal_getgrent_r (struct group *gr, ent_t *ent, char *buffer, size_t buflen) { if (ent->nis) - return getgrent_next_nis (gr, ent, buffer, buflen); + { + if (use_nisplus) + return getgrent_next_nisplus (gr, ent, buffer, buflen); + else + return getgrent_next_nis (gr, ent, buffer, buflen); + } else return getgrent_next_file (gr, ent, buffer, buflen); } @@ -310,6 +470,12 @@ _nss_compat_getgrent_r (struct group *grp, char *buffer, size_t buflen) __libc_lock_lock (lock); + if (ni == NULL) + { + __nss_database_lookup ("group_compat", NULL, "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + /* Be prepared that the setgrent function was not called before. */ if (ext_ent.stream == NULL) status = internal_setgrent (&ext_ent); @@ -327,12 +493,21 @@ enum nss_status _nss_compat_getgrnam_r (const char *name, struct group *grp, char *buffer, size_t buflen) { - ent_t ent = {0, 0, NULL, 0, NULL, {NULL, 0, 0}}; + ent_t ent = {0, 0, NULL, 0, NULL, NULL, 0, NULL, {NULL, 0, 0}}; enum nss_status status; if (name[0] == '-' || name[0] == '+') return NSS_STATUS_NOTFOUND; + __libc_lock_lock (lock); + + if (ni == NULL) + { + __nss_database_lookup ("group_compat", NULL, "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + + __libc_lock_unlock (lock); status = internal_setgrent (&ent); if (status != NSS_STATUS_SUCCESS) @@ -352,9 +527,19 @@ enum nss_status _nss_compat_getgrgid_r (gid_t gid, struct group *grp, char *buffer, size_t buflen) { - ent_t ent = {0, 0, NULL, 0, NULL, {NULL, 0, 0}}; + ent_t ent = {0, 0, NULL, 0, NULL, NULL, 0, NULL, {NULL, 0, 0}}; enum nss_status status; + __libc_lock_lock (lock); + + if (ni == NULL) + { + __nss_database_lookup ("group_compat", NULL, "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + + __libc_lock_unlock (lock); + status = internal_setgrent (&ent); if (status != NSS_STATUS_SUCCESS) return status; diff --git a/nis/nss_compat/compat-pwd.c b/nis/nss_compat/compat-pwd.c index 56659e9ed5..317e2d18bf 100644 --- a/nis/nss_compat/compat-pwd.c +++ b/nis/nss_compat/compat-pwd.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996. @@ -26,8 +26,15 @@ #include <libc-lock.h> #include <rpcsvc/yp.h> #include <rpcsvc/ypclnt.h> +#include <rpcsvc/nis.h> +#include <rpcsvc/nislib.h> +#include <nsswitch.h> #include "netgroup.h" +#include "nss-nisplus.h" + +static service_user *ni = NULL; +static bool_t use_nisplus = FALSE; /* default: passwd_compat: nis */ /* Get the declaration of the parser function. */ #define ENTNAME pwent @@ -52,6 +59,9 @@ struct ent_t bool_t first; char *oldkey; int oldkeylen; + nis_result *result; + nis_name *names; + u_long names_nr; FILE *stream; struct blacklist_t blacklist; struct passwd pwd; @@ -59,7 +69,7 @@ struct ent_t }; typedef struct ent_t ent_t; -static ent_t ext_ent = {0, 0, 0, NULL, 0, NULL, {NULL, 0, 0}, +static ent_t ext_ent = {0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, {NULL, 0, 0}, {NULL, NULL, 0, 0, NULL, NULL, NULL}}; /* Protect global state against multiple changers. */ @@ -68,7 +78,8 @@ __libc_lock_define_initialized (static, lock) /* Prototypes for local functions. */ static void blacklist_store_name (const char *, ent_t *); static int in_blacklist (const char *, int, ent_t *); - +extern int _nss_nisplus_parse_pwent (nis_result *, struct passwd *, + char *, size_t); static void give_pwd_free (struct passwd *pwd) { @@ -192,6 +203,18 @@ internal_setpwent (ent_t *ent) ent->oldkeylen = 0; } + if (ent->result != NULL) + { + nis_freeresult (ent->result); + ent->result = NULL; + } + + if (ent->names != NULL) + { + nis_freenames (ent->names); + ent->names = NULL; + } + ent->names_nr = 0; ent->blacklist.current = 0; if (ent->blacklist.data != NULL) ent->blacklist.data[0] = '\0'; @@ -219,6 +242,12 @@ _nss_compat_setpwent (void) __libc_lock_lock (lock); + if (ni == NULL) + { + __nss_database_lookup ("passwd_compat", NULL, "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + result = internal_setpwent (&ext_ent); __libc_lock_unlock (lock); @@ -245,6 +274,19 @@ internal_endpwent (ent_t *ent) ent->oldkeylen = 0; } + if (ent->result != NULL) + { + nis_freeresult (ent->result); + ent->result = NULL; + } + + if (ent->names != NULL) + { + nis_freenames (ent->names); + ent->names = NULL; + } + ent->names_nr = 0; + ent->blacklist.current = 0; if (ent->blacklist.data != NULL) ent->blacklist.data[0] = '\0'; @@ -272,14 +314,14 @@ _nss_compat_endpwent (void) } static enum nss_status -getpwent_next_netgr (struct passwd *result, ent_t *ent, char *group, - char *buffer, size_t buflen) +getpwent_next_nis_netgr (struct passwd *result, ent_t *ent, char *group, + char *buffer, size_t buflen) { struct parser_data *data = (void *) buffer; char *ypdomain, *host, *user, *domain, *outval, *p, *p2; int status, outvallen; size_t p2len; - + if (yp_get_default_domain (&ypdomain) != YPERR_SUCCESS) { ent->netgroup = 0; @@ -341,12 +383,175 @@ getpwent_next_netgr (struct passwd *result, ent_t *ent, char *group, } static enum nss_status +getpwent_next_nisplus_netgr (struct passwd *result, ent_t *ent, char *group, + char *buffer, size_t buflen) +{ + char *ypdomain, *host, *user, *domain, *p2; + int status, parse_res; + size_t p2len; + nis_result *nisres; + + /* Maybe we should use domainname here ? We need the current + domainname for the domain field in netgroups */ + if (yp_get_default_domain (&ypdomain) != YPERR_SUCCESS) + { + ent->netgroup = 0; + ent->first = 0; + give_pwd_free (&ent->pwd); + return NSS_STATUS_UNAVAIL; + } + + if (ent->first == TRUE) + { + bzero (&ent->netgrdata, sizeof (struct __netgrent)); + __internal_setnetgrent (group, &ent->netgrdata); + ent->first = FALSE; + } + + while (1) + { + status = __internal_getnetgrent_r (&host, &user, &domain, + &ent->netgrdata, buffer, buflen); + if (status != 1) + { + __internal_endnetgrent (&ent->netgrdata); + ent->netgroup = 0; + give_pwd_free (&ent->pwd); + return NSS_STATUS_RETURN; + } + + if (user == NULL || user[0] == '-') + continue; + + if (domain != NULL && strcmp (ypdomain, domain) != 0) + continue; + + p2len = pwd_need_buflen (&ent->pwd); + if (p2len > buflen) + { + __set_errno (ERANGE); + return NSS_STATUS_TRYAGAIN; + } + p2 = buffer + (buflen - p2len); + buflen -= p2len; + { + char buf[strlen (user) + 30]; + sprintf(buf, "[name=%s],passwd.org_dir", user); + nisres = nis_list(buf, EXPAND_NAME, NULL, NULL); + } + if (niserr2nss (nisres->status) != NSS_STATUS_SUCCESS) + { + nis_freeresult (nisres); + continue; + } + parse_res = _nss_nisplus_parse_pwent (nisres, result, buffer, buflen); + nis_freeresult (nisres); + + if (parse_res) + { + copy_pwd_changes (result, &ent->pwd, p2, p2len); + break; + } + } + + return NSS_STATUS_SUCCESS; +} + +static enum nss_status +getpwent_next_netgr (struct passwd *result, ent_t *ent, char *group, + char *buffer, size_t buflen) +{ + if (use_nisplus) + return getpwent_next_nisplus_netgr (result, ent, group, buffer, buflen); + else + return getpwent_next_nis_netgr (result, ent, group, buffer, buflen); +} + +static enum nss_status +getpwent_next_nisplus (struct passwd *result, ent_t *ent, char *buffer, + size_t buflen) +{ + int parse_res; + size_t p2len; + char *p2; + + if (ent->names == NULL) + { + ent->names = nis_getnames ("passwd.org_dir"); + if (ent->names == NULL || ent->names[0] == NULL) + { + ent->nis = 0; + return NSS_STATUS_UNAVAIL; + } + } + + p2len = pwd_need_buflen (&ent->pwd); + if (p2len > buflen) + { + __set_errno (ERANGE); + return NSS_STATUS_TRYAGAIN; + } + p2 = buffer + (buflen - p2len); + buflen -= p2len; + do + { + if (ent->first) + { + next_name: + ent->result = nis_first_entry(ent->names[ent->names_nr]); + if (niserr2nss (ent->result->status) != NSS_STATUS_SUCCESS) + { + ent->nis = 0; + give_pwd_free (&ent->pwd); + return niserr2nss (ent->result->status); + } + ent->first = FALSE; + } + else + { + nis_result *res; + + res = nis_next_entry(ent->names[ent->names_nr], + &ent->result->cookie); + nis_freeresult (ent->result); + ent->result = res; + if (niserr2nss (ent->result->status) != NSS_STATUS_SUCCESS) + { + if ((ent->result->status == NIS_NOTFOUND) && + ent->names[ent->names_nr + 1] != NULL) + { + nis_freeresult (ent->result); + ent->names_nr += 1; + goto next_name; + } + else + { + ent->nis = 0; + give_pwd_free (&ent->pwd); + return niserr2nss (ent->result->status); + } + } + } + parse_res = _nss_nisplus_parse_pwent (ent->result, result, buffer, + buflen); + if (parse_res && + in_blacklist (result->pw_name, strlen (result->pw_name), ent)) + parse_res = 0; /* if result->pw_name in blacklist,search next entry */ + } + while (!parse_res); + + copy_pwd_changes (result, &ent->pwd, p2, p2len); + + return NSS_STATUS_SUCCESS; +} + +static enum nss_status getpwent_next_nis (struct passwd *result, ent_t *ent, char *buffer, size_t buflen) { struct parser_data *data = (void *) buffer; char *domain, *outkey, *outval, *p, *p2; - int outkeylen, outvallen; + int outkeylen, outvallen, parse_res; size_t p2len; if (yp_get_default_domain (&domain) != YPERR_SUCCESS) @@ -404,17 +609,96 @@ getpwent_next_nis (struct passwd *result, ent_t *ent, char *buffer, while (isspace (*p)) ++p; + parse_res = _nss_files_parse_pwent (p, result, data, buflen); + if (parse_res && + in_blacklist (result->pw_name, strlen (result->pw_name), ent)) + parse_res = 0; } - while (!_nss_files_parse_pwent (p, result, data, buflen)); + while (!parse_res); copy_pwd_changes (result, &ent->pwd, p2, p2len); - if (!in_blacklist (result->pw_name, strlen (result->pw_name), ent)) - return NSS_STATUS_SUCCESS; - else - return NSS_STATUS_NOTFOUND; + return NSS_STATUS_SUCCESS; } +/* This function handle the +user entrys in /etc/passwd */ +static enum nss_status +getpwent_next_file_plususer (struct passwd *result, char *buffer, + size_t buflen) +{ + struct parser_data *data = (void *) buffer; + struct passwd pwd; + int parse_res; + char *p; + size_t plen; + + memset (&pwd, '\0', sizeof (struct passwd)); + + copy_pwd_changes (&pwd, result, NULL, 0); + + plen = pwd_need_buflen (&pwd); + if (plen > buflen) + { + __set_errno (ERANGE); + return NSS_STATUS_TRYAGAIN; + } + p = buffer + (buflen - plen); + buflen -= plen; + + if (use_nisplus) /* Do the NIS+ query here */ + { + nis_result *res; + char buf[strlen (result->pw_name) + 24]; + + sprintf(buf, "[name=%s],passwd.org_dir", + &result->pw_name[1]); + res = nis_list(buf, EXPAND_NAME, NULL, NULL); + if (niserr2nss (res->status) != NSS_STATUS_SUCCESS) + { + enum nss_status status = niserr2nss (res->status); + + nis_freeresult (res); + return status; + } + parse_res = _nss_nisplus_parse_pwent (res, result, buffer, buflen); + nis_freeresult (res); + } + else /* Use NIS */ + { + char *domain; + char *outval; + int outvallen; + + if (yp_get_default_domain (&domain) != YPERR_SUCCESS) + return NSS_STATUS_TRYAGAIN; + + if (yp_match (domain, "passwd.byname", &result->pw_name[1], + strlen (result->pw_name) - 1, &outval, &outvallen) + != YPERR_SUCCESS) + return NSS_STATUS_TRYAGAIN; + p = strncpy (buffer, outval, + buflen < outvallen ? buflen : outvallen); + free (outval); + while (isspace (*p)) + p++; + parse_res = _nss_files_parse_pwent (p, result, data, buflen); + } + + if (parse_res) + { + copy_pwd_changes (result, &pwd, p, plen); + give_pwd_free (&pwd); + /* We found the entry. */ + return NSS_STATUS_SUCCESS; + } + else + { + /* Give buffer the old len back */ + buflen += plen; + give_pwd_free (&pwd); + } + return NSS_STATUS_RETURN; +} static enum nss_status getpwent_next_file (struct passwd *result, ent_t *ent, @@ -423,8 +707,7 @@ getpwent_next_file (struct passwd *result, ent_t *ent, struct parser_data *data = (void *) buffer; while (1) { - char *p, *p2; - size_t p2len; + char *p; do { @@ -494,50 +777,16 @@ getpwent_next_file (struct passwd *result, ent_t *ent, if (result->pw_name[0] == '+' && result->pw_name[1] != '\0' && result->pw_name[1] != '@') { - char *domain; - char *outval; - int outvallen; - struct passwd pwd; - - memset (&pwd, '\0', sizeof (struct passwd)); - - if (yp_get_default_domain (&domain) != YPERR_SUCCESS) - /* XXX Should we regard this as an fatal error? I don't - think so. Just continue working. --drepper@gnu */ - continue; - - if (yp_match (domain, "passwd.byname", &result->pw_name[1], - strlen (result->pw_name) - 1, &outval, &outvallen) - != YPERR_SUCCESS) - continue; - - copy_pwd_changes (&pwd, result, NULL, 0); - - p2len = pwd_need_buflen (&pwd); - if (p2len > buflen) - { - __set_errno (ERANGE); - return NSS_STATUS_TRYAGAIN; - } - p2 = buffer + (buflen - p2len); - buflen -= p2len; - p = strncpy (buffer, outval, buflen); - while (isspace (*p)) - p++; - free (outval); - if (_nss_files_parse_pwent (p, result, data, buflen)) - { - copy_pwd_changes (result, &pwd, p2, p2len); - give_pwd_free (&pwd); - /* We found the entry. */ - break; - } + enum nss_status status; + + status = getpwent_next_file_plususer (result, buffer, buflen); + if (status == NSS_STATUS_SUCCESS) /* We found the entry. */ + break; else - { - /* Give buffer the old len back */ - buflen += p2len; - give_pwd_free (&pwd); - } + if (status == NSS_STATUS_RETURN) /* We couldn't parse the entry */ + continue; + else + return status; } /* +:... */ @@ -547,7 +796,10 @@ getpwent_next_file (struct passwd *result, ent_t *ent, ent->first = TRUE; copy_pwd_changes (&ent->pwd, result, NULL, 0); - return getpwent_next_nis (result, ent, buffer, buflen); + if (use_nisplus) + return getpwent_next_nisplus (result, ent, buffer, buflen); + else + return getpwent_next_nis (result, ent, buffer, buflen); } } @@ -572,7 +824,12 @@ internal_getpwent_r (struct passwd *pw, ent_t *ent, char *buffer, return status; } else if (ent->nis) - return getpwent_next_nis (pw, ent, buffer, buflen); + { + if (use_nisplus) + return getpwent_next_nisplus (pw, ent, buffer, buflen); + else + return getpwent_next_nis (pw, ent, buffer, buflen); + } else return getpwent_next_file (pw, ent, buffer, buflen); } @@ -585,6 +842,12 @@ _nss_compat_getpwent_r (struct passwd *pwd, char *buffer, __libc_lock_lock (lock); + if (ni == NULL) + { + __nss_database_lookup ("passwd_compat", NULL, "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + /* Be prepared that the setpwent function was not called before. */ if (ext_ent.stream == NULL) status = internal_setpwent (&ext_ent); @@ -602,13 +865,22 @@ enum nss_status _nss_compat_getpwnam_r (const char *name, struct passwd *pwd, char *buffer, size_t buflen) { - ent_t ent = {0, 0, 0, NULL, 0, NULL, {NULL, 0, 0}, + ent_t ent = {0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, {NULL, 0, 0}, {NULL, NULL, 0, 0, NULL, NULL, NULL}}; enum nss_status status; if (name[0] == '-' || name[0] == '+') return NSS_STATUS_NOTFOUND; + __libc_lock_lock (lock); + + if (ni == NULL) + { + __nss_database_lookup ("passwd_compat", NULL, "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + + __libc_lock_unlock (lock); status = internal_setpwent (&ent); if (status != NSS_STATUS_SUCCESS) @@ -628,10 +900,20 @@ enum nss_status _nss_compat_getpwuid_r (uid_t uid, struct passwd *pwd, char *buffer, size_t buflen) { - ent_t ent = {0, 0, 0, NULL, 0, NULL, {NULL, 0, 0}, + ent_t ent = {0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, {NULL, 0, 0}, {NULL, NULL, 0, 0, NULL, NULL, NULL}}; enum nss_status status; - + + __libc_lock_lock (lock); + + if (ni == NULL) + { + __nss_database_lookup ("passwd_compat", NULL, "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + + __libc_lock_unlock (lock); + status = internal_setpwent (&ent); if (status != NSS_STATUS_SUCCESS) return status; diff --git a/nis/nss_compat/compat-spwd.c b/nis/nss_compat/compat-spwd.c index 47dd22970a..7c0eb24fc1 100644 --- a/nis/nss_compat/compat-spwd.c +++ b/nis/nss_compat/compat-spwd.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1996 Free Software Foundation, Inc. +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996. @@ -26,6 +26,15 @@ #include <libc-lock.h> #include <rpcsvc/yp.h> #include <rpcsvc/ypclnt.h> +#include <rpcsvc/nis.h> +#include <rpcsvc/nislib.h> +#include <nsswitch.h> + +#include "netgroup.h" +#include "nss-nisplus.h" + +static service_user *ni = NULL; +static bool_t use_nisplus = FALSE; /* default: passwd_compat: nis */ /* Get the declaration of the parser function. */ #define ENTNAME spent @@ -50,13 +59,17 @@ struct ent_t bool_t first; char *oldkey; int oldkeylen; + nis_result *result; + nis_name *names; + u_long names_nr; FILE *stream; struct blacklist_t blacklist; struct spwd pwd; + struct __netgrent netgrdata; }; typedef struct ent_t ent_t; -static ent_t ext_ent = {0, 0, 0, NULL, 0, NULL, {NULL, 0, 0}, +static ent_t ext_ent = {0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, {NULL, 0, 0}, {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}}; /* Protect global state against multiple changers. */ @@ -65,7 +78,8 @@ __libc_lock_define_initialized (static, lock) /* Prototypes for local functions. */ static void blacklist_store_name (const char *, ent_t *); static int in_blacklist (const char *, int, ent_t *); - +extern int _nss_nisplus_parse_spent (nis_result *, struct spwd *, + char *, size_t); static void give_spwd_free (struct spwd *pwd) { @@ -130,6 +144,10 @@ internal_setspent (ent_t *ent) ent->nis = ent->first = ent->netgroup = 0; + /* If something was left over free it. */ + if (ent->netgroup) + __internal_endnetgrent (&ent->netgrdata); + if (ent->oldkey != NULL) { free (ent->oldkey); @@ -137,6 +155,18 @@ internal_setspent (ent_t *ent) ent->oldkeylen = 0; } + if (ent->result != NULL) + { + nis_freeresult (ent->result); + ent->result = NULL; + } + if (ent->names != NULL) + { + nis_freenames (ent->names); + ent->names = NULL; + } + ent->names_nr = 0; + ent->blacklist.current = 0; if (ent->blacklist.data != NULL) ent->blacklist.data[0] = '\0'; @@ -164,6 +194,12 @@ _nss_compat_setspent (void) __libc_lock_lock (lock); + if (ni == NULL) + { + __nss_database_lookup ("shadow_compat", "passwd_compat", "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + result = internal_setspent (&ext_ent); __libc_lock_unlock (lock); @@ -181,6 +217,9 @@ internal_endspent (ent_t *ent) ent->stream = NULL; } + if (ent->netgroup) + __internal_endnetgrent (&ent->netgrdata); + ent->nis = ent->first = ent->netgroup = 0; if (ent->oldkey != NULL) @@ -190,10 +229,22 @@ internal_endspent (ent_t *ent) ent->oldkeylen = 0; } + if (ent->result != NULL) + { + nis_freeresult (ent->result); + ent->result = NULL; + } + if (ent->names != NULL) + { + nis_freenames (ent->names); + ent->names = NULL; + } + ent->names_nr = 0; + ent->blacklist.current = 0; if (ent->blacklist.data != NULL) ent->blacklist.data[0] = '\0'; - + give_spwd_free (&ent->pwd); return NSS_STATUS_SUCCESS; @@ -215,8 +266,8 @@ _nss_compat_endspent (void) static enum nss_status -getspent_next_netgr (struct spwd *result, ent_t *ent, char *group, - char *buffer, size_t buflen) +getspent_next_nis_netgr (struct spwd *result, ent_t *ent, char *group, + char *buffer, size_t buflen) { struct parser_data *data = (void *) buffer; char *ypdomain, *host, *user, *domain, *outval, *p, *p2; @@ -233,15 +284,18 @@ getspent_next_netgr (struct spwd *result, ent_t *ent, char *group, if (ent->first == TRUE) { - setnetgrent (group); + bzero (&ent->netgrdata, sizeof (struct __netgrent)); + __internal_setnetgrent (group, &ent->netgrdata); ent->first = FALSE; } while (1) { - if ((status = getnetgrent (&host, &user, &domain)) != 1) + status = __internal_getnetgrent_r (&host, &user, &domain, + &ent->netgrdata, buffer, buflen); + if (status != 1) { - endnetgrent (); + __internal_endnetgrent (&ent->netgrdata); ent->netgroup = 0; give_spwd_free (&ent->pwd); return NSS_STATUS_RETURN; @@ -281,12 +335,176 @@ getspent_next_netgr (struct spwd *result, ent_t *ent, char *group, } static enum nss_status +getspent_next_nisplus_netgr (struct spwd *result, ent_t *ent, char *group, + char *buffer, size_t buflen) +{ + char *ypdomain, *host, *user, *domain, *p2; + int status, parse_res; + size_t p2len; + nis_result *nisres; + + /* Maybe we should use domainname here ? We need the current + domainname for the domain field in netgroups */ + if (yp_get_default_domain (&ypdomain) != YPERR_SUCCESS) + { + ent->netgroup = 0; + ent->first = 0; + give_spwd_free (&ent->pwd); + return NSS_STATUS_UNAVAIL; + } + + if (ent->first == TRUE) + { + bzero (&ent->netgrdata, sizeof (struct __netgrent)); + __internal_setnetgrent (group, &ent->netgrdata); + ent->first = FALSE; + } + + while (1) + { + status = __internal_getnetgrent_r (&host, &user, &domain, + &ent->netgrdata, buffer, buflen); + if (status != 1) + { + __internal_endnetgrent (&ent->netgrdata); + ent->netgroup = 0; + give_spwd_free (&ent->pwd); + return NSS_STATUS_RETURN; + } + + if (user == NULL || user[0] == '-') + continue; + + if (domain != NULL && strcmp (ypdomain, domain) != 0) + continue; + + p2len = spwd_need_buflen (&ent->pwd); + if (p2len > buflen) + { + __set_errno (ERANGE); + return NSS_STATUS_TRYAGAIN; + } + p2 = buffer + (buflen - p2len); + buflen -= p2len; + { + char buf[strlen (user) + 30]; + sprintf(buf, "[name=%s],passwd.org_dir", user); + nisres = nis_list(buf, EXPAND_NAME, NULL, NULL); + } + if (niserr2nss (nisres->status) != NSS_STATUS_SUCCESS) + { + nis_freeresult (nisres); + continue; + } + parse_res = _nss_nisplus_parse_spent (nisres, result, buffer, buflen); + nis_freeresult (nisres); + + if (parse_res) + { + copy_spwd_changes (result, &ent->pwd, p2, p2len); + break; + } + } + + return NSS_STATUS_SUCCESS; +} + +static enum nss_status +getspent_next_netgr (struct spwd *result, ent_t *ent, char *group, + char *buffer, size_t buflen) +{ + if (use_nisplus) + return getpwent_next_nisplus_netgr (result, ent, group, buffer, buflen); + else + return getpwent_next_nis_netgr (result, ent, group, buffer, buflen); +} + +static enum nss_status +getspent_next_nisplus (struct spwd *result, ent_t *ent, char *buffer, + size_t buflen) +{ + int parse_res; + size_t p2len; + char *p2; + + if (ent->names == NULL) + { + ent->names = nis_getnames ("passwd.org_dir"); + if (ent->names == NULL || ent->names[0] == NULL) + { + ent->nis = 0; + return NSS_STATUS_UNAVAIL; + } + } + + p2len = spwd_need_buflen (&ent->pwd); + if (p2len > buflen) + { + __set_errno (ERANGE); + return NSS_STATUS_TRYAGAIN; + } + p2 = buffer + (buflen - p2len); + buflen -= p2len; + do + { + if (ent->first) + { + next_name: + ent->result = nis_first_entry(ent->names[ent->names_nr]); + if (niserr2nss (ent->result->status) != NSS_STATUS_SUCCESS) + { + ent->nis = 0; + give_spwd_free (&ent->pwd); + return niserr2nss (ent->result->status); + } + ent->first = FALSE; + } + else + { + nis_result *res; + + res = nis_next_entry(ent->names[ent->names_nr], + &ent->result->cookie); + nis_freeresult (ent->result); + ent->result = res; + if (niserr2nss (ent->result->status) != NSS_STATUS_SUCCESS) + { + if ((ent->result->status == NIS_NOTFOUND) && + ent->names[ent->names_nr + 1] != NULL) + { + nis_freeresult (ent->result); + ent->names_nr += 1; + goto next_name; + } + else + { + ent->nis = 0; + give_spwd_free (&ent->pwd); + return niserr2nss (ent->result->status); + } + } + } + parse_res = _nss_nisplus_parse_spent (ent->result, result, buffer, + buflen); + if (parse_res && + in_blacklist (result->sp_namp, strlen (result->sp_namp), ent)) + parse_res = 0; /* if result->pw_name in blacklist,search next entry */ + } + while (!parse_res); + + copy_spwd_changes (result, &ent->pwd, p2, p2len); + + return NSS_STATUS_SUCCESS; +} + + +static enum nss_status getspent_next_nis (struct spwd *result, ent_t *ent, char *buffer, size_t buflen) { struct parser_data *data = (void *) buffer; char *domain, *outkey, *outval, *p, *p2; - int outkeylen, outvallen; + int outkeylen, outvallen, parse_res; size_t p2len; if (yp_get_default_domain (&domain) != YPERR_SUCCESS) @@ -344,17 +562,96 @@ getspent_next_nis (struct spwd *result, ent_t *ent, while (isspace (*p)) ++p; + parse_res = _nss_files_parse_spent (p, result, data, buflen); + if (parse_res && + in_blacklist (result->sp_namp, strlen (result->sp_namp), ent)) + parse_res = 0; } - while (!_nss_files_parse_spent (p, result, data, buflen)); + while (!parse_res); copy_spwd_changes (result, &ent->pwd, p2, p2len); - if (!in_blacklist (result->sp_namp, strlen (result->sp_namp), ent)) - return NSS_STATUS_SUCCESS; - else - return NSS_STATUS_NOTFOUND; + return NSS_STATUS_SUCCESS; } +/* This function handle the +user entrys in /etc/shadow */ +static enum nss_status +getspent_next_file_plususer (struct spwd *result, char *buffer, + size_t buflen) +{ + struct parser_data *data = (void *) buffer; + struct spwd pwd; + int parse_res; + char *p; + size_t plen; + + memset (&pwd, '\0', sizeof (struct spwd)); + + copy_spwd_changes (&pwd, result, NULL, 0); + + plen = spwd_need_buflen (&pwd); + if (plen > buflen) + { + __set_errno (ERANGE); + return NSS_STATUS_TRYAGAIN; + } + p = buffer + (buflen - plen); + buflen -= plen; + + if (use_nisplus) /* Do the NIS+ query here */ + { + nis_result *res; + char buf[strlen (result->sp_namp) + 24]; + + sprintf(buf, "[name=%s],passwd.org_dir", + &result->sp_namp[1]); + res = nis_list(buf, EXPAND_NAME, NULL, NULL); + if (niserr2nss (res->status) != NSS_STATUS_SUCCESS) + { + enum nss_status status = niserr2nss (res->status); + + nis_freeresult (res); + return status; + } + parse_res = _nss_nisplus_parse_spent (res, result, buffer, buflen); + nis_freeresult (res); + } + else /* Use NIS */ + { + char *domain; + char *outval; + int outvallen; + + if (yp_get_default_domain (&domain) != YPERR_SUCCESS) + return NSS_STATUS_TRYAGAIN; + + if (yp_match (domain, "passwd.byname", &result->sp_namp[1], + strlen (result->sp_namp) - 1, &outval, &outvallen) + != YPERR_SUCCESS) + return NSS_STATUS_TRYAGAIN; + p = strncpy (buffer, outval, + buflen < outvallen ? buflen : outvallen); + free (outval); + while (isspace (*p)) + p++; + parse_res = _nss_files_parse_spent (p, result, data, buflen); + } + + if (parse_res) + { + copy_spwd_changes (result, &pwd, p, plen); + give_spwd_free (&pwd); + /* We found the entry. */ + return NSS_STATUS_SUCCESS; + } + else + { + /* Give buffer the old len back */ + buflen += plen; + give_spwd_free (&pwd); + } + return NSS_STATUS_RETURN; +} static enum nss_status getspent_next_file (struct spwd *result, ent_t *ent, @@ -434,50 +731,16 @@ getspent_next_file (struct spwd *result, ent_t *ent, if (result->sp_namp[0] == '+' && result->sp_namp[1] != '\0' && result->sp_namp[1] != '@') { - char *domain; - char *outval; - int outvallen; - struct spwd pwd; - - memset (&pwd, '\0', sizeof (struct spwd)); - - if (yp_get_default_domain (&domain) != YPERR_SUCCESS) - /* XXX Should we regard this as an fatal error? I don't - think so. Just continue working. --drepper@gnu */ - continue; - - if (yp_match (domain, "shadow.byname", &result->sp_namp[1], - strlen (result->sp_namp) - 1, &outval, &outvallen) - != YPERR_SUCCESS) - continue; - - copy_spwd_changes (&pwd, result, NULL, 0); - - p2len = spwd_need_buflen (&pwd); - if (p2len > buflen) - { - __set_errno (ERANGE); - return NSS_STATUS_TRYAGAIN; - } - p2 = buffer + (buflen - p2len); - buflen -= p2len; - p = strncpy (buffer, outval, buflen); - while (isspace (*p)) - p++; - free (outval); - if (_nss_files_parse_spent (p, result, data, buflen)) - { - copy_spwd_changes (result, &pwd, p2, p2len); - give_spwd_free (&pwd); - /* We found the entry. */ - break; - } - else - { - /* Give buffer the old len back */ - buflen += p2len; - give_spwd_free (&pwd); - } + enum nss_status status; + + status = getspent_next_file_plususer (result, buffer, buflen); + if (status == NSS_STATUS_SUCCESS) /* We found the entry. */ + break; + else + if (status == NSS_STATUS_RETURN) /* We couldn't parse the entry */ + continue; + else + return status; } /* +:... */ @@ -487,7 +750,10 @@ getspent_next_file (struct spwd *result, ent_t *ent, ent->first = TRUE; copy_spwd_changes (&ent->pwd, result, NULL, 0); - return getspent_next_nis (result, ent, buffer, buflen); + if (use_nisplus) + return getspent_next_nisplus (result, ent, buffer, buflen); + else + return getspent_next_nis (result, ent, buffer, buflen); } } @@ -512,7 +778,12 @@ internal_getspent_r (struct spwd *pw, ent_t *ent, return status; } else if (ent->nis) - return getspent_next_nis (pw, ent, buffer, buflen); + { + if (use_nisplus) + return getspent_next_nisplus (pw, ent, buffer, buflen); + else + return getspent_next_nis (pw, ent, buffer, buflen); + } else return getspent_next_file (pw, ent, buffer, buflen); } @@ -524,6 +795,12 @@ _nss_compat_getspent_r (struct spwd *pwd, char *buffer, size_t buflen) __libc_lock_lock (lock); + if (ni == NULL) + { + __nss_database_lookup ("shadow_compat", "passwd_compat", "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + /* Be prepared that the setspent function was not called before. */ if (ext_ent.stream == NULL) status = internal_setspent (&ext_ent); @@ -541,13 +818,19 @@ enum nss_status _nss_compat_getspnam_r (const char *name, struct spwd *pwd, char *buffer, size_t buflen) { - ent_t ent = {0, 0, 0, NULL, 0, NULL, {NULL, 0, 0}, + ent_t ent = {0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, {NULL, 0, 0}, {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}}; enum nss_status status; if (name[0] == '-' || name[0] == '+') return NSS_STATUS_NOTFOUND; + if (ni == NULL) + { + __nss_database_lookup ("shadow_compat", "passwd_compat", "nis", &ni); + use_nisplus = (strcmp (ni->name, "nisplus") == 0); + } + status = internal_setspent (&ent); if (status != NSS_STATUS_SUCCESS) return status; @@ -619,3 +902,4 @@ in_blacklist (const char *name, int namelen, ent_t *ent) stpcpy (stpcpy (stpcpy (buf, "|"), name), "|"); return strstr (ent->blacklist.data, buf) != NULL; } + diff --git a/nis/nss_nis/nis-grp.c b/nis/nss_nis/nis-grp.c index d727202513..139edf2dd8 100644 --- a/nis/nss_nis/nis-grp.c +++ b/nis/nss_nis/nis-grp.c @@ -122,7 +122,7 @@ internal_nis_getgrent_r (struct group *grp, char *buffer, size_t buflen) free (result); parse_res = _nss_files_parse_grent (p, grp, data, buflen); - if (!parse_res && errno == ERANGE) + if (parse_res < 1 && errno == ERANGE) return NSS_STATUS_TRYAGAIN; free (oldkey); @@ -130,7 +130,7 @@ internal_nis_getgrent_r (struct group *grp, char *buffer, size_t buflen) oldkeylen = keylen; new_start = 0; } - while (!parse_res); + while (parse_res < 1); return NSS_STATUS_SUCCESS; } @@ -192,7 +192,7 @@ _nss_nis_getgrnam_r (const char *name, struct group *grp, parse_res = _nss_files_parse_grent (p, grp, data, buflen); - if (!parse_res) + if (parse_res < 1) { if (errno == ERANGE) return NSS_STATUS_TRYAGAIN; @@ -243,7 +243,7 @@ _nss_nis_getgrgid_r (gid_t gid, struct group *grp, parse_res = _nss_files_parse_grent (p, grp, data, buflen); - if (!parse_res) + if (parse_res < 1) { if (errno == ERANGE) return NSS_STATUS_TRYAGAIN; diff --git a/nis/nss_nis/nis-publickey.c b/nis/nss_nis/nis-publickey.c index aad4da5cc2..f50f7095fc 100644 --- a/nis/nss_nis/nis-publickey.c +++ b/nis/nss_nis/nis-publickey.c @@ -23,22 +23,24 @@ #include <string.h> #include <syslog.h> #include <libc-lock.h> -#include <rpc/key_prot.h> +#include <rpc/rpc.h> #include <rpcsvc/yp.h> #include <rpcsvc/ypclnt.h> +#if defined (HAVE_SECURE_RPC) +#include <rpc/key_prot.h> +extern int xdecrypt (char *, char *); +#endif #include "nss-nis.h" -extern int xdecrypt (char *, char *); - -/* If we found the entry, we give a SUCCESS and an empty key back. */ +/* If we haven't found the entry, we give a SUCCESS and an empty key back. */ enum nss_status _nss_nis_getpublickey (const char *netname, char *pkey) { enum nss_status retval; char *domain, *result; int len; - + pkey[0] = 0; if (netname == NULL) @@ -75,6 +77,7 @@ _nss_nis_getpublickey (const char *netname, char *pkey) enum nss_status _nss_nis_getsecretkey (const char *netname, char *skey, char *passwd) { +#if defined (HAVE_SECURE_RPC) enum nss_status retval; char buf[1024]; char *domain, *result; @@ -120,6 +123,9 @@ _nss_nis_getsecretkey (const char *netname, char *skey, char *passwd) buf[HEXKEYBYTES] = 0; strcpy (skey, buf); } +#else + skey[0] = 0; +#endif return NSS_STATUS_SUCCESS; } diff --git a/nis/nss_nisplus/nisplus-alias.c b/nis/nss_nisplus/nisplus-alias.c index b0f035178e..b27f1a87ab 100644 --- a/nis/nss_nisplus/nisplus-alias.c +++ b/nis/nss_nisplus/nisplus-alias.c @@ -44,7 +44,7 @@ _nss_nisplus_parse_aliasent (nis_result *result, struct aliasent *alias, char *buffer, size_t buflen) { if (result == NULL) - return -1; + return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_len != 1 || @@ -52,7 +52,7 @@ _nss_nisplus_parse_aliasent (nis_result *result, struct aliasent *alias, strcmp(result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, "mail_aliases") != 0 || result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 2) - return -1; + return 0; else { char *first_unused = buffer + NISENTRYLEN(0, 1, result) + 1; @@ -67,7 +67,7 @@ _nss_nisplus_parse_aliasent (nis_result *result, struct aliasent *alias, /* The line is too long for our buffer. */ no_more_room: __set_errno (ERANGE); - return -1; + return 0; } else { diff --git a/nis/nss_nisplus/nisplus-ethers.c b/nis/nss_nisplus/nisplus-ethers.c index ac3e06960a..2cdc2dfd7a 100644 --- a/nis/nss_nisplus/nisplus-ethers.c +++ b/nis/nss_nisplus/nisplus-ethers.c @@ -86,7 +86,7 @@ _nss_nisplus_parse_etherent (nis_result *result, struct etherent *ether, struct parser_data *data = (void *) buffer; if (result == NULL) - return -1; + return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_len != 1 || @@ -94,7 +94,7 @@ _nss_nisplus_parse_etherent (nis_result *result, struct etherent *ether, strcmp(result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, "ethers_tbl") != 0 || result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 2) - return -1; + return 0; memset (p, '\0', room_left); @@ -102,7 +102,7 @@ _nss_nisplus_parse_etherent (nis_result *result, struct etherent *ether, if (NISENTRYLEN (0, 0, result) +1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strncpy (p, NISENTRYVAL (0, 0, result), NISENTRYLEN (0, 0, result)); room_left -= (NISENTRYLEN (0, 0, result) +1); @@ -110,7 +110,7 @@ _nss_nisplus_parse_etherent (nis_result *result, struct etherent *ether, if (NISENTRYLEN (0, 1, result) +1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, "\t"); strncat (p, NISENTRYVAL (0, 1, result), NISENTRYLEN (0, 1, result)); diff --git a/nis/nss_nisplus/nisplus-grp.c b/nis/nss_nisplus/nisplus-grp.c index 2e56afa6fc..1c73ca555b 100644 --- a/nis/nss_nisplus/nisplus-grp.c +++ b/nis/nss_nisplus/nisplus-grp.c @@ -39,63 +39,34 @@ static nis_name *names = NULL; #define NISENTRYLEN(idx,col,res) \ ((res)->objects.objects_val[(idx)].zo_data.objdata_u.en_data.en_cols.en_cols_val[(col)].ec_value.ec_value_len) -#define STRUCTURE group -#define ENTNAME grent -struct grent_data {}; - -#define TRAILING_LIST_MEMBER gr_mem -#define TRAILING_LIST_SEPARATOR_P(c) ((c) == ',') -#include "../../nss/nss_files/files-parse.c" -LINE_PARSER -(, - STRING_FIELD (result->gr_name, ISCOLON, 0); - if (line[0] == '\0' - && (result->gr_name[0] == '+' || result->gr_name[0] == '-')) - { - result->gr_passwd = NULL; - result->gr_gid = 0; - } - else - { - STRING_FIELD (result->gr_passwd, ISCOLON, 0); - if (result->gr_name[0] == '+' || result->gr_name[0] == '-') - INT_FIELD_MAYBE_NULL (result->gr_gid, ISCOLON, 0, 10, , 0) - else - INT_FIELD (result->gr_gid, ISCOLON, 0, 10,) - } - ) - -static int +int _nss_nisplus_parse_grent (nis_result * result, struct group *gr, char *buffer, size_t buflen) { -#if 0 - /* XXX here is a bug, sometimes we get some special characters at the - end of a line */ char *first_unused = buffer; size_t room_left = buflen; char *line; int count; - + if (result == NULL) - return -1; - + return 0; + if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_len != 1 || result->objects.objects_val[0].zo_data.zo_type != ENTRY_OBJ || - strcmp (result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, - "group_tbl") != 0 || + strcmp (result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, + "group_tbl") != 0 || result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 4) - return -1; + return 0; if (NISENTRYLEN (0, 0, result) >= room_left) { /* The line is too long for our buffer. */ no_more_room: __set_errno (ERANGE); - return -1; + return 0; } - + strncpy (first_unused, NISENTRYVAL (0, 0, result), NISENTRYLEN (0, 0, result)); first_unused[NISENTRYLEN (0, 0, result)] = '\0'; @@ -158,8 +129,11 @@ _nss_nisplus_parse_grent (nis_result * result, struct group *gr, if (line != gr->gr_mem[count]) { - *line = '\0'; - ++line; + if (*line != '\0') + { + *line = '\0'; + ++line; + } ++count; } else @@ -171,59 +145,6 @@ _nss_nisplus_parse_grent (nis_result * result, struct group *gr, gr->gr_mem[count] = NULL; return 1; -#else - char *p = buffer; - size_t room_left = buflen; - struct parser_data *data = (void *) buffer; - - if (result == NULL) - return -1; - - if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || - result->objects.objects_len != 1 || - result->objects.objects_val[0].zo_data.zo_type != ENTRY_OBJ || - strcmp (result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, - "group_tbl") != 0 || - result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 4) - return -1; - - memset (p, '\0', room_left); - - if (NISENTRYLEN (0, 0, result) + 1 > room_left) - { - __set_errno (ERANGE); - return -1; - } - strncpy (p, NISENTRYVAL (0, 0, result), NISENTRYLEN (0, 0, result)); - room_left -= (NISENTRYLEN (0, 0, result) + 1); - strcat (p, ":"); - - if (NISENTRYLEN (0, 1, result) + 1 > room_left) - { - __set_errno (ERANGE); - return -1; - } - strncat (p, NISENTRYVAL (0, 1, result), NISENTRYLEN (0, 1, result)); - room_left -= (NISENTRYLEN (0, 1, result) + 1); - strcat (p, ":"); - if (NISENTRYLEN (0, 2, result) + 1 > room_left) - { - __set_errno (ERANGE); - return -1; - } - strncat (p, NISENTRYVAL (0, 2, result), NISENTRYLEN (0, 2, result)); - room_left -= (NISENTRYLEN (0, 2, result) + 1); - strcat (p, ":"); - if (NISENTRYLEN (0, 3, result) + 1 > room_left) - { - __set_errno (ERANGE); - return -1; - } - strncat (p, NISENTRYVAL (0, 3, result), NISENTRYLEN (0, 3, result)); - room_left -= (NISENTRYLEN (0, 3, result) + 1); - - return _nss_files_parse_grent (p, gr, data, buflen); -#endif } enum nss_status diff --git a/nis/nss_nisplus/nisplus-hosts.c b/nis/nss_nisplus/nisplus-hosts.c index 0a486411de..1bcbe40e87 100644 --- a/nis/nss_nisplus/nisplus-hosts.c +++ b/nis/nss_nisplus/nisplus-hosts.c @@ -121,14 +121,14 @@ _nss_nisplus_parse_hostent (nis_result *result, struct hostent *host, struct parser_data *data = (void *) buffer; if (result == NULL) - return -1; + return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_val[0].zo_data.zo_type != ENTRY_OBJ || strcmp(result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, "hosts_tbl") != 0 || result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 4) - return -1; + return 0; memset (p, '\0', room_left); @@ -136,7 +136,7 @@ _nss_nisplus_parse_hostent (nis_result *result, struct hostent *host, if (NISENTRYLEN (0, 2, result) + 1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strncpy (p, NISENTRYVAL (0, 2, result), NISENTRYLEN (0, 2, result)); @@ -145,7 +145,7 @@ _nss_nisplus_parse_hostent (nis_result *result, struct hostent *host, if (NISENTRYLEN (0, 0, result) + 1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, "\t"); strncat (p, NISENTRYVAL (0, 0, result), NISENTRYLEN (0, 0, result)); @@ -157,7 +157,7 @@ _nss_nisplus_parse_hostent (nis_result *result, struct hostent *host, if (NISENTRYLEN (i, 1, result) + 1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, " "); strcat (p, NISENTRYVAL (i, 1, result)); diff --git a/nis/nss_nisplus/nisplus-netgrp.c b/nis/nss_nisplus/nisplus-netgrp.c index 766d2bc773..f2a1b301b9 100644 --- a/nis/nss_nisplus/nisplus-netgrp.c +++ b/nis/nss_nisplus/nisplus-netgrp.c @@ -31,13 +31,9 @@ __libc_lock_define_initialized (static, lock) -static char *data = NULL; -static size_t data_size = 0; -static char *cursor = NULL;; - -extern enum nss_status -_nss_netgroup_parseline (char **cursor, struct __netgrent *result, - char *buffer, size_t buflen); +static nis_result *data = NULL; +static unsigned long data_size = 0; +static unsigned long position = 0; #define NISENTRYVAL(idx,col,res) \ ((res)->objects.objects_val[(idx)].zo_data.objdata_u.en_data.en_cols.en_cols_val[(col)].ec_value.ec_value_val) @@ -45,15 +41,103 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result, #define NISENTRYLEN(idx,col,res) \ ((res)->objects.objects_val[(idx)].zo_data.objdata_u.en_data.en_cols.en_cols_val[(col)].ec_value.ec_value_len) +static enum nss_status +_nss_nisplus_parse_netgroup (struct __netgrent *result, char *buffer, + size_t buflen) +{ + enum nss_status status; + + /* Some sanity checks. */ + if (data == NULL || data_size == 0) + /* User bug. setnetgrent() wasn't called before. */ + abort (); + + if (position == data_size) + return result->first ? NSS_STATUS_NOTFOUND : NSS_STATUS_RETURN; + + if (NISENTRYLEN (position, 1, data) > 0) + { + /* We have a list of other netgroups. */ + + result->type = group_val; + if (NISENTRYLEN (position, 1, data) >= buflen) + { + __set_errno (ERANGE); + return NSS_STATUS_TRYAGAIN; + } + strncpy (buffer, NISENTRYVAL (position, 1, data), + NISENTRYLEN (position, 1, data)); + buffer[NISENTRYLEN (position, 1, data)] = '\0'; + result->val.group = buffer; + ++position; + result->first = 0; + + return NSS_STATUS_SUCCESS; + } + + /* Before we can copy the entry to the private buffer we have to make + sure it is big enough. */ + if (NISENTRYLEN (position, 2, data) + NISENTRYLEN (position, 3, data) + + NISENTRYLEN (position, 4, data) + 6 > buflen) + { + __set_errno (ERANGE); + status = NSS_STATUS_UNAVAIL; + } + else + { + char *cp = buffer; + + result->type = triple_val; + + if (NISENTRYLEN (position, 2, data) == 0) + result->val.triple.host = NULL; + else + { + result->val.triple.host = cp; + cp = stpncpy (cp, NISENTRYVAL (position, 2, data), + NISENTRYLEN (position, 2, data)); + *cp = '\0'; + ++cp; + } + + if (NISENTRYLEN (position, 3, data) == 0) + result->val.triple.user = NULL; + else + { + result->val.triple.user = cp; + cp = stpncpy (cp, NISENTRYVAL (position, 3, data), + NISENTRYLEN (position, 3, data)); + *cp = '\0'; + ++cp; + } + + if (NISENTRYLEN (position, 4, data) == 0) + result->val.triple.domain = NULL; + else + { + result->val.triple.domain = cp; + cp = stpncpy (cp, NISENTRYVAL (position, 4, data), + NISENTRYLEN (position, 4, data)); + *cp = '\0'; + } + + status = NSS_STATUS_SUCCESS; + + /* Remember where we stopped reading. */ + ++position; + + result->first = 0; + } + + return status; +} + enum nss_status _nss_nisplus_setnetgrent (char *group) { enum nss_status status; - nis_result *result; char buf[strlen (group) + 30]; - int i; - size_t len; if (group == NULL || group[0] == '\0') return NSS_STATUS_UNAVAIL; @@ -64,43 +148,27 @@ _nss_nisplus_setnetgrent (char *group) if (data != NULL) { - free (data); + nis_freeresult (data); data = NULL; data_size = 0; - cursor = NULL; + position = 0; } sprintf(buf, "[name=%s],netgroup.org_dir", group); - result = nis_list(buf, EXPAND_NAME, NULL, NULL); - - if (niserr2nss (result->status) != NSS_STATUS_SUCCESS) - status = niserr2nss (result->status); - - len = 0; - for (i = 0; i < result->objects.objects_len; i++) - len += 1 + NISENTRYLEN (i, 1, result) + 1 + NISENTRYLEN(i,2,result) - + 1 + NISENTRYLEN(i,3,result) + 1 + NISENTRYLEN(i,4,result) + 2; - - data = malloc (len+1); - memset (data, '\0', len+1); + data = nis_list(buf, EXPAND_NAME, NULL, NULL); - for (i = 0; i < result->objects.objects_len; i++) + if (niserr2nss (data->status) != NSS_STATUS_SUCCESS) { - strncat (data, NISENTRYVAL (i, 1, result), NISENTRYLEN (i, 1, result)); - strcat (data," ("); - strncat (data, NISENTRYVAL(i,2,result), NISENTRYLEN (i, 2, result)); - strcat (data, ","); - strncat (data, NISENTRYVAL(i,3,result), NISENTRYLEN (i, 3, result)); - strcat (data, ","); - strncat (data, NISENTRYVAL(i,4,result), NISENTRYLEN (i, 4, result)); - strcat (data, ") "); + status = niserr2nss (data->status); + nis_freeresult (data); + data = NULL; } - - nis_freeresult (result); - + else + data_size = data->objects.objects_len; + __libc_lock_unlock (lock); - + return status; } @@ -111,10 +179,10 @@ _nss_nisplus_endnetgrent (void) if (data != NULL) { - free (data); + nis_freeresult (data); data = NULL; data_size = 0; - cursor = NULL; + position = 0; } __libc_lock_unlock (lock); @@ -128,12 +196,9 @@ _nss_nisplus_getnetgrent_r (struct __netgrent *result, { enum nss_status status; - if (cursor == NULL) - return NSS_STATUS_NOTFOUND; - __libc_lock_lock (lock); - status = _nss_netgroup_parseline (&cursor, result, buffer, buflen); + status = _nss_nisplus_parse_netgroup (result, buffer, buflen); __libc_lock_unlock (lock); diff --git a/nis/nss_nisplus/nisplus-network.c b/nis/nss_nisplus/nisplus-network.c index 28580b6bc9..7e0ccd6411 100644 --- a/nis/nss_nisplus/nisplus-network.c +++ b/nis/nss_nisplus/nisplus-network.c @@ -69,20 +69,20 @@ _nss_nisplus_parse_netent (nis_result *result, struct netent *network, struct parser_data *data = (void *) buffer; if (result == NULL) - return -1; + return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_val[0].zo_data.zo_type != ENTRY_OBJ || strcmp(result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, "networks_tbl") != 0 || result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 3) - return -1; + return 0; /* Generate the network entry format and use the normal parser */ if (NISENTRYLEN (0, 0, result) +1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } memset (p, '\0', room_left); @@ -93,7 +93,7 @@ _nss_nisplus_parse_netent (nis_result *result, struct netent *network, if (NISENTRYLEN (0, 2, result) +1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, "\t"); strncat (p, NISENTRYVAL (0, 2, result), NISENTRYLEN (0, 2, result)); @@ -101,12 +101,11 @@ _nss_nisplus_parse_netent (nis_result *result, struct netent *network, /* + 1: We overwrite the last \0 */ for (i = 1; i < result->objects.objects_len; i++) - /* XXX should we start with i = 0 or with i = 1 ? */ { if (NISENTRYLEN (i, 1, result) +1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, " "); strncat (p, NISENTRYVAL (i, 1, result), NISENTRYLEN (i, 1, result)); diff --git a/nis/nss_nisplus/nisplus-proto.c b/nis/nss_nisplus/nisplus-proto.c index b26cb8230e..5cb55d367c 100644 --- a/nis/nss_nisplus/nisplus-proto.c +++ b/nis/nss_nisplus/nisplus-proto.c @@ -60,14 +60,14 @@ _nss_nisplus_parse_protoent (nis_result * result, struct protoent *proto, struct parser_data *data = (void *) buffer; if (result == NULL) - return -1; + return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_val[0].zo_data.zo_type != ENTRY_OBJ || strcmp (result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, "protocols_tbl") != 0 || result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 3) - return -1; + return 0; memset (p, '\0', room_left); @@ -75,7 +75,7 @@ _nss_nisplus_parse_protoent (nis_result * result, struct protoent *proto, if (NISENTRYLEN (0, 0, result) + 1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strncpy (p, NISENTRYVAL (0, 0, result), NISENTRYLEN (0, 0, result)); room_left -= (NISENTRYLEN (0, 0, result) + 1); @@ -83,7 +83,7 @@ _nss_nisplus_parse_protoent (nis_result * result, struct protoent *proto, if (NISENTRYLEN (0, 2, result) + 1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, "\t"); strncat (p, NISENTRYVAL (0, 2, result), NISENTRYLEN (0, 2, result)); @@ -95,7 +95,7 @@ _nss_nisplus_parse_protoent (nis_result * result, struct protoent *proto, if (NISENTRYLEN (i, 1, result) + 1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, " "); strncat (p, NISENTRYVAL (i, 1, result), NISENTRYLEN (i, 1, result)); diff --git a/nis/nss_nisplus/nisplus-publickey.c b/nis/nss_nisplus/nisplus-publickey.c index 7312c91229..91cfba730e 100644 --- a/nis/nss_nisplus/nisplus-publickey.c +++ b/nis/nss_nisplus/nisplus-publickey.c @@ -23,15 +23,17 @@ #include <stdio.h> #include <string.h> #include <syslog.h> -#include <rpc/key_prot.h> +#include <rpc/rpc.h> #include <rpcsvc/nis.h> #include <rpcsvc/nislib.h> +#ifdef HAVE_SECURE_RPC +#include <rpc/key_prot.h> +extern int xdecrypt (char *, char *); +#endif #include <nss-nisplus.h> -extern int xdecrypt (char *, char *); - -/* If we found the entry, we give a SUCCESS and an empty key back. */ +/* If we haven't found the entry, we give a SUCCESS and an empty key back. */ enum nss_status _nss_nisplus_getpublickey (const char *netname, char *pkey) { @@ -70,6 +72,8 @@ _nss_nisplus_getpublickey (const char *netname, char *pkey) { if (retval == NSS_STATUS_TRYAGAIN) __set_errno (EAGAIN); + if (res->status == NIS_NOTFOUND) + retval = NSS_STATUS_SUCCESS; nis_freeresult (res); return retval; } @@ -100,6 +104,7 @@ _nss_nisplus_getpublickey (const char *netname, char *pkey) enum nss_status _nss_nisplus_getsecretkey (const char *netname, char *skey, char *passwd) { +#ifdef HAVE_SECURE_RPC nis_result *res; enum nss_status retval; char buf[NIS_MAXNAMELEN+2]; @@ -167,6 +172,9 @@ _nss_nisplus_getsecretkey (const char *netname, char *skey, char *passwd) buf[HEXKEYBYTES] = 0; strcpy (skey, buf); +#else + skey[0] = 0; +#endif return NSS_STATUS_SUCCESS; } diff --git a/nis/nss_nisplus/nisplus-pwd.c b/nis/nss_nisplus/nisplus-pwd.c index 3717d5e98a..b65a9fe395 100644 --- a/nis/nss_nisplus/nisplus-pwd.c +++ b/nis/nss_nisplus/nisplus-pwd.c @@ -38,7 +38,7 @@ static nis_name *names = NULL; #define NISENTRYLEN(idx,col,res) \ ((res)->objects.objects_val[(idx)].zo_data.objdata_u.en_data.en_cols.en_cols_val[(col)].ec_value.ec_value_len) -static int +int _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw, char *buffer, size_t buflen) { @@ -46,7 +46,7 @@ _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw, size_t room_left = buflen; if (result == NULL) - return -1; + return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_len != 1 || @@ -54,14 +54,14 @@ _nss_nisplus_parse_pwent (nis_result *result, struct passwd *pw, strcmp(result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, "passwd_tbl") != 0 || result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 7) - return -1; + return 0; if (NISENTRYLEN(0, 0, result) >= room_left) { /* The line is too long for our buffer. */ no_more_room: __set_errno (ERANGE); - return -1; + return 0; } strncpy (first_unused, NISENTRYVAL(0, 0, result), diff --git a/nis/nss_nisplus/nisplus-rpc.c b/nis/nss_nisplus/nisplus-rpc.c index 326f262749..9cf9f68b44 100644 --- a/nis/nss_nisplus/nisplus-rpc.c +++ b/nis/nss_nisplus/nisplus-rpc.c @@ -60,14 +60,14 @@ _nss_nisplus_parse_rpcent (nis_result *result, struct rpcent *rpc, struct parser_data *data = (void *) buffer; if (result == NULL) - return -1; + return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_val[0].zo_data.zo_type != ENTRY_OBJ || strcmp(result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, "rpc_tbl") != 0 || result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 3) - return -1; + return 0; memset (p, '\0', room_left); @@ -75,7 +75,7 @@ _nss_nisplus_parse_rpcent (nis_result *result, struct rpcent *rpc, if (NISENTRYLEN (0, 0, result) +1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strncpy (p, NISENTRYVAL (0, 0, result), NISENTRYLEN (0, 0, result)); room_left -= (NISENTRYLEN (0, 0, result) +1); @@ -83,7 +83,7 @@ _nss_nisplus_parse_rpcent (nis_result *result, struct rpcent *rpc, if (NISENTRYLEN (0, 2, result) +1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, "\t"); strncat (p, NISENTRYVAL (0, 2, result), NISENTRYLEN (0, 2, result)); @@ -96,7 +96,7 @@ _nss_nisplus_parse_rpcent (nis_result *result, struct rpcent *rpc, if (NISENTRYLEN (i, 1, result) +1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, " "); strncat (p, NISENTRYVAL (i, 1, result), NISENTRYLEN (i, 1, result)); diff --git a/nis/nss_nisplus/nisplus-service.c b/nis/nss_nisplus/nisplus-service.c index 54f4f876c7..1a8716ab9d 100644 --- a/nis/nss_nisplus/nisplus-service.c +++ b/nis/nss_nisplus/nisplus-service.c @@ -63,14 +63,14 @@ _nss_nisplus_parse_servent (nis_result *result, struct servent *serv, struct parser_data *data = (void *) buffer; if (result == NULL) - return -1; + return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_val[0].zo_data.zo_type != ENTRY_OBJ || strcmp (result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, "services_tbl") != 0 || result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 4) - return -1; + return 0; memset (p, '\0', room_left); @@ -78,7 +78,7 @@ _nss_nisplus_parse_servent (nis_result *result, struct servent *serv, if (NISENTRYLEN (0, 0, result) + 1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strncpy (p, NISENTRYVAL (0, 0, result), NISENTRYLEN (0, 0, result)); room_left -= (NISENTRYLEN (0, 0, result) + 1); @@ -86,7 +86,7 @@ _nss_nisplus_parse_servent (nis_result *result, struct servent *serv, if (NISENTRYLEN (0, 3, result) + 1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, "\t"); strncat (p, NISENTRYVAL (0, 3, result), NISENTRYLEN (0, 3, result)); @@ -94,7 +94,7 @@ _nss_nisplus_parse_servent (nis_result *result, struct servent *serv, if (NISENTRYLEN (0, 2, result) + 1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, "/"); strncat (p, NISENTRYVAL (0, 2, result), NISENTRYLEN (0, 2, result)); @@ -105,7 +105,7 @@ _nss_nisplus_parse_servent (nis_result *result, struct servent *serv, if (NISENTRYLEN (i, 1, result) + 1 > room_left) { __set_errno (ERANGE); - return -1; + return 0; } strcat (p, " "); strcat (p, NISENTRYVAL (i, 1, result)); diff --git a/nis/nss_nisplus/nisplus-spwd.c b/nis/nss_nisplus/nisplus-spwd.c index ec4b5b3340..3400e28da7 100644 --- a/nis/nss_nisplus/nisplus-spwd.c +++ b/nis/nss_nisplus/nisplus-spwd.c @@ -38,7 +38,7 @@ static nis_name *names = NULL; #define NISENTRYLEN(idx,col,res) \ ((res)->objects.objects_val[(idx)].zo_data.objdata_u.en_data.en_cols.en_cols_val[(col)].ec_value.ec_value_len) -static int +int _nss_nisplus_parse_spent (nis_result *result, struct spwd *sp, char *buffer, size_t buflen) { @@ -47,7 +47,7 @@ _nss_nisplus_parse_spent (nis_result *result, struct spwd *sp, char *line, *cp; if (result == NULL) - return -1; + return 0; if ((result->status != NIS_SUCCESS && result->status != NIS_S_SUCCESS) || result->objects.objects_len != 1 || @@ -55,14 +55,14 @@ _nss_nisplus_parse_spent (nis_result *result, struct spwd *sp, strcmp (result->objects.objects_val[0].zo_data.objdata_u.en_data.en_type, "passwd_tbl") != 0 || result->objects.objects_val[0].zo_data.objdata_u.en_data.en_cols.en_cols_len < 8) - return -1; + return 0; if (NISENTRYLEN(0, 0, result) >= room_left) { /* The line is too long for our buffer. */ no_more_room: __set_errno (ERANGE); - return -1; + return 0; } strncpy (first_unused, NISENTRYVAL (0, 0, result), diff --git a/nis/ypclnt.c b/nis/ypclnt.c index e4667f79a6..01bf8bc6b0 100644 --- a/nis/ypclnt.c +++ b/nis/ypclnt.c @@ -21,6 +21,7 @@ #include <unistd.h> #include <fcntl.h> #include <libc-lock.h> +#include <rpc/rpc.h> #include <rpcsvc/yp.h> #include <rpcsvc/ypclnt.h> #include <rpcsvc/ypupd.h> @@ -781,7 +782,7 @@ int yp_update (char *domain, char *map, unsigned ypop, char *key, int keylen, char *data, int datalen) { -#if 0 +#if defined (HAVE_SECURE_RPC) union { ypupdate_args update_args; @@ -847,8 +848,8 @@ yp_update (char *domain, char *map, unsigned ypop, clnt->cl_auth = authunix_create_default (); again: - r = clnt_call (clnt, ypop, xdr_argument, &args, - (xdrproc_t) xdr_u_int, &res, TIMEOUT); + r = clnt_call (clnt, ypop, xdr_argument, (caddr_t) &args, + (xdrproc_t) xdr_u_int, (caddr_t) &res, TIMEOUT); if (r == RPC_AUTHERROR) { @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: GNU libc 1.98\n" -"POT-Creation-Date: 1996-12-03 13:50+0100\n" -"PO-Revision-Date: 1997-01-24 20:13 -0500\n" +"Project-Id-Version: GNU libc 2.0.3\n" +"POT-Creation-Date: 1997-03-30 19:08+0200\n" +"PO-Revision-Date: 1997-04-02 23:02 -0500\n" "Last-Translator: Michel Robitaille <robitail@IRO.UMontreal.CA>\n" "Language-Team: French <fr@li.org>\n" "MIME-Version: 1.0\n" @@ -33,31 +33,31 @@ msgstr " rpcinfo [ -n no_de_port ] -t hôte no_program [ no_version ]\n" msgid " program vers proto port\n" msgstr " program no_version protocole no_port\n" -#: time/zic.c:424 +#: time/zic.c:419 #, c-format msgid " (rule from \"%s\", line %d)" msgstr " (règles de \"%s\", ligne %d)" -#: locale/programs/ld-collate.c:360 locale/programs/ld-ctype.c:1234 +#: locale/programs/ld-collate.c:363 locale/programs/ld-ctype.c:1242 msgid " done\n" msgstr " complété.\n" -#: time/zic.c:421 +#: time/zic.c:416 #, c-format msgid "\"%s\", line %d: %s" msgstr "\"%s\", ligne %d: %s." -#: time/zic.c:945 +#: time/zic.c:943 #, c-format msgid "\"Zone %s\" line and -l option are mutually exclusive" msgstr "La ligne \"Zone %s\" et l'option -l sont mutuellement exclusives." -#: time/zic.c:953 +#: time/zic.c:951 #, c-format msgid "\"Zone %s\" line and -p option are mutually exclusive" msgstr "La ligne \"Zone %s\" et l'option -p sont mutuellement exclusives." -#: time/zic.c:758 +#: time/zic.c:754 #, c-format msgid "%s in ruleless zone" msgstr "%s est dans une zone sans règle." @@ -77,7 +77,7 @@ msgstr "%s%s%s:%u: %s%s erreur imprévue: %s.\n" msgid "%s%sUnknown signal %d\n" msgstr "%s%ssignal inconnu %d.\n" -#: time/zic.c:2139 +#: time/zic.c:2172 #, c-format msgid "%s: %d did not sign extend correctly\n" msgstr "%s: %d n'a pas fait correctement l'expansion de la valeur signée.\n" @@ -87,139 +87,144 @@ msgstr "%s: %d n'a pas fait correctement l'expansion de la valeur signée.\n" msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n" msgstr "%s: <mb_cur_max> doit être plus grande que <mb_cur_min>.\n" -#: time/zic.c:1430 +#: time/zic.c:1443 #, c-format msgid "%s: Can't create %s: %s\n" msgstr "%s: ne peut créer %s: %s.\n" -#: time/zic.c:2118 +#: time/zic.c:2150 #, c-format msgid "%s: Can't create directory %s: %s\n" msgstr "%s: ne peut créer le répertoire %s: %s.\n" -#: time/zic.c:612 +#: time/zic.c:608 #, c-format msgid "%s: Can't link from %s to %s: %s\n" msgstr "%s: ne peut établir un lien entre %s et %s: %s.\n" -#: time/zic.c:783 +#: time/zic.c:780 #, c-format msgid "%s: Can't open %s: %s\n" msgstr "%s: ne peut ouvrir %s: %s.\n" -#: time/zic.c:851 +#: time/zic.c:1433 +#, c-format +msgid "%s: Can't remove %s: %s\n" +msgstr "%s: ne peut enlever %s: %s.\n" + +#: time/zic.c:849 #, c-format msgid "%s: Error closing %s: %s\n" msgstr "%s: erreur lors de la fermeture de %s: %s.\n" -#: time/zic.c:845 +#: time/zic.c:842 #, c-format msgid "%s: Error reading %s\n" msgstr "%s: erreur de lecture de %s.\n" -#: time/zic.c:1494 +#: time/zic.c:1507 #, c-format msgid "%s: Error writing %s\n" msgstr "%s: erreur d'écriture de %s.\n" -#: time/zdump.c:258 +#: time/zdump.c:266 #, c-format msgid "%s: Error writing standard output " msgstr "%s: erreur d'écriture sur la sortie standard." -#: time/zic.c:830 +#: time/zic.c:827 #, c-format msgid "%s: Leap line in non leap seconds file %s\n" msgstr "" "%s: ligne de type `Leap' dans un fichier qui n'a pas\n" "de délai en secondes %s.\n" -#: time/zic.c:362 +#: time/zic.c:357 #, c-format msgid "%s: Memory exhausted: %s\n" msgstr "%s: mémoire épuisée: %s.\n" -#: time/zic.c:527 +#: time/zic.c:522 #, c-format msgid "%s: More than one -L option specified\n" msgstr "%s: option -L spécifiée plus d'une fois.\n" -#: time/zic.c:487 +#: time/zic.c:482 #, c-format msgid "%s: More than one -d option specified\n" msgstr "%s: option -d spécifiée plus d'une fois.\n" -#: time/zic.c:497 +#: time/zic.c:492 #, c-format msgid "%s: More than one -l option specified\n" msgstr "%s: option -l spécifiée plus d'une fois.\n" -#: time/zic.c:507 +#: time/zic.c:502 #, c-format msgid "%s: More than one -p option specified\n" msgstr "%s: option -p spécifiée plus d'une fois.\n" -#: time/zic.c:517 +#: time/zic.c:512 #, c-format msgid "%s: More than one -y option specified\n" msgstr "%s: option -y spécifiée plus d'une fois.\n" -#: time/zic.c:1845 +#: time/zic.c:1872 #, c-format msgid "%s: command was '%s', result was %d\n" msgstr "%s: la commande était '%s', le résultat était %d.\n" -#: locale/programs/charmap.c:593 locale/programs/locfile.c:878 +#: locale/programs/charmap.c:593 locale/programs/locfile.c:900 #, c-format msgid "%s: error in state machine" msgstr "%s: erreur de l'automate à états finis." -#: posix/getopt.c:687 +#: posix/getopt.c:783 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: option illégale -- %c.\n" -#: posix/getopt.c:690 +#: posix/getopt.c:786 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: option invalide -- %c.\n" -#: posix/getopt.c:611 +#: posix/getopt.c:707 #, c-format msgid "%s: option `%c%s' doesn't allow an argument\n" msgstr "%s: l'option `%c%s' ne permet pas de paramètre.\n" -#: posix/getopt.c:582 +#: posix/getopt.c:678 #, c-format msgid "%s: option `%s' is ambiguous\n" msgstr "%s: l'option `%s' est ambiguë.\n" -#: posix/getopt.c:628 posix/getopt.c:801 +#: posix/getopt.c:724 posix/getopt.c:897 #, c-format msgid "%s: option `%s' requires an argument\n" msgstr "%s: l'option `%s' requiert un paramètre.\n" -#: posix/getopt.c:606 +#: posix/getopt.c:702 #, c-format msgid "%s: option `--%s' doesn't allow an argument\n" msgstr "%s: l'option `--%s' ne permet pas de paramètre.\n" -#: posix/getopt.c:786 +#: posix/getopt.c:881 #, c-format msgid "%s: option `-W %s' doesn't allow an argument\n" msgstr "%s: l'option `-W %s' ne permet pas de paramètre.\n" -#: posix/getopt.c:767 +#: posix/getopt.c:863 #, c-format msgid "%s: option `-W %s' is ambiguous\n" msgstr "%s: l'option `-W %s' est ambiguë.\n" -#: posix/getopt.c:721 posix/getopt.c:850 +#: posix/getopt.c:816 posix/getopt.c:946 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: l'option requiert un paramètre -- %c.\n" -#: time/zic.c:837 time/zic.c:1248 time/zic.c:1268 +#: time/zic.c:834 time/zic.c:1246 time/zic.c:1266 #, c-format msgid "%s: panic: Invalid l_value %d\n" msgstr "%s: panique: valeur %d de type `l_value' invalide.\n" @@ -229,17 +234,17 @@ msgstr "%s: panique: valeur %d de type `l_value' invalide.\n" msgid "%s: premature end of file" msgstr "%s: fin prématurée de fichier." -#: posix/getopt.c:661 +#: posix/getopt.c:757 #, c-format msgid "%s: unrecognized option `%c%s'\n" msgstr "%s: option non reconnue `%c%s'.\n" -#: posix/getopt.c:657 +#: posix/getopt.c:753 #, c-format msgid "%s: unrecognized option `--%s'\n" msgstr "%s: option non reconnue `--%s'.\n" -#: time/zic.c:446 +#: time/zic.c:441 #, c-format msgid "" "%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d " @@ -250,7 +255,7 @@ msgstr "" "\t[ -d répertoire ]\n" "\t[ -L secondes_écoulées ] [ -y type_année ] [ fichier ... ]\n" -#: time/zdump.c:165 +#: time/zdump.c:174 #, c-format msgid "%s: usage is %s [ -v ] [ -c cutoff ] zonename ...\n" msgstr "%s: usage: %s [ -v ] [ -c seuil ] nom_de_zone ...\n" @@ -264,7 +269,7 @@ msgstr "(erreur inconnue d'authentification - %d)" msgid "(unknown)" msgstr "(inconnu)" -#: catgets/gencat.c:253 +#: catgets/gencat.c:254 msgid "*standard input*" msgstr "*entrée standard*" @@ -272,19 +277,19 @@ msgstr "*entrée standard*" msgid ".lib section in a.out corrupted" msgstr "La section .lib dans a.out est corrompue." -#: inet/rcmd.c:358 +#: inet/rcmd.c:363 msgid ".rhosts fstat failed" msgstr "Échec d'évaluation fstat() de .rhosts." -#: inet/rcmd.c:354 +#: inet/rcmd.c:359 msgid ".rhosts lstat failed" msgstr "Échec d'évaluation lstat() de .rhosts." -#: inet/rcmd.c:356 +#: inet/rcmd.c:361 msgid ".rhosts not regular file" msgstr ".rhosts n'est pas un fichier régulier." -#: inet/rcmd.c:362 +#: inet/rcmd.c:367 msgid ".rhosts writeable by other than owner" msgstr ".rhosts accessible en écriture par d'autres que le propriétaire." @@ -297,12 +302,12 @@ msgstr "; version basse = %lu, version haute = %lu" msgid "; why = " msgstr "; pourquoi = " -#: locale/programs/ld-ctype.c:326 +#: locale/programs/ld-ctype.c:331 #, c-format msgid "<SP> character must not be in class `%s'" msgstr "Le caractère <SP> ne doit pas être dans la classe `%s'." -#: locale/programs/ld-ctype.c:317 +#: locale/programs/ld-ctype.c:321 #, c-format msgid "<SP> character not in class `%s'" msgstr "Le caractère <SP> n'est pas dans la classe `%s'." @@ -314,6 +319,10 @@ msgstr "Le caractère <SP> n'est pas dans la classe `%s'." msgid "?" msgstr "?" +#: sysdeps/unix/sysv/linux/siglist.h:27 +msgid "Aborted" +msgstr "Abandon" + #: stdio-common/../sysdeps/gnu/errlist.c:762 msgid "Accessing a corrupted shared library" msgstr "Accès d'une librairie partagée corrompue." @@ -333,6 +342,8 @@ msgstr "Famille d'adresses non supportée par le protocole." msgid "Advertise error" msgstr "Erreur d'annonce." +#: stdio-common/../sysdeps/unix/siglist.c:43 +#: sysdeps/unix/sysv/linux/siglist.h:33 msgid "Alarm clock" msgstr "Minuterie d'alerte" @@ -378,6 +389,11 @@ msgstr "Mauvais format du fichier de fontes." msgid "Bad message" msgstr "Message invalide." +#: stdio-common/../sysdeps/unix/siglist.c:41 +#: sysdeps/unix/sysv/linux/siglist.h:56 +msgid "Bad system call" +msgstr "Appel système erroné." + #. TRANS A file that isn't a block special file was given in a situation that #. TRANS requires one. For example, trying to mount an ordinary file as a file #. TRANS system in Unix gives this error. @@ -385,7 +401,7 @@ msgstr "Message invalide." msgid "Block device required" msgstr "Bloc de périphérique requis." -#: sunrpc/pmap_rmt.c:337 +#: sunrpc/pmap_rmt.c:338 msgid "Broadcast select problem" msgstr "Problème de sélection durant la diffusion." @@ -395,12 +411,17 @@ msgstr "Problème de sélection durant la diffusion." #. TRANS or blocked. Thus, your program will never actually see @code{EPIPE} #. TRANS unless it has handled or blocked @code{SIGPIPE}. #: stdio-common/../sysdeps/gnu/errlist.c:222 +#: stdio-common/../sysdeps/unix/siglist.c:42 +#: sysdeps/unix/sysv/linux/siglist.h:32 msgid "Broken pipe" msgstr "Relais brisé (pipe)" +#: stdio-common/../sysdeps/unix/siglist.c:39 +#: sysdeps/unix/sysv/linux/siglist.h:30 msgid "Bus error" msgstr "Erreur du BUS." +#: sysdeps/unix/sysv/linux/siglist.h:43 msgid "CPU time limit exceeded" msgstr "Temps limite expiré." @@ -408,19 +429,19 @@ msgstr "Temps limite expiré." msgid "Can not access a needed shared library" msgstr "Ne peut accéder à la librairie partagée demandée." -#: nis/ypclnt.c:637 +#: nis/ypclnt.c:695 msgid "Can't bind to server which serves this domain" msgstr "Ne peut établir un lien avec le serveur qui dessert ce domaine." -#: nis/ypclnt.c:649 +#: nis/ypclnt.c:707 msgid "Can't communicate with portmapper" msgstr "Ne peut communiquer avec le convertisseur de ports." -#: nis/ypclnt.c:651 +#: nis/ypclnt.c:709 msgid "Can't communicate with ypbind" msgstr "Ne peut communiquer par ypbind." -#: nis/ypclnt.c:653 +#: nis/ypclnt.c:711 msgid "Can't communicate with ypserv" msgstr "Ne peut communiquer par ypserv." @@ -445,7 +466,7 @@ msgstr "Ne peut créer un socket pour une diffusion de type rpc." msgid "Cannot exec a shared library directly" msgstr "Ne peut exécuter une librairie partagée directement." -#: sunrpc/pmap_rmt.c:349 +#: sunrpc/pmap_rmt.c:350 msgid "Cannot receive reply to broadcast" msgstr "Ne peut recevoir l'accusé réception à la requête faite par diffusion." @@ -470,6 +491,8 @@ msgstr "Ne peut initialiser l'option `SO_BROADCAST' de socket." msgid "Channel number out of range" msgstr "Numéro de canal en dehors des limites." +#: stdio-common/../sysdeps/unix/siglist.c:49 +#: sysdeps/unix/sysv/linux/siglist.h:39 msgid "Child exited" msgstr "Le processus `enfant' a terminé." @@ -486,13 +509,13 @@ msgstr "Erreur de communication lors de la transmission." msgid "Computer bought the farm" msgstr "Allez à la maison et buvez un verre de lait." -#: locale/programs/ld-ctype.c:1197 +#: locale/programs/ld-ctype.c:1204 msgid "Computing table size for character classes might take a while..." msgstr "" "Le calcul de la taille de la table des classes de caractères\n" "peut prendre un certain temps..." -#: locale/programs/ld-collate.c:327 +#: locale/programs/ld-collate.c:329 msgid "Computing table size for collation information might take a while..." msgstr "" "Le calcul de la taille de la table pour le fusionnement des informations\n" @@ -517,11 +540,13 @@ msgstr "Connexion ré-initialisée par le correspondant." msgid "Connection timed out" msgstr "Connexion terminée par expiration du délai d'inactivité." +#: stdio-common/../sysdeps/unix/siglist.c:48 +#: sysdeps/unix/sysv/linux/siglist.h:38 msgid "Continued" msgstr "Poursuite." #: catgets/gencat.c:169 db/makedb.c:120 locale/programs/locale.c:187 -#: locale/programs/localedef.c:177 +#: locale/programs/localedef.c:180 #, c-format msgid "" "Copyright (C) %s Free Software Foundation, Inc.\n" @@ -533,7 +558,11 @@ msgstr "" "reproduction. AUCUNE garantie n'est donnée; tant pour des raisons\n" "COMMERÇIALES que pour RÉPONDRE À UN BESOIN PARTICULIER.\n" -#: nis/ypclnt.c:663 +#: stdio-common/../sysdeps/unix/siglist.c:53 +msgid "Cputime limit exceeded" +msgstr "Temps d'exécution CPU limite expiré." + +#: nis/ypclnt.c:721 msgid "Database is busy" msgstr "La base de données est occupée." @@ -575,10 +604,15 @@ msgstr "Le répertoire n'est pas vide." msgid "Disc quota exceeded" msgstr "Débordement du quota du disque." -#: nis/ypclnt.c:709 +#: nis/ypclnt.c:767 msgid "Domain not bound" msgstr "Le domaine n'est fixé." +#: stdio-common/../sysdeps/unix/siglist.c:36 +#: sysdeps/unix/sysv/linux/siglist.h:53 +msgid "EMT trap" +msgstr "Trappe EMT." + #: sunrpc/clnt_perr.c:254 #, c-format msgid "Error %d" @@ -602,7 +636,7 @@ msgstr "L'échangeur est plein." msgid "Exec format error" msgstr "Erreur de format pour exec()." -#: locale/programs/localedef.c:213 +#: locale/programs/localedef.c:216 msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'" msgstr "ERREUR FATALE: le système ne peut définir `_POSIX2_LOCALEDEF'" @@ -631,6 +665,7 @@ msgstr "Erreur de verrou bloquant l'accès au fichier" msgid "File name too long" msgstr "Nom de fichier trop long." +#: sysdeps/unix/sysv/linux/siglist.h:44 msgid "File size limit exceeded" msgstr "Débordement de la taille permise pour un fichier." @@ -639,6 +674,12 @@ msgstr "Débordement de la taille permise pour un fichier." msgid "File too large" msgstr "Fichier trop gros." +#: stdio-common/../sysdeps/unix/siglist.c:54 +msgid "Filesize limit exceeded" +msgstr "Taille limite de fichier débordée." + +#: stdio-common/../sysdeps/unix/siglist.c:37 +#: sysdeps/unix/sysv/linux/siglist.h:28 msgid "Floating point exception" msgstr "Exception en point flottant." @@ -654,6 +695,8 @@ msgstr "Fonction non implantée." msgid "Gratuitous error" msgstr "Erreur gratuite." +#: stdio-common/../sysdeps/unix/siglist.c:30 +#: sysdeps/unix/sysv/linux/siglist.h:22 msgid "Hangup" msgstr "Fin de la connexion (raccroché)." @@ -666,9 +709,12 @@ msgstr "L'hôte cible est arrêté ou en panne." msgid "Host name lookup failure" msgstr "Erreur de repérage du nom de l'hôte cible." +#: stdio-common/../sysdeps/unix/siglist.c:52 +#: sysdeps/unix/sysv/linux/siglist.h:42 msgid "I/O possible" msgstr "E/S possible." +#: stdio-common/../sysdeps/unix/siglist.c:35 msgid "IOT trap" msgstr "Trappe IOT." @@ -676,9 +722,14 @@ msgstr "Trappe IOT." msgid "Identifier removed" msgstr "Identificateur éliminé." +#: sysdeps/unix/sysv/linux/siglist.h:25 msgid "Illegal Instruction" msgstr "Instruction illégale." +#: stdio-common/../sysdeps/unix/siglist.c:33 +msgid "Illegal instruction" +msgstr "Instruction illégale." + #. TRANS Invalid seek operation (such as on a pipe). #: stdio-common/../sysdeps/gnu/errlist.c:201 msgid "Illegal seek" @@ -709,23 +760,29 @@ msgstr "Ioctl() inappropré pour un périphérique." msgid "Inappropriate operation for background process" msgstr "Opération inappropriée pour un processus d'arrière-plan." +#: sysdeps/unix/sysv/linux/siglist.h:62 +msgid "Information request" +msgstr "Requête d'information." + #. TRANS Input/output error; usually used for physical read or write errors. #: stdio-common/../sysdeps/gnu/errlist.c:40 msgid "Input/output error" msgstr "Erreur d'entrée/sortie." -#: nis/ypclnt.c:643 +#: nis/ypclnt.c:701 msgid "Internal NIS error" msgstr "Erreur interne de NIS." -#: nis/ypclnt.c:707 +#: nis/ypclnt.c:765 msgid "Internal ypbind error" msgstr "Erreur interne de ypbind." +#: stdio-common/../sysdeps/unix/siglist.c:31 +#: sysdeps/unix/sysv/linux/siglist.h:23 msgid "Interrupt" msgstr "Interruption." -#. TRANS Interrupted function call; an asynchronous signal occured and prevented +#. TRANS Interrupted function call; an asynchronous signal occurred and prevented #. TRANS completion of the call. When this happens, you should try the call #. TRANS again. #. TRANS @@ -746,11 +803,11 @@ msgstr "Appel système interrompu, il aurait dû être relancé." msgid "Invalid argument" msgstr "Paramètre invalide." -#: posix/regex.c:946 +#: posix/regex.c:960 msgid "Invalid back reference" msgstr "Référence arrière invalide." -#: posix/regex.c:944 +#: posix/regex.c:958 msgid "Invalid character class name" msgstr "Nom de classe de caractères invalide." @@ -762,11 +819,11 @@ msgstr "Identité du client invalide." msgid "Invalid client verifier" msgstr "Vérificateur du client invalide." -#: posix/regex.c:943 +#: posix/regex.c:957 msgid "Invalid collation character" msgstr "Caractère de fusionnement invalide." -#: posix/regex.c:950 +#: posix/regex.c:964 msgid "Invalid content of \\{\\}" msgstr "Contenu invalide de \\{\\}" @@ -787,15 +844,15 @@ msgstr "Échange invalide." msgid "Invalid or incomplete multibyte or wide character" msgstr "Chaîne multi-octets ou étendue de caractères invalide ou incomplète." -#: posix/regex.c:953 +#: posix/regex.c:967 msgid "Invalid preceding regular expression" msgstr "Expression régulière précédente invalide." -#: posix/regex.c:951 +#: posix/regex.c:965 msgid "Invalid range end" msgstr "Fin d'intervalle invalide." -#: posix/regex.c:942 +#: posix/regex.c:956 msgid "Invalid regular expression" msgstr "Expression régulière invalide." @@ -825,6 +882,8 @@ msgstr "est un répertoire." msgid "Is a named type file" msgstr "est un type de fichier nommé (named)." +#: stdio-common/../sysdeps/unix/siglist.c:38 +#: sysdeps/unix/sysv/linux/siglist.h:29 msgid "Killed" msgstr "Processus arrêté." @@ -852,11 +911,11 @@ msgstr "Le lien a été endommagé." msgid "Link number out of range" msgstr "Numéro du lien hors intervalle." -#: nis/ypclnt.c:655 +#: nis/ypclnt.c:713 msgid "Local domain name not set" msgstr "Le nom du domaine local n'est pas initialisé." -#: nis/ypclnt.c:645 +#: nis/ypclnt.c:703 msgid "Local resource allocation failure" msgstr "Échec d'allocation de ressources locales." @@ -864,7 +923,7 @@ msgstr "Échec d'allocation de ressources locales." msgid "Machine is not on the network" msgstr "La machine cible n'est pas sur le réseau." -#: posix/regex.c:952 +#: posix/regex.c:966 msgid "Memory exhausted" msgstr "Mémoire épuisée." @@ -879,11 +938,13 @@ msgstr "Message trop long." msgid "Multihop attempted" msgstr "Connexion par liens par noeuds multiples de relais tentée." -#: nis/ypclnt.c:659 +#: nis/ypclnt.c:717 msgid "NIS client/server version mismatch - can't supply service" -msgstr "Non concordance de la version client/serveur NIS - ne peut fournir le service." +msgstr "" +"Non concordance de la version client/serveur NIS - ne peut fournir le " +"service." -#: nis/ypclnt.c:657 +#: nis/ypclnt.c:715 msgid "NIS map data base is bad" msgstr "La table de la base de données NIS est corrompue." @@ -955,7 +1016,7 @@ msgstr "Aucune donnée disponible." msgid "No locks available" msgstr "Aucun verrou disponible." -#: posix/regex.c:941 +#: posix/regex.c:955 msgid "No match" msgstr "Pas de concordance." @@ -963,11 +1024,11 @@ msgstr "Pas de concordance." msgid "No message of desired type" msgstr "Aucun message du type désiré." -#: nis/ypclnt.c:647 +#: nis/ypclnt.c:705 msgid "No more records in map database" msgstr "Aucun autre enregistrement dans la table de la base de données." -#: posix/regex.c:5204 +#: posix/regex.c:5324 msgid "No previous regular expression" msgstr "Aucune expression régulière ne précède." @@ -993,11 +1054,11 @@ msgstr "Aucun espace disponible sur le périphérique." msgid "No such file or directory" msgstr "Aucun fichier ou répertoire de ce type." -#: nis/ypclnt.c:641 +#: nis/ypclnt.c:699 msgid "No such key in map" msgstr "Cette clé n'est pas dans la table." -#: nis/ypclnt.c:639 +#: nis/ypclnt.c:697 msgid "No such map in server's domain" msgstr "Cette table n'est pas dans le domaine du serveur." @@ -1035,7 +1096,7 @@ msgstr "Le résultat numérique est en dehors de l'intervalle." msgid "Object is remote" msgstr "L'objet est télé-accessible." -#: time/zic.c:1939 +#: time/zic.c:1966 msgid "Odd number of quotation marks" msgstr "Nombre impair de caractères apostrophe." @@ -1097,17 +1158,20 @@ msgid "Package not installed" msgstr "Le package n'est pas installé." #. TRANS Permission denied; the file permissions do not allow the attempted operation. -#: nis/ypclnt.c:661 stdio-common/../sysdeps/gnu/errlist.c:96 +#: nis/ypclnt.c:719 stdio-common/../sysdeps/gnu/errlist.c:96 msgid "Permission denied" msgstr "Permission non accordée." +#: sysdeps/unix/sysv/linux/siglist.h:64 msgid "Power failure" msgstr "Panne d'alimentation." -#: posix/regex.c:954 +#: posix/regex.c:968 msgid "Premature end of regular expression" msgstr "Fin prématurée de l'expression régulière." +#: stdio-common/../sysdeps/unix/siglist.c:56 +#: sysdeps/unix/sysv/linux/siglist.h:46 msgid "Profiling timer expired" msgstr "Expiration de la minuterie durant l'établissement du profile." @@ -1142,6 +1206,8 @@ msgstr "Protocole non supporté." msgid "Protocol wrong type for socket" msgstr "Mauvais type pour un socket de protocole." +#: stdio-common/../sysdeps/unix/siglist.c:32 +#: sysdeps/unix/sysv/linux/siglist.h:24 msgid "Quit" msgstr "Quitter." @@ -1154,7 +1220,7 @@ msgstr "Erreur spécifique à RFS." msgid "RPC bad procedure for program" msgstr "Mauvaise procédure RPC du programme." -#: nis/ypclnt.c:635 +#: nis/ypclnt.c:693 msgid "RPC failure on NIS operation" msgstr "Échec RPC durant l'opération NIS." @@ -1263,7 +1329,7 @@ msgstr "Le RTLD_NEXT utilisé dans le code n'est pas chargé dynamiquement." msgid "Read-only file system" msgstr "Système de fichiers accessible en lecture seulement." -#: posix/regex.c:955 +#: posix/regex.c:969 msgid "Regular expression too big" msgstr "Expression régulière trop grosse." @@ -1281,11 +1347,13 @@ msgstr "" "Retirer le mot de passe ou rendre les fichiers illisibles par les autres." #: catgets/gencat.c:224 db/makedb.c:227 locale/programs/locale.c:257 -#: locale/programs/localedef.c:408 -msgid "Report bugs to <bug-glibc@prep.ai.mit.edu>.\n" -msgstr "Rapporter toutes anomalies à l'adresse: <bug-glibc@prep.ai.mit.edu>.\n" +#: locale/programs/localedef.c:412 +msgid "Report bugs using the `glibcbug' script to <bugs@gnu.ai.mit.edu>.\n" +msgstr "" +"Rapporter toutes anomalies via le script `glibcbug' à l'adresse:\n" +"<bugs@gnu.ai.mit.edu>.\n" -#: nis/ypclnt.c:633 +#: nis/ypclnt.c:691 msgid "Request arguments bad" msgstr "Le paramètre de la requête est invalide." @@ -1305,6 +1373,10 @@ msgstr "Erreur interne du `resolver'." msgid "Resource deadlock avoided" msgstr "Blocage évité des accès aux ressources." +#: stdio-common/../sysdeps/unix/siglist.c:58 +msgid "Resource lost" +msgstr "Ressource perdue" + #. TRANS Resource temporarily unavailable; the call might work if you try again #. TRANS later. The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN}; #. TRANS they are always the same in the GNU C library. @@ -1338,6 +1410,8 @@ msgstr "Blocage évité des accès aux ressources." msgid "Resource temporarily unavailable" msgstr "Ressource temporairement non disponible." +#: stdio-common/../sysdeps/unix/siglist.c:40 +#: sysdeps/unix/sysv/linux/siglist.h:31 msgid "Segmentation fault" msgstr "Erreur de segmentation." @@ -1349,6 +1423,10 @@ msgstr "Le serveur a rejeté l'identité." msgid "Server rejected verifier" msgstr "Le server a rejeté la vérification." +#: stdio-common/../sysdeps/unix/siglist.c:29 +msgid "Signal 0" +msgstr "Signal 0" + #. TRANS A file that isn't a socket was specified when a socket is required. #: stdio-common/../sysdeps/gnu/errlist.c:299 msgid "Socket operation on non-socket" @@ -1368,6 +1446,10 @@ msgstr "Le logiciel a provoqué l'abandon de la connexion." msgid "Srmount error" msgstr "Erreur srmount()." +#: sysdeps/unix/sysv/linux/siglist.h:59 +msgid "Stack fault" +msgstr "Erreur sur la pile." + #. TRANS Stale NFS file handle. This indicates an internal confusion in the NFS #. TRANS system which is due to file system rearrangements on the server host. #. TRANS Repairing this condition usually requires unmounting and remounting @@ -1376,15 +1458,23 @@ msgstr "Erreur srmount()." msgid "Stale NFS file handle" msgstr "Panne d'accès au fichier NFS." +#: stdio-common/../sysdeps/unix/siglist.c:47 +#: sysdeps/unix/sysv/linux/siglist.h:37 msgid "Stopped" msgstr "Arrêté." +#: stdio-common/../sysdeps/unix/siglist.c:46 +#: sysdeps/unix/sysv/linux/siglist.h:36 msgid "Stopped (signal)" msgstr "Signal d'arrêt." +#: stdio-common/../sysdeps/unix/siglist.c:50 +#: sysdeps/unix/sysv/linux/siglist.h:40 msgid "Stopped (tty input)" msgstr "Arrêté (via l'entrée sur tty)." +#: stdio-common/../sysdeps/unix/siglist.c:51 +#: sysdeps/unix/sysv/linux/siglist.h:41 msgid "Stopped (tty output)" msgstr "Arrêté (via la sortie sur tty)." @@ -1396,15 +1486,17 @@ msgstr "Erreur de relais de type streams." msgid "Structure needs cleaning" msgstr "La structure a besoin d'un nettoyage." -#: nis/ypclnt.c:631 nis/ypclnt.c:705 posix/regex.c:940 +#: nis/ypclnt.c:689 nis/ypclnt.c:763 posix/regex.c:954 #: stdio-common/../sysdeps/gnu/errlist.c:7 msgid "Success" msgstr "Succès." -#: nis/ypclnt.c:711 +#: nis/ypclnt.c:769 msgid "System resource allocation failure" msgstr "Échec d'allocation de ressources système." +#: stdio-common/../sysdeps/unix/siglist.c:44 +#: sysdeps/unix/sysv/linux/siglist.h:34 msgid "Terminated" msgstr "Complété." @@ -1470,10 +1562,15 @@ msgstr "Trop de références: ne peut segmenter." msgid "Too many users" msgstr "Trop d'usagers." +#: stdio-common/../sysdeps/unix/siglist.c:34 +msgid "Trace/BPT trap" +msgstr "Trappe de point d'arrêt lors de trace." + +#: sysdeps/unix/sysv/linux/siglist.h:26 msgid "Trace/breakpoint trap" msgstr "Trappe pour point d'arrêt et de trace." -#: posix/regex.c:945 +#: posix/regex.c:959 msgid "Trailing backslash" msgstr "Barre oblique en suffixe." @@ -1499,12 +1596,12 @@ msgid "Transport endpoint is not connected" msgstr "Le noeud final de transport n'est pas connecté." #: catgets/gencat.c:208 db/makedb.c:209 locale/programs/locale.c:241 -#: locale/programs/localedef.c:389 +#: locale/programs/localedef.c:393 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Pour en savoir davantage, faites: `%s --help'.\n" -#: inet/rcmd.c:136 +#: inet/rcmd.c:137 #, c-format msgid "Trying %s...\n" msgstr "On tente %s...\n" @@ -1514,7 +1611,7 @@ msgstr "On tente %s...\n" msgid "Unknown .netrc keyword %s" msgstr "Mot clé inconnu %s dans .netrc." -#: nis/ypclnt.c:665 +#: nis/ypclnt.c:723 msgid "Unknown NIS error code" msgstr "Code d'erreur NIS inconnu." @@ -1540,27 +1637,27 @@ msgstr "Erreur du serveur inconnu." msgid "Unknown signal %d" msgstr "Signal inconnu %d" -#: misc/error.c:95 +#: misc/error.c:100 msgid "Unknown system error" msgstr "Erreur système inconnue." -#: nis/ypclnt.c:713 +#: nis/ypclnt.c:771 msgid "Unknown ypbind error" msgstr "Erreur inconnue de ypbind." -#: posix/regex.c:948 +#: posix/regex.c:962 msgid "Unmatched ( or \\(" msgstr "Échec du pairage de ( ou de \\(" -#: posix/regex.c:956 +#: posix/regex.c:970 msgid "Unmatched ) or \\)" msgstr "Échec du pairage de ) ou de \\)" -#: posix/regex.c:947 +#: posix/regex.c:961 msgid "Unmatched [ or [^" msgstr "Échec du pairage de [ ou de [^" -#: posix/regex.c:949 +#: posix/regex.c:963 msgid "Unmatched \\{" msgstr "Échec du pairage de \\{." @@ -1569,6 +1666,8 @@ msgstr "Échec du pairage de \\{." msgid "Unrecognized variable `%s'" msgstr "Variable non reconnue `%s'." +#: stdio-common/../sysdeps/unix/siglist.c:45 +#: sysdeps/unix/sysv/linux/siglist.h:35 msgid "Urgent I/O condition" msgstr "Condition d'E/S urgente." @@ -1630,7 +1729,7 @@ msgstr "" " -V, --version afficher le nom et la version du logiciel\n" "Si le FICHIER_D_ENTRÉE est -, la lecture se fait l'entrée standard.\n" -#: locale/programs/localedef.c:393 +#: locale/programs/localedef.c:397 #, c-format msgid "" "Usage: %s [OPTION]... name\n" @@ -1704,9 +1803,13 @@ msgstr "Usage: %s nom_de_variable [chemin_d_accès]\n" msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n" msgstr "Usage: rpcinfo [ -n no_port ] -u hôte no_prog [ no_version ]\n" +#: stdio-common/../sysdeps/unix/siglist.c:59 +#: sysdeps/unix/sysv/linux/siglist.h:48 msgid "User defined signal 1" msgstr "Signal #1 défini par l'usager." +#: stdio-common/../sysdeps/unix/siglist.c:60 +#: sysdeps/unix/sysv/linux/siglist.h:49 msgid "User defined signal 2" msgstr "Signal #2 défini par l'usager." @@ -1714,36 +1817,40 @@ msgstr "Signal #2 défini par l'usager." msgid "Value too large for defined data type" msgstr "Valeur trop grande pour le type défini de données." +#: stdio-common/../sysdeps/unix/siglist.c:55 +#: sysdeps/unix/sysv/linux/siglist.h:45 msgid "Virtual timer expired" msgstr "Expiration de la minuterie virtuelle." -#: time/zic.c:1844 +#: time/zic.c:1871 msgid "Wild result from command execution" msgstr "Résultat anarchique résultant de l'exécution de la commande." +#: stdio-common/../sysdeps/unix/siglist.c:57 +#: sysdeps/unix/sysv/linux/siglist.h:47 msgid "Window changed" msgstr "La fenêtre a changée." #: catgets/gencat.c:174 db/makedb.c:125 locale/programs/locale.c:192 -#: locale/programs/localedef.c:182 +#: locale/programs/localedef.c:185 #, c-format msgid "Written by %s.\n" msgstr "Écrits par %s.\n" -#: nis/ypclnt.c:146 +#: nis/ypclnt.c:142 msgid "YPBINDPROC_DOMAIN: Internal error\n" msgstr "YPBINDPROC_DOMAIN: erreur interne.\n" -#: nis/ypclnt.c:150 +#: nis/ypclnt.c:146 #, c-format msgid "YPBINDPROC_DOMAIN: No server for domain %s\n" msgstr "YPBINDPROC_DOMAIN: échec d'allocation de ressources %s.\n" -#: nis/ypclnt.c:154 +#: nis/ypclnt.c:150 msgid "YPBINDPROC_DOMAIN: Resource allocation failure\n" msgstr "YPBINDPROC_DOMAIN: échec d'allocation de ressources.\n" -#: nis/ypclnt.c:158 +#: nis/ypclnt.c:154 msgid "YPBINDPROC_DOMAIN: Unknown error\n" msgstr "YPBINDPROC_DOMAIN: erreur inconnue.\n" @@ -1752,32 +1859,32 @@ msgstr "YPBINDPROC_DOMAIN: erreur inconnue.\n" msgid "You really blew it this time" msgstr "Vous avez vraiment tout gâcher cette fois-ci." -#: time/zic.c:1050 +#: time/zic.c:1048 msgid "Zone continuation line end time is not after end time of previous line" msgstr "" "Temps final de la ligne de la zone de continuation est antérieur\n" "au temps final de la ligne précédente." -#: locale/programs/charmap.c:397 locale/programs/locfile.c:341 +#: locale/programs/charmap.c:397 locale/programs/locfile.c:363 #, c-format msgid "`%1$s' definition does not end with `END %1$s'" msgstr "`%1$s' la définition ne se termine pas par `END %1$s'." -#: locale/programs/ld-monetary.c:358 locale/programs/ld-numeric.c:190 +#: locale/programs/ld-monetary.c:359 locale/programs/ld-numeric.c:190 #, c-format msgid "`-1' must be last entry in `%s' field in `%s' category" msgstr "`-1' doit être la dernière entrée du champ `%s' de catégorie `%s'." -#: locale/programs/ld-collate.c:1652 +#: locale/programs/ld-collate.c:1655 msgid "`...' must only be used in `...' and `UNDEFINED' entries" msgstr "" "`...' doit être utilisé seulement avec les entrées `...' et `UNDEFINED'." -#: locale/programs/locfile.c:538 +#: locale/programs/locfile.c:560 msgid "`from' expected after first argument to `collating-element'" msgstr "`from' attendu après le premier paramètre de `collating-element'" -#: locale/programs/ld-collate.c:1109 +#: locale/programs/ld-collate.c:1112 msgid "" "`from' string in collation element declaration contains unknown character" msgstr "" @@ -1789,36 +1896,36 @@ msgstr "" msgid "argument to <%s> must be a single character" msgstr "Le paramètre de <%s> doit être un caractère simple." -#: locale/programs/locfile.c:215 +#: locale/programs/locfile.c:237 #, c-format msgid "argument to `%s' must be a single character" msgstr "Le paramètre de `%s' doit être un caractère simple." -#: sunrpc/auth_unix.c:322 +#: sunrpc/auth_unix.c:323 msgid "auth_none.c - Fatal marshalling problem" msgstr "auth_none.c - problème fatal de mise en ordre." -#: inet/rcmd.c:360 +#: inet/rcmd.c:365 msgid "bad .rhosts owner" msgstr "Mauvais propriétaire du fichier .rhosts." -#: locale/programs/charmap.c:212 locale/programs/locfile.c:209 +#: locale/programs/charmap.c:212 locale/programs/locfile.c:231 msgid "bad argument" msgstr "Mauvais paramètre." -#: time/zic.c:1172 +#: time/zic.c:1170 msgid "blank FROM field on Link line" msgstr "Champ `FROM' vide dans la ligne de type `Link'." -#: time/zic.c:1176 +#: time/zic.c:1174 msgid "blank TO field on Link line" msgstr "Champ `TO' vide dans la ligne de type `Link'." -#: malloc/mcheck.c:189 +#: malloc/mcheck.c:191 msgid "block freed twice" msgstr "Bloc libéré deux fois." -#: malloc/mcheck.c:192 +#: malloc/mcheck.c:194 msgid "bogus mcheck_status, library is buggy" msgstr "Statut de `mcheck_status' erroné, la librarie est erronée." @@ -1834,32 +1941,32 @@ msgstr "Diffusion: ioctl (a obtenu la valeur des fanions de l'interface)" msgid "cache_set: victim not found" msgstr "cache_set: victime non repérée." -#: time/zic.c:1685 -msgid "can't determine time zone abbrevation to use just after until time" +#: time/zic.c:1698 +msgid "can't determine time zone abbreviation to use just after until time" msgstr "" -"Ne peut déterminer le nom abrégé du fuseau horaire à utiliser\n" -"pour rencontrer la condition `jusqu'au temps voulue'." +"Ne peut déterminer l'abréviation du fuseau horaire à utiliser\n" +"juste après le champ date." #: sunrpc/svc_simple.c:64 #, c-format msgid "can't reassign procedure number %d\n" msgstr "Ne peut réassigner le numéro de procédure %d.\n" -#: locale/programs/localedef.c:287 +#: locale/programs/localedef.c:291 #, c-format msgid "cannot `stat' locale file `%s'" msgstr "Ne peut effectuer l'évaluation `stat' du fichier local `%s'." -#: locale/programs/ld-collate.c:1314 +#: locale/programs/ld-collate.c:1317 #, c-format msgid "cannot insert collation element `%.*s'" msgstr "Ne peut insérer l'élément de fusionnement `%.*s'." -#: locale/programs/ld-collate.c:1493 locale/programs/ld-collate.c:1498 +#: locale/programs/ld-collate.c:1496 locale/programs/ld-collate.c:1501 msgid "cannot insert into result table" msgstr "Ne peut effectuer une insertion dans la table des résultats." -#: locale/programs/ld-collate.c:1166 locale/programs/ld-collate.c:1208 +#: locale/programs/ld-collate.c:1169 locale/programs/ld-collate.c:1211 #, c-format msgid "cannot insert new collating symbol definition: %s" msgstr "" @@ -1870,86 +1977,86 @@ msgstr "" msgid "cannot open database file `%s': %s" msgstr "Ne peut ouvrir le fichier de base de données `%s': %s." -#: catgets/gencat.c:259 db/makedb.c:180 +#: catgets/gencat.c:260 db/makedb.c:180 #, c-format msgid "cannot open input file `%s'" msgstr "Ne peut ouvrir le fichier d'entrée `%s'." -#: locale/programs/localedef.c:221 +#: locale/programs/localedef.c:224 #, c-format msgid "cannot open locale definition file `%s'" msgstr "Ne peut ouvrir le fichier des localisations `%s'." -#: catgets/gencat.c:764 catgets/gencat.c:805 db/makedb.c:189 +#: catgets/gencat.c:765 catgets/gencat.c:806 db/makedb.c:189 #, c-format msgid "cannot open output file `%s'" msgstr "Ne peut ouvrir le fichier de sortie `%s'." -#: locale/programs/locfile.c:986 +#: locale/programs/locfile.c:1008 #, c-format msgid "cannot open output file `%s' for category `%s'" msgstr "Ne peut ouvrir le fichier de sortie `%s' de catégorie `%s'." -#: locale/programs/ld-collate.c:1360 +#: locale/programs/ld-collate.c:1363 msgid "cannot process order specification" msgstr "Ne peut traiter la spécification d'ordonnancement." -#: locale/programs/locale.c:303 +#: locale/programs/locale.c:304 #, c-format msgid "cannot read character map directory `%s'" msgstr "Ne peut lire via le répertoire de la table des caractères `%s'." -#: locale/programs/locale.c:278 +#: locale/programs/locale.c:279 #, c-format msgid "cannot read locale directory `%s'" msgstr "Ne peut lire via le répertoire des définitions localisées `%s'." -#: locale/programs/localedef.c:309 +#: locale/programs/localedef.c:313 #, c-format msgid "cannot read locale file `%s'" msgstr "Ne peut lire le fichier des définitions localisées `%s'." -#: locale/programs/localedef.c:334 +#: locale/programs/localedef.c:338 #, c-format msgid "cannot write output files to `%s'" msgstr "Ne peut écrire dans les fichiers de sortie vers `%s'." -#: locale/programs/localedef.c:377 +#: locale/programs/localedef.c:381 msgid "category data requested more than once: should not happen" msgstr "" "Catégorie de données requises plus d'une fois: n'aurait pas dû se produire." -#: locale/programs/ld-ctype.c:265 +#: locale/programs/ld-ctype.c:266 #, c-format msgid "character %s'%s' in class `%s' must be in class `%s'" msgstr "Caractère %s'%s' de la classe `%s' doit être dans la classe `%s'." -#: locale/programs/ld-ctype.c:289 +#: locale/programs/ld-ctype.c:291 #, c-format msgid "character %s'%s' in class `%s' must not be in class `%s'" msgstr "" "Caractère %s'%s' de la classe `%s' ne doit pas être dans la classe `%s'." -#: locale/programs/ld-ctype.c:310 +#: locale/programs/ld-ctype.c:313 msgid "character <SP> not defined in character map" msgstr "Caractère <SP> non défini dans la table des caractères." -#: locale/programs/ld-ctype.c:939 locale/programs/ld-ctype.c:1002 -#: locale/programs/ld-ctype.c:1010 locale/programs/ld-ctype.c:1018 -#: locale/programs/ld-ctype.c:1026 locale/programs/ld-ctype.c:1034 -#: locale/programs/ld-ctype.c:1042 locale/programs/ld-ctype.c:1068 -#: locale/programs/ld-ctype.c:1076 locale/programs/ld-ctype.c:1114 -#: locale/programs/ld-ctype.c:1141 locale/programs/ld-ctype.c:1152 +#: locale/programs/ld-ctype.c:944 locale/programs/ld-ctype.c:1007 +#: locale/programs/ld-ctype.c:1015 locale/programs/ld-ctype.c:1023 +#: locale/programs/ld-ctype.c:1031 locale/programs/ld-ctype.c:1039 +#: locale/programs/ld-ctype.c:1047 locale/programs/ld-ctype.c:1073 +#: locale/programs/ld-ctype.c:1081 locale/programs/ld-ctype.c:1119 +#: locale/programs/ld-ctype.c:1146 locale/programs/ld-ctype.c:1157 #, c-format msgid "character `%s' not defined while needed as default value" msgstr "Caractère `%s' non défini alors qu'attendu comme valeur par défaut." -#: locale/programs/ld-ctype.c:801 +#: locale/programs/ld-ctype.c:806 #, c-format msgid "character class `%s' already defined" msgstr "Classe de caractères `%s' déjà définie." -#: locale/programs/ld-ctype.c:833 +#: locale/programs/ld-ctype.c:838 #, c-format msgid "character map `%s' already defined" msgstr "Table de caractères `%s' déjà définie." @@ -1963,23 +2070,24 @@ msgstr "Fichier de la table des caractères `%s' non repérable." msgid "clnt_raw.c - Fatal header serialization error." msgstr "clnt_raw.c - erreur fatale de sérialisation d'en-tête." -#: locale/programs/ld-collate.c:1329 +#: locale/programs/ld-collate.c:1332 #, c-format msgid "collation element `%.*s' appears more than once: ignore line" msgstr "" "Élément de fusionnement `%.*s' apparaît plus d'une fois: ligne ignorée." -#: locale/programs/ld-collate.c:1347 +#: locale/programs/ld-collate.c:1350 #, c-format msgid "collation symbol `%.*s' appears more than once: ignore line" -msgstr "Symbole de fusionnement `%.*s' apparaît plus d'une fois: ligne ignorée." +msgstr "" +"Symbole de fusionnement `%.*s' apparaît plus d'une fois: ligne ignorée." -#: locale/programs/locfile.c:522 +#: locale/programs/locfile.c:544 #, c-format msgid "collation symbol expected after `%s'" msgstr "Symbole de fusionnement attendu après `%s'." -#: inet/rcmd.c:129 +#: inet/rcmd.c:130 #, c-format msgid "connect to address %s: " msgstr "Connexion établie à l'adresse %s: " @@ -2021,37 +2129,37 @@ msgstr "" msgid "duplicate character name `%s'" msgstr "Duplicité du nom de caractère `%s'." -#: locale/programs/ld-collate.c:1141 +#: locale/programs/ld-collate.c:1144 msgid "duplicate collating element definition" msgstr "Duplicité de la définition d'élément de fusionnement." -#: locale/programs/ld-collate.c:1287 +#: locale/programs/ld-collate.c:1290 #, c-format msgid "duplicate definition for character `%.*s'" msgstr "Duplicité de la définition du caractère `%.*s'." -#: db/makedb.c:310 +#: db/makedb.c:311 msgid "duplicate key" msgstr "Duplicité de clé." -#: catgets/gencat.c:378 +#: catgets/gencat.c:379 msgid "duplicate set definition" msgstr "Duplicité de la définition d'ensemble." -#: time/zic.c:965 +#: time/zic.c:963 #, c-format msgid "duplicate zone name %s (file \"%s\", line %d)" msgstr "Duplicité du nom de zone %s (fichier \"%s\", ligne %d)." -#: catgets/gencat.c:541 +#: catgets/gencat.c:542 msgid "duplicated message identifier" msgstr "Duplicité de l'identificateur de message." -#: catgets/gencat.c:514 +#: catgets/gencat.c:515 msgid "duplicated message number" msgstr "Duplicité du numéro de message" -#: locale/programs/ld-collate.c:1696 +#: locale/programs/ld-collate.c:1699 msgid "empty weight name: line ignored" msgstr "Nom du poids vide: ligne ignorée." @@ -2071,34 +2179,38 @@ msgstr "enablecache: ne peut allouer une cache de données." msgid "enablecache: could not allocate cache fifo" msgstr "enablecache: ne peut allouer une cache de type fifo." -#: locale/programs/ld-collate.c:1419 +#: locale/programs/ld-collate.c:1422 msgid "end point of ellipsis range is bigger then start" msgstr "Le noeud final de l'intervalle d'ellipse est plus grand que l'initial." -#: locale/programs/ld-collate.c:1149 +#: locale/programs/ld-collate.c:1152 msgid "error while inserting collation element into hash table" msgstr "" "Erreur durant l'insertion d'un élément de fusionnement dans la table de " "hachage." -#: locale/programs/ld-collate.c:1161 +#: locale/programs/ld-collate.c:1164 msgid "error while inserting to hash table" msgstr "Erreur lors de l'insertion dans la table de hachage." -#: locale/programs/locfile.c:465 +#: locale/programs/locfile.c:487 msgid "expect string argument for `copy'" msgstr "Chaîne attendue pour le paramètre de `copy'." -#: time/zic.c:856 +#: time/zic.c:854 msgid "expected continuation line not found" msgstr "Ligne de continuation attendue, non repérée." -#: locale/programs/locfile.c:1010 +#: locale/programs/locfile.c:1032 #, c-format msgid "failure while writing data for category `%s'" msgstr "Échec durant l'écriture des données de catégorie `%s'." -#: locale/programs/ld-monetary.c:154 locale/programs/ld-numeric.c:95 +#: nis/ypclnt.c:187 +msgid "fcntl: F_SETFD" +msgstr "fcntl: F_SETFD" + +#: locale/programs/ld-monetary.c:155 locale/programs/ld-numeric.c:95 #, c-format msgid "field `%s' in category `%s' not defined" msgstr "Champ `%s' de catégorie `%s' n'est pas défini." @@ -2108,7 +2220,7 @@ msgstr "Champ `%s' de catégorie `%s' n'est pas défini." msgid "field `%s' in category `%s' undefined" msgstr "Champ `%s' de catégorie `%s' indéfini." -#: locale/programs/locfile.c:547 +#: locale/programs/locfile.c:569 msgid "from-value of `collating-element' must be a string" msgstr "La valeur de départ de `collating-element' doit être une chaîne." @@ -2117,7 +2229,7 @@ msgid "garbage at end of character code specification" msgstr "Rebut à la fin du caractère du code de spécification." #: locale/programs/linereader.c:214 -msgid "garbage at end of digit" +msgid "garbage at end of number" msgstr "Rebut à la fin des chiffres." #: locale/programs/ld-time.c:183 @@ -2136,7 +2248,7 @@ msgstr "" "Rebut à la fin de la date finale dans la chaîne %d du champ `era'\n" "de catégorie `%s'." -#: locale/programs/ld-time.c:310 +#: locale/programs/ld-time.c:311 #, c-format msgid "" "garbage at end of stopping date in string %d in `era' field in category `%s'" @@ -2148,19 +2260,19 @@ msgstr "" msgid "get_myaddress: ioctl (get interface configuration)" msgstr "get_myaddress: ioctl (a obtenu la configuration de l'interface)." -#: time/zic.c:1149 +#: time/zic.c:1147 msgid "illegal CORRECTION field on Leap line" msgstr "CORRECTION illégale du champ dans la ligne de type `Leap'." -#: time/zic.c:1153 +#: time/zic.c:1151 msgid "illegal Rolling/Stationary field on Leap line" msgstr "Champ `Rolling/Stationary' illégal sur la ligne de type `Leap'." -#: locale/programs/ld-collate.c:1767 +#: locale/programs/ld-collate.c:1770 msgid "illegal character constant in string" msgstr "Caractère illégal de constante dans la chaîne." -#: locale/programs/ld-collate.c:1116 +#: locale/programs/ld-collate.c:1119 msgid "illegal collation element" msgstr "Élément de fusionnement illégal." @@ -2187,7 +2299,7 @@ msgstr "" "Nombre illégal pour la valeur de saut dans la chaîne %d du champ `era'\n" "de catégorie `%s'." -#: catgets/gencat.c:351 catgets/gencat.c:428 +#: catgets/gencat.c:352 catgets/gencat.c:429 msgid "illegal set number" msgstr "Numéro d'ensemble illégal." @@ -2198,20 +2310,20 @@ msgstr "" "Date finale illégale dans la chaîne %d du champ `era'\n" "de catégorie `%s'." -#: locale/programs/ld-time.c:302 +#: locale/programs/ld-time.c:303 #, c-format msgid "illegal stopping date in string %d in `era' field in category `%s'" msgstr "" "Date finale illégale dans la chaîne %d du champ `era'\n" "de catégorie `%s'." -#: locale/programs/ld-ctype.c:807 +#: locale/programs/ld-ctype.c:812 #, c-format msgid "implementation limit: no more than %d character classes allowed" msgstr "" "Limite d'impantation: pas plus de %d classes de caractères sont permises." -#: locale/programs/ld-ctype.c:839 +#: locale/programs/ld-ctype.c:844 #, c-format msgid "implementation limit: no more than %d character maps allowed" msgstr "" @@ -2221,60 +2333,60 @@ msgstr "" msgid "incorrectly formatted file" msgstr "Fichier incorrectement formaté." -#: time/zic.c:814 +#: time/zic.c:811 msgid "input line of unknown type" msgstr "Ligne d'entrée de type inconnu." -#: time/zic.c:1733 +#: time/zic.c:1760 msgid "internal error - addtype called with bad isdst" msgstr "Erreur interne - addtype appellé avec un mauvais bloc isdst." -#: time/zic.c:1741 +#: time/zic.c:1768 msgid "internal error - addtype called with bad ttisgmt" msgstr "Erreur interne - addtype appellé avec un mauvais bloc ttisgmt." -#: time/zic.c:1737 +#: time/zic.c:1764 msgid "internal error - addtype called with bad ttisstd" msgstr "Erreur interne - addtype appellé avec un mauvais bloc ttisstd." -#: locale/programs/ld-ctype.c:301 +#: locale/programs/ld-ctype.c:304 #, c-format msgid "internal error in %s, line %u" msgstr "Erreur interne dans %s, ligne %u." -#: time/zic.c:1021 +#: time/zic.c:1019 msgid "invalid GMT offset" msgstr "Décalage relatif GMT invalide." -#: time/zic.c:1024 +#: time/zic.c:1022 msgid "invalid abbreviation format" msgstr "Format d'abréviation invalide." -#: time/zic.c:1114 time/zic.c:1313 time/zic.c:1327 +#: time/zic.c:1112 time/zic.c:1313 time/zic.c:1327 msgid "invalid day of month" msgstr "Jour du mois invalide." -#: time/zic.c:1272 +#: time/zic.c:1270 msgid "invalid ending year" msgstr "Année finale invalide." -#: time/zic.c:1086 +#: time/zic.c:1084 msgid "invalid leaping year" msgstr "Année bissextile invalide." -#: time/zic.c:1101 time/zic.c:1204 +#: time/zic.c:1099 time/zic.c:1202 msgid "invalid month name" msgstr "Nom de mois invalide." -#: time/zic.c:920 +#: time/zic.c:918 msgid "invalid saved time" msgstr "Temps sauvegardé invalide." -#: time/zic.c:1252 +#: time/zic.c:1250 msgid "invalid starting year" msgstr "Année initiale invalide." -#: time/zic.c:1130 time/zic.c:1232 +#: time/zic.c:1128 time/zic.c:1230 msgid "invalid time of day" msgstr "Heure du jour invalide." @@ -2282,68 +2394,66 @@ msgstr "Heure du jour invalide." msgid "invalid weekday name" msgstr "Nom du jour de semaine invalide." -#: locale/programs/ld-collate.c:1412 +#: locale/programs/ld-collate.c:1415 msgid "line after ellipsis must contain character definition" msgstr "La ligne après l'ellipse doit contenir la définition d'un caractère." -#: locale/programs/ld-collate.c:1391 +#: locale/programs/ld-collate.c:1394 msgid "line before ellipsis does not contain definition for character constant" msgstr "" "La ligne avant l'ellipse ne doit pas contenir la définition d'une constante " "de caractères." -#: time/zic.c:794 +#: time/zic.c:791 msgid "line too long" msgstr "Ligne trop longue." -#: locale/programs/localedef.c:281 +#: locale/programs/localedef.c:285 #, c-format msgid "locale file `%s', used in `copy' statement, not found" msgstr "" "Fichier localisé `%s', utilisé dans la déclaration de `copy', non repéré." -#: catgets/gencat.c:609 +#: catgets/gencat.c:610 msgid "malformed line ignored" msgstr "Ligne incorrecte ignorée." -#: malloc/mcheck.c:183 +#: malloc/mcheck.c:185 msgid "memory clobbered before allocated block" msgstr "Mémoire écrasée avant le bloc alloué." -#: malloc/mcheck.c:186 +#: malloc/mcheck.c:188 msgid "memory clobbered past end of allocated block" msgstr "Mémoire écrasée après la fin du bloc alloué." #: locale/programs/ld-collate.c:167 locale/programs/ld-collate.c:173 -#: locale/programs/ld-collate.c:177 locale/programs/ld-collate.c:1439 -#: locale/programs/ld-collate.c:1468 locale/programs/locfile.c:940 +#: locale/programs/ld-collate.c:177 locale/programs/ld-collate.c:1442 +#: locale/programs/ld-collate.c:1471 locale/programs/locfile.c:962 #: locale/programs/xmalloc.c:68 posix/getconf.c:250 msgid "memory exhausted" msgstr "Mémoire épuisée." -#: malloc/obstack.c:425 +#: malloc/obstack.c:462 msgid "memory exhausted\n" msgstr "Mémoire épuisée.\n" -#: malloc/mcheck.c:180 +#: malloc/mcheck.c:182 msgid "memory is consistent, library is buggy" msgstr "Mémoire consistente, la librairie est fautive." -#: locale/programs/ld-time.c:348 +#: locale/programs/ld-time.c:350 #, c-format msgid "missing era format in string %d in `era' field in category `%s'" msgstr "" "Format de type era manquant dans la chaîne %d du champ `era'\n" "de catégorie `%s'." -#: locale/programs/ld-time.c:337 +#: locale/programs/ld-time.c:339 #, c-format -msgid "missing era name in string %d in `era' fieldin category `%s'" -msgstr "" -"Nom de type era manquant dans la chaîne %d du champ `era'\n" -"de catégorie `%s'." +msgid "missing era name in string %d in `era' field in category `%s'" +msgstr "Nom manquant dans la chaîne %d du champ `era' de catégorie `%s'." -#: time/zic.c:915 +#: time/zic.c:913 msgid "nameless rule" msgstr "Règle sans nom." @@ -2357,19 +2467,19 @@ msgstr "Le programme %d n'a jamais été enregistré.\n" msgid "no correct regular expression for field `%s' in category `%s': %s" msgstr "Expression reguliere incorrecte du champ `%s' de catégorie `%s': %s" -#: time/zic.c:2059 +#: time/zic.c:2086 msgid "no day in month matches rule" msgstr "Pas de jour dans les règles de concordance." -#: locale/programs/ld-collate.c:259 +#: locale/programs/ld-collate.c:260 msgid "no definition of `UNDEFINED'" msgstr "Pas de définition de type `UNDEFINED'." -#: locale/programs/locfile.c:479 +#: locale/programs/locfile.c:501 msgid "no other keyword shall be specified when `copy' is used" msgstr "Aucun autre mot clé ne doit être spécifié lorsque `copy' est utilisé." -#: locale/programs/localedef.c:340 +#: locale/programs/localedef.c:344 msgid "no output file produced because warning were issued" msgstr "Aucun fichier de sortie généré en raison d'un avertissement déjà émis." @@ -2394,7 +2504,7 @@ msgstr "" "Seules les définitions de type `WIDTH' sont autorisées à suivre\n" "la définition de `CHARMAP'." -#: db/makedb.c:326 +#: db/makedb.c:327 #, c-format msgid "problems while reading `%s'" msgstr "Problèmes lors de la lecture de `%s'" @@ -2415,16 +2525,16 @@ msgstr "Le programme %lu de version %lu n'est pas disponible.\n" msgid "program %lu version %lu ready and waiting\n" msgstr "Le programme %lu de version %lu est prêt et en attente.\n" -#: inet/rcmd.c:171 +#: inet/rcmd.c:172 #, c-format msgid "rcmd: select (setting up stderr): %m\n" msgstr "rcmd: sélection (configuration de stderr): %m.\n" -#: inet/rcmd.c:103 +#: inet/rcmd.c:104 msgid "rcmd: socket: All ports in use\n" msgstr "rcmd: socket: tous les ports sont occupés.\n" -#: inet/rcmd.c:159 +#: inet/rcmd.c:160 #, c-format msgid "rcmd: write (setting up stderr): %m\n" msgstr "rcmd: écriture (configuration de stderr): %m.\n" @@ -2433,7 +2543,7 @@ msgstr "rcmd: écriture (configuration de stderr): %m.\n" msgid "registerrpc: out of memory\n" msgstr "registerrpc: mémoire épuisée.\n" -#: time/zic.c:1794 +#: time/zic.c:1821 msgid "repeated leap second moment" msgstr "Répétition du délai une seconde fois." @@ -2466,50 +2576,50 @@ msgstr "rpcinfo: ne peut contacter le convertisseur de ports." msgid "rpcinfo: can't contact portmapper: " msgstr "rpcinfo: ne peut contacter le convertisseur de ports." -#: time/zic.c:708 time/zic.c:710 +#: time/zic.c:704 time/zic.c:706 msgid "same rule name in multiple files" msgstr "Même nom de règle dans plusieurs fichiers." -#: inet/rcmd.c:174 +#: inet/rcmd.c:175 msgid "select: protocol failure in circuit setup\n" msgstr "select: échec de protocole dans la configuration du circuit.\n" -#: inet/rcmd.c:192 +#: inet/rcmd.c:193 msgid "socket: protocol failure in circuit setup\n" msgstr "socket: échec de protocole dans la configuration du circuit.\n" -#: locale/programs/locfile.c:600 +#: locale/programs/locfile.c:622 msgid "sorting order `forward' and `backward' are mutually exclusive" msgstr "" "Les options de tri `forward' et `backward' sont mutuellement exclusives." -#: locale/programs/ld-collate.c:1568 locale/programs/ld-collate.c:1614 +#: locale/programs/ld-collate.c:1571 locale/programs/ld-collate.c:1617 msgid "" "specification of sorting weight for collation symbol does not make sense" msgstr "" "La spécification de tri par le poids des symboles de\n" "fusionnement n'a aucun sens." -#: time/zic.c:779 +#: time/zic.c:775 msgid "standard input" msgstr "entrée standard" -#: time/zdump.c:260 +#: time/zdump.c:268 msgid "standard output" msgstr "sortie standard" -#: locale/programs/ld-time.c:256 +#: locale/programs/ld-time.c:257 #, c-format msgid "starting date is illegal in string %d in `era' field in category `%s'" msgstr "" "Date initiale illégale dans la chaîne %d du champ `era'\n" "de catégorie `%s'." -#: time/zic.c:1276 +#: time/zic.c:1274 msgid "starting year greater than ending year" msgstr "Année initiale plus grande que l'année finale." -#: locale/programs/ld-time.c:328 +#: locale/programs/ld-time.c:330 #, c-format msgid "stopping date is illegal in string %d in `era' field in category `%s'" msgstr "" @@ -2541,7 +2651,7 @@ msgstr "svcudp_create - ne peut trouver le nom du socket par getsockname()." msgid "svcudp_create: socket creation problem" msgstr "svcudp_create: problème de création du socket." -#: locale/programs/ld-collate.c:1191 +#: locale/programs/ld-collate.c:1194 #, c-format msgid "" "symbol for multicharacter collating element `%.*s' duplicates element " @@ -2550,7 +2660,7 @@ msgstr "" "Le symbole d'un élément de fusionnement multi-caractères `%.*s' \n" "provoque la duplication de la définition d'un élément." -#: locale/programs/ld-collate.c:1064 +#: locale/programs/ld-collate.c:1067 #, c-format msgid "" "symbol for multicharacter collating element `%.*s' duplicates other element " @@ -2559,7 +2669,7 @@ msgstr "" "Le symbole d'un élément de fusionnement multi-caractères `%.*s' \n" "provoque la duplication d'autres définitions d'éléments." -#: locale/programs/ld-collate.c:1200 +#: locale/programs/ld-collate.c:1203 #, c-format msgid "" "symbol for multicharacter collating element `%.*s' duplicates other symbol " @@ -2568,7 +2678,7 @@ msgstr "" "Le symbole d'un élément de fusionnement multi-caractères `%.*s' \n" "provoque la duplication d'autres définitions de symboles." -#: locale/programs/ld-collate.c:1073 +#: locale/programs/ld-collate.c:1076 #, c-format msgid "" "symbol for multicharacter collating element `%.*s' duplicates symbol " @@ -2577,7 +2687,7 @@ msgstr "" "Le symbole d'un élément de fusionnement multi-caractères `%.*s' \n" "provoque la duplication de la définition d'un symbole." -#: locale/programs/ld-collate.c:1055 locale/programs/ld-collate.c:1182 +#: locale/programs/ld-collate.c:1058 locale/programs/ld-collate.c:1185 #, c-format msgid "" "symbol for multicharacter collating element `%.*s' duplicates symbolic name " @@ -2594,55 +2704,55 @@ msgstr "" msgid "syntax error in %s definition: %s" msgstr "Erreur de syntaxe dans la définition de %s: %s." -#: locale/programs/locfile.c:620 +#: locale/programs/locfile.c:642 msgid "syntax error in `order_start' directive" msgstr "Erreur de syntaxe dans la directive `order_start'." -#: locale/programs/locfile.c:362 +#: locale/programs/locfile.c:384 msgid "syntax error in character class definition" msgstr "Erreur de syntaxe dans la définition de la classe de caractères." -#: locale/programs/locfile.c:420 +#: locale/programs/locfile.c:442 msgid "syntax error in character conversion definition" msgstr "Erreur de syntaxe dans la définition du caractère de conversion." -#: locale/programs/locfile.c:662 +#: locale/programs/locfile.c:684 msgid "syntax error in collating order definition" msgstr "Erreur de syntaxe dans l'ordre de la définition du fusionnement." -#: locale/programs/locfile.c:512 +#: locale/programs/locfile.c:534 msgid "syntax error in collation definition" msgstr "Erreur de syntaxe dans la définition du fusionnement." -#: locale/programs/locfile.c:335 +#: locale/programs/locfile.c:357 msgid "syntax error in definition of LC_CTYPE category" msgstr "" "Erreur de syntaxe dans la définition d'une catégorie de type `LC_CTYPE'." -#: locale/programs/locfile.c:278 +#: locale/programs/locfile.c:300 msgid "syntax error in definition of new character class" msgstr "" "Erreur de syntaxe dans la définition d'une nouvelle classe de caractères." -#: locale/programs/locfile.c:288 +#: locale/programs/locfile.c:310 msgid "syntax error in definition of new character map" msgstr "" "Erreur de syntaxe dans la définition d'une nouvelle table de caractères." -#: locale/programs/locfile.c:873 +#: locale/programs/locfile.c:895 msgid "syntax error in message locale definition" msgstr "Erreur de syntaxe dans la définition localisée du message." -#: locale/programs/locfile.c:784 +#: locale/programs/locfile.c:806 msgid "syntax error in monetary locale definition" msgstr "Erreur de syntaxe dans la définition localisée des valeurs monétaires." -#: locale/programs/locfile.c:811 +#: locale/programs/locfile.c:833 msgid "syntax error in numeric locale definition" msgstr "" "Erreur de syntaxe dans la définition localisée de représentation numérique." -#: locale/programs/locfile.c:722 +#: locale/programs/locfile.c:744 msgid "syntax error in order specification" msgstr "Erreur de syntaxe dans la spéficication de l'ordonnancement." @@ -2651,27 +2761,27 @@ msgstr "Erreur de syntaxe dans la spéficication de l'ordonnancement." msgid "syntax error in prolog: %s" msgstr "Erreur de syntaxe du prologue: %s." -#: locale/programs/locfile.c:849 +#: locale/programs/locfile.c:871 msgid "syntax error in time locale definition" msgstr "" "Erreur de syntaxe dans la définition localisée de la représentation du temps." -#: locale/programs/locfile.c:255 +#: locale/programs/locfile.c:277 msgid "syntax error: not inside a locale definition section" msgstr "" "Erreur de syntaxe: pas à l'intérieur d'une section de définition localisée." -#: catgets/gencat.c:380 catgets/gencat.c:516 catgets/gencat.c:543 +#: catgets/gencat.c:381 catgets/gencat.c:517 catgets/gencat.c:544 msgid "this is the first definition" msgstr "Ceci est la première définition." # time/zic.c:1120A # mro: à investiguer dans le code source -#: time/zic.c:1119 +#: time/zic.c:1117 msgid "time before zero" msgstr "Temps défini avant le zéro." -#: time/zic.c:1127 time/zic.c:1959 time/zic.c:1978 +#: time/zic.c:1125 time/zic.c:1986 time/zic.c:2005 msgid "time overflow" msgstr "Débordement du temps alloué." @@ -2687,23 +2797,23 @@ msgstr "Trop d'octets pour l'encodage des caractères." msgid "too many character classes defined" msgstr "Trop de définitions de classes de caractères." -#: time/zic.c:1788 +#: time/zic.c:1815 msgid "too many leap seconds" msgstr "Trop de délai en secondes." -#: time/zic.c:1760 +#: time/zic.c:1787 msgid "too many local time types" msgstr "Trop de types localisés pour la représentation du temps." -#: time/zic.c:1714 +#: time/zic.c:1741 msgid "too many transitions?!" msgstr "Trop de transitions définies?!" -#: locale/programs/ld-collate.c:1623 +#: locale/programs/ld-collate.c:1626 msgid "too many weights" msgstr "Trop de poids définis." -#: time/zic.c:2082 +#: time/zic.c:2109 msgid "too many, or too long, time zone abbreviations" msgstr "Trop ou de trop longues abréviations de fuseaux horaires." @@ -2716,11 +2826,11 @@ msgstr "Suffixe en rebut à la fin de la ligne." msgid "trouble replying to prog %d\n" msgstr "Problème à répondre au programme %d.\n" -#: locale/programs/ld-collate.c:1383 +#: locale/programs/ld-collate.c:1386 msgid "two lines in a row containing `...' are not allowed" msgstr "Deux lignes consécutives contenant `...' ne sont pas permises." -#: time/zic.c:1283 +#: time/zic.c:1281 msgid "typed single year" msgstr "Une seule année fournie." @@ -2735,39 +2845,36 @@ msgstr "Caractère inconnu `%s'." #: locale/programs/ld-messages.c:193 locale/programs/ld-messages.c:204 #: locale/programs/ld-messages.c:215 locale/programs/ld-messages.c:226 -#: locale/programs/ld-time.c:696 +#: locale/programs/ld-time.c:698 #, c-format msgid "unknown character in field `%s' of category `%s'" msgstr "Caractère inconnu dans le champ `%s' de catégorie `%s'." -#: locale/programs/locfile.c:585 +#: locale/programs/locfile.c:607 msgid "unknown collation directive" msgstr "Directive de fusionnement inconnue." -#: catgets/gencat.c:477 +#: catgets/gencat.c:478 #, c-format msgid "unknown directive `%s': line ignored" msgstr "Directive inconnue `%s': ligne ignorée." -#: catgets/gencat.c:456 +#: catgets/gencat.c:457 #, c-format msgid "unknown set `%s'" msgstr "Ensemble inconnu `%s'." -msgid "unknown signal" -msgstr "Signal inconnu." - -#: locale/programs/ld-collate.c:1367 locale/programs/ld-collate.c:1558 -#: locale/programs/ld-collate.c:1732 +#: locale/programs/ld-collate.c:1370 locale/programs/ld-collate.c:1561 +#: locale/programs/ld-collate.c:1735 #, c-format msgid "unknown symbol `%.*s': line ignored" msgstr "Symbole inconnu `%.*s': ligne ignorée." -#: time/zic.c:751 +#: time/zic.c:747 msgid "unruly zone" msgstr "Zone sans règle." -#: catgets/gencat.c:961 +#: catgets/gencat.c:962 msgid "unterminated message" msgstr "Message incomplet." @@ -2779,7 +2886,7 @@ msgstr "Chaîne incomplète." msgid "unterminated symbolic name" msgstr "Nom symbolique incomplet." -#: locale/programs/ld-collate.c:1685 +#: locale/programs/ld-collate.c:1688 msgid "unterminated weight name" msgstr "Nom de poids incomplet." @@ -2789,7 +2896,7 @@ msgstr "" "Limite supérieure de l'intervalle n'est pas plus petite que la limite " "inférieure." -#: time/zic.c:2025 +#: time/zic.c:2052 msgid "use of 2/29 in non leap-year" msgstr "Utiliser 2/29 pour les années non-bissextiles." @@ -2803,7 +2910,7 @@ msgstr "La valeur de %s doit être un entier." msgid "value for <%s> must lie between 1 and 4" msgstr "La valeur de <%s> doit être comprise entre 1 et 4." -#: locale/programs/ld-monetary.c:148 locale/programs/ld-numeric.c:89 +#: locale/programs/ld-monetary.c:149 locale/programs/ld-numeric.c:89 #, c-format msgid "value for field `%s' in category `%s' must not be the empty string" msgstr "" @@ -2815,7 +2922,7 @@ msgstr "" "La valeur de <mb_cur_max> doit être plus grande que la valeur de " "<mb_cur_min>." -#: locale/programs/ld-monetary.c:138 +#: locale/programs/ld-monetary.c:139 msgid "" "value of field `int_curr_symbol' in category `LC_MONETARY' does not " "correspond to a valid name in ISO 4217" @@ -2830,13 +2937,13 @@ msgstr "" "La valeur du champ `int_curr_symbol' de catégorie `LC_MONETARY' n'a pas la " "bonne longueur." -#: locale/programs/ld-monetary.c:370 locale/programs/ld-numeric.c:199 +#: locale/programs/ld-monetary.c:371 locale/programs/ld-numeric.c:199 #, c-format msgid "values for field `%s' in category `%s' must be smaller than 127" msgstr "" "Les valeurs du champ `%s' de catégorie `%s' doivent être plus petite que 127." -#: locale/programs/ld-monetary.c:366 +#: locale/programs/ld-monetary.c:367 #, c-format msgid "values for field `%s' in category `%s' must not be zero" msgstr "" @@ -2846,15 +2953,15 @@ msgstr "" msgid "while opening UTMP file" msgstr "durant l'ouverture du fichier UTMP." -#: catgets/gencat.c:988 +#: catgets/gencat.c:989 msgid "while opening old catalog file" msgstr "durant l'ouverture du vieux fichier du catalogue." -#: db/makedb.c:353 +#: db/makedb.c:354 msgid "while reading database" msgstr "durant la lecture de la base de données." -#: db/makedb.c:315 +#: db/makedb.c:316 msgid "while writing data base file" msgstr "durant l'écriture dans le fichier de la base de données." @@ -2862,38 +2969,41 @@ msgstr "durant l'écriture dans le fichier de la base de données." msgid "wrong number of arguments" msgstr "Mauvais nombre de paramètres." -#: time/zic.c:1077 +#: time/zic.c:1075 msgid "wrong number of fields on Leap line" msgstr "Mauvais nombre de champs sur la ligne de type `Leap'." -#: time/zic.c:1168 +#: time/zic.c:1166 msgid "wrong number of fields on Link line" msgstr "Mauvais nombre de champs sur la ligne de type `Link'." -#: time/zic.c:911 +#: time/zic.c:909 msgid "wrong number of fields on Rule line" msgstr "Mauvais nombre de champs sur la ligne de type `Rule'." -#: time/zic.c:981 +#: time/zic.c:979 msgid "wrong number of fields on Zone continuation line" msgstr "Mauvais nombre de champs sur la ligne de type continuation de `Zone'." -#: time/zic.c:939 +#: time/zic.c:937 msgid "wrong number of fields on Zone line" msgstr "Mauvais nombre de champs sur la ligne de type `Zone'." -#: nis/ypclnt.c:570 -msgid "yp_all: clnttcp_create failed" -msgstr "yp_all: échec de la fonction clnttcp_create()." - -#: nis/ypclnt.c:772 +#: nis/ypclnt.c:811 msgid "yp_update: cannot convert host to netname\n" -msgstr "yp_update: ne peut convertir le nom de l'hôte à un nom réseau (netname).\n" +msgstr "" +"yp_update: ne peut convertir le nom de l'hôte à un nom réseau (netname).\n" -#: nis/ypclnt.c:784 +#: nis/ypclnt.c:823 msgid "yp_update: cannot get server address\n" msgstr "yp_update: ne peut obtenir l'adresse du serveur.\n" +#~ msgid "unknown signal" +#~ msgstr "Signal inconnu." + +#~ msgid "yp_all: clnttcp_create failed" +#~ msgstr "yp_all: échec de la fonction clnttcp_create()." + #~ msgid "character `%c' not defined while needed as default value" #~ msgstr "Caractère `%c' non défini alors qu'attendu comme valeur par défaut." diff --git a/rpc/auth.h b/rpc/auth.h deleted file mode 100644 index 5721091a56..0000000000 --- a/rpc/auth.h +++ /dev/null @@ -1 +0,0 @@ -#include <sunrpc/rpc/auth.h> diff --git a/rpc/auth_des.h b/rpc/auth_des.h deleted file mode 100644 index 02736aa03b..0000000000 --- a/rpc/auth_des.h +++ /dev/null @@ -1 +0,0 @@ -#include <sunrpc/rpc/auth_des.h> diff --git a/sunrpc/rpc/auth.h b/sysdeps/generic/rpc/auth.h index 61cd351485..61cd351485 100644 --- a/sunrpc/rpc/auth.h +++ b/sysdeps/generic/rpc/auth.h diff --git a/sunrpc/rpc/auth_des.h b/sysdeps/generic/rpc/auth_des.h index 8c2f794691..8c2f794691 100644 --- a/sunrpc/rpc/auth_des.h +++ b/sysdeps/generic/rpc/auth_des.h diff --git a/sysdeps/libm-i387/s_cbrt.S b/sysdeps/libm-i387/s_cbrt.S new file mode 100644 index 0000000000..4b9a2b11c6 --- /dev/null +++ b/sysdeps/libm-i387/s_cbrt.S @@ -0,0 +1,185 @@ +/* Compute cubic root of double value. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Dirk Alboth <dirka@uni-paderborn.de> and + Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <machine/asm.h> + +#ifdef __ELF__ + .section .rodata +#else + .text +#endif + + .align ALIGNARG(4) + ASM_TYPE_DIRECTIVE(f1,@object) +f1: .double 0.354895765043919860 + ASM_SIZE_DIRECTIVE(f1) + ASM_TYPE_DIRECTIVE(f2,@object) +f2: .double 1.50819193781584896 + ASM_SIZE_DIRECTIVE(f2) + ASM_TYPE_DIRECTIVE(f3,@object) +f3: .double -2.11499494167371287 + ASM_SIZE_DIRECTIVE(f3) + ASM_TYPE_DIRECTIVE(f4,@object) +f4: .double 2.44693122563534430 + ASM_SIZE_DIRECTIVE(f4) + ASM_TYPE_DIRECTIVE(f5,@object) +f5: .double -1.83469277483613086 + ASM_SIZE_DIRECTIVE(f5) + ASM_TYPE_DIRECTIVE(f6,@object) +f6: .double 0.784932344976639262 + ASM_SIZE_DIRECTIVE(f6) + ASM_TYPE_DIRECTIVE(f7,@object) +f7: .double -0.145263899385486377 + ASM_SIZE_DIRECTIVE(f7) + +#define CBRT2 1.2599210498948731648 +#define SQR_CBRT2 1.5874010519681994748 + + ASM_TYPE_DIRECTIVE(factor,@object) +factor: .double 1.0 / SQR_CBRT2 + .double 1.0 / CBRT2 + .double 1.0 + .double CBRT2 + .double SQR_CBRT2 + ASM_SIZE_DIRECTIVE(factor) + + ASM_TYPE_DIRECTIVE(two54,@object) +two54: .byte 0, 0, 0, 0, 0, 0, 0x50, 0x43 + ASM_SIZE_DIRECTIVE(two54) + +#ifdef PIC +#define MO(op) op##@GOTOFF(%ebx) +#define MOX(op,x,f) op##@GOTOFF(%ebx,x,f) +#else +#define MO(op) op +#define MOX(op,x,f) op(,x,f) +#endif + + .text +ENTRY(__cbrt) + movl 4(%esp), %ecx + movl 8(%esp), %eax + movl %eax, %edx + andl $0x7fffffff, %eax + orl %eax, %ecx + jz 1f + xorl %ecx, %ecx + cmpl $0x7ff00000, %eax + jae 1f + +#ifdef PIC + pushl %ebx + call 3f +3: popl %ebx + addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx +#endif + + cmpl $0x00100000, %eax + jae 2f + +#ifdef PIC + fldl 8(%esp) +#else + fldl 4(%esp) +#endif + fmull MO(two54) + movl $-54, %ecx + fstpl 4(%esp) + movl 8(%esp), %eax + movl %eax, %edx + andl $0x7fffffff, %eax + +2: shrl $20, %eax + andl $0x800fffff, %edx + subl $1022, %eax + orl $0x3fe00000, %edx + addl %eax, %ecx +#ifdef PIC + movl %edx, 12(%esp) + + fldl 8(%esp) /* xm */ +#else + movl %edx, 8(%esp) + + fldl 4(%esp) /* xm */ +#endif + fabs + + /* The following code has two track: + a) compute the normalized cbrt value + b) compute xe/3 and xe%3 + The right track computes the value for b) and this is done + in an optimized way by avoiding division. */ + + fld %st(0) /* xm : xm */ + + fmull MO(f7) /* f7*xm : xm */ + movl $1431655766, %eax + faddl MO(f6) /* f6+f7*xm : xm */ + imull %ecx + fmul %st(1) /* (f6+f7*xm)*xm : xm */ + movl %ecx, %eax + faddl MO(f5) /* f5+(f6+f7*xm)*xm : xm */ + sarl $31, %eax + fmul %st(1) /* (f5+(f6+f7*xm)*xm)*xm : xm */ + subl %eax, %edx + faddl MO(f4) /* f4+(f5+(f6+f7*xm)*xm)*xm : xm */ + fmul %st(1) /* (f4+(f5+(f6+f7*xm)*xm)*xm)*xm : xm */ + faddl MO(f3) /* f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm : xm */ + fmul %st(1) /* (f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm : xm */ + faddl MO(f2) /* f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm : xm */ + fmul %st(1) /* (f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm)*xm : xm */ + faddl MO(f1) /* u:=f1+(f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm)*xm : xm */ + + fld %st /* u : u : xm */ + fmul %st(1) /* u*u : u : xm */ + fld %st(2) /* xm : u*u : u : xm */ + fadd %st /* 2*xm : u*u : u : xm */ + fxch %st(1) /* u*u : 2*xm : u : xm */ + fmul %st(2) /* t2:=u*u*u : 2*xm : u : xm */ + movl %edx, %eax + fadd %st, %st(1) /* t2 : t2+2*xm : u : xm */ + leal (%edx,%edx,2),%edx + fadd %st(0) /* 2*t2 : t2+2*xm : u : xm */ + subl %edx, %ecx + faddp %st, %st(3) /* t2+2*xm : u : 2*t2+xm */ + fmulp /* u*(t2+2*xm) : 2*t2+xm */ + fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */ + fmull MOX(16+factor,%ecx,8) /* u*(t2+2*xm)/(2*t2+xm)*FACT */ + pushl %eax + fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */ + fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */ + popl %eax + fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */ + fstp %st(1) +#ifdef PIC + popl %ebx +#endif + testl $0x80000000, 8(%esp) + jz 4f + fchs +4: ret + + /* Return the argument. */ +1: fldl 4(%esp) + ret +END(__cbrt) +weak_alias (__cbrt, cbrt) diff --git a/sysdeps/libm-i387/s_cbrtf.S b/sysdeps/libm-i387/s_cbrtf.S new file mode 100644 index 0000000000..6978da2d40 --- /dev/null +++ b/sysdeps/libm-i387/s_cbrtf.S @@ -0,0 +1,166 @@ +/* Compute cubic root of float value. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Dirk Alboth <dirka@uni-paderborn.de> and + Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <machine/asm.h> + +#ifdef __ELF__ + .section .rodata +#else + .text +#endif + + .align ALIGNARG(4) + ASM_TYPE_DIRECTIVE(f1,@object) +f1: .double 0.492659620528969547 + ASM_SIZE_DIRECTIVE(f1) + ASM_TYPE_DIRECTIVE(f2,@object) +f2: .double 0.697570460207922770 + ASM_SIZE_DIRECTIVE(f2) + ASM_TYPE_DIRECTIVE(f3,@object) +f3: .double 0.191502161678719066 + ASM_SIZE_DIRECTIVE(f3) + +#define CBRT2 1.2599210498948731648 +#define SQR_CBRT2 1.5874010519681994748 + + ASM_TYPE_DIRECTIVE(factor,@object) +factor: .double 1.0 / SQR_CBRT2 + .double 1.0 / CBRT2 + .double 1.0 + .double CBRT2 + .double SQR_CBRT2 + ASM_SIZE_DIRECTIVE(factor) + + ASM_TYPE_DIRECTIVE(two25,@object) +two25: .byte 0, 0, 0, 0x4c + ASM_SIZE_DIRECTIVE(two25) + +#ifdef PIC +#define MO(op) op##@GOTOFF(%ebx) +#define MOX(op,x,f) op##@GOTOFF(%ebx,x,f) +#else +#define MO(op) op +#define MOX(op,x,f) op(,x,f) +#endif + + .text +ENTRY(__cbrtf) + movl 4(%esp), %eax + xorl %ecx, %ecx + movl %eax, %edx + andl $0x7fffffff, %eax + jz 1f + cmpl $0x7f800000, %eax + jae 1f + +#ifdef PIC + pushl %ebx + call 3f +3: popl %ebx + addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx +#endif + + cmpl $0x00800000, %eax + jae 2f + +#ifdef PIC + flds 8(%esp) +#else + flds 4(%esp) +#endif + fmuls MO(two25) + movl $-25, %ecx +#ifdef PIC + fstps 8(%esp) + movl 8(%esp), %eax +#else + fstps 4(%esp) + movl 4(%esp), %eax +#endif + movl %eax, %edx + andl $0x7fffffff, %eax + +2: shrl $23, %eax + andl $0x807fffff, %edx + subl $126, %eax + orl $0x3f000000, %edx + addl %eax, %ecx +#ifdef PIC + movl %edx, 8(%esp) + + flds 8(%esp) /* xm */ +#else + movl %edx, 4(%esp) + + flds 4(%esp) /* xm */ +#endif + fabs + + /* The following code has two track: + a) compute the normalized cbrt value + b) compute xe/3 and xe%3 + The right track computes the value for b) and this is done + in an optimized way by avoiding division. */ + + fld %st(0) /* xm : xm */ + fmull MO(f3) /* f3*xm : xm */ + movl $1431655766, %eax + fsubrl MO(f2) /* f2-f3*xm : xm */ + imull %ecx + fmul %st(1) /* (f2-f3*xm)*xm : xm */ + movl %ecx, %eax + faddl MO(f1) /* u:=f1+(f2-f3*xm)*xm : xm */ + sarl $31, %eax + fld %st /* u : u : xm */ + subl %eax, %edx + fmul %st(1) /* u*u : u : xm */ + fld %st(2) /* xm : u*u : u : xm */ + fadd %st /* 2*xm : u*u : u : xm */ + fxch %st(1) /* u*u : 2*xm : u : xm */ + fmul %st(2) /* t2:=u*u*u : 2*xm : u : xm */ + movl %edx, %eax + fadd %st, %st(1) /* t2 : t2+2*xm : u : xm */ + leal (%edx,%edx,2),%edx + fadd %st(0) /* 2*t2 : t2+2*xm : u : xm */ + subl %edx, %ecx + faddp %st, %st(3) /* t2+2*xm : u : 2*t2+xm */ + fmulp /* u*(t2+2*xm) : 2*t2+xm */ + fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */ + fmull MOX(16+factor,%ecx,8) /* u*(t2+2*xm)/(2*t2+xm)*FACT */ + pushl %eax + fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */ + fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */ + popl %eax + fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */ + fstp %st(1) +#ifdef PIC + popl %ebx +#endif + testl $0x80000000, 4(%esp) + jz 4f + fchs +4: ret + + /* Return the argument. */ +1: flds 4(%esp) + ret +END(__cbrtf) +weak_alias (__cbrtf, cbrtf) diff --git a/sysdeps/libm-i387/s_cbrtl.S b/sysdeps/libm-i387/s_cbrtl.S new file mode 100644 index 0000000000..b2023d1991 --- /dev/null +++ b/sysdeps/libm-i387/s_cbrtl.S @@ -0,0 +1,188 @@ +/* Compute cubic root of long double value. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Dirk Alboth <dirka@uni-paderborn.de> and + Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <machine/asm.h> + +#ifdef __ELF__ + .section .rodata +#else + .text +#endif + + .align ALIGNARG(4) + ASM_TYPE_DIRECTIVE(f1,@object) +f1: .double 0.338058687610520237 + ASM_SIZE_DIRECTIVE(f1) + ASM_TYPE_DIRECTIVE(f2,@object) +f2: .double 1.67595307700780102 + ASM_SIZE_DIRECTIVE(f2) + ASM_TYPE_DIRECTIVE(f3,@object) +f3: .double -2.82414939754975962 + ASM_SIZE_DIRECTIVE(f3) + ASM_TYPE_DIRECTIVE(f4,@object) +f4: .double 4.09559907378707839 + ASM_SIZE_DIRECTIVE(f4) + ASM_TYPE_DIRECTIVE(f5,@object) +f5: .double -4.11151425200350531 + ASM_SIZE_DIRECTIVE(f5) + ASM_TYPE_DIRECTIVE(f6,@object) +f6: .double 2.65298938441952296 + ASM_SIZE_DIRECTIVE(f6) + ASM_TYPE_DIRECTIVE(f7,@object) +f7: .double -0.988553671195413709 + ASM_SIZE_DIRECTIVE(f7) + ASM_TYPE_DIRECTIVE(f8,@object) +f8: .double 0.161617097923756032 + ASM_SIZE_DIRECTIVE(f8) + +#define CBRT2 1.2599210498948731648 +#define SQR_CBRT2 1.5874010519681994748 + + ASM_TYPE_DIRECTIVE(factor,@object) +factor: .double 1.0 / SQR_CBRT2 + .double 1.0 / CBRT2 + .double 1.0 + .double CBRT2 + .double SQR_CBRT2 + ASM_SIZE_DIRECTIVE(factor) + + ASM_TYPE_DIRECTIVE(two64,@object) +two64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43 + ASM_SIZE_DIRECTIVE(two64) + +#ifdef PIC +#define MO(op) op##@GOTOFF(%ebx) +#define MOX(op,x,f) op##@GOTOFF(%ebx,x,f) +#else +#define MO(op) op +#define MOX(op,x,f) op(,x,f) +#endif + + .text +ENTRY(__cbrtl) + movl 4(%esp), %ecx + movl 12(%esp), %eax + orl 8(%esp), %ecx + movl %eax, %edx + andl $0x7fff, %eax + orl %eax, %ecx + jz 1f + xorl %ecx, %ecx + cmpl $0x7fff, %eax + je 1f + +#ifdef PIC + pushl %ebx + call 3f +3: popl %ebx + addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %ebx +#endif + + cmpl $0, %eax + je 2f + +#ifdef PIC + fldt 8(%esp) +#else + fldt 4(%esp) +#endif + fmull MO(two64) + movl $-64, %ecx + fstpt 4(%esp) + movl 12(%esp), %eax + movl %eax, %edx + andl $0x7fff, %eax + +2: andl $0x8000, %edx + subl $16382, %eax + orl $0x3ffe, %edx + addl %eax, %ecx +#ifdef PIC + movl %edx, 16(%esp) + + fldt 8(%esp) /* xm */ +#else + movl %edx, 12(%esp) + + fldt 4(%esp) /* xm */ +#endif + fabs + + /* The following code has two track: + a) compute the normalized cbrt value + b) compute xe/3 and xe%3 + The right track computes the value for b) and this is done + in an optimized way by avoiding division. */ + + fld %st(0) /* xm : xm */ + + fmull MO(f7) /* f7*xm : xm */ + movl $1431655766, %eax + faddl MO(f6) /* f6+f7*xm : xm */ + imull %ecx + fmul %st(1) /* (f6+f7*xm)*xm : xm */ + movl %ecx, %eax + faddl MO(f5) /* f5+(f6+f7*xm)*xm : xm */ + sarl $31, %eax + fmul %st(1) /* (f5+(f6+f7*xm)*xm)*xm : xm */ + subl %eax, %edx + faddl MO(f4) /* f4+(f5+(f6+f7*xm)*xm)*xm : xm */ + fmul %st(1) /* (f4+(f5+(f6+f7*xm)*xm)*xm)*xm : xm */ + faddl MO(f3) /* f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm : xm */ + fmul %st(1) /* (f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm : xm */ + faddl MO(f2) /* f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm : xm */ + fmul %st(1) /* (f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm)*xm : xm */ + faddl MO(f1) /* u:=f1+(f2+(f3+(f4+(f5+(f6+f7*xm)*xm)*xm)*xm)*xm)*xm : xm */ + + fld %st /* u : u : xm */ + fmul %st(1) /* u*u : u : xm */ + fld %st(2) /* xm : u*u : u : xm */ + fadd %st /* 2*xm : u*u : u : xm */ + fxch %st(1) /* u*u : 2*xm : u : xm */ + fmul %st(2) /* t2:=u*u*u : 2*xm : u : xm */ + movl %edx, %eax + fadd %st, %st(1) /* t2 : t2+2*xm : u : xm */ + leal (%edx,%edx,2),%edx + fadd %st(0) /* 2*t2 : t2+2*xm : u : xm */ + subl %edx, %ecx + faddp %st, %st(3) /* t2+2*xm : u : 2*t2+xm */ + fmulp /* u*(t2+2*xm) : 2*t2+xm */ + fdivp %st, %st(1) /* u*(t2+2*xm)/(2*t2+xm) */ + fmull MOX(16+factor,%ecx,8) /* u*(t2+2*xm)/(2*t2+xm)*FACT */ + pushl %eax + fildl (%esp) /* xe/3 : u*(t2+2*xm)/(2*t2+xm)*FACT */ + fxch /* u*(t2+2*xm)/(2*t2+xm)*FACT : xe/3 */ + popl %eax + fscale /* u*(t2+2*xm)/(2*t2+xm)*FACT*2^xe/3 */ + fstp %st(1) +#ifdef PIC + popl %ebx +#endif + testl $0x8000, 12(%esp) + jz 4f + fchs +4: ret + + /* Return the argument. */ +1: fldt 4(%esp) + ret +END(__cbrtl) +weak_alias (__cbrtl, cbrtl) diff --git a/sysdeps/libm-i387/s_frexp.S b/sysdeps/libm-i387/s_frexp.S new file mode 100644 index 0000000000..6a05f26720 --- /dev/null +++ b/sysdeps/libm-i387/s_frexp.S @@ -0,0 +1,82 @@ +/* ix87 specific frexp implementation for double. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <machine/asm.h> + +#ifdef __ELF__ + .section .rodata +#else + .text +#endif + + .align ALIGNARG(4) + ASM_TYPE_DIRECTIVE(two54,@object) +two54: .byte 0, 0, 0, 0, 0, 0, 0x50, 0x43 + ASM_SIZE_DIRECTIVE(two54) + +#ifdef PIC +#define MO(op) op##@GOTOFF(%edx) +#else +#define MO(op) op +#endif + + .text +ENTRY(__frexp) + movl 4(%esp), %ecx + movl 8(%esp), %eax + movl %eax, %edx + andl $0x7fffffff, %eax + orl %eax, %ecx + jz 1f + xorl %ecx, %ecx + cmpl $0x7ff00000, %eax + jae 1f + + cmpl $0x00100000, %eax + jae 2f + + fldl 4(%esp) +#ifdef PIC + call 3f +3: popl %edx + addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %edx +#endif + fmull MO(two54) + movl $-54, %ecx + fstpl 4(%esp) + movl 8(%esp), %eax + movl %eax, %edx + andl $0x7fffffff, %eax + +2: shrl $20, %eax + andl $0x800fffff, %edx + subl $1022, %eax + orl $0x3fe00000, %edx + addl %eax, %ecx + movl %edx, 8(%esp) + + /* Store %ecx in the variable pointed to by the second argument, + get the factor from the stack and return. */ +1: movl 12(%esp), %eax + fldl 4(%esp) + movl %ecx, (%eax) + ret +END(__frexp) +weak_alias (__frexp, frexp) diff --git a/sysdeps/libm-i387/s_frexpf.S b/sysdeps/libm-i387/s_frexpf.S new file mode 100644 index 0000000000..1021b97aee --- /dev/null +++ b/sysdeps/libm-i387/s_frexpf.S @@ -0,0 +1,80 @@ +/* ix87 specific frexp implementation for float. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <machine/asm.h> + +#ifdef __ELF__ + .section .rodata +#else + .text +#endif + + .align ALIGNARG(4) + ASM_TYPE_DIRECTIVE(two25,@object) +two25: .byte 0, 0, 0, 0x4c + ASM_SIZE_DIRECTIVE(two25) + +#ifdef PIC +#define MO(op) op##@GOTOFF(%edx) +#else +#define MO(op) op +#endif + + .text +ENTRY(__frexpf) + movl 4(%esp), %eax + xorl %ecx, %ecx + movl %eax, %edx + andl $0x7fffffff, %eax + jz 1f + cmpl $0x7f800000, %eax + jae 1f + + cmpl $0x00800000, %eax + jae 2f + + flds 4(%esp) +#ifdef PIC + call 3f +3: popl %edx + addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %edx +#endif + fmuls MO(two25) + movl $-25, %ecx + fstps 4(%esp) + movl 4(%esp), %eax + movl %eax, %edx + andl $0x7fffffff, %eax + +2: shrl $23, %eax + andl $0x807fffff, %edx + subl $126, %eax + orl $0x3f000000, %edx + addl %eax, %ecx + movl %edx, 4(%esp) + + /* Store %ecx in the variable pointed to by the second argument, + get the factor from the stack and return. */ +1: movl 8(%esp), %eax + flds 4(%esp) + movl %ecx, (%eax) + ret +END(__frexpf) +weak_alias (__frexpf, frexpf) diff --git a/sysdeps/libm-i387/s_frexpl.S b/sysdeps/libm-i387/s_frexpl.S new file mode 100644 index 0000000000..e3019ced6d --- /dev/null +++ b/sysdeps/libm-i387/s_frexpl.S @@ -0,0 +1,82 @@ +/* ix87 specific frexp implementation for long double. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <machine/asm.h> + +#ifdef __ELF__ + .section .rodata +#else + .text +#endif + + .align ALIGNARG(4) + ASM_TYPE_DIRECTIVE(two64,@object) +two64: .byte 0, 0, 0, 0, 0, 0, 0xf0, 0x43 + ASM_SIZE_DIRECTIVE(two64) + +#ifdef PIC +#define MO(op) op##@GOTOFF(%edx) +#else +#define MO(op) op +#endif + + .text +ENTRY(__frexpl) + movl 4(%esp), %ecx + movl 12(%esp), %eax + orl 8(%esp), %ecx + movl %eax, %edx + andl $0x7fff, %eax + orl %eax, %ecx + jz 1f + xorl %ecx, %ecx + cmpl $0x7fff, %eax + je 1f + + cmpl $0, %eax + je 2f + + fldt 4(%esp) +#ifdef PIC + call 3f +3: popl %edx + addl $_GLOBAL_OFFSET_TABLE_+[.-3b], %edx +#endif + fmull MO(two64) /* It's not necessary to use a 80bit factor */ + movl $-64, %ecx + fstpt 4(%esp) + movl 12(%esp), %eax + movl %eax, %edx + andl $0x7fff, %eax + +2: andl $0x8000, %edx + subl $16382, %eax + orl $0x3ffe, %edx + addl %eax, %ecx + movl %edx, 12(%esp) + + /* Store %ecx in the variable pointed to by the second argument, + get the factor from the stack and return. */ +1: movl 16(%esp), %eax + fldt 4(%esp) + movl %ecx, (%eax) + ret +END(__frexpl) +weak_alias (__frexpl, frexpl) diff --git a/sysdeps/libm-ieee754/s_cbrt.c b/sysdeps/libm-ieee754/s_cbrt.c index 24a9c9adbd..a5033ff468 100644 --- a/sysdeps/libm-ieee754/s_cbrt.c +++ b/sysdeps/libm-ieee754/s_cbrt.c @@ -1,95 +1,71 @@ -/* @(#)s_cbrt.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ +/* Compute cubic root of double value. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Dirk Alboth <dirka@uni-paderborn.de> and + Ulrich Drepper <drepper@cygnus.com>, 1997. -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_cbrt.c,v 1.8 1995/05/10 20:46:49 jtc Exp $"; -#endif + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "math.h" #include "math_private.h" -/* cbrt(x) - * Return cube root of x - */ -#ifdef __STDC__ -static const u_int32_t -#else -static u_int32_t -#endif - B1 = 715094163, /* B1 = (682-0.03306235651)*2**20 */ - B2 = 696219795; /* B2 = (664-0.03306235651)*2**20 */ -#ifdef __STDC__ -static const double -#else -static double -#endif -C = 5.42857142857142815906e-01, /* 19/35 = 0x3FE15F15, 0xF15F15F1 */ -D = -7.05306122448979611050e-01, /* -864/1225 = 0xBFE691DE, 0x2532C834 */ -E = 1.41428571428571436819e+00, /* 99/70 = 0x3FF6A0EA, 0x0EA0EA0F */ -F = 1.60714285714285720630e+00, /* 45/28 = 0x3FF9B6DB, 0x6DB6DB6E */ -G = 3.57142857142857150787e-01; /* 5/14 = 0x3FD6DB6D, 0xB6DB6DB7 */ +#define CBRT2 1.2599210498948731648 /* 2^(1/3) */ +#define SQR_CBRT2 1.5874010519681994748 /* 2^(2/3) */ -#ifdef __STDC__ - double __cbrt(double x) -#else - double __cbrt(x) - double x; -#endif +static const double factor[5] = { - int32_t hx; - double r,s,t=0.0,w; - u_int32_t sign; - u_int32_t high,low; + 1.0 / SQR_CBRT2, + 1.0 / CBRT2, + 1.0, + CBRT2, + SQR_CBRT2 +}; - GET_HIGH_WORD(hx,x); - sign=hx&0x80000000; /* sign= sign(x) */ - hx ^=sign; - if(hx>=0x7ff00000) return(x+x); /* cbrt(NaN,INF) is itself */ - GET_LOW_WORD(low,x); - if((hx|low)==0) - return(x); /* cbrt(0) is itself */ - SET_HIGH_WORD(x,hx); /* x <- |x| */ - /* rough cbrt to 5 bits */ - if(hx<0x00100000) /* subnormal number */ - {SET_HIGH_WORD(t,0x43500000); /* set t= 2**54 */ - t*=x; GET_HIGH_WORD(high,t); SET_HIGH_WORD(t,high/3+B2); - } - else - SET_HIGH_WORD(t,hx/3+B1); +double +__cbrt (double x) +{ + double xm, ym, u, t2; + int xe; + /* Reduce X. XM now is an range 1.0 to 0.5. */ + xm = __frexp (fabs (x), &xe); - /* new cbrt to 23 bits, may be implemented in single precision */ - r=t*t/x; - s=C+r*t; - t*=G+F/(s+E+D/s); + /* If X is not finite or is null return it (with raising exceptions + if necessary. */ + if (xe == 0) + return x + x; - /* chopped to 20 bits and make it larger than cbrt(x) */ - GET_HIGH_WORD(high,t); - INSERT_WORDS(t,high+0x00000001,0); + u = (0.354895765043919860 + + ((1.50819193781584896 + + ((-2.11499494167371287 + + ((2.44693122563534430 + + ((-1.83469277483613086 + + (0.784932344976639262 - 0.145263899385486377 * xm) * xm) + * xm)) + * xm)) + * xm)) + * xm)); + t2 = u * u * u; - /* one step newton iteration to 53 bits with error less than 0.667 ulps */ - s=t*t; /* t*t is exact */ - r=x/s; - w=t+t; - r=(r-t)/(w+r); /* r-s is exact */ - t=t+t*r; + ym = u * (t2 + 2.0 * xm) / (2.0 * t2 + xm) * factor[2 + xe % 3]; - /* retore the sign bit */ - GET_HIGH_WORD(high,t); - SET_HIGH_WORD(t,high|sign); - return(t); + return __ldexp (x > 0.0 ? ym : -ym, xe / 3); } weak_alias (__cbrt, cbrt) #ifdef NO_LONG_DOUBLE diff --git a/sysdeps/libm-ieee754/s_cbrtf.c b/sysdeps/libm-ieee754/s_cbrtf.c index a2b3c8106c..f9f687c011 100644 --- a/sysdeps/libm-ieee754/s_cbrtf.c +++ b/sysdeps/libm-ieee754/s_cbrtf.c @@ -1,84 +1,62 @@ -/* s_cbrtf.c -- float version of s_cbrt.c. - * Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: s_cbrtf.c,v 1.4 1995/05/10 20:46:51 jtc Exp $"; -#endif +/* Compute cubic root of float value. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Dirk Alboth <dirka@uni-paderborn.de> and + Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "math.h" #include "math_private.h" -/* cbrtf(x) - * Return cube root of x - */ -#ifdef __STDC__ -static const unsigned -#else -static unsigned -#endif - B1 = 709958130, /* B1 = (84+2/3-0.03306235651)*2**23 */ - B2 = 642849266; /* B2 = (76+2/3-0.03306235651)*2**23 */ -#ifdef __STDC__ -static const float -#else -static float -#endif -C = 5.4285717010e-01, /* 19/35 = 0x3f0af8b0 */ -D = -7.0530611277e-01, /* -864/1225 = 0xbf348ef1 */ -E = 1.4142856598e+00, /* 99/70 = 0x3fb50750 */ -F = 1.6071428061e+00, /* 45/28 = 0x3fcdb6db */ -G = 3.5714286566e-01; /* 5/14 = 0x3eb6db6e */ +#define CBRT2 1.2599210498948731648 /* 2^(1/3) */ +#define SQR_CBRT2 1.5874010519681994748 /* 2^(2/3) */ + +static const double factor[5] = +{ + 1.0 / SQR_CBRT2, + 1.0 / CBRT2, + 1.0, + CBRT2, + SQR_CBRT2 +}; + -#ifdef __STDC__ - float __cbrtf(float x) -#else - float __cbrtf(x) - float x; -#endif +float +__cbrtf (float x) { - float r,s,t; - int32_t hx; - u_int32_t sign; - u_int32_t high; + float xm, ym, u, t2; + int xe; + + /* Reduce X. XM now is an range 1.0 to 0.5. */ + xm = __frexpf (fabsf (x), &xe); - GET_FLOAT_WORD(hx,x); - sign=hx&0x80000000; /* sign= sign(x) */ - hx ^=sign; - if(hx>=0x7f800000) return(x+x); /* cbrt(NaN,INF) is itself */ - if(hx==0) - return(x); /* cbrt(0) is itself */ + /* If X is not finite or is null return it (with raising exceptions + if necessary. */ + if (xe == 0) + return x + x; - SET_FLOAT_WORD(x,hx); /* x <- |x| */ - /* rough cbrt to 5 bits */ - if(hx<0x00800000) /* subnormal number */ - {SET_FLOAT_WORD(t,0x4b800000); /* set t= 2**24 */ - t*=x; GET_FLOAT_WORD(high,t); SET_FLOAT_WORD(t,high/3+B2); - } - else - SET_FLOAT_WORD(t,hx/3+B1); + u = (0.492659620528969547 + (0.697570460207922770 + - 0.191502161678719066 * xm) * xm); + t2 = u * u * u; - /* new cbrt to 23 bits */ - r=t*t/x; - s=C+r*t; - t*=G+F/(s+E+D/s); + ym = u * (t2 + 2.0 * xm) / (2.0 * t2 + xm) * factor[2 + xe % 3]; - /* retore the sign bit */ - GET_FLOAT_WORD(high,t); - SET_FLOAT_WORD(t,high|sign); - return(t); + return __ldexpf (x > 0.0 ? ym : -ym, xe / 3); } weak_alias (__cbrtf, cbrtf) diff --git a/sysdeps/libm-ieee754/s_cbrtl.c b/sysdeps/libm-ieee754/s_cbrtl.c index 21e7727728..b3a53a39e1 100644 --- a/sysdeps/libm-ieee754/s_cbrtl.c +++ b/sysdeps/libm-ieee754/s_cbrtl.c @@ -1,122 +1,76 @@ -/* s_cbrtl.c -- long double version of s_cbrt.c. - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - */ - -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -#if defined(LIBM_SCCS) && !defined(lint) -static char rcsid[] = "$NetBSD: $"; -#endif +/* Compute cubic root of double value. + Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Dirk Alboth <dirka@uni-paderborn.de> and + Ulrich Drepper <drepper@cygnus.com>, 1997. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include "math.h" #include "math_private.h" -/* cbrtl(x) - * Return cube root of x - */ -#ifdef __STDC__ -static const u_int32_t -#else -static u_int32_t -#endif - B1_EXP = 10921, /* = Int(B1) */ - B1_MANT = 0x7bc4b064, /* = Int(1.0-0.03306235651)*2**31 */ - - B2_EXP = 10900, - B2_MANT = 0x7bc4b064; /* = Int(1.0-0.03306235651)*2**31 */ -#ifdef __STDC__ -static const long double -#else -static long double -#endif -C = 5.42857142857142815906e-01L, /* 19/35 */ -D = -7.05306122448979611050e-01L, /* -864/1225 */ -E = 1.41428571428571436819e+00L, /* 99/70 */ -F = 1.60714285714285720630e+00L, /* 45/28 */ -G = 3.57142857142857150787e-01L; /* 5/14 */ +#define CBRT2 1.2599210498948731648 /* 2^(1/3) */ +#define SQR_CBRT2 1.5874010519681994748 /* 2^(2/3) */ -#ifdef __STDC__ - long double __cbrtl(long double x) -#else - long double __cbrtl(x) - long double x; -#endif +/* We don't use long double values here since U need not be computed + with full precision. */ +static const double factor[5] = { - long double r,s,t=0.0,w; - u_int32_t sign, se, x0, x1; - - GET_LDOUBLE_WORDS(se,x0,x1,x); - sign=se&0x8000; /* sign= sign(x) */ - se ^= sign; - if(se==0x7fff) return(x+x); /* cbrt(NaN,INF) is itself */ - if((se|x0|x1)==0) - return(x); /* cbrt(0) is itself */ - - SET_LDOUBLE_EXP(x,se); /* x <- |x| */ - -/* XXX I don't know whether the numbers for correct are correct. The - precalculation is extended from 20 bits to 32 bits. This hopefully - gives us the needed bits to get us still along with one iteration - step. */ + 1.0 / SQR_CBRT2, + 1.0 / CBRT2, + 1.0, + CBRT2, + SQR_CBRT2 +}; - /* rough cbrt to 5 bits */ - if(se==0) /* subnormal number */ - { - u_int64_t xxl; - u_int32_t set,t0,t1; - SET_LDOUBLE_EXP(t,0x4035); /* set t= 2**54 */ - SET_LDOUBLE_MSW(t,0x80000000); - t*=x; - GET_LDOUBLE_WORDS(set,t0,t1,t); - xxl = ((u_int64_t) set) << 32 | t0; - xxl /= 3; - xxl += B2_EXP << 16 | B2_MANT; - t0 = xxl & 0xffffffffu; - set = xxl >> 32; - SET_LDOUBLE_WORDS(t,set,t0,t1); - } - else - { - u_int64_t xxl = ((u_int64_t) se) << 32 | x0; - xxl /= 3; - xxl += ((u_int64_t) B1_EXP) << 32 | B1_MANT; - SET_LDOUBLE_MSW(t,xxl&0xffffffffu); - xxl >>= 32; - SET_LDOUBLE_EXP(t,xxl); - } - - /* new cbrt to 23 bits, may be implemented in single precision */ - r=t*t/x; - s=C+r*t; - t*=G+F/(s+E+D/s); - - /* chopped to 32 bits and make it larger than cbrt(x) */ - GET_LDOUBLE_WORDS(se,x0,x1,t); - SET_LDOUBLE_WORDS(t,se,x0+1,0); - - - /* one step newton iteration to 53 bits with error less than 0.667 ulps */ - s=t*t; /* t*t is exact */ - r=x/s; - w=t+t; - r=(r-t)/(w+r); /* r-s is exact */ - t=t+t*r; - - /* retore the sign bit */ - GET_LDOUBLE_EXP(se,t); - SET_LDOUBLE_EXP(t,se|sign); - return(t); +long double +__cbrtl (long double x) +{ + long double xm, ym, u, t2; + int xe; + + /* Reduce X. XM now is an range 1.0 to 0.5. */ + xm = __frexpl (fabs (x), &xe); + + /* If X is not finite or is null return it (with raising exceptions + if necessary. */ + if (xe == 0) + return x + x; + + u = (0.338058687610520237 + + (1.67595307700780102 + + (-2.82414939754975962 + + (4.09559907378707839 + + (-4.11151425200350531 + + (2.65298938441952296 + + (-0.988553671195413709 + + 0.161617097923756032 * xm) + * xm) + * xm) + * xm) + * xm) + * xm) + *xm); + + t2 = u * u * u; + + ym = u * (t2 + 2.0 * xm) / (2.0 * t2 + xm) * factor[2 + xe % 3]; + + return __ldexpl (x > 0.0 ? ym : -ym, xe / 3); } weak_alias (__cbrtl, cbrtl) diff --git a/sysdeps/libm-ieee754/s_nan.c b/sysdeps/libm-ieee754/s_nan.c index 35d92646c0..1d2319cbd8 100644 --- a/sysdeps/libm-ieee754/s_nan.c +++ b/sysdeps/libm-ieee754/s_nan.c @@ -19,6 +19,7 @@ Boston, MA 02111-1307, USA. */ #include <math.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ieee754.h> diff --git a/sysdeps/libm-ieee754/s_nanf.c b/sysdeps/libm-ieee754/s_nanf.c index 8e6e3fc1fd..56fb9e7e3d 100644 --- a/sysdeps/libm-ieee754/s_nanf.c +++ b/sysdeps/libm-ieee754/s_nanf.c @@ -19,6 +19,7 @@ Boston, MA 02111-1307, USA. */ #include <math.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ieee754.h> diff --git a/sysdeps/libm-ieee754/s_nanl.c b/sysdeps/libm-ieee754/s_nanl.c index 1cd026e00c..279e070492 100644 --- a/sysdeps/libm-ieee754/s_nanl.c +++ b/sysdeps/libm-ieee754/s_nanl.c @@ -19,6 +19,7 @@ Boston, MA 02111-1307, USA. */ #include <math.h> +#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ieee754.h> diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 888ab9bd85..4e698ce1d8 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -53,7 +53,7 @@ inhibit-siglist := yes endif ifeq ($(subdir),inet) -sysdep_headers += netinet/in_systm.h netinet/udp.h netinet/icmp.h \ +sysdep_headers += netinet/in_systm.h netinet/udp.h \ netinet/if_fddi.h netinet/if_tr.h netinet/igmp.h \ netinet/ip_fw.h netinet/ip_icmp.h sys/socketvar.h endif diff --git a/sysdeps/unix/sysv/linux/sigset.h b/sysdeps/unix/sysv/linux/sigset.h index 62e668773c..741ff9ac9d 100644 --- a/sysdeps/unix/sysv/linux/sigset.h +++ b/sysdeps/unix/sysv/linux/sigset.h @@ -75,7 +75,7 @@ typedef struct int __ret = __set->__val[--__cnt]; \ while (!__ret && --__cnt >= 0) \ __ret = __set->__val[__cnt]; \ - __ret; })) + __ret == 0; })) # define __sigandset(dest, left, right) \ (__extension__ ({ int __cnt = _SIGSET_NWORDS; \ sigset_t *__dest = (dest); \ |