Commit a058584d authored by Alexandre Julliard's avatar Alexandre Julliard

Explicitly call VERSION_Init with the main exe file name, so that

application settings work for Win16 and DOS apps too.
parent bc5b931d
......@@ -332,14 +332,12 @@ static void VERSION_ParseVersion( HKEY hkey, BOOL *got_win_ver, BOOL *got_dos_ve
/**********************************************************************
* VERSION_Init
*/
static void VERSION_Init(void)
void VERSION_Init( const char *appname )
{
OBJECT_ATTRIBUTES attr;
UNICODE_STRING nameW;
HKEY hkey, config_key;
BOOL got_win_ver = FALSE, got_dos_ver = FALSE;
WCHAR buffer[MAX_PATH], appversion[MAX_PATH+20], *appname, *p;
static BOOL init_done;
static const WCHAR configW[] = {'M','a','c','h','i','n','e','\\',
'S','o','f','t','w','a','r','e','\\',
'W','i','n','e','\\',
......@@ -348,17 +346,6 @@ static void VERSION_Init(void)
static const WCHAR appdefaultsW[] = {'A','p','p','D','e','f','a','u','l','t','s','\\',0};
static const WCHAR versionW[] = {'\\','V','e','r','s','i','o','n',0};
if (init_done) return;
if (!GetModuleFileNameW( 0, buffer, MAX_PATH ))
{
WARN( "could not get module file name\n" );
return;
}
init_done = TRUE;
appname = buffer;
if ((p = strrchrW( appname, '/' ))) appname = p + 1;
if ((p = strrchrW( appname, '\\' ))) appname = p + 1;
attr.Length = sizeof(attr);
attr.RootDirectory = 0;
attr.ObjectName = &nameW;
......@@ -371,20 +358,32 @@ static void VERSION_Init(void)
attr.RootDirectory = config_key;
/* open AppDefaults\\appname\\Version key */
strcpyW( appversion, appdefaultsW );
strcatW( appversion, appname );
strcatW( appversion, versionW );
RtlInitUnicodeString( &nameW, appversion );
if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr ))
if (appname && *appname)
{
VERSION_ParseVersion( hkey, &got_win_ver, &got_dos_ver );
NtClose( hkey );
const char *p;
DWORD len;
WCHAR appversion[MAX_PATH+20];
if ((p = strrchr( appname, '/' ))) appname = p + 1;
if ((p = strrchr( appname, '\\' ))) appname = p + 1;
strcpyW( appversion, appdefaultsW );
len = strlenW(appversion);
RtlMultiByteToUnicodeN( appversion + len, sizeof(appversion) - len*sizeof(WCHAR),
&len, appname, strlen(appname)+1 );
strcatW( appversion, versionW );
TRACE( "getting version from %s\n", debugstr_w(appversion) );
RtlInitUnicodeString( &nameW, appversion );
if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr ))
{
VERSION_ParseVersion( hkey, &got_win_ver, &got_dos_ver );
NtClose( hkey );
}
if (got_win_ver && got_dos_ver) goto done;
}
if (got_win_ver && got_dos_ver) goto done;
TRACE( "getting default version\n" );
RtlInitUnicodeString( &nameW, versionW + 1 );
if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr ))
{
......@@ -569,24 +568,16 @@ static WINDOWS_VERSION VERSION_GetVersion(void)
{
static WORD winver = 0xffff;
if (versionForced) return forcedWinVersion; /* user has overridden any sensible checks */
if (winver == 0xffff) /* to be determined */
{
WINDOWS_VERSION retver;
VERSION_Init();
if (versionForced) /* user has overridden any sensible checks */
winver = forcedWinVersion;
else
{
retver = VERSION_GetLinkedDllVersion();
/* cache determined value, but do not store in case of WIN31 */
if (retver != WIN31) winver = retver;
WINDOWS_VERSION retver = VERSION_GetLinkedDllVersion();
return retver;
}
/* cache determined value, but do not store in case of WIN31 */
if (retver != WIN31) winver = retver;
return retver;
}
return winver;
}
......
......@@ -132,6 +132,7 @@ extern void PTHREAD_init_done(void);
extern void RELAY_InitDebugLists(void);
extern BOOL MAIN_MainInit(void);
extern void VERSION_Init( const char *appname );
typedef WORD (WINAPI *pUserSignalProc)( UINT, DWORD, DWORD, HMODULE16 );
......@@ -612,6 +613,7 @@ void PROCESS_InitWine( int argc, char *argv[], LPSTR win16_exe_name, HANDLE *win
MESSAGE( "%s: cannot open builtin library for '%s': %s\n", argv0, main_exe_name, error );
ExitProcess(1);
}
VERSION_Init( main_exe_name );
switch( MODULE_GetBinaryType( main_exe_file ))
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment