68 lines
1.3 KiB
Bash
Executable file
68 lines
1.3 KiB
Bash
Executable file
#!/bin/rc
|
|
# usbfat: [disk [mtpt]] - mount a USB disk's MS FAT file system,
|
|
# which might be the only thing on the disk, or might be
|
|
# a partition within the disk.
|
|
rfork e
|
|
disk = ()
|
|
mtpt = /n/usb
|
|
|
|
test -e /dev/usb || bind -a '#u' /dev || {
|
|
echo no '#u/usb' >[1=2]
|
|
exit nousb
|
|
}
|
|
test -e /dev/usbdctl || mount -a /srv/usb /dev || {
|
|
echo cannot mount /srv/usb >[1=2]
|
|
exit nousbd
|
|
}
|
|
|
|
disks=()
|
|
mtpt=()
|
|
switch ($#*) {
|
|
case 0
|
|
;
|
|
case 1
|
|
disks = $1
|
|
case 2
|
|
disks = $1
|
|
mtpt = $2
|
|
case *
|
|
echo usage: $0 ' [disk [mtpt]]' >[1=2]
|
|
exit usage
|
|
}
|
|
|
|
if(~ `{ls /n/usb >[2]/dev/null | wc -l} 0)
|
|
mount /srv/usb /n/usb >[2]/dev/null
|
|
if (~ $#disks 0){
|
|
disks = /dev/sdU*/data
|
|
if(! test -e $disks(1)){
|
|
echo no usb disks >[1=2]
|
|
exit nodisk
|
|
}
|
|
disks = (/dev/sdU*/9fat /dev/sdXX/9fat /dev/sdU*/data /dev/sdXX/data)
|
|
}
|
|
for(d in $disks){
|
|
if(! ~ $done yes) {
|
|
if(~ $d sdU*.[0-9]* sdXX*)
|
|
d=/dev/$d/data
|
|
if(test -e $d){
|
|
name=`{echo $d | sed 's/.*(sd(XX|U[0-9]+\.[0-9]+)).*/\1/'}
|
|
if(~ $#mtpt 0)
|
|
mnt=/n/$name
|
|
if not
|
|
mnt=$mtpt
|
|
# don't mount it if it seems to be already mounted.
|
|
# if(! test -e $mnt/* && grep -s geometry /dev/$name/ctl)
|
|
{
|
|
blk = `{disk/fdisk -p $d |
|
|
awk '/^part dos / {print $3}'}
|
|
if (! ~ $#blk 0 && ~ $blk [0-9]*)
|
|
d=$d:$blk
|
|
if (mount -c <{dossrv -sf $d >[2]/dev/null} $mnt) {
|
|
echo $mnt
|
|
done = yes
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
exit ''
|