Module: wine Branch: master Commit: 5554292284db0bb5e7815a5c0419983689547984 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5554292284db0bb5e7815a5c04...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Nov 23 15:18:52 2012 +0100
wininet: Use generic ReadFileEx entry in InternetReadFileExA and get rid of ReadFileExA entry.
---
dlls/wininet/ftp.c | 8 ---- dlls/wininet/http.c | 106 +---------------------------------------------- dlls/wininet/internet.c | 11 ++++- dlls/wininet/internet.h | 7 --- 4 files changed, 10 insertions(+), 122 deletions(-)
diff --git a/dlls/wininet/ftp.c b/dlls/wininet/ftp.c index 4233bb3..f816898 100644 --- a/dlls/wininet/ftp.c +++ b/dlls/wininet/ftp.c @@ -1201,12 +1201,6 @@ static DWORD FTPFILE_ReadFile(object_header_t *hdr, void *buffer, DWORD size, DW return error; }
-static DWORD FTPFILE_ReadFileExA(object_header_t *hdr, INTERNET_BUFFERSA *buffers, - DWORD flags, DWORD_PTR context) -{ - return FTPFILE_ReadFile(hdr, buffers->lpvBuffer, buffers->dwBufferLength, &buffers->dwBufferLength); -} - static DWORD FTPFILE_ReadFileEx(object_header_t *hdr, void *buf, DWORD size, DWORD *ret_size, DWORD flags, DWORD_PTR context) { @@ -1299,7 +1293,6 @@ static const object_vtbl_t FTPFILEVtbl = { FTPFILE_QueryOption, INET_SetOption, FTPFILE_ReadFile, - FTPFILE_ReadFileExA, FTPFILE_ReadFileEx, FTPFILE_WriteFile, FTPFILE_QueryDataAvailable, @@ -3479,7 +3472,6 @@ static const object_vtbl_t FTPFINDNEXTVtbl = { NULL, NULL, NULL, - NULL, FTPFINDNEXT_FindNextFileW };
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index c4a98e5..383b907 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -2877,107 +2877,6 @@ static DWORD HTTPREQ_ReadFile(object_header_t *hdr, void *buffer, DWORD size, DW return res; }
-static void HTTPREQ_AsyncReadFileExAProc(WORKREQUEST *workRequest) -{ - struct WORKREQ_INTERNETREADFILEEXA const *data = &workRequest->u.InternetReadFileExA; - http_request_t *req = (http_request_t*)workRequest->hdr; - DWORD res; - - TRACE("INTERNETREADFILEEXA %p\n", workRequest->hdr); - - res = HTTPREQ_Read(req, data->lpBuffersOut->lpvBuffer, - data->lpBuffersOut->dwBufferLength, &data->lpBuffersOut->dwBufferLength, TRUE); - - send_request_complete(req, res == ERROR_SUCCESS, res); -} - -static DWORD HTTPREQ_ReadFileExA(object_header_t *hdr, INTERNET_BUFFERSA *buffers, - DWORD flags, DWORD_PTR context) -{ - http_request_t *req = (http_request_t*)hdr; - DWORD res, size, read, error = ERROR_SUCCESS; - - if (flags & ~(IRF_ASYNC|IRF_NO_WAIT)) - FIXME("these dwFlags aren't implemented: 0x%x\n", flags & ~(IRF_ASYNC|IRF_NO_WAIT)); - - if (buffers->dwStructSize != sizeof(*buffers)) - return ERROR_INVALID_PARAMETER; - - INTERNET_SendCallback(&req->hdr, req->hdr.dwContext, INTERNET_STATUS_RECEIVING_RESPONSE, NULL, 0); - - if (hdr->dwFlags & INTERNET_FLAG_ASYNC) - { - WORKREQUEST workRequest; - - if (TryEnterCriticalSection( &req->read_section )) - { - if (get_avail_data(req)) - { - res = HTTPREQ_Read(req, buffers->lpvBuffer, buffers->dwBufferLength, - &buffers->dwBufferLength, FALSE); - size = buffers->dwBufferLength; - LeaveCriticalSection( &req->read_section ); - goto done; - } - LeaveCriticalSection( &req->read_section ); - } - - workRequest.asyncproc = HTTPREQ_AsyncReadFileExAProc; - workRequest.hdr = WININET_AddRef(&req->hdr); - workRequest.u.InternetReadFileExA.lpBuffersOut = buffers; - - INTERNET_AsyncCall(&workRequest); - - return ERROR_IO_PENDING; - } - - read = 0; - size = buffers->dwBufferLength; - - EnterCriticalSection( &req->read_section ); - if(hdr->dwError == ERROR_SUCCESS) - hdr->dwError = INTERNET_HANDLE_IN_USE; - else if(hdr->dwError == INTERNET_HANDLE_IN_USE) - hdr->dwError = ERROR_INTERNET_INTERNAL_ERROR; - - while(1) { - res = HTTPREQ_Read(req, (char*)buffers->lpvBuffer+read, size-read, - &buffers->dwBufferLength, !(flags & IRF_NO_WAIT)); - if(res != ERROR_SUCCESS) - break; - - read += buffers->dwBufferLength; - if(read == size || end_of_read_data(req)) - break; - - LeaveCriticalSection( &req->read_section ); - - INTERNET_SendCallback(&req->hdr, req->hdr.dwContext, INTERNET_STATUS_RESPONSE_RECEIVED, - &buffers->dwBufferLength, sizeof(buffers->dwBufferLength)); - INTERNET_SendCallback(&req->hdr, req->hdr.dwContext, - INTERNET_STATUS_RECEIVING_RESPONSE, NULL, 0); - - EnterCriticalSection( &req->read_section ); - } - - if(hdr->dwError == INTERNET_HANDLE_IN_USE) - hdr->dwError = ERROR_SUCCESS; - else - error = hdr->dwError; - - LeaveCriticalSection( &req->read_section ); - size = buffers->dwBufferLength; - buffers->dwBufferLength = read; - -done: - if (res == ERROR_SUCCESS) { - INTERNET_SendCallback(&req->hdr, req->hdr.dwContext, INTERNET_STATUS_RESPONSE_RECEIVED, - &size, sizeof(size)); - } - - return res==ERROR_SUCCESS ? error : res; -} - static void HTTPREQ_AsyncReadFileExWProc(WORKREQUEST *workRequest) { struct WORKREQ_HTTPREADFILEEX const *data = &workRequest->u.HttpReadFileEx; @@ -2991,7 +2890,7 @@ static void HTTPREQ_AsyncReadFileExWProc(WORKREQUEST *workRequest) send_request_complete(req, res == ERROR_SUCCESS, res); }
-static DWORD HTTPREQ_ReadFileExW(object_header_t *hdr, void *buf, DWORD size, DWORD *ret_read, +static DWORD HTTPREQ_ReadFileEx(object_header_t *hdr, void *buf, DWORD size, DWORD *ret_read, DWORD flags, DWORD_PTR context) {
@@ -3144,8 +3043,7 @@ static const object_vtbl_t HTTPREQVtbl = { HTTPREQ_QueryOption, HTTPREQ_SetOption, HTTPREQ_ReadFile, - HTTPREQ_ReadFileExA, - HTTPREQ_ReadFileExW, + HTTPREQ_ReadFileEx, HTTPREQ_WriteFile, HTTPREQ_QueryDataAvailable, NULL diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index 48fe41d..88fe037 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -927,7 +927,6 @@ static const object_vtbl_t APPINFOVtbl = { NULL, NULL, NULL, - NULL, NULL };
@@ -2237,14 +2236,20 @@ BOOL WINAPI InternetReadFileExA(HINTERNET hFile, LPINTERNET_BUFFERSA lpBuffersOu
TRACE("(%p %p 0x%x 0x%lx)\n", hFile, lpBuffersOut, dwFlags, dwContext);
+ if (lpBuffersOut->dwStructSize != sizeof(*lpBuffersOut)) { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + hdr = get_handle_object(hFile); if (!hdr) { INTERNET_SetLastError(ERROR_INVALID_HANDLE); return FALSE; }
- if(hdr->vtbl->ReadFileExA) - res = hdr->vtbl->ReadFileExA(hdr, lpBuffersOut, dwFlags, dwContext); + if(hdr->vtbl->ReadFileEx) + res = hdr->vtbl->ReadFileEx(hdr, lpBuffersOut->lpvBuffer, lpBuffersOut->dwBufferLength, + &lpBuffersOut->dwBufferLength, dwFlags, dwContext);
WININET_Release(hdr);
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h index 4e25a93..10002d4 100644 --- a/dlls/wininet/internet.h +++ b/dlls/wininet/internet.h @@ -233,7 +233,6 @@ typedef struct { DWORD (*QueryOption)(object_header_t*,DWORD,void*,DWORD*,BOOL); DWORD (*SetOption)(object_header_t*,DWORD,void*,DWORD); DWORD (*ReadFile)(object_header_t*,void*,DWORD,DWORD*); - DWORD (*ReadFileExA)(object_header_t*,INTERNET_BUFFERSA*,DWORD,DWORD_PTR); DWORD (*ReadFileEx)(object_header_t*,void*,DWORD,DWORD*,DWORD,DWORD_PTR); DWORD (*WriteFile)(object_header_t*,const void*,DWORD,DWORD*); DWORD (*QueryDataAvailable)(object_header_t*,DWORD*,DWORD,DWORD_PTR); @@ -462,11 +461,6 @@ struct WORKREQ_INTERNETOPENURLW DWORD_PTR dwContext; };
-struct WORKREQ_INTERNETREADFILEEXA -{ - LPINTERNET_BUFFERSA lpBuffersOut; -}; - struct WORKREQ_HTTPREADFILEEX { void *buf; @@ -495,7 +489,6 @@ typedef struct WORKREQ struct WORKREQ_HTTPENDREQUESTW HttpEndRequestW; struct WORKREQ_SENDCALLBACK SendCallback; struct WORKREQ_INTERNETOPENURLW InternetOpenUrlW; - struct WORKREQ_INTERNETREADFILEEXA InternetReadFileExA; struct WORKREQ_HTTPREADFILEEX HttpReadFileEx; } u;