1#!/bin/sh 2# 3# $NetBSD: 02-wedgenames,v 1.4 2016/08/15 12:54:40 mlelstv Exp $ 4# 5# Try to maintain symlinks to wedge devices 6# 7 8event="$1" 9shift 10devices=$@ 11 12wedgedir=/dev/wedges 13 14remove_wedge() { 15 test -d $wedgedir && 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 27add_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 if oldlink=$(readlink "$wedgedir/$n"); then 56 if [ x"$oldlink" != "/dev/$1" ]; then 57 rm -f "$wedgedir/$n" 58 ln -s "/dev/$1" "$wedgedir/$n" 59 fi 60 else 61 ln -s "/dev/$1" "$wedgedir/$n" 62 fi 63 ;; 64 esac 65} 66 67for device in $devices; do 68 case $device in 69 dk*) 70 case $event in 71 device-attach) 72 remove_wedge $device 73 add_wedge $device 74 ;; 75 device-detach) 76 remove_wedge $device 77 ;; 78 esac 79 ;; 80 esac 81done 82