From: Thomas Heller Date: Fri, 12 Oct 2007 06:53:32 +0000 (+0000) Subject: Fix ctypes on 32-bit systems when Python is configured --with-system-ffi. X-Git-Tag: v2.5.2c1~164 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d6f638188f842bc459eabcaaca12fa654719c6cd;p=python Fix ctypes on 32-bit systems when Python is configured --with-system-ffi. See also https://bugs.launchpad.net/bugs/72505. --- diff --git a/Misc/NEWS b/Misc/NEWS index 640ba31765..76f25d4bd3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -32,6 +32,9 @@ Core and builtins Library ------- +- ctypes will now work correctly on 32-bit systems when Python is + configured with --with-system-ffi. + - Bug #1777530: ctypes.util.find_library uses dump(1) instead of objdump(1) on Solaris. diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c index 9fef3e7886..8cb1f19343 100644 --- a/Modules/_ctypes/cfield.c +++ b/Modules/_ctypes/cfield.c @@ -1549,17 +1549,21 @@ static struct fielddesc formattable[] = { /* XXX Hm, sizeof(int) == sizeof(long) doesn't hold on every platform */ /* As soon as we can get rid of the type codes, this is no longer a problem */ #if SIZEOF_LONG == 4 - { 'l', l_set, l_get, &ffi_type_sint, l_set_sw, l_get_sw}, - { 'L', L_set, L_get, &ffi_type_uint, L_set_sw, L_get_sw}, + { 'l', l_set, l_get, &ffi_type_sint32, l_set_sw, l_get_sw}, + { 'L', L_set, L_get, &ffi_type_uint32, L_set_sw, L_get_sw}, #elif SIZEOF_LONG == 8 - { 'l', l_set, l_get, &ffi_type_slong, l_set_sw, l_get_sw}, - { 'L', L_set, L_get, &ffi_type_ulong, L_set_sw, L_get_sw}, + { 'l', l_set, l_get, &ffi_type_sint64, l_set_sw, l_get_sw}, + { 'L', L_set, L_get, &ffi_type_uint64, L_set_sw, L_get_sw}, #else # error #endif #ifdef HAVE_LONG_LONG - { 'q', q_set, q_get, &ffi_type_slong, q_set_sw, q_get_sw}, - { 'Q', Q_set, Q_get, &ffi_type_ulong, Q_set_sw, Q_get_sw}, +#if SIZEOF_LONG_LONG == 8 + { 'q', q_set, q_get, &ffi_type_sint64, q_set_sw, q_get_sw}, + { 'Q', Q_set, Q_get, &ffi_type_uint64, Q_set_sw, Q_get_sw}, +#else +# error +#endif #endif { 'P', P_set, P_get, &ffi_type_pointer}, { 'z', z_set, z_get, &ffi_type_pointer},