[XAM] Added profile and create content enumerator wrappers

This commit is contained in:
Adrian
2026-02-25 21:46:01 +00:00
committed by Radosław Gliński
parent 54be3c57a0
commit a7f1a3f18a
4 changed files with 98 additions and 12 deletions

View File

@@ -68,7 +68,6 @@ uint32_t XStaticUntypedEnumerator::WriteItems(uint8_t* buffer_data,
return X_ERROR_NO_MORE_FILES;
}
// 4E4D07F0 does not respect buffer_size for XContentCreateEnumerator.
assert_false(buffer_size < item_size());
const size_t available_count = buffer_size / item_size();
@@ -215,6 +214,8 @@ uint32_t XMPCreateUserPlaylistEnumerator::WriteItems(uint8_t* buffer_data,
std::copy_n(items_.begin() + current_item_, valid_count, results);
current_item_ += valid_count;
if (written_count) {
*written_count = static_cast<uint32_t>(valid_count);
}
@@ -222,5 +223,53 @@ uint32_t XMPCreateUserPlaylistEnumerator::WriteItems(uint8_t* buffer_data,
return X_ERROR_SUCCESS;
}
uint32_t ProfileEnumerator::WriteItems(uint8_t* buffer_data,
uint32_t buffer_size,
uint32_t* written_count) {
const size_t actual_count =
std::min(items_.size() - current_item_, items_per_enumerate());
if (!actual_count) {
return X_ERROR_NO_MORE_FILES;
}
// FFFE07D1 provides buffer_size of 0.
xam::X_PROFILEENUMRESULT* profiles =
reinterpret_cast<xam::X_PROFILEENUMRESULT*>(buffer_data);
std::copy_n(items_.begin() + current_item_, actual_count, profiles);
current_item_ += actual_count;
if (written_count) {
*written_count = static_cast<uint32_t>(actual_count);
}
return X_ERROR_SUCCESS;
}
uint32_t ContentEnumerator::WriteItems(uint8_t* buffer_data,
uint32_t buffer_size,
uint32_t* written_count) {
const size_t actual_count =
std::min(items_.size() - current_item_, items_per_enumerate());
if (!actual_count) {
return X_ERROR_NO_MORE_FILES;
}
// 4E4D07F0 does not respect buffer_size, possibly bug?
xam::XCONTENT_DATA* contents =
reinterpret_cast<xam::XCONTENT_DATA*>(buffer_data);
std::copy_n(items_.begin() + current_item_, actual_count, contents);
current_item_ += actual_count;
if (written_count) {
*written_count = static_cast<uint32_t>(actual_count);
}
return X_ERROR_SUCCESS;
}
} // namespace kernel
} // namespace xe