XamLoaderLaunchData: Fix incorrect return values when launch data is not present.

This commit is contained in:
Dr. Chat 2015-12-16 15:39:12 -06:00 committed by Ben Vanik
parent b9159ddee8
commit d0f547020a
1 changed files with 12 additions and 4 deletions

View File

@ -101,6 +101,7 @@ dword_result_t XamLoaderSetLaunchData(lpvoid_t data, dword_t size) {
kernel_memory()->SystemHeapFree(loader_data.launch_data_ptr); kernel_memory()->SystemHeapFree(loader_data.launch_data_ptr);
} }
loader_data.launch_data_present = size ? true : false;
loader_data.launch_data_ptr = kernel_memory()->SystemHeapAlloc(size); loader_data.launch_data_ptr = kernel_memory()->SystemHeapAlloc(size);
loader_data.launch_data_size = size; loader_data.launch_data_size = size;
@ -114,18 +115,25 @@ DECLARE_XAM_EXPORT(XamLoaderSetLaunchData, ExportTag::kSketchy);
dword_result_t XamLoaderGetLaunchDataSize(lpdword_t size_ptr) { dword_result_t XamLoaderGetLaunchDataSize(lpdword_t size_ptr) {
auto xam = kernel_state()->GetKernelModule<XamModule>("xam.xex"); auto xam = kernel_state()->GetKernelModule<XamModule>("xam.xex");
auto& loader_data = xam->loader_data();
*size_ptr = xam->loader_data().launch_data_size; if (loader_data.launch_data_present) {
*size_ptr = xam->loader_data().launch_data_size;
return X_ERROR_SUCCESS;
}
return 0; return X_ERROR_NOT_FOUND;
} }
DECLARE_XAM_EXPORT(XamLoaderGetLaunchDataSize, ExportTag::kSketchy); DECLARE_XAM_EXPORT(XamLoaderGetLaunchDataSize, ExportTag::kSketchy);
dword_result_t XamLoaderGetLaunchData(lpvoid_t buffer_ptr, dword_result_t XamLoaderGetLaunchData(lpvoid_t buffer_ptr,
dword_t buffer_size) { dword_t buffer_size) {
auto xam = kernel_state()->GetKernelModule<XamModule>("xam.xex"); auto xam = kernel_state()->GetKernelModule<XamModule>("xam.xex");
auto& loader_data = xam->loader_data(); auto& loader_data = xam->loader_data();
if (!loader_data.launch_data_present) {
return X_ERROR_NOT_FOUND;
}
if (loader_data.launch_data_ptr) { if (loader_data.launch_data_ptr) {
uint8_t* loader_buffer_ptr = uint8_t* loader_buffer_ptr =
kernel_memory()->TranslateVirtual(loader_data.launch_data_ptr); kernel_memory()->TranslateVirtual(loader_data.launch_data_ptr);
@ -136,7 +144,7 @@ dword_result_t XamLoaderGetLaunchData(lpvoid_t buffer_ptr,
std::memcpy(buffer_ptr, loader_buffer_ptr, copy_size); std::memcpy(buffer_ptr, loader_buffer_ptr, copy_size);
} }
return 0; return X_ERROR_SUCCESS;
} }
DECLARE_XAM_EXPORT(XamLoaderGetLaunchData, ExportTag::kSketchy); DECLARE_XAM_EXPORT(XamLoaderGetLaunchData, ExportTag::kSketchy);