commit 4dd07e012c124921328df5d91c272c63e015bdd5 from: rsc date: Tue Dec 28 19:25:16 2004 UTC check against plan 9 commit - 727facb60539f522635f0d8978435ce4680fecd6 commit + 4dd07e012c124921328df5d91c272c63e015bdd5 blob - 4c8ae90c9b626b05625924e3df58f317bd83155a blob + 741b692fb307f7857e574d541fa87e5a62c5e6f0 --- src/libbio/bgetc.c +++ src/libbio/bgetc.c @@ -26,6 +26,7 @@ loop: i = read(bp->fid, bp->bbuf, bp->bsize); bp->gbuf = bp->bbuf; if(i <= 0) { + bp->state = Bracteof; if(i < 0) bp->state = Binactive; return Beof; blob - 33bf581286e1e9d787c0d38e50f40e95b41910ed blob + 1a8c252c6ca8b7a54174fff0326bd06f3d604952 --- src/libbio/binit.c +++ src/libbio/binit.c @@ -61,7 +61,7 @@ Binits(Biobuf *bp, int f, int mode, unsigned char *p, 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; @@ -86,7 +86,7 @@ Binits(Biobuf *bp, int f, int mode, unsigned char *p, bp->flag = 0; bp->rdline = 0; bp->offset = 0; -/* bp->runesize = 0; */ + bp->runesize = 0; return 0; } @@ -116,7 +116,7 @@ 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; blob - 5f0fba5925c7a9047931ae1075e6c026e8ab9d85 blob + d05badaabf338f3103e0de2f15454f77e7de3c66 --- src/libbio/bputc.c +++ src/libbio/bputc.c @@ -4,26 +4,17 @@ int Bputc(Biobuf *bp, int c) { - int i, j; + int i; -loop: - i = bp->ocount; - j = i+1; - if(i != 0) { - bp->ocount = j; - bp->ebuf[i] = c; - return 0; + for(;;) { + i = bp->ocount; + if(i) { + bp->ebuf[i++] = c; + bp->ocount = i; + return 0; + } + if(Bflush(bp) == Beof) + break; } - if(bp->state != Bwactive) - return Beof; - j = write(bp->fid, bp->bbuf, bp->bsize); - if(j == bp->bsize) { - bp->ocount = -bp->bsize; - bp->offset += j; - goto loop; - } - fprint(2, "Bputc: write error\n"); - bp->state = Binactive; - bp->ocount = 0; return Beof; } blob - a3ae0e994d4aa591877fd4fc4fbb22c0a7211b38 blob + 44218fd695cf727a8a4bbd9bf8f4d4d3ca7443ce --- src/libbio/lib9.std.h +++ src/libbio/lib9.std.h @@ -9,6 +9,11 @@ #define OREAD O_RDONLY #define OWRITE O_WRONLY +#define OCEXEC 0 +#define ORCLOSE 0 +#define OTRUNC 0 + + #define nil ((void*)0) typedef long long vlong;