#include <common/buffer-view.h>
#include <common/dynamic-array.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
struct lttng_payload;
struct fd_handle;
struct lttng_payload_view {
struct lttng_buffer_view buffer;
/* private */
- const struct lttng_dynamic_pointer_array _fd_handles;
+
+ /*
+ * Avoid a -Wreturn-type-c-linkage warning with clang.
+ * gcc is more permissive with regards to this warning, but
+ * clang is right that a structure containing a _const_ structure is not
+ * a trivial type in the eyes of the C++ standard, theoritically affecting its
+ * compatibility with C from an ABI standpoint:
+ * A trivial class is a class that is trivially copyable and has one or
+ * more default constructors, all of which are either trivial or deleted and
+ * at least one of which is not deleted.
+ *
+ * A const member implicitly deletes lttng_payload_view's constructor,
+ * making it non-trivial. This is not a problem for the moment as we are
+ * transitioning all code to C++11.
+ */
+#if !defined(__cplusplus)
+ const
+#endif
+ struct lttng_dynamic_pointer_array _fd_handles;
+
struct {
size_t *p_fd_handles_position;
size_t fd_handles_position;
} _iterator;
};
+/**
+ * Checks if a payload view's buffer is safe to access.
+ *
+ * After calling the payload view creation functions, callers should verify
+ * if the resquested length (if any is explicitly provided) could be mapped
+ * to a new view.
+ *
+ * @view Payload to validate
+ */
+bool lttng_payload_view_is_valid(const struct lttng_payload_view *view);
+
/**
* Return a payload view referencing a subset of a payload.
*
* cause the view to reference the whole payload from the
* offset provided.
*/
-LTTNG_HIDDEN
struct lttng_payload_view lttng_payload_view_from_payload(
const struct lttng_payload *payload, size_t offset,
ptrdiff_t len);
* cause the payload view to reference the whole payload view's
* buffer view from the offset provided.
*/
-LTTNG_HIDDEN
struct lttng_payload_view lttng_payload_view_from_view(
struct lttng_payload_view *view, size_t offset,
ptrdiff_t len);
* cause the payload view to reference the whole payload from the
* offset provided.
*/
-LTTNG_HIDDEN
struct lttng_payload_view lttng_payload_view_from_dynamic_buffer(
const struct lttng_dynamic_buffer *buffer, size_t offset,
ptrdiff_t len);
* 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);
* Note that a payload view never assumes the ownership of the memory it
* references.
*/
-LTTNG_HIDDEN
struct lttng_payload_view lttng_payload_view_init_from_buffer(
const char *src, size_t offset, ptrdiff_t len);
*
* Returns the number of file descriptor handles left on success, -1 on error.
*/
-LTTNG_HIDDEN
int lttng_payload_view_get_fd_handle_count(
- struct lttng_payload_view *payload_view);
+ const struct lttng_payload_view *payload_view);
/**
* Pop an fd handle from a payload view.
*
* Returns an fd_handle on success, -1 on error.
*/
-LTTNG_HIDDEN
struct fd_handle *lttng_payload_view_pop_fd_handle(
struct lttng_payload_view *payload_view);
+#ifdef __cplusplus
+}
+#endif
+
#endif /* LTTNG_PAYLOAD_VIEW_H */