Annotation of embedaddon/libiconv/srclib/stddef.in.h, revision 1.1.1.2

1.1       misho       1: /* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
                      2: 
1.1.1.2 ! misho       3:    Copyright (C) 2009-2019 Free Software Foundation, Inc.
1.1       misho       4: 
                      5:    This program is free software; you can redistribute it and/or modify
                      6:    it under the terms of the GNU General Public License as published by
                      7:    the Free Software Foundation; either version 3, or (at your option)
                      8:    any later version.
                      9: 
                     10:    This program is distributed in the hope that it will be useful,
                     11:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     12:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     13:    GNU General Public License for more details.
                     14: 
                     15:    You should have received a copy of the GNU General Public License
1.1.1.2 ! misho      16:    along with this program; if not, see <https://www.gnu.org/licenses/>.  */
1.1       misho      17: 
                     18: /* Written by Eric Blake.  */
                     19: 
                     20: /*
                     21:  * POSIX 2008 <stddef.h> for platforms that have issues.
                     22:  * <http://www.opengroup.org/susv3xbd/stddef.h.html>
                     23:  */
                     24: 
                     25: #if __GNUC__ >= 3
                     26: @PRAGMA_SYSTEM_HEADER@
                     27: #endif
                     28: @PRAGMA_COLUMNS@
                     29: 
                     30: #if defined __need_wchar_t || defined __need_size_t  \
                     31:   || defined __need_ptrdiff_t || defined __need_NULL \
                     32:   || defined __need_wint_t
                     33: /* Special invocation convention inside gcc header files.  In
                     34:    particular, gcc provides a version of <stddef.h> that blindly
                     35:    redefines NULL even when __need_wint_t was defined, even though
                     36:    wint_t is not normally provided by <stddef.h>.  Hence, we must
                     37:    remember if special invocation has ever been used to obtain wint_t,
                     38:    in which case we need to clean up NULL yet again.  */
                     39: 
                     40: # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
                     41: #  ifdef __need_wint_t
                     42: #   define _GL_STDDEF_WINT_T
                     43: #  endif
                     44: #  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
                     45: # endif
                     46: 
                     47: #else
                     48: /* Normal invocation convention.  */
                     49: 
                     50: # ifndef _@GUARD_PREFIX@_STDDEF_H
                     51: 
                     52: /* The include_next requires a split double-inclusion guard.  */
                     53: 
                     54: #  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
                     55: 
                     56: /* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
1.1.1.2 ! misho      57: #  if (@REPLACE_NULL@ \
        !            58:        && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T))
        !            59: #   undef NULL
        !            60: #   ifdef __cplusplus
1.1       misho      61:    /* ISO C++ says that the macro NULL must expand to an integer constant
                     62:       expression, hence '((void *) 0)' is not allowed in C++.  */
1.1.1.2 ! misho      63: #    if __GNUG__ >= 3
1.1       misho      64:     /* GNU C++ has a __null macro that behaves like an integer ('int' or
                     65:        'long') but has the same size as a pointer.  Use that, to avoid
                     66:        warnings.  */
1.1.1.2 ! misho      67: #     define NULL __null
        !            68: #    else
        !            69: #     define NULL 0L
        !            70: #    endif
        !            71: #   else
        !            72: #    define NULL ((void *) 0)
        !            73: #   endif
1.1       misho      74: #  endif
1.1.1.2 ! misho      75: 
        !            76: #  ifndef _@GUARD_PREFIX@_STDDEF_H
        !            77: #   define _@GUARD_PREFIX@_STDDEF_H
1.1       misho      78: 
                     79: /* Some platforms lack wchar_t.  */
                     80: #if !@HAVE_WCHAR_T@
                     81: # define wchar_t int
                     82: #endif
                     83: 
1.1.1.2 ! misho      84: /* Some platforms lack max_align_t.  The check for _GCC_MAX_ALIGN_T is
        !            85:    a hack in case the configure-time test was done with g++ even though
        !            86:    we are currently compiling with gcc.  */
        !            87: #if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T)
        !            88: # if !GNULIB_defined_max_align_t
        !            89: /* On the x86, the maximum storage alignment of double, long, etc. is 4,
        !            90:    but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8,
        !            91:    and the C11 standard allows this.  Work around this problem by
        !            92:    using __alignof__ (which returns 8 for double) rather than _Alignof
        !            93:    (which returns 4), and align each union member accordingly.  */
        !            94: #  ifdef __GNUC__
        !            95: #   define _GL_STDDEF_ALIGNAS(type) \
        !            96:       __attribute__ ((__aligned__ (__alignof__ (type))))
        !            97: #  else
        !            98: #   define _GL_STDDEF_ALIGNAS(type) /* */
        !            99: #  endif
        !           100: typedef union
        !           101: {
        !           102:   char *__p _GL_STDDEF_ALIGNAS (char *);
        !           103:   double __d _GL_STDDEF_ALIGNAS (double);
        !           104:   long double __ld _GL_STDDEF_ALIGNAS (long double);
        !           105:   long int __i _GL_STDDEF_ALIGNAS (long int);
        !           106: } rpl_max_align_t;
        !           107: #  define max_align_t rpl_max_align_t
        !           108: #  define GNULIB_defined_max_align_t 1
        !           109: # endif
        !           110: #endif
        !           111: 
1.1       misho     112: #  endif /* _@GUARD_PREFIX@_STDDEF_H */
                    113: # endif /* _@GUARD_PREFIX@_STDDEF_H */
                    114: #endif /* __need_XXX */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>