#include "prx/libSceContentExport/include/Api.hpp" #include "SceTypes.hpp" #include #include #include #include namespace { void Require(bool value) { if (!value) std::abort(); } template bool Throws(TAction action) { try { action(); } catch (const TException&) { return true; } return false; } int allocator = 0; char path[1024]{}; void Export(std::int32_t expId) { ContentExportParam param{}; ContentExportCallbackParam content{}; ContentExportCallbackParam thumbnail{}; sceContentExportFromDataWithThumbnail(expId, ¶m, &content, "image/png", &thumbnail, path, sizeof(path)); } } int main() { ContentExportInitParam2 param{&allocator, &allocator, nullptr, 0x10000, 0, 0}; Require(Throws([] { sceContentExportInit2(nullptr); })); Require(sceContentExportTerm() == static_cast(0x809D3004u)); Require(sceContentExportStart() == static_cast(0x809D3004u)); Require(Throws([] { sceContentExportFinish(1); })); ContentExportInitParam2 missing = param; missing.free_func = nullptr; Require(Throws([&] { sceContentExportInit2(&missing); })); ContentExportInitParam2 reserved = param; reserved.reserved1 = 1; Require(Throws([&] { sceContentExportInit2(&reserved); })); Require(sceContentExportInit2(¶m) == 0); Require(Throws([&] { sceContentExportInit2(¶m); })); Require(sceContentExportTerm() == 0); Require(sceContentExportTerm() == static_cast(0x809D3004u)); Require(sceContentExportInit2(¶m) == 0); std::set sessions; for (int i = 0; i < 10; ++i) { int session = sceContentExportStart(); Require(session == i); Require(sessions.insert(session).second); } Require(sceContentExportStart() == static_cast(0x809D3018u)); Require(sceContentExportTerm() == static_cast(0x809D3003u)); int first = *sessions.begin(); Require(sceContentExportCancel(first) == static_cast(0x809D3002u)); Require(sceContentExportFinish(first) == 0); Require(Throws([&] { sceContentExportFinish(first); })); Require(Throws([&] { sceContentExportGetProgress(first); })); Require(Throws([&] { sceContentExportCancel(first); })); Require(Throws([&] { Export(first); })); Require(Throws([] { sceContentExportFinish(0); })); Require(Throws([] { sceContentExportFinish(-1); })); sessions.erase(first); int reopened = sceContentExportStart(); Require(reopened == first); Require(sessions.insert(reopened).second); Require(sceContentExportStart() == static_cast(0x809D3018u)); Require(sceContentExportFinish(7) == 0); Require(sceContentExportFinish(3) == 0); Require(sceContentExportStart() == 3); Require(sceContentExportStart() == 7); for (int session : sessions) Require(sceContentExportFinish(session) == 0); Require(sceContentExportTerm() == 0); Require(sceContentExportStart() == static_cast(0x809D3004u)); Require(Throws([&] { sceContentExportFinish(reopened); })); Require(Throws([] { sceContentExportAddToFavorites(0); })); Require(Throws([] { sceContentExportDataProvideFunction(); })); Require(Throws([] { sceContentExportFree(); })); Require(Throws([] { sceContentExportFrom(); })); Require(Throws([] { sceContentExportFromFileForSf(0, nullptr, nullptr, nullptr, nullptr, nullptr, 0); })); Require(Throws([] { sceContentExportFromFileWithContentIdList(0, nullptr, nullptr, nullptr, nullptr, 0, nullptr, 0); })); Require(Throws([] { sceContentExportFromFileWithTitleIdList(0, nullptr, nullptr, nullptr, nullptr, nullptr, 0); })); Require(Throws([] { sceContentExportInit(nullptr); })); Require(Throws([] { sceContentExportMalloc(); })); Require(Throws([] { sceContentExportRemoveFromFavorites(0); })); Require(Throws([] { sceContentExportRenameContent(0, nullptr); })); Require(Throws([] { sceContentExportValidateContents(nullptr, 0); })); }