xref: /netbsd-src/sbin/devpubd/hooks/02-wedgenames (revision 413d532bcc3f62d122e56d92e13ac64825a40baf)
1#!/bin/sh
2#
3# $NetBSD: 02-wedgenames,v 1.1 2013/01/11 23:49:23 mlelstv Exp $
4#
5# Try to maintain symlinks to wedge devices
6#
7
8event="$1"
9device="$2"
10
11wedgedir=/dev/wedges
12
13remove_wedge() {
14	find $wedgedir -print \
15	| sed -e 's# #\\ #g' \
16	| while read w; do
17		t=$(readlink "$w")
18		if [ x"$t" = x"/dev/$device" ]; then
19			rm -f "$w"
20			basedir=$(dirname "$w")
21			rmdir -p "$basedir" 2>/dev/null
22		fi
23	done
24}
25
26add_wedge() {
27	n=$(dkctl "$device" getwedgeinfo \
28		| sed -ne '1s#^[^:]*: ##p' \
29		| awk -v GOOD='._:;!^$&~()[]{}=,+-/' '
30		BEGIN {
31			for (i=0; i<256; ++i)
32				ord[sprintf("%c",i)] = i
33		}
34		{
35			n = length($0)
36			o = ""
37			for (i=1; i<=n; ++i) {
38				c = substr($0,i,1)
39				if (c ~ /^[[:alnum:]]$/ || index(GOOD,c) > 0) {
40					o = o c
41				} else {
42					o = o sprintf("%%%02x",ord[c])
43				}
44			}
45			printf "%s",o
46		}'
47	)
48	case $n in
49	"") ;;
50	*)
51		test -d $wedgedir || mkdir -m 755 $wedgedir
52		basedir=$(dirname "$wedgedir/$n")
53		test -d "$basedir" || mkdir -p -m 755 "$basedir"
54		ln -s "/dev/$device" "$wedgedir/$n"
55		;;
56	esac
57}
58
59case $device in
60dk*)
61	case $event in
62	device-attach)
63		remove_wedge
64		add_wedge
65		;;
66	device-detach)
67		remove_wedge
68		;;
69	esac
70	;;
71esac
72