@@ -1148,7 +1148,7 @@ void CClient::Render()
11481148 RenderGraphs ();
11491149}
11501150
1151- const char *CClient::LoadMap (const char *pName, const char *pFilename, SHA256_DIGEST *pWantedSha256 , unsigned WantedCrc)
1151+ const char *CClient::LoadMap (const char *pName, const char *pFilename, const std::optional< SHA256_DIGEST> &WantedSha256 , unsigned WantedCrc)
11521152{
11531153 static char s_aErrorMsg[128 ];
11541154
@@ -1163,11 +1163,11 @@ const char *CClient::LoadMap(const char *pName, const char *pFilename, SHA256_DI
11631163 return s_aErrorMsg;
11641164 }
11651165
1166- if (pWantedSha256 && m_pMap->Sha256 () != *pWantedSha256 )
1166+ if (WantedSha256. has_value () && m_pMap->Sha256 () != WantedSha256. value () )
11671167 {
11681168 char aWanted[SHA256_MAXSTRSIZE];
11691169 char aGot[SHA256_MAXSTRSIZE];
1170- sha256_str (*pWantedSha256 , aWanted, sizeof (aWanted));
1170+ sha256_str (WantedSha256. value () , aWanted, sizeof (aWanted));
11711171 sha256_str (m_pMap->Sha256 (), aGot, sizeof (aWanted));
11721172 str_format (s_aErrorMsg, sizeof (s_aErrorMsg), " map differs from the server. %s != %s" , aGot, aWanted);
11731173 m_pConsole->Print (IConsole::OUTPUT_LEVEL_ADDINFO, " client" , s_aErrorMsg);
@@ -1176,7 +1176,7 @@ const char *CClient::LoadMap(const char *pName, const char *pFilename, SHA256_DI
11761176 }
11771177
11781178 // Only check CRC if we don't have the secure SHA256.
1179- if (!pWantedSha256 && m_pMap->Crc () != WantedCrc)
1179+ if (!WantedSha256. has_value () && m_pMap->Crc () != WantedCrc)
11801180 {
11811181 str_format (s_aErrorMsg, sizeof (s_aErrorMsg), " map differs from the server. %08x != %08x" , m_pMap->Crc (), WantedCrc);
11821182 m_pConsole->Print (IConsole::OUTPUT_LEVEL_ADDINFO, " client" , s_aErrorMsg);
@@ -1200,7 +1200,7 @@ const char *CClient::LoadMap(const char *pName, const char *pFilename, SHA256_DI
12001200 return nullptr ;
12011201}
12021202
1203- static void FormatMapDownloadFilename (const char *pName, const SHA256_DIGEST *pSha256 , int Crc, bool Temp, char *pBuffer, int BufferSize)
1203+ static void FormatMapDownloadFilename (const char *pName, const std::optional< SHA256_DIGEST> &Sha256 , int Crc, bool Temp, char *pBuffer, int BufferSize)
12041204{
12051205 char aSuffix[32 ];
12061206 if (Temp)
@@ -1212,10 +1212,10 @@ static void FormatMapDownloadFilename(const char *pName, const SHA256_DIGEST *pS
12121212 str_copy (aSuffix, " .map" );
12131213 }
12141214
1215- if (pSha256 )
1215+ if (Sha256. has_value () )
12161216 {
12171217 char aSha256[SHA256_MAXSTRSIZE];
1218- sha256_str (*pSha256 , aSha256, sizeof (aSha256));
1218+ sha256_str (Sha256. value () , aSha256, sizeof (aSha256));
12191219 str_format (pBuffer, BufferSize, " downloadedmaps/%s_%s%s" , pName, aSha256, aSuffix);
12201220 }
12211221 else
@@ -1224,37 +1224,37 @@ static void FormatMapDownloadFilename(const char *pName, const SHA256_DIGEST *pS
12241224 }
12251225}
12261226
1227- const char *CClient::LoadMapSearch (const char *pMapName, SHA256_DIGEST *pWantedSha256 , int WantedCrc)
1227+ const char *CClient::LoadMapSearch (const char *pMapName, const std::optional< SHA256_DIGEST> &WantedSha256 , int WantedCrc)
12281228{
12291229 char aBuf[512 ];
12301230 char aWanted[SHA256_MAXSTRSIZE + 16 ];
12311231 aWanted[0 ] = 0 ;
1232- if (pWantedSha256 )
1232+ if (WantedSha256. has_value () )
12331233 {
12341234 char aWantedSha256[SHA256_MAXSTRSIZE];
1235- sha256_str (*pWantedSha256 , aWantedSha256, sizeof (aWantedSha256));
1235+ sha256_str (WantedSha256. value () , aWantedSha256, sizeof (aWantedSha256));
12361236 str_format (aWanted, sizeof (aWanted), " sha256=%s " , aWantedSha256);
12371237 }
12381238 str_format (aBuf, sizeof (aBuf), " loading map, map=%s wanted %scrc=%08x" , pMapName, aWanted, WantedCrc);
12391239 m_pConsole->Print (IConsole::OUTPUT_LEVEL_ADDINFO, " client" , aBuf);
12401240
12411241 // try the normal maps folder
12421242 str_format (aBuf, sizeof (aBuf), " maps/%s.map" , pMapName);
1243- const char *pError = LoadMap (pMapName, aBuf, pWantedSha256 , WantedCrc);
1243+ const char *pError = LoadMap (pMapName, aBuf, WantedSha256 , WantedCrc);
12441244 if (!pError)
12451245 return nullptr ;
12461246
12471247 // try the downloaded maps
1248- FormatMapDownloadFilename (pMapName, pWantedSha256 , WantedCrc, false , aBuf, sizeof (aBuf));
1249- pError = LoadMap (pMapName, aBuf, pWantedSha256 , WantedCrc);
1248+ FormatMapDownloadFilename (pMapName, WantedSha256 , WantedCrc, false , aBuf, sizeof (aBuf));
1249+ pError = LoadMap (pMapName, aBuf, WantedSha256 , WantedCrc);
12501250 if (!pError)
12511251 return nullptr ;
12521252
12531253 // backward compatibility with old names
1254- if (pWantedSha256 )
1254+ if (WantedSha256. has_value () )
12551255 {
1256- FormatMapDownloadFilename (pMapName, nullptr , WantedCrc, false , aBuf, sizeof (aBuf));
1257- pError = LoadMap (pMapName, aBuf, pWantedSha256 , WantedCrc);
1256+ FormatMapDownloadFilename (pMapName, std:: nullopt , WantedCrc, false , aBuf, sizeof (aBuf));
1257+ pError = LoadMap (pMapName, aBuf, WantedSha256 , WantedCrc);
12581258 if (!pError)
12591259 return nullptr ;
12601260 }
@@ -1264,7 +1264,7 @@ const char *CClient::LoadMapSearch(const char *pMapName, SHA256_DIGEST *pWantedS
12641264 str_format (aFilename, sizeof (aFilename), " %s.map" , pMapName);
12651265 if (Storage ()->FindFile (aFilename, " maps" , IStorage::TYPE_ALL, aBuf, sizeof (aBuf)))
12661266 {
1267- pError = LoadMap (pMapName, aBuf, pWantedSha256 , WantedCrc);
1267+ pError = LoadMap (pMapName, aBuf, WantedSha256 , WantedCrc);
12681268 if (!pError)
12691269 return nullptr ;
12701270 }
@@ -1653,15 +1653,15 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy)
16531653
16541654 ResetMapDownload (true );
16551655
1656- SHA256_DIGEST *pMapSha256 = nullptr ;
1656+ std::optional< SHA256_DIGEST> MapSha256 ;
16571657 const char *pMapUrl = nullptr ;
16581658 if (MapDetailsWerePresent && str_comp (m_aMapDetailsName, pMap) == 0 && m_MapDetailsCrc == MapCrc)
16591659 {
1660- pMapSha256 = & m_MapDetailsSha256;
1660+ MapSha256 = m_MapDetailsSha256;
16611661 pMapUrl = m_aMapDetailsUrl[0 ] ? m_aMapDetailsUrl : nullptr ;
16621662 }
16631663
1664- if (LoadMapSearch (pMap, pMapSha256 , MapCrc) == nullptr )
1664+ if (LoadMapSearch (pMap, MapSha256 , MapCrc) == nullptr )
16651665 {
16661666 m_pConsole->Print (IConsole::OUTPUT_LEVEL_ADDINFO, " client/network" , " loading done" );
16671667 SetLoadingStateDetail (IClient::LOADING_STATE_DETAIL_SENDING_READY);
@@ -1670,20 +1670,19 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy)
16701670 else
16711671 {
16721672 // start map download
1673- FormatMapDownloadFilename (pMap, pMapSha256 , MapCrc, false , m_aMapdownloadFilename, sizeof (m_aMapdownloadFilename));
1674- FormatMapDownloadFilename (pMap, pMapSha256 , MapCrc, true , m_aMapdownloadFilenameTemp, sizeof (m_aMapdownloadFilenameTemp));
1673+ FormatMapDownloadFilename (pMap, MapSha256 , MapCrc, false , m_aMapdownloadFilename, sizeof (m_aMapdownloadFilename));
1674+ FormatMapDownloadFilename (pMap, MapSha256 , MapCrc, true , m_aMapdownloadFilenameTemp, sizeof (m_aMapdownloadFilenameTemp));
16751675
16761676 char aBuf[256 ];
16771677 str_format (aBuf, sizeof (aBuf), " starting to download map to '%s'" , m_aMapdownloadFilenameTemp);
16781678 m_pConsole->Print (IConsole::OUTPUT_LEVEL_ADDINFO, " client/network" , aBuf);
16791679
16801680 str_copy (m_aMapdownloadName, pMap);
1681- m_MapdownloadSha256Present = (bool )pMapSha256;
1682- m_MapdownloadSha256 = pMapSha256 ? *pMapSha256 : SHA256_ZEROED;
1681+ m_MapdownloadSha256 = MapSha256;
16831682 m_MapdownloadCrc = MapCrc;
16841683 m_MapdownloadTotalsize = MapSize;
16851684
1686- if (pMapSha256 )
1685+ if (MapSha256. has_value () )
16871686 {
16881687 char aUrl[256 ];
16891688 char aEscaped[256 ];
@@ -1694,7 +1693,7 @@ void CClient::ProcessServerPacket(CNetChunk *pPacket, int Conn, bool Dummy)
16941693 m_pMapdownloadTask = HttpGetFile (pMapUrl ? pMapUrl : aUrl, Storage (), m_aMapdownloadFilenameTemp, IStorage::TYPE_SAVE);
16951694 m_pMapdownloadTask->Timeout (CTimeout{g_Config.m_ClMapDownloadConnectTimeoutMs , 0 , g_Config.m_ClMapDownloadLowSpeedLimit , g_Config.m_ClMapDownloadLowSpeedTime });
16961695 m_pMapdownloadTask->MaxResponseSize (MapSize);
1697- m_pMapdownloadTask->ExpectSha256 (*pMapSha256 );
1696+ m_pMapdownloadTask->ExpectSha256 (MapSha256. value () );
16981697 Http ()->Run (m_pMapdownloadTask);
16991698 }
17001699 else
@@ -2369,8 +2368,7 @@ void CClient::ResetMapDownload(bool ResetActive)
23692368 if (ResetActive)
23702369 {
23712370 m_MapdownloadChunk = 0 ;
2372- m_MapdownloadSha256Present = false ;
2373- m_MapdownloadSha256 = SHA256_ZEROED;
2371+ m_MapdownloadSha256 = std::nullopt ;
23742372 m_MapdownloadCrc = 0 ;
23752373 m_MapdownloadTotalsize = -1 ;
23762374 m_MapdownloadAmount = 0 ;
@@ -2384,8 +2382,6 @@ void CClient::FinishMapDownload()
23842382{
23852383 m_pConsole->Print (IConsole::OUTPUT_LEVEL_ADDINFO, " client/network" , " download complete, loading map" );
23862384
2387- SHA256_DIGEST *pSha256 = m_MapdownloadSha256Present ? &m_MapdownloadSha256 : nullptr ;
2388-
23892385 bool FileSuccess = true ;
23902386 FileSuccess &= Storage ()->RemoveFile (m_aMapdownloadFilename, IStorage::TYPE_SAVE);
23912387 FileSuccess &= Storage ()->RenameFile (m_aMapdownloadFilenameTemp, m_aMapdownloadFilename, IStorage::TYPE_SAVE);
@@ -2397,7 +2393,7 @@ void CClient::FinishMapDownload()
23972393 return ;
23982394 }
23992395
2400- const char *pError = LoadMap (m_aMapdownloadName, m_aMapdownloadFilename, pSha256 , m_MapdownloadCrc);
2396+ const char *pError = LoadMap (m_aMapdownloadName, m_aMapdownloadFilename, m_MapdownloadSha256 , m_MapdownloadCrc);
24012397 if (!pError)
24022398 {
24032399 ResetMapDownload (true );
@@ -3955,9 +3951,7 @@ const char *CClient::DemoPlayer_Play(const char *pFilename, int StorageType)
39553951
39563952 // load map
39573953 const CMapInfo *pMapInfo = m_DemoPlayer.GetMapInfo ();
3958- int Crc = pMapInfo->m_Crc ;
3959- SHA256_DIGEST Sha = pMapInfo->m_Sha256 ;
3960- const char *pError = LoadMapSearch (pMapInfo->m_aName , Sha != SHA256_ZEROED ? &Sha : nullptr , Crc);
3954+ const char *pError = LoadMapSearch (pMapInfo->m_aName , pMapInfo->m_Sha256 , pMapInfo->m_Crc );
39613955 if (pError)
39623956 {
39633957 if (!m_DemoPlayer.ExtractMap (Storage ()))
@@ -3966,8 +3960,7 @@ const char *CClient::DemoPlayer_Play(const char *pFilename, int StorageType)
39663960 return pError;
39673961 }
39683962
3969- Sha = m_DemoPlayer.GetMapInfo ()->m_Sha256 ;
3970- pError = LoadMapSearch (pMapInfo->m_aName , &Sha, Crc);
3963+ pError = LoadMapSearch (pMapInfo->m_aName , pMapInfo->m_Sha256 , pMapInfo->m_Crc );
39713964 if (pError)
39723965 {
39733966 DisconnectWithReason (pError);
0 commit comments