Fix allocation size to include length of PROTO.
[kopensolaris-gnu/glibc.git] / nss / nss_files / files-netgrp.c
index d9dbf94..eb6e673 100644 (file)
@@ -1,5 +1,5 @@
 /* Netgroup file parser in nss_files modules.
-   Copyright (C) 1996 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -162,7 +162,7 @@ _nss_files_endnetgrent (struct __netgrent *result)
 
 enum nss_status
 _nss_netgroup_parseline (char **cursor, struct __netgrent *result,
-                        char *buffer, int buflen)
+                        char *buffer, size_t buflen, int *errnop)
 {
   enum nss_status status;
   const char *host, *user, *domain;
@@ -170,8 +170,7 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result,
 
   /* Some sanity checks.  */
   if (cp == NULL)
-    /* User bug.  setnetgrent() wasn't called before.  */
-    abort ();
+    return NSS_STATUS_NOTFOUND;
 
   /* First skip leading spaces.  */
   while (isspace (*cp))
@@ -228,7 +227,7 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result,
      to the private buffer we have to make sure it is big enough.  */
   if (cp - host > buflen)
     {
-      __set_errno (ERANGE);
+      *errnop = ERANGE;
       status = NSS_STATUS_UNAVAIL;
     }
   else
@@ -259,11 +258,13 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result,
 
 
 enum nss_status
-_nss_files_getnetgrent_r (struct __netgrent *result, char *buffer, int buflen)
+_nss_files_getnetgrent_r (struct __netgrent *result, char *buffer,
+                         size_t buflen, int *errnop)
 {
   enum nss_status status;
 
-  status = _nss_netgroup_parseline (&result->cursor, result, buffer, buflen);
+  status = _nss_netgroup_parseline (&result->cursor, result, buffer, buflen,
+                                   errnop);
 
   return status;
 }