uprobe: transmit binary file descritptor through lttng_payload
[lttng-tools.git] / src / common / payload-view.c
index fdfef6150e4a00d98b6cba9e23c9ea8471d8c28f..8c99c56efa5d9d122c8fb6571e887cf3c74469cd 100644 (file)
@@ -5,6 +5,7 @@
  *
  */
 
+#include <common/dynamic-array.h>
 #include <common/buffer-view.h>
 #include "payload-view.h"
 #include "payload.h"
@@ -29,9 +30,10 @@ struct lttng_payload_view lttng_payload_view_from_view(
 {
        return (struct lttng_payload_view) {
                .buffer = lttng_buffer_view_from_view(
-                       &view->buffer, offset, len),
+                               &view->buffer, offset, len),
                ._fds = view->_fds,
-               ._iterator.p_fds_position = &view->_iterator.fds_position,
+               ._iterator.p_fds_position = view->_iterator.p_fds_position ?:
+                               &view->_iterator.fds_position,
        };
 }
 
@@ -46,6 +48,51 @@ 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
+struct lttng_payload_view lttng_payload_view_init_from_buffer(
+       const char *src, size_t offset, ptrdiff_t len)
+{
+       return (struct lttng_payload_view) {
+               .buffer = lttng_buffer_view_init(
+                       src, 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)
 {
This page took 0.024012 seconds and 4 git commands to generate.