-
Notifications
You must be signed in to change notification settings - Fork 32
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix set/unset state for short integer (typeset -si) (#211)
This commit fixes at least three bugs: 1. When issuing 'typeset -p' for unset variables typeset as short integer, a value of 0 was incorrectly diplayed. 2. ${x=y} and ${x:=y} were still broken for short integer types (re: 9f2389e). ${x+set} and ${x:+nonempty} were also broken. 3. A memory fault could occur if typeset -l followed a -s option with integers. Additonally, now the last -s/-l wins out as the option to utilize instead of it always being short. src/cmd/ksh93/include/name.h: - Fix the nv_isnull() macro by removing the direct exclusion of short integers from this set/unset test. This breaks few things (only ${.sh.subshell} and ${.sh.level}, as far as we can tell) while potentially correcting many aspects of short integer use (at least bugs 1 and 2 above), as this macro is widely used. - union Value: add new pid_t *pidp pointer member for PID values (see further below). src/cmd/ksh93/bltins/typeset.c: b_typeset(): - To fix bug 3 above, unset the 'shortint' flag and NV_SHORT attribute bit upon encountering the -l optiobn. *** To fix ${.sh.subshell} to work with the new nv_isnull(): src/cmd/ksh93/sh/defs.h: - Add new 'realsubshell' member to the shgd (aka shp->gd) struct which will be the integer value for ${.sh.subshell}. src/cmd/ksh93/sh/init.c, src/cmd/ksh93/data/variables.c: - Initialize SH_SUBSHELLNOD as a pointer to shgd->realsubshell instead of using a short value (.s) directly. Using a pointer allows nv_isnull() to return a positive for ${.sh.subshell} as a non-null pointer is what it checks for. - While we're at it, initialize PPIDNOD ($PPID) and SH_PIDNOD (${.sh.pid}) using the new pdip union member, which is more correct as they are values of type pid_t. src/cmd/ksh93/sh/subshell.c, src/cmd/ksh93/sh/xec.c: - Update the ${.sh.subshell} increases/decreases to refer to shgd->realsubshell (a.k.a. shp->gd->realsubshell). *** To fix ${.sh.level} after changing nv_isnull(): src/cmd/ksh93/sh/macro.c: varsub(): - Add a specific exception for SH_LEVLNOD to the nv_isnull() test, so that ${.sh.level} is always considered to be set. Its handling throughout the code is too complex/special for a simple fix, so we have to special-case it, at least for now. *** Regression test additions: src/cmd/ksh93/tests/attributes.sh: - Add in missing short integer tests and correct the one that existed. The -si test now yields 'typeset -x -r -s -i foo' instead of 'typeset -x -r -s -i foo=0' which brings it in line with all the others. - Add in some other -l attribute tests for floats. Note, -lX test was not added as the size of long double is platform dependent. src/cmd/ksh93/tests/variables.sh: - Add tests for ${x=y} and ${x:=y} used on short int variables. Co-authored-by: Martijn Dekker <[email protected]>
- Loading branch information
Showing
11 changed files
with
44 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters