Skip to content

Commit 858af5a

Browse files
Gliniakgibbed
authored andcommitted
[XAM] xeXamContentCreate - Disposition cleanup
1 parent e110527 commit 858af5a

File tree

1 file changed

+16
-22
lines changed

1 file changed

+16
-22
lines changed

src/xenia/kernel/xam/xam_content.cc

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,8 @@ dword_result_t XamContentCreateEnumerator_entry(
116116
}
117117
DECLARE_XAM_EXPORT1(XamContentCreateEnumerator, kContent, kImplemented);
118118

119+
enum class kDispositionState : uint32_t { Unknown = 0, Create = 1, Open = 2 };
120+
119121
dword_result_t xeXamContentCreate(dword_t user_index, lpstring_t root_name,
120122
lpvoid_t content_data_ptr,
121123
dword_t content_data_size, dword_t flags,
@@ -143,40 +145,37 @@ dword_result_t xeXamContentCreate(dword_t user_index, lpstring_t root_name,
143145
content_data, disposition_ptr, license_mask_ptr](
144146
uint32_t& extended_error, uint32_t& length) -> X_RESULT {
145147
X_RESULT result = X_ERROR_INVALID_PARAMETER;
146-
bool create = false;
147-
bool open = false;
148+
kDispositionState disposition = kDispositionState::Unknown;
148149
switch (flags & 0xF) {
149150
case 1: // CREATE_NEW
150151
// Fail if exists.
151152
if (content_manager->ContentExists(content_data)) {
152153
result = X_ERROR_ALREADY_EXISTS;
153154
} else {
154-
create = true;
155+
disposition = kDispositionState::Create;
155156
}
156157
break;
157158
case 2: // CREATE_ALWAYS
158159
// Overwrite existing, if any.
159160
if (content_manager->ContentExists(content_data)) {
160161
content_manager->DeleteContent(content_data);
161-
create = true;
162-
} else {
163-
create = true;
164162
}
163+
disposition = kDispositionState::Create;
165164
break;
166165
case 3: // OPEN_EXISTING
167166
// Open only if exists.
168167
if (!content_manager->ContentExists(content_data)) {
169168
result = X_ERROR_PATH_NOT_FOUND;
170169
} else {
171-
open = true;
170+
disposition = kDispositionState::Open;
172171
}
173172
break;
174173
case 4: // OPEN_ALWAYS
175174
// Create if needed.
176175
if (!content_manager->ContentExists(content_data)) {
177-
create = true;
176+
disposition = kDispositionState::Create;
178177
} else {
179-
open = true;
178+
disposition = kDispositionState::Open;
180179
}
181180
break;
182181
case 5: // TRUNCATE_EXISTING
@@ -185,35 +184,30 @@ dword_result_t xeXamContentCreate(dword_t user_index, lpstring_t root_name,
185184
result = X_ERROR_PATH_NOT_FOUND;
186185
} else {
187186
content_manager->DeleteContent(content_data);
188-
create = true;
187+
disposition = kDispositionState::Create;
189188
}
190189
break;
191190
default:
192191
assert_unhandled_case(flags & 0xF);
193192
break;
194193
}
195194

196-
// creation result
197-
// 0 = ?
198-
// 1 = created
199-
// 2 = opened
200-
uint32_t disposition = create ? 1 : 2;
201-
if (disposition_ptr) {
202-
*disposition_ptr = disposition;
203-
}
204-
205-
if (create) {
195+
if (disposition == kDispositionState::Create) {
206196
result = content_manager->CreateContent(root_name, content_data);
207-
} else if (open) {
197+
} else if (disposition == kDispositionState::Open) {
208198
result = content_manager->OpenContent(root_name, content_data);
209199
}
210200

201+
if (disposition_ptr) {
202+
*disposition_ptr = static_cast<uint32_t>(disposition);
203+
}
204+
211205
if (license_mask_ptr && XSUCCEEDED(result)) {
212206
*license_mask_ptr = 0; // Stub!
213207
}
214208

215209
extended_error = X_HRESULT_FROM_WIN32(result);
216-
length = disposition;
210+
length = static_cast<uint32_t>(disposition);
217211
return result;
218212
};
219213

0 commit comments

Comments
 (0)