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