summaryrefslogtreecommitdiff
path: root/libbio/binit.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbio/binit.c')
-rw-r--r--libbio/binit.c20
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;
}