diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2018-05-30 02:06:03 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2018-08-29 11:16:09 +0800 |
commit | 3cd538634f71538370f5af239f342aec48b7470b (patch) | |
tree | cd38d2d317b03ae96b6a3a8a5fe79c247784f565 /.gitignore | |
parent | expand: Fix skipping of command substitution when trimming in evalvar (diff) | |
download | dash-3cd538634f71538370f5af239f342aec48b7470b.tar.gz dash-3cd538634f71538370f5af239f342aec48b7470b.zip |
expand: Do not reprocess data when expanding words
Currently various paths will reprocess data when performing word expansion. For example, expari will skip backwards looking for the start of the arithmetic expansion, while evalvar will skip unexpanded words manually. This is cumbersome and error-prone. This patch fixes this by making word expansions proceed in a linear fashion. This means changing argstr and the various expansion functions such as expari and subevalvar to return the next character to be expanded. This is inspired by similar code from FreeBSD. However, we take things one step further and completely remove the manual word skipping in evalvar. This is accomplished by introducing a new EXP_DISCARD flag that tells argstr to only parse and not produce any actual expansions. Incidentally, argstr will now always NUL-terminate the expansion unless the EXP_WORD flag is set. This is because all but one caller of argstr wants the result to be NUL-termianted. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions