Commit 5f14eb56 authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

urlmon: Allow available_bytes to be set before protocol_continue call.

parent 79b236c2
...@@ -338,32 +338,38 @@ HRESULT protocol_continue(Protocol *protocol, PROTOCOLDATA *data) ...@@ -338,32 +338,38 @@ HRESULT protocol_continue(Protocol *protocol, PROTOCOLDATA *data)
protocol->flags |= FLAG_FIRST_CONTINUE_COMPLETE; protocol->flags |= FLAG_FIRST_CONTINUE_COMPLETE;
} }
if(data->pData >= UlongToPtr(BINDSTATUS_DOWNLOADINGDATA) && !protocol->available_bytes) { if(data->pData >= UlongToPtr(BINDSTATUS_DOWNLOADINGDATA)) {
BOOL res; if(!protocol->available_bytes) {
BOOL res;
/* InternetQueryDataAvailable may immediately fork and perform its asynchronous
* read, so clear the flag _before_ calling so it does not incorrectly get cleared /* InternetQueryDataAvailable may immediately fork and perform its asynchronous
* after the status callback is called */ * read, so clear the flag _before_ calling so it does not incorrectly get cleared
protocol->flags &= ~FLAG_REQUEST_COMPLETE; * after the status callback is called */
res = InternetQueryDataAvailable(protocol->request, &protocol->available_bytes, 0, 0); protocol->flags &= ~FLAG_REQUEST_COMPLETE;
if(res) { res = InternetQueryDataAvailable(protocol->request, &protocol->available_bytes, 0, 0);
if(!protocol->available_bytes) { if(res) {
if(is_start) { TRACE("available %u bytes\n", protocol->available_bytes);
TRACE("empty file\n"); if(!protocol->available_bytes) {
all_data_read(protocol); if(is_start) {
}else { TRACE("empty file\n");
WARN("unexpected end of file?\n"); all_data_read(protocol);
report_result(protocol, INET_E_DOWNLOAD_FAILURE); }else {
WARN("unexpected end of file?\n");
report_result(protocol, INET_E_DOWNLOAD_FAILURE);
}
return S_OK;
} }
}else if(GetLastError() != ERROR_IO_PENDING) {
protocol->flags |= FLAG_REQUEST_COMPLETE;
WARN("InternetQueryDataAvailable failed: %d\n", GetLastError());
report_result(protocol, INET_E_DATA_NOT_AVAILABLE);
return S_OK; return S_OK;
} }
protocol->flags |= FLAG_REQUEST_COMPLETE; protocol->flags |= FLAG_REQUEST_COMPLETE;
report_data(protocol);
}else if(GetLastError() != ERROR_IO_PENDING) {
protocol->flags |= FLAG_REQUEST_COMPLETE;
WARN("InternetQueryDataAvailable failed: %d\n", GetLastError());
report_result(protocol, INET_E_DATA_NOT_AVAILABLE);
} }
report_data(protocol);
} }
return S_OK; return S_OK;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment