summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2015-06-07 23:52:34 +0200
committerDaniel Stenberg <daniel@haxx.se>2015-06-14 23:31:01 +0200
commitff7097f72c26a9d389f135f76cb28e10ca30f4c1 (patch)
tree25d9e6ec57b9ee38c7a31120430f7c8d7034ce28
parent55fc47a40130fd6ec78fcb83da3ecedb702fa0f7 (diff)
downloadcurl-ff7097f72c26a9d389f135f76cb28e10ca30f4c1.tar.gz
urldata: store POST size in state.infilesize too
... to simplify checking when PUT _or_ POST have completed. Reported-by: Frank Meier Bug: http://curl.haxx.se/mail/lib-2015-06/0019.html
-rw-r--r--lib/http.c10
-rw-r--r--lib/multi.c5
-rw-r--r--lib/rtsp.c4
3 files changed, 11 insertions, 8 deletions
diff --git a/lib/http.c b/lib/http.c
index 8e422f0bf..7a5137e86 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -424,8 +424,8 @@ static CURLcode http_perhapsrewind(struct connectdata *conn)
/* figure out how much data we are expected to send */
switch(data->set.httpreq) {
case HTTPREQ_POST:
- if(data->set.postfieldsize != -1)
- expectsend = data->set.postfieldsize;
+ if(data->state.infilesize != -1)
+ expectsend = data->state.infilesize;
else if(data->set.postfields)
expectsend = (curl_off_t)strlen(data->set.postfields);
break;
@@ -2572,8 +2572,8 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
postsize = 0;
else {
/* figure out the size of the postfields */
- postsize = (data->set.postfieldsize != -1)?
- data->set.postfieldsize:
+ postsize = (data->state.infilesize != -1)?
+ data->state.infilesize:
(data->set.postfields? (curl_off_t)strlen(data->set.postfields):-1);
}
@@ -2696,7 +2696,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
return result;
}
- else if(data->set.postfieldsize) {
+ else if(data->state.infilesize) {
/* set the upload size to the progress meter */
Curl_pgrsSetUploadSize(data, postsize?postsize:-1);
diff --git a/lib/multi.c b/lib/multi.c
index 2956022e4..b63f8bf70 100644
--- a/lib/multi.c
+++ b/lib/multi.c
@@ -402,7 +402,10 @@ CURLMcode curl_multi_add_handle(CURLM *multi_handle,
/* Point to the multi's connection cache */
data->state.conn_cache = &multi->conn_cache;
- data->state.infilesize = data->set.filesize;
+ if(data->set.httpreq == HTTPREQ_PUT)
+ data->state.infilesize = data->set.filesize;
+ else
+ data->state.infilesize = data->set.postfieldsize;
/* This adds the new entry at the 'end' of the doubly-linked circular
list of SessionHandle structs to try and maintain a FIFO queue so
diff --git a/lib/rtsp.c b/lib/rtsp.c
index c5ca75723..5d61c6fe2 100644
--- a/lib/rtsp.c
+++ b/lib/rtsp.c
@@ -495,8 +495,8 @@ static CURLcode rtsp_do(struct connectdata *conn, bool *done)
}
else {
- postsize = (data->set.postfieldsize != -1)?
- data->set.postfieldsize:
+ postsize = (data->state.infilesize != -1)?
+ data->state.infilesize:
(data->set.postfields? (curl_off_t)strlen(data->set.postfields):0);
data->set.httpreq = HTTPREQ_POST;
}