Mercurial > emacs
annotate src/mktime.c @ 99492:ee792794d888
(isearch-search-fun): Compare the length of the
current search string with the length of the string from the
previous search state to detect the situation when the user
adds or removes characters in the search string.
Use word-search-forward-lax and word-search-backward-lax in this
case, and otherwise word-search-forward and word-search-backward.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Tue, 11 Nov 2008 19:43:09 +0000 |
parents | e90d04cd455a |
children | 95d0cdf160ea 1dc371b29285 |
rev | line source |
---|---|
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
1 /* Convert a `struct tm' to a time_t value. |
75227
e90d04cd455a
Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents:
68651
diff
changeset
|
2 Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003, |
e90d04cd455a
Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents:
68651
diff
changeset
|
3 2004, 2005, 2006, 2007 Free Software Foundation, Inc. |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
4 Contributed by Paul Eggert (eggert@twinsun.com). |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
5 |
19875
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
6 NOTE: The canonical source of this file is maintained with the GNU C Library. |
21501
c8c409640bf3
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
21500
diff
changeset
|
7 Bugs can be reported to bug-glibc@gnu.org. |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
8 |
19875
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
9 This program is free software; you can redistribute it and/or modify it |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
10 under the terms of the GNU General Public License as published by the |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
11 Free Software Foundation; either version 2, or (at your option) any |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
12 later version. |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
13 |
19875
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
14 This program is distributed in the hope that it will be useful, |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
15 but WITHOUT ANY WARRANTY; without even the implied warranty of |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
17 GNU General Public License for more details. |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
18 |
19875
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
19 You should have received a copy of the GNU General Public License |
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
20 along with this program; if not, write to the Free Software |
64084 | 21 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, |
19875
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
22 USA. */ |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
23 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
24 /* Define this to have a standalone program to test this implementation of |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
25 mktime. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
26 /* #define DEBUG 1 */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
27 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
28 #ifdef HAVE_CONFIG_H |
18671
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
29 # include <config.h> |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
30 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
31 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
32 #ifdef _LIBC |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
33 # define HAVE_LIMITS_H 1 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
34 # define STDC_HEADERS 1 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
35 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
36 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
37 /* Assume that leap seconds are possible, unless told otherwise. |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
38 If the host has a `zic' command with a `-L leapsecondfilename' option, |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
39 then it supports leap seconds; otherwise it probably doesn't. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
40 #ifndef LEAP_SECONDS_POSSIBLE |
18671
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
41 # define LEAP_SECONDS_POSSIBLE 1 |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
42 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
43 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
44 #include <sys/types.h> /* Some systems define `time_t' here. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
45 #include <time.h> |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
46 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
47 #if HAVE_LIMITS_H |
18671
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
48 # include <limits.h> |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
49 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
50 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
51 #if DEBUG |
18671
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
52 # include <stdio.h> |
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
53 # if STDC_HEADERS |
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
54 # include <stdlib.h> |
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
55 # endif |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
56 /* Make it work even if the system's libc has its own mktime routine. */ |
18671
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
57 # define mktime my_mktime |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
58 #endif /* DEBUG */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
59 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
60 #ifndef __P |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
61 # if defined __GNUC__ || (defined __STDC__ && __STDC__) |
18671
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
62 # define __P(args) args |
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
63 # else |
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
64 # define __P(args) () |
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
65 # endif /* GCC. */ |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
66 #endif /* Not __P. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
67 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
68 #ifndef CHAR_BIT |
18671
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
69 # define CHAR_BIT 8 |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
70 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
71 |
20903
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
72 /* The extra casts work around common compiler bugs. */ |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
73 #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
74 /* The outer cast is needed to work around a bug in Cray C 5.0.3.0. |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
75 It is necessary at least when t == time_t. */ |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
76 #define TYPE_MINIMUM(t) ((t) (TYPE_SIGNED (t) \ |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
77 ? ~ (t) 0 << (sizeof (t) * CHAR_BIT - 1) : (t) 0)) |
21500
4c72cf4eeedb
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20903
diff
changeset
|
78 #define TYPE_MAXIMUM(t) ((t) (~ (t) 0 - TYPE_MINIMUM (t))) |
20903
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
79 |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
80 #ifndef INT_MIN |
20903
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
81 # define INT_MIN TYPE_MINIMUM (int) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
82 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
83 #ifndef INT_MAX |
20903
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
84 # define INT_MAX TYPE_MAXIMUM (int) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
85 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
86 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
87 #ifndef TIME_T_MIN |
20903
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
88 # define TIME_T_MIN TYPE_MINIMUM (time_t) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
89 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
90 #ifndef TIME_T_MAX |
20903
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
91 # define TIME_T_MAX TYPE_MAXIMUM (time_t) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
92 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
93 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
94 #define TM_YEAR_BASE 1900 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
95 #define EPOCH_YEAR 1970 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
96 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
97 #ifndef __isleap |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
98 /* Nonzero if YEAR is a leap year (every 4 years, |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
99 except every 100th isn't, and every 400th is). */ |
18671
0d7f42d3ddc0
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
16962
diff
changeset
|
100 # define __isleap(year) \ |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
101 ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
102 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
103 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
104 /* How many days come before each month (0-12). */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
105 const unsigned short int __mon_yday[2][13] = |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
106 { |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
107 /* Normal years. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
108 { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
109 /* Leap years. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
110 { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
111 }; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
112 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
113 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
114 #ifdef _LIBC |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
115 # define my_mktime_localtime_r __localtime_r |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
116 #else |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
117 /* If we're a mktime substitute in a GNU program, then prefer |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
118 localtime to localtime_r, since many localtime_r implementations |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
119 are buggy. */ |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
120 static struct tm * |
29737 | 121 my_mktime_localtime_r (t, tp) |
122 const time_t *t; | |
123 struct tm *tp; | |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
124 { |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
125 struct tm *l = localtime (t); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
126 if (! l) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
127 return 0; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
128 *tp = *l; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
129 return tp; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
130 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
131 #endif /* ! _LIBC */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
132 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
133 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
134 /* Yield the difference between (YEAR-YDAY HOUR:MIN:SEC) and (*TP), |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
135 measured in seconds, ignoring leap seconds. |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
136 YEAR uses the same numbering as TM->tm_year. |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
137 All values are in range, except possibly YEAR. |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
138 If TP is null, return a nonzero value. |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
139 If overflow occurs, yield the low order bits of the correct answer. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
140 static time_t |
29737 | 141 ydhms_tm_diff (year, yday, hour, min, sec, tp) |
142 int year, yday, hour, min, sec; | |
143 const struct tm *tp; | |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
144 { |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
145 if (!tp) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
146 return 1; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
147 else |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
148 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
149 /* Compute intervening leap days correctly even if year is negative. |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
150 Take care to avoid int overflow. time_t overflow is OK, since |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
151 only the low order bits of the correct time_t answer are needed. |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
152 Don't convert to time_t until after all divisions are done, since |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
153 time_t might be unsigned. */ |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
154 int a4 = (year >> 2) + (TM_YEAR_BASE >> 2) - ! (year & 3); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
155 int b4 = (tp->tm_year >> 2) + (TM_YEAR_BASE >> 2) - ! (tp->tm_year & 3); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
156 int a100 = a4 / 25 - (a4 % 25 < 0); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
157 int b100 = b4 / 25 - (b4 % 25 < 0); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
158 int a400 = a100 >> 2; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
159 int b400 = b100 >> 2; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
160 int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
161 time_t years = year - (time_t) tp->tm_year; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
162 time_t days = (365 * years + intervening_leap_days |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
163 + (yday - tp->tm_yday)); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
164 return (60 * (60 * (24 * days + (hour - tp->tm_hour)) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
165 + (min - tp->tm_min)) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
166 + (sec - tp->tm_sec)); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
167 } |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
168 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
169 |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
170 /* Use CONVERT to convert *T to a broken down time in *TP. |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
171 If *T is out of range for conversion, adjust it so that |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
172 it is the nearest in-range value and then convert that. */ |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
173 static struct tm * |
29737 | 174 ranged_convert (convert, t, tp) |
175 #ifdef PROTOTYPES | |
176 struct tm *(*convert) (const time_t *, struct tm *); | |
177 #else | |
178 struct tm *(*convert)(); | |
179 #endif | |
180 time_t *t; | |
181 struct tm *tp; | |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
182 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
183 struct tm *r; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
184 |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
185 if (! (r = (*convert) (t, tp)) && *t) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
186 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
187 time_t bad = *t; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
188 time_t ok = 0; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
189 struct tm tm; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
190 |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
191 /* BAD is a known unconvertible time_t, and OK is a known good one. |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
192 Use binary search to narrow the range between BAD and OK until |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
193 they differ by 1. */ |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
194 while (bad != ok + (bad < 0 ? -1 : 1)) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
195 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
196 time_t mid = *t = (bad < 0 |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
197 ? bad + ((ok - bad) >> 1) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
198 : ok + ((bad - ok) >> 1)); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
199 if ((r = (*convert) (t, tp))) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
200 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
201 tm = *r; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
202 ok = mid; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
203 } |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
204 else |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
205 bad = mid; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
206 } |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
207 |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
208 if (!r && ok) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
209 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
210 /* The last conversion attempt failed; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
211 revert to the most recent successful attempt. */ |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
212 *t = ok; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
213 *tp = tm; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
214 r = tp; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
215 } |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
216 } |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
217 |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
218 return r; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
219 } |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
220 |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
221 |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
222 /* Convert *TP to a time_t value, inverting |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
223 the monotonic and mostly-unit-linear conversion function CONVERT. |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
224 Use *OFFSET to keep track of a guess at the offset of the result, |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
225 compared to what the result would be for UTC without leap seconds. |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
226 If *OFFSET's guess is correct, only one CONVERT call is needed. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
227 time_t |
29737 | 228 __mktime_internal (tp, convert, offset) |
229 struct tm *tp; | |
230 #ifdef PROTOTYPES | |
231 struct tm *(*convert) (const time_t *, struct tm *); | |
232 #else | |
233 struct tm *(*convert)(); | |
234 #endif | |
235 time_t *offset; | |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
236 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
237 time_t t, dt, t0, t1, t2; |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
238 struct tm tm; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
239 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
240 /* The maximum number of probes (calls to CONVERT) should be enough |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
241 to handle any combinations of time zone rule changes, solar time, |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
242 leap seconds, and oscillations around a spring-forward gap. |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
243 POSIX.1 prohibits leap seconds, but some hosts have them anyway. */ |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
244 int remaining_probes = 6; |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
245 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
246 /* Time requested. Copy it in case CONVERT modifies *TP; this can |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
247 occur if TP is localtime's returned value and CONVERT is localtime. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
248 int sec = tp->tm_sec; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
249 int min = tp->tm_min; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
250 int hour = tp->tm_hour; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
251 int mday = tp->tm_mday; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
252 int mon = tp->tm_mon; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
253 int year_requested = tp->tm_year; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
254 int isdst = tp->tm_isdst; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
255 |
51484
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
256 /* 1 if the previous probe was DST. */ |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
257 int dst2; |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
258 |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
259 /* Ensure that mon is in range, and set year accordingly. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
260 int mon_remainder = mon % 12; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
261 int negative_mon_remainder = mon_remainder < 0; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
262 int mon_years = mon / 12 - negative_mon_remainder; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
263 int year = year_requested + mon_years; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
264 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
265 /* The other values need not be in range: |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
266 the remaining code handles minor overflows correctly, |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
267 assuming int and time_t arithmetic wraps around. |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
268 Major overflows are caught at the end. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
269 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
270 /* Calculate day of year from year, month, and day of month. |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
271 The result need not be in range. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
272 int yday = ((__mon_yday[__isleap (year + TM_YEAR_BASE)] |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
273 [mon_remainder + 12 * negative_mon_remainder]) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
274 + mday - 1); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
275 |
19875
278944a16af3
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
18672
diff
changeset
|
276 int sec_requested = sec; |
51484
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
277 |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
278 /* Only years after 1970 are defined. |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
279 If year is 69, it might still be representable due to |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
280 timezone differences. */ |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
281 if (year < 69) |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
282 return -1; |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
283 |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
284 #if LEAP_SECONDS_POSSIBLE |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
285 /* Handle out-of-range seconds specially, |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
286 since ydhms_tm_diff assumes every minute has 60 seconds. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
287 if (sec < 0) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
288 sec = 0; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
289 if (59 < sec) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
290 sec = 59; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
291 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
292 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
293 /* Invert CONVERT by probing. First assume the same offset as last time. |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
294 Then repeatedly use the error to improve the guess. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
295 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
296 tm.tm_year = EPOCH_YEAR - TM_YEAR_BASE; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
297 tm.tm_yday = tm.tm_hour = tm.tm_min = tm.tm_sec = 0; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
298 t0 = ydhms_tm_diff (year, yday, hour, min, sec, &tm); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
299 |
51484
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
300 for (t = t1 = t2 = t0 + *offset, dst2 = 0; |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
301 (dt = ydhms_tm_diff (year, yday, hour, min, sec, |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
302 ranged_convert (convert, &t, &tm))); |
51484
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
303 t1 = t2, t2 = t, t += dt, dst2 = tm.tm_isdst != 0) |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
304 if (t == t1 && t != t2 |
51484
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
305 && (tm.tm_isdst < 0 |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
306 || (isdst < 0 |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
307 ? dst2 <= (tm.tm_isdst != 0) |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
308 : (isdst != 0) != (tm.tm_isdst != 0)))) |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
309 /* We can't possibly find a match, as we are oscillating |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
310 between two values. The requested time probably falls |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
311 within a spring-forward gap of size DT. Follow the common |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
312 practice in this case, which is to return a time that is DT |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
313 away from the requested time, preferring a time whose |
51484
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
314 tm_isdst differs from the requested value. (If no tm_isdst |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
315 was requested and only one of the two values has a nonzero |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
316 tm_isdst, prefer that value.) In practice, this is more |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
317 useful than returning -1. */ |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
318 break; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
319 else if (--remaining_probes == 0) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
320 return -1; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
321 |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
322 /* If we have a match, check whether tm.tm_isdst has the requested |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
323 value, if any. */ |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
324 if (dt == 0 && isdst != tm.tm_isdst && 0 <= isdst && 0 <= tm.tm_isdst) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
325 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
326 /* tm.tm_isdst has the wrong value. Look for a neighboring |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
327 time with the right value, and use its UTC offset. |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
328 Heuristic: probe the previous three calendar quarters (approximately), |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
329 looking for the desired isdst. This isn't perfect, |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
330 but it's good enough in practice. */ |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
331 int quarter = 7889238; /* seconds per average 1/4 Gregorian year */ |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
332 int i; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
333 |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
334 /* If we're too close to the time_t limit, look in future quarters. */ |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
335 if (t < TIME_T_MIN + 3 * quarter) |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
336 quarter = -quarter; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
337 |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
338 for (i = 1; i <= 3; i++) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
339 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
340 time_t ot = t - i * quarter; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
341 struct tm otm; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
342 ranged_convert (convert, &ot, &otm); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
343 if (otm.tm_isdst == isdst) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
344 { |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
345 /* We found the desired tm_isdst. |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
346 Extrapolate back to the desired time. */ |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
347 t = ot + ydhms_tm_diff (year, yday, hour, min, sec, &otm); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
348 ranged_convert (convert, &t, &tm); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
349 break; |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
350 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
351 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
352 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
353 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
354 *offset = t - t0; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
355 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
356 #if LEAP_SECONDS_POSSIBLE |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
357 if (sec_requested != tm.tm_sec) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
358 { |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
359 /* Adjust time to reflect the tm_sec requested, not the normalized value. |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
360 Also, repair any damage from a false match due to a leap second. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
361 t += sec_requested - sec + (sec == 0 && tm.tm_sec == 60); |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
362 if (! (*convert) (&t, &tm)) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
363 return -1; |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
364 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
365 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
366 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
367 if (TIME_T_MAX / INT_MAX / 366 / 24 / 60 / 60 < 3) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
368 { |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
369 /* time_t isn't large enough to rule out overflows in ydhms_tm_diff, |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
370 so check for major overflows. A gross check suffices, |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
371 since if t has overflowed, it is off by a multiple of |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
372 TIME_T_MAX - TIME_T_MIN + 1. So ignore any component of |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
373 the difference that is bounded by a small value. */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
374 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
375 double dyear = (double) year_requested + mon_years - tm.tm_year; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
376 double dday = 366 * dyear + mday; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
377 double dsec = 60 * (60 * (24 * dday + hour) + min) + sec_requested; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
378 |
20903
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
379 /* On Irix4.0.5 cc, dividing TIME_T_MIN by 3 does not produce |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
380 correct results, ie., it erroneously gives a positive value |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
381 of 715827882. Setting a variable first then doing math on it |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
382 seems to work. (ghazi@caip.rutgers.edu) */ |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
383 |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
384 const time_t time_t_max = TIME_T_MAX; |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
385 const time_t time_t_min = TIME_T_MIN; |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
386 |
ba17c544eb9e
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20276
diff
changeset
|
387 if (time_t_max / 3 - time_t_min / 3 < (dsec < 0 ? - dsec : dsec)) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
388 return -1; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
389 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
390 |
51484
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
391 if (year == 69) |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
392 { |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
393 /* If year was 69, need to check whether the time was representable |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
394 or not. */ |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
395 if (t < 0 || t > 2 * 24 * 60 * 60) |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
396 return -1; |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
397 } |
bd73ed6af906
(__mktime_internal): Merge changes from gnulib
Dave Love <fx@gnu.org>
parents:
29737
diff
changeset
|
398 |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
399 *tp = tm; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
400 return t; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
401 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
402 |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
403 |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
404 static time_t localtime_offset; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
405 |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
406 /* Convert *TP to a time_t value. */ |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
407 time_t |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
408 mktime (tp) |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
409 struct tm *tp; |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
410 { |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
411 #ifdef _LIBC |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
412 /* POSIX.1 8.1.1 requires that whenever mktime() is called, the |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
413 time zone names contained in the external variable `tzname' shall |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
414 be set as if the tzset() function had been called. */ |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
415 __tzset (); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
416 #endif |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
417 |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
418 return __mktime_internal (tp, my_mktime_localtime_r, &localtime_offset); |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
419 } |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
420 |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
421 #ifdef weak_alias |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
422 weak_alias (mktime, timelocal) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
423 #endif |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
424 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
425 #if DEBUG |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
426 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
427 static int |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
428 not_equal_tm (a, b) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
429 struct tm *a; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
430 struct tm *b; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
431 { |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
432 return ((a->tm_sec ^ b->tm_sec) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
433 | (a->tm_min ^ b->tm_min) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
434 | (a->tm_hour ^ b->tm_hour) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
435 | (a->tm_mday ^ b->tm_mday) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
436 | (a->tm_mon ^ b->tm_mon) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
437 | (a->tm_year ^ b->tm_year) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
438 | (a->tm_mday ^ b->tm_mday) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
439 | (a->tm_yday ^ b->tm_yday) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
440 | (a->tm_isdst ^ b->tm_isdst)); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
441 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
442 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
443 static void |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
444 print_tm (tp) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
445 struct tm *tp; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
446 { |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
447 if (tp) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
448 printf ("%04d-%02d-%02d %02d:%02d:%02d yday %03d wday %d isdst %d", |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
449 tp->tm_year + TM_YEAR_BASE, tp->tm_mon + 1, tp->tm_mday, |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
450 tp->tm_hour, tp->tm_min, tp->tm_sec, |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
451 tp->tm_yday, tp->tm_wday, tp->tm_isdst); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
452 else |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
453 printf ("0"); |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
454 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
455 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
456 static int |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
457 check_result (tk, tmk, tl, lt) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
458 time_t tk; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
459 struct tm tmk; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
460 time_t tl; |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
461 struct tm *lt; |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
462 { |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
463 if (tk != tl || !lt || not_equal_tm (&tmk, lt)) |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
464 { |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
465 printf ("mktime ("); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
466 print_tm (&tmk); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
467 printf (")\nyields ("); |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
468 print_tm (lt); |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
469 printf (") == %ld, should be %ld\n", (long) tl, (long) tk); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
470 return 1; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
471 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
472 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
473 return 0; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
474 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
475 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
476 int |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
477 main (argc, argv) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
478 int argc; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
479 char **argv; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
480 { |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
481 int status = 0; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
482 struct tm tm, tmk, tml; |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
483 struct tm *lt; |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
484 time_t tk, tl; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
485 char trailer; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
486 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
487 if ((argc == 3 || argc == 4) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
488 && (sscanf (argv[1], "%d-%d-%d%c", |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
489 &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &trailer) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
490 == 3) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
491 && (sscanf (argv[2], "%d:%d:%d%c", |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
492 &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &trailer) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
493 == 3)) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
494 { |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
495 tm.tm_year -= TM_YEAR_BASE; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
496 tm.tm_mon--; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
497 tm.tm_isdst = argc == 3 ? -1 : atoi (argv[3]); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
498 tmk = tm; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
499 tl = mktime (&tmk); |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
500 lt = localtime (&tl); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
501 if (lt) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
502 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
503 tml = *lt; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
504 lt = &tml; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
505 } |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
506 printf ("mktime returns %ld == ", (long) tl); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
507 print_tm (&tmk); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
508 printf ("\n"); |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
509 status = check_result (tl, tmk, tl, lt); |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
510 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
511 else if (argc == 4 || (argc == 5 && strcmp (argv[4], "-") == 0)) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
512 { |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
513 time_t from = atol (argv[1]); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
514 time_t by = atol (argv[2]); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
515 time_t to = atol (argv[3]); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
516 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
517 if (argc == 4) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
518 for (tl = from; tl <= to; tl += by) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
519 { |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
520 lt = localtime (&tl); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
521 if (lt) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
522 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
523 tmk = tml = *lt; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
524 tk = mktime (&tmk); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
525 status |= check_result (tk, tmk, tl, tml); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
526 } |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
527 else |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
528 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
529 printf ("localtime (%ld) yields 0\n", (long) tl); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
530 status = 1; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
531 } |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
532 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
533 else |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
534 for (tl = from; tl <= to; tl += by) |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
535 { |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
536 /* Null benchmark. */ |
20253
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
537 lt = localtime (&tl); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
538 if (lt) |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
539 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
540 tmk = tml = *lt; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
541 tk = tl; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
542 status |= check_result (tk, tmk, tl, tml); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
543 } |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
544 else |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
545 { |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
546 printf ("localtime (%ld) yields 0\n", (long) tl); |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
547 status = 1; |
a7d1d668f57f
automatically generated from GPLed version
Ulrich Drepper <drepper@redhat.com>
parents:
20252
diff
changeset
|
548 } |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
549 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
550 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
551 else |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
552 printf ("Usage:\ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
553 \t%s YYYY-MM-DD HH:MM:SS [ISDST] # Test given time.\n\ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
554 \t%s FROM BY TO # Test values FROM, FROM+BY, ..., TO.\n\ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
555 \t%s FROM BY TO - # Do not test those values (for benchmark).\n", |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
556 argv[0], argv[0], argv[0]); |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
557 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
558 return status; |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
559 } |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
560 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
561 #endif /* DEBUG */ |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
562 |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
563 /* |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
564 Local Variables: |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
21501
diff
changeset
|
565 compile-command: "gcc -DDEBUG -DHAVE_LIMITS_H -DSTDC_HEADERS -Wall -W -O -g mktime.c -o mktime" |
16961
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
566 End: |
6e1ae1c00446
automatically generated from GPLed version
Paul Eggert <eggert@twinsun.com>
parents:
diff
changeset
|
567 */ |
52401 | 568 |
569 /* arch-tag: 9456752f-7ddd-47cb-8286-fa807b1355ae | |
570 (do not change this comment) */ |