line |
true |
false |
branch |
29
|
67 |
0 |
if ( sv && SvPOK(sv) ) |
|
67 |
0 |
if ( sv && SvPOK(sv) ) |
30
|
67 |
0 |
path = SvPV_nolen( sv ); |
50
|
0 |
100 |
if ( level == LOG_DISABLE ) /* to move earlier */ |
54
|
63 |
37 |
if ( mylogger ) { /* we got a mylogger pointer */ |
55
|
63 |
0 |
if ( mylogger->filepath > 0 && strlen(mylogger->filepath) ) |
|
33 |
30 |
if ( mylogger->filepath > 0 && strlen(mylogger->filepath) ) |
60
|
50 |
13 |
if ( mylogger->pid && mylogger->pid != pid ) { |
|
1 |
49 |
if ( mylogger->pid && mylogger->pid != pid ) { |
61
|
1 |
0 |
if (mylogger->fhandle) fclose(mylogger->fhandle); |
64
|
14 |
49 |
if ( ! mylogger->fhandle ) { |
66
|
0 |
14 |
if ( (fhandle = fopen( path, "a" )) == NULL ) /* open in append mode */ |
70
|
14 |
0 |
ACQUIRE_LOCK_ONCE(fhandle); /* get a lock before moving to the end */ |
77
|
0 |
37 |
if ( (fhandle = fopen( path, "a" )) == NULL ) /* open in append mode */ |
79
|
37 |
0 |
ACQUIRE_LOCK_ONCE(fhandle); /* get a lock before moving to the end */ |
82
|
100 |
0 |
if ( fhandle ) { |
85
|
58 |
42 |
if (num_args) va_start(args, num_args); |
86
|
49 |
51 |
ACQUIRE_LOCK_ONCE(fhandle); |
89
|
63 |
37 |
if ( mylogger && mylogger->use_color ) { |
|
56 |
7 |
if ( mylogger && mylogger->use_color ) { |
90
|
56 |
0 |
fprintf( fhandle, "[%s %s%02d%02d] %u %s%-5s%s: ", |
99
|
44 |
0 |
fprintf( fhandle, "[%s %s%02d%02d] %u %-5s: ", |
110
|
100 |
0 |
if ( fmt && (len=strlen(fmt)) ) { |
|
58 |
42 |
if ( fmt && (len=strlen(fmt)) ) { |
111
|
0 |
58 |
if (num_args == 0) /* no need to use sprintf when not needed */ |
117
|
58 |
42 |
if ( !len || fmt[len-1] != '\n') |
|
57 |
1 |
if ( !len || fmt[len-1] != '\n') |
120
|
63 |
37 |
if (has_logger_object) fflush(fhandle); /* otherwise we are going to close the ffhandle just after */ |
121
|
58 |
42 |
if (num_args) va_end(args); |
123
|
100 |
0 |
RELEASE_LOCK(fhandle); /* only release if acquired before */ |
124
|
37 |
63 |
if ( !has_logger_object ) fclose( fhandle ); |
146
|
13 |
4 |
if( items > 1 ) { /* could also probably use va_start, va_list, ... */ |
148
|
13 |
0 |
if ( SvROK(extra) && SvTYPE(SvRV(extra)) == SVt_PVHV ) |
|
13 |
0 |
if ( SvROK(extra) && SvTYPE(SvRV(extra)) == SVt_PVHV ) |
153
|
13 |
4 |
if ( opts ) { |
154
|
3 |
10 |
if ( (svp = hv_fetchs(opts, "color", FALSE)) ) { |
155
|
0 |
3 |
if (!SvIOK(*svp)) croak("invalid color option value: should be a boolean 1/0"); |
156
|
3 |
0 |
mylogger->use_color = (bool) SvIV(*svp); |
158
|
6 |
7 |
if ( (svp = hv_fetchs(opts, "level", FALSE)) ) { |
159
|
0 |
6 |
if (!SvIOK(*svp)) croak("invalid log level: should be one integer"); |
160
|
6 |
0 |
mylogger->level = (logLevel) SvIV(*svp); |
162
|
11 |
2 |
if ( (svp = hv_fetchs(opts, "logfile", FALSE)) || (svp = hv_fetchs(opts, "path", FALSE)) ) { |
|
3 |
8 |
if ( (svp = hv_fetchs(opts, "logfile", FALSE)) || (svp = hv_fetchs(opts, "path", FALSE)) ) { |
165
|
0 |
5 |
if (!SvPOK(*svp)) croak("invalid logfile path: must be a string"); |
166
|
5 |
0 |
src = SvPV(*svp, len); |
167
|
0 |
5 |
if (len >= sizeof(mylogger->filepath)) |
224
|
100 |
15 |
if ( items && SvROK(ST(0)) && SvOBJECT(SvRV(ST(0))) ) { /* check if self is an object */ |
|
78 |
22 |
if ( items && SvROK(ST(0)) && SvOBJECT(SvRV(ST(0))) ) { /* check if self is an object */ |
|
78 |
0 |
if ( items && SvROK(ST(0)) && SvOBJECT(SvRV(ST(0))) ) { /* check if self is an object */ |
227
|
78 |
0 |
mylogger = INT2PTR(MyLogger*, SvIV(SvRV(self))); |
229
|
10 |
68 |
if ( level < mylogger->level ) |
232
|
105 |
10 |
if (dolog) { |
234
|
42 |
63 |
if ( items < (1 + args_start_at) ) { /* */ |
238
|
58 |
5 |
} else if ( items <= ( 11 + args_start_at ) ) { /* set a cap on the maximum of item we can use: 10 arguments + 1 format + 1 for self */ |
244
|
125 |
58 |
for ( i = args_start_at ; i < items ; ++i ) { |
246
|
0 |
125 |
if ( !SvOK(sv) ) |
|
0 |
0 |
if ( !SvOK(sv) ) |
|
0 |
0 |
if ( !SvOK(sv) ) |
250
|
58 |
67 |
if ( i == args_start_at ) { /* the first entry shoulkd be the format */ |
251
|
1 |
57 |
if ( !SvPOK(sv) ) { /* maybe upgrade to a PV */ |
252
|
1 |
0 |
if ( SvIOK(sv) ) |
253
|
1 |
0 |
SvUPGRADE(sv, SVt_PVIV); |
257
|
57 |
1 |
fmt = SvPV_nolen( sv ); |
260
|
61 |
6 |
if ( SvIOK(sv) ) { /* SvTYPE(sv) == SVt_IV */ |
261
|
61 |
0 |
targs[ix].ival = SvIV(sv); |
262
|
1 |
5 |
} else if ( SvNOK(sv) ) { // not working for now |
265
|
1 |
0 |
targs[ix].fval = SvNV(sv); |
267
|
5 |
0 |
targs[ix].sval = SvPV_nolen(sv); |
338
|
24 |
86 |
if ( should_die ) /* maybe fatal needs to exit */ |
355
|
6 |
0 |
mylogger = INT2PTR(MyLogger*, SvIV(SvRV(self))); |
383
|
1 |
0 |
mylogger = INT2PTR(MyLogger*, SvIV(SvRV(self))); |
384
|
1 |
0 |
switch (ix) { |
386
|
0 |
1 |
if ( !SvIOK(value) ) croak("invalid level: must be interger."); |
387
|
1 |
0 |
mylogger->level = SvIV(value); |
403
|
17 |
0 |
if ( self && SvROK(self) && SvOBJECT(SvRV(self)) ) { /* check if self is an object */ |
|
17 |
0 |
if ( self && SvROK(self) && SvOBJECT(SvRV(self)) ) { /* check if self is an object */ |
|
17 |
0 |
if ( self && SvROK(self) && SvOBJECT(SvRV(self)) ) { /* check if self is an object */ |
404
|
17 |
0 |
mylogger = INT2PTR(MyLogger*, SvIV(SvRV(self))); |
406
|
13 |
4 |
if ( mylogger->fhandle ) |
411
|
17 |
0 |
if (PL_markstack_ptr != temp) { |
433
|
7 |
1 |
if ( ! SvPOK(sv) ) { /* preserve any value set before loading the module */ |