diff --git a/lib/file.c b/lib/file.c index 4b1017c6f..dc458db1f 100644 --- a/lib/file.c +++ b/lib/file.c @@ -360,7 +360,7 @@ static CURLcode file_upload(struct connectdata *conn) while(!result) { int readcount; - result = Curl_fillreadbuffer(conn, BUFSIZE, &readcount); + result = Curl_fillreadbuffer(conn, (int)data->set.buffer_size, &readcount); if(result) break; diff --git a/lib/smb.c b/lib/smb.c index 51b3434cb..5b1ffa9b7 100644 --- a/lib/smb.c +++ b/lib/smb.c @@ -607,7 +607,7 @@ static CURLcode smb_send_and_recv(struct connectdata *conn, void **msg) /* Check if there is data in the transfer buffer */ if(!smbc->send_size && smbc->upload_size) { - int nread = smbc->upload_size > BUFSIZE ? BUFSIZE : + int nread = smbc->upload_size > UPLOAD_BUFSIZE ? UPLOAD_BUFSIZE : (int) smbc->upload_size; conn->data->req.upload_fromhere = conn->data->state.uploadbuffer; result = Curl_fillreadbuffer(conn, nread, &nread); diff --git a/lib/transfer.c b/lib/transfer.c index d6aac675b..bafb6e9c8 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -904,7 +904,7 @@ static CURLcode readwrite_upload(struct Curl_easy *data, sending_http_headers = FALSE; } - result = Curl_fillreadbuffer(conn, BUFSIZE, &fillcount); + result = Curl_fillreadbuffer(conn, UPLOAD_BUFSIZE, &fillcount); if(result) return result; diff --git a/lib/urldata.h b/lib/urldata.h index 6e87684bf..22b0f8195 100644 --- a/lib/urldata.h +++ b/lib/urldata.h @@ -207,6 +207,10 @@ #define MAX_BUFSIZE CURL_MAX_READ_SIZE #define MIN_BUFSIZE 1024 +/* The upload buffer size, should not be smaller than CURL_MAX_WRITE_SIZE, as + it needs to hold a full buffer as could be sent in a write callback */ +#define UPLOAD_BUFSIZE CURL_MAX_WRITE_SIZE + /* Initial size of the buffer to store headers in, it'll be enlarged in case of need. */ #define HEADERSIZE 256 @@ -1333,7 +1337,7 @@ struct UrlState { size_t headersize; /* size of the allocation */ char *buffer; /* download buffer */ - char uploadbuffer[BUFSIZE+1]; /* upload buffer */ + char uploadbuffer[UPLOAD_BUFSIZE+1]; /* upload buffer */ curl_off_t current_speed; /* the ProgressShow() function sets this, bytes / second */ bool this_is_a_follow; /* this is a followed Location: request */