X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fbuffer-view.c;fp=src%2Fcommon%2Fbuffer-view.c;h=8ff1539919a8f7140a7a2ac25780a6fcf323e5ea;hp=0000000000000000000000000000000000000000;hb=01dc0eed91e5c7db3f12beda894cb3d9cc7a4fa1;hpb=5966417eba59c9014c1f67ae37257e7266e647b5 diff --git a/src/common/buffer-view.c b/src/common/buffer-view.c new file mode 100644 index 000000000..8ff153991 --- /dev/null +++ b/src/common/buffer-view.c @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2017 - Jérémie Galarneau + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License, version 2.1 only, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include + +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); + + if (offset > src->size) { + ERR("Attempt to create buffer view with invalid offset"); + goto end; + } + + if (len != -1 && len > (src->size - offset)) { + ERR("Attempt to create buffer view with invalid length"); + goto end; + } + + view.data = src->data + offset; + view.size = len == -1 ? (src->size - offset) : len; +end: + return view; +} + +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); + + if (offset > src->size) { + ERR("Attempt to create buffer view with invalid offset"); + goto end; + } + + if (len != -1 && len > (src->size - offset)) { + ERR("Attempt to create buffer view with invalid length"); + goto end; + } + + view.data = src->data + offset; + view.size = len == -1 ? (src->size - offset) : len; +end: + return view; +}