From 1dc81cee5c19142c0efe7d2c10b9b4694a218954 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Sun, 7 Apr 2002 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 2002-04-07 --- pc/fns.h | 1 + port/devenv.c | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/pc/fns.h b/pc/fns.h index 7571974bc81406b152cd59b2dc4aba2209efd015..3b9245d35734b4c9aa8ea9b91cf2fc0b1a440825 100644 --- a/pc/fns.h +++ b/pc/fns.h @@ -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); diff --git a/port/devenv.c b/port/devenv.c index 9e0031cc4a5db6f003db30f2783b7b308d0cc05e..a3705aa8120ba0152d430e3540ffb12adc3c894c 100644 --- a/port/devenv.c +++ b/port/devenv.c @@ -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;