File Coverage

Snappy.xs
Criterion Covered Total %
statement 35 43 81.4
branch 28 54 51.8
condition n/a
subroutine n/a
pod n/a
total 63 97 64.9


line stmt bran cond sub pod time code
1             #define PERL_NO_GET_CONTEXT
2              
3             #include "EXTERN.h"
4             #include "perl.h"
5             #include "XSUB.h"
6              
7             #define NEED_sv_2pvbyte
8             #include "ppport.h"
9              
10             #include "src/csnappy_compress.c"
11             #include "src/csnappy_decompress.c"
12              
13             MODULE = Compress::Snappy PACKAGE = Compress::Snappy
14              
15             PROTOTYPES: ENABLE
16              
17             SV *
18             compress (sv)
19             SV *sv
20             PREINIT:
21             char *src, *dest;
22             STRLEN src_len;
23             uint32_t dest_len;
24             void *working_memory;
25             CODE:
26 1032 100         SvGETMAGIC(sv);
    50          
27 1032 100         if (SvROK(sv) && ! SvAMAGIC(sv)) {
    50          
    100          
    50          
28 1           sv = SvRV(sv);
29 1 50         SvGETMAGIC(sv);
    0          
30             }
31 1032 100         if (! SvOK(sv))
32 2           XSRETURN_NO;
33 1031           src = SvPVbyte(sv, src_len);
34 1031 100         if (! src_len)
35 1           XSRETURN_NO;
36 1030           dest_len = csnappy_max_compressed_length(src_len);
37 1030 50         if (! dest_len)
38 0           XSRETURN_UNDEF;
39 1030           Newx(working_memory, CSNAPPY_WORKMEM_BYTES, void *);
40 1030 50         if (! working_memory)
41 0           XSRETURN_UNDEF;
42 1030           RETVAL = newSV(dest_len);
43 1030           dest = SvPVX(RETVAL);
44 1030 50         if (! dest)
45 0           XSRETURN_UNDEF;
46 1030           csnappy_compress(src, src_len, dest, &dest_len, working_memory,
47             CSNAPPY_WORKMEM_BYTES_POWER_OF_TWO);
48 1030           Safefree(working_memory);
49 1030           SvCUR_set(RETVAL, dest_len);
50 1030           SvPOK_on(RETVAL);
51             OUTPUT:
52             RETVAL
53              
54             SV *
55             decompress (sv)
56             SV *sv
57             ALIAS:
58             uncompress = 1
59             PREINIT:
60             char *src, *dest;
61             STRLEN src_len;
62             uint32_t dest_len;
63             int header_len;
64             CODE:
65             PERL_UNUSED_VAR(ix); /* -W */
66 1028 100         SvGETMAGIC(sv);
    50          
67 1028 50         if (SvROK(sv) && ! SvAMAGIC(sv)) {
    0          
    0          
    0          
68 0           sv = SvRV(sv);
69 0 0         SvGETMAGIC(sv);
    0          
70             }
71 1028 50         if (! SvOK(sv))
72 2           XSRETURN_NO;
73 1028           src = SvPVbyte(sv, src_len);
74 1028 100         if (! src_len)
75 2           XSRETURN_NO;
76 1026           header_len = csnappy_get_uncompressed_length(src, src_len, &dest_len);
77 1026 50         if (0 > header_len || ! dest_len)
    50          
78 0           XSRETURN_UNDEF;
79 1026           RETVAL = newSV(dest_len);
80 1026           dest = SvPVX(RETVAL);
81 1026 50         if (! dest)
82 0           XSRETURN_UNDEF;
83 1026 50         if (csnappy_decompress_noheader(src + header_len, src_len - header_len,
84             dest, &dest_len))
85 0           XSRETURN_UNDEF;
86 1026           SvCUR_set(RETVAL, dest_len);
87 1026           SvPOK_on(RETVAL);
88             OUTPUT:
89             RETVAL