diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 2004-07-13 21:04:30 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 2004-07-13 21:04:30 +0000 |
commit | 808ea3c6ef13210b97a953d1af60f18af8fedade (patch) | |
tree | 76e658442d20a298bbbec645963b0ef98fe8a653 /sys/compat/common | |
parent | 79acdfbd39f0127e25ba7aad63839b6455171e08 (diff) |
Change mode_t and nlink_t from 16bit to 32bit. This allows us to
use mode_t in syscalls.master and to use mode_t in more places in
the kernel. It also makes lint much more useful on kernel code.
I've also added a placeholder for st_birthtime to make a UFS2 import
easier at some future date.
Requested by and OK deraadt@
Diffstat (limited to 'sys/compat/common')
-rw-r--r-- | sys/compat/common/Makefile | 5 | ||||
-rw-r--r-- | sys/compat/common/vfs_syscalls_35.c | 167 | ||||
-rw-r--r-- | sys/compat/common/vfs_syscalls_43.c | 8 |
3 files changed, 174 insertions, 6 deletions
diff --git a/sys/compat/common/Makefile b/sys/compat/common/Makefile index 90c4e67399f..47cad8c0825 100644 --- a/sys/compat/common/Makefile +++ b/sys/compat/common/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.17 2004/05/03 17:38:48 millert Exp $ +# $OpenBSD: Makefile,v 1.18 2004/07/13 21:04:29 millert Exp $ # $NetBSD: Makefile,v 1.8 1996/05/18 15:52:19 christos Exp $ LIB= compat @@ -12,7 +12,8 @@ MACHINE_ARCH= ${XMACHINE_ARCH} SRCS= compat_exec.c compat_util.c compat_dir.c compat_vm.c \ kern_exit_43.c kern_ipc_23.c kern_ipc_35.c kern_info_09.c \ kern_info_43.c kern_resource_43.c kern_sig_43.c tty_43.c \ - uipc_syscalls_43.c vfs_syscalls_25.c vfs_syscalls_43.c vm_43.c + uipc_syscalls_43.c vfs_syscalls_25.c vfs_syscalls_35.c \ + vfs_syscalls_43.c vm_43.c # really, all machines where sizeof(int) != sizeof(long) .if (${MACHINE_ARCH} != "alpha") && (${MACHINE_ARCH} != "amd64") && \ diff --git a/sys/compat/common/vfs_syscalls_35.c b/sys/compat/common/vfs_syscalls_35.c new file mode 100644 index 00000000000..e9e6c62cbf1 --- /dev/null +++ b/sys/compat/common/vfs_syscalls_35.c @@ -0,0 +1,167 @@ +/* $OpenBSD: vfs_syscalls_35.c,v 1.1 2004/07/13 21:04:29 millert Exp $ */ + +/* + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. + * (c) UNIX System Laboratories, Inc. + * All or some portions of this file are derived from material licensed + * to the University of California by American Telephone and Telegraph + * Co. or Unix System Laboratories, Inc. and are reproduced herein with + * the permission of UNIX System Laboratories, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)vfs_syscalls.c 8.28 (Berkeley) 12/10/94 + */ + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/filedesc.h> +#include <sys/kernel.h> +#include <sys/proc.h> +#include <sys/file.h> +#include <sys/vnode.h> +#include <sys/namei.h> +#include <sys/dirent.h> +#include <sys/socket.h> +#include <sys/socketvar.h> +#include <sys/stat.h> + +#include <sys/mount.h> +#include <sys/syscallargs.h> + +static void cvtstat(struct stat *, struct stat35 *); + +/* + * Convert from a new to an old stat structure. + */ +static void +cvtstat(struct stat *st, struct stat35 *ost) +{ + + ost->st_dev = st->st_dev; + ost->st_ino = st->st_ino; + ost->st_mode = st->st_mode & 0xffff; + ost->st_nlink = st->st_nlink & 0xffff; + ost->st_uid = st->st_uid; + ost->st_gid = st->st_gid; + ost->st_rdev = st->st_rdev; + ost->st_atimespec = st->st_atimespec; + ost->st_mtimespec = st->st_mtimespec; + ost->st_ctimespec = st->st_ctimespec; + ost->st_size = st->st_size; + ost->st_blocks = st->st_blocks; + ost->st_blksize = st->st_blksize; + ost->st_flags = st->st_flags; + ost->st_gen = st->st_gen; +} + +/* + * Get file status; this version follows links. + */ +/* ARGSUSED */ +int +compat_35_sys_stat(struct proc *p, void *v, register_t *retval) +{ + struct compat_35_sys_stat_args /* { + syscallarg(char *) path; + syscallarg(struct stat35 *) ub; + } */ *uap = v; + struct stat sb; + struct stat35 osb; + int error; + struct nameidata nd; + + NDINIT(&nd, LOOKUP, FOLLOW | LOCKLEAF, UIO_USERSPACE, + SCARG(uap, path), p); + if ((error = namei(&nd)) != 0) + return (error); + error = vn_stat(nd.ni_vp, &sb, p); + vput(nd.ni_vp); + if (error) + return (error); + cvtstat(&sb, &osb); + error = copyout((caddr_t)&osb, (caddr_t)SCARG(uap, ub), sizeof (osb)); + return (error); +} + +/* + * Get file status; this version does not follow links. + */ +/* ARGSUSED */ +int +compat_35_sys_lstat(struct proc *p, void *v, register_t *retval) +{ + struct compat_35_sys_lstat_args /* { + syscallarg(char *) path; + syscallarg(struct stat35 *) ub; + } */ *uap = v; + struct stat sb; + struct stat35 osb; + int error; + struct nameidata nd; + + NDINIT(&nd, LOOKUP, NOFOLLOW | LOCKLEAF, UIO_USERSPACE, + SCARG(uap, path), p); + if ((error = namei(&nd)) != 0) + return (error); + error = vn_stat(nd.ni_vp, &sb, p); + vput(nd.ni_vp); + if (error) + return (error); + cvtstat(&sb, &osb); + error = copyout(&osb, SCARG(uap, ub), sizeof (osb)); + return (error); +} + +/* + * Return status information about a file descriptor. + */ +/* ARGSUSED */ +int +compat_35_sys_fstat(struct proc *p, void *v, register_t *retval) +{ + struct compat_35_sys_fstat_args /* { + syscallarg(int) fd; + syscallarg(struct stat35 *) sb; + } */ *uap = v; + int fd = SCARG(uap, fd); + struct filedesc *fdp = p->p_fd; + struct file *fp; + struct stat ub; + struct stat35 oub; + int error; + + if ((fp = fd_getfile(fdp, fd)) == NULL) + return (EBADF); + FREF(fp); + error = (*fp->f_ops->fo_stat)(fp, &ub, p); + FRELE(fp); + cvtstat(&ub, &oub); + if (error == 0) + error = copyout((caddr_t)&oub, (caddr_t)SCARG(uap, sb), + sizeof (oub)); + return (error); +} diff --git a/sys/compat/common/vfs_syscalls_43.c b/sys/compat/common/vfs_syscalls_43.c index 0b4d33250f1..025dfd1739b 100644 --- a/sys/compat/common/vfs_syscalls_43.c +++ b/sys/compat/common/vfs_syscalls_43.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vfs_syscalls_43.c,v 1.23 2004/07/09 23:52:02 millert Exp $ */ +/* $OpenBSD: vfs_syscalls_43.c,v 1.24 2004/07/13 21:04:29 millert Exp $ */ /* $NetBSD: vfs_syscalls_43.c,v 1.4 1996/03/14 19:31:52 christos Exp $ */ /* @@ -77,7 +77,7 @@ extern int (*union_check_p)(struct proc *, struct vnode **, struct file *, struct uio, int *); /* - * Convert from an old to a new stat structure. + * Convert from a new to an old stat structure. */ static void cvtstat(st, ost) @@ -299,12 +299,12 @@ compat_43_sys_creat(p, v, retval) { register struct compat_43_sys_creat_args /* { syscallarg(char *) path; - syscallarg(int) mode; + syscallarg(mode_t) mode; } */ *uap = v; struct sys_open_args /* { syscallarg(char *) path; syscallarg(int) flags; - syscallarg(int) mode; + syscallarg(mode_t) mode; } */ nuap; SCARG(&nuap, path) = SCARG(uap, path); |