]> granicus.if.org Git - curl/commitdiff
readwrite_upload: stop upload at file size
authorDaniel Stenberg <daniel@haxx.se>
Sat, 12 Mar 2011 22:05:11 +0000 (23:05 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Sat, 12 Mar 2011 22:05:11 +0000 (23:05 +0100)
As we know how much to send, we can and should stop once we've sent that
much data as it avoids having to rely on other mechanisms to detect the
end.

This is one of the problems detected by test 582.

Reported by: Henry Ludemann <misc@hl.id.au>

lib/transfer.c

index b3e6e993568ffd280892b5656660312a78f55e58..63ab5c4e9b07a5b710f600f9556e57459b16eeaa 100644 (file)
@@ -946,6 +946,14 @@ static CURLcode readwrite_upload(struct SessionHandle *data,
       Curl_debug(data, CURLINFO_DATA_OUT, data->req.upload_fromhere,
                  (size_t)bytes_written, conn);
 
+    k->writebytecount += bytes_written;
+
+    if(k->writebytecount == data->set.infilesize) {
+      /* we have sent all data we were supposed to */
+      k->upload_done = TRUE;
+      infof(data, "We are completely uploaded and fine\n");
+    }
+
     if(data->req.upload_present != bytes_written) {
       /* we only wrote a part of the buffer (if anything), deal with it! */
 
@@ -967,7 +975,6 @@ static CURLcode readwrite_upload(struct SessionHandle *data,
       }
     }
 
-    k->writebytecount += bytes_written;
     Curl_pgrsSetUploadCounter(data, k->writebytecount);
 
   } while(0); /* just to break out from! */