Implement StrRetToStr in shlwapi.
This commit is contained in:
parent
afe785c4d5
commit
53e5bd5000
@ -686,8 +686,8 @@ init SHLWAPI_LibMain
|
|||||||
# exported in later versions
|
# exported in later versions
|
||||||
@ stdcall StrRetToBufA (ptr ptr ptr long) StrRetToBufA
|
@ stdcall StrRetToBufA (ptr ptr ptr long) StrRetToBufA
|
||||||
@ stdcall StrRetToBufW (ptr ptr ptr long) StrRetToBufW
|
@ stdcall StrRetToBufW (ptr ptr ptr long) StrRetToBufW
|
||||||
#@ stdcall StrRetToStrA (ptr ptr ptr) StrRetToStrA
|
@ stdcall StrRetToStrA (ptr ptr ptr) StrRetToStrA
|
||||||
#@ stdcall StrRetToStrW (ptr ptr ptr) StrRetToStrW
|
@ stdcall StrRetToStrW (ptr ptr ptr) StrRetToStrW
|
||||||
@ stdcall SHRegGetPathA(long str str ptr long)SHRegGetPathA
|
@ stdcall SHRegGetPathA(long str str ptr long)SHRegGetPathA
|
||||||
@ stdcall SHRegGetPathW(long wstr wstr ptr long)SHRegGetPathW
|
@ stdcall SHRegGetPathW(long wstr wstr ptr long)SHRegGetPathW
|
||||||
@ stub MLLoadLibraryA
|
@ stub MLLoadLibraryA
|
||||||
|
@ -37,6 +37,9 @@
|
|||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||||
|
|
||||||
|
HRESULT WINAPI _SHStrDupAA(LPCSTR src, LPSTR * dest);
|
||||||
|
HRESULT WINAPI _SHStrDupAW(LPCWSTR src, LPSTR * dest);
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* ChrCmpIA [SHLWAPI.385]
|
* ChrCmpIA [SHLWAPI.385]
|
||||||
*
|
*
|
||||||
@ -558,6 +561,64 @@ HRESULT WINAPI StrRetToBufW (LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest,
|
|||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* StrRetToStrA [SHLWAPI.@]
|
||||||
|
*
|
||||||
|
* converts a STRRET to a normal string
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI StrRetToStrA(LPSTRRET pstr, const ITEMIDLIST * pidl, LPSTR* ppszName)
|
||||||
|
{
|
||||||
|
HRESULT ret = E_FAIL;
|
||||||
|
|
||||||
|
switch (pstr->uType) {
|
||||||
|
case STRRET_WSTR:
|
||||||
|
ret = _SHStrDupAW(pstr->u.pOleStr, ppszName);
|
||||||
|
CoTaskMemFree(pstr->u.pOleStr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STRRET_CSTR:
|
||||||
|
ret = _SHStrDupAA(pstr->u.cStr, ppszName);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STRRET_OFFSET:
|
||||||
|
ret = _SHStrDupAA(((LPCSTR)&pidl->mkid)+pstr->u.uOffset, ppszName);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
*ppszName = NULL;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* StrRetToStrW [SHLWAPI.@]
|
||||||
|
*
|
||||||
|
* converts a STRRET to a normal string
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI StrRetToStrW(LPSTRRET pstr, const ITEMIDLIST * pidl, LPWSTR* ppszName)
|
||||||
|
{
|
||||||
|
HRESULT ret = E_FAIL;
|
||||||
|
|
||||||
|
switch (pstr->uType) {
|
||||||
|
case STRRET_WSTR:
|
||||||
|
ret = SHStrDupW(pstr->u.pOleStr, ppszName);
|
||||||
|
CoTaskMemFree(pstr->u.pOleStr);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STRRET_CSTR:
|
||||||
|
ret = SHStrDupA(pstr->u.cStr, ppszName);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case STRRET_OFFSET:
|
||||||
|
ret = SHStrDupA(((LPCSTR)&pidl->mkid)+pstr->u.uOffset, ppszName);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
*ppszName = NULL;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* StrFormatByteSizeA [SHLWAPI.@]
|
* StrFormatByteSizeA [SHLWAPI.@]
|
||||||
*/
|
*/
|
||||||
@ -635,6 +696,34 @@ BOOL WINAPI StrTrimA(LPSTR pszSource, LPCSTR pszTrimChars)
|
|||||||
return trimmed;
|
return trimmed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* _SHStrDupA [INTERNAL]
|
||||||
|
*
|
||||||
|
* Duplicates a ASCII string to ASCII. The destination buffer is allocated.
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI _SHStrDupAA(LPCSTR src, LPSTR * dest)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
|
if (src) {
|
||||||
|
len = lstrlenA(src);
|
||||||
|
*dest = CoTaskMemAlloc(len);
|
||||||
|
} else {
|
||||||
|
*dest = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*dest) {
|
||||||
|
lstrcpynA(*dest,src, len);
|
||||||
|
hr = S_OK;
|
||||||
|
} else {
|
||||||
|
hr = E_OUTOFMEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRACE("%s->(%p)\n", debugstr_a(src), *dest);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* SHStrDupA [SHLWAPI.@]
|
* SHStrDupA [SHLWAPI.@]
|
||||||
*
|
*
|
||||||
@ -663,6 +752,34 @@ HRESULT WINAPI SHStrDupA(LPCSTR src, LPWSTR * dest)
|
|||||||
return hr;
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* _SHStrDupAW [INTERNAL]
|
||||||
|
*
|
||||||
|
* Duplicates a UNICODE to a ASCII string. The destination buffer is allocated.
|
||||||
|
*/
|
||||||
|
HRESULT WINAPI _SHStrDupAW(LPCWSTR src, LPSTR * dest)
|
||||||
|
{
|
||||||
|
HRESULT hr;
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
|
if (src) {
|
||||||
|
len = WideCharToMultiByte(CP_ACP, 0, src, -1, NULL, 0, NULL, NULL);
|
||||||
|
*dest = CoTaskMemAlloc(len);
|
||||||
|
} else {
|
||||||
|
*dest = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*dest) {
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, src, -1, *dest, len, NULL, NULL);
|
||||||
|
hr = S_OK;
|
||||||
|
} else {
|
||||||
|
hr = E_OUTOFMEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRACE("%s->(%p)\n", debugstr_w(src), *dest);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* SHStrDupW [SHLWAPI.@]
|
* SHStrDupW [SHLWAPI.@]
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user