Andreas Rottmann <[EMAIL PROTECTED]> writes: > As you can easily see, the two pointers refer to the same object, which > means fficonfig.h #defines ffi_type_ulong to ffi_type_uint64, which is > plain wrong on a 32bit platform. > s/fficonfig.h/ffi.h/
The way ffi.h #defines the ffi_type_XX equivalents to the standard c types seems fucked up - they have them along with the #defines of the fixed-bit types (e.g. UINT32), but the two issues are orthogonal. I have attached a patch that should fix this, and furthermore adds #defines for 'long long' and 'unsigned long long'. Hope something like this can go upstream.
--- /usr/include/ffi.h 2003-10-17 13:13:15.000000000 +0200 +++ /home/andy/include/g-wrap/ffi.h 2003-10-25 18:41:41.000000000 +0200 @@ -79,76 +79,99 @@ #define SINT8 signed char +/* 16 bit types */ #if SIZEOF_INT == 2 #define UINT16 unsigned int #define SINT16 int -#define ffi_type_uint ffi_type_uint16 -#define ffi_type_sint ffi_type_sint16 -#else -#if SIZEOF_SHORT == 2 +#elif SIZEOF_SHORT == 2 #define UINT16 unsigned short #define SINT16 short -#define ffi_type_ushort ffi_type_uint16 -#define ffi_type_sshort ffi_type_sint16 #endif -#endif +/* 32bit types */ #if SIZEOF_INT == 4 #define UINT32 unsigned int #define SINT32 int -#define ffi_type_uint ffi_type_uint32 -#define ffi_type_sint ffi_type_sint32 -#else -#if SIZEOF_SHORT == 4 +#elif SIZEOF_SHORT == 4 #define UINT32 unsigned short #define SINT32 short -#define ffi_type_ushort ffi_type_uint32 -#define ffi_type_sshort ffi_type_sint32 -#else -#if SIZEOF_LONG == 4 +#elif SIZEOF_LONG == 4 #define UINT32 unsigned long #define SINT32 long -#define ffi_type_ulong ffi_type_uint32 -#define ffi_type_slong ffi_type_sint32 #endif -#endif -#endif + +/* 64 bit types */ #if SIZEOF_INT == 8 #define UINT64 unsigned int #define SINT64 int -#define ffi_type_uint ffi_type_uint64 -#define ffi_type_sint ffi_type_sint64 -#else -#if SIZEOF_LONG == 8 +#elif SIZEOF_LONG == 8 #define UINT64 unsigned long #define SINT64 long -#define ffi_type_ulong ffi_type_uint64 -#define ffi_type_slong ffi_type_sint64 -#else -#if SIZEOF_LONG_LONG == 8 +#elif SIZEOF_LONG_LONG == 8 #define UINT64 unsigned long long #define SINT64 long long -#define ffi_type_ulong ffi_type_uint64 -#define ffi_type_slong ffi_type_sint64 #endif + +#if SIZEOF_INT == 2 + +#define ffi_type_uint ffi_type_uint16 +#define ffi_type_sint ffi_type_sint16 + +#elif SIZEOF_INT == 4 + +#define ffi_type_uint ffi_type_uint32 +#define ffi_type_sint ffi_type_sint32 + +#elif SIZEOF_INT == 8 + +#define ffi_type_uint ffi_type_uint64 +#define ffi_type_sint ffi_type_sint64 + #endif + +#if SIZEOF_SHORT == 2 + +#define ffi_type_ushort ffi_type_uint16 +#define ffi_type_sshort ffi_type_sint16 + +#elif SIZEOF_SHORT == 4 + +#define ffi_type_ushort ffi_type_uint32 +#define ffi_type_sshort ffi_type_sint32 + +#endif /* guess there are no 64bit shorts anywhere? */ + +#if SIZEOF_LONG == 4 + +#define ffi_type_ulong ffi_type_uint32 +#define ffi_type_slong ffi_type_sint32 + +#elif SIZEOF_LONG == 8 + +#define ffi_type_ulong ffi_type_uint64 +#define ffi_type_slong ffi_type_sint64 + #endif +/* any machines with 128bit long longs yet? */ +#define ffi_type_ulong_long ffi_type_uint64 +#define ffi_type_slong_long ffi_type_sint64 + /* ---- System specific configurations ----------------------------------- */
Cheers, Andi -- Andreas Rottmann | [EMAIL PROTECTED] | [EMAIL PROTECTED] | [EMAIL PROTECTED] http://www.8ung.at/rotty | GnuPG Key: http://www.8ung.at/rotty/gpg.asc Fingerprint | DFB4 4EB4 78A4 5EEE 6219 F228 F92F CFC5 01FD 5B62 Python is executable pseudocode, Perl is executable line-noise.