1 b2cfc4e2 2003-09-30 devnull #include "lib9.h"
2 b2cfc4e2 2003-09-30 devnull #include <bio.h>
6 b2cfc4e2 2003-09-30 devnull MAXBUFS = 20
9 b2cfc4e2 2003-09-30 devnull static Biobuf* wbufs[MAXBUFS];
10 b2cfc4e2 2003-09-30 devnull static int atexitflag;
14 b2cfc4e2 2003-09-30 devnull batexit(void)
16 b2cfc4e2 2003-09-30 devnull Biobuf *bp;
19 b2cfc4e2 2003-09-30 devnull for(i=0; i<MAXBUFS; i++) {
20 b2cfc4e2 2003-09-30 devnull bp = wbufs[i];
21 b2cfc4e2 2003-09-30 devnull if(bp != 0) {
22 b2cfc4e2 2003-09-30 devnull wbufs[i] = 0;
23 b2cfc4e2 2003-09-30 devnull Bflush(bp);
30 b2cfc4e2 2003-09-30 devnull deinstall(Biobuf *bp)
34 b2cfc4e2 2003-09-30 devnull for(i=0; i<MAXBUFS; i++)
35 b2cfc4e2 2003-09-30 devnull if(wbufs[i] == bp)
36 b2cfc4e2 2003-09-30 devnull wbufs[i] = 0;
41 b2cfc4e2 2003-09-30 devnull install(Biobuf *bp)
45 b2cfc4e2 2003-09-30 devnull deinstall(bp);
46 b2cfc4e2 2003-09-30 devnull for(i=0; i<MAXBUFS; i++)
47 b2cfc4e2 2003-09-30 devnull if(wbufs[i] == 0) {
48 b2cfc4e2 2003-09-30 devnull wbufs[i] = bp;
51 b2cfc4e2 2003-09-30 devnull if(atexitflag == 0) {
52 b2cfc4e2 2003-09-30 devnull atexitflag = 1;
53 b2cfc4e2 2003-09-30 devnull atexit(batexit);
58 b2cfc4e2 2003-09-30 devnull Binits(Biobuf *bp, int f, int mode, unsigned char *p, int size)
61 b2cfc4e2 2003-09-30 devnull p += Bungetsize; /* make room for Bungets */
62 b2cfc4e2 2003-09-30 devnull size -= Bungetsize;
64 b2cfc4e2 2003-09-30 devnull switch(mode) {
66 b2cfc4e2 2003-09-30 devnull fprint(2, "Bopen: unknown mode %d\n", mode);
67 b2cfc4e2 2003-09-30 devnull return Beof;
69 b2cfc4e2 2003-09-30 devnull case OREAD:
70 b2cfc4e2 2003-09-30 devnull bp->state = Bractive;
71 b2cfc4e2 2003-09-30 devnull bp->ocount = 0;
74 b2cfc4e2 2003-09-30 devnull case OWRITE:
75 b2cfc4e2 2003-09-30 devnull install(bp);
76 b2cfc4e2 2003-09-30 devnull bp->state = Bwactive;
77 b2cfc4e2 2003-09-30 devnull bp->ocount = -size;
80 b2cfc4e2 2003-09-30 devnull bp->bbuf = p;
81 b2cfc4e2 2003-09-30 devnull bp->ebuf = p+size;
82 b2cfc4e2 2003-09-30 devnull bp->bsize = size;
83 b2cfc4e2 2003-09-30 devnull bp->icount = 0;
84 b2cfc4e2 2003-09-30 devnull bp->gbuf = bp->ebuf;
85 b2cfc4e2 2003-09-30 devnull bp->fid = f;
86 b2cfc4e2 2003-09-30 devnull bp->flag = 0;
87 b2cfc4e2 2003-09-30 devnull bp->rdline = 0;
88 b2cfc4e2 2003-09-30 devnull bp->offset = 0;
89 b2cfc4e2 2003-09-30 devnull /* bp->runesize = 0; */
90 b2cfc4e2 2003-09-30 devnull return 0;
95 b2cfc4e2 2003-09-30 devnull Binit(Biobuf *bp, int f, int mode)
97 b2cfc4e2 2003-09-30 devnull return Binits(bp, f, mode, bp->b, sizeof(bp->b));
101 986b36bc 2003-11-23 devnull Bfdopen(int f, int mode)
103 986b36bc 2003-11-23 devnull Biobuf *bp;
105 986b36bc 2003-11-23 devnull bp = malloc(sizeof(Biobuf));
106 986b36bc 2003-11-23 devnull if(bp == 0)
107 986b36bc 2003-11-23 devnull return 0;
108 986b36bc 2003-11-23 devnull Binits(bp, f, mode, bp->b, sizeof(bp->b));
109 986b36bc 2003-11-23 devnull bp->flag = Bmagic;
110 986b36bc 2003-11-23 devnull return bp;
114 b2cfc4e2 2003-09-30 devnull Bopen(char *name, int mode)
116 b2cfc4e2 2003-09-30 devnull Biobuf *bp;
119 b2cfc4e2 2003-09-30 devnull switch(mode) {
120 b2cfc4e2 2003-09-30 devnull default:
121 b2cfc4e2 2003-09-30 devnull fprint(2, "Bopen: unknown mode %d\n", mode);
122 b2cfc4e2 2003-09-30 devnull return 0;
124 b2cfc4e2 2003-09-30 devnull case OREAD:
125 b2cfc4e2 2003-09-30 devnull f = open(name, OREAD);
126 b2cfc4e2 2003-09-30 devnull if(f < 0)
127 b2cfc4e2 2003-09-30 devnull return 0;
130 b2cfc4e2 2003-09-30 devnull case OWRITE:
131 b2cfc4e2 2003-09-30 devnull f = creat(name, 0666);
132 b2cfc4e2 2003-09-30 devnull if(f < 0)
133 b2cfc4e2 2003-09-30 devnull return 0;
135 986b36bc 2003-11-23 devnull bp = Bfdopen(f, mode);
136 b2cfc4e2 2003-09-30 devnull if(bp == 0)
137 986b36bc 2003-11-23 devnull close(f);
138 b2cfc4e2 2003-09-30 devnull return bp;
142 b2cfc4e2 2003-09-30 devnull Bterm(Biobuf *bp)
145 b2cfc4e2 2003-09-30 devnull deinstall(bp);
146 b2cfc4e2 2003-09-30 devnull Bflush(bp);
147 b2cfc4e2 2003-09-30 devnull if(bp->flag == Bmagic) {
148 b2cfc4e2 2003-09-30 devnull bp->flag = 0;
149 b2cfc4e2 2003-09-30 devnull close(bp->fid);
150 b2cfc4e2 2003-09-30 devnull free(bp);
152 b2cfc4e2 2003-09-30 devnull return 0;