1#ifndef _TALLOC_H_
2#define _TALLOC_H_
3/*
4   Unix SMB/CIFS implementation.
5   Samba temporary memory allocation functions
6   Copyright (C) Andrew Tridgell 2000
7   Copyright (C) 2001 by Martin Pool <mbp@samba.org>
8
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; either version 2 of the License, or
12   (at your option) any later version.
13
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18
19   You should have received a copy of the GNU General Public License
20   along with this program; if not, write to the Free Software
21   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22*/
23
24/**
25 * @ingroup talloc
26 * @{
27 * @sa talloc.c
28 */
29
30/**
31 * talloc allocation pool.  All allocated blocks can be freed in one go.
32 **/
33
34struct talloc_chunk {
35	struct talloc_chunk *next;
36	size_t size;
37	void *ptr;
38};
39
40struct talloc_ctx {
41	struct talloc_chunk *list;
42	size_t total_alloc_size;
43
44	/** The name recorded for this pool, if any.  Should describe
45	 * the purpose for which it was allocated.  The string is
46	 * allocated within the pool. **/
47	char *name;
48
49	/** Pointer to the next allocate talloc pool, so that we can
50	 * summarize all talloc memory usage. **/
51	struct talloc_ctx *next_ctx;
52};
53
54typedef struct talloc_ctx TALLOC_CTX;
55
56TALLOC_CTX *talloc_init(char const *fmt, ...) PRINTF_ATTRIBUTE(1, 2);
57
58char *talloc_vasprintf(TALLOC_CTX *t, const char *fmt, va_list ap)
59	PRINTF_ATTRIBUTE(2, 0);
60
61char *talloc_asprintf(TALLOC_CTX *t, const char *fmt, ...)
62	PRINTF_ATTRIBUTE(2, 3);
63
64char *talloc_vasprintf_append(TALLOC_CTX *t, char *, const char *, va_list ap)
65	PRINTF_ATTRIBUTE(3, 0);
66
67char *talloc_asprintf_append(TALLOC_CTX *t, char *, const char *, ...)
68	PRINTF_ATTRIBUTE(3, 4);
69
70/** @} */
71
72#endif /* ndef _TALLOC_H_ */
73