[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
fix stdint for FreeBSD/ia64
From: |
Bruno Haible |
Subject: |
fix stdint for FreeBSD/ia64 |
Date: |
Sat, 2 Jun 2007 22:44:45 +0200 |
User-agent: |
KMail/1.5.4 |
On FreeBSD/ia64, the test-stdint test fails because if SIG_ATOMIC_MIN and
SIG_ATOMIC_MAX, which are defined to 32-bit values in /usr/include/stdint.h,
although sig_atomic_t is 'long' in this case.
This works around it by activating gnulib's <stdint.h> replacement.
2007-06-02 Bruno Haible <address@hidden>
Fix test-stdint failure on FreeBSD/ia64.
* m4/stdint.m4 (gl_STDINT_H): Check the values of PTRDIFF_MIN,
PTRDIFF_MAX, SIG_ATOMIC_MIN, SIG_ATOMIC_MAX, SIZE_MAX, WCHAR_MIN,
WCHAR_MAX, WINT_MIN, WINT_MAX entirely, not only for plausibility.
* doc/headers/stdint.texi: Update.
*** m4/stdint.m4 31 May 2007 03:21:00 -0000 1.30
--- m4/stdint.m4 2 Jun 2007 20:38:17 -0000
***************
*** 1,5 ****
! # stdint.m4 serial 24
! dnl Copyright (C) 2001-2002, 2004-2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
--- 1,5 ----
! # stdint.m4 serial 25
! dnl Copyright (C) 2001-2007 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
***************
*** 142,155 ****
#endif
intmax_t i = INTMAX_MAX;
uintmax_t j = UINTMAX_MAX;
struct s {
! int check_PTRDIFF: PTRDIFF_MIN < (ptrdiff_t) 0 && (ptrdiff_t) 0 <
PTRDIFF_MAX ? 1 : -1;
! int check_SIG_ATOMIC: SIG_ATOMIC_MIN <= (sig_atomic_t) 0 && (sig_atomic_t)
0 < SIG_ATOMIC_MAX ? 1 : -1;
! int check_SIZE: (size_t) 0 < SIZE_MAX ? 1 : -1;
! int check_WCHAR: WCHAR_MIN <= (wchar_t) 0 && (wchar_t) 0 < WCHAR_MAX ? 1 :
-1;
! int check_WINT: WINT_MIN <= (wint_t) 0 && (wint_t) 0 < WINT_MAX
! && (WINT_MIN < (wint_t) 0 || (wint_t) -1 == (wint_t)
WINT_MAX)
! ? 1 : -1;
/* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */
int check_UINT8_C:
--- 142,173 ----
#endif
intmax_t i = INTMAX_MAX;
uintmax_t j = UINTMAX_MAX;
+
+ #include <limits.h> /* for CHAR_BIT */
+ #define TYPE_MINIMUM(t) \
+ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1)))
+ #define TYPE_MAXIMUM(t) \
+ ((t) ((t) 0 < (t) -1 ? (t) -1 : ~ (~ (t) 0 << (sizeof (t) * CHAR_BIT - 1))))
struct s {
! int check_PTRDIFF:
! PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
! && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
! ? 1 : -1;
! /* Detect bug in FreeBSD 6.0 / ia64. */
! int check_SIG_ATOMIC:
! SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
! && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
! ? 1 : -1;
! int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
! int check_WCHAR:
! WCHAR_MIN == TYPE_MINIMUM (wchar_t)
! && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
! ? 1 : -1;
! /* Detect bug in mingw. */
! int check_WINT:
! WINT_MIN == TYPE_MINIMUM (wint_t)
! && WINT_MAX == TYPE_MAXIMUM (wint_t)
! ? 1 : -1;
/* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */
int check_UINT8_C:
*** doc/headers/stdint.texi 1 May 2007 19:24:43 -0000 1.3
--- doc/headers/stdint.texi 2 Jun 2007 20:38:17 -0000
***************
*** 12,17 ****
--- 12,24 ----
OpenBSD 3.8, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Interix 3.5, BeOS.
@item
This header file is very incomplete on some platforms.
+ @item
+ The values of @code{SIG_ATOMIC_MIN} and @code{SIG_ATOMIC_MAX} are incorrect
+ on some platforms:
+ FreeBSD 6.2 / ia64.
+ @item
+ The value of @code{WINT_MAX} is incorrect on some platforms:
+ mingw.
@end itemize
Portability problems not fixed by Gnulib:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- fix stdint for FreeBSD/ia64,
Bruno Haible <=