mirror of
https://github.com/SantaSpeen/BeamMP-Server.git
synced 2026-06-18 19:10:53 +00:00
Use filestreams instead of c-lib
This commit is contained in:
+10
-19
@@ -28,28 +28,19 @@ TLuaPlugin::TLuaPlugin(TLuaEngine& Engine, const TLuaPluginConfig& Config, const
|
|||||||
});
|
});
|
||||||
std::vector<std::pair<fs::path, std::shared_ptr<TLuaResult>>> ResultsToCheck;
|
std::vector<std::pair<fs::path, std::shared_ptr<TLuaResult>>> ResultsToCheck;
|
||||||
for (const auto& Entry : Entries) {
|
for (const auto& Entry : Entries) {
|
||||||
// read in entire file
|
// read in entire file
|
||||||
#if defined(WIN32)
|
try {
|
||||||
std::FILE* File = _wfopen(reinterpret_cast<const wchar_t*>(Entry.c_str()), "r");
|
std::ifstream FileStream(Entry.string());
|
||||||
#else
|
|
||||||
std::FILE* File = std::fopen(reinterpret_cast<const char*>(Entry.c_str()), "r");
|
|
||||||
#endif
|
|
||||||
if (File) {
|
|
||||||
auto Size = std::filesystem::file_size(Entry);
|
auto Size = std::filesystem::file_size(Entry);
|
||||||
auto Contents = std::make_shared<std::string>();
|
auto Contents = std::make_shared<std::string>();
|
||||||
Contents->resize(Size);
|
Contents->resize(Size);
|
||||||
auto NRead = std::fread(Contents->data(), 1, Contents->size(), File);
|
FileStream.rdbuf()->sgetn(Contents->data(), Contents->size());
|
||||||
if (NRead == Contents->size()) {
|
mFileContents[fs::relative(Entry).string()] = Contents;
|
||||||
mFileContents[fs::relative(Entry).string()] = Contents;
|
// Execute first time
|
||||||
// Execute first time
|
auto Result = mEngine.EnqueueScript(mConfig.StateId, TLuaChunk(Contents, Entry.string(), MainFolder.string()));
|
||||||
auto Result = mEngine.EnqueueScript(mConfig.StateId, TLuaChunk(Contents, Entry.string(), MainFolder.string()));
|
ResultsToCheck.emplace_back(Entry.string(), std::move(Result));
|
||||||
ResultsToCheck.emplace_back(Entry.string(), std::move(Result));
|
} catch (const std::exception& e) {
|
||||||
} else {
|
beammp_error("Error loading file \"" + Entry.string() + "\": " + e.what());
|
||||||
beammp_error("Error while reading script file \"" + Entry.string() + "\". Did the file change while reading?");
|
|
||||||
}
|
|
||||||
std::fclose(File);
|
|
||||||
} else {
|
|
||||||
beammp_error("Could not read script file \"" + Entry.string() + "\": " + std::strerror(errno));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (auto& Result : ResultsToCheck) {
|
for (auto& Result : ResultsToCheck) {
|
||||||
|
|||||||
Reference in New Issue
Block a user