37 lines
929 B
Plaintext
37 lines
929 B
Plaintext
|
#!/bin/sh
|
||
|
|
||
|
# We're called with the real Kodi executable as
|
||
|
# first argument, followed by any Kodi extra args
|
||
|
KODI="${1}"
|
||
|
shift
|
||
|
|
||
|
# In case someone asked we terminate, just kill
|
||
|
# the Kodi process
|
||
|
trap_kill() {
|
||
|
LOOP=0
|
||
|
killall "${KODI##*/}"
|
||
|
}
|
||
|
trap trap_kill INT QUIT TERM
|
||
|
|
||
|
LOOP=1
|
||
|
while [ ${LOOP} -eq 1 ]; do
|
||
|
# Hack: BusyBox ash does not catch signals while a non-builtin
|
||
|
# is running, and only catches the signal when the non-builtin
|
||
|
# command ends. So, we just background the Kodi binary, and wait
|
||
|
# for it. But BusyBox' ash's wait builtin does not return the
|
||
|
# exit code even if there was only one job (which is correct
|
||
|
# for POSIX). So we explicitly wait for the Kodi job
|
||
|
"${KODI}" "${@}" &
|
||
|
wait %1
|
||
|
ret=$?
|
||
|
case "${ret}" in
|
||
|
0) ;;
|
||
|
64) poweroff; LOOP=0;;
|
||
|
66) reboot; LOOP=0;;
|
||
|
*) # Crash
|
||
|
sleep 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
exit ${ret}
|