From: Mark Dickinson Date: Sat, 3 Apr 2010 10:46:46 +0000 (+0000) Subject: Merged revisions 79661 via svnmerge from X-Git-Tag: v2.6.6rc1~504 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d9a91305e24ac8e4afd6399de105b4abd680bcff;p=python Merged revisions 79661 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r79661 | mark.dickinson | 2010-04-03 11:27:05 +0100 (Sat, 03 Apr 2010) | 14 lines Fix a couple of issues with the test_structmembersType class in _testcapimodule - rename to _test_structmembersType to avoid the class being automatically called by test_capi - allow space for trailing NUL in inplace_member field of all_structmembers - use T_STRING_INPLACE instead of T_INPLACE_STRING as keyword argument to _test_structmembersType initializer - don't attempt to initialize inplace_member field if T_STRING_INPLACE argument wasn't supplied. ........ --- diff --git a/Lib/test/test_structmembers.py b/Lib/test/test_structmembers.py index 0f9bf4e360..1f20923226 100644 --- a/Lib/test/test_structmembers.py +++ b/Lib/test/test_structmembers.py @@ -1,4 +1,4 @@ -from _testcapi import test_structmembersType, \ +from _testcapi import _test_structmembersType, \ CHAR_MAX, CHAR_MIN, UCHAR_MAX, \ SHRT_MAX, SHRT_MIN, USHRT_MAX, \ INT_MAX, INT_MIN, UINT_MAX, \ @@ -8,7 +8,7 @@ from _testcapi import test_structmembersType, \ import warnings, exceptions, unittest, sys from test import test_support -ts=test_structmembersType(False, 1, 2, 3, 4, 5, 6, 7, 8, +ts=_test_structmembersType(False, 1, 2, 3, 4, 5, 6, 7, 8, 9.99999, 10.1010101010, "hi") class ReadWriteTests(unittest.TestCase): diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index b6ba0f3c7d..099614595d 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -969,7 +969,7 @@ typedef struct { unsigned long ulong_member; float float_member; double double_member; - char inplace_member[5]; + char inplace_member[6]; #ifdef HAVE_LONG_LONG PY_LONG_LONG longlong_member; unsigned PY_LONG_LONG ulonglong_member; @@ -1008,7 +1008,7 @@ test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) static char *keywords[] = { "T_BOOL", "T_BYTE", "T_UBYTE", "T_SHORT", "T_USHORT", "T_INT", "T_UINT", "T_LONG", "T_ULONG", - "T_FLOAT", "T_DOUBLE", "T_INPLACE_STRING", + "T_FLOAT", "T_DOUBLE", "T_STRING_INPLACE", #ifdef HAVE_LONG_LONG "T_LONGLONG", "T_ULONGLONG", #endif @@ -1019,7 +1019,7 @@ test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) #endif ; test_structmembers *ob; - const char *s; + const char *s = NULL; Py_ssize_t string_len = 0; ob = PyObject_New(test_structmembers, type); if (ob == NULL) @@ -1032,7 +1032,7 @@ test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) &ob->structmembers.short_member, &ob->structmembers.ushort_member, &ob->structmembers.int_member, - &ob->structmembers.uint_member, + &ob->structmembers.uint_member, &ob->structmembers.long_member, &ob->structmembers.ulong_member, &ob->structmembers.float_member, @@ -1046,12 +1046,17 @@ test_structmembers_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) Py_DECREF(ob); return NULL; } - if (string_len > 5) { - Py_DECREF(ob); - PyErr_SetString(PyExc_ValueError, "string too long"); - return NULL; + if (s != NULL) { + if (string_len > 5) { + Py_DECREF(ob); + PyErr_SetString(PyExc_ValueError, "string too long"); + return NULL; + } + strcpy(ob->structmembers.inplace_member, s); + } + else { + strcpy(ob->structmembers.inplace_member, ""); } - strcpy(ob->structmembers.inplace_member, s); return (PyObject *)ob; } @@ -1116,7 +1121,9 @@ init_testcapi(void) Py_TYPE(&test_structmembersType)=&PyType_Type; Py_INCREF(&test_structmembersType); - PyModule_AddObject(m, "test_structmembersType", (PyObject *)&test_structmembersType); + /* don't use a name starting with "test", since we don't want + test_capi to automatically call this */ + PyModule_AddObject(m, "_test_structmembersType", (PyObject *)&test_structmembersType); PyModule_AddObject(m, "CHAR_MAX", PyInt_FromLong(CHAR_MAX)); PyModule_AddObject(m, "CHAR_MIN", PyInt_FromLong(CHAR_MIN));