#include <common/buffer-view.h>
#include <common/dynamic-buffer.h>
#include <common/error.h>
-#include <assert.h>
-LTTNG_HIDDEN
struct lttng_buffer_view lttng_buffer_view_init(
const char *src, size_t offset, ptrdiff_t len)
{
return view;
}
-LTTNG_HIDDEN
+bool lttng_buffer_view_is_valid(const struct lttng_buffer_view *view)
+{
+ return view && view->data && view->size > 0;
+}
+
struct lttng_buffer_view lttng_buffer_view_from_view(
const struct lttng_buffer_view *src, size_t offset,
ptrdiff_t len)
{
struct lttng_buffer_view view = { .data = NULL, .size = 0 };
- assert(src);
+ LTTNG_ASSERT(src);
if (offset > src->size) {
- ERR("Attempt to create buffer view with invalid offset");
+ ERR("Attempt to create buffer view from another view with invalid offset (offset > source size): source size = %zu, offset in source = %zu, length = %zd",
+ src->size, offset, len);
goto end;
}
if (len != -1 && len > (src->size - offset)) {
- ERR("Attempt to create buffer view with invalid length");
+ ERR("Attempt to create buffer view from another view with invalid length (length > space left after offset in source): source size = %zu, offset in source = %zu, length = %zd",
+ src->size, offset, len);
goto end;
}
return view;
}
-LTTNG_HIDDEN
struct lttng_buffer_view lttng_buffer_view_from_dynamic_buffer(
const struct lttng_dynamic_buffer *src, size_t offset,
ptrdiff_t len)
{
struct lttng_buffer_view view = { .data = NULL, .size = 0 };
- assert(src);
+ LTTNG_ASSERT(src);
if (offset > src->size) {
- ERR("Attempt to create buffer view with invalid offset");
+ ERR("Attempt to create buffer view from a dynamic buffer with invalid offset (offset > source size): source size = %zu, offset in source = %zu, length = %zd",
+ src->size, offset, len);
goto end;
}
if (len != -1 && len > (src->size - offset)) {
- ERR("Attempt to create buffer view with invalid length");
+ ERR("Attempt to create buffer view from a dynamic buffer with invalid length (length > space left after offset in source): source size = %zu, offset in source = %zu, length = %zd",
+ src->size, offset, len);
goto end;
}
return view;
}
-LTTNG_HIDDEN
bool lttng_buffer_view_contains_string(const struct lttng_buffer_view *buf,
const char *str,
size_t len_with_null_terminator)