diff options
author | Thomas Heller <theller@ctypes.org> | 2009-09-18 20:05:44 (GMT) |
---|---|---|
committer | Thomas Heller <theller@ctypes.org> | 2009-09-18 20:05:44 (GMT) |
commit | 6be522bfc268a3a49c7a605667a760dd4a09e43f (patch) | |
tree | 71c82690ef32e8cf6cb535ec6070071098cb7138 | |
parent | 7a352c0ed8a12d868d9b682f4adf33f558d19855 (diff) | |
download | cpython-6be522bfc268a3a49c7a605667a760dd4a09e43f.zip cpython-6be522bfc268a3a49c7a605667a760dd4a09e43f.tar.gz cpython-6be522bfc268a3a49c7a605667a760dd4a09e43f.tar.bz2 |
Issue #4606: Passing 'None' if ctypes argtype is set to POINTER(...)
does now always result in NULL.
-rw-r--r-- | Lib/ctypes/test/test_parameters.py | 2 | ||||
-rw-r--r-- | Misc/NEWS | 7 | ||||
-rw-r--r-- | Modules/_ctypes/_ctypes.c | 7 | ||||
-rw-r--r-- | Modules/_ctypes/callproc.c | 1 |
4 files changed, 12 insertions, 5 deletions
diff --git a/Lib/ctypes/test/test_parameters.py b/Lib/ctypes/test/test_parameters.py index 69db14f..82704d5 100644 --- a/Lib/ctypes/test/test_parameters.py +++ b/Lib/ctypes/test/test_parameters.py @@ -97,7 +97,7 @@ class SimpleTypesTestCase(unittest.TestCase): self.assertEqual(x.contents.value, 42) self.assertEqual(LPINT(c_int(42)).contents.value, 42) - self.assertEqual(LPINT.from_param(None), 0) + self.assertEqual(LPINT.from_param(None), None) if c_int != c_long: self.assertRaises(TypeError, LPINT.from_param, pointer(c_long(42))) @@ -376,8 +376,11 @@ Core and Builtins Library ------- -- Issue #5042: Structure sub-subclass does now initialize correctly - with base class positional arguments. +- Issue #4606: Passing 'None' if ctypes argtype is set to POINTER(...) + does now always result in NULL. + +- Issue #5042: ctypes Structure sub-subclass does now initialize + correctly with base class positional arguments. - Issue #6938: Fix a TypeError in string formatting of a multiprocessing debug message. diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index a5c00cd..25cf956 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -972,8 +972,11 @@ PyCPointerType_from_param(PyObject *type, PyObject *value) { StgDictObject *typedict; - if (value == Py_None) - return PyInt_FromLong(0); /* NULL pointer */ + if (value == Py_None) { + /* ConvParam will convert to a NULL pointer later */ + Py_INCREF(value); + return value; + } typedict = PyType_stgdict(type); assert(typedict); /* Cannot be NULL for pointer types */ diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index ec6d05b..cf17e3a 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -542,6 +542,7 @@ PyTypeObject PyCArg_Type = { * C function call. * * 1. Python integers are converted to C int and passed by value. + * Py_None is converted to a C NULL pointer. * * 2. 3-tuples are expected to have a format character in the first * item, which must be 'i', 'f', 'd', 'q', or 'P'. |