Permalink
Browse files

Merge branch '2012_02_getspecialfolderpath_overflow' of https://githu…

  • Loading branch information...
gavinandresen committed Feb 28, 2012
2 parents d8a80af + 21ae37d commit 6dd5ae41ac7c31a74c27e7a15024be9284cd2476
Showing with 10 additions and 33 deletions.
  1. +10 −33 src/util.cpp
View
@@ -787,46 +787,23 @@ void PrintExceptionContinue(std::exception* pex, const char* pszThread)
strMiscWarning = pszMessage;
}
#ifdef WIN32
typedef WINSHELLAPI BOOL (WINAPI *PSHGETSPECIALFOLDERPATHA)(HWND hwndOwner, LPSTR lpszPath, int nFolder, BOOL fCreate);
string MyGetSpecialFolderPath(int nFolder, bool fCreate)
{
char pszPath[MAX_PATH+100] = "";
// SHGetSpecialFolderPath isn't always available on old Windows versions
HMODULE hShell32 = LoadLibraryA("shell32.dll");
if (hShell32)
char pszPath[MAX_PATH] = "";
if(SHGetSpecialFolderPathA(NULL, pszPath, nFolder, fCreate))
{
PSHGETSPECIALFOLDERPATHA pSHGetSpecialFolderPath =
(PSHGETSPECIALFOLDERPATHA)GetProcAddress(hShell32, "SHGetSpecialFolderPathA");
if (pSHGetSpecialFolderPath)
(*pSHGetSpecialFolderPath)(NULL, pszPath, nFolder, fCreate);
FreeModule(hShell32);
return pszPath;
}
// Backup option
if (pszPath[0] == '\0')
else if (nFolder == CSIDL_STARTUP)
{
if (nFolder == CSIDL_STARTUP)
{
strcpy(pszPath, getenv("USERPROFILE"));
strcat(pszPath, "\\Start Menu\\Programs\\Startup");
}
else if (nFolder == CSIDL_APPDATA)
{
strcpy(pszPath, getenv("APPDATA"));
}
return string(getenv("USERPROFILE")) + "\\Start Menu\\Programs\\Startup";
}
return pszPath;
else if (nFolder == CSIDL_APPDATA)
{
return getenv("APPDATA");
}
return "";
}
#endif

0 comments on commit 6dd5ae4

Please sign in to comment.