]> git.ipfire.org Git - thirdparty/glibc.git/blobdiff - misc/sys/cdefs.h
Update.
[thirdparty/glibc.git] / misc / sys / cdefs.h
index 84e24b0b62d6c0554ce8a42e7964b1133a2f05a2..3174a8524c7124e468039cbfa566476f37ca981b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992,93,94,95,96,97,98,99 Free Software Foundation, Inc.
+/* Copyright (C) 1992,93,94,95,96,97,98,99, 2000 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
 
 /* We are almost always included from features.h. */
 #ifndef _FEATURES_H
-#include <features.h>
+# include <features.h>
+#endif
+
+/* The GNU libc does not support any K&R compilers or the traditional mode
+   of ISO C compilers anymore.  Check for some of the combinations not
+   anymore supported.  */
+#if defined __GNUC__ && !defined __STDC__
+# error "You need a ISO C conforming compiler to use the glibc headers"
 #endif
 
 /* Some user header file might have defined this before.  */
 
 # define __inline              /* No inline functions.  */
 
-# if (defined __STDC__ && __STDC__) || defined __cplusplus
-
-#  define __P(args)    args
-#  define __PMT(args)  args
-
-# else /* Not ANSI C or C++.  */
-
-#  define __P(args)    ()      /* No prototypes.  */
-#  define __PMT(args)  ()
-
-# endif        /* ANSI C or C++.  */
+# define __THROW
+# define __P(args)     args
+# define __PMT(args)   args
 
 # define __const       const
 # define __signed      signed
 /* For these things, GCC behaves the ANSI way normally,
    and the non-ANSI way under -traditional.  */
 
-#if defined __STDC__ && __STDC__
-
-# define __CONCAT(x,y) x ## y
-# define __STRING(x)   #x
+#define __CONCAT(x,y)  x ## y
+#define __STRING(x)    #x
 
 /* This is not a typedef so `const __ptr_t' does the right thing.  */
-# define __ptr_t void *
-# define __long_double_t  long double
-
-#else
-
-# define __CONCAT(x,y) x/**/y
-# define __STRING(x)   "x"
-
-# define __ptr_t char *
-# define __long_double_t  long double
-
-/* The BSD header files use the ANSI keywords unmodified (this means that
-   old programs may lose if they use the new keywords as identifiers), but
-   those names are not available under -traditional.  We define them to
-   their __ versions, which are taken care of above.  */
-# ifdef        __USE_BSD
-#  define const                __const
-#  define signed               __signed
-#  define volatile     __volatile
-# endif
-
-#endif /* __STDC__ */
+#define __ptr_t void *
+#define __long_double_t  long double
 
 
 /* C++ needs to know that types and declarations are C, not C++.  */
 # define __END_DECLS
 #endif
 
+
+/* Support for bounded pointers.  */
+#ifndef __BOUNDED_POINTERS__
+# define __bounded     /* nothing */
+# define __unbounded   /* nothing */
+# define __ptrvalue    /* nothing */
+#endif
+
+
 /* __asm__ ("xyz") is used throughout the headers to rename functions
    at the assembly language level.  This is wrapped by the __REDIRECT
    macro, in order to support compilers that can do this some other
    semantics, but it's the best we can do).
 
    Example:
-   int __REDIRECT(setpgrp, __P((__pid_t pid, __pid_t pgrp)), setpgid); */
+   int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
 
 #if defined __GNUC__ && __GNUC__ >= 2
 
    `__attribute__' syntax.  All of the ways we use this do fine if
    they are omitted for compilers that don't understand it. */
 #if !defined __GNUC__ || __GNUC__ < 2
+# define __attribute__(xyz)    /* Ignore */
+#endif
 
-# define __attribute__(xyz)    /* Ignore. */
+/* At some point during the gcc 2.96 development the `malloc' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (2,96)
+# define __attribute_malloc__ __attribute__ ((__malloc__))
+#else
+# define __attribute_malloc__ /* Ignore */
+#endif
+
+/* At some point during the gcc 2.96 development the `pure' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (2,96)
+# define __attribute_pure__ __attribute__ ((__pure__))
+#else
+# define __attribute_pure__ /* Ignore */
+#endif
 
+/* At some point during the gcc 2.8 development the `format_arg' attribute
+   for functions was introduced.  We don't want to use it unconditionally
+   (although this would be possible) since it generates warnings.  */
+#if __GNUC_PREREQ (2,8)
+# define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x)))
+#else
+# define __attribute_format_arg__(x) /* Ignore */
 #endif
 
 /* It is possible to compile containing GCC extensions even if GCC is
 # define __restrict    /* Ignore */
 #endif
 
+/* ISO C99 also allows to declare arrays as non-overlapping.  The syntax is
+     array_name[restrict]
+   But gcc so far does not support this syntax.  We define a separate macro
+   for this which can be enabled if the underlying compiler supports it.  */
+#define __restrict_arr
+
 #endif  /* sys/cdefs.h */