diff --git a/Core/GameEngine/Include/GameNetwork/FileTransfer.h b/Core/GameEngine/Include/GameNetwork/FileTransfer.h index 474599405f0..bccd2bba58b 100644 --- a/Core/GameEngine/Include/GameNetwork/FileTransfer.h +++ b/Core/GameEngine/Include/GameNetwork/FileTransfer.h @@ -34,8 +34,6 @@ class GameInfo; // Convenience functions AsciiString GetBasePathFromPath( AsciiString path ); -AsciiString GetFileFromPath( AsciiString path ); -AsciiString GetExtensionFromFile( AsciiString fname ); AsciiString GetBaseFileFromFile( AsciiString fname ); AsciiString GetPreviewFromMap( AsciiString path ); AsciiString GetINIFromMap( AsciiString path ); diff --git a/Core/GameEngine/Source/Common/Audio/AudioEventRTS.cpp b/Core/GameEngine/Source/Common/Audio/AudioEventRTS.cpp index f125ccba84d..f9b4b7d58ad 100644 --- a/Core/GameEngine/Source/Common/Audio/AudioEventRTS.cpp +++ b/Core/GameEngine/Source/Common/Audio/AudioEventRTS.cpp @@ -796,12 +796,7 @@ AsciiString AudioEventRTS::generateFilenameExtension( AudioType audioTypeToPlay //------------------------------------------------------------------------------------------------- void AudioEventRTS::adjustForLocalization(AsciiString &strToAdjust) { - const char *filename = strToAdjust.reverseFind('\\'); - if (filename) { - filename += 1; - } else { - filename = strToAdjust.str(); - } + const char *filename = getFileName(strToAdjust.str()); // try the localized version first so that we're guaranteed to get it // even if the generic data directory holds a version of the file diff --git a/Core/GameEngine/Source/Common/CRCDebug.cpp b/Core/GameEngine/Source/Common/CRCDebug.cpp index 62abfc358e2..1fedb680f34 100644 --- a/Core/GameEngine/Source/Common/CRCDebug.cpp +++ b/Core/GameEngine/Source/Common/CRCDebug.cpp @@ -181,11 +181,6 @@ void outputCRCDumpLines() */ } -static AsciiString getFname(AsciiString path) -{ - return path.reverseFind('\\') + 1; -} - static void addCRCDebugLineInternal(bool count, const char *fmt, va_list args) { if (TheGameLogic == nullptr || !(IS_FRAME_OK_TO_LOG)) @@ -278,9 +273,9 @@ void dumpVector3(const Vector3 *v, AsciiString name, AsciiString fname, Int line { if (!(IS_FRAME_OK_TO_LOG)) return; fname.toLower(); - fname = getFname(fname); + const char* fileName = getFileName(fname.str()); addCRCDebugLine("dumpVector3() %s:%d %s %8.8X %8.8X %8.8X", - fname.str(), line, name.str(), + fileName, line, name.str(), AS_INT(v->X), AS_INT(v->Y), AS_INT(v->Z)); } @@ -288,9 +283,9 @@ void dumpCoord3D(const Coord3D *c, AsciiString name, AsciiString fname, Int line { if (!(IS_FRAME_OK_TO_LOG)) return; fname.toLower(); - fname = getFname(fname); + const char* fileName = getFileName(fname.str()); addCRCDebugLine("dumpCoord3D() %s:%d %s %8.8X %8.8X %8.8X", - fname.str(), line, name.str(), + fileName, line, name.str(), AS_INT(c->x), AS_INT(c->y), AS_INT(c->z)); } @@ -298,10 +293,10 @@ void dumpMatrix3D(const Matrix3D *m, AsciiString name, AsciiString fname, Int li { if (!(IS_FRAME_OK_TO_LOG)) return; fname.toLower(); - fname = getFname(fname); + const char* fileName = getFileName(fname.str()); const Real *matrix = (const Real *)m; addCRCDebugLine("dumpMatrix3D() %s:%d %s", - fname.str(), line, name.str()); + fileName, line, name.str()); for (Int i=0; i<3; ++i) addCRCDebugLine(" 0x%08X 0x%08X 0x%08X 0x%08X", AS_INT(matrix[(i<<2)+0]), AS_INT(matrix[(i<<2)+1]), AS_INT(matrix[(i<<2)+2]), AS_INT(matrix[(i<<2)+3])); @@ -311,9 +306,9 @@ void dumpReal(Real r, AsciiString name, AsciiString fname, Int line) { if (!(IS_FRAME_OK_TO_LOG)) return; fname.toLower(); - fname = getFname(fname); + const char* fileName = getFileName(fname.str()); addCRCDebugLine("dumpReal() %s:%d %s %8.8X (%f)", - fname.str(), line, name.str(), AS_INT(r), r); + fileName, line, name.str(), AS_INT(r), r); } #endif // DEBUG_CRC diff --git a/Core/GameEngine/Source/Common/INI/INIMapCache.cpp b/Core/GameEngine/Source/Common/INI/INIMapCache.cpp index 212cf5ccac5..42998a66c1f 100644 --- a/Core/GameEngine/Source/Common/INI/INIMapCache.cpp +++ b/Core/GameEngine/Source/Common/INI/INIMapCache.cpp @@ -148,7 +148,7 @@ void INI::parseMapCacheDefinition( INI* ini ) { // maps without localized name tags AsciiString tempdisplayname; - tempdisplayname = name.reverseFind('\\') + 1; + tempdisplayname = getFileName(name.str()); md.m_displayName.translate(tempdisplayname); if (md.m_numPlayers >= 2) { diff --git a/Core/GameEngine/Source/Common/System/FileSystem.cpp b/Core/GameEngine/Source/Common/System/FileSystem.cpp index 0907722dcf1..9c2c1f8701f 100644 --- a/Core/GameEngine/Source/Common/System/FileSystem.cpp +++ b/Core/GameEngine/Source/Common/System/FileSystem.cpp @@ -54,7 +54,6 @@ #include "Common/LocalFileSystem.h" #include "Common/PerfTimer.h" -#include "Lib/PathUtil.h" DECLARE_PERF_TIMER(FileSystem) diff --git a/Core/GameEngine/Source/GameClient/MapUtil.cpp b/Core/GameEngine/Source/GameClient/MapUtil.cpp index 43a93d1f34b..4e9abcf82be 100644 --- a/Core/GameEngine/Source/GameClient/MapUtil.cpp +++ b/Core/GameEngine/Source/GameClient/MapUtil.cpp @@ -530,7 +530,7 @@ Bool MapCache::loadMapsFromDisk( const AsciiString &mapDir, Bool isOfficial, Boo AsciiString filepathLower = *filepathIt; filepathLower.toLower(); - const char *szFilenameLower = filepathLower.reverseFind('\\'); + const char *szFilenameLower = getLastPathSeparator(filepathLower.str()); if (!szFilenameLower) { DEBUG_CRASH(("Couldn't find \\ in map name!")); @@ -592,7 +592,7 @@ Bool MapCache::addMap( { // unofficial maps or maps without names AsciiString tempdisplayname; - tempdisplayname = fname.reverseFind('\\') + 1; + tempdisplayname = getFileName(fname.str()); (*this)[lowerFname].m_displayName.translate(tempdisplayname); if (md.m_numPlayers >= 2) { @@ -654,7 +654,7 @@ Bool MapCache::addMap( { DEBUG_LOG(("Missing TheKey_mapName!")); AsciiString tempdisplayname; - tempdisplayname = fname.reverseFind('\\') + 1; + tempdisplayname = getFileName(fname.str()); md.m_displayName.translate(tempdisplayname); if (md.m_numPlayers >= 2) { diff --git a/Core/GameEngine/Source/GameLogic/Map/TerrainLogic.cpp b/Core/GameEngine/Source/GameLogic/Map/TerrainLogic.cpp index 1c013fd35fc..acc3fcb4853 100644 --- a/Core/GameEngine/Source/GameLogic/Map/TerrainLogic.cpp +++ b/Core/GameEngine/Source/GameLogic/Map/TerrainLogic.cpp @@ -1140,26 +1140,11 @@ void TerrainLogic::enableWaterGrid( Bool enable ) // the fact that the map Data\CHI01\CHI01.map will turn into Save\CHI01.map when // loading the map from a save game file // - AsciiString strippedMapNameOnly; - AsciiString strippedCompareMapNameOnly; - const char *c; - - // create stripped map name - c = strrchr( TheGlobalData->m_mapName.str(), '\\' ); - if( c ) - strippedMapNameOnly.set( c ); - else - strippedMapNameOnly = TheGlobalData->m_mapName; - - // create stripped compare name - c = strrchr( TheGlobalData->m_vertexWaterAvailableMaps[ i ].str(), '\\' ); - if( c ) - strippedCompareMapNameOnly.set( c ); - else - strippedCompareMapNameOnly = TheGlobalData->m_vertexWaterAvailableMaps[ i ]; + const char* strippedMapNameOnly = getFileName( TheGlobalData->m_mapName.str() ); + const char* strippedCompareMapNameOnly = getFileName( TheGlobalData->m_vertexWaterAvailableMaps[ i ].str() ); // now try this compare - if( strippedMapNameOnly.compareNoCase( strippedCompareMapNameOnly.str() ) == 0 ) + if( stricmp( strippedMapNameOnly, strippedCompareMapNameOnly ) == 0 ) { waterSettingIndex = i; diff --git a/Core/GameEngine/Source/GameNetwork/FileTransfer.cpp b/Core/GameEngine/Source/GameNetwork/FileTransfer.cpp index 5d9cc7dfe64..7ac6f274cc0 100644 --- a/Core/GameEngine/Source/GameNetwork/FileTransfer.cpp +++ b/Core/GameEngine/Source/GameNetwork/FileTransfer.cpp @@ -137,55 +137,27 @@ static Bool doFileTransfer( AsciiString filename, MapTransferLoadScreen *ls, Int AsciiString GetBasePathFromPath( AsciiString path ) { - const char *s = path.reverseFind('\\'); + const char *s = getLastPathSeparator(path.str()); if (s) { - Int len = s - path.str(); - - AsciiString base; - char *buf = base.getBufferForRead(len + 1); - memcpy(buf, path.str(), len); - buf[len] = 0; - return buf; + return AsciiString(path.str(), s - path.str()); } return AsciiString::TheEmptyString; } -AsciiString GetFileFromPath( AsciiString path ) -{ - const char *s = path.reverseFind('\\'); - if (s) - return s+1; - return path; -} - -AsciiString GetExtensionFromFile( AsciiString fname ) -{ - const char *s = fname.reverseFind('.'); - if (s) - return s+1; - return fname; -} - AsciiString GetBaseFileFromFile( AsciiString fname ) { - const char *s = fname.reverseFind('.'); + const char *s = getExtension(fname.str()); if (s) { - Int len = s - fname.str(); - - AsciiString base; - char *buf = base.getBufferForRead(len + 1); - memcpy(buf, fname.str(), len); - buf[len] = 0; - return buf; + return AsciiString(fname.str(), s - fname.str()); } return AsciiString::TheEmptyString; } AsciiString GetPreviewFromMap( AsciiString path ) { - AsciiString fname = GetBaseFileFromFile(GetFileFromPath(path)); + AsciiString fname = GetBaseFileFromFile(getFileName(path.str())); AsciiString base = GetBasePathFromPath(path); AsciiString out; diff --git a/Core/GameEngine/Source/GameNetwork/GameSpy/LobbyUtils.cpp b/Core/GameEngine/Source/GameNetwork/GameSpy/LobbyUtils.cpp index 6a73ace1b46..95ecac94593 100644 --- a/Core/GameEngine/Source/GameNetwork/GameSpy/LobbyUtils.cpp +++ b/Core/GameEngine/Source/GameNetwork/GameSpy/LobbyUtils.cpp @@ -274,16 +274,7 @@ static void gameTooltip(GameWindow *window, } else { - const char *start = room->getMap().reverseFind('\\'); - if (start) - { - ++start; - } - else - { - start = room->getMap().str(); - } - mapName.translate( start ); + mapName.translate( getFileName(room->getMap().str()) ); } UnicodeString tmp; tooltip.format(TheGameText->fetch("TOOLTIP:GameInfoGameName"), room->getGameName().str()); @@ -584,16 +575,7 @@ static Int insertGame( GameWindow *win, GameSpyStagingRoom *game, Bool showMap ) } else { - const char *start = game->getMap().reverseFind('\\'); - if (start) - { - ++start; - } - else - { - start = game->getMap().str(); - } - mapName.translate( start ); + mapName.translate( getFileName(game->getMap().str()) ); } GadgetListBoxAddEntryText(win, mapName, gameColor, index, COLUMN_MAP); diff --git a/Core/GameEngineDevice/Source/MilesAudioDevice/MilesAudioManager.cpp b/Core/GameEngineDevice/Source/MilesAudioDevice/MilesAudioManager.cpp index 8ca4639fda4..058def55d54 100644 --- a/Core/GameEngineDevice/Source/MilesAudioDevice/MilesAudioManager.cpp +++ b/Core/GameEngineDevice/Source/MilesAudioDevice/MilesAudioManager.cpp @@ -245,7 +245,7 @@ void MilesAudioManager::audioDebugDisplay(DebugDisplayInterface *dd, void *, FIL AudioEventRTS *event = playing->m_audioEventRTS.Peek(); filenameNoSlashes = event->getFilename(); - filenameNoSlashes = filenameNoSlashes.reverseFind('\\') + 1; + filenameNoSlashes = getFileName(filenameNoSlashes.str()); // Calculate Sample volume volume = 100.0f; @@ -265,7 +265,7 @@ void MilesAudioManager::audioDebugDisplay(DebugDisplayInterface *dd, void *, FIL playing = *it; AudioEventRTS *event = playing->m_audioEventRTS.Peek(); filenameNoSlashes = event->getFilename(); - filenameNoSlashes = filenameNoSlashes.reverseFind( '\\' ) + 1; + filenameNoSlashes = getFileName(filenameNoSlashes.str()); // Calculate Sample volume volume = 100.0f; @@ -302,7 +302,7 @@ void MilesAudioManager::audioDebugDisplay(DebugDisplayInterface *dd, void *, FIL AudioEventRTS *event = playing->m_audioEventRTS.Peek(); filenameNoSlashes = event->getFilename(); - filenameNoSlashes = filenameNoSlashes.reverseFind('\\') + 1; + filenameNoSlashes = getFileName(filenameNoSlashes.str()); // Calculate Sample volume volume = 100.0f; @@ -354,7 +354,7 @@ void MilesAudioManager::audioDebugDisplay(DebugDisplayInterface *dd, void *, FIL playing = *it; AudioEventRTS *event = playing->m_audioEventRTS.Peek(); filenameNoSlashes = event->getFilename(); - filenameNoSlashes = filenameNoSlashes.reverseFind('\\') + 1; + filenameNoSlashes = getFileName(filenameNoSlashes.str()); // Calculate Sample volume volume = 100.0f; @@ -378,7 +378,7 @@ void MilesAudioManager::audioDebugDisplay(DebugDisplayInterface *dd, void *, FIL playing = *it; AudioEventRTS *event = playing->m_audioEventRTS.Peek(); filenameNoSlashes = event->getFilename(); - filenameNoSlashes = filenameNoSlashes.reverseFind('\\') + 1; + filenameNoSlashes = getFileName(filenameNoSlashes.str()); // Calculate Sample volume volume = 100.0f; @@ -402,7 +402,7 @@ void MilesAudioManager::audioDebugDisplay(DebugDisplayInterface *dd, void *, FIL playing = *it; AudioEventRTS *event = playing->m_audioEventRTS.Peek(); filenameNoSlashes = event->getFilename(); - filenameNoSlashes = filenameNoSlashes.reverseFind('\\') + 1; + filenameNoSlashes = getFileName(filenameNoSlashes.str()); // Calculate Sample volume volume = 100.0f; diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp index 6a98dd58398..e5ddf13daaf 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp @@ -152,7 +152,7 @@ void LogClass::log(const char *fmt, ...) void LogClass::dumpMatrix3D(const Matrix3D *m, AsciiString name, AsciiString fname, Int line) { fname.toLower(); - fname = fname.reverseFind('\\') + 1; + fname = getFileName(fname.str()); const Real *matrix = (const Real *)m; log("dumpMatrix3D() %s:%d %s", fname.str(), line, name.str()); @@ -166,7 +166,7 @@ void LogClass::dumpReal(Real r, AsciiString name, AsciiString fname, Int line) if (!m_fp || !isValidTimeToCalcLogicStuff()) return; fname.toLower(); - fname = fname.reverseFind('\\') + 1; + fname = getFileName(fname.str()); log("dumpReal() %s:%d %s %8.8X (%f)", fname.str(), line, name.str(), AS_INT(r), r); } diff --git a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp index b7d6a44a5b5..a63c14bbbd8 100644 --- a/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp +++ b/Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DDisplay.cpp @@ -3260,11 +3260,7 @@ void W3DDisplay::dumpAssetUsage(const char* mapname) DynamicVectorClass names(8000); m_assetManager->Create_Asset_List(names); - const char* leafname = strrchr(mapname, '\\'); - if (leafname) - ++leafname; // point to first character after the last backslash - else - leafname = mapname; // point to the start of the filename + const char* leafname = getFileName(mapname); char buf[256]; int idx = 1; diff --git a/Core/Libraries/Source/WWVegas/WWLib/WWCommon.h b/Core/Libraries/Source/WWVegas/WWLib/WWCommon.h index e505e9b6bb1..0bf2e7cb21a 100644 --- a/Core/Libraries/Source/WWVegas/WWLib/WWCommon.h +++ b/Core/Libraries/Source/WWVegas/WWLib/WWCommon.h @@ -18,6 +18,7 @@ #pragma once +#include "Lib/PathUtil.h" #include "ref_ptr.h" #include "refcount.h" #include "Utility/STLUtils.h" diff --git a/Generals/Code/GameEngine/Source/Common/Recorder.cpp b/Generals/Code/GameEngine/Source/Common/Recorder.cpp index e9c55ee350b..3f4f1e731a7 100644 --- a/Generals/Code/GameEngine/Source/Common/Recorder.cpp +++ b/Generals/Code/GameEngine/Source/Common/Recorder.cpp @@ -49,7 +49,6 @@ #include "Common/CRCDebug.h" #include "Common/OptionPreferences.h" #include "Common/version.h" -#include "Lib/PathUtil.h" constexpr const char s_genrep[] = "GENREP"; constexpr const UnsignedInt replayBufferBytes = 8192; @@ -1662,10 +1661,8 @@ AsciiString RecorderClass::getLastReplayFileName() AsciiString players; AsciiString full; AsciiString fullPlusNum; - AsciiString mapName = game->getMap(); - const char *fname = mapName.reverseFind('\\'); - if (fname) - mapName = fname+1; + const AsciiString mapPath = game->getMap(); + const char* mapName = getFileName(mapPath.str()); for (Int i=0; igetSlot(i); @@ -1676,7 +1673,7 @@ AsciiString RecorderClass::getLastReplayFileName() players.concat(player); } } - full.format("%s%s_%d_%d", players.str(), mapName.str(), game->getSeed(), game->getLocalSlotNum()); + full.format("%s%s_%d_%d", players.str(), mapName, game->getSeed(), game->getLocalSlotNum()); AsciiString testString; testString.format("%s%s%s", getReplayDir().str(), full.str(), replayExtention); diff --git a/Generals/Code/GameEngine/Source/Common/StatsCollector.cpp b/Generals/Code/GameEngine/Source/Common/StatsCollector.cpp index f8740095b8d..763fad9f2bb 100644 --- a/Generals/Code/GameEngine/Source/Common/StatsCollector.cpp +++ b/Generals/Code/GameEngine/Source/Common/StatsCollector.cpp @@ -307,10 +307,7 @@ void StatsCollector::createFileName() curtime = localtime(&longTime); strftime(datestr, 256, "_%b%d_%I%M%p", curtime); // const MapMetaData *m = TheMapCache->findMap(TheGlobalData->m_mapName); - AsciiString name = TheGlobalData->m_mapName; - const char *fname = name.reverseFind('\\'); - if (fname) - name = fname+1; + AsciiString name = getFileName(TheGlobalData->m_mapName.str()); name.truncateBy(4); // ".map" m_statsFileName.clear(); #if defined(RTS_DEBUG) diff --git a/Generals/Code/GameEngine/Source/Common/System/SaveGame/GameState.cpp b/Generals/Code/GameEngine/Source/Common/System/SaveGame/GameState.cpp index 3338c981e04..874d49b4d5d 100644 --- a/Generals/Code/GameEngine/Source/Common/System/SaveGame/GameState.cpp +++ b/Generals/Code/GameEngine/Source/Common/System/SaveGame/GameState.cpp @@ -58,7 +58,6 @@ #include "GameLogic/ScriptEngine.h" #include "GameLogic/SidesList.h" #include "GameLogic/TerrainLogic.h" -#include "Lib/PathUtil.h" // PUBLIC DATA //////////////////////////////////////////////////////////////////////////////////// @@ -840,7 +839,7 @@ Bool GameState::isInSaveDirectory(const AsciiString& path) const // ------------------------------------------------------------------------------------------------ AsciiString GameState::getMapLeafName(const AsciiString& in) const { - const char* p = strrchr(in.str(), '\\'); + const char* p = getLastPathSeparator(in.str()); if (p) { // @@ -1666,14 +1665,7 @@ void GameState::xfer( Xfer *xfer ) // if no label was found, we'll use the map name (just filename, no directory info) if (exists == FALSE || saveGameInfo->mapLabel == AsciiString::TheEmptyString) { - const char* p = TheGlobalData->m_mapName.reverseFind('\\'); - if (p == nullptr) - saveGameInfo->mapLabel = TheGlobalData->m_mapName; - else - { - p++; // skip the '\' we're on - saveGameInfo->mapLabel.set(p); - } + saveGameInfo->mapLabel = getFileName(TheGlobalData->m_mapName.str()); } // xfer map label diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/DownloadMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/DownloadMenu.cpp index 497bcd95ede..b27cdbbc2ab 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/DownloadMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/DownloadMenu.cpp @@ -142,15 +142,8 @@ HRESULT DownloadManagerMunkee::downloadFile( AsciiString server, AsciiString use if (staticTextFile) { - AsciiString bob = file; - // just get the filename, not the pathname - const char *tmp = bob.reverseFind('/'); - if (tmp) - bob = tmp+1; - tmp = bob.reverseFind('\\'); - if (tmp) - bob = tmp+1; + const char* bob = getFileName(file.str()); UnicodeString fileString; fileString.translate(bob); diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/GameInfoWindow.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/GameInfoWindow.cpp index 466b9caebd6..98326801074 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/GameInfoWindow.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/GameInfoWindow.cpp @@ -118,16 +118,7 @@ void RefreshGameInfoWindow(GameInfo *gameInfo, UnicodeString gameName) else { // can happen if the map will have to be transferred... so use the leaf name (srj) - const char *noPath = gameInfo->getMap().reverseFind('\\'); - if (noPath) - { - ++noPath; - } - else - { - noPath = gameInfo->getMap().str(); - } - map.translate(noPath); + map.translate(getFileName(gameInfo->getMap().str())); } GadgetStaticTextSetText(staticTextMapName,map); diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp index a3057616354..64dd03da210 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp @@ -870,12 +870,7 @@ void updateGameOptions() } else { - AsciiString s = TheLAN->GetMyGame()->getMap(); - if (s.reverseFind('\\')) - { - s = s.reverseFind('\\') + 1; - } - mapDisplayName.format(L"%hs", s.str()); + mapDisplayName.format(L"%hs", getFileName(TheLAN->GetMyGame()->getMap().str())); } UnicodeString old = GadgetStaticTextGetText(textEntryMapDisplay); if(old.compare(mapDisplayName) != 0) diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupSaveLoad.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupSaveLoad.cpp index f3c946ec266..f0a9365b0dd 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupSaveLoad.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupSaveLoad.cpp @@ -458,12 +458,7 @@ static void setEditDescription( GameWindow *editControl ) TheCampaignManager->getCurrentMissionNumber() + 1 ); else { - const char *mapName = TheGlobalData->m_mapName.reverseFind( '\\' ); - - if( mapName ) - defaultDesc.format( L"%S", mapName + 1 ); - else - defaultDesc.format( L"%S", TheGlobalData->m_mapName.str() ); + defaultDesc.format( L"%S", getFileName( TheGlobalData->m_mapName.str() ) ); } diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ReplayMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ReplayMenu.cpp index 683d9a242f0..6e69b9b8ef4 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ReplayMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ReplayMenu.cpp @@ -158,8 +158,7 @@ static UnicodeString createMapName(const AsciiString& filename, const ReplayGame { // TheSuperHackers @bugfix helmutbuhler 08/03/2025 Just use the filename. // Displaying a long map path string would break the map list gui. - const char* filename = info.getMap().reverseFind('\\'); - mapName.translate(filename ? filename + 1 : info.getMap()); + mapName.translate(getFileName(info.getMap().str())); } else { @@ -274,7 +273,7 @@ void PopulateReplayFileListbox(GameWindow *listbox) for (it = replayFilenames.begin(); it != replayFilenames.end(); ++it) { // just want the filename - asciistr.set((*it).reverseFind('\\') + 1); + asciistr.set(getFileName((*it).str())); RecorderClass::ReplayHeader header; ReplayGameInfo info; diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp index e2a44cd6707..61a9b939185 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp @@ -908,13 +908,8 @@ void WOLDisplayGameOptions() } else { - AsciiString s = TheGameSpyInfo->getCurrentStagingRoom()->getMap(); - if (s.reverseFind('\\')) - { - s = s.reverseFind('\\') + 1; - } UnicodeString mapDisplay; - mapDisplay.translate(s); + mapDisplay.translate(getFileName(TheGameSpyInfo->getCurrentStagingRoom()->getMap().str())); GadgetStaticTextSetText(textEntryMapDisplay, mapDisplay); } WOLPositionStartSpots(); diff --git a/Generals/Code/GameEngine/Source/GameLogic/Map/TerrainLogic.cpp b/Generals/Code/GameEngine/Source/GameLogic/Map/TerrainLogic.cpp index 1b402424162..9315507cfe2 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Map/TerrainLogic.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Map/TerrainLogic.cpp @@ -1140,26 +1140,11 @@ void TerrainLogic::enableWaterGrid( Bool enable ) // the fact that the map Data\CHI01\CHI01.map will turn into Save\CHI01.map when // loading the map from a save game file // - AsciiString strippedMapNameOnly; - AsciiString strippedCompareMapNameOnly; - const char *c; - - // create stripped map name - c = strrchr( TheGlobalData->m_mapName.str(), '\\' ); - if( c ) - strippedMapNameOnly.set( c ); - else - strippedMapNameOnly = TheGlobalData->m_mapName; - - // create stripped compare name - c = strrchr( TheGlobalData->m_vertexWaterAvailableMaps[ i ].str(), '\\' ); - if( c ) - strippedCompareMapNameOnly.set( c ); - else - strippedCompareMapNameOnly = TheGlobalData->m_vertexWaterAvailableMaps[ i ]; + const char* strippedMapNameOnly = getFileName( TheGlobalData->m_mapName.str() ); + const char* strippedCompareMapNameOnly = getFileName( TheGlobalData->m_vertexWaterAvailableMaps[ i ].str() ); // now try this compare - if( strippedMapNameOnly.compareNoCase( strippedCompareMapNameOnly.str() ) == 0 ) + if( stricmp( strippedMapNameOnly, strippedCompareMapNameOnly ) == 0 ) { waterSettingIndex = i; diff --git a/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp b/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp index 1b1bb00f6d2..6d44fc87644 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/Recorder.cpp @@ -49,7 +49,6 @@ #include "Common/CRCDebug.h" #include "Common/OptionPreferences.h" #include "Common/version.h" -#include "Lib/PathUtil.h" constexpr const char s_genrep[] = "GENREP"; constexpr const UnsignedInt replayBufferBytes = 8192; @@ -1665,10 +1664,8 @@ AsciiString RecorderClass::getLastReplayFileName() AsciiString players; AsciiString full; AsciiString fullPlusNum; - AsciiString mapName = game->getMap(); - const char *fname = mapName.reverseFind('\\'); - if (fname) - mapName = fname+1; + const AsciiString mapPath = game->getMap(); + const char* mapName = getFileName(mapPath.str()); for (Int i=0; igetSlot(i); @@ -1679,7 +1676,7 @@ AsciiString RecorderClass::getLastReplayFileName() players.concat(player); } } - full.format("%s%s_%d_%d", players.str(), mapName.str(), game->getSeed(), game->getLocalSlotNum()); + full.format("%s%s_%d_%d", players.str(), mapName, game->getSeed(), game->getLocalSlotNum()); AsciiString testString; testString.format("%s%s%s", getReplayDir().str(), full.str(), replayExtention); diff --git a/GeneralsMD/Code/GameEngine/Source/Common/StatsCollector.cpp b/GeneralsMD/Code/GameEngine/Source/Common/StatsCollector.cpp index 048051a28b2..d6b4c01232e 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/StatsCollector.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/StatsCollector.cpp @@ -307,10 +307,7 @@ void StatsCollector::createFileName() curtime = localtime(&longTime); strftime(datestr, 256, "_%b%d_%I%M%p", curtime); // const MapMetaData *m = TheMapCache->findMap(TheGlobalData->m_mapName); - AsciiString name = TheGlobalData->m_mapName; - const char *fname = name.reverseFind('\\'); - if (fname) - name = fname+1; + AsciiString name = getFileName(TheGlobalData->m_mapName.str()); name.truncateBy(4); // ".map" m_statsFileName.clear(); #if defined(RTS_DEBUG) diff --git a/GeneralsMD/Code/GameEngine/Source/Common/System/SaveGame/GameState.cpp b/GeneralsMD/Code/GameEngine/Source/Common/System/SaveGame/GameState.cpp index 17b73805824..e04e1843f13 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/System/SaveGame/GameState.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/System/SaveGame/GameState.cpp @@ -58,7 +58,6 @@ #include "GameLogic/ScriptEngine.h" #include "GameLogic/SidesList.h" #include "GameLogic/TerrainLogic.h" -#include "Lib/PathUtil.h" // PUBLIC DATA //////////////////////////////////////////////////////////////////////////////////// @@ -840,7 +839,7 @@ Bool GameState::isInSaveDirectory(const AsciiString& path) const // ------------------------------------------------------------------------------------------------ AsciiString GameState::getMapLeafName(const AsciiString& in) const { - const char* p = strrchr(in.str(), '\\'); + const char* p = getLastPathSeparator(in.str()); if (p) { // @@ -1666,14 +1665,7 @@ void GameState::xfer( Xfer *xfer ) // if no label was found, we'll use the map name (just filename, no directory info) if (exists == FALSE || saveGameInfo->mapLabel == AsciiString::TheEmptyString) { - const char* p = TheGlobalData->m_mapName.reverseFind('\\'); - if (p == nullptr) - saveGameInfo->mapLabel = TheGlobalData->m_mapName; - else - { - p++; // skip the '\' we're on - saveGameInfo->mapLabel.set(p); - } + saveGameInfo->mapLabel = getFileName(TheGlobalData->m_mapName.str()); } // xfer map label diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/DownloadMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/DownloadMenu.cpp index 9e3c9318796..0356334ae10 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/DownloadMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/DownloadMenu.cpp @@ -142,15 +142,8 @@ HRESULT DownloadManagerMunkee::downloadFile( AsciiString server, AsciiString use if (staticTextFile) { - AsciiString bob = file; - // just get the filename, not the pathname - const char *tmp = bob.reverseFind('/'); - if (tmp) - bob = tmp+1; - tmp = bob.reverseFind('\\'); - if (tmp) - bob = tmp+1; + const char* bob = getFileName(file.str()); UnicodeString fileString; fileString.translate(bob); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/GameInfoWindow.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/GameInfoWindow.cpp index d3f68fe3bb9..5bbe6581f14 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/GameInfoWindow.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/GameInfoWindow.cpp @@ -118,16 +118,7 @@ void RefreshGameInfoWindow(GameInfo *gameInfo, UnicodeString gameName) else { // can happen if the map will have to be transferred... so use the leaf name (srj) - const char *noPath = gameInfo->getMap().reverseFind('\\'); - if (noPath) - { - ++noPath; - } - else - { - noPath = gameInfo->getMap().str(); - } - map.translate(noPath); + map.translate(getFileName(gameInfo->getMap().str())); } GadgetStaticTextSetText(staticTextMapName,map); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp index d00f0834296..c2b58991e83 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/LanGameOptionsMenu.cpp @@ -950,12 +950,7 @@ void updateGameOptions() } else { - AsciiString s = TheLAN->GetMyGame()->getMap(); - if (s.reverseFind('\\')) - { - s = s.reverseFind('\\') + 1; - } - mapDisplayName.format(L"%hs", s.str()); + mapDisplayName.format(L"%hs", getFileName(TheLAN->GetMyGame()->getMap().str())); } UnicodeString old = GadgetStaticTextGetText(textEntryMapDisplay); if(old.compare(mapDisplayName) != 0) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupSaveLoad.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupSaveLoad.cpp index 18b148a08d2..215da58a940 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupSaveLoad.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupSaveLoad.cpp @@ -468,12 +468,7 @@ static void setEditDescription( GameWindow *editControl ) TheCampaignManager->getCurrentMissionNumber() + 1 ); else { - const char *mapName = TheGlobalData->m_mapName.reverseFind( '\\' ); - - if( mapName ) - defaultDesc.format( L"%S", mapName + 1 ); - else - defaultDesc.format( L"%S", TheGlobalData->m_mapName.str() ); + defaultDesc.format( L"%S", getFileName( TheGlobalData->m_mapName.str() ) ); //Keep the extension out of the descriptive name. if( (defaultDesc.getLength() >= 4) && (defaultDesc.getCharAt(defaultDesc.getLength()-4) == '.') ) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ReplayMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ReplayMenu.cpp index 8ba96a24e0e..ac62c5e40dd 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ReplayMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/ReplayMenu.cpp @@ -158,8 +158,7 @@ static UnicodeString createMapName(const AsciiString& filename, const ReplayGame { // TheSuperHackers @bugfix helmutbuhler 08/03/2025 Just use the filename. // Displaying a long map path string would break the map list gui. - const char* filename = info.getMap().reverseFind('\\'); - mapName.translate(filename ? filename + 1 : info.getMap()); + mapName.translate(getFileName(info.getMap().str())); } else { @@ -274,7 +273,7 @@ void PopulateReplayFileListbox(GameWindow *listbox) for (it = replayFilenames.begin(); it != replayFilenames.end(); ++it) { // just want the filename - asciistr.set((*it).reverseFind('\\') + 1); + asciistr.set(getFileName((*it).str())); RecorderClass::ReplayHeader header; ReplayGameInfo info; diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp index ab14869fcf5..894bb30cf8c 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLGameSetupMenu.cpp @@ -970,13 +970,8 @@ void WOLDisplayGameOptions() } else { - AsciiString s = TheGameSpyInfo->getCurrentStagingRoom()->getMap(); - if (s.reverseFind('\\')) - { - s = s.reverseFind('\\') + 1; - } UnicodeString mapDisplay; - mapDisplay.translate(s); + mapDisplay.translate(getFileName(TheGameSpyInfo->getCurrentStagingRoom()->getMap().str())); GadgetStaticTextSetText(textEntryMapDisplay, mapDisplay); } WOLPositionStartSpots();