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