From a85c04c0fb1c59d49bc99accfad62d59786d65ec Mon Sep 17 00:00:00 2001 From: hzcheng Date: Wed, 15 Apr 2020 23:48:44 +0800 Subject: [PATCH] TD-100 --- src/util/inc/tutil.h | 7 +++++++ src/util/src/tutil.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/util/inc/tutil.h b/src/util/inc/tutil.h index c4c802a688..15f5ce6fa3 100644 --- a/src/util/inc/tutil.h +++ b/src/util/inc/tutil.h @@ -178,6 +178,13 @@ void taosDumpMemoryLeak(); void *taosbsearch(const void *key, const void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *), int flags); +void * tmalloc(size_t size); +void * tcalloc(size_t nmemb, size_t size); +size_t tsizeof(void *ptr); +void tmemset(void *ptr, int c); +void * trealloc(void *ptr, size_t size); +void tzfree(void *ptr); + #ifdef TAOS_MEM_CHECK void * taos_malloc(size_t size, const char *file, uint32_t line); diff --git a/src/util/src/tutil.c b/src/util/src/tutil.c index aa144600a0..63e174ab06 100644 --- a/src/util/src/tutil.c +++ b/src/util/src/tutil.c @@ -689,3 +689,42 @@ void * taosbsearch(const void *key, const void *base, size_t nmemb, size_t size, return NULL; } + +void *tmalloc(size_t size) { + if (size <= 0) return NULL; + + void *ret = malloc(size + sizeof(size_t)); + if (ret == NULL) return NULL; + + *(size_t *)ret = size; + + return (void *)((char *)ret + sizeof(size_t)); +} + +void *tcalloc(size_t nmemb, size_t size) { + size_t tsize = nmemb * size; + void * ret = tmalloc(tsize); + if (ret == NULL) return NULL; + + tmemset(ret, 0); + return ret; +} + +size_t tsizeof(void *ptr) { return *(size_t *)((char *)ptr - sizeof(size_t)); } + +void tmemset(void *ptr, int c) { memset(ptr, c, tsizeof(ptr)); } + +void * trealloc(void *ptr, size_t size) { + if (size <= tsizeof(ptr)) return ptr; + + void * tptr = (void *)((char *)ptr - sizeof(size_t)); + size_t tsize = size + sizeof(size_t); + tptr = realloc(tptr, tsize); + if (tptr == NULL) return NULL; + + *(size_t *)tptr = size; + + return (void *)((char *)tptr + sizeof(size_t)); +} + +void tzfree(void *ptr) { free((void *)((char *)ptr - sizeof(size_t))); } \ No newline at end of file -- GitLab