summaryrefslogtreecommitdiff
path: root/windows_port.c
diff options
context:
space:
mode:
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 */