From 5887d2c065503465a3c6ef422b0055b4ace485bd Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Sun, 14 Jul 2019 02:35:17 +0200 Subject: [PATCH] radiant: get own radiant executable file path previous code was getting it to compute app_path, lib_path and data_path but was not keeping the value --- radiant/environment.cpp | 31 +++++++++++++++++++++++++------ radiant/environment.h | 5 +++-- radiant/main.cpp | 1 + radiant/mainframe.cpp | 10 ++++++++-- radiant/mainframe.h | 2 ++ 5 files changed, 39 insertions(+), 10 deletions(-) diff --git a/radiant/environment.cpp b/radiant/environment.cpp index 29a86226..9c0f53e4 100644 --- a/radiant/environment.cpp +++ b/radiant/environment.cpp @@ -167,12 +167,19 @@ void gamedetect(){ namespace { + // executable file path + CopiedString app_filepath; + // directory paths CopiedString home_path; CopiedString app_path; CopiedString lib_path; CopiedString data_path; } +const char* environment_get_app_filepath(){ + return app_filepath.c_str(); +} + const char* environment_get_home_path(){ return home_path.c_str(); } @@ -181,7 +188,6 @@ const char* environment_get_app_path(){ return app_path.c_str(); } - const char *environment_get_lib_path() { return lib_path.c_str(); @@ -234,7 +240,10 @@ char const* getexename( char *buf ){ /* Ensure proper NUL termination */ buf[ret] = 0; + return buf; +} +char const* getexepath( char *buf ) { /* delete the program name */ *( strrchr( buf, '/' ) ) = '\0'; @@ -262,8 +271,11 @@ void environment_init( int argc, char const* argv[] ){ { char real[PATH_MAX]; - app_path = getexename( real ); - ASSERT_MESSAGE( !string_empty( app_path.c_str() ), "failed to deduce app path" ); + app_filepath = getexename( real ); + ASSERT_MESSAGE( !string_empty( app_filepath.c_str() ), "failed to deduce app path" ); + + strncpy( real, app_filepath.c_str(), strlen( app_filepath.c_str() ) ); + app_path = getexepath( real ); } { @@ -313,7 +325,14 @@ void environment_init( int argc, char const* argv[] ){ { // get path to the editor char filename[MAX_PATH + 1]; + StringOutputStream app_filepath_stream( 256 ); + StringOutputStream app_path_stream( 256 ); + GetModuleFileName( 0, filename, MAX_PATH ); + + app_filepath_stream << PathCleaned( filename ); + app_filepath = app_filepath_stream.c_str(); + char* last_separator = strrchr( filename, '\\' ); if ( last_separator != 0 ) { *( last_separator + 1 ) = '\0'; @@ -322,9 +341,9 @@ void environment_init( int argc, char const* argv[] ){ { filename[0] = '\0'; } - StringOutputStream app( 256 ); - app << PathCleaned( filename ); - app_path = app.c_str(); + + app_path_stream << PathCleaned( filename ); + app_path = app_path_stream.c_str(); lib_path = app_path; data_path = app_path; diff --git a/radiant/environment.h b/radiant/environment.h index d5d30e1c..61494f86 100644 --- a/radiant/environment.h +++ b/radiant/environment.h @@ -23,11 +23,12 @@ #define INCLUDED_ENVIRONMENT_H void environment_init( int argc, char const* argv[] ); + +const char* environment_get_app_filepath(); + const char* environment_get_home_path(); const char* environment_get_app_path(); - const char *environment_get_lib_path(); - const char *environment_get_data_path(); extern int g_argc; diff --git a/radiant/main.cpp b/radiant/main.cpp index ff52a200..172c3fa9 100644 --- a/radiant/main.cpp +++ b/radiant/main.cpp @@ -329,6 +329,7 @@ void paths_init(){ Q_mkdir( g_strSettingsPath.c_str() ); + g_strAppFilePath = environment_get_app_filepath(); g_strAppPath = environment_get_app_path(); g_strLibPath = environment_get_lib_path(); g_strDataPath = environment_get_data_path(); diff --git a/radiant/mainframe.cpp b/radiant/mainframe.cpp index 6fadba47..d3e86900 100644 --- a/radiant/mainframe.cpp +++ b/radiant/mainframe.cpp @@ -444,12 +444,18 @@ void setPakPath( int num, const char* path ){ } -// App Path +// executable file path (full path) +CopiedString g_strAppFilePath; -CopiedString g_strAppPath; ///< holds the full path of the executable +// directory paths +CopiedString g_strAppPath; CopiedString g_strLibPath; CopiedString g_strDataPath; +const char* AppFilePath_get(){ + return g_strAppFilePath.c_str(); +} + const char* AppPath_get(){ return g_strAppPath.c_str(); } diff --git a/radiant/mainframe.h b/radiant/mainframe.h index 358b9eb7..f101c25e 100644 --- a/radiant/mainframe.h +++ b/radiant/mainframe.h @@ -212,10 +212,12 @@ const int g_pakPathCount = 5; extern CopiedString g_strPakPath[g_pakPathCount]; const char* PakPath_get( int num ); +extern CopiedString g_strAppFilePath; extern CopiedString g_strAppPath; extern CopiedString g_strLibPath; extern CopiedString g_strDataPath; +const char* AppFilePath_get(); const char* AppPath_get(); const char *LibPath_get(); const char *DataPath_get(); -- 2.39.2