From de47eb59bb829423b1d0f47ba13099073999b3cb Mon Sep 17 00:00:00 2001 From: Nicolas Planel Date: Wed, 29 Oct 2003 16:07:11 +0000 Subject: Corporate Server 2.1.1 release --- mdk-stage1/dietlibc/libcruft/gethostbyaddr.c | 37 +++++++++++++--------------- 1 file changed, 17 insertions(+), 20 deletions(-) (limited to 'mdk-stage1/dietlibc/libcruft/gethostbyaddr.c') diff --git a/mdk-stage1/dietlibc/libcruft/gethostbyaddr.c b/mdk-stage1/dietlibc/libcruft/gethostbyaddr.c index a4207d44d..74828df56 100644 --- a/mdk-stage1/dietlibc/libcruft/gethostbyaddr.c +++ b/mdk-stage1/dietlibc/libcruft/gethostbyaddr.c @@ -5,34 +5,31 @@ #include #include #include -#include #include #include +#include "dietwarning.h" -extern int h_errno; +static const int hostentsize=((sizeof(struct hostent)+15)&(-16)); + +extern size_t __dns_buflen; +extern char* __dns_buf; +extern void __dns_makebuf(size_t x); struct hostent* gethostbyaddr(const void *addr, socklen_t len, int type) { - static struct hostent hostbuf; + struct hostent *hostbuf; struct hostent *hp; - size_t hstbuflen; - char *tmphstbuf; int res; - int herr; - - hstbuflen = 1024; - /* Allocate buffer, remember to free it to avoid a memory leakage. */ - tmphstbuf = malloc (hstbuflen); - while ((res = gethostbyaddr_r (addr, len, type, &hostbuf, tmphstbuf, hstbuflen, - &hp, &herr)) == ERANGE) - { - /* Enlarge the buffer. */ - hstbuflen *= 2; - tmphstbuf = realloc (tmphstbuf, hstbuflen); - } - /* Check for errors. */ - if (res || hp == NULL) - return NULL; + __dns_buflen=512; + do { + __dns_makebuf(__dns_buflen*2); if (!__dns_buf) return 0; + hostbuf=(struct hostent*)__dns_buf; + } while ((res = gethostbyaddr_r (addr, len, type, hostbuf, + __dns_buf+hostentsize, + __dns_buflen-hostentsize, &hp, + &h_errno)) == ERANGE); + if (res) hp=0; return hp; } +link_warning("gethostbyaddr","warning: gethostbyaddr() leaks memory. Use gethostbyaddr_r instead!") -- cgit v1.2.1