02-wedgenames revision 1.1
11.1Smlelstv#!/bin/sh 21.1Smlelstv# 31.1Smlelstv# $NetBSD: 02-wedgenames,v 1.1 2013/01/11 23:49:23 mlelstv Exp $ 41.1Smlelstv# 51.1Smlelstv# Try to maintain symlinks to wedge devices 61.1Smlelstv# 71.1Smlelstv 81.1Smlelstvevent="$1" 91.1Smlelstvdevice="$2" 101.1Smlelstv 111.1Smlelstvwedgedir=/dev/wedges 121.1Smlelstv 131.1Smlelstvremove_wedge() { 141.1Smlelstv find $wedgedir -print \ 151.1Smlelstv | sed -e 's# #\\ #g' \ 161.1Smlelstv | while read w; do 171.1Smlelstv t=$(readlink "$w") 181.1Smlelstv if [ x"$t" = x"/dev/$device" ]; then 191.1Smlelstv rm -f "$w" 201.1Smlelstv basedir=$(dirname "$w") 211.1Smlelstv rmdir -p "$basedir" 2>/dev/null 221.1Smlelstv fi 231.1Smlelstv done 241.1Smlelstv} 251.1Smlelstv 261.1Smlelstvadd_wedge() { 271.1Smlelstv n=$(dkctl "$device" getwedgeinfo \ 281.1Smlelstv | sed -ne '1s#^[^:]*: ##p' \ 291.1Smlelstv | awk -v GOOD='._:;!^$&~()[]{}=,+-/' ' 301.1Smlelstv BEGIN { 311.1Smlelstv for (i=0; i<256; ++i) 321.1Smlelstv ord[sprintf("%c",i)] = i 331.1Smlelstv } 341.1Smlelstv { 351.1Smlelstv n = length($0) 361.1Smlelstv o = "" 371.1Smlelstv for (i=1; i<=n; ++i) { 381.1Smlelstv c = substr($0,i,1) 391.1Smlelstv if (c ~ /^[[:alnum:]]$/ || index(GOOD,c) > 0) { 401.1Smlelstv o = o c 411.1Smlelstv } else { 421.1Smlelstv o = o sprintf("%%%02x",ord[c]) 431.1Smlelstv } 441.1Smlelstv } 451.1Smlelstv printf "%s",o 461.1Smlelstv }' 471.1Smlelstv ) 481.1Smlelstv case $n in 491.1Smlelstv "") ;; 501.1Smlelstv *) 511.1Smlelstv test -d $wedgedir || mkdir -m 755 $wedgedir 521.1Smlelstv basedir=$(dirname "$wedgedir/$n") 531.1Smlelstv test -d "$basedir" || mkdir -p -m 755 "$basedir" 541.1Smlelstv ln -s "/dev/$device" "$wedgedir/$n" 551.1Smlelstv ;; 561.1Smlelstv esac 571.1Smlelstv} 581.1Smlelstv 591.1Smlelstvcase $device in 601.1Smlelstvdk*) 611.1Smlelstv case $event in 621.1Smlelstv device-attach) 631.1Smlelstv remove_wedge 641.1Smlelstv add_wedge 651.1Smlelstv ;; 661.1Smlelstv device-detach) 671.1Smlelstv remove_wedge 681.1Smlelstv ;; 691.1Smlelstv esac 701.1Smlelstv ;; 711.1Smlelstvesac 72