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