From 58b1059a23124fa84882f2c92254cc8c327d5a51 Mon Sep 17 00:00:00 2001 From: gibbed Date: Tue, 2 Jun 2015 10:03:53 -0500 Subject: [PATCH] Reordered the formatting exports in the order of their ordinal. --- src/xenia/kernel/xboxkrnl_strings.cc | 156 +++++++++++++-------------- 1 file changed, 78 insertions(+), 78 deletions(-) diff --git a/src/xenia/kernel/xboxkrnl_strings.cc b/src/xenia/kernel/xboxkrnl_strings.cc index 86a4af669..585073686 100644 --- a/src/xenia/kernel/xboxkrnl_strings.cc +++ b/src/xenia/kernel/xboxkrnl_strings.cc @@ -787,6 +787,28 @@ class WideCountFormatData : public FormatData { int32_t count_; }; +SHIM_CALL DbgPrint_shim(PPCContext* ppc_context, KernelState* kernel_state) { + uint32_t format_ptr = SHIM_GET_ARG_32(0); + if (!format_ptr) { + SHIM_SET_RETURN_32(X_STATUS_INVALID_PARAMETER); + return; + } + auto format = (const uint8_t*)SHIM_MEM_ADDR(format_ptr); + + StackArgList args(ppc_context); + StringFormatData data(format); + + int32_t count = format_core(ppc_context, data, args, false); + if (count <= 0) { + SHIM_SET_RETURN_32(X_STATUS_SUCCESS); + return; + } + + XELOGD("(DbgPrint) %s", data.str().c_str()); + + SHIM_SET_RETURN_32(X_STATUS_SUCCESS); +} + // https://msdn.microsoft.com/en-us/library/ybk95axf.aspx SHIM_CALL sprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) { uint32_t buffer_ptr = SHIM_GET_ARG_32(0); @@ -815,35 +837,6 @@ SHIM_CALL sprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) { SHIM_SET_RETURN_32(count); } -// https://msdn.microsoft.com/en-us/library/28d5ce15.aspx -SHIM_CALL vsprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) { - uint32_t buffer_ptr = SHIM_GET_ARG_32(0); - uint32_t format_ptr = SHIM_GET_ARG_32(1); - uint32_t arg_ptr = SHIM_GET_ARG_32(2); - - XELOGD("vsprintf(%08X, %08X, %08X)", buffer_ptr, format_ptr, arg_ptr); - - if (buffer_ptr == 0 || format_ptr == 0) { - SHIM_SET_RETURN_32(-1); - return; - } - - auto buffer = (uint8_t*)SHIM_MEM_ADDR(buffer_ptr); - auto format = (const uint8_t*)SHIM_MEM_ADDR(format_ptr); - - ArrayArgList args(ppc_context, arg_ptr); - StringFormatData data(format); - - int32_t count = format_core(ppc_context, data, args, false); - if (count <= 0) { - buffer[0] = '\0'; - } else { - std::memcpy(buffer, data.str().c_str(), count); - buffer[count] = '\0'; - } - SHIM_SET_RETURN_32(count); -} - // https://msdn.microsoft.com/en-us/library/1kt27hek.aspx SHIM_CALL _vsnprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) { uint32_t buffer_ptr = SHIM_GET_ARG_32(0); @@ -882,6 +875,57 @@ SHIM_CALL _vsnprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) { SHIM_SET_RETURN_32(count); } +// https://msdn.microsoft.com/en-us/library/28d5ce15.aspx +SHIM_CALL vsprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) { + uint32_t buffer_ptr = SHIM_GET_ARG_32(0); + uint32_t format_ptr = SHIM_GET_ARG_32(1); + uint32_t arg_ptr = SHIM_GET_ARG_32(2); + + XELOGD("vsprintf(%08X, %08X, %08X)", buffer_ptr, format_ptr, arg_ptr); + + if (buffer_ptr == 0 || format_ptr == 0) { + SHIM_SET_RETURN_32(-1); + return; + } + + auto buffer = (uint8_t*)SHIM_MEM_ADDR(buffer_ptr); + auto format = (const uint8_t*)SHIM_MEM_ADDR(format_ptr); + + ArrayArgList args(ppc_context, arg_ptr); + StringFormatData data(format); + + int32_t count = format_core(ppc_context, data, args, false); + if (count <= 0) { + buffer[0] = '\0'; + } else { + std::memcpy(buffer, data.str().c_str(), count); + buffer[count] = '\0'; + } + SHIM_SET_RETURN_32(count); +} + +// https://msdn.microsoft.com/en-us/library/w05tbk72.aspx +SHIM_CALL _vscwprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) { + uint32_t format_ptr = SHIM_GET_ARG_32(0); + uint32_t arg_ptr = SHIM_GET_ARG_32(1); + + XELOGD("_vscwprintf(%08X, %08X)", format_ptr, arg_ptr); + + if (format_ptr == 0) { + SHIM_SET_RETURN_32(-1); + return; + } + + auto format = (const uint16_t*)SHIM_MEM_ADDR(format_ptr); + + ArrayArgList args(ppc_context, arg_ptr); + WideCountFormatData data(format); + + int32_t count = format_core(ppc_context, data, args, true); + assert_true(count < 0 || data.count() == count); + SHIM_SET_RETURN_32(count); +} + // https://msdn.microsoft.com/en-us/library/28d5ce15.aspx SHIM_CALL vswprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) { uint32_t buffer_ptr = SHIM_GET_ARG_32(0); @@ -911,59 +955,15 @@ SHIM_CALL vswprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) { SHIM_SET_RETURN_32(count); } -// https://msdn.microsoft.com/en-us/library/w05tbk72.aspx -SHIM_CALL _vscwprintf_shim(PPCContext* ppc_context, KernelState* kernel_state) { - uint32_t format_ptr = SHIM_GET_ARG_32(0); - uint32_t arg_ptr = SHIM_GET_ARG_32(1); - - XELOGD("_vscwprintf(%08X, %08X)", format_ptr, arg_ptr); - - if (format_ptr == 0) { - SHIM_SET_RETURN_32(-1); - return; - } - - auto format = (const uint16_t*)SHIM_MEM_ADDR(format_ptr); - - ArrayArgList args(ppc_context, arg_ptr); - WideCountFormatData data(format); - - int32_t count = format_core(ppc_context, data, args, true); - assert_true(count < 0 || data.count() == count); - SHIM_SET_RETURN_32(count); -} - -SHIM_CALL DbgPrint_shim(PPCContext* ppc_context, KernelState* kernel_state) { - uint32_t format_ptr = SHIM_GET_ARG_32(0); - if (!format_ptr) { - SHIM_SET_RETURN_32(X_STATUS_INVALID_PARAMETER); - return; - } - auto format = (const uint8_t*)SHIM_MEM_ADDR(format_ptr); - - StackArgList args(ppc_context); - StringFormatData data(format); - - int32_t count = format_core(ppc_context, data, args, false); - if (count <= 0) { - SHIM_SET_RETURN_32(X_STATUS_SUCCESS); - return; - } - - XELOGD("(DbgPrint) %s", data.str().c_str()); - - SHIM_SET_RETURN_32(X_STATUS_SUCCESS); -} - } // namespace kernel } // namespace xe void xe::kernel::xboxkrnl::RegisterStringExports( xe::cpu::ExportResolver* export_resolver, KernelState* state) { - SHIM_SET_MAPPING("xboxkrnl.exe", sprintf, state); - SHIM_SET_MAPPING("xboxkrnl.exe", vsprintf, state); - SHIM_SET_MAPPING("xboxkrnl.exe", _vsnprintf, state); - SHIM_SET_MAPPING("xboxkrnl.exe", vswprintf, state); - SHIM_SET_MAPPING("xboxkrnl.exe", _vscwprintf, state); SHIM_SET_MAPPING("xboxkrnl.exe", DbgPrint, state); + SHIM_SET_MAPPING("xboxkrnl.exe", sprintf, state); + SHIM_SET_MAPPING("xboxkrnl.exe", _vsnprintf, state); + SHIM_SET_MAPPING("xboxkrnl.exe", vsprintf, state); + SHIM_SET_MAPPING("xboxkrnl.exe", _vscwprintf, state); + SHIM_SET_MAPPING("xboxkrnl.exe", vswprintf, state); }