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