X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=4ffb51c707adb555962ba68876d13e685f369e74;hb=56fe208c3f5ededc520ee0d76ad2fb72146e3dc9;hp=0ea2d07a977917ff66bd78ee235ab61e10e95031;hpb=960545869c00aa3c8fc0068282f52ce55f4603c1;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 0ea2d07a..4ffb51c7 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -682,6 +682,7 @@ static char *getProgramMainDataPath() #if defined(PLATFORM_MACOSX) static char *main_data_binary_subdir = NULL; + static char *main_data_files_subdir = NULL; if (main_data_binary_subdir == NULL) { @@ -693,14 +694,29 @@ static char *getProgramMainDataPath() program.program_title, MAC_APP_BINARY_SUBDIR); } - // cut relative path to Mac OS X application binary directory from path + 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 (strSuffix(main_data_path, main_data_binary_subdir)) - main_data_path[strlen(main_data_path) - - strlen(main_data_binary_subdir)] = '\0'; + { + char *main_data_path_old = main_data_path; + + // cut relative path to Mac OS X application binary directory from path + main_data_path_old[strlen(main_data_path_old) - + strlen(main_data_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[strlen(main_data_path) - 1] = '\0'; + // add relative path to Mac OS X application resources directory to path + main_data_path = getPath2(main_data_path_old, main_data_files_subdir); + + free(main_data_path_old); + } #endif return main_data_path; @@ -2795,12 +2811,18 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list, char **ignore_tokens, int num_file_list_entries) { + SetupFileHash *ignore_tokens_hash; struct FileInfo *file_list; int num_file_list_entries_found = 0; int num_suffix_list_entries = 0; int list_pos; int i, j; + /* create hash from list of tokens to be ignored (for quick access) */ + ignore_tokens_hash = newSetupFileHash(); + for (i = 0; ignore_tokens[i] != NULL; i++) + setHashEntry(ignore_tokens_hash, ignore_tokens[i], ""); + file_list = checked_calloc(num_file_list_entries * sizeof(struct FileInfo)); for (i = 0; suffix_list[i].token != NULL; i++) @@ -2858,9 +2880,8 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list, } /* the following tokens are no file definitions, but other config tokens */ - for (j = 0; ignore_tokens[j] != NULL; j++) - if (strEqual(config_list[i].token, ignore_tokens[j])) - is_file_entry = FALSE; + if (getHashEntry(ignore_tokens_hash, config_list[i].token) != NULL) + is_file_entry = FALSE; if (is_file_entry) { @@ -2890,6 +2911,8 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list, Error(ERR_EXIT, "please fix"); } + freeSetupFileHash(ignore_tokens_hash); + return file_list; }