bug-gnulib
[Top][All Lists]
Advanced

[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:





reply via email to

[Prev in Thread] Current Thread [Next in Thread]