summaryrefslogtreecommitdiffstats
path: root/usr.bin/calendar
diff options
context:
space:
mode:
authorgrog <grog@FreeBSD.org>2007-06-03 03:07:10 +0000
committergrog <grog@FreeBSD.org>2007-06-03 03:07:10 +0000
commitfa5746210d71fd8623e68130ad46cd4193170379 (patch)
treef6ab848b5c02527e5648e7e2a4f4ca800158e073 /usr.bin/calendar
parent5b6f6b13d1bfd5ff93ffd04651d3296eefadfb2a (diff)
downloadFreeBSD-src-fa5746210d71fd8623e68130ad46cd4193170379.zip
FreeBSD-src-fa5746210d71fd8623e68130ad46cd4193170379.tar.gz
Fix various bugs in the -A and -B options.
Submitted by: edwin@ PR: bin/113250 MFC after: 2 weeks
Diffstat (limited to 'usr.bin/calendar')
-rw-r--r--usr.bin/calendar/day.c44
1 files changed, 36 insertions, 8 deletions
diff --git a/usr.bin/calendar/day.c b/usr.bin/calendar/day.c
index 90890d0..e103c84 100644
--- a/usr.bin/calendar/day.c
+++ b/usr.bin/calendar/day.c
@@ -377,17 +377,45 @@ isnow(char *endp, int *monthp, int *dayp, int *varp)
#ifdef DEBUG
fprintf(stderr, "day2: day %d(%d-%d) yday %d\n", *dayp, day, cumdays[month], tp->tm_yday);
#endif
- /* if today or today + offset days */
+
+ /* when only today and tomorrow (or today and the next three days if
+ it is friday) is needed */
+ if (f_dayBefore == 0 &&
+ f_dayAfter == 0 ) {
+ /* no year rollover */
+ if (day >= tp->tm_yday &&
+ day <= tp->tm_yday + offset)
+ return (1);
+ /* year rollover */
+ if (tp->tm_yday + offset >= yrdays) {
+ int end = tp->tm_yday + offset - yrdays;
+ if (day <= end)
+ return (1);
+ }
+
+ return (0);
+ }
+
+ /* When days before or days after is specified */
+ /* no year rollover */
if (day >= tp->tm_yday - f_dayBefore &&
- day <= tp->tm_yday + offset + f_dayAfter)
+ day <= tp->tm_yday + f_dayAfter)
return (1);
- /* if number of days left in this year + days to event in next year */
- if (yrdays - tp->tm_yday + day <= offset + f_dayAfter ||
- /* a year backward, eg. 6 Jan and 10 days before -> 27. Dec */
- tp->tm_yday + day - f_dayBefore < 0
- )
- return (1);
+ /* next year */
+ if (tp->tm_yday + f_dayAfter >= yrdays) {
+ int end = tp->tm_yday + f_dayAfter - yrdays;
+ if (day <= end)
+ return (1);
+ }
+
+ /* previous year */
+ if (tp->tm_yday - f_dayBefore < 0) {
+ int before = yrdays + (tp->tm_yday - f_dayBefore );
+ if (day >= before)
+ return (1);
+ }
+
return (0);
}
OpenPOWER on IntegriCloud