Improve check for int32_t being long or int

* libc/include/sys/config.h: Move evaluation of _UINTPTR_EQ_ULONG and
        _UINTPTR_EQ_ULONGLONG from here...
        * libc/include/sys/_intsup.h: ...to here.  Rename to _INTPTR_EQ_LONG
        and _INTPTR_EQ_LONGLONG to refer to signed base type.  Add test for
        base type of int32_t and set _INT32_EQ_LONG accordingly.
        * libc/include/stdint.h: Change checks for __have_long32 to checks
        for _INT32_EQ_LONG.
        * libc/include/inttypes.h: Ditto.  Accommodate aforementioned name
        change.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2015-04-29 13:06:45 +02:00
parent 9d2727e9a3
commit 496380c166
5 changed files with 53 additions and 32 deletions

View File

@ -1,3 +1,15 @@
2015-04-29 Corinna Vinschen <vinschen@redhat.com>
* libc/include/sys/config.h: Move evaluation of _UINTPTR_EQ_ULONG and
_UINTPTR_EQ_ULONGLONG from here...
* libc/include/sys/_intsup.h: ...to here. Rename to _INTPTR_EQ_LONG
and _INTPTR_EQ_LONGLONG to refer to signed base type. Add test for
base type of int32_t and set _INT32_EQ_LONG accordingly.
* libc/include/stdint.h: Change checks for __have_long32 to checks
for _INT32_EQ_LONG.
* libc/include/inttypes.h: Ditto. Accommodate aforementioned name
change.
2015-04-22 Corinna Vinschen <vinschen@redhat.com>
* libc/include/libgen.h (basename): Drop defining _BASENAME_DEFINED.

View File

@ -142,7 +142,7 @@
#define SCNxFAST16 __SCN16(x)
/* 32-bit types */
#if __have_long32
#if defined (_INT32_EQ_LONG)
#define __PRI32(x) __STRINGIFY(l##x)
#define __SCN32(x) __STRINGIFY(l##x)
#else
@ -272,10 +272,10 @@
#define SCNxMAX __SCNMAX(x)
/* ptr types */
#if defined(_UINTPTR_EQ_ULONGLONG)
#if defined (_INTPTR_EQ_LONGLONG)
# define __PRIPTR(x) __STRINGIFY(ll##x)
# define __SCNPTR(x) __STRINGIFY(ll##x)
#elif defined(_UINTPTR_EQ_ULONG)
#elif defined (_INTPTR_EQ_LONG)
# define __PRIPTR(x) __STRINGIFY(l##x)
# define __SCNPTR(x) __STRINGIFY(l##x)
#else

View File

@ -216,7 +216,7 @@ typedef __uint_least64_t uint_least64_t;
#define INT32_MAX (__INT32_MAX__)
#define UINT32_MAX (__UINT32_MAX__)
#elif defined(__int32_t_defined)
#if __have_long32
#if defined (_INT32_EQ_LONG)
#define INT32_MIN (-2147483647L-1)
#define INT32_MAX (2147483647L)
#define UINT32_MAX (4294967295UL)
@ -232,7 +232,7 @@ typedef __uint_least64_t uint_least64_t;
#define INT_LEAST32_MAX (__INT_LEAST32_MAX__)
#define UINT_LEAST32_MAX (__UINT_LEAST32_MAX__)
#elif defined(__int_least32_t_defined)
#if __have_long32
#if defined (_INT32_EQ_LONG)
#define INT_LEAST32_MIN (-2147483647L-1)
#define INT_LEAST32_MAX (2147483647L)
#define UINT_LEAST32_MAX (4294967295UL)
@ -439,7 +439,7 @@ typedef __uint_least64_t uint_least64_t;
#define INT32_C(x) __INT32_C(x)
#define UINT32_C(x) __UINT32_C(x)
#else
#if __have_long32
#if defined (_INT32_EQ_LONG)
#define INT32_C(x) x##L
#define UINT32_C(x) x##UL
#else

View File

@ -33,4 +33,39 @@
#define __have_long32 1
#endif
/* Determine how intptr_t and int32_t are defined by gcc for this target. This
is used to determine the correct printf() constant in inttypes.h and other
constants in stdint.h. */
#pragma push_macro("signed")
#pragma push_macro("int")
#pragma push_macro("long")
#undef signed
#undef int
#undef long
#define signed +0
#define int +0
#define long +1
#if __INTPTR_TYPE__ == 2
#define _INTPTR_EQ_LONGLONG
#elif __INTPTR_TYPE__ == 1
#define _INTPTR_EQ_LONG
#elif __INTPTR_TYPE__ == 0
/* Nothing to define because intptr_t is safe to print as an int. */
#else
#error "Unable to determine type definition of intptr_t"
#endif
#if __INT32_TYPE__ == 1
#define _INT32_EQ_LONG
#elif __INT32_TYPE__ == 0
/* Nothing to define because int32_t is safe to print as an int. */
#else
#error "Unable to determine type definition of int32_t"
#endif
#undef long
#undef int
#undef signed
#pragma pop_macro("signed")
#pragma pop_macro("int")
#pragma pop_macro("long")
#endif /* _SYS__INTSUP_H */

View File

@ -287,30 +287,4 @@
#define _MB_EXTENDED_CHARSETS_WINDOWS 1
#endif
/* Determine how uintptr_t is defined by gcc for this target. This
is used to determine the correct printf() constant in inttypes.h */
#pragma push_macro("signed")
#pragma push_macro("int")
#pragma push_macro("long")
#undef signed
#undef int
#undef long
#define signed +0
#define int +0
#define long +1
#if __INTPTR_TYPE__ == 2
#define _UINTPTR_EQ_ULONGLONG
#elif __INTPTR_TYPE__ == 1
#define _UINTPTR_EQ_ULONG
#elif __INTPTR_TYPE__ == 0
/* Nothing to define because intptr_t is safe to print as an int. */
#else
#error "Unable to determine type definition of uintptr_t"
#endif
#undef long
#undef int
#undef signed
#pragma pop_macro("signed")
#pragma pop_macro("int")
#pragma pop_macro("long")
#endif /* __SYS_CONFIG_H__ */