From a058584d4c1cec2a689433bf87b16f07e132750d Mon Sep 17 00:00:00 2001 From: Alexandre Julliard <julliard@winehq.org> Date: Sun, 20 Apr 2003 02:46:44 +0000 Subject: [PATCH] Explicitly call VERSION_Init with the main exe file name, so that application settings work for Win16 and DOS apps too. --- misc/version.c | 69 ++++++++++++++++++++------------------------- scheduler/process.c | 2 ++ 2 files changed, 32 insertions(+), 39 deletions(-) diff --git a/misc/version.c b/misc/version.c index 8bea96f8dba..daa428c32e5 100644 --- a/misc/version.c +++ b/misc/version.c @@ -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; } diff --git a/scheduler/process.c b/scheduler/process.c index 49eaca566b2..634e614e1d7 100644 --- a/scheduler/process.c +++ b/scheduler/process.c @@ -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 )) { -- GitLab