* (bug 2813) ioquake3 on win32 is no longer linked to SHFolder.dll. instead

it is dynamically loaded at run-time.  this means that win95/win98
  systems can fail the homepath detection gracefully if they don't have the
  dll installed (this dll is only provided by Internet Explorer updates
  on those systems)
This commit is contained in:
Tony J. White = 2006-09-20 16:13:20 +00:00
parent ea0f646068
commit ea997b340e
2 changed files with 20 additions and 2 deletions

View file

@ -468,7 +468,7 @@ ifeq ($(PLATFORM),mingw32)
BINEXT=.exe
LDFLAGS= -mwindows -lshfolder -lwsock32 -lgdi32 -lwinmm -lole32
LDFLAGS= -mwindows -lwsock32 -lgdi32 -lwinmm -lole32
CLIENT_LDFLAGS=
ifeq ($(USE_CURL),1)

View file

@ -287,14 +287,32 @@ char *Sys_GetCurrentUser( void )
char *Sys_DefaultHomePath(void) {
TCHAR szPath[MAX_PATH];
static char path[MAX_OSPATH];
FARPROC qSHGetFolderPath;
HMODULE shfolder = LoadLibrary("shfolder.dll");
if( !SUCCEEDED( SHGetFolderPath( NULL, CSIDL_APPDATA,
if(shfolder == NULL) {
Com_Printf("Unable to load SHFolder.dll\n");
return NULL;
}
qSHGetFolderPath = GetProcAddress(shfolder, "SHGetFolderPathA");
if(qSHGetFolderPath == NULL)
{
Com_Printf("Unable to find SHGetFolderPath in SHFolder.dll\n");
FreeLibrary(shfolder);
return NULL;
}
if( !SUCCEEDED( qSHGetFolderPath( NULL, CSIDL_APPDATA,
NULL, 0, szPath ) ) )
{
Com_Printf("Unable to detect CSIDL_APPDATA\n");
FreeLibrary(shfolder);
return NULL;
}
Q_strncpyz( path, szPath, sizeof(path) );
Q_strcat( path, sizeof(path), "\\Quake3" );
FreeLibrary(shfolder);
if( !CreateDirectory( path, NULL ) )
{
if( GetLastError() != ERROR_ALREADY_EXISTS )