head 1.10; access; symbols UUID_1_6_2:1.9 UUID_1_6_1:1.9 UUID_1_6_0:1.8 UUID_1_5_1:1.5 UUID_1_5_0:1.5 UUID_1_4_2:1.4 UUID_1_4_1:1.4 UUID_1_4_0:1.4 UUID_1_3_2:1.3 UUID_1_3_1:1.3 UUID_1_3_0:1.3 UUID_1_2_1:1.3 UUID_1_2_0:1.2 UUID_1_1_2:1.2 UUID_1_1_1:1.1 UUID_1_1_0:1.1 UUID_1_0_4:1.1 UUID_1_0_3:1.1 UUID_1_0_2:1.1 UUID_1_0_1:1.1 UUID_1_0_0:1.1 UUID_0_9_7:1.1 UUID_0_9_6:1.1; locks; strict; comment @ * @; 1.10 date 2008.07.05.12.58.16; author rse; state dead; branches; next 1.9; commitid XLXN7vUmABwPcC9t; 1.9 date 2008.01.10.14.18.47; author rse; state Exp; branches; next 1.8; commitid LqMgFGBgTR7clSMs; 1.8 date 2007.01.01.18.14.54; author rse; state Exp; branches; next 1.7; commitid jOXiIO8S8v7xFP0s; 1.7 date 2006.08.02.13.11.09; author rse; state Exp; branches; next 1.6; commitid fwUmuuaIDS3gSgHr; 1.6 date 2006.08.02.11.59.08; author rse; state Exp; branches; next 1.5; commitid YijM0y8Y7mFytgHr; 1.5 date 2006.07.28.19.04.32; author rse; state Exp; branches; next 1.4; commitid 6qZlcn3KsEQtZEGr; 1.4 date 2006.01.13.06.44.30; author rse; state Exp; branches; next 1.3; commitid hYfQc9JIMh4bcphr; 1.3 date 2005.03.29.19.01.41; author rse; state Exp; branches; next 1.2; 1.2 date 2004.12.31.19.20.34; author rse; state Exp; branches; next 1.1; 1.1 date 2004.02.11.14.38.40; author rse; state Exp; branches; next ; desc @@ 1.10 log @remove OSSP uuid from CVS -- it is now versioned controlled in a Monotone repository @ text @/* ** OSSP uuid - Universally Unique Identifier ** Copyright (c) 2004-2008 Ralf S. Engelschall ** Copyright (c) 2004-2008 The OSSP Project ** ** This file is part of OSSP uuid, a library for the generation ** of UUIDs which can found at http://www.ossp.org/pkg/lib/uuid/ ** ** Permission to use, copy, modify, and distribute this software for ** any purpose with or without fee is hereby granted, provided that ** the above copyright notice and this permission notice appear in all ** copies. ** ** THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 AUTHORS AND COPYRIGHT HOLDERS AND THEIR ** 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. ** ** uuid_dce.c: DCE 1.1 compatibility API implementation */ /* include DCE 1.1 API */ #define uuid_t uuid_dce_t #include "uuid_dce.h" #undef uuid_t #undef uuid_create #undef uuid_create_nil #undef uuid_is_nil #undef uuid_compare #undef uuid_equal #undef uuid_from_string #undef uuid_to_string #undef uuid_hash /* include regular API */ #include "uuid.h" /* helper macro */ #define LEAVE /*lint -save -e801*/ goto leave /*lint -restore*/ /* create a UUID (v1 only) */ void uuid_dce_create(uuid_dce_t *uuid_dce, int *status) { uuid_t *uuid; size_t len; void *vp; /* initialize status */ if (status != NULL) *status = uuid_s_error; /* sanity check argument(s) */ if (uuid_dce == NULL) return; /* create UUID and export as binary representation */ if (uuid_create(&uuid) != UUID_RC_OK) return; if (uuid_make(uuid, UUID_MAKE_V1) != UUID_RC_OK) { uuid_destroy(uuid); return; } vp = uuid_dce; len = UUID_LEN_BIN; if (uuid_export(uuid, UUID_FMT_BIN, &vp, &len) != UUID_RC_OK) { uuid_destroy(uuid); return; } uuid_destroy(uuid); /* return successfully */ if (status != NULL) *status = uuid_s_ok; return; } /* create a Nil UUID */ void uuid_dce_create_nil(uuid_dce_t *uuid_dce, int *status) { /* initialize status */ if (status != NULL) *status = uuid_s_error; /* sanity check argument(s) */ if (uuid_dce == NULL) return; /* short-circuit implementation, because Nil UUID is trivial to create, so no need to use regular OSSP uuid API */ memset(uuid_dce, 0, UUID_LEN_BIN); /* return successfully */ if (status != NULL) *status = uuid_s_ok; return; } /* check whether it is Nil UUID */ int uuid_dce_is_nil(uuid_dce_t *uuid_dce, int *status) { int i; int result; unsigned char *ucp; /* initialize status */ if (status != NULL) *status = uuid_s_error; /* sanity check argument(s) */ if (uuid_dce == NULL) return 0; /* short-circuit implementation, because Nil UUID is trivial to check, so no need to use regular OSSP uuid API */ result = 1; ucp = (unsigned char *)uuid_dce; for (i = 0; i < UUID_LEN_BIN; i++) { if (ucp[i] != '\0') { result = 0; break; } } /* return successfully with result */ if (status != NULL) *status = uuid_s_ok; return result; } /* compare two UUIDs */ int uuid_dce_compare(uuid_dce_t *uuid_dce1, uuid_dce_t *uuid_dce2, int *status) { uuid_t *uuid1 = NULL; uuid_t *uuid2 = NULL; int result = 0; /* initialize status */ if (status != NULL) *status = uuid_s_error; /* sanity check argument(s) */ if (uuid_dce1 == NULL || uuid_dce2 == NULL) return 0; /* import both UUID binary representations and compare them */ if (uuid_create(&uuid1) != UUID_RC_OK) LEAVE; if (uuid_create(&uuid2) != UUID_RC_OK) LEAVE; if (uuid_import(uuid1, UUID_FMT_BIN, uuid_dce1, UUID_LEN_BIN) != UUID_RC_OK) LEAVE; if (uuid_import(uuid2, UUID_FMT_BIN, uuid_dce2, UUID_LEN_BIN) != UUID_RC_OK) LEAVE; if (uuid_compare(uuid1, uuid2, &result) != UUID_RC_OK) LEAVE; /* indicate successful operation */ if (status != NULL) *status = uuid_s_ok; /* cleanup and return */ leave: if (uuid1 != NULL) uuid_destroy(uuid1); if (uuid2 != NULL) uuid_destroy(uuid2); return result; } /* compare two UUIDs (equality only) */ int uuid_dce_equal(uuid_dce_t *uuid_dce1, uuid_dce_t *uuid_dce2, int *status) { /* initialize status */ if (status != NULL) *status = uuid_s_error; /* sanity check argument(s) */ if (uuid_dce1 == NULL || uuid_dce2 == NULL) return 0; /* pass through to generic compare function */ return (uuid_dce_compare(uuid_dce1, uuid_dce2, status) == 0 ? 1 : 0); } /* import UUID from string representation */ void uuid_dce_from_string(const char *str, uuid_dce_t *uuid_dce, int *status) { uuid_t *uuid = NULL; size_t len; void *vp; /* initialize status */ if (status != NULL) *status = uuid_s_error; /* sanity check argument(s) */ if (str == NULL || uuid_dce == NULL) return; /* import string representation and export binary representation */ if (uuid_create(&uuid) != UUID_RC_OK) LEAVE; if (uuid_import(uuid, UUID_FMT_STR, str, UUID_LEN_STR) != UUID_RC_OK) LEAVE; vp = uuid_dce; len = UUID_LEN_BIN; if (uuid_export(uuid, UUID_FMT_BIN, &vp, &len) != UUID_RC_OK) LEAVE; /* indicate successful operation */ if (status != NULL) *status = uuid_s_ok; /* cleanup and return */ leave: if (uuid != NULL) uuid_destroy(uuid); return; } /* export UUID to string representation */ void uuid_dce_to_string(uuid_dce_t *uuid_dce, char **str, int *status) { uuid_t *uuid = NULL; size_t len; void *vp; /* initialize status */ if (status != NULL) *status = uuid_s_error; /* sanity check argument(s) */ if (str == NULL || uuid_dce == NULL) return; /* import binary representation and export string representation */ if (uuid_create(&uuid) != UUID_RC_OK) LEAVE; if (uuid_import(uuid, UUID_FMT_BIN, uuid_dce, UUID_LEN_BIN) != UUID_RC_OK) LEAVE; vp = str; len = UUID_LEN_STR; if (uuid_export(uuid, UUID_FMT_STR, &vp, &len) != UUID_RC_OK) LEAVE; /* indicate successful operation */ if (status != NULL) *status = uuid_s_ok; /* cleanup and return */ leave: if (uuid != NULL) uuid_destroy(uuid); return; } /* export UUID into hash value */ unsigned int uuid_dce_hash(uuid_dce_t *uuid_dce, int *status) { int i; unsigned char *ucp; unsigned int hash; /* initialize status */ if (status != NULL) *status = uuid_s_error; /* sanity check argument(s) */ if (uuid_dce == NULL) return 0; /* generate a hash value (DCE 1.1 actually requires 16-bit only) */ hash = 0; ucp = (unsigned char *)uuid_dce; for (i = UUID_LEN_BIN-1; i >= 0; i--) { hash <<= 8; hash |= ucp[i]; } /* return successfully */ if (status != NULL) *status = uuid_s_ok; return hash; } @ 1.9 log @adjust copyright messages for 2008 and bump version in advance @ text @@ 1.8 log @Adjust copyright messages for new year 2007. @ text @d3 2 a4 2 ** Copyright (c) 2004-2007 Ralf S. Engelschall ** Copyright (c) 2004-2007 The OSSP Project @ 1.7 log @Optional DMALLOC based memory debugging support. @ text @d3 2 a4 2 ** Copyright (c) 2004-2006 Ralf S. Engelschall ** Copyright (c) 2004-2006 The OSSP Project @ 1.6 log @Consistently include "config.h" in all source files. @ text @a43 1 #include "config.h" @ 1.5 log @Even more pendantic code cleanups according to complains by SPLINT @ text @d44 1 @ 1.4 log @Adjust copyright messages for new year 2006. @ text @d98 1 a98 1 memset(uuid_dce, '\0', UUID_LEN_BIN); @ 1.3 log @Cleanup the source code even more by following a large set of FlexeLint's suggestions. @ text @d3 2 a4 2 ** Copyright (c) 2004-2005 Ralf S. Engelschall ** Copyright (c) 2004-2005 The OSSP Project @ 1.2 log @Adjust copyright messages for new year 2005. @ text @d46 3 d155 1 a155 1 goto leave; d157 1 a157 1 goto leave; d159 1 a159 1 goto leave; d161 1 a161 1 goto leave; d163 1 a163 1 goto leave; d210 1 a210 1 goto leave; d212 1 a212 1 goto leave; d216 1 a216 1 goto leave; d246 1 a246 1 goto leave; d248 1 a248 1 goto leave; d252 1 a252 1 goto leave; @ 1.1 log @Added an experimental additional DCE 1.1 API for backward compatibility with existing applications. @ text @d3 2 a4 2 ** Copyright (c) 2004 Ralf S. Engelschall ** Copyright (c) 2004 The OSSP Project @