#endif
#include <lttng/handle.h>
+#include <lttng/userspace-probe.h>
/*
* Instrumentation type of tracing event.
extern int lttng_list_events(struct lttng_handle *handle,
const char *channel_name, struct lttng_event **events);
+extern struct lttng_event *lttng_event_create(void);
+
+extern void lttng_event_destroy(struct lttng_event *event);
+
/*
* Get the filter expression of a specific LTTng event.
*
extern int lttng_event_get_exclusion_name(struct lttng_event *event,
size_t index, const char **exclusion_name);
+
+/*
+ * Get the userspace probe location of a specific LTTng event.
+ * If the call is successful, then a pointer to the probe location is returned.
+ * If the event has no probe location a NULL pointer is returned. The caller
+ * does not own the returned probe location.
+ */
+extern struct lttng_userspace_probe_location *
+lttng_event_get_userspace_probe_location(struct lttng_event *event);
+
+/*
+ * Set an LTTng event's userspace probe location.
+ * If the call is successful, then the probe location is set to the event. The
+ * ownership of the probe_location is given to the event.
+ *
+ * Returns 0 on success, or a negative LTTng error code on error.
+ */
+extern int lttng_event_set_userspace_probe_location(struct lttng_event *event,
+ struct lttng_userspace_probe_location *probe_location);
+
/*
* List the available tracepoints of a specific lttng domain.
*
*/
#define _LGPL_SOURCE
-#include <lttng/event.h>
-#include <lttng/lttng-error.h>
+#include <assert.h>
#include <stddef.h>
+
+#include <common/error.h>
#include <common/sessiond-comm/sessiond-comm.h>
+#include <lttng/event-internal.h>
+#include <lttng/event.h>
+#include <lttng/lttng-error.h>
+#include <lttng/userspace-probe-internal.h>
+
+struct lttng_event *lttng_event_create(void)
+{
+ struct lttng_event *event;
+ struct lttng_event_extended *event_extended;
+
+ event = zmalloc(sizeof(*event));
+ if (!event) {
+ PERROR("Error allocating event structure");
+ goto end;
+ }
+
+ event_extended = zmalloc(sizeof(*event_extended));
+ if (!event_extended) {
+ PERROR("Error allocating event extended structure");
+ goto error;
+ }
+ event->extended.ptr = event_extended;
+end:
+ return event;
+error:
+ free(event);
+ goto end;
+}
+
+void lttng_event_destroy(struct lttng_event *event)
+{
+ struct lttng_event_extended *event_extended;
+
+ if (!event) {
+ return;
+ }
+
+ event_extended = (struct lttng_event_extended *) event->extended.ptr;
+
+ if (event_extended) {
+ if (event_extended->probe_location) {
+ lttng_userspace_probe_location_destroy(
+ event_extended->probe_location);
+ }
+ free(event_extended);
+ }
+ free(event);
+}
int lttng_event_get_filter_expression(struct lttng_event *event,
const char **filter_expression)
end:
return ret;
}
+
+struct lttng_userspace_probe_location *
+lttng_event_get_userspace_probe_location(struct lttng_event *event)
+{
+ struct lttng_userspace_probe_location *probe_location = NULL;
+ struct lttng_event_extended *event_extended;
+
+ if (!event) {
+ goto end;
+ }
+
+ event_extended = (struct lttng_event_extended *) event->extended.ptr;
+ if (!event_extended) {
+ goto end;
+ }
+ probe_location = event_extended->probe_location;
+end:
+ return probe_location;
+}
+
+int lttng_event_set_userspace_probe_location(struct lttng_event *event,
+ struct lttng_userspace_probe_location *probe_location)
+{
+ int ret = 0;
+ struct lttng_event_extended *event_extended;
+
+ if (!event || !probe_location) {
+ ret = -LTTNG_ERR_INVALID;
+ goto end;
+ }
+
+ event_extended = (struct lttng_event_extended *) event->extended.ptr;
+ assert(event_extended);
+ if (event_extended->probe_location) {
+ lttng_userspace_probe_location_destroy(
+ event_extended->probe_location);
+ }
+ event_extended->probe_location = probe_location;
+end:
+ return ret;
+}