The branch, master has been updated
       via  097f40249c664cfc76794894440e27496ab82a76 (commit)
       via  3f0406f609899e88f15f90688c0e49beadc72568 (commit)
      from  db65c3374ad337135a7bd4d67abced258c01c5bd (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 097f40249c664cfc76794894440e27496ab82a76
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Thu Oct 23 17:42:45 2008 +0200

    Make use of a large buffer for smbclient put command

commit 3f0406f609899e88f15f90688c0e49beadc72568
Author: Volker Lendecke <[EMAIL PROTECTED]>
Date:   Thu Oct 23 15:43:36 2008 +0200

    Optimize x_fread to speed up the smbclient put command

-----------------------------------------------------------------------

Summary of changes:
 lib/util/xfile.c        |   25 ++++++++++++++++++++-----
 source3/client/client.c |    3 +++
 2 files changed, 23 insertions(+), 5 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/util/xfile.c b/lib/util/xfile.c
index 94b0ee9..cf19570 100644
--- a/lib/util/xfile.c
+++ b/lib/util/xfile.c
@@ -329,12 +329,27 @@ int x_fgetc(XFILE *f)
 /** simulate fread */
 size_t x_fread(void *p, size_t size, size_t nmemb, XFILE *f)
 {
+       size_t remaining = size * nmemb;
        size_t total = 0;
-       while (total < size*nmemb) {
-               int c = x_fgetc(f);
-               if (c == EOF) break;
-               (total+(char *)p)[0] = (char)c;
-               total++;
+
+       while (remaining > 0) {
+               size_t thistime;
+
+               x_fillbuf(f);
+
+               if (f->bufused == 0) {
+                       f->flags |= X_FLAG_EOF;
+                       break;
+               }
+
+               thistime = MIN(f->bufused, remaining);
+
+               memcpy((char *)p+total, f->next, thistime);
+
+               f->next += thistime;
+               f->bufused -= thistime;
+               remaining -= thistime;
+               total += thistime;
        }
        return total/size;
 }
diff --git a/source3/client/client.c b/source3/client/client.c
index 26badc4..39f8f90 100644
--- a/source3/client/client.c
+++ b/source3/client/client.c
@@ -1652,6 +1652,9 @@ static int do_put(const char *rname, const char *lname, 
bool reput)
                d_printf("ERROR: Not enough memory!\n");
                return 1;
        }
+
+       x_setvbuf(f, NULL, X_IOFBF, maxwrite);
+
        while (!x_feof(f)) {
                int n = maxwrite;
                int ret;


-- 
Samba Shared Repository

Reply via email to