diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sendf.c | 18 | ||||
-rw-r--r-- | lib/transfer.c | 33 |
2 files changed, 30 insertions, 21 deletions
diff --git a/lib/sendf.c b/lib/sendf.c index ddd8b9b5c..7d203879f 100644 --- a/lib/sendf.c +++ b/lib/sendf.c @@ -455,24 +455,6 @@ CURLcode Curl_client_write(struct connectdata *conn, #define MIN(a,b) (a < b ? a : b) -void Curl_read_rewind(struct connectdata *conn, - size_t extraBytesRead) -{ - char buf[512 + 1]; - size_t bytesToShow; - - conn->read_pos -= extraBytesRead; - conn->bits.stream_was_rewound = TRUE; - - bytesToShow = MIN(conn->buf_len - conn->read_pos, sizeof(buf)-1); - memcpy(buf, conn->master_buffer + conn->read_pos, bytesToShow); - buf[bytesToShow] = '\0'; - - DEBUGF(infof(conn->data, - "Buffer after stream rewind (read_pos = %d): [%s]", - conn->read_pos, buf)); -} - /* * Internal read-from-socket function. This is meant to deal with plain * sockets, SSL sockets and kerberos sockets. diff --git a/lib/transfer.c b/lib/transfer.c index a40c103e1..4406aeb4f 100644 --- a/lib/transfer.c +++ b/lib/transfer.c @@ -266,6 +266,32 @@ static int data_pending(struct connectdata *conn) #define data_pending(x) 0 #endif +#ifndef MIN +#define MIN(a,b) (a < b ? a : b) +#endif + +static void read_rewind(struct connectdata *conn, + size_t thismuch) +{ + conn->read_pos -= thismuch; + conn->bits.stream_was_rewound = TRUE; + +#ifdef CURLDEBUG + { + char buf[512 + 1]; + size_t show; + + show = MIN(conn->buf_len - conn->read_pos, sizeof(buf)-1); + memcpy(buf, conn->master_buffer + conn->read_pos, show); + buf[show] = '\0'; + + DEBUGF(infof(conn->data, + "Buffer after stream rewind (read_pos = %d): [%s]", + conn->read_pos, buf)); + } +#endif +} + /* * Curl_readwrite() is the low-level function to be called when data is to * be read and written to/from the connection. @@ -1145,8 +1171,9 @@ CURLcode Curl_readwrite(struct connectdata *conn, if((-1 != k->maxdownload) && (k->bytecount + nread >= k->maxdownload)) { - curl_off_t excess = k->bytecount + - ((curl_off_t) nread) - k->maxdownload; + /* The 'excess' amount below can't be more than BUFSIZE which + always will fit in a size_t */ + size_t excess = k->bytecount + nread - k->maxdownload; if (excess > 0 && !k->ignorebody) { infof(data, "Rewinding stream by : %" FORMAT_OFF_T @@ -1155,7 +1182,7 @@ CURLcode Curl_readwrite(struct connectdata *conn, ", bytecount = %" FORMAT_OFF_T ", nread = %d)\n", excess, conn->data->reqdata.path, k->size, k->maxdownload, k->bytecount, nread); - Curl_read_rewind(conn, excess); + read_rewind(conn, excess); } nread = (ssize_t) (k->maxdownload - k->bytecount); |