From b686ce8ec009372905e1d71c19323f7892589038 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sat, 19 May 2012 09:28:14 +0000 Subject: updater returned by request of Awkward git-svn-id: http://svn.miranda-ng.org/main/trunk@67 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/updater/allocations.h | 72 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 plugins/updater/allocations.h (limited to 'plugins/updater/allocations.h') diff --git a/plugins/updater/allocations.h b/plugins/updater/allocations.h new file mode 100644 index 0000000000..842d7daf01 --- /dev/null +++ b/plugins/updater/allocations.h @@ -0,0 +1,72 @@ +#ifndef _ALLOCATION_INC +#define _ALLOCATION_INC + +// store allocated memory pointers for deallocation when shutting down +class Allocations { +public: + Allocations(): head(0) {} + virtual ~Allocations() { free_all(); } + + void push_back(void *pt) { Node *n = new Node; n->value = pt; n->next = head; head = n;} + +protected: + + class Node { + public: + void *value; + Node *next; + }; + + Node *head; + + void free_all() { + Node *current; + while(head) { + current = head; + head = head->next; + free(current->value); + delete current; + } + } +}; + +extern Allocations allocations; + +__inline static void *safe_alloc(size_t bytes) { + if(bytes == 0) return 0; + void *ret = malloc(bytes); + allocations.push_back(ret); + return ret; +} + +__inline static char *safe_strdup(const char *s) { + if(!s) return 0; + char *ret = _strdup(s); + allocations.push_back(ret); + return ret; +} + +__inline static wchar_t *safe_wstrdup(const wchar_t *s) { + if(!s) return 0; + wchar_t *ret = _wcsdup(s); + allocations.push_back(ret); + return ret; +} + +#ifdef _UNICODE +#define safe_tstrdup(x) safe_wstrdup(x) +#else +#define sage_tstrdup(x) safe_strdup(x) +#endif + +__inline static BYTE *safe_bytedup(BYTE *bytes, int size) { + if(!bytes || size == 0) return 0; + + BYTE *ret = (BYTE *)malloc(size + 1); + memcpy(ret, bytes, size); + *(ret + size) = 0; + allocations.push_back(ret); + return ret; +} + +#endif -- cgit v1.2.3