| vfs_read_block#(START, END, INODE, DIRS, FILES, ASYNCED; BUF, TOTAL, DONE, ERR) {let PAGENO = (START + TOTAL) / VFS_PAGE_SIZE, OFFSET = (START + TOTAL) % VFS_PAGE_SIZE, PBUF = mkbuf(VFS_PAGE_SIZE) in let N = min(END - START + TOTAL, VFS_PAGE_SIZE - OFFSET, INODE.size - START + TOTAL) in if N ≠ 0 then {afs_readpage#(INODE, PAGENO, DIRS, FILES, ASYNCED; PBUF, ERR); if ERR = ESUCCESS then {BUF := copy(PBUF, OFFSET, BUF, TOTAL, N); TOTAL := TOTAL + N}} else DONE := true } |