OpenCoverage

time_rz.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/lib/time_rz.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* Time zone functions such as tzalloc and localtime_rz-
2-
3 Copyright 2015-2018 Free Software Foundation, Inc.-
4-
5 This program is free software; you can redistribute it and/or modify-
6 it under the terms of the GNU General Public License as published by-
7 the Free Software Foundation; either version 3, or (at your option)-
8 any later version.-
9-
10 This program is distributed in the hope that it will be useful,-
11 but WITHOUT ANY WARRANTY; without even the implied warranty of-
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
13 GNU General Public License for more details.-
14-
15 You should have received a copy of the GNU General Public License along-
16 with this program; if not, see <https://www.gnu.org/licenses/>. */-
17-
18/* Written by Paul Eggert. */-
19-
20/* Although this module is not thread-safe, any races should be fairly-
21 rare and reasonably benign. For complete thread-safety, use a C-
22 library with a working timezone_t type, so that this module is not-
23 needed. */-
24-
25#include <config.h>-
26-
27#include <time.h>-
28-
29#include <errno.h>-
30#include <limits.h>-
31#include <stdbool.h>-
32#include <stddef.h>-
33#include <stdlib.h>-
34#include <string.h>-
35-
36#include "flexmember.h"-
37#include "time-internal.h"-
38-
39#ifndef SIZE_MAX-
40# define SIZE_MAX ((size_t) -1)-
41#endif-
42-
43/* The approximate size to use for small allocation requests. This is-
44 the largest "small" request for the GNU C library malloc. */-
45enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 };-
46-
47/* Minimum size of the ABBRS member of struct tm_zone. ABBRS is larger-
48 only in the unlikely case where an abbreviation longer than this is-
49 used. */-
50enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) };-
51-
52/* Magic cookie timezone_t value, for local time. It differs from-
53 NULL and from all other timezone_t values. Only the address-
54 matters; the pointer is never dereferenced. */-
55static timezone_t const local_tz = (timezone_t) 1;-
56-
57#if HAVE_TM_ZONE || HAVE_TZNAME-
58-
59/* Return true if the values A and B differ according to the rules for-
60 tm_isdst: A and B differ if one is zero and the other positive. */-
61static bool-
62isdst_differ (int a, int b)-
63{-
64 return !a != !b && 0 <= a && 0 <= b;
never executed: return !a != !b && 0 <= a && 0 <= b;
0
65}-
66-
67/* Return true if A and B are equal. */-
68static int-
69equal_tm (const struct tm *a, const struct tm *b)-
70{-
71 return ! ((a->tm_sec ^ b->tm_sec)
never executed: return ! ((a->tm_sec ^ b->tm_sec) | (a->tm_min ^ b->tm_min) | (a->tm_hour ^ b->tm_hour) | (a->tm_mday ^ b->tm_mday) | (a->tm_mon ^ b->tm_mon) | (a->tm_year ^ b->tm_year) | isdst_differ (a->tm_isdst, b->tm_isdst));
0
72 | (a->tm_min ^ b->tm_min)
never executed: return ! ((a->tm_sec ^ b->tm_sec) | (a->tm_min ^ b->tm_min) | (a->tm_hour ^ b->tm_hour) | (a->tm_mday ^ b->tm_mday) | (a->tm_mon ^ b->tm_mon) | (a->tm_year ^ b->tm_year) | isdst_differ (a->tm_isdst, b->tm_isdst));
0
73 | (a->tm_hour ^ b->tm_hour)
never executed: return ! ((a->tm_sec ^ b->tm_sec) | (a->tm_min ^ b->tm_min) | (a->tm_hour ^ b->tm_hour) | (a->tm_mday ^ b->tm_mday) | (a->tm_mon ^ b->tm_mon) | (a->tm_year ^ b->tm_year) | isdst_differ (a->tm_isdst, b->tm_isdst));
0
74 | (a->tm_mday ^ b->tm_mday)
never executed: return ! ((a->tm_sec ^ b->tm_sec) | (a->tm_min ^ b->tm_min) | (a->tm_hour ^ b->tm_hour) | (a->tm_mday ^ b->tm_mday) | (a->tm_mon ^ b->tm_mon) | (a->tm_year ^ b->tm_year) | isdst_differ (a->tm_isdst, b->tm_isdst));
0
75 | (a->tm_mon ^ b->tm_mon)
never executed: return ! ((a->tm_sec ^ b->tm_sec) | (a->tm_min ^ b->tm_min) | (a->tm_hour ^ b->tm_hour) | (a->tm_mday ^ b->tm_mday) | (a->tm_mon ^ b->tm_mon) | (a->tm_year ^ b->tm_year) | isdst_differ (a->tm_isdst, b->tm_isdst));
0
76 | (a->tm_year ^ b->tm_year)
never executed: return ! ((a->tm_sec ^ b->tm_sec) | (a->tm_min ^ b->tm_min) | (a->tm_hour ^ b->tm_hour) | (a->tm_mday ^ b->tm_mday) | (a->tm_mon ^ b->tm_mon) | (a->tm_year ^ b->tm_year) | isdst_differ (a->tm_isdst, b->tm_isdst));
0
77 | isdst_differ (a->tm_isdst, b->tm_isdst));
never executed: return ! ((a->tm_sec ^ b->tm_sec) | (a->tm_min ^ b->tm_min) | (a->tm_hour ^ b->tm_hour) | (a->tm_mday ^ b->tm_mday) | (a->tm_mon ^ b->tm_mon) | (a->tm_year ^ b->tm_year) | isdst_differ (a->tm_isdst, b->tm_isdst));
0
78}-
79-
80#endif-
81-
82/* Copy to ABBRS the abbreviation at ABBR with size ABBR_SIZE (this-
83 includes its trailing null byte). Append an extra null byte to-
84 mark the end of ABBRS. */-
85static void-
86extend_abbrs (char *abbrs, char const *abbr, size_t abbr_size)-
87{-
88 memcpy (abbrs, abbr, abbr_size);-
89 abbrs[abbr_size] = '\0';-
90}
executed 2942 times by 7 tests: end of block
Executed by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
2942
91-
92/* Return a newly allocated time zone for NAME, or NULL on failure.-
93 A null NAME stands for wall clock time (which is like unset TZ). */-
94timezone_t-
95tzalloc (char const *name)-
96{-
97 size_t name_size = name ? strlen (name) + 1 : 0;
nameDescription
TRUEevaluated 280 times by 5 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • touch
FALSEevaluated 2666 times by 8 tests
Evaluated by:
  • date
  • dir
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
280-2666
98 size_t abbr_size = name_size < ABBR_SIZE_MIN ? ABBR_SIZE_MIN : name_size + 1;
name_size < ABBR_SIZE_MINDescription
TRUEevaluated 2944 times by 8 tests
Evaluated by:
  • date
  • dir
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEevaluated 2 times by 1 test
Evaluated by:
  • date
2-2944
99 timezone_t tz = malloc (FLEXSIZEOF (struct tm_zone, abbrs, abbr_size));-
100 if (tz)
tzDescription
TRUEevaluated 2946 times by 8 tests
Evaluated by:
  • date
  • dir
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEnever evaluated
0-2946
101 {-
102 tz->next = NULL;-
103#if HAVE_TZNAME && !HAVE_TM_ZONE-
104 tz->tzname_copy[0] = tz->tzname_copy[1] = NULL;-
105#endif-
106 tz->tz_is_set = !!name;-
107 tz->abbrs[0] = '\0';-
108 if (name)
nameDescription
TRUEevaluated 280 times by 5 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • touch
FALSEevaluated 2666 times by 8 tests
Evaluated by:
  • date
  • dir
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
280-2666
109 extend_abbrs (tz->abbrs, name, name_size);
executed 280 times by 5 tests: extend_abbrs (tz->abbrs, name, name_size);
Executed by:
  • date
  • du
  • ls
  • pr
  • touch
280
110 }
executed 2946 times by 8 tests: end of block
Executed by:
  • date
  • dir
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
2946
111 return tz;
executed 2946 times by 8 tests: return tz;
Executed by:
  • date
  • dir
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
2946
112}-
113-
114/* Save into TZ any nontrivial time zone abbreviation used by TM, and-
115 update *TM (if HAVE_TM_ZONE) or *TZ (if !HAVE_TM_ZONE &&-
116 HAVE_TZNAME) if they use the abbreviation. Return true if-
117 successful, false (setting errno) otherwise. */-
118static bool-
119save_abbr (timezone_t tz, struct tm *tm)-
120{-
121#if HAVE_TM_ZONE || HAVE_TZNAME-
122 char const *zone = NULL;-
123 char *zone_copy = (char *) "";-
124-
125# if HAVE_TZNAME-
126 int tzname_index = -1;-
127# endif-
128-
129# if HAVE_TM_ZONE-
130 zone = tm->tm_zone;-
131# endif-
132-
133# if HAVE_TZNAME-
134 if (! (zone && *zone) && 0 <= tm->tm_isdst)-
135 {-
136 tzname_index = tm->tm_isdst != 0;-
137 zone = tzname[tzname_index];-
138 }-
139# endif-
140-
141 /* No need to replace null zones, or zones within the struct tm. */-
142 if (!zone || ((char *) tm <= zone && zone < (char *) (tm + 1)))
!zoneDescription
TRUEnever evaluated
FALSEevaluated 7912 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
(char *) tm <= zoneDescription
TRUEnever evaluated
FALSEevaluated 7912 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
zone < (char *) (tm + 1)Description
TRUEnever evaluated
FALSEnever evaluated
0-7912
143 return true;
never executed: return 1 ;
0
144-
145 if (*zone)
*zoneDescription
TRUEevaluated 7912 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEnever evaluated
0-7912
146 {-
147 zone_copy = tz->abbrs;-
148-
149 while (strcmp (zone_copy, zone) != 0)
never executed: __result = (((const unsigned char *) (const char *) ( zone_copy ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( zone ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__extension__ ... )))); }) != 0Description
TRUEevaluated 6324 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEevaluated 5249 times by 4 tests
Evaluated by:
  • date
  • stat
  • touch
  • vdir
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-6324
150 {-
151 if (! (*zone_copy || (zone_copy == tz->abbrs && tz->tz_is_set)))
*zone_copyDescription
TRUEevaluated 3657 times by 5 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • touch
FALSEevaluated 2667 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
zone_copy == tz->abbrsDescription
TRUEevaluated 1642 times by 6 tests
Evaluated by:
  • date
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEevaluated 1025 times by 5 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • touch
tz->tz_is_setDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • date
FALSEevaluated 1638 times by 6 tests
Evaluated by:
  • date
  • ls
  • pr
  • stat
  • touch
  • vdir
4-3657
152 {-
153 size_t zone_size = strlen (zone) + 1;-
154 size_t zone_used = zone_copy - tz->abbrs;-
155 if (SIZE_MAX - zone_used < zone_size)
((size_t) -1) ...ed < zone_sizeDescription
TRUEnever evaluated
FALSEevaluated 2663 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
0-2663
156 {-
157 errno = ENOMEM;-
158 return false;
never executed: return 0 ;
0
159 }-
160 if (zone_used + zone_size < ABBR_SIZE_MIN)
zone_used + zo... ABBR_SIZE_MINDescription
TRUEevaluated 2662 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEevaluated 1 time by 1 test
Evaluated by:
  • date
1-2662
161 extend_abbrs (zone_copy, zone, zone_size);
executed 2662 times by 7 tests: extend_abbrs (zone_copy, zone, zone_size);
Executed by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
2662
162 else-
163 {-
164 tz = tz->next = tzalloc (zone);-
165 if (!tz)
!tzDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • date
0-1
166 return false;
never executed: return 0 ;
0
167 tz->tz_is_set = 0;-
168 zone_copy = tz->abbrs;-
169 }
executed 1 time by 1 test: end of block
Executed by:
  • date
1
170 break;
executed 2663 times by 7 tests: break;
Executed by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
2663
171 }-
172-
173 zone_copy += strlen (zone_copy) + 1;-
174 if (!*zone_copy && tz->next)
!*zone_copyDescription
TRUEevaluated 1029 times by 5 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • touch
FALSEevaluated 2632 times by 2 tests
Evaluated by:
  • date
  • touch
tz->nextDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • date
FALSEevaluated 1025 times by 5 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • touch
4-2632
175 {-
176 tz = tz->next;-
177 zone_copy = tz->abbrs;-
178 }
executed 4 times by 1 test: end of block
Executed by:
  • date
4
179 }
executed 3661 times by 5 tests: end of block
Executed by:
  • date
  • du
  • ls
  • pr
  • touch
3661
180 }
executed 7912 times by 7 tests: end of block
Executed by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
7912
181-
182 /* Replace the zone name so that its lifetime matches that of TZ. */-
183# if HAVE_TM_ZONE-
184 tm->tm_zone = zone_copy;-
185# else-
186 if (0 <= tzname_index)-
187 tz->tzname_copy[tzname_index] = zone_copy;-
188# endif-
189#endif-
190-
191 return true;
executed 7912 times by 7 tests: return 1 ;
Executed by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
7912
192}-
193-
194/* Free a time zone. */-
195void-
196tzfree (timezone_t tz)-
197{-
198 if (tz != local_tz)
tz != local_tzDescription
TRUEevaluated 80 times by 2 tests
Evaluated by:
  • date
  • touch
FALSEnever evaluated
0-80
199 while (tz)
tzDescription
TRUEevaluated 81 times by 2 tests
Evaluated by:
  • date
  • touch
FALSEevaluated 80 times by 2 tests
Evaluated by:
  • date
  • touch
80-81
200 {-
201 timezone_t next = tz->next;-
202 free (tz);-
203 tz = next;-
204 }
executed 81 times by 2 tests: end of block
Executed by:
  • date
  • touch
81
205}
executed 80 times by 2 tests: end of block
Executed by:
  • date
  • touch
80
206-
207/* Get and set the TZ environment variable. These functions can be-
208 overridden by programs like Emacs that manage their own environment. */-
209-
210#ifndef getenv_TZ-
211static char *-
212getenv_TZ (void)-
213{-
214 return getenv ("TZ");
executed 7913 times by 7 tests: return getenv ("TZ");
Executed by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
7913
215}-
216#endif-
217-
218#ifndef setenv_TZ-
219static int-
220setenv_TZ (char const *tz)-
221{-
222 return tz ? setenv ("TZ", tz, 1) : unsetenv ("TZ");
executed 66 times by 1 test: return tz ? setenv ("TZ", tz, 1) : unsetenv ("TZ");
Executed by:
  • date
66
223}-
224#endif-
225-
226/* Change the environment to match the specified timezone_t value.-
227 Return true if successful, false (setting errno) otherwise. */-
228static bool-
229change_env (timezone_t tz)-
230{-
231 if (setenv_TZ (tz->tz_is_set ? tz->abbrs : NULL) != 0)
setenv_TZ (tz-...id *)0) ) != 0Description
TRUEnever evaluated
FALSEevaluated 66 times by 1 test
Evaluated by:
  • date
0-66
232 return false;
never executed: return 0 ;
0
233 tzset ();-
234 return true;
executed 66 times by 1 test: return 1 ;
Executed by:
  • date
