diff -r b51f9542ab14 tools/blktap2/drivers/block-vhd.c --- a/tools/blktap2/drivers/block-vhd.c Wed Jun 24 11:17:11 2009 +0100 +++ b/tools/blktap2/drivers/block-vhd.c Wed Jun 24 12:57:16 2009 +0200 @@ -806,7 +806,7 @@ vhd_validate_parent(td_driver_t *child_d } */ - 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 -r b51f9542ab14 tools/blktap2/include/blk_uuid.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/blktap2/include/blk_uuid.h Wed Jun 24 12:57:16 2009 +0200 @@ -0,0 +1,53 @@ +/* Copyright (c) 2008, XenSource Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of XenSource Inc. nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ +#ifndef __BLKTAP2_UUID_H__ +#define __BLKTAP2_UUID_H__ + +#if defined(__linux__) || defined(__Linux__) +#include +/* enforce use of below API */ +#define uuid_is_null(a) error use blk_uuid_is_nil +#define uuid_generate(a) error use blk_uuid_generate +#define uuid_unparse(a, b) error use blk_uuid_to_string +#define uuid_parse(a, b) error use blk_uuid_from_string +#define uuid_copy(a, b) error use blk_uuid_copy +#define uuid_clear(a) error use blk_uuid_clear +#define uuid_compare(a,b) error use blk_uuid_compare +#endif +#if defined(__NetBSD__) +#include +#endif + +int blk_uuid_is_nil(uuid_t *uuid); +void blk_uuid_generate(uuid_t *uuid); +void blk_uuid_to_string(uuid_t *uuid, char **out); +void blk_uuid_from_string(uuid_t *uuid, const char *in); +void blk_uuid_copy(uuid_t *dst, uuid_t *src); +void blk_uuid_clear(uuid_t *uuid); +int blk_uuid_compare(uuid_t *uuid1, uuid_t *uuid2); + +#endif /* __BLKTAP2_UUID_H__ */ diff -r b51f9542ab14 tools/blktap2/include/libvhd.h --- a/tools/blktap2/include/libvhd.h Wed Jun 24 11:17:11 2009 +0100 +++ b/tools/blktap2/include/libvhd.h Wed Jun 24 12:57:16 2009 +0200 @@ -36,7 +36,7 @@ #include #endif -#include "uuid.h" +#include "blk_uuid.h" #include "vhd.h" #ifndef O_LARGEFILE @@ -216,7 +216,7 @@ vhd_parent_locator_size(vhd_parent_locat 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 -r b51f9542ab14 tools/blktap2/include/uuid.h --- a/tools/blktap2/include/uuid.h Wed Jun 24 11:17:11 2009 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -/* Copyright (c) 2008, XenSource Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of XenSource Inc. nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER - * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -#ifndef __BLKTAP2_UUID_H__ -#define __BLKTAP2_UUID_H__ - -#if defined(__linux__) || defined(__Linux__) - -#include - -#else - -#include -#include -#include - -static inline int uuid_is_null(uuid_t uuid) -{ - uint32_t status; - return uuid_is_nil(&uuid, &status); -} - -static inline void uuid_generate(uuid_t uuid) -{ - uint32_t status; - uuid_create(&uuid, &status); -} - -static inline void uuid_unparse(uuid_t uuid, char *out) -{ - uint32_t status; - uuid_to_string(&uuid, (char **)&out, &status); -} - -static inline void uuid_copy(uuid_t dst, uuid_t src) -{ - memcpy(dst, src, sizeof(dst)); -} - -static inline void uuid_clear(uuid_t uu) -{ - memset(uu, 0, sizeof(uu)); -} - -#define uuid_compare(x,y) \ - ({ uint32_t status; uuid_compare(&(x),&(y),&status); }) - -#endif - -#endif /* __BLKTAP2_UUID_H__ */ diff -r b51f9542ab14 tools/blktap2/include/vhd.h --- a/tools/blktap2/include/vhd.h Wed Jun 24 11:17:11 2009 +0100 +++ b/tools/blktap2/include/vhd.h Wed Jun 24 12:57:16 2009 +0200 @@ -28,7 +28,6 @@ #define __VHD_H__ #include -#include "uuid.h" typedef uint32_t u32; typedef uint64_t u64; diff -r b51f9542ab14 tools/blktap2/vhd/lib/Makefile --- a/tools/blktap2/vhd/lib/Makefile Wed Jun 24 11:17:11 2009 +0100 +++ b/tools/blktap2/vhd/lib/Makefile Wed Jun 24 12:57:16 2009 +0200 @@ -27,6 +27,10 @@ endif CFLAGS += -Wp,-MD,.$(@F).d DEPS = .*.d +UUID_SRCS-y := +UUID_SRCS-$(CONFIG_Linux) += uuid_linux.c +UUID_SRCS-$(CONFIG_NetBSD) += uuid_netbsd.c + LIB-SRCS := libvhd.c LIB-SRCS += libvhd-journal.c LIB-SRCS += vhd-util-coalesce.c @@ -44,6 +48,7 @@ LIB-SRCS += vhd-util-scan.c LIB-SRCS += vhd-util-check.c LIB-SRCS += relative-path.c LIB-SRCS += atomicio.c +LIB-SRCS += $(UUID_SRCS-y) LIB-OBJS = $(patsubst %.c,%.o,$(LIB-SRCS)) LIB-OBJS += $(LVM-UTIL-OBJ) diff -r b51f9542ab14 tools/blktap2/vhd/lib/libvhd-journal.c --- a/tools/blktap2/vhd/lib/libvhd-journal.c Wed Jun 24 11:17:11 2009 +0100 +++ b/tools/blktap2/vhd/lib/libvhd-journal.c Wed Jun 24 12:57:16 2009 +0200 @@ -237,7 +237,7 @@ vhd_journal_add_journal_header(vhd_journ 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 -r b51f9542ab14 tools/blktap2/vhd/lib/libvhd.c --- a/tools/blktap2/vhd/lib/libvhd.c Wed Jun 24 11:17:11 2009 +0100 +++ b/tools/blktap2/vhd/lib/libvhd.c Wed Jun 24 12:57:16 2009 +0200 @@ -1308,7 +1308,8 @@ vhd_macx_encode_location(char *name, cha 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, cha 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, cha 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 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 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, 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, 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 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_co 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 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, } 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, 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 -r b51f9542ab14 tools/blktap2/vhd/lib/uuid_linux.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/blktap2/vhd/lib/uuid_linux.c Wed Jun 24 12:57:16 2009 +0200 @@ -0,0 +1,43 @@ +#include "blk_uuid.h" + +int blk_uuid_is_nil(uuid_t *uuid) +{ +#undef uuid_is_null + return uuid_is_null(*uuid); +} + +void blk_uuid_generate(uuid_t *uuid) +{ +#undef uuid_generate + uuid_generate(*uuid); +} + +void blk_uuid_to_string(uuid_t *uuid, char **out) +{ +#undef uuid_unparse + uuid_unparse(*uuid, *out); +} + +void blk_uuid_from_string(uuid_t *uuid, const char *in) +{ +#undef uuid_parse + uuid_parse(in, *uuid); +} + +void blk_uuid_copy(uuid_t *dst, uuid_t *src) +{ +#undef uuid_copy + uuid_copy(*dst, *src); +} + +void blk_uuid_clear(uuid_t *uuid) +{ +#undef uuid_clear + uuid_clear(*uuid); +} + +int blk_uuid_compare(uuid_t *uuid1, uuid_t *uuid2) +{ +#undef uuid_compare + return uuid_compare(*uuid1, *uuid2); +} diff -r b51f9542ab14 tools/blktap2/vhd/lib/uuid_netbsd.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/blktap2/vhd/lib/uuid_netbsd.c Wed Jun 24 12:57:16 2009 +0200 @@ -0,0 +1,43 @@ +#include +#include "blk_uuid.h" + +int blk_uuid_is_nil(uuid_t *uuid) +{ + uint32_t status; + return uuid_is_nil(uuid, &status); +} + +void blk_uuid_generate(uuid_t *uuid) +{ + uint32_t status; + uuid_create(uuid, &status); +} + +void blk_uuid_to_string(uuid_t *uuid, char **out) +{ + uint32_t status; + uuid_to_string(uuid, out, &status); +} + +void blk_uuid_from_string(uuid_t *uuid, const char *in) +{ + uint32_t status; + uuid_from_string(in, uuid, &status); +} + +void blk_uuid_copy(uuid_t *dst, uuid_t *src) +{ + memcpy(dst, src, sizeof(uuid_t)); +} + +void blk_uuid_clear(uuid_t *uuid) +{ + memset(uuid, 0, sizeof(uuid_t)); +} + +int blk_uuid_compare(uuid_t *uuid1, uuid_t *uuid2) +{ + uint32_t status; + return uuid_compare(uuid1, uuid2, &status); +} + diff -r b51f9542ab14 tools/blktap2/vhd/lib/vhd-util-check.c --- a/tools/blktap2/vhd/lib/vhd-util-check.c Wed Jun 24 11:17:11 2009 +0100 +++ b/tools/blktap2/vhd/lib/vhd-util-check.c Wed Jun 24 12:57:16 2009 +0200 @@ -218,7 +218,7 @@ vhd_util_check_validate_differencing_hea 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_conte 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 -r b51f9542ab14 tools/blktap2/vhd/lib/vhd-util-read.c --- a/tools/blktap2/vhd/lib/vhd-util-read.c Wed Jun 24 11:17:11 2009 +0100 +++ b/tools/blktap2/vhd/lib/vhd-util-read.c Wed Jun 24 12:57:16 2009 +0200 @@ -78,7 +78,7 @@ vhd_print_header(vhd_context_t *vhd, vhd (err ? "failed to read name" : name)); free(name); - uuid_unparse(h->prt_uuid, uuid); + blk_uuid_to_string(&h->prt_uuid, (char **)&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 he 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, (char **)&uuid); printf("UUID : %s\n", uuid); printf("Saved state : %s\n", f->saved == 0 ? "No" : "Yes");