Return to alloca.in.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / libiconv / gnulib-local / lib |
1.1 ! misho 1: /* Memory allocation on the stack. ! 2: Copyright (C) 1995, 1999, 2001-2007 Free Software Foundation, Inc. ! 3: ! 4: This program is free software: you can redistribute it and/or modify ! 5: it under the terms of the GNU General Public License as published by ! 6: the Free Software Foundation; either version 3 of the License, or ! 7: (at your option) any later version. ! 8: ! 9: This program is distributed in the hope that it will be useful, ! 10: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! 12: GNU General Public License for more details. ! 13: ! 14: You should have received a copy of the GNU General Public License ! 15: along with this program. If not, see <http://www.gnu.org/licenses/>. */ ! 16: ! 17: /* When this file is included, it may be preceded only by preprocessor ! 18: declarations. Thanks to AIX. Therefore we include it right after ! 19: "config.h", not later. */ ! 20: ! 21: /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H ! 22: means there is a real alloca function. */ ! 23: #ifndef _GL_ALLOCA_H ! 24: #define _GL_ALLOCA_H ! 25: ! 26: /* alloca(N) returns a pointer (void* or char*) to N bytes of memory ! 27: allocated on the stack, and which will last until the function returns. ! 28: Use of alloca should be avoided: ! 29: - inside arguments of function calls - undefined behaviour, ! 30: - in inline functions - the allocation may actually last until the ! 31: calling function returns, ! 32: - for huge N (say, N >= 65536) - you never know how large (or small) ! 33: the stack is, and when the stack cannot fulfill the memory allocation ! 34: request, the program just crashes. ! 35: */ ! 36: ! 37: #ifndef alloca ! 38: # ifdef __GNUC__ ! 39: # define alloca __builtin_alloca ! 40: # else ! 41: # ifdef _MSC_VER ! 42: # include <malloc.h> ! 43: # define alloca _alloca ! 44: # else ! 45: # if HAVE_ALLOCA_H ! 46: # include <alloca.h> ! 47: # else ! 48: # ifdef _AIX ! 49: #pragma alloca ! 50: # else ! 51: # ifdef __hpux /* This section must match that of bison generated files. */ ! 52: # ifdef __cplusplus ! 53: extern "C" void *alloca (unsigned int); ! 54: # else /* not __cplusplus */ ! 55: extern void *alloca (); ! 56: # endif /* not __cplusplus */ ! 57: # else /* not __hpux */ ! 58: # ifndef alloca ! 59: extern char *alloca (); ! 60: # endif ! 61: # endif /* __hpux */ ! 62: # endif ! 63: # endif ! 64: # endif ! 65: # endif ! 66: #endif ! 67: ! 68: #endif /* _GL_ALLOCA_H */