Jacek Caban (@jacek) commented about dlls/wininet/http.c:
req->read_pos += read; }
if(read < size && req->hCacheFile) {
DWORD cache_pos, err;
while(read < size) {
cache_pos = SetFilePointer(req->hCacheFile, 0, NULL, FILE_CURRENT);
err = cache_pos == INVALID_SET_FILE_POINTER ? GetLastError() : NO_ERROR;
if(err != NO_ERROR)
ERR("SetFilePointer failed with error %ld\n", err);
if(cache_pos <= GetFileSize(req->hCacheFile, NULL))
break;
Instead of checking those manually, you could just handle it by interpreting `ReadFile` result.