#include "prx/libSceSulphaDrv/libSceSulphaDrv.hpp" #include #include #include #include #include #include #include static void Require(bool condition, const char* message) { if (condition) return; std::fprintf(stderr, "%s\n", message); std::abort(); } int main() { errno = 7; Require(sceSulphaGetDefaultConfig(nullptr) == static_cast(0x804d0003u) && errno == 7, "A null configuration must return the native argument error without changing errno"); struct Config { std::uint64_t size; std::uint64_t capacity; std::uint32_t setting; std::uint32_t port; }; static_assert(sizeof(Config) == 24); for (const auto shift : {0u, 1u}) for (const auto initial : std::array{0, 24, 560, UINT64_MAX}) { for (const unsigned char pattern : {0xa5, 0x5a}) { std::array storage; storage.fill(pattern); auto* config = storage.data() + 8 + shift; std::memcpy(config, &initial, sizeof(initial)); errno = 7; Require(sceSulphaGetDefaultConfig(config) == 0 && errno == 7, "Default configuration must accept non-null storage regardless of its incoming size"); Config result; std::memcpy(&result, config, sizeof(result)); Require(result.size == 24 && result.capacity == 4194304 && result.setting == 3 && result.port == 4001, "Default configuration must match the native 24-byte record"); for (std::size_t i = 0; i < storage.size(); ++i) { if (i < 8 + shift || i >= 8 + shift + sizeof(Config)) Require(storage[i] == pattern, "Default configuration must preserve bytes outside its record"); } } } }