File Coverage

blib/lib/ExtUtils/Typemaps/SigSet.pm
Criterion Covered Total %
statement 9 13 69.2
branch n/a
condition n/a
subroutine 3 4 75.0
pod 1 1 100.0
total 13 18 72.2


line stmt bran cond sub pod time code
1             package ExtUtils::Typemaps::SigSet;
2             $ExtUtils::Typemaps::SigSet::VERSION = '0.009';
3 2     2   286448 use strict;
  2         4  
  2         79  
4 2     2   11 use warnings;
  2         3  
  2         117  
5              
6 2     2   15 use parent 'ExtUtils::Typemaps';
  2         3  
  2         12  
7              
8             sub new {
9 0     0 1   my $class = shift;
10 0           my $self = $class->SUPER::new(@_);
11              
12 0           $self->add_string(string => <<'END');
13             TYPEMAP
14             sigset_t* T_SIGSET
15              
16             INPUT
17             T_SIGSET
18             if (SvROK($arg)) {
19             if (!sv_derived_from($arg, \"POSIX::SigSet\")) {
20             Perl_croak(aTHX_ \"$var is not of type POSIX::SigSet\");
21             } else {
22             \x{23}if PERL_VERSION > 15 || PERL_VERSION == 15 && PERL_SUBVERSION > 2
23             $var = (sigset_t *) SvPV_nolen(SvRV($arg));
24             \x{23}else
25             IV tmp = SvIV((SV*)SvRV($arg));
26             $var = INT2PTR(sigset_t*, tmp);
27             \x{23}endif
28             }
29             } else if (SvOK($arg)) {
30             int signo = (SvIOK($arg) || looks_like_number($arg)) && SvIV($arg) ? SvIV($arg) : whichsig(SvPV_nolen($arg));
31             SV* buffer = sv_2mortal(newSVpvn(\"\", 0));
32             sv_grow(buffer, sizeof(sigset_t));
33             $var = (sigset_t*)SvPV_nolen(buffer);
34             sigemptyset($var);
35             sigaddset($var, signo);
36             } else {
37             $var = NULL;
38             }
39             END
40              
41 0           return $self;
42             }
43              
44             #ABSTRACT: A typemap for dealing with POSIX::SigSet
45              
46             __END__