|  | #!/usr/local/plan9/bin/rc | 
|  |  | 
|  | # the venti configuration is stored at the 248kB offset in the first index | 
|  | # partition and extends for at most 8 kB. | 
|  |  | 
|  | rfork e | 
|  | fn usage { | 
|  | echo 'usage: venti/conf [-w] /dev/sdC0/v.arenas' >[1=2] | 
|  | exit usage | 
|  | } | 
|  |  | 
|  | wflag=no | 
|  | while(! ~ $#* 0 && ~ $1 -* && ! ~ $1 --){ | 
|  | switch($1){ | 
|  | case -w | 
|  | wflag=yes | 
|  | case * | 
|  | usage | 
|  | } | 
|  | shift | 
|  | } | 
|  | if(~ $1 --) | 
|  | shift | 
|  |  | 
|  | if(~ $wflag no && ! ~ $#* 1) | 
|  | usage | 
|  | if(~ $wflag yes && ! ~ $#* 1 2) | 
|  | usage | 
|  |  | 
|  | disk=$1 | 
|  | if(! 9 test -f $disk){ | 
|  | echo 'unknown disk' $1 >[1=2] | 
|  | exit nodisk | 
|  | } | 
|  |  | 
|  | fn sigexit { | 
|  | #rm -f /tmp/venticonf.$pid | 
|  | } | 
|  |  | 
|  | if(~ $wflag yes){ | 
|  | {echo venti config; cat $2} >/tmp/venticonf.$pid || exit oops | 
|  | if(! 9 test -s /tmp/venticonf.$pid){ | 
|  | echo 'config is empty; will not install' >[1=2] | 
|  | exit emptyconfig | 
|  | } | 
|  | if(9 test `{9 ls -l /tmp/venticonf.$pid | awk '{print $6}'} -gt 8192){ | 
|  | echo 'config is too long; max is a little less than eight kilobytes' >[1=2] | 
|  | exit toolong | 
|  | } | 
|  | 9 dd -quiet 1 -bs 1024 -count 8 -if $disk -iseek 248 \ | 
|  | >/tmp/_venticonf.old || exit backup | 
|  | 9 dd -quiet 1 -count 2 </dev/zero >> /tmp/venticonf.$pid || exit dd | 
|  | 9 dd -quiet 1 -bs 1024 -count 8 -if /tmp/venticonf.$pid \ | 
|  | -of $disk -trunc 0 -oseek 248 || exit dd2 | 
|  | exit 0 | 
|  | } | 
|  |  | 
|  | 9 dd -quiet 1 -bs 1024 -count 8 -if $disk -iseek 248 | | 
|  | zerotrunc >/tmp/venticonf.$pid | 
|  |  | 
|  | if(! cmp <{sed 1q /tmp/venticonf.$pid} <{echo venti config}){ | 
|  | echo 'config has bad header' >[1=2] | 
|  | exit badconfig | 
|  | } | 
|  |  | 
|  | sed 1d /tmp/venticonf.$pid | 
|  | exit '' |