Home | History | Annotate | Line # | Download | only in hooks
02-wedgenames revision 1.1.12.1
      1       1.1  mlelstv #!/bin/sh
      2       1.1  mlelstv #
      3  1.1.12.1   martin # $NetBSD: 02-wedgenames,v 1.1.12.1 2015/02/17 14:45:31 martin 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.12.1   martin shift
     10  1.1.12.1   martin 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.1.12.1   martin 		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.1.12.1   martin 	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.1.12.1   martin 		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.1.12.1   martin for device in $devices; do
     61  1.1.12.1   martin 	case $device in
     62  1.1.12.1   martin 	dk*)
     63  1.1.12.1   martin 		case $event in
     64  1.1.12.1   martin 		device-attach)
     65  1.1.12.1   martin 			remove_wedge $device
     66  1.1.12.1   martin 			add_wedge $device
     67  1.1.12.1   martin 			;;
     68  1.1.12.1   martin 		device-detach)
     69  1.1.12.1   martin 			remove_wedge $device
     70  1.1.12.1   martin 			;;
     71  1.1.12.1   martin 		esac
     72       1.1  mlelstv 		;;
     73       1.1  mlelstv 	esac
     74  1.1.12.1   martin done
     75