summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-08-18 23:27:30 +0000
committerUlrich Drepper <drepper@redhat.com>1998-08-18 23:27:30 +0000
commit0c6cee5d656d933100b86b7d58803bdbd549e456 (patch)
tree9fe94f38351584e600d19b26893b957fabf37715
parenteedbbe588f893e8bd93e65617d3fd98e172a3569 (diff)
downloadglibc-0c6cee5d656d933100b86b7d58803bdbd549e456.tar.gz
glibc-0c6cee5d656d933100b86b7d58803bdbd549e456.tar.xz
glibc-0c6cee5d656d933100b86b7d58803bdbd549e456.zip
Update.
1998-08-18  Ulrich Drepper  <drepper@cygnus.com>

	* include/features.h: Define __USE_EXTERN_INLINES for recent
	enough gcc.
	* argp/argp.h: Define extern inline functions only if
	__USE_EXTERN_INLINES is defined.
	* libio/stdio.h: Likewise.
	* math/math.h: Likewise.
	* stdlib/stdlib.h: Likewise.
	* string/argz.h: Likewise.
	* sysdeps/generic/bits/sigset.h: Likewise.
	* sysdeps/unix/sysv/linux/bits/sigset.h: Likewise.
	* sysdeps/unix/sysv/sysv4/bits/sigset.h: Likewise.
	* sysdeps/wordsize-32/inttypes.h: Likewise.
	* sysdeps/wordsize-64/inttypes.h: Likewise.
	* wcsmbs/wchar.h: Likewise.

	* sysdeps/generic/bits/glob.c [_LIBC]: Define __stat using __xstat
	to allow compilation without optimization.

1998-08-14  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de> 
 
	* nis/nss_compat/compat-grp.c: Set errno to ENOENT if we have no 
	more entries. 
	* nis/nss_compat/compat-initgroups.c: Likewise. 
	* nis/nss_compat/compat-pwd.c: Likewise. 
	* nis/nss_compat/compat-spwd.c: Likewise. 
	* nis/nss_nis/nis-alias.c: Likewise. 
	* nis/nss_nis/nis-ethers.c: Likewise. 
	* nis/nss_nis/nis-grp.c: Likewise. 
	* nis/nss_nis/nis-hosts.c: Likewise. 
	* nis/nss_nis/nis-initgroups.c: Likewise. 
	* nis/nss_nis/nis-network.c: Likewise. 
	* nis/nss_nis/nis-proto.c: Likewise. 
	* nis/nss_nis/nis-pwd.c: Likewise. 
	* nis/nss_nis/nis-rpc.c: Likewise. 
	* nis/nss_nis/nis-service.c: Likewise. 
	* nis/nss_nis/nis-spwd.c: Likewise. 
 
	* nis/rpcsvc/yp.h: Generate new without 1024 byte limits. 
 
	* nis/ypclnt.c: Try binding dir only first time, could be to old. 
 
	* nis/yp_xdr.c: Remove 1024 byte limit. 
	* nis/ypupdate_xdr.c: Likewise. 
 
	* nis/nss_nis/nis-publickey.c: Make sure, nobody could send 
	wrong data. 
 
-rw-r--r--ChangeLog49
-rw-r--r--argp/argp.h4
-rw-r--r--bits/sigset.h8
-rw-r--r--libio/stdio.h32
-rw-r--r--math/math.h2
-rw-r--r--nis/nss_compat/compat-grp.c27
-rw-r--r--nis/nss_compat/compat-initgroups.c17
-rw-r--r--nis/nss_compat/compat-pwd.c32
-rw-r--r--nis/nss_compat/compat-spwd.c28
-rw-r--r--nis/nss_nis/nis-alias.c4
-rw-r--r--nis/nss_nis/nis-ethers.c16
-rw-r--r--nis/nss_nis/nis-grp.c24
-rw-r--r--nis/nss_nis/nis-hosts.c1
-rw-r--r--nis/nss_nis/nis-initgroups.c5
-rw-r--r--nis/nss_nis/nis-network.c23
-rw-r--r--nis/nss_nis/nis-proto.c25
-rw-r--r--nis/nss_nis/nis-publickey.c26
-rw-r--r--nis/nss_nis/nis-pwd.c24
-rw-r--r--nis/nss_nis/nis-rpc.c21
-rw-r--r--nis/nss_nis/nis-service.c17
-rw-r--r--nis/nss_nis/nis-spwd.c15
-rw-r--r--nis/rpcsvc/yp.h566
-rw-r--r--nis/yp_xdr.c386
-rw-r--r--nis/ypclnt.c4
-rw-r--r--nis/ypupdate_xdr.c46
-rw-r--r--stdlib/stdlib.h5
-rw-r--r--string/argz.h4
-rw-r--r--sysdeps/generic/bits/sigset.h8
-rw-r--r--sysdeps/generic/glob.c1
-rw-r--r--sysdeps/unix/sysv/linux/bits/sigset.h6
-rw-r--r--sysdeps/unix/sysv/sysv4/bits/sigset.h8
-rw-r--r--sysdeps/wordsize-32/inttypes.h4
-rw-r--r--sysdeps/wordsize-64/inttypes.h4
-rw-r--r--wcsmbs/wchar.h2
34 files changed, 665 insertions, 779 deletions
diff --git a/ChangeLog b/ChangeLog
index 982f148016..2f51192fd7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,52 @@
+1998-08-18  Ulrich Drepper  <drepper@cygnus.com>
+
+	* include/features.h: Define __USE_EXTERN_INLINES for recent
+	enough gcc.
+	* argp/argp.h: Define extern inline functions only if
+	__USE_EXTERN_INLINES is defined.
+	* libio/stdio.h: Likewise.
+	* math/math.h: Likewise.
+	* stdlib/stdlib.h: Likewise.
+	* string/argz.h: Likewise.
+	* sysdeps/generic/bits/sigset.h: Likewise.
+	* sysdeps/unix/sysv/linux/bits/sigset.h: Likewise.
+	* sysdeps/unix/sysv/sysv4/bits/sigset.h: Likewise.
+	* sysdeps/wordsize-32/inttypes.h: Likewise.
+	* sysdeps/wordsize-64/inttypes.h: Likewise.
+	* wcsmbs/wchar.h: Likewise.
+
+	* sysdeps/generic/bits/glob.c [_LIBC]: Define __stat using __xstat
+	to allow compilation without optimization.
+
+1998-08-14  Thorsten Kukuk  <kukuk@vt.uni-paderborn.de> 
+ 
+	* nis/nss_compat/compat-grp.c: Set errno to ENOENT if we have no 
+	more entries. 
+	* nis/nss_compat/compat-initgroups.c: Likewise. 
+	* nis/nss_compat/compat-pwd.c: Likewise. 
+	* nis/nss_compat/compat-spwd.c: Likewise. 
+	* nis/nss_nis/nis-alias.c: Likewise. 
+	* nis/nss_nis/nis-ethers.c: Likewise. 
+	* nis/nss_nis/nis-grp.c: Likewise. 
+	* nis/nss_nis/nis-hosts.c: Likewise. 
+	* nis/nss_nis/nis-initgroups.c: Likewise. 
+	* nis/nss_nis/nis-network.c: Likewise. 
+	* nis/nss_nis/nis-proto.c: Likewise. 
+	* nis/nss_nis/nis-pwd.c: Likewise. 
+	* nis/nss_nis/nis-rpc.c: Likewise. 
+	* nis/nss_nis/nis-service.c: Likewise. 
+	* nis/nss_nis/nis-spwd.c: Likewise. 
+ 
+	* nis/rpcsvc/yp.h: Generate new without 1024 byte limits. 
+ 
+	* nis/ypclnt.c: Try binding dir only first time, could be to old. 
+ 
+	* nis/yp_xdr.c: Remove 1024 byte limit. 
+	* nis/ypupdate_xdr.c: Likewise. 
+ 
+	* nis/nss_nis/nis-publickey.c: Make sure, nobody could send 
+	wrong data. 
+ 
 1998-08-18  Roland McGrath  <roland@baalperazim.frob.com>
 
 	* Rules (binaries-static, binaries-shared static pattern rules):
