1 1.1 mlelstv #!/bin/sh 2 1.1 mlelstv # 3 1.3 mlelstv # $NetBSD: 02-wedgenames,v 1.3 2015/03/01 14:21:17 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.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.3 mlelstv if oldlink=$(readlink "$wedgedir/$n"); then 56 1.3 mlelstv if [ x"$oldlink" != "/dev/$1" ]; then 57 1.3 mlelstv rm -f "$wedgedir/$n" 58 1.3 mlelstv ln -s "/dev/$1" "$wedgedir/$n" 59 1.3 mlelstv fi 60 1.3 mlelstv else 61 1.3 mlelstv ln -s "/dev/$1" "$wedgedir/$n" 62 1.3 mlelstv fi 63 1.1 mlelstv ;; 64 1.1 mlelstv esac 65 1.1 mlelstv } 66 1.1 mlelstv 67 1.2 jmcneill for device in $devices; do 68 1.2 jmcneill case $device in 69 1.2 jmcneill dk*) 70 1.2 jmcneill case $event in 71 1.2 jmcneill device-attach) 72 1.2 jmcneill remove_wedge $device 73 1.2 jmcneill add_wedge $device 74 1.2 jmcneill ;; 75 1.2 jmcneill device-detach) 76 1.2 jmcneill remove_wedge $device 77 1.2 jmcneill ;; 78 1.2 jmcneill esac 79 1.1 mlelstv ;; 80 1.1 mlelstv esac 81 1.2 jmcneill done 82