From 832737d5e2b924f18884c78d253e8a950c07fcc5 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Wed, 20 Nov 2002 19:42:37 +0000 Subject: (extend_alloca): New define. Based on stack direction it'll try to append to the previouls allocated buffer. --- include/alloca.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/include/alloca.h b/include/alloca.h index 9536fe0f1f..de541f4e5a 100644 --- a/include/alloca.h +++ b/include/alloca.h @@ -1,6 +1,7 @@ #ifndef _ALLOCA_H #include +#include #undef __alloca @@ -18,4 +19,31 @@ extern int __libc_alloca_cutoff (size_t size) __attribute__ ((const)); #include +#if _STACK_GROWS_DOWN +# define extend_alloca(buf, len, newlen) \ + (__typeof (buf)) ({ size_t __newlen = (newlen); \ + char *__newbuf = __alloca (__newlen); \ + if (__newbuf + __newlen == (char *) buf) \ + len += __newlen; \ + else \ + len = __newlen; \ + __newbuf; }) +#elif _STACK_GROWS_UP +# define extend_alloca(buf, len, newlen) \ + (__typeof (buf)) ({ size_t __newlen = (newlen); \ + char *__newbuf = __alloca (__newlen); \ + char *__buf = (buf); \ + if (__buf + __newlen == __newbuf) \ + { \ + len += __newlen; \ + __newbuf = __buf; \ + } \ + else \ + len = __newlen; \ + __newbuf; }) +#else +# define extern_alloca(buf, len, newlen) \ + __alloca (((len) = (newlen))) +#endif + #endif -- cgit 1.4.1