Jacek Caban : urlmon: Directly use otain_user_agent in ObtainUserAgentString.

Alexandre Julliard julliard at winehq.org
Thu Mar 25 16:49:23 CDT 2021


Module: wine
Branch: master
Commit: 8efbff575a8388fdee4d2b07cfe8620544ccb50e
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=8efbff575a8388fdee4d2b07cfe8620544ccb50e

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Mar 25 19:34:08 2021 +0100

urlmon: Directly use otain_user_agent in ObtainUserAgentString.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/urlmon/session.c | 44 ++++++++++++++++++++++----------------------
 1 file changed, 22 insertions(+), 22 deletions(-)

diff --git a/dlls/urlmon/session.c b/dlls/urlmon/session.c
index 6084ae94b11..b74d56166d9 100644
--- a/dlls/urlmon/session.c
+++ b/dlls/urlmon/session.c
@@ -510,10 +510,18 @@ static size_t obtain_user_agent(WCHAR *ret, size_t size)
     OSVERSIONINFOW info = {sizeof(info)};
     const WCHAR *os_type, *is_nt;
     DWORD res, idx=0;
+    size_t len = 0;
     BOOL is_wow;
-    size_t len;
     HKEY key;
 
+    EnterCriticalSection(&session_cs);
+    if(user_agent) {
+        len = wcslen(user_agent) + 1;
+        memcpy(ret, user_agent, min(size, len) * sizeof(WCHAR));
+    }
+    LeaveCriticalSection(&session_cs);
+    if(len) return len;
+
     GetVersionExW(&info);
     is_nt = info.dwPlatformId == VER_PLATFORM_WIN32_NT ? L"NT " : L"";
 
@@ -685,33 +693,25 @@ HRESULT WINAPI UrlMkSetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBuf
 /**************************************************************************
  *                 ObtainUserAgentString (URLMON.@)
  */
-HRESULT WINAPI ObtainUserAgentString(DWORD dwOption, LPSTR pcszUAOut, DWORD *cbSize)
+HRESULT WINAPI ObtainUserAgentString(DWORD option, char *ret, DWORD *ret_size)
 {
-    DWORD size;
-    HRESULT hres = E_FAIL;
+    DWORD size, len;
+    WCHAR buf[1024];
+    HRESULT hres = S_OK;
 
-    TRACE("(%d %p %p)\n", dwOption, pcszUAOut, cbSize);
+    TRACE("(%d %p %p)\n", option, ret, ret_size);
 
-    if(!pcszUAOut || !cbSize)
+    if(!ret || !ret_size)
         return E_INVALIDARG;
 
-    EnterCriticalSection(&session_cs);
-
-    ensure_user_agent();
-    if(user_agent) {
-        size = WideCharToMultiByte(CP_ACP, 0, user_agent, -1, NULL, 0, NULL, NULL);
-
-        if(size <= *cbSize) {
-            WideCharToMultiByte(CP_ACP, 0, user_agent, -1, pcszUAOut, *cbSize, NULL, NULL);
-            hres = S_OK;
-        }else {
-            hres = E_OUTOFMEMORY;
-        }
-
-        *cbSize = size;
-    }
+    len = obtain_user_agent(buf, ARRAY_SIZE(buf));
+    size = WideCharToMultiByte(CP_ACP, 0, buf, len, NULL, 0, NULL, NULL);
+    if(size <= *ret_size)
+        WideCharToMultiByte(CP_ACP, 0, buf, len, ret, *ret_size+1, NULL, NULL);
+    else
+        hres = E_OUTOFMEMORY;
 
-    LeaveCriticalSection(&session_cs);
+    *ret_size = size;
     return hres;
 }
 




More information about the wine-cvs mailing list