diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-08-21 01:54:46 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:58:14 -0500 |
commit | b83ba93eaeb2dcb0bf11615591d886fda84e4162 (patch) | |
tree | b2fe3c5a6ea7a9bd1f5f416e545ee26d4a207ac5 /source4/include | |
parent | 326f562e72c0776f469a8af93e25a2cc94dff60e (diff) | |
download | samba-b83ba93eaeb2dcb0bf11615591d886fda84e4162.tar.gz samba-b83ba93eaeb2dcb0bf11615591d886fda84e4162.tar.bz2 samba-b83ba93eaeb2dcb0bf11615591d886fda84e4162.zip |
r1983: a completely new implementation of talloc
This version does the following:
1) talloc_free(), talloc_realloc() and talloc_steal() lose their
(redundent) first arguments
2) you can use _any_ talloc pointer as a talloc context to allocate
more memory. This allows you to create complex data structures
where the top level structure is the logical parent of the next
level down, and those are the parents of the level below
that. Then destroy either the lot with a single talloc_free() or
destroy any sub-part with a talloc_free() of that part
3) you can name any pointer. Use talloc_named() which is just like
talloc() but takes the printf style name argument as well as the
parent context and the size.
The whole thing ends up being a very simple piece of code, although
some of the pointer walking gets hairy.
So far, I'm just using the new talloc() like the old one. The next
step is to actually take advantage of the new interface
properly. Expect some new commits soon that simplify some common
coding styles in samba4 by using the new talloc().
(This used to be commit e35bb094c52e550b3105dd1638d8d90de71d854f)
Diffstat (limited to 'source4/include')
-rw-r--r-- | source4/include/talloc.h | 39 |
1 files changed, 9 insertions, 30 deletions
diff --git a/source4/include/talloc.h b/source4/include/talloc.h index 8c1a726778..dec004b7ef 100644 --- a/source4/include/talloc.h +++ b/source4/include/talloc.h @@ -3,8 +3,8 @@ /* Unix SMB/CIFS implementation. Samba temporary memory allocation functions - Copyright (C) Andrew Tridgell 2000 - Copyright (C) 2001 by Martin Pool <mbp@samba.org> + + Copyright (C) Andrew Tridgell 2004 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,40 +21,19 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/** - * @ingroup talloc - * @{ - * @sa talloc.c - */ - -/** - * talloc allocation pool. All allocated blocks can be freed in one go. - **/ -typedef struct talloc_ctx TALLOC_CTX; - -TALLOC_CTX *talloc_init(char const *fmt, ...) PRINTF_ATTRIBUTE(1, 2); - -char *talloc_vasprintf(TALLOC_CTX *t, const char *fmt, va_list ap) - PRINTF_ATTRIBUTE(2, 0); - -char *talloc_asprintf(TALLOC_CTX *t, const char *fmt, ...) - PRINTF_ATTRIBUTE(2, 3); - -char *talloc_vasprintf_append(TALLOC_CTX *t, char *, const char *, va_list ap) - PRINTF_ATTRIBUTE(3, 0); - -char *talloc_asprintf_append(TALLOC_CTX *t, char *, const char *, ...) - PRINTF_ATTRIBUTE(3, 4); +/* this is only needed for compatibility with the old talloc */ +typedef void TALLOC_CTX; /* useful macros for creating type checked pointers */ #define talloc_p(ctx, type) (type *)talloc(ctx, sizeof(type)) -#define talloc_array_p(ctx, type, count) (type *)talloc_realloc_array(ctx, NULL, sizeof(type), count) -#define talloc_realloc_p(ctx, p, type, count) (type *)talloc_realloc_array(ctx, p, sizeof(type), count) +#define talloc_array_p(ctx, type, count) (type *)talloc_array(ctx, sizeof(type), count) +#define talloc_realloc_p(p, type, count) (type *)talloc_realloc_array(p, sizeof(type), count) + +#define talloc_destroy(ctx) talloc_free(ctx) #define malloc_p(type) (type *)malloc(sizeof(type)) #define malloc_array_p(type, count) (type *)realloc_array(NULL, sizeof(type), count) #define realloc_p(p, type, count) (type *)realloc_array(p, sizeof(type), count) -/** @} */ +#endif -#endif /* ndef _TALLOC_H_ */ |