66
235}-
236-
237/* Temporarily set the time zone to TZ, which must not be null.-
238 Return LOCAL_TZ if the time zone setting is already correct.-
239 Otherwise return a newly allocated time zone representing the old-
240 setting, or NULL (setting errno) on failure. */-
241static timezone_t-
242set_tz (timezone_t tz)-
243{-
244 char *env_tz = getenv_TZ ();-
245 if (env_tz
env_tz ? tz->t...!tz->tz_is_setDescription
TRUEevaluated 7880 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEevaluated 33 times by 1 test
Evaluated by:
  • date
env_tzDescription
TRUEevaluated 1365 times by 5 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • touch
FALSEevaluated 6548 times by 6 tests
Evaluated by:
  • date
  • ls
  • pr
  • stat
  • touch
  • vdir
33-7880
246 ? tz->tz_is_set && strcmp (tz->abbrs, env_tz) == 0
never executed: __result = (((const unsigned char *) (const char *) ( tz->abbrs ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( env_tz ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
env_tz ? tz->t...!tz->tz_is_setDescription
TRUEevaluated 7880 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEevaluated 33 times by 1 test
Evaluated by:
  • date
tz->tz_is_setDescription
TRUEevaluated 1365 times by 5 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • touch
FALSEnever evaluated
__extension__ ... )))); }) == 0Description
TRUEevaluated 1342 times by 5 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • touch
FALSEevaluated 23 times by 1 test
Evaluated by:
  • date
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-7880
247 : !tz->tz_is_set)
env_tz ? tz->t...!tz->tz_is_setDescription
TRUEevaluated 7880 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEevaluated 33 times by 1 test
Evaluated by:
  • date
33-7880
248 return local_tz;
executed 7880 times by 7 tests: return local_tz;
Executed by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
7880
249 else-
250 {-
251 timezone_t old_tz = tzalloc (env_tz);-
252 if (!old_tz)
!old_tzDescription
TRUEnever evaluated
FALSEevaluated 33 times by 1 test
Evaluated by:
  • date
0-33
253 return old_tz;
never executed: return old_tz;
0
254 if (! change_env (tz))
! change_env (tz)Description
TRUEnever evaluated
FALSEevaluated 33 times by 1 test
Evaluated by:
  • date
0-33
255 {-
256 int saved_errno = errno;-
257 tzfree (old_tz);-
258 errno = saved_errno;-
259 return NULL;
never executed: return ((void *)0) ;
0
260 }-
261 return old_tz;
executed 33 times by 1 test: return old_tz;
Executed by:
  • date
33
262 }-
263}-
264-
265/* Restore an old setting returned by set_tz. It must not be null.-
266 Return true (preserving errno) if successful, false (setting errno)-
267 otherwise. */-
268static bool-
269revert_tz (timezone_t tz)-
270{-
271 if (tz == local_tz)
tz == local_tzDescription
TRUEevaluated 7880 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEevaluated 33 times by 1 test
Evaluated by:
  • date
33-7880
272 return true;
executed 7880 times by 7 tests: return 1 ;
Executed by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
7880
273 else-
274 {-
275 int saved_errno = errno;-
276 bool ok = change_env (tz);-
277 if (!ok)
!okDescription
TRUEnever evaluated
FALSEevaluated 33 times by 1 test
Evaluated by:
  • date
0-33
278 saved_errno = errno;
never executed: saved_errno = (*__errno_location ()) ;
0
279 tzfree (tz);-
280 errno = saved_errno;-
281 return ok;
executed 33 times by 1 test: return ok;
Executed by:
  • date
33
282 }-
283}-
284-
285/* Use time zone TZ to compute localtime_r (T, TM). */-
286struct tm *-
287localtime_rz (timezone_t tz, time_t const *t, struct tm *tm)-
288{-
289 if (!tz)
!tzDescription
TRUEnever evaluated
FALSEevaluated 6168 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
0-6168
290 return gmtime_r (t, tm);
never executed: return gmtime_r (t, tm);
0
291 else-
292 {-
293 timezone_t old_tz = set_tz (tz);-
294 if (old_tz)
old_tzDescription
TRUEevaluated 6168 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEnever evaluated
0-6168
295 {-
296 bool abbr_saved = localtime_r (t, tm) && save_abbr (tz, tm);
localtime_r (t, tm)Description
TRUEevaluated 6167 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEevaluated 1 time by 1 test
Evaluated by:
  • du
save_abbr (tz, tm)Description
TRUEevaluated 6167 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEnever evaluated
0-6167
297 if (revert_tz (old_tz) && abbr_saved)
revert_tz (old_tz)Description
TRUEevaluated 6168 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEnever evaluated
abbr_savedDescription
TRUEevaluated 6167 times by 7 tests
Evaluated by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
FALSEevaluated 1 time by 1 test
Evaluated by:
  • du
0-6168
298 return tm;
executed 6167 times by 7 tests: return tm;
Executed by:
  • date
  • du
  • ls
  • pr
  • stat
  • touch
  • vdir
6167
299 }
executed 1 time by 1 test: end of block
Executed by:
  • du
1
300 return NULL;
executed 1 time by 1 test: return ((void *)0) ;
Executed by:
  • du
1
301 }-
302}-
303-
304/* Use time zone TZ to compute mktime (TM). */-
305time_t-
306mktime_z (timezone_t tz, struct tm *tm)-
307{-
308 if (!tz)
!tzDescription
TRUEnever evaluated
FALSEevaluated 1745 times by 2 tests
Evaluated by:
  • date
  • touch
0-1745
309 return timegm (tm);
never executed: return timegm (tm);
0
310 else-
311 {-
312 timezone_t old_tz = set_tz (tz);-
313 if (old_tz)
old_tzDescription
TRUEevaluated 1745 times by 2 tests
Evaluated by:
  • date
  • touch
FALSEnever evaluated
0-1745
314 {-
315 time_t t = mktime (tm);-
316#if HAVE_TM_ZONE || HAVE_TZNAME-
317 time_t badtime = -1;-
318 struct tm tm_1;-
319 if ((t != badtime
t != badtimeDescription
TRUEevaluated 1745 times by 2 tests
Evaluated by:
  • date
  • touch
FALSEnever evaluated
0-1745
320 || (localtime_r (&t, &tm_1) && equal_tm (tm, &tm_1)))
localtime_r (&t, &tm_1)Description
TRUEnever evaluated
FALSEnever evaluated
equal_tm (tm, &tm_1)Description
TRUEnever evaluated
FALSEnever evaluated
0
321 && !save_abbr (tz, tm))
!save_abbr (tz, tm)Description
TRUEnever evaluated
FALSEevaluated 1745 times by 2 tests
Evaluated by:
  • date
  • touch
0-1745
322 t = badtime;
never executed: t = badtime;
0
323#endif-
324 if (revert_tz (old_tz))
revert_tz (old_tz)Description
TRUEevaluated 1745 times by 2 tests
Evaluated by:
  • date
  • touch
FALSEnever evaluated
0-1745
325 return t;
executed 1745 times by 2 tests: return t;
Executed by:
  • date
  • touch
1745
326 }
never executed: end of block
0
327 return -1;
never executed: return -1;
0
328 }-
329}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2