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, "/"))
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);
}
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];
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;