summaryrefslogtreecommitdiff
path: root/shared/ossp_uuid/perl/uuid.pm
diff options
context:
space:
mode:
authorDaniel Wilhelm <daniel@wili.li>2014-04-18 17:07:43 +0200
committerDaniel Wilhelm <daniel@wili.li>2014-04-18 17:07:43 +0200
commit4226e548662339ea1ca37b45385a7cf9b237ff1e (patch)
tree9a3fa54b85d97f05164e41bdb96b82f748a37342 /shared/ossp_uuid/perl/uuid.pm
parent3.7 (diff)
downloadFreeFileSync-4226e548662339ea1ca37b45385a7cf9b237ff1e.tar.gz
FreeFileSync-4226e548662339ea1ca37b45385a7cf9b237ff1e.tar.bz2
FreeFileSync-4226e548662339ea1ca37b45385a7cf9b237ff1e.zip
3.8
Diffstat (limited to 'shared/ossp_uuid/perl/uuid.pm')
-rw-r--r--shared/ossp_uuid/perl/uuid.pm334
1 files changed, 0 insertions, 334 deletions
diff --git a/shared/ossp_uuid/perl/uuid.pm b/shared/ossp_uuid/perl/uuid.pm
deleted file mode 100644
index b3223966..00000000
--- a/shared/ossp_uuid/perl/uuid.pm
+++ /dev/null
@@ -1,334 +0,0 @@
-##
-## OSSP uuid - Universally Unique Identifier
-## Copyright (c) 2004-2007 Ralf S. Engelschall <rse@engelschall.com>
-## Copyright (c) 2004-2007 The OSSP Project <http://www.ossp.org/>
-##
-## 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.pm: Perl Binding (Perl part)
-##
-
-##
-## High-Level Perl Module TIE-style API
-## (just a functionality-reduced TIE wrapper around the OO-style API)
-##
-
-package OSSP::uuid::tie;
-
-use 5.008;
-use strict;
-use warnings;
-use Carp;
-
-# inhert from Tie::Scalar
-require Tie::Scalar;
-our @ISA = qw(Tie::Scalar);
-
-# helper function
-sub mode_sanity {
- my ($mode) = @_;
- if (not ( defined($mode)
- and ref($mode) eq 'ARRAY'
- and ( (@{$mode} == 1 and $mode->[0] =~ m|^v[14]$|)
- or (@{$mode} == 3 and $mode->[0] =~ m|^v[35]$|)))) {
- return (undef, "invalid UUID generation mode specification");
- }
- if ($mode->[0] =~ m|^v[35]$|) {
- my $uuid_ns = new OSSP::uuid;
- $uuid_ns->load($mode->[1])
- or return (undef, "failed to load UUID $mode->[0] namespace");
- $mode->[1] = $uuid_ns;
- }
- return ($mode, undef);
-}
-
-# constructor
-sub TIESCALAR {
- my ($class, @args) = @_;
- my $self = {};
- bless ($self, $class);
- $self->{-uuid} = new OSSP::uuid
- or croak "failed to create OSSP::uuid object";
- my ($mode, $error) = mode_sanity(defined($args[0]) ? [ @args ] : [ "v1" ]);
- croak $error if defined($error);
- $self->{-mode} = $mode;
- return $self;
-}
-
-# destructor
-sub DESTROY {
- my ($self) = @_;
- delete $self->{-uuid};
- delete $self->{-mode};
- return;
-}
-
-# fetch value from scalar
-# (applied semantic: export UUID in string format)
-sub FETCH {
- my ($self) = @_;
- $self->{-uuid}->make(@{$self->{-mode}})
- or croak "failed to generate new UUID";
- my $value = $self->{-uuid}->export("str")
- or croak "failed to export new UUID";
- return $value;
-}
-
-# store value into scalar
-# (applied semantic: configure new UUID generation mode)
-sub STORE {
- my ($self, $value) = @_;
- my ($mode, $error) = mode_sanity($value);
- croak $error if defined($error);
- $self->{-mode} = $mode;
- return;
-}
-
-##
-## High-Level Perl Module OO-style API
-## (just an OO wrapper around the C-style API)
-##
-
-package OSSP::uuid;
-
-use 5.008;
-use strict;
-use warnings;
-use Carp;
-use XSLoader;
-use Exporter;
-
-# API version
-our $VERSION = do { my @v = ('1.6.2' =~ m/\d+/g); sprintf("%d.".("%02d"x$#v), @v); };
-
-# API inheritance
-our @ISA = qw(Exporter);
-
-# API symbols
-my $symbols = {
- 'const' => [qw(
- UUID_VERSION
- UUID_LEN_BIN
- UUID_LEN_STR
- UUID_LEN_SIV
- UUID_RC_OK
- UUID_RC_ARG
- UUID_RC_MEM
- UUID_RC_SYS
- UUID_RC_INT
- UUID_RC_IMP
- UUID_MAKE_V1
- UUID_MAKE_V3
- UUID_MAKE_V4
- UUID_MAKE_V5
- UUID_MAKE_MC
- UUID_FMT_BIN
- UUID_FMT_STR
- UUID_FMT_SIV
- UUID_FMT_TXT
- )],
- 'func' => [qw(
- uuid_create
- uuid_destroy
- uuid_load
- uuid_make
- uuid_isnil
- uuid_compare
- uuid_import
- uuid_export
- uuid_error
- uuid_version
- )]
-};
-
-# API symbol exportation
-our %EXPORT_TAGS = (
- 'all' => [ @{$symbols->{'const'}}, @{$symbols->{'func'}} ],
- 'const' => [ @{$symbols->{'const'}} ],
- 'func' => [ @{$symbols->{'func'}} ]
-);
-our @EXPORT_OK = @{$EXPORT_TAGS{'all'}};
-our @EXPORT = ();
-
-# constructor
-sub new {
- my $proto = shift;
- my $class = ref($proto) || $proto;
- my $self = {};
- bless ($self, $class);
- $self->{-uuid} = undef;
- $self->{-rc} = $self->UUID_RC_OK;
- my $rc = uuid_create($self->{-uuid});
- if ($rc != $self->UUID_RC_OK) {
- croak(sprintf("OSSP::uuid::new: uuid_create: %s (%d)", uuid_error($rc), $rc));
- return undef;
- }
- return $self;
-}
-
-# destructor
-sub DESTROY ($) {
- my ($self) = @_;
- $self->{-rc} = uuid_destroy($self->{-uuid}) if (defined($self->{-uuid}));
- if ($self->{-rc} != $self->UUID_RC_OK) {
- carp(sprintf("OSSP::uuid::DESTROY: uuid_destroy: %s (%d)", uuid_error($self->{-rc}), $self->{-rc}));
- return;
- }
- $self->{-uuid} = undef;
- $self->{-rc} = undef;
- return;
-}
-
-sub load ($$) {
- my ($self, $name) = @_;
- $self->{-rc} = uuid_load($self->{-uuid}, $name);
- return ($self->{-rc} == $self->UUID_RC_OK);
-}
-
-sub make ($$;@) {
- my ($self, $mode, @valist) = @_;
- my $mode_code = 0;
- foreach my $spec (split(/,/, $mode)) {
- if ($spec eq 'v1') { $mode_code |= $self->UUID_MAKE_V1; }
- elsif ($spec eq 'v3') { $mode_code |= $self->UUID_MAKE_V3; }
- elsif ($spec eq 'v4') { $mode_code |= $self->UUID_MAKE_V4; }
- elsif ($spec eq 'v5') { $mode_code |= $self->UUID_MAKE_V5; }
- elsif ($spec eq 'mc') { $mode_code |= $self->UUID_MAKE_MC; }
- else { croak("invalid mode specification \"$spec\""); }
- }
- if (($mode_code & $self->UUID_MAKE_V3) or ($mode_code & $self->UUID_MAKE_V5)) {
- if (not (ref($valist[0]) and $valist[0]->isa("OSSP::uuid"))) {
- croak("UUID_MAKE_V3/UUID_MAKE_V5 requires namespace argument to be OSSP::uuid object");
- }
- my $ns = $valist[0]->{-uuid};
- my $name = $valist[1];
- $self->{-rc} = uuid_make($self->{-uuid}, $mode_code, $ns, $name);
- }
- else {
- $self->{-rc} = uuid_make($self->{-uuid}, $mode_code);
- }
- return ($self->{-rc} == $self->UUID_RC_OK);
-}
-
-sub isnil ($) {
- my ($self) = @_;
- my $result;
- $self->{-rc} = uuid_isnil($self->{-uuid}, $result);
- return ($self->{-rc} == $self->UUID_RC_OK ? $result : undef);
-}
-
-sub compare ($$) {
- my ($self, $other) = @_;
- my $result = 0;
- if (not (ref($other) and $other->isa("OSSP::uuid"))) {
- croak("argument has to an OSSP::uuid object");
- }
- $self->{-rc} = uuid_compare($self->{-uuid}, $other->{-uuid}, $result);
- return ($self->{-rc} == $self->UUID_RC_OK ? $result : undef);
-}
-
-sub import {
- # ATTENTION: The OSSP uuid API function "import" conflicts with
- # the standardized "import" method the Perl world expects from
- # their modules. In order to keep the Perl binding consist
- # with the C API, we solve the conflict under run-time by
- # distinguishing between the two types of "import" calls.
- if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::uuid/) {
- # the regular OSSP::uuid "import" method
- croak("import method expects 3 or 4 arguments") if (@_ < 3 or @_ > 4); # emulate prototype
- my ($self, $fmt, $data_ptr, $data_len) = @_;
- if ($fmt eq 'bin') { $fmt = $self->UUID_FMT_BIN; }
- elsif ($fmt eq 'str') { $fmt = $self->UUID_FMT_STR; }
- elsif ($fmt eq 'siv') { $fmt = $self->UUID_FMT_SIV; }
- elsif ($fmt eq 'txt') { $fmt = $self->UUID_FMT_TXT; }
- else { croak("invalid format \"$fmt\""); }
- $data_len ||= length($data_ptr); # functional redudant, but Perl dislikes undef value here
- $self->{-rc} = uuid_import($self->{-uuid}, $fmt, $data_ptr, $data_len);
- return ($self->{-rc} == $self->UUID_RC_OK);
- }
- else {
- # the special Perl "import" method
- # (usually inherited from the Exporter)
- no strict "refs";
- return OSSP::uuid->export_to_level(1, @_);
- }
-}
-
-sub export {
- # ATTENTION: The OSSP uuid API function "export" conflicts with
- # the standardized "export" method the Perl world expects from
- # their modules. In order to keep the Perl binding consist
- # with the C API, we solve the conflict under run-time by
- # distinguishing between the two types of "export" calls.
- if (defined($_[0]) and ref($_[0]) =~ m/^OSSP::uuid/) {
- # the regular OSSP::uuid "export" method
- croak("export method expects 2 arguments") if (@_ != 2); # emulate prototype
- my ($self, $fmt) = @_;
- my $data_ptr;
- if ($fmt eq 'bin') { $fmt = $self->UUID_FMT_BIN; }
- elsif ($fmt eq 'str') { $fmt = $self->UUID_FMT_STR; }
- elsif ($fmt eq 'siv') { $fmt = $self->UUID_FMT_SIV; }
- elsif ($fmt eq 'txt') { $fmt = $self->UUID_FMT_TXT; }
- else { croak("invalid format \"$fmt\""); }
- $self->{-rc} = uuid_export($self->{-uuid}, $fmt, $data_ptr, undef);
- return ($self->{-rc} == $self->UUID_RC_OK ? $data_ptr : undef);
- }
- else {
- # the special Perl "export" method
- # (usually inherited from the Exporter)
- return Exporter::export(@_);
- }
-}
-
-sub error ($;$) {
- my ($self, $rc) = @_;
- $rc = $self->{-rc} if (not defined($rc));
- return wantarray ? (uuid_error($rc), $rc) : uuid_error($rc);
-}
-
-sub version (;$) {
- my ($self) = @_;
- return uuid_version();
-}
-
-##
-## Low-Level Perl XS C-style API
-## (actually just the activation of the XS part)
-##
-
-# auto-loading constants
-sub AUTOLOAD {
- my $constname;
- our $AUTOLOAD;
- ($constname = $AUTOLOAD) =~ s/.*:://;
- croak "&OSSP::uuid::constant not defined" if ($constname eq 'constant');
- my ($error, $val) = constant($constname);
- croak $error if ($error);
- { no strict 'refs'; *$AUTOLOAD = sub { $val }; }
- goto &$AUTOLOAD;
-}
-
-# static-loading functions
-XSLoader::load('OSSP::uuid', $VERSION);
-
-1;
-
bgstack15