02-wedgenames revision 1.5
11.1Smlelstv#!/bin/sh 21.1Smlelstv# 31.5Smlelstv# $NetBSD: 02-wedgenames,v 1.5 2021/01/09 14:00:05 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.1Smlelstv basedir=$(dirname "$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.5Smlelstv basedir=$(dirname "$wedgedir/$n") 991.5Smlelstv test -d "$basedir" || mkdir -p -m 755 "$basedir" 1001.5Smlelstv if oldlink=$(simple_readlink "$wedgedir/$n"); then 1011.5Smlelstv if [ x"$oldlink" != x"/dev/$1" ]; then 1021.5Smlelstv rm -f "$wedgedir/$n" 1031.5Smlelstv ln -s "/dev/$1" "$wedgedir/$n" 1041.5Smlelstv fi 1051.5Smlelstv else 1061.3Smlelstv ln -s "/dev/$1" "$wedgedir/$n" 1071.3Smlelstv fi 1081.5Smlelstv ;; 1091.5Smlelstv esac 1101.5Smlelstv break 1111.5Smlelstv done 1121.1Smlelstv} 1131.1Smlelstv 1141.2Sjmcneillfor device in $devices; do 1151.2Sjmcneill case $device in 1161.2Sjmcneill dk*) 1171.2Sjmcneill case $event in 1181.2Sjmcneill device-attach) 1191.2Sjmcneill remove_wedge $device 1201.2Sjmcneill add_wedge $device 1211.2Sjmcneill ;; 1221.2Sjmcneill device-detach) 1231.2Sjmcneill remove_wedge $device 1241.2Sjmcneill ;; 1251.2Sjmcneill esac 1261.1Smlelstv ;; 1271.1Smlelstv esac 1281.2Sjmcneilldone 129