summaryrefslogtreecommitdiff
path: root/windows_port.c
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2011-03-23 20:53:28 +0100
committerYang Tse <yangsita@gmail.com>2011-03-23 20:53:28 +0100
commitbd066ab8efa0d43ef002954f4587a195a15ac460 (patch)
tree450f425d38f2c2d873e5cd8f1f829a957d1d4a4e /windows_port.c
parent822fd0f8771d3792da0a08276ab0400b2a68f07e (diff)
downloadc-ares-bd066ab8efa0d43ef002954f4587a195a15ac460.tar.gz
c-ares-bd066ab8efa0d43ef002954f4587a195a15ac460.tar.bz2
c-ares-bd066ab8efa0d43ef002954f4587a195a15ac460.zip
build: find out windows platform using GetVersionEx()
Diffstat (limited to 'windows_port.c')
-rw-r--r--windows_port.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/windows_port.c b/windows_port.c
index 03acd1c..6a48f08 100644
--- a/windows_port.c
+++ b/windows_port.c
@@ -1,5 +1,6 @@
#include "ares_setup.h"
+#include "ares_private.h"
/* only do the following on windows
*/
@@ -19,4 +20,42 @@ WINAPI DllMain (HINSTANCE hnd, DWORD reason, LPVOID reserved)
}
#endif
+#define V_PLATFORM_WIN32s 0
+#define V_PLATFORM_WIN32_WINDOWS 1
+#define V_PLATFORM_WIN32_NT 2
+#define V_PLATFORM_WIN32_CE 3
+
+win_platform getplatform(void)
+{
+ OSVERSIONINFOEX OsvEx;
+
+ memset(&OsvEx, 0, sizeof(OsvEx));
+ OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
+ if (!GetVersionEx((void *)&OsvEx))
+ {
+ memset(&OsvEx, 0, sizeof(OsvEx));
+ OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ if (!GetVersionEx((void *)&OsvEx))
+ return WIN_UNKNOWN;
+ }
+
+ switch(OsvEx.dwPlatformId)
+ {
+ case V_PLATFORM_WIN32s:
+ return WIN_3X;
+
+ case V_PLATFORM_WIN32_WINDOWS:
+ return WIN_9X;
+
+ case V_PLATFORM_WIN32_NT:
+ return WIN_NT;
+
+ case V_PLATFORM_WIN32_CE:
+ return WIN_CE;
+
+ default:
+ return WIN_UNKNOWN;
+ }
+}
+
#endif /* WIN32 builds only */