summaryrefslogtreecommitdiff
path: root/src/network/core/os_abstraction.h
diff options
context:
space:
mode:
authorglx <glx@openttd.org>2009-04-02 23:22:59 +0000
committerglx <glx@openttd.org>2009-04-02 23:22:59 +0000
commit521bf687eef36e7c06d09ee610134eb21fed69a9 (patch)
tree259d66dea30dd7eb129263a1dbf93ba07fa59839 /src/network/core/os_abstraction.h
parentbeef5da970ba9571aa5673b53cad5edb8b065a2b (diff)
downloadopenttd-521bf687eef36e7c06d09ee610134eb21fed69a9.tar.xz
(svn r15919) -Fix (r15916): mingw doesn't know getnameinfo() (unless you compile for XP SP2+). Also fix a MSVC warning.
Diffstat (limited to 'src/network/core/os_abstraction.h')
-rw-r--r--src/network/core/os_abstraction.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/network/core/os_abstraction.h b/src/network/core/os_abstraction.h
index 8d5723639..c54189e9e 100644
--- a/src/network/core/os_abstraction.h
+++ b/src/network/core/os_abstraction.h
@@ -23,6 +23,25 @@
/* Windows has some different names for some types */
typedef SSIZE_T ssize_t;
typedef int socklen_t;
+#else
+#include "../../win32.h"
+
+static inline int OTTDgetnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, DWORD hostlen, char *serv, DWORD servlen, int flags)
+{
+ static int (WINAPI *getnameinfo)(const struct sockaddr *, socklen_t, char *, DWORD, char *, DWORD, int) = NULL;
+ static bool first_time = true;
+
+ if (first_time) {
+ LoadLibraryList((Function*)&getnameinfo, "ws2_32.dll\0getnameinfo\0\0");
+ first_time = false;
+ }
+
+ if (getnameinfo != NULL) return getnameinfo(sa, salen, host, hostlen, serv, servlen, flags);
+
+ strncpy(host, inet_ntoa(((struct sockaddr_in *)sa)->sin_addr), hostlen);
+ return 0;
+}
+#define getnameinfo OTTDgetnameinfo
#endif
#define GET_LAST_ERROR() WSAGetLastError()