Note that calls to "expert" functions should not be under 'if (tree)'.
[metze/wireshark/wip.git] / doc / README.malloc
1 $Id$
2
3 1. Introduction
4
5 In order to make memory management easier and to reduce the probability of
6 memory leaks wireshark provides its own memory management API. This API is 
7 implemented inside epan/emem.c and provides memory allocation functions 
8 where the allocated memory is automatically freed at certain points.
9
10 If you use these functions you will no longer need to keep track of when and 
11 where to free any dynamically allocated memory, the memory will 
12 automatically be freed at the appropriate time.
13
14 Using these functions will greatly elevate the probability that your code 
15 will not leak memory so do use them where appropriate.
16
17 2. The allocation types
18
19 There are two sets of functions with different allocation temporal scopes:
20  * ephemeral (ep_...)
21  * seasonal (se_...)
22
23 2.1 Ephemeral allocations
24
25 The ephemeral functions allocate memory that will be automatically freed 
26 once the current packet dissection completes. These functions are useful for 
27 situations where you just want a temporary buffer that should stay around for 
28 a short while. Do not use these functions if you need persistent allocations 
29 where the data is to still be available in some later packet.
30
31 2.2 Seasonal allocations
32
33 The seasonal functions allocate memory that will stay around a lot longer 
34 but will be automatically freed once the current capture is closed and 
35 Wireshark opens a new capture (either by reading a new capture file or by 
36 starting a new capture on some interface). These functions are useful for 
37 allocations with longer scope for example if you need some buffers or data to 
38 keep state between packets.
39
40 3 The API
41
42 For a detailed description of the functions please refer to the header file
43 epan/emem.h
44
45 3.1 Common memory allocation functions
46
47 .._alloc(n) : allocate a chunk of memory of size n with ep/se scope.
48 ep_new(t) : allocate a single element of type t.
49 .._alloc_array(t,n): will allocate an array of n elements of type t.
50
51 .._alloc0(n) : allocate a chunk of memory of size n and fill it with 0.
52 ep_new0(t) : allocate a single element of type t and fill it with 0.
53
54 3.2 String related functions
55
56 .._strdup(s) : equivalent to strdup(s) with ep/se scope.
57 .._strndup(s,n) : allocate a chunk of size n+1 and copy s into it.
58 .._memdup(s,n) : allocate n chunk and copy into it n bytes starting at s.
59
60 .._strdup_printf() : will calculate the size of the formatted string, allocate 
61   a chunk for it and format the string.
62 .._strdup_vprintf() : will calculate the size of the formatted string, 
63   allocate a chunk for it and format the string.
64
65 ep_strsplit(): will split a string based on a certain separator returning an 
66   array of strings.
67
68 3.3 Stack related functions
69
70 ep_stack_new() : creates an ephemeral stack.
71 ep_stack_push() : pushes an element into the stack.
72 ep_stack_pop() : pops an element from the stack.
73 ep_stack_peek() : returns the top element of the stack without popping it.
74
75 3.4 tvbuff related functions
76
77 ep_tvb_memdup(): create an ephemeral duplicate of part of the tvbuff.
78
79 3.4 String buffers
80
81 The ep_strbuf_... functions create and modify growable strings, similar to GLib's
82 GStrings.
83
84 ep_strbuf_new(s) : Creates a new strbuf, initialized to s.
85 ep_strbuf_new_label(s) : Like ep_strbuf_new, but with a max length suitable for
86   protocol tree items.
87 ep_strbuf_sized_new() : Creates a new strbuf with explicit sizes.
88 ep_strbuf_append_vprintf() : Appends an argument list to a strbuf.
89 ep_strbuf_append_printf() : Appends to a strbuf in the style of printf.
90 ep_strbuf_append() : Appends a string to a strbuf.
91 ep_strbuf_truncate() : Shortens a strbuf.