02-wedgenames revision 1.3
11.1Smlelstv#!/bin/sh 21.1Smlelstv# 31.3Smlelstv# $NetBSD: 02-wedgenames,v 1.3 2015/03/01 14:21:17 mlelstv Exp $ 41.1Smlelstv# 51.1Smlelstv# Try to maintain symlinks to wedge devices 61.1Smlelstv# 71.1Smlelstv 81.1Smlelstvevent="$1" 91.2Sjmcneillshift 101.2Sjmcneilldevices=$@ 111.1Smlelstv 121.1Smlelstvwedgedir=/dev/wedges 131.1Smlelstv 141.1Smlelstvremove_wedge() { 151.1Smlelstv find $wedgedir -print \ 161.1Smlelstv | sed -e 's# #\\ #g' \ 171.1Smlelstv | while read w; do 181.1Smlelstv t=$(readlink "$w") 191.2Sjmcneill if [ x"$t" = x"/dev/$1" ]; then 201.1Smlelstv rm -f "$w" 211.1Smlelstv basedir=$(dirname "$w") 221.1Smlelstv rmdir -p "$basedir" 2>/dev/null 231.1Smlelstv fi 241.1Smlelstv done 251.1Smlelstv} 261.1Smlelstv 271.1Smlelstvadd_wedge() { 281.2Sjmcneill n=$(dkctl "$1" getwedgeinfo \ 291.1Smlelstv | sed -ne '1s#^[^:]*: ##p' \ 301.1Smlelstv | awk -v GOOD='._:;!^$&~()[]{}=,+-/' ' 311.1Smlelstv BEGIN { 321.1Smlelstv for (i=0; i<256; ++i) 331.1Smlelstv ord[sprintf("%c",i)] = i 341.1Smlelstv } 351.1Smlelstv { 361.1Smlelstv n = length($0) 371.1Smlelstv o = "" 381.1Smlelstv for (i=1; i<=n; ++i) { 391.1Smlelstv c = substr($0,i,1) 401.1Smlelstv if (c ~ /^[[:alnum:]]$/ || index(GOOD,c) > 0) { 411.1Smlelstv o = o c 421.1Smlelstv } else { 431.1Smlelstv o = o sprintf("%%%02x",ord[c]) 441.1Smlelstv } 451.1Smlelstv } 461.1Smlelstv printf "%s",o 471.1Smlelstv }' 481.1Smlelstv ) 491.1Smlelstv case $n in 501.1Smlelstv "") ;; 511.1Smlelstv *) 521.1Smlelstv test -d $wedgedir || mkdir -m 755 $wedgedir 531.1Smlelstv basedir=$(dirname "$wedgedir/$n") 541.1Smlelstv test -d "$basedir" || mkdir -p -m 755 "$basedir" 551.3Smlelstv if oldlink=$(readlink "$wedgedir/$n"); then 561.3Smlelstv if [ x"$oldlink" != "/dev/$1" ]; then 571.3Smlelstv rm -f "$wedgedir/$n" 581.3Smlelstv ln -s "/dev/$1" "$wedgedir/$n" 591.3Smlelstv fi 601.3Smlelstv else 611.3Smlelstv ln -s "/dev/$1" "$wedgedir/$n" 621.3Smlelstv fi 631.1Smlelstv ;; 641.1Smlelstv esac 651.1Smlelstv} 661.1Smlelstv 671.2Sjmcneillfor device in $devices; do 681.2Sjmcneill case $device in 691.2Sjmcneill dk*) 701.2Sjmcneill case $event in 711.2Sjmcneill device-attach) 721.2Sjmcneill remove_wedge $device 731.2Sjmcneill add_wedge $device 741.2Sjmcneill ;; 751.2Sjmcneill device-detach) 761.2Sjmcneill remove_wedge $device 771.2Sjmcneill ;; 781.2Sjmcneill esac 791.1Smlelstv ;; 801.1Smlelstv esac 811.2Sjmcneilldone 82