diff options
author | Hans Nilsson <[email protected]> | 2014-11-10 17:14:01 +0100 |
---|---|---|
committer | Hans Nilsson <[email protected]> | 2014-11-18 14:48:16 +0100 |
commit | 0f660bdf34f4c04367febffc95bad63ee9016299 (patch) | |
tree | c4352f4831735113965b772939f840022b6265c3 /lib/ssh/src/ssh_sftp.erl | |
parent | b2171f6bf65c5897d37103afec102fa565bc134e (diff) | |
download | otp-0f660bdf34f4c04367febffc95bad63ee9016299.tar.gz otp-0f660bdf34f4c04367febffc95bad63ee9016299.tar.bz2 otp-0f660bdf34f4c04367febffc95bad63ee9016299.zip |
ssh: Add ssh_sftp:open_tar/3,4 which opens a tar file at the server side of a channel.
Depends on erl_tar.erl having the function erl_tar:init/3 defined.
Diffstat (limited to 'lib/ssh/src/ssh_sftp.erl')
-rw-r--r-- | lib/ssh/src/ssh_sftp.erl | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/lib/ssh/src/ssh_sftp.erl b/lib/ssh/src/ssh_sftp.erl index 12479e9121..3b80f5326c 100644 --- a/lib/ssh/src/ssh_sftp.erl +++ b/lib/ssh/src/ssh_sftp.erl @@ -33,8 +33,8 @@ -export([start_channel/1, start_channel/2, start_channel/3, stop_channel/1]). --export([open/3, opendir/2, close/2, readdir/2, pread/4, read/3, - open/4, opendir/3, close/3, readdir/3, pread/5, read/4, +-export([open/3, open_tar/3, opendir/2, close/2, readdir/2, pread/4, read/3, + open/4, open_tar/4, opendir/3, close/3, readdir/3, pread/5, read/4, apread/4, aread/3, pwrite/4, write/3, apwrite/4, awrite/3, pwrite/5, write/4, position/3, real_path/2, read_file_info/2, get_file_info/2, @@ -162,6 +162,28 @@ open(Pid, File, Mode) -> open(Pid, File, Mode, FileOpTimeout) -> call(Pid, {open, false, File, Mode}, FileOpTimeout). +open_tar(Pid, File, Mode) -> + open_tar(Pid, File, Mode, ?FILEOP_TIMEOUT). +open_tar(Pid, File, Mode=[write], FileOpTimeout) -> + {ok,R} = open(Pid, File, Mode, FileOpTimeout), + erl_tar:init({Pid,R,FileOpTimeout}, write, + fun(write, {{P,H,T},Data}) -> + Bin = if is_list(Data) -> list_to_binary(Data); + is_binary(Data) -> Data + end, + {ok,{_Window,Packet}} = send_window(P, T), + write_file_loop(P, H, 0, Bin, size(Bin), Packet, T); + (position, {{P,H,T},Pos}) -> + position(P, H, Pos, T); + (close, {P,H,T}) -> + close(P, H, T) + end); +open_tar(_Pid, _File, Mode, _FileOpTimeout) -> + {error,{illegal_mode,Mode}}. + + + + opendir(Pid, Path) -> opendir(Pid, Path, ?FILEOP_TIMEOUT). opendir(Pid, Path, FileOpTimeout) -> |