summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/libcruft/gethostbyname2.c
diff options
context:
space:
mode:
authorMystery Man <unknown@mandriva.org>2003-08-20 07:37:27 +0000
committerMystery Man <unknown@mandriva.org>2003-08-20 07:37:27 +0000
commit7f2ac73888b8ef372ea597049981b27e7d810ac2 (patch)
tree354132889b63bbe5f446cb82869b3c3367135a80 /mdk-stage1/dietlibc/libcruft/gethostbyname2.c
parent327bd24f8e4291bd1882de1990dd7339f781a9cb (diff)
downloaddrakx-7f2ac73888b8ef372ea597049981b27e7d810ac2.tar
drakx-7f2ac73888b8ef372ea597049981b27e7d810ac2.tar.gz
drakx-7f2ac73888b8ef372ea597049981b27e7d810ac2.tar.bz2
drakx-7f2ac73888b8ef372ea597049981b27e7d810ac2.tar.xz
drakx-7f2ac73888b8ef372ea597049981b27e7d810ac2.zip
This commit was manufactured by cvs2svn to create branch 'MDKC_1_0'.topic/MDKC_1_0
Diffstat (limited to 'mdk-stage1/dietlibc/libcruft/gethostbyname2.c')
-rw-r--r--mdk-stage1/dietlibc/libcruft/gethostbyname2.c40
1 files changed, 18 insertions, 22 deletions
diff --git a/mdk-stage1/dietlibc/libcruft/gethostbyname2.c b/mdk-stage1/dietlibc/libcruft/gethostbyname2.c
index 3d8296616..1ca140dbe 100644
--- a/mdk-stage1/dietlibc/libcruft/gethostbyname2.c
+++ b/mdk-stage1/dietlibc/libcruft/gethostbyname2.c
@@ -1,4 +1,3 @@
-
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
@@ -6,35 +5,32 @@
#include <netdb.h>
#include <stdlib.h>
#include <arpa/inet.h>
-#include <sys/poll.h>
#include <unistd.h>
#include <errno.h>
+#include "dietwarning.h"
+
+static const int hostentsize=((sizeof(struct hostent)+15)&(-16));
-extern int h_errno;
+extern size_t __dns_buflen;
+extern char* __dns_buf;
+extern void __dns_makebuf(size_t x);
-struct hostent* gethostbyname2(const char *host,int AF)
-{
- static struct hostent hostbuf;
+struct hostent* gethostbyname2(const char *host,int AF) {
+ 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 = gethostbyname2_r (host, AF,&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 = gethostbyname2_r (host, AF, hostbuf,
+ __dns_buf+hostentsize,
+ __dns_buflen-hostentsize, &hp,
+ &herr)) == ERANGE);
+ if (res) hp=0;
return hp;
}
+link_warning("gethostbyname2","warning: gethostbyname2() leaks memory. Use gethostbyname2_r instead!")