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