1#!/bin/sh 2# 3# $NetBSD: 02-wedgenames,v 1.1 2013/01/11 23:49:23 mlelstv Exp $ 4# 5# Try to maintain symlinks to wedge devices 6# 7 8event="$1" 9device="$2" 10 11wedgedir=/dev/wedges 12 13remove_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 26add_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 59case $device in 60dk*) 61 case $event in 62 device-attach) 63 remove_wedge 64 add_wedge 65 ;; 66 device-detach) 67 remove_wedge 68 ;; 69 esac 70 ;; 71esac 72