diff options
author | Barton E. Schaefer <schaefer@zsh.org> | 2014-07-24 08:45:16 -0700 |
---|---|---|
committer | Barton E. Schaefer <schaefer@zsh.org> | 2014-07-24 08:45:16 -0700 |
commit | 2f0efe9f592255d0d83c0929423cc397bb1ebfa4 (patch) | |
tree | 822e7444d47471c8eafe0b27e2150822b72ac9ec | |
parent | 77119afe19a781251e77a369db1dc9c8556055a0 (diff) | |
download | zsh-2f0efe9f592255d0d83c0929423cc397bb1ebfa4.tar.gz zsh-2f0efe9f592255d0d83c0929423cc397bb1ebfa4.tar.xz zsh-2f0efe9f592255d0d83c0929423cc397bb1ebfa4.zip |
32853: redefine VARARR() to use heap rather than stack allocation
enable old behavior via "configure --with-stack-allocation"
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | Src/mem.c | 5 | ||||
-rw-r--r-- | Src/zsh_system.h | 4 | ||||
-rw-r--r-- | configure.ac | 10 |
4 files changed, 22 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog index 5d37bb323..874850f18 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2014-07-24 Barton E. Schaefer <schaefer@zsh.org> + * 32853: configure.ac, Src/mem.c, Src/zsh_system.h: redefine + the VARARR() macro to use heap rather than stack allocation; + enable old behavior via "configure --with-stack-allocation" + * unposted (see 32892): Src/builtins.c: 'fc -I' is an error * 32903: Src/Modules/parameter.c: new empty (unset) elements in diff --git a/Src/mem.c b/Src/mem.c index a8f0c37ce..7e0667a33 100644 --- a/Src/mem.c +++ b/Src/mem.c @@ -950,7 +950,10 @@ zrealloc(void *ptr, size_t size) ptr = NULL; } else { /* If ptr is NULL, then behave like malloc */ - ptr = malloc(size); + if (!(ptr = (void *) malloc(size))) { + zerr("fatal error: out of memory"); + exit(1); + } } unqueue_signals(); diff --git a/Src/zsh_system.h b/Src/zsh_system.h index 601de69f6..811340d42 100644 --- a/Src/zsh_system.h +++ b/Src/zsh_system.h @@ -286,11 +286,15 @@ struct timezone { # include <limits.h> #endif +#ifdef USE_STACK_ALLOCATION #ifdef HAVE_VARIABLE_LENGTH_ARRAYS # define VARARR(X,Y,Z) X (Y)[Z] #else # define VARARR(X,Y,Z) X *(Y) = (X *) alloca(sizeof(X) * (Z)) #endif +#else +# define VARARR(X,Y,Z) X *(Y) = (X *) zhalloc(sizeof(X) * (Z)) +#endif /* we should handle unlimited sizes from pathconf(_PC_PATH_MAX) */ /* but this is too much trouble */ diff --git a/configure.ac b/configure.ac index 0f87a6c88..37f35858f 100644 --- a/configure.ac +++ b/configure.ac @@ -140,6 +140,16 @@ AC_HELP_STRING([--enable-zsh-hash-debug], [turn on debugging of internal hash ta AC_DEFINE(ZSH_HASH_DEBUG) fi]) +dnl Do you want to dynamically allocate memory on the stack where possible? +ifdef([stack-allocation],[undefine([stack-allocation])])dnl +AH_TEMPLATE([USE_STACK_ALLOCATION], +[Define to 1 if you want to allocate stack memory e.g. with `alloca'.]) +AC_ARG_ENABLE(stack-allocation, +AC_HELP_STRING([--enable-stack-allocation], [allocate stack memory e.g. with `alloca']), +[if test x$enableval = xyes; then + AC_DEFINE(USE_STACK_ALLOCATION) +fi]) + dnl Pathnames for global zsh scripts ifdef([etcdir],[undefine([etcdir])])dnl AC_ARG_ENABLE(etcdir, |