[Python-checkins] r88285 - in python/branches/release31-maint: Lib/ctypes/test/test_callbacks.py Misc/ACKS Misc/NEWS Modules/_ctypes/_ctypes_test.c Modules/_ctypes/libffi_msvc/ffi.c

antoine.pitrou python-checkins at python.org
Mon Jan 31 22:36:33 CET 2011


Author: antoine.pitrou
Date: Mon Jan 31 22:36:33 2011
New Revision: 88285

Log:
Merged revisions 88284 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r88284 | antoine.pitrou | 2011-01-31 22:08:57 +0100 (lun., 31 janv. 2011) | 4 lines
  
  Issue #8275: Fix passing of callback arguments with ctypes under Win64.
  Patch by Stan Mihai. Ok'ed by Georg.
........


Modified:
   python/branches/release31-maint/   (props changed)
   python/branches/release31-maint/Lib/ctypes/test/test_callbacks.py
   python/branches/release31-maint/Misc/ACKS
   python/branches/release31-maint/Misc/NEWS
   python/branches/release31-maint/Modules/_ctypes/_ctypes_test.c
   python/branches/release31-maint/Modules/_ctypes/libffi_msvc/ffi.c

Modified: python/branches/release31-maint/Lib/ctypes/test/test_callbacks.py
==============================================================================
--- python/branches/release31-maint/Lib/ctypes/test/test_callbacks.py	(original)
+++ python/branches/release31-maint/Lib/ctypes/test/test_callbacks.py	Mon Jan 31 22:36:33 2011
@@ -166,6 +166,42 @@
 
         self.assertLess(diff, 0.01, "%s not less than 0.01" % diff)
 
+    def test_callback_register_int(self):
+        # Issue #8275: buggy handling of callback args under Win64
+        # NOTE: should be run on release builds as well
+        dll = CDLL(_ctypes_test.__file__)
+        CALLBACK = CFUNCTYPE(c_int, c_int, c_int, c_int, c_int, c_int)
+        # All this function does is call the callback with its args squared
+        func = dll._testfunc_cbk_reg_int
+        func.argtypes = (c_int, c_int, c_int, c_int, c_int, CALLBACK)
+        func.restype = c_int
+
+        def callback(a, b, c, d, e):
+            return a + b + c + d + e
+
+        result = func(2, 3, 4, 5, 6, CALLBACK(callback))
+        self.assertEqual(result, callback(2*2, 3*3, 4*4, 5*5, 6*6))
+
+    def test_callback_register_double(self):
+        # Issue #8275: buggy handling of callback args under Win64
+        # NOTE: should be run on release builds as well
+        dll = CDLL(_ctypes_test.__file__)
+        CALLBACK = CFUNCTYPE(c_double, c_double, c_double, c_double,
+                             c_double, c_double)
+        # All this function does is call the callback with its args squared
+        func = dll._testfunc_cbk_reg_double
+        func.argtypes = (c_double, c_double, c_double,
+                         c_double, c_double, CALLBACK)
+        func.restype = c_double
+
+        def callback(a, b, c, d, e):
+            return a + b + c + d + e
+
+        result = func(1.1, 2.2, 3.3, 4.4, 5.5, CALLBACK(callback))
+        self.assertEqual(result,
+                         callback(1.1*1.1, 2.2*2.2, 3.3*3.3, 4.4*4.4, 5.5*5.5))
+
+
 ################################################################
 
 if __name__ == '__main__':

Modified: python/branches/release31-maint/Misc/ACKS
==============================================================================
--- python/branches/release31-maint/Misc/ACKS	(original)
+++ python/branches/release31-maint/Misc/ACKS	Mon Jan 31 22:36:33 2011
@@ -536,6 +536,7 @@
 Mike Meyer
 Steven Miale
 Trent Mick
+Stan Mihai
 Aristotelis Mikropoulos
 Damien Miller
 Chad Miller

Modified: python/branches/release31-maint/Misc/NEWS
==============================================================================
--- python/branches/release31-maint/Misc/NEWS	(original)
+++ python/branches/release31-maint/Misc/NEWS	Mon Jan 31 22:36:33 2011
@@ -37,6 +37,9 @@
 Library
 -------
 
+- Issue #8275: Fix passing of callback arguments with ctypes under Win64.
+  Patch by Stan Mihai.
+
 - Issue #11053: Fix IDLE "Syntax Error" windows to behave as in 2.x,
   preventing a confusing hung appearance on OS X with the windows
   obscured.

Modified: python/branches/release31-maint/Modules/_ctypes/_ctypes_test.c
==============================================================================
--- python/branches/release31-maint/Modules/_ctypes/_ctypes_test.c	(original)
+++ python/branches/release31-maint/Modules/_ctypes/_ctypes_test.c	Mon Jan 31 22:36:33 2011
@@ -12,6 +12,20 @@
 
 /* some functions handy for testing */
 
+EXPORT(int)
+_testfunc_cbk_reg_int(int a, int b, int c, int d, int e,
+                      int (*func)(int, int, int, int, int))
+{
+    return func(a*a, b*b, c*c, d*d, e*e);
+}
+
+EXPORT(double)
+_testfunc_cbk_reg_double(double a, double b, double c, double d, double e,
+                         double (*func)(double, double, double, double, double))
+{
+    return func(a*a, b*b, c*c, d*d, e*e);
+}
+
 EXPORT(void)testfunc_array(int values[4])
 {
     printf("testfunc_array %d %d %d %d\n",

Modified: python/branches/release31-maint/Modules/_ctypes/libffi_msvc/ffi.c
==============================================================================
--- python/branches/release31-maint/Modules/_ctypes/libffi_msvc/ffi.c	(original)
+++ python/branches/release31-maint/Modules/_ctypes/libffi_msvc/ffi.c	Mon Jan 31 22:36:33 2011
@@ -379,7 +379,7 @@
   short bytes;
   char *tramp;
 #ifdef _WIN64
-  int mask;
+  int mask = 0;
 #endif
   FFI_ASSERT (cif->abi == FFI_SYSV);
   


More information about the Python-checkins mailing list