1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
$NetBSD: patch-al,v 1.3 2021/05/20 19:21:13 christos Exp $
--- dates.c.orig 2021-05-20 15:01:53.692058779 -0400
+++ dates.c 2021-05-20 15:14:15.931558100 -0400
@@ -101,7 +101,7 @@
{
long year, julian;
- if (tym->tm_year < 100)
+ if (tym->tm_year < 1000)
year = tym->tm_year + 1900;
if (year < 69)
year += 100;
@@ -123,7 +123,7 @@
struct tm *T;
char *tz;
#if defined(SYSV) || defined(TIMEZONE) || defined(POSIX)
- long x;
+ time_t x;
(void) time(&x);
T = localtime(&x);
@@ -172,7 +172,7 @@
static char time_buf[30];
struct tm *T;
register char *p = time_buf;
- long x;
+ time_t x;
if (!opts)
return NULL;
@@ -375,6 +375,11 @@
}
if (Year > 1900)
Year -= 1900;
+ else if (Year < 0) {
+ print("Unknown date format: %s\n", p);
+ return NULL;
+ }
+
if (!Month && (Month = month_to_n(month)) == -1) {
print("bad month: %s\n", p);
return NULL;
@@ -413,6 +418,7 @@
char *Date, *Yr, *Mon, *Day, *Wkday, *Tm, *Zone, *ret_buf;
{
long gmt;
+ time_t tgmt;
struct tm *T;
char a_or_p, *p = ret_buf;
@@ -420,7 +426,8 @@
(void) sscanf(Date, "%ld%3c%s", &gmt, Wkday, Zone);
Wkday[3] = 0;
gmt += getzoff(Zone);
- T = gmtime(&gmt);
+ tgmt = gmt < 0 ? 0 : gmt;
+ T = gmtime(&tgmt);
a_or_p = (T->tm_hour < 12)? 'a': 'p';
(void) sprintf(Yr, "%d", T->tm_year + 1900);
|