tcheck against plan 9 - plan9port - [fork] Plan 9 from user space (HTM) git clone git://src.adamsgaard.dk/plan9port (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit 4dd07e012c124921328df5d91c272c63e015bdd5 (DIR) parent 727facb60539f522635f0d8978435ce4680fecd6 (HTM) Author: rsc <devnull@localhost> Date: Tue, 28 Dec 2004 19:25:16 +0000 check against plan 9 Diffstat: M src/libbio/bgetc.c | 1 + M src/libbio/binit.c | 6 +++--- M src/libbio/bputc.c | 29 ++++++++++------------------- M src/libbio/lib9.std.h | 5 +++++ 4 files changed, 19 insertions(+), 22 deletions(-) --- (DIR) diff --git a/src/libbio/bgetc.c b/src/libbio/bgetc.c t@@ -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; (DIR) diff --git a/src/libbio/binit.c b/src/libbio/binit.c t@@ -61,7 +61,7 @@ Binits(Biobuf *bp, int f, int mode, unsigned char *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; t@@ -86,7 +86,7 @@ Binits(Biobuf *bp, int f, int mode, unsigned char *p, int size) bp->flag = 0; bp->rdline = 0; bp->offset = 0; -/* bp->runesize = 0; */ + bp->runesize = 0; return 0; } t@@ -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; (DIR) diff --git a/src/libbio/bputc.c b/src/libbio/bputc.c t@@ -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; } (DIR) diff --git a/src/libbio/lib9.std.h b/src/libbio/lib9.std.h t@@ -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;