new system call convention
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Fri, 22 Jun 1990 09:36:34 +0000 (01:36 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Fri, 22 Jun 1990 09:36:34 +0000 (01:36 -0800)
SCCS-vsn: sys/kern/sys_process.c 7.10
SCCS-vsn: sys/kern/kern_acct.c 7.11

usr/src/sys/kern/kern_acct.c
usr/src/sys/kern/sys_process.c

index eb22728..ebc32bc 100644 (file)
@@ -3,23 +3,24 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)kern_acct.c 7.10 (Berkeley) %G%
+ *     @(#)kern_acct.c 7.11 (Berkeley) %G%
  */
 
 #include "param.h"
 #include "systm.h"
 #include "time.h"
 #include "proc.h"
  */
 
 #include "param.h"
 #include "systm.h"
 #include "time.h"
 #include "proc.h"
-#include "user.h"
+#include "ioctl.h"
+#include "termios.h"
+#include "tty.h"
+#undef RETURN
+#include "syscontext.h"
 #include "vnode.h"
 #include "mount.h"
 #include "kernel.h"
 #include "acct.h"
 #include "uio.h"
 #include "syslog.h"
 #include "vnode.h"
 #include "mount.h"
 #include "kernel.h"
 #include "acct.h"
 #include "uio.h"
 #include "syslog.h"
-#include "ioctl.h"
-#include "termios.h"
-#include "tty.h"
 
 /*
  * Values associated with enabling and disabling accounting
 
 /*
  * Values associated with enabling and disabling accounting
@@ -37,18 +38,22 @@ struct      vnode *savacctp;
 /*
  * Perform process accounting functions.
  */
 /*
  * Perform process accounting functions.
  */
-sysacct()
+/* ARGSUSED */
+sysacct(p, uap, retval)
+       struct proc *p;
+       struct args {
+               char    *fname;
+       } *uap;
+       int *retval;
 {
        register struct vnode *vp;
 {
        register struct vnode *vp;
-       register struct a {
-               char    *fname;
-       } *uap = (struct a *)u.u_ap;
        register struct nameidata *ndp = &u.u_nd;
        extern int acctwatch();
        struct vnode *oacctp;
        register struct nameidata *ndp = &u.u_nd;
        extern int acctwatch();
        struct vnode *oacctp;
+       int error;
 
 
-       if (u.u_error = suser(u.u_cred, &u.u_acflag))
-               return;
+       if (error = suser(u.u_cred, &u.u_acflag))
+               RETURN (error);
        if (savacctp) {
                acctp = savacctp;
                savacctp = NULL;
        if (savacctp) {
                acctp = savacctp;
                savacctp = NULL;
@@ -59,29 +64,28 @@ sysacct()
                        vrele(vp);
                        untimeout(acctwatch, (caddr_t)&chk);
                }
                        vrele(vp);
                        untimeout(acctwatch, (caddr_t)&chk);
                }
-               return;
+               RETURN (0);
        }
        ndp->ni_nameiop = LOOKUP | FOLLOW;
        ndp->ni_segflg = UIO_USERSPACE;
        ndp->ni_dirp = uap->fname;
        }
        ndp->ni_nameiop = LOOKUP | FOLLOW;
        ndp->ni_segflg = UIO_USERSPACE;
        ndp->ni_dirp = uap->fname;
-       if (u.u_error = namei(ndp))
-               return;
+       if (error = namei(ndp))
+               RETURN (error);
        vp = ndp->ni_vp;
        if (vp->v_type != VREG) {
        vp = ndp->ni_vp;
        if (vp->v_type != VREG) {
-               u.u_error = EACCES;
                vrele(vp);
                vrele(vp);
-               return;
+               RETURN (EACCES);
        }
        if (vp->v_mount->mnt_flag & MNT_RDONLY) {
        }
        if (vp->v_mount->mnt_flag & MNT_RDONLY) {
-               u.u_error = EROFS;
                vrele(vp);
                vrele(vp);
-               return;
+               RETURN (EROFS);
        }
        oacctp = acctp;
        acctp = vp;
        if (oacctp)
                vrele(oacctp);
        acctwatch(&chk);
        }
        oacctp = acctp;
        acctp = vp;
        if (oacctp)
                vrele(oacctp);
        acctwatch(&chk);
+       RETURN (0);
 }
 
 /*
 }
 
 /*
@@ -116,7 +120,8 @@ acctwatch(resettime)
 /*
  * On exit, write a record on the accounting file.
  */
 /*
  * On exit, write a record on the accounting file.
  */
-acct()
+acct(p)
+       register struct proc *p;
 {
        register struct rusage *ru;
        struct vnode *vp;
 {
        register struct rusage *ru;
        struct vnode *vp;
@@ -124,10 +129,9 @@ acct()
        int i, s;
        struct acct acctbuf;
        register struct acct *ap = &acctbuf;
        int i, s;
        struct acct acctbuf;
        register struct acct *ap = &acctbuf;
-       register struct proc *p = u.u_procp;
 
        if ((vp = acctp) == NULL)
 
        if ((vp = acctp) == NULL)
-               return;
+               return (0);
        bcopy(p->p_comm, ap->ac_comm, sizeof(ap->ac_comm));
        ru = &u.u_ru;
        s = splclock();
        bcopy(p->p_comm, ap->ac_comm, sizeof(ap->ac_comm));
        ru = &u.u_ru;
        s = splclock();
@@ -140,8 +144,8 @@ acct()
        timevalsub(&t, &u.u_start);
        ap->ac_etime = compress(t.tv_sec, t.tv_usec);
        ap->ac_btime = u.u_start.tv_sec;
        timevalsub(&t, &u.u_start);
        ap->ac_etime = compress(t.tv_sec, t.tv_usec);
        ap->ac_btime = u.u_start.tv_sec;
-       ap->ac_uid = u.u_procp->p_ruid;
-       ap->ac_gid = u.u_procp->p_rgid;
+       ap->ac_uid = p->p_ruid;
+       ap->ac_gid = p->p_rgid;
        t = st;
        timevaladd(&t, &ut);
        if (i = t.tv_sec * hz + t.tv_usec / tick)
        t = st;
        timevaladd(&t, &ut);
        if (i = t.tv_sec * hz + t.tv_usec / tick)
@@ -155,8 +159,8 @@ acct()
        else
                ap->ac_tty = NODEV;
        ap->ac_flag = u.u_acflag;
        else
                ap->ac_tty = NODEV;
        ap->ac_flag = u.u_acflag;
-       u.u_error = vn_rdwr(UIO_WRITE, vp, (caddr_t)ap, sizeof (acctbuf),
-               (off_t)0, UIO_SYSSPACE, IO_UNIT|IO_APPEND, u.u_cred, (int *)0);
+       return (vn_rdwr(UIO_WRITE, vp, (caddr_t)ap, sizeof (acctbuf),
+               (off_t)0, UIO_SYSSPACE, IO_UNIT|IO_APPEND, u.u_cred, (int *)0));
 }
 
 /*
 }
 
 /*
index 7d86cde..20cd58c 100644 (file)
@@ -3,12 +3,12 @@
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
  * All rights reserved.  The Berkeley software License Agreement
  * specifies the terms and conditions for redistribution.
  *
- *     @(#)sys_process.c       7.9 (Berkeley) %G%
+ *     @(#)sys_process.c       7.10 (Berkeley) %G%
  */
 
 #define IPCREG
 #include "param.h"
  */
 
 #define IPCREG
 #include "param.h"
-#include "user.h"
+#include "syscontext.h"
 #include "proc.h"
 #include "vnode.h"
 #include "text.h"
 #include "proc.h"
 #include "vnode.h"
 #include "text.h"
@@ -43,27 +43,26 @@ struct {
 /*
  * sys-trace system call.
  */
 /*
  * sys-trace system call.
  */
-ptrace()
-{
-       register struct proc *p;
-       register struct a {
+ptrace(curp, uap, retval)
+       struct proc *curp;
+       register struct args {
                int     req;
                int     pid;
                int     *addr;
                int     data;
        } *uap;
                int     req;
                int     pid;
                int     *addr;
                int     data;
        } *uap;
+       int *retval;
+{
+       register struct proc *p;
 
 
-       uap = (struct a *)u.u_ap;
        if (uap->req <= 0) {
        if (uap->req <= 0) {
-               u.u_procp->p_flag |= STRC;
-               return;
+               curp->p_flag |= STRC;
+               RETURN (0);
        }
        p = pfind(uap->pid);
        }
        p = pfind(uap->pid);
-       if (p == 0 || p->p_stat != SSTOP || p->p_ppid != u.u_procp->p_pid ||
-           !(p->p_flag & STRC)) {
-               u.u_error = ESRCH;
-               return;
-       }
+       if (p == 0 || p->p_stat != SSTOP || p->p_ppid != curp->p_pid ||
+           !(p->p_flag & STRC))
+               RETURN (ESRCH);
        while (ipc.ip_lock)
                sleep((caddr_t)&ipc, IPCPRI);
        ipc.ip_lock = p->p_pid;
        while (ipc.ip_lock)
                sleep((caddr_t)&ipc, IPCPRI);
        ipc.ip_lock = p->p_pid;
@@ -76,11 +75,12 @@ ptrace()
                        setrun(p);
                sleep((caddr_t)&ipc, IPCPRI);
        }
                        setrun(p);
                sleep((caddr_t)&ipc, IPCPRI);
        }
-       u.u_r.r_val1 = ipc.ip_data;
-       if (ipc.ip_req < 0)
-               u.u_error = EIO;
+       *retval = ipc.ip_data;
        ipc.ip_lock = 0;
        wakeup((caddr_t)&ipc);
        ipc.ip_lock = 0;
        wakeup((caddr_t)&ipc);
+       if (ipc.ip_req < 0)
+               RETURN (EIO);
+       RETURN (0);
 }
 
 #define        PHYSOFF(p, o) \
 }
 
 #define        PHYSOFF(p, o) \