update from main archive 961001

This commit is contained in:
Ulrich Drepper 1996-10-02 01:40:17 +00:00
parent 2d07133b50
commit a68b0d31a3
109 changed files with 1137 additions and 267 deletions

View File

@ -125,7 +125,7 @@ $(objpfx)sysd-dirs: $(+sysdir_pfx)config.make $(all-Subdirs-files)
all-Banner-files = $(wildcard $(addsuffix /Banner, $(subdirs))) all-Banner-files = $(wildcard $(addsuffix /Banner, $(subdirs)))
$(objpfx)version-info.h: $(+sysdir_pfx)config.make $(all-Banner-files) $(objpfx)version-info.h: $(+sysdir_pfx)config.make $(all-Banner-files)
(files="$(all-Banner-files)"; \ (files="$(all-Banner-files)"; \
if [ test -n "$$files" ]; then \ if test -n "$$files"; then \
echo "\"Available extensions:"; \ echo "\"Available extensions:"; \
sed -e '/^#/d' -e 's/^[[:space:]]*/ /' $$files; \ sed -e '/^#/d' -e 's/^[[:space:]]*/ /' $$files; \
echo "\""; \ echo "\""; \

View File

@ -37,7 +37,8 @@ contact <bug-glibc@prep.ai.mit.edu>
The libm is in fact fdlibm (not the same as in Linux libc). The libm is in fact fdlibm (not the same as in Linux libc).
**** Partly done. **** Partly done. But we need someone with numerical experiences for
the rest.
[ 6] If you enjoy assembler programming (as I do --drepper :-) you might [ 6] If you enjoy assembler programming (as I do --drepper :-) you might
@ -81,7 +82,7 @@ contact <bug-glibc@prep.ai.mit.edu>
Please contact bug-glibc@prep.ai.mit.edu before starting to avoid Please contact bug-glibc@prep.ai.mit.edu before starting to avoid
duplicated work. duplicated work.
[11] Write access function for netmasks, bootparams, netgroup, publickey, [11] Write access function for netmasks, bootparams, publickey, automount,
automount, aliases databases for nss_files and nss_db module. and aliases databases for nss_files and nss_db module.
The functions should be embedded in the nss scheme. This is not The functions should be embedded in the nss scheme. This is not
hard and not all services must be supported at once. hard and not all services must be supported at once.

View File

@ -165,14 +165,13 @@ main (int argc, char *argv[])
/* Version information is requested. */ /* Version information is requested. */
if (do_version) if (do_version)
{ {
fprintf (stderr, "gencat (GNU %s) %s\n", PACKAGE, VERSION); printf ("gencat (GNU %s) %s\n", PACKAGE, VERSION);
fprintf (stderr, _("\ printf (_("\
Copyright (C) %s Free Software Foundation, Inc.\n\ Copyright (C) %s Free Software Foundation, Inc.\n\
This is free software; see the source for copying conditions. There is NO\n\ This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
"), "1996"); "), "1996");
fprintf (stderr, _("Written by %s.\n"), printf (_("Written by %s.\n"), "Ulrich Drepper");
"Ulrich Drepper");
exit (EXIT_SUCCESS); exit (EXIT_SUCCESS);
} }
@ -210,7 +209,7 @@ usage (int status)
program_invocation_name); program_invocation_name);
else else
{ {
printf(gettext ("\ printf (gettext ("\
Usage: %s [OPTION]... -o OUTPUT-FILE [INPUT-FILE]...\n\ Usage: %s [OPTION]... -o OUTPUT-FILE [INPUT-FILE]...\n\
%s [OPTION]... [OUTPUT-FILE [INPUT-FILE]...]\n\ %s [OPTION]... [OUTPUT-FILE [INPUT-FILE]...]\n\
Mandatory arguments to long options are mandatory for short options too.\n\ Mandatory arguments to long options are mandatory for short options too.\n\
@ -221,7 +220,7 @@ Mandatory arguments to long options are mandatory for short options too.\n\
-V, --version output version information and exit\n\ -V, --version output version information and exit\n\
If INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n\ If INPUT-FILE is -, input is read from standard input. If OUTPUT-FILE\n\
is -, output is written to standard output.\n"), is -, output is written to standard output.\n"),
program_invocation_name, program_invocation_name); program_invocation_name, program_invocation_name);
fputs (gettext ("Report bugs to <bug-glibc@prep.ai.mit.edu>.\n"), fputs (gettext ("Report bugs to <bug-glibc@prep.ai.mit.edu>.\n"),
stdout); stdout);
} }

View File

@ -94,18 +94,6 @@ _init (void)
if (__gmon_start__) if (__gmon_start__)
__gmon_start__ (); __gmon_start__ ();
#ifdef _LIBC_REENTRANT
{
/* This is a trick to generate a reference for the symbol
__libc_force_cancel_wrapper which can be used to force parts of
the thread library to be used where some functions and system
calls are overwritten. The value of this variable is always 0. */
extern const int __libc_force_cancel_wrapper;
if (__libc_force_cancel_wrapper)
_init ();
}
#endif
/* End the here document containing the .init prologue code. /* End the here document containing the .init prologue code.
Then fetch the .section directive just written and append that Then fetch the .section directive just written and append that
to crtn.s-new, followed by the function epilogue. */ to crtn.s-new, followed by the function epilogue. */

View File

@ -115,14 +115,13 @@ main (argc, argv)
/* Version information is requested. */ /* Version information is requested. */
if (do_version) if (do_version)
{ {
fprintf (stderr, "makedb (GNU %s) %s\n", PACKAGE, VERSION); printf ("makedb (GNU %s) %s\n", PACKAGE, VERSION);
fprintf (stderr, _("\ printf (_("\
Copyright (C) %s Free Software Foundation, Inc.\n\ Copyright (C) %s Free Software Foundation, Inc.\n\
This is free software; see the source for copying conditions. There is NO\n\ This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
"), "1996"); "), "1996");
fprintf (stderr, _("Written by %s.\n"), printf (_("Written by %s.\n"), "Ulrich Drepper");
"Ulrich Drepper");
exit (EXIT_SUCCESS); exit (EXIT_SUCCESS);
} }

View File

@ -1,6 +1,26 @@
/* You don't really want to know what this hack is for.
Copyright (C) 1996 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. */
#include <stdio.h> #include <stdio.h>
#include <ctype.h> #include <ctype.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <unistd.h> #include <unistd.h>
#include <dlfcn.h> #include <dlfcn.h>

View File

