From 94d5eb023f266b78f0371db00a496dd14e4ef94e Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Wed, 21 May 2008 19:44:23 +0000 Subject: [PATCH] STATUS: 94% done 0000 T _gtime compatible 000e T _ftime compatible 00a4 T _stime compatible 00d2 T _setuid compatible 012e T _getuid compatible 0148 T _setgid compatible 019a T _getgid compatible 01b4 T _getpid compatible 01d0 T _setpgrp compatible 0206 T _sync compatible 020e T _nice compatible 027c T _unlink compatible 038e T _chdir compatible 0398 T _chroot compatible 03ac T _chdirec compatible 042a T _chmod compatible 04a0 T _chown compatible 04fa T _ssig compatible 0612 T _kill compatible 0722 T _times compatible 077a T _profil compatible 07ac T _sprofil not existent 0872 T _alarm compatible 08aa T _pause compatible 08bc T _umask compatible 08e0 T _utime compatible 09ee T _nosys compatible 09f8 T _nullsys compatible 09fa T _bpt compatible 0a0a T _utssys not compatible 0b0a T _ulimit compatible --- WEGA/src/uts/sys/sys4.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/WEGA/src/uts/sys/sys4.c b/WEGA/src/uts/sys/sys4.c index ad48362..3351905 100644 --- a/WEGA/src/uts/sys/sys4.c +++ b/WEGA/src/uts/sys/sys4.c @@ -33,6 +33,7 @@ char sys4wstr[] = "@[$]sys4.c Rev : 4.2 09/26/83 22:15:02"; #include #include + /* * Everything in this file is a routine implementing a system call. */ @@ -329,21 +330,28 @@ ssig() register struct proc *p; struct a { int signo; - int fun; + long fun; } *uap; + extern int Nproc; uap = (struct a *)u.u_ap; a = uap->signo; - if (a <= 0 || a > NSIG || a == SIGKILL) { + if (a <= 0 || a >= NSIG || a == SIGKILL) { u.u_error = EINVAL; return; } - u.u_r.r_val1 = u.u_signal[a-1]; + if(!u.u_segmented) { + u.u_r.r_val1 = u.u_signal[a-1]; + } else { + u.u_r.r_val1 = u.u_signal[a-1]>> 16; + u.u_r.r_val2 = u.u_signal[a-1]; + } u.u_signal[a-1] = uap->fun; u.u_procp->p_sig &= ~(1L<<(a-1)); + if (a == SIGCLD) { a = u.u_procp->p_pid; - for (p = &proc[1]; p < &proc[NPROC] ; p++) { + for (p = &proc[1]; p < &proc[Nproc] ; p++) { if (a == p->p_ppid && p->p_stat == SZOMB) psignal(u.u_procp, SIGCLD); } @@ -358,7 +366,8 @@ kill() int pid; int signo; } *uap; - int f; + register int f; + extern int Nproc; uap = (struct a *)u.u_ap; if (uap->signo < 0 || uap->signo > NSIG) { @@ -376,7 +385,7 @@ kill() u.u_error = ESRCH; return; } - for(; p < &proc[NPROC]; p++) { + for(; p < &proc[Nproc]; p++) { if (p->p_stat == NULL) continue; if (arg > 0 && p->p_pid != arg) @@ -406,12 +415,14 @@ times() register struct a { time_t (*times)[4]; } *uap; + register fcw; uap = (struct a *)u.u_ap; - if (copyout((caddr_t)&u.u_utime, (caddr_t)uap->times, sizeof(*uap->times))) + if (copyout((caddr_t)&u.u_utime, (caddr_t)uap->times, sizeof(*uap->times))<0) u.u_error = EFAULT; - dvi(); - u.u_r.r_time = lbolt; + fcw = dvi(); + u.u_r.r_time = lifetime; + evi(fcw); } profil() @@ -531,6 +542,11 @@ nullsys() { } +bpt() +{ + psignal(u.u_procp, SIGTRAP); +} + utssys() { register i;