Create libuuid/libc uuid wrapper
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 21 Feb 2012 14:56:27 +0000 (09:56 -0500)
committerChristian Babeux <christian.babeux@efficios.com>
Tue, 27 Nov 2012 21:09:35 +0000 (16:09 -0500)
commit 19d8b1b3cecac9a52cf8e0e381854703c141ec5e upstream.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
configure.ac
include/lttng/ust-events.h
liblttng-ust/Makefile.am
liblttng-ust/clock.h
liblttng-ust/ltt-events.c
liblttng-ust/ltt-ring-buffer-client.h
liblttng-ust/ltt-ring-buffer-metadata-client.h
liblttng-ust/uuid.h [new file with mode: 0644]

index de1c0c5fd18c1a9e5236641b596c4c651952cb2a..511da2e95c8b672efb593824cd684cb139030664 100644 (file)
@@ -80,18 +80,22 @@ AC_CHECK_LIB([pthread], [pthread_create])
 AC_CHECK_LIB([uuid], [uuid_generate],
 [
        AC_DEFINE_UNQUOTED([LTTNG_UST_HAVE_LIBUUID], 1, [Has libuuid support.])
+       have_libuuid=yes
 ],
 [
        # libuuid not found, check for uuid_create in libc.
        AC_CHECK_LIB([c], [uuid_create],
        [
                AC_DEFINE_UNQUOTED([LTTNG_UST_HAVE_LIBC_UUID], 1, [Has libc uuid support.])
+               have_libc_uuid=yes
        ],
        [
                AC_MSG_ERROR([Cannot find libuuid uuid_generate nor libc uuid_create. Use [LDFLAGS]=-Ldir to specify its location.])
        ])
 ]
 )
+AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBUUID], [test "x$have_libuuid" = "xyes"])
+AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBC_UUID], [test "x$have_libc_uuid" = "xyes"])
 
 # Checks for header files.
 #AC_CHECK_HEADERS([fcntl.h stdint.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
index 251c0fb655f1167e6899269a344ac82eaddda686..1a548f1a2f04a2d7e87aca1632b1f7efbc774ae5 100644 (file)
 
 #include <urcu/list.h>
 #include <urcu/hlist.h>
-#include <uuid/uuid.h>
 #include <stdint.h>
 #include <lttng/ust-abi.h>
 #include <lttng/ust-tracer.h>
 #include <lttng/ust-endian.h>
 #include <float.h>
 
+#define LTTNG_UST_UUID_LEN             16
+
 struct ltt_channel;
 struct ltt_session;
 struct lttng_ust_lib_ring_buffer_ctx;
