From 72335078034e3cd7edcb1739556b405a3e1e9bf8 Mon Sep 17 00:00:00 2001 From: Charles Forsyth Date: Thu, 6 Jun 2013 20:59:23 +0000 Subject: sync with plan 9 --- libbio/binit.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'libbio/binit.c') diff --git a/libbio/binit.c b/libbio/binit.c index ecbad119..4d9bc785 100644 --- a/libbio/binit.c +++ b/libbio/binit.c @@ -61,7 +61,7 @@ Binits(Biobuf *bp, int f, int mode, uchar *p, int size) p += Bungetsize; /* make room for Bungets */ size -= Bungetsize; - switch(mode) { + switch(mode&~(OCEXEC|ORCLOSE|OTRUNC)) { default: fprint(2, "Bopen: unknown mode %d\n", mode); return Beof; @@ -103,22 +103,21 @@ Bopen(char *name, int mode) Biobuf *bp; int f; - switch(mode) { + switch(mode&~(OCEXEC|ORCLOSE|OTRUNC)) { default: fprint(2, "Bopen: unknown mode %d\n", mode); return 0; case OREAD: f = open(name, OREAD); - if(f < 0) - return 0; break; case OWRITE: - f = create(name, OWRITE, 0666); - if(f < 0) - return 0; + f = create(name, mode, 0666); + break; } + if(f < 0) + return 0; bp = malloc(sizeof(Biobuf)); if(bp == nil) return 0; @@ -130,13 +129,16 @@ Bopen(char *name, int mode) int Bterm(Biobuf *bp) { + int r; deinstall(bp); - Bflush(bp); + r = Bflush(bp); if(bp->flag == Bmagic) { bp->flag = 0; close(bp->fid); + bp->fid = -1; /* prevent accidents */ free(bp); } - return 0; + /* otherwise opened with Binit(s) */ + return r; } -- cgit v1.2.3