diff options
Diffstat (limited to 'nss')
-rw-r--r-- | nss/Makefile | 2 | ||||
-rw-r--r-- | nss/getXXbyYY.c | 13 | ||||
-rw-r--r-- | nss/getXXent.c | 13 | ||||
-rw-r--r-- | nss/nss_files/files-XXX.c | 1 | ||||
-rw-r--r-- | nss/nsswitch.c | 2 |
5 files changed, 23 insertions, 8 deletions
diff --git a/nss/Makefile b/nss/Makefile index 9193cf2214..ff3e039d6e 100644 --- a/nss/Makefile +++ b/nss/Makefile @@ -55,7 +55,7 @@ libnss_dns-routines := dns-host dns-network libnss_db-routines := $(addprefix db-,$(filter-out hosts network key,\ $(databases))) -generated += $(filter-out db-netgrp.c, \ +generated += $(filter-out db-alias.c db-netgrp.c, \ $(addsuffix .c,$(libnss_db-routines))) distribute += db-XXX.c diff --git a/nss/getXXbyYY.c b/nss/getXXbyYY.c index 8449a38973..529864a088 100644 --- a/nss/getXXbyYY.c +++ b/nss/getXXbyYY.c @@ -96,15 +96,22 @@ FUNCTION_NAME (ADD_PARAMS) while (buffer != NULL && INTERNAL (REENTRANT_NAME) (ADD_VARIABLES, &resbuf, buffer, buffer_size, &result H_ERRNO_VAR) != 0 +#ifdef NEED_H_ERRNO + && h_errno_tmp == NETDB_INTERNAL +#endif && errno == ERANGE) { char *new_buf; buffer_size += BUFLEN; new_buf = realloc (buffer, buffer_size); if (new_buf == NULL) - /* We are out of memory. Free the current buffer so that the - process gets a chance for a normal termination. */ - free (buffer); + { + /* We are out of memory. Free the current buffer so that the + process gets a chance for a normal termination. */ + save = errno; + free (buffer); + __set_errno (save); + } buffer = new_buf; } diff --git a/nss/getXXent.c b/nss/getXXent.c index 2d6d1c32e6..f180171150 100644 --- a/nss/getXXent.c +++ b/nss/getXXent.c @@ -84,15 +84,22 @@ GETFUNC_NAME (void) while (buffer != NULL && INTERNAL (REENTRANT_GETNAME) (&resbuf, buffer, buffer_size, &result H_ERRNO_VAR) != 0 +#ifdef NEED_H_ERRNO + && h_errno == NETDB_INTERNAL +#endif && errno == ERANGE) { char *new_buf; buffer_size += BUFLEN; new_buf = realloc (buffer, buffer_size); if (new_buf == NULL) - /* We are out of memory. Free the current buffer so that the - process gets a chance for a normal termination. */ - free (buffer); + { + /* We are out of memory. Free the current buffer so that the + process gets a chance for a normal termination. */ + save = errno; + free (buffer); + __set_errno (save); + } buffer = new_buf; } diff --git a/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c index 014e2729a4..2f99420f30 100644 --- a/nss/nss_files/files-XXX.c +++ b/nss/nss_files/files-XXX.c @@ -149,6 +149,7 @@ internal_getent (struct STRUCTURE *result, if (buflen < (int) sizeof *data + 1) { __set_errno (ERANGE); + HERRNO_SET (NETDB_INTERNAL); return NSS_STATUS_TRYAGAIN; } diff --git a/nss/nsswitch.c b/nss/nsswitch.c index af74493c3f..ac743c752c 100644 --- a/nss/nsswitch.c +++ b/nss/nsswitch.c @@ -22,13 +22,13 @@ #include <errno.h> #include <netdb.h> #include <libc-lock.h> +#include <link.h> /* We need some help from ld.so. */ #include <search.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "nsswitch.h" -#include "../elf/link.h" /* We need some help from ld.so. */ /* Prototypes for the local functions. */ static void *nss_lookup_function (service_user *ni, const char *fct_name); |