From 486bb376218a37fe15318d7724d6eada36b81e6c Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Tue, 26 Mar 2013 17:58:04 +0100 Subject: [PATCH 1/3] sftp: seek: Don't flush buffers on same offset Signed-off-by: Richard W.M. Jones --- src/sftp.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/sftp.c b/src/sftp.c index d0536dd..3760025 100644 --- a/src/sftp.c +++ b/src/sftp.c @@ -2132,21 +2132,24 @@ libssh2_sftp_fstat_ex(LIBSSH2_SFTP_HANDLE *hnd, LIBSSH2_API void libssh2_sftp_seek64(LIBSSH2_SFTP_HANDLE *handle, libssh2_uint64_t offset) { - if(handle) { - handle->u.file.offset = handle->u.file.offset_sent = offset; - /* discard all pending requests and currently read data */ - sftp_packetlist_flush(handle); + if(!handle) + return; + if(handle->u.file.offset == offset && handle->u.file.offset_sent == offset) + return; - /* free the left received buffered data */ - if (handle->u.file.data_left) { - LIBSSH2_FREE(handle->sftp->channel->session, handle->u.file.data); - handle->u.file.data_left = handle->u.file.data_len = 0; - handle->u.file.data = NULL; - } + handle->u.file.offset = handle->u.file.offset_sent = offset; + /* discard all pending requests and currently read data */ + sftp_packetlist_flush(handle); - /* reset EOF to False */ - handle->u.file.eof = FALSE; + /* free the left received buffered data */ + if (handle->u.file.data_left) { + LIBSSH2_FREE(handle->sftp->channel->session, handle->u.file.data); + handle->u.file.data_left = handle->u.file.data_len = 0; + handle->u.file.data = NULL; } + + /* reset EOF to False */ + handle->u.file.eof = FALSE; } /* libssh2_sftp_seek -- 1.8.1.4