Annotation of xinu/sys/LSI/lfsetup.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.