s32 _sys_sprintf(ppu_thread& ppu, vm::ptr<char> buffer, vm::cptr<char> fmt, ppu_va_args_t va_args) { sysPrxForUser.warning("_sys_sprintf(buffer=*0x%x, fmt=%s, ...)", buffer, fmt); std::string result = ps3_fmt(ppu, fmt, va_args.count); std::memcpy(buffer.get_ptr(), result.c_str(), result.size() + 1); return static_cast<s32>(result.size()); }
s32 _sys_printf(ppu_thread& ppu, vm::cptr<char> fmt, ppu_va_args_t va_args) { sysPrxForUser.warning("_sys_printf(fmt=%s, ...)", fmt); if (g_tty) { g_tty.write(ps3_fmt(ppu, fmt, va_args.count)); } return CELL_OK; }
s32 _sys_snprintf(ppu_thread& ppu, vm::ptr<char> dst, u32 count, vm::cptr<char> fmt, ppu_va_args_t va_args) { sysPrxForUser.warning("_sys_snprintf(dst=*0x%x, count=%d, fmt=%s, ...)", dst, count, fmt); std::string result = ps3_fmt(ppu, fmt, va_args.count); if (!count) { return 0; // ??? } else { count = (u32)std::min<size_t>(count - 1, result.size()); std::memcpy(dst.get_ptr(), result.c_str(), count); dst[count] = 0; return count; } }
s32 _sys_snprintf(PPUThread& CPU, vm::ptr<char> dst, u32 count, vm::ptr<const char> fmt) // va_args... { sysPrxForUser.Warning("_sys_snprintf(dst=*0x%x, count=%d, fmt=*0x%x, ...)", dst, count, fmt); std::string result = ps3_fmt(CPU, fmt, 3, 0, 0); sysPrxForUser.Warning("*** '%s' -> '%s'", fmt.get_ptr(), result); if (!count) { return 0; // ??? } else { count = (u32)std::min<size_t>(count - 1, result.size()); memcpy(dst.get_ptr(), result.c_str(), count); dst[count] = 0; return count; } }