(* déplace le descripteur à une position donnée dans le flot *) let lseek desc offset from = if desc.inode.stats.st_size > max_file_size then raise (File_system_error "Inconsistant file system"); let new_block,new_pos = match from with SEEK_SET -> (offset mod D.block_size, offset / D.block_size) | SEEK_CUR -> ((desc.pos + offset) mod D.block_size, (desc.pos + offset) / D.block_size) | SEEK_END -> ((desc.inode.stats.st_size + offset) mod D.block_size, (desc.inode.stats.st_size + offset) / D.block_size) in if new_block < 0 || new_pos < 0 then raise (File_system_exception "Invalid position") else begin desc.pos <- new_pos; desc.block <- new_block; desc_offset desc end;; |