@ -35,7 +35,6 @@
#include <sys/gmon.h> #include <sys/gmon.h>
#include <sys/gmon_out.h> #include <sys/gmon_out.h>
#include <ansidecl.h>
#include <stdio.h> #include <stdio.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
@ -45,7 +44,7 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
extern int __profile_frequency (void); extern int __profile_frequency __P ((void));
struct __bb *__bb_head; /* Head of basic-block list or NULL. */ struct __bb *__bb_head; /* Head of basic-block list or NULL. */
@ -65,7 +64,8 @@ static int s_scale;
* all the data structures are ready. * all the data structures are ready.
*/ */
void void
DEFUN(moncontrol, (mode), int mode) moncontrol (mode)
int mode;
{ {
struct gmonparam *p = &_gmonparam; struct gmonparam *p = &_gmonparam;
@ -85,7 +85,9 @@ DEFUN(moncontrol, (mode), int mode)
void void
DEFUN(monstartup, (lowpc, highpc), u_long lowpc AND u_long highpc) monstartup (lowpc, highpc)
u_long lowpc;
u_long highpc;
{ {
register int o; register int o;
char *cp; char *cp;
@ -155,21 +157,19 @@ DEFUN(monstartup, (lowpc, highpc), u_long lowpc AND u_long highpc)
static void static void
DEFUN(write_hist, (fd), int fd) write_hist (fd)
int fd;
{ {
const u_char tag = GMON_TAG_TIME_HIST; const u_char tag = GMON_TAG_TIME_HIST;
struct gmon_hist_hdr thdr; struct gmon_hist_hdr thdr;
int size, rate;
if (_gmonparam.kcountsize > 0) if (_gmonparam.kcountsize > 0)
{ {
size = _gmonparam.kcountsize / sizeof(HISTCOUNTER); thdr.low_pc = _gmonparam.lowpc;
rate = __profile_frequency(); thdr.high_pc = _gmonparam.highpc;
bcopy(&_gmonparam.lowpc, &thdr.low_pc, sizeof(thdr.low_pc)); thdr.hist_size = _gmonparam.kcountsize / sizeof(HISTCOUNTER);
bcopy(&_gmonparam.highpc, &thdr.high_pc, sizeof(thdr.high_pc)); thdr.prof_rate = __profile_frequency();
bcopy(&size, &thdr.hist_size, sizeof(thdr.hist_size)); strncpy(thdr.dimen, "seconds", sizeof(thdr.dimen));
bcopy(&rate, &thdr.prof_rate, sizeof(thdr.prof_rate));
strcpy(thdr.dimen, "seconds");
thdr.dimen_abbrev = 's'; thdr.dimen_abbrev = 's';
write(fd, &tag, sizeof(tag)); write(fd, &tag, sizeof(tag));
@ -180,7 +180,8 @@ DEFUN(write_hist, (fd), int fd)
static void static void
DEFUN(write_call_graph, (fd), int fd) write_call_graph (fd)
int fd;
{ {
const u_char tag = GMON_TAG_CG_ARC; const u_char tag = GMON_TAG_CG_ARC;
struct gmon_cg_arc_record raw_arc; struct gmon_cg_arc_record raw_arc;
@ -200,11 +201,9 @@ DEFUN(write_call_graph, (fd), int fd)
to_index != 0; to_index != 0;
to_index = _gmonparam.tos[to_index].link) to_index = _gmonparam.tos[to_index].link)
{ {
bcopy(&frompc, &raw_arc.from_pc, sizeof(raw_arc.from_pc)); raw_arc.from_pc = frompc;
bcopy(&_gmonparam.tos[to_index].selfpc, &raw_arc.self_pc, raw_arc.self_pc = _gmonparam.tos[to_index].selfpc;
sizeof(raw_arc.self_pc)); raw_arc.count = _gmonparam.tos[to_index].count;
bcopy(&_gmonparam.tos[to_index].count, &raw_arc.count,
sizeof(raw_arc.count));
write(fd, &tag, sizeof(tag)); write(fd, &tag, sizeof(tag));
write(fd, &raw_arc, sizeof(raw_arc)); write(fd, &raw_arc, sizeof(raw_arc));
@ -214,7 +213,8 @@ DEFUN(write_call_graph, (fd), int fd)
static void static void
DEFUN(write_bb_counts, (fd), int fd) write_bb_counts (fd)
int fd;
{ {
struct __bb *grp; struct __bb *grp;
const u_char tag = GMON_TAG_BB_COUNT; const u_char tag = GMON_TAG_BB_COUNT;
@ -239,9 +239,8 @@ DEFUN(write_bb_counts, (fd), int fd)
void void
DEFUN_VOID(_mcleanup) _mcleanup ()
{ {
const int version = GMON_VERSION;
struct gmon_hdr ghdr; struct gmon_hdr ghdr;
int fd; int fd;
@ -254,8 +253,9 @@ DEFUN_VOID(_mcleanup)
} }
/* write gmon.out header: */ /* write gmon.out header: */
bcopy(GMON_MAGIC, &ghdr.cookie[0], 4); memset(&ghdr, 0, sizeof(ghdr));
bcopy(&version, &ghdr.version, sizeof(version)); memcpy(&ghdr.cookie[0], GMON_MAGIC, sizeof(ghdr.cookie));
ghdr.version = GMON_VERSION;
write(fd, &ghdr, sizeof(ghdr)); write(fd, &ghdr, sizeof(ghdr));
/* write PC histogram: */ /* write PC histogram: */

View File

@ -58,7 +58,6 @@ static char sccsid[] = "@(#)mcount.c 8.1 (Berkeley) 6/4/93";
* perform this optimization. * perform this optimization.
*/ */
_MCOUNT_DECL(frompc, selfpc) /* _mcount; may be static, inline, etc */ _MCOUNT_DECL(frompc, selfpc) /* _mcount; may be static, inline, etc */
register u_long frompc, selfpc;
{ {
register u_short *frompcindex; register u_short *frompcindex;
register struct tostruct *top, *prevtop; register struct tostruct *top, *prevtop;

View File

@ -39,8 +39,8 @@ identifying the type of records, followed by records specific data. */
*/ */
struct gmon_hdr { struct gmon_hdr {
char cookie[4]; char cookie[4];
char version[4]; int version;
char spare[3 * 4]; int spare[3];
}; };
/* types of records in this file: */ /* types of records in this file: */
@ -49,18 +49,18 @@ typedef enum {
} GMON_Record_Tag; } GMON_Record_Tag;
struct gmon_hist_hdr { struct gmon_hist_hdr {
char low_pc[sizeof (char *)]; /* base pc address of sample buffer */ unsigned long low_pc; /* base pc address of sample buffer */
char high_pc[sizeof (char *)]; /* max pc address of sampled buffer */ unsigned long high_pc; /* max pc address of sampled buffer */
char hist_size[4]; /* size of sample buffer */ int hist_size; /* size of sample buffer */
char prof_rate[4]; /* profiling clock rate */ int prof_rate; /* profiling clock rate */
char dimen[15]; /* phys. dim., usually "seconds" */ char dimen[15]; /* phys. dim., usually "seconds" */
char dimen_abbrev; /* usually 's' for "seconds" */ char dimen_abbrev; /* usually 's' for "seconds" */
}; };
struct gmon_cg_arc_record { struct gmon_cg_arc_record {
char from_pc[sizeof (char *)]; /* address within caller's body */ unsigned long from_pc; /* address within caller's body */
char self_pc[sizeof (char *)]; /* address within callee's body */ unsigned long self_pc; /* address within callee's body */
char count[4]; /* number of arc traversals */ int count; /* number of arc traversals */
}; };
#endif /* !_SYS_GMON_OUT_H_ */ #endif /* !_SYS_GMON_OUT_H_ */

View File

@ -24,6 +24,8 @@ subdir := inet
headers := netinet/ether.h netinet/in.h netinet/if_ether.h \ headers := netinet/ether.h netinet/in.h netinet/if_ether.h \
netinet/tcp.h $(wildcard arpa/*.h protocols/*.h) netinet/tcp.h $(wildcard arpa/*.h protocols/*.h)
distribute := netgroup.h
routines := ntohl ntohs htonl htons \ routines := ntohl ntohs htonl htons \
inet_lnaof inet_mkadr \ inet_lnaof inet_mkadr \
inet_netof inet_ntoa inet_net herrno \ inet_netof inet_ntoa inet_net herrno \
@ -38,7 +40,8 @@ routines := ntohl ntohs htonl htons \
getrpcent_r getrpcbyname_r getrpcbynumber_r \ getrpcent_r getrpcbyname_r getrpcbynumber_r \
ether_aton ether_aton_r ether_hton ether_line \ ether_aton ether_aton_r ether_hton ether_line \
ether_ntoa ether_ntoa_r ether_ntoh \ ether_ntoa ether_ntoa_r ether_ntoh \
rcmd rexec ruserpass rcmd rexec ruserpass \
getnetgrent_r getnetgrent
# No warnings about losing BSD code. # No warnings about losing BSD code.
override +gccwarn := -w override +gccwarn := -w

28
inet/getnetgrent.c Normal file
View File

@ -0,0 +1,28 @@
/* Copyright (C) 1996 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. */
#include <netdb.h>
int
getnetgrent (char **hostp, char **userp, char **domainp)
{
static char buffer[1024]; /* All three strings shouldn't use 1kB. */
return __getnetgrent_r (hostp, userp, domainp, buffer, sizeof (buffer));
}

218
inet/getnetgrent_r.c Normal file
View File

@ -0,0 +1,218 @@
/* Copyright (C) 1996 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. */
#include <libc-lock.h>
#include <netdb.h>
#include "netgroup.h"
#include "nsswitch.h"
/* Protect above variable against multiple uses at the same time. */
__libc_lock_define_initialized (static, lock)
/* This handle for the NSS data base is shared between all
set/get/endXXXent functions. */
static service_user *nip;
/* Remember the first service_entry, it's always the same. */
static service_user *startp;
/* The lookup function for the first entry of this service. */
extern int __nss_netgroup_lookup (service_user **nip, const char *name,
void **fctp);
/* Set up NIP to run through the services. If ALL is zero, use NIP's
current location if it's not nil. Return nonzero if there are no
services (left). */
static enum nss_status
setup (void **fctp, const char *func_name, int all)
{
int no_more;
if (startp == NULL)
{
no_more = __nss_netgroup_lookup (&nip, func_name, fctp);
startp = no_more ? (service_user *) -1 : nip;
}
else if (startp == (service_user *) -1)
/* No services at all. */
return 1;
else
{
if (all || !nip)
/* Reset to the beginning of the service list. */
nip = startp;
/* Look up the first function. */
no_more = __nss_lookup (&nip, func_name, fctp);
}
return no_more;
}
int
setnetgrent (const char *group)
{
enum nss_status (*fct) (const char *);
enum nss_status status = NSS_STATUS_UNAVAIL;
int no_more;
__libc_lock_lock (lock);
/* Cycle through all the services and run their setnetgrent functions. */
no_more = setup ((void **) &fct, "setnetgrent", 1);
while (! no_more)
{
/* Ignore status, we force check in __NSS_NEXT. */
status = (*fct) (group);
no_more = __nss_next (&nip, "setnetgrent", (void **) &fct, status, 0);
}
__libc_lock_unlock (lock);
return status == NSS_STATUS_SUCCESS;
}
void
endnetgrent (void)
{
service_user *old_nip;
enum nss_status (*fct) (void);
int no_more;
__libc_lock_lock (lock);
/* Remember which was the last used service. */
old_nip = nip;
/* Cycle through all the services and run their setnetgrent functions. */
no_more = setup ((void **) &fct, "endnetgrent", 1);
while (! no_more)
{
/* Ignore status, we force check in __NSS_NEXT. */
(void) (*fct) ();
no_more = (nip == old_nip
|| __nss_next (&nip, "endnetgrent", (void **) &fct, 0, 1));
}
__libc_lock_unlock (lock);
}
int
__getnetgrent_r (char **hostp, char **userp, char **domainp,
char *buffer, int buflen)
{
enum nss_status (*fct) (struct __netgrent *, char *, int);
struct __netgrent result;
int no_more;
/* Initialize status to return if no more functions are found. */
enum nss_status status = NSS_STATUS_NOTFOUND;
__libc_lock_lock (lock);
/* Run through available functions, starting with the same function last
run. We will repeat each function as long as it succeeds, and then go
on to the next service action. */
no_more = setup ((void **) &fct, "getnetgrent_r", 0);
while (! no_more)
{
status = (*fct) (&result, buffer, buflen);
no_more = __nss_next (&nip, "getnetgrent_r", (void **) &fct, status, 0);
}
if (status == NSS_STATUS_SUCCESS)
{
*hostp = result.host;
*userp = result.user;
*domainp = result.domain;
}
__libc_lock_unlock (lock);
return status == NSS_STATUS_SUCCESS ? 1 : 0;
}
weak_alias (__getnetgrent_r, getnetgrent_r)
/* Test whether given (host,user,domain) triple is in NETGROUP. */
int
innetgr (const char *netgroup, const char *host, const char *user,
const char *domain)
{
int (*setfct) (const char *);
void (*endfct) (void);
int (*getfct) (struct __netgrent *, char *, int);
int result = 0;
int no_more;
__libc_lock_lock (lock);
/* Walk through the services until we found an answer or we shall
not work further. We can do some optimization here. Since all
services must provide the `setnetgrent' function we can do all
the work during one walk through the service list. */
no_more = setup ((void **) &setfct, "setnetgrent", 1);
while (! no_more)
{
enum nss_status status;
/* Open netgroup. */
status = (*setfct) (netgroup);
if (status == NSS_STATUS_SUCCESS
&& __nss_lookup (&nip, "getnetgrent_r", (void **) &getfct) == 0)
{
char buffer[1024];
struct __netgrent entry;
while ((*getfct) (&entry, buffer, sizeof buffer)
== NSS_STATUS_SUCCESS)
{
if ((entry.host == NULL || host == NULL
|| strcmp (entry.host, host) == 0)
&& (entry.user == NULL || user == NULL
|| strcmp (entry.user, user) == 0)
&& (entry.domain == NULL || domain == NULL
|| strcmp (entry.domain, domain) == 0))
{
result = 1;
break;
}
}
if (result != 0)
break;
/* If we found one service which does know the given
netgroup we don't try further. */
status = NSS_STATUS_RETURN;
}
/* Free all resources of the service. */
if (__nss_lookup (&nip, "endnetgrent", (void **) &endfct) == 0)
(*endfct) ();
/* Look for the next service. */
no_more = __nss_next (&nip, "setnetgrent", (void **) &setfct, status, 0);
}
__libc_lock_unlock (lock);
return result;
}

30
inet/netgroup.h Normal file
View File

@ -0,0 +1,30 @@
/* Internal header for netgroup related functions.
Copyright (C) 1996 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 _NETGROUP_H
#define _NETGROUP_H 1
struct __netgrent
{
const char *host;
const char *user;
const char *domain;
};
#endif /* netgroup.h */

View File

@ -52,8 +52,6 @@ static char sccsid[] = "@(#)rcmd.c 8.3 (Berkeley) 3/26/94";
#include <ctype.h> #include <ctype.h>
#include <string.h> #include <string.h>
#define MIN(A, B) ((A) < (B) ? (A) : (B))
int __ivaliduser __P((FILE *, u_int32_t, const char *, const char *)); int __ivaliduser __P((FILE *, u_int32_t, const char *, const char *));
static int __icheckhost __P((u_int32_t, char *)); static int __icheckhost __P((u_int32_t, char *));

View File

@ -20,11 +20,9 @@ Boston, MA 02111-1307, USA. */
#include "stdio.h" #include "stdio.h"
void void
__clearerr_unlocked (fp) clearerr_unlocked (fp)
FILE *fp; FILE *fp;
{ {
CHECK_FILE (fp, /*nothing*/); CHECK_FILE (fp, /*nothing*/);
_IO_clearerr (fp); _IO_clearerr (fp);
} }
weak_alias (__clearerr_unlocked, clearerr_unlocked)

View File

@ -31,7 +31,7 @@ fgetc (fp)
{ {
int result; int result;
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
__libc_cleanup_region_start (_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
result = _IO_getc_unlocked (fp); result = _IO_getc_unlocked (fp);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -32,7 +32,7 @@ fputc (c, fp)
{ {
int result; int result;
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
result = _IO_putc_unlocked (c, fp); result = _IO_putc_unlocked (c, fp);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -28,12 +28,10 @@ the executable file might be covered by the GNU General Public License. */
#undef fputc_unlocked #undef fputc_unlocked
int int
__fputc_unlocked (c, fp) fputc_unlocked (c, fp)
int c; int c;
_IO_FILE *fp; _IO_FILE *fp;
{ {
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
return _IO_putc_unlocked (c, fp); return _IO_putc_unlocked (c, fp);
} }
weak_alias (__fputc_unlocked, fputc_unlocked)

View File

@ -35,7 +35,7 @@ freopen (filename, mode, fp)
CHECK_FILE (fp, NULL); CHECK_FILE (fp, NULL);
if (!(fp->_flags & _IO_IS_FILEBUF)) if (!(fp->_flags & _IO_IS_FILEBUF))
return NULL; return NULL;
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
result = _IO_freopen (filename, mode, fp); result = _IO_freopen (filename, mode, fp);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -33,7 +33,7 @@ fseek (fp, offset, whence)
{ {
int result; int result;
CHECK_FILE (fp, -1); CHECK_FILE (fp, -1);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
result = _IO_fseek (fp, offset, whence); result = _IO_fseek (fp, offset, whence);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -329,7 +329,7 @@ DEFUN(_IO_default_xsputn, (f, data, n),
_IO_ssize_t count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */ _IO_ssize_t count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
if (count > 0) if (count > 0)
{ {
if (count > more) if ((_IO_size_t) count > more)
count = more; count = more;
if (count > 20) if (count > 20)
{ {
@ -374,7 +374,7 @@ DEFUN(_IO_default_xsgetn, (fp, data, n),
_IO_ssize_t count = fp->_IO_read_end - fp->_IO_read_ptr; /* Data available. */ _IO_ssize_t count = fp->_IO_read_end - fp->_IO_read_ptr; /* Data available. */
if (count > 0) if (count > 0)
{ {
if (count > more) if ((_IO_size_t) count > more)
count = more; count = more;
if (count > 20) if (count > 20)
{ {

View File

@ -33,7 +33,7 @@ getc (fp)
{ {
int result; int result;
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
result = _IO_getc_unlocked (fp); result = _IO_getc_unlocked (fp);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -28,11 +28,9 @@ the executable file might be covered by the GNU General Public License. */
#undef getc_unlocked #undef getc_unlocked
int int
__getc_unlocked (fp) getc_unlocked (fp)
FILE *fp; FILE *fp;
{ {
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
return _IO_getc_unlocked (fp); return _IO_getc_unlocked (fp);
} }
weak_alias (__getc_unlocked, getc_unlocked)

View File

@ -31,7 +31,8 @@ int
getchar () getchar ()
{ {
int result; int result;
__libc_cleanup_region_start (&_IO_funlockfile, stdin); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
stdin);
_IO_flockfile (stdin); _IO_flockfile (stdin);
result = _IO_getc_unlocked (stdin); result = _IO_getc_unlocked (stdin);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -28,9 +28,7 @@ the executable file might be covered by the GNU General Public License. */
#undef getchar_unlocked #undef getchar_unlocked
int int
__getchar_unlocked () getchar_unlocked ()
{ {
return _IO_getc_unlocked (stdin); return _IO_getc_unlocked (stdin);
} }
weak_alias (__getchar_unlocked, getchar_unlocked)

View File

@ -35,19 +35,19 @@ _IO_fclose (fp)
CHECK_FILE(fp, EOF); CHECK_FILE(fp, EOF);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
if (fp->_IO_file_flags & _IO_IS_FILEBUF) if (fp->_IO_file_flags & _IO_IS_FILEBUF)
status = _IO_file_close_it (fp); status = _IO_file_close_it (fp);
else else
status = fp->_flags & _IO_ERR_SEEN ? -1 : 0; status = fp->_flags & _IO_ERR_SEEN ? -1 : 0;
_IO_FINISH (fp); _IO_FINISH (fp);
__libc_cleanup_region_end (1);
if (fp != _IO_stdin && fp != _IO_stdout && fp != _IO_stderr) if (fp != _IO_stdin && fp != _IO_stdout && fp != _IO_stderr)
{ {
fp->_IO_file_flags = 0; fp->_IO_file_flags = 0;
free(fp); free(fp);
} }
__libc_cleanup_region_end (1);
return status; return status;
} }

View File

@ -23,6 +23,7 @@ This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */ the executable file might be covered by the GNU General Public License. */
#include "libioP.h" #include "libioP.h"
#include <stdio.h>
int int
_IO_fflush (fp) _IO_fflush (fp)
@ -34,7 +35,8 @@ _IO_fflush (fp)
{ {
int result; int result;
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
fp);
_IO_flockfile (fp); _IO_flockfile (fp);
result = _IO_SYNC (fp) ? EOF : 0; result = _IO_SYNC (fp) ? EOF : 0;
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -23,9 +23,10 @@ This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */ the executable file might be covered by the GNU General Public License. */
#include "libioP.h" #include "libioP.h"
#include <stdio.h>
int int
_IO_fflush_unlocked (fp) fflush_unlocked (fp)
register _IO_FILE *fp; register _IO_FILE *fp;
{ {
if (fp == NULL) if (fp == NULL)
@ -36,6 +37,3 @@ _IO_fflush_unlocked (fp)
return _IO_SYNC (fp) ? EOF : 0; return _IO_SYNC (fp) ? EOF : 0;
} }
} }
weak_alias (_IO_fflush_unlocked, fflush_unlocked)

View File

@ -33,7 +33,7 @@ _IO_fgetpos (fp, posp)
{ {
_IO_fpos_t pos; _IO_fpos_t pos;
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0); pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 1993, 1995 Free Software Foundation Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU IO Library. This library is free This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the software; you can redistribute it and/or modify it under the
@ -23,6 +23,7 @@ This exception does not however invalidate any other reasons why
the executable file might be covered by the GNU General Public License. */ the executable file might be covered by the GNU General Public License. */
#include "libioP.h" #include "libioP.h"
#include <stdio.h>
char* char*
_IO_fgets (buf, n, fp) _IO_fgets (buf, n, fp)
@ -35,7 +36,7 @@ _IO_fgets (buf, n, fp)
CHECK_FILE (fp, NULL); CHECK_FILE (fp, NULL);
if (n <= 0) if (n <= 0)
return NULL; return NULL;
__libc_cleanup_region_start (&__funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
__flockfile (fp); __flockfile (fp);
count = _IO_getline (fp, buf, n - 1, '\n', 1); count = _IO_getline (fp, buf, n - 1, '\n', 1);
if (count == 0 || (fp->_IO_file_flags & _IO_ERR_SEEN)) if (count == 0 || (fp->_IO_file_flags & _IO_ERR_SEEN))

View File

@ -33,7 +33,7 @@ _IO_fputs (str, fp)
_IO_size_t len = strlen (str); _IO_size_t len = strlen (str);
int result; int result;
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
if (_IO_sputn (fp, str, len) != len) if (_IO_sputn (fp, str, len) != len)
result = EOF; result = EOF;

View File

@ -36,7 +36,7 @@ _IO_fread (buf, size, count, fp)
CHECK_FILE (fp, 0); CHECK_FILE (fp, 0);
if (bytes_requested == 0) if (bytes_requested == 0)
return 0; return 0;
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
bytes_read = _IO_sgetn (fp, (char *) buf, bytes_requested); bytes_read = _IO_sgetn (fp, (char *) buf, bytes_requested);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -32,7 +32,7 @@ _IO_fsetpos (fp, posp)
{ {
int result; int result;
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
if (_IO_seekpos (fp, *posp, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD) if (_IO_seekpos (fp, *posp, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD)
{ {

View File

@ -32,7 +32,7 @@ _IO_ftell (fp)
{ {
_IO_pos_t pos; _IO_pos_t pos;
CHECK_FILE (fp, -1L); CHECK_FILE (fp, -1L);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0); pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -36,7 +36,7 @@ _IO_fwrite (buf, size, count, fp)
CHECK_FILE (fp, 0); CHECK_FILE (fp, 0);
if (request == 0) if (request == 0)
return 0; return 0;
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
written = _IO_sputn (fp, (const char *) buf, request); written = _IO_sputn (fp, (const char *) buf, request);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -52,7 +52,7 @@ _IO_getdelim (lineptr, n, delimiter, fp)
return -1; return -1;
} }
CHECK_FILE (fp, -1); CHECK_FILE (fp, -1);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
if (_IO_ferror_unlocked (fp)) if (_IO_ferror_unlocked (fp))
{ {

View File

@ -1,4 +1,4 @@
/* /*
Copyright (C) 1993 Free Software Foundation Copyright (C) 1993 Free Software Foundation
This file is part of the GNU IO Library. This library is free This file is part of the GNU IO Library. This library is free
@ -48,7 +48,7 @@ DEFUN(_IO_getline, (fp, buf, n, delim, extract_delim),
break; break;
else else
len = fp->_IO_read_end - fp->_IO_read_ptr; len = fp->_IO_read_end - fp->_IO_read_ptr;
if (len >= n) if ((_IO_size_t) len >= n)
len = n; len = n;
t = (char*)memchr((void*)fp->_IO_read_ptr, delim, len); t = (char*)memchr((void*)fp->_IO_read_ptr, delim, len);
if (t != NULL) if (t != NULL)

View File

@ -32,7 +32,8 @@ _IO_gets (buf)
_IO_size_t count; _IO_size_t count;
int ch; int ch;
__libc_cleanup_region_start (&_IO_funlockfile, _IO_stdin); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
_IO_stdin);
_IO_flockfile (_IO_stdin); _IO_flockfile (_IO_stdin);
ch = _IO_getc_unlocked (_IO_stdin); ch = _IO_getc_unlocked (_IO_stdin);
if (ch == EOF) if (ch == EOF)

View File

@ -30,7 +30,8 @@ _IO_puts (str)
{ {
int result; int result;
_IO_size_t len = strlen (str); _IO_size_t len = strlen (str);
__libc_cleanup_region_start (&_IO_funlockfile, _IO_stdout); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
_IO_stdout);
_IO_flockfile (_IO_stdout); _IO_flockfile (_IO_stdout);
if (_IO_sputn (_IO_stdout, str, len) == len if (_IO_sputn (_IO_stdout, str, len) == len
&& _IO_putc_unlocked ('\n', _IO_stdout) != EOF) && _IO_putc_unlocked ('\n', _IO_stdout) != EOF)

View File

@ -31,7 +31,7 @@ _IO_setbuffer (fp, buf, size)
_IO_size_t size; _IO_size_t size;
{ {
CHECK_FILE (fp, ); CHECK_FILE (fp, );
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
fp->_flags &= ~_IO_LINE_BUF; fp->_flags &= ~_IO_LINE_BUF;
if (!buf) if (!buf)

View File

@ -37,7 +37,7 @@ _IO_setvbuf (fp, buf, mode, size)
{ {
int result; int result;
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
switch (mode) switch (mode)
{ {

View File

@ -33,7 +33,7 @@ _IO_ungetc (c, fp)
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
if (c == EOF) if (c == EOF)
return EOF; return EOF;
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
result = _IO_sputbackc (fp, (unsigned char) c); result = _IO_sputbackc (fp, (unsigned char) c);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -28,7 +28,7 @@ putc (c, fp)
{ {
int result; int result;
CHECK_FILE (fp, EOF); CHECK_FILE (fp, EOF);
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
result = _IO_putc_unlocked (c, fp); result = _IO_putc_unlocked (c, fp);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -26,7 +26,8 @@ putchar (c)
int c; int c;
{ {
int result; int result;
__libc_cleanup_region_start (&_IO_funlockfile, _IO_stdout); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
_IO_stdout);
_IO_flockfile (_IO_stdout); _IO_flockfile (_IO_stdout);
result = _IO_putc_unlocked (c, _IO_stdout); result = _IO_putc_unlocked (c, _IO_stdout);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1993 Free Software Foundation /* Copyright (C) 1993, 1996 Free Software Foundation, Inc.
This file is part of the GNU IO Library. This library is free This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the software; you can redistribute it and/or modify it under the
@ -29,7 +29,7 @@ rewind (fp)
_IO_FILE* fp; _IO_FILE* fp;
{ {
CHECK_FILE (fp, ); CHECK_FILE (fp, );
__libc_cleanup_region_start (&_IO_funlockfile, fp); __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
_IO_flockfile (fp); _IO_flockfile (fp);
_IO_rewind (fp); _IO_rewind (fp);
__libc_cleanup_region_end (1); __libc_cleanup_region_end (1);

View File

@ -1,4 +1,4 @@
/* /*
Copyright (C) 1993 Free Software Foundation Copyright (C) 1993 Free Software Foundation
This file is part of the GNU IO Library. This library is free This file is part of the GNU IO Library. This library is free
@ -112,7 +112,7 @@ DEFUN(_IO_str_overflow, (fp, c),
fp->_flags |= _IO_CURRENTLY_PUTTING; fp->_flags |= _IO_CURRENTLY_PUTTING;
get_pos = LEN(fp); get_pos = LEN(fp);
} }
if (pos >= _IO_blen(fp) + flush_only) if (pos >= (_IO_size_t) (_IO_blen(fp) + flush_only))
{ {
if (fp->_flags & _IO_USER_BUF) /* not allowed to enlarge */ if (fp->_flags & _IO_USER_BUF) /* not allowed to enlarge */
{ {
@ -187,10 +187,10 @@ DEFUN(_IO_str_count, (fp),
register _IO_FILE *fp) register _IO_FILE *fp)
{ {
_IO_ssize_t put_len = fp->_IO_write_ptr - fp->_IO_write_base; _IO_ssize_t put_len = fp->_IO_write_ptr - fp->_IO_write_base;
if (put_len < LEN(fp)) if (put_len < (_IO_ssize_t) LEN(fp))
put_len = LEN(fp); put_len = LEN(fp);
return put_len; return put_len;
} }
_IO_pos_t _IO_pos_t
DEFUN(_IO_str_seekoff, (fp, offset, dir, mode), DEFUN(_IO_str_seekoff, (fp, offset, dir, mode),
@ -213,7 +213,7 @@ DEFUN(_IO_str_seekoff, (fp, offset, dir, mode),
default: /* case _IO_seek_set: */ default: /* case _IO_seek_set: */
break; break;
} }
if (offset < 0 || (_IO_size_t)offset > cur_size) if (offset < 0 || (_IO_ssize_t)offset > cur_size)
return EOF; return EOF;
fp->_IO_read_ptr = fp->_IO_read_base + offset; fp->_IO_read_ptr = fp->_IO_read_base + offset;
fp->_IO_read_end = fp->_IO_read_base + cur_size; fp->_IO_read_end = fp->_IO_read_base + cur_size;
@ -234,7 +234,7 @@ DEFUN(_IO_str_seekoff, (fp, offset, dir, mode),
default: /* case _IO_seek_set: */ default: /* case _IO_seek_set: */
break; break;
} }
if (offset < 0 || (_IO_size_t)offset > cur_size) if (offset < 0 || (_IO_ssize_t)offset > cur_size)
return EOF; return EOF;
LEN(fp) = cur_size; LEN(fp) = cur_size;
fp->_IO_write_ptr = fp->_IO_write_base + offset; fp->_IO_write_ptr = fp->_IO_write_base + offset;

View File

@ -1341,7 +1341,7 @@ collation element `%.*s' appears more than once: ignore line"),
{ {
unsigned int order = ++collate->order_cnt; unsigned int order = ++collate->order_cnt;
if ((unsigned int) tmp != 0) if ((unsigned long int) tmp != 0ul)
{ {
lr_error (lr, _("\ lr_error (lr, _("\
collation symbol `.*s' appears more than once: ignore line"), collation symbol `.*s' appears more than once: ignore line"),

View File

@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA. */
# include <config.h> # include <config.h>
#endif #endif
#include <alloca.h>
#include <endian.h> #include <endian.h>
#include <limits.h> #include <limits.h>
#include <string.h> #include <string.h>

View File

@ -395,7 +395,8 @@ time_output (struct localedef_t *locale, const char *output_path)
struct iovec iov[2 + _NL_ITEM_INDEX (_NL_NUM_LC_TIME) struct iovec iov[2 + _NL_ITEM_INDEX (_NL_NUM_LC_TIME)
+ time->cur_num_era - 1 + time->cur_num_era - 1
+ time->cur_num_alt_digits - 1 + time->cur_num_alt_digits - 1
+ 1 + (time->cur_num_era * 9 - 1) * 2]; + 1 + (time->cur_num_era * 9 - 1) * 2
+ (time->cur_num_era == 0)];
struct locale_file data; struct locale_file data;
u_int32_t idx[_NL_ITEM_INDEX (_NL_NUM_LC_TIME)]; u_int32_t idx[_NL_ITEM_INDEX (_NL_NUM_LC_TIME)];
size_t cnt, last_idx, num; size_t cnt, last_idx, num;
@ -635,11 +636,23 @@ time_output (struct localedef_t *locale, const char *output_path)
/* idx[1 + last_idx] += 8 * sizeof (int32_t) + l; */ /* idx[1 + last_idx] += 8 * sizeof (int32_t) + l; */
} }
/* We have a problem when no era data is present. In this case the
data pointer for _NL_TIME_ERA_ENTRIES_EB and
_NL_TIME_ERA_ENTRIES_EL point after the end of the file. So we
introduce some dummy data here. */
if (time->cur_num_era == 0)
{
static u_int32_t dummy = 0;
iov[2 + cnt].iov_base = (void *) &dummy;
iov[2 + cnt].iov_len = 4;
++cnt;
}
assert (cnt == (_NL_ITEM_INDEX (_NL_NUM_LC_TIME) assert (cnt == (_NL_ITEM_INDEX (_NL_NUM_LC_TIME)
+ time->cur_num_era - 1 + time->cur_num_era - 1
+ time->cur_num_alt_digits - 1 + time->cur_num_alt_digits - 1
+ 1 + (time->cur_num_era * 9 - 1) * 2) + 1 + (time->cur_num_era * 9 - 1) * 2
+ (time->cur_num_era == 0))
&& last_idx + 1 == _NL_ITEM_INDEX (_NL_NUM_LC_TIME)); && last_idx + 1 == _NL_ITEM_INDEX (_NL_NUM_LC_TIME));
write_locale_data (output_path, "LC_TIME", 2 + cnt, iov); write_locale_data (output_path, "LC_TIME", 2 + cnt, iov);

View File

@ -183,14 +183,13 @@ main (int argc, char *argv[])
/* Version information is requested. */ /* Version information is requested. */
if (do_version) if (do_version)
{ {
fprintf (stderr, "locale (GNU %s) %s\n", PACKAGE, VERSION); printf ("locale (GNU %s) %s\n", PACKAGE, VERSION);
fprintf (stderr, _("\ printf (_("\
Copyright (C) %s Free Software Foundation, Inc.\n\ Copyright (C) %s Free Software Foundation, Inc.\n\
This is free software; see the source for copying conditions. There is NO\n\ This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
"), "1995, 1996"); "), "1995, 1996");
fprintf (stderr, _("Written by %s.\n"), printf (_("Written by %s.\n"), "Ulrich Drepper");
"Ulrich Drepper");
exit (EXIT_SUCCESS); exit (EXIT_SUCCESS);
} }

View File

@ -173,14 +173,13 @@ main (int argc, char *argv[])
/* Version information is requested. */ /* Version information is requested. */
if (do_version) if (do_version)
{ {
fprintf (stderr, "localedef (GNU %s) %s\n", PACKAGE, VERSION); printf ("localedef (GNU %s) %s\n", PACKAGE, VERSION);
fprintf (stderr, _("\ printf (_("\
Copyright (C) %s Free Software Foundation, Inc.\n\ Copyright (C) %s Free Software Foundation, Inc.\n\
This is free software; see the source for copying conditions. There is NO\n\ This is free software; see the source for copying conditions. There is NO\n\
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
"), "1995, 1996"); "), "1995, 1996");
fprintf (stderr, _("Written by %s.\n"), printf (_("Written by %s.\n"), "Ulrich Drepper");
"Ulrich Drepper");
exit (0); exit (0);
} }

View File

@ -39,6 +39,7 @@ static char sccsid[] = "@(#)login_tty.c 8.1 (Berkeley) 6/4/93";
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <unistd.h> #include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <utmp.h>
int int
login_tty(fd) login_tty(fd)

View File

@ -327,6 +327,36 @@ conditions are defined for this function:
@item EBADF @item EBADF
The @var{dirstream} argument is not valid. The @var{dirstream} argument is not valid.
@end table @end table
@code{readdir} is not thread safe. Multiple threads using
@code{readdir} on the same @var{dirstream} may overwrite the return
value. Use @code{readdir_r} when this is critical.
@end deftypefun
@comment dirent.h
@comment GNU
@deftypefun int readdir_r (DIR *@var{dirstream}, struct *@var{entry}, struct **@var{result})
This function is the reentrant version of @code{reentrant}. Like
@code{readdir} it returns the next entry from the directory. But to
prevent conflicts for simultanously running threads the result is not
stored in some internal memory. Instead the argument @var{entry} has to
point to a place where the result is stored.
The return value is @code{0} in case the next entry was read
successfully. In this case a pointer to the result is returned in
*@var{result}. It is not required that *@var{result} is the same as
@var{entry}. If somethings goes wrong while exeucting @code{readdir_r}
the function return @code{-1}. The @code{errno} variable is set like
described for @code{readdir}.
@strong{Portability Note:} On some systems, @code{readdir_r} may not
return a terminated string as the file name even if no @code{d_reclen}
element is available in @code{struct dirent} and the file name as the
maximal allowed size. Modern systems all have the @code{d_reclen} field
and on old systems multi threading is not critical. In any case, there
is no such problem with the @code{readdir} function so that even on
systems without @code{d_reclen} field one could use multiple threads by
using external locking.
@end deftypefun @end deftypefun
@comment dirent.h @comment dirent.h

View File

@ -56,11 +56,6 @@ routines := brk sbrk sstk ioctl \
hsearch hsearch_r tsearch lsearch \ hsearch hsearch_r tsearch lsearch \
err error ustat \ err error ustat \
getsysstats getsysstats
ifneq (,$(filter %REENTRANT, $(defines)))
routines += force-wrapper
endif
aux := init-misc aux := init-misc
distribute := bsd-compat.c distribute := bsd-compat.c
extra-objs := bsd-compat.o extra-objs := bsd-compat.o

1
netgroup.h Normal file
View File

@ -0,0 +1 @@
#include <inet/netgroup.h>

View File

@ -33,7 +33,7 @@ routines = nsswitch $(addsuffix -lookup,$(databases))
# Caution: if you add a database here, you must add its real name # Caution: if you add a database here, you must add its real name
# in databases.def, too. # in databases.def, too.
databases = proto service hosts network grp pwd rpc ethers \ databases = proto service hosts network grp pwd rpc ethers \
spwd spwd netgrp
# Specify rules for the nss_* modules. We have some services. # Specify rules for the nss_* modules. We have some services.
services := files dns db services := files dns db

View File

@ -23,6 +23,7 @@ Boston, MA 02111-1307, USA. */
DEFINE_DATABASE (ethers) DEFINE_DATABASE (ethers)
DEFINE_DATABASE (group) DEFINE_DATABASE (group)
DEFINE_DATABASE (hosts) DEFINE_DATABASE (hosts)
DEFINE_DATABASE (netgroup)
DEFINE_DATABASE (networks) DEFINE_DATABASE (networks)
DEFINE_DATABASE (passwd) DEFINE_DATABASE (passwd)
DEFINE_DATABASE (protocols) DEFINE_DATABASE (protocols)

View File

@ -1,5 +1,5 @@
DATABASES = $(wildcard /etc/passwd /etc/group /etc/ethers /etc/protocols \ DATABASES = $(wildcard /etc/passwd /etc/group /etc/ethers /etc/protocols \
/etc/rpc /etc/services /etc/shadow) /etc/rpc /etc/services /etc/shadow /etc/netgroup)
VAR_DB = /var/db VAR_DB = /var/db
@ -67,3 +67,11 @@ $(VAR_DB)/shadow.db: /etc/shadow
/^[^#]/ { printf ".%s ", $$1; print }' $^ | \ /^[^#]/ { printf ".%s ", $$1; print }' $^ | \
$(MAKEDB) -o $@ - $(MAKEDB) -o $@ -
@echo "done." @echo "done."
$(VAR_DB)/netgroup.db: /etc/netgroup
@echo -n "$(patsubst %.db,%,$(@F))... "
@$(AWK) '/^[^#]/ { end=sub(/\\/, " "); \
gsub(/[ \t]+/, " "); \
if(end == 1) printf "%s", $$0; else print }' $^ | \
$(MAKEDB) -o $@ -
@echo "done."

View File

@ -136,7 +136,7 @@ SETFUNC_NAME (STAYOPEN)
#ifdef NEED__RES #ifdef NEED__RES
if ((_res.options & RES_INIT) == 0 && res_init () == -1) if ((_res.options & RES_INIT) == 0 && res_init () == -1)
{ {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return NULL; return NULL;
} }
#endif /* need _res */ #endif /* need _res */
@ -166,7 +166,7 @@ ENDFUNC_NAME (void)
#ifdef NEED__RES #ifdef NEED__RES
if ((_res.options & RES_INIT) == 0 && res_init () == -1) if ((_res.options & RES_INIT) == 0 && res_init () == -1)
{ {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return NULL; return NULL;
} }
#endif /* need _res */ #endif /* need _res */
@ -198,7 +198,7 @@ INTERNAL (REENTRANT_GETNAME) (LOOKUP_TYPE *result, char *buffer, int buflen
#ifdef NEED__RES #ifdef NEED__RES
if ((_res.options & RES_INIT) == 0 && res_init () == -1) if ((_res.options & RES_INIT) == 0 && res_init () == -1)
{ {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return NULL; return NULL;
} }
#endif /* need _res */ #endif /* need _res */

View File

@ -1,5 +1,4 @@
/* readdir_r - Reentrant version of readdir. /* Copyright (C) 1996 Free Software Foundation, Inc.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@ -18,20 +17,6 @@ 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, not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */ Boston, MA 02111-1307, USA. */
#include <dirent.h> #define DATABASE_NAME netgroup
/* Some systems have reentrancy problems with their `readdir' #include "XXX-lookup.c"
implementation so they have an additional `readdir_r' version. The
GNU version does not have these problems but for compatibility
reasons we provide this function. It is simply a wrapper around
the normal function.
The actual definition of this functions varies very strong from
system to system. We chose to follow the POSIX version. */
int
readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result)
{
*result = readdir (dirp);
return *result != NULL ? 0 : -1;
}

View File

@ -37,6 +37,7 @@ enum nss_status
NSS_STATUS_UNAVAIL, NSS_STATUS_UNAVAIL,
NSS_STATUS_NOTFOUND, NSS_STATUS_NOTFOUND,
NSS_STATUS_SUCCESS, NSS_STATUS_SUCCESS,
NSS_STATUS_RETURN
}; };

View File

@ -56,10 +56,10 @@ static int keep_db;
static unsigned int entidx; /* Index for `getENTNAME'. */ static unsigned int entidx; /* Index for `getENTNAME'. */
/* Open database file if not already opened. */ /* Open database file if not already opened. */
static int static enum nss_status
internal_setent (int stayopen) internal_setent (int stayopen)
{ {
int status = NSS_STATUS_SUCCESS; enum nss_status status = NSS_STATUS_SUCCESS;
if (db == NULL) if (db == NULL)
{ {
@ -78,10 +78,10 @@ internal_setent (int stayopen)
/* Thread-safe, exported version of that. */ /* Thread-safe, exported version of that. */
int enum nss_status
CONCAT(_nss_db_set,ENTNAME) (int stayopen) CONCAT(_nss_db_set,ENTNAME) (int stayopen)
{ {
int status; enum nss_status status;
__libc_lock_lock (lock); __libc_lock_lock (lock);
@ -109,7 +109,7 @@ internal_endent (void)
/* Thread-safe, exported version of that. */ /* Thread-safe, exported version of that. */
int enum nss_status
CONCAT(_nss_db_end,ENTNAME) (void) CONCAT(_nss_db_end,ENTNAME) (void)
{ {
__libc_lock_lock (lock); __libc_lock_lock (lock);

108
nss/nss_db/db-netgrp.c Normal file
View File

@ -0,0 +1,108 @@
/* Netgroup file parser in nss_db modules.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
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 <db.h>
#include <errno.h>
#include <fcntl.h>
#include <libc-lock.h>
#include <paths.h>
#include "nsswitch.h"
#include "netgroup.h"
#define DBFILE _PATH_VARDB "netgroup.db"
/* Locks the static variables in this file. */
__libc_lock_define_initialized (static, lock)
/* Maintenance of the shared handle open on the database. */
static DB *db;
static char *entry;
static char *cursor;
enum nss_status
_nss_db_setnetgrent (const char *group)
{
enum nss_status status = NSS_STATUS_SUCCESS;
__libc_lock_lock (lock);
/* Make sure the data base file is open. */
if (db == NULL)
{
db = dbopen (DBFILE, O_RDONLY, 0, DB_BTREE, NULL);
if (db == NULL)
status = errno = EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
}
if (status == NSS_STATUS_SUCCESS)
{
DBT key = { data: (void *) group, size: strlen (group) };
DBT value;
if ((*db->get) (db, &key, &value, 0) != 0)
status = NSS_STATUS_NOTFOUND;
else
cursor = entry = value.data;
}
__libc_lock_unlock (lock);
return status;
}
enum nss_status
_nss_db_endnetgrent (void)
{
__libc_lock_lock (lock);
if (db != NULL)
{
(*db->close) (db);
db = NULL;
}
__libc_lock_unlock (lock);
return NSS_STATUS_SUCCESS;
}
extern enum nss_status _nss_netgroup_parseline (char **cursor,
struct __netgrent *result,
char *buffer, int buflen);
enum nss_status
_nss_db_getnetgrent_r (struct __netgrent *result, char *buffer, int buflen)
{
int status;
__libc_lock_lock (lock);
status = _nss_netgroup_parseline (&cursor, result, buffer, buflen);
__libc_lock_unlock (lock);
return status;
}

View File

@ -236,12 +236,12 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result,
OSF/1 has a per-thread h_errno variable. */ OSF/1 has a per-thread h_errno variable. */
if (header_pointer->aa != 0) if (header_pointer->aa != 0)
{ {
h_errno = HOST_NOT_FOUND; __set_h_errno (HOST_NOT_FOUND);
return NSS_STATUS_NOTFOUND; return NSS_STATUS_NOTFOUND;
} }
else else
{ {
h_errno = TRY_AGAIN; __set_h_errno (TRY_AGAIN);
return NSS_STATUS_TRYAGAIN; return NSS_STATUS_TRYAGAIN;
} }
@ -338,7 +338,6 @@ getanswer_r (const querybuf *answer, int anslen, struct netent *result,
return NSS_STATUS_SUCCESS; return NSS_STATUS_SUCCESS;
} }
/* XXX Really use global variable??? */ __set_h_errno (TRY_AGAIN);
h_errno = TRY_AGAIN;
return NSS_STATUS_TRYAGAIN; return NSS_STATUS_TRYAGAIN;
} }

View File

@ -0,0 +1,262 @@
/* Netgroup file parser in nss_files modules.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
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 <ctype.h>
#include <errno.h>
#include <libc-lock.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "nsswitch.h"
#include "netgroup.h"
#define DATAFILE "/etc/netgroup"
/* Locks the static variables in this file. */
__libc_lock_define_initialized (static, lock)
/* We share a single place where we store the data for the current
netgroup. This buffer is allocated by `setnetgrent' and freed on
the next call of this function or when calling `endnetgrent'. */
static char *data;
static size_t data_size;
static char *cursor;
static int first;
#define EXPAND(needed) \
do \
{ \
size_t old_cursor = cursor - data; \
\
data_size += 512 > 2 * needed ? 512 : 2 * needed; \
data = realloc (data, data_size); \
\
if (data == NULL) \
{ \
status = NSS_STATUS_UNAVAIL; \
goto the_end; \
} \
\
cursor = data + old_cursor; \
} \
while (0)
enum nss_status
_nss_files_setnetgrent (const char *group)
{
FILE *fp;
enum nss_status status;
if (group[0] == '\0')
return NSS_STATUS_UNAVAIL;
__libc_lock_lock (lock);
/* Find the netgroups file and open it. */
fp = fopen (DATAFILE, "r");
if (fp == NULL)
status = errno == EAGAIN ? NSS_STATUS_TRYAGAIN : NSS_STATUS_UNAVAIL;
else
{
/* Read the file line by line and try to find the description
GROUP. We must take care for long lines. */
char *line = NULL;
size_t line_len = 0;
const ssize_t group_len = strlen (group);
status = NSS_STATUS_NOTFOUND;
cursor = data;
while (!feof (fp))
{
ssize_t curlen = getline (&line, &line_len, fp);
int found;
if (curlen < 0)
{
status = NSS_STATUS_NOTFOUND;
break;
}
found = (curlen > group_len && strncmp (line, group, group_len) == 0
&& isspace (line[group_len]));
/* Read the whole line (including continuation) and store it
if FOUND in nonzero. Otherwise we don't need it. */
if (found)
{
/* Store the data from the first line. */
EXPAND (curlen - group_len);
memcpy (cursor, &line[group_len + 1], curlen - group_len);
cursor += (curlen - group_len) - 1;
}
while (line[curlen - 1] == '\n' && line[curlen - 2] == '\\')
{
/* Yes, we have a continuation line. */
if (found)
/* Remove these characters from the stored line. */
cursor -= 2;
/* Get netxt line. */
curlen = getline (&line, &line_len, fp);
if (curlen <= 0)
break;
if (found)
{
/* Make sure we have enough room. */
EXPAND (1 + curlen + 1);
/* Add separator in case next line starts immediately. */
*cursor++ = ' ';
/* Copy new line. */
memcpy (cursor, line, curlen + 1);
cursor += curlen;
}
}
if (found)
{
/* Now we have read the line. */
status = NSS_STATUS_SUCCESS;
cursor = data;
first = 1;
break;
}
}
the_end:
/* We don't need the file and the line buffer anymore. */
free (line);
fclose (fp);
}
__libc_lock_unlock (lock);
return status;
}
int
_nss_files_endnetgrent (void)
{
__libc_lock_lock (lock);
/* Free allocated memory for data if some is present. */
if (data != NULL)
{
free (data);
data = NULL;
data_size = 0;
cursor = NULL;
}
__libc_lock_unlock (lock);
return NSS_STATUS_SUCCESS;
}
enum nss_status
_nss_netgroup_parseline (char **cursor, struct __netgrent *result,
char *buffer, int buflen)
{
enum nss_status status;
const char *host, *user, *domain;
char *cp = *cursor;
/* First skip leading spaces. */
while (isspace (*cp))
++cp;
if (*cp != '(')
return first ? NSS_STATUS_NOTFOUND : NSS_STATUS_RETURN;
/* Match host name. */
host = ++cp;
while (*cp != ',')
if (*cp++ == '\0')
return first ? NSS_STATUS_NOTFOUND : NSS_STATUS_RETURN;
/* Match user name. */
user = ++cp;
while (*cp != ',')
if (*cp++ == '\0')
return first ? NSS_STATUS_NOTFOUND : NSS_STATUS_RETURN;
/* Match domain name. */
domain = ++cp;
while (*cp != ')')
if (*cp++ == '\0')
return first ? NSS_STATUS_NOTFOUND : NSS_STATUS_RETURN;
++cp;
/* When we got here we have found an entry. Before we can copy it
to the private buffer we have to make sure it is big enough. */
if (cp - host > buflen)
{
__set_errno (ERANGE);
status = NSS_STATUS_UNAVAIL;
}
else
{
memcpy (buffer, host, cp - host);
buffer[(user - host) - 1] = '\0';
result->host = *host == ',' ? NULL : buffer;
buffer[(domain - host) - 1] = '\0';
result->user = *user == ',' ? NULL : buffer + (user - host);
buffer[(cp - host) - 1] = '\0';
result->domain = *domain == ')' ? NULL : buffer + (domain - host);
status = NSS_STATUS_SUCCESS;
/* Rememember where we stopped reading. */
*cursor = cp;
first = 0;
}
return status;
}
enum nss_status
_nss_files_getnetgrent_r (struct __netgrent *result, char *buffer, int buflen)
{
enum nss_status status;
__libc_lock_lock (lock);
status = _nss_netgroup_parseline (&cursor, result, buffer, buflen);
__libc_lock_unlock (lock);
return status;
}

View File

@ -158,7 +158,7 @@ __nss_next (service_user **ni, const char *fct_name, void **fctp, int status,
else else
{ {
/* This is really only for debugging. */ /* This is really only for debugging. */
if (NSS_STATUS_TRYAGAIN > status || status > NSS_STATUS_SUCCESS) if (NSS_STATUS_TRYAGAIN > status || status > NSS_STATUS_RETURN)
__libc_fatal ("illegal status in " __FUNCTION__); __libc_fatal ("illegal status in " __FUNCTION__);
if (nss_next_action (*ni, status) == NSS_ACTION_RETURN) if (nss_next_action (*ni, status) == NSS_ACTION_RETURN)
@ -503,6 +503,7 @@ nss_parse_service_list (const char *line)
new_service->actions[2 + NSS_STATUS_UNAVAIL] = NSS_ACTION_CONTINUE; new_service->actions[2 + NSS_STATUS_UNAVAIL] = NSS_ACTION_CONTINUE;
new_service->actions[2 + NSS_STATUS_NOTFOUND] = NSS_ACTION_CONTINUE; new_service->actions[2 + NSS_STATUS_NOTFOUND] = NSS_ACTION_CONTINUE;
new_service->actions[2 + NSS_STATUS_SUCCESS] = NSS_ACTION_RETURN; new_service->actions[2 + NSS_STATUS_SUCCESS] = NSS_ACTION_RETURN;
new_service->actions[2 + NSS_STATUS_RETURN] = NSS_ACTION_RETURN;
new_service->library = NULL; new_service->library = NULL;
new_service->known = NULL; new_service->known = NULL;
new_service->next = NULL; new_service->next = NULL;

View File

@ -14,3 +14,5 @@ protocols: db files
services: db files services: db files
ethers: db files ethers: db files
rpc: db files rpc: db files
netgroup: db files

View File

@ -62,7 +62,7 @@ typedef struct service_user
/* Name of the service (`files', `dns', `nis', ...). */ /* Name of the service (`files', `dns', `nis', ...). */
const char *name; const char *name;
/* Action according to result. */ /* Action according to result. */
lookup_actions actions[4]; lookup_actions actions[5];
/* Link to the underlying library object. */ /* Link to the underlying library object. */
service_library *library; service_library *library;
/* Collection of known functions. */ /* Collection of known functions. */

1
nsswitch.h Normal file
View File

@ -0,0 +1 @@
#include <nss/nsswitch.h>

View File

@ -30,31 +30,37 @@ __BEGIN_DECLS
#include <gnu/types.h> #include <gnu/types.h>
#ifdef __USE_BSD #ifdef __USE_BSD
#define u_char __u_char typedef __u_char u_char;
#define u_short __u_short typedef __u_short u_short;
#define u_int __u_int typedef __u_int u_int;
#define u_long __u_long typedef __u_long u_long;
#define quad_t __quad_t typedef __quad_t quad_t;
#define u_quad_t __u_quad_t typedef __u_quad_t u_quad_t;
#define fsid_t __fsid_t typedef __fsid_t fsid_t;
#endif #endif
#define dev_t __dev_t typedef __dev_t dev_t;
#define gid_t __gid_t typedef __gid_t gid_t;
#define ino_t __ino_t typedef __ino_t ino_t;
#define mode_t __mode_t typedef __mode_t mode_t;
#define nlink_t __nlink_t typedef __nlink_t nlink_t;
#define off_t __off_t typedef __off_t off_t;
#define loff_t __loff_t typedef __loff_t loff_t;
#define pid_t __pid_t typedef __pid_t pid_t;
#define uid_t __uid_t typedef __uid_t uid_t;
#ifndef ssize_t
#define ssize_t __ssize_t #ifndef ssize_t
typedef __ssize_t ssize_t;
#define ssize_t ssize_t
#endif #endif
#ifdef __USE_BSD #ifdef __USE_BSD
#define daddr_t __daddr_t typedef __daddr_t daddr_t;
#define caddr_t __caddr_t typedef __caddr_t caddr_t;
#endif
#ifdef __USE_SVID
typedef __key_t key_t;
#endif #endif
#define __need_time_t #define __need_time_t
@ -84,8 +90,8 @@ typedef unsigned int u_int32_t;
#ifdef __GNUC__ #ifdef __GNUC__
typedef long long int int64_t; typedef long long int int64_t;
typedef unsigned long long int u_int64_t; typedef unsigned long long int u_int64_t;
typedef int register_t __attribute__ ((__mode__ (word)));
#endif #endif
typedef int register_t;
#else #else

View File

@ -128,7 +128,8 @@ __BEGIN_DECLS
#include <gnu/types.h> #include <gnu/types.h>
#ifndef ssize_t #ifndef ssize_t
#define ssize_t __ssize_t typedef __ssize_t ssize_t;
#define ssize_t ssize_t
#endif #endif
#define __need_size_t #define __need_size_t

View File

@ -24,8 +24,11 @@ Cambridge, MA 02139, USA. */
/* Re-construct the password-file line for the given uid /* Re-construct the password-file line for the given uid
in the given buffer. This knows the format that the caller in the given buffer. This knows the format that the caller
will expect, but this need not be the format of the password file. */ will expect, but this need not be the format of the password file. */
int __getpw __P ((__uid_t uid, char *buf));
int int
getpw (uid, buf) __getpw (uid, buf)
__uid_t uid; __uid_t uid;
register char *buf; register char *buf;
{ {
@ -47,3 +50,4 @@ getpw (uid, buf)
return 0; return 0;
} }
weak_alias (__getpw, getpw)

View File

@ -280,7 +280,7 @@ b64_pton(src, target, targsize)
case 2: /* Valid, means one byte of info */ case 2: /* Valid, means one byte of info */
/* Skip any number of spaces. */ /* Skip any number of spaces. */
for (NULL; ch != '\0'; ch = *src++) for ( ; ch != '\0'; ch = *src++)
if (!isspace(ch)) if (!isspace(ch))
break; break;
/* Make sure there is another trailing = sign. */ /* Make sure there is another trailing = sign. */
@ -295,7 +295,7 @@ b64_pton(src, target, targsize)
* We know this char is an =. Is there anything but * We know this char is an =. Is there anything but
* whitespace after it? * whitespace after it?
*/ */
for (NULL; ch != '\0'; ch = *src++) for ( ; ch != '\0'; ch = *src++)
if (!isspace(ch)) if (!isspace(ch))
return (-1); return (-1);

View File

@ -145,7 +145,7 @@ dprintf(msg, num)
int save = errno; int save = errno;
printf(msg, num); printf(msg, num);
errno = save; __set_errno (save);
} }
} }
#else #else
@ -195,12 +195,12 @@ getanswer(answer, anslen, qname, qtype)
buflen = sizeof hostbuf; buflen = sizeof hostbuf;
cp = answer->buf + HFIXEDSZ; cp = answer->buf + HFIXEDSZ;
if (qdcount != 1) { if (qdcount != 1) {
h_errno = NO_RECOVERY; __set_h_errno (NO_RECOVERY);
return (NULL); return (NULL);
} }
n = dn_expand(answer->buf, eom, cp, bp, buflen); n = dn_expand(answer->buf, eom, cp, bp, buflen);
if ((n < 0) || !(*name_ok)(bp)) { if ((n < 0) || !(*name_ok)(bp)) {
h_errno = NO_RECOVERY; __set_h_errno (NO_RECOVERY);
return (NULL); return (NULL);
} }
cp += n + QFIXEDSZ; cp += n + QFIXEDSZ;
@ -330,7 +330,7 @@ getanswer(answer, anslen, qname, qtype)
buflen -= n; buflen -= n;
map_v4v6_hostent(&host, &bp, &buflen); map_v4v6_hostent(&host, &bp, &buflen);
} }
h_errno = NETDB_SUCCESS; __set_h_errno (NETDB_SUCCESS);
return (&host); return (&host);
#endif #endif
case T_A: case T_A:
@ -403,11 +403,11 @@ getanswer(answer, anslen, qname, qtype)
} }
if (_res.options & RES_USE_INET6) if (_res.options & RES_USE_INET6)
map_v4v6_hostent(&host, &bp, &buflen); map_v4v6_hostent(&host, &bp, &buflen);
h_errno = NETDB_SUCCESS; __set_h_errno (NETDB_SUCCESS);
return (&host); return (&host);
} }
try_again: try_again:
h_errno = TRY_AGAIN; __set_h_errno (TRY_AGAIN);
return (NULL); return (NULL);
} }
@ -418,7 +418,7 @@ gethostbyname(name)
struct hostent *hp; struct hostent *hp;
if ((_res.options & RES_INIT) == 0 && res_init() == -1) { if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (NULL); return (NULL);
} }
if (_res.options & RES_USE_INET6) { if (_res.options & RES_USE_INET6) {
@ -441,7 +441,7 @@ gethostbyname2(name, af)
extern struct hostent *_gethtbyname2(); extern struct hostent *_gethtbyname2();
if ((_res.options & RES_INIT) == 0 && res_init() == -1) { if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (NULL); return (NULL);
} }
@ -455,7 +455,7 @@ gethostbyname2(name, af)
type = T_AAAA; type = T_AAAA;
break; break;
default: default:
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
errno = EAFNOSUPPORT; errno = EAFNOSUPPORT;
return (NULL); return (NULL);
} }
@ -486,7 +486,7 @@ gethostbyname2(name, af)
* done a lookup. * done a lookup.
*/ */
if (inet_pton(af, name, host_addr) <= 0) { if (inet_pton(af, name, host_addr) <= 0) {
h_errno = HOST_NOT_FOUND; __set_h_errno (HOST_NOT_FOUND);
return (NULL); return (NULL);
} }
strncpy(hostbuf, name, MAXDNAME); strncpy(hostbuf, name, MAXDNAME);
@ -501,7 +501,7 @@ gethostbyname2(name, af)
host.h_addr_list = h_addr_ptrs; host.h_addr_list = h_addr_ptrs;
if (_res.options & RES_USE_INET6) if (_res.options & RES_USE_INET6)
map_v4v6_hostent(&host, &bp, &len); map_v4v6_hostent(&host, &bp, &len);
h_errno = NETDB_SUCCESS; __set_h_errno (NETDB_SUCCESS);
return (&host); return (&host);
} }
if (!isdigit(*cp) && *cp != '.') if (!isdigit(*cp) && *cp != '.')
@ -518,7 +518,7 @@ gethostbyname2(name, af)
* done a lookup. * done a lookup.
*/ */
if (inet_pton(af, name, host_addr) <= 0) { if (inet_pton(af, name, host_addr) <= 0) {
h_errno = HOST_NOT_FOUND; __set_h_errno (HOST_NOT_FOUND);
return (NULL); return (NULL);
} }
strncpy(hostbuf, name, MAXDNAME); strncpy(hostbuf, name, MAXDNAME);
@ -531,7 +531,7 @@ gethostbyname2(name, af)
h_addr_ptrs[0] = (char *)host_addr; h_addr_ptrs[0] = (char *)host_addr;
h_addr_ptrs[1] = NULL; h_addr_ptrs[1] = NULL;
host.h_addr_list = h_addr_ptrs; host.h_addr_list = h_addr_ptrs;
h_errno = NETDB_SUCCESS; __set_h_errno (NETDB_SUCCESS);
return (&host); return (&host);
} }
if (!isxdigit(*cp) && *cp != ':' && *cp != '.') if (!isxdigit(*cp) && *cp != ':' && *cp != '.')
@ -568,7 +568,7 @@ gethostbyaddr(addr, len, af)
extern struct hostent *_gethtbyaddr(); extern struct hostent *_gethtbyaddr();
if ((_res.options & RES_INIT) == 0 && res_init() == -1) { if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (NULL); return (NULL);
} }
if (af == AF_INET6 && len == IN6ADDRSZ && if (af == AF_INET6 && len == IN6ADDRSZ &&
@ -588,13 +588,13 @@ gethostbyaddr(addr, len, af)
size = IN6ADDRSZ; size = IN6ADDRSZ;
break; break;
default: default:
errno = EAFNOSUPPORT; __set_errno (EAFNOSUPPORT);
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (NULL); return (NULL);
} }
if (size != len) { if (size != len) {
errno = EINVAL; __set_errno (EINVAL);
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (NULL); return (NULL);
} }
switch (af) { switch (af) {
@ -642,7 +642,7 @@ gethostbyaddr(addr, len, af)
"gethostbyaddr: No A record for %s (verifying [%s])", "gethostbyaddr: No A record for %s (verifying [%s])",
hname2, inet_ntoa(*((struct in_addr *)addr))); hname2, inet_ntoa(*((struct in_addr *)addr)));
_res.options = old_options; _res.options = old_options;
h_errno = HOST_NOT_FOUND; __set_h_errno (HOST_NOT_FOUND);
return (NULL); return (NULL);
} }
_res.options = old_options; _res.options = old_options;
@ -653,7 +653,7 @@ gethostbyaddr(addr, len, af)
syslog(LOG_NOTICE|LOG_AUTH, syslog(LOG_NOTICE|LOG_AUTH,
"gethostbyaddr: A record of %s != PTR record [%s]", "gethostbyaddr: A record of %s != PTR record [%s]",
hname2, inet_ntoa(*((struct in_addr *)addr))); hname2, inet_ntoa(*((struct in_addr *)addr)));
h_errno = HOST_NOT_FOUND; __set_h_errno (HOST_NOT_FOUND);
return (NULL); return (NULL);
} }
} }
@ -668,7 +668,7 @@ gethostbyaddr(addr, len, af)
hp->h_addrtype = AF_INET6; hp->h_addrtype = AF_INET6;
hp->h_length = IN6ADDRSZ; hp->h_length = IN6ADDRSZ;
} }
h_errno = NETDB_SUCCESS; __set_h_errno (NETDB_SUCCESS);
return (hp); return (hp);
} }
@ -700,12 +700,12 @@ _gethtent()
int af, len; int af, len;
if (!hostf && !(hostf = fopen(_PATH_HOSTS, "r" ))) { if (!hostf && !(hostf = fopen(_PATH_HOSTS, "r" ))) {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (NULL); return (NULL);
} }
again: again:
if (!(p = fgets(hostbuf, sizeof hostbuf, hostf))) { if (!(p = fgets(hostbuf, sizeof hostbuf, hostf))) {
h_errno = HOST_NOT_FOUND; __set_h_errno (HOST_NOT_FOUND);
return (NULL); return (NULL);
} }
if (*p == '#') if (*p == '#')
@ -760,7 +760,7 @@ _gethtent()
map_v4v6_hostent(&host, &bp, &buflen); map_v4v6_hostent(&host, &bp, &buflen);
} }
h_errno = NETDB_SUCCESS; __set_h_errno (NETDB_SUCCESS);
return (&host); return (&host);
} }

View File

@ -127,9 +127,9 @@ static char *net_aliases[MAXALIASES], netbuf[BUFSIZ+1];
cp = answer->buf + HFIXEDSZ; cp = answer->buf + HFIXEDSZ;
if (!qdcount) { if (!qdcount) {
if (hp->aa) if (hp->aa)
h_errno = HOST_NOT_FOUND; __set_h_errno (HOST_NOT_FOUND);
else else
h_errno = TRY_AGAIN; __set_h_errno (TRY_AGAIN);
return (NULL); return (NULL);
} }
while (qdcount-- > 0) while (qdcount-- > 0)
@ -197,7 +197,7 @@ static char *net_aliases[MAXALIASES], netbuf[BUFSIZ+1];
net_entry.n_aliases++; net_entry.n_aliases++;
return (&net_entry); return (&net_entry);
} }
h_errno = TRY_AGAIN; __set_h_errno (TRY_AGAIN);
return (NULL); return (NULL);
} }
@ -267,7 +267,7 @@ getnetbyname(net)
struct netent *net_entry; struct netent *net_entry;
if ((_res.options & RES_INIT) == 0 && res_init() == -1) { if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (NULL); return (NULL);
} }
strcpy(&qbuf[0], net); strcpy(&qbuf[0], net);

View File

@ -26,6 +26,7 @@ static const char rcsid[] = "$Id$";
#include <errno.h> #include <errno.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#ifdef SPRINTF_CHAR #ifdef SPRINTF_CHAR
# define SPRINTF(x) strlen(sprintf/**/x) # define SPRINTF(x) strlen(sprintf/**/x)

View File

@ -52,6 +52,12 @@ extern int __h_errno;
/* Use a macro to access always the thread specific `h_errno' variable. */ /* Use a macro to access always the thread specific `h_errno' variable. */
#define h_errno (*__h_errno_location ()) #define h_errno (*__h_errno_location ())
/* Retain some binary compatibility with old libraries by having both the
global variable and the per-thread variable set on error. */
#define __set_h_errno(x) (h_errno = __h_errno = (x))
#else
#define __set_h_errno(x) (h_errno = (x))
#endif #endif
/* Possible values left in `h_errno'. */ /* Possible values left in `h_errno'. */
@ -326,6 +332,31 @@ extern struct protoent *getprotobynumber_r __P ((int __proto,
#endif /* reentrant */ #endif /* reentrant */
/* Establish network group NETGROUP for enumeration. */
extern int setnetgrent __P ((__const char *__netgroup));
/* Free all space allocated by previous `setnetgrent' call. */
extern void endnetgrent __P ((void));
/* Get next member of netgroup established by last `setnetgrent' call
and return pointers to elements in HOSTP, USERP, and DOMAINP. */
extern int getnetgrent __P ((char **__hostp, char **__userp,
char **__domainp));
/* Test whether NETGROUP contains the triple (HOST,USER,DOMAIN). */
extern int innetgr __P ((__const char *__netgroup, __const char *__host,
__const char *__user, __const char *domain));
#ifdef __USE_REENTRANT
/* Reentrant version of `getnetgrent' where result is placed in BUFFER. */
extern int __getnetgrent_r __P ((char **__hostp, char **__userp,
char **__domainp,
char *__buffer, int __buflen));
extern int getnetgrent_r __P ((char **__hostp, char **__userp,
char **__domainp,
char *__buffer, int __buflen));
#endif
__END_DECLS __END_DECLS
#endif /* netdb.h */ #endif /* netdb.h */

View File

@ -496,7 +496,7 @@ __p_rr(cp, msg, file)
char base64_key[MAX_KEY_BASE64]; char base64_key[MAX_KEY_BASE64];
if ((_res.options & RES_INIT) == 0 && res_init() == -1) { if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (NULL); return (NULL);
} }
cp = __p_fqnname(cp, msg, MAXCDNAME, rrname, sizeof rrname); cp = __p_fqnname(cp, msg, MAXCDNAME, rrname, sizeof rrname);

View File

@ -97,7 +97,7 @@ res_mkquery(op, dname, class, type, data, datalen, newrr_in, buf, buflen)
u_char *dnptrs[20], **dpp, **lastdnptr; u_char *dnptrs[20], **dpp, **lastdnptr;
if ((_res.options & RES_INIT) == 0 && res_init() == -1) { if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (-1); return (-1);
} }
#ifdef DEBUG #ifdef DEBUG

View File

@ -113,7 +113,7 @@ res_query(name, class, type, answer, anslen)
hp->rcode = NOERROR; /* default */ hp->rcode = NOERROR; /* default */
if ((_res.options & RES_INIT) == 0 && res_init() == -1) { if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (-1); return (-1);
} }
#ifdef DEBUG #ifdef DEBUG
@ -128,7 +128,7 @@ res_query(name, class, type, answer, anslen)
if (_res.options & RES_DEBUG) if (_res.options & RES_DEBUG)
printf(";; res_query: mkquery failed\n"); printf(";; res_query: mkquery failed\n");
#endif #endif
h_errno = NO_RECOVERY; __set_h_errno (NO_RECOVERY);
return (n); return (n);
} }
n = res_send(buf, n, answer, anslen); n = res_send(buf, n, answer, anslen);
@ -137,7 +137,7 @@ res_query(name, class, type, answer, anslen)
if (_res.options & RES_DEBUG) if (_res.options & RES_DEBUG)
printf(";; res_query: send error\n"); printf(";; res_query: send error\n");
#endif #endif
h_errno = TRY_AGAIN; __set_h_errno (TRY_AGAIN);
return (n); return (n);
} }
@ -149,19 +149,19 @@ res_query(name, class, type, answer, anslen)
#endif #endif
switch (hp->rcode) { switch (hp->rcode) {
case NXDOMAIN: case NXDOMAIN:
h_errno = HOST_NOT_FOUND; __set_h_errno (HOST_NOT_FOUND);
break; break;
case SERVFAIL: case SERVFAIL:
h_errno = TRY_AGAIN; __set_h_errno (TRY_AGAIN);
break; break;
case NOERROR: case NOERROR:
h_errno = NO_DATA; __set_h_errno (NO_DATA);
break; break;
case FORMERR: case FORMERR:
case NOTIMP: case NOTIMP:
case REFUSED: case REFUSED:
default: default:
h_errno = NO_RECOVERY; __set_h_errno (NO_RECOVERY);
break; break;
} }
return (-1); return (-1);
@ -189,11 +189,11 @@ res_search(name, class, type, answer, anslen)
int got_nodata = 0, got_servfail = 0, tried_as_is = 0; int got_nodata = 0, got_servfail = 0, tried_as_is = 0;
if ((_res.options & RES_INIT) == 0 && res_init() == -1) { if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (-1); return (-1);
} }
__set_errno (0); __set_errno (0);
h_errno = HOST_NOT_FOUND; /* default, if we never query */ __set_h_errno (HOST_NOT_FOUND); /* default, if we never query */
dots = 0; dots = 0;
for (cp = name; *cp; cp++) for (cp = name; *cp; cp++)
dots += (*cp == '.'); dots += (*cp == '.');
@ -253,7 +253,7 @@ res_search(name, class, type, answer, anslen)
* fully-qualified. * fully-qualified.
*/ */
if (errno == ECONNREFUSED) { if (errno == ECONNREFUSED) {
h_errno = TRY_AGAIN; __set_h_errno (TRY_AGAIN);
return (-1); return (-1);
} }
@ -302,11 +302,11 @@ res_search(name, class, type, answer, anslen)
* the last DNSRCH we did. * the last DNSRCH we did.
*/ */
if (saved_herrno != -1) if (saved_herrno != -1)
h_errno = saved_herrno; __set_h_errno (saved_herrno);
else if (got_nodata) else if (got_nodata)
h_errno = NO_DATA; __set_h_errno (NO_DATA);
else if (got_servfail) else if (got_servfail)
h_errno = TRY_AGAIN; __set_h_errno (TRY_AGAIN);
return (-1); return (-1);
} }
@ -326,7 +326,7 @@ res_querydomain(name, domain, class, type, answer, anslen)
int n; int n;
if ((_res.options & RES_INIT) == 0 && res_init() == -1) { if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
h_errno = NETDB_INTERNAL; __set_h_errno (NETDB_INTERNAL);
return (-1); return (-1);
} }
#ifdef DEBUG #ifdef DEBUG

