common: add lttng_payload_view fd count accessor and buffer init
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 19 Jun 2020 22:54:58 +0000 (18:54 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Mon, 27 Jul 2020 20:31:14 +0000 (16:31 -0400)
Allow the initialization of a payload view from a subset of a dynamic
buffer (echoing the lttng_buffer_view API) and add an accessor for the
fd count property.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I647e955b625230010a8789df88f93cf19487ce58

src/common/payload-view.c
src/common/payload-view.h

index fdfef6150e4a00d98b6cba9e23c9ea8471d8c28f..f15fa844788e21682fe87c58544485158050ef28 100644 (file)
@@ -5,6 +5,7 @@
  *
  */
 
+#include <common/dynamic-array.h>
 #include <common/buffer-view.h>
 #include "payload-view.h"
 #include "payload.h"
@@ -46,6 +47,41 @@ struct lttng_payload_view lttng_payload_view_from_dynamic_buffer(
        };
 }
 
+LTTNG_HIDDEN
+struct lttng_payload_view lttng_payload_view_from_buffer_view(
+               const struct lttng_buffer_view *view, size_t offset,
+               ptrdiff_t len)
+{
+       return (struct lttng_payload_view) {
+               .buffer = lttng_buffer_view_from_view(
+                       view, offset, len)
+       };
+}
+
+LTTNG_HIDDEN
+int lttng_payload_view_get_fd_count(struct lttng_payload_view *payload_view)
+{
+       int ret;
+       size_t position;
+
+       if (!payload_view) {
+               ret = -1;
+               goto end;
+       }
+
+       ret = lttng_dynamic_array_get_count(&payload_view->_fds);
+       if (ret < 0) {
+               goto end;
+       }
+
+       position = payload_view->_iterator.p_fds_position ?
+                       *payload_view->_iterator.p_fds_position :
+                       payload_view->_iterator.fds_position;
+       ret = ret - (int) position;
+end:
+       return ret;
+}
+
 LTTNG_HIDDEN
 int lttng_payload_view_pop_fd(struct lttng_payload_view *view)
 {
index f125e8890bf9e2d207f9a9d0a7cd32c05dfb4da7..c7501bcdabaed038bea776b9d780f3a709994631 100644 (file)
@@ -87,7 +87,7 @@ struct lttng_payload_view lttng_payload_view_from_view(
  * from an existing dynamic buffer.
  *
  * @src                Source dynamic buffer to reference
- * @offset     Offset to apply to the payload's buffer
+ * @offset     Offset to apply to the dynamic buffer
  * @len                Length of the buffer contents to reference. Passing -1 will
  *             cause the payload view to reference the whole payload from the
  *             offset provided.
@@ -96,6 +96,33 @@ LTTNG_HIDDEN
 struct lttng_payload_view lttng_payload_view_from_dynamic_buffer(
                const struct lttng_dynamic_buffer *buffer, size_t offset,
                ptrdiff_t len);
+/**
+ *
+ * Return a payload view referencing a subset of a dynamic buffer.
+ *
+ * Meant as an adapter for code paths that need to create a payload view
+ * from an existing buffer view.
+ *
+ * @src                Source buffer view to reference
+ * @offset     Offset to apply to the buffer view
+ * @len                Length of the buffer contents to reference. Passing -1 will
+ *             cause the payload view to reference the whole payload from the
+ *             offset provided.
+ */
+LTTNG_HIDDEN
+struct lttng_payload_view lttng_payload_view_from_buffer_view(
+               const struct lttng_buffer_view *view, size_t offset,
+               ptrdiff_t len);
+
+/**
+ * Get the number of file descriptors left in a payload view.
+ *
+ * @payload    Payload instance
+ *
+ * Returns the number of file descriptors left on success, -1 on error.
+ */
+LTTNG_HIDDEN
+int lttng_payload_view_get_fd_count(struct lttng_payload_view *payload_view);
 
 /**
  * Pop an fd from a payload view.
This page took 0.027126 seconds and 4 git commands to generate.