diff --git a/configure.ac b/configure.ac index b374882..5e161b2 100644 --- a/configure.ac +++ b/configure.ac @@ -334,7 +334,9 @@ else [CUCUL_TYPES=1], [AC_CHECK_HEADERS(inttypes.h, [CUCUL_TYPES=2], - [CUCUL_TYPES=0])]) + [AC_CHECK_HEADERS(windows.h, + [CUCUL_TYPES=3], + [CUCUL_TYPES=0])])]) fi AC_SUBST(CUCUL_TYPES) diff --git a/cucul/cucul_types.h.in b/cucul/cucul_types.h.in index 0db36f6..41b5011 100644 --- a/cucul/cucul_types.h.in +++ b/cucul/cucul_types.h.in @@ -33,9 +33,11 @@ # include # include -/* fallback: nothing is available, we assume the platform is 32-bit and - * sizeof(long) == sizeof(void *) */ -#else +/* mode 3: indicates Win32, only (u)intptr_t is present + * FIXME: Win64 probably doesn't work that way */ +#elif CUCUL_TYPES == 3 +#include + typedef signed char int8_t; typedef signed short int16_t; typedef signed long int int32_t; @@ -46,12 +48,53 @@ typedef unsigned short uint16_t; typedef unsigned long int uint32_t; typedef unsigned long long int uint64_t; -typedef long int intptr_t; -typedef unsigned long int uintptr_t; - typedef int ssize_t; typedef unsigned int size_t; +/* fallback: nothing is known, we assume the platform is 32-bit and + * sizeof(long) == sizeof(void *). We don't typedef directly because we + * have no idea what other typedefs have already been made. */ +#else +typedef signed char _cucul_int8_t; +typedef signed short _cucul_int16_t; +typedef signed long int _cucul_int32_t; +typedef signed long long int _cucul_int64_t; +# undef int8_t +# define int8_t _cucul_int8_t +# undef int16_t +# define int16_t _cucul_int16_t +# undef int32_t +# define int32_t _cucul_int32_t +# undef int64_t +# define int64_t _cucul_int64_t + +typedef unsigned char _cucul_uint8_t; +typedef unsigned short _cucul_uint16_t; +typedef unsigned long int _cucul_uint32_t; +typedef unsigned long long int _cucul_uint64_t; +# undef uint8_t +# define uint8_t _cucul_uint8_t +# undef uint16_t +# define uint16_t _cucul_uint16_t +# undef uint32_t +# define uint32_t _cucul_uint32_t +# undef uint64_t +# define uint64_t _cucul_uint64_t + +typedef long int _cucul_intptr_t; +typedef unsigned long int _cucul_uintptr_t; +# undef intptr_t +# define intptr_t _cucul_intptr_t +# undef uintptr_t +# define uintptr_t _cucul_uintptr_t + +typedef int _cucul_ssize_t; +typedef unsigned int _cucul_size_t; +# undef ssize_t +# define ssize_t _cucul_ssize_t +# undef size_t +# define size_t _cucul_size_t + #endif #endif /* __CUCUL_TYPES_H__ */ diff --git a/msvc/cucul_types.h b/msvc/cucul_types.h index 7c1df4c..f55378d 100644 --- a/msvc/cucul_types.h +++ b/msvc/cucul_types.h @@ -1,2 +1,2 @@ -#define CUCUL_TYPES 0 -#include "../cucul/cucul_types.h.in" +#define CUCUL_TYPES 3 +#include "../cucul/cucul_types.h.in" \ No newline at end of file