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