@@ -355,7 +356,7 @@ struct ltt_channel {
        /* Channel ID, available for consumer too */
        unsigned int id;
        /* Copy of session UUID for consumer (availability through shm) */
-       uuid_t uuid;                    /* Trace session unique ID */
+       unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */
 };
 
 struct ltt_session {
@@ -368,7 +369,7 @@ struct ltt_session {
        struct cds_list_head wildcards; /* Wildcard list head */
        struct cds_list_head list;      /* Session list */
        unsigned int free_chan_id;      /* Next chan ID to allocate */
-       uuid_t uuid;                    /* Trace session unique ID */
+       unsigned char uuid[LTTNG_UST_UUID_LEN]; /* Trace session unique ID */
        unsigned int metadata_dumped:1;
 };
 
index 04b9ff3f5773344136423a0ad7476d988d7973e9..16070d592343bcef960156bd1c3c04958dcdc5d8 100644 (file)
@@ -33,7 +33,8 @@ liblttng_ust_runtime_la_SOURCES = \
        compat.h \
        wait.h \
        jhash.h \
-       error.h
+       error.h \
+       uuid.h
 
 liblttng_ust_support_la_SOURCES = \
        ltt-tracer.h \
@@ -55,10 +56,16 @@ liblttng_ust_support_la_LIBADD = \
 liblttng_ust_la_LIBADD = \
        -lpthread \
        -lrt \
-       -luuid \
        -llttng-ust-tracepoint \
        $(top_builddir)/snprintf/libustsnprintf.la \
        $(top_builddir)/liblttng-ust-comm/liblttng-ust-comm.la \
        liblttng-ust-runtime.la liblttng-ust-support.la
 
+if LTTNG_UST_BUILD_WITH_LIBUUID
+liblttng_ust_la_LIBADD += -luuid
+endif
+if LTTNG_UST_BUILD_WITH_LIBC_UUID
+liblttng_ust_la_LIBADD += -lc
+endif
+
 liblttng_ust_la_CFLAGS = -DUST_COMPONENT="liblttng_ust" -fno-strict-aliasing
index 82a7b45cd5294a3f35c63e172ea8105d0e5c2e0d..b4d17e785e164e3ae9a59c89fd7a897853754bc8 100644 (file)
 #include <stdint.h>
 #include <stddef.h>
 #include <stdio.h>
-
-/*
- * Includes final \0.
- */
-#define CLOCK_UUID_LEN         37
+#include "uuid.h"
 
 /* TRACE CLOCK */
 
@@ -71,12 +67,12 @@ const int trace_clock_uuid(char *uuid)
        if (!fp) {
                return -ENOENT;
        }
-       len = fread(uuid, 1, CLOCK_UUID_LEN - 1, fp);
-       if (len < CLOCK_UUID_LEN - 1) {
+       len = fread(uuid, 1, LTTNG_UST_UUID_STR_LEN - 1, fp);
+       if (len < LTTNG_UST_UUID_STR_LEN - 1) {
                ret = -EINVAL;
                goto end;
        }
-       uuid[CLOCK_UUID_LEN - 1] = '\0';
+       uuid[LTTNG_UST_UUID_STR_LEN - 1] = '\0';
 end:
        fclose(fp);
        return ret;
index 5a624c492c4b3a4fae98c13857ae00be06bbb17b..627acfecc47d2101114e3e991659f75ed9657107 100644 (file)
@@ -25,7 +25,6 @@
 #include <urcu/list.h>
 #include <urcu/hlist.h>
 #include <pthread.h>
-#include <uuid/uuid.h>
 #include <errno.h>
 #include <sys/shm.h>
 #include <sys/ipc.h>
@@ -48,6 +47,7 @@
 #include <helper.h>
 #include "error.h"
 #include "compat.h"
+#include "uuid.h"
 
 #include "tracepoint-internal.h"
 #include "ltt-tracer.h"
@@ -308,6 +308,7 @@ void synchronize_trace(void)
 struct ltt_session *ltt_session_create(void)
 {
        struct ltt_session *session;
+       int ret;
 
        session = zmalloc(sizeof(struct ltt_session));
        if (!session)
@@ -315,7 +316,10 @@ struct ltt_session *ltt_session_create(void)
        CDS_INIT_LIST_HEAD(&session->chan);
        CDS_INIT_LIST_HEAD(&session->events);
        CDS_INIT_LIST_HEAD(&session->wildcards);
-       uuid_generate(session->uuid);
+       ret = lttng_ust_uuid_generate(session->uuid);
+       if (ret != 0) {
+               session->uuid[0] = '\0';
+       }
        cds_list_add(&session->list, &sessions);
        return session;
 }
@@ -1100,7 +1104,8 @@ static
 int _ltt_session_metadata_statedump(struct ltt_session *session)
 {
        unsigned char *uuid_c = session->uuid;
-       char uuid_s[37], clock_uuid_s[CLOCK_UUID_LEN];
+       char uuid_s[LTTNG_UST_UUID_STR_LEN],
+               clock_uuid_s[LTTNG_UST_UUID_STR_LEN];
        struct ltt_channel *chan;
        struct ltt_event *event;
        int ret = 0;
index d64af55503994038cce8f0ffc510996bc4d483e8..7b6827ffa1edefca5413e6287a17e2f8375e55f2 100644 (file)
@@ -24,6 +24,7 @@
 #include <lttng/ust-events.h>
 #include "lttng/bitfield.h"
 #include "clock.h"
+#include "uuid.h"
 #include "ltt-tracer.h"
 #include "../libringbuffer/frontend_types.h"
 
@@ -43,7 +44,7 @@ struct packet_header {
                                         * Trace magic number.
                                         * contains endianness information.
                                         */
-       uint8_t uuid[16];
+       uint8_t uuid[LTTNG_UST_UUID_LEN];
        uint32_t stream_id;
 
        struct {
index 1e18df9d33a14fa4dd3969faf5bd17f4d9d0477b..acc56fddb890d172b8e2386977df7ce56f501adb 100644 (file)
@@ -28,7 +28,7 @@
 
 struct metadata_packet_header {
        uint32_t magic;                 /* 0x75D11D57 */
-       uint8_t  uuid[16];              /* Unique Universal Identifier */
+       uint8_t  uuid[LTTNG_UST_UUID_LEN]; /* Unique Universal Identifier */
        uint32_t checksum;              /* 0 if unused */
        uint32_t content_size;          /* in bits */
        uint32_t packet_size;           /* in bits */
diff --git a/liblttng-ust/uuid.h b/liblttng-ust/uuid.h
new file mode 100644 (file)
index 0000000..1027acb
--- /dev/null
@@ -0,0 +1,54 @@
+#ifndef _LTTNG_UST_UUID_H
+#define _LTTNG_UST_UUID_H
+
+/*
+ * Copyright (C) 2011   Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
+ * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ *
+ * Permission is hereby granted to use or copy this program
+ * for any purpose,  provided the above notices are retained on all copies.
+ * Permission to modify the code and to distribute modified code is granted,
+ * provided the above notices are retained, and a notice that the code was
+ * modified is included with the above copyright notice.
+ */
+
+#include <config.h>
+#include <lttng/ust-events.h> /* For LTTNG_UST_UUID_LEN */
+/*
+ * Includes final \0.
+ */
+#define LTTNG_UST_UUID_STR_LEN         37
+
+#include <uuid/uuid.h>
+
+#ifdef LTTNG_UST_HAVE_LIBUUID
+static inline
+int lttng_ust_uuid_generate(unsigned char *uuid_out)
+{
+       uuid_generate(uuid_out);
+       return 0;
+}
+
+#elif defined(LTTNG_UST_HAVE_LIBC_UUID)
+#include <uuid.h>
+#include <stdint.h>
+
+static inline
+int lttng_ust_uuid_generate(unsigned char *uuid_out)
+{
+       uint32_t status;
+
+       uuid_create(uuid_out, &status);
+       if (status == uuid_s_ok)
+               return 0;
+       else
+               return -1;
+}
+
+#else
+#error "LTTng-UST needs to have a UUID generator configured."
+#endif
+
+#endif /* _LTTNG_UST_UUID_H */
This page took 0.030257 seconds and 4 git commands to generate.