diff options
author | Paul Janzen <pjanzen@cvs.openbsd.org> | 1998-11-04 11:32:03 +0000 |
---|---|---|
committer | Paul Janzen <pjanzen@cvs.openbsd.org> | 1998-11-04 11:32:03 +0000 |
commit | 6db8b48c2d7a5d5620138f85c25c9941e9aeb2b9 (patch) | |
tree | 8063c525d8371399861b6b28fa7d3adb6b24147f /usr.bin | |
parent | 19ceb41e26b9169446c457bd83a13fc2c5c271c1 (diff) |
Various fixes, including closing user/630.
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/calendar/calendar.c | 7 | ||||
-rw-r--r-- | usr.bin/calendar/day.c | 63 |
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; } } |