View File

@ -23,6 +23,7 @@ Cambridge, MA 02139, USA. */
#ifdef USE_IN_LIBIO #ifdef USE_IN_LIBIO
# include "../libio/libioP.h" # include "../libio/libioP.h"
# undef ssize_t
# define ssize_t _IO_ssize_t # define ssize_t _IO_ssize_t
# define __getdelim _IO_getdelim # define __getdelim _IO_getdelim
#endif #endif

View File

@ -26,6 +26,9 @@ printf_arginfo_function *__printf_arginfo_table[UCHAR_MAX + 1];
printf_function **__printf_function_table; printf_function **__printf_function_table;
int __register_printf_function __P ((int, printf_function,
printf_arginfo_function));
/* Register FUNC to be called to format SPEC specifiers. */ /* Register FUNC to be called to format SPEC specifiers. */
int int
__register_printf_function (spec, converter, arginfo) __register_printf_function (spec, converter, arginfo)

View File

@ -23,6 +23,7 @@ Cambridge, MA 02139, USA. */
use the protected form here. In stdio it is called `__vscanf' and use the protected form here. In stdio it is called `__vscanf' and
in libio `_IO_vscanf'. */ in libio `_IO_vscanf'. */
#ifdef USE_IN_LIBIO #ifdef USE_IN_LIBIO
# include <libioP.h>
# define VSCANF _IO_vscanf # define VSCANF _IO_vscanf
#else #else
# define VSCANF __vscanf # define VSCANF __vscanf

