STATUS: 83%

0000 T _bmap		not compatible
    0274 T _passc		compatible
    0306 T _cpass		compatible
    03a2 T _nodev		compatible
    03ac T _nulldev		compatible
    03ae T _timeout		compatible
This commit is contained in:
Oliver Lehmann 2008-05-30 19:56:26 +00:00
parent b2c92fe441
commit d6063103d6
1 changed files with 53 additions and 35 deletions

View File

@ -139,6 +139,37 @@ daddr_t bn;
return(nb); return(nb);
} }
/*
* Pass back c to the user at his location u_base;
* update u_base, u_count, and u_offset. Return -1
* on the last character of the user's read.
* u_base is in the user address space unless u_segflg is set.
*/
passc(c)
register char c;
{
if(u.u_segflg == 1) {
*u.u_base.l = c;
} else {
if(!u.u_segflg || u.u_segmented) {
if(subyte(u.u_base.l,c)) {
u.u_error = EFAULT;
return(-1);
}
} else {
if(suibyte(u.u_base.right,c)) {
u.u_error = EFAULT;
return(-1);
}
}
}
u.u_count--;
u.u_offset++;
u.u_base.l++;
return(u.u_count == 0? -1: 0);
}
/* /*
* Pick up and return the next character from the user's * Pick up and return the next character from the user's
* write call at location u_base; * write call at location u_base;
@ -148,20 +179,30 @@ daddr_t bn;
*/ */
cpass() cpass()
{ {
register c, id; char c;
if(u.u_count == 0) if(!u.u_count)
return(-1); return(-1);
if((id = u.u_segflg) == 1)
c = *u.u_base; if(u.u_segflg == 1) {
else c = *u.u_base.l;
if((c = id==0?fubyte(u.u_base):fuibyte(u.u_base)) < 0) { } else {
u.u_error = EFAULT; if(!u.u_segflg || u.u_segmented) {
return(-1); if(fubyte(u.u_base.l,&c)) {
} u.u_error = EFAULT;
return(-1);
}
} else {
if(fuibyte(u.u_base.right,&c)) {
u.u_error = EFAULT;
return(-1);
}
}
}
u.u_count--; u.u_count--;
u.u_offset++; u.u_offset++;
u.u_base++; u.u_base.l++;
return(c&0377); return(c&0377);
} }
@ -182,30 +223,6 @@ nulldev()
{ {
} }
/*
* Pass back c to the user at his location u_base;
* update u_base, u_count, and u_offset. Return -1
* on the last character of the user's read.
* u_base is in the user address space unless u_segflg is set.
*/
passc(c)
register c;
{
register id;
if((id = u.u_segflg) == 1)
*u.u_base = c;
else
if(id?suibyte(u.u_base, c):subyte(u.u_base, c) < 0) {
u.u_error = EFAULT;
return(-1);
}
u.u_count--;
u.u_offset++;
u.u_base++;
return(u.u_count == 0? -1: 0);
}
/* /*
* timeout is called to arrange that fun(arg) is called in tim/HZ seconds. * timeout is called to arrange that fun(arg) is called in tim/HZ seconds.
* An entry is sorted into the callout structure. * An entry is sorted into the callout structure.
@ -222,7 +239,8 @@ caddr_t arg;
{ {
register struct callo *p1, *p2; register struct callo *p1, *p2;
register int t; register int t;
int s; register int s;
long foo1,foo2;
t = tim; t = tim;
p1 = &callout[0]; p1 = &callout[0];