summaryrefslogtreecommitdiff
path: root/ndb
diff options
context:
space:
mode:
authortomas@poseidon.ndb.mysql.com <>2004-10-25 10:19:45 +0000
committertomas@poseidon.ndb.mysql.com <>2004-10-25 10:19:45 +0000
commit62b7e4e26f90c59305114882ed6346413806a64a (patch)
treeccdc7560e2f3b9dc3def4e60e1ad87e52fa23d36 /ndb
parent36a2a5e27774c35b302ee2a4a424c7330b6fe622 (diff)
downloadmariadb-git-62b7e4e26f90c59305114882ed6346413806a64a.tar.gz
using my_gethostbyname_r in Ndb_getInAddr
Diffstat (limited to 'ndb')
-rw-r--r--ndb/src/common/portlib/NdbTCP.cpp30
1 files changed, 14 insertions, 16 deletions
diff --git a/ndb/src/common/portlib/NdbTCP.cpp b/ndb/src/common/portlib/NdbTCP.cpp
index a711a586203..35b0c8c21e4 100644
--- a/ndb/src/common/portlib/NdbTCP.cpp
+++ b/ndb/src/common/portlib/NdbTCP.cpp
@@ -16,29 +16,27 @@
#include <ndb_global.h>
-#include <NdbMutex.h>
+#include <my_net.h>
#include <NdbTCP.h>
-#if defined NDB_WIN32 || defined SCO
-static NdbMutex & LOCK_gethostbyname = * NdbMutex_Create();
-#else
-static NdbMutex LOCK_gethostbyname = NDB_MUTEX_INITIALIZER;
-#endif
-
extern "C"
int
Ndb_getInAddr(struct in_addr * dst, const char *address) {
DBUG_ENTER("Ndb_getInAddr");
- struct hostent * hostPtr;
- NdbMutex_Lock(&LOCK_gethostbyname);
- hostPtr = gethostbyname(address);
- if (hostPtr != NULL) {
- dst->s_addr = ((struct in_addr *) *hostPtr->h_addr_list)->s_addr;
- NdbMutex_Unlock(&LOCK_gethostbyname);
- DBUG_RETURN(0);
+ {
+ int tmp_errno;
+ struct hostent tmp_hostent, *hp;
+ char buff[GETHOSTBYNAME_BUFF_SIZE];
+ hp = my_gethostbyname_r(address,&tmp_hostent,buff,sizeof(buff),
+ &tmp_errno);
+ if (hp)
+ {
+ memcpy(dst, hp->h_addr, min(sizeof(*dst), (size_t) hp->h_length));
+ my_gethostbyname_r_free();
+ DBUG_RETURN(0);
+ }
+ my_gethostbyname_r_free();
}
- NdbMutex_Unlock(&LOCK_gethostbyname);
-
/* Try it as aaa.bbb.ccc.ddd. */
dst->s_addr = inet_addr(address);
if (dst->s_addr !=