Module Name: src
Committed By: macallan
Date: Tue Mar 6 07:37:06 UTC 2012
Modified Files:
src/sys/compat/netbsd32: netbsd32.h netbsd32_fs.c
Log Message:
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.93 -r1.94 src/sys/compat/netbsd32/netbsd32.h
cvs rdiff -u -r1.62 -r1.63 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.93 src/sys/compat/netbsd32/netbsd32.h:1.94
--- src/sys/compat/netbsd32/netbsd32.h:1.93 Sun Feb 19 21:06:39 2012
+++ src/sys/compat/netbsd32/netbsd32.h Tue Mar 6 07:37:05 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: netbsd32.h,v 1.93 2012/02/19 21:06:39 rmind Exp $ */
+/* $NetBSD: netbsd32.h,v 1.94 2012/03/06 07:37:05 macallan Exp $ */
/*
* Copyright (c) 1998, 2001, 2008 Matthew R. Green
@@ -927,6 +927,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 */
+};
#if 0
int netbsd32_kevent(struct lwp *, void *, register_t *);
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.63
--- src/sys/compat/netbsd32/netbsd32_fs.c:1.62 Wed Jan 25 14:06:07 2012
+++ src/sys/compat/netbsd32/netbsd32_fs.c Tue Mar 6 07:37:05 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.63 2012/03/06 07:37:05 macallan 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.63 2012/03/06 07:37:05 macallan 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;