diff options
| author | Gliniak <Gliniak93@gmail.com> | 2023-02-20 13:33:50 +0100 |
|---|---|---|
| committer | Rick Gibbed <rick@gibbed.us> | 2023-06-09 19:42:48 -0500 |
| commit | 858af5ae756027f60f8219052bdf0e1af1979aa8 (patch) | |
| tree | 2f00f8afc737b382443c44ddaa5cf4bbd749894c | |
| parent | e110527bfea4722d59da5a7603ea46b826a6740b (diff) | |
[XAM] xeXamContentCreate - Disposition cleanup
| -rw-r--r-- | src/xenia/kernel/xam/xam_content.cc | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/src/xenia/kernel/xam/xam_content.cc b/src/xenia/kernel/xam/xam_content.cc index 11a9cf52b..0fe3cc5bb 100644 --- a/src/xenia/kernel/xam/xam_content.cc +++ b/src/xenia/kernel/xam/xam_content.cc @@ -116,6 +116,8 @@ dword_result_t XamContentCreateEnumerator_entry( } DECLARE_XAM_EXPORT1(XamContentCreateEnumerator, kContent, kImplemented); +enum class kDispositionState : uint32_t { Unknown = 0, Create = 1, Open = 2 }; + dword_result_t xeXamContentCreate(dword_t user_index, lpstring_t root_name, lpvoid_t content_data_ptr, dword_t content_data_size, dword_t flags, @@ -143,40 +145,37 @@ dword_result_t xeXamContentCreate(dword_t user_index, lpstring_t root_name, content_data, disposition_ptr, license_mask_ptr]( uint32_t& extended_error, uint32_t& length) -> X_RESULT { X_RESULT result = X_ERROR_INVALID_PARAMETER; - bool create = false; - bool open = false; + kDispositionState disposition = kDispositionState::Unknown; switch (flags & 0xF) { case 1: // CREATE_NEW // Fail if exists. if (content_manager->ContentExists(content_data)) { result = X_ERROR_ALREADY_EXISTS; } else { - create = true; + disposition = kDispositionState::Create; } break; case 2: // CREATE_ALWAYS // Overwrite existing, if any. if (content_manager->ContentExists(content_data)) { content_manager->DeleteContent(content_data); - create = true; - } else { - create = true; } + disposition = kDispositionState::Create; break; case 3: // OPEN_EXISTING // Open only if exists. if (!content_manager->ContentExists(content_data)) { result = X_ERROR_PATH_NOT_FOUND; } else { - open = true; + disposition = kDispositionState::Open; } break; case 4: // OPEN_ALWAYS // Create if needed. if (!content_manager->ContentExists(content_data)) { - create = true; + disposition = kDispositionState::Create; } else { - open = true; + disposition = kDispositionState::Open; } break; case 5: // TRUNCATE_EXISTING @@ -185,7 +184,7 @@ dword_result_t xeXamContentCreate(dword_t user_index, lpstring_t root_name, result = X_ERROR_PATH_NOT_FOUND; } else { content_manager->DeleteContent(content_data); - create = true; + disposition = kDispositionState::Create; } break; default: @@ -193,27 +192,22 @@ dword_result_t xeXamContentCreate(dword_t user_index, lpstring_t root_name, break; } - // creation result - // 0 = ? - // 1 = created - // 2 = opened - uint32_t disposition = create ? 1 : 2; - if (disposition_ptr) { - *disposition_ptr = disposition; - } - - if (create) { + if (disposition == kDispositionState::Create) { result = content_manager->CreateContent(root_name, content_data); - } else if (open) { + } else if (disposition == kDispositionState::Open) { result = content_manager->OpenContent(root_name, content_data); } + if (disposition_ptr) { + *disposition_ptr = static_cast<uint32_t>(disposition); + } + if (license_mask_ptr && XSUCCEEDED(result)) { *license_mask_ptr = 0; // Stub! } extended_error = X_HRESULT_FROM_WIN32(result); - length = disposition; + length = static_cast<uint32_t>(disposition); return result; }; |
