Module Name:    src
Committed By:   pooka
Date:           Wed Feb 17 20:43:35 UTC 2010

Modified Files:
        src/share/examples/rump/sdread: Makefile sdread.c

Log Message:
* support cd devices (@scsibus & @atapibus, per libumass)
* support cd9660
* add "probe" keyword, which just prints the dmesg in verbose form


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/share/examples/rump/sdread/Makefile
cvs rdiff -u -r1.2 -r1.3 src/share/examples/rump/sdread/sdread.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/share/examples/rump/sdread/Makefile
diff -u src/share/examples/rump/sdread/Makefile:1.4 src/share/examples/rump/sdread/Makefile:1.5
--- src/share/examples/rump/sdread/Makefile:1.4	Wed Feb 10 02:31:00 2010
+++ src/share/examples/rump/sdread/Makefile	Wed Feb 17 20:43:35 2010
@@ -1,9 +1,9 @@
-#	$NetBSD: Makefile,v 1.4 2010/02/10 02:31:00 pooka Exp $
+#	$NetBSD: Makefile,v 1.5 2010/02/17 20:43:35 pooka Exp $
 #
 
 PROG=	sdread
 
-LDADD+=	-lrumpfs_ffs -lrumpfs_msdos -lrumpvfs
+LDADD+=	-lrumpfs_cd9660 -lrumpfs_ffs -lrumpfs_msdos -lrumpvfs
 LDADD+=	-lrumpdev_disk -lrumpdev_usb -lrumpdev_ugenhc -lrumpdev_umass -lrumpdev
 LDADD+=	-lrump
 LDADD+=	-lrumpuser -lpthread

Index: src/share/examples/rump/sdread/sdread.c
diff -u src/share/examples/rump/sdread/sdread.c:1.2 src/share/examples/rump/sdread/sdread.c:1.3
--- src/share/examples/rump/sdread/sdread.c:1.2	Tue Oct 13 18:41:06 2009
+++ src/share/examples/rump/sdread/sdread.c	Wed Feb 17 20:43:35 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdread.c,v 1.2 2009/10/13 18:41:06 pooka Exp $	*/
+/*	$NetBSD: sdread.c,v 1.3 2010/02/17 20:43:35 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -31,6 +31,7 @@
 
 #include <ufs/ufs/ufsmount.h>
 #include <msdosfs/msdosfsmount.h>
+#include <isofs/cd9660/cd9660_mount.h>
 
 #include <rump/rump.h>
 #include <rump/rump_syscalls.h>
@@ -56,13 +57,19 @@
 	char buf[2048];
 	struct msdosfs_args args;
 	struct ufs_args uargs;
+	struct iso_args iargs;
 	struct dirent *dp;
 	const char *msg = NULL;
 	int fd, n, fd_h, sverrno;
+	int probeonly = 0;
 
-	if (argc > 1 && argc != 3) {
-		fprintf(stderr, "usage: a.out [src hostdest]\n");
-		exit(1);
+	if (argc > 1) {
+		if (argc == 2 && strcmp(argv[1], "probe") == 0) {
+			probeonly = 1;
+		} else if (argc != 3) {
+			fprintf(stderr, "usage: a.out [src hostdest]\n");
+			exit(1);
+		}
 	}
 
 	memset(&args, 0, sizeof(args));
@@ -72,7 +79,15 @@
 	memset(&uargs, 0, sizeof(uargs));
 	uargs.fspec = strdup("/dev/sd0e");
 
+	memset(&iargs, 0, sizeof(iargs));
+	iargs.fspec = strdup("/dev/cd0a");
+
+	if (probeonly)
+		rump_boot_sethowto(RUMP_AB_VERBOSE);
 	rump_init();
+	if (probeonly) {
+		exit(0);
+	}
 
 	if (rump_sys_mkdir("/mp", 0777) == -1)
 		err(1, "mkdir");
@@ -80,7 +95,17 @@
 	    &args, sizeof(args)) == -1) {
 		if (rump_sys_mount(MOUNT_FFS, "/mp", MNT_RDONLY,
 		    &uargs, sizeof(uargs)) == -1) {
-			err(1, "mount");
+			printf("Trying CD.  This might fail with "
+			    "\"media not present\".\n");
+			printf("If that happens, wait a while without "
+			    "unplugging the device and re-run.\n");
+			printf("Some devices apparently need a long time "
+			    "to settle after they are initialized.\n\n");
+
+			if (rump_sys_mount(MOUNT_CD9660, "/mp", MNT_RDONLY,
+			    &iargs, sizeof(iargs)) == -1) {
+				err(1, "mount");
+			}
 		}
 	}
 

Reply via email to