|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] libxl: add support for FreeBSD uuid implementation
commit 18b102a93341cd6c29ca97bcebbd19d3ae697771
Author: Roger Pau Monne <roger.pau@xxxxxxxxxx>
AuthorDate: Fri Jun 27 16:06:28 2014 +0200
Commit: Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Wed Jul 2 15:53:12 2014 +0100
libxl: add support for FreeBSD uuid implementation
Add the FreeBSD specific uuid implementation. Since uuid_t is not
defined as an array, but as a struct on FreeBSD, use a union with a
array in order to be able to return the uuid as a bytearray.
Also, added a libxl internal compile time assert macro, that is used
to assert that the size of uuid_t is the same as the union used in
libxl.
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
Cc: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
tools/libxl/libxl_internal.h | 9 +++++++++
tools/libxl/libxl_uuid.c | 40 ++++++++++++++++++++++++++++++++--------
tools/libxl/libxl_uuid.h | 12 +++++++-----
3 files changed, 48 insertions(+), 13 deletions(-)
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 2eea557..e8f2abb 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -3184,6 +3184,15 @@ int libxl__string_parse_json(libxl__gc *gc, const
libxl__json_object *o,
int libxl__random_bytes(libxl__gc *gc, uint8_t *buf, size_t len);
+/*
+ * Compile time assertion
+ */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
+#define BUILD_BUG_ON(p) ({ _Static_assert(!(p), "!(" #p ")"); })
+#else
+#define BUILD_BUG_ON(p) ((void)sizeof(char[1 - 2 * !!(p)]))
+#endif
+
#endif
/*
diff --git a/tools/libxl/libxl_uuid.c b/tools/libxl/libxl_uuid.c
index 172b7d1..7d4a032 100644
--- a/tools/libxl/libxl_uuid.c
+++ b/tools/libxl/libxl_uuid.c
@@ -59,21 +59,35 @@ uint8_t *libxl_uuid_bytearray(libxl_uuid *uuid)
return uuid->uuid;
}
-#elif defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__NetBSD__)
int libxl_uuid_is_nil(const libxl_uuid *uuid)
{
uint32_t status;
- return uuid_is_nil((uuid_t *)uuid->uuid, &status);
+
+ return uuid_is_nil(&uuid->uuid, &status);
}
void libxl_uuid_generate(libxl_uuid *uuid)
{
uint32_t status;
- uuid_create((uuid_t *)uuid->uuid, &status);
+
+ BUILD_BUG_ON(sizeof(libxl_uuid) != sizeof(uuid_t));
+ uuid_create(&uuid->uuid, &status);
assert(status == uuid_s_ok);
}
+#ifdef __FreeBSD__
+int libxl_uuid_from_string(libxl_uuid *uuid, const char *in)
+{
+ uint32_t status;
+
+ uuid_from_string(in, &uuid->uuid, &status);
+ if (status != uuid_s_ok)
+ return -1;
+ return 0;
+}
+#else
#define LIBXL__UUID_PTRS(uuid) &uuid[0], &uuid[1], &uuid[2], &uuid[3], \
&uuid[4], &uuid[5], &uuid[6], &uuid[7], \
&uuid[8], &uuid[9], &uuid[10],&uuid[11], \
@@ -85,33 +99,43 @@ int libxl_uuid_from_string(libxl_uuid *uuid, const char *in)
return 0;
}
#undef LIBXL__UUID_PTRS
+#endif
void libxl_uuid_copy(libxl_ctx *ctx_opt, libxl_uuid *dst,
const libxl_uuid *src)
{
- memcpy(dst->uuid, src->uuid, sizeof(dst->uuid));
+ memcpy(&dst->uuid, &src->uuid, sizeof(dst->uuid));
}
void libxl_uuid_clear(libxl_uuid *uuid)
{
- memset(uuid->uuid, 0, sizeof(uuid->uuid));
+ memset(&uuid->uuid, 0, sizeof(uuid->uuid));
}
+#ifdef __FreeBSD__
+int libxl_uuid_compare(const libxl_uuid *uuid1, const libxl_uuid *uuid2)
+{
+
+ return uuid_compare(&uuid1->uuid, &uuid2->uuid, NULL);
+}
+#else
int libxl_uuid_compare(const libxl_uuid *uuid1, const libxl_uuid *uuid2)
{
return memcmp(uuid1->uuid, uuid2->uuid, sizeof(uuid1->uuid));
}
+#endif
const uint8_t *libxl_uuid_bytearray_const(const libxl_uuid *uuid)
{
- return uuid->uuid;
+
+ return uuid->uuid_raw;
}
uint8_t *libxl_uuid_bytearray(libxl_uuid *uuid)
{
- return uuid->uuid;
-}
+ return uuid->uuid_raw;
+}
#else
#error "Please update libxl_uuid.c for your OS"
diff --git a/tools/libxl/libxl_uuid.h b/tools/libxl/libxl_uuid.h
index 0c2a1e7..196b5bc 100644
--- a/tools/libxl/libxl_uuid.h
+++ b/tools/libxl/libxl_uuid.h
@@ -33,20 +33,22 @@ typedef struct {
#define LIBXL_UUID_BYTES(arg) LIBXL__UUID_BYTES(((uint8_t *)arg.uuid))
-#elif defined(__NetBSD__)
+#elif defined(__FreeBSD__) || defined(__NetBSD__)
#include <uuid.h>
+#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
-#define LIBXL_UUID_BYTES(arg) LIBXL__UUID_BYTES(arg.uuid)
-
-typedef struct {
- uint8_t uuid[16];
+typedef union {
+ uuid_t uuid;
+ uint8_t uuid_raw[16];
} libxl_uuid;
+#define LIBXL_UUID_BYTES(arg) LIBXL__UUID_BYTES(arg.uuid_raw)
+
#else
#error "Please update libxl_uuid.h for your OS"
--
generated by git-patchbot for /home/xen/git/xen.git#master
_______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |