Mercurial > hg > octave-shane > gnulib-hg
annotate lib/posixtm.c @ 11989:f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
* lib/posixtm.c (posixtime): The code to reject invalid dates would
also reject a time specified with the .60 suffix, whereas POSIX allows
that, in order to accommodate leap seconds. Don't reject that.
(main): Adjust tests accordingly.
* modules/posixtm (Depends-on): Add stpcpy.
author | Jim Meyering <meyering@redhat.com> |
---|---|
date | Sun, 13 Sep 2009 00:35:49 +0200 |
parents | b3848f51fa0e |
children | a00b18ad8d1a |
rev | line source |
---|---|
1513 | 1 /* Parse dates for touch and date. |
5159 | 2 |
7302
8a1a9361108c
* _fpending.c: Include <config.h> unconditionally, since we no
Paul Eggert <eggert@cs.ucla.edu>
parents:
6932
diff
changeset
|
3 Copyright (C) 1989, 1990, 1991, 1998, 2000, 2001, 2002, 2003, 2004, |
11989
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
4 2005, 2006, 2007, 2009 Free Software Foundation Inc. |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
5 |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7897
diff
changeset
|
6 This program is free software: you can redistribute it and/or modify |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
7 it under the terms of the GNU General Public License as published by |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7897
diff
changeset
|
8 the Free Software Foundation; either version 3 of the License, or |
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7897
diff
changeset
|
9 (at your option) any later version. |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
10 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
11 This program is distributed in the hope that it will be useful, |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
12 but WITHOUT ANY WARRANTY; without even the implied warranty of |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
14 GNU General Public License for more details. |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
15 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
16 You should have received a copy of the GNU General Public License |
9309
bbbbbf4cd1c5
Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents:
7897
diff
changeset
|
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
18 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
19 /* Yacc-based version written by Jim Kingdon and David MacKenzie. |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
20 Rewritten by Jim Meyering. */ |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
21 |
7302
8a1a9361108c
* _fpending.c: Include <config.h> unconditionally, since we no
Paul Eggert <eggert@cs.ucla.edu>
parents:
6932
diff
changeset
|
22 #include <config.h> |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
23 |
7897
b7a83a69ac23
* MODULES.html.sh (Support for systems lacking POSIX:2001): New
Paul Eggert <eggert@cs.ucla.edu>
parents:
7302
diff
changeset
|
24 #include "posixtm.h" |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
25 |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
26 #include <stdio.h> |
4671 | 27 #include <stdlib.h> |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
28 #include <sys/types.h> |
4671 | 29 #include <string.h> |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
30 |
5318
7c24a825b51d
Remove dependencies on unlocked-io.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5159
diff
changeset
|
31 #if USE_UNLOCKED_IO |
7c24a825b51d
Remove dependencies on unlocked-io.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5159
diff
changeset
|
32 # include "unlocked-io.h" |
7c24a825b51d
Remove dependencies on unlocked-io.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5159
diff
changeset
|
33 #endif |
1490 | 34 |
35 /* ISDIGIT differs from isdigit, as follows: | |
6932
6aeb4d6c28d9
* lib/.cppi-disable: Add wcwidth.
Paul Eggert <eggert@cs.ucla.edu>
parents:
6527
diff
changeset
|
36 - Its arg may be any int or unsigned int; it need not be an unsigned char |
6aeb4d6c28d9
* lib/.cppi-disable: Add wcwidth.
Paul Eggert <eggert@cs.ucla.edu>
parents:
6527
diff
changeset
|
37 or EOF. |
1490 | 38 - It's typically faster. |
3699 | 39 POSIX says that only '0' through '9' are digits. Prefer ISDIGIT to |
6932
6aeb4d6c28d9
* lib/.cppi-disable: Add wcwidth.
Paul Eggert <eggert@cs.ucla.edu>
parents:
6527
diff
changeset
|
40 isdigit unless it's important to use the locale's definition |
3699 | 41 of `digit' even when the host does not conform to POSIX. */ |
5159 | 42 #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9) |
1490 | 43 |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
44 /* |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
45 POSIX requires: |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
46 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
47 touch -t [[CC]YY]mmddhhmm[.ss] FILE... |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
48 8, 10, or 12 digits, followed by optional .ss |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
49 (PDS_LEADING_YEAR | PDS_CENTURY | PDS_SECONDS) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
50 |
3699 | 51 touch mmddhhmm[YY] FILE... (obsoleted by POSIX 1003.1-2001) |
6527 | 52 8 or 10 digits, YY (if present) must be in the range 69-99 |
53 (PDS_TRAILING_YEAR | PDS_PRE_2000) | |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
54 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
55 date mmddhhmm[[CC]YY] |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
56 8, 10, or 12 digits |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
57 (PDS_TRAILING_YEAR | PDS_CENTURY) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
58 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
59 */ |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
60 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
61 static int |
6527 | 62 year (struct tm *tm, const int *digit_pair, size_t n, unsigned int syntax_bits) |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
63 { |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
64 switch (n) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
65 { |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
66 case 1: |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
67 tm->tm_year = *digit_pair; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
68 /* Deduce the century based on the year. |
3699 | 69 POSIX requires that 00-68 be interpreted as 2000-2068, |
70 and that 69-99 be interpreted as 1969-1999. */ | |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
71 if (digit_pair[0] <= 68) |
6527 | 72 { |
73 if (syntax_bits & PDS_PRE_2000) | |
74 return 1; | |
75 tm->tm_year += 100; | |
76 } | |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
77 break; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
78 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
79 case 2: |
6527 | 80 if (! (syntax_bits & PDS_CENTURY)) |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
81 return 1; |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
82 tm->tm_year = digit_pair[0] * 100 + digit_pair[1] - 1900; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
83 break; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
84 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
85 case 0: |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
86 { |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
87 time_t now; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
88 struct tm *tmp; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
89 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
90 /* Use current year. */ |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
91 time (&now); |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
92 tmp = localtime (&now); |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
93 if (! tmp) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
94 return 1; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
95 tm->tm_year = tmp->tm_year; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
96 } |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
97 break; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
98 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
99 default: |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
100 abort (); |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
101 } |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
102 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
103 return 0; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
104 } |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
105 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
106 static int |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
107 posix_time_parse (struct tm *tm, const char *s, unsigned int syntax_bits) |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
108 { |
1490 | 109 const char *dot = NULL; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
110 int pair[6]; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
111 int *p; |
5159 | 112 size_t i; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
113 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
114 size_t s_len = strlen (s); |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
115 size_t len = (((syntax_bits & PDS_SECONDS) && (dot = strchr (s, '.'))) |
3675
8a14e4553656
(posix_time_parse): Add cast to avoid warning about
Jim Meyering <jim@meyering.net>
parents:
3618
diff
changeset
|
116 ? (size_t) (dot - s) |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
117 : s_len); |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
118 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
119 if (len != 8 && len != 10 && len != 12) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
120 return 1; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
121 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
122 if (dot) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
123 { |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
124 if (!(syntax_bits & PDS_SECONDS)) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
125 return 1; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
126 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
127 if (s_len - len != 3) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
128 return 1; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
129 } |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
130 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
131 for (i = 0; i < len; i++) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
132 if (!ISDIGIT (s[i])) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
133 return 1; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
134 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
135 len /= 2; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
136 for (i = 0; i < len; i++) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
137 pair[i] = 10 * (s[2*i] - '0') + s[2*i + 1] - '0'; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
138 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
139 p = pair; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
140 if (syntax_bits & PDS_LEADING_YEAR) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
141 { |
6527 | 142 if (year (tm, p, len - 4, syntax_bits)) |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
143 return 1; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
144 p += len - 4; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
145 len = 4; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
146 } |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
147 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
148 /* Handle 8 digits worth of `MMDDhhmm'. */ |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
149 tm->tm_mon = *p++ - 1; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
150 tm->tm_mday = *p++; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
151 tm->tm_hour = *p++; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
152 tm->tm_min = *p++; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
153 len -= 4; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
154 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
155 /* Handle any trailing year. */ |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
156 if (syntax_bits & PDS_TRAILING_YEAR) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
157 { |
6527 | 158 if (year (tm, p, len, syntax_bits)) |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
159 return 1; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
160 } |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
161 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
162 /* Handle seconds. */ |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
163 if (!dot) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
164 { |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
165 tm->tm_sec = 0; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
166 } |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
167 else |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
168 { |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
169 int seconds; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
170 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
171 ++dot; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
172 if (!ISDIGIT (dot[0]) || !ISDIGIT (dot[1])) |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
173 return 1; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
174 seconds = 10 * (dot[0] - '0') + dot[1] - '0'; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
175 |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
176 tm->tm_sec = seconds; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
177 } |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
178 |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
179 return 0; |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
180 } |
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
181 |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
182 /* Parse a POSIX-style date, returning true if successful. */ |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
183 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
184 bool |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
185 posixtime (time_t *p, const char *s, unsigned int syntax_bits) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
186 { |
10856
f6d444835290
posixtm.c: avoid a warning
Jim Meyering <meyering@redhat.com>
parents:
9309
diff
changeset
|
187 struct tm tm0; |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
188 struct tm tm1; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
189 struct tm const *tm; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
190 time_t t; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
191 |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
192 if (posix_time_parse (&tm0, s, syntax_bits)) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
193 return false; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
194 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
195 tm1 = tm0; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
196 tm1.tm_isdst = -1; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
197 t = mktime (&tm1); |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
198 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
199 if (t != (time_t) -1) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
200 tm = &tm1; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
201 else |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
202 { |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
203 /* mktime returns -1 for errors, but -1 is also a valid time_t |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
204 value. Check whether an error really occurred. */ |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
205 tm = localtime (&t); |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
206 if (! tm) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
207 return false; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
208 } |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
209 |
11989
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
210 /* Reject dates like "September 31" and times like "25:61". |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
211 Do not reject times that specify "60" as the number of seconds. */ |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
212 if ((tm0.tm_year ^ tm->tm_year) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
213 | (tm0.tm_mon ^ tm->tm_mon) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
214 | (tm0.tm_mday ^ tm->tm_mday) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
215 | (tm0.tm_hour ^ tm->tm_hour) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
216 | (tm0.tm_min ^ tm->tm_min) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
217 | (tm0.tm_sec ^ tm->tm_sec)) |
11989
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
218 { |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
219 /* Any mismatch without 60 in the tm_sec field is invalid. */ |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
220 if (tm0.tm_sec != 60) |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
221 return false; |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
222 |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
223 { |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
224 /* Allow times like 01:35:60 or 23:59:60. */ |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
225 time_t dummy; |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
226 char buf[16]; |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
227 char *b = stpcpy (buf, s); |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
228 strcpy (b - 2, "59"); |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
229 if (!posixtime (&dummy, buf, syntax_bits)) |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
230 return false; |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
231 } |
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
232 } |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
233 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
234 *p = t; |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
235 return true; |
1486
67065e70a10e
rewrite from yacc-based version
Jim Meyering <jim@meyering.net>
parents:
diff
changeset
|
236 } |
1492 | 237 |
238 #ifdef TEST_POSIXTIME | |
239 /* | |
240 Test mainly with syntax_bits == 13 | |
241 (aka: (PDS_LEADING_YEAR | PDS_CENTURY | PDS_SECONDS)) | |
242 | |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
243 This test data assumes Universal Time, e.g., TZ="UTC0". |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
244 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
245 This test data also assumes that time_t is signed and is at least |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
246 39 bits wide, so that it can represent all years from 0000 through |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
247 9999. A host with 32-bit signed time_t can represent only time |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
248 stamps in the range 1901-12-13 20:45:52 through 2038-01-18 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
249 03:14:07 UTC, assuming POSIX time_t with no leap seconds, so test |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
250 cases outside this range will not work on such a host. |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
251 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
252 Also, the first two lines of test data assume that the current |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
253 year is 2002. |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
254 |
1492 | 255 BEGIN-DATA |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
256 12131415.16 13 1039788916 Fri Dec 13 14:15:16 2002 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
257 12131415.16 13 1039788916 Fri Dec 13 14:15:16 2002 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
258 000001010000.00 13 -62167132800 Sun Jan 1 00:00:00 0000 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
259 190112132045.52 13 -2147483648 Fri Dec 13 20:45:52 1901 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
260 190112132045.53 13 -2147483647 Fri Dec 13 20:45:53 1901 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
261 190112132046.52 13 -2147483588 Fri Dec 13 20:46:52 1901 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
262 190112132145.52 13 -2147480048 Fri Dec 13 21:45:52 1901 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
263 190112142045.52 13 -2147397248 Sat Dec 14 20:45:52 1901 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
264 190201132045.52 13 -2144805248 Mon Jan 13 20:45:52 1902 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
265 196912312359.59 13 -1 Wed Dec 31 23:59:59 1969 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
266 197001010000.00 13 0 Thu Jan 1 00:00:00 1970 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
267 197001010000.01 13 1 Thu Jan 1 00:00:01 1970 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
268 197001010001.00 13 60 Thu Jan 1 00:01:00 1970 |
11989
f40dff4e11c8
posixtm: don't reject a time with "60" as the number of seconds
Jim Meyering <meyering@redhat.com>
parents:
10860
diff
changeset
|
269 197001010000.60 13 60 Thu Jan 1 00:01:00 1970 |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
270 197001010100.00 13 3600 Thu Jan 1 01:00:00 1970 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
271 197001020000.00 13 86400 Fri Jan 2 00:00:00 1970 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
272 197002010000.00 13 2678400 Sun Feb 1 00:00:00 1970 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
273 197101010000.00 13 31536000 Fri Jan 1 00:00:00 1971 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
274 197001000000.00 13 * * |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
275 197000010000.00 13 * * |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
276 197001010060.00 13 * * |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
277 197001012400.00 13 * * |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
278 197001320000.00 13 * * |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
279 197013010000.00 13 * * |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
280 203801190314.06 13 2147483646 Tue Jan 19 03:14:06 2038 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
281 203801190314.07 13 2147483647 Tue Jan 19 03:14:07 2038 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
282 203801190314.08 13 2147483648 Tue Jan 19 03:14:08 2038 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
283 999912312359.59 13 253402300799 Fri Dec 31 23:59:59 9999 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
284 1112131415 13 1323785700 Tue Dec 13 14:15:00 2011 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
285 1112131415.16 13 1323785716 Tue Dec 13 14:15:16 2011 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
286 201112131415.16 13 1323785716 Tue Dec 13 14:15:16 2011 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
287 191112131415.16 13 -1831974284 Wed Dec 13 14:15:16 1911 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
288 203712131415.16 13 2144326516 Sun Dec 13 14:15:16 2037 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
289 3712131415.16 13 2144326516 Sun Dec 13 14:15:16 2037 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
290 6812131415.16 13 3122633716 Thu Dec 13 14:15:16 2068 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
291 6912131415.16 13 -1590284 Sat Dec 13 14:15:16 1969 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
292 7012131415.16 13 29945716 Sun Dec 13 14:15:16 1970 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
293 1213141599 2 945094500 Mon Dec 13 14:15:00 1999 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
294 1213141500 2 976716900 Wed Dec 13 14:15:00 2000 |
1492 | 295 END-DATA |
296 | |
297 */ | |
298 | |
299 # define MAX_BUFF_LEN 1024 | |
300 | |
301 int | |
4671 | 302 main (void) |
1492 | 303 { |
304 char buff[MAX_BUFF_LEN + 1]; | |
305 | |
306 buff[MAX_BUFF_LEN] = 0; | |
307 while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0]) | |
308 { | |
309 char time_str[MAX_BUFF_LEN]; | |
310 unsigned int syntax_bits; | |
311 time_t t; | |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
312 if (sscanf (buff, "%s %u", time_str, &syntax_bits) != 2) |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
313 printf ("*\n"); |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
314 else |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
315 { |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
316 printf ("%-15s %2u ", time_str, syntax_bits); |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
317 if (posixtime (&t, time_str, syntax_bits)) |
5159 | 318 printf ("%12ld %s", (long int) t, ctime (&t)); |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
319 else |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
320 printf ("%12s %s", "*", "*\n"); |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
321 } |
1492 | 322 } |
323 exit (0); | |
324 | |
325 } | |
326 #endif | |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
327 |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
328 /* |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
329 Local Variables: |
7302
8a1a9361108c
* _fpending.c: Include <config.h> unconditionally, since we no
Paul Eggert <eggert@cs.ucla.edu>
parents:
6932
diff
changeset
|
330 compile-command: "gcc -DTEST_POSIXTIME -g -O -Wall -W posixtm.c" |
4342
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
331 End: |
16bad8d9422d
Fix some minor time-related bugs with POSIX time arguments.
Jim Meyering <jim@meyering.net>
parents:
3699
diff
changeset
|
332 */ |