File Coverage

src/xh_param.c
Criterion Covered Total %
statement 32 47 68.0
branch 24 118 20.3
condition n/a
subroutine n/a
pod n/a
total 56 165 33.9


line stmt bran cond sub pod time code
1             #include "xh_config.h"
2             #include "xh_core.h"
3              
4             void
5 10           xh_param_assign_string(xh_char_t param[], SV *value)
6             {
7             xh_char_t *str;
8              
9 10 50         if ( SvOK(value) ) {
    0          
    0          
10 10 50         str = XH_CHAR_CAST SvPV_nolen(value);
11 10           xh_str_copy(param, str, XH_PARAM_LEN);
12             }
13             else {
14 0           *param = 0;
15             }
16 10           }
17              
18             void
19 3           xh_param_assign_int(xh_char_t *name, xh_int_t *param, SV *value)
20             {
21 3 50         if ( !SvOK(value) )
    0          
    0          
22 0           croak("Parameter '%s' is undefined", name);
23              
24 3 50         *param = SvIV(value);
25 3           }
26              
27             xh_bool_t
28 26           xh_param_assign_bool(SV *value)
29             {
30 26 50         if ( SvTRUE(value) )
    50          
    50          
    0          
    0          
    50          
    0          
    0          
    0          
    0          
    50          
    50          
    100          
    50          
    0          
    100          
31 24           return TRUE;
32              
33 2           return FALSE;
34             }
35              
36             void
37 59           xh_param_assign_pattern(xh_pattern_t *patt, SV *value)
38             {
39 59 50         if (patt->expr != NULL) {
40 0           SvREFCNT_dec(patt->expr);
41 0           patt->expr = NULL;
42             }
43              
44 59 50         if ( SvOK(value) && SvTRUE(value) ) {
    50          
    50          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
    0          
45 0           patt->enable = TRUE;
46 0 0         if ( SvRXOK(value) || (SvROK(value) && SvTYPE(SvRV(value)) == SVt_PVAV) ) {
    0          
    0          
47 0           patt->always = FALSE;
48 0           patt->expr = value;
49 0           SvREFCNT_inc(value);
50             }
51             else {
52 0           patt->always = TRUE;
53             }
54             }
55             else {
56 59           patt->enable = FALSE;
57             }
58 59           }
59              
60             void
61 6           xh_param_assign_filter(xh_pattern_t *patt, SV *value)
62             {
63 6 50         if (patt->expr != NULL) {
64 0           SvREFCNT_dec(patt->expr);
65 0           patt->expr = NULL;
66             }
67              
68 6 50         if ( SvOK(value) ) {
    0          
    0          
69 6           patt->enable = TRUE;
70 6           patt->always = FALSE;
71 6           patt->expr = value;
72 6           SvREFCNT_inc(value);
73             }
74             else {
75 0           patt->enable = FALSE;
76             }
77 6           }
78              
79             SV *
80 1           xh_param_assign_cb(char *name, SV *value)
81             {
82 1 50         if ( !SvOK(value) )
    0          
    0          
83 0           return NULL;
84              
85 1 50         if ( !SvROK(value) || SvTYPE(SvRV(value)) != SVt_PVCV)
    50          
86 0           croak("Parameter '%s' is not CODE reference", name);
87              
88 1           value = SvRV(value);
89              
90 1           SvREFCNT_inc(value);
91              
92 1           return value;
93             }