|
|
1.1 root 1: /* lfgetc.c - lfgetc */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <proc.h>
6: #include <disk.h>
7: #include <lfile.h>
8: #include <dir.h>
9:
10: /*------------------------------------------------------------------------
11: * lfgetc -- get next character from (buffered) disk file
12: *------------------------------------------------------------------------
13: */
14: lfgetc(devptr)
15: struct devsw *devptr;
16: {
17: struct flblk *flptr;
18: char nextch;
19: char ps;
20:
21: disable(ps);
22: flptr = (struct flblk *)devptr->dvioblk;
23: if (flptr->fl_pid!=currpid || !(flptr->fl_mode&FLREAD)) {
24: restore(ps);
25: return(SYSERR);
26: }
27: if (flptr->fl_pos >= (flptr->fl_dent)->fdlen) {
28: restore(ps);
29: return(EOF);
30: }
31: if (flptr->fl_bptr >= &flptr->fl_buff[DBUFSIZ]) {
32: if (flptr->fl_dch)
33: lfsflush(flptr);
34: lfsetup(flptr->fl_dev, flptr);
35: }
36: nextch = *(flptr->fl_bptr)++;
37: flptr->fl_pos++;
38: restore(ps);
39: return(nextch);
40: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.