diff options
author | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-06-04 18:31:57 +0000 |
---|---|---|
committer | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-06-04 18:31:57 +0000 |
commit | 09e967c2d732783b2579e4e120cd9b608404cb00 (patch) | |
tree | 8d2783a6a7e33608c6012efd6a88b8f5694df81d /mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c | |
parent | 18fcff49d3c836697d3b75a3d01d31c700e69974 (diff) | |
download | drakx-backup-do-not-use-09e967c2d732783b2579e4e120cd9b608404cb00.tar drakx-backup-do-not-use-09e967c2d732783b2579e4e120cd9b608404cb00.tar.gz drakx-backup-do-not-use-09e967c2d732783b2579e4e120cd9b608404cb00.tar.bz2 drakx-backup-do-not-use-09e967c2d732783b2579e4e120cd9b608404cb00.tar.xz drakx-backup-do-not-use-09e967c2d732783b2579e4e120cd9b608404cb00.zip |
Merge from R9_0-AMD64, most notably:
- AMD64 support to insmod-busybox, minilibc, et al.
- Sync with insmod-modutils 2.4.19 something but everyone should use
dietlibc nowadays
- Factor out compilation and prefix with $(DIET) for dietlibc builds
- 64-bit & varargs fixes
Diffstat (limited to 'mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c')
-rw-r--r-- | mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c b/mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c index b505ccfbc..75da5e320 100644 --- a/mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c +++ b/mdk-stage1/dietlibc/libcruft/gethostbyname2_r.c @@ -5,15 +5,10 @@ #include <netdb.h> #include <stdlib.h> #include <arpa/inet.h> -#include <sys/poll.h> #include <unistd.h> +#include "dietfeatures.h" #include <errno.h> - -#include <stdio.h> - -extern int __dns_gethostbyx_r(const char* name, struct hostent* result, - char *buf, size_t buflen, - struct hostent **RESULT, int *h_errnop, int lookfor); +#include "dietdns.h" /* Oh boy, this interface sucks so badly, there are no words for it. * Not one, not two, but _three_ error signalling methods! (*h_errnop @@ -22,7 +17,7 @@ extern int __dns_gethostbyx_r(const char* name, struct hostent* result, int gethostbyname2_r(const char* name, int AF, struct hostent* result, char *buf, size_t buflen, struct hostent **RESULT, int *h_errnop) { - int L=strlen(name); + size_t L=strlen(name); int lookfor=0; switch (AF) { case AF_INET: lookfor=1; break; @@ -31,6 +26,30 @@ int gethostbyname2_r(const char* name, int AF, struct hostent* result, } result->h_name=buf; if (buflen<L) { *h_errnop=ERANGE; return 1; } +#ifdef WANT_ETC_HOSTS + { + struct hostent* r; + while ((r=gethostent_r(buf,buflen))) { + if (r->h_addrtype==AF) { + int i; + if (!strcmp(r->h_name,name)) { /* found it! */ +found: + memmove(result,r,sizeof(struct hostent)); + *RESULT=result; + *h_errnop=0; + endhostent(); + return 0; + } + for (i=0; i<16; ++i) { + if (r->h_aliases[i]) { + if (!strcmp(r->h_aliases[i],name)) goto found; + } else break; + } + } + } + endhostent(); + } +#endif strcpy(buf,name); return __dns_gethostbyx_r(name,result,buf+L,buflen-L,RESULT,h_errnop,lookfor); } |