mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-13 19:52:20 +00:00
The 'exit' and 'return' commands without an argument failed to pass down the exit status of the last-run command when incorporated in a block with redirection, &&/|| list, 'case' statement, or 'while', 'until' or 'for' loop. src/cmd/ksh93/bltins/cflow.c: - Use $?, which is sh.savexit a.k.a. shp->savexit, as the default exit status value if there is no argument, instead of shp->oldexit. This fixes the default exit status behaviour to match POSIX and other shells. src/cmd/ksh93/include/defs.h, src/cmd/ksh93/include/shell.h: - Remove now-unused sh.oldexit (a.k.a. shp->oldexit) private struct member. It appeared to fulfill the same function as sh.savexit, but in a slightly broken way. - Move the savexit/$? declaration from the _SH_PRIVATE part of the struct definition to the public API part. Since $? uses this, it's clearly a publicly exposed value already, and this is generally the one to use. (If anything, it's exitval that should have been private.) This declares savexit right next to exitval, rewriting the comments to clarify the difference between them. src/cmd/ksh93/sh/fault.c, src/cmd/ksh93/sh/subshell.c, src/cmd/ksh93/sh/xec.c: - Remove assignments to shp->oldexit. src/cmd/ksh93/tests/basic.sh: - Add thorough regression tests for the default exit status behaviour of 'return' and 'exit' in various lexical contexts. - Verify that 'for' and 'case' without any command, as well as a lone redirection, still correctly reset the exit status to 0. Fixes: #117
51 lines
2.1 KiB
Text
51 lines
2.1 KiB
Text
TODO for AT&T ksh93, 93u+m bugfix branch
|
|
|
|
______
|
|
Fix regression test failures:
|
|
|
|
- On OpenBSD, there are 15 locale-related test failures in variables.sh.
|
|
- There are many regression test failures on NetBSD.
|
|
|
|
______
|
|
Fix build system:
|
|
|
|
- ksh does not currently build on AIX or QNX.
|
|
- Reimport the removed nmake. It is necessary for changes in Makefiles
|
|
to take effect. The machine-generated Mamfiles are now used as a fallback,
|
|
but they are not meant to be edited by hand.
|
|
|
|
______
|
|
Fix currently known bugs affecting shell scripting. These are identified by
|
|
their modernish IDs. For exact details, see code/comments in:
|
|
https://github.com/modernish/modernish/tree/0.16/lib/modernish/cap/
|
|
|
|
- BUG_BRACQUOT: shell quoting within bracket patterns has no effect. This
|
|
bug means the '-' retains it special meaning of 'character range', and an
|
|
initial ! (and, on some shells, ^) retains the meaning of negation, even
|
|
in quoted strings within bracket patterns, including quoted variables.
|
|
|
|
- BUG_CMDEXPAN: if the 'command' command results from an expansion, it acts
|
|
like 'command -v', showing the path of the command instead of executing it.
|
|
For example:
|
|
v=command; "$v" ls
|
|
or
|
|
set -- command ls; "$@"
|
|
don't work.
|
|
See also: https://github.com/att/ast/issues/963
|
|
|
|
- BUG_CMDSPEXIT: preceding a "special builtin"[*] (other than 'eval', 'exec',
|
|
'return' or 'exit') with 'command' does not always stop it from exiting
|
|
the shell if the builtin encounters error.
|
|
[*] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_14
|
|
|
|
- BUG_CSUBSTDO: If standard output (file descriptor 1) is closed before
|
|
entering a $(command substitution), and any other file descriptors are
|
|
redirected within the command substitution, commands such as 'echo' will
|
|
not work within the command substitution, acting as if standard output is
|
|
still closed.
|
|
|
|
- BUG_IFSGLOBS: In glob pattern matching (as in case or parameter
|
|
substitution with # and %), if IFS starts with ? or * and the "$*"
|
|
parameter expansion inserts any IFS separator characters, those characters
|
|
are erroneously interpreted as wildcards when quoted "$*" is used as the
|
|
glob pattern.
|