kernelbase: Add SHLoadIndirectString().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
88ffcd5db4
commit
d361fa79a1
|
@ -1354,7 +1354,7 @@
|
||||||
# @ stub SHCoCreateInstance
|
# @ stub SHCoCreateInstance
|
||||||
@ stdcall SHExpandEnvironmentStringsA(str ptr long) kernel32.ExpandEnvironmentStringsA
|
@ stdcall SHExpandEnvironmentStringsA(str ptr long) kernel32.ExpandEnvironmentStringsA
|
||||||
@ stdcall SHExpandEnvironmentStringsW(wstr ptr long) kernel32.ExpandEnvironmentStringsW
|
@ stdcall SHExpandEnvironmentStringsW(wstr ptr long) kernel32.ExpandEnvironmentStringsW
|
||||||
@ stdcall SHLoadIndirectString(wstr ptr long ptr) shlwapi.SHLoadIndirectString
|
@ stdcall SHLoadIndirectString(wstr ptr long ptr)
|
||||||
# @ stub SHLoadIndirectStringInternal
|
# @ stub SHLoadIndirectStringInternal
|
||||||
@ stdcall SHRegCloseUSKey(ptr) shlwapi.SHRegCloseUSKey
|
@ stdcall SHRegCloseUSKey(ptr) shlwapi.SHRegCloseUSKey
|
||||||
@ stdcall SHRegCreateUSKeyA(str long long ptr long) shlwapi.SHRegCreateUSKeyA
|
@ stdcall SHRegCreateUSKeyA(str long long ptr long) shlwapi.SHRegCreateUSKeyA
|
||||||
|
|
|
@ -1426,3 +1426,51 @@ DWORD WINAPI SHTruncateString(char *str, DWORD size)
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI SHLoadIndirectString(const WCHAR *src, WCHAR *dst, UINT dst_len, void **reserved)
|
||||||
|
{
|
||||||
|
WCHAR *dllname = NULL;
|
||||||
|
HMODULE hmod = NULL;
|
||||||
|
HRESULT hr = E_FAIL;
|
||||||
|
|
||||||
|
TRACE("%s, %p, %#x, %p\n", debugstr_w(src), dst, dst_len, reserved);
|
||||||
|
|
||||||
|
if (src[0] == '@')
|
||||||
|
{
|
||||||
|
WCHAR *index_str;
|
||||||
|
int index;
|
||||||
|
|
||||||
|
dst[0] = 0;
|
||||||
|
dllname = StrDupW(src + 1);
|
||||||
|
index_str = strchrW(dllname, ',');
|
||||||
|
|
||||||
|
if(!index_str) goto end;
|
||||||
|
|
||||||
|
*index_str = 0;
|
||||||
|
index_str++;
|
||||||
|
index = atoiW(index_str);
|
||||||
|
|
||||||
|
hmod = LoadLibraryW(dllname);
|
||||||
|
if (!hmod) goto end;
|
||||||
|
|
||||||
|
if (index < 0)
|
||||||
|
{
|
||||||
|
if (LoadStringW(hmod, -index, dst, dst_len))
|
||||||
|
hr = S_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
FIXME("can't handle non-negative indices (%d)\n", index);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (dst != src)
|
||||||
|
lstrcpynW(dst, src, dst_len);
|
||||||
|
hr = S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
TRACE("returning %s\n", debugstr_w(dst));
|
||||||
|
end:
|
||||||
|
if (hmod) FreeLibrary(hmod);
|
||||||
|
LocalFree(dllname);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue