Module Name:    src
Committed By:   riz
Date:           Thu Dec 13 23:47:57 UTC 2012

Modified Files:
        src/sys/compat/netbsd32 [netbsd-6]: netbsd32.h netbsd32_fs.c

Log Message:
Pull up following revision(s) (requested by bouyer in ticket #742):
        sys/compat/netbsd32/netbsd32.h: revision 1.94
        sys/compat/netbsd32/netbsd32_fs.c: revision 1.63
allow mounting ext2fs and msdosfs
while there also enable lfs but that's untested


To generate a diff of this commit:
cvs rdiff -u -r1.92.2.1 -r1.92.2.2 src/sys/compat/netbsd32/netbsd32.h
cvs rdiff -u -r1.62 -r1.62.2.1 src/sys/compat/netbsd32/netbsd32_fs.c

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

Modified files:

Index: src/sys/compat/netbsd32/netbsd32.h
diff -u src/sys/compat/netbsd32/netbsd32.h:1.92.2.1 src/sys/compat/netbsd32/netbsd32.h:1.92.2.2
--- src/sys/compat/netbsd32/netbsd32.h:1.92.2.1	Thu Apr 12 17:05:37 2012
+++ src/sys/compat/netbsd32/netbsd32.h	Thu Dec 13 23:47:57 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32.h,v 1.92.2.1 2012/04/12 17:05:37 riz Exp $	*/
+/*	$NetBSD: netbsd32.h,v 1.92.2.2 2012/12/13 23:47:57 riz Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001, 2008 Matthew R. Green
@@ -938,6 +938,19 @@ struct netbsd32_nfs_args {
 	int32_t		deadthresh;	/* Retrans threshold */
 	netbsd32_charp	hostname;	/* server's name */
 };
+struct netbsd32_msdosfs_args {
+	netbsd32_charp	fspec;		/* blocks special holding the fs to mount */
+	struct	netbsd32_export_args30 _pad1; /* compat with old userland tools */
+	uid_t	uid;		/* uid that owns msdosfs files */
+	gid_t	gid;		/* gid that owns msdosfs files */
+	mode_t  mask;		/* mask to be applied for msdosfs perms */
+	int	flags;		/* see below */
+
+	/* Following items added after versioning support */
+	int	version;	/* version of the struct */
+	mode_t  dirmask;	/* v2: mask to be applied for msdosfs perms */
+	int	gmtoff;		/* v3: offset from UTC in seconds */
+};
 
 struct netbsd32_posix_spawn_file_actions_entry {
 	enum { FAE32_OPEN, FAE32_DUP2, FAE32_CLOSE } fae_action;

Index: src/sys/compat/netbsd32/netbsd32_fs.c
diff -u src/sys/compat/netbsd32/netbsd32_fs.c:1.62 src/sys/compat/netbsd32/netbsd32_fs.c:1.62.2.1
--- src/sys/compat/netbsd32/netbsd32_fs.c:1.62	Wed Jan 25 14:06:07 2012
+++ src/sys/compat/netbsd32/netbsd32_fs.c	Thu Dec 13 23:47:57 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: netbsd32_fs.c,v 1.62 2012/01/25 14:06:07 christos Exp $	*/
+/*	$NetBSD: netbsd32_fs.c,v 1.62.2.1 2012/12/13 23:47:57 riz Exp $	*/
 
 /*
  * Copyright (c) 1998, 2001 Matthew R. Green
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: netbsd32_fs.c,v 1.62 2012/01/25 14:06:07 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: netbsd32_fs.c,v 1.62.2.1 2012/12/13 23:47:57 riz Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -50,6 +50,8 @@ __KERNEL_RCSID(0, "$NetBSD: netbsd32_fs.
 #include <sys/vfs_syscalls.h>
 
 #include <fs/cd9660/cd9660_mount.h>
+#include <fs/msdosfs/bpb.h>
+#include <fs/msdosfs/msdosfsmount.h>
 #include <ufs/ufs/ufsmount.h>
 
 #define NFS_ARGS_ONLY
@@ -774,12 +776,14 @@ netbsd32___mount50(struct lwp *l, const 
 		struct netbsd32_mfs_args mfs_args;
 		struct netbsd32_iso_args iso_args;
 		struct netbsd32_nfs_args nfs_args;
+		struct netbsd32_msdosfs_args msdosfs_args;
 	} fs_args32;
 	union {
 		struct ufs_args ufs_args;
 		struct mfs_args mfs_args;
 		struct iso_args iso_args;
 		struct nfs_args nfs_args;
+		struct msdosfs_args msdosfs_args;
 	} fs_args;
 	const char *type = SCARG_P32(uap, type);
 	const char *path = SCARG_P32(uap, path);
@@ -812,7 +816,9 @@ netbsd32___mount50(struct lwp *l, const 
 		data_seg = UIO_SYSSPACE;
 		data = &fs_args.mfs_args;
 		data_len = sizeof(fs_args.mfs_args);
-	} else if (strcmp(mtype, MOUNT_UFS) == 0) {
+	} else if ((strcmp(mtype, MOUNT_UFS) == 0) ||
+		   (strcmp(mtype, MOUNT_EXT2FS) == 0) ||
+		   (strcmp(mtype, MOUNT_LFS) == 0)) {
 		if (data_len > sizeof(fs_args32.ufs_args))
 			return EINVAL;
 		if ((flags & MNT_GETARGS) == 0) {
@@ -843,6 +849,36 @@ netbsd32___mount50(struct lwp *l, const 
 		data_seg = UIO_SYSSPACE;
 		data = &fs_args.iso_args;
 		data_len = sizeof(fs_args.iso_args);
+	} else if (strcmp(mtype, MOUNT_MSDOS) == 0) {
+		if (data_len != sizeof(fs_args32.msdosfs_args))
+			return EINVAL;
+		if ((flags & MNT_GETARGS) == 0) {
+			error = copyin(data, &fs_args32.msdosfs_args, 
+			    sizeof(fs_args32.msdosfs_args));
+			if (error)
+				return error;
+			fs_args.msdosfs_args.fspec =
+			    NETBSD32PTR64(fs_args32.msdosfs_args.fspec);
+			memset(&fs_args.msdosfs_args._pad1, 0,
+			    sizeof(fs_args.msdosfs_args._pad1));
+			fs_args.msdosfs_args.uid =
+			    fs_args32.msdosfs_args.uid;
+			fs_args.msdosfs_args.gid =
+			    fs_args32.msdosfs_args.gid;
+			fs_args.msdosfs_args.mask =
+			    fs_args32.msdosfs_args.mask;
+			fs_args.msdosfs_args.flags =
+			    fs_args32.msdosfs_args.flags;
+			fs_args.msdosfs_args.version =
+			    fs_args32.msdosfs_args.version;
+			fs_args.msdosfs_args.dirmask =
+			    fs_args32.msdosfs_args.dirmask;
+			fs_args.msdosfs_args.gmtoff =
+			    fs_args32.msdosfs_args.gmtoff;
+		}
+		data_seg = UIO_SYSSPACE;
+		data = &fs_args.msdosfs_args;
+		data_len = sizeof(fs_args.msdosfs_args);
 	} else if (strcmp(mtype, MOUNT_NFS) == 0) {
 		if (data_len != sizeof(fs_args32.nfs_args))
 			return EINVAL;

Reply via email to