// Load the item lists from the file in players config directory // void List_Container::load(void) { loaded = true; saved_item_lists.clear(); std::string fullpath = get_path_config() + std::string(filename); std::ifstream in(fullpath.c_str()); if (!in) return; int revision; in >> revision; if (revision != FILE_REVISION) { LOG_ERROR("%s: %s [%s]\n", __FILE__, item_list_version_error_str, fullpath.c_str() ); return; } while (!in.eof()) { saved_item_lists.push_back(List()); if (!saved_item_lists.back().read(in)) saved_item_lists.pop_back(); } in.close(); sort_list(); active_list = 0; }
// Load the item lists from the file in players config directory // void List_Container::load(void) { loaded = true; saved_item_lists.clear(); std::string fullpath = get_path_config() + std::string(filename); std::ifstream in(fullpath.c_str()); if (!in) return; int revision; in >> revision; if (revision != FILE_REVISION) { LOG_ERROR("%s: %s [%s]\n", __FILE__, item_list_version_error_str, fullpath.c_str() ); LOG_TO_CONSOLE(c_red2, item_list_version_error_str); return; } bool logged_error = false; while (!in.eof()) { saved_item_lists.push_back(List()); if (!saved_item_lists.back().read(in)) { if ((saved_item_lists.back().is_valid_format()) && !logged_error) { LOG_TO_CONSOLE(c_red2, item_list_format_error); logged_error = true; } saved_item_lists.pop_back(); } } in.close(); sort_list(); set_active(initial_active_list); }
void set_server_details() { char id[20]; int num; safe_strncpy(id, check_server_id_on_command_line(), sizeof(id)); if (!strcmp(id, "")) { safe_strncpy(id, "main", sizeof(id)); } num = find_server_from_id(id); if (num == -1) { // Oops... what they they specify on the command line? LOG_ERROR("Server profile not found in servers.lst for server: %s. Failover to server: main.", id); // Failover to the main server num = find_server_from_id("main"); if (num == -1) { // Error, this is a problem! LOG_ERROR("Fatal error: Server profile not found in servers.lst for server: main"); exit(1); } } // We found a valid profile so set some vars LOG_DEBUG("Using the server profile: %s", servers[num].id); cur_server = num; safe_strncpy((char *)server_address, (char *)servers[num].address, sizeof(server_address)); port = servers[num].port; // Check if the config directory for the profile exists and if not then create and // copy main's ini file into it if (!check_configdir()) { char src[1000]; char dest[1000]; mkdir_tree(get_path_config(), 0); // First, try to copy the ini file out of $CONF/main safe_snprintf(src, sizeof(src), "%smain/el.ini", get_path_config_base()); safe_snprintf(dest, sizeof(dest), "%sel.ini", get_path_config()); copy_file(src, dest); // Secondly, try to copy the ini file out of $CONF (this will fail without harm if above succeeds) safe_snprintf(src, sizeof(src), "%s/el.ini", get_path_config_base()); safe_snprintf(dest, sizeof(dest), "%sel.ini", get_path_config()); copy_file(src, dest); } }
el_file_ptr el_open_anywhere(const char* file_name) { el_file_ptr result; ENTER_DEBUG_MARK("file open"); result = file_open(file_name, get_path_config()); LEAVE_DEBUG_MARK("file open"); return result; }
int el_file_exists_anywhere(const char* file_name) { int result; ENTER_DEBUG_MARK("file exists"); result = file_exists_path(file_name, get_path_config()); LEAVE_DEBUG_MARK("file exists"); return result; }
/** *@brief 在配置文件指定的路径下,当这个路径被第一次分配时, 创建可能分配到的所有的子文件夹, 即文件夹0-9a-z. * 这个功能由一个daemon负责, 不需要在程序中做, 以减少i/0操作. * * 这个程序任然可以用做创建目录 * * *@param[in] year_mon某年某月的目录, 比如200904. 当为空是, 设定为当前年月 */ int eyou_create_dir(char *year_mon) { SIMPLE_FILED_PATH_CONFIG *configs = NULL; char path[MAX_PATH_LEN]; char date[7] = {0}; mode_t mode = S_IRWXU | S_IRWXG | S_IRWXO ; if ( NULL == glb_flink_cfg){ glb_flink_cfg = get_path_config();; } configs = get_path_config(); if(NULL == configs){ return EYOU_FILE_FALSE; } if(NULL == year_mon){ /* 先创建文件夹 */ time_t epoch_time = time(NULL); struct tm *cur_time = localtime(&epoch_time); cur_time->tm_year += 1900; snprintf(date, 7, "%04d%02d", cur_time->tm_year, cur_time->tm_mon); year_mon = date; } while(configs){ snprintf(path, MAX_PATH_LEN, "%s/%s", configs->str_path, year_mon); /* 创建以日期分类的目录 */ if( -1 != mkdir(path, mode) ){ create_subdir(path, mode, configs->hash_level); } configs = configs->next; } return EYOU_FILE_TRUE; }
void read_config() { // Set our configdir const char * tcfg = get_path_config(); my_strncp (configdir, tcfg , sizeof(configdir)); if ( !read_el_ini () ) { // oops, the file doesn't exist, give up LOG_ERROR("Failure reading mapedit.ini"); SDL_Quit (); exit (1); } }
// Save the item lists to a file in players config directory // void List_Container::save(void) { if (!loaded) return; std::string fullpath = get_path_config() + std::string(filename); std::ofstream out(fullpath.c_str()); if (!out) { LOG_ERROR("%s: %s [%s]\n", __FILE__, item_list_save_error_str, fullpath.c_str() ); LOG_TO_CONSOLE(c_red2, item_list_save_error_str); return; } out << FILE_REVISION << std::endl << std::endl; for (size_t i=0; i<saved_item_lists.size(); ++i) { saved_item_lists[i].write(out); out << std::endl; } out.close(); last_mod_time = 0; }
// Save the object/category mappings. // Grouped for each category to save space and allow easy image/item id mixing // void Category_Maps::save(void) { if (!must_save) return; std::string fullpath = get_path_config() + std::string(filename); std::ofstream out(fullpath.c_str()); if (!out) { LOG_ERROR("%s: %s [%s]\n", __FILE__, item_list_save_error_str, fullpath.c_str() ); LOG_TO_CONSOLE(c_red2, item_list_save_error_str); return; } // store the ids grouped by category std::map<int,IDS> ids_in_cat; for (std::map<int,int>::const_iterator i=cat_by_image_id.begin(); i!=cat_by_image_id.end(); ++i) ids_in_cat[i->second].images.push_back(i->first); for (std::map<Uint16,int>::const_iterator i=cat_by_item_id.begin(); i!=cat_by_item_id.end(); ++i) ids_in_cat[i->second].items.push_back(i->first); // step though each category, writing ids for (std::map<int,IDS>::const_iterator i=ids_in_cat.begin(); i!=ids_in_cat.end(); ++i) { // write category id out << i->first << std::endl; // write the number of image ids, then the values out << i->second.images.size() << " "; for (std::vector<int>::const_iterator j=i->second.images.begin(); j!=i->second.images.end(); ++j) out << *j << " "; out << std::endl; // write the number of item ids, then the values out << i->second.items.size() << " "; for (std::vector<Uint16>::const_iterator j=i->second.items.begin(); j!=i->second.items.end(); ++j) out << *j << " "; out << std::endl << std::endl; } must_save = false; }
// Load the object/category mappings. // void Category_Maps::load(void) { loaded = true; cat_by_image_id.clear(); cat_by_item_id.clear(); std::string fullpath = get_path_config() + std::string(filename); std::ifstream in(fullpath.c_str()); if (!in) return; while (!in.eof()) { // read the info, image_id and item_id lines std::string info_line, image_id_line, item_id_line; while (getline(in, info_line) && info_line.empty()); getline(in, image_id_line); getline(in, item_id_line); if (info_line.empty()) break; // read the category std::istringstream ss(info_line); int category = -1; ss >> category; // read and count the image id values and store in the map ss.clear(); ss.str(image_id_line); int value = 0; int actual_num_image_ids = 0; int expected_num_image_ids = 0; ss >> expected_num_image_ids; while (ss >> value) { cat_by_image_id[value] = category; actual_num_image_ids++; } // read and count the item id values and store in the map ss.clear(); ss.str(item_id_line); Uint16 ui_value = 0; int actual_num_item_ids = 0; int expected_num_item_ids = 0; ss >> expected_num_item_ids; while (ss >> ui_value) { cat_by_item_id[ui_value] = category; actual_num_item_ids++; } // check for format errors and end now if something detected if ((category<0) || (actual_num_image_ids != expected_num_image_ids) || (actual_num_item_ids != expected_num_item_ids)) { LOG_TO_CONSOLE(c_red2, item_list_cat_format_error_str); LOG_ERROR("%s: %s cat=%d expected/actual image=%d/%d item %d/%d\n", __FILE__, item_list_cat_format_error_str, category, expected_num_image_ids, actual_num_image_ids, expected_num_item_ids, actual_num_item_ids ); break; } } must_save = false; }