View File

@ -29,7 +29,7 @@ tmpnam (char *s)
/* By using two buffers we manage to be thread safe in the case /* By using two buffers we manage to be thread safe in the case
where S != NULL. */ where S != NULL. */
static char buf[L_tmpnam]; static char buf[L_tmpnam];
char *tmpbuf[L_tmpnam]; char tmpbuf[L_tmpnam];
char *result; char *result;
/* In the following call we use the buffer pointed to by S if /* In the following call we use the buffer pointed to by S if

View File

@ -1,4 +1,4 @@
/* Copyright (C) 1992, 1995 Free Software Foundation, Inc. /* Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -16,15 +16,15 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave, not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#include <ansidecl.h>
#include <stdio.h> #include <stdio.h>
#ifdef USE_IN_LIBIO #ifdef USE_IN_LIBIO
# undef ssize_t
# define ssize_t _IO_ssize_t # define ssize_t _IO_ssize_t
#endif #endif
int int
DEFUN_VOID(main) main ()
{ {
char *buf = NULL; char *buf = NULL;
size_t size = 0; size_t size = 0;

View File

@ -87,6 +87,7 @@ ssize_t __wprintf_pad __P ((FILE *, wchar_t pad, size_t n));
# define PUTC(C, F) _IO_putc_unlocked (C, F) # define PUTC(C, F) _IO_putc_unlocked (C, F)
# define vfprintf _IO_vfprintf # define vfprintf _IO_vfprintf
# define FILE _IO_FILE # define FILE _IO_FILE
# undef va_list
# define va_list _IO_va_list # define va_list _IO_va_list
# undef BUFSIZ # undef BUFSIZ
# define BUFSIZ _IO_BUFSIZ # define BUFSIZ _IO_BUFSIZ

View File

@ -51,6 +51,7 @@ Cambridge, MA 02139, USA. */
# include <libioP.h> # include <libioP.h>
# include <libio.h> # include <libio.h>
# undef va_list
# define va_list _IO_va_list # define va_list _IO_va_list
# define ungetc(c, s) (--read_in, _IO_ungetc (c, s)) # define ungetc(c, s) (--read_in, _IO_ungetc (c, s))
# define inchar() ((c = _IO_getc_unlocked (s)), (void) ++read_in, c) # define inchar() ((c = _IO_getc_unlocked (s)), (void) ++read_in, c)

