]> CyberLeo.Net >> Repos - FreeBSD/releng/7.2.git/blob - contrib/cpio/lib/alloca_.h
Create releng/7.2 from stable/7 in preparation for 7.2-RELEASE.
[FreeBSD/releng/7.2.git] / contrib / cpio / lib / alloca_.h
1 /* Memory allocation on the stack.
2
3    Copyright (C) 1995, 1999, 2001, 2002, 2003, 2004 Free Software
4    Foundation, Inc.
5
6    This program is free software; you can redistribute it and/or modify it
7    under the terms of the GNU General Public License as published
8    by the Free Software Foundation; either version 2, or (at your option)
9    any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    General Public License for more details.
15
16    You should have received a copy of the GNU General Public
17    License along with this program; if not, write to the Free Software
18    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19    USA.  */
20
21 /* When this file is included, it may be preceded only by preprocessor
22    declarations.  Thanks to AIX.  Therefore we include it right after
23    "config.h", not later.  */
24
25 #ifndef _ALLOCA_H
26 # define _ALLOCA_H
27
28 /* alloca (N) returns a pointer to N bytes of memory
29    allocated on the stack, which will last until the function returns.
30    Use of alloca should be avoided:
31      - inside arguments of function calls - undefined behaviour,
32      - in inline functions - the allocation may actually last until the
33        calling function returns,
34      - for huge N (say, N >= 65536) - you never know how large (or small)
35        the stack is, and when the stack cannot fulfill the memory allocation
36        request, the program just crashes.
37  */
38
39 #ifdef __GNUC__
40 # define alloca __builtin_alloca
41 #elif defined _AIX
42 # define alloca __alloca
43 #elif defined _MSC_VER
44 # include <malloc.h>
45 # define alloca _alloca
46 #else
47 # include <stddef.h>
48 # ifdef  __cplusplus
49 extern "C"
50 # endif
51 void *alloca (size_t);
52 #endif
53
54 #endif /* _ALLOCA_H */