diff --git a/src/xenia/kernel/xam/xam_net.cc b/src/xenia/kernel/xam/xam_net.cc index 4e371ba1e..d05f39a07 100644 --- a/src/xenia/kernel/xam/xam_net.cc +++ b/src/xenia/kernel/xam/xam_net.cc @@ -238,13 +238,23 @@ DECLARE_XAM_EXPORT1(NetDll_XNetGetOpt, kNetworking, kSketchy); dword_result_t NetDll_XNetRandom_entry(dword_t caller, lpvoid_t buffer_ptr, dword_t length) { - // For now, constant values. - // This makes replicating things easier. - std::memset(buffer_ptr, 0xBB, length); + uint8_t* buffer_data_ptr = buffer_ptr.as(); - return 0; + if (buffer_data_ptr == nullptr || length == 0) { + return X_ERROR_SUCCESS; + } + + std::random_device rnd; + std::mt19937_64 gen(rnd()); + std::uniform_int_distribution dist(0, + std::numeric_limits::max()); + + std::generate(buffer_data_ptr, buffer_data_ptr + length, + [&]() { return static_cast(dist(gen)); }); + + return X_ERROR_SUCCESS; } -DECLARE_XAM_EXPORT1(NetDll_XNetRandom, kNetworking, kStub); +DECLARE_XAM_EXPORT1(NetDll_XNetRandom, kNetworking, kImplemented); dword_result_t NetDll_WSAStartup_entry(dword_t caller, word_t version, pointer_t data_ptr) {