Skip to content
Snippets Groups Projects
Commit a058584d authored by Alexandre Julliard's avatar Alexandre Julliard
Browse files

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

application settings work for Win16 and DOS apps too.
parent bc5b931d
No related branches found
No related tags found
No related merge requests found
...@@ -332,14 +332,12 @@ static void VERSION_ParseVersion( HKEY hkey, BOOL *got_win_ver, BOOL *got_dos_ve ...@@ -332,14 +332,12 @@ static void VERSION_ParseVersion( HKEY hkey, BOOL *got_win_ver, BOOL *got_dos_ve
/********************************************************************** /**********************************************************************
* VERSION_Init * VERSION_Init
*/ */
static void VERSION_Init(void) void VERSION_Init( const char *appname )
{ {
OBJECT_ATTRIBUTES attr; OBJECT_ATTRIBUTES attr;
UNICODE_STRING nameW; UNICODE_STRING nameW;
HKEY hkey, config_key; HKEY hkey, config_key;
BOOL got_win_ver = FALSE, got_dos_ver = FALSE; 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','\\', static const WCHAR configW[] = {'M','a','c','h','i','n','e','\\',
'S','o','f','t','w','a','r','e','\\', 'S','o','f','t','w','a','r','e','\\',
'W','i','n','e','\\', 'W','i','n','e','\\',
...@@ -348,17 +346,6 @@ static void VERSION_Init(void) ...@@ -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 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}; 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.Length = sizeof(attr);
attr.RootDirectory = 0; attr.RootDirectory = 0;
attr.ObjectName = &nameW; attr.ObjectName = &nameW;
...@@ -371,20 +358,32 @@ static void VERSION_Init(void) ...@@ -371,20 +358,32 @@ static void VERSION_Init(void)
attr.RootDirectory = config_key; attr.RootDirectory = config_key;
/* open AppDefaults\\appname\\Version key */ /* open AppDefaults\\appname\\Version key */
if (appname && *appname)
strcpyW( appversion, appdefaultsW );
strcatW( appversion, appname );
strcatW( appversion, versionW );
RtlInitUnicodeString( &nameW, appversion );
if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr ))
{ {
VERSION_ParseVersion( hkey, &got_win_ver, &got_dos_ver ); const char *p;
NtClose( hkey ); 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 ); RtlInitUnicodeString( &nameW, versionW + 1 );
if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr )) if (!NtOpenKey( &hkey, KEY_ALL_ACCESS, &attr ))
{ {
...@@ -569,24 +568,16 @@ static WINDOWS_VERSION VERSION_GetVersion(void) ...@@ -569,24 +568,16 @@ static WINDOWS_VERSION VERSION_GetVersion(void)
{ {
static WORD winver = 0xffff; static WORD winver = 0xffff;
if (versionForced) return forcedWinVersion; /* user has overridden any sensible checks */
if (winver == 0xffff) /* to be determined */ if (winver == 0xffff) /* to be determined */
{ {
WINDOWS_VERSION retver; WINDOWS_VERSION retver = VERSION_GetLinkedDllVersion();
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;
return retver; /* cache determined value, but do not store in case of WIN31 */
} if (retver != WIN31) winver = retver;
return retver;
} }
return winver; return winver;
} }
......
...@@ -132,6 +132,7 @@ extern void PTHREAD_init_done(void); ...@@ -132,6 +132,7 @@ extern void PTHREAD_init_done(void);
extern void RELAY_InitDebugLists(void); extern void RELAY_InitDebugLists(void);
extern BOOL MAIN_MainInit(void); extern BOOL MAIN_MainInit(void);
extern void VERSION_Init( const char *appname );
typedef WORD (WINAPI *pUserSignalProc)( UINT, DWORD, DWORD, HMODULE16 ); 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 ...@@ -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 ); MESSAGE( "%s: cannot open builtin library for '%s': %s\n", argv0, main_exe_name, error );
ExitProcess(1); ExitProcess(1);
} }
VERSION_Init( main_exe_name );
switch( MODULE_GetBinaryType( main_exe_file )) switch( MODULE_GetBinaryType( main_exe_file ))
{ {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment