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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1513
136765db2d16 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 1512
diff changeset
1 /* Parse dates for touch and date.
5159
a535859efd14 Merge from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4671
diff changeset
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
6505d2a987d6 Remove K&R cruft.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4356
diff changeset
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
6505d2a987d6 Remove K&R cruft.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4356
diff changeset
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
5134a2c5eaf1 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 1486
diff changeset
34
5134a2c5eaf1 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 1486
diff changeset
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
5134a2c5eaf1 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 1486
diff changeset
38 - It's typically faster.
3699
48781102544a (ISDIGIT): Comment fix.
Jim Meyering <jim@meyering.net>
parents: 3675
diff changeset
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
48781102544a (ISDIGIT): Comment fix.
Jim Meyering <jim@meyering.net>
parents: 3675
diff changeset
41 of `digit' even when the host does not conform to POSIX. */
5159
a535859efd14 Merge from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4671
diff changeset
42 #define ISDIGIT(c) ((unsigned int) (c) - '0' <= 9)
1490
5134a2c5eaf1 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 1486
diff changeset
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
48781102544a (ISDIGIT): Comment fix.
Jim Meyering <jim@meyering.net>
parents: 3675
diff changeset
51 touch mmddhhmm[YY] FILE... (obsoleted by POSIX 1003.1-2001)
6527
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
52 8 or 10 digits, YY (if present) must be in the range 69-99
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
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
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
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
48781102544a (ISDIGIT): Comment fix.
Jim Meyering <jim@meyering.net>
parents: 3675
diff changeset
69 POSIX requires that 00-68 be interpreted as 2000-2068,
48781102544a (ISDIGIT): Comment fix.
Jim Meyering <jim@meyering.net>
parents: 3675
diff changeset
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
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
72 {
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
73 if (syntax_bits & PDS_PRE_2000)
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
74 return 1;
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
75 tm->tm_year += 100;
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
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
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
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
5134a2c5eaf1 *** empty log message ***
Jim Meyering <jim@meyering.net>
parents: 1486
diff changeset
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
a535859efd14 Merge from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4671
diff changeset
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
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
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
6b31c8787689 Sync from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 6275
diff changeset
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
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
237
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
238 #ifdef TEST_POSIXTIME
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
239 /*
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
240 Test mainly with syntax_bits == 13
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
241 (aka: (PDS_LEADING_YEAR | PDS_CENTURY | PDS_SECONDS))
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
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
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
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
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
295 END-DATA
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
296
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
297 */
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
298
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
299 # define MAX_BUFF_LEN 1024
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
300
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
301 int
4671
6505d2a987d6 Remove K&R cruft.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4356
diff changeset
302 main (void)
1492
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
303 {
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
304 char buff[MAX_BUFF_LEN + 1];
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
305
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
306 buff[MAX_BUFF_LEN] = 0;
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
307 while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0])
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
308 {
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
309 char time_str[MAX_BUFF_LEN];
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
310 unsigned int syntax_bits;
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
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
a535859efd14 Merge from coreutils.
Paul Eggert <eggert@cs.ucla.edu>
parents: 4671
diff changeset
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
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
322 }
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
323 exit (0);
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
324
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
325 }
344a23067089 add test harness
Jim Meyering <jim@meyering.net>
parents: 1491
diff changeset
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 */