X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=7ac8d566362aef4a052b16909e9d1a3b3f92e963;hb=9b34554bd70ce56386dd056e3a5eea96e5cabbd0;hp=3ff1f8aa9c269d18e84b4bcb8ecf9d806287acd3;hpb=1ae81bd84cbf998cdd03a118e881668ce5a23cf1;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 3ff1f8aa..7ac8d566 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -696,41 +696,26 @@ char *getBasePath(char *filename) return basepath; } -static char *getProgramMainDataPath() +static char *getProgramMainDataPath(char *command_filename, char *base_path) { - char *main_data_path = getStringCopy(program.command_basepath); + /* check if the program's main data base directory is configured */ + if (!strEqual(base_path, ".")) + return base_path; -#if defined(PLATFORM_MACOSX) - static char *main_data_binary_subdir = NULL; - static char *main_data_files_subdir = NULL; - - if (main_data_binary_subdir == NULL) - { - main_data_binary_subdir = checked_malloc(strlen(program.program_title) + 1 + - strlen("app") + 1 + - strlen(MAC_APP_BINARY_SUBDIR) + 1); - - sprintf(main_data_binary_subdir, "%s.app/%s", - program.program_title, MAC_APP_BINARY_SUBDIR); - } - - if (main_data_files_subdir == NULL) - { - main_data_files_subdir = checked_malloc(strlen(program.program_title) + 1 + - strlen("app") + 1 + - strlen(MAC_APP_FILES_SUBDIR) + 1); - - sprintf(main_data_files_subdir, "%s.app/%s", - program.program_title, MAC_APP_FILES_SUBDIR); - } + /* if the program is configured to start from current directory (default), + determine program package directory from program binary (some versions + of KDE/Konqueror and Mac OS X (especially "Mavericks") apparently do not + set the current working directory to the program package directory) */ + char *main_data_path = getBasePath(command_filename); - if (strSuffix(main_data_path, main_data_binary_subdir)) +#if defined(PLATFORM_MACOSX) + if (strSuffix(main_data_path, MAC_APP_BINARY_SUBDIR)) { char *main_data_path_old = main_data_path; // cut relative path to Mac OS X application binary directory from path main_data_path[strlen(main_data_path) - - strlen(main_data_binary_subdir)] = '\0'; + strlen(MAC_APP_BINARY_SUBDIR)] = '\0'; // cut trailing path separator from path (but not if path is root directory) if (strSuffix(main_data_path, "/") && !strEqual(main_data_path, "/")) @@ -741,7 +726,7 @@ static char *getProgramMainDataPath() main_data_path = "."; // add relative path to Mac OS X application resources directory to path - main_data_path = getPath2(main_data_path, main_data_files_subdir); + main_data_path = getPath2(main_data_path, MAC_APP_FILES_SUBDIR); free(main_data_path_old); } @@ -963,8 +948,8 @@ void GetOptions(int argc, char *argv[], void (*print_usage_function)(void), void (*print_version_function)(void)) { - char *ro_base_path = RO_BASE_PATH; - char *rw_base_path = RW_BASE_PATH; + char *ro_base_path = getProgramMainDataPath(argv[0], RO_BASE_PATH); + char *rw_base_path = getProgramMainDataPath(argv[0], RW_BASE_PATH); char **argvplus = checked_calloc((argc + 1) * sizeof(char **)); char **options_left = &argvplus[1]; @@ -972,16 +957,6 @@ void GetOptions(int argc, char *argv[], while (argc--) argvplus[argc] = argv[argc]; - /* if the program is configured to start from current directory (default), - determine program package directory from program binary (some versions - of KDE/Konqueror and Mac OS X (especially "Mavericks") apparently do not - set the current working directory to the program package directory) */ - - if (strEqual(ro_base_path, ".")) - ro_base_path = getProgramMainDataPath(); - if (strEqual(rw_base_path, ".")) - rw_base_path = getProgramMainDataPath(); - /* initialize global program options */ options.server_host = NULL; options.server_port = 0;