inline void LoadDBC(uint32& availableDbcLocales,barGoLink& bar, StoreProblemList& errlist, DBCStorage<T>& storage, const std::string& dbc_path, const std::string& filename) { // compatibility format and C++ structure sizes assert(DBCFileLoader::GetFormatRecordSize(storage.GetFormat()) == sizeof(T) || LoadDBC_assert_print(DBCFileLoader::GetFormatRecordSize(storage.GetFormat()),sizeof(T),filename)); std::string dbc_filename = dbc_path + filename; if(storage.Load(dbc_filename.c_str())) { bar.step(); for(uint8 i = 0; i < MAX_LOCALE; ++i) { if(!(availableDbcLocales & (1 << i))) continue; std::string dbc_filename_loc = dbc_path + localeNames[i] + "/" + filename; if(!storage.LoadStringsFrom(dbc_filename_loc.c_str())) availableDbcLocales &= ~(1<<i); // mark as not available for speedup next checks } } else { // sort problematic dbc to (1) non compatible and (2) non-existed FILE * f=fopen(dbc_filename.c_str(),"rb"); if(f) { char buf[100]; snprintf(buf,100," (exist, but have %d fields instead " SIZEFMTD ") Wrong client version DBC file?",storage.GetFieldCount(),strlen(storage.GetFormat())); errlist.push_back(dbc_filename + buf); fclose(f); } else errlist.push_back(dbc_filename); } }
inline void LoadDBC(LocalData& localeData,barGoLink& bar, StoreProblemList& errlist, DBCStorage<T>& storage, const std::string& dbc_path, const std::string& filename) { // compatibility format and C++ structure sizes assert(DBCFileLoader::GetFormatRecordSize(storage.GetFormat()) == sizeof(T) || LoadDBC_assert_print(DBCFileLoader::GetFormatRecordSize(storage.GetFormat()),sizeof(T),filename)); std::string dbc_filename = dbc_path + filename; if(storage.Load(dbc_filename.c_str())) { bar.step(); for(uint8 i = 0; fullLocaleNameList[i].name; ++i) { if (!(localeData.availableDbcLocales & (1 << i))) continue; std::string dbc_dir_loc = dbc_path + fullLocaleNameList[i].name + "/"; if (!(localeData.checkedDbcLocaleBuilds & (1 << i))) { localeData.checkedDbcLocaleBuilds |= (1<<i);// mark as checked for speedup next checks uint32 build_loc = ReadDBCBuild(dbc_dir_loc,fullLocaleNameList[i].name); if(localeData.main_build != build_loc) { localeData.availableDbcLocales &= ~(1<<i); // mark as not available for speedup next checks // exist but wrong build if (build_loc) { std::string dbc_filename_loc = dbc_path + fullLocaleNameList[i].name + "/" + filename; char buf[200]; snprintf(buf,200," (exist, but DBC locale subdir %s have DBCs for build %u instead expected build %u, it and other DBC from subdir skipped)",fullLocaleNameList[i].name,build_loc,localeData.main_build); errlist.push_back(dbc_filename_loc + buf); } continue; } } std::string dbc_filename_loc = dbc_path + fullLocaleNameList[i].name + "/" + filename; if(!storage.LoadStringsFrom(dbc_filename_loc.c_str())) localeData.availableDbcLocales &= ~(1<<i); // mark as not available for speedup next checks } } else { // sort problematic dbc to (1) non compatible and (2) non-existed FILE * f=fopen(dbc_filename.c_str(),"rb"); if(f) { char buf[100]; snprintf(buf,100," (exist, but have %d fields instead " SIZEFMTD ") Wrong client version DBC file?",storage.GetFieldCount(),strlen(storage.GetFormat())); errlist.push_back(dbc_filename + buf); fclose(f); } else errlist.push_back(dbc_filename); } }
inline void LoadDBC(barGoLink& bar, StoreProblemList& errlist, DBCStorage<T>& storage, std::string filename) { // compatibility format and C++ structure sizes assert(DBCFile::GetFormatRecordSize(storage.fmt) == sizeof(T) || LoadDBC_assert_print(DBCFile::GetFormatRecordSize(storage.fmt),sizeof(T),filename)); if(storage.Load(filename.c_str())) bar.step(); else { // sort problematic dbc to (1) non compatible and (2) non-existed FILE * f=fopen(filename.c_str(),"rb"); if(f) { char buf[100]; snprintf(buf,100," (exist, but have %d fields instead %d) Wrong client version DBC file?",storage.fieldCount,strlen(storage.fmt)); errlist.push_back(filename + buf); fclose(f); }else errlist.push_back(filename); } }
inline void LoadDBC(uint32& availableDbcLocales,barGoLink& bar, StoreProblemList& errlist, DBCStorage<T>& storage, const std::string& dbc_path, const std::string& filename, const std::string * custom_entries = NULL, const std::string * idname = NULL) { // compatibility format and C++ structure sizes if(!(DBCFileLoader::GetFormatRecordSize(storage.GetFormat()) == sizeof(T) || LoadDBC_assert_print(DBCFileLoader::GetFormatRecordSize(storage.GetFormat()),sizeof(T),filename))) return; std::string dbc_filename = dbc_path + filename; SqlDbc * sql = NULL; if (custom_entries) sql = new SqlDbc(&filename,custom_entries, idname,storage.GetFormat()); if (storage.Load(dbc_filename.c_str(), sql)) { bar.step(); } else { // sort problematic dbc to (1) non compatible and (2) non-existed FILE * f=fopen(dbc_filename.c_str(),"rb"); if (f) { printf("Can't LOAD dbc %s !\n", dbc_filename.c_str()); char buf[100]; snprintf(buf,100," (exist, but have %d fields instead " SIZEFMTD ") Wrong client version DBC file?",storage.GetFieldCount(),strlen(storage.GetFormat())); errlist.push_back(dbc_filename + buf); fclose(f); } else { printf("Can't OPEN dbc %s !\n", dbc_filename.c_str()); errlist.push_back(dbc_filename); } } delete sql; }