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