diff --git a/argp/argp.h b/argp/argp.h
index 780c45f69c..8b6485e80e 100644
--- a/argp/argp.h
+++ b/argp/argp.h
@@ -521,7 +521,7 @@ extern void *_argp_input __P ((__const struct argp *argp,
 extern void *__argp_input __P ((__const struct argp *argp,
 				__const struct argp_state *state));
 
-#ifdef __OPTIMIZE__
+#ifdef __USE_EXTERN_INLINES
 
 # if !_LIBC
 #  define __argp_usage argp_usage
@@ -564,7 +564,7 @@ __option_is_end (__const struct argp_option *__opt)
 #  undef __option_is_short
 #  undef __option_is_end
 # endif
-#endif /* __OPTIMIZE__ */
+#endif /* Use extern inlines.  */
 
 #ifdef  __cplusplus
 }
diff --git a/bits/sigset.h b/bits/sigset.h
index c442d53643..a57458dd28 100644
--- a/bits/sigset.h
+++ b/bits/sigset.h
@@ -38,7 +38,7 @@ typedef unsigned long int __sigset_t;
 #define _SIGSET_H_fns 1
 
 #ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE extern __inline
+# define _EXTERN_INLINE extern __inline
 #endif
 
 /* Return a mask that includes SIG only.  The cast to `sigset_t' avoids
@@ -63,7 +63,8 @@ extern int __sigismember (__const __sigset_t *, int);
 extern int __sigaddset (__sigset_t *, int);
 extern int __sigdelset (__sigset_t *, int);
 
-#define __SIGSETFN(NAME, BODY, CONST)					      \
+#ifdef __USE_EXTERN_INLINES
+# define __SIGSETFN(NAME, BODY, CONST)					      \
   _EXTERN_INLINE int							      \
   NAME (CONST __sigset_t *__set, int __sig)				      \
   {									      \
@@ -75,7 +76,8 @@ __SIGSETFN (__sigismember, (*__set & __mask) ? 1 : 0, __const)
 __SIGSETFN (__sigaddset, ((*__set |= __mask), 0), )
 __SIGSETFN (__sigdelset, ((*__set &= ~__mask), 0), )
 
-#undef __SIGSETFN
+# undef __SIGSETFN
+#endif
 
 
 #endif /* ! _SIGSET_H_fns.  */
diff --git a/libio/stdio.h b/libio/stdio.h
index e7b167d848..4d01061b3e 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -279,13 +279,13 @@ extern int vsprintf __P ((char *__restrict __s,
 			  __const char *__restrict __format,
 			  _G_va_list __arg));
 
-#if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__
+#ifdef __USE_EXTERN_INLINES
 __STDIO_INLINE int
 vprintf (__const char *__restrict __fmt, _G_va_list __arg)
 {
   return vfprintf (stdout, __fmt, __arg);
 }
-#endif /* Optimizing.  */
+#endif /* Use extern inlines.  */
 
 #if defined __USE_BSD || defined __USE_ISOC9X || defined __USE_UNIX98
 /* Maximum chars of output to write in MAXLEN.  */
@@ -368,20 +368,20 @@ extern int getchar __P ((void));
    optimization for it.  */
 #define getc(_fp) _IO_getc (_fp)
 
-#if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__
+#ifdef __USE_EXTERN_INLINES
 __STDIO_INLINE int
 getchar (void)
 {
   return _IO_getc (stdin);
 }
-#endif /* Optimizing.  */
+#endif /* Use extern inlines.  */
 
 #if defined __USE_POSIX || defined __USE_MISC
 /* These are defined in POSIX.1:1996.  */
 extern int getc_unlocked __P ((FILE *__stream));
 extern int getchar_unlocked __P ((void));
 
-# ifdef __OPTIMIZE__
+# ifdef __USE_EXTERN_INLINES
 __STDIO_INLINE int
 getc_unlocked (FILE *__fp)
 {
@@ -393,7 +393,7 @@ getchar_unlocked (void)
 {
   return _IO_getc_unlocked (stdin);
 }
-# endif /* Optimizing.  */
+# endif /* Use extern inlines.  */
 #endif /* Use POSIX or MISC.  */
 
 
@@ -408,25 +408,25 @@ extern int putchar __P ((int __c));
    so we always do the optimization for it.  */
 #define putc(_ch, _fp) _IO_putc (_ch, _fp)
 
-#if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__
+#ifdef __USE_EXTERN_INLINES
 __STDIO_INLINE int
 putchar (int __c)
 {
   return _IO_putc (__c, stdout);
 }
-#endif
+#endif	/* Use extern inlines.  */
 
 #ifdef __USE_MISC
 /* Faster version when locking is not necessary.  */
 extern int fputc_unlocked __P ((int __c, FILE *__stream));
 
-# ifdef __OPTIMIZE__
+# ifdef __USE_EXTERN_INLINES
 __STDIO_INLINE int
 fputc_unlocked (int __c, FILE *__stream)
 {
   return _IO_putc_unlocked (__c, __stream);
 }
-# endif /* Optimizing.  */
+# endif /* Use extern inlines.  */
 #endif /* Use MISC.  */
 
 #if defined __USE_POSIX || defined __USE_MISC
@@ -434,7 +434,7 @@ fputc_unlocked (int __c, FILE *__stream)
 extern int putc_unlocked __P ((int __c, FILE *__stream));
 extern int putchar_unlocked __P ((int __c));
 
-# ifdef __OPTIMIZE__
+# ifdef __USE_EXTERN_INLINES
 __STDIO_INLINE int
 putc_unlocked (int __c, FILE *__stream)
 {
@@ -446,7 +446,7 @@ putchar_unlocked (int __c)
 {
   return _IO_putc_unlocked (__c, stdout);
 }
-# endif /* Optimizing.  */
+# endif /* Use extern inlines.  */
 #endif /* Use POSIX or MISC.  */
 
 
@@ -489,13 +489,13 @@ extern _IO_ssize_t getdelim __P ((char **__lineptr, size_t *__n,
 extern _IO_ssize_t getline __P ((char **__lineptr, size_t *__n,
 				 FILE *__stream));
 
-# if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__
+# ifdef __USE_EXTERN_INLINES
 __STDIO_INLINE _IO_ssize_t
 getline (char **__lineptr, size_t *__n, FILE *__stream)
 {
   return __getdelim (__lineptr, __n, '\n', __stream);
 }
-# endif /* Optimizing.  */
+# endif /* Use extern inlines.  */
 #endif
 
 
@@ -614,7 +614,7 @@ extern void clearerr_unlocked __P ((FILE *__stream));
 extern int feof_unlocked __P ((FILE *__stream));
 extern int ferror_unlocked __P ((FILE *__stream));
 
-# ifdef __OPTIMIZE__
+# ifdef __USE_EXTERN_INLINES
 __STDIO_INLINE int
 feof_unlocked (FILE *__stream)
 {
@@ -626,7 +626,7 @@ ferror_unlocked (FILE *__stream)
 {
   return _IO_ferror_unlocked (__stream);
 }
-# endif /* Optimizing.  */
+# endif /* Use extern inlines.  */
 #endif
 
 
diff --git a/math/math.h b/math/math.h
index 2ac6f11032..5381f29e9a 100644
--- a/math/math.h
+++ b/math/math.h
@@ -306,7 +306,7 @@ extern int matherr __P ((struct exception *__exc));
 
 
 /* Get machine-dependent inline versions (if there are any).  */
-#ifdef __OPTIMIZE__
+#ifdef __USE_EXTERN_INLINES
 # include <bits/mathinline.h>
 #endif
 
diff --git a/nis/nss_compat/compat-grp.c b/nis/nss_compat/compat-grp.c
index ca5abc4d2c..3ef2039e84 100644
--- a/nis/nss_compat/compat-grp.c
+++ b/nis/nss_compat/compat-grp.c
@@ -246,6 +246,7 @@ getgrent_next_nis (struct group *result, ent_t *ent, char *buffer,
   if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
     {
       ent->nis = 0;
+      *errnop = ENOENT;
       return NSS_STATUS_NOTFOUND;
     }
 
@@ -285,6 +286,7 @@ getgrent_next_nis (struct group *result, ent_t *ent, char *buffer,
 	      != YPERR_SUCCESS)
 	    {
 	      ent->nis = 0;
+	      *errnop = ENOENT;
 	      return NSS_STATUS_NOTFOUND;
 	    }
 
@@ -440,7 +442,10 @@ getgrnam_plusgroup (const char *name, struct group *result, char *buffer,
 
       if (yp_match (domain, "group.byname", name, strlen (name),
 		    &outval, &outvallen) != YPERR_SUCCESS)
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
 
       if (buflen < ((size_t) outvallen + 1))
 	{
@@ -485,7 +490,10 @@ getgrent_next_file (struct group *result, ent_t *ent,
 	  buffer[buflen - 1] = '\xff';
 	  p = fgets (buffer, buflen, ent->stream);
 	  if (p == NULL && feof (ent->stream))
-	    return NSS_STATUS_NOTFOUND;
+	    {
+	      *errnop = ENOENT;
+	      return NSS_STATUS_NOTFOUND;
+	    }
 	  if (p == NULL || buffer[buflen - 1] != '\xff')
 	    {
 	      fsetpos (ent->stream, &pos);
@@ -625,7 +633,10 @@ internal_getgrnam_r (const char *name, struct group *result, ent_t *ent,
 	  buffer[buflen - 1] = '\xff';
 	  p = fgets (buffer, buflen, ent->stream);
 	  if (p == NULL && feof (ent->stream))
-	    return NSS_STATUS_NOTFOUND;
+	    {
+	      *errnop = ENOENT;
+	      return NSS_STATUS_NOTFOUND;
+	    }
 	  if (p == NULL || buffer[buflen - 1] != '\xff')
 	    {
 	      fsetpos (ent->stream, &pos);
@@ -667,7 +678,10 @@ internal_getgrnam_r (const char *name, struct group *result, ent_t *ent,
       if (result->gr_name[0] == '-' && result->gr_name[1] != '\0')
 	{
 	  if (strcmp (&result->gr_name[1], name) == 0)
-	    return NSS_STATUS_NOTFOUND;
+	    {
+	      *errnop = ENOENT;
+	      return NSS_STATUS_NOTFOUND;
+	    }
 	  else
 	    continue;
 	}
@@ -828,7 +842,10 @@ internal_getgrgid_r (gid_t gid, struct group *result, ent_t *ent,
 	  buffer[buflen - 1] = '\xff';
 	  p = fgets (buffer, buflen, ent->stream);
 	  if (p == NULL && feof (ent->stream))
-	    return NSS_STATUS_NOTFOUND;
+	    {
+	      *errnop = ENOENT;
+	      return NSS_STATUS_NOTFOUND;
+	    }
 	  if (p == NULL || buffer[buflen - 1] != '\xff')
 	    {
 	      fsetpos (ent->stream, &pos);
diff --git a/nis/nss_compat/compat-initgroups.c b/nis/nss_compat/compat-initgroups.c
index 9def98ba52..97ddaeebab 100644
--- a/nis/nss_compat/compat-initgroups.c
+++ b/nis/nss_compat/compat-initgroups.c
@@ -228,6 +228,7 @@ getgrent_next_nis (struct group *result, ent_t *ent, char *buffer,
 			&outval, &outvallen) != YPERR_SUCCESS)
 	    {
 	      ent->nis = 0;
+	      *errnop = ENOENT;
 	      return NSS_STATUS_UNAVAIL;
 	    }
 
@@ -252,6 +253,7 @@ getgrent_next_nis (struct group *result, ent_t *ent, char *buffer,
 	      != YPERR_SUCCESS)
 	    {
 	      ent->nis = 0;
+	      *errnop = ENOENT;
 	      return NSS_STATUS_NOTFOUND;
 	    }
 
@@ -403,11 +405,17 @@ getgrnam_plusgroup (const char *name, struct group *result, char *buffer,
       int outvallen;
 
       if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
 
       if (yp_match (domain, "group.byname", name, strlen (name),
 		    &outval, &outvallen) != YPERR_SUCCESS)
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
 
       if (buflen < ((size_t) outvallen + 1))
 	{
@@ -452,7 +460,10 @@ getgrent_next_file (struct group *result, ent_t *ent,
 	  buffer[buflen - 1] = '\xff';
 	  p = fgets (buffer, buflen, ent->stream);
 	  if (p == NULL && feof (ent->stream))
-	    return NSS_STATUS_NOTFOUND;
+	    {
+	      *errnop = ENOENT;
+	      return NSS_STATUS_NOTFOUND;
+	    }
 	  if (p == NULL || buffer[buflen - 1] != '\xff')
 	    {
 	      fsetpos (ent->stream, &pos);
diff --git a/nis/nss_compat/compat-pwd.c b/nis/nss_compat/compat-pwd.c
index eec2634f3a..4cbf739d05 100644
--- a/nis/nss_compat/compat-pwd.c
+++ b/nis/nss_compat/compat-pwd.c
@@ -681,6 +681,7 @@ getpwent_next_nis (struct passwd *result, ent_t *ent, char *buffer,
 	    {
 	      ent->nis = 0;
 	      give_pwd_free (&ent->pwd);
+	      *errnop = ENOENT;
 	      return NSS_STATUS_NOTFOUND;
 	    }
 
@@ -790,7 +791,10 @@ getpwnam_plususer (const char *name, struct passwd *result, char *buffer,
 
       if (yp_match (domain, "passwd.byname", name, strlen (name),
 		    &outval, &outvallen) != YPERR_SUCCESS)
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
 
       if (buflen < ((size_t) outvallen + 1))
 	{
@@ -840,7 +844,10 @@ getpwent_next_file (struct passwd *result, ent_t *ent,
 	  buffer[buflen - 1] = '\xff';
 	  p = fgets (buffer, buflen, ent->stream);
 	  if (p == NULL && feof (ent->stream))
-	    return NSS_STATUS_NOTFOUND;
+	    {
+	      *errnop = ENOENT;
+	      return NSS_STATUS_NOTFOUND;
+	    }
 	  if (p == NULL || buffer[buflen - 1] != '\xff')
 	    {
 	      fsetpos (ent->stream, &pos);
@@ -915,7 +922,11 @@ getpwent_next_file (struct passwd *result, ent_t *ent,
 	  if (status == NSS_STATUS_RETURN)
 	    continue;
 	  else
-	    return status;
+	    {
+	      if (status == NSS_STATUS_NOTFOUND)
+		*errnop = ENOENT;
+	      return status;
+	    }
 	}
 
       /* -user */
@@ -1051,7 +1062,10 @@ internal_getpwnam_r (const char *name, struct passwd *result, ent_t *ent,
 	  buffer[buflen - 1] = '\xff';
 	  p = fgets (buffer, buflen, ent->stream);
 	  if (p == NULL && feof (ent->stream))
-	    return NSS_STATUS_NOTFOUND;
+	    {
+	      *errnop = ENOENT;
+	      return NSS_STATUS_NOTFOUND;
+	    }
 	  if (p == NULL || buffer[buflen - 1] != '\xff')
 	    {
 	      fsetpos (ent->stream, &pos);
@@ -1146,7 +1160,10 @@ internal_getpwnam_r (const char *name, struct passwd *result, ent_t *ent,
 	  && result->pw_name[1] != '@')
 	{
 	  if (strcmp (&result->pw_name[1], name) == 0)
-	    return NSS_STATUS_NOTFOUND;
+	    {
+	      *errnop = ENOENT;
+	      return NSS_STATUS_NOTFOUND;
+	    }
 	  else
 	    continue;
 	}
@@ -1196,7 +1213,10 @@ _nss_compat_getpwnam_r (const char *name, struct passwd *pwd,
   enum nss_status status;
 
   if (name[0] == '-' || name[0] == '+')
-    return NSS_STATUS_NOTFOUND;
+    {
+      *errnop = ENOENT;
+      return NSS_STATUS_NOTFOUND;
+    }
 
   __libc_lock_lock (lock);
 
diff --git a/nis/nss_compat/compat-spwd.c b/nis/nss_compat/compat-spwd.c
index 1d4216393a..cf117fa964 100644
--- a/nis/nss_compat/compat-spwd.c
+++ b/nis/nss_compat/compat-spwd.c
@@ -631,6 +631,7 @@ getspent_next_nis (struct spwd *result, ent_t *ent,
 	    {
 	      ent->nis = 0;
 	      give_spwd_free (&ent->pwd);
+	      *errnop = ENOENT;
 	      return NSS_STATUS_NOTFOUND;
 	    }
 
@@ -736,12 +737,16 @@ getspnam_plususer (const char *name, struct spwd *result, char *buffer,
       int outvallen;
 
       if (yp_get_default_domain (&domain) != YPERR_SUCCESS)
-	return NSS_STATUS_NOTFOUND;
-
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
       if (yp_match (domain, "shadow.byname", name, strlen (name),
 		    &outval, &outvallen)  != YPERR_SUCCESS)
-	return NSS_STATUS_NOTFOUND;
-
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
       if (buflen < ((size_t) outvallen + 1))
 	{
 	  free (outval);
@@ -791,7 +796,10 @@ getspent_next_file (struct spwd *result, ent_t *ent,
 	  buffer[buflen - 1] = '\xff';
 	  p = fgets (buffer, buflen, ent->stream);
 	  if (p == NULL && feof (ent->stream))
-	    return NSS_STATUS_NOTFOUND;
+	    {
+	      *errnop = ENOENT;
+	      return NSS_STATUS_NOTFOUND;
+	    }
 	  if (p == NULL || buffer[buflen - 1] != '\xff')
 	    {
 	      fsetpos (ent->stream, &pos);
@@ -999,7 +1007,10 @@ internal_getspnam_r (const char *name, struct spwd *result, ent_t *ent,
 	  buffer[buflen - 1] = '\xff';
 	  p = fgets (buffer, buflen, ent->stream);
 	  if (p == NULL && feof (ent->stream))
-	    return NSS_STATUS_NOTFOUND;
+	    {
+	      *errnop = ENOENT;
+	      return NSS_STATUS_NOTFOUND;
+	    }
 	  if (p == NULL || buffer[buflen - 1] != '\xff')
 	    {
 	      fsetpos (ent->stream, &pos);
@@ -1050,7 +1061,10 @@ internal_getspnam_r (const char *name, struct spwd *result, ent_t *ent,
 	    {
 	      if (user != NULL && user[0] != '-')
 		if (strcmp (user, name) == 0)
-		  return NSS_STATUS_NOTFOUND;
+		  {
+		    *errnop = ENOENT;
+		    return NSS_STATUS_NOTFOUND;
+		  }
 	    }
 	  __internal_endnetgrent (&netgrdata);
 	  continue;
diff --git a/nis/nss_nis/nis-alias.c b/nis/nss_nis/nis-alias.c
index 50f08d2e0c..d1dc992c83 100644
--- a/nis/nss_nis/nis-alias.c
+++ b/nis/nss_nis/nis-alias.c
@@ -167,7 +167,9 @@ internal_nis_getaliasent_r (struct aliasent *alias, char *buffer,
 				      &result, &len));
       if (retval != NSS_STATUS_SUCCESS)
 	{
-	  if (retval == NSS_STATUS_TRYAGAIN)
+	  if (retval == NSS_STATUS_NOTFOUND)
+	    *errnop = ENOENT;
+	  else if (retval == NSS_STATUS_TRYAGAIN)
             *errnop = errno;
           return retval;
         }
diff --git a/nis/nss_nis/nis-ethers.c b/nis/nss_nis/nis-ethers.c
index a5723747fc..c95f766469 100644
--- a/nis/nss_nis/nis-ethers.c
+++ b/nis/nss_nis/nis-ethers.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
 
@@ -158,7 +158,10 @@ internal_nis_getetherent_r (struct ether *eth, char *buffer, size_t buflen,
       char *p;
 
       if (next == NULL)
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
       p = strncpy (buffer, next->val, buflen);
 
       while (isspace (*p))
@@ -212,7 +215,9 @@ _nss_nis_gethostton_r (const char *name, struct ether *eth,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
         *errnop = errno;
       return retval;
     }
@@ -297,7 +302,10 @@ _nss_nis_getntohost_r (struct ether_addr *addr, struct ether *eth,
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
       else
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
     }
   return NSS_STATUS_SUCCESS;
 }
diff --git a/nis/nss_nis/nis-grp.c b/nis/nss_nis/nis-grp.c
index 40d45825e4..6dca66e4df 100644
--- a/nis/nss_nis/nis-grp.c
+++ b/nis/nss_nis/nis-grp.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
 
@@ -104,7 +104,9 @@ internal_nis_getgrent_r (struct group *grp, char *buffer, size_t buflen,
 
       if (retval != NSS_STATUS_SUCCESS)
         {
-          if (retval == NSS_STATUS_TRYAGAIN)
+	  if (retval == NSS_STATUS_NOTFOUND)
+	    *errnop = ENOENT;
+          else if (retval == NSS_STATUS_TRYAGAIN)
             *errnop = errno;
           return retval;
         }
@@ -178,7 +180,9 @@ _nss_nis_getgrnam_r (const char *name, struct group *grp,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = EAGAIN;
+      else if (retval == NSS_STATUS_TRYAGAIN)
         *errnop = errno;
       return retval;
     }
@@ -202,7 +206,10 @@ _nss_nis_getgrnam_r (const char *name, struct group *grp,
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
       else
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = EAGAIN;
+	  return NSS_STATUS_NOTFOUND;
+	}
     }
   return NSS_STATUS_SUCCESS;
 }
@@ -227,7 +234,9 @@ _nss_nis_getgrgid_r (gid_t gid, struct group *grp,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
         *errnop = errno;
       return retval;
     }
@@ -251,7 +260,10 @@ _nss_nis_getgrgid_r (gid_t gid, struct group *grp,
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
       else
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
     }
   return NSS_STATUS_SUCCESS;
 }
diff --git a/nis/nss_nis/nis-hosts.c b/nis/nss_nis/nis-hosts.c
index 4abc613bbb..d791b98b3e 100644
--- a/nis/nss_nis/nis-hosts.c
+++ b/nis/nss_nis/nis-hosts.c
@@ -176,6 +176,7 @@ internal_nis_gethostent_r (struct hostent *host, char *buffer,
 	      *h_errnop = TRY_AGAIN;
 	      break;
 	    case NSS_STATUS_NOTFOUND:
+	      *errnop = ENOENT;
 	      *h_errnop = HOST_NOT_FOUND;
 	      break;
 	    default:
diff --git a/nis/nss_nis/nis-initgroups.c b/nis/nss_nis/nis-initgroups.c
index 5960c80502..b69fea4e85 100644
--- a/nis/nss_nis/nis-initgroups.c
+++ b/nis/nss_nis/nis-initgroups.c
@@ -112,7 +112,10 @@ internal_getgrent_r (struct group *grp, char *buffer, size_t buflen,
   do
     {
       if (intern->next == NULL)
-        return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
       p = strncpy (buffer, intern->next->val, buflen);
       while (isspace (*p))
         ++p;
diff --git a/nis/nss_nis/nis-network.c b/nis/nss_nis/nis-network.c
index 802c03229e..7a1b65e584 100644
--- a/nis/nss_nis/nis-network.c
+++ b/nis/nss_nis/nis-network.c
@@ -104,7 +104,9 @@ internal_nis_getnetent_r (struct netent *net, char *buffer, size_t buflen,
 
       if (retval != NSS_STATUS_SUCCESS)
         {
-          if (retval == NSS_STATUS_TRYAGAIN)
+	  if (retval == NSS_STATUS_NOTFOUND)
+	    *errnop = ENOENT;
+          else if (retval == NSS_STATUS_TRYAGAIN)
 	    {
 	      *herrnop = NETDB_INTERNAL;
 	      *errnop = errno;
@@ -203,7 +205,9 @@ _nss_nis_getnetbyname_r (const char *name, struct netent *net, char *buffer,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
 	{
 	  *errnop = errno;
 	  *herrnop = NETDB_INTERNAL;
@@ -233,7 +237,10 @@ _nss_nis_getnetbyname_r (const char *name, struct netent *net, char *buffer,
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
       else
-        return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
     }
   else
     return NSS_STATUS_SUCCESS;
@@ -281,7 +288,10 @@ _nss_nis_getnetbyaddr_r (unsigned long addr, int type, struct netent *net,
 		    continue;
 		  }
 		else
-		  return NSS_STATUS_NOTFOUND;
+		  {
+		    *errnop = ENOENT;
+		    return NSS_STATUS_NOTFOUND;
+		  }
 	      }
 	    else
 	      {
@@ -313,7 +323,10 @@ _nss_nis_getnetbyaddr_r (unsigned long addr, int type, struct netent *net,
 	    if (parse_res == -1)
 	      return NSS_STATUS_TRYAGAIN;
 	    else
-	      return NSS_STATUS_NOTFOUND;
+	      {
+		*errnop = ENOENT;
+		return NSS_STATUS_NOTFOUND;
+	      }
 	  }
 	else
 	  return NSS_STATUS_SUCCESS;
diff --git a/nis/nss_nis/nis-proto.c b/nis/nss_nis/nis-proto.c
index 3af0f4e896..e65bfa7c8d 100644
--- a/nis/nss_nis/nis-proto.c
+++ b/nis/nss_nis/nis-proto.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
 
@@ -150,7 +150,10 @@ internal_nis_getprotoent_r (struct protoent *proto,
       char *p;
 
       if (next == NULL)
-        return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
       p = strncpy (buffer, next->val, buflen);
 
       while (isspace (*p))
@@ -204,7 +207,9 @@ _nss_nis_getprotobyname_r (const char *name, struct protoent *proto,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
 	*errnop = errno;
       return retval;
     }
@@ -228,7 +233,10 @@ _nss_nis_getprotobyname_r (const char *name, struct protoent *proto,
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
       else
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
     }
   return NSS_STATUS_SUCCESS;
 }
@@ -253,7 +261,9 @@ _nss_nis_getprotobynumber_r (int number, struct protoent *proto,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
 	*errnop = errno;
       return retval;
     }
@@ -277,7 +287,10 @@ _nss_nis_getprotobynumber_r (int number, struct protoent *proto,
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
       else
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
     }
   return NSS_STATUS_SUCCESS;
 }
diff --git a/nis/nss_nis/nis-publickey.c b/nis/nss_nis/nis-publickey.c
index 1ab041f435..73afd442a9 100644
--- a/nis/nss_nis/nis-publickey.c
+++ b/nis/nss_nis/nis-publickey.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
 
@@ -30,7 +30,9 @@ extern int xdecrypt (char *, char *);
 
 #include "nss-nis.h"
 
-/* If we haven't found the entry, we give a SUCCESS and an empty key back. */
+/* If we haven't found the entry, we give a SUCCESS and an empty key back.
+   Solaris docu says: sizeof (pkey) == HEXKEYBYTES + 1.
+*/
 enum nss_status
 _nss_nis_getpublickey (const char *netname, char *pkey, int *errnop)
 {
@@ -56,7 +58,9 @@ _nss_nis_getpublickey (const char *netname, char *pkey, int *errnop)
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
 	*errnop = errno;
       return retval;
     }
@@ -66,7 +70,8 @@ _nss_nis_getpublickey (const char *netname, char *pkey, int *errnop)
       char *p = strchr (result, ':');
       if (p != NULL)
 	*p = 0;
-      strcpy (pkey, result);
+      strncpy (pkey, result, HEXKEYBYTES + 1);
+      pkey[HEXKEYBYTES] = '\0';
     }
   return NSS_STATUS_SUCCESS;
 }
@@ -76,7 +81,7 @@ _nss_nis_getsecretkey (const char *netname, char *skey, char *passwd,
 		       int *errnop)
 {
   enum nss_status retval;
-  char buf[1024];
+  char buf[2 * (HEXKEYBYTES + 1)];
   char *domain, *result;
   int len;
 
@@ -98,7 +103,9 @@ _nss_nis_getsecretkey (const char *netname, char *skey, char *passwd,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
 	*errnop = errno;
       return retval;
     }
@@ -109,15 +116,16 @@ _nss_nis_getsecretkey (const char *netname, char *skey, char *passwd,
       if (p == NULL)
 	return NSS_STATUS_SUCCESS;
 
-      p++;
-      strcpy (buf, p);
+      ++p;
+      strncpy (buf, p, 2 * (HEXKEYBYTES + 1));
+      buf[2 * (HEXKEYBYTES + 1)] = '\0';
       if (!xdecrypt (buf, passwd))
 	return NSS_STATUS_SUCCESS;
 
       if (memcmp (buf, &(buf[HEXKEYBYTES]), KEYCHECKSUMSIZE) != 0)
 	return NSS_STATUS_SUCCESS;
 
-      buf[HEXKEYBYTES] = 0;
+      buf[HEXKEYBYTES] = '\0';
       strcpy (skey, buf);
     }
   return NSS_STATUS_SUCCESS;
diff --git a/nis/nss_nis/nis-pwd.c b/nis/nss_nis/nis-pwd.c
index b70091508c..614637a173 100644
--- a/nis/nss_nis/nis-pwd.c
+++ b/nis/nss_nis/nis-pwd.c
@@ -106,7 +106,9 @@ internal_nis_getpwent_r (struct passwd *pwd, char *buffer, size_t buflen,
 
       if (retval != NSS_STATUS_SUCCESS)
         {
-          if (retval == NSS_STATUS_TRYAGAIN)
+	  if (retval == NSS_STATUS_NOTFOUND)
+	    *errnop = ENOENT;
+          else if (retval == NSS_STATUS_TRYAGAIN)
             *errnop = errno;
           return retval;
         }
@@ -231,7 +233,9 @@ _nss_nis_getpwnam_r (const char *name, struct passwd *pwd,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
 	*errnop = errno;
       return retval;
     }
@@ -302,7 +306,10 @@ _nss_nis_getpwnam_r (const char *name, struct passwd *pwd,
       if (parse_res == -1)
         return NSS_STATUS_TRYAGAIN;
       else
-        return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
     }
   else
     return NSS_STATUS_SUCCESS;
@@ -329,7 +336,9 @@ _nss_nis_getpwuid_r (uid_t uid, struct passwd *pwd,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
 	*errnop = errno;
       return retval;
     }
@@ -400,8 +409,11 @@ _nss_nis_getpwuid_r (uid_t uid, struct passwd *pwd,
     {
       if (parse_res == -1)
         return NSS_STATUS_TRYAGAIN;
-      else
-        return NSS_STATUS_NOTFOUND;
+     else
+       {
+	 *errnop = ENOENT;
+	 return NSS_STATUS_NOTFOUND;
+       }
     }
   else
     return NSS_STATUS_SUCCESS;
diff --git a/nis/nss_nis/nis-rpc.c b/nis/nss_nis/nis-rpc.c
index 879e90af6d..a56ad037fe 100644
--- a/nis/nss_nis/nis-rpc.c
+++ b/nis/nss_nis/nis-rpc.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
 
@@ -167,7 +167,10 @@ internal_nis_getrpcent_r (struct rpcent *rpc, char *buffer, size_t buflen,
   do
     {
       if (data->next == NULL)
-        return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
       p = strncpy (buffer, data->next->val, buflen);
       while (isspace (*p))
         ++p;
@@ -242,7 +245,10 @@ _nss_nis_getrpcbyname_r (const char *name, struct rpcent *rpc,
   internal_nis_endrpcent (&data);
 
   if (!found && status == NSS_STATUS_SUCCESS)
-    return NSS_STATUS_NOTFOUND;
+    {
+      *errnop = ENOENT;
+      return NSS_STATUS_NOTFOUND;
+    }
   else
     return status;
 }
@@ -267,7 +273,9 @@ _nss_nis_getrpcbynumber_r (int number, struct rpcent *rpc,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
 	*errnop = errno;
       return retval;
     }
@@ -292,7 +300,10 @@ _nss_nis_getrpcbynumber_r (int number, struct rpcent *rpc,
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
       else
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
     }
   else
     return NSS_STATUS_SUCCESS;
diff --git a/nis/nss_nis/nis-service.c b/nis/nss_nis/nis-service.c
index dfae9f7be2..fac62a9679 100644
--- a/nis/nss_nis/nis-service.c
+++ b/nis/nss_nis/nis-service.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
 
@@ -166,7 +166,10 @@ internal_nis_getservent_r (struct servent *serv, char *buffer,
   do
     {
       if (data->next == NULL)
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
       p = strncpy (buffer, data->next->val, buflen);
            while (isspace (*p))
         ++p;
@@ -236,7 +239,10 @@ _nss_nis_getservbyname_r (const char *name, char *protocol,
   internal_nis_endservent (&data);
 
   if (!found && status == NSS_STATUS_SUCCESS)
-    return NSS_STATUS_NOTFOUND;
+    {
+      *errnop = ENOENT;
+      return NSS_STATUS_NOTFOUND;
+    }
   else
     return status;
 }
@@ -270,7 +276,10 @@ _nss_nis_getservbyport_r (int port, char *protocol, struct servent *serv,
   internal_nis_endservent (&data);
 
   if (!found && status == NSS_STATUS_SUCCESS)
-    return NSS_STATUS_NOTFOUND;
+    {
+      *errnop = ENOENT;
+      return NSS_STATUS_NOTFOUND;
+    }
   else
     return status;
 }
diff --git a/nis/nss_nis/nis-spwd.c b/nis/nss_nis/nis-spwd.c
index 452f91dc0b..37ea2f9dbf 100644
--- a/nis/nss_nis/nis-spwd.c
+++ b/nis/nss_nis/nis-spwd.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1996.
 
@@ -104,7 +104,9 @@ internal_nis_getspent_r (struct spwd *sp, char *buffer, size_t buflen,
 
       if (retval != NSS_STATUS_SUCCESS)
         {
-          if (retval == NSS_STATUS_TRYAGAIN)
+          if (retval == NSS_STATUS_NOTFOUND)
+	    *errnop = ENOENT;
+	  else if (retval == NSS_STATUS_TRYAGAIN)
 	    *errnop = errno;
           return retval;
         }
@@ -178,7 +180,9 @@ _nss_nis_getspnam_r (const char *name, struct spwd *sp,
 
   if (retval != NSS_STATUS_SUCCESS)
     {
-      if (retval == NSS_STATUS_TRYAGAIN)
+      if (retval == NSS_STATUS_NOTFOUND)
+	*errnop = ENOENT;
+      else if (retval == NSS_STATUS_TRYAGAIN)
 	*errnop = errno;
       return retval;
     }
@@ -202,7 +206,10 @@ _nss_nis_getspnam_r (const char *name, struct spwd *sp,
       if (parse_res == -1)
 	return NSS_STATUS_TRYAGAIN;
       else
-	return NSS_STATUS_NOTFOUND;
+	{
+	  *errnop = ENOENT;
+	  return NSS_STATUS_NOTFOUND;
+	}
     }
   return NSS_STATUS_SUCCESS;
 }
diff --git a/nis/rpcsvc/yp.h b/nis/rpcsvc/yp.h
index 40914c5813..556e57476f 100644
--- a/nis/rpcsvc/yp.h
+++ b/nis/rpcsvc/yp.h
@@ -30,6 +30,7 @@
 #ifndef __RPCSVC_YP_H__
 #define __RPCSVC_YP_H__
 
+#include <features.h>
 #include <rpc/rpc.h>
 
 #define YPMAXRECORD 1024
@@ -51,14 +52,6 @@ enum ypstat {
 	YP_VERS = -8,
 };
 typedef enum ypstat ypstat;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypstat(XDR *, ypstat*);
-#elif __STDC__
-extern  bool_t xdr_ypstat(XDR *, ypstat*);
-#else /* Old Style C */
-bool_t xdr_ypstat();
-#endif /* Old Style C */
-
 
 enum ypxfrstat {
 	YPXFR_SUCC = 1,
@@ -79,543 +72,266 @@ enum ypxfrstat {
 	YPXFR_REFUSED = -14,
 };
 typedef enum ypxfrstat ypxfrstat;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypxfrstat(XDR *, ypxfrstat*);
-#elif __STDC__
-extern  bool_t xdr_ypxfrstat(XDR *, ypxfrstat*);
-#else /* Old Style C */
-bool_t xdr_ypxfrstat();
-#endif /* Old Style C */
-
 
 typedef char *domainname;
-#ifdef __cplusplus
-extern "C" bool_t xdr_domainname(XDR *, domainname*);
-#elif __STDC__
-extern  bool_t xdr_domainname(XDR *, domainname*);
-#else /* Old Style C */
-bool_t xdr_domainname();
-#endif /* Old Style C */
-
-
 typedef char *mapname;
-#ifdef __cplusplus
-extern "C" bool_t xdr_mapname(XDR *, mapname*);
-#elif __STDC__
-extern  bool_t xdr_mapname(XDR *, mapname*);
-#else /* Old Style C */
-bool_t xdr_mapname();
-#endif /* Old Style C */
-
-
 typedef char *peername;
-#ifdef __cplusplus
-extern "C" bool_t xdr_peername(XDR *, peername*);
-#elif __STDC__
-extern  bool_t xdr_peername(XDR *, peername*);
-#else /* Old Style C */
-bool_t xdr_peername();
-#endif /* Old Style C */
-
 
 typedef struct {
-	u_int keydat_len;
-	char *keydat_val;
+  u_int keydat_len;
+  char *keydat_val;
 } keydat;
-#ifdef __cplusplus
-extern "C" bool_t xdr_keydat(XDR *, keydat*);
-#elif __STDC__
-extern  bool_t xdr_keydat(XDR *, keydat*);
-#else /* Old Style C */
-bool_t xdr_keydat();
-#endif /* Old Style C */
-
 
 typedef struct {
-	u_int valdat_len;
-	char *valdat_val;
+  u_int valdat_len;
+  char *valdat_val;
 } valdat;
-#ifdef __cplusplus
-extern "C" bool_t xdr_valdat(XDR *, valdat*);
-#elif __STDC__
-extern  bool_t xdr_valdat(XDR *, valdat*);
-#else /* Old Style C */
-bool_t xdr_valdat();
-#endif /* Old Style C */
-
 
 struct ypmap_parms {
-	domainname domain;
-	mapname map;
-	u_int ordernum;
-	peername peer;
+  domainname domain;
+  mapname map;
+  u_int ordernum;
+  peername peer;
 };
 typedef struct ypmap_parms ypmap_parms;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypmap_parms(XDR *, ypmap_parms*);
-#elif __STDC__
-extern  bool_t xdr_ypmap_parms(XDR *, ypmap_parms*);
-#else /* Old Style C */
-bool_t xdr_ypmap_parms();
-#endif /* Old Style C */
-
 
 struct ypreq_key {
-	domainname domain;
-	mapname map;
-	keydat key;
+  domainname domain;
+  mapname map;
+  keydat key;
 };
 typedef struct ypreq_key ypreq_key;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypreq_key(XDR *, ypreq_key*);
-#elif __STDC__
-extern  bool_t xdr_ypreq_key(XDR *, ypreq_key*);
-#else /* Old Style C */
-bool_t xdr_ypreq_key();
-#endif /* Old Style C */
-
 
 struct ypreq_nokey {
-	domainname domain;
-	mapname map;
+  domainname domain;
+  mapname map;
 };
 typedef struct ypreq_nokey ypreq_nokey;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypreq_nokey(XDR *, ypreq_nokey*);
-#elif __STDC__
-extern  bool_t xdr_ypreq_nokey(XDR *, ypreq_nokey*);
-#else /* Old Style C */
-bool_t xdr_ypreq_nokey();
-#endif /* Old Style C */
-
 
 struct ypreq_xfr {
-	ypmap_parms map_parms;
-	u_int transid;
-	u_int prog;
-	u_int port;
+  ypmap_parms map_parms;
+  u_int transid;
+  u_int prog;
+  u_int port;
 };
 typedef struct ypreq_xfr ypreq_xfr;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypreq_xfr(XDR *, ypreq_xfr*);
-#elif __STDC__
-extern  bool_t xdr_ypreq_xfr(XDR *, ypreq_xfr*);
-#else /* Old Style C */
-bool_t xdr_ypreq_xfr();
-#endif /* Old Style C */
-
 
 struct ypresp_val {
-	ypstat stat;
-	valdat val;
+  ypstat stat;
+  valdat val;
 };
 typedef struct ypresp_val ypresp_val;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_val(XDR *, ypresp_val*);
-#elif __STDC__
-extern  bool_t xdr_ypresp_val(XDR *, ypresp_val*);
-#else /* Old Style C */
-bool_t xdr_ypresp_val();
-#endif /* Old Style C */
-
 
 struct ypresp_key_val {
-	ypstat stat;
+  ypstat stat;
 #ifdef STUPID_SUN_BUG
-	/* This is the form as distributed by Sun.  But even the Sun NIS
-	   servers expect the values in the other order.  So their
-	   implementation somehow must change the order internally.  We
-	   don't want to follow this bad example since the user should be
-	   able to use rpcgen on this file.  */
-	keydat key;
-	valdat val;
+  /* This is the form as distributed by Sun.  But even the Sun NIS
+     servers expect the values in the other order.  So their
+     implementation somehow must change the order internally.  We
+     don't want to follow this bad example since the user should be
+     able to use rpcgen on this file.  */
+  keydat key;
+  valdat val;
 #else
-	valdat val;
-	keydat key;
+  valdat val;
+  keydat key;
 #endif
 };
 typedef struct ypresp_key_val ypresp_key_val;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_key_val(XDR *, ypresp_key_val*);
-#elif __STDC__
-extern  bool_t xdr_ypresp_key_val(XDR *, ypresp_key_val*);
-#else /* Old Style C */
-bool_t xdr_ypresp_key_val();
-#endif /* Old Style C */
-
 
 struct ypresp_master {
-	ypstat stat;
-	peername peer;
+  ypstat stat;
+  peername peer;
 };
 typedef struct ypresp_master ypresp_master;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_master(XDR *, ypresp_master*);
-#elif __STDC__
-extern  bool_t xdr_ypresp_master(XDR *, ypresp_master*);
-#else /* Old Style C */
-bool_t xdr_ypresp_master();
-#endif /* Old Style C */
-
 
 struct ypresp_order {
-	ypstat stat;
-	u_int ordernum;
+  ypstat stat;
+  u_int ordernum;
 };
 typedef struct ypresp_order ypresp_order;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_order(XDR *, ypresp_order*);
-#elif __STDC__
-extern  bool_t xdr_ypresp_order(XDR *, ypresp_order*);
-#else /* Old Style C */
-bool_t xdr_ypresp_order();
-#endif /* Old Style C */
-
 
 struct ypresp_all {
-	bool_t more;
-	union {
-		ypresp_key_val val;
-	} ypresp_all_u;
+  bool_t more;
+  union {
+    ypresp_key_val val;
+  } ypresp_all_u;
 };
 typedef struct ypresp_all ypresp_all;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_all(XDR *, ypresp_all*);
-#elif __STDC__
-extern  bool_t xdr_ypresp_all(XDR *, ypresp_all*);
-#else /* Old Style C */
-bool_t xdr_ypresp_all();
-#endif /* Old Style C */
-
 
 struct ypresp_xfr {
-	u_int transid;
-	ypxfrstat xfrstat;
+  u_int transid;
+  ypxfrstat xfrstat;
 };
 typedef struct ypresp_xfr ypresp_xfr;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_xfr(XDR *, ypresp_xfr*);
-#elif __STDC__
-extern  bool_t xdr_ypresp_xfr(XDR *, ypresp_xfr*);
-#else /* Old Style C */
-bool_t xdr_ypresp_xfr();
-#endif /* Old Style C */
-
 
 struct ypmaplist {
-	mapname map;
-	struct ypmaplist *next;
+  mapname map;
+  struct ypmaplist *next;
 };
 typedef struct ypmaplist ypmaplist;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypmaplist(XDR *, ypmaplist*);
-#elif __STDC__
-extern  bool_t xdr_ypmaplist(XDR *, ypmaplist*);
-#else /* Old Style C */
-bool_t xdr_ypmaplist();
-#endif /* Old Style C */
-
 
 struct ypresp_maplist {
-	ypstat stat;
-	ypmaplist *maps;
+  ypstat stat;
+  ypmaplist *maps;
 };
 typedef struct ypresp_maplist ypresp_maplist;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypresp_maplist(XDR *, ypresp_maplist*);
-#elif __STDC__
-extern  bool_t xdr_ypresp_maplist(XDR *, ypresp_maplist*);
-#else /* Old Style C */
-bool_t xdr_ypresp_maplist();
-#endif /* Old Style C */
-
 
 enum yppush_status {
-	YPPUSH_SUCC = 1,
-	YPPUSH_AGE = 2,
-	YPPUSH_NOMAP = -1,
-	YPPUSH_NODOM = -2,
-	YPPUSH_RSRC = -3,
-	YPPUSH_RPC = -4,
-	YPPUSH_MADDR = -5,
-	YPPUSH_YPERR = -6,
-	YPPUSH_BADARGS = -7,
-	YPPUSH_DBM = -8,
-	YPPUSH_FILE = -9,
-	YPPUSH_SKEW = -10,
-	YPPUSH_CLEAR = -11,
-	YPPUSH_FORCE = -12,
-	YPPUSH_XFRERR = -13,
-	YPPUSH_REFUSED = -14,
+  YPPUSH_SUCC = 1,
+  YPPUSH_AGE = 2,
+  YPPUSH_NOMAP = -1,
+  YPPUSH_NODOM = -2,
+  YPPUSH_RSRC = -3,
+  YPPUSH_RPC = -4,
+  YPPUSH_MADDR = -5,
+  YPPUSH_YPERR = -6,
+  YPPUSH_BADARGS = -7,
+  YPPUSH_DBM = -8,
+  YPPUSH_FILE = -9,
+  YPPUSH_SKEW = -10,
+  YPPUSH_CLEAR = -11,
+  YPPUSH_FORCE = -12,
+  YPPUSH_XFRERR = -13,
+  YPPUSH_REFUSED = -14,
 };
 typedef enum yppush_status yppush_status;
-#ifdef __cplusplus
-extern "C" bool_t xdr_yppush_status(XDR *, yppush_status*);
-#elif __STDC__
-extern  bool_t xdr_yppush_status(XDR *, yppush_status*);
-#else /* Old Style C */
-bool_t xdr_yppush_status();
-#endif /* Old Style C */
-
 
 struct yppushresp_xfr {
-	u_int transid;
-	yppush_status status;
+  u_int transid;
+  yppush_status status;
 };
 typedef struct yppushresp_xfr yppushresp_xfr;
-#ifdef __cplusplus
-extern "C" bool_t xdr_yppushresp_xfr(XDR *, yppushresp_xfr*);
-#elif __STDC__
-extern  bool_t xdr_yppushresp_xfr(XDR *, yppushresp_xfr*);
-#else /* Old Style C */
-bool_t xdr_yppushresp_xfr();
-#endif /* Old Style C */
-
 
 enum ypbind_resptype {
-	YPBIND_SUCC_VAL = 1,
-	YPBIND_FAIL_VAL = 2,
+  YPBIND_SUCC_VAL = 1,
+  YPBIND_FAIL_VAL = 2,
 };
 typedef enum ypbind_resptype ypbind_resptype;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypbind_resptype(XDR *, ypbind_resptype*);
-#elif __STDC__
-extern  bool_t xdr_ypbind_resptype(XDR *, ypbind_resptype*);
-#else /* Old Style C */
-bool_t xdr_ypbind_resptype();
-#endif /* Old Style C */
-
 
 struct ypbind_binding {
-	char ypbind_binding_addr[4];
-	char ypbind_binding_port[2];
+  char ypbind_binding_addr[4];
+  char ypbind_binding_port[2];
 };
 typedef struct ypbind_binding ypbind_binding;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypbind_binding(XDR *, ypbind_binding*);
-#elif __STDC__
-extern  bool_t xdr_ypbind_binding(XDR *, ypbind_binding*);
-#else /* Old Style C */
-bool_t xdr_ypbind_binding();
-#endif /* Old Style C */
-
 
 struct ypbind_resp {
-	ypbind_resptype ypbind_status;
-	union {
-		u_int ypbind_error;
-		ypbind_binding ypbind_bindinfo;
-	} ypbind_resp_u;
+  ypbind_resptype ypbind_status;
+  union {
+    u_int ypbind_error;
+    ypbind_binding ypbind_bindinfo;
+  } ypbind_resp_u;
 };
 typedef struct ypbind_resp ypbind_resp;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypbind_resp(XDR *, ypbind_resp*);
-#elif __STDC__
-extern  bool_t xdr_ypbind_resp(XDR *, ypbind_resp*);
-#else /* Old Style C */
-bool_t xdr_ypbind_resp();
-#endif /* Old Style C */
 
 #define YPBIND_ERR_ERR 1
 #define YPBIND_ERR_NOSERV 2
 #define YPBIND_ERR_RESC 3
 
 struct ypbind_setdom {
-	domainname ypsetdom_domain;
-	ypbind_binding ypsetdom_binding;
-	u_int ypsetdom_vers;
+  domainname ypsetdom_domain;
+  ypbind_binding ypsetdom_binding;
+  u_int ypsetdom_vers;
 };
 typedef struct ypbind_setdom ypbind_setdom;
-#ifdef __cplusplus
-extern "C" bool_t xdr_ypbind_setdom(XDR *, ypbind_setdom*);
-#elif __STDC__
-extern  bool_t xdr_ypbind_setdom(XDR *, ypbind_setdom*);
-#else /* Old Style C */
-bool_t xdr_ypbind_setdom();
-#endif /* Old Style C */
 
+__BEGIN_DECLS
 
 #define YPPROG ((u_long)100004)
 #define YPVERS ((u_long)2)
 
-#ifdef __cplusplus
 #define YPPROC_NULL ((u_long)0)
-extern "C" void * ypproc_null_2(void *, CLIENT *);
-extern "C" void * ypproc_null_2_svc(void *, struct svc_req *);
+extern  void *ypproc_null_2 __P ((void *, CLIENT *));
+extern  void *ypproc_null_2_svc __P ((void *, struct svc_req *));
 #define YPPROC_DOMAIN ((u_long)1)
-extern "C" bool_t * ypproc_domain_2(domainname *, CLIENT *);
-extern "C" bool_t * ypproc_domain_2_svc(domainname *, struct svc_req *);
+extern  bool_t *ypproc_domain_2 __P ((domainname *, CLIENT *));
+extern  bool_t *ypproc_domain_2_svc __P ((domainname *, struct svc_req *));
 #define YPPROC_DOMAIN_NONACK ((u_long)2)
-extern "C" bool_t * ypproc_domain_nonack_2(domainname *, CLIENT *);
-extern "C" bool_t * ypproc_domain_nonack_2_svc(domainname *, struct svc_req *);
+extern  bool_t *ypproc_domain_nonack_2 __P ((domainname *, CLIENT *));
+extern  bool_t *ypproc_domain_nonack_2_svc __P ((domainname *, struct svc_req *));
 #define YPPROC_MATCH ((u_long)3)
-extern "C" ypresp_val * ypproc_match_2(ypreq_key *, CLIENT *);
-extern "C" ypresp_val * ypproc_match_2_svc(ypreq_key *, struct svc_req *);
+extern  ypresp_val *ypproc_match_2 __P ((ypreq_key *, CLIENT *));
+extern  ypresp_val *ypproc_match_2_svc __P ((ypreq_key *, struct svc_req *));
 #define YPPROC_FIRST ((u_long)4)
-extern "C" ypresp_key_val * ypproc_first_2(ypreq_key *, CLIENT *);
-extern "C" ypresp_key_val * ypproc_first_2_svc(ypreq_key *, struct svc_req *);
+extern  ypresp_key_val *ypproc_first_2 __P ((ypreq_key *, CLIENT *));
+extern  ypresp_key_val *ypproc_first_2_svc __P ((ypreq_key *, struct svc_req *));
 #define YPPROC_NEXT ((u_long)5)
-extern "C" ypresp_key_val * ypproc_next_2(ypreq_key *, CLIENT *);
-extern "C" ypresp_key_val * ypproc_next_2_svc(ypreq_key *, struct svc_req *);
+extern  ypresp_key_val *ypproc_next_2 __P ((ypreq_key *, CLIENT *));
+extern  ypresp_key_val *ypproc_next_2_svc __P ((ypreq_key *, struct svc_req *));
 #define YPPROC_XFR ((u_long)6)
-extern "C" ypresp_xfr * ypproc_xfr_2(ypreq_xfr *, CLIENT *);
-extern "C" ypresp_xfr * ypproc_xfr_2_svc(ypreq_xfr *, struct svc_req *);
+extern  ypresp_xfr *ypproc_xfr_2 __P ((ypreq_xfr *, CLIENT *));
+extern  ypresp_xfr *ypproc_xfr_2_svc __P ((ypreq_xfr *, struct svc_req *));
 #define YPPROC_CLEAR ((u_long)7)
-extern "C" void * ypproc_clear_2(void *, CLIENT *);
-extern "C" void * ypproc_clear_2_svc(void *, struct svc_req *);
+extern  void *ypproc_clear_2 __P ((void *, CLIENT *));
+extern  void *ypproc_clear_2_svc __P ((void *, struct svc_req *));
 #define YPPROC_ALL ((u_long)8)
-extern "C" ypresp_all * ypproc_all_2(ypreq_nokey *, CLIENT *);
-extern "C" ypresp_all * ypproc_all_2_svc(ypreq_nokey *, struct svc_req *);
+extern  ypresp_all *ypproc_all_2 __P ((ypreq_nokey *, CLIENT *));
+extern  ypresp_all *ypproc_all_2_svc __P ((ypreq_nokey *, struct svc_req *));
 #define YPPROC_MASTER ((u_long)9)
-extern "C" ypresp_master * ypproc_master_2(ypreq_nokey *, CLIENT *);
-extern "C" ypresp_master * ypproc_master_2_svc(ypreq_nokey *, struct svc_req *);
+extern  ypresp_master *ypproc_master_2 __P ((ypreq_nokey *, CLIENT *));
+extern  ypresp_master *ypproc_master_2_svc __P ((ypreq_nokey *, struct svc_req *));
 #define YPPROC_ORDER ((u_long)10)
-extern "C" ypresp_order * ypproc_order_2(ypreq_nokey *, CLIENT *);
-extern "C" ypresp_order * ypproc_order_2_svc(ypreq_nokey *, struct svc_req *);
+extern  ypresp_order *ypproc_order_2 __P ((ypreq_nokey *, CLIENT *));
+extern  ypresp_order *ypproc_order_2_svc __P ((ypreq_nokey *, struct svc_req *));
 #define YPPROC_MAPLIST ((u_long)11)
-extern "C" ypresp_maplist * ypproc_maplist_2(domainname *, CLIENT *);
-extern "C" ypresp_maplist * ypproc_maplist_2_svc(domainname *, struct svc_req *);
+extern  ypresp_maplist *ypproc_maplist_2 __P ((domainname *, CLIENT *));
+extern  ypresp_maplist *ypproc_maplist_2_svc __P ((domainname *, struct svc_req *));
+extern int ypprog_2_freeresult __P ((SVCXPRT *, xdrproc_t, caddr_t));
 
-#elif __STDC__
-#define YPPROC_NULL ((u_long)0)
-extern  void * ypproc_null_2(void *, CLIENT *);
-extern  void * ypproc_null_2_svc(void *, struct svc_req *);
-#define YPPROC_DOMAIN ((u_long)1)
-extern  bool_t * ypproc_domain_2(domainname *, CLIENT *);
-extern  bool_t * ypproc_domain_2_svc(domainname *, struct svc_req *);
-#define YPPROC_DOMAIN_NONACK ((u_long)2)
-extern  bool_t * ypproc_domain_nonack_2(domainname *, CLIENT *);
-extern  bool_t * ypproc_domain_nonack_2_svc(domainname *, struct svc_req *);
-#define YPPROC_MATCH ((u_long)3)
-extern  ypresp_val * ypproc_match_2(ypreq_key *, CLIENT *);
-extern  ypresp_val * ypproc_match_2_svc(ypreq_key *, struct svc_req *);
-#define YPPROC_FIRST ((u_long)4)
-extern  ypresp_key_val * ypproc_first_2(ypreq_key *, CLIENT *);
-extern  ypresp_key_val * ypproc_first_2_svc(ypreq_key *, struct svc_req *);
-#define YPPROC_NEXT ((u_long)5)
-extern  ypresp_key_val * ypproc_next_2(ypreq_key *, CLIENT *);
-extern  ypresp_key_val * ypproc_next_2_svc(ypreq_key *, struct svc_req *);
-#define YPPROC_XFR ((u_long)6)
-extern  ypresp_xfr * ypproc_xfr_2(ypreq_xfr *, CLIENT *);
-extern  ypresp_xfr * ypproc_xfr_2_svc(ypreq_xfr *, struct svc_req *);
-#define YPPROC_CLEAR ((u_long)7)
-extern  void * ypproc_clear_2(void *, CLIENT *);
-extern  void * ypproc_clear_2_svc(void *, struct svc_req *);
-#define YPPROC_ALL ((u_long)8)
-extern  ypresp_all * ypproc_all_2(ypreq_nokey *, CLIENT *);
-extern  ypresp_all * ypproc_all_2_svc(ypreq_nokey *, struct svc_req *);
-#define YPPROC_MASTER ((u_long)9)
-extern  ypresp_master * ypproc_master_2(ypreq_nokey *, CLIENT *);
-extern  ypresp_master * ypproc_master_2_svc(ypreq_nokey *, struct svc_req *);
-#define YPPROC_ORDER ((u_long)10)
-extern  ypresp_order * ypproc_order_2(ypreq_nokey *, CLIENT *);
-extern  ypresp_order * ypproc_order_2_svc(ypreq_nokey *, struct svc_req *);
-#define YPPROC_MAPLIST ((u_long)11)
-extern  ypresp_maplist * ypproc_maplist_2(domainname *, CLIENT *);
-extern  ypresp_maplist * ypproc_maplist_2_svc(domainname *, struct svc_req *);
-
-#else /* Old Style C */
-#define YPPROC_NULL ((u_long)0)
-extern  void * ypproc_null_2();
-extern  void * ypproc_null_2_svc();
-#define YPPROC_DOMAIN ((u_long)1)
-extern  bool_t * ypproc_domain_2();
-extern  bool_t * ypproc_domain_2_svc();
-#define YPPROC_DOMAIN_NONACK ((u_long)2)
-extern  bool_t * ypproc_domain_nonack_2();
-extern  bool_t * ypproc_domain_nonack_2_svc();
-#define YPPROC_MATCH ((u_long)3)
-extern  ypresp_val * ypproc_match_2();
-extern  ypresp_val * ypproc_match_2_svc();
-#define YPPROC_FIRST ((u_long)4)
-extern  ypresp_key_val * ypproc_first_2();
-extern  ypresp_key_val * ypproc_first_2_svc();
-#define YPPROC_NEXT ((u_long)5)
-extern  ypresp_key_val * ypproc_next_2();
-extern  ypresp_key_val * ypproc_next_2_svc();
-#define YPPROC_XFR ((u_long)6)
-extern  ypresp_xfr * ypproc_xfr_2();
-extern  ypresp_xfr * ypproc_xfr_2_svc();
-#define YPPROC_CLEAR ((u_long)7)
-extern  void * ypproc_clear_2();
-extern  void * ypproc_clear_2_svc();
-#define YPPROC_ALL ((u_long)8)
-extern  ypresp_all * ypproc_all_2();
-extern  ypresp_all * ypproc_all_2_svc();
-#define YPPROC_MASTER ((u_long)9)
-extern  ypresp_master * ypproc_master_2();
-extern  ypresp_master * ypproc_master_2_svc();
-#define YPPROC_ORDER ((u_long)10)
-extern  ypresp_order * ypproc_order_2();
-extern  ypresp_order * ypproc_order_2_svc();
-#define YPPROC_MAPLIST ((u_long)11)
-extern  ypresp_maplist * ypproc_maplist_2();
-extern  ypresp_maplist * ypproc_maplist_2_svc();
-#endif /* Old Style C */
 
 #define YPPUSH_XFRRESPPROG ((u_long)0x40000000)
 #define YPPUSH_XFRRESPVERS ((u_long)1)
 
-#ifdef __cplusplus
-#define YPPUSHPROC_NULL ((u_long)0)
-extern "C" void * yppushproc_null_1(void *, CLIENT *);
-extern "C" void * yppushproc_null_1_svc(void *, struct svc_req *);
-#define YPPUSHPROC_XFRRESP ((u_long)1)
-extern "C" void * yppushproc_xfrresp_1(yppushresp_xfr *, CLIENT *);
-extern "C" void * yppushproc_xfrresp_1_svc(yppushresp_xfr *, struct svc_req *);
-
-#elif __STDC__
 #define YPPUSHPROC_NULL ((u_long)0)
-extern  void * yppushproc_null_1(void *, CLIENT *);
-extern  void * yppushproc_null_1_svc(void *, struct svc_req *);
+extern  void *yppushproc_null_1 __P ((void *, CLIENT *));
+extern  void *yppushproc_null_1_svc __P ((void *, struct svc_req *));
 #define YPPUSHPROC_XFRRESP ((u_long)1)
-extern  void * yppushproc_xfrresp_1(yppushresp_xfr *, CLIENT *);
-extern  void * yppushproc_xfrresp_1_svc(yppushresp_xfr *, struct svc_req *);
+extern  void *yppushproc_xfrresp_1 __P ((yppushresp_xfr *, CLIENT *));
+extern  void *yppushproc_xfrresp_1_svc __P ((yppushresp_xfr *, struct svc_req *));
+extern int yppush_xfrrespprog_1_freeresult __P ((SVCXPRT *, xdrproc_t, caddr_t));
 
-#else /* Old Style C */
-#define YPPUSHPROC_NULL ((u_long)0)
-extern  void * yppushproc_null_1();
-extern  void * yppushproc_null_1_svc();
-#define YPPUSHPROC_XFRRESP ((u_long)1)
-extern  void * yppushproc_xfrresp_1();
-extern  void * yppushproc_xfrresp_1_svc();
-#endif /* Old Style C */
 
 #define YPBINDPROG ((u_long)100007)
 #define YPBINDVERS ((u_long)2)
 
-#ifdef __cplusplus
-#define YPBINDPROC_NULL ((u_long)0)
-extern "C" void * ypbindproc_null_2(void *, CLIENT *);
-extern "C" void * ypbindproc_null_2_svc(void *, struct svc_req *);
-#define YPBINDPROC_DOMAIN ((u_long)1)
-extern "C" ypbind_resp * ypbindproc_domain_2(domainname *, CLIENT *);
-extern "C" ypbind_resp * ypbindproc_domain_2_svc(domainname *, struct svc_req *);
-#define YPBINDPROC_SETDOM ((u_long)2)
-extern "C" void * ypbindproc_setdom_2(ypbind_setdom *, CLIENT *);
-extern "C" void * ypbindproc_setdom_2_svc(ypbind_setdom *, struct svc_req *);
-
-#elif __STDC__
-#define YPBINDPROC_NULL ((u_long)0)
-extern  void * ypbindproc_null_2(void *, CLIENT *);
-extern  void * ypbindproc_null_2_svc(void *, struct svc_req *);
-#define YPBINDPROC_DOMAIN ((u_long)1)
-extern  ypbind_resp * ypbindproc_domain_2(domainname *, CLIENT *);
-extern  ypbind_resp * ypbindproc_domain_2_svc(domainname *, struct svc_req *);
-#define YPBINDPROC_SETDOM ((u_long)2)
-extern  void * ypbindproc_setdom_2(ypbind_setdom *, CLIENT *);
-extern  void * ypbindproc_setdom_2_svc(ypbind_setdom *, struct svc_req *);
-
-#else /* Old Style C */
 #define YPBINDPROC_NULL ((u_long)0)
-extern  void * ypbindproc_null_2();
-extern  void * ypbindproc_null_2_svc();
+extern  void *ypbindproc_null_2 __P ((void *, CLIENT *));
+extern  void *ypbindproc_null_2_svc __P ((void *, struct svc_req *));
 #define YPBINDPROC_DOMAIN ((u_long)1)
-extern  ypbind_resp * ypbindproc_domain_2();
-extern  ypbind_resp * ypbindproc_domain_2_svc();
+extern  ypbind_resp *ypbindproc_domain_2 __P ((domainname *, CLIENT *));
+extern  ypbind_resp *ypbindproc_domain_2_svc __P ((domainname *, struct svc_req *));
 #define YPBINDPROC_SETDOM ((u_long)2)
-extern  void * ypbindproc_setdom_2();
-extern  void * ypbindproc_setdom_2_svc();
-#endif /* Old Style C */
+extern  void *ypbindproc_setdom_2 __P ((ypbind_setdom *, CLIENT *));
+extern  void *ypbindproc_setdom_2_svc __P ((ypbind_setdom *, struct svc_req *));
+extern int ypbindprog_2_freeresult __P ((SVCXPRT *, xdrproc_t, caddr_t));
+
+
+extern  bool_t xdr_ypstat __P ((XDR *, ypstat*));
+extern  bool_t xdr_ypxfrstat __P ((XDR *, ypxfrstat*));
+extern  bool_t xdr_domainname __P ((XDR *, domainname*));
+extern  bool_t xdr_mapname __P ((XDR *, mapname*));
+extern  bool_t xdr_peername __P ((XDR *, peername*));
+extern  bool_t xdr_keydat __P ((XDR *, keydat*));
+extern  bool_t xdr_valdat __P ((XDR *, valdat*));
+extern  bool_t xdr_ypmap_parms __P ((XDR *, ypmap_parms*));
+extern  bool_t xdr_ypreq_key __P ((XDR *, ypreq_key*));
+extern  bool_t xdr_ypreq_nokey __P ((XDR *, ypreq_nokey*));
+extern  bool_t xdr_ypreq_xfr __P ((XDR *, ypreq_xfr*));
+extern  bool_t xdr_ypresp_val __P ((XDR *, ypresp_val*));
+extern  bool_t xdr_ypresp_key_val __P ((XDR *, ypresp_key_val*));
+extern  bool_t xdr_ypresp_master __P ((XDR *, ypresp_master*));
+extern  bool_t xdr_ypresp_order __P ((XDR *, ypresp_order*));
+extern  bool_t xdr_ypresp_all __P ((XDR *, ypresp_all*));
+extern  bool_t xdr_ypresp_xfr __P ((XDR *, ypresp_xfr*));
+extern  bool_t xdr_ypmaplist __P ((XDR *, ypmaplist*));
+extern  bool_t xdr_ypresp_maplist __P ((XDR *, ypresp_maplist*));
+extern  bool_t xdr_yppush_status __P ((XDR *, yppush_status*));
+extern  bool_t xdr_yppushresp_xfr __P ((XDR *, yppushresp_xfr*));
+extern  bool_t xdr_ypbind_resptype __P ((XDR *, ypbind_resptype*));
+extern  bool_t xdr_ypbind_binding __P ((XDR *, ypbind_binding*));
+extern  bool_t xdr_ypbind_resp __P ((XDR *, ypbind_resp*));
+extern  bool_t xdr_ypbind_setdom __P ((XDR *, ypbind_setdom*));
+
+__END_DECLS
 
 #endif /* !__RPCSVC_YP_H__ */
diff --git a/nis/yp_xdr.c b/nis/yp_xdr.c
index e6477be778..f189169687 100644
--- a/nis/yp_xdr.c
+++ b/nis/yp_xdr.c
@@ -5,23 +5,23 @@
  * may copy or modify Sun RPC without charge, but are not authorized
  * to license or distribute it to anyone else except as part of a product or
  * program developed by the user.
- * 
+ *
  * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
  * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
  * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- * 
+ *
  * Sun RPC is provided with no support and without any obligation on the
  * part of Sun Microsystems, Inc. to assist in its use, correction,
  * modification or enhancement.
- * 
+ *
  * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
  * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
  * OR ANY PART THEREOF.
- * 
+ *
  * In no event will Sun Microsystems, Inc. be liable for any lost revenue
  * or profits or other special, indirect and consequential damages, even if
  * Sun has been advised of the possibility of such damages.
- * 
+ *
  * Sun Microsystems, Inc.
  * 2550 Garcia Avenue
  * Mountain View, California  94043
@@ -32,311 +32,269 @@
 bool_t
 xdr_ypstat (XDR *xdrs, ypstat *objp)
 {
-  if (!xdr_enum(xdrs, (enum_t *)objp))
-    return (FALSE);
-  return (TRUE);
+  if (!xdr_enum (xdrs, (enum_t *) objp))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypxfrstat(XDR *xdrs, ypxfrstat *objp)
+xdr_ypxfrstat (XDR *xdrs, ypxfrstat *objp)
 {
-  if (!xdr_enum(xdrs, (enum_t *)objp)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_enum (xdrs, (enum_t *) objp))
+      return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_domainname(XDR *xdrs, domainname *objp)
+xdr_domainname (XDR *xdrs, domainname *objp)
 {
-  if (!xdr_string(xdrs, objp, YPMAXDOMAIN)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_string (xdrs, objp, ~0))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_mapname(XDR *xdrs, mapname *objp)
+xdr_mapname (XDR *xdrs, mapname *objp)
 {
-  if (!xdr_string(xdrs, objp, YPMAXMAP)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_string (xdrs, objp, ~0))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_peername(XDR *xdrs, peername *objp)
+xdr_peername (XDR *xdrs, peername *objp)
 {
-  if (!xdr_string(xdrs, objp, YPMAXPEER)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_string (xdrs, objp, ~0))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_keydat(XDR *xdrs, keydat *objp)
+xdr_keydat (XDR *xdrs, keydat *objp)
 {
-  if (!xdr_bytes(xdrs, (char **)&objp->keydat_val, (u_int *)&objp->keydat_len, YPMAXRECORD)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_bytes (xdrs, (char **) &objp->keydat_val,
+		  (u_int *) &objp->keydat_len, ~0))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_valdat(XDR *xdrs, valdat *objp)
+xdr_valdat (XDR *xdrs, valdat *objp)
 {
-  if (!xdr_bytes(xdrs, (char **)&objp->valdat_val, (u_int *)&objp->valdat_len, YPMAXRECORD)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_bytes (xdrs, (char **) &objp->valdat_val,
+		  (u_int *) &objp->valdat_len, ~0))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypmap_parms(XDR *xdrs, ypmap_parms *objp)
+xdr_ypmap_parms (XDR *xdrs, ypmap_parms *objp)
 {
-  if (!xdr_domainname(xdrs, &objp->domain)) {
-    return (FALSE);
-  }
-  if (!xdr_mapname(xdrs, &objp->map)) {
-    return (FALSE);
-  }
-  if (!xdr_u_int(xdrs, &objp->ordernum)) {
-    return (FALSE);
-  }
-  if (!xdr_peername(xdrs, &objp->peer)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_domainname (xdrs, &objp->domain))
+    return FALSE;
+  if (!xdr_mapname (xdrs, &objp->map))
+    return FALSE;
+  if (!xdr_u_int (xdrs, &objp->ordernum))
+    return FALSE;
+  if (!xdr_peername (xdrs, &objp->peer))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypreq_key(XDR *xdrs, ypreq_key *objp)
+xdr_ypreq_key (XDR *xdrs, ypreq_key *objp)
 {
-  if (!xdr_domainname(xdrs, &objp->domain)) {
-    return (FALSE);
-  }
-  if (!xdr_mapname(xdrs, &objp->map)) {
-    return (FALSE);
-  }
-  if (!xdr_keydat(xdrs, &objp->key)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_domainname (xdrs, &objp->domain))
+    return FALSE;
+  if (!xdr_mapname (xdrs, &objp->map))
+    return FALSE;
+  if (!xdr_keydat (xdrs, &objp->key))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypreq_nokey(XDR *xdrs, ypreq_nokey *objp)
+xdr_ypreq_nokey (XDR *xdrs, ypreq_nokey *objp)
 {
-  if (!xdr_domainname(xdrs, &objp->domain)) {
-    return (FALSE);
-  }
-  if (!xdr_mapname(xdrs, &objp->map)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_domainname (xdrs, &objp->domain))
+    return FALSE;
+  if (!xdr_mapname (xdrs, &objp->map))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypreq_xfr(XDR *xdrs, ypreq_xfr *objp)
+xdr_ypreq_xfr (XDR *xdrs, ypreq_xfr *objp)
 {
-  if (!xdr_ypmap_parms(xdrs, &objp->map_parms)) {
-    return (FALSE);
-  }
-  if (!xdr_u_int(xdrs, &objp->transid)) {
-    return (FALSE);
-  }
-  if (!xdr_u_int(xdrs, &objp->prog)) {
-    return (FALSE);
-  }
-  if (!xdr_u_int(xdrs, &objp->port)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_ypmap_parms (xdrs, &objp->map_parms))
+    return FALSE;
+  if (!xdr_u_int (xdrs, &objp->transid))
+    return FALSE;
+  if (!xdr_u_int (xdrs, &objp->prog))
+    return FALSE;
+  if (!xdr_u_int (xdrs, &objp->port))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypresp_val(XDR *xdrs, ypresp_val *objp)
+xdr_ypresp_val (XDR *xdrs, ypresp_val *objp)
 {
-  if (!xdr_ypstat(xdrs, &objp->stat)) {
-    return (FALSE);
-  }
-  if (!xdr_valdat(xdrs, &objp->val)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_ypstat (xdrs, &objp->stat))
+    return FALSE;
+  if (!xdr_valdat (xdrs, &objp->val))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypresp_key_val(XDR *xdrs, ypresp_key_val *objp)
+xdr_ypresp_key_val (XDR *xdrs, ypresp_key_val *objp)
 {
-  if (!xdr_ypstat(xdrs, &objp->stat)) {
-    return (FALSE);
-  }
-  if (!xdr_valdat(xdrs, &objp->val)) {
-    return (FALSE);
-  }
-  if (!xdr_keydat(xdrs, &objp->key)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_ypstat (xdrs, &objp->stat))
+    return FALSE;
+  if (!xdr_valdat (xdrs, &objp->val))
+    return FALSE;
+  if (!xdr_keydat (xdrs, &objp->key))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypresp_master(XDR *xdrs, ypresp_master *objp)
+xdr_ypresp_master (XDR *xdrs, ypresp_master *objp)
 {
-  if (!xdr_ypstat(xdrs, &objp->stat)) {
-    return (FALSE);
-  }
-  if (!xdr_peername(xdrs, &objp->peer)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_ypstat (xdrs, &objp->stat))
+    return FALSE;
+  if (!xdr_peername (xdrs, &objp->peer))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypresp_order(XDR *xdrs, ypresp_order *objp)
+xdr_ypresp_order (XDR *xdrs, ypresp_order *objp)
 {
-  if (!xdr_ypstat(xdrs, &objp->stat)) {
-    return (FALSE);
-  }
-  if (!xdr_u_int(xdrs, &objp->ordernum)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_ypstat (xdrs, &objp->stat))
+    return FALSE;
+  if (!xdr_u_int (xdrs, &objp->ordernum))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypresp_all(XDR *xdrs, ypresp_all *objp)
+xdr_ypresp_all (XDR *xdrs, ypresp_all *objp)
 {
-  if (!xdr_bool(xdrs, &objp->more)) {
-    return (FALSE);
-  }
-  switch (objp->more) {
-  case TRUE:
-    if (!xdr_ypresp_key_val(xdrs, &objp->ypresp_all_u.val)) {
-      return (FALSE);
+  if (!xdr_bool (xdrs, &objp->more))
+    return FALSE;
+  switch (objp->more)
+    {
+    case TRUE:
+      if (!xdr_ypresp_key_val (xdrs, &objp->ypresp_all_u.val))
+	return FALSE;
+      break;
+    case FALSE:
+      break;
+    default:
+      return FALSE;
     }
-    break;
-  case FALSE:
-    break;
-  default:
-    return (FALSE);
-  }
-  return (TRUE);
+  return TRUE;
 }
 
 bool_t
-xdr_ypresp_xfr(XDR *xdrs, ypresp_xfr *objp)
+xdr_ypresp_xfr (XDR *xdrs, ypresp_xfr *objp)
 {
-  if (!xdr_u_int(xdrs, &objp->transid)) {
-    return (FALSE);
-  }
-  if (!xdr_ypxfrstat(xdrs, &objp->xfrstat)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_u_int (xdrs, &objp->transid))
+    return FALSE;
+  if (!xdr_ypxfrstat (xdrs, &objp->xfrstat))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypmaplist(XDR *xdrs, ypmaplist *objp)
+xdr_ypmaplist (XDR *xdrs, ypmaplist *objp)
 {
-  if (!xdr_mapname(xdrs, &objp->map)) {
-    return (FALSE);
-  }
-  if (!xdr_pointer(xdrs, (char **)&objp->next, sizeof(ypmaplist), (xdrproc_t)xdr_ypmaplist)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_mapname (xdrs, &objp->map))
+    return FALSE;
+  if (!xdr_pointer (xdrs, (char **) &objp->next, sizeof (ypmaplist),
+		    (xdrproc_t) xdr_ypmaplist))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypresp_maplist(XDR *xdrs, ypresp_maplist *objp)
+xdr_ypresp_maplist (XDR *xdrs, ypresp_maplist *objp)
 {
-  if (!xdr_ypstat(xdrs, &objp->stat)) {
-    return (FALSE);
-  }
-  if (!xdr_pointer(xdrs, (char **)&objp->maps, sizeof(ypmaplist), (xdrproc_t)xdr_ypmaplist)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_ypstat (xdrs, &objp->stat))
+    return FALSE;
+  if (!xdr_pointer (xdrs, (char **) &objp->maps, sizeof (ypmaplist),
+		    (xdrproc_t) xdr_ypmaplist))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_yppush_status(XDR *xdrs, yppush_status *objp)
+xdr_yppush_status (XDR *xdrs, yppush_status *objp)
 {
-  if (!xdr_enum(xdrs, (enum_t *)objp)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_enum (xdrs, (enum_t *) objp))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_yppushresp_xfr(XDR *xdrs, yppushresp_xfr *objp)
+xdr_yppushresp_xfr (XDR *xdrs, yppushresp_xfr *objp)
 {
-  if (!xdr_u_int(xdrs, &objp->transid)) {
-    return (FALSE);
-  }
-  if (!xdr_yppush_status(xdrs, &objp->status)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_u_int (xdrs, &objp->transid))
+    return FALSE;
+  if (!xdr_yppush_status (xdrs, &objp->status))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypbind_resptype(XDR *xdrs, ypbind_resptype *objp)
+xdr_ypbind_resptype (XDR *xdrs, ypbind_resptype *objp)
 {
-  if (!xdr_enum(xdrs, (enum_t *)objp)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_enum (xdrs, (enum_t *) objp))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypbind_binding(XDR *xdrs, ypbind_binding *objp)
+xdr_ypbind_binding (XDR *xdrs, ypbind_binding *objp)
 {
-  if (!xdr_opaque(xdrs, objp->ypbind_binding_addr, 4)) {
-    return (FALSE);
-  }
-  if (!xdr_opaque(xdrs, objp->ypbind_binding_port, 2)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_opaque (xdrs, objp->ypbind_binding_addr, 4))
+    return FALSE;
+  if (!xdr_opaque (xdrs, objp->ypbind_binding_port, 2))
+    return FALSE;
+  return TRUE;
 }
 
 bool_t
-xdr_ypbind_resp(XDR *xdrs, ypbind_resp *objp)
+xdr_ypbind_resp (XDR *xdrs, ypbind_resp *objp)
 {
-  if (!xdr_ypbind_resptype(xdrs, &objp->ypbind_status)) {
-    return (FALSE);
-  }
-  switch (objp->ypbind_status) {
-  case YPBIND_FAIL_VAL:
-    if (!xdr_u_int(xdrs, &objp->ypbind_resp_u.ypbind_error)) {
-      return (FALSE);
-		 }
-    break;
-  case YPBIND_SUCC_VAL:
-    if (!xdr_ypbind_binding(xdrs, &objp->ypbind_resp_u.ypbind_bindinfo)) {
-      return (FALSE);
+  if (!xdr_ypbind_resptype (xdrs, &objp->ypbind_status))
+    return FALSE;
+  switch (objp->ypbind_status)
+    {
+    case YPBIND_FAIL_VAL:
+      if (!xdr_u_int (xdrs, &objp->ypbind_resp_u.ypbind_error))
+	return FALSE;
+      break;
+    case YPBIND_SUCC_VAL:
+      if (!xdr_ypbind_binding (xdrs, &objp->ypbind_resp_u.ypbind_bindinfo))
+	return FALSE;
+      break;
+    default:
+      return FALSE;
     }
-    break;
-  default:
-    return (FALSE);
-  }
-  return (TRUE);
+  return TRUE;
 }
 
 bool_t
-xdr_ypbind_setdom(XDR *xdrs, ypbind_setdom *objp)
+xdr_ypbind_setdom (XDR *xdrs, ypbind_setdom *objp)
 {
-  if (!xdr_domainname(xdrs, &objp->ypsetdom_domain)) {
-    return (FALSE);
-  }
-  if (!xdr_ypbind_binding(xdrs, &objp->ypsetdom_binding)) {
-    return (FALSE);
-  }
-  if (!xdr_u_int(xdrs, &objp->ypsetdom_vers)) {
-    return (FALSE);
-  }
-  return (TRUE);
+  if (!xdr_domainname (xdrs, &objp->ypsetdom_domain))
+    return FALSE;
+  if (!xdr_ypbind_binding (xdrs, &objp->ypsetdom_binding))
+    return FALSE;
+  if (!xdr_u_int (xdrs, &objp->ypsetdom_vers))
+    return FALSE;
+  return TRUE;
 }
diff --git a/nis/ypclnt.c b/nis/ypclnt.c
index 198c4775b5..94fce94f9d 100644
--- a/nis/ypclnt.c
+++ b/nis/ypclnt.c
@@ -90,7 +90,7 @@ __yp_bind (const char *domain, dom_binding **ypdb)
 
   do
     {
-      try++;
+      ++try;
       if (try > MAXTRIES)
         {
           if (is_new)
@@ -99,7 +99,7 @@ __yp_bind (const char *domain, dom_binding **ypdb)
         }
 
 #if USE_BINDINGDIR
-      if (ysd->dom_vers < 1 && try < 3)
+      if (ysd->dom_vers < 1 && try == 1) /* Try binding dir only first time */
 	{
 	  char path[sizeof (BINDINGDIR) - 1 + strlen (domain) + 10];
 	  struct iovec vec[2];
diff --git a/nis/ypupdate_xdr.c b/nis/ypupdate_xdr.c
index 53624337ab..e4027b07df 100644
--- a/nis/ypupdate_xdr.c
+++ b/nis/ypupdate_xdr.c
@@ -31,43 +31,35 @@
  * Copyright (c) 1986, 1990 by Sun Microsystems, Inc.
  */
 
-/* from @(#)ypupdate_prot.x     1.3 91/03/11 TIRPC 1.0 */
-
-/*
- * Compiled from ypupdate_prot.x using rpcgen
- * This is NOT source code!
- * DO NOT EDIT THIS FILE!
- */
-
-
 #include <rpcsvc/ypupd.h>
 
-bool_t 
-xdr_yp_buf (XDR * xdrs, yp_buf * objp)
+bool_t
+xdr_yp_buf (XDR *xdrs, yp_buf *objp)
 {
-  if (!xdr_bytes (xdrs, (char **) &objp->yp_buf_val, (u_int *) & objp->yp_buf_len, MAXYPDATALEN))
-    return (FALSE);
-  return (TRUE);
+  if (!xdr_bytes (xdrs, (char **) &objp->yp_buf_val,
+		  (u_int *) &objp->yp_buf_len, ~0))
+    return FALSE;
+  return TRUE;
 }
 
-bool_t 
-xdr_ypupdate_args (XDR * xdrs, ypupdate_args * objp)
+bool_t
+xdr_ypupdate_args (XDR *xdrs, ypupdate_args *objp)
 {
-  if (!xdr_string (xdrs, &objp->mapname, MAXMAPNAMELEN))
-    return (FALSE);
+  if (!xdr_string (xdrs, &objp->mapname, ~0))
+    return FALSE;
   if (!xdr_yp_buf (xdrs, &objp->key))
-    return (FALSE);
+    return FALSE;
   if (!xdr_yp_buf (xdrs, &objp->datum))
-    return (FALSE);
-  return (TRUE);
+    return FALSE;
+  return TRUE;
 }
 
-bool_t 
-xdr_ypdelete_args (XDR * xdrs, ypdelete_args * objp)
+bool_t
+xdr_ypdelete_args (XDR *xdrs, ypdelete_args *objp)
 {
-  if (!xdr_string (xdrs, &objp->mapname, MAXMAPNAMELEN))
-    return (FALSE);
+  if (!xdr_string (xdrs, &objp->mapname, ~0))
+    return FALSE;
   if (!xdr_yp_buf (xdrs, &objp->key))
-    return (FALSE);
-  return (TRUE);
+    return FALSE;
+  return TRUE;
 }
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index 7c96fb53ee..a7488e0ce8 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -219,7 +219,8 @@ extern unsigned long long int __strtoull_internal __P ((__const char *
 # endif
 #endif /* GCC */
 
-#if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ && __GNUC__ >= 2
+#if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
+    && defined __USE_EXTERN_INLINES
 /* Define inline functions which call the internal entry points.  */
 
 extern __inline double
@@ -306,7 +307,7 @@ atoll (__const char *__nptr)
   return strtoll (__nptr, (char **) NULL, 10);
 }
 # endif
-#endif /* Optimizing GCC >=2.  */
+#endif /* Optimizing and Inlining.  */
 
 
 #if defined __USE_SVID || defined __USE_XOPEN_EXTENDED
diff --git a/string/argz.h b/string/argz.h
index 20e8a55321..c8dd918247 100644
--- a/string/argz.h
+++ b/string/argz.h
@@ -133,7 +133,7 @@ extern char *__argz_next __P ((char *argz, size_t __argz_len,
 extern char *argz_next __P ((char *argz, size_t __argz_len,
 			     __const char *entry));
 
-#if defined __OPTIMIZE__ && __GNUC__ >= 2
+#ifdef __USE_EXTERN_INLINES
 extern inline char *
 __argz_next (char *__argz, size_t __argz_len, __const char *__entry)
 {
@@ -152,7 +152,7 @@ argz_next (char *__argz, size_t __argz_len, __const char *__entry)
 {
   return __argz_next (__argz, __argz_len, __entry);
 }
-#endif /* optimizing GCC2 */
+#endif /* Use extern inlines.  */
 
 __END_DECLS
 
diff --git a/sysdeps/generic/bits/sigset.h b/sysdeps/generic/bits/sigset.h
index c442d53643..a57458dd28 100644
--- a/sysdeps/generic/bits/sigset.h
+++ b/sysdeps/generic/bits/sigset.h
@@ -38,7 +38,7 @@ typedef unsigned long int __sigset_t;
 #define _SIGSET_H_fns 1
 
 #ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE extern __inline
+# define _EXTERN_INLINE extern __inline
 #endif
 
 /* Return a mask that includes SIG only.  The cast to `sigset_t' avoids
@@ -63,7 +63,8 @@ extern int __sigismember (__const __sigset_t *, int);
 extern int __sigaddset (__sigset_t *, int);
 extern int __sigdelset (__sigset_t *, int);
 
-#define __SIGSETFN(NAME, BODY, CONST)					      \
+#ifdef __USE_EXTERN_INLINES
+# define __SIGSETFN(NAME, BODY, CONST)					      \
   _EXTERN_INLINE int							      \
   NAME (CONST __sigset_t *__set, int __sig)				      \
   {									      \
@@ -75,7 +76,8 @@ __SIGSETFN (__sigismember, (*__set & __mask) ? 1 : 0, __const)
 __SIGSETFN (__sigaddset, ((*__set |= __mask), 0), )
 __SIGSETFN (__sigdelset, ((*__set &= ~__mask), 0), )
 
-#undef __SIGSETFN
+# undef __SIGSETFN
+#endif
 
 
 #endif /* ! _SIGSET_H_fns.  */
diff --git a/sysdeps/generic/glob.c b/sysdeps/generic/glob.c
index 591bd56f7e..509fc1b972 100644
--- a/sysdeps/generic/glob.c
+++ b/sysdeps/generic/glob.c
@@ -253,6 +253,7 @@ extern char *alloca ();
 # define readdir(str) __readdir (str)
 # define getpwnam_r(name, bufp, buf, len, res) \
    __getpwnam_r (name, bufp, buf, len, res)
+# define __stat(fname, buf) __xstat (_STAT_VER, fname, buf)
 #endif
 
 #if !(defined STDC_HEADERS || defined __GNU_LIBRARY__)
diff --git a/sysdeps/unix/sysv/linux/bits/sigset.h b/sysdeps/unix/sysv/linux/bits/sigset.h
index 14f30cbfd8..66a9c51c54 100644
--- a/sysdeps/unix/sysv/linux/bits/sigset.h
+++ b/sysdeps/unix/sysv/linux/bits/sigset.h
@@ -104,7 +104,8 @@ extern int __sigismember (__const __sigset_t *, int);
 extern int __sigaddset (__sigset_t *, int);
 extern int __sigdelset (__sigset_t *, int);
 
-# define __SIGSETFN(NAME, BODY, CONST)					      \
+# ifdef __USE_EXTERN_INLINES
+#  define __SIGSETFN(NAME, BODY, CONST)					      \
   _EXTERN_INLINE int							      \
   NAME (CONST __sigset_t *__set, int __sig)				      \
   {									      \
@@ -117,7 +118,8 @@ __SIGSETFN (__sigismember, (__set->__val[__word] & __mask) ? 1 : 0, __const)
 __SIGSETFN (__sigaddset, ((__set->__val[__word] |= __mask), 0), )
 __SIGSETFN (__sigdelset, ((__set->__val[__word] &= ~__mask), 0), )
 
-#undef __SIGSETFN
+#  undef __SIGSETFN
+# endif
 
 
 #endif /* ! _SIGSET_H_fns.  */
diff --git a/sysdeps/unix/sysv/sysv4/bits/sigset.h b/sysdeps/unix/sysv/sysv4/bits/sigset.h
index 1461c93b3d..c5d596dad8 100644
--- a/sysdeps/unix/sysv/sysv4/bits/sigset.h
+++ b/sysdeps/unix/sysv/sysv4/bits/sigset.h
@@ -48,9 +48,10 @@ typedef struct
 #define	__SSELT(s)	((s) / __NSSBITS)
 #define	__SSMASK(s)	(1 << ((s) % __NSSBITS))
 
-#ifndef _EXTERN_INLINE
-#define _EXTERN_INLINE	extern __inline
-#endif
+#ifdef __USE_EXTERN_INLINES
+# ifndef _EXTERN_INLINE
+#  define _EXTERN_INLINE	extern __inline
+# endif
 
 _EXTERN_INLINE int
 __sigemptyset (__sigset_t *__set)
@@ -92,5 +93,6 @@ __sigismember (__const __sigset_t *__set, int __sig)
     return 1;
   return 0;
 }
+#endif	/* use extern inlines.  */
 
 #endif /* ! _SIGSET_H_fns */
diff --git a/sysdeps/wordsize-32/inttypes.h b/sysdeps/wordsize-32/inttypes.h
index 188f4def4a..79d3eed31c 100644
--- a/sysdeps/wordsize-32/inttypes.h
+++ b/sysdeps/wordsize-32/inttypes.h
@@ -204,7 +204,7 @@ extern intmax_t wcstoimax __P ((__const wchar_t * __restrict __nptr,
 extern uintmax_t wcstoumax __P ((__const wchar_t * __restrict __nptr,
 				 wchar_t ** __restrict __endptr, int __base));
 
-#if defined __GNUC__ && __GNUC__ >= 2 && defined __OPTIMIZE__
+#ifdef __USE_EXTERN_INLINES
 
 /* Like `strtol' but convert to `intmax_t'.  */
 # ifndef __strtoll_internal_defined
@@ -267,7 +267,7 @@ wcstoumax (__const wchar_t *__restrict nptr, wchar_t **__restrict endptr,
 {
   return __wcstoull_internal (nptr, endptr, base, 0);
 }
-#endif	/* GCC and Optimization.  */
+#endif	/* Use extern inlines.  */
 
 __END_DECLS
 
diff --git a/sysdeps/wordsize-64/inttypes.h b/sysdeps/wordsize-64/inttypes.h
index 5e497dbfae..c76d2c887d 100644
--- a/sysdeps/wordsize-64/inttypes.h
+++ b/sysdeps/wordsize-64/inttypes.h
@@ -210,7 +210,7 @@ extern intmax_t wcstoimax __P ((__const wchar_t * __restrict __nptr,
 extern uintmax_t wcstoumax __P ((__const wchar_t * __restrict __nptr,
 				 wchar_t ** __restrict __endptr, int __base));
 
-#if defined __GNUC__ && __GNUC__ >= 2 && defined __OPTIMIZE__
+#ifdef __USE_EXTERN_INLINES
 
 /* Like `strtol' but convert to `intmax_t'.  */
 # ifndef __strtol_internal_defined
@@ -269,7 +269,7 @@ wcstoumax (__const wchar_t *__restrict nptr, wchar_t **__restrict endptr,
 {
   return __wcstoul_internal (nptr, endptr, base, 0);
 }
-#endif	/* GCC and Optimization.  */
+#endif	/* Use extern inlines.  */
 
 __END_DECLS
 
diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h
index 7063d9ca76..0bf9c7c5b9 100644
--- a/wcsmbs/wchar.h
+++ b/wcsmbs/wchar.h
@@ -234,7 +234,7 @@ extern size_t mbrlen __P ((__const char *__restrict __s, size_t __n,
 			   mbstate_t *__restrict __ps));
 
 #if defined __OPTIMIZE__ && !defined __OPTIMIZE_SIZE__ \
-    && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7))
+    && defined __USE_EXTERN_INLINES
 /* Define inline function as optimization.  */
 extern __inline size_t mbrlen (__const char *__restrict __s, size_t __n,
 			       mbstate_t *__restrict __ps)