summaryrefslogtreecommitdiff
path: root/sys/compat/common
diff options
context:
space:
mode:
authorTodd C. Miller <millert@cvs.openbsd.org>2004-07-13 21:04:30 +0000
committerTodd C. Miller <millert@cvs.openbsd.org>2004-07-13 21:04:30 +0000
commit808ea3c6ef13210b97a953d1af60f18af8fedade (patch)
tree76e658442d20a298bbbec645963b0ef98fe8a653 /sys/compat/common
parent79acdfbd39f0127e25ba7aad63839b6455171e08 (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/Makefile5
-rw-r--r--sys/compat/common/vfs_syscalls_35.c167
-rw-r--r--sys/compat/common/vfs_syscalls_43.c8
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);