common/rc: Add tests for character devices

Implement _is_char_dev similar to _is_block_dev to test for
character devices.

Add a _require_local_device test. This test is similar to
_require_block_device but checks if the path refers to a
block or a character device.

Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Reviewed-by: Eryu Guan <eguan@redhat.com>
Signed-off-by: Eryu Guan <eguan@redhat.com>
This commit is contained in:
David Oberhollenzer
2017-06-07 10:20:44 +02:00
committed by Eryu Guan
parent ff1f614f33
commit d4c9003b52
+36
View File
@@ -1364,6 +1364,25 @@ _is_block_dev()
fi fi
} }
# returns device number if a file is a character device
#
_is_char_dev()
{
if [ $# -ne 1 ]; then
echo "Usage: _is_char_dev dev" 1>&2
exit 1
fi
_dev=$1
if [ -L "${_dev}" ]; then
_dev=`readlink -f "${_dev}"`
fi
if [ -c "${_dev}" ]; then
src/lstat64 "${_dev}" | $AWK_PROG '/Device type:/ { print $9 }'
fi
}
# Do a command, log it to $seqres.full, optionally test return status # Do a command, log it to $seqres.full, optionally test return status
# and die if command fails. If called with one argument _do executes the # and die if command fails. If called with one argument _do executes the
# command, logs it, and returns its exit status. With two arguments _do # command, logs it, and returns its exit status. With two arguments _do
@@ -1792,6 +1811,23 @@ _require_block_device()
fi fi
} }
# this test requires a path to refere to a local block or character device
# $1 - device
_require_local_device()
{
if [ -z "$1" ]; then
echo "Usage: _require_local_device <dev>" 1>&2
exit 1
fi
if [ "`_is_block_dev "$1"`" != "" ]; then
return 0
fi
if [ "`_is_char_dev "$1"`" != "" ]; then
return 0
fi
_notrun "require $1 to be local device"
}
# brd based ram disks erase the device when they receive a flush command when no # brd based ram disks erase the device when they receive a flush command when no
# active references are present. This causes problems for DM devices sitting on # active references are present. This causes problems for DM devices sitting on
# top of brd devices as DM doesn't hold active references to the brd device. # top of brd devices as DM doesn't hold active references to the brd device.