Skip to content

Commit 1e465da

Browse files
committed
Revert "Improve MultiFileSystem to allow more file systems"
This reverts commit 35c6166.
1 parent 35c6166 commit 1e465da

File tree

3 files changed

+44
-76
lines changed

3 files changed

+44
-76
lines changed

src/file/MultiFileSystem.cpp

Lines changed: 26 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,110 +1,73 @@
11
#include "MultiFileSystem.h"
22

3-
#include "Hook.h"
4-
#include "modules/Log.h"
5-
6-
MultiFileSystem::MultiFileSystem() : m_fileSystems()
3+
MultiFileSystem::MultiFileSystem(cdc::FileSystem* pFS, cdc::FileSystem* pHookFS)
74
{
5+
m_pFS = pFS;
6+
m_pHookFS = pHookFS;
87
}
98

10-
void MultiFileSystem::Add(cdc::FileSystem* fileSystem)
9+
// Gets the best file system for a file simply by checking the hook file system first
10+
cdc::FileSystem* MultiFileSystem::GetBestFileSystem(const char* fileName)
1111
{
12-
m_fileSystems.push_back(fileSystem);
13-
14-
#ifdef _DEBUG
15-
Hook::GetInstance().GetModule<Log>()->WriteLine("Mounted new file system %p, number of systems: %d", fileSystem, m_fileSystems.size());
16-
#endif
17-
}
18-
19-
void MultiFileSystem::Remove(cdc::FileSystem* fileSystem)
20-
{
21-
}
22-
23-
cdc::FileSystem* MultiFileSystem::GetBestFileSystem(const char* fileName) const noexcept
24-
{
25-
for (auto fileSystem : m_fileSystems)
12+
// First check the hook file system, else fall back to default filesystem
13+
if (m_pHookFS->FileExists(fileName))
2614
{
27-
if (fileSystem->FileExists(fileName))
28-
{
29-
return fileSystem;
30-
}
15+
return m_pHookFS;
3116
}
3217

33-
return nullptr;
18+
return m_pFS;
3419
}
3520

3621
cdc::FileRequest* MultiFileSystem::RequestRead(cdc::FileReceiver* receiver, const char* fileName, unsigned int startOffset)
3722
{
38-
auto fileSystem = GetBestFileSystem(fileName);
23+
auto pFS = GetBestFileSystem(fileName);
3924

40-
return fileSystem->RequestRead(receiver, fileName, startOffset);
25+
return pFS->RequestRead(receiver, fileName, startOffset);
4126
}
4227

4328
cdc::File* MultiFileSystem::OpenFile(char const* fileName)
4429
{
45-
auto fileSystem = GetBestFileSystem(fileName);
30+
auto pFS = GetBestFileSystem(fileName);
4631

47-
return fileSystem->OpenFile(fileName);
32+
return pFS->OpenFile(fileName);
4833
}
4934

50-
unsigned int MultiFileSystem::GetFileSize(char const* fileName)
35+
bool MultiFileSystem::FileExists(char const* fileName)
5136
{
52-
auto fileSystem = GetBestFileSystem(fileName);
53-
54-
return fileSystem->GetFileSize(fileName);
37+
return m_pFS->FileExists(fileName) || m_pHookFS->FileExists(fileName);
5538
}
5639

57-
bool MultiFileSystem::FileExists(char const* fileName)
40+
unsigned int MultiFileSystem::GetFileSize(char const* fileName)
5841
{
59-
for (auto fileSystem : m_fileSystems)
60-
{
61-
if (fileSystem->FileExists(fileName))
62-
{
63-
return true;
64-
}
65-
}
42+
auto pFS = GetBestFileSystem(fileName);
6643

67-
return false;
44+
return pFS->GetFileSize(fileName);
6845
}
6946

