www.libssh2.org | Daily snapshots | Mailing list archive | Docs | Examples | github

Archive Index This month's Index

Subject: [PATCH] sftp: seek: Don't flush buffers if the requested offset is the same as current.

[PATCH] sftp: seek: Don't flush buffers if the requested offset is the same as current.

From: Richard W.M. Jones <rjones_at_redhat.com>
Date: Tue, 26 Mar 2013 16:58:04 +0000

From: "Richard W.M. Jones" <rjones_at_redhat.com>

Signed-off-by: Richard W.M. Jones <rjones_at_redhat.com>

---
 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
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel
Received on 2013-03-26

the libssh2 team