| #!/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} |