This commit was manufactured by cvs2svn to create tag 'FreeBSD-release/1.0'.
[unix-history] / sys / kern / vfs_syscalls.c
index 7296678..f91ccf0 100644 (file)
@@ -30,7 +30,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)vfs_syscalls.c      7.74 (Berkeley) 6/21/91
+ *     from: @(#)vfs_syscalls.c        7.74 (Berkeley) 6/21/91
+ *     $Id: vfs_syscalls.c,v 1.4 1993/10/16 15:25:26 rgrimes Exp $
  */
 
 #include "param.h"
  */
 
 #include "param.h"
 /*
  * Mount system call.
  */
 /*
  * Mount system call.
  */
+
+struct mount_args {
+       int     type;
+       char    *dir;
+       int     flags;
+       caddr_t data;
+};
+
 /* ARGSUSED */
 mount(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 mount(p, uap, retval)
        struct proc *p;
-       register struct args {
-               int     type;
-               char    *dir;
-               int     flags;
-               caddr_t data;
-       } *uap;
+       register struct mount_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -162,6 +166,10 @@ update:
                mp->mnt_flag |= MNT_NODEV;
        else
                mp->mnt_flag &= ~MNT_NODEV;
                mp->mnt_flag |= MNT_NODEV;
        else
                mp->mnt_flag &= ~MNT_NODEV;
+       if (uap->flags & MNT_NOCORE)
+               mp->mnt_flag |= MNT_NOCORE;
+       else
+               mp->mnt_flag &= ~MNT_NOCORE;
        if (uap->flags & MNT_SYNCHRONOUS)
                mp->mnt_flag |= MNT_SYNCHRONOUS;
        else
        if (uap->flags & MNT_SYNCHRONOUS)
                mp->mnt_flag |= MNT_SYNCHRONOUS;
        else
@@ -203,13 +211,16 @@ update:
  * Note: unmount takes a path to the vnode mounted on as argument,
  * not special file (as before).
  */
  * Note: unmount takes a path to the vnode mounted on as argument,
  * not special file (as before).
  */
+
+struct umount_args {
+       char    *pathp;
+       int     flags;
+};
+
 /* ARGSUSED */
 unmount(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 unmount(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *pathp;
-               int     flags;
-       } *uap;
+       register struct umount_args *uap;
        int *retval;
 {
        register struct vnode *vp;
        int *retval;
 {
        register struct vnode *vp;
@@ -290,7 +301,8 @@ sync(p, uap, retval)
        register struct mount *mp;
        struct mount *omp;
 
        register struct mount *mp;
        struct mount *omp;
 
-       mp = rootfs;
+       if ((mp = rootfs) == NULL)
+               return (0);
        do {
                /*
                 * The lock check below is to avoid races with mount
        do {
                /*
                 * The lock check below is to avoid races with mount
@@ -311,15 +323,18 @@ sync(p, uap, retval)
 /*
  * Operate on filesystem quotas.
  */
 /*
  * Operate on filesystem quotas.
  */
+
+struct quotactl_args {
+       char *path;
+       int cmd;
+       int uid;
+       caddr_t arg;
+};
+
 /* ARGSUSED */
 quotactl(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 quotactl(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char *path;
-               int cmd;
-               int uid;
-               caddr_t arg;
-       } *uap;
+       register struct quotactl_args *uap;
        int *retval;
 {
        register struct mount *mp;
        int *retval;
 {
        register struct mount *mp;
@@ -341,13 +356,16 @@ quotactl(p, uap, retval)
 /*
  * Get filesystem statistics.
  */
 /*
  * Get filesystem statistics.
  */
+
+struct statfs_args {
+       char *path;
+       struct statfs *buf;
+};
+
 /* ARGSUSED */
 statfs(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 statfs(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char *path;
-               struct statfs *buf;
-       } *uap;
+       register struct statfs_args *uap;
        int *retval;
 {
        register struct mount *mp;
        int *retval;
 {
        register struct mount *mp;
@@ -374,13 +392,16 @@ statfs(p, uap, retval)
 /*
  * Get filesystem statistics.
  */
 /*
  * Get filesystem statistics.
  */
+
+struct fstatfs_args {
+       int fd;
+       struct statfs *buf;
+};
+
 /* ARGSUSED */
 fstatfs(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 fstatfs(p, uap, retval)
        struct proc *p;
-       register struct args {
-               int fd;
-               struct statfs *buf;
-       } *uap;
+       register struct fstatfs_args *uap;
        int *retval;
 {
        struct file *fp;
        int *retval;
 {
        struct file *fp;
@@ -401,13 +422,16 @@ fstatfs(p, uap, retval)
 /*
  * Get statistics on all filesystems.
  */
 /*
  * Get statistics on all filesystems.
  */
+
+struct getfsstat_args {
+       struct statfs *buf;
+       long bufsize;
+       int flags;
+};
+
 getfsstat(p, uap, retval)
        struct proc *p;
 getfsstat(p, uap, retval)
        struct proc *p;
-       register struct args {
-               struct statfs *buf;
-               long bufsize;
-               int flags;
-       } *uap;
+       register struct getfsstat_args *uap;
        int *retval;
 {
        register struct mount *mp;
        int *retval;
 {
        register struct mount *mp;
@@ -451,12 +475,15 @@ getfsstat(p, uap, retval)
 /*
  * Change current working directory to a given file descriptor.
  */
 /*
  * Change current working directory to a given file descriptor.
  */
+
+struct fchdir_args {
+       int     fd;
+};
+
 /* ARGSUSED */
 fchdir(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 fchdir(p, uap, retval)
        struct proc *p;
-       struct args {
-               int     fd;
-       } *uap;
+       struct fchdir_args *uap;
        int *retval;
 {
        register struct filedesc *fdp = p->p_fd;
        int *retval;
 {
        register struct filedesc *fdp = p->p_fd;
@@ -484,12 +511,15 @@ fchdir(p, uap, retval)
 /*
  * Change current working directory (``.'').
  */
 /*
  * Change current working directory (``.'').
  */
+
+struct chdir_args {
+       char    *fname;
+};
+
 /* ARGSUSED */
 chdir(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 chdir(p, uap, retval)
        struct proc *p;
-       struct args {
-               char    *fname;
-       } *uap;
+       struct chdir_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -511,12 +541,15 @@ chdir(p, uap, retval)
 /*
  * Change notion of root (``/'') directory.
  */
 /*
  * Change notion of root (``/'') directory.
  */
+
+struct chroot_args {
+       char    *fname;
+};
+
 /* ARGSUSED */
 chroot(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 chroot(p, uap, retval)
        struct proc *p;
-       struct args {
-               char    *fname;
-       } *uap;
+       struct chroot_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -566,13 +599,16 @@ chdirec(ndp, p)
  * Check permissions, allocate an open file structure,
  * and call the device open routine if any.
  */
  * Check permissions, allocate an open file structure,
  * and call the device open routine if any.
  */
+
+struct open_args {
+       char    *fname;
+       int     mode;
+       int     crtmode;
+};
+
 open(p, uap, retval)
        struct proc *p;
 open(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               int     mode;
-               int     crtmode;
-       } *uap;
+       register struct open_args *uap;
        int *retval;
 {
        struct nameidata *ndp;
        int *retval;
 {
        struct nameidata *ndp;
@@ -598,7 +634,7 @@ open(p, uap, retval)
        if (error = vn_open(ndp, p, fmode, cmode)) {
                ffree(fp);
                if (error == ENODEV &&          /* XXX from fdopen */
        if (error = vn_open(ndp, p, fmode, cmode)) {
                ffree(fp);
                if (error == ENODEV &&          /* XXX from fdopen */
-                   p->p_dupfd >= 0 &&
+                   ((short) p->p_dupfd) >= 0 &&
                    (error = dupfdopen(fdp, indx, p->p_dupfd, fmode)) == 0) {
                        *retval = indx;
                        return (0);
                    (error = dupfdopen(fdp, indx, p->p_dupfd, fmode)) == 0) {
                        *retval = indx;
                        return (0);
@@ -642,12 +678,15 @@ open(p, uap, retval)
 /*
  * Creat system call.
  */
 /*
  * Creat system call.
  */
+
+struct ocreat_args {
+       char    *fname;
+       int     fmode;
+};
+
 ocreat(p, uap, retval)
        struct proc *p;
 ocreat(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               int     fmode;
-       } *uap;
+       register struct ocreat_args *uap;
        int *retval;
 {
        struct newargs {
        int *retval;
 {
        struct newargs {
@@ -666,14 +705,17 @@ ocreat(p, uap, retval)
 /*
  * Mknod system call.
  */
 /*
  * Mknod system call.
  */
+
+struct mknod_args {
+       char    *fname;
+       int     fmode;
+       int     dev;
+};
+
 /* ARGSUSED */
 mknod(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 mknod(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               int     fmode;
-               int     dev;
-       } *uap;
+       register struct mknod_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -731,13 +773,16 @@ out:
 /*
  * Mkfifo system call.
  */
 /*
  * Mkfifo system call.
  */
+
+struct mkfifo_args {
+       char    *fname;
+       int     fmode;
+};
+
 /* ARGSUSED */
 mkfifo(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 mkfifo(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               int     fmode;
-       } *uap;
+       register struct mkfifo_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -773,13 +818,16 @@ mkfifo(p, uap, retval)
 /*
  * Link system call.
  */
 /*
  * Link system call.
  */
+
+struct link_args {
+       char    *target;
+       char    *linkname;
+};
+
 /* ARGSUSED */
 link(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 link(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *target;
-               char    *linkname;
-       } *uap;
+       register struct link_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -829,13 +877,16 @@ out1:
 /*
  * Make a symbolic link.
  */
 /*
  * Make a symbolic link.
  */
+
+struct symlink_args {
+       char    *target;
+       char    *linkname;
+};
+
 /* ARGSUSED */
 symlink(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 symlink(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *target;
-               char    *linkname;
-       } *uap;
+       register struct symlink_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -874,12 +925,15 @@ out:
 /*
  * Delete a name from the filesystem.
  */
 /*
  * Delete a name from the filesystem.
  */
+
+struct unlink_args {
+       char    *fname;
+};
+
 /* ARGSUSED */
 unlink(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 unlink(p, uap, retval)
        struct proc *p;
-       struct args {
-               char    *fname;
-       } *uap;
+       struct unlink_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -922,13 +976,16 @@ out:
 /*
  * Seek system call.
  */
 /*
  * Seek system call.
  */
+
+struct lseek_args {
+       int     fdes;
+       off_t   off;
+       int     sbase;
+};
+
 lseek(p, uap, retval)
        struct proc *p;
 lseek(p, uap, retval)
        struct proc *p;
-       register struct args {
-               int     fdes;
-               off_t   off;
-               int     sbase;
-       } *uap;
+       register struct lseek_args *uap;
        off_t *retval;
 {
        struct ucred *cred = p->p_ucred;
        off_t *retval;
 {
        struct ucred *cred = p->p_ucred;
@@ -969,13 +1026,16 @@ lseek(p, uap, retval)
 /*
  * Check access permissions.
  */
 /*
  * Check access permissions.
  */
+
+struct saccess_args {
+       char    *fname;
+       int     fmode;
+};
+
 /* ARGSUSED */
 saccess(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 saccess(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               int     fmode;
-       } *uap;
+       register struct saccess_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1020,13 +1080,16 @@ out1:
  * Stat system call.
  * This version follows links.
  */
  * Stat system call.
  * This version follows links.
  */
+
+struct stat_args {
+       char    *fname;
+       struct stat *ub;
+};
+
 /* ARGSUSED */
 stat(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 stat(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               struct stat *ub;
-       } *uap;
+       register struct stat_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1052,13 +1115,16 @@ stat(p, uap, retval)
  * Lstat system call.
  * This version does not follow links.
  */
  * Lstat system call.
  * This version does not follow links.
  */
+
+struct lstat_args {
+       char    *fname;
+       struct stat *ub;
+};
+
 /* ARGSUSED */
 lstat(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 lstat(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               struct stat *ub;
-       } *uap;
+       register struct lstat_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1083,14 +1149,17 @@ lstat(p, uap, retval)
 /*
  * Return target name of a symbolic link.
  */
 /*
  * Return target name of a symbolic link.
  */
+
+struct readlink_args {
+       char    *name;
+       char    *buf;
+       int     count;
+};
+
 /* ARGSUSED */
 readlink(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 readlink(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *name;
-               char    *buf;
-               int     count;
-       } *uap;
+       register struct readlink_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1130,13 +1199,16 @@ out:
 /*
  * Change flags of a file given path name.
  */
 /*
  * Change flags of a file given path name.
  */
+
+struct chflags_args {
+       char    *fname;
+       int     flags;
+};
+
 /* ARGSUSED */
 chflags(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 chflags(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               int     flags;
-       } *uap;
+       register struct chflags_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1167,13 +1239,16 @@ out:
 /*
  * Change flags of a file given a file descriptor.
  */
 /*
  * Change flags of a file given a file descriptor.
  */
+
+struct fdchflags_args {
+       int     fd;
+       int     flags;
+};
+
 /* ARGSUSED */
 fchflags(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 fchflags(p, uap, retval)
        struct proc *p;
-       register struct args {
-               int     fd;
-               int     flags;
-       } *uap;
+       register struct fdchflags_args *uap;
        int *retval;
 {
        struct vattr vattr;
        int *retval;
 {
        struct vattr vattr;
@@ -1200,13 +1275,16 @@ out:
 /*
  * Change mode of a file given path name.
  */
 /*
  * Change mode of a file given path name.
  */
+
+struct chmod_args {
+       char    *fname;
+       int     fmode;
+};
+
 /* ARGSUSED */
 chmod(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 chmod(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               int     fmode;
-       } *uap;
+       register struct chmod_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1237,13 +1315,16 @@ out:
 /*
  * Change mode of a file given a file descriptor.
  */
 /*
  * Change mode of a file given a file descriptor.
  */
+
+struct fchmod_args {
+       int     fd;
+       int     fmode;
+};
+
 /* ARGSUSED */
 fchmod(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 fchmod(p, uap, retval)
        struct proc *p;
-       register struct args {
-               int     fd;
-               int     fmode;
-       } *uap;
+       register struct fchmod_args *uap;
        int *retval;
 {
        struct vattr vattr;
        int *retval;
 {
        struct vattr vattr;
@@ -1270,14 +1351,17 @@ out:
 /*
  * Set ownership given a path name.
  */
 /*
  * Set ownership given a path name.
  */
+
+struct chown_args {
+       char    *fname;
+       int     uid;
+       int     gid;
+};
+
 /* ARGSUSED */
 chown(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 chown(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               int     uid;
-               int     gid;
-       } *uap;
+       register struct chown_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1309,14 +1393,17 @@ out:
 /*
  * Set ownership given a file descriptor.
  */
 /*
  * Set ownership given a file descriptor.
  */
+
+struct fchown_args {
+       int     fd;
+       int     uid;
+       int     gid;
+};
+
 /* ARGSUSED */
 fchown(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 fchown(p, uap, retval)
        struct proc *p;
-       register struct args {
-               int     fd;
-               int     uid;
-               int     gid;
-       } *uap;
+       register struct fchown_args *uap;
        int *retval;
 {
        struct vattr vattr;
        int *retval;
 {
        struct vattr vattr;
@@ -1344,13 +1431,16 @@ out:
 /*
  * Set the access and modification times of a file.
  */
 /*
  * Set the access and modification times of a file.
  */
+
+struct utimes_args {
+       char    *fname;
+       struct  timeval *tptr;
+};
+
 /* ARGSUSED */
 utimes(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 utimes(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               struct  timeval *tptr;
-       } *uap;
+       register struct utimes_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1385,13 +1475,16 @@ out:
 /*
  * Truncate a file given its path name.
  */
 /*
  * Truncate a file given its path name.
  */
+
+struct truncate_args {
+       char    *fname;
+       off_t   length;
+};
+
 /* ARGSUSED */
 truncate(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 truncate(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-               off_t   length;
-       } *uap;
+       register struct truncate_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1425,13 +1518,16 @@ out:
 /*
  * Truncate a file given a file descriptor.
  */
 /*
  * Truncate a file given a file descriptor.
  */
+
+struct ftruncate_args {
+       int     fd;
+       off_t   length;
+};
+
 /* ARGSUSED */
 ftruncate(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 ftruncate(p, uap, retval)
        struct proc *p;
-       register struct args {
-               int     fd;
-               off_t   length;
-       } *uap;
+       register struct ftruncate_args *uap;
        int *retval;
 {
        struct vattr vattr;
        int *retval;
 {
        struct vattr vattr;
@@ -1462,12 +1558,15 @@ out:
 /*
  * Synch an open file.
  */
 /*
  * Synch an open file.
  */
+
+struct fsync_args {
+       int     fd;
+};
+
 /* ARGSUSED */
 fsync(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 fsync(p, uap, retval)
        struct proc *p;
-       struct args {
-               int     fd;
-       } *uap;
+       struct fsync_args *uap;
        int *retval;
 {
        register struct vnode *vp;
        int *retval;
 {
        register struct vnode *vp;
@@ -1489,13 +1588,16 @@ fsync(p, uap, retval)
  * Source and destination must either both be directories, or both
  * not be directories.  If target is a directory, it must be empty.
  */
  * Source and destination must either both be directories, or both
  * not be directories.  If target is a directory, it must be empty.
  */
+
+struct rename_args {
+       char    *from;
+       char    *to;
+};
+
 /* ARGSUSED */
 rename(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 rename(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *from;
-               char    *to;
-       } *uap;
+       register struct rename_args *uap;
        int *retval;
 {
        register struct vnode *tvp, *fvp, *tdvp;
        int *retval;
 {
        register struct vnode *tvp, *fvp, *tdvp;
@@ -1565,7 +1667,8 @@ out:
        vrele(tond.ni_startdir);
        FREE(tond.ni_pnbuf, M_NAMEI);
 out1:
        vrele(tond.ni_startdir);
        FREE(tond.ni_pnbuf, M_NAMEI);
 out1:
-       vrele(fromnd.ni_startdir);
+       if (fromnd.ni_startdir)
+               vrele(fromnd.ni_startdir);
        FREE(fromnd.ni_pnbuf, M_NAMEI);
        if (error == -1)
                return (0);
        FREE(fromnd.ni_pnbuf, M_NAMEI);
        if (error == -1)
                return (0);
@@ -1575,13 +1678,16 @@ out1:
 /*
  * Mkdir system call.
  */
 /*
  * Mkdir system call.
  */
+
+struct mkdir_args {
+       char    *name;
+       int     dmode;
+};
+
 /* ARGSUSED */
 mkdir(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 mkdir(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *name;
-               int     dmode;
-       } *uap;
+       register struct mkdir_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1618,12 +1724,15 @@ mkdir(p, uap, retval)
 /*
  * Rmdir system call.
  */
 /*
  * Rmdir system call.
  */
+
+struct rmdir_args {
+       char    *name;
+};
+
 /* ARGSUSED */
 rmdir(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 rmdir(p, uap, retval)
        struct proc *p;
-       struct args {
-               char    *name;
-       } *uap;
+       struct rmdir_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;
@@ -1671,14 +1780,17 @@ out:
 /*
  * Read a block of directory entries in a file system independent format.
  */
 /*
  * Read a block of directory entries in a file system independent format.
  */
+
+struct getdirentries_args {
+       int     fd;
+       char    *buf;
+       unsigned count;
+       long    *basep;
+};
+
 getdirentries(p, uap, retval)
        struct proc *p;
 getdirentries(p, uap, retval)
        struct proc *p;
-       register struct args {
-               int     fd;
-               char    *buf;
-               unsigned count;
-               long    *basep;
-       } *uap;
+       register struct getdirentries_args *uap;
        int *retval;
 {
        register struct vnode *vp;
        int *retval;
 {
        register struct vnode *vp;
@@ -1718,12 +1830,15 @@ getdirentries(p, uap, retval)
 /*
  * Set the mode mask for creation of filesystem nodes.
  */
 /*
  * Set the mode mask for creation of filesystem nodes.
  */
+
+struct umask_args {
+       int     mask;
+};
+
 mode_t
 umask(p, uap, retval)
        struct proc *p;
 mode_t
 umask(p, uap, retval)
        struct proc *p;
-       struct args {
-               int     mask;
-       } *uap;
+       struct umask_args *uap;
        int *retval;
 {
        register struct filedesc *fdp = p->p_fd;
        int *retval;
 {
        register struct filedesc *fdp = p->p_fd;
@@ -1737,12 +1852,15 @@ umask(p, uap, retval)
  * Void all references to file by ripping underlying filesystem
  * away from vnode.
  */
  * Void all references to file by ripping underlying filesystem
  * away from vnode.
  */
+
+struct revoke_args {
+       char    *fname;
+};
+
 /* ARGSUSED */
 revoke(p, uap, retval)
        struct proc *p;
 /* ARGSUSED */
 revoke(p, uap, retval)
        struct proc *p;
-       register struct args {
-               char    *fname;
-       } *uap;
+       register struct revoke_args *uap;
        int *retval;
 {
        register struct nameidata *ndp;
        int *retval;
 {
        register struct nameidata *ndp;