X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsyzygy%2Ftbprobe.cpp;h=b761b38141b6d6abbe43e1f356859d8719642de2;hp=76d8ec68628eb9995142bdffaa007db9a2fad13d;hb=b36489742b3cfd045c1960fa299199401cd0265d;hpb=01b6cdb76bbe6cea4d9bb3c23cd285a1d607aedc diff --git a/src/syzygy/tbprobe.cpp b/src/syzygy/tbprobe.cpp index 76d8ec68..b761b381 100644 --- a/src/syzygy/tbprobe.cpp +++ b/src/syzygy/tbprobe.cpp @@ -133,16 +133,16 @@ struct Atomic { std::atomic_bool ready; }; -// We define types for the different parts of the WLDEntry and DTZEntry with +// We define types for the different parts of the WDLEntry and DTZEntry with // corresponding specializations for pieces or pawns. -struct WLDEntryPiece { +struct WDLEntryPiece { PairsData* precomp; }; struct WDLEntryPawn { uint8_t pawnCount[2]; // [Lead color / other color] - WLDEntryPiece file[2][4]; // [wtm / btm][FILE_A..FILE_D] + WDLEntryPiece file[2][4]; // [wtm / btm][FILE_A..FILE_D] }; struct DTZEntryPiece { @@ -172,7 +172,7 @@ struct WDLEntry : public TBEntry { WDLEntry(const std::string& code); ~WDLEntry(); union { - WLDEntryPiece pieceTable[2]; // [wtm / btm] + WDLEntryPiece pieceTable[2]; // [wtm / btm] WDLEntryPawn pawnTable; }; }; @@ -341,6 +341,10 @@ public: #ifndef _WIN32 struct stat statbuf; int fd = ::open(fname.c_str(), O_RDONLY); + + if (fd == -1) + return *baseAddress = nullptr, nullptr; + fstat(fd, &statbuf); *mapping = statbuf.st_size; *baseAddress = mmap(nullptr, statbuf.st_size, PROT_READ, MAP_SHARED, fd, 0); @@ -353,6 +357,10 @@ public: #else HANDLE fd = CreateFile(fname.c_str(), GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); + + if (fd == INVALID_HANDLE_VALUE) + return *baseAddress = nullptr, nullptr; + DWORD size_high; DWORD size_low = GetFileSize(fd, &size_high); HANDLE mmap = CreateFileMapping(fd, nullptr, PAGE_READONLY, size_high, size_low, nullptr); @@ -380,8 +388,7 @@ public: || *data++ != *TB_MAGIC) { std::cerr << "Corrupted table in file " << fname << std::endl; unmap(*baseAddress, *mapping); - *baseAddress = nullptr; - return nullptr; + return *baseAddress = nullptr, nullptr; } return data; @@ -482,15 +489,15 @@ void HashTable::insert(const std::vector& pieces) { TBFile file(code.insert(code.find('K', 1), "v") + ".rtbw"); // KRK -> KRvK - if (!file.is_open()) + if (!file.is_open()) // Only WDL file is checked return; file.close(); MaxCardinality = std::max((int)pieces.size(), MaxCardinality); - wdlTable.push_back(WDLEntry(code)); - dtzTable.push_back(DTZEntry(wdlTable.back())); + wdlTable.emplace_back(code); + dtzTable.emplace_back(wdlTable.back()); insert(wdlTable.back().key , &wdlTable.back(), &dtzTable.back()); insert(wdlTable.back().key2, &wdlTable.back(), &dtzTable.back());