let read_inode p n = let buffer = read_block p n in let kind = match (read_int buffer 0) with 0 -> S_REG | 1 -> S_DIR | _ -> system_error EIO "read_inode" "kind" in let nlink = read_int buffer 4 in let size = read_int buffer 8 in if size > p.max_file_size then system_error EIO "read_inode" "size"; let init_block i = (read_int buffer (i*4 + p.blocktbl_offset)) in let blocktbl = Array.init (p.blocktbl_size) init_block in { stats = { st_dev = 0; st_ino = n ; st_kind = kind ; st_nlink = nlink; st_size = size; }; blocktbl = blocktbl; partition = p; } |