summaryrefslogtreecommitdiffstats
path: root/utils/gpsd/files/usr/sbin/gpsd-wrapper
blob: 2c492c02c9cdd5d3490f48c9af2a52685571b956 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/sh

SOCKET="/var/run/gpsd.sock"

trap_with_arg() {
	func="$1" ; shift
	for sig; do
		# shellcheck disable=SC2064
		trap "$func $sig" "$sig"
	done
}

func_trap() {
	logger -t "gpsd-wrapper[$$]" "Sending signal ${1}..."
	kill "-${1}" "$CHILD" 2>/dev/null
}

wait_for_socket_and_hotplug() {
	local count=0
	while [ $count -lt 15 ]; do
		[ -S "$SOCKET" ] && break
		sleep 1
		count=$((count + 1))
	done

	if [ -S "$SOCKET" ]; then
		logger -t "gpsd-wrapper[$$]" "Socket ready, sending hotplug call"
		env -i ACTION="STARTED" /sbin/hotplug-call gpsd
	else
		logger -t "gpsd-wrapper[$$]" \
			"Socket $SOCKET not ready after ${count}s, hotplug skipped"
	fi
}

main() {
	trap_with_arg func_trap INT TERM KILL

	/usr/sbin/gpsd "$@" &
	CHILD="$!"

	wait_for_socket_and_hotplug

	wait "$CHILD"
}

main "$@"