[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#217541: fficonfig.h bogus on x86



Andreas Rottmann <rotty@debian.org> 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         | Rotty@ICQ      | 118634484@ICQ | a.rottmann@gmx.at
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.

Reply to: