|
|
1.1 ! root 1: /* ibnew.c - ibnew */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <io.h> ! 6: #include <disk.h> ! 7: #include <lfile.h> ! 8: #include <dir.h> ! 9: ! 10: /*------------------------------------------------------------------------ ! 11: * ibnew -- allocate a new iblock from free list on disk ! 12: *------------------------------------------------------------------------ ! 13: */ ! 14: ibnew(diskdev, writedir) ! 15: int diskdev; ! 16: Bool writedir; ! 17: { ! 18: struct dir *dirptr; ! 19: struct iblk iblock; ! 20: IBADDR inum; ! 21: int i; ! 22: int sem; ! 23: ! 24: sem = ((struct dsblk *)devtab[diskdev].dvioblk)->dflsem; ! 25: dirptr = dsdirec(diskdev); ! 26: wait(sem); ! 27: inum = dirptr->d_filst; ! 28: ibget(diskdev, inum, &iblock); ! 29: dirptr->d_filst = iblock.ib_next; ! 30: if (writedir) ! 31: write(diskdev, dskbcpy(dirptr), DIRBLK); ! 32: signal(sem); ! 33: ibclear(&iblock, 0L); ! 34: ibput(diskdev, inum, &iblock); ! 35: return(inum); ! 36: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.