Andrew Eikum : shell32: Use a helper function to allocate strings from the registry.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 2 08:51:50 CST 2015


Module: wine
Branch: master
Commit: e56e9c11fac2efb85641879ada222dbce92ff13b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e56e9c11fac2efb85641879ada222dbce92ff13b

Author: Andrew Eikum <aeikum at codeweavers.com>
Date:   Fri Feb 27 09:01:43 2015 -0600

shell32: Use a helper function to allocate strings from the registry.

---

 dlls/shell32/shellpath.c | 37 ++++++++++++++++++++++++-------------
 1 file changed, 24 insertions(+), 13 deletions(-)

diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c
index caf6777..d33091d 100644
--- a/dlls/shell32/shellpath.c
+++ b/dlls/shell32/shellpath.c
@@ -3194,6 +3194,29 @@ static HRESULT get_known_folder_registry_path(
     return hr;
 }
 
+static HRESULT get_known_folder_wstr(const WCHAR *regpath, const WCHAR *value, WCHAR **out)
+{
+    DWORD size = 0;
+    HRESULT hr;
+
+    size = 0;
+    hr = HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE, regpath, value, RRF_RT_REG_SZ, NULL, NULL, &size));
+    if(FAILED(hr))
+        return hr;
+
+    *out = CoTaskMemAlloc(size);
+    if(!*out)
+        return E_OUTOFMEMORY;
+
+    hr = HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE, regpath, value, RRF_RT_REG_SZ, NULL, *out, &size));
+    if(FAILED(hr)){
+        CoTaskMemFree(*out);
+        *out = NULL;
+    }
+
+    return hr;
+}
+
 static HRESULT get_known_folder_dword(const WCHAR *registryPath, const WCHAR *value, DWORD *out)
 {
     DWORD dwSize = sizeof(DWORD);
@@ -3660,7 +3683,6 @@ static HRESULT WINAPI knownfolder_GetFolderDefinition(
 {
     struct knownfolder *knownfolder = impl_from_IKnownFolder( iface );
     HRESULT hr;
-    DWORD dwSize;
     TRACE("(%p, %p)\n", knownfolder, pKFD);
 
     if(!pKFD) return E_INVALIDARG;
@@ -3671,21 +3693,10 @@ static HRESULT WINAPI knownfolder_GetFolderDefinition(
     if(FAILED(hr))
         return hr;
 
-    hr = HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE, knownfolder->registryPath, szName, RRF_RT_REG_SZ, NULL, NULL, &dwSize));
+    hr = get_known_folder_wstr(knownfolder->registryPath, szName, &pKFD->pszName);
     if(FAILED(hr))
         return hr;
 
-    pKFD->pszName = CoTaskMemAlloc(dwSize);
-    if(!pKFD->pszName)
-        return E_OUTOFMEMORY;
-
-    hr = HRESULT_FROM_WIN32(RegGetValueW(HKEY_LOCAL_MACHINE, knownfolder->registryPath, szName, RRF_RT_REG_SZ, NULL, pKFD->pszName, &dwSize));
-    if(FAILED(hr)){
-        CoTaskMemFree(pKFD->pszName);
-        pKFD->pszName = NULL;
-        return hr;
-    }
-
     return S_OK;
 }
 




More information about the wine-cvs mailing list