(nss_lookup_function): Inclide function.def, not functions.def.
[kopensolaris-gnu/glibc.git] / nss / nss_files / files-XXX.c
index 014e272..3281580 100644 (file)
@@ -1,5 +1,5 @@
 /* Common code for file-based databases in nss_files module.
-   Copyright (C) 1996 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997 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
@@ -21,7 +21,7 @@
 #include <ctype.h>
 #include <assert.h>
 #include <errno.h>
-#include <libc-lock.h>
+#include <bits/libc-lock.h>
 #include "nsswitch.h"
 
 /* These symbols are defined by the including source file:
@@ -40,6 +40,7 @@
 #define DATAFILE       "/etc/" DATABASE
 
 #ifdef NEED_H_ERRNO
+# include <netdb.h>
 # define H_ERRNO_PROTO , int *herrnop
 # define H_ERRNO_ARG   , herrnop
 # define H_ERRNO_SET(val) (*herrnop = (val))
@@ -145,10 +146,12 @@ internal_getent (struct STRUCTURE *result,
   char *p;
   struct parser_data *data = (void *) buffer;
   int linebuflen = buffer + buflen - data->linebuffer;
+  int parse_result;
 
   if (buflen < (int) sizeof *data + 1)
     {
       __set_errno (ERANGE);
+      H_ERRNO_SET (NETDB_INTERNAL);
       return NSS_STATUS_TRYAGAIN;
     }
 
@@ -180,10 +183,10 @@ internal_getent (struct STRUCTURE *result,
   while (*p == '\0' || *p == '#' /* Ignore empty and comment lines.  */
         /* Parse the line.  If it is invalid, loop to get the next
            line of the file to parse.  */
-        || ! parse_line (p, result, data, buflen));
+        || ! (parse_result = parse_line (p, result, data, buflen)));
 
   /* Filled in RESULT with the next entry from the database file.  */
-  return NSS_STATUS_SUCCESS;
+  return parse_result == -1 ? NSS_STATUS_TRYAGAIN : NSS_STATUS_SUCCESS;
 }