summaryrefslogtreecommitdiff
path: root/libbio/bflush.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbio/bflush.c')
-rw-r--r--libbio/bflush.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/libbio/bflush.c b/libbio/bflush.c
new file mode 100644
index 0000000..42bbe9f
--- /dev/null
+++ b/libbio/bflush.c
@@ -0,0 +1,33 @@
+#include "plan9.h"
+#include <bio.h>
+
+int
+Bflush(Biobuf *bp)
+{
+ int n, c;
+
+ switch(bp->state) {
+ case Bwactive:
+ n = bp->bsize+bp->ocount;
+ if(n == 0)
+ return 0;
+ c = write(bp->fid, bp->bbuf, n);
+ if(n == c) {
+ bp->offset += n;
+ bp->ocount = -bp->bsize;
+ return 0;
+ }
+ bp->state = Binactive;
+ bp->ocount = 0;
+ break;
+
+ case Bracteof:
+ bp->state = Bractive;
+
+ case Bractive:
+ bp->icount = 0;
+ bp->gbuf = bp->ebuf;
+ return 0;
+ }
+ return Beof;
+}