02-wedgenames revision 1.6
11.1Smlelstv#!/bin/sh 21.1Smlelstv# 31.6Smlelstv# $NetBSD: 02-wedgenames,v 1.6 2021/01/09 16:25:19 mlelstv Exp $ 41.1Smlelstv# 51.1Smlelstv# Try to maintain symlinks to wedge devices 61.1Smlelstv# 71.1Smlelstv 81.5Smlelstvexport LC_ALL=C 91.5Smlelstv 101.1Smlelstvevent="$1" 111.2Sjmcneillshift 121.2Sjmcneilldevices=$@ 131.1Smlelstv 141.1Smlelstvwedgedir=/dev/wedges 151.1Smlelstv 161.5Smlelstvrecurse() 171.5Smlelstv{ 181.5Smlelstv test -d "$1" && ls -1af "$1" \ 191.5Smlelstv | while read n; do 201.5Smlelstv case $n in 211.5Smlelstv .|..) ;; 221.5Smlelstv *) 231.5Smlelstv echo "$1/$n" 241.5Smlelstv if [ -L "$1/$n" ]; then 251.5Smlelstv : #nothing 261.5Smlelstv elif [ -d "$1/$n" ]; then 271.5Smlelstv recurse "$1/$n" 281.5Smlelstv fi 291.5Smlelstv ;; 301.5Smlelstv esac 311.5Smlelstv done 321.5Smlelstv} 331.5Smlelstv 341.5Smlelstvsimple_readlink() 351.5Smlelstv{ 361.5Smlelstv local x 371.5Smlelstv 381.5Smlelstv x=$(test -e "$1" && ls -ld "$1") 391.5Smlelstv case $x in 401.5Smlelstv *'-> '*) echo ${x#*-> };; 411.5Smlelstv esac 421.5Smlelstv} 431.5Smlelstv 441.5Smlelstvordtable=$( 451.5Smlelstv for n1 in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do 461.5Smlelstv for n2 in 0 1 2 3 4 5 6 7 8 9 a b c d e f; do 471.5Smlelstv echo "\$'\x$n1$n2') x=$n1$n2;;" 481.5Smlelstv done 491.5Smlelstv done 501.5Smlelstv) 511.5Smlelstv 521.5Smlelstvord() 531.5Smlelstv{ 541.5Smlelstv local x 551.5Smlelstv eval "case \$1 in $ordtable esac" 561.5Smlelstv echo -n $x 571.5Smlelstv} 581.5Smlelstv 591.5Smlelstvencode() 601.5Smlelstv{ 611.5Smlelstv local a 621.5Smlelstv 631.5Smlelstv a=$1 641.5Smlelstv while [ -n "$a" ]; do 651.5Smlelstv c="${a%"${a#?}"}" 661.5Smlelstv a=${a#?} 671.5Smlelstv case $c in 681.5Smlelstv [[:alnum:]._:\;!^$\&~\(\)[\]{}=,+\-/]) 691.5Smlelstv ;; 701.5Smlelstv *) 711.5Smlelstv c='%%'$(ord "$c") 721.5Smlelstv ;; 731.5Smlelstv esac 741.5Smlelstv echo -n "$c" 751.5Smlelstv done 761.5Smlelstv} 771.5Smlelstv 781.1Smlelstvremove_wedge() { 791.5Smlelstv recurse "$wedgedir" \ 801.1Smlelstv | while read w; do 811.5Smlelstv t=$(simple_readlink "$w") 821.2Sjmcneill if [ x"$t" = x"/dev/$1" ]; then 831.1Smlelstv rm -f "$w" 841.6Smlelstv basedir=${w%/*} 851.1Smlelstv rmdir -p "$basedir" 2>/dev/null 861.1Smlelstv fi 871.1Smlelstv done 881.1Smlelstv} 891.1Smlelstv 901.1Smlelstvadd_wedge() { 911.5Smlelstv dkctl "$1" getwedgeinfo \ 921.5Smlelstv | while read l; do 931.5Smlelstv case $l in 941.5Smlelstv *': '*) 951.5Smlelstv n="${l#*: }" 961.5Smlelstv n=$(encode "$n") 971.5Smlelstv test -d $wedgedir || mkdir -m 755 $wedgedir 981.6Smlelstv basedir="$wedgedir/$n" 991.6Smlelstv basedir=${basedir%/*} 1001.5Smlelstv test -d "$basedir" || mkdir -p -m 755 "$basedir" 1011.5Smlelstv if oldlink=$(simple_readlink "$wedgedir/$n"); then 1021.5Smlelstv if [ x"$oldlink" != x"/dev/$1" ]; then 1031.5Smlelstv rm -f "$wedgedir/$n" 1041.5Smlelstv ln -s "/dev/$1" "$wedgedir/$n" 1051.5Smlelstv fi 1061.5Smlelstv else 1071.3Smlelstv ln -s "/dev/$1" "$wedgedir/$n" 1081.3Smlelstv fi 1091.5Smlelstv ;; 1101.5Smlelstv esac 1111.5Smlelstv break 1121.5Smlelstv done 1131.1Smlelstv} 1141.1Smlelstv 1151.2Sjmcneillfor device in $devices; do 1161.2Sjmcneill case $device in 1171.2Sjmcneill dk*) 1181.2Sjmcneill case $event in 1191.2Sjmcneill device-attach) 1201.2Sjmcneill remove_wedge $device 1211.2Sjmcneill add_wedge $device 1221.2Sjmcneill ;; 1231.2Sjmcneill device-detach) 1241.2Sjmcneill remove_wedge $device 1251.2Sjmcneill ;; 1261.2Sjmcneill esac 1271.1Smlelstv ;; 1281.1Smlelstv esac 1291.2Sjmcneilldone 130