wine/dlls/wininet http.c tests/http.c
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Nov 29 05:08:46 CST 2005
ChangeSet ID: 21544
CVSROOT: /opt/cvs-commit
Module name: wine
Changes by: julliard at winehq.org 2005/11/29 05:08:46
Modified files:
dlls/wininet : http.c
dlls/wininet/tests: http.c
Log message:
Robert Shearman <rob at 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);
More information about the wine-cvs
mailing list