FS: Support the file Append open mode.
This commit is contained in:
		| @@ -17,10 +17,30 @@ std::string Disk_FileSystem::GetName() const { | ||||
|  | ||||
| ResultVal<std::unique_ptr<StorageBackend>> Disk_FileSystem::OpenFile(const std::string& path, | ||||
|                                                                      Mode mode) const { | ||||
|     ASSERT_MSG(mode == Mode::Read || mode == Mode::Write, "Other file modes are not supported"); | ||||
|  | ||||
|     std::string mode_str = ""; | ||||
|     u32 mode_flags = static_cast<u32>(mode); | ||||
|  | ||||
|     // Calculate the correct open mode for the file. | ||||
|     if ((mode_flags & static_cast<u32>(Mode::Read)) && | ||||
|         (mode_flags & static_cast<u32>(Mode::Write))) { | ||||
|         if (mode_flags & static_cast<u32>(Mode::Append)) | ||||
|             mode_str = "a+"; | ||||
|         else | ||||
|             mode_str = "r+"; | ||||
|     } else { | ||||
|         if (mode_flags & static_cast<u32>(Mode::Read)) | ||||
|             mode_str = "r"; | ||||
|         else if (mode_flags & static_cast<u32>(Mode::Append)) | ||||
|             mode_str = "a"; | ||||
|         else if (mode_flags & static_cast<u32>(Mode::Write)) | ||||
|             mode_str = "w"; | ||||
|     } | ||||
|  | ||||
|     mode_str += "b"; | ||||
|  | ||||
|     std::string full_path = base_directory + path; | ||||
|     auto file = std::make_shared<FileUtil::IOFile>(full_path, mode == Mode::Read ? "rb" : "wb"); | ||||
|     auto file = std::make_shared<FileUtil::IOFile>(full_path, mode_str.c_str()); | ||||
|  | ||||
|     if (!file->IsOpen()) { | ||||
|         return ERROR_PATH_NOT_FOUND; | ||||
|   | ||||
| @@ -35,6 +35,7 @@ enum EntryType : u32 { | ||||
| enum class Mode : u32 { | ||||
|     Read = 1, | ||||
|     Write = 2, | ||||
|     Append = 4, | ||||
| }; | ||||
|  | ||||
| class Path { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Subv
					Subv