mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	2000-11-27 Ulrich Drepper <drepper@redhat.com> * iconv/gconv.h (__gconv_info): Define __data element using __flexarr. * misc/sys/cdefs.h: Define __flexarr. Proposed by Joseph S. Myers <jsm28@cam.ac.uk>. * iconvdata/iso-2022-jp.c: Add prototypes to avoid warnings. * iconv/skeleton.c: Likewise. * iconvdata/iso8859-1.c (BODY to 8859-1): Add const to cast. * iconv/loop.c (get16): Add const to cast. (get32): Likewise.
		
			
				
	
	
		
			192 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* 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
 | |
|    modify it under the terms of the GNU Library General Public License as
 | |
|    published by the Free Software Foundation; either version 2 of the
 | |
|    License, or (at your option) any later version.
 | |
| 
 | |
|    The GNU C Library is distributed in the hope that it will be useful,
 | |
|    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|    Library General Public License for more details.
 | |
| 
 | |
|    You should have received a copy of the GNU Library General Public
 | |
|    License along with the GNU C Library; see the file COPYING.LIB.  If not,
 | |
|    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | |
|    Boston, MA 02111-1307, USA.  */
 | |
| 
 | |
| #ifndef	_SYS_CDEFS_H
 | |
| #define	_SYS_CDEFS_H	1
 | |
| 
 | |
| /* We are almost always included from features.h. */
 | |
| #ifndef _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.  */
 | |
| #undef	__P
 | |
| #undef	__PMT
 | |
| 
 | |
| #ifdef __GNUC__
 | |
| 
 | |
| /* GCC can always grok prototypes.  For C++ programs we add throw()
 | |
|    to help it optimize the function calls.  But this works only with
 | |
|    gcc 2.8.x and egcs.  */
 | |
| # if defined __cplusplus && __GNUC_PREREQ (2,8)
 | |
| #  define __THROW	throw ()
 | |
| # else
 | |
| #  define __THROW
 | |
| # endif
 | |
| # define __P(args)	args __THROW
 | |
| /* This macro will be used for functions which might take C++ callback
 | |
|    functions.  */
 | |
| # define __PMT(args)	args
 | |
| 
 | |
| #else	/* Not GCC.  */
 | |
| 
 | |
| # define __inline		/* No inline functions.  */
 | |
| 
 | |
| # define __THROW
 | |
| # define __P(args)	args
 | |
| # define __PMT(args)	args
 | |
| 
 | |
| # define __const	const
 | |
| # define __signed	signed
 | |
| # define __volatile	volatile
 | |
| 
 | |
| #endif	/* GCC.  */
 | |
| 
 | |
| /* For these things, GCC behaves the ANSI way normally,
 | |
|    and the non-ANSI way under -traditional.  */
 | |
| 
 | |
| #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
 | |
| 
 | |
| 
 | |
| /* C++ needs to know that types and declarations are C, not C++.  */
 | |
| #ifdef	__cplusplus
 | |
| # define __BEGIN_DECLS	extern "C" {
 | |
| # define __END_DECLS	}
 | |
| #else
 | |
| # define __BEGIN_DECLS
 | |
| # define __END_DECLS
 | |
| #endif
 | |
| 
 | |
| 
 | |
| /* Support for bounded pointers.  */
 | |
| #ifndef __BOUNDED_POINTERS__
 | |
| # define __bounded	/* nothing */
 | |
| # define __unbounded	/* nothing */
 | |
| # define __ptrvalue	/* nothing */
 | |
| #endif
 | |
| 
 | |
| 
 | |
| /* Support for flexible arrays.  */
 | |
| #if __GNUC_PREREQ (2,97)
 | |
| /* GCC 2.97 supports C99 flexible array members.  */
 | |
| # define __flexarr	[]
 | |
| #else
 | |
| # ifdef __GNUC__
 | |
| #  define __flexarr	[0]
 | |
| # else
 | |
| #  ifdef __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
 | |
| #   define __flexarr	[]
 | |
| #  else
 | |
| /* Some other non-C99 compiler.  Approximate with [1].  */
 | |
| #   define __flexarr	[1]
 | |
| #  endif
 | |
| # endif
 | |
| #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
 | |
|    way.  When compilers don't support asm-names at all, we have to do
 | |
|    preprocessor tricks instead (which don't have exactly the right
 | |
|    semantics, but it's the best we can do).
 | |
| 
 | |
|    Example:
 | |
|    int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */
 | |
| 
 | |
| #if defined __GNUC__ && __GNUC__ >= 2
 | |
| 
 | |
| # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias))
 | |
| # define __ASMNAME(cname)  __ASMNAME2 (__USER_LABEL_PREFIX__, cname)
 | |
| # define __ASMNAME2(prefix, cname) __STRING (prefix) cname
 | |
| 
 | |
| /*
 | |
| #elif __SOME_OTHER_COMPILER__
 | |
| 
 | |
| # define __REDIRECT(name, proto, alias) name proto; \
 | |
| 	_Pragma("let " #name " = " #alias)
 | |
| */
 | |
| #endif
 | |
| 
 | |
| /* GCC has various useful declarations that can be made with the
 | |
|    `__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
 | |
| 
 | |
| /* 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
 | |
|    run in pedantic mode if the uses are carefully marked using the
 | |
|    `__extension__' keyword.  But this is not generally available before
 | |
|    version 2.8.  */
 | |
| #if !__GNUC_PREREQ (2,8)
 | |
| # define __extension__		/* Ignore */
 | |
| #endif
 | |
| 
 | |
| /* __restrict is known in EGCS 1.2 and above. */
 | |
| #if !__GNUC_PREREQ (2,92)
 | |
| # 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 */
 |