Fix build problems with the platform SDK on windows. It is not sufficient to test for the C compiler version when determining if we have the secure CRT from microsoft. Must test with an undocumented macro, __STDC_SECURE_LIB__ too.

This commit is contained in:
Kristján Valur Jónsson 2006-07-03 14:59:05 +00:00
parent 2eda1b78f9
commit 74c3ea0a0f
3 changed files with 5 additions and 5 deletions

View File

@ -467,7 +467,7 @@ time_strftime(PyObject *self, PyObject *args)
return ret; return ret;
} }
free(outbuf); free(outbuf);
#if defined _MSC_VER && _MSC_VER >= 1400 #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
/* VisualStudio .NET 2005 does this properly */ /* VisualStudio .NET 2005 does this properly */
if (buflen == 0 && errno == EINVAL) { if (buflen == 0 && errno == EINVAL) {
PyErr_SetString(PyExc_ValueError, "Invalid format string"); PyErr_SetString(PyExc_ValueError, "Invalid format string");

View File

@ -1967,7 +1967,7 @@ static PyMethodDef functions[] = {
if (PyDict_SetItemString(bdict, # TYPE, PyExc_ ## TYPE)) \ if (PyDict_SetItemString(bdict, # TYPE, PyExc_ ## TYPE)) \
Py_FatalError("Module dictionary insertion problem."); Py_FatalError("Module dictionary insertion problem.");
#if defined _MSC_VER && _MSC_VER >= 1400 #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
/* crt variable checking in VisualStudio .NET 2005 */ /* crt variable checking in VisualStudio .NET 2005 */
#include <crtdbg.h> #include <crtdbg.h>
@ -2120,7 +2120,7 @@ _PyExc_Init(void)
Py_DECREF(bltinmod); Py_DECREF(bltinmod);
#if defined _MSC_VER && _MSC_VER >= 1400 #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
/* Set CRT argument error handler */ /* Set CRT argument error handler */
prevCrtHandler = _set_invalid_parameter_handler(InvalidParameterHandler); prevCrtHandler = _set_invalid_parameter_handler(InvalidParameterHandler);
/* turn off assertions in debug mode */ /* turn off assertions in debug mode */
@ -2133,7 +2133,7 @@ _PyExc_Fini(void)
{ {
Py_XDECREF(PyExc_MemoryErrorInst); Py_XDECREF(PyExc_MemoryErrorInst);
PyExc_MemoryErrorInst = NULL; PyExc_MemoryErrorInst = NULL;
#if defined _MSC_VER && _MSC_VER >= 1400 #if defined _MSC_VER && _MSC_VER >= 1400 && defined(__STDC_SECURE_LIB__)
/* reset CRT error handling */ /* reset CRT error handling */
_set_invalid_parameter_handler(prevCrtHandler); _set_invalid_parameter_handler(prevCrtHandler);
_CrtSetReportMode(_CRT_ASSERT, prevCrtReportMode); _CrtSetReportMode(_CRT_ASSERT, prevCrtReportMode);

View File

@ -241,7 +241,7 @@ open_the_file(PyFileObject *f, char *name, char *mode)
} }
if (f->f_fp == NULL) { if (f->f_fp == NULL) {
#if defined _MSC_VER && _MSC_VER < 1400 #if defined _MSC_VER && (_MSC_VER < 1400 || !defined(__STDC_SECURE_LIB__))
/* MSVC 6 (Microsoft) leaves errno at 0 for bad mode strings, /* MSVC 6 (Microsoft) leaves errno at 0 for bad mode strings,
* across all Windows flavors. When it sets EINVAL varies * across all Windows flavors. When it sets EINVAL varies
* across Windows flavors, the exact conditions aren't * across Windows flavors, the exact conditions aren't