uint32 ReadBuild(int locale) { // include build info file also std::string filename = std::string("component.wow-")+langs[locale]+".txt"; //printf("Read %s file... ", filename.c_str()); HANDLE fileHandle; if (!OpenNewestFile(filename.c_str(), &fileHandle)) { printf("Fatal error: Not found %s file!\n", filename.c_str()); exit(1); } unsigned int data_size = SFileGetFileSize(fileHandle); std::string text; text.resize(data_size); if (!SFileReadFile(fileHandle, &text[0], data_size)) { printf("Fatal error: Can't read %s file!\n", filename.c_str()); exit(1); } SFileCloseFile(fileHandle); size_t pos = text.find("version=\""); size_t pos1 = pos + strlen("version=\""); size_t pos2 = text.find("\"",pos1); if (pos == text.npos || pos2 == text.npos || pos1 >= pos2) { printf("Fatal error: Invalid %s file format!\n", filename.c_str()); exit(1); } std::string build_str = text.substr(pos1,pos2-pos1); int build = atoi(build_str.c_str()); if (build <= 0) { printf("Fatal error: Invalid %s file format!\n", filename.c_str()); exit(1); } if (build < MIN_SUPPORTED_BUILD) { printf("Fatal error: tool can correctly extract data only for build %u or later (detected: %u)!\n", MIN_SUPPORTED_BUILD, build); exit(1); } return build; }
bool FileLoader::loadFile(char *filename, bool log) { free(); HANDLE fileHandle = 0; if (!OpenNewestFile(filename, &fileHandle)) { if (log) printf("No such file %s\n", filename); return false; } data_size = SFileGetFileSize(fileHandle, NULL); data = new uint8 [data_size]; if (!data) { SFileCloseFile(fileHandle); return false; } if (!SFileReadFile(fileHandle, data, data_size, NULL, NULL)) { if (log) printf("Can't read file %s\n", filename); SFileCloseFile(fileHandle); return false; } SFileCloseFile(fileHandle); // ToDo: Fix WDT errors... if (!prepareLoadedData()) { //printf("Error loading %s\n\n", filename); //free(); return true; } return true; }