From 9435b928bf82c3ebefce667b512d14845e84b82f Mon Sep 17 00:00:00 2001 From: Dave Chinner Date: Mon, 4 May 2015 16:48:05 +1000 Subject: [PATCH] common: _require_command needs to handle parameters _require_command fails when a parameter based command is passed to it, such as "xfs_io -F" or "btrfs filesystem defrag" as the command string does not point at a binary. Rather than hacking at all the callers and limiting what we can do with $*_PROGS variables, just make _require_command handle this case sanely. Change _require_command to check for one or two variables passed to it and to fail if none or more than 2 parameters are passed. This will catch most cases where unquoted parameter-based commands are passed. Further, for the command variable, the executable we need to check for is always going to be the first token in the variable. Hence we can simply ignore everything after the first token for the purposes of existence and executable checks on the command. Signed-off-by: Dave Chinner Signed-off-by: Dave Chinner --- common/rc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/common/rc b/common/rc index ca8da7f3..6ea107e1 100644 --- a/common/rc +++ b/common/rc @@ -1286,10 +1286,22 @@ _require_realtime() # this test requires that a specified command (executable) exists # $1 - command, $2 - name for error message # +# Note: the command string might have parameters, so strip them before checking +# whether it is executable. _require_command() { - [ -n "$1" ] && _cmd="$1" || _cmd="$2" - [ -n "$1" -a -x "$1" ] || _notrun "$_cmd utility required, skipped this test" + if [ $# -eq 2 ]; then + _name="$2" + elif [ $# -eq 1 ]; then + _name="$1" + else + _fail "usage: _require_command []" + fi + + _command=`echo "$1" | awk '{ print $1 }'` + if [ ! -x $command ]; then + _notrun "$_name utility required, skipped this test" + fi } # this test requires the device to be valid block device -- 2.39.5