-/* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996, 1997, 1998 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
static size_t buffer_size;
static struct group resbuf;
struct group *result;
- int save;
+ int save, save_errno;
/* Get lock. */
__libc_lock_lock (lock);
buffer = malloc (buffer_size);
}
+ /* We don't want to pass errno == 0 or errno == ERANGE back */
+ save_errno = errno;
+
while (buffer != NULL
&& __fgetgrent_r (stream, &resbuf, buffer, buffer_size, &result) != 0
&& errno == ERANGE)
{
char *new_buf;
buffer_size += NSS_BUFLEN_GROUP;
+ __set_errno (0);
new_buf = realloc (buffer, buffer_size);
if (new_buf == NULL)
{
buffer = new_buf;
}
+ if (errno == 0)
+ __set_errno (save_errno);
+
if (buffer == NULL)
result = NULL;
-/* Copyright (C) 1989, 1991, 1993, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1989, 91, 93, 96, 97, 98 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
size_t ngroups;
gid_t *groups;
int status;
+ int save_errno;
#ifdef NGROUPS_MAX
# define limit NGROUPS_MAX
n = 0;
groups[n++] = group;
+ save_errno = errno;
do
{
{
buflen *= 2;
tmpbuf = __alloca (buflen);
+ __set_errno (0);
}
if (status == 0 && g->gr_gid != group)
while (status == 0);
done:
+ __set_errno (save_errno);
endgrent ();
return setgroups (n, groups);
int s, lport, timo;
char c;
int herr;
+ int save_errno;
pid = getpid();
hstbuflen = 1024;
tmphstbuf = __alloca (hstbuflen);
+ save_errno = errno;
+
while (__gethostbyname_r (*ahost, &hostbuf, tmphstbuf, hstbuflen,
&hp, &herr) < 0)
if (herr != NETDB_INTERNAL || errno != ERANGE)
/* Enlarge the buffer. */
hstbuflen *= 2;
tmphstbuf = __alloca (hstbuflen);
+ __set_errno (0);
}
+ __set_errno (save_errno);
*ahost = hp->h_name;
oldmask = sigblock(sigmask(SIGURG));
for (timo = 1, lport = IPPORT_RESERVED - 1;;) {
u_int32_t addr;
char **ap;
int herr;
+ int save_errno;
buflen = 1024;
buffer = __alloca (buflen);
+ save_errno = errno;
while (__gethostbyname_r (rhost, &hostbuf, buffer, buflen, &hp, &herr)
< 0)
/* Enlarge the buffer. */
buflen *= 2;
buffer = __alloca (buflen);
+ __set_errno (0);
}
+ __set_errno (save_errno);
+
for (ap = hp->h_addr_list; *ap; ++ap) {
bcopy(*ap, &addr, sizeof(addr));
if (iruserok(addr, superuser, ruser, luser) == 0)
register u_int32_t laddr;
register char **pp;
int herr;
+ int save_errno;
/* Try for raw ip address first. */
if (isdigit(*lhost) && (int32_t)(laddr = inet_addr(lhost)) != -1)
/* Better be a hostname. */
buflen = 1024;
buffer = __alloca (buflen);
+ save_errno = errno;
+
while (__gethostbyname_r (lhost, &hostbuf, buffer, buflen, &hp, &herr)
< 0)
if (herr != NETDB_INTERNAL || errno != ERANGE)
/* Enlarge the buffer. */
buflen *= 2;
buffer = __alloca (buflen);
+ __set_errno (0);
}
+ __set_errno (save_errno);
+
/* Spin through ip addresses. */
for (pp = hp->h_addr_list; *pp; ++pp)
if (!bcmp(&raddr, *pp, sizeof(u_int32_t)))
int s, timo = 1, s3;
char c;
int herr;
+ int save_errno;
hstbuflen = 1024;
hsttmpbuf = __alloca (hstbuflen);
+ save_errno = errno;
+
while (__gethostbyname_r (*ahost, &hostbuf, hsttmpbuf, hstbuflen,
&hp, &herr) < 0)
if (herr != NETDB_INTERNAL || errno != ERANGE)
/* Enlarge the buffer. */
hstbuflen *= 2;
hsttmpbuf = __alloca (hstbuflen);
+ __set_errno (0);
}
+ __set_errno (save_errno);
*ahost = hp->h_name;
ruserpass(hp->h_name, &name, &pass);
retry:
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 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
static size_t buffer_size;
static LOOKUP_TYPE resbuf;
LOOKUP_TYPE *result;
- int save;
+ int save, save_errno;
#ifdef NEED_H_ERRNO
int h_errno_tmp = 0;
#endif
#endif
}
+ /* We don't want to pass errno == 0 or errno == ERANGE back */
+ save_errno = errno;
+
while (buffer != NULL
&& INTERNAL (REENTRANT_NAME) (ADD_VARIABLES, &resbuf, buffer,
buffer_size, &result H_ERRNO_VAR) != 0
{
char *new_buf;
buffer_size += BUFLEN;
+ __set_errno (0);
new_buf = realloc (buffer, buffer_size);
if (new_buf == NULL)
{
buffer = new_buf;
}
+ if (errno == 0)
+ __set_errno (save_errno);
+
if (buffer == NULL)
result = NULL;
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 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
static size_t buffer_size;
static LOOKUP_TYPE resbuf;
LOOKUP_TYPE *result;
- int save;
+ int save, save_errno;
/* Get lock. */
__libc_lock_lock (lock);
buffer = malloc (buffer_size);
}
+ /* We don't want to pass errno == 0 or errno == ERANGE back */
+ save_errno = errno;
+
while (buffer != NULL
&& INTERNAL (REENTRANT_GETNAME) (&resbuf, buffer, buffer_size, &result
H_ERRNO_VAR) != 0
{
char *new_buf;
buffer_size += BUFLEN;
+ __set_errno (0);
new_buf = realloc (buffer, buffer_size);
if (new_buf == NULL)
{
buffer = new_buf;
}
+ if (errno == 0)
+ __set_errno (save_errno);
+
if (buffer == NULL)
result = NULL;
-/* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1996, 1997, 1998 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
static size_t buffer_size;
static struct passwd resbuf;
struct passwd *result;
- int save;
+ int save, save_errno;
/* Get lock. */
__libc_lock_lock (lock);
buffer = malloc (buffer_size);
}
+ /* We don't want to pass errno == 0 or errno == ERANGE back */
+ save_errno = errno;
+
while (buffer != NULL
&& __fgetpwent_r (stream, &resbuf, buffer, buffer_size, &result) != 0
&& errno == ERANGE)
{
char *new_buf;
buffer_size += NSS_BUFLEN_PASSWD;
+ __set_errno (0);
new_buf = realloc (buffer, buffer_size);
if (new_buf == NULL)
{
buffer = new_buf;
}
+ if (errno == 0)
+ __set_errno (save_errno);
+
if (buffer == NULL)
result = NULL;
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 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
static size_t buffer_size;
static struct spwd resbuf;
struct spwd *result;
- int save;
+ int save, save_errno;
/* Get lock. */
__libc_lock_lock (lock);
buffer = malloc (buffer_size);
}
+ /* We don't want to pass errno == 0 or errno == ERANGE back */
+ save_errno = errno;
while (buffer != NULL
&& __fgetspent_r (stream, &resbuf, buffer, buffer_size, &result) != 0
&& errno == ERANGE)
{
char *new_buf;
buffer_size += BUFLEN_SPWD;
+ __set_errno (0);
new_buf = realloc (buffer, buffer_size);
if (new_buf == NULL)
{
buffer = new_buf;
}
+ if (errno == 0)
+ __set_errno (save_errno);
+
if (buffer == NULL)
result = NULL;
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 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
static size_t buffer_size;
static struct spwd resbuf;
struct spwd *result;
- int save;
+ int save, save_errno;
/* Get lock. */
__libc_lock_lock (lock);
buffer = malloc (buffer_size);
}
+ /* We don't want to pass errno == 0 or errno == ERANGE back */
+ save_errno = errno;
while (buffer != NULL
&& __sgetspent_r (string, &resbuf, buffer, buffer_size, &result) != 0
&& errno == ERANGE)
{
char *new_buf;
buffer_size += BUFLEN_SPWD;
+ __set_errno (0);
new_buf = realloc (buffer, buffer_size);
if (new_buf == NULL)
{
buffer = new_buf;
}
+ if (errno == 0)
+ __set_errno (save_errno);
+
if (buffer == NULL)
result = NULL;
struct timeval tv;
CLIENT *client;
int herr;
+ int save_errno;
hstbuflen = 1024;
hsttmpbuf = __alloca (hstbuflen);
+ save_errno = errno;
while (__gethostbyname_r (hostname, &hostbuf, hsttmpbuf, hstbuflen,
&h, &herr) < 0)
if (herr != NETDB_INTERNAL || errno != ERANGE)
/* Enlarge the buffer. */
hstbuflen *= 2;
hsttmpbuf = __alloca (hstbuflen);
+ __set_errno (0);
}
+ if (errno == 0)
+ __set_errno (save_errno);
+
if (h->h_addrtype != AF_INET) {
/*
* Only support INET for now
/* Enlarge the buffer. */
prtbuflen *= 2;
prttmpbuf = __alloca (prtbuflen);
+ __set_errno (0);
}
sock = RPC_ANYSOCK;
enum clnt_stat clnt_stat;
struct hostent hostbuf, *hp;
struct timeval timeout, tottimeout;
+ int save_errno;
if (crp == 0) {
crp = (struct callrpc_private *)calloc(1, sizeof (*crp));
buflen = 1024;
buffer = __alloca (buflen);
+ save_errno = errno;
+
while (__gethostbyname_r (host, &hostbuf, buffer, buflen,
&hp, &herr) < 0)
if (herr != NETDB_INTERNAL || errno != ERANGE)
/* Enlarge the buffer. */
buflen *= 2;
buffer = __alloca (buflen);
+ __set_errno (0);
}
+ if (errno == 0)
+ __set_errno (save_errno);
+
timeout.tv_usec = 0;
timeout.tv_sec = 5;
bcopy(hp->h_addr, (char *)&server_addr.sin_addr, hp->h_length);
size_t buflen;
char *buffer;
int herr;
+ int save_errno;
buflen = 1024;
buffer = __alloca (buflen);
+ save_errno = errno;
+
while (__gethostbyname_r (host, &hostbuf, buffer, buflen, &hp, &herr)
< 0)
if (herr != NETDB_INTERNAL || errno != ERANGE)
/* Enlarge the buffer. */
buflen *= 2;
buffer = __alloca (buflen);
+ __set_errno (0);
}
+ __set_errno (save_errno);
bcopy(hp->h_addr, (char *) &addr.sin_addr, hp->h_length);
addr.sin_family = AF_INET;
addr.sin_port = 0;