Skip to content

Commit 3adf70d

Browse files
committed
Merge branch 'maint'
2 parents 5894dc4 + 4281c97 commit 3adf70d

File tree

1 file changed

+41
-42
lines changed

1 file changed

+41
-42
lines changed

lib/ssh/src/ssh_sftp.erl

Lines changed: 41 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,14 +1030,12 @@ read_file(Pid, Name) ->
10301030
Timeout :: timeout(),
10311031
Error :: {error, reason()}.
10321032
read_file(Pid, Name, FileOpTimeout) ->
1033-
case open(Pid, Name, [read, binary], FileOpTimeout) of
1034-
{ok, Handle} ->
1035-
{ok,{_WindowSz,PacketSz}} = recv_window(Pid, FileOpTimeout),
1036-
Res = read_file_loop(Pid, Handle, PacketSz, FileOpTimeout, []),
1037-
close(Pid, Handle),
1038-
Res;
1039-
Error ->
1040-
Error
1033+
maybe
1034+
{ok, Handle} ?= open(Pid, Name, [read, binary], FileOpTimeout),
1035+
{ok, {_WindowSz, PacketSz}} ?= recv_window(Pid, FileOpTimeout),
1036+
Res = read_file_loop(Pid, Handle, PacketSz, FileOpTimeout, []),
1037+
close(Pid, Handle),
1038+
Res
10411039
end.
10421040

10431041
read_file_loop(Pid, Handle, PacketSz, FileOpTimeout, Acc) ->
@@ -1072,15 +1070,12 @@ overwritten if it exists.
10721070
write_file(Pid, Name, List, FileOpTimeout) when is_list(List) ->
10731071
write_file(Pid, Name, to_bin(List), FileOpTimeout);
10741072
write_file(Pid, Name, Bin, FileOpTimeout) ->
1075-
case open(Pid, Name, [write, binary], FileOpTimeout) of
1076-
{ok, Handle} ->
1077-
{ok,{_Window,Packet}} = send_window(Pid, FileOpTimeout),
1078-
Res = write_file_loop(Pid, Handle, 0, Bin, byte_size(Bin), Packet,
1079-
FileOpTimeout),
1080-
close(Pid, Handle, FileOpTimeout),
1081-
Res;
1082-
Error ->
1083-
Error
1073+
maybe
1074+
{ok, Handle} ?= open(Pid, Name, [write, binary], FileOpTimeout),
1075+
{ok, {_Window, Packet}} ?= send_window(Pid, FileOpTimeout),
1076+
Res = write_file_loop(Pid, Handle, 0, Bin, byte_size(Bin), Packet, FileOpTimeout),
1077+
close(Pid, Handle, FileOpTimeout),
1078+
Res
10841079
end.
10851080

10861081
write_file_loop(_Pid, _Handle, _Pos, _Bin, 0, _PacketSz,_FileOpTimeout) ->
@@ -1902,8 +1897,10 @@ to_bin(Data) when is_binary(Data) -> Data.
19021897

19031898

19041899
read_repeat(Pid, Handle, Len, FileOpTimeout) ->
1905-
{ok,{_WindowSz,PacketSz}} = recv_window(Pid, FileOpTimeout),
1906-
read_rpt(Pid, Handle, Len, PacketSz, FileOpTimeout, <<>>).
1900+
maybe
1901+
{ok, {_WindowSz, PacketSz}} ?= recv_window(Pid, FileOpTimeout),
1902+
read_rpt(Pid, Handle, Len, PacketSz, FileOpTimeout, <<>>)
1903+
end.
19071904

19081905
read_rpt(Pid, Handle, WantedLen, PacketSz, FileOpTimeout, Acc) when WantedLen > 0 ->
19091906
case read(Pid, Handle, min(WantedLen,PacketSz), FileOpTimeout) of
@@ -1921,8 +1918,10 @@ read_rpt(_Pid, _Handle, WantedLen, _PacketSz, _FileOpTimeout, Acc) when WantedLe
19211918
write_to_remote_tar(_Pid, _SftpHandle, <<>>, _FileOpTimeout) ->
19221919
ok;
19231920
write_to_remote_tar(Pid, SftpHandle, Bin, FileOpTimeout) ->
1924-
{ok,{_Window,Packet}} = send_window(Pid, FileOpTimeout),
1925-
write_file_loop(Pid, SftpHandle, 0, Bin, byte_size(Bin), Packet, FileOpTimeout).
1921+
maybe
1922+
{ok, {_Window, Packet}} ?= send_window(Pid, FileOpTimeout),
1923+
write_file_loop(Pid, SftpHandle, 0, Bin, byte_size(Bin), Packet, FileOpTimeout)
1924+
end.
19261925

19271926
position_buf(Pid, SftpHandle, BufHandle, Pos, FileOpTimeout) ->
19281927
{ok,#bufinf{mode = Mode,
@@ -1959,18 +1958,19 @@ position_buf(Pid, SftpHandle, BufHandle, Pos, FileOpTimeout) ->
19591958
end.
19601959

19611960
read_buf(Pid, SftpHandle, BufHandle, WantedLen, FileOpTimeout) ->
1962-
{ok,{_Window,Packet}} = send_window(Pid, FileOpTimeout),
1963-
{ok,B0} = call(Pid, {get_bufinf,BufHandle}, FileOpTimeout),
1964-
case do_the_read_buf(Pid, SftpHandle, WantedLen, Packet, FileOpTimeout, B0) of
1965-
{ok,ResultBin,B} ->
1966-
call(Pid, {put_bufinf,BufHandle,B}, FileOpTimeout),
1967-
{ok,ResultBin};
1968-
{error,Error} ->
1969-
{error,Error};
1970-
{eof,B} ->
1971-
call(Pid, {put_bufinf,BufHandle,B}, FileOpTimeout),
1972-
eof
1973-
end.
1961+
maybe
1962+
{ok, {_Window, Packet}} ?= send_window(Pid, FileOpTimeout),
1963+
{ok, B0} ?= call(Pid, {get_bufinf,BufHandle}, FileOpTimeout),
1964+
{ok, ResultBin, B} ?= do_the_read_buf(Pid, SftpHandle, WantedLen, Packet, FileOpTimeout, B0),
1965+
call(Pid, {put_bufinf, BufHandle, B}, FileOpTimeout),
1966+
{ok,ResultBin}
1967+
else
1968+
{error, Error} ->
1969+
{error,Error};
1970+
{eof, BufInf} ->
1971+
call(Pid, {put_bufinf, BufHandle, BufInf}, FileOpTimeout),
1972+
eof
1973+
end.
19741974

19751975
do_the_read_buf(_Pid, _SftpHandle, WantedLen, _Packet, _FileOpTimeout,
19761976
B=#bufinf{plain_text_buf=PlainBuf0,
@@ -2022,15 +2022,14 @@ do_the_read_buf(Pid, SftpHandle, WantedLen, Packet, FileOpTimeout, B=#bufinf{enc
20222022

20232023

20242024
write_buf(Pid, SftpHandle, BufHandle, PlainBin, FileOpTimeout) ->
2025-
{ok,{_Window,Packet}} = send_window(Pid, FileOpTimeout),
2026-
{ok,B0=#bufinf{plain_text_buf=PTB}} = call(Pid, {get_bufinf,BufHandle}, FileOpTimeout),
2027-
case do_the_write_buf(Pid, SftpHandle, Packet, FileOpTimeout,
2028-
B0#bufinf{plain_text_buf = <<PTB/binary,PlainBin/binary>>}) of
2029-
{ok, B} ->
2030-
call(Pid, {put_bufinf,BufHandle,B}, FileOpTimeout),
2031-
ok;
2032-
{error,Error} ->
2033-
{error,Error}
2025+
maybe
2026+
{ok, {_Window, Packet}} ?= send_window(Pid, FileOpTimeout),
2027+
{ok, B0=#bufinf{plain_text_buf=PTB}} ?= call(Pid, {get_bufinf,BufHandle}, FileOpTimeout),
2028+
{ok, B} ?=
2029+
do_the_write_buf(Pid, SftpHandle, Packet, FileOpTimeout,
2030+
B0#bufinf{plain_text_buf = <<PTB/binary,PlainBin/binary>>}),
2031+
call(Pid, {put_bufinf,BufHandle,B}, FileOpTimeout),
2032+
ok
20342033
end.
20352034

20362035
do_the_write_buf(Pid, SftpHandle, Packet, FileOpTimeout,

0 commit comments

Comments
 (0)