From: Alex Henrie alexhenrie24@gmail.com
--- dlls/shlwapi/string.c | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-)
diff --git a/dlls/shlwapi/string.c b/dlls/shlwapi/string.c index 2c894198239..be2b55e9d02 100644 --- a/dlls/shlwapi/string.c +++ b/dlls/shlwapi/string.c @@ -36,6 +36,7 @@ #include "shlobj.h" #include "mlang.h" #include "ddeml.h" +#include "atlconv.h" #include "wine/debug.h"
#include "resource.h" @@ -370,29 +371,6 @@ HRESULT WINAPI StrRetToStrW(LPSTRRET lpStrRet, const ITEMIDLIST *pidl, LPWSTR *p return hRet; }
-/* Makes a Unicode copy of an ANSI string using SysAllocString() */ -static HRESULT _SHStrDupAToBSTR(LPCSTR src, BSTR *pBstrOut) -{ - *pBstrOut = NULL; - - if (src) - { - INT len = MultiByteToWideChar(CP_ACP, 0, src, -1, NULL, 0); - WCHAR* szTemp = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - - if (szTemp) - { - MultiByteToWideChar(CP_ACP, 0, src, -1, szTemp, len); - *pBstrOut = SysAllocString(szTemp); - HeapFree(GetProcessHeap(), 0, szTemp); - - if (*pBstrOut) - return S_OK; - } - } - return E_OUTOFMEMORY; -} - /************************************************************************* * StrRetToBSTR [SHLWAPI.@] * @@ -421,11 +399,13 @@ HRESULT WINAPI StrRetToBSTR(STRRET *lpStrRet, LPCITEMIDLIST pidl, BSTR* pBstrOut break;
case STRRET_CSTR: - hRet = _SHStrDupAToBSTR(lpStrRet->u.cStr, pBstrOut); + *pBstrOut = A2BSTR(lpStrRet->u.cStr); + hRet = *pBstrOut ? S_OK : E_OUTOFMEMORY; break;
case STRRET_OFFSET: - hRet = _SHStrDupAToBSTR(((LPCSTR)&pidl->mkid) + lpStrRet->u.uOffset, pBstrOut); + *pBstrOut = A2BSTR(((const char*)&pidl->mkid) + lpStrRet->u.uOffset); + hRet = *pBstrOut ? S_OK : E_OUTOFMEMORY; break;
default: