Move liblttng-ust to 'src/lib/'
[lttng-ust.git] / src / lib / lttng-ust / tracef.c
diff --git a/src/lib/lttng-ust/tracef.c b/src/lib/lttng-ust/tracef.c
new file mode 100644 (file)
index 0000000..3c4ce49
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * SPDX-License-Identifier: MIT
+ *
+ * Copyright (C) 2013-2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ */
+
+#define _LGPL_SOURCE
+#include <stdio.h>
+#include "common/macros.h"
+
+#define TRACEPOINT_CREATE_PROBES
+#define TRACEPOINT_DEFINE
+#include "lttng-ust-tracef-provider.h"
+
+static inline
+void __lttng_ust_vtracef(const char *fmt, va_list ap)
+       __attribute__((always_inline, format(printf, 1, 0)));
+static inline
+void __lttng_ust_vtracef(const char *fmt, va_list ap)
+{
+       char *msg;
+       const int len = vasprintf(&msg, fmt, ap);
+
+       /* len does not include the final \0 */
+       if (len < 0)
+               goto end;
+       __tracepoint_cb_lttng_ust_tracef___event(msg, len,
+               LTTNG_UST_CALLER_IP());
+       free(msg);
+end:
+       return;
+}
+
+/*
+ * FIXME: We should include <lttng/tracef.h> for the declarations here, but it
+ * fails with tracepoint magic above my paygrade.
+ */
+
+void _lttng_ust_vtracef(const char *fmt, va_list ap)
+       __attribute__((format(printf, 1, 0)));
+void _lttng_ust_vtracef(const char *fmt, va_list ap)
+{
+       __lttng_ust_vtracef(fmt, ap);
+}
+
+void _lttng_ust_tracef(const char *fmt, ...)
+       __attribute__((format(printf, 1, 2)));
+void _lttng_ust_tracef(const char *fmt, ...)
+{
+       va_list ap;
+
+       va_start(ap, fmt);
+       __lttng_ust_vtracef(fmt, ap);
+       va_end(ap);
+}
This page took 0.024038 seconds and 4 git commands to generate.