(* début de la table des blocs dans l'inode *) let blocktbl_offset = 3;; (* taille maximale d'un fichier *) let max_file_size = D.block_size * (D.block_size - blocktbl_offset);; (* construit un inode à partir des données du disque *) let read_inode n = let buffer = Array.create D.block_size 0 in D.read n buffer 0; let kind = match buffer.(0) with 0 -> S_REG | 1 -> S_DIR | 2 -> S_LNK | _ -> raise (File_system_error "Inconsistant block") in if buffer.(2) > max_file_size then raise (File_system_error "Inconsistant file system"); let init_block i = buffer.(i + blocktbl_offset) in let nb = D.block_size - blocktbl_offset in let blocktbl = Array.init nb init_block in { reference_number = 0; stats = { st_dev = 0; st_ino = n ; st_kind = kind ; st_nlink = buffer.(1); st_size = buffer.(2)}; blocktbl = blocktbl };; |