diff options
author | Karolis Petrauskas <[email protected]> | 2017-02-15 08:24:32 +0200 |
---|---|---|
committer | Karolis Petrauskas <[email protected]> | 2017-02-15 08:24:32 +0200 |
commit | 1ca3a090fb9027aa140fea06f57aa22f8790940a (patch) | |
tree | bc94ca446b98b4fd2cf7682a3de674b8a71aa6e6 /lib/ssh | |
parent | 002e507bab9209aeb5487ee3a1dbe52a73f80f84 (diff) | |
download | otp-1ca3a090fb9027aa140fea06f57aa22f8790940a.tar.gz otp-1ca3a090fb9027aa140fea06f57aa22f8790940a.tar.bz2 otp-1ca3a090fb9027aa140fea06f57aa22f8790940a.zip |
Return correct state in the case of failure
Diffstat (limited to 'lib/ssh')
-rw-r--r-- | lib/ssh/src/ssh_sftpd.erl | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/ssh/src/ssh_sftpd.erl b/lib/ssh/src/ssh_sftpd.erl index 7ebe5ed4ef..13c68e4c95 100644 --- a/lib/ssh/src/ssh_sftpd.erl +++ b/lib/ssh/src/ssh_sftpd.erl @@ -665,23 +665,24 @@ open(Vsn, ReqId, Data, State) when Vsn >= 4 -> do_open(ReqId, State0, Path, Flags) -> #state{file_handler = FileMod, file_state = FS0, xf = #ssh_xfer{vsn = Vsn}} = State0, - XF = State0#state.xf, - F = [binary | Flags], AbsPath = relate_file_name(Path, State0), {IsDir, _FS1} = FileMod:is_dir(AbsPath, FS0), case IsDir of true when Vsn > 5 -> ssh_xfer:xf_send_status(State0#state.xf, ReqId, - ?SSH_FX_FILE_IS_A_DIRECTORY, "File is a directory"); + ?SSH_FX_FILE_IS_A_DIRECTORY, "File is a directory"), + State0; true -> ssh_xfer:xf_send_status(State0#state.xf, ReqId, - ?SSH_FX_FAILURE, "File is a directory"); + ?SSH_FX_FAILURE, "File is a directory"), + State0; false -> - {Res, FS1} = FileMod:open(AbsPath, F, FS0), + OpenFlags = [binary | Flags], + {Res, FS1} = FileMod:open(AbsPath, OpenFlags, FS0), State1 = State0#state{file_state = FS1}, case Res of {ok, IoDevice} -> - add_handle(State1, XF, ReqId, file, {Path,IoDevice}); + add_handle(State1, State0#state.xf, ReqId, file, {Path,IoDevice}); {error, Error} -> ssh_xfer:xf_send_status(State1#state.xf, ReqId, ssh_xfer:encode_erlang_status(Error)), |