M pc/fns.h => pc/fns.h +1 -0
@@ 50,6 50,7 @@ void i8253init(void);
void i8253enable(void);
uvlong i8253read(uvlong*);
void i8259init(void);
+int i8259isr(int);
int i8259enable(Vctl*);
int i8259vecno(int);
int i8259disable(int);
M port/devenv.c => port/devenv.c +15 -4
@@ 90,6 90,7 @@ envopen(Chan *c, int omode)
{
Egrp *eg;
Evalue *e;
+ int trunc;
eg = envgrp(c);
if(c->qid.type & QTDIR) {
@@ 97,21 98,31 @@ envopen(Chan *c, int omode)
error(Eperm);
}
else {
+ trunc = omode & OTRUNC;
if(omode != OREAD && !envwriteable(c))
error(Eperm);
- rlock(eg);
+ if(trunc)
+ wlock(eg);
+ else
+ rlock(eg);
e = envlookup(eg, nil, c->qid.path);
if(e == 0) {
- runlock(eg);
+ if(trunc)
+ wunlock(eg);
+ else
+ runlock(eg);
error(Enonexist);
}
- if((omode & OTRUNC) && e->value) {
+ if(trunc && e->value) {
e->qid.vers++;
free(e->value);
e->value = 0;
e->len = 0;
}
- runlock(eg);
+ if(trunc)
+ wunlock(eg);
+ else
+ runlock(eg);
}
c->mode = openmode(omode);
c->flag |= COPEN;