···22 alias Trinity.Scheduler.Simulation
33 import Trinity.Scheduler, only: [simulation_key: 0, sim_node_key: 0]
4455+ @type file_descriptor :: term
66+ @type posix :: :file.posix
77+58 @spec get_sim :: Simulation.t | nil
69 defp get_sim, do: Process.get(simulation_key())
710811 @spec get_proc_node :: atom
912 defp get_proc_node, do: Process.get(sim_node_key())
10131111- @spec open(String.t, [atom]) :: term
1414+ @spec open(String.t, [atom]) :: {:ok, file_descriptor} | {:error, posix}
1215 def open(path, modes) do
1316 case get_sim() do
1417 nil -> raise "not supported"
···1619 end
1720 end
18212222+ @spec pread(file_descriptor, non_neg_integer, non_neg_integer) :: {:ok, binary} | :eof | {:error, posix}
1923 def pread(fd, loc, bytes) do
2024 case get_sim() do
2125 nil -> raise "not supported"
···96100 >> = read_block(file_data, fd, start_block_index)
9710198102 bytes_remaining = bytes - byte_size(bin_acc)
9999- do_read_blocks(file_data, fd, start_block_index + 1, bin_acc, bytes_remaining)
103103+ bin = do_read_blocks(file_data, fd, start_block_index + 1, bin_acc, bytes_remaining)
104104+ {:ok, bin}
100105 end
101106102107 defp do_read_blocks(_file_data, _fd, _block_index, bin_acc, 0) do
+1-1
test/trinity_test.exs
···4040 end
41414242 defp read_value(%{fd: fd, size: size}) do
4343- data = SimFile.pread(fd, 3, size)
4343+ {:ok, data} = SimFile.pread(fd, 3, size)
4444 "The current value of the counter is: " <> value_str = data
4545 String.to_integer(value_str)
4646 end