/* 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
#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:
#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))
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;
}
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;
}