From: Ulrich Drepper Date: Wed, 20 Nov 2002 19:42:37 +0000 (+0000) Subject: (extend_alloca): New define. Based on stack direction it'll try to append to the... X-Git-Tag: cvs/initial~41 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=832737d5e2b924f18884c78d253e8a950c07fcc5;p=glibc.git (extend_alloca): New define. Based on stack direction it'll try to append to the previouls allocated buffer. --- 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