Change everything to store error code through provided pointer and not
[kopensolaris-gnu/glibc.git] / nss / nss_files / files-netgrp.c
index 5f8b939..eb6e673 100644 (file)
@@ -1,5 +1,5 @@
 /* Netgroup file parser in nss_files modules.
 /* 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.
 
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
 
@@ -105,7 +105,7 @@ _nss_files_setnetgrent (const char *group, struct __netgrent *result)
                /* Remove these characters from the stored line.  */
                result->cursor -= 2;
 
                /* Remove these characters from the stored line.  */
                result->cursor -= 2;
 
-             /* Get netxt line.  */
+             /* Get next line.  */
              curlen = getline (&line, &line_len, fp);
              if (curlen <= 0)
                break;
              curlen = getline (&line, &line_len, fp);
              if (curlen <= 0)
                break;
@@ -160,9 +160,9 @@ _nss_files_endnetgrent (struct __netgrent *result)
 }
 
 
 }
 
 
-static enum nss_status
+enum nss_status
 _nss_netgroup_parseline (char **cursor, struct __netgrent *result,
 _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;
 {
   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)
 
   /* 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))
 
   /* 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)
     {
      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
       status = NSS_STATUS_UNAVAIL;
     }
   else
@@ -248,7 +247,7 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result,
 
       status = NSS_STATUS_SUCCESS;
 
 
       status = NSS_STATUS_SUCCESS;
 
-      /* Rememember where we stopped reading.  */
+      /* Remember where we stopped reading.  */
       *cursor = cp;
 
       result->first = 0;
       *cursor = cp;
 
       result->first = 0;
@@ -259,11 +258,13 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result,
 
 
 enum nss_status
 
 
 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;
 
 {
   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;
 }
 
   return status;
 }