02-wedgenames revision 1.1
11.1Smlelstv#!/bin/sh
21.1Smlelstv#
31.1Smlelstv# $NetBSD: 02-wedgenames,v 1.1 2013/01/11 23:49:23 mlelstv Exp $
41.1Smlelstv#
51.1Smlelstv# Try to maintain symlinks to wedge devices
61.1Smlelstv#
71.1Smlelstv
81.1Smlelstvevent="$1"
91.1Smlelstvdevice="$2"
101.1Smlelstv
111.1Smlelstvwedgedir=/dev/wedges
121.1Smlelstv
131.1Smlelstvremove_wedge() {
141.1Smlelstv	find $wedgedir -print \
151.1Smlelstv	| sed -e 's# #\\ #g' \
161.1Smlelstv	| while read w; do
171.1Smlelstv		t=$(readlink "$w")
181.1Smlelstv		if [ x"$t" = x"/dev/$device" ]; then
191.1Smlelstv			rm -f "$w"
201.1Smlelstv			basedir=$(dirname "$w")
211.1Smlelstv			rmdir -p "$basedir" 2>/dev/null
221.1Smlelstv		fi
231.1Smlelstv	done
241.1Smlelstv}
251.1Smlelstv
261.1Smlelstvadd_wedge() {
271.1Smlelstv	n=$(dkctl "$device" getwedgeinfo \
281.1Smlelstv		| sed -ne '1s#^[^:]*: ##p' \
291.1Smlelstv		| awk -v GOOD='._:;!^$&~()[]{}=,+-/' '
301.1Smlelstv		BEGIN {
311.1Smlelstv			for (i=0; i<256; ++i)
321.1Smlelstv				ord[sprintf("%c",i)] = i
331.1Smlelstv		}
341.1Smlelstv		{
351.1Smlelstv			n = length($0)
361.1Smlelstv			o = ""
371.1Smlelstv			for (i=1; i<=n; ++i) {
381.1Smlelstv				c = substr($0,i,1)
391.1Smlelstv				if (c ~ /^[[:alnum:]]$/ || index(GOOD,c) > 0) {
401.1Smlelstv					o = o c
411.1Smlelstv				} else {
421.1Smlelstv					o = o sprintf("%%%02x",ord[c])
431.1Smlelstv				}
441.1Smlelstv			}
451.1Smlelstv			printf "%s",o
461.1Smlelstv		}'
471.1Smlelstv	)
481.1Smlelstv	case $n in
491.1Smlelstv	"") ;;
501.1Smlelstv	*)
511.1Smlelstv		test -d $wedgedir || mkdir -m 755 $wedgedir
521.1Smlelstv		basedir=$(dirname "$wedgedir/$n")
531.1Smlelstv		test -d "$basedir" || mkdir -p -m 755 "$basedir"
541.1Smlelstv		ln -s "/dev/$device" "$wedgedir/$n"
551.1Smlelstv		;;
561.1Smlelstv	esac
571.1Smlelstv}
581.1Smlelstv
591.1Smlelstvcase $device in
601.1Smlelstvdk*)
611.1Smlelstv	case $event in
621.1Smlelstv	device-attach)
631.1Smlelstv		remove_wedge
641.1Smlelstv		add_wedge
651.1Smlelstv		;;
661.1Smlelstv	device-detach)
671.1Smlelstv		remove_wedge
681.1Smlelstv		;;
691.1Smlelstv	esac
701.1Smlelstv	;;
711.1Smlelstvesac
72