|
|
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.