Home | History | Annotate | Line # | Download | only in hooks
02-wedgenames revision 1.3
      1  1.1   mlelstv #!/bin/sh
      2  1.1   mlelstv #
      3  1.3   mlelstv # $NetBSD: 02-wedgenames,v 1.3 2015/03/01 14:21:17 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.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.3   mlelstv 		if oldlink=$(readlink "$wedgedir/$n"); then
     56  1.3   mlelstv 			if [ x"$oldlink" != "/dev/$1" ]; then
     57  1.3   mlelstv 				rm -f "$wedgedir/$n"
     58  1.3   mlelstv 				ln -s "/dev/$1" "$wedgedir/$n"
     59  1.3   mlelstv 			fi
     60  1.3   mlelstv 		else
     61  1.3   mlelstv 			ln -s "/dev/$1" "$wedgedir/$n"
     62  1.3   mlelstv 		fi
     63  1.1   mlelstv 		;;
     64  1.1   mlelstv 	esac
     65  1.1   mlelstv }
     66  1.1   mlelstv 
     67  1.2  jmcneill for device in $devices; do
     68  1.2  jmcneill 	case $device in
     69  1.2  jmcneill 	dk*)
     70  1.2  jmcneill 		case $event in
     71  1.2  jmcneill 		device-attach)
     72  1.2  jmcneill 			remove_wedge $device
     73  1.2  jmcneill 			add_wedge $device
     74  1.2  jmcneill 			;;
     75  1.2  jmcneill 		device-detach)
     76  1.2  jmcneill 			remove_wedge $device
     77  1.2  jmcneill 			;;
     78  1.2  jmcneill 		esac
     79  1.1   mlelstv 		;;
     80  1.1   mlelstv 	esac
     81  1.2  jmcneill done
     82