]> granicus.if.org Git - python/commitdiff
Revert the change that tries to zero out a closure's result storage
authorThomas Heller <theller@ctypes.org>
Mon, 14 Aug 2006 10:02:24 +0000 (10:02 +0000)
committerThomas Heller <theller@ctypes.org>
Mon, 14 Aug 2006 10:02:24 +0000 (10:02 +0000)
area because the size if unknown in source/callproc.c.

Modules/_ctypes/callbacks.c

index 3ad6fb44e43ca0b5f58a2fde92a1cf642c7bb6d1..cbe3d03d7e5df6f4b3454ff25e085ae387e1b9a1 100644 (file)
@@ -205,24 +205,14 @@ if (x == NULL) _AddTraceback(what, __FILE__, __LINE__ - 1), PyErr_Print()
 
        result = PyObject_CallObject(callable, arglist);
        CHECK("'calling callback function'", result);
-#ifdef WORDS_BIGENDIAN
-       /* See the corresponding code in callproc.c, around line 961 */
-       if (restype->type != FFI_TYPE_FLOAT && restype->size < sizeof(ffi_arg))
-               mem = (char *)mem + sizeof(ffi_arg) - restype->size;
-#endif
-       /* The code that converts 'result' into C data is not executed when
-          'callable' returns Py_None, so we zero out the memory that will
-          receive the C return data to not return random data.
-
-          Cleaner would be to call 'setfunc' anyway and complain with
-          PyErr_WriteUnraisable(), but ctypes has always accepted a Py_None
-          return value for *any* 'restype' and it would probably break too
-          much code if this is changed now.
-        */
-       memset(mem, 0, restype->size);
        if ((restype != &ffi_type_void) && result && result != Py_None) {
                PyObject *keep;
                assert(setfunc);
+#ifdef WORDS_BIGENDIAN
+               /* See the corresponding code in callproc.c, around line 961 */
+               if (restype->type != FFI_TYPE_FLOAT && restype->size < sizeof(ffi_arg))
+                       mem = (char *)mem + sizeof(ffi_arg) - restype->size;
+#endif
                keep = setfunc(mem, result, 0);
                CHECK("'converting callback result'", keep);
                /* keep is an object we have to keep alive so that the result