(* retourne un bloc libre et met à jour la liste des blocks libres *) let alloc_block () = if super_block.free_blocks.head = 0 then raise (File_system_exception "File system full"); if super_block.free_blocks.nb_free == 0 then begin let fresh_item = super_block.free_blocks.head in let buffer = Array.create D.block_size 0 in D.read fresh_item buffer 0; super_block.free_blocks.head <- buffer.(0); super_block.free_blocks.nb_free <- D.block_size - 1; fresh_item end else begin let buffer = Array.create D.block_size 0 in D.read super_block.free_blocks.head buffer 0; let fresh_item = buffer.(super_block.free_blocks.nb_free) in super_block.free_blocks.nb_free <- super_block.free_blocks.nb_free - 1; fresh_item end;; |