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/gethostbyname.c | 39 ++++++++++++---------------- 1 file changed, 17 insertions(+), 22 deletions(-) (limited to 'mdk-stage1/dietlibc/libcruft/gethostbyname.c') diff --git a/mdk-stage1/dietlibc/libcruft/gethostbyname.c b/mdk-stage1/dietlibc/libcruft/gethostbyname.c index 5db5bf3c5..b4849be96 100644 --- a/mdk-stage1/dietlibc/libcruft/gethostbyname.c +++ b/mdk-stage1/dietlibc/libcruft/gethostbyname.c @@ -5,35 +5,30 @@ #include #include #include -#include #include #include +#include "dietwarning.h" -extern int h_errno; +static const int hostentsize=((sizeof(struct hostent)+15)&(-16)); -struct hostent* gethostbyname (const char *host) -{ - static struct hostent hostbuf; +extern size_t __dns_buflen; +extern char* __dns_buf; +extern void __dns_makebuf(size_t x); + +struct hostent* gethostbyname (const char *host) { + 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 = gethostbyname_r (host, &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 = gethostbyname_r (host, hostbuf, __dns_buf+hostentsize, + __dns_buflen-hostentsize, &hp, + &h_errno)) == ERANGE); + if (res) hp=0; return hp; } +link_warning("gethostbyname","warning: gethostbyname() leaks memory. Use gethostbyname_r instead!") -- cgit v1.2.1