Module Name: src Committed By: matt Date: Sun Sep 13 06:19:43 UTC 2009
Modified Files: src/sys/compat/netbsd32 [matt-nb5-mips64]: netbsd32_fs.c netbsd32_netbsd.c Log Message: Move netbsd32___mount50 from netbsd32_netbsd.c to netbsd32_fs.c To generate a diff of this commit: cvs rdiff -u -r1.55 -r1.55.14.1 src/sys/compat/netbsd32/netbsd32_fs.c cvs rdiff -u -r1.145.4.2.4.1 -r1.145.4.2.4.2 \ src/sys/compat/netbsd32/netbsd32_netbsd.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_fs.c diff -u src/sys/compat/netbsd32/netbsd32_fs.c:1.55 src/sys/compat/netbsd32/netbsd32_fs.c:1.55.14.1 --- src/sys/compat/netbsd32/netbsd32_fs.c:1.55 Tue Jun 24 11:18:15 2008 +++ src/sys/compat/netbsd32/netbsd32_fs.c Sun Sep 13 06:19:43 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_fs.c,v 1.55 2008/06/24 11:18:15 ad Exp $ */ +/* $NetBSD: netbsd32_fs.c,v 1.55.14.1 2009/09/13 06:19:43 matt 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.55 2008/06/24 11:18:15 ad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_fs.c,v 1.55.14.1 2009/09/13 06:19:43 matt Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -50,6 +50,9 @@ #include <sys/kauth.h> #include <sys/vfs_syscalls.h> +#include <fs/cd9660/cd9660_mount.h> +#include <ufs/ufs/ufsmount.h> + #include <compat/netbsd32/netbsd32.h> #include <compat/netbsd32/netbsd32_syscallargs.h> #include <compat/netbsd32/netbsd32_conv.h> @@ -754,3 +757,132 @@ free(path, M_TEMP); return error; } + +int +netbsd32___mount50(struct lwp *l, const struct netbsd32___mount50_args *uap, + register_t *retval) +{ + /* { + syscallarg(netbsd32_charp) type; + syscallarg(netbsd32_charp) path; + syscallarg(int) flags; + syscallarg(netbsd32_voidp) data; + syscallarg(netbsd32_size_t) data_len; + } */ + char mtype[MNAMELEN]; + union { + struct netbsd32_ufs_args ufs_args; + struct netbsd32_mfs_args mfs_args; + struct netbsd32_iso_args iso_args; + } fs_args32; + union { + struct ufs_args ufs_args; + struct mfs_args mfs_args; + struct iso_args iso_args; + } fs_args; + const char *type = SCARG_P32(uap, type); + const char *path = SCARG_P32(uap, path); + int flags = SCARG(uap, flags); + void *data = SCARG_P32(uap, data); + size_t data_len = SCARG(uap, data_len); + enum uio_seg data_seg; + size_t len; + int error; + + error = copyinstr(type, mtype, sizeof(mtype), &len); + if (error) + return error; + if (strcmp(mtype, MOUNT_MFS) == 0) { + if (data_len != sizeof(fs_args32.mfs_args)) + return EINVAL; + if ((flags & MNT_GETARGS) == 0) { + error = copyin(data, &fs_args32.mfs_args, + sizeof(fs_args32.mfs_args)); + if (error) + return error; + fs_args.mfs_args.fspec = + NETBSD32PTR64(fs_args32.mfs_args.fspec); + memset(&fs_args.mfs_args._pad1, 0, + sizeof(fs_args.mfs_args._pad1)); + fs_args.mfs_args.base = + NETBSD32PTR64(fs_args32.mfs_args.base); + fs_args.mfs_args.size = fs_args32.mfs_args.size; + } + data_seg = UIO_SYSSPACE; + data = &fs_args.mfs_args; + data_len = sizeof(fs_args.mfs_args); + } else if (strcmp(mtype, MOUNT_UFS) == 0) { + if (data_len > sizeof(fs_args32.ufs_args)) + return EINVAL; + if ((flags & MNT_GETARGS) == 0) { + error = copyin(data, &fs_args32.ufs_args, + sizeof(fs_args32.ufs_args)); + if (error) + return error; + fs_args.ufs_args.fspec = + NETBSD32PTR64(fs_args32.ufs_args.fspec); + } + data_seg = UIO_SYSSPACE; + data = &fs_args.ufs_args; + data_len = sizeof(fs_args.ufs_args); + } else if (strcmp(mtype, MOUNT_CD9660) == 0) { + if (data_len != sizeof(fs_args32.iso_args)) + return EINVAL; + if ((flags & MNT_GETARGS) == 0) { + error = copyin(data, &fs_args32.iso_args, + sizeof(fs_args32.iso_args)); + if (error) + return error; + fs_args.iso_args.fspec = + NETBSD32PTR64(fs_args32.iso_args.fspec); + memset(&fs_args.iso_args._pad1, 0, + sizeof(fs_args.iso_args._pad1)); + fs_args.iso_args.flags = fs_args32.iso_args.flags; + } + data_seg = UIO_SYSSPACE; + data = &fs_args.iso_args; + data_len = sizeof(fs_args.iso_args); + } else { + data_seg = UIO_USERSPACE; + } + error = do_sys_mount(l, NULL, type, path, flags, data, data_seg, + data_len, retval); + if (error) { + printf("do_sys_mount(%s): %p, %p, %#x, %p, %d, %zu, %p: failed: error %d\n", mtype, type, path, flags, data, data_seg, data_len, retval, error); + return error; + } + if (flags & MNT_GETARGS) { + data_len = *retval; + if (strcmp(mtype, MOUNT_MFS) == 0) { + if (data_len != sizeof(fs_args.mfs_args)) + return EINVAL; + NETBSD32PTR32(fs_args32.mfs_args.fspec, + fs_args.mfs_args.fspec); + memset(&fs_args32.mfs_args._pad1, 0, + sizeof(fs_args32.mfs_args._pad1)); + NETBSD32PTR32(fs_args32.mfs_args.base, + fs_args.mfs_args.base); + fs_args32.mfs_args.size = fs_args.mfs_args.size; + error = copyout(&fs_args32.mfs_args, data, + sizeof(fs_args32.mfs_args)); + } else if (strcmp(mtype, MOUNT_UFS) == 0) { + if (data_len != sizeof(fs_args.ufs_args)) + return EINVAL; + NETBSD32PTR32(fs_args32.ufs_args.fspec, + fs_args.ufs_args.fspec); + error = copyout(&fs_args32.ufs_args, data, + sizeof(fs_args32.ufs_args)); + } else if (strcmp(mtype, MOUNT_CD9660) == 0) { + if (data_len != sizeof(fs_args.iso_args)) + return EINVAL; + NETBSD32PTR32(fs_args32.iso_args.fspec, + fs_args.iso_args.fspec); + memset(&fs_args32.iso_args._pad1, 0, + sizeof(fs_args32.iso_args._pad1)); + fs_args32.iso_args.flags = fs_args.iso_args.flags; + error = copyout(&fs_args32.iso_args, data, + sizeof(fs_args32.iso_args)); + } + } + return error; +} Index: src/sys/compat/netbsd32/netbsd32_netbsd.c diff -u src/sys/compat/netbsd32/netbsd32_netbsd.c:1.145.4.2.4.1 src/sys/compat/netbsd32/netbsd32_netbsd.c:1.145.4.2.4.2 --- src/sys/compat/netbsd32/netbsd32_netbsd.c:1.145.4.2.4.1 Sat Sep 12 18:02:32 2009 +++ src/sys/compat/netbsd32/netbsd32_netbsd.c Sun Sep 13 06:19:43 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: netbsd32_netbsd.c,v 1.145.4.2.4.1 2009/09/12 18:02:32 matt Exp $ */ +/* $NetBSD: netbsd32_netbsd.c,v 1.145.4.2.4.2 2009/09/13 06:19:43 matt Exp $ */ /* * Copyright (c) 1998, 2001, 2008 Matthew R. Green @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.145.4.2.4.1 2009/09/12 18:02:32 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.145.4.2.4.2 2009/09/13 06:19:43 matt Exp $"); #if defined(_KERNEL_OPT) #include "opt_ddb.h" @@ -87,9 +87,6 @@ #include <net/if.h> -#include <fs/cd9660/cd9660_mount.h> -#include <ufs/ufs/ufsmount.h> - #include <compat/netbsd32/netbsd32.h> #include <compat/netbsd32/netbsd32_exec.h> #include <compat/netbsd32/netbsd32_syscall.h> @@ -407,135 +404,6 @@ } int -netbsd32___mount50(struct lwp *l, const struct netbsd32___mount50_args *uap, - register_t *retval) -{ - /* { - syscallarg(netbsd32_charp) type; - syscallarg(netbsd32_charp) path; - syscallarg(int) flags; - syscallarg(netbsd32_voidp) data; - syscallarg(netbsd32_size_t) data_len; - } */ - char mtype[MNAMELEN]; - union { - struct netbsd32_ufs_args ufs_args; - struct netbsd32_mfs_args mfs_args; - struct netbsd32_iso_args iso_args; - } fs_args32; - union { - struct ufs_args ufs_args; - struct mfs_args mfs_args; - struct iso_args iso_args; - } fs_args; - const char *type = SCARG_P32(uap, type); - const char *path = SCARG_P32(uap, path); - int flags = SCARG(uap, flags); - void *data = SCARG_P32(uap, data); - size_t data_len = SCARG(uap, data_len); - enum uio_seg data_seg; - size_t len; - int error; - - error = copyinstr(type, mtype, sizeof(mtype), &len); - if (error) - return error; - if (strcmp(mtype, MOUNT_MFS) == 0) { - if (data_len != sizeof(fs_args32.mfs_args)) - return EINVAL; - if ((flags & MNT_GETARGS) == 0) { - error = copyin(data, &fs_args32.mfs_args, - sizeof(fs_args32.mfs_args)); - if (error) - return error; - fs_args.mfs_args.fspec = - NETBSD32PTR64(fs_args32.mfs_args.fspec); - memset(&fs_args.mfs_args._pad1, 0, - sizeof(fs_args.mfs_args._pad1)); - fs_args.mfs_args.base = - NETBSD32PTR64(fs_args32.mfs_args.base); - fs_args.mfs_args.size = fs_args32.mfs_args.size; - } - data_seg = UIO_SYSSPACE; - data = &fs_args.mfs_args; - data_len = sizeof(fs_args.mfs_args); - } else if (strcmp(mtype, MOUNT_UFS) == 0) { - if (data_len > sizeof(fs_args32.ufs_args)) - return EINVAL; - if ((flags & MNT_GETARGS) == 0) { - error = copyin(data, &fs_args32.ufs_args, - sizeof(fs_args32.ufs_args)); - if (error) - return error; - fs_args.ufs_args.fspec = - NETBSD32PTR64(fs_args32.ufs_args.fspec); - } - data_seg = UIO_SYSSPACE; - data = &fs_args.ufs_args; - data_len = sizeof(fs_args.ufs_args); - } else if (strcmp(mtype, MOUNT_CD9660) == 0) { - if (data_len != sizeof(fs_args32.iso_args)) - return EINVAL; - if ((flags & MNT_GETARGS) == 0) { - error = copyin(data, &fs_args32.iso_args, - sizeof(fs_args32.iso_args)); - if (error) - return error; - fs_args.iso_args.fspec = - NETBSD32PTR64(fs_args32.iso_args.fspec); - memset(&fs_args.iso_args._pad1, 0, - sizeof(fs_args.iso_args._pad1)); - fs_args.iso_args.flags = fs_args32.iso_args.flags; - } - data_seg = UIO_SYSSPACE; - data = &fs_args.iso_args; - data_len = sizeof(fs_args.iso_args); - } else { - data_seg = UIO_USERSPACE; - } - error = do_sys_mount(l, NULL, type, path, flags, data, data_seg, - data_len, retval); - if (error) { - printf("do_sys_mount(%s): %p, %p, %#x, %p, %d, %zu, %p: failed: error %d\n", mtype, type, path, flags, data, data_seg, data_len, retval, error); - return error; - } - if (flags & MNT_GETARGS) { - data_len = *retval; - if (strcmp(mtype, MOUNT_MFS) == 0) { - if (data_len != sizeof(fs_args.mfs_args)) - return EINVAL; - NETBSD32PTR32(fs_args32.mfs_args.fspec, - fs_args.mfs_args.fspec); - memset(&fs_args32.mfs_args._pad1, 0, - sizeof(fs_args32.mfs_args._pad1)); - NETBSD32PTR32(fs_args32.mfs_args.base, - fs_args.mfs_args.base); - fs_args32.mfs_args.size = fs_args.mfs_args.size; - error = copyout(&fs_args32.mfs_args, data, - sizeof(fs_args32.mfs_args)); - } else if (strcmp(mtype, MOUNT_UFS) == 0) { - if (data_len != sizeof(fs_args.ufs_args)) - return EINVAL; - NETBSD32PTR32(fs_args32.ufs_args.fspec, - fs_args.ufs_args.fspec); - error = copyout(&fs_args32.ufs_args, data, - sizeof(fs_args32.ufs_args)); - } else if (strcmp(mtype, MOUNT_CD9660) == 0) { - if (data_len != sizeof(fs_args.iso_args)) - return EINVAL; - NETBSD32PTR32(fs_args32.iso_args.fspec, - fs_args.iso_args.fspec); - memset(&fs_args32.iso_args._pad1, 0, - sizeof(fs_args32.iso_args._pad1)); - fs_args32.iso_args.flags = fs_args.iso_args.flags; - error = copyout(&fs_args32.iso_args, data, - sizeof(fs_args32.iso_args)); - } - } - return error; -} - -int netbsd32_unmount(struct lwp *l, const struct netbsd32_unmount_args *uap, register_t *retval) { /* {