feat: add smart FILE pointer.

- use std::unique_ptr and custom deleter to implement smart FILE pointer for convenient auto free.
This commit is contained in:
2024-08-02 09:50:15 +08:00
parent 0ac6b477f9
commit 6da990876e
6 changed files with 27 additions and 20 deletions

View File

@ -49,7 +49,7 @@ namespace YYCC::ConfigManager {
Reset();
// get file handle
auto fs = this->GetFileHandle(YYCC_U8("rb"));
IOHelper::SmartStdFile fs(IOHelper::UTF8FOpen(m_CfgFilePath.c_str(), YYCC_U8("rb")));
if (fs.get() == nullptr) {
// if we fail to get, it means that we do not have corresponding cfg file.
// all settings should be reset to default value.
@ -112,7 +112,7 @@ namespace YYCC::ConfigManager {
bool CoreManager::Save() {
// get file handle
auto fs = this->GetFileHandle(YYCC_U8("wb"));
IOHelper::SmartStdFile fs(IOHelper::UTF8FOpen(m_CfgFilePath.c_str(), YYCC_U8("wb")));
// if we fail to get, return false.
if (fs == nullptr) return false;
@ -157,15 +157,6 @@ namespace YYCC::ConfigManager {
}
}
CoreManager::FileHandleGuard_t CoreManager::GetFileHandle(const yycc_char8_t* mode) const {
return CoreManager::FileHandleGuard_t(
IOHelper::UTF8FOpen(this->m_CfgFilePath.c_str(), mode),
[](FILE* fs) -> void {
if (fs != nullptr) std::fclose(fs);
}
);
}
#pragma endregion
}