File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / srclib / stddef.in.h
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Wed Mar 17 13:38:46 2021 UTC (3 years, 3 months ago) by misho
Branches: libiconv, MAIN
CVS tags: v1_16p0, HEAD
libiconv 1.16

    1: /* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
    2: 
    3:    Copyright (C) 2009-2019 Free Software Foundation, Inc.
    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
   16:    along with this program; if not, see <https://www.gnu.org/licenses/>.  */
   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.  */
   57: #  if (@REPLACE_NULL@ \
   58:        && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T))
   59: #   undef NULL
   60: #   ifdef __cplusplus
   61:    /* ISO C++ says that the macro NULL must expand to an integer constant
   62:       expression, hence '((void *) 0)' is not allowed in C++.  */
   63: #    if __GNUG__ >= 3
   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.  */
   67: #     define NULL __null
   68: #    else
   69: #     define NULL 0L
   70: #    endif
   71: #   else
   72: #    define NULL ((void *) 0)
   73: #   endif
   74: #  endif
   75: 
   76: #  ifndef _@GUARD_PREFIX@_STDDEF_H
   77: #   define _@GUARD_PREFIX@_STDDEF_H
   78: 
   79: /* Some platforms lack wchar_t.  */
   80: #if !@HAVE_WCHAR_T@
   81: # define wchar_t int
   82: #endif
   83: 
   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: 
  112: #  endif /* _@GUARD_PREFIX@_STDDEF_H */
  113: # endif /* _@GUARD_PREFIX@_STDDEF_H */
  114: #endif /* __need_XXX */

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