diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index 14cfd045480..bfad36c6f0b 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -3314,49 +3314,39 @@ BOOL WINAPI InternetQueryDataAvailable( HINTERNET hFile, switch (lpwhr->hdr.htype) { case WH_HHTTPREQ: + retval = TRUE; if (NETCON_query_data_available(&lpwhr->netConnection, - lpdwNumberOfBytesAvailble)) + lpdwNumberOfBytesAvailble) && + !*lpdwNumberOfBytesAvailble) { - retval = TRUE; - if (!*lpdwNumberOfBytesAvailble) + /* Even if we are in async mode, we need to determine whether + * there is actually more data available. We do this by trying + * to peek only a single byte in async mode. */ + BOOL async = (lpwhr->lpHttpSession->lpAppInfo->hdr.dwFlags & INTERNET_FLAG_ASYNC); + if (NETCON_recv(&lpwhr->netConnection, buffer, + min(async ? 1 : sizeof(buffer), + lpwhr->dwContentLength - lpwhr->dwContentRead), + MSG_PEEK, (int *)lpdwNumberOfBytesAvailble) && + async && *lpdwNumberOfBytesAvailble) { - /* Even if we are in async mode, we need to determine whether - * there is actually more data available. We do this by trying - * to peek only a single byte in async mode. */ - BOOL async = (lpwhr->lpHttpSession->lpAppInfo->hdr.dwFlags & INTERNET_FLAG_ASYNC); - if (!NETCON_recv(&lpwhr->netConnection, buffer, - min(async ? 1 : sizeof(buffer), - lpwhr->dwContentLength - lpwhr->dwContentRead), - MSG_PEEK, (int *)lpdwNumberOfBytesAvailble)) + WORKREQUEST workRequest; + + *lpdwNumberOfBytesAvailble = 0; + workRequest.asyncproc = AsyncInternetQueryDataAvailableProc; + workRequest.hdr = WININET_AddRef( &lpwhr->hdr ); + + retval = INTERNET_AsyncCall(&workRequest); + if (!retval) { - INTERNET_SetLastError(ERROR_NO_MORE_FILES); + WININET_Release( &lpwhr->hdr ); + } + else + { + INTERNET_SetLastError(ERROR_IO_PENDING); retval = FALSE; } - else if (async && *lpdwNumberOfBytesAvailble) - { - WORKREQUEST workRequest; - - *lpdwNumberOfBytesAvailble = 0; - workRequest.asyncproc = AsyncInternetQueryDataAvailableProc; - workRequest.hdr = WININET_AddRef( &lpwhr->hdr ); - - retval = INTERNET_AsyncCall(&workRequest); - if (!retval) - { - WININET_Release( &lpwhr->hdr ); - } - else - { - INTERNET_SetLastError(ERROR_IO_PENDING); - retval = FALSE; - } - } } } - else - { - INTERNET_SetLastError(ERROR_NO_MORE_FILES); - } break; default: diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c index 40f3a2236b3..4500a9f5e1d 100644 --- a/dlls/wininet/netconnection.c +++ b/dlls/wininet/netconnection.c @@ -572,10 +572,10 @@ BOOL NETCON_recv(WININET_NETCONNECTION *connection, void *buf, size_t len, int f */ BOOL NETCON_query_data_available(WININET_NETCONNECTION *connection, DWORD *available) { + *available = 0; if (!NETCON_connected(connection)) return FALSE; - *available = 0; #ifdef SONAME_LIBSSL if (connection->peek_msg) *available = connection->peek_len; #endif