Mesa (thalloc): thalloc: Implement simple talloc functions with halloc
Jakob Bornecrantz
wallbraker at kemper.freedesktop.org
Wed Jan 19 01:30:39 UTC 2011
Module: Mesa
Branch: thalloc
Commit: a301771a3aa9674025b05287ec76126c75e6de5a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=a301771a3aa9674025b05287ec76126c75e6de5a
Author: Jakob Bornecrantz <jakob at vmware.com>
Date: Wed Jan 19 02:28:22 2011 +0100
thalloc: Implement simple talloc functions with halloc
Signed-off-by: Jakob Bornecrantz <jakob at vmware.com>
---
src/thalloc/talloc.h | 49 +++++++++++++++++++++++++++++++++++--------------
1 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/src/thalloc/talloc.h b/src/thalloc/talloc.h
index b0b111e..a665e6f 100644
--- a/src/thalloc/talloc.h
+++ b/src/thalloc/talloc.h
@@ -9,6 +9,8 @@
#include <string.h>
#include <stdarg.h>
+#include "halloc.h"
+
static inline char *
talloc_asprintf(const void *t, const char *fmt, ...) {
assert(0);
@@ -29,14 +31,14 @@ talloc_autofree_context(void) {
static inline int
talloc_free(void *ptr) {
- assert(0);
+ halloc(ptr, 0);
return 0;
}
static inline void *
talloc_init(const char *fmt, ...) {
- assert(0);
- return NULL;
+ /* XXX can't create empty allocations */
+ return halloc(NULL, 1);
}
static inline void *
@@ -47,8 +49,13 @@ talloc_parent(const void *ptr) {
static inline void *
talloc_realloc_size(const void *ctx, void *ptr, size_t size) {
- assert(0);
- return NULL;
+ /* talloc_realloc works like c realloc and matches halloc behaviour */
+ void *ret = halloc(ptr, size);
+
+ if (!ptr)
+ hattach(ret, (void *)ctx);
+
+ return ret;
}
static inline void *
@@ -64,8 +71,19 @@ talloc_set_destructor(void *ctx, int (*destructor)(void*)) {
static inline void *
talloc_size(const void *ctx, size_t size) {
- assert(0);
- return NULL;
+ void *ptr;
+
+ /* XXX can't create empty allocations */
+ if (size == 0)
+ size = 1;
+
+ ptr = halloc(NULL, size);
+ if (!ptr)
+ return NULL;
+
+ hattach(ptr, (void*)ctx);
+
+ return ptr;
}
#define talloc_new(_ctx) talloc_strdup(_ctx, __FILE__ )
@@ -78,17 +96,19 @@ talloc_size(const void *ctx, size_t size) {
static inline void *
talloc_steal(const void *new_ctx, const void *ptr)
{
- assert(0);
+ /* halloc will assert if new_ctx != NULL */
+ if (!ptr)
+ return NULL;
+
+ hattach((void*)ptr, (void*)new_ctx);
return (void*)ptr;
}
static inline char *
talloc_strdup(const void *ctx, const char *p) {
- size_t size = strlen(p) + 1;
- char *ptr = (char *)talloc_size(ctx, size);
- if (ptr) {
- memcpy(ptr, p, size);
- }
+ char *ptr = h_strdup(p);
+ if (ptr)
+ hattach(ptr, (void *)ctx);
return ptr;
}
@@ -112,7 +132,8 @@ talloc_strndup_append(char *s, const char *p, size_t n) {
static inline int
talloc_unlink(const void *ctx, const void *ptr) {
- assert(0);
+ /* XXX check ctx is parent */
+ hattach((void*)ptr, NULL);
return 0;
}
More information about the mesa-commit
mailing list