diff options
author | Mystery Man <unknown@mandriva.org> | 2003-08-20 07:37:27 +0000 |
---|---|---|
committer | Mystery Man <unknown@mandriva.org> | 2003-08-20 07:37:27 +0000 |
commit | 7f2ac73888b8ef372ea597049981b27e7d810ac2 (patch) | |
tree | 354132889b63bbe5f446cb82869b3c3367135a80 /mdk-stage1/dietlibc/libcruft/gethostbyaddr.c | |
parent | 327bd24f8e4291bd1882de1990dd7339f781a9cb (diff) | |
download | drakx-topic/MDKC_1_0.tar drakx-topic/MDKC_1_0.tar.gz drakx-topic/MDKC_1_0.tar.bz2 drakx-topic/MDKC_1_0.tar.xz drakx-topic/MDKC_1_0.zip |
This commit was manufactured by cvs2svn to create branch 'MDKC_1_0'.topic/MDKC_1_0
Diffstat (limited to 'mdk-stage1/dietlibc/libcruft/gethostbyaddr.c')
-rw-r--r-- | mdk-stage1/dietlibc/libcruft/gethostbyaddr.c | 37 |
1 files changed, 17 insertions, 20 deletions
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 <netdb.h> #include <stdlib.h> #include <arpa/inet.h> -#include <sys/poll.h> #include <unistd.h> #include <errno.h> +#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!") |