summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2004-09-07 10:34:35 +0000
committerEric Andersen <andersen@codepoet.org>2004-09-07 10:34:35 +0000
commit18d6d9564f59dca657e1932ddc811c43d905c9ef (patch)
treed08411bbf6b563c46d5fb85a5c573ec6e7bcd2a4
parent003f2d15c140b51f17f31f0277bc7ea85d805fc9 (diff)
Implement gethostent_r
-rw-r--r--libc/inet/resolv.c46
1 files changed, 31 insertions, 15 deletions
diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c
index bc1899cad..d96b2b79a 100644
--- a/libc/inet/resolv.c
+++ b/libc/inet/resolv.c
@@ -111,8 +111,8 @@
* and read_etc_hosts; getnameinfo() port from glibc; defined
* defined ip6addr_any and in6addr_loopback)
*
- * 2-Feb-2002 Erik Andersen <andersee@debian.org>
- * Added gethostent(), sethostent(), and endhostent()
+ * 2-Feb-2002 Erik Andersen <andersen@codepoet.org>
+ * Added gethostent(), sethostent(), and endhostent()
*
* 17-Aug-2002 Manuel Novoa III <mjn3@codepoet.org>
* Fixed __read_etc_hosts_r to return alias list, and modified buffer
@@ -128,6 +128,9 @@
* and ns_name_ntop() from glibc 2.3.2 for compatibility with ipsec-tools
* and openldap.
*
+ * 7-Sep-2004 Erik Andersen <andersen@codepoet.org>
+ * Added gethostent_r()
+ *
*/
#define __FORCE_GLIBC
@@ -1042,6 +1045,8 @@ struct hostent *gethostbyname2(const char *name, int family)
}
#endif
+
+
#ifdef L_res_init
struct __res_state _res;
@@ -1554,6 +1559,29 @@ void sethostent (int stay_open)
UNLOCK;
}
+int gethostent_r(struct hostent *result_buf, char *buf, size_t buflen,
+ struct hostent **result, int *h_errnop)
+{
+ int ret;
+
+ LOCK;
+ if (__gethostent_fp == NULL) {
+ __open_etc_hosts(&__gethostent_fp);
+ if (__gethostent_fp == NULL) {
+ UNLOCK;
+ *result=NULL;
+ return 0;
+ }
+ }
+
+ ret = __read_etc_hosts_r(__gethostent_fp, NULL, AF_INET, GETHOSTENT,
+ result_buf, buf, buflen, result, h_errnop);
+ if (__stay_open==0) {
+ fclose(__gethostent_fp);
+ }
+ UNLOCK;
+ return(ret);
+}
struct hostent *gethostent (void)
{
@@ -1569,19 +1597,7 @@ struct hostent *gethostent (void)
struct hostent *host;
LOCK;
- if (__gethostent_fp == NULL) {
- __open_etc_hosts(&__gethostent_fp);
- if (__gethostent_fp == NULL) {
- UNLOCK;
- return((struct hostent *)NULL);
- }
- }
-
- __read_etc_hosts_r(__gethostent_fp, NULL, AF_INET, GETHOSTENT,
- &h, buf, sizeof(buf), &host, &h_errno);
- if (__stay_open==0) {
- fclose(__gethostent_fp);
- }
+ gethostent_r(&h, buf, sizeof(buf), &host, &h_errno);
UNLOCK;
return(host);
}