diff options
| author | Charles Forsyth <charles.forsyth@gmail.com> | 2013-06-06 20:59:23 +0000 |
|---|---|---|
| committer | Charles Forsyth <charles.forsyth@gmail.com> | 2013-06-06 20:59:23 +0000 |
| commit | 72335078034e3cd7edcb1739556b405a3e1e9bf8 (patch) | |
| tree | 9e1baa8ea80bfab1885cfcf224a62040a417fa74 /libbio/binit.c | |
| parent | 3a0400887de9df81e4d4fb3bc3dec52af2d49f80 (diff) | |
sync with plan 9
Diffstat (limited to 'libbio/binit.c')
| -rw-r--r-- | libbio/binit.c | 20 |
1 files changed, 11 insertions, 9 deletions
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; } |
