From edwin@mavetju.org  Sat Jun  2 12:59:34 2007
Return-Path: <edwin@mavetju.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id 0F03A16A468
	for <FreeBSD-gnats-submit@freebsd.org>; Sat,  2 Jun 2007 12:59:34 +0000 (UTC)
	(envelope-from edwin@mavetju.org)
Received: from mail4out.barnet.com.au (mail4.barnet.com.au [202.83.178.125])
	by mx1.freebsd.org (Postfix) with ESMTP id 962B313C44B
	for <FreeBSD-gnats-submit@freebsd.org>; Sat,  2 Jun 2007 12:59:33 +0000 (UTC)
	(envelope-from edwin@mavetju.org)
Received: by mail4out.barnet.com.au (Postfix, from userid 1001)
	id 4DCE137DA20; Sat,  2 Jun 2007 22:59:32 +1000 (EST)
Received: from mail4auth.barnet.com.au (mail4.barnet.com.au [202.83.178.125])
	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
	(Client did not present a certificate)
	by mail4.barnet.com.au (Postfix) with ESMTP id 051C3422114
	for <FreeBSD-gnats-submit@freebsd.org>; Sat,  2 Jun 2007 22:59:32 +1000 (EST)
Received: from k7.mavetju (k7.mavetju.org [10.251.1.18])
	by mail4auth.barnet.com.au (Postfix) with ESMTP id A447137DA0F
	for <FreeBSD-gnats-submit@freebsd.org>; Sat,  2 Jun 2007 22:59:31 +1000 (EST)
Received: by k7.mavetju (Postfix, from userid 1001)
	id 78E7A2E; Sat,  2 Jun 2007 22:59:31 +1000 (EST)
Message-Id: <20070602125931.78E7A2E@k7.mavetju>
Date: Sat,  2 Jun 2007 22:59:31 +1000 (EST)
From: Edwin Groothuis <edwin@mavetju.org>
Reply-To: Edwin Groothuis <edwin@mavetju.org>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [patch] fix calendar -A and -B options
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         113250
>Category:       bin
>Synopsis:       [patch] fix calendar(1) -A and -B options
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    edwin
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sat Jun 02 13:00:10 GMT 2007
>Closed-Date:    Tue Aug 05 00:23:50 UTC 2008
>Last-Modified:  Tue Aug 05 00:23:50 UTC 2008
>Originator:     Edwin Groothuis
>Release:        FreeBSD 6.2-RELEASE-p4 i386
>Organization:
-
>Environment:
System: FreeBSD k7.mavetju 6.2-RELEASE-p4 FreeBSD 6.2-RELEASE-p4 #0: Thu Apr 26 17:55:55 UTC 2007 root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/SMP i386

>Description:

calendar has the following two options:

    -A num  Print lines from today and the next num days (forward, future).
    -B num  Print lines from today and the previous num days (backward, past).

Currently, while using the attached calibration file, calendar says:

[/usr/src/usr.bin/calendar] root@k7>calendar -B 3 -f c.calibrate -t 04.01.2006
Jan  1  jan 1
Jan  2  jan 2
Jan  3  jan 3
Jan  4  jan 4
Jan  5  jan 5

That is one day too much

[/usr/src/usr.bin/calendar] root@k7>calendar -B 3 -f c.calibrate -t 01.01.2006
Jan  1  jan 1
Jan  2  jan 2
Jan  3  jan 3

That is not three days before 01.01.2006

[/usr/src/usr.bin/calendar] root@k7>calendar -A 3 -f c.calibrate -t 27.12.2006
Dec 27  dec 27
Dec 28  dec 28
Dec 29  dec 29
Dec 30  dec 30
Dec 31  dec 31

That is one day too much

[/usr/src/usr.bin/calendar] root@k7>calendar -A 3 -f c.calibrate -t 31.12.2006
Jan  1  jan 1
Jan  2  jan 2
Jan  3  jan 3
Jan  4  jan 4
Dec 31  dec 31

That is in the wrong order

>How-To-Repeat:

Use this calendar file:

calendar.calibration file:
01/01	jan 1
01/02	jan 2
01/03	jan 3
01/04	jan 4
01/05	jan 5
01/06	jan 6
01/07	jan 7
01/08	jan 8
01/09	jan 9
12/22	dec 22
12/23	dec 23
12/24	dec 24
12/25	dec 25
12/26	dec 26
12/27	dec 27
12/28	dec 28
12/29	dec 29
12/30	dec 30
12/31	dec 31


