aboutsummaryrefslogtreecommitdiffstats
path: root/tools/blktap2
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-06-24 14:03:20 +0100
committerKeir Fraser <keir.fraser@citrix.com>2009-06-24 14:03:20 +0100
commita61c4df7f669496dc21f26919f272b934048da6d (patch)
tree45a69b4f0a5536674c8bb92b3611da1e890b659c /tools/blktap2
parented072758a72fe04de1afe547c15aabc5f4612f2d (diff)
downloadxen-a61c4df7f669496dc21f26919f272b934048da6d.tar.gz
xen-a61c4df7f669496dc21f26919f272b934048da6d.tar.bz2
xen-a61c4df7f669496dc21f26919f272b934048da6d.zip
blktap2: Further netbsd build fixes.
Signed-off-by: Christoph Egger <Christoph.Egger@amd.com> Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'tools/blktap2')
-rw-r--r--tools/blktap2/drivers/block-vhd.c2
-rw-r--r--tools/blktap2/include/blk_uuid.h (renamed from tools/blktap2/include/uuid.h)89
-rw-r--r--tools/blktap2/include/libvhd-journal.h2
-rw-r--r--tools/blktap2/include/libvhd.h4
-rw-r--r--tools/blktap2/include/vhd.h5
-rw-r--r--tools/blktap2/vhd/lib/libvhd-journal.c2
-rw-r--r--tools/blktap2/vhd/lib/libvhd.c48
-rw-r--r--tools/blktap2/vhd/lib/vhd-util-check.c4
-rw-r--r--tools/blktap2/vhd/lib/vhd-util-read.c4
9 files changed, 117 insertions, 43 deletions
diff --git a/tools/blktap2/drivers/block-vhd.c b/tools/blktap2/drivers/block-vhd.c
index 2183e287a5..83db6e38ba 100644
--- a/tools/blktap2/drivers/block-vhd.c
+++ b/tools/blktap2/drivers/block-vhd.c
@@ -806,7 +806,7 @@ vhd_validate_parent(td_driver_t *child_driver,
}
*/
- if (uuid_compare(child->vhd.header.prt_uuid, parent->vhd.footer.uuid)) {
+ if (blk_uuid_compare(&child->vhd.header.prt_uuid, &parent->vhd.footer.uuid)) {
DPRINTF("ERROR: %s: %s, %s: parent uuid has changed since "
"snapshot. Child image no longer valid.\n",
__func__, child->vhd.file, parent->vhd.file);
diff --git a/tools/blktap2/include/uuid.h b/tools/blktap2/include/blk_uuid.h
index e80832474c..82922619e0 100644
--- a/tools/blktap2/include/uuid.h
+++ b/tools/blktap2/include/blk_uuid.h
@@ -31,42 +31,95 @@
#include <uuid/uuid.h>
-#else
+typedef struct {
+ uuid_t uuid;
+} blk_uuid_t;
+
+static inline int blk_uuid_is_nil(blk_uuid_t *uuid)
+{
+ return uuid_is_null(uuid->uuid);
+}
+
+static inline void blk_uuid_generate(blk_uuid_t *uuid)
+{
+ uuid_generate(uuid->uuid);
+}
+
+static inline void blk_uuid_to_string(blk_uuid_t *uuid, char *out)
+{
+ uuid_unparse(uuid->uuid, out);
+}
+
+static inline void blk_uuid_from_string(blk_uuid_t *uuid, const char *in)
+{
+ uuid_parse(in, uuid->uuid);
+}
+
+static inline void blk_uuid_copy(blk_uuid_t *dst, blk_uuid_t *src)
+{
+ uuid_copy(dst->uuid, src->uuid);
+}
+
+static inline void blk_uuid_clear(blk_uuid_t *uuid)
+{
+ uuid_clear(uuid->uuid);
+}
+
+static inline int blk_uuid_compare(blk_uuid_t *uuid1, blk_uuid_t *uuid2)
+{
+ return uuid_compare(uuid1->uuid, uuid2->uuid);
+}
+
+#elif defined(__NetBSD__)
-#include <inttypes.h>
-#include <string.h>
#include <uuid.h>
+#include <string.h>
+
+typedef uuid_t blk_uuid_t;
-static inline int uuid_is_null(uuid_t uuid)
+static inline int blk_uuid_is_nil(blk_uuid_t *uuid)
{
- uint32_t status;
- return uuid_is_nil(&uuid, &status);
+ uint32_t status;
+ return uuid_is_nil((uuid_t *)uuid, &status);
}
-static inline void uuid_generate(uuid_t uuid)
+static inline void blk_uuid_generate(blk_uuid_t *uuid)
{
- uint32_t status;
- uuid_create(&uuid, &status);
+ uint32_t status;
+ uuid_create((uuid_t *)uuid, &status);
}
-static inline void uuid_unparse(uuid_t uuid, char *out)
+static inline void blk_uuid_to_string(blk_uuid_t *uuid, char *out)
{
- uint32_t status;
- uuid_to_string(&uuid, (char **)&out, &status);
+ uint32_t status;
+ uuid_to_string((uuid_t *)uuid, &out, &status);
}
-static inline void uuid_copy(uuid_t dst, uuid_t src)
+static inline void blk_uuid_from_string(blk_uuid_t *uuid, const char *in)
{
- memcpy(dst, src, sizeof(dst));
+ uint32_t status;
+ uuid_from_string(in, (uuid_t *)uuid, &status);
}
-static inline void uuid_clear(uuid_t uu)
+static inline void blk_uuid_copy(blk_uuid_t *dst, blk_uuid_t *src)
{
- memset(uu, 0, sizeof(uu));
+ memcpy((uuid_t *)dst, (uuid_t *)src, sizeof(uuid_t));
}
-#define uuid_compare(x,y) \
- ({ uint32_t status; uuid_compare(&(x),&(y),&status); })
+static inline void blk_uuid_clear(blk_uuid_t *uuid)
+{
+ memset((uuid_t *)uuid, 0, sizeof(uuid_t));
+}
+
+static inline int blk_uuid_compare(blk_uuid_t *uuid1, blk_uuid_t *uuid2)
+{
+ uint32_t status;
+ return uuid_compare((uuid_t *)uuid1, (uuid_t *)uuid2, &status);
+}
+
+#else
+
+#error "Please update blk_uuid.h for your OS"
#endif
diff --git a/tools/blktap2/include/libvhd-journal.h b/tools/blktap2/include/libvhd-journal.h
index 2f32ff02ca..75852523c9 100644
--- a/tools/blktap2/include/libvhd-journal.h
+++ b/tools/blktap2/include/libvhd-journal.h
@@ -39,7 +39,7 @@
typedef struct vhd_journal_header {
char cookie[8];
- uuid_t uuid;
+ blk_uuid_t uuid;
uint64_t vhd_footer_offset;
uint32_t journal_data_entries;
uint32_t journal_metadata_entries;
diff --git a/tools/blktap2/include/libvhd.h b/tools/blktap2/include/libvhd.h
index 6d5979b1d7..71082ad843 100644
--- a/tools/blktap2/include/libvhd.h
+++ b/tools/blktap2/include/libvhd.h
@@ -36,7 +36,7 @@
#include <sys/bswap.h>
#endif
-#include "uuid.h"
+#include "blk_uuid.h"
#include "vhd.h"
#ifndef O_LARGEFILE
@@ -216,7 +216,7 @@ vhd_parent_locator_size(vhd_parent_locator_t *loc)
static inline int
vhd_parent_raw(vhd_context_t *ctx)
{
- return uuid_is_null(ctx->header.prt_uuid);
+ return blk_uuid_is_nil(&ctx->header.prt_uuid);
}
void libvhd_set_log_level(int);
diff --git a/tools/blktap2/include/vhd.h b/tools/blktap2/include/vhd.h
index 25b8b29e01..a31aadf491 100644
--- a/tools/blktap2/include/vhd.h
+++ b/tools/blktap2/include/vhd.h
@@ -28,7 +28,6 @@
#define __VHD_H__
#include <inttypes.h>
-#include "uuid.h"
typedef uint32_t u32;
typedef uint64_t u64;
@@ -60,7 +59,7 @@ struct hd_ftr {
u32 geometry; /* Disk geometry */
u32 type; /* Disk type */
u32 checksum; /* 1's comp sum of this struct. */
- uuid_t uuid; /* Unique disk ID, used for naming parents */
+ blk_uuid_t uuid; /* Unique disk ID, used for naming parents */
char saved; /* one-bit -- is this disk/VM in a saved state? */
char hidden; /* tapdisk-specific field: is this vdi hidden? */
char reserved[426]; /* padding */
@@ -148,7 +147,7 @@ struct dd_hdr {
u32 max_bat_size; /* Maximum number of entries in the BAT */
u32 block_size; /* Block size in bytes. Must be power of 2. */
u32 checksum; /* Header checksum. 1's comp of all fields. */
- uuid_t prt_uuid; /* ID of the parent disk. */
+ blk_uuid_t prt_uuid; /* ID of the parent disk. */
u32 prt_ts; /* Modification time of the parent disk */
u32 res1; /* Reserved. */
char prt_name[512]; /* Parent unicode name. */
diff --git a/tools/blktap2/vhd/lib/libvhd-journal.c b/tools/blktap2/vhd/lib/libvhd-journal.c
index 4112c9d6af..24383ff62b 100644
--- a/tools/blktap2/vhd/lib/libvhd-journal.c
+++ b/tools/blktap2/vhd/lib/libvhd-journal.c
@@ -237,7 +237,7 @@ vhd_journal_add_journal_header(vhd_journal_t *j)
if (err)
return err;
- uuid_copy(j->header.uuid, vhd->footer.uuid);
+ blk_uuid_copy(&j->header.uuid, &vhd->footer.uuid);
memcpy(j->header.cookie,
VHD_JOURNAL_HEADER_COOKIE, sizeof(j->header.cookie));
j->header.vhd_footer_offset = off - sizeof(vhd_footer_t);
diff --git a/tools/blktap2/vhd/lib/libvhd.c b/tools/blktap2/vhd/lib/libvhd.c
index add9365f42..03bee720c5 100644
--- a/tools/blktap2/vhd/lib/libvhd.c
+++ b/tools/blktap2/vhd/lib/libvhd.c
@@ -1308,7 +1308,8 @@ vhd_macx_encode_location(char *name, char **out, int *outlen)
iconv_t cd;
int len, err;
size_t ibl, obl;
- char *uri, *urip, *uri_utf8, *uri_utf8p, *ret;
+ char *uri, *uri_utf8, *uri_utf8p, *ret;
+ const char *urip;
err = 0;
ret = NULL;
@@ -1319,7 +1320,7 @@ vhd_macx_encode_location(char *name, char **out, int *outlen)
ibl = len;
obl = len;
- uri = urip = malloc(ibl + 1);
+ urip = uri = malloc(ibl + 1);
uri_utf8 = uri_utf8p = malloc(obl);
if (!uri || !uri_utf8)
@@ -1333,7 +1334,11 @@ vhd_macx_encode_location(char *name, char **out, int *outlen)
snprintf(uri, ibl+1, "file://%s", name);
- if (iconv(cd, &urip, &ibl, &uri_utf8p, &obl) == (size_t)-1 ||
+ if (iconv(cd,
+#if defined(__linux__) || (__Linux__)
+ (char **)
+#endif
+ &urip, &ibl, &uri_utf8p, &obl) == (size_t)-1 ||
ibl || obl) {
err = (errno ? -errno : -EIO);
goto out;
@@ -1364,7 +1369,8 @@ vhd_w2u_encode_location(char *name, char **out, int *outlen)
iconv_t cd;
int len, err;
size_t ibl, obl;
- char *uri, *urip, *uri_utf16, *uri_utf16p, *tmp, *ret;
+ char *uri, *uri_utf16, *uri_utf16p, *tmp, *ret;
+ const char *urip;
err = 0;
ret = NULL;
@@ -1418,7 +1424,11 @@ vhd_w2u_encode_location(char *name, char **out, int *outlen)
goto out;
}
- if (iconv(cd, &urip, &ibl, &uri_utf16p, &obl) == (size_t)-1 ||
+ if (iconv(cd,
+#if defined(__linux__) || (__Linux__)
+ (char **)
+#endif
+ &urip, &ibl, &uri_utf16p, &obl) == (size_t)-1 ||
ibl || obl) {
err = (errno ? -errno : -EIO);
goto out;
@@ -1459,7 +1469,11 @@ vhd_macx_decode_location(const char *in, char *out, int len)
if (cd == (iconv_t)-1)
return NULL;
- if (iconv(cd, (char **)&in, &ibl, &out, &obl) == (size_t)-1 || ibl)
+ if (iconv(cd,
+#if defined(__linux__) || defined(__Linux__)
+ (char **)
+#endif
+ &in, &ibl, &out, &obl) == (size_t)-1 || ibl)
return NULL;
iconv_close(cd);
@@ -1487,7 +1501,11 @@ vhd_w2u_decode_location(const char *in, char *out, int len, char *utf_type)
if (cd == (iconv_t)-1)
return NULL;
- if (iconv(cd, (char **)&in, &ibl, &out, &obl) == (size_t)-1 || ibl)
+ if (iconv(cd,
+#if defined(__linux__) || defined(__Linux__)
+ (char **)
+#endif
+ &in, &ibl, &out, &obl) == (size_t)-1 || ibl)
return NULL;
iconv_close(cd);
@@ -2435,7 +2453,7 @@ vhd_initialize_footer(vhd_context_t *ctx, int type, uint64_t size)
ctx->footer.saved = 0;
ctx->footer.data_offset = 0xFFFFFFFFFFFFFFFF;
strcpy(ctx->footer.crtr_app, "tap");
- uuid_generate(ctx->footer.uuid);
+ blk_uuid_generate(&ctx->footer.uuid);
}
static int
@@ -2479,7 +2497,11 @@ vhd_initialize_header_parent_name(vhd_context_t *ctx, const char *parent_path)
memset(dst, 0, obl);
- if (iconv(cd, (char **)&pname, &ibl, &dst, &obl) == (size_t)-1 || ibl)
+ if (iconv(cd,
+#if defined(__linux__) || defined(__Linux__)
+ (char **)
+#endif
+ &pname, &ibl, &dst, &obl) == (size_t)-1 || ibl)
err = (errno ? -errno : -EINVAL);
out:
@@ -2546,7 +2568,7 @@ vhd_initialize_header(vhd_context_t *ctx, const char *parent_path,
return err;
ctx->header.prt_ts = vhd_time(stats.st_mtime);
- uuid_copy(ctx->header.prt_uuid, parent.footer.uuid);
+ blk_uuid_copy(&ctx->header.prt_uuid, &parent.footer.uuid);
if (!size)
size = parent.footer.curr_size;
vhd_close(&parent);
@@ -2628,7 +2650,7 @@ vhd_change_parent(vhd_context_t *child, char *parent_path, int raw)
}
if (raw) {
- uuid_clear(child->header.prt_uuid);
+ blk_uuid_clear(&child->header.prt_uuid);
} else {
err = vhd_open(&parent, ppath, VHD_OPEN_RDONLY);
if (err) {
@@ -2636,7 +2658,7 @@ vhd_change_parent(vhd_context_t *child, char *parent_path, int raw)
ppath, child->file, err);
goto out;
}
- uuid_copy(child->header.prt_uuid, parent.footer.uuid);
+ blk_uuid_copy(&child->header.prt_uuid, &parent.footer.uuid);
vhd_close(&parent);
}
@@ -2695,7 +2717,7 @@ vhd_create_batmap(vhd_context_t *ctx)
header = &ctx->batmap.header;
memset(header, 0, sizeof(vhd_batmap_header_t));
- memcpy(header->cookie, VHD_BATMAP_COOKIE, sizeof(*header->cookie));
+ memcpy(header->cookie, VHD_BATMAP_COOKIE, sizeof(header->cookie));
err = vhd_batmap_header_offset(ctx, &off);
if (err)
diff --git a/tools/blktap2/vhd/lib/vhd-util-check.c b/tools/blktap2/vhd/lib/vhd-util-check.c
index 9dbd9e1941..b6bb1b7c52 100644
--- a/tools/blktap2/vhd/lib/vhd-util-check.c
+++ b/tools/blktap2/vhd/lib/vhd-util-check.c
@@ -218,7 +218,7 @@ vhd_util_check_validate_differencing_header(vhd_context_t *vhd)
if (vhd_util_check_zeros(header->loc, sizeof(header->loc)))
return "invalid non-null parent locators";
- if (!uuid_is_null(header->prt_uuid))
+ if (!blk_uuid_is_nil(&header->prt_uuid))
return "invalid non-null parent uuid";
if (header->prt_ts)
@@ -320,7 +320,7 @@ vhd_util_check_validate_parent(vhd_context_t *vhd, const char *ppath)
VHD_OPEN_RDONLY | VHD_OPEN_IGNORE_DISABLED))
return "error opening parent";
- if (uuid_compare(vhd->header.prt_uuid, parent.footer.uuid)) {
+ if (blk_uuid_compare(&vhd->header.prt_uuid, &parent.footer.uuid)) {
msg = "invalid parent uuid";
goto out;
}
diff --git a/tools/blktap2/vhd/lib/vhd-util-read.c b/tools/blktap2/vhd/lib/vhd-util-read.c
index a462fdc4df..0afb3dcceb 100644
--- a/tools/blktap2/vhd/lib/vhd-util-read.c
+++ b/tools/blktap2/vhd/lib/vhd-util-read.c
@@ -78,7 +78,7 @@ vhd_print_header(vhd_context_t *vhd, vhd_header_t *h, int hex)
(err ? "failed to read name" : name));
free(name);
- uuid_unparse(h->prt_uuid, uuid);
+ blk_uuid_to_string(&h->prt_uuid, uuid);
printf("Parent UUID : %s\n", uuid);
vhd_time_to_string(h->prt_ts, time_str);
@@ -153,7 +153,7 @@ vhd_print_footer(vhd_footer_t *f, int hex)
printf("Checksum : 0x%x|0x%x (%s)\n", f->checksum, cksm,
f->checksum == cksm ? "Good!" : "Bad!");
- uuid_unparse(f->uuid, uuid);
+ blk_uuid_to_string(&f->uuid, uuid);
printf("UUID : %s\n", uuid);
printf("Saved state : %s\n", f->saved == 0 ? "No" : "Yes");