Module: wine Branch: master Commit: 67b56774c5303141948ada19e96d08cf01247a71 URL: http://source.winehq.org/git/wine.git/?a=commit;h=67b56774c5303141948ada19e9...
Author: Jacek Caban jacek@codeweavers.com Date: Thu Mar 9 18:18:10 2017 +0100
wininet: Propagate WSAEWOULDBLOCK result from content decoding reads.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wininet/http.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index 21b93dd..26f7f87 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -484,10 +484,8 @@ static DWORD gzip_read(data_stream_t *stream, http_request_t *req, BYTE *buf, DW break;
if(!current_read) { - if(blocking_mode != BLOCKING_DISALLOW) { - WARN("unexpected end of data\n"); - gzip_stream->end_of_data = TRUE; - } + WARN("unexpected end of data\n"); + gzip_stream->end_of_data = TRUE; break; } } @@ -518,6 +516,8 @@ static DWORD gzip_read(data_stream_t *stream, http_request_t *req, BYTE *buf, DW }
TRACE("read %u bytes\n", ret_read); + if(ret_read) + res = ERROR_SUCCESS; *read = ret_read; return res; } @@ -2572,6 +2572,12 @@ static DWORD read_http_stream(http_request_t *req, BYTE *buf, DWORD size, DWORD DWORD res;
res = req->data_stream->vtbl->read(req->data_stream, req, buf, size, read, blocking_mode); + if(res != ERROR_SUCCESS) { + if(res != WSAEWOULDBLOCK) + return res; + *read = 0; + return ERROR_SUCCESS; + } assert(*read <= size);
if(req->hCacheFile) { @@ -2584,7 +2590,7 @@ static DWORD read_http_stream(http_request_t *req, BYTE *buf, DWORD size, DWORD FIXME("WriteFile failed: %u\n", GetLastError()); }
- if(req->data_stream->vtbl->end_of_data(req->data_stream, req)) + if(!*read || req->data_stream->vtbl->end_of_data(req->data_stream, req)) commit_cache_entry(req); }
@@ -2669,7 +2675,7 @@ static DWORD netconn_read(data_stream_t *stream, http_request_t *req, BYTE *buf, break; }
- if(ret || (blocking_mode == BLOCKING_DISALLOW && res == WSAEWOULDBLOCK)) + if(res == WSAEWOULDBLOCK && ret) res = ERROR_SUCCESS; }
@@ -2750,6 +2756,8 @@ static DWORD chunked_read(data_stream_t *stream, http_request_t *req, BYTE *buf, if(res == ERROR_SUCCESS && read_bytes) { chunked_stream->buf_size += read_bytes; }else if(res == WSAEWOULDBLOCK) { + if(ret_read) + res = ERROR_SUCCESS; continue_read = FALSE; continue; }else { @@ -2853,7 +2861,7 @@ static DWORD chunked_read(data_stream_t *stream, http_request_t *req, BYTE *buf,
if(ret_read) res = ERROR_SUCCESS; - if(res != ERROR_SUCCESS && res != WSAEWOULDBLOCK) + if(res != ERROR_SUCCESS) return res;
TRACE("read %d bytes\n", ret_read);