head 1.10; access; symbols UUID_1_6_2:1.9 UUID_1_6_1:1.9 UUID_1_6_0:1.9 UUID_1_5_1:1.8 UUID_1_5_0:1.8 UUID_1_4_2:1.7 UUID_1_4_1:1.6 UUID_1_4_0:1.5 UUID_1_3_2:1.4 UUID_1_3_1:1.4 UUID_1_3_0:1.4 UUID_1_2_1:1.4 UUID_1_2_0:1.4 UUID_1_1_2:1.3 UUID_1_1_1:1.2 UUID_1_1_0:1.1; locks; strict; comment @# @; 1.10 date 2008.07.05.12.58.22; author rse; state dead; branches; next 1.9; commitid XLXN7vUmABwPcC9t; 1.9 date 2007.01.01.18.14.57; author rse; state Exp; branches; next 1.8; commitid jOXiIO8S8v7xFP0s; 1.8 date 2006.05.11.09.37.30; author rse; state Exp; branches; next 1.7; commitid u4EPMISJDipjmAwr; 1.7 date 2006.03.13.09.14.23; author rse; state Exp; branches; next 1.6; commitid oxS2tiINU52U70pr; 1.6 date 2006.02.07.08.19.15; author rse; state Exp; branches; next 1.5; commitid ysd3ZoQahbomUCkr; 1.5 date 2006.01.13.06.44.33; author rse; state Exp; branches; next 1.4; commitid hYfQc9JIMh4bcphr; 1.4 date 2005.01.23.12.38.10; author rse; state Exp; branches; next 1.3; 1.3 date 2004.12.31.19.20.39; author rse; state Exp; branches; next 1.2; 1.2 date 2004.11.03.19.00.50; author rse; state Exp; branches; next 1.1; 1.1 date 2004.11.03.14.52.10; 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-2007 Ralf S. Engelschall ** Copyright (c) 2004-2007 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.xs: Perl Binding (Perl/XS part) */ #include "uuid.h" #include "EXTERN.h" #include "perl.h" #include "XSUB.h" MODULE = OSSP::uuid PACKAGE = OSSP::uuid void constant(sv) PREINIT: dXSTARG; STRLEN len; int i; static struct { const char *name; int value; } constant_table[] = { { "UUID_VERSION", UUID_VERSION }, { "UUID_LEN_BIN", UUID_LEN_BIN }, { "UUID_LEN_STR", UUID_LEN_STR }, { "UUID_LEN_SIV", UUID_LEN_SIV }, { "UUID_RC_OK", UUID_RC_OK }, { "UUID_RC_ARG", UUID_RC_ARG }, { "UUID_RC_MEM", UUID_RC_MEM }, { "UUID_RC_SYS", UUID_RC_SYS }, { "UUID_RC_INT", UUID_RC_INT }, { "UUID_RC_IMP", UUID_RC_IMP }, { "UUID_MAKE_V1", UUID_MAKE_V1 }, { "UUID_MAKE_V3", UUID_MAKE_V3 }, { "UUID_MAKE_V4", UUID_MAKE_V4 }, { "UUID_MAKE_V5", UUID_MAKE_V5 }, { "UUID_MAKE_MC", UUID_MAKE_MC }, { "UUID_FMT_BIN", UUID_FMT_BIN }, { "UUID_FMT_STR", UUID_FMT_STR }, { "UUID_FMT_SIV", UUID_FMT_SIV }, { "UUID_FMT_TXT", UUID_FMT_TXT } }; INPUT: SV *sv; const char *s = SvPV(sv, len); PPCODE: for (i = 0; i < sizeof(constant_table)/sizeof(constant_table[0]); i++) { if (strcmp(s, constant_table[i].name) == 0) { EXTEND(SP, 1); PUSHs(&PL_sv_undef); PUSHi(constant_table[i].value); break; } } if (i == sizeof(constant_table)/sizeof(constant_table[0])) { sv = sv_2mortal(newSVpvf("unknown contant OSSP::uuid::%s", s)); PUSHs(sv); } uuid_rc_t uuid_create(uuid) PROTOTYPE: $ INPUT: uuid_t *&uuid = NO_INIT CODE: RETVAL = uuid_create(&uuid); OUTPUT: uuid RETVAL uuid_rc_t uuid_destroy(uuid) PROTOTYPE: $ INPUT: uuid_t *uuid CODE: RETVAL = uuid_destroy(uuid); OUTPUT: RETVAL uuid_rc_t uuid_load(uuid,name) PROTOTYPE: $$ INPUT: uuid_t *uuid const char *name CODE: RETVAL = uuid_load(uuid, name); OUTPUT: RETVAL uuid_rc_t uuid_make(uuid,mode,...) PROTOTYPE: $$;$$ INPUT: uuid_t *uuid unsigned int mode PREINIT: uuid_t *ns; const char *name; CODE: if ((mode & UUID_MAKE_V3) || (mode & UUID_MAKE_V5)) { if (items != 4) croak("mode UUID_MAKE_V3/UUID_MAKE_V5 requires two additional arguments to uuid_make()"); if (!SvROK(ST(2))) croak("mode UUID_MAKE_V3/UUID_MAKE_V5 requires a UUID object as namespace"); ns = INT2PTR(uuid_t *, SvIV((SV*)SvRV(ST(2)))); name = (const char *)SvPV_nolen(ST(3)); RETVAL = uuid_make(uuid, mode, ns, name); } else { if (items != 2) croak("invalid number of arguments to uuid_make()"); RETVAL = uuid_make(uuid, mode); } OUTPUT: RETVAL uuid_rc_t uuid_isnil(uuid,result) PROTOTYPE: $$ INPUT: uuid_t *uuid int &result = NO_INIT CODE: RETVAL = uuid_isnil(uuid, &result); OUTPUT: result RETVAL uuid_rc_t uuid_compare(uuid,uuid2,result) PROTOTYPE: $$$ INPUT: uuid_t *uuid uuid_t *uuid2 int &result = NO_INIT CODE: RETVAL = uuid_compare(uuid, uuid2, &result); OUTPUT: result RETVAL uuid_rc_t uuid_import(uuid,fmt,data_ptr,data_len) PROTOTYPE: $$$$ INPUT: uuid_t *uuid uuid_fmt_t fmt const void *data_ptr size_t data_len CODE: if (ST(3) == &PL_sv_undef) data_len = sv_len(ST(2)); RETVAL = uuid_import(uuid, fmt, data_ptr, data_len); OUTPUT: RETVAL uuid_rc_t uuid_export(uuid,fmt,data_ptr,data_len) PROTOTYPE: $$$$ INPUT: uuid_t *uuid uuid_fmt_t fmt void *&data_ptr = NO_INIT size_t &data_len = NO_INIT PPCODE: data_ptr = NULL; data_len = 0; RETVAL = uuid_export(uuid, fmt, &data_ptr, &data_len); if (RETVAL == UUID_RC_OK) { if (fmt == UUID_FMT_SIV) data_len = strlen((char *)data_ptr); else if (fmt == UUID_FMT_STR || fmt == UUID_FMT_TXT) data_len--; /* Perl doesn't wish NUL-termination on strings */ sv_setpvn(ST(2), data_ptr, data_len); free(data_ptr); if (ST(3) != &PL_sv_undef) sv_setuv(ST(3), (UV)data_len); } PUSHi((IV)RETVAL); char * uuid_error(rc) PROTOTYPE: $ INPUT: uuid_rc_t rc CODE: RETVAL = uuid_error(rc); OUTPUT: RETVAL unsigned long uuid_version() PROTOTYPE: INPUT: CODE: RETVAL = uuid_version(); OUTPUT: RETVAL @ 1.9 log @Adjust copyright messages for new year 2007. @ text @@ 1.8 log @Add full support for Single Integer Value (SIV) UUID representation for both importing and exporting in C/C++/Perl/PHP APIs. @ text @d3 2 a4 2 ** Copyright (c) 2004-2006 Ralf S. Engelschall ** Copyright (c) 2004-2006 The OSSP Project @ 1.7 log @Fix Perl API's "export" function by not taking over NUL-termination character under UUID_FMT_TXT. @ text @d51 1 d65 1 d206 3 a208 1 if (fmt == UUID_FMT_STR || fmt == UUID_FMT_TXT) @ 1.6 log @Apply workaround to uuid.h to avoid conflicts with vendor UUID implementations where uuid_t (Darwin / MacOS X) or uuid_create/uuid_compare (POSIX) might exist. Supported by: SpaceNet (MacOS X platform) @ text @d204 1 a204 1 if (fmt == UUID_FMT_STR) @ 1.5 log @Adjust copyright messages for new year 2006. @ text @d30 2 a35 2 #include "uuid.h" @ 1.4 log @add support for version 5 UUIDs also to Perl API @ text @d3 2 a4 2 ** Copyright (c) 2004-2005 Ralf S. Engelschall ** Copyright (c) 2004-2005 The OSSP Project @ 1.3 log @Adjust copyright messages for new year 2005. @ text @d60 1 d130 1 a130 1 if (mode & UUID_MAKE_V3) { d132 1 a132 1 croak("mode UUID_MAKE_V3 requires two additional arguments to uuid_make()"); d134 1 a134 1 croak("mode UUID_MAKE_V3 requires a UUID object as namespace"); @ 1.2 log @strip trailing whitespaces @ text @d3 2 a4 2 ** Copyright (c) 2004 Ralf S. Engelschall ** Copyright (c) 2004 The OSSP Project @ 1.1 log @Add Perl language binding providing both a C-style and OO-style API. @ text @d133 1 a133 1 croak("mode UUID_MAKE_V3 requires a UUID object as namespace"); @