X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/putty/blobdiff_plain/7bccf0fe85dabc44d168fd2f42f458911e7c4d98..4c26bb506b3c12443171551b103a81b038d25334:/windows/winstore.c diff --git a/windows/winstore.c b/windows/winstore.c index c44a9ce0..d011dbfa 100644 --- a/windows/winstore.c +++ b/windows/winstore.c @@ -23,9 +23,8 @@ static const char hex[16] = "0123456789ABCDEF"; static int tried_shgetfolderpath = FALSE; static HMODULE shell32_module = NULL; -typedef HRESULT (WINAPI *p_SHGetFolderPath_t) - (HWND, int, HANDLE, DWORD, LPTSTR); -static p_SHGetFolderPath_t p_SHGetFolderPath = NULL; +DECL_WINDOWS_FUNCTION(static, HRESULT, SHGetFolderPathA, + (HWND, int, HANDLE, DWORD, LPSTR)); static void mungestr(const char *in, char *out) { @@ -492,22 +491,26 @@ static HANDLE access_random_seed(int action) * versions of Windows. */ if (!tried_shgetfolderpath) { + /* This is likely only to bear fruit on systems with IE5+ + * installed, or WinMe/2K+. There is some faffing with + * SHFOLDER.DLL we could do to try to find an equivalent + * on older versions of Windows if we cared enough. + * However, the invocation below requires IE5+ anyway, + * so stuff that. */ shell32_module = LoadLibrary("SHELL32.DLL"); - if (shell32_module) { - p_SHGetFolderPath = (p_SHGetFolderPath_t) - GetProcAddress(shell32_module, "SHGetFolderPathA"); - } + GET_WINDOWS_FUNCTION(shell32_module, SHGetFolderPathA); + tried_shgetfolderpath = TRUE; } - if (p_SHGetFolderPath) { - if (SUCCEEDED(p_SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, - NULL, SHGFP_TYPE_CURRENT, seedpath))) { + if (p_SHGetFolderPathA) { + if (SUCCEEDED(p_SHGetFolderPathA(NULL, CSIDL_LOCAL_APPDATA, + NULL, SHGFP_TYPE_CURRENT, seedpath))) { strcat(seedpath, "\\PUTTY.RND"); if (try_random_seed(seedpath, action, &rethandle)) return rethandle; } - if (SUCCEEDED(p_SHGetFolderPath(NULL, CSIDL_APPDATA, - NULL, SHGFP_TYPE_CURRENT, seedpath))) { + if (SUCCEEDED(p_SHGetFolderPathA(NULL, CSIDL_APPDATA, + NULL, SHGFP_TYPE_CURRENT, seedpath))) { strcat(seedpath, "\\PUTTY.RND"); if (try_random_seed(seedpath, action, &rethandle)) return rethandle;