Files
AnyPS5/core/libs/tests/GuestNpCppWebApiOffline.cpp
T
Yossi Yadgar 723a0880d5 feat(libSceNpCppWebApi): destroy the InGameCatalog product and TitleCloudStorage status const iterators
Like the library's other ConstIterator destructors they own nothing and return 0.
2026-10-23 11:12:58 +03:00

35 lines
1.2 KiB
C++

#include "prx/libc/include/general/VabiMacros.hpp"
#include <cstdio>
#include <cstdlib>
#include <cstring>
using SelfCall = int (APS5_VABI*)(void*);
extern "C" {
int APS5_VABI _ZN3sce2Np9CppWebApi6Common13ConstIteratorINS2_12IntrusivePtrINS1_13InGameCatalog2V57ProductEEEED2Ev(void*);
int APS5_VABI _ZN3sce2Np9CppWebApi6Common13ConstIteratorINS2_12IntrusivePtrINS1_17TitleCloudStorage2V110DataStatusEEEED2Ev(void*);
}
static void Require(bool value, const char* what) {
if (value) return;
std::fprintf(stderr, "%s\n", what);
std::abort();
}
static void TestIteratorDestructors() {
unsigned char iterator[0x20];
std::memset(iterator, 0x5a, sizeof(iterator));
const SelfCall destructors[] = {
_ZN3sce2Np9CppWebApi6Common13ConstIteratorINS2_12IntrusivePtrINS1_13InGameCatalog2V57ProductEEEED2Ev,
_ZN3sce2Np9CppWebApi6Common13ConstIteratorINS2_12IntrusivePtrINS1_17TitleCloudStorage2V110DataStatusEEEED2Ev,
};
for (const auto call : destructors) Require(call(iterator) == 0, "an iterator destructor failed");
for (const auto byte : iterator) Require(byte == 0x5a, "an iterator destructor wrote to the iterator");
}
int main() {
TestIteratorDestructors();
std::puts("NpCppWebApi offline tests passed");
return 0;
}