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