diff options
author | George Hazan <george.hazan@gmail.com> | 2012-05-19 09:28:14 +0000 |
---|---|---|
committer | George Hazan <george.hazan@gmail.com> | 2012-05-19 09:28:14 +0000 |
commit | b686ce8ec009372905e1d71c19323f7892589038 (patch) | |
tree | 5bed79c846115658e5f392eb2a721cd58a17ba00 /plugins/updater/allocations.h | |
parent | 7a2c6126cd995cfdbd5f3167609cd7e09ffacf35 (diff) |
updater returned by request of Awkward
git-svn-id: http://svn.miranda-ng.org/main/trunk@67 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/updater/allocations.h')
-rw-r--r-- | plugins/updater/allocations.h | 72 |
1 files changed, 72 insertions, 0 deletions
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
|