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