M gnot/devpipe.c => gnot/devpipe.c +3 -1
@@ 129,7 129,9 @@ pipewrite(Chan *c, void *va, long n)
postnote(u->p, 1, "sys: write on closed pipe", NExit);
error(0, Egreg);
}
- return streamwrite(c, va, n, 0);
+ n = streamwrite(c, va, n, 0);
+ poperror();
+ return n;
}
void
M gnot/trap.c => gnot/trap.c +5 -3
@@ 5,6 5,7 @@
#include "fns.h"
#include "ureg.h"
#include "io.h"
+#include "errno.h"
void notify(Ureg*);
void noted(Ureg**);
@@ 241,6 242,7 @@ syscall(Ureg *aur)
ulong sp;
ulong r0;
Ureg *ur;
+ char *msg;
u->p->insyscall = 1;
ur = aur;
@@ 263,8 265,8 @@ syscall(Ureg *aur)
u->nerrlab = 0;
ret = -1;
if(!waserror()){
- if(r1 >= sizeof systab/BY2WD){
- pprint("bad sys call number %d pc %lux\n", r1, ((Ureg*)UREGADDR)->pc);
+ if(r0 >= sizeof systab/BY2WD){
+ pprint("bad sys call number %d pc %lux\n", r0, ((Ureg*)UREGADDR)->pc);
msg = "bad sys call";
Bad:
postnote(u->p, 1, msg, NDebug);
@@ 277,7 279,7 @@ syscall(Ureg *aur)
}
if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-4*BY2WD))
validaddr(ur->sp, 4*BY2WD, 0);
- ret = (*systab[r1])((ulong*)(sp+2*BY2WD));
+ ret = (*systab[r0])((ulong*)(sp+2*BY2WD));
}
u->nerrlab = 0;
u->p->insyscall = 0;
M port/chan.c => port/chan.c +3 -1
@@ 490,8 490,10 @@ namec(char *name, int amode, int omode, ulong perm)
switch(amode){
case Aaccess:
- if((nc=walk(c, elem, mntok)) == 0)
+ if((nc=walk(c, elem, mntok)) == 0){
+ print("%d pc %lux\n", u->nerrlab, u->errlab[u->nerrlab-1].pc);
error(0, Enonexist);
+ }
c = nc;
break;
M port/devmnt.c => port/devmnt.c +2 -2
@@ 255,10 255,10 @@ mntclone(Chan *c, Chan *nc)
nc->mnt = c->mnt;
nc->mchan = c->mchan;
nc->mqid = c->qid;
- if(new)
- poperror();
mhfree(mh);
poperror();
+ if(new)
+ poperror();
incref(m);
return nc;
}
M port/devpipe.c => port/devpipe.c +3 -1
@@ 129,7 129,9 @@ pipewrite(Chan *c, void *va, long n)
postnote(u->p, 1, "sys: write on closed pipe", NExit);
error(0, Egreg);
}
- return streamwrite(c, va, n, 0);
+ n = streamwrite(c, va, n, 0);
+ poperror();
+ return n;
}
void
M port/stream.c => port/stream.c +2 -0
@@ 192,6 192,8 @@ freeb(Block *bp)
Bclass *bcp;
int tries;
+ if((bp->flags&S_CLASS) >= Nclass)
+ panic("freeb class");
bcp = &bclass[bp->flags & S_CLASS];
lock(bcp);
bp->rptr = bp->wptr = 0;
M port/sysfile.c => port/sysfile.c +1 -0
@@ 283,6 283,7 @@ sysstat(ulong *arg)
validaddr(arg[0], 1, 0);
c = namec((char*)arg[0], Aaccess, 0, 0);
if(waserror()){
+print("stat error\n");
close(c);
nexterror();
}