ChangeSet ID: 21544 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/29 05:08:46
Modified files: dlls/wininet : http.c dlls/wininet/tests: http.c
Log message: Robert Shearman rob@codeweavers.com HttpSendRequestExA/W doesn't touch lpBuffersIn->Next, so simplify the code a bit. Modify test case to demonstrate this.
Patch: http://cvs.winehq.org/patch.py?id=21544
Old revision New revision Changes Path 1.127 1.128 +31 -61 wine/dlls/wininet/http.c 1.35 1.36 +1 -1 wine/dlls/wininet/tests/http.c
Index: wine/dlls/wininet/http.c diff -u -p wine/dlls/wininet/http.c:1.127 wine/dlls/wininet/http.c:1.128 --- wine/dlls/wininet/http.c:1.127 29 Nov 2005 11: 8:46 -0000 +++ wine/dlls/wininet/http.c 29 Nov 2005 11: 8:46 -0000 @@ -1506,62 +1506,43 @@ BOOL WINAPI HttpSendRequestExA(HINTERNET LPINTERNET_BUFFERSA lpBuffersOut, DWORD dwFlags, DWORD dwContext) { - LPINTERNET_BUFFERSA ptr; - LPINTERNET_BUFFERSW lpBuffersInW,ptrW; + INTERNET_BUFFERSW BuffersInW; BOOL rc = FALSE; + DWORD headerlen;
TRACE("(%p, %p, %p, %08lx, %08lx): stub\n", hRequest, lpBuffersIn, lpBuffersOut, dwFlags, dwContext);
- ptr = lpBuffersIn; - if (ptr) - lpBuffersInW = (LPINTERNET_BUFFERSW)HeapAlloc(GetProcessHeap(), - HEAP_ZERO_MEMORY, sizeof(INTERNET_BUFFERSW)); - else - lpBuffersInW = NULL; - - ptrW = lpBuffersInW; - while (ptr) + if (lpBuffersIn) { - DWORD headerlen; - ptrW->dwStructSize = sizeof(LPINTERNET_BUFFERSW); - if (ptr->lpcszHeader) + BuffersInW.dwStructSize = sizeof(LPINTERNET_BUFFERSW); + if (lpBuffersIn->lpcszHeader) { - headerlen = MultiByteToWideChar(CP_ACP,0,ptr->lpcszHeader, - ptr->dwHeadersLength,0,0); - headerlen++; - ptrW->lpcszHeader = HeapAlloc(GetProcessHeap(),0,headerlen* + headerlen = MultiByteToWideChar(CP_ACP,0,lpBuffersIn->lpcszHeader, + lpBuffersIn->dwHeadersLength,0,0); + BuffersInW.lpcszHeader = HeapAlloc(GetProcessHeap(),0,headerlen* sizeof(WCHAR)); - ptrW->dwHeadersLength = MultiByteToWideChar(CP_ACP, 0, - ptr->lpcszHeader, ptr->dwHeadersLength, - (LPWSTR)ptrW->lpcszHeader, headerlen); + if (!BuffersInW.lpcszHeader) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + BuffersInW.dwHeadersLength = MultiByteToWideChar(CP_ACP, 0, + lpBuffersIn->lpcszHeader, lpBuffersIn->dwHeadersLength, + (LPWSTR)BuffersInW.lpcszHeader, headerlen); } - ptrW->dwHeadersTotal = ptr->dwHeadersTotal; - ptrW->lpvBuffer = ptr->lpvBuffer; - ptrW->dwBufferLength = ptr->dwBufferLength; - ptrW->dwBufferTotal= ptr->dwBufferTotal; + BuffersInW.dwHeadersTotal = lpBuffersIn->dwHeadersTotal; + BuffersInW.lpvBuffer = lpBuffersIn->lpvBuffer; + BuffersInW.dwBufferLength = lpBuffersIn->dwBufferLength; + BuffersInW.dwBufferTotal = lpBuffersIn->dwBufferTotal; + BuffersInW.Next = NULL; + }
- if (ptr->Next) - ptrW->Next = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY, - sizeof(INTERNET_BUFFERSW)); + rc = HttpSendRequestExW(hRequest, lpBuffersIn ? &BuffersInW : NULL, NULL, dwFlags, dwContext);
- ptr = ptr->Next; - ptrW = ptrW->Next; - } + if (lpBuffersIn) + HeapFree(GetProcessHeap(),0,(LPVOID)BuffersInW.lpcszHeader);
- rc = HttpSendRequestExW(hRequest, lpBuffersInW, NULL, dwFlags, dwContext); - if (lpBuffersInW) - { - ptrW = lpBuffersInW; - while (ptrW) - { - LPINTERNET_BUFFERSW ptrW2; - HeapFree(GetProcessHeap(),0,(LPVOID)ptrW->lpcszHeader); - ptrW2 = ptrW->Next; - HeapFree(GetProcessHeap(),0,ptrW); - ptrW = ptrW2; - } - } return rc; }
@@ -1576,8 +1557,6 @@ BOOL WINAPI HttpSendRequestExW(HINTERNET LPINTERNET_BUFFERSW lpBuffersOut, DWORD dwFlags, DWORD dwContext) { - LPINTERNET_BUFFERSW buf_ptr; - DWORD bufferlen = 0; BOOL rc; LPWININETHTTPREQW lpwhr; LPWSTR requestString = NULL; @@ -1599,30 +1578,21 @@ BOOL WINAPI HttpSendRequestExW(HINTERNET HTTP_FixVerb(lpwhr);
/* add headers */ - buf_ptr = lpBuffersIn; - while(buf_ptr) + if (lpBuffersIn->lpcszHeader) { - if (buf_ptr->lpcszHeader) - { - HTTP_HttpAddRequestHeadersW(lpwhr, buf_ptr->lpcszHeader, - buf_ptr->dwHeadersLength, HTTP_ADDREQ_FLAG_ADD | - HTTP_ADDHDR_FLAG_REPLACE); - } - bufferlen += buf_ptr->dwBufferTotal; - buf_ptr = buf_ptr->Next; + HTTP_HttpAddRequestHeadersW(lpwhr, lpBuffersIn->lpcszHeader, + lpBuffersIn->dwHeadersLength, HTTP_ADDREQ_FLAG_ADD | + HTTP_ADDHDR_FLAG_REPLACE); }
- lpwhr->hdr.dwFlags |= dwFlags; - lpwhr->hdr.dwContext = dwContext; - - if (bufferlen > 0) + if (lpBuffersIn->dwBufferTotal > 0) { static const WCHAR szContentLength[] = { 'C','o','n','t','e','n','t','-','L','e','n','g','t','h',':',' ', '%','l','i','\r','\n',0}; WCHAR contentLengthStr[sizeof szContentLength/2 /* includes \n\r */ + 20 /* int */ ]; - sprintfW(contentLengthStr, szContentLength, bufferlen); + sprintfW(contentLengthStr, szContentLength, lpBuffersIn->dwBufferTotal); HTTP_HttpAddRequestHeadersW(lpwhr, contentLengthStr, -1L, HTTP_ADDREQ_FLAG_ADD); } Index: wine/dlls/wininet/tests/http.c diff -u -p wine/dlls/wininet/tests/http.c:1.35 wine/dlls/wininet/tests/http.c:1.36 --- wine/dlls/wininet/tests/http.c:1.35 29 Nov 2005 11: 8:46 -0000 +++ wine/dlls/wininet/tests/http.c 29 Nov 2005 11: 8:46 -0000 @@ -1083,7 +1083,7 @@ static void HttpSendRequestEx_test(void)
BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS); - BufferIn.Next = NULL; + BufferIn.Next = (LPINTERNET_BUFFERS)0xdeadcab; BufferIn.lpcszHeader = szContentType; BufferIn.dwHeadersLength = sizeof(szContentType); BufferIn.dwHeadersTotal = sizeof(szContentType);