#include "prx/libc/include/ApplicationHeap.hpp" #include "prx/libc/include/General.hpp" #include "SceTypes.hpp" #include #include #include #include extern "C" { int APS5_VABI vasprintf_nid_postfix(char** destination, const char* format, VaList* args); char* APS5_VABI strndup_nid_postfix(const char* source, std::size_t limit) { std::size_t length = 0; while (length < limit && source[length] != '\0') ++length; try { auto* result = static_cast(ApplicationHeapAllocate_nid_no_patch(length + 1)); if (!result) { errno = 12; return nullptr; } std::memcpy(result, source, length); result[length] = '\0'; return result; } catch (const std::bad_alloc&) { errno = 12; return nullptr; } } char* APS5_VABI strdup_nid_postfix(const char* source) { return strndup_nid_postfix(source, static_cast(-1)); } int APS5_VABI asprintf_nid_postfix(char** destination, const char* format, ...) { #ifdef _WIN32 __builtin_sysv_va_list args; __builtin_sysv_va_start(args, format); #else std::va_list args; va_start(args, format); #endif const int result = vasprintf_nid_postfix(destination, format, reinterpret_cast(args)); #ifdef _WIN32 __builtin_sysv_va_end(args); #else va_end(args); #endif return result; } }