aboutsummaryrefslogtreecommitdiff
path: root/lib/http.c
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2010-12-04 05:53:07 +0100
committerYang Tse <yangsita@gmail.com>2010-12-04 05:53:07 +0100
commitc1901f7ed0dc43a92e611ff4cfc00ad97425318f (patch)
tree394c83122f62518080a923494fe5411afccded97 /lib/http.c
parent9c4ff4874e0df1c16d10674ec418cd23c263ec3f (diff)
fix compiler warning: conversion may lose significant bits
Diffstat (limited to 'lib/http.c')
-rw-r--r--lib/http.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/lib/http.c b/lib/http.c
index ed0730c0a..e35437f1e 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -98,6 +98,7 @@
#include "rawstr.h"
#include "content_encoding.h"
#include "rtsp.h"
+#include "warnless.h"
#define _MPRINTF_REPLACE /* use our functions only */
#include <curl/mprintf.h>
@@ -2424,27 +2425,25 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
/* when seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */
else {
curl_off_t passed=0;
-
do {
- size_t readthisamountnow = (size_t)(data->state.resume_from -
- passed);
- size_t actuallyread;
-
- if(readthisamountnow > BUFSIZE)
- readthisamountnow = BUFSIZE;
+ size_t readthisamountnow =
+ (data->state.resume_from - passed > CURL_OFF_T_C(BUFSIZE)) ?
+ BUFSIZE : curlx_sotouz(data->state.resume_from - passed);
- actuallyread = data->set.fread_func(data->state.buffer, 1,
- (size_t)readthisamountnow,
- data->set.in);
+ size_t actuallyread =
+ data->set.fread_func(data->state.buffer, 1, readthisamountnow,
+ data->set.in);
passed += actuallyread;
- if(actuallyread != readthisamountnow) {
+ if((actuallyread == 0) || (actuallyread > readthisamountnow)) {
+ /* this checks for greater-than only to make sure that the
+ CURL_READFUNC_ABORT return code still aborts */
failf(data, "Could only read %" FORMAT_OFF_T
" bytes from the input",
passed);
return CURLE_READ_ERROR;
}
- } while(passed != data->state.resume_from); /* loop until done */
+ } while(passed < data->state.resume_from);
}
}