Blame lib/stddef.in.h

Packit Service a2489d
/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
Packit Service a2489d
Packit Service a2489d
   Copyright (C) 2009-2018 Free Software Foundation, Inc.
Packit Service a2489d
Packit Service a2489d
   This program is free software; you can redistribute it and/or modify
Packit Service a2489d
   it under the terms of the GNU General Public License as published by
Packit Service a2489d
   the Free Software Foundation; either version 3, or (at your option)
Packit Service a2489d
   any later version.
Packit Service a2489d
Packit Service a2489d
   This program is distributed in the hope that it will be useful,
Packit Service a2489d
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service a2489d
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service a2489d
   GNU General Public License for more details.
Packit Service a2489d
Packit Service a2489d
   You should have received a copy of the GNU General Public License
Packit Service a2489d
   along with this program; if not, see <https://www.gnu.org/licenses/>.  */
Packit Service a2489d
Packit Service a2489d
/* Written by Eric Blake.  */
Packit Service a2489d
Packit Service a2489d
/*
Packit Service a2489d
 * POSIX 2008 <stddef.h> for platforms that have issues.
Packit Service a2489d
 * <http://www.opengroup.org/susv3xbd/stddef.h.html>
Packit Service a2489d
 */
Packit Service a2489d
Packit Service a2489d
#if __GNUC__ >= 3
Packit Service a2489d
@PRAGMA_SYSTEM_HEADER@
Packit Service a2489d
#endif
Packit Service a2489d
@PRAGMA_COLUMNS@
Packit Service a2489d
Packit Service a2489d
#if defined __need_wchar_t || defined __need_size_t  \
Packit Service a2489d
  || defined __need_ptrdiff_t || defined __need_NULL \
Packit Service a2489d
  || defined __need_wint_t
Packit Service a2489d
/* Special invocation convention inside gcc header files.  In
Packit Service a2489d
   particular, gcc provides a version of <stddef.h> that blindly
Packit Service a2489d
   redefines NULL even when __need_wint_t was defined, even though
Packit Service a2489d
   wint_t is not normally provided by <stddef.h>.  Hence, we must
Packit Service a2489d
   remember if special invocation has ever been used to obtain wint_t,
Packit Service a2489d
   in which case we need to clean up NULL yet again.  */
Packit Service a2489d
Packit Service a2489d
# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
Packit Service a2489d
#  ifdef __need_wint_t
Packit Service a2489d
#   define _GL_STDDEF_WINT_T
Packit Service a2489d
#  endif
Packit Service a2489d
#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
Packit Service a2489d
# endif
Packit Service a2489d
Packit Service a2489d
#else
Packit Service a2489d
/* Normal invocation convention.  */
Packit Service a2489d
Packit Service a2489d
# ifndef _@GUARD_PREFIX@_STDDEF_H
Packit Service a2489d
Packit Service a2489d
/* The include_next requires a split double-inclusion guard.  */
Packit Service a2489d
Packit Service a2489d
#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
Packit Service a2489d
Packit Service a2489d
/* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
Packit Service a2489d
#  if (@REPLACE_NULL@ \
Packit Service a2489d
       && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T))
Packit Service a2489d
#   undef NULL
Packit Service a2489d
#   ifdef __cplusplus
Packit Service a2489d
   /* ISO C++ says that the macro NULL must expand to an integer constant
Packit Service a2489d
      expression, hence '((void *) 0)' is not allowed in C++.  */
Packit Service a2489d
#    if __GNUG__ >= 3
Packit Service a2489d
    /* GNU C++ has a __null macro that behaves like an integer ('int' or
Packit Service a2489d
       'long') but has the same size as a pointer.  Use that, to avoid
Packit Service a2489d
       warnings.  */
Packit Service a2489d
#     define NULL __null
Packit Service a2489d
#    else
Packit Service a2489d
#     define NULL 0L
Packit Service a2489d
#    endif
Packit Service a2489d
#   else
Packit Service a2489d
#    define NULL ((void *) 0)
Packit Service a2489d
#   endif
Packit Service a2489d
#  endif
Packit Service a2489d
Packit Service a2489d
#  ifndef _@GUARD_PREFIX@_STDDEF_H
Packit Service a2489d
#   define _@GUARD_PREFIX@_STDDEF_H
Packit Service a2489d
Packit Service a2489d
/* Some platforms lack wchar_t.  */
Packit Service a2489d
#if !@HAVE_WCHAR_T@
Packit Service a2489d
# define wchar_t int
Packit Service a2489d
#endif
Packit Service a2489d
Packit Service a2489d
/* Some platforms lack max_align_t.  The check for _GCC_MAX_ALIGN_T is
Packit Service a2489d
   a hack in case the configure-time test was done with g++ even though
Packit Service a2489d
   we are currently compiling with gcc.  */
Packit Service a2489d
#if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T)
Packit Service a2489d
# if !GNULIB_defined_max_align_t
Packit Service a2489d
/* On the x86, the maximum storage alignment of double, long, etc. is 4,
Packit Service a2489d
   but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8,
Packit Service a2489d
   and the C11 standard allows this.  Work around this problem by
Packit Service a2489d
   using __alignof__ (which returns 8 for double) rather than _Alignof
Packit Service a2489d
   (which returns 4), and align each union member accordingly.  */
Packit Service a2489d
#  ifdef __GNUC__
Packit Service a2489d
#   define _GL_STDDEF_ALIGNAS(type) \
Packit Service a2489d
      __attribute__ ((__aligned__ (__alignof__ (type))))
Packit Service a2489d
#  else
Packit Service a2489d
#   define _GL_STDDEF_ALIGNAS(type) /* */
Packit Service a2489d
#  endif
Packit Service a2489d
typedef union
Packit Service a2489d
{
Packit Service a2489d
  char *__p _GL_STDDEF_ALIGNAS (char *);
Packit Service a2489d
  double __d _GL_STDDEF_ALIGNAS (double);
Packit Service a2489d
  long double __ld _GL_STDDEF_ALIGNAS (long double);
Packit Service a2489d
  long int __i _GL_STDDEF_ALIGNAS (long int);
Packit Service a2489d
} rpl_max_align_t;
Packit Service a2489d
#  define max_align_t rpl_max_align_t
Packit Service a2489d
#  define GNULIB_defined_max_align_t 1
Packit Service a2489d
# endif
Packit Service a2489d
#endif
Packit Service a2489d
Packit Service a2489d
#  endif /* _@GUARD_PREFIX@_STDDEF_H */
Packit Service a2489d
# endif /* _@GUARD_PREFIX@_STDDEF_H */
Packit Service a2489d
#endif /* __need_XXX */