osi-tools/lib/osi.sh

74 lines
1.4 KiB
Bash

#!/hint/bash
# Copyright (C) 2018 Luke Shumaker
# Copyright (C) 2023 Umorpha Systems
# SPDX-License-Identifier: AGPL-3.0-or-later
# shellcheck disable=SC2034
readonly EXIT_SUCCESS=0
readonly EXIT_FAILURE=1
readonly EXIT_INVALIDARGUMENT=2
readonly EXIT_NOTIMPLEMENTED=3
readonly EXIT_NOPERMISSION=4
readonly EXIT_NOTINSTALLED=5
readonly EXIT_NOTCONFIGURED=6
readonly EXIT_NOTRUNNING=7
# `gprintf` is the same as `printf`, but feeds the format string
# through `gettext`. This is pretty much just a kludge to silence
# spurious SC2059 complaints without disabling it entirely or leaving
# "shellcheck disable=" comments everywhere.
gprintf() {
if [[ "$1" == '-v' ]]; then
set -- "$1" "$2" "$(gettext -- "$3")" "${@:4}"
else
set -- "$(gettext -- "$1")" "${@:2}"
fi
# shellcheck disable=SC2059
printf "$@"
}
print() {
# shellcheck disable=SC2059
printf "$(gettext -- "$1")\\n" "${@:2}"
}
error() {
local msg
gprintf -v msg "${@:2}"
printf '%s: %s\n' "${0##*/}" "$msg" >&2
if (( $1 != 0 )); then
exit "$1"
fi
}
in_array() {
local needle=$1
local straw
for straw in "${@:2}"; do
if [[ $needle = "$straw" ]]; then
return 0
fi
done
return 1
}
is_sudo() {
(( UID == 0 && ${SUDO_UID:-0} != 0 ))
}
is_root() {
(( UID == 0 ))
}
needs_sudo() {
if ! is_sudo; then
error $EXIT_NOPERMISSION "Must be invoked through sudo."
fi
}
needs_root() {
if ! is_root; then
error $EXIT_NOPERMISSION "Must be invoked as root."
fi
}