diff options
author | Yang Tse <yangsita@gmail.com> | 2010-12-04 05:53:07 +0100 |
---|---|---|
committer | Yang Tse <yangsita@gmail.com> | 2010-12-04 05:53:07 +0100 |
commit | c1901f7ed0dc43a92e611ff4cfc00ad97425318f (patch) | |
tree | 394c83122f62518080a923494fe5411afccded97 /lib/http.c | |
parent | 9c4ff4874e0df1c16d10674ec418cd23c263ec3f (diff) |
fix compiler warning: conversion may lose significant bits
Diffstat (limited to 'lib/http.c')
-rw-r--r-- | lib/http.c | 23 |
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); } } |