Introduction
Introduction Statistics Contact Development Disclaimer Help
bseek.c - 9base - revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log
Files
Refs
README
LICENSE
---
bseek.c (929B)
---
1 #include "lib9.h"
2 #include <bio.h>
3
4 long long
5 Bseek(Biobuf *bp, long long offset, int base)
6 {
7 vlong n, d;
8 int bufsz;
9
10 switch(bp->state) {
11 default:
12 fprint(2, "Bseek: unknown state %d\n", bp->state);
13 return Beof;
14
15 case Bracteof:
16 bp->state = Bractive;
17 bp->icount = 0;
18 bp->gbuf = bp->ebuf;
19
20 case Bractive:
21 n = offset;
22 if(base == 1) {
23 n += Boffset(bp);
24 base = 0;
25 }
26
27 /*
28 * try to seek within buffer
29 */
30 if(base == 0) {
31 d = n - Boffset(bp);
32 bufsz = bp->ebuf - bp->gbuf;
33 if(-bufsz <= d && d <= bufsz){
34 bp->icount += d;
35 if(d >= 0) {
36 if(bp->icount <= 0)
37 return n;
38 } else {
39 if(bp->ebuf - bp->gbuf >= -bp->i…
40 return n;
41 }
42 }
43 }
44
45 /*
46 * reset the buffer
47 */
48 n = lseek(bp->fid, n, base);
49 bp->icount = 0;
50 bp->gbuf = bp->ebuf;
51 break;
52
53 case Bwactive:
54 Bflush(bp);
55 n = seek(bp->fid, offset, base);
56 break;
57 }
58 bp->offset = n;
59 return n;
60 }
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.