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