ia64/xen-unstable

view tools/xenstore/talloc.h @ 6946:e703abaf6e3d

Add behaviour to the remove methods to remove the transaction's path itself. This allows us to write Remove(path) to remove the specified path rather than having to slice the path ourselves.
author emellor@ewan
date Sun Sep 18 14:42:13 2005 +0100 (2005-09-18)
parents 6d3e8f90c2df
children 40e3df4cffe4
line source
1 #ifndef _TALLOC_H_
2 #define _TALLOC_H_
3 /*
4 Unix SMB/CIFS implementation.
5 Samba temporary memory allocation functions
7 Copyright (C) Andrew Tridgell 2004-2005
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.
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.
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 */
24 /* this is only needed for compatibility with the old talloc */
25 typedef void TALLOC_CTX;
27 /*
28 this uses a little trick to allow __LINE__ to be stringified
29 */
30 #define _STRING_LINE_(s) #s
31 #define _STRING_LINE2_(s) _STRING_LINE_(s)
32 #define __LINESTR__ _STRING_LINE2_(__LINE__)
33 #define __location__ __FILE__ ":" __LINESTR__
35 #ifndef TALLOC_DEPRECATED
36 #define TALLOC_DEPRECATED 0
37 #endif
39 /* useful macros for creating type checked pointers */
40 #define talloc(ctx, type) (type *)talloc_named_const(ctx, sizeof(type), #type)
41 #define talloc_size(ctx, size) talloc_named_const(ctx, size, __location__)
43 #define talloc_new(ctx) talloc_named_const(ctx, 0, "talloc_new: " __location__)
45 #define talloc_zero(ctx, type) (type *)_talloc_zero(ctx, sizeof(type), #type)
46 #define talloc_zero_size(ctx, size) _talloc_zero(ctx, size, __location__)
48 #define talloc_zero_array(ctx, type, count) (type *)_talloc_zero_array(ctx, sizeof(type), count, #type)
49 #define talloc_array(ctx, type, count) (type *)_talloc_array(ctx, sizeof(type), count, #type)
50 #define talloc_array_size(ctx, size, count) _talloc_array(ctx, size, count, __location__)
52 #define talloc_realloc(ctx, p, type, count) (type *)_talloc_realloc_array(ctx, p, sizeof(type), count, #type)
53 #define talloc_realloc_size(ctx, ptr, size) _talloc_realloc(ctx, ptr, size, __location__)
55 #define talloc_memdup(t, p, size) _talloc_memdup(t, p, size, __location__)
57 #define malloc_p(type) (type *)malloc(sizeof(type))
58 #define malloc_array_p(type, count) (type *)realloc_array(NULL, sizeof(type), count)
59 #define realloc_p(p, type, count) (type *)realloc_array(p, sizeof(type), count)
61 #define data_blob(ptr, size) data_blob_named(ptr, size, "DATA_BLOB: "__location__)
62 #define data_blob_talloc(ctx, ptr, size) data_blob_talloc_named(ctx, ptr, size, "DATA_BLOB: "__location__)
63 #define data_blob_dup_talloc(ctx, blob) data_blob_talloc_named(ctx, (blob)->data, (blob)->length, "DATA_BLOB: "__location__)
65 #define talloc_set_type(ptr, type) talloc_set_name_const(ptr, #type)
66 #define talloc_get_type(ptr, type) (type *)talloc_check_name(ptr, #type)
69 #if TALLOC_DEPRECATED
70 #define talloc_zero_p(ctx, type) talloc_zero(ctx, type)
71 #define talloc_p(ctx, type) talloc(ctx, type)
72 #define talloc_array_p(ctx, type, count) talloc_array(ctx, type, count)
73 #define talloc_realloc_p(ctx, p, type, count) talloc_realloc(ctx, p, type, count)
74 #define talloc_destroy(ctx) talloc_free(ctx)
75 #endif
77 #ifndef PRINTF_ATTRIBUTE
78 #if (__GNUC__ >= 3)
79 /** Use gcc attribute to check printf fns. a1 is the 1-based index of
80 * the parameter containing the format, and a2 the index of the first
81 * argument. Note that some gcc 2.x versions don't handle this
82 * properly **/
83 #define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2)))
84 #else
85 #define PRINTF_ATTRIBUTE(a1, a2)
86 #endif
87 #endif
90 /* The following definitions come from talloc.c */
91 void *_talloc(const void *context, size_t size);
92 void talloc_set_destructor(const void *ptr, int (*destructor)(void *));
93 void talloc_increase_ref_count(const void *ptr);
94 void *talloc_reference(const void *context, const void *ptr);
95 int talloc_unlink(const void *context, void *ptr);
96 void talloc_set_name(const void *ptr, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
97 void talloc_set_name_const(const void *ptr, const char *name);
98 void *talloc_named(const void *context, size_t size,
99 const char *fmt, ...) PRINTF_ATTRIBUTE(3,4);
100 void *talloc_named_const(const void *context, size_t size, const char *name);
101 const char *talloc_get_name(const void *ptr);
102 void *talloc_check_name(const void *ptr, const char *name);
103 void talloc_report_depth(const void *ptr, FILE *f, int depth);
104 void *talloc_parent(const void *ptr);
105 void *talloc_init(const char *fmt, ...) PRINTF_ATTRIBUTE(1,2);
106 int talloc_free(void *ptr);
107 void *_talloc_realloc(const void *context, void *ptr, size_t size, const char *name);
108 void *talloc_steal(const void *new_ctx, const void *ptr);
109 off_t talloc_total_size(const void *ptr);
110 off_t talloc_total_blocks(const void *ptr);
111 void talloc_report_full(const void *ptr, FILE *f);
112 void talloc_report(const void *ptr, FILE *f);
113 void talloc_enable_null_tracking(void);
114 void talloc_enable_leak_report(void);
115 void talloc_enable_leak_report_full(void);
116 void *_talloc_zero(const void *ctx, size_t size, const char *name);
117 void *_talloc_memdup(const void *t, const void *p, size_t size, const char *name);
118 char *talloc_strdup(const void *t, const char *p);
119 char *talloc_strndup(const void *t, const char *p, size_t n);
120 char *talloc_vasprintf(const void *t, const char *fmt, va_list ap) PRINTF_ATTRIBUTE(2,0);
121 char *talloc_asprintf(const void *t, const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
122 char *talloc_asprintf_append(char *s,
123 const char *fmt, ...) PRINTF_ATTRIBUTE(2,3);
124 void *_talloc_array(const void *ctx, size_t el_size, unsigned count, const char *name);
125 void *_talloc_zero_array(const void *ctx, size_t el_size, unsigned count, const char *name);
126 void *_talloc_realloc_array(const void *ctx, void *ptr, size_t el_size, unsigned count, const char *name);
127 void *talloc_realloc_fn(const void *context, void *ptr, size_t size);
128 void *talloc_autofree_context(void);
129 size_t talloc_get_size(const void *ctx);
131 typedef int talloc_fail_handler(void *);
132 talloc_fail_handler *talloc_set_fail_handler(talloc_fail_handler *, void *);
133 #endif