View File

@ -215,7 +215,7 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
char *p; char *p;
for (i=0; i < 0x100; i++) for (i=0; i < 0x100; i++)
{ {
p = (char *)((int)(buf + 0xff) & ~0xff) + i; p = (char *)((unsigned long int)(buf + 0xff) & ~0xff) + i;
strcpy (p, "OK"); strcpy (p, "OK");
strcpy (p+3, "BAD/WRONG"); strcpy (p+3, "BAD/WRONG");
check(strlen(p) == 2, 4+i); check(strlen(p) == 2, 4+i);
@ -241,7 +241,7 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
char *p; char *p;
for (i=0; i < 0x100; i++) for (i=0; i < 0x100; i++)
{ {
p = (char *)((int)(buf + 0xff) & ~0xff) + i; p = (char *)((unsigned long int)(buf + 0xff) & ~0xff) + i;
strcpy (p, "OK"); strcpy (p, "OK");
strcpy (p+3, "BAD/WRONG"); strcpy (p+3, "BAD/WRONG");
check(strchr(p, '/') == NULL, 9+i); check(strchr(p, '/') == NULL, 9+i);
@ -283,7 +283,7 @@ DEFUN(main, (argc, argv), int argc AND char **argv)
char *p; char *p;
for (i=0; i < 0x100; i++) for (i=0; i < 0x100; i++)
{ {
p = (char *)((int)(buf + 0xff) & ~0xff) + i; p = (char *)((unsigned long int)(buf + 0xff) & ~0xff) + i;
strcpy (p, "OK"); strcpy (p, "OK");
strcpy (p+3, "BAD/WRONG"); strcpy (p+3, "BAD/WRONG");
check(strrchr(p, '/') == NULL, 9+i); check(strrchr(p, '/') == NULL, 9+i);

View File

@ -1,5 +1,5 @@
/* Machine-specific calling sequence for `mcount' profiling function. alpha /* Machine-specific calling sequence for `mcount' profiling function. alpha
Copyright (C) 1995 Free Software Foundation, Inc. Copyright (C) 1995, 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -17,7 +17,8 @@ License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 675 Mass Ave, not, write to the Free Software Foundation, Inc., 675 Mass Ave,
Cambridge, MA 02139, USA. */ Cambridge, MA 02139, USA. */
#define _MCOUNT_DECL void __mcount #define _MCOUNT_DECL(from, self) \
void __mcount (u_long from, u_long self)
/* Call __mcount with our the return PC for our caller, and the return /* Call __mcount with our the return PC for our caller, and the return
PC our caller will return to. Empty since we use an assembly stub PC our caller will return to. Empty since we use an assembly stub

View File

@ -57,6 +57,7 @@ typedef long int __daddr_t; /* The type of a disk address. */
typedef char *__caddr_t; typedef char *__caddr_t;
typedef long int __time_t; typedef long int __time_t;
typedef long int __swblk_t; /* Type of a swap block maybe? */ typedef long int __swblk_t; /* Type of a swap block maybe? */
typedef long int __key_t; /* Type of an IPC key */
/* fd_set for select. */ /* fd_set for select. */

View File

@ -41,7 +41,7 @@ weak_alias (_mcount, mcount)
static void mcount_internal (u_long frompc, u_long selfpc); static void mcount_internal (u_long frompc, u_long selfpc);
#define _MCOUNT_DECL(frompc, selfpc) \ #define _MCOUNT_DECL(frompc, selfpc) \
static inline void mcount_internal (frompc, selfpc) static inline void mcount_internal (u_long frompc, u_long selfpc)
#define MCOUNT \ #define MCOUNT \
void _mcount (void) \ void _mcount (void) \

View File

@ -47,6 +47,7 @@ static char sccsid[] = "@(#)pty.c 8.1 (Berkeley) 6/4/93";
#include <string.h> #include <string.h>
#include <grp.h> #include <grp.h>
#include <pty.h> #include <pty.h>
#include <utmp.h>
int int
openpty(amaster, aslave, name, termp, winp) openpty(amaster, aslave, name, termp, winp)
@ -106,7 +107,6 @@ forkpty(amaster, name, termp, winp)
struct termios *termp; struct termios *termp;
struct winsize *winp; struct winsize *winp;
{ {
extern int login_tty __P ((int fd));
int master, slave, pid; int master, slave, pid;
if (openpty(&master, &slave, name, termp, winp) == -1) if (openpty(&master, &slave, name, termp, winp) == -1)

View File

@ -53,7 +53,7 @@ strtok (s, delim)
s = strpbrk (token, delim); s = strpbrk (token, delim);
if (s == NULL) if (s == NULL)
/* This token finishes the string. */ /* This token finishes the string. */
olds = NULL; olds = strchr (token, '\0');
else else
{ {
/* Terminate the token and make OLDS point past it. */ /* Terminate the token and make OLDS point past it. */

View File

@ -54,7 +54,7 @@ strtok_r (s, delim, save_ptr)
s = strpbrk (token, delim); s = strpbrk (token, delim);
if (s == NULL) if (s == NULL)
/* This token finishes the string. */ /* This token finishes the string. */
*save_ptr = NULL; *save_ptr = strchr (token, '\0');
else else
{ {
/* Terminate the token and make *SAVE_PTR point past it. */ /* Terminate the token and make *SAVE_PTR point past it. */

View File

@ -32,7 +32,7 @@ BEGIN {
print ""; print "";
print "#include <errno.h>"; print "#include <errno.h>";
print ""; print "";
print "const char *_sys_errlist[] ="; print "const char *const _sys_errlist[] =";
print " {"; print " {";
print " [0] = N_(\"Success\")," print " [0] = N_(\"Success\"),"
} }

View File

@ -2,7 +2,7 @@
#include <errno.h> #include <errno.h>
const char *_sys_errlist[] = const char *const _sys_errlist[] =
{ {
[0] = N_("Success"), [0] = N_("Success"),
#ifdef EPERM #ifdef EPERM

View File

@ -67,7 +67,7 @@ gid_t getegid ();
extern int errno; extern int errno;
#endif #endif
#ifndef __set_errno #ifndef __set_errno
#define __set_errno(val) errno = 8val) #define __set_errno(val) errno = (val)
#endif #endif
#if defined(EACCES) && !defined(EACCESS) #if defined(EACCES) && !defined(EACCESS)

View File

@ -26,6 +26,9 @@ Cambridge, MA 02139, USA. */
static __sighandler_t wrapped_handlers[NSIG]; static __sighandler_t wrapped_handlers[NSIG];
static sigset_t wrapped_masks[NSIG]; static sigset_t wrapped_masks[NSIG];
static void wrapper_handler __P ((int sig));
static inline int convert_mask __P ((sigset_t *set, const int mask));
static void static void
wrapper_handler (sig) wrapper_handler (sig)
int sig; int sig;

View File

@ -150,7 +150,7 @@ __stdio_gen_tempname (char *buf, size_t bufsize, const char *dir,
len = dlen + 1 + plen + 5 + 3; len = dlen + 1 + plen + 5 + 3;
while (1) while (1)
{ {
const size_t i; size_t i;
if (*idx >= ((sizeof (letters) - 1) * (sizeof (letters) - 1) * if (*idx >= ((sizeof (letters) - 1) * (sizeof (letters) - 1) *
(sizeof (letters) - 1))) (sizeof (letters) - 1)))
@ -193,11 +193,18 @@ __stdio_gen_tempname (char *buf, size_t bufsize, const char *dir,
Create a stream for it. */ Create a stream for it. */
#ifdef USE_IN_LIBIO #ifdef USE_IN_LIBIO
int save; int save;
struct locked_FILE
{
struct _IO_FILE_plus fp;
#ifdef _IO_MTSAFE_IO
_IO_lock_t lock;
#endif
} *new_f;
struct _IO_FILE_plus *fp; struct _IO_FILE_plus *fp;
fp = (struct _IO_FILE_plus *) new_f = (struct locked_FILE *)
malloc (sizeof (struct _IO_FILE_plus)); malloc (sizeof (struct locked_FILE));
if (fp == NULL) if (new_f == NULL)
{ {
/* We lost trying to create a stream (out of memory?). /* We lost trying to create a stream (out of memory?).
Nothing to do but remove the file, close the descriptor, Nothing to do but remove the file, close the descriptor,
@ -209,6 +216,10 @@ __stdio_gen_tempname (char *buf, size_t bufsize, const char *dir,
__set_errno (save); __set_errno (save);
return NULL; return NULL;
} }
fp = &new_f->fp;
#ifdef _IO_MTSAFE_IO
fp->file._lock = &new_f->lock;
#endif
_IO_init (&fp->file, 0); _IO_init (&fp->file, 0);
_IO_JUMPS (&fp->file) = &_IO_file_jumps; _IO_JUMPS (&fp->file) = &_IO_file_jumps;
_IO_file_init (&fp->file); _IO_file_init (&fp->file);

View File

@ -21,6 +21,9 @@ Cambridge, MA 02139, USA. */
#include <sys/stat.h> #include <sys/stat.h>
/* Change the flags of FILE to FLAGS. */ /* Change the flags of FILE to FLAGS. */
int chflags __P ((const char *file, int flags));
int int
chflags (file, flags) chflags (file, flags)
const char *file; const char *file;

Some files were not shown because too many files have changed in this diff Show More