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