[Python-checkins] r51820 - in python/trunk: Lib/ctypes/test/test_cast.py Modules/_ctypes/_ctypes.c

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


Neal, same for this: should be applied to release25-maint before release.

thomas.heller schrieb:
> Author: thomas.heller
> Date: Thu Sep  7 21:09:54 2006
> New Revision: 51820
> 
> Modified:
>    python/trunk/Lib/ctypes/test/test_cast.py
>    python/trunk/Modules/_ctypes/_ctypes.c
> Log:
> The cast function did not accept c_char_p or c_wchar_p instances
> as first argument, and failed with a 'bad argument to internal function'
> error message.
> 
> 
> Modified: python/trunk/Lib/ctypes/test/test_cast.py
> ==============================================================================
> --- python/trunk/Lib/ctypes/test/test_cast.py	(original)
> +++ python/trunk/Lib/ctypes/test/test_cast.py	Thu Sep  7 21:09:54 2006
> @@ -57,5 +57,21 @@
>          c_int()
>          self.failUnlessEqual(p[:4], [1, 2, 96, 4])
>  
> +    def test_char_p(self):
> +        # This didn't work: bad argument to internal function
> +        s = c_char_p("hiho")
> +        self.failUnlessEqual(cast(cast(s, c_void_p), c_char_p).value,
> +                             "hiho")
> +
> +    try:
> +        c_wchar_p
> +    except NameError:
> +        pass
> +    else:
> +        def test_wchar_p(self):
> +            s = c_wchar_p("hiho")
> +            self.failUnlessEqual(cast(cast(s, c_void_p), c_wchar_p).value,
> +                                 "hiho")
> +
>  if __name__ == "__main__":
>      unittest.main()
> 
> Modified: python/trunk/Modules/_ctypes/_ctypes.c
> ==============================================================================
> --- python/trunk/Modules/_ctypes/_ctypes.c	(original)
> +++ python/trunk/Modules/_ctypes/_ctypes.c	Thu Sep  7 21:09:54 2006
> @@ -4597,11 +4597,11 @@
>  			if (obj->b_objects == NULL)
>  				goto failed;
>  		}
> +		Py_XINCREF(obj->b_objects);
>  		result->b_objects = obj->b_objects;
> -		if (result->b_objects) {
> +		if (result->b_objects && PyDict_Check(result->b_objects)) {
>  			PyObject *index;
>  			int rc;
> -			Py_INCREF(obj->b_objects);
>  			index = PyLong_FromVoidPtr((void *)src);
>  			if (index == NULL)
>  				goto failed;



More information about the Python-checkins mailing list