summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Modules/_winapi.c8
-rw-r--r--Modules/socketmodule.h7
-rw-r--r--Objects/unicodeobject.c19
-rw-r--r--PC/pyconfig.h6
-rw-r--r--Python/pytime.c49
-rw-r--r--Python/sysmodule.c8
6 files changed, 29 insertions, 68 deletions
diff --git a/Modules/_winapi.c b/Modules/_winapi.c
index 51c4d5f45c..0274874dda 100644
--- a/Modules/_winapi.c
+++ b/Modules/_winapi.c
@@ -1001,6 +1001,12 @@ PyDoc_STRVAR(GetVersion_doc,
\n\
Return the version number of the current operating system.");
+/* Disable deprecation warnings about GetVersionEx as the result is
+ being passed straight through to the caller, who is responsible for
+ using it correctly. */
+#pragma warning(push)
+#pragma warning(disable:4996)
+
static PyObject *
winapi_GetVersion(PyObject* self, PyObject* args)
{
@@ -1010,6 +1016,8 @@ winapi_GetVersion(PyObject* self, PyObject* args)
return PyLong_FromUnsignedLong(GetVersion());
}
+#pragma warning(pop)
+
static PyObject *
winapi_OpenProcess(PyObject *self, PyObject *args)
{
diff --git a/Modules/socketmodule.h b/Modules/socketmodule.h
index b83f9af3bd..4b6a10e85a 100644
--- a/Modules/socketmodule.h
+++ b/Modules/socketmodule.h
@@ -14,6 +14,13 @@
#else /* MS_WINDOWS */
# include <winsock2.h>
+/* Windows 'supports' CMSG_LEN, but does not follow the POSIX standard
+ * interface at all, so there is no point including the code that
+ * attempts to use it.
+ */
+# ifdef PySocket_BUILDING_SOCKET
+# undef CMSG_LEN
+# endif
# include <ws2tcpip.h>
/* VC6 is shipped with old platform headers, and does not have MSTcpIP.h
* Separate SDKs have all the functions we want, but older ones don't have
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 8605c92e3f..0dea83e505 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -519,10 +519,6 @@ unicode_result_unchanged(PyObject *unicode)
return _PyUnicode_Copy(unicode);
}
-#ifdef HAVE_MBCS
-static OSVERSIONINFOEX winver;
-#endif
-
/* --- Bloom Filters ----------------------------------------------------- */
/* stuff to implement simple "bloom filters" for Unicode characters.
@@ -7112,13 +7108,7 @@ static DWORD
encode_code_page_flags(UINT code_page, const char *errors)
{
if (code_page == CP_UTF8) {
- if (winver.dwMajorVersion >= 6)
- /* CP_UTF8 supports WC_ERR_INVALID_CHARS on Windows Vista
- and later */
- return WC_ERR_INVALID_CHARS;
- else
- /* CP_UTF8 only supports flags=0 on Windows older than Vista */
- return 0;
+ return WC_ERR_INVALID_CHARS;
}
else if (code_page == CP_UTF7) {
/* CP_UTF7 only supports flags=0 */
@@ -14976,13 +14966,6 @@ int _PyUnicode_Init(void)
if (PyType_Ready(&PyFormatterIter_Type) < 0)
Py_FatalError("Can't initialize formatter iter type");
-#ifdef HAVE_MBCS
- winver.dwOSVersionInfoSize = sizeof(winver);
- if (!GetVersionEx((OSVERSIONINFO*)&winver)) {
- PyErr_SetFromWindowsErr(0);
- return -1;
- }
-#endif
return 0;
}
diff --git a/PC/pyconfig.h b/PC/pyconfig.h
index 328be0f362..324a1301b7 100644
--- a/PC/pyconfig.h
+++ b/PC/pyconfig.h
@@ -156,9 +156,9 @@ WIN32 is still required for the locale module.
#endif /* MS_WIN64 */
/* set the version macros for the windows headers */
-/* Python 3.4+ requires Windows XP or greater */
-#define Py_WINVER 0x0501 /* _WIN32_WINNT_WINXP */
-#define Py_NTDDI NTDDI_WINXP
+/* Python 3.5+ requires Windows Vista or greater */
+#define Py_WINVER 0x0600 /* _WIN32_WINNT_VISTA */
+#define Py_NTDDI NTDDI_VISTA
/* We only set these values when building Python - we don't want to force
these values on extensions, as that will affect the prototypes and
diff --git a/Python/pytime.c b/Python/pytime.c
index a8460c6867..cdaa22ec66 100644
--- a/Python/pytime.c
+++ b/Python/pytime.c
@@ -7,10 +7,6 @@
#include <mach/mach_time.h> /* mach_absolute_time(), mach_timebase_info() */
#endif
-#ifdef MS_WINDOWS
-static OSVERSIONINFOEX winver;
-#endif
-
static int
pygettimeofday(_PyTime_timeval *tp, _Py_clock_info_t *info, int raise)
{
@@ -124,41 +120,11 @@ pymonotonic(_PyTime_timeval *tp, _Py_clock_info_t *info, int raise)
static _PyTime_timeval last = {0, -1};
#endif
#if defined(MS_WINDOWS)
- static ULONGLONG (*GetTickCount64) (void) = NULL;
- static ULONGLONG (CALLBACK *Py_GetTickCount64)(void);
- static int has_gettickcount64 = -1;
ULONGLONG result;
assert(info == NULL || raise);
- if (has_gettickcount64 == -1) {
- /* GetTickCount64() was added to Windows Vista */
- has_gettickcount64 = (winver.dwMajorVersion >= 6);
- if (has_gettickcount64) {
- HINSTANCE hKernel32;
- hKernel32 = GetModuleHandleW(L"KERNEL32");
- *(FARPROC*)&Py_GetTickCount64 = GetProcAddress(hKernel32,
- "GetTickCount64");
- assert(Py_GetTickCount64 != NULL);
- }
- }
-
- if (has_gettickcount64) {
- result = Py_GetTickCount64();
- }
- else {
- static DWORD last_ticks = 0;
- static DWORD n_overflow = 0;
- DWORD ticks;
-
- ticks = GetTickCount();
- if (ticks < last_ticks)
- n_overflow++;
- last_ticks = ticks;
-
- result = (ULONGLONG)n_overflow << 32;
- result += ticks;
- }
+ result = GetTickCount64();
tp->tv_sec = result / 1000;
tp->tv_usec = (result % 1000) * 1000;
@@ -166,10 +132,7 @@ pymonotonic(_PyTime_timeval *tp, _Py_clock_info_t *info, int raise)
if (info) {
DWORD timeAdjustment, timeIncrement;
BOOL isTimeAdjustmentDisabled, ok;
- if (has_gettickcount64)
- info->implementation = "GetTickCount64()";
- else
- info->implementation = "GetTickCount()";
+ info->implementation = "GetTickCount64()";
info->monotonic = 1;
ok = GetSystemTimeAdjustment(&timeAdjustment, &timeIncrement,
&isTimeAdjustmentDisabled);
@@ -409,14 +372,6 @@ _PyTime_Init(void)
{
_PyTime_timeval tv;
-#ifdef MS_WINDOWS
- winver.dwOSVersionInfoSize = sizeof(winver);
- if (!GetVersionEx((OSVERSIONINFO*)&winver)) {
- PyErr_SetFromWindowsErr(0);
- return -1;
- }
-#endif
-
/* ensure that the system clock works */
if (_PyTime_gettimeofday_info(&tv, NULL) < 0)
return -1;
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 292830bc25..471389cf57 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -772,6 +772,12 @@ static PyStructSequence_Desc windows_version_desc = {
via indexing, the rest are name only */
};
+/* Disable deprecation warnings about GetVersionEx as the result is
+ being passed straight through to the caller, who is responsible for
+ using it correctly. */
+#pragma warning(push)
+#pragma warning(disable:4996)
+
static PyObject *
sys_getwindowsversion(PyObject *self)
{
@@ -803,6 +809,8 @@ sys_getwindowsversion(PyObject *self)
return version;
}
+#pragma warning(pop)
+
#endif /* MS_WINDOWS */
#ifdef HAVE_DLOPEN