xref: /plan9/rc/bin/usbfat: (revision c8a340cd3a4d961f476a4f4f2d047cd5eedaced7)
1#!/bin/rc
2# usbfat: [disk [mtpt]] - mount a USB disk's MS FAT file system,
3#	which might be the only thing on the disk, or might be
4#	a partition within the disk.
5rfork e
6disk = ()
7mtpt = /n/usb
8
9test -e /dev/usb || bind -a '#u' /dev || {
10	echo no '#u/usb' >[1=2]
11	exit nousb
12}
13test -e /dev/usbdctl || mount -a /srv/usb /dev || {
14	echo cannot mount /srv/usb >[1=2]
15	exit nousbd
16}
17
18disks=()
19mtpt=()
20switch ($#*) {
21case 0
22	;
23case 1
24	disks = $1
25case 2
26	disks = $1
27	mtpt = $2
28case *
29	echo usage: $0 ' [disk [mtpt]]' >[1=2]
30	exit usage
31}
32
33if(~ `{ls /n/usb >[2]/dev/null | wc -l} 0)
34	mount /srv/usb /n/usb >[2]/dev/null
35if (~ $#disks 0){
36	disks = /dev/sdU*/data
37	if(! test -e $disks(1)){
38		echo no usb disks >[1=2]
39		exit nodisk
40	}
41	disks = (/dev/sdU*/9fat /dev/sdXX/9fat /dev/sdU*/data /dev/sdXX/data)
42}
43for(d in $disks){
44	if(! ~ $done yes) {
45		if(~ $d sdU*.[0-9]* sdXX*)
46			d=/dev/$d/data
47		if(test -e $d){
48			name=`{echo $d | sed 's/.*(sd(XX|U[0-9]+\.[0-9]+)).*/\1/'}
49			if(~ $#mtpt 0)
50				mnt=/n/$name
51			if not
52				mnt=$mtpt
53			# don't mount it if it seems to be already mounted.
54			# if(! test -e $mnt/* && grep -s geometry /dev/$name/ctl)
55			{
56				blk = `{disk/fdisk -p $d |
57					awk '/^part dos / {print $3}'}
58				if (! ~ $#blk 0 &&  ~ $blk [0-9]*)
59					d=$d:$blk
60				if (mount -c <{dossrv -sf $d >[2]/dev/null} $mnt) {
61					echo $mnt
62					done = yes
63				}
64			}
65		}
66	}
67}
68exit ''
69