diff options
| author | 2020-09-22 17:31:53 -0400 | |
|---|---|---|
| committer | 2020-09-22 17:32:33 -0400 | |
| commit | ff45c3957858cdf189b73e11550da06fe4337b8e (patch) | |
| tree | 288ff1cc4677d6511ed8cc7e1b0db20ce2d2590f /src/core/file_sys | |
| parent | Merge pull request #4697 from lioncash/copy5 (diff) | |
| download | yuzu-ff45c3957858cdf189b73e11550da06fe4337b8e.tar.gz yuzu-ff45c3957858cdf189b73e11550da06fe4337b8e.tar.xz yuzu-ff45c3957858cdf189b73e11550da06fe4337b8e.zip | |
General: Make use of std::nullopt where applicable
Allows some implementations to avoid completely zeroing out the internal
buffer of the optional, and instead only set the validity byte within
the structure.
This also makes it consistent how we return empty optionals.
Diffstat (limited to 'src/core/file_sys')
| -rw-r--r-- | src/core/file_sys/content_archive.cpp | 10 | ||||
| -rw-r--r-- | src/core/file_sys/vfs.cpp | 7 | ||||
| -rw-r--r-- | src/core/file_sys/vfs_offset.cpp | 7 | ||||
| -rw-r--r-- | src/core/file_sys/vfs_static.h | 8 |
4 files changed, 18 insertions, 14 deletions
diff --git a/src/core/file_sys/content_archive.cpp b/src/core/file_sys/content_archive.cpp index 426fb6bb5..76af47ff9 100644 --- a/src/core/file_sys/content_archive.cpp +++ b/src/core/file_sys/content_archive.cpp | |||
| @@ -323,7 +323,7 @@ bool NCA::ReadRomFSSection(const NCASectionHeader& section, const NCASectionTabl | |||
| 323 | subsection_buckets.back().entries.push_back({section.bktr.relocation.offset, {0}, ctr_low}); | 323 | subsection_buckets.back().entries.push_back({section.bktr.relocation.offset, {0}, ctr_low}); |
| 324 | subsection_buckets.back().entries.push_back({size, {0}, 0}); | 324 | subsection_buckets.back().entries.push_back({size, {0}, 0}); |
| 325 | 325 | ||
| 326 | std::optional<Core::Crypto::Key128> key = {}; | 326 | std::optional<Core::Crypto::Key128> key; |
| 327 | if (encrypted) { | 327 | if (encrypted) { |
| 328 | if (has_rights_id) { | 328 | if (has_rights_id) { |
| 329 | status = Loader::ResultStatus::Success; | 329 | status = Loader::ResultStatus::Success; |
| @@ -442,18 +442,18 @@ std::optional<Core::Crypto::Key128> NCA::GetTitlekey() { | |||
| 442 | memcpy(rights_id.data(), header.rights_id.data(), 16); | 442 | memcpy(rights_id.data(), header.rights_id.data(), 16); |
| 443 | if (rights_id == u128{}) { | 443 | if (rights_id == u128{}) { |
| 444 | status = Loader::ResultStatus::ErrorInvalidRightsID; | 444 | status = Loader::ResultStatus::ErrorInvalidRightsID; |
| 445 | return {}; | 445 | return std::nullopt; |
| 446 | } | 446 | } |
| 447 | 447 | ||
| 448 | auto titlekey = keys.GetKey(Core::Crypto::S128KeyType::Titlekey, rights_id[1], rights_id[0]); | 448 | auto titlekey = keys.GetKey(Core::Crypto::S128KeyType::Titlekey, rights_id[1], rights_id[0]); |
| 449 | if (titlekey == Core::Crypto::Key128{}) { | 449 | if (titlekey == Core::Crypto::Key128{}) { |
| 450 | status = Loader::ResultStatus::ErrorMissingTitlekey; | 450 | status = Loader::ResultStatus::ErrorMissingTitlekey; |
| 451 | return {}; | 451 | return std::nullopt; |
| 452 | } | 452 | } |
| 453 | 453 | ||
| 454 | if (!keys.HasKey(Core::Crypto::S128KeyType::Titlekek, master_key_id)) { | 454 | if (!keys.HasKey(Core::Crypto::S128KeyType::Titlekek, master_key_id)) { |
| 455 | status = Loader::ResultStatus::ErrorMissingTitlekek; | 455 | status = Loader::ResultStatus::ErrorMissingTitlekek; |
| 456 | return {}; | 456 | return std::nullopt; |
| 457 | } | 457 | } |
| 458 | 458 | ||
| 459 | Core::Crypto::AESCipher<Core::Crypto::Key128> cipher( | 459 | Core::Crypto::AESCipher<Core::Crypto::Key128> cipher( |
| @@ -477,7 +477,7 @@ VirtualFile NCA::Decrypt(const NCASectionHeader& s_header, VirtualFile in, u64 s | |||
| 477 | case NCASectionCryptoType::BKTR: | 477 | case NCASectionCryptoType::BKTR: |
| 478 | LOG_TRACE(Crypto, "called with mode=CTR, starting_offset={:016X}", starting_offset); | 478 | LOG_TRACE(Crypto, "called with mode=CTR, starting_offset={:016X}", starting_offset); |
| 479 | { | 479 | { |
| 480 | std::optional<Core::Crypto::Key128> key = {}; | 480 | std::optional<Core::Crypto::Key128> key; |
| 481 | if (has_rights_id) { | 481 | if (has_rights_id) { |
| 482 | status = Loader::ResultStatus::Success; | 482 | status = Loader::ResultStatus::Success; |
| 483 | key = GetTitlekey(); | 483 | key = GetTitlekey(); |
diff --git a/src/core/file_sys/vfs.cpp b/src/core/file_sys/vfs.cpp index a4c3f67c4..b2f026b6d 100644 --- a/src/core/file_sys/vfs.cpp +++ b/src/core/file_sys/vfs.cpp | |||
| @@ -169,11 +169,12 @@ VfsDirectory::~VfsDirectory() = default; | |||
| 169 | 169 | ||
| 170 | std::optional<u8> VfsFile::ReadByte(std::size_t offset) const { | 170 | std::optional<u8> VfsFile::ReadByte(std::size_t offset) const { |
| 171 | u8 out{}; | 171 | u8 out{}; |
| 172 | std::size_t size = Read(&out, 1, offset); | 172 | const std::size_t size = Read(&out, sizeof(u8), offset); |
| 173 | if (size == 1) | 173 | if (size == 1) { |
| 174 | return out; | 174 | return out; |
| 175 | } | ||
| 175 | 176 | ||
| 176 | return {}; | 177 | return std::nullopt; |
| 177 | } | 178 | } |
| 178 | 179 | ||
| 179 | std::vector<u8> VfsFile::ReadBytes(std::size_t size, std::size_t offset) const { | 180 | std::vector<u8> VfsFile::ReadBytes(std::size_t size, std::size_t offset) const { |
diff --git a/src/core/file_sys/vfs_offset.cpp b/src/core/file_sys/vfs_offset.cpp index c96f88488..7714d3de5 100644 --- a/src/core/file_sys/vfs_offset.cpp +++ b/src/core/file_sys/vfs_offset.cpp | |||
| @@ -58,10 +58,11 @@ std::size_t OffsetVfsFile::Write(const u8* data, std::size_t length, std::size_t | |||
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | std::optional<u8> OffsetVfsFile::ReadByte(std::size_t r_offset) const { | 60 | std::optional<u8> OffsetVfsFile::ReadByte(std::size_t r_offset) const { |
| 61 | if (r_offset < size) | 61 | if (r_offset >= size) { |
| 62 | return file->ReadByte(offset + r_offset); | 62 | return std::nullopt; |
| 63 | } | ||
| 63 | 64 | ||
| 64 | return {}; | 65 | return file->ReadByte(offset + r_offset); |
| 65 | } | 66 | } |
| 66 | 67 | ||
| 67 | std::vector<u8> OffsetVfsFile::ReadBytes(std::size_t r_size, std::size_t r_offset) const { | 68 | std::vector<u8> OffsetVfsFile::ReadBytes(std::size_t r_size, std::size_t r_offset) const { |
diff --git a/src/core/file_sys/vfs_static.h b/src/core/file_sys/vfs_static.h index 9f5a90b1b..8b27c30fa 100644 --- a/src/core/file_sys/vfs_static.h +++ b/src/core/file_sys/vfs_static.h | |||
| @@ -54,9 +54,11 @@ public: | |||
| 54 | } | 54 | } |
| 55 | 55 | ||
| 56 | std::optional<u8> ReadByte(std::size_t offset) const override { | 56 | std::optional<u8> ReadByte(std::size_t offset) const override { |
| 57 | if (offset < size) | 57 | if (offset >= size) { |
| 58 | return value; | 58 | return std::nullopt; |
| 59 | return {}; | 59 | } |
| 60 | |||
| 61 | return value; | ||
| 60 | } | 62 | } |
| 61 | 63 | ||
| 62 | std::vector<u8> ReadBytes(std::size_t length, std::size_t offset) const override { | 64 | std::vector<u8> ReadBytes(std::size_t length, std::size_t offset) const override { |