7047
void MultiFileSystem::SetSpecialisationMask(unsigned int specMask)
7148
{
72-
for (auto fileSystem : m_fileSystems)
73-
{
74-
fileSystem->SetSpecialisationMask(specMask);
75-
}
49+
m_pFS->SetSpecialisationMask(specMask);
50+
m_pHookFS->SetSpecialisationMask(specMask);
7651
}
7752

7853
unsigned int MultiFileSystem::GetSpecialisationMask()
7954
{
80-
return m_fileSystems.empty() ? 0xFFFFFFFF : m_fileSystems[0]->GetSpecialisationMask();
55+
return m_pFS->GetSpecialisationMask();
8156
}
8257

58+
// These only need to call the default file system, both will end at the same place
59+
8360
cdc::FileSystem::Status MultiFileSystem::GetStatus()
8461
{
85-
for (auto fileSystem : m_fileSystems)
86-
{
87-
if (fileSystem->GetStatus() == BUSY)
88-
{
89-
return BUSY;
90-
}
91-
}
92-
93-
return IDLE;
62+
return m_pFS->GetStatus();
9463
}
9564

9665
void MultiFileSystem::Update()
9766
{
98-
for (auto fileSystem : m_fileSystems)
99-
{
100-
fileSystem->Update();
101-
}
67+
m_pFS->Update();
10268
}
10369

10470
void MultiFileSystem::Synchronize()
10571
{
106-
for (auto fileSystem : m_fileSystems)
107-
{
108-
fileSystem->Synchronize();
109-
}
72+
m_pFS->Synchronize();
11073
}

src/file/MultiFileSystem.h

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
#pragma once
22

3-
#include <vector>
4-
53
#include "cdc/file/FileSystem.h"
64

5+
// Simplified version for cdc::MultiFileSystem since it does not exist in Legend and Anniversary
6+
// The real MultiFileSystem can dynamically add and re-order systems
7+
//
8+
// This just checks the hook file system first and else falls back to the
9+
// original file system
710
class MultiFileSystem : public cdc::FileSystem
811
{
912
private:
10-
std::vector<cdc::FileSystem*> m_fileSystems;
11-
12-
cdc::FileSystem* GetBestFileSystem(const char* fileName) const noexcept;
13+
cdc::FileSystem* m_pFS;
14+
cdc::FileSystem* m_pHookFS;
1315

16+
cdc::FileSystem* GetBestFileSystem(const char* fileName);
1417
public:
15-
MultiFileSystem();
16-
17-
void Add(cdc::FileSystem* fileSystem);
18-
void Remove(cdc::FileSystem* fileSystem);
18+
MultiFileSystem(cdc::FileSystem* pFS, cdc::FileSystem* pHookFS);
1919

2020
cdc::FileRequest* RequestRead(cdc::FileReceiver* receiver, const char* fileName, unsigned int startOffset);
2121
cdc::File* OpenFile(const char* fileName);
@@ -26,4 +26,12 @@ class MultiFileSystem : public cdc::FileSystem
2626
Status GetStatus();
2727
void Update();
2828
void Synchronize();
29+
30+
#ifdef TR8
31+
void Suspend() { }
32+
bool Resume() { return false; }
33+
bool IsSuspended() { return false; }
34+
char* GetBufferPointer(cdc::FileRequest* request, unsigned int* bytesLocked) { return nullptr; }
35+
void ResetBufferPointer(int value) { }
36+
#endif
2937
};

src/modules/ModLoader.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,7 @@ static void InitArchive()
4343

4444
// Create our hook file system and multi file system
4545
auto fileSystem = CreateHookFileSystem();
46-
auto multiFileSystem = new MultiFileSystem();
47-
48-
multiFileSystem->Add(fileSystem);
49-
multiFileSystem->Add(GetFS());
46+
auto multiFileSystem = new MultiFileSystem(GetFS(), fileSystem);
5047

5148
// Overwrite the original file system with ours
5249
*(cdc::FileSystem**)GET_ADDRESS(0x10E58BC, 0x83888C, 0x9CE278) = multiFileSystem;

0 commit comments

Comments
 (0)