Hi, in src/warc.c three methods are provided to generate uuids: libuuid, uuid functions from libc, and a fallback method. At least OpenBSD, FreeBSD and NetBSD provide those uuid functions in their libc.
http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man3/uuid.3 This diff fixes the detection and use of those functions. It does not change the fact that libuuid is always preferred if present and not explicitely disabled. Regards,
>From 4e6196c11882ab2c86784af92bc7c977cb0948d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Courr=C3=A8ges-Anglas?= <[email protected]> Date: Tue, 16 Dec 2014 00:01:48 +0100 Subject: [PATCH] Fix use of uuid libc functions * Always attempt to detect uuid.h and uuid_create(). * Split libuuid and uuid.h implementations of warc_uuid_str(), since those APIs vary significantly. * Correctly use the uuid.h functions --- configure.ac | 13 ++++++------- src/warc.c | 20 ++++++++++++++------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/configure.ac b/configure.ac index 7b4e2ad..ff016ce 100644 --- a/configure.ac +++ b/configure.ac @@ -652,13 +652,6 @@ AS_IF([test "X$with_libuuid" != "Xno"],[ CFLAGS="$UUID_CFLAGS $CFLAGS" AC_DEFINE([HAVE_LIBUUID], [1], [Define if using libuuid.]) ], [ - AC_CHECK_HEADER(uuid.h, - AC_CHECK_FUNC(uuid, uuid_create, - [AC_DEFINE([HAVE_UUID_CREATE], 1, - [Define if uuid_create is available.]) - ]) - ) - AC_CHECK_HEADER(uuid/uuid.h, AC_CHECK_LIB(uuid, uuid_generate, [LIBS="${LIBS} -luuid" @@ -669,6 +662,12 @@ AS_IF([test "X$with_libuuid" != "Xno"],[ ]) ]) +AC_CHECK_HEADER(uuid.h, + AC_CHECK_FUNC(uuid_create, + [AC_DEFINE([HAVE_UUID_CREATE], 1, [Define if uuid_create is available.])] + ) +) + dnl dnl Check for PCRE dnl diff --git a/src/warc.c b/src/warc.c index 5bdda1b..4959836 100644 --- a/src/warc.c +++ b/src/warc.c @@ -600,25 +600,33 @@ warc_timestamp (char *timestamp, size_t timestamp_size) return timestamp; } -#if HAVE_LIBUUID || HAVE_UUID_CREATE /* Fills urn_str with a UUID in the format required for the WARC-Record-Id header. The string will be 47 characters long. */ +#if HAVE_LIBUUID void warc_uuid_str (char *urn_str) { char uuid_str[37]; + uuid_t record_id; + + uuid_generate (record_id); + uuid_unparse (record_id, uuid_str); + sprintf (urn_str, "<urn:uuid:%s>", uuid_str); +} +#elif HAVE_UUID_CREATE +void +warc_uuid_str (char *urn_str) +{ + char *uuid_str; uuid_t record_id; -#if HAVE_UUID_CREATE + uuid_create (&record_id, NULL); uuid_to_string (&record_id, &uuid_str, NULL); -#else - uuid_generate (record_id); - uuid_unparse (record_id, uuid_str); -#endif sprintf (urn_str, "<urn:uuid:%s>", uuid_str); + xfree (uuid_str); } #else /* Fills urn_str with a UUID based on random numbers in the format -- 2.2.0
-- jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE
