hush: fix readonly2.tests failure

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-07-18 15:58:02 +02:00
parent f645e1573c
commit cf5110978b
3 changed files with 13 additions and 0 deletions

View File

@ -2287,7 +2287,18 @@ static struct variable *set_vars_and_save_old(char **strings)
if (var_pp) {
var_p = *var_pp;
if (var_p->flg_read_only) {
char **p;
bb_error_msg("%s: readonly variable", *s);
/*
* "VAR=V BLTIN" unsets VARs after BLTIN completes.
* If VAR is readonly, leaving it in the list
* after asssignment error (msg above)
* causes doubled error message later, on unset.
*/
debug_printf_env("removing/freeing '%s' element\n", *s);
free(*s);
p = s;
do { *p = p[1]; p++; } while (*p);
goto next;
}
/* Remove variable from global linked list */

View File

@ -1,4 +1,5 @@
hush: a=Z: readonly variable
Visible:42
hush: a=Z: readonly variable
Visible:42

View File

@ -3,4 +3,5 @@ readonly a=A
# external commands and builtins should behave the same:
(exit 42); a=Z echo "Visible:$?"
echo
(exit 42); a=Z env echo "Visible:$?"