|
|
1.1 root 1: /* lfsetup.c - lfsetup */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <disk.h>
6: #include <lfile.h>
7: #include <dir.h>
8:
9: /*------------------------------------------------------------------------
10: * lfsetup -- set up appropriate iblock and data block in memory
11: *------------------------------------------------------------------------
12: */
13: lfsetup(diskdev, flptr)
14: int diskdev;
15: struct flblk *flptr;
16: {
17: struct iblk *ibptr;
18: int displ, i;
19: long ibrange;
20: IBADDR nextib;
21: DBADDR dba;
22:
23: ibrange = (long) (IBLEN * DBUFSIZ);
24: ibptr = &flptr->fl_iblk;
25: if (flptr->fl_pos < ibptr->ib_byte) {
26: flptr->fl_iba = (flptr->fl_dent)->fdiba;
27: ibget(diskdev, flptr->fl_iba, ibptr);
28: }
29: while (ibptr->ib_byte+ibrange <= flptr->fl_pos) {
30: if (ibptr->ib_next == IBNULL) {
31: ibptr->ib_next = ibnew(diskdev, IBWDIR);
32: ibput(diskdev, flptr->fl_iba, ibptr);
33: flptr->fl_iba = ibptr->ib_next;
34: ibclear(ibptr, (long)ibptr->ib_byte+ibrange);
35: ibput(diskdev, flptr->fl_iba, ibptr);
36: } else {
37: flptr->fl_iba = ibptr->ib_next;
38: ibget(diskdev, flptr->fl_iba, ibptr);
39: }
40: }
41: displ = (int) (flptr->fl_pos - ibptr->ib_byte);
42: for (flptr->fl_ipnum=0 ; displ>=DBUFSIZ ; displ-=DBUFSIZ)
43: flptr->fl_ipnum++;
44: flptr->fl_bptr = flptr->fl_buff + displ;
45: if ( (dba=ibptr->ib_dba[flptr->fl_ipnum]) == DBNULL) {
46: ibptr->ib_dba[flptr->fl_ipnum] = lfsnewd(diskdev,flptr);
47: ibput(diskdev, flptr->fl_iba, ibptr);
48: } else
49: read(diskdev, flptr->fl_buff, dba);
50: flptr->fl_dch = FALSE;
51: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.