STATUS: 67%
0000 T _exec compatible
0010 T _exece not compatible
0618 T _getxfile not compatible
0fe8 T _setregs compatible
1164 T _rexit compatible
118c T _exit 99% compatible - uses a different temp. reg.
1374 T _wait compatible
1428 T _freeproc compatible
14a2 T _fork compatible
This commit is contained in:
parent
c1957b88e9
commit
e599208e5e
|
|
@ -538,7 +538,7 @@ setregs()
|
||||||
* Remember file name for accounting.
|
* Remember file name for accounting.
|
||||||
*/
|
*/
|
||||||
u.u_acflag &= ~AFORK;
|
u.u_acflag &= ~AFORK;
|
||||||
bcopy((caddr_t)u.u_dent.d_name, (caddr_t)u.u_comm, DIRSIZ);
|
bcopy((caddr_t)u.u_dbuf, (caddr_t)u.u_comm, DIRSIZ);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -605,7 +605,7 @@ exit(rv)
|
||||||
if (q->p_stat == SSTOP)
|
if (q->p_stat == SSTOP)
|
||||||
setrun(q);
|
setrun(q);
|
||||||
} else if (p->p_ppid==q->p_pid)
|
} else if (p->p_ppid==q->p_pid)
|
||||||
psignal(q, SIGSYS);
|
psignal(q, SIGCLD);
|
||||||
if (p->p_pid == q->p_pgrp)
|
if (p->p_pid == q->p_pgrp)
|
||||||
q->p_pgrp = 0;
|
q->p_pgrp = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -621,12 +621,13 @@ exit(rv)
|
||||||
*/
|
*/
|
||||||
wait()
|
wait()
|
||||||
{
|
{
|
||||||
|
int foo,foo2;
|
||||||
register f;
|
register f;
|
||||||
register struct proc *p;
|
register struct proc *p;
|
||||||
|
|
||||||
loop:
|
|
||||||
f = 0;
|
f = 0;
|
||||||
for (p = &proc[1]; p < &proc[Nproc]; p++)
|
loop:
|
||||||
|
for (p = &proc[0]; p < &proc[Nproc]; p++)
|
||||||
if (p->p_ppid == u.u_procp->p_pid) {
|
if (p->p_ppid == u.u_procp->p_pid) {
|
||||||
f++;
|
f++;
|
||||||
if (p->p_stat == SZOMB) {
|
if (p->p_stat == SZOMB) {
|
||||||
|
|
@ -675,40 +676,55 @@ register struct proc *p;
|
||||||
*/
|
*/
|
||||||
fork()
|
fork()
|
||||||
{
|
{
|
||||||
|
int foo,foo2;
|
||||||
register struct proc *p1, *p2;
|
register struct proc *p1, *p2;
|
||||||
register a;
|
register a;
|
||||||
register n;
|
register n;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure there's enough swap space for max
|
||||||
|
* core image, thus reducing chances of running out
|
||||||
|
*/
|
||||||
if (u.u_segmented){
|
if (u.u_segmented){
|
||||||
n = ctod(u.u_tsize + USIZE + u.u_dsize + u.u_ssize);
|
n = ctod(u.u_tsize + USIZE + u.u_dsize + u.u_ssize);
|
||||||
if ((a = malloc(swapmap, n)) == (int)0){
|
if ((a = malloc(swapmap, n)) == 0){
|
||||||
out0: u.u_error = ENOMEM;
|
u.u_error = ENOMEM;
|
||||||
goto out;
|
goto out;
|
||||||
} else
|
} else
|
||||||
mfree(swapmap, n, a);
|
mfree(swapmap, n, a);
|
||||||
} else
|
} else {
|
||||||
if ((a = malloc(swapmap, ctod(Maxmem))) == (int)0)
|
if ((a = malloc(swapmap, ctod(Maxmem))) == 0) {
|
||||||
goto out0;
|
u.u_error = ENOMEM;
|
||||||
else
|
goto out;
|
||||||
|
} else
|
||||||
mfree(swapmap, ctod(Maxmem), a);
|
mfree(swapmap, ctod(Maxmem), a);
|
||||||
for (a=0,p2=0,p1 = &proc[0]; p1 < &proc[Nproc]; p1++){
|
|
||||||
if (p1->p_stat == NULL && p2 == NULL)
|
|
||||||
p2 = p1;
|
|
||||||
if (p1->p_uid == u.u_uid && p1->p_stat)
|
|
||||||
a++;
|
|
||||||
}
|
}
|
||||||
if (!p2 || u.u_uid && ((p2 == &proc[Nproc-1]) || (a>Maxuprc))){
|
a = 0;
|
||||||
|
p2 = NULL;
|
||||||
|
for (p1 = &proc[0]; p1 < &proc[Nproc]; p1++){
|
||||||
|
if (p1->p_stat==NULL && p2==NULL)
|
||||||
|
p2 = p1;
|
||||||
|
else {
|
||||||
|
if (p1->p_uid==u.u_uid && p1->p_stat!=NULL)
|
||||||
|
a++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Disallow if
|
||||||
|
* No processes at all;
|
||||||
|
* not su and too many procs owned; or
|
||||||
|
* not su and would take last slot.
|
||||||
|
*/
|
||||||
|
if (p2==NULL || (u.u_uid!=0 && (p2==&proc[Nproc-1] || a>Maxuprc))) {
|
||||||
u.u_error = EAGAIN;
|
u.u_error = EAGAIN;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
p1 = u.u_procp;
|
p1 = u.u_procp;
|
||||||
if (newproc()){
|
if (newproc()) {
|
||||||
u.u_r.r_val1 = p1->p_pid;
|
u.u_r.r_val1 = p1->p_pid;
|
||||||
u.u_start = time;
|
u.u_start = time;
|
||||||
u.u_mem = p2->p_size;
|
u.u_mem = p2->p_size;
|
||||||
u.u_ioch = 0;
|
u.u_ior = u.u_iow = u.u_ioch = 0;
|
||||||
u.u_iow = 0;
|
|
||||||
u.u_ior = 0;
|
|
||||||
u.u_cstime = 0;
|
u.u_cstime = 0;
|
||||||
u.u_stime = 0;
|
u.u_stime = 0;
|
||||||
u.u_cutime = 0;
|
u.u_cutime = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue