File Coverage

Syslog.xs
Criterion Covered Total %
statement 11 13 84.6
branch 4 8 50.0
condition n/a
subroutine n/a
pod n/a
total 15 21 71.4


line stmt bran cond sub pod time code
1             /*
2             * Syslog.xs
3             *
4             * XS wrapper for the syslog(3) facility.
5             *
6             */
7              
8             #if defined(_WIN32)
9             # include
10             #endif
11              
12             #include "EXTERN.h"
13             #include "perl.h"
14             #include "XSUB.h"
15             #ifdef USE_PPPORT_H
16             # include "ppport.h"
17             #endif
18              
19             #ifndef HAVE_SYSLOG
20             #define HAVE_SYSLOG 1
21             #endif
22              
23             #if defined(_WIN32) && !defined(__CYGWIN__)
24             # undef HAVE_SYSLOG
25             # include "fallback/syslog.h"
26             #else
27             # if defined(I_SYSLOG) || PATCHLEVEL < 6
28             # include
29             # else
30             # undef HAVE_SYSLOG
31             # include "fallback/syslog.h"
32             # endif
33             #endif
34              
35             static SV *ident_svptr;
36              
37              
38             #ifndef LOG_FAC
39             #define LOG_FACMASK 0x03f8
40             #define LOG_FAC(p) (((p) & LOG_FACMASK) >> 3)
41             #endif
42              
43             #ifndef LOG_PRIMASK
44             #define LOG_PRIMASK 0x07
45             #endif
46              
47             #ifndef LOG_PRI
48             #define LOG_PRI(p) ((p) & LOG_PRIMASK)
49             #endif
50              
51             #ifndef LOG_MAKEPRI
52             #define LOG_MAKEPRI(fac, pri) (((fac) << 3) | (pri))
53             #endif
54              
55             #ifndef LOG_MASK
56             #define LOG_MASK(pri) (1 << (pri))
57             #endif
58              
59             #ifndef LOG_UPTO
60             #define LOG_UPTO(pri) ((1 << ((pri)+1)) - 1)
61             #endif
62              
63             #include "const-c.inc"
64              
65              
66             MODULE = Sys::Syslog PACKAGE = Sys::Syslog
67              
68             INCLUDE: const-xs.inc
69              
70             int
71             LOG_FAC(p)
72             INPUT:
73             int p
74              
75             int
76             LOG_PRI(p)
77             INPUT:
78             int p
79              
80             int
81             LOG_MAKEPRI(fac,pri)
82             INPUT:
83             int fac
84             int pri
85              
86             int
87             LOG_MASK(pri)
88             INPUT:
89             int pri
90              
91             int
92             LOG_UPTO(pri)
93             INPUT:
94             int pri
95              
96             #ifdef HAVE_SYSLOG
97              
98             void
99             openlog_xs(ident, option, facility)
100             INPUT:
101             SV* ident
102             int option
103             int facility
104             PREINIT:
105             STRLEN len;
106             char* ident_pv;
107             CODE:
108 4           ident_svptr = newSVsv(ident);
109 4 50         ident_pv = SvPV(ident_svptr, len);
110 4           openlog(ident_pv, option, facility);
111              
112             void
113             syslog_xs(priority, message)
114             INPUT:
115             int priority
116             const char * message
117             CODE:
118 5           syslog(priority, "%s", message);
119              
120             int
121             setlogmask_xs(mask)
122             INPUT:
123             int mask
124             CODE:
125 0           RETVAL = setlogmask(mask);
126             OUTPUT:
127             RETVAL
128              
129             void
130             closelog_xs()
131             PREINIT:
132             U32 refcnt;
133             CODE:
134 3 50         if (!ident_svptr)
135 0           return;
136 3           closelog();
137 3           refcnt = SvREFCNT(ident_svptr);
138 3 50         if (refcnt) {
139 3           SvREFCNT_dec(ident_svptr);
140 3 50         if (refcnt == 1)
141 3           ident_svptr = NULL;
142             }
143              
144             #else /* HAVE_SYSLOG */
145              
146             void
147             openlog_xs(ident, option, facility)
148             INPUT:
149             SV* ident
150             int option
151             int facility
152             CODE:
153              
154             void
155             syslog_xs(priority, message)
156             INPUT:
157             int priority
158             const char * message
159             CODE:
160              
161             int
162             setlogmask_xs(mask)
163             INPUT:
164             int mask
165             CODE:
166              
167             void
168             closelog_xs()
169             CODE:
170              
171             #endif /* HAVE_SYSLOG */