Fix:

Instead of doing the matches of before, after, offset etc in one
function, split it out properly. First do checks if the standard
dates have to be given, then check if the -A or -B option is given.

--- day.c.orig	Sat Jun  2 14:48:00 2007
+++ day.c	Sat Jun  2 22:46:57 2007
@@ -381,17 +381,45 @@
 #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);
 }
 
>Fix:
>Release-Note:
>Audit-Trail:

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: bin/113250: commit references a PR
Date: Sun,  3 Jun 2007 03:07:18 +0000 (UTC)

 grog        2007-06-03 03:07:10 UTC
 
   FreeBSD src repository
 
   Modified files:
     usr.bin/calendar     day.c 
   Log:
   Fix various bugs in the -A and -B options.
   
   Submitted by:   edwin@
   PR:             bin/113250
   MFC after:      2 weeks
   
   Revision  Changes    Path
   1.26      +36 -8     src/usr.bin/calendar/day.c
 _______________________________________________
 cvs-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/cvs-all
 To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: edwin 
State-Changed-When: Sat Jun 9 13:18:56 UTC 2007 
State-Changed-Why:  
Commited to HEAD, waiting for MFC 


Responsible-Changed-From-To: freebsd-bugs->grog 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Sat Jun 9 13:18:56 UTC 2007 
Responsible-Changed-Why:  
Grog commited it in day.c 1.26 

http://www.freebsd.org/cgi/query-pr.cgi?pr=113250 
Responsible-Changed-From-To: grog->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Jun 25 02:12:49 UTC 2007 
Responsible-Changed-Why:  
grog@ asked me take this one. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=4629 
Responsible-Changed-From-To: grog->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Jun 25 02:12:49 UTC 2007 
Responsible-Changed-Why:  
grog@ asked me to take this one. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=26658 
Responsible-Changed-From-To: grog->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Jun 25 02:12:49 UTC 2007 
Responsible-Changed-Why:  
grog@ asked me to take this one. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=34497 
Responsible-Changed-From-To: grog->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Jun 25 02:12:49 UTC 2007 
Responsible-Changed-Why:  
grog@ asked me to take this one. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=36501 
Responsible-Changed-From-To: grog->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Jun 25 02:12:49 UTC 2007 
Responsible-Changed-Why:  
grog@ asked me to take this one. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=36960 
Responsible-Changed-From-To: grog->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Jun 25 02:12:49 UTC 2007 
Responsible-Changed-Why:  
grog@ asked me to take this one. 


http://www.freebsd.org/cgi/query-pr.cgi?pr=37387 
Responsible-Changed-From-To: grog->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Jun 25 02:12:49 UTC 2007 
Responsible-Changed-Why:  
grog@ asked me to take this one. 


http://www.freebsd.org/cgi/query-pr.cgi?pr=50118 
Responsible-Changed-From-To: grog->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Jun 25 02:12:49 UTC 2007 
Responsible-Changed-Why:  
grog@ asked me to take this one. 


http://www.freebsd.org/cgi/query-pr.cgi?pr=51296 
Responsible-Changed-From-To: grog->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Jun 25 02:12:49 UTC 2007 
Responsible-Changed-Why:  
grog@ asked me to take this one. 


http://www.freebsd.org/cgi/query-pr.cgi?pr=61641 
Responsible-Changed-From-To: grog->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Jun 25 02:12:49 UTC 2007 
Responsible-Changed-Why:  
grog@ asked me to take this one. 


http://www.freebsd.org/cgi/query-pr.cgi?pr=113250 
Responsible-Changed-From-To: edwin->freebsd-bugs 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Thu Feb 14 10:34:20 UTC 2008 
Responsible-Changed-Why:  

Give back into the pool until later. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=113250 
Responsible-Changed-From-To: freebsd-bugs->edwin 
Responsible-Changed-By: edwin 
Responsible-Changed-When: Mon Aug 4 11:11:40 UTC 2008 
Responsible-Changed-Why:  
Take for MFC 

http://www.freebsd.org/cgi/query-pr.cgi?pr=113250 
State-Changed-From-To: patched->closed 
State-Changed-By: edwin 
State-Changed-When: Tue Aug 5 00:23:41 UTC 2008 
State-Changed-Why:  
Committed, thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=113250 
>Unformatted:
