update from main archive 961001
authordrepper <drepper>
Wed, 2 Oct 1996 01:33:05 +0000 (01:33 +0000)
committerdrepper <drepper>
Wed, 2 Oct 1996 01:33:05 +0000 (01:33 +0000)
55 files changed:
Makefile
PROJECTS
catgets/gencat.c
csu/initfini.c
db/makedb.c
dirent/readdir_r.c [deleted file]
elf/eval.c
gmon/gmon.c
gmon/mcount.c
gmon/sys/gmon_out.h
inet/Makefile
inet/getnetgrent.c [new file with mode: 0644]
inet/getnetgrent_r.c [new file with mode: 0644]
inet/netgroup.h [new file with mode: 0644]
inet/rcmd.c
libio/clearerr_u.c
libio/fgetc.c
libio/fputc.c
libio/fputc_u.c
libio/freopen.c
libio/fseek.c
libio/genops.c
libio/getc.c
libio/getc_u.c
libio/getchar.c
libio/getchar_u.c
libio/iofclose.c
libio/iofflush.c
libio/iofflush_u.c
libio/iofgetpos.c
libio/iofgets.c
libio/iofputs.c
libio/iofread.c
libio/iofsetpos.c
libio/ioftell.c
libio/iofwrite.c
libio/iogetdelim.c
libio/iogetline.c
libio/iogets.c
libio/ioputs.c
libio/iosetbuffer.c
libio/iosetvbuf.c
libio/ioungetc.c
libio/putc.c
libio/putchar.c
libio/rewind.c
libio/strops.c
locale/programs/ld-collate.c
locale/programs/ld-ctype.c
locale/programs/ld-time.c
locale/programs/locale.c
locale/programs/localedef.c
login/login_tty.c
netgroup.h [new file with mode: 0644]
nsswitch.h [new file with mode: 0644]

index 87a66ee..c9513a2 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -125,7 +125,7 @@ $(objpfx)sysd-dirs: $(+sysdir_pfx)config.make $(all-Subdirs-files)
 all-Banner-files = $(wildcard $(addsuffix /Banner, $(subdirs)))
 $(objpfx)version-info.h: $(+sysdir_pfx)config.make $(all-Banner-files)
        (files="$(all-Banner-files)";                           \
-        if [ test -n "$$files" ]; then                         \
+        if test -n "$$files"; then                             \
           echo "\"Available extensions:";                      \
           sed -e '/^#/d' -e 's/^[[:space:]]*/  /' $$files;     \
           echo "\"";                                           \
index bf29541..60ab664 100644 (file)
--- a/PROJECTS
+++ b/PROJECTS
@@ -37,7 +37,8 @@ contact <bug-glibc@prep.ai.mit.edu>
 
      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
@@ -81,7 +82,7 @@ contact <bug-glibc@prep.ai.mit.edu>
      Please contact bug-glibc@prep.ai.mit.edu before starting to avoid
      duplicated work.
 
-[11] Write access function for netmasks, bootparams, netgroup, publickey,
-     automount, aliases databases for nss_files and nss_db module.
+[11] Write access function for netmasks, bootparams, publickey, automount,
+     and aliases databases for nss_files and nss_db module.
      The functions should be embedded in the nss scheme.  This is not
      hard and not all services must be supported at once.
index 7fe159e..9e74042 100644 (file)
@@ -165,14 +165,13 @@ main (int argc, char *argv[])
   /* Version information is requested.  */
   if (do_version)
     {
-      fprintf (stderr, "gencat (GNU %s) %s\n", PACKAGE, VERSION);
-      fprintf (stderr, _("\
+      printf ("gencat (GNU %s) %s\n", PACKAGE, VERSION);
+      printf (_("\
 Copyright (C) %s Free Software Foundation, Inc.\n\
 This is free software; see the source for copying conditions.  There is NO\n\
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
 "), "1996");
-      fprintf (stderr, _("Written by %s.\n"),
-              "Ulrich Drepper");
+      printf (_("Written by %s.\n"), "Ulrich Drepper");
 
       exit (EXIT_SUCCESS);
     }
@@ -210,7 +209,7 @@ usage (int status)
              program_invocation_name);
   else
     {
-      printf(gettext ("\
+      printf (gettext ("\
 Usage: %s [OPTION]... -o OUTPUT-FILE [INPUT-FILE]...\n\
        %s [OPTION]... [OUTPUT-FILE [INPUT-FILE]...]\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\
 If INPUT-FILE is -, input is read from standard input.  If OUTPUT-FILE\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"),
             stdout);
     }
index cb2ba53..f816e08 100644 (file)
@@ -94,18 +94,6 @@ _init (void)
   if (__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.
      Then fetch the .section directive just written and append that
      to crtn.s-new, followed by the function epilogue.  */
index 5c0d659..d30ca2c 100644 (file)
@@ -115,14 +115,13 @@ main (argc, argv)
   /* Version information is requested.  */
   if (do_version)
     {
-      fprintf (stderr, "makedb (GNU %s) %s\n", PACKAGE, VERSION);
-      fprintf (stderr, _("\
+      printf ("makedb (GNU %s) %s\n", PACKAGE, VERSION);
+      printf (_("\
 Copyright (C) %s Free Software Foundation, Inc.\n\
 This is free software; see the source for copying conditions.  There is NO\n\
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
 "), "1996");
-      fprintf (stderr, _("Written by %s.\n"),
-              "Ulrich Drepper");
+      printf (_("Written by %s.\n"), "Ulrich Drepper");
 
       exit (EXIT_SUCCESS);
     }
diff --git a/dirent/readdir_r.c b/dirent/readdir_r.c
deleted file mode 100644 (file)
index b997966..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* readdir_r - Reentrant version of readdir.
-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 <dirent.h>
-
-/* Some systems have reentrancy problems with their `readdir'
-   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;
-}
index 59eb234..03b903b 100644 (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 <ctype.h>
 #include <stdlib.h>
+#include <string.h>
 #include <unistd.h>
 #include <dlfcn.h>
 
index ecf7518..00b5df5 100644 (file)
@@ -35,7 +35,6 @@
 #include <sys/gmon.h>
 #include <sys/gmon_out.h>
 
-#include <ansidecl.h>
 #include <stdio.h>
 #include <fcntl.h>
 #include <unistd.h>
@@ -45,7 +44,7 @@
 #include <string.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. */
 
@@ -65,7 +64,8 @@ static int    s_scale;
  *     all the data structures are ready.
  */
 void
-DEFUN(moncontrol, (mode), int mode)
+moncontrol (mode)
+     int mode;
 {
   struct gmonparam *p = &_gmonparam;
 
@@ -85,7 +85,9 @@ DEFUN(moncontrol, (mode), int mode)
 
 
 void
-DEFUN(monstartup, (lowpc, highpc), u_long lowpc AND u_long highpc)
+monstartup (lowpc, highpc)
+     u_long lowpc;
+     u_long highpc;
 {
   register int o;
   char *cp;
@@ -155,21 +157,19 @@ DEFUN(monstartup, (lowpc, highpc), u_long lowpc AND u_long highpc)
 
 
 static void
-DEFUN(write_hist, (fd), int fd)
+write_hist (fd)
+     int fd;
 {
   const u_char tag = GMON_TAG_TIME_HIST;
   struct gmon_hist_hdr thdr;
-  int size, rate;
 
   if (_gmonparam.kcountsize > 0)
     {
-      size = _gmonparam.kcountsize / sizeof(HISTCOUNTER);
-      rate = __profile_frequency();
-      bcopy(&_gmonparam.lowpc, &thdr.low_pc, sizeof(thdr.low_pc));
-      bcopy(&_gmonparam.highpc, &thdr.high_pc, sizeof(thdr.high_pc));
-      bcopy(&size, &thdr.hist_size, sizeof(thdr.hist_size));
-      bcopy(&rate, &thdr.prof_rate, sizeof(thdr.prof_rate));
-      strcpy(thdr.dimen, "seconds");
+      thdr.low_pc = _gmonparam.lowpc;
+      thdr.high_pc = _gmonparam.highpc;
+      thdr.hist_size = _gmonparam.kcountsize / sizeof(HISTCOUNTER);
+      thdr.prof_rate = __profile_frequency();
+      strncpy(thdr.dimen, "seconds", sizeof(thdr.dimen));
       thdr.dimen_abbrev = 's';
 
       write(fd, &tag, sizeof(tag));
@@ -180,7 +180,8 @@ DEFUN(write_hist, (fd), int fd)
 
 
 static void
-DEFUN(write_call_graph, (fd), int fd)
+write_call_graph (fd)
+     int fd;
 {
   const u_char tag = GMON_TAG_CG_ARC;
   struct gmon_cg_arc_record raw_arc;
@@ -200,11 +201,9 @@ DEFUN(write_call_graph, (fd), int fd)
           to_index != 0;
           to_index = _gmonparam.tos[to_index].link)
        {
-         bcopy(&frompc, &raw_arc.from_pc, sizeof(raw_arc.from_pc));
-         bcopy(&_gmonparam.tos[to_index].selfpc, &raw_arc.self_pc,
-               sizeof(raw_arc.self_pc));
-         bcopy(&_gmonparam.tos[to_index].count, &raw_arc.count,
-               sizeof(raw_arc.count));
+         raw_arc.from_pc = frompc;
+         raw_arc.self_pc = _gmonparam.tos[to_index].selfpc;
+         raw_arc.count = _gmonparam.tos[to_index].count;
 
          write(fd, &tag, sizeof(tag));
          write(fd, &raw_arc, sizeof(raw_arc));
@@ -214,7 +213,8 @@ DEFUN(write_call_graph, (fd), int fd)
 
 
 static void
-DEFUN(write_bb_counts, (fd), int fd)
+write_bb_counts (fd)
+     int fd;
 {
   struct __bb *grp;
   const u_char tag = GMON_TAG_BB_COUNT;
@@ -239,9 +239,8 @@ DEFUN(write_bb_counts, (fd), int fd)
 
 
 void
-DEFUN_VOID(_mcleanup)
+_mcleanup ()
 {
-    const int version = GMON_VERSION;
     struct gmon_hdr ghdr;
     int fd;
 
@@ -254,8 +253,9 @@ DEFUN_VOID(_mcleanup)
       }
 
     /* write gmon.out header: */
-    bcopy(GMON_MAGIC, &ghdr.cookie[0], 4);
-    bcopy(&version, &ghdr.version, sizeof(version));
+    memset(&ghdr, 0, sizeof(ghdr));
+    memcpy(&ghdr.cookie[0], GMON_MAGIC, sizeof(ghdr.cookie));
+    ghdr.version = GMON_VERSION;
     write(fd, &ghdr, sizeof(ghdr));
 
     /* write PC histogram: */
index 00c9ff8..66da3d0 100644 (file)
@@ -58,7 +58,6 @@ static char sccsid[] = "@(#)mcount.c  8.1 (Berkeley) 6/4/93";
  * perform this optimization.
  */
 _MCOUNT_DECL(frompc, selfpc)   /* _mcount; may be static, inline, etc */
-       register u_long frompc, selfpc;
 {
        register u_short *frompcindex;
        register struct tostruct *top, *prevtop;
index 4224936..ef5b191 100644 (file)
@@ -39,8 +39,8 @@ identifying the type of records, followed by records specific data. */
  */
 struct gmon_hdr {
   char cookie[4];
-  char version[4];
-  char spare[3 * 4];
+  int version;
+  int spare[3];
 };
 
 /* types of records in this file: */
@@ -49,18 +49,18 @@ typedef enum {
 } GMON_Record_Tag;
 
 struct gmon_hist_hdr {
-  char low_pc[sizeof (char *)];        /* base pc address of sample buffer */
-  char high_pc[sizeof (char *)];       /* max pc address of sampled buffer */
-  char hist_size[4];                   /* size of sample buffer */
-  char prof_rate[4];                   /* profiling clock rate */
+  unsigned long low_pc;                        /* base pc address of sample buffer */
+  unsigned long high_pc;               /* max pc address of sampled buffer */
+  int hist_size;                       /* size of sample buffer */
+  int prof_rate;                       /* profiling clock rate */
   char dimen[15];                      /* phys. dim., usually "seconds" */
   char dimen_abbrev;                   /* usually 's' for "seconds" */
 };
 
 struct gmon_cg_arc_record {
-  char from_pc[sizeof (char *)];       /* address within caller's body */
-  char self_pc[sizeof (char *)];       /* address within callee's body */
-  char count[4];                       /* number of arc traversals */
+  unsigned long from_pc;               /* address within caller's body */
+  unsigned long self_pc;               /* address within callee's body */
+  int count;                           /* number of arc traversals */
 };
 
 #endif /* !_SYS_GMON_OUT_H_ */
index fbac0dc..c09db18 100644 (file)
@@ -24,6 +24,8 @@ subdir        := inet
 headers        := netinet/ether.h netinet/in.h netinet/if_ether.h \
           netinet/tcp.h $(wildcard arpa/*.h protocols/*.h)
 
+distribute := netgroup.h
+
 routines := ntohl ntohs htonl htons            \
            inet_lnaof inet_mkadr       \
            inet_netof inet_ntoa inet_net herrno \
@@ -38,7 +40,8 @@ routines := ntohl ntohs htonl htons           \
            getrpcent_r getrpcbyname_r getrpcbynumber_r \
            ether_aton ether_aton_r ether_hton ether_line \
            ether_ntoa ether_ntoa_r ether_ntoh \
-           rcmd rexec ruserpass
+           rcmd rexec ruserpass \
+           getnetgrent_r getnetgrent
 
 # No warnings about losing BSD code.
 override +gccwarn := -w
diff --git a/inet/getnetgrent.c b/inet/getnetgrent.c
new file mode 100644 (file)
index 0000000..3510f01
--- /dev/null
@@ -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));
+}
diff --git a/inet/getnetgrent_r.c b/inet/getnetgrent_r.c
new file mode 100644 (file)
index 0000000..52a90d0
--- /dev/null
@@ -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;
+}
+\f
+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)
+\f
+/* 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;
+}
diff --git a/inet/netgroup.h b/inet/netgroup.h
new file mode 100644 (file)
index 0000000..e8ea51e
--- /dev/null
@@ -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 */
index a9756d1..3fc8adc 100644 (file)
@@ -52,8 +52,6 @@ static char sccsid[] = "@(#)rcmd.c    8.3 (Berkeley) 3/26/94";
 #include <ctype.h>
 #include <string.h>
 
-#define MIN(A, B) ((A) < (B) ? (A) : (B))
-
 
 int    __ivaliduser __P((FILE *, u_int32_t, const char *, const char *));
 static int __icheckhost __P((u_int32_t, char *));
index 4c8b6c2..189f38d 100644 (file)
@@ -20,11 +20,9 @@ Boston, MA 02111-1307, USA.  */
 #include "stdio.h"
 
 void
-__clearerr_unlocked (fp)
+clearerr_unlocked (fp)
      FILE *fp;
 {
   CHECK_FILE (fp, /*nothing*/);
   _IO_clearerr (fp);
 }
-
-weak_alias (__clearerr_unlocked, clearerr_unlocked)
index 07fd89a..a754c4b 100644 (file)
@@ -31,7 +31,7 @@ fgetc (fp)
 {
   int result;
   CHECK_FILE (fp, EOF);
-  __libc_cleanup_region_start (_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   result = _IO_getc_unlocked (fp);
   __libc_cleanup_region_end (1);
index bd871ab..865ac8c 100644 (file)
@@ -32,7 +32,7 @@ fputc (c, fp)
 {
   int result;
   CHECK_FILE (fp, EOF);
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   result = _IO_putc_unlocked (c, fp);
   __libc_cleanup_region_end (1);
index 97e4d94..bc2cc2e 100644 (file)
@@ -28,12 +28,10 @@ the executable file might be covered by the GNU General Public License. */
 #undef fputc_unlocked
 
 int
-__fputc_unlocked (c, fp)
+fputc_unlocked (c, fp)
      int c;
      _IO_FILE *fp;
 {
   CHECK_FILE (fp, EOF);
   return _IO_putc_unlocked (c, fp);
 }
-
-weak_alias (__fputc_unlocked, fputc_unlocked)
index 5821e84..0b782dd 100644 (file)
@@ -35,7 +35,7 @@ freopen (filename, mode, fp)
   CHECK_FILE (fp, NULL);
   if (!(fp->_flags & _IO_IS_FILEBUF))
     return NULL;
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   result = _IO_freopen (filename, mode, fp);
   __libc_cleanup_region_end (1);
index c33927a..61f2e92 100644 (file)
@@ -33,7 +33,7 @@ fseek (fp, offset, whence)
 {
   int result;
   CHECK_FILE (fp, -1);
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   result = _IO_fseek (fp, offset, whence);
   __libc_cleanup_region_end (1);
index 7c2dcba..bd741ec 100644 (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. */
       if (count > 0)
        {
-         if (count > more)
+         if ((_IO_size_t) count > more)
            count = more;
          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. */
       if (count > 0)
        {
-         if (count > more)
+         if ((_IO_size_t) count > more)
            count = more;
          if (count > 20)
            {
index 82e5756..c345e44 100644 (file)
@@ -33,7 +33,7 @@ getc (fp)
 {
   int result;
   CHECK_FILE (fp, EOF);
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   result = _IO_getc_unlocked (fp);
   __libc_cleanup_region_end (1);
index 4aa5cd5..569e063 100644 (file)
@@ -28,11 +28,9 @@ the executable file might be covered by the GNU General Public License. */
 #undef getc_unlocked
 
 int
-__getc_unlocked (fp)
+getc_unlocked (fp)
      FILE *fp;
 {
   CHECK_FILE (fp, EOF);
   return _IO_getc_unlocked (fp);
 }
-
-weak_alias (__getc_unlocked, getc_unlocked)
index e7a236c..d54ec58 100644 (file)
@@ -31,7 +31,8 @@ int
 getchar ()
 {
   int result;
-  __libc_cleanup_region_start (&_IO_funlockfile, stdin);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
+                              stdin);
   _IO_flockfile (stdin);
   result = _IO_getc_unlocked (stdin);
   __libc_cleanup_region_end (1);
index 0430f81..337f693 100644 (file)
@@ -28,9 +28,7 @@ the executable file might be covered by the GNU General Public License. */
 #undef getchar_unlocked
 
 int
-__getchar_unlocked ()
+getchar_unlocked ()
 {
   return _IO_getc_unlocked (stdin);
 }
-
-weak_alias (__getchar_unlocked, getchar_unlocked)
index 9d53737..77c7b50 100644 (file)
@@ -35,19 +35,19 @@ _IO_fclose (fp)
 
   CHECK_FILE(fp, EOF);
 
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   if (fp->_IO_file_flags & _IO_IS_FILEBUF)
     status = _IO_file_close_it (fp);
   else
     status = fp->_flags & _IO_ERR_SEEN ? -1 : 0;
   _IO_FINISH (fp);
+  __libc_cleanup_region_end (1);
   if (fp != _IO_stdin && fp != _IO_stdout && fp != _IO_stderr)
     {
       fp->_IO_file_flags = 0;
       free(fp);
     }
-  __libc_cleanup_region_end (1);
   return status;
 }
 
index cbc5b1f..385c962 100644 (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. */
 
 #include "libioP.h"
+#include <stdio.h>
 
 int
 _IO_fflush (fp)
@@ -34,7 +35,8 @@ _IO_fflush (fp)
     {
       int result;
       CHECK_FILE (fp, EOF);
-      __libc_cleanup_region_start (&_IO_funlockfile, fp);
+      __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile,
+                                  fp);
       _IO_flockfile (fp);
       result = _IO_SYNC (fp) ? EOF : 0;
       __libc_cleanup_region_end (1);
index b7a9195..b8af710 100644 (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. */
 
 #include "libioP.h"
+#include <stdio.h>
 
 int
-_IO_fflush_unlocked (fp)
+fflush_unlocked (fp)
      register _IO_FILE *fp;
 {
   if (fp == NULL)
@@ -36,6 +37,3 @@ _IO_fflush_unlocked (fp)
       return _IO_SYNC (fp) ? EOF : 0;
     }
 }
-
-weak_alias (_IO_fflush_unlocked, fflush_unlocked)
-
index 4cec7a7..07128c1 100644 (file)
@@ -33,7 +33,7 @@ _IO_fgetpos (fp, posp)
 {
   _IO_fpos_t pos;
   CHECK_FILE (fp, EOF);
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
   __libc_cleanup_region_end (1);
index 4d4ce5c..71d677c 100644 (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
 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. */
 
 #include "libioP.h"
+#include <stdio.h>
 
 char*
 _IO_fgets (buf, n, fp)
@@ -35,7 +36,7 @@ _IO_fgets (buf, n, fp)
   CHECK_FILE (fp, NULL);
   if (n <= 0)
     return NULL;
-  __libc_cleanup_region_start (&__funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   __flockfile (fp);
   count = _IO_getline (fp, buf, n - 1, '\n', 1);
   if (count == 0 || (fp->_IO_file_flags & _IO_ERR_SEEN))
index a9fd5f2..6e94223 100644 (file)
@@ -33,7 +33,7 @@ _IO_fputs (str, fp)
   _IO_size_t len = strlen (str);
   int result;
   CHECK_FILE (fp, EOF);
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   if (_IO_sputn (fp, str, len) != len)
     result = EOF;
index af6bc33..8610b0c 100644 (file)
@@ -36,7 +36,7 @@ _IO_fread (buf, size, count, fp)
   CHECK_FILE (fp, 0);
   if (bytes_requested == 0)
     return 0;
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   bytes_read = _IO_sgetn (fp, (char *) buf, bytes_requested);
   __libc_cleanup_region_end (1);
index 9013606..52700f7 100644 (file)
@@ -32,7 +32,7 @@ _IO_fsetpos (fp, posp)
 {
   int result;
   CHECK_FILE (fp, EOF);
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   if (_IO_seekpos (fp, *posp, _IOS_INPUT|_IOS_OUTPUT) == _IO_pos_BAD)
     {
index ec3b1a2..1fc7c55 100644 (file)
@@ -32,7 +32,7 @@ _IO_ftell (fp)
 {
   _IO_pos_t pos;
   CHECK_FILE (fp, -1L);
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   pos = _IO_seekoff (fp, 0, _IO_seek_cur, 0);
   __libc_cleanup_region_end (1);
index 4ee489d..7767a94 100644 (file)
@@ -36,7 +36,7 @@ _IO_fwrite (buf, size, count, fp)
   CHECK_FILE (fp, 0);
   if (request == 0)
     return 0;
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   written = _IO_sputn (fp, (const char *) buf, request);
   __libc_cleanup_region_end (1);
index da6efa4..d41bb6b 100644 (file)
@@ -52,7 +52,7 @@ _IO_getdelim (lineptr, n, delimiter, fp)
       return -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);
   if (_IO_ferror_unlocked (fp))
     {
index 85dff7e..a727071 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
 Copyright (C) 1993 Free Software Foundation
 
 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;
        else
          len = fp->_IO_read_end - fp->_IO_read_ptr;
-      if (len >= n)
+      if ((_IO_size_t) len >= n)
        len = n;
       t = (char*)memchr((void*)fp->_IO_read_ptr, delim, len);
       if (t != NULL)
index 8fdc435..e132093 100644 (file)
@@ -32,7 +32,8 @@ _IO_gets (buf)
   _IO_size_t count;
   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);
   ch = _IO_getc_unlocked (_IO_stdin);
   if (ch == EOF)
index 2770ab2..34e68b9 100644 (file)
@@ -30,7 +30,8 @@ _IO_puts (str)
 {
   int result;
   _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);
   if (_IO_sputn (_IO_stdout, str, len) == len
       && _IO_putc_unlocked ('\n', _IO_stdout) != EOF)
index e44f339..d14e5d4 100644 (file)
@@ -31,7 +31,7 @@ _IO_setbuffer (fp, buf, size)
      _IO_size_t size;
 {
   CHECK_FILE (fp, );
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   fp->_flags &= ~_IO_LINE_BUF;
   if (!buf)
index e9dccae..3776330 100644 (file)
@@ -37,7 +37,7 @@ _IO_setvbuf (fp, buf, mode, size)
 {
   int result;
   CHECK_FILE (fp, EOF);
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   switch (mode)
     {
index cc41408..180e789 100644 (file)
@@ -33,7 +33,7 @@ _IO_ungetc (c, fp)
   CHECK_FILE (fp, EOF);
   if (c == EOF)
     return EOF;
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   result = _IO_sputbackc (fp, (unsigned char) c);
   __libc_cleanup_region_end (1);
index 5dff3de..bc69e2e 100644 (file)
@@ -28,7 +28,7 @@ putc (c, fp)
 {
   int result;
   CHECK_FILE (fp, EOF);
-  __libc_cleanup_region_start (&_IO_funlockfile, fp);
+  __libc_cleanup_region_start ((void (*) __P ((void *))) _IO_funlockfile, fp);
   _IO_flockfile (fp);
   result = _IO_putc_unlocked (c, fp);
   __libc_cleanup_region_end (1);
index a7891a5..7822a31 100644 (file)
@@ -26,7 +26,8 @@ putchar (c)
      int c;
 {
   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);
   result = _IO_putc_unlocked (c, _IO_stdout);
   __libc_cleanup_region_end (1);
index d30233e..2af2dd8 100644 (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
 software; you can redistribute it and/or modify it under the
@@ -29,7 +29,7 @@ rewind (fp)
      _IO_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_rewind (fp);
   __libc_cleanup_region_end (1);
index 98c5b26..4640633 100644 (file)
@@ -1,4 +1,4 @@
-/* 
+/*
 Copyright (C) 1993 Free Software Foundation
 
 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;
       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 */
        {
@@ -187,10 +187,10 @@ DEFUN(_IO_str_count, (fp),
       register _IO_FILE *fp)
 {
   _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);
   return put_len;
-}     
+}
 
 _IO_pos_t
 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: */
          break;
        }
-      if (offset < 0 || (_IO_size_t)offset > cur_size)
+      if (offset < 0 || (_IO_ssize_t)offset > cur_size)
        return EOF;
       fp->_IO_read_ptr = fp->_IO_read_base + offset;
       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: */
          break;
        }
-      if (offset < 0 || (_IO_size_t)offset > cur_size)
+      if (offset < 0 || (_IO_ssize_t)offset > cur_size)
        return EOF;
       LEN(fp) = cur_size;
       fp->_IO_write_ptr = fp->_IO_write_base + offset;
index a948b55..1bfa533 100644 (file)
@@ -1341,7 +1341,7 @@ collation element `%.*s' appears more than once: ignore line"),
        {
          unsigned int order = ++collate->order_cnt;
 
-         if ((unsigned int) tmp != 0)
+         if ((unsigned long int) tmp != 0ul)
            {
              lr_error (lr, _("\
 collation symbol `.*s' appears more than once: ignore line"),
index 196f990..64f73d4 100644 (file)
@@ -21,6 +21,7 @@ Boston, MA 02111-1307, USA.  */
 # include <config.h>
 #endif
 
+#include <alloca.h>
 #include <endian.h>
 #include <limits.h>
 #include <string.h>
index 6f961b6..6fcb069 100644 (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)
                  + time->cur_num_era - 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;
   u_int32_t idx[_NL_ITEM_INDEX (_NL_NUM_LC_TIME)];
   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; */
     }
 
+  /* 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)
                  + time->cur_num_era - 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));
 
   write_locale_data (output_path, "LC_TIME", 2 + cnt, iov);
index 667afbd..fa824fb 100644 (file)
@@ -183,14 +183,13 @@ main (int argc, char *argv[])
   /* Version information is requested.  */
   if (do_version)
     {
-      fprintf (stderr, "locale (GNU %s) %s\n", PACKAGE, VERSION);
-      fprintf (stderr, _("\
+      printf ("locale (GNU %s) %s\n", PACKAGE, VERSION);
+      printf (_("\
 Copyright (C) %s Free Software Foundation, Inc.\n\
 This is free software; see the source for copying conditions.  There is NO\n\
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
 "), "1995, 1996");
-      fprintf (stderr, _("Written by %s.\n"),
-              "Ulrich Drepper");
+      printf (_("Written by %s.\n"), "Ulrich Drepper");
 
       exit (EXIT_SUCCESS);
     }
index ff9248e..6d37a0e 100644 (file)
@@ -173,14 +173,13 @@ main (int argc, char *argv[])
   /* Version information is requested.  */
   if (do_version)
     {
-      fprintf (stderr, "localedef (GNU %s) %s\n", PACKAGE, VERSION);
-      fprintf (stderr, _("\
+      printf ("localedef (GNU %s) %s\n", PACKAGE, VERSION);
+      printf (_("\
 Copyright (C) %s Free Software Foundation, Inc.\n\
 This is free software; see the source for copying conditions.  There is NO\n\
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\
 "), "1995, 1996");
-      fprintf (stderr, _("Written by %s.\n"),
-              "Ulrich Drepper");
+      printf (_("Written by %s.\n"), "Ulrich Drepper");
 
       exit (0);
     }
index e4e075c..2959457 100644 (file)
@@ -39,6 +39,7 @@ static char sccsid[] = "@(#)login_tty.c       8.1 (Berkeley) 6/4/93";
 #include <sys/ioctl.h>
 #include <unistd.h>
 #include <fcntl.h>
+#include <utmp.h>
 
 int
 login_tty(fd)
diff --git a/netgroup.h b/netgroup.h
new file mode 100644 (file)
index 0000000..4b2b284
--- /dev/null
@@ -0,0 +1 @@
+#include <inet/netgroup.h>
diff --git a/nsswitch.h b/nsswitch.h
new file mode 100644 (file)
index 0000000..a876d23
--- /dev/null
@@ -0,0 +1 @@
+#include <nss/nsswitch.h>