git: 9front

Download patch

ref: f501fc5144ba671a03d34736491c69cde903ff86
parent: b60469af10a408349cc8c734bd6e20d1126e186a
author: cinap_lenrek <cinap_lenrek@centraldogma>
date: Mon Aug 15 21:50:46 EDT 2011

usb storage device auto mount

--- a/rc/bin/diskparts
+++ b/rc/bin/diskparts
@@ -1,35 +1,42 @@
 #!/bin/rc
 rfork e
 
-# set up any disk partitions
-if (! test -e /dev/sdctl)
-	bind -b '#S' /dev
-
-# set up any /dev/sd partitions.
 # note that really big disks (e.g., aoe devices) may have no mbr
 # partition table because the mbr partition table can't cope with large
 # block numbers, so we may have to examine the data file with prep if
 # there's no plan9 file.  beware that `disk/prep -p data' on a disk with
 # no plan 9 partition table will delete all extant partitions.
-for(disk in /dev/sd*) {
-	if(test -f $disk/data && test -f $disk/ctl)
-		{ disk/fdisk -p $disk/data |
-			grep -v '^delpart ' >$disk/ctl } >[2]/dev/null
-	if(test -f $disk/plan9)
-		parts=($disk/plan9*)
+fn setup {
+	if(test -f $1/data && test -f $1/ctl)
+		{ disk/fdisk -p $1/data |
+			grep -v '^delpart ' >$1/ctl } >[2]/dev/null
+	if(test -f $1/plan9)
+		parts=($1/plan9*)
 	if not
-		parts=($disk/data)
+		parts=($1/data)
 	for(part in $parts)
 		if(test -f $part)
 			 { disk/prep -p $part |
-				grep -v '^delpart ' >$disk/ctl } >[2]/dev/null
+				grep -v '^delpart ' >$1/ctl } >[2]/dev/null
 }
 
-sysname=`{cat /dev/sysname}
-
-# set up any fs(3) partitions
-if (! test -e /dev/fs/ctl && test -e '#k/fs')
-	bind -b '#k' /dev
-if (~ $#sysname 1 && ! ~ $sysname '' &&
-    test -r /cfg/$sysname/fsconfig && test -w /dev/fs/ctl)
-	awk '{print $0; fflush}' /cfg/$sysname/fsconfig >/dev/fs/ctl
+if(~ $#* 0){
+	# set up any disk partitions
+	if (! test -e /dev/sdctl)
+		bind -b '#S' /dev
+	for(disk in /dev/sd*) {
+		setup $disk
+	}
+	sysname=`{cat /dev/sysname}
+	# set up any fs(3) partitions
+	if (! test -e /dev/fs/ctl && test -e '#k/fs')
+		bind -b '#k' /dev
+	if (~ $#sysname 1 && ! ~ $sysname '' &&
+	  test -r /cfg/$sysname/fsconfig && test -w /dev/fs/ctl)
+		awk '{print $0; fflush}' /cfg/$sysname/fsconfig >/dev/fs/ctl
+}
+if not {
+	for(disk) {
+		setup $disk
+	}
+}
--- a/rc/bin/nusbrc
+++ b/rc/bin/nusbrc
@@ -20,10 +20,11 @@
 		case *08
 			# handled /sys/src/9/boot/nusbrc
 			# nusb/disk $1
+		case *10106
+			nusb/ptp $1
 		}
 	}
 	fn detach {
-		# handled /sys/src/9/boot/nusbrc
 	}
 	rc < '#σ/usb/usbevent' &
 }
--- a/sys/src/9/boot/nusbrc
+++ b/sys/src/9/boot/nusbrc
@@ -14,10 +14,26 @@
 			nusb/kb $1
 		case *08
 			nusb/disk $1
+			@{
+				rfork ne
+				cd '#σ/usb'
+				for(dev in sdU^$1.*){
+					echo $dev...
+					diskparts $dev
+					for(part in $dev/dos* $dev/9fat){
+						if(test -r $part) {
+							mkdir -m 0700 '#σc/'^$dev
+							{dossrv -s -f $part &} <[0=1] |
+								echo 0 >'#σc/'^$dev/dos
+							exit
+						}
+					}
+				}
+			} &
 		}
 	}
 	fn detach {
-		rm -f '#σc/usb/'^$1.*
+		rm -rf '#σc/usb/'^$1.* '#σc/sdU'^$1.*
 	}
 	rc < '#σ/usb/usbevent' &
 }
--