mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Fix multiple problems with the getconf builtin (#280)
This commit fixes three problems with getconf pathbound builtin: 1. The -l/--lowercase option did not change all variable names to lower case. 2. The -q/--quote option now quotes all string values. Previously, it only quoted string values that had a space or other non-shellsafe character. 3. The -c/--call, -n/--name and -s/--standard options matched all variable names provided by 'getconf -a', even if none were actual matches. Additionally, references to the confstr and sysconf functions have been updated to reference section 3 of the man pages instead of section 2. src/lib/libast/port/astconf.c: - Previously, only values that had spaces in them were quoted. Change that behavior to quote all string values by using the FMT_ALWAYS flag. Bug report: https://github.com/att/ast/issues/1173 - Not all variable names were printed in lowercase by 'getconf -l'. Fix it by adding a few missing instances of fmtlower. Bug report: https://github.com/att/ast/issues/1171 - Add the missing code to the '#if _pth_getconf_a' block to handle -c/-n/-s while parsing the OS's native 'getconf -a' output. This approach reuses code for name matching from other parts of astconflist(). Resolves: https://github.com/ksh93/ksh/issues/279 src/lib/libcmd/getconf.c: - Update the documentation to note the -q flag only quotes strings. src/cmd/ksh93/tests/bulitins.sh: - Add regression tests for the getconf bugs fixed in this commit. Co-authored-by: Martijn Dekker <martijn@inlv.org>
This commit is contained in:
parent
61e0f90460
commit
f28bce61a7
8 changed files with 76 additions and 22 deletions
|
@ -20,7 +20,7 @@
|
|||
|
||||
#define SH_RELEASE_FORK "93u+m" /* only change if you develop a new ksh93 fork */
|
||||
#define SH_RELEASE_SVER "1.0.0-alpha" /* semantic version number: https://semver.org */
|
||||
#define SH_RELEASE_DATE "2021-04-16" /* must be in this format for $((.sh.version)) */
|
||||
#define SH_RELEASE_DATE "2021-04-20" /* must be in this format for $((.sh.version)) */
|
||||
#define SH_RELEASE_CPYR "(c) 2020-2021 Contributors to ksh " SH_RELEASE_FORK
|
||||
|
||||
/* Scripts sometimes field-split ${.sh.version}, so don't change amount of whitespace. */
|
||||
|
|
|
@ -22,8 +22,34 @@
|
|||
|
||||
bincat=$(whence -p cat)
|
||||
|
||||
# test shell builtin commands
|
||||
# ======
|
||||
# These are regression tests for the getconf builtin.
|
||||
builtin getconf
|
||||
bingetconf=$(getconf GETCONF)
|
||||
bad_result=$(getconf --version 2>&1)
|
||||
|
||||
# The -l option should convert all variable names to lowercase.
|
||||
# https://github.com/att/ast/issues/1171
|
||||
got=$(getconf -l | awk '{ gsub(/=.*/, "") } /[[:upper:]]/ { print }')
|
||||
[[ -n $got ]] && err_exit "'getconf -l' doesn't convert all variable names to lowercase" \
|
||||
"(got $(printf %q "$got"))"
|
||||
|
||||
# The -q option should quote all string values.
|
||||
# https://github.com/att/ast/issues/1173
|
||||
exp="GETCONF=\"$bingetconf\""
|
||||
got=$(getconf -q | grep 'GETCONF=')
|
||||
[[ $exp == "$got" ]] || err_exit "'getconf -q' fails to quote string values" \
|
||||
"(expected $exp, got $got)"
|
||||
|
||||
# The -n option should only return matching names.
|
||||
# https://github.com/ksh93/ksh/issues/279
|
||||
exp="GETCONF=$bingetconf"
|
||||
got=$(getconf -n GETCONF)
|
||||
[[ $exp == "$got" ]] || err_exit "'getconf -n' doesn't match names correctly" \
|
||||
"(expected $exp, got $got)"
|
||||
|
||||
# ======
|
||||
# Test shell builtin commands
|
||||
: ${foo=bar} || err_exit ": failed"
|
||||
[[ $foo == bar ]] || err_exit ": side effects failed"
|
||||
set -- - foobar
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue