37 lines
925 B
Plaintext
37 lines
925 B
Plaintext
|
#!/bin/sh
|
||
|
|
||
|
# We're called with the real XBMC executable as
|
||
|
# first argument, followed by any XBMC extra args
|
||
|
XBMC="${1}"
|
||
|
shift
|
||
|
|
||
|
# In case someone asked we terminate, just kill
|
||
|
# the XBMC process
|
||
|
trap_kill() {
|
||
|
LOOP=0
|
||
|
killall "${XBMC##*/}"
|
||
|
}
|
||
|
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 XBMC 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 XBMC job
|
||
|
"${XBMC}" "${@}" &
|
||
|
wait %1
|
||
|
ret=$?
|
||
|
case "${ret}" in
|
||
|
0) ;;
|
||
|
64) halt; LOOP=0;;
|
||
|
66) reboot; LOOP=0;;
|
||
|
*) # Crash
|
||
|
sleep 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
exit ${ret}
|