02-wedgenames revision 1.3
11.1Smlelstv#!/bin/sh
21.1Smlelstv#
31.3Smlelstv# $NetBSD: 02-wedgenames,v 1.3 2015/03/01 14:21:17 mlelstv Exp $
41.1Smlelstv#
51.1Smlelstv# Try to maintain symlinks to wedge devices
61.1Smlelstv#
71.1Smlelstv
81.1Smlelstvevent="$1"
91.2Sjmcneillshift
101.2Sjmcneilldevices=$@
111.1Smlelstv
121.1Smlelstvwedgedir=/dev/wedges
131.1Smlelstv
141.1Smlelstvremove_wedge() {
151.1Smlelstv	find $wedgedir -print \
161.1Smlelstv	| sed -e 's# #\\ #g' \
171.1Smlelstv	| while read w; do
181.1Smlelstv		t=$(readlink "$w")
191.2Sjmcneill		if [ x"$t" = x"/dev/$1" ]; then
201.1Smlelstv			rm -f "$w"
211.1Smlelstv			basedir=$(dirname "$w")
221.1Smlelstv			rmdir -p "$basedir" 2>/dev/null
231.1Smlelstv		fi
241.1Smlelstv	done
251.1Smlelstv}
261.1Smlelstv
271.1Smlelstvadd_wedge() {
281.2Sjmcneill	n=$(dkctl "$1" getwedgeinfo \
291.1Smlelstv		| sed -ne '1s#^[^:]*: ##p' \
301.1Smlelstv		| awk -v GOOD='._:;!^$&~()[]{}=,+-/' '
311.1Smlelstv		BEGIN {
321.1Smlelstv			for (i=0; i<256; ++i)
331.1Smlelstv				ord[sprintf("%c",i)] = i
341.1Smlelstv		}
351.1Smlelstv		{
361.1Smlelstv			n = length($0)
371.1Smlelstv			o = ""
381.1Smlelstv			for (i=1; i<=n; ++i) {
391.1Smlelstv				c = substr($0,i,1)
401.1Smlelstv				if (c ~ /^[[:alnum:]]$/ || index(GOOD,c) > 0) {
411.1Smlelstv					o = o c
421.1Smlelstv				} else {
431.1Smlelstv					o = o sprintf("%%%02x",ord[c])
441.1Smlelstv				}
451.1Smlelstv			}
461.1Smlelstv			printf "%s",o
471.1Smlelstv		}'
481.1Smlelstv	)
491.1Smlelstv	case $n in
501.1Smlelstv	"") ;;
511.1Smlelstv	*)
521.1Smlelstv		test -d $wedgedir || mkdir -m 755 $wedgedir
531.1Smlelstv		basedir=$(dirname "$wedgedir/$n")
541.1Smlelstv		test -d "$basedir" || mkdir -p -m 755 "$basedir"
551.3Smlelstv		if oldlink=$(readlink "$wedgedir/$n"); then
561.3Smlelstv			if [ x"$oldlink" != "/dev/$1" ]; then
571.3Smlelstv				rm -f "$wedgedir/$n"
581.3Smlelstv				ln -s "/dev/$1" "$wedgedir/$n"
591.3Smlelstv			fi
601.3Smlelstv		else
611.3Smlelstv			ln -s "/dev/$1" "$wedgedir/$n"
621.3Smlelstv		fi
631.1Smlelstv		;;
641.1Smlelstv	esac
651.1Smlelstv}
661.1Smlelstv
671.2Sjmcneillfor device in $devices; do
681.2Sjmcneill	case $device in
691.2Sjmcneill	dk*)
701.2Sjmcneill		case $event in
711.2Sjmcneill		device-attach)
721.2Sjmcneill			remove_wedge $device
731.2Sjmcneill			add_wedge $device
741.2Sjmcneill			;;
751.2Sjmcneill		device-detach)
761.2Sjmcneill			remove_wedge $device
771.2Sjmcneill			;;
781.2Sjmcneill		esac
791.1Smlelstv		;;
801.1Smlelstv	esac
811.2Sjmcneilldone
82