diff options
author | Daniel Shahaf <d.s@daniel.shahaf.name> | 2020-03-21 18:06:48 +0000 |
---|---|---|
committer | Daniel Shahaf <d.s@daniel.shahaf.name> | 2020-03-25 23:49:01 +0000 |
commit | 12414d80523ed73a15c495b3a2f95c23ab61b2b8 (patch) | |
tree | 1b63bd6ad6a1885688acc1a0256f572ddc4dfba2 /Src/hist.c | |
parent | 38b0e1ff7e1bfcb8c7c6dffc328e2b98297b1878 (diff) | |
download | zsh-12414d80523ed73a15c495b3a2f95c23ab61b2b8.tar.gz zsh-12414d80523ed73a15c495b3a2f95c23ab61b2b8.tar.xz zsh-12414d80523ed73a15c495b3a2f95c23ab61b2b8.zip |
45583/0003: chrealpath: Let caller decide how the return value should be allocated.
Diffstat (limited to 'Src/hist.c')
-rw-r--r-- | Src/hist.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/Src/hist.c b/Src/hist.c index db2cc4ad7..8ab7828e8 100644 --- a/Src/hist.c +++ b/Src/hist.c @@ -842,7 +842,7 @@ histsubchar(int c) break; case 'A': - if (!chrealpath(&sline, 'A')) { + if (!chrealpath(&sline, 'A', 1)) { herrflush(); zerr("modifier failed: A"); return -1; @@ -1928,12 +1928,14 @@ chabspath(char **junkptr) * If mode is 'A', resolve dot-dot before symlinks. Else, mode should be 'P'. * Refer to the documentation of the :A and :P modifiers for details. * + * use_heap is 1 if the result is to be allocated on the heap, 0 otherwise. + * * Return 0 for error, non-zero for success. */ /**/ int -chrealpath(char **junkptr, char mode) +chrealpath(char **junkptr, char mode, int use_heap) { char *str; #ifdef HAVE_REALPATH @@ -2000,14 +2002,15 @@ chrealpath(char **junkptr, char mode) str++; } + use_heap = (use_heap ? META_HEAPDUP : META_DUP); if (real) { - *junkptr = metafy(str = bicat(real, nonreal), -1, META_HEAPDUP); + *junkptr = metafy(str = bicat(real, nonreal), -1, use_heap); zsfree(str); #ifdef REALPATH_ACCEPTS_NULL free(real); #endif } else { - *junkptr = metafy(nonreal, lastpos - nonreal + 1, META_HEAPDUP); + *junkptr = metafy(nonreal, lastpos - nonreal + 1, use_heap); } #endif |