lttng-ctl: add accessors of userspace probe location to lttng_event
[lttng-tools.git] / src / lib / lttng-ctl / event.c
index 541e37113b53637ebd64c336b8accc29743769c8..691b4f95cd21aa77d22a9da124f0ee2de9a18379 100644 (file)
  */
 
 #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)
@@ -118,3 +167,44 @@ int lttng_event_get_exclusion_name(struct lttng_event *event,
 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;
+}
This page took 0.024242 seconds and 5 git commands to generate.