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