static el_file_ptr file_open(const char* file_name, const char* extra_path) { char str[1024]; el_zip_file_entry_t key; el_file_ptr result; Sint32 i, count; if (!file_name || !*file_name) return NULL; if (extra_path) { if (do_file_exists(file_name, extra_path, sizeof(str), str) == 1) { return xz_gz_file_open(str); } } if (do_file_exists(file_name, get_path_updates(), sizeof(str), str) == 1) { return xz_gz_file_open(str); } init_key(file_name, &key, sizeof(str), str); CHECK_AND_LOCK_MUTEX(zip_mutex); count = num_zip_files - 1; CHECK_AND_UNLOCK_MUTEX(zip_mutex); for (i = count; i >= 0; i--) { CHECK_AND_LOCK_MUTEX(zip_files[i].mutex); if (locate_in_zip(&zip_files[i], &key) == 1) { result = zip_file_open(zip_files[i].file); CHECK_AND_UNLOCK_MUTEX(zip_files[i].mutex); return result; } CHECK_AND_UNLOCK_MUTEX(zip_files[i].mutex); } if (do_file_exists(file_name, datadir, sizeof(str), str) == 1) { return xz_gz_file_open(str); } LOG_ERROR("Can't open file '%s'.", file_name); return NULL; }
static Uint32 file_exists_path(const char* file_name, const char* extra_path) { char str[1024]; el_zip_file_entry_t key; Sint32 i, count; if (file_name == 0) { return 0; } if (extra_path != 0) { if (do_file_exists(file_name, extra_path, sizeof(str), str) == 1) { return 1; } } if (do_file_exists(file_name, get_path_updates(), sizeof(str), str) == 1) { return 1; } init_key(file_name, &key, sizeof(str), str); CHECK_AND_LOCK_MUTEX(zip_mutex); count = num_zip_files - 1; CHECK_AND_UNLOCK_MUTEX(zip_mutex); for (i = count; i >= 0; i--) { CHECK_AND_LOCK_MUTEX(zip_files[i].mutex); if (find_in_zip(&zip_files[i], &key) == 1) { CHECK_AND_UNLOCK_MUTEX(zip_files[i].mutex); return 1; } CHECK_AND_UNLOCK_MUTEX(zip_files[i].mutex); } if (do_file_exists(file_name, datadir, sizeof(str), str) == 1) { return 1; } return 0; }
std::string find_file(const std::string& fname) { if(do_file_exists(fname)) { return fname; } if(have_datadir) { std::string data_fname = data_dir + "/" + fname; if(do_file_exists(data_fname)) { return data_fname; } } return fname; }
bool file_exists(const std::string& name) { return do_file_exists(find_file(name)); }