source: trunk/server/lib/talloc/talloc_guide.txt

Last change on this file was 752, checked in by Silvan Scherrer, 13 years ago

Samba Server: updated trunk to 3.6.9 2nd part

File size: 30.1 KB
Line 
1Using talloc in Samba4
2======================
3
4.. contents::
5
6Andrew Tridgell
7August 2009
8
9The most current version of this document is available at
10 http://samba.org/ftp/unpacked/talloc/talloc_guide.txt
11
12If you are used to the "old" talloc from Samba3 before 3.0.20 then please read
13this carefully, as talloc has changed a lot. With 3.0.20 (or 3.0.14?) the
14Samba4 talloc has been ported back to Samba3, so this guide applies to both.
15
16The new talloc is a hierarchical, reference counted memory pool system
17with destructors. Quite a mouthful really, but not too bad once you
18get used to it.
19
20Perhaps the biggest change from Samba3 is that there is no distinction
21between a "talloc context" and a "talloc pointer". Any pointer
22returned from talloc() is itself a valid talloc context. This means
23you can do this::
24
25 struct foo *X = talloc(mem_ctx, struct foo);
26 X->name = talloc_strdup(X, "foo");
27
28and the pointer X->name would be a "child" of the talloc context "X"
29which is itself a child of "mem_ctx". So if you do talloc_free(mem_ctx)
30then it is all destroyed, whereas if you do talloc_free(X) then just X
31and X->name are destroyed, and if you do talloc_free(X->name) then
32just the name element of X is destroyed.
33
34If you think about this, then what this effectively gives you is an
35n-ary tree, where you can free any part of the tree with
36talloc_free().
37
38If you find this confusing, then I suggest you run the testsuite to
39watch talloc in action. You may also like to add your own tests to
40testsuite.c to clarify how some particular situation is handled.
41
42
43Performance
44-----------
45
46All the additional features of talloc() over malloc() do come at a
47price. We have a simple performance test in Samba4 that measures
48talloc() versus malloc() performance, and it seems that talloc() is
49about 4% slower than malloc() on my x86 Debian Linux box. For Samba,
50the great reduction in code complexity that we get by using talloc
51makes this worthwhile, especially as the total overhead of
52talloc/malloc in Samba is already quite small.
53
54
55talloc API
56----------
57
58The following is a complete guide to the talloc API. Read it all at
59least twice.
60
61Multi-threading
62---------------
63
64talloc itself does not deal with threads. It is thread-safe (assuming
65the underlying "malloc" is), as long as each thread uses different
66memory contexts.
67If two threads use the same context then they need to synchronize in
68order to be safe. In particular:
69- when using talloc_enable_leak_report(), giving directly NULL as a
70parent context implicitly refers to a hidden "null context" global
71variable, so this should not be used in a multi-threaded environment
72without proper synchronization ;
73- the context returned by talloc_autofree_context() is also global so
74shouldn't be used by several threads simultaneously without
75synchronization.
76
77talloc and shared objects
78-------------------------
79
80talloc can be used in shared objects. Special care needs to be taken
81to never use talloc_autofree_context() in code that might be loaded
82with dlopen() and unloaded with dlclose(), as talloc_autofree_context()
83internally uses atexit(3). Some platforms like modern Linux handles
84this fine, but for example FreeBSD does not deal well with dlopen()
85and atexit() used simultaneously: dlclose() does not clean up the list
86of atexit-handlers, so when the program exits the code that was
87registered from within talloc_autofree_context() is gone, the program
88crashes at exit.
89
90
91=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
92(type *)talloc(const void *context, type);
93
94The talloc() macro is the core of the talloc library. It takes a
95memory context and a type, and returns a pointer to a new area of
96memory of the given type.
97
98The returned pointer is itself a talloc context, so you can use it as
99the context argument to more calls to talloc if you wish.
100
101The returned pointer is a "child" of the supplied context. This means
102that if you talloc_free() the context then the new child disappears as
103well. Alternatively you can free just the child.
104
105The context argument to talloc() can be NULL, in which case a new top
106level context is created.
107
108
109=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
110void *talloc_size(const void *context, size_t size);
111
112The function talloc_size() should be used when you don't have a
113convenient type to pass to talloc(). Unlike talloc(), it is not type
114safe (as it returns a void *), so you are on your own for type checking.
115
116=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
117(typeof(ptr)) talloc_ptrtype(const void *ctx, ptr);
118
119The talloc_ptrtype() macro should be used when you have a pointer and
120want to allocate memory to point at with this pointer. When compiling
121with gcc >= 3 it is typesafe. Note this is a wrapper of talloc_size()
122and talloc_get_name() will return the current location in the source file.
123and not the type.
124
125=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
126int talloc_free(void *ptr);
127
128The talloc_free() function frees a piece of talloc memory, and all its
129children. You can call talloc_free() on any pointer returned by
130talloc().
131
132The return value of talloc_free() indicates success or failure, with 0
133returned for success and -1 for failure. A possible failure condition
134is if the pointer had a destructor attached to it and the destructor
135returned -1. See talloc_set_destructor() for details on
136destructors. Likewise, if "ptr" is NULL, then the function will make
137no modifications and returns -1.
138
139From version 2.0 and onwards, as a special case, talloc_free() is
140refused on pointers that have more than one parent associated, as talloc
141would have no way of knowing which parent should be removed. This is
142different from older versions in the sense that always the reference to
143the most recently established parent has been destroyed. Hence to free a
144pointer that has more than one parent please use talloc_unlink().
145
146To help you find problems in your code caused by this behaviour, if
147you do try and free a pointer with more than one parent then the
148talloc logging function will be called to give output like this:
149
150 ERROR: talloc_free with references at some_dir/source/foo.c:123
151 reference at some_dir/source/other.c:325
152 reference at some_dir/source/third.c:121
153
154Please see the documentation for talloc_set_log_fn() and
155talloc_set_log_stderr() for more information on talloc logging
156functions.
157
158talloc_free() operates recursively on its children.
159
160=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
161void talloc_free_children(void *ptr);
162
163The talloc_free_children() walks along the list of all children of a
164talloc context and talloc_free()s only the children, not the context
165itself.
166
167A NULL argument is handled as no-op.
168
169=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
170void *talloc_reference(const void *context, const void *ptr);
171
172The talloc_reference() function makes "context" an additional parent
173of "ptr".
174
175The return value of talloc_reference() is always the original pointer
176"ptr", unless talloc ran out of memory in creating the reference in
177which case it will return NULL (each additional reference consumes
178around 48 bytes of memory on intel x86 platforms).
179
180If "ptr" is NULL, then the function is a no-op, and simply returns NULL.
181
182After creating a reference you can free it in one of the following
183ways:
184
185 - you can talloc_free() any parent of the original pointer. That
186 will reduce the number of parents of this pointer by 1, and will
187 cause this pointer to be freed if it runs out of parents.
188
189 - you can talloc_free() the pointer itself if it has at maximum one
190 parent. This behaviour has been changed since the release of version
191 2.0. Further informations in the description of "talloc_free".
192
193For more control on which parent to remove, see talloc_unlink()
194
195
196=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
197int talloc_unlink(const void *context, const void *ptr);
198
199The talloc_unlink() function removes a specific parent from ptr. The
200context passed must either be a context used in talloc_reference()
201with this pointer, or must be a direct parent of ptr.
202
203Note that if the parent has already been removed using talloc_free()
204then this function will fail and will return -1. Likewise, if "ptr"
205is NULL, then the function will make no modifications and return -1.
206
207You can just use talloc_free() instead of talloc_unlink() if there
208is at maximum one parent. This behaviour has been changed since the
209release of version 2.0. Further informations in the description of
210"talloc_free".
211
212=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
213void talloc_set_destructor(const void *ptr, int (*destructor)(void *));
214
215The function talloc_set_destructor() sets the "destructor" for the
216pointer "ptr". A destructor is a function that is called when the
217memory used by a pointer is about to be released. The destructor
218receives the pointer as an argument, and should return 0 for success
219and -1 for failure.
220
221The destructor can do anything it wants to, including freeing other
222pieces of memory. A common use for destructors is to clean up
223operating system resources (such as open file descriptors) contained
224in the structure the destructor is placed on.
225
226You can only place one destructor on a pointer. If you need more than
227one destructor then you can create a zero-length child of the pointer
228and place an additional destructor on that.
229
230To remove a destructor call talloc_set_destructor() with NULL for the
231destructor.
232
233If your destructor attempts to talloc_free() the pointer that it is
234the destructor for then talloc_free() will return -1 and the free will
235be ignored. This would be a pointless operation anyway, as the
236destructor is only called when the memory is just about to go away.
237
238
239=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
240int talloc_increase_ref_count(const void *ptr);
241
242The talloc_increase_ref_count(ptr) function is exactly equivalent to:
243
244 talloc_reference(NULL, ptr);
245
246You can use either syntax, depending on which you think is clearer in
247your code.
248
249It returns 0 on success and -1 on failure.
250
251=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
252size_t talloc_reference_count(const void *ptr);
253
254Return the number of references to the pointer.
255
256=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
257void talloc_set_name(const void *ptr, const char *fmt, ...);
258
259Each talloc pointer has a "name". The name is used principally for
260debugging purposes, although it is also possible to set and get the
261name on a pointer in as a way of "marking" pointers in your code.
262
263The main use for names on pointer is for "talloc reports". See
264talloc_report() and talloc_report_full() for details. Also see
265talloc_enable_leak_report() and talloc_enable_leak_report_full().
266
267The talloc_set_name() function allocates memory as a child of the
268pointer. It is logically equivalent to:
269 talloc_set_name_const(ptr, talloc_asprintf(ptr, fmt, ...));
270
271Note that multiple calls to talloc_set_name() will allocate more
272memory without releasing the name. All of the memory is released when
273the ptr is freed using talloc_free().
274
275
276=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
277void talloc_set_name_const(const void *ptr, const char *name);
278
279The function talloc_set_name_const() is just like talloc_set_name(),
280but it takes a string constant, and is much faster. It is extensively
281used by the "auto naming" macros, such as talloc_p().
282
283This function does not allocate any memory. It just copies the
284supplied pointer into the internal representation of the talloc
285ptr. This means you must not pass a name pointer to memory that will
286disappear before the ptr is freed with talloc_free().
287
288
289=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
290void *talloc_named(const void *context, size_t size, const char *fmt, ...);
291
292The talloc_named() function creates a named talloc pointer. It is
293equivalent to:
294
295 ptr = talloc_size(context, size);
296 talloc_set_name(ptr, fmt, ....);
297
298
299=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
300void *talloc_named_const(const void *context, size_t size, const char *name);
301
302This is equivalent to::
303
304 ptr = talloc_size(context, size);
305 talloc_set_name_const(ptr, name);
306
307
308=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
309const char *talloc_get_name(const void *ptr);
310
311This returns the current name for the given talloc pointer. See
312talloc_set_name() for details.
313
314
315=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
316void *talloc_init(const char *fmt, ...);
317
318This function creates a zero length named talloc context as a top
319level context. It is equivalent to::
320
321 talloc_named(NULL, 0, fmt, ...);
322
323
324=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
325void *talloc_new(void *ctx);
326
327This is a utility macro that creates a new memory context hanging
328off an exiting context, automatically naming it "talloc_new: __location__"
329where __location__ is the source line it is called from. It is
330particularly useful for creating a new temporary working context.
331
332
333=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
334(type *)talloc_realloc(const void *context, void *ptr, type, count);
335
336The talloc_realloc() macro changes the size of a talloc
337pointer. The "count" argument is the number of elements of type "type"
338that you want the resulting pointer to hold.
339
340talloc_realloc() has the following equivalences::
341
342 talloc_realloc(context, NULL, type, 1) ==> talloc(context, type);
343 talloc_realloc(context, NULL, type, N) ==> talloc_array(context, type, N);
344 talloc_realloc(context, ptr, type, 0) ==> talloc_free(ptr);
345
346The "context" argument is only used if "ptr" is NULL, otherwise it is
347ignored.
348
349talloc_realloc() returns the new pointer, or NULL on failure. The call
350will fail either due to a lack of memory, or because the pointer has
351more than one parent (see talloc_reference()).
352
353
354=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
355void *talloc_realloc_size(const void *context, void *ptr, size_t size);
356
357the talloc_realloc_size() function is useful when the type is not
358known so the typesafe talloc_realloc() cannot be used.
359
360
361=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
362void *talloc_steal(const void *new_ctx, const void *ptr);
363
364The talloc_steal() function changes the parent context of a talloc
365pointer. It is typically used when the context that the pointer is
366currently a child of is going to be freed and you wish to keep the
367memory for a longer time.
368
369The talloc_steal() function returns the pointer that you pass it. It
370does not have any failure modes.
371
372NOTE: It is possible to produce loops in the parent/child relationship
373if you are not careful with talloc_steal(). No guarantees are provided
374as to your sanity or the safety of your data if you do this.
375
376talloc_steal (new_ctx, NULL) will return NULL with no sideeffects.
377
378Note that if you try and call talloc_steal() on a pointer that has
379more than one parent then the result is ambiguous. Talloc will choose
380to remove the parent that is currently indicated by talloc_parent()
381and replace it with the chosen parent. You will also get a message
382like this via the talloc logging functions:
383
384 WARNING: talloc_steal with references at some_dir/source/foo.c:123
385 reference at some_dir/source/other.c:325
386 reference at some_dir/source/third.c:121
387
388To unambiguously change the parent of a pointer please see the
389function talloc_reparent(). See the talloc_set_log_fn() documentation
390for more information on talloc logging.
391
392=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
393void *talloc_reparent(const void *old_parent, const void *new_parent, const void *ptr);
394
395The talloc_reparent() function changes the parent context of a talloc
396pointer. It is typically used when the context that the pointer is
397currently a child of is going to be freed and you wish to keep the
398memory for a longer time.
399
400The talloc_reparent() function returns the pointer that you pass it. It
401does not have any failure modes.
402
403The difference between talloc_reparent() and talloc_steal() is that
404talloc_reparent() can specify which parent you wish to change. This is
405useful when a pointer has multiple parents via references.
406
407=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
408void *talloc_parent(const void *ptr);
409
410The talloc_parent() function returns the current talloc parent. This
411is usually the pointer under which this memory was originally created,
412but it may have changed due to a talloc_steal() or talloc_reparent()
413
414=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
415size_t talloc_total_size(const void *ptr);
416
417The talloc_total_size() function returns the total size in bytes used
418by this pointer and all child pointers. Mostly useful for debugging.
419
420Passing NULL is allowed, but it will only give a meaningful result if
421talloc_enable_leak_report() or talloc_enable_leak_report_full() has
422been called.
423
424
425=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
426size_t talloc_total_blocks(const void *ptr);
427
428The talloc_total_blocks() function returns the total memory block
429count used by this pointer and all child pointers. Mostly useful for
430debugging.
431
432Passing NULL is allowed, but it will only give a meaningful result if
433talloc_enable_leak_report() or talloc_enable_leak_report_full() has
434been called.
435
436=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
437void talloc_report_depth_cb(const void *ptr, int depth, int max_depth,
438 void (*callback)(const void *ptr,
439 int depth, int max_depth,
440 int is_ref,
441 void *priv),
442 void *priv);
443
444This provides a more flexible reports than talloc_report(). It
445will recursively call the callback for the entire tree of memory
446referenced by the pointer. References in the tree are passed with
447is_ref = 1 and the pointer that is referenced.
448
449You can pass NULL for the pointer, in which case a report is
450printed for the top level memory context, but only if
451talloc_enable_leak_report() or talloc_enable_leak_report_full()
452has been called.
453
454The recursion is stopped when depth >= max_depth.
455max_depth = -1 means only stop at leaf nodes.
456
457
458=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
459void talloc_report_depth_file(const void *ptr, int depth, int max_depth, FILE *f);
460
461This provides a more flexible reports than talloc_report(). It
462will let you specify the depth and max_depth.
463
464
465=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
466void talloc_report(const void *ptr, FILE *f);
467
468The talloc_report() function prints a summary report of all memory
469used by ptr. One line of report is printed for each immediate child of
470ptr, showing the total memory and number of blocks used by that child.
471
472You can pass NULL for the pointer, in which case a report is printed
473for the top level memory context, but only if
474talloc_enable_leak_report() or talloc_enable_leak_report_full() has
475been called.
476
477
478=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
479void talloc_report_full(const void *ptr, FILE *f);
480
481This provides a more detailed report than talloc_report(). It will
482recursively print the entire tree of memory referenced by the
483pointer. References in the tree are shown by giving the name of the
484pointer that is referenced.
485
486You can pass NULL for the pointer, in which case a report is printed
487for the top level memory context, but only if
488talloc_enable_leak_report() or talloc_enable_leak_report_full() has
489been called.
490
491
492=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
493void talloc_enable_leak_report(void);
494
495This enables calling of talloc_report(NULL, stderr) when the program
496exits. In Samba4 this is enabled by using the --leak-report command
497line option.
498
499For it to be useful, this function must be called before any other
500talloc function as it establishes a "null context" that acts as the
501top of the tree. If you don't call this function first then passing
502NULL to talloc_report() or talloc_report_full() won't give you the
503full tree printout.
504
505Here is a typical talloc report:
506
507talloc report on 'null_context' (total 267 bytes in 15 blocks)
508 libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks
509 libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks
510 iconv(UTF8,CP850) contains 42 bytes in 2 blocks
511 libcli/auth/spnego_parse.c:55 contains 31 bytes in 2 blocks
512 iconv(CP850,UTF8) contains 42 bytes in 2 blocks
513 iconv(UTF8,UTF-16LE) contains 45 bytes in 2 blocks
514 iconv(UTF-16LE,UTF8) contains 45 bytes in 2 blocks
515
516
517=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
518void talloc_enable_leak_report_full(void);
519
520This enables calling of talloc_report_full(NULL, stderr) when the
521program exits. In Samba4 this is enabled by using the
522--leak-report-full command line option.
523
524For it to be useful, this function must be called before any other
525talloc function as it establishes a "null context" that acts as the
526top of the tree. If you don't call this function first then passing
527NULL to talloc_report() or talloc_report_full() won't give you the
528full tree printout.
529
530Here is a typical full report:
531
532full talloc report on 'root' (total 18 bytes in 8 blocks)
533 p1 contains 18 bytes in 7 blocks (ref 0)
534 r1 contains 13 bytes in 2 blocks (ref 0)
535 reference to: p2
536 p2 contains 1 bytes in 1 blocks (ref 1)
537 x3 contains 1 bytes in 1 blocks (ref 0)
538 x2 contains 1 bytes in 1 blocks (ref 0)
539 x1 contains 1 bytes in 1 blocks (ref 0)
540
541
542=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
543void talloc_enable_null_tracking(void);
544
545This enables tracking of the NULL memory context without enabling leak
546reporting on exit. Useful for when you want to do your own leak
547reporting call via talloc_report_null_full();
548
549=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
550void talloc_disable_null_tracking(void);
551
552This disables tracking of the NULL memory context.
553
554=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
555(type *)talloc_zero(const void *ctx, type);
556
557The talloc_zero() macro is equivalent to::
558
559 ptr = talloc(ctx, type);
560 if (ptr) memset(ptr, 0, sizeof(type));
561
562
563=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
564void *talloc_zero_size(const void *ctx, size_t size)
565
566The talloc_zero_size() function is useful when you don't have a known type
567
568
569=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
570void *talloc_memdup(const void *ctx, const void *p, size_t size);
571
572The talloc_memdup() function is equivalent to::
573
574 ptr = talloc_size(ctx, size);
575 if (ptr) memcpy(ptr, p, size);
576
577
578=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
579char *talloc_strdup(const void *ctx, const char *p);
580
581The talloc_strdup() function is equivalent to::
582
583 ptr = talloc_size(ctx, strlen(p)+1);
584 if (ptr) memcpy(ptr, p, strlen(p)+1);
585
586This functions sets the name of the new pointer to the passed
587string. This is equivalent to::
588
589 talloc_set_name_const(ptr, ptr)
590
591=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
592char *talloc_strndup(const void *t, const char *p, size_t n);
593
594The talloc_strndup() function is the talloc equivalent of the C
595library function strndup()
596
597This functions sets the name of the new pointer to the passed
598string. This is equivalent to:
599 talloc_set_name_const(ptr, ptr)
600
601=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
602char *talloc_append_string(const void *t, char *orig, const char *append);
603
604The talloc_append_string() function appends the given formatted
605string to the given string.
606
607This function sets the name of the new pointer to the new
608string. This is equivalent to::
609
610 talloc_set_name_const(ptr, ptr)
611
612=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
613char *talloc_vasprintf(const void *t, const char *fmt, va_list ap);
614
615The talloc_vasprintf() function is the talloc equivalent of the C
616library function vasprintf()
617
618This functions sets the name of the new pointer to the new
619string. This is equivalent to::
620
621 talloc_set_name_const(ptr, ptr)
622
623
624=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
625char *talloc_asprintf(const void *t, const char *fmt, ...);
626
627The talloc_asprintf() function is the talloc equivalent of the C
628library function asprintf()
629
630This functions sets the name of the new pointer to the new
631string. This is equivalent to::
632
633 talloc_set_name_const(ptr, ptr)
634
635
636=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
637char *talloc_asprintf_append(char *s, const char *fmt, ...);
638
639The talloc_asprintf_append() function appends the given formatted
640string to the given string.
641Use this variant when the string in the current talloc buffer may
642have been truncated in length.
643
644This functions sets the name of the new pointer to the new
645string. This is equivalent to::
646
647 talloc_set_name_const(ptr, ptr)
648
649
650=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
651char *talloc_asprintf_append_buffer(char *s, const char *fmt, ...);
652
653The talloc_asprintf_append() function appends the given formatted
654string to the end of the currently allocated talloc buffer.
655Use this variant when the string in the current talloc buffer has
656not been changed.
657
658This functions sets the name of the new pointer to the new
659string. This is equivalent to::
660
661 talloc_set_name_const(ptr, ptr)
662
663
664=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
665((type *)talloc_array(const void *ctx, type, unsigned int count);
666
667The talloc_array() macro is equivalent to::
668
669 (type *)talloc_size(ctx, sizeof(type) * count);
670
671except that it provides integer overflow protection for the multiply,
672returning NULL if the multiply overflows.
673
674
675=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
676void *talloc_array_size(const void *ctx, size_t size, unsigned int count);
677
678The talloc_array_size() function is useful when the type is not
679known. It operates in the same way as talloc_array(), but takes a size
680instead of a type.
681
682=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
683(typeof(ptr)) talloc_array_ptrtype(const void *ctx, ptr, unsigned int count);
684
685The talloc_ptrtype() macro should be used when you have a pointer to an array
686and want to allocate memory of an array to point at with this pointer. When compiling
687with gcc >= 3 it is typesafe. Note this is a wrapper of talloc_array_size()
688and talloc_get_name() will return the current location in the source file.
689and not the type.
690
691=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
692void *talloc_realloc_fn(const void *ctx, void *ptr, size_t size);
693
694This is a non-macro version of talloc_realloc(), which is useful
695as libraries sometimes want a ralloc function pointer. A realloc()
696implementation encapsulates the functionality of malloc(), free() and
697realloc() in one call, which is why it is useful to be able to pass
698around a single function pointer.
699
700
701=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
702void *talloc_autofree_context(void);
703
704This is a handy utility function that returns a talloc context
705which will be automatically freed on program exit. This can be used
706to reduce the noise in memory leak reports.
707
708
709=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
710void *talloc_check_name(const void *ptr, const char *name);
711
712This function checks if a pointer has the specified name. If it does
713then the pointer is returned. It it doesn't then NULL is returned.
714
715
716=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
717(type *)talloc_get_type(const void *ptr, type);
718
719This macro allows you to do type checking on talloc pointers. It is
720particularly useful for void* private pointers. It is equivalent to
721this::
722
723 (type *)talloc_check_name(ptr, #type)
724
725
726=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
727talloc_set_type(const void *ptr, type);
728
729This macro allows you to force the name of a pointer to be of a
730particular type. This can be used in conjunction with
731talloc_get_type() to do type checking on void* pointers.
732
733It is equivalent to this::
734
735 talloc_set_name_const(ptr, #type)
736
737=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
738talloc_get_size(const void *ctx);
739
740This function lets you know the amount of memory allocated so far by
741this context. It does NOT account for subcontext memory.
742This can be used to calculate the size of an array.
743
744=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
745void *talloc_find_parent_byname(const void *ctx, const char *name);
746
747Find a parent memory context of the current context that has the given
748name. This can be very useful in complex programs where it may be
749difficult to pass all information down to the level you need, but you
750know the structure you want is a parent of another context.
751
752=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
753(type *)talloc_find_parent_bytype(ctx, type);
754
755Like talloc_find_parent_byname() but takes a type, making it typesafe.
756
757=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
758void talloc_set_log_fn(void (*log_fn)(const char *message));
759
760This function sets a logging function that talloc will use for
761warnings and errors. By default talloc will not print any warnings or
762errors.
763
764=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
765void talloc_set_log_stderr(void)
766
767This sets the talloc log function to write log messages to stderr.
Note: See TracBrowser for help on using the repository browser.