libical often passes strings back to the caller. To make these interfaces simple, I did not want the caller to have to pass in a memory buffer, but having libical pass out newly allocated memory makes it difficult to de-allocate the memory.
The ring buffer in this scheme makes it possible for libical to pass out references to memory which the caller does not own, and be able to de-allocate the memory later. The ring allows libical to have several buffers active simultaneously, which is handy when creating string representations of components.
Definition in file icalmemory.c.
|static buffer_ring *||buffer_ring_new (void)|
|static buffer_ring *||get_buffer_ring (void)|
|static buffer_ring *||get_buffer_ring_global (void)|
|void||icalmemory_add_tmp_buffer (void *buf)|
|void||icalmemory_append_char (char **buf, char **pos, size_t *buf_size, char ch)|
|void||icalmemory_append_string (char **buf, char **pos, size_t *buf_size, const char *string)|
|void||icalmemory_free_buffer (void *buf)|
|void||icalmemory_free_ring_byval (buffer_ring *br)|
|void||icalmemory_free_tmp_buffer (void *buf)|
|void *||icalmemory_new_buffer (size_t size)|
|void *||icalmemory_resize_buffer (void *buf, size_t size)|
|char *||icalmemory_strdup (const char *s)|
|void *||icalmemory_tmp_buffer (size_t size)|
|char *||icalmemory_tmp_copy (const char *str)|
|static buffer_ring *||global_buffer_ring = 0|