aboutsummaryrefslogtreecommitdiff
path: root/nscd/hstcache.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-01-15 10:52:50 +0000
committerUlrich Drepper <drepper@redhat.com>2003-01-15 10:52:50 +0000
commit9caf4f1c67e137804f4bca9eb65bd0132424022a (patch)
tree33f1aa53ffc08e5aff06a6c7eb6977969febeb51 /nscd/hstcache.c
parentc9f24336e0c78fc4722f857902f1bf921b2ca1d1 (diff)
downloadglibc-9caf4f1c67e137804f4bca9eb65bd0132424022a.tar
glibc-9caf4f1c67e137804f4bca9eb65bd0132424022a.tar.gz
glibc-9caf4f1c67e137804f4bca9eb65bd0132424022a.tar.bz2
glibc-9caf4f1c67e137804f4bca9eb65bd0132424022a.zip
Update.
* nscd/nscd_getpw_r.c (nscd_getpw_r): Consolidate writing of the request with one writev call. Protect all read calls with TEMP_FAILURE_RETRY. * nscd/nscd_getgr_r.c (nscd_getgr_r): Likewise. * nscd/nscd_gethst_r.c (nscd_gethst_r): Likewise. * nscd/hstcache.c: Use extend_alloca to reallocate alloca'd buffer. Protect writev calls with TEMP_FAILURE_RETRY. * nscd/grpcache.c: Likewise. * nscd/pwdcache.c: Likewise.
Diffstat (limited to 'nscd/hstcache.c')
-rw-r--r--nscd/hstcache.c78
1 files changed, 20 insertions, 58 deletions
diff --git a/nscd/hstcache.c b/nscd/hstcache.c
index 19a85b9409..08d11e4586 100644
--- a/nscd/hstcache.c
+++ b/nscd/hstcache.c
@@ -18,6 +18,7 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
+#include <alloca.h>
#include <assert.h>
#include <errno.h>
#include <error.h>
@@ -103,7 +104,7 @@ cache_addhst (struct database *db, int fd, request_header *req, void *key,
total = sizeof (notfound);
- written = writev (fd, &iov_notfound, 1);
+ written = TEMP_FAILURE_RETRY (writev (fd, &iov_notfound, 1));
copy = malloc (req->key_len);
if (copy == NULL)
@@ -315,10 +316,11 @@ addhstbyname (struct database *db, int fd, request_header *req,
{
char *old_buffer = buffer;
errno = 0;
- buflen += 1024;
+#define INCR 1024
if (__builtin_expect (buflen > 32768, 0))
{
+ buflen += INCR;
buffer = (char *) realloc (use_malloc ? buffer : NULL, buflen);
if (buffer == NULL)
{
@@ -332,19 +334,9 @@ addhstbyname (struct database *db, int fd, request_header *req,
use_malloc = true;
}
else
- {
- buffer = (char *) alloca (buflen);
-#if _STACK_GROWS_DOWN
- if (buffer + buflen == old_buffer)
- buflen = 2 * buflen - 1024;
-#elif _STACK_GROWS_UP
- if (old_buffer + buflen - 1024 == buffer)
- {
- buffer = old_buffer;
- buflen = 2 * buflen - 1024;
- }
-#endif
- }
+ /* Allocate a new buffer on the stack. If possible combine it
+ with the previously allocated buffer. */
+ buffer = (char *) extend_alloca (buffer, buflen, buflen + INCR);
}
if (secure[hstdb])
@@ -392,10 +384,10 @@ addhstbyaddr (struct database *db, int fd, request_header *req,
{
char *old_buffer = buffer;
errno = 0;
- buflen += 1024;
if (__builtin_expect (buflen > 32768, 0))
{
+ buflen += INCR;
buffer = (char *) realloc (use_malloc ? buffer : NULL, buflen);
if (buffer == NULL)
{
@@ -409,19 +401,9 @@ addhstbyaddr (struct database *db, int fd, request_header *req,
use_malloc = true;
}
else
- {
- buffer = (char *) alloca (buflen);
-#if _STACK_GROWS_DOWN
- if (buffer + buflen == old_buffer)
- buflen = 2 * buflen - 1024;
-#elif _STACK_GROWS_UP
- if (old_buffer + buflen - 1024 == buffer)
- {
- buffer = old_buffer;
- buflen = 2 * buflen - 1024;
- }
-#endif
- }
+ /* Allocate a new buffer on the stack. If possible combine it
+ with the previously allocated buffer. */
+ buffer = (char *) extend_alloca (buffer, buflen, buflen + INCR);
}
if (secure[hstdb])
@@ -450,7 +432,7 @@ addhstbynamev6 (struct database *db, int fd, request_header *req,
bool use_malloc = false;
if (__builtin_expect (debug_level > 0, 0))
- dbg_log (_("Haven't found \"%s\" in hosts cache!"), key);
+ dbg_log (_("Haven't found \"%s\" in hosts cache!"), (char *) key);
if (secure[hstdb])
{
@@ -465,10 +447,10 @@ addhstbynamev6 (struct database *db, int fd, request_header *req,
{
char *old_buffer = buffer;
errno = 0;
- buflen += 1024;
if (__builtin_expect (buflen > 32768, 0))
{
+ buflen += INCR;
buffer = (char *) realloc (use_malloc ? buffer : NULL, buflen);
if (buffer == NULL)
{
@@ -482,19 +464,9 @@ addhstbynamev6 (struct database *db, int fd, request_header *req,
use_malloc = true;
}
else
- {
- buffer = (char *) alloca (buflen);
-#if _STACK_GROWS_DOWN
- if (buffer + buflen == old_buffer)
- buflen = 2 * buflen - 1024;
-#elif _STACK_GROWS_UP
- if (old_buffer + buflen - 1024 == buffer)
- {
- buffer = old_buffer;
- buflen = 2 * buflen - 1024;
- }
-#endif
- }
+ /* Allocate a new buffer on the stack. If possible combine it
+ with the previously allocated buffer. */
+ buffer = (char *) extend_alloca (buffer, buflen, buflen + INCR);
}
if (secure[hstdb])
@@ -542,10 +514,10 @@ addhstbyaddrv6 (struct database *db, int fd, request_header *req,
{
char *old_buffer = buffer;
errno = 0;
- buflen += 1024;
if (__builtin_expect (buflen > 32768, 0))
{
+ buflen += INCR;
buffer = (char *) realloc (use_malloc ? buffer : NULL, buflen);
if (buffer == NULL)
{
@@ -559,19 +531,9 @@ addhstbyaddrv6 (struct database *db, int fd, request_header *req,
use_malloc = true;
}
else
- {
- buffer = (char *) alloca (buflen);
-#if _STACK_GROWS_DOWN
- if (buffer + buflen == old_buffer)
- buflen = 2 * buflen - 1024;
-#elif _STACK_GROWS_UP
- if (old_buffer + buflen - 1024 == buffer)
- {
- buffer = old_buffer;
- buflen = 2 * buflen - 1024;
- }
-#endif
- }
+ /* Allocate a new buffer on the stack. If possible combine it
+ with the previously allocated buffer. */
+ buffer = (char *) extend_alloca (buffer, buflen, buflen + INCR);
}
if (secure[hstdb])