(* clear file *) let itrunc inode size = let bs = block_size in if size < inode.stats.st_size then for k = (size + bs -1) / bs to inode.stats.st_size / bs do if inode.blocktbl.(k) > 0 then begin free_block inode.blocktbl.(k); (* on maintient un 0 dans blocktbl pour les blocs non alloués *) inode.blocktbl.(k) <- 0; end done; inode.stats.st_size <- size;; |
let ftruncate descr size = if descr.closed then system_error EINVAL "ftruncate" "closed descr" else if descr.inode.stats.st_kind = S_DIR then system_error EISDIR "ftruncate" "" else itrunc descr.inode size |