expcov report - Generated Sat Oct 15 21:39:18 2016

 Index  Statistics  Last 
Directory./server
Filenameutil_time.c
ModifiedWed Jul 12 12:38:44 2006

Pass Half Fail Excluded Total
Function
0
0.00%
5
100.00%
0
0.00%
5
100%
Expressions
0
0.00%
217
100.00%
0
0.00%
217
100%
Conditions
0
0.00%
0
0.00%
5
100.00%
0
0.00%
5
100%
MC/DC
0
0.00%
2
100.00%
0
0.00%
2
100%
Branches

if
0
0.00%
0
0.00%
5
100.00%
0
0.00%
5
100%
for
0
0.00%
0
0.00%
0
0.00%
0
0.00%
0
100%
while
0
0.00%
0
0.00%
0
0.00%
0
0.00%
0
100%
case
0
0.00%
0
0.00%
0
0.00%
0
0.00%
0
100%

1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements.  See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License.  You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include "util_time.h"
18
19/* Cache for exploded values of recent timestamps
20 */
21
22struct exploded_time_cache_element {
23    apr_int64_t t;
24    apr_time_exp_t xt;
25    apr_int64_t t_validate; /* please see comments in cached_explode() */
26};
27
28/* the "+ 1" is for the current second: */
29#define TIME_CACHE_SIZE (AP_TIME_RECENT_THRESHOLD + 1)
30
31/* Note that AP_TIME_RECENT_THRESHOLD is defined to
32 * be a power of two minus one in util_time.h, so that
33 * we can replace a modulo operation with a bitwise AND
34 * when hashing items into a cache of size
35 * AP_TIME_RECENT_THRESHOLD+1
36 */
37#define TIME_CACHE_MASK (AP_TIME_RECENT_THRESHOLD)
38
39static struct exploded_time_cache_element exploded_cache_localtime[TIME_CACHE_SIZE];
40static struct exploded_time_cache_element exploded_cache_gmt[TIME_CACHE_SIZE];
41
42
43static apr_status_t cached_explode : call=0
c
ached_explode(apr_time_exp_t *xt, apr_time_t t,
44                                   struct exploded_time_cache_element *cache,
45                                   int use_gmt)
46{
47    apr_int64_t seconds = apr_time_sec(t : server/util_time.c line=43 column=67
t
);
48    struct exploded_time_cache_element *cache_element =
49        &(cache : server/util_time.c line=44 column=72
c
ache[] : enter=0, leave=0
[
seconds : server/util_time.c line=47 column=17
s
econds & : pass=0
&
 TIME_CACHE_MASK]);
50    struct exploded_time_cache_element cache_element_snapshot;
51
52    /* The cache is implemented as a ring buffer.  Each second,
53     * it uses a different element in the buffer.  The timestamp
54     * in the element indicates whether the element contains the
55     * exploded time for the current second (vs the time
56     * 'now - AP_TIME_RECENT_THRESHOLD' seconds ago).  If the
57     * cached value is for the current time, we use it.  Otherwise,
58     * we compute the apr_time_exp_t and store it in this
59     * cache element. Note that the timestamp in the cache
60     * element is updated only after the exploded time.  Thus
61     * if two threads hit this cache element simultaneously
62     * at the start of a new second, they'll both explode the
63     * time and store it.  I.e., the writers will collide, but
64     * they'll be writing the same value.
65     */
66    if : true=0, false=0
i
f (cache_element : server/util_time.c line=48 column=41
c
ache_element-> : enter=0, leave=0
-
>t : server/util_time.c line=23 column=17
t
 >= : true=0, false=0
>
seconds : server/util_time.c line=47 column=17
s
econds) {
67        /* There is an intentional race condition in this design:
68         * in a multithreaded app, one thread might be reading
69         * from this cache_element to resolve a timestamp from
70         * TIME_CACHE_SIZE seconds ago at the same time that
71         * another thread is copying the exploded form of the
72         * current time into the same cache_element.  (I.e., the
73         * first thread might hit this element of the ring buffer
74         * just as the element is being recycled.)  This can
75         * also happen at the start of a new second, if a
76         * reader accesses the cache_element after a writer
77         * has updated cache_element.t but before the writer
78         * has finished updating the whole cache_element.
79         *
80         * Rather than trying to prevent this race condition
81         * with locks, we allow it to happen and then detect
82         * and correct it.  The detection works like this:
83         *   Step 1: Take a "snapshot" of the cache element by
84         *           copying it into a temporary buffer.
85         *   Step 2: Check whether the snapshot contains consistent
86         *           data: the timestamps at the start and end of
87         *           the cache_element should both match the 'seconds'
88         *           value that we computed from the input time.
89         *           If these three don't match, then the snapshot
90         *           shows the cache_element in the middle of an
91         *           update, and its contents are invalid.
92         *   Step 3: If the snapshot is valid, use it.  Otherwise,
93         *           just give up on the cache and explode the
94         *           input time.
95         */
96        memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(&cache_element_snapshot : server/util_time.c line=50 column=40
c
ache_element_snapshot, cache_element : server/util_time.c line=48 column=41
c
ache_element,
97               sizeof(struct exploded_time_cache_element));
98        if : true=0, false=0
i
f ((seconds : server/util_time.c line=47 column=17
s
econds != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
cache_element_snapshot : server/util_time.c line=50 column=40
c
ache_element_snapshot.t : server/util_time.c line=23 column=17
t
|| : true=0, false=0
|
|
99            (seconds : server/util_time.c line=47 column=17
s
econds != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
cache_element_snapshot : server/util_time.c line=50 column=40
c
ache_element_snapshot.t_validate : server/util_time.c line=25 column=17
t
_validate)) {
100            /* Invalid snapshot */
101            if : true=0, false=0
i
f (use_gmt : server/util_time.c line=45 column=40
u
se_gmt) {
102                return : pass=0
r
eturn apr_time_exp_gmt : enter=0, leave=0

apr_time_exp_gmt : /usr/include/apr-1/apr_time.h line=144 column=27
a
pr_time_exp_gmt(xt : server/util_time.c line=43 column=52
x
t, t : server/util_time.c line=43 column=67
t
);
103            }
104            else {
105                return : pass=0
r
eturn apr_time_exp_lt : enter=0, leave=0

apr_time_exp_lt : /usr/include/apr-1/apr_time.h line=152 column=27
a
pr_time_exp_lt(xt : server/util_time.c line=43 column=52
x
t, t : server/util_time.c line=43 column=67
t
);
106            }
107        }
108        else {
109            /* Valid snapshot */
110            memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(xt : server/util_time.c line=43 column=52
x
t, &(cache_element_snapshot : server/util_time.c line=50 column=40
c
ache_element_snapshot.xt : server/util_time.c line=24 column=20
x
t),
111                   sizeof(apr_time_exp_t));
112        }
113    }
114    else {
115        apr_status_t r;
116        if : true=0, false=0
i
f (use_gmt : server/util_time.c line=45 column=40
u
se_gmt) {
117            r : server/util_time.c line=115 column=22
r
 = : pass=0
=
 apr_time_exp_gmt : enter=0, leave=0

apr_time_exp_gmt : /usr/include/apr-1/apr_time.h line=144 column=27
a
pr_time_exp_gmt(xt : server/util_time.c line=43 column=52
x
t, t : server/util_time.c line=43 column=67
t
);
118        }
119        else {
120            r : server/util_time.c line=115 column=22
r
 = : pass=0
=
 apr_time_exp_lt : enter=0, leave=0

apr_time_exp_lt : /usr/include/apr-1/apr_time.h line=152 column=27
a
pr_time_exp_lt(xt : server/util_time.c line=43 column=52
x
t, t : server/util_time.c line=43 column=67
t
);
121        }
122        if : true=0, false=0
i
f (r : server/util_time.c line=115 column=22
r
 != : true=0, false=0
!
= APR_SUCCESS) {
123            return : pass=0
r
eturn r : server/util_time.c line=115 column=22
r
;
124        }
125        cache_element : server/util_time.c line=48 column=41
c
ache_element-> : enter=0, leave=0
-
>t : server/util_time.c line=23 column=17
t
 = : enter=0, leave=0
=
 seconds : server/util_time.c line=47 column=17
s
econds;
126        memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(&(cache_element : server/util_time.c line=48 column=41
c
ache_element-> : enter=0, leave=0
-
>xt : server/util_time.c line=24 column=20
x
t), xt : server/util_time.c line=43 column=52
x
t, sizeof(apr_time_exp_t));
127        cache_element : server/util_time.c line=48 column=41
c
ache_element-> : enter=0, leave=0
-
>t_validate : server/util_time.c line=25 column=17
t
_validate = : enter=0, leave=0
=
 seconds : server/util_time.c line=47 column=17
s
econds;
128    }
129    xt : server/util_time.c line=43 column=52
x
t-> : enter=0, leave=0
-
>tm_usec : /usr/include/apr-1/apr_time.h line=97 column=17 tm_usec = : enter=0, leave=0
=
 (int)apr_time_usec(t : server/util_time.c line=43 column=67
t
);
130    return : pass=0
r
eturn APR_SUCCESS;
131}
132
133
134AP_DECLARE(apr_status_t) ap_explode_recent_localtime : call=0
a
p_explode_recent_localtime(apr_time_exp_t * tm,
135                                                     apr_time_t t)
136{
137    return : pass=0
r
eturn cached_explode : enter=0, leave=0

cached_explode : server/util_time.c line=43 column=21
c
ached_explode(tm : server/util_time.c line=134 column=71
t
m, t : server/util_time.c line=135 column=65
t
exploded_cache_localtime : server/util_time.c line=39 column=43
e
xploded_cache_localtime, 0);
138}
139
140AP_DECLARE(apr_status_t) ap_explode_recent_gmt : call=0
a
p_explode_recent_gmt(apr_time_exp_t * tm,
141                                               apr_time_t t)
142{
143    return : pass=0
r
eturn cached_explode : enter=0, leave=0

cached_explode : server/util_time.c line=43 column=21
c
ached_explode(tm : server/util_time.c line=140 column=65
t
m, t : server/util_time.c line=141 column=59
t
exploded_cache_gmt : server/util_time.c line=40 column=43
e
xploded_cache_gmt, 1);
144}
145
146AP_DECLARE(apr_status_t) ap_recent_ctime : call=0
a
p_recent_ctime(char *date_str, apr_time_t t)
147{
148    /* ### This code is a clone of apr_ctime(), except that it
149     * uses ap_explode_recent_localtime() instead of apr_time_exp_lt().
150     */
151    apr_time_exp_t xt;
152    const char *s;
153    int real_year;
154
155    /* example: "Wed Jun 30 21:49:08 1993" */
156    /*           123456789012345678901234  */
157
158    ap_explode_recent_localtime : enter=0, leave=0

ap_explode_recent_localtime : server/util_time.c line=134 column=26
a
p_explode_recent_localtime(&xt : server/util_time.c line=151 column=20
x
t, t : server/util_time.c line=146 column=69
t
);
159    s : server/util_time.c line=152 column=17
s
 = : pass=0
=
 &apr_day_snames : /usr/include/apr-1/apr_time.h line=42 column=36 apr_day_snames[] : enter=0, leave=0
[
xt : server/util_time.c line=151 column=20
x
t.tm_wday : /usr/include/apr-1/apr_time.h line=111 column=17 tm_wday][] : enter=0, leave=0
[
0];
160    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=152 column=17
s
++ : pass=0
+
+;
161    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=152 column=17
s
++ : pass=0
+
+;
162    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=152 column=17
s
++ : pass=0
+
+;
163    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
164    s : server/util_time.c line=152 column=17
s
 = : pass=0
=
 &apr_month_snames : /usr/include/apr-1/apr_time.h line=40 column=36 apr_month_snames[] : enter=0, leave=0
[
xt : server/util_time.c line=151 column=20
x
t.tm_mon : /usr/include/apr-1/apr_time.h line=107 column=17 tm_mon][] : enter=0, leave=0
[
0];
165    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=152 column=17
s
++ : pass=0
+
+;
166    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=152 column=17
s
++ : pass=0
+
+;
167    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=152 column=17
s
++ : pass=0
+
+;
168    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
169    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=151 column=20
x
t.tm_mday : /usr/include/apr-1/apr_time.h line=105 column=17 tm_mday / : pass=0
/
 10 + : pass=0
+
 '0';
170    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=151 column=20
x
t.tm_mday : /usr/include/apr-1/apr_time.h line=105 column=17 tm_mday % : pass=0
%
 10 + : pass=0
+
 '0';
171    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
172    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=151 column=20
x
t.tm_hour : /usr/include/apr-1/apr_time.h line=103 column=17 tm_hour / : pass=0
/
 10 + : pass=0
+
 '0';
173    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=151 column=20
x
t.tm_hour : /usr/include/apr-1/apr_time.h line=103 column=17 tm_hour % : pass=0
%
 10 + : pass=0
+
 '0';
174    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ':';
175    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=151 column=20
x
t.tm_min : /usr/include/apr-1/apr_time.h line=101 column=17 tm_min / : pass=0
/
 10 + : pass=0
+
 '0';
176    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=151 column=20
x
t.tm_min : /usr/include/apr-1/apr_time.h line=101 column=17 tm_min % : pass=0
%
 10 + : pass=0
+
 '0';
177    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ':';
178    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=151 column=20
x
t.tm_sec : /usr/include/apr-1/apr_time.h line=99 column=17 tm_sec / : pass=0
/
 10 + : pass=0
+
 '0';
179    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=151 column=20
x
t.tm_sec : /usr/include/apr-1/apr_time.h line=99 column=17 tm_sec % : pass=0
%
 10 + : pass=0
+
 '0';
180    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
181    real_year : server/util_time.c line=153 column=9
r
eal_year = : pass=0
=
 1900 + : pass=0
+
 xt : server/util_time.c line=151 column=20
x
t.tm_year : /usr/include/apr-1/apr_time.h line=109 column=17 tm_year;
182    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 real_year : server/util_time.c line=153 column=9
r
eal_year / : pass=0
/
 1000 + : pass=0
+
 '0';
183    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 real_year : server/util_time.c line=153 column=9
r
eal_year % : pass=0
%
 1000 / : pass=0
/
 100 + : pass=0
+
 '0';
184    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 real_year : server/util_time.c line=153 column=9
r
eal_year % : pass=0
%
 100 / : pass=0
/
 10 + : pass=0
+
 '0';
185    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 real_year : server/util_time.c line=153 column=9
r
eal_year % : pass=0
%
 10 + : pass=0
+
 '0';
186    *date_str : server/util_time.c line=146 column=48
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 0;
187
188    return : pass=0
r
eturn APR_SUCCESS;
189}
190
191AP_DECLARE(apr_status_t) ap_recent_rfc822_date : call=0
a
p_recent_rfc822_date(char *date_str, apr_time_t t)
192{
193    /* ### This code is a clone of apr_rfc822_date(), except that it
194     * uses ap_explode_recent_gmt() instead of apr_time_exp_gmt().
195     */
196    apr_time_exp_t xt;
197    const char *s;
198    int real_year;
199
200    ap_explode_recent_gmt : enter=0, leave=0

ap_explode_recent_gmt : server/util_time.c line=140 column=26
a
p_explode_recent_gmt(&xt : server/util_time.c line=196 column=20
x
t, t : server/util_time.c line=191 column=75
t
);
201
202    /* example: "Sat, 08 Jan 2000 18:31:41 GMT" */
203    /*           12345678901234567890123456789  */
204
205    s : server/util_time.c line=197 column=17
s
 = : pass=0
=
 &apr_day_snames : /usr/include/apr-1/apr_time.h line=42 column=36 apr_day_snames[] : enter=0, leave=0
[
xt : server/util_time.c line=196 column=20
x
t.tm_wday : /usr/include/apr-1/apr_time.h line=111 column=17 tm_wday][] : enter=0, leave=0
[
0];
206    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=197 column=17
s
++ : pass=0
+
+;
207    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=197 column=17
s
++ : pass=0
+
+;
208    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=197 column=17
s
++ : pass=0
+
+;
209    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ',';
210    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
211    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=196 column=20
x
t.tm_mday : /usr/include/apr-1/apr_time.h line=105 column=17 tm_mday / : pass=0
/
 10 + : pass=0
+
 '0';
212    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=196 column=20
x
t.tm_mday : /usr/include/apr-1/apr_time.h line=105 column=17 tm_mday % : pass=0
%
 10 + : pass=0
+
 '0';
213    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
214    s : server/util_time.c line=197 column=17
s
 = : pass=0
=
 &apr_month_snames : /usr/include/apr-1/apr_time.h line=40 column=36 apr_month_snames[] : enter=0, leave=0
[
xt : server/util_time.c line=196 column=20
x
t.tm_mon : /usr/include/apr-1/apr_time.h line=107 column=17 tm_mon][] : enter=0, leave=0
[
0];
215    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=197 column=17
s
++ : pass=0
+
+;
216    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=197 column=17
s
++ : pass=0
+
+;
217    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util_time.c line=197 column=17
s
++ : pass=0
+
+;
218    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
219    real_year : server/util_time.c line=198 column=9
r
eal_year = : pass=0
=
 1900 + : pass=0
+
 xt : server/util_time.c line=196 column=20
x
t.tm_year : /usr/include/apr-1/apr_time.h line=109 column=17 tm_year;
220    /* This routine isn't y10k ready. */
221    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 real_year : server/util_time.c line=198 column=9
r
eal_year / : pass=0
/
 1000 + : pass=0
+
 '0';
222    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 real_year : server/util_time.c line=198 column=9
r
eal_year % : pass=0
%
 1000 / : pass=0
/
 100 + : pass=0
+
 '0';
223    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 real_year : server/util_time.c line=198 column=9
r
eal_year % : pass=0
%
 100 / : pass=0
/
 10 + : pass=0
+
 '0';
224    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 real_year : server/util_time.c line=198 column=9
r
eal_year % : pass=0
%
 10 + : pass=0
+
 '0';
225    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
226    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=196 column=20
x
t.tm_hour : /usr/include/apr-1/apr_time.h line=103 column=17 tm_hour / : pass=0
/
 10 + : pass=0
+
 '0';
227    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=196 column=20
x
t.tm_hour : /usr/include/apr-1/apr_time.h line=103 column=17 tm_hour % : pass=0
%
 10 + : pass=0
+
 '0';
228    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ':';
229    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=196 column=20
x
t.tm_min : /usr/include/apr-1/apr_time.h line=101 column=17 tm_min / : pass=0
/
 10 + : pass=0
+
 '0';
230    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=196 column=20
x
t.tm_min : /usr/include/apr-1/apr_time.h line=101 column=17 tm_min % : pass=0
%
 10 + : pass=0
+
 '0';
231    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ':';
232    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=196 column=20
x
t.tm_sec : /usr/include/apr-1/apr_time.h line=99 column=17 tm_sec / : pass=0
/
 10 + : pass=0
+
 '0';
233    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 xt : server/util_time.c line=196 column=20
x
t.tm_sec : /usr/include/apr-1/apr_time.h line=99 column=17 tm_sec % : pass=0
%
 10 + : pass=0
+
 '0';
234    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
235    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 'G';
236    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 'M';
237    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 'T';
238    *date_str : server/util_time.c line=191 column=54
d
ate_str++ : pass=0
+
= : enter=0, leave=0
=
 0;
239    return : pass=0
r
eturn APR_SUCCESS;
240}
241[EOF]


Generated by expcov