#include "PluginData.h" void PluginData::freeMemory() { if (buffer == NULL) { return; } switch (memoryType) { default: case eMemTypeExpHeap: MEMFreeToExpHeap(this->heapHandle, buffer); this->buffer = NULL; break; case eMemTypeMEM2: free(this->buffer); this->buffer = NULL; break; } } PluginData::PluginData(std::vector buffer) : PluginData(buffer, 0, eMemTypeMEM2) { } void PluginData::loadReader() { if (this->buffer == NULL) { this->reader = std::nullopt; } else { elfio *nReader = new elfio; if (nReader != NULL && nReader->load((char *) this->buffer, length)) { DEBUG_FUNCTION_LINE("Loading was okay"); this->reader = nReader; } else { if (nReader) { delete nReader; nReader = NULL; } DEBUG_FUNCTION_LINE("Loading failed"); this->reader = std::nullopt; } } } PluginData::PluginData(std::vector input, MEMHeapHandle heapHandle, eMemoryTypes memoryType) : heapHandle(heapHandle), memoryType(memoryType), length(input.size()) { void *data_copy = NULL; switch (memoryType) { default: case eMemTypeExpHeap: data_copy = MEMAllocFromExpHeapEx(heapHandle, length, 4); DEBUG_FUNCTION_LINE("Allocated %d kb from ExpHeap", length / 1024); if (data_copy == NULL) { DEBUG_FUNCTION_LINE("Failed to allocate space on exp heap"); } else { memcpy(data_copy, &input[0], length); } this->buffer = data_copy; DEBUG_FUNCTION_LINE("copied data to exp heap"); break; case eMemTypeMEM2: data_copy = memalign(length, 4); if (data_copy == NULL) { DEBUG_FUNCTION_LINE("Failed to allocate space on default heap"); } else { memcpy(data_copy, &input[0], length); } this->buffer = data_copy; break; } loadReader(); } std::optional PluginData::createFromExistingData(const void *buffer, MEMHeapHandle heapHandle, eMemoryTypes memoryType, const size_t length) { return std::nullopt; }