From 547de7c7bdd902a96d8b74f35e3a24c4eeabaf2f Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Mon, 2 Mar 2015 08:01:10 -0800 Subject: Issue #23451: Update pyconfig.h for Windows to require Vista headers and remove unnecessary version checks. --- Modules/_winapi.c | 8 ++++++++ Modules/socketmodule.h | 7 +++++++ Objects/unicodeobject.c | 19 +------------------ PC/pyconfig.h | 6 +++--- Python/pytime.c | 49 ++----------------------------------------------- Python/sysmodule.c | 8 ++++++++ 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 +/* 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 /* 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_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 -- cgit v1.2.1