summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorPaul Janzen <pjanzen@cvs.openbsd.org>1998-11-04 11:32:03 +0000
committerPaul Janzen <pjanzen@cvs.openbsd.org>1998-11-04 11:32:03 +0000
commit6db8b48c2d7a5d5620138f85c25c9941e9aeb2b9 (patch)
tree8063c525d8371399861b6b28fa7d3adb6b24147f /usr.bin
parent19ceb41e26b9169446c457bd83a13fc2c5c271c1 (diff)
Various fixes, including closing user/630.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/calendar/calendar.c7
-rw-r--r--usr.bin/calendar/day.c63
2 files changed, 32 insertions, 38 deletions
diff --git a/usr.bin/calendar/calendar.c b/usr.bin/calendar/calendar.c
index 6fbf4e8329a..0a3dd8ef863 100644
--- a/usr.bin/calendar/calendar.c
+++ b/usr.bin/calendar/calendar.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: calendar.c,v 1.10 1997/09/15 07:12:03 millert Exp $ */
+/* $OpenBSD: calendar.c,v 1.11 1998/11/04 11:32:02 pjanzen Exp $ */
/*
* Copyright (c) 1989, 1993, 1994
@@ -43,7 +43,7 @@ static const char copyright[] =
#if 0
static const char sccsid[] = "@(#)calendar.c 8.3 (Berkeley) 3/25/94";
#else
-static char rcsid[] = "$OpenBSD: calendar.c,v 1.10 1997/09/15 07:12:03 millert Exp $";
+static char rcsid[] = "$OpenBSD: calendar.c,v 1.11 1998/11/04 11:32:02 pjanzen Exp $";
#endif
#endif /* not lint */
@@ -91,7 +91,8 @@ main(argc, argv)
break;
case 't': /* other date, undocumented, for tests */
- f_time = Mktime (optarg);
+ if ((f_time = Mktime (optarg)) <= 0)
+ errx(1, "specified date is outside allowed range");
break;
case 'A': /* days after current date */
diff --git a/usr.bin/calendar/day.c b/usr.bin/calendar/day.c
index e6e64ad1606..011c70e9688 100644
--- a/usr.bin/calendar/day.c
+++ b/usr.bin/calendar/day.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: day.c,v 1.4 1998/03/30 06:59:26 deraadt Exp $ */
+/* $OpenBSD: day.c,v 1.5 1998/11/04 11:32:02 pjanzen Exp $ */
/*
* Copyright (c) 1989, 1993, 1994
@@ -43,7 +43,7 @@ static const char copyright[] =
#if 0
static const char sccsid[] = "@(#)calendar.c 8.3 (Berkeley) 3/25/94";
#else
-static char rcsid[] = "$OpenBSD: day.c,v 1.4 1998/03/30 06:59:26 deraadt Exp $";
+static char rcsid[] = "$OpenBSD: day.c,v 1.5 1998/11/04 11:32:02 pjanzen Exp $";
#endif
#endif /* not lint */
@@ -183,7 +183,9 @@ time_t Mktime (date)
return((time_t)-1);
tm.tm_sec = 0;
tm.tm_min = 0;
- tm.tm_hour = 0;
+ /* Avoid getting caught by a timezone shift; set time to noon */
+ tm.tm_isdst = 0;
+ tm.tm_hour = 12;
tm.tm_wday = 0;
tm.tm_mday = tp->tm_mday;
tm.tm_mon = tp->tm_mon;
@@ -199,12 +201,12 @@ time_t Mktime (date)
}
/* Year */
- if (len >= 7) {
+ if (len >= 6) {
*(date + len - 4) = '\0';
tm.tm_year = atoi(date);
/* tm_year up TM_YEAR_BASE ... */
- if (tm.tm_year < 70)
+ if (tm.tm_year < 69) /* Y2K */
tm.tm_year += 2000 - TM_YEAR_BASE;
else if (tm.tm_year < 100)
tm.tm_year += 1900 - TM_YEAR_BASE;
@@ -310,7 +312,7 @@ isnow(endp, monthp, dayp, varp)
/* convert Weekday into *next* Day,
* e.g.: 'Sunday' -> 22
- * 'SunayLast' -> ??
+ * 'SundayLast' -> ??
*/
if (flags & F_ISDAY) {
#if DEBUG
@@ -324,44 +326,35 @@ isnow(endp, monthp, dayp, varp)
/* negative offset; last, -4 .. -1 */
if (day < 0) {
v1 = day/10 - 1; /* offset -4 ... -1 */
- day = 10 + (day % 10); /* day 1 ... 7 */
+ day = 10 + (day % 10); /* day 1 ... 7 */
- /* day, eg '22th' */
- v2 = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
+ /* which weekday the end of the month is (1-7) */
+ v2 = (cumdays[month + 1] - tp->tm_yday +
+ tp->tm_wday + 371) % 7 + 1;
- /* (month length - day) / 7 + 1 */
- if (((int)((cumdays[month+1] -
- cumdays[month] - v2) / 7) + 1) == -v1)
- /* bingo ! */
- day = v2;
-
- /* set to yesterday */
- else
- day = tp->tm_mday - 1;
+ /* and subtract enough days */
+ day = cumdays[month + 1] - cumdays[month] +
+ (v1 + 1) * 7 - (v2 - day + 7) % 7;
+#if DEBUG
+ fprintf(stderr, "\nMonth %d ends on weekday %d\n", month, v2);
+#endif
}
/* first, second ... +1 ... +5 */
else {
- v1 = day/10; /* offset: +1 (first Sunday) ... */
+ v1 = day/10; /* offset */
day = day % 10;
- /* day, eg '22th' */
- v2 = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
-
- /* Hurrah! matched */
- if ( ((v2 - 1 + 7) / 7) == v1 )
- day = v2;
-
- /* set to yesterday */
- else
- day = tp->tm_mday - 1;
- }
+ /* which weekday the first of the month is */
+ v2 = (cumdays[month] - tp->tm_yday +
+ tp->tm_wday + 372) % 7 + 1;
+
+ /* and add enough days */
+ day = 1 + (v1 - 1) * 7 + (day - v2 + 7) % 7;
+#if DEBUG
+ fprintf(stderr, "\nMonth %d starts on weekday %d\n", month, v2);
+#endif
}
-
- /* wired */
- else {
- day = tp->tm_mday + (((day - 1) - tp->tm_wday + 7) % 7);
- *varp = 1;
}
}