File Coverage

src/xh_perl_buffer.c
Criterion Covered Total %
statement 16 24 66.6
branch 1 6 16.6
condition n/a
subroutine n/a
pod n/a
total 17 30 56.6


line stmt bran cond sub pod time code
1             #include "xh_config.h"
2             #include "xh_core.h"
3              
4             void
5 45           xh_perl_buffer_init(xh_perl_buffer_t *buf, size_t size)
6             {
7 45           buf->scalar = newSV(size);
8 45           sv_setpv(buf->scalar, "");
9              
10 45           buf->start = buf->cur = XH_CHAR_CAST SvPVX(buf->scalar);
11 45           buf->end = buf->start + size;
12              
13             xh_log_debug2("buf: %p size: %lu", buf->start, size);
14 45           }
15              
16             void
17 6           xh_perl_buffer_grow(xh_perl_buffer_t *buf, size_t inc)
18             {
19             size_t size, use;
20              
21 6 50         if (inc <= (size_t) (buf->end - buf->cur))
22 6           return;
23              
24 0           size = buf->end - buf->start;
25 0           use = buf->cur - buf->start;
26              
27             xh_log_debug2("old buf: %p size: %lu", buf->start, size);
28              
29 0           size += inc < size ? size : inc;
30              
31 0           SvCUR_set(buf->scalar, use);
32 0 0         SvGROW(buf->scalar, size);
    0          
33              
34 0           buf->start = XH_CHAR_CAST SvPVX(buf->scalar);
35 0           buf->cur = buf->start + use;
36 0           buf->end = buf->start + size;
37              
38             xh_log_debug2("new buf: %p size: %lu", buf->start, size);
39             }
40              
41             void
42 6           xh_perl_buffer_sync(xh_perl_buffer_t *buf)
43             {
44 6           size_t use = buf->cur - buf->start;
45 6           size_t size = SvLEN(buf->scalar);
46              
47 6           buf->start = XH_CHAR_CAST SvPVX(buf->scalar);
48 6           buf->end = buf->start + size;
49 6           buf->cur = buf->start + use;
50              
51             xh_log_debug2("buf: %p size: %lu", buf->start, size);
52 6           }