Files
MINGW-packages/mingw-w64-python3/0462-MINGW-support-stdcall-without-underscore.patch
2015-09-21 15:47:39 +03:00

33 lines
1.5 KiB
Diff

diff -Naur Python-3.5.0-orig/Modules/_ctypes/_ctypes.c Python-3.5.0/Modules/_ctypes/_ctypes.c
--- Python-3.5.0-orig/Modules/_ctypes/_ctypes.c 2015-09-13 14:41:24.000000000 +0300
+++ Python-3.5.0/Modules/_ctypes/_ctypes.c 2015-09-21 13:41:47.943054800 +0300
@@ -3085,11 +3085,28 @@
mangled_name = alloca(strlen(name) + 1 + 1 + 1 + 3); /* \0 _ @ %d */
if (!mangled_name)
return NULL;
+ /* Issue: for stdcall decorated export functions MSVC compiler adds
+ * underscore, but GCC compiler create them without. This is
+ * visible by example for _ctypes_test.pyd module.
+ * As well functions from system libraries are without underscore.
+ * Solutions:
+ * - If a python module is build with gcc option --add-stdcall-alias
+ * the module will contain XXX as alias for function XXX@ as result
+ * first search in this method will succeed.
+ * - Distutil may use compiler to create def-file, to modify it as
+ * add underscore alias and with new def file to create module.
+ * - Or may be just to search for function without underscore.
+ */
for (i = 0; i < 32; ++i) {
sprintf(mangled_name, "_%s@%d", name, i*4);
address = (PPROC)GetProcAddress(handle, mangled_name);
if (address)
return address;
+ /* search for function without underscore as weel */
+ sprintf(mangled_name, "%s@%d", name, i*4);
+ address = (PPROC)GetProcAddress(handle, mangled_name);
+ if (address)
+ return address;
}
return NULL;
#endif