Module: wine Branch: master Commit: d282a64280f3e147f09adae9e3e3152b1d20dbb5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=d282a64280f3e147f09adae9e3...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Apr 27 14:18:12 2016 +0200
wininet: Added new heap_strndupAtoW helper and use it in HttpAddRequestHeadersA.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/wininet/http.c | 14 +++++--------- dlls/wininet/internet.h | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 9 deletions(-)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index bdc659d..ef0b36e 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -1376,21 +1376,17 @@ BOOL WINAPI HttpAddRequestHeadersW(HINTERNET hHttpRequest, BOOL WINAPI HttpAddRequestHeadersA(HINTERNET hHttpRequest, LPCSTR lpszHeader, DWORD dwHeaderLength, DWORD dwModifier) { - DWORD len; - LPWSTR hdr; + WCHAR *headers = NULL; BOOL r;
TRACE("%p, %s, %i, %i\n", hHttpRequest, debugstr_an(lpszHeader, dwHeaderLength), dwHeaderLength, dwModifier);
- len = MultiByteToWideChar( CP_ACP, 0, lpszHeader, dwHeaderLength, NULL, 0 ); - hdr = heap_alloc(len*sizeof(WCHAR)); - MultiByteToWideChar( CP_ACP, 0, lpszHeader, dwHeaderLength, hdr, len ); - if( dwHeaderLength != ~0U ) - dwHeaderLength = len; + if(lpszHeader) + headers = heap_strndupAtoW(lpszHeader, dwHeaderLength, &dwHeaderLength);
- r = HttpAddRequestHeadersW( hHttpRequest, hdr, dwHeaderLength, dwModifier ); + r = HttpAddRequestHeadersW(hHttpRequest, headers, dwHeaderLength, dwModifier);
- heap_free( hdr ); + heap_free(headers); return r; }
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h index 8c3a1f1..eb3a023 100644 --- a/dlls/wininet/internet.h +++ b/dlls/wininet/internet.h @@ -166,6 +166,25 @@ static inline LPWSTR heap_strndupW(LPCWSTR str, UINT max_len) return ret; }
+static inline WCHAR *heap_strndupAtoW(const char *str, int len_a, DWORD *len_w) +{ + WCHAR *ret = NULL; + + if(str) { + size_t len; + if(len_a < 0) len_a = strlen(str); + len = MultiByteToWideChar(CP_ACP, 0, str, len_a, NULL, 0); + ret = heap_alloc((len+1)*sizeof(WCHAR)); + if(ret) { + MultiByteToWideChar(CP_ACP, 0, str, len_a, ret, len); + ret[len] = 0; + *len_w = len; + } + } + + return ret; +} + static inline WCHAR *heap_strdupAtoW(const char *str) { LPWSTR ret = NULL;