efd63fb9c3bb27638c32a571274f8e28416949b9
2 * Copyright (C) 2017 - Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU Lesser General Public License, version 2.1 only,
6 * as published by the Free Software Foundation.
8 * This program is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software Foundation,
15 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 #ifndef LTTNG_DYNAMIC_BUFFER_H
19 #define LTTNG_DYNAMIC_BUFFER_H
23 #include <common/macros.h>
25 struct lttng_buffer_view
;
27 struct lttng_dynamic_buffer
{
29 /* size is the buffer's currently used capacity. */
32 * capacity shall not be accessed by users directly, it is meant for
39 * Initialize a dynamic buffer. This performs no allocation and is meant
40 * to be used instead of memset or explicit initialization of the buffer.
43 void lttng_dynamic_buffer_init(struct lttng_dynamic_buffer
*buffer
);
46 * Append the content of a raw memory buffer to the end of a dynamic buffer
47 * (after its current "size"). The dynamic buffer's size is increased by
48 * "len", and its capacity is adjusted automatically.
51 int lttng_dynamic_buffer_append(struct lttng_dynamic_buffer
*buffer
,
52 const void *buf
, size_t len
);
55 * Performs the same action as lttng_dynamic_buffer_append(), but using another
56 * dynamic buffer as the source buffer. The source buffer's size is used in lieu
60 int lttng_dynamic_buffer_append_buffer(struct lttng_dynamic_buffer
*dst_buffer
,
61 struct lttng_dynamic_buffer
*src_buffer
);
64 * Performs the same action as lttng_dynamic_buffer_append(), but using a
65 * buffer view as the source buffer. The source buffer's size is used in lieu
69 int lttng_dynamic_buffer_append_view(struct lttng_dynamic_buffer
*buffer
,
70 const struct lttng_buffer_view
*view
);
73 * Set the buffer's size to new_size. The capacity of the buffer will
74 * be expanded (if necessary) to accomodate new_size. Areas acquired by
75 * a size increase will be zeroed.
77 * Be careful to expand the buffer's size _before_ calling out external
78 * APIs (e.g. read(3)) which may populate the buffer as setting the size
79 * after will zero-out the result of the operation.
81 * Shrinking a buffer does not zero the old content. If the buffer may contain
82 * sensititve information, it must be cleared manually _before_ changing the
85 * NOTE: It is striclty _invalid_ to access memory after _size_, regardless
86 * of prior calls to set_capacity().
89 int lttng_dynamic_buffer_set_size(struct lttng_dynamic_buffer
*buffer
,
93 * Set the buffer's capacity to accomodate the new_capacity, allocating memory
94 * as necessary. The buffer's content is preserved. Setting a buffer's capacity
95 * is meant as a _hint_ to the underlying buffer and is only optimization; no
96 * guarantee is offered that subsequent calls to append or set_size will succeed.
98 * If the current size > new_capacity, the operation will fail.
101 int lttng_dynamic_buffer_set_capacity(struct lttng_dynamic_buffer
*buffer
,
102 size_t new_capacity
);
104 /* Release any memory used by the dynamic buffer. */
106 void lttng_dynamic_buffer_reset(struct lttng_dynamic_buffer
*buffer
);
108 /* Get the space left in the buffer before a new resize is needed. */
110 size_t lttng_dynamic_buffer_get_capacity_left(
111 struct lttng_dynamic_buffer
*buffer
);
113 #endif /* LTTNG_DYNAMIC_BUFFER_H */
This page took 0.094956 seconds and 4 git commands to generate.