summaryrefslogtreecommitdiff
path: root/src/lib/libremessages
diff options
context:
space:
mode:
authorLuke Shumaker <LukeShu@sbcglobal.net>2014-03-05 10:57:57 -0500
committerLuke Shumaker <LukeShu@sbcglobal.net>2014-03-05 10:57:57 -0500
commit74f68d0149f2a94780c860b0775d1e880dbe9225 (patch)
treec6259aed18700a634666f12569d7b05080e6ec8f /src/lib/libremessages
parent64b427c2449eb45ec945afd09cced57c8a7d7e4e (diff)
teach libremessages:setup_traps to be able to use a custom signal handler
Diffstat (limited to 'src/lib/libremessages')
-rwxr-xr-xsrc/lib/libremessages31
1 files changed, 22 insertions, 9 deletions
diff --git a/src/lib/libremessages b/src/lib/libremessages
index e5b7157..162c8fb 100755
--- a/src/lib/libremessages
+++ b/src/lib/libremessages
@@ -117,17 +117,30 @@ term_title() {
printf "$fmt" "$*"
}
-# Usage: setup_traps
+# Usage: setup_traps [handler]
# Sets up traps on TERM, HUP, QUIT and INT signals, as well as the ERR event,
-# similar to makepkg
+# similar to makepkg.
+#
+# If `handler` is specified, instead of using the default handler
+# (which is good for most purposes), it will call the command handler
+# with the arguments:
+#
+# ${handler} SIGNAL_NAME MESSAGE_FMT [MESSAGE_PARAMS...]
+#
+# where MESSAGE_* are printf-like stuff.
setup_traps() {
- _libremessages_trap_exit() {
- local signal=$1; shift
- echo
- error "$@"
- trap -- "$signal"
- kill "-$signal" "$$"
- }
+ [[ $# -le 1 ]] || panic
+ if [[ $# == 1 ]]; then
+ eval "_libremessages_trap_exit() { $1 \"\$@\"; }"
+ else
+ _libremessages_trap_exit() {
+ local signal=$1; shift
+ echo
+ error "$@"
+ trap -- "$signal"
+ kill "-$signal" "$$"
+ }
+ fi
set -E
for signal in TERM HUP QUIT; do
trap "_libremessages_trap_exit $signal '%s signal caught. Exiting...' $signal" $signal