-/* Copyright (C) 1996, 1997, 1998, 1999, 2002, 2004, 2007
+/* Copyright (C) 1996, 1997, 1998, 1999, 2002, 2004
Free Software Foundation, Inc.
This file is part of the GNU C Library.
Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
/* Prototypes for local functions. */
static enum nss_status getanswer_r (const querybuf *answer, int anslen,
struct netent *result, char *buffer,
- size_t buflen, int *errnop, int *h_errnop,
- lookup_method net_i);
+ size_t buflen, lookup_method net_i);
enum nss_status
? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
}
- status = getanswer_r (net_buffer.buf, anslen, result, buffer, buflen,
- errnop, herrnop, BYNAME);
+ status = getanswer_r (net_buffer.buf, anslen, result, buffer, buflen, BYNAME);
if (net_buffer.buf != orig_net_buffer)
free (net_buffer.buf);
return status;
? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
}
- status = getanswer_r (net_buffer.buf, anslen, result, buffer, buflen,
- errnop, herrnop, BYADDR);
+ status = getanswer_r (net_buffer.buf, anslen, result, buffer, buflen, BYADDR);
if (net_buffer.buf != orig_net_buffer)
free (net_buffer.buf);
if (status == NSS_STATUS_SUCCESS)
static enum nss_status
getanswer_r (const querybuf *answer, int anslen, struct netent *result,
- char *buffer, size_t buflen, int *errnop, int *h_errnop,
- lookup_method net_i)
+ char *buffer, size_t buflen, lookup_method net_i)
{
/*
* Find first satisfactory answer
{
char *aliases[MAX_NR_ALIASES];
char linebuffer[0];
- } *net_data;
-
- uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct net_data);
- buffer += pad;
-
- if (__builtin_expect (buflen < sizeof (*net_data) + pad, 0))
- {
- /* The buffer is too small. */
- too_small:
- *errnop = ERANGE;
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
- buflen -= pad;
-
- net_data = (struct net_data *) buffer;
+ } *net_data = (struct net_data *) buffer;
int linebuflen = buflen - offsetof (struct net_data, linebuffer);
- if (buflen - offsetof (struct net_data, linebuffer) != linebuflen)
- linebuflen = INT_MAX;
const unsigned char *end_of_message = &answer->buf[anslen];
const HEADER *header_pointer = &answer->hdr;
/* #/records in the answer section. */
if (n != -1 && __ns_name_ntop (packtmp, bp, linebuflen) == -1)
{
if (errno == EMSGSIZE)
- goto too_small;
+ {
+ errno = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
n = -1;
}
if (n != -1 && __ns_name_ntop (packtmp, bp, linebuflen) == -1)
{
if (errno == EMSGSIZE)
- goto too_small;
+ {
+ errno = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
n = -1;
}