diff options
author | Jean-Francois Mauguit <jfmauguit@mac.com> | 2024-09-24 09:03:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-24 09:03:25 -0400 |
commit | bab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Winamp/MemoryManager.cpp | |
parent | 4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff) | |
parent | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff) | |
download | winamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz |
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/Winamp/MemoryManager.cpp')
-rw-r--r-- | Src/Winamp/MemoryManager.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/Src/Winamp/MemoryManager.cpp b/Src/Winamp/MemoryManager.cpp new file mode 100644 index 00000000..22f17978 --- /dev/null +++ b/Src/Winamp/MemoryManager.cpp @@ -0,0 +1,69 @@ +/** (c) Nullsoft, Inc. C O N F I D E N T I A L + ** Filename: + ** Project: + ** Description: + ** Author: + ** Created: + **/ +#include "main.h" +#include "MemoryManager.h" +#include "api.h" + +#include <api/syscb/callbacks/syscb.h> +#include <api/syscb/callbacks/sysmemcb.h> + +void *MemoryManager::Malloc(size_t size) +{ + if (size <= 0) return NULL; + void *ret = calloc(size, 1); + if (ret != NULL) + WASABI_API_SYSCB->syscb_issueCallback(SysCallback::SYSMEM, SysMemCallback::ONMALLOC, (intptr_t)ret, size); + return ret; +} + +void MemoryManager::Free(void *ptr) +{ + if (ptr != NULL) + WASABI_API_SYSCB->syscb_issueCallback(SysCallback::SYSMEM, SysMemCallback::ONFREE, (intptr_t)ptr); + free(ptr); +} + +void *MemoryManager::Realloc(void *ptr, size_t newsize) +{ + void *ptrs[2] = {ptr, 0}; + void *new_memory = realloc(ptr, newsize); + if (new_memory) + ptrs[1] = new_memory; + else + { + new_memory = calloc(newsize, 1); + if (new_memory) + { + memcpy(new_memory, ptr, _msize(ptr)); + ptrs[1] = new_memory; + } + } + + if (!(ptrs[0] == NULL && ptrs[1] == NULL)) + WASABI_API_SYSCB->syscb_issueCallback(SysCallback::SYSMEM, SysMemCallback::ONREALLOC, (intptr_t)ptrs, newsize); + + return new_memory; +} + +void MemoryManager::MemChanged(void *ptr) +{ + if (ptr == NULL) return ; + WASABI_API_SYSCB->syscb_issueCallback(SysCallback::SYSMEM, SysMemCallback::ONCHANGE, (intptr_t)ptr); +} + +#ifdef CBCLASS +#undef CBCLASS +#endif + +#define CBCLASS MemoryManager +START_DISPATCH; + CB(API_MEMMGR_SYSMALLOC, Malloc); + VCB(API_MEMMGR_SYSFREE, Free); + CB(API_MEMMGR_SYSREALLOC, Realloc); + VCB(API_MEMMGR_SYSMEMCHANGED, MemChanged); +END_DISPATCH; |