[Python-checkins] r51819 - in python/trunk: Lib/ctypes/test/test_bitfields.py Modules/_ctypes/stgdict.c

Thomas Heller theller at python.net
Thu Sep 7 21:08:01 CEST 2006


Neal, I would like to backport this to release25-maint.

thomas.heller schrieb:
> Author: thomas.heller
> Date: Thu Sep  7 20:56:28 2006
> New Revision: 51819
> 
> Modified:
>    python/trunk/Lib/ctypes/test/test_bitfields.py
>    python/trunk/Modules/_ctypes/stgdict.c
> Log:
> Anonymous structure fields that have a bit-width specified did not work,
> and they gave a strange error message from PyArg_ParseTuple:
>     function takes exactly 2 arguments (3 given).
> 
> With tests.
> 
> Modified: python/trunk/Lib/ctypes/test/test_bitfields.py
> ==============================================================================
> --- python/trunk/Lib/ctypes/test/test_bitfields.py	(original)
> +++ python/trunk/Lib/ctypes/test/test_bitfields.py	Thu Sep  7 20:56:28 2006
> @@ -215,5 +215,14 @@
>                          ("b", c_ubyte, 4)]
>          self.failUnlessEqual(sizeof(X), sizeof(c_byte))
>  
> +    def test_anon_bitfields(self):
> +        # anonymous bit-fields gave a strange error message
> +        class X(Structure):
> +            _fields_ = [("a", c_byte, 4),
> +                        ("b", c_ubyte, 4)]
> +        class Y(Structure):
> +            _anonymous_ = ["_"]
> +            _fields_ = [("_", X)]
> +
>  if __name__ == "__main__":
>      unittest.main()
> 
> Modified: python/trunk/Modules/_ctypes/stgdict.c
> ==============================================================================
> --- python/trunk/Modules/_ctypes/stgdict.c	(original)
> +++ python/trunk/Modules/_ctypes/stgdict.c	Thu Sep  7 20:56:28 2006
> @@ -177,11 +177,11 @@
>  
>  	for (i = 0; i < PySequence_Fast_GET_SIZE(fieldlist); ++i) {
>  		PyObject *pair = PySequence_Fast_GET_ITEM(fieldlist, i); /* borrowed */
> -		PyObject *fname, *ftype;
> +		PyObject *fname, *ftype, *bits;
>  		CFieldObject *fdescr;
>  		CFieldObject *new_descr;
>  		/* Convert to PyArg_UnpackTuple... */
> -		if (!PyArg_ParseTuple(pair, "OO", &fname, &ftype)) {
> +		if (!PyArg_ParseTuple(pair, "OO|O", &fname, &ftype, &bits)) {
>  			Py_DECREF(fieldlist);
>  			return -1;
>  		}



More information about the Python-checkins mailing list