TODO: acct is not compatible / all other procedures are
This commit is contained in:
parent
b31f9ab934
commit
8d8dafd919
|
|
@ -1,9 +1,31 @@
|
||||||
#include "sys/param.h"
|
/******************************************************************************
|
||||||
#include "sys/systm.h"
|
*******************************************************************************
|
||||||
#include "sys/acct.h"
|
|
||||||
#include "sys/dir.h"
|
W E G A - Quelle
|
||||||
#include "sys/user.h"
|
|
||||||
#include "sys/inode.h"
|
KERN 3.2 Modul: acct.c
|
||||||
|
|
||||||
|
|
||||||
|
Bearbeiter: O. Lehmann
|
||||||
|
Datum: 17.05.08
|
||||||
|
Version: 1.0
|
||||||
|
|
||||||
|
*******************************************************************************
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
char acctwstr[] = "@[$]acct.c Rev : 4.1 08/27/83 11:53:34";
|
||||||
|
|
||||||
|
|
||||||
|
#include <sys/param.h>
|
||||||
|
#include <sys/sysinfo.h>
|
||||||
|
#include <sys/systm.h>
|
||||||
|
#include <sys/inode.h>
|
||||||
|
#include <sys/dir.h>
|
||||||
|
#include <sys/acct.h>
|
||||||
|
#include <sys/s.out.h>
|
||||||
|
#include <sys/mmu.h>
|
||||||
|
#include <sys/user.h>
|
||||||
|
#include <sys/proc.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Perform process accounting functions.
|
* Perform process accounting functions.
|
||||||
|
|
@ -17,9 +39,9 @@ sysacct()
|
||||||
} *uap;
|
} *uap;
|
||||||
|
|
||||||
uap = (struct a *)u.u_ap;
|
uap = (struct a *)u.u_ap;
|
||||||
if (!suser())
|
if (suser()) {
|
||||||
return;
|
if((!u.u_segmented && ((long)uap->fname==(USEGW << 16))) ||
|
||||||
if (uap->fname==NULL) {
|
( u.u_segmented && (uap->fname==NULL))) {
|
||||||
if (acctp) {
|
if (acctp) {
|
||||||
plock(acctp);
|
plock(acctp);
|
||||||
iput(acctp);
|
iput(acctp);
|
||||||
|
|
@ -31,11 +53,7 @@ sysacct()
|
||||||
u.u_error = EBUSY;
|
u.u_error = EBUSY;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifndef PNETDFS
|
|
||||||
ip = namei(uchar, 0);
|
ip = namei(uchar, 0);
|
||||||
#else
|
|
||||||
ip = namei(uchar, 0, NULL);
|
|
||||||
#endif
|
|
||||||
if(ip == NULL)
|
if(ip == NULL)
|
||||||
return;
|
return;
|
||||||
if((ip->i_mode & IFMT) != IFREG) {
|
if((ip->i_mode & IFMT) != IFREG) {
|
||||||
|
|
@ -45,43 +63,43 @@ sysacct()
|
||||||
}
|
}
|
||||||
acctp = ip;
|
acctp = ip;
|
||||||
prele(ip);
|
prele(ip);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On exit, write a record on the accounting file.
|
* On exit, write a record on the accounting file.
|
||||||
*/
|
*/
|
||||||
acct(st)
|
acct()
|
||||||
{
|
{
|
||||||
register struct inode *ip;
|
register struct inode *ip;
|
||||||
|
register int i;
|
||||||
off_t siz;
|
off_t siz;
|
||||||
|
|
||||||
if ((ip=acctp)==NULL)
|
if ((ip=acctp)) {
|
||||||
return;
|
|
||||||
plock(ip);
|
plock(ip);
|
||||||
bcopy(u.u_comm,acctbuf.ac_comm,sizeof(acctbuf.ac_comm));
|
for (i=0; i<sizeof(acctbuf.ac_comm); i++)
|
||||||
acctbuf.ac_btime = u.u_start;
|
acctbuf.ac_comm[i] = u.u_comm[i];
|
||||||
acctbuf.ac_utime = compress(u.u_utime);
|
acctbuf.ac_utime = compress(u.u_utime);
|
||||||
acctbuf.ac_stime = compress(u.u_stime);
|
acctbuf.ac_stime = compress(u.u_stime);
|
||||||
acctbuf.ac_etime = compress(lbolt - u.u_ticks);
|
acctbuf.ac_etime = compress(time - u.u_start);
|
||||||
acctbuf.ac_mem = compress(u.u_mem);
|
acctbuf.ac_btime = u.u_start;
|
||||||
acctbuf.ac_io = compress(u.u_ioch);
|
|
||||||
acctbuf.ac_rw = compress(u.u_ior+u.u_iow);
|
|
||||||
acctbuf.ac_uid = u.u_ruid;
|
acctbuf.ac_uid = u.u_ruid;
|
||||||
acctbuf.ac_gid = u.u_rgid;
|
acctbuf.ac_gid = u.u_rgid;
|
||||||
acctbuf.ac_tty = u.u_ttyp ? u.u_ttyd : NODEV;
|
acctbuf.ac_mem = 0;
|
||||||
acctbuf.ac_stat = st;
|
acctbuf.ac_io = 0;
|
||||||
|
acctbuf.ac_tty = u.u_ttyd;
|
||||||
acctbuf.ac_flag = u.u_acflag;
|
acctbuf.ac_flag = u.u_acflag;
|
||||||
siz = ip->i_size;
|
siz = ip->i_size;
|
||||||
u.u_offset = siz;
|
u.u_offset = siz;
|
||||||
u.u_base = (caddr_t)&acctbuf;
|
u.u_base.l = (caddr_t)&acctbuf;
|
||||||
u.u_count = sizeof(acctbuf);
|
u.u_count = sizeof(acctbuf);
|
||||||
u.u_segflg = 1;
|
u.u_segflg = 1;
|
||||||
u.u_error = 0;
|
u.u_error = 0;
|
||||||
u.u_limit = (daddr_t)5000;
|
|
||||||
writei(ip);
|
writei(ip);
|
||||||
if(u.u_error)
|
if(u.u_error)
|
||||||
ip->i_size = siz;
|
ip->i_size = siz;
|
||||||
prele(ip);
|
prele(ip);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -107,3 +125,24 @@ register time_t t;
|
||||||
}
|
}
|
||||||
return((exp<<13) + t);
|
return((exp<<13) + t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* lock user into core as much
|
||||||
|
* as possible. swapping may still
|
||||||
|
* occur if core grows.
|
||||||
|
*/
|
||||||
|
syslock()
|
||||||
|
{
|
||||||
|
register struct proc *p;
|
||||||
|
register struct a {
|
||||||
|
int flag;
|
||||||
|
} *uap;
|
||||||
|
|
||||||
|
uap = (struct a *)u.u_ap;
|
||||||
|
if(suser()) {
|
||||||
|
p = u.u_procp;
|
||||||
|
p->p_flag &= ~SULOCK;
|
||||||
|
if(uap->flag)
|
||||||
|
p->p_flag |= SULOCK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue