fixed determining program main data path for Mac OS X
[rocksndiamonds.git] / src / libgame / misc.c
index 0ea2d07a977917ff66bd78ee235ab61e10e95031..bf40ca9bdfac02fbbf4c6addf2c3dd3b87b2186e 100644 (file)
@@ -701,6 +701,10 @@ static char *getProgramMainDataPath()
   // 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';
+
+  // replace empty path with current directory
+  if (strEqual(main_data_path, ""))
+    main_data_path = ".";
 #endif
 
   return main_data_path;
@@ -2795,12 +2799,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 +2868,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 +2899,8 @@ struct FileInfo *getFileListFromConfigList(struct ConfigInfo *config_list,
     Error(ERR_EXIT,   "please fix");
   }
 
+  freeSetupFileHash(ignore_tokens_hash);
+
   return file_list;
 }