Date: Sun, 1 Jun 2003 23:48:04 +1000 (EST) From: Bruce Evans <bde@zeta.org.au> To: Erik Trulsson <ertr1013@student.uu.se> Cc: cvs-all@FreeBSD.org Subject: Re: cvs commit: src/sys/i386/isa clock.c Message-ID: <20030601231715.W11782@gamplex.bde.org> In-Reply-To: <20030531203751.GA38298@falcon.midgard.homeip.net> References: <200305312023.h4VKNkKq037126@repoman.freebsd.org> <20030531203751.GA38298@falcon.midgard.homeip.net>
index | next in thread | previous in thread | raw e-mail
On Sat, 31 May 2003, Erik Trulsson wrote: > On Sat, May 31, 2003 at 01:23:46PM -0700, Poul-Henning Kamp wrote: > > phk 2003/05/31 13:23:46 PDT > > > > FreeBSD src repository > > > > Modified files: > > sys/i386/isa clock.c > > Log: > > Don't rely on boolean expression evaluating to 1 or 0 by default. > > Why not? In C the relational operators (including '==') *always* > evaluate to 1 or 0. One can rely on that. > I.e. this change doesn't really accomplish anything except make the > expression somewhat more complicated. The result of the expression is used as a non-boolean in some places, and setting its values explicitly is clearer there. The values are 0 and the number of extra days in February in a leap year; the latter just happens to be 1. In places where the expression is used as a boolean, the change is an obfuscation. %%% $ grep LEAPYEAR clock.c #define LEAPYEAR(y) (((u_int)(y) % 4 == 0) ? 1 : 0) if ((month > 2) && LEAPYEAR(year)) days += DAYSPERYEAR + LEAPYEAR(y); for (y = 1970, m = DAYSPERYEAR + LEAPYEAR(y); y++, m = DAYSPERYEAR + LEAPYEAR(y)) if (m == 1 && LEAPYEAR(y)) %%% The correct fix here was to replace LEAPYEAR(y) by (LEAPYEAR(y) ? 1 : 0) in the 3 expressions that add it, and not change the boolean expression LEAPYEAR(y). LEAPYEAR() is correctly named for a boolean expression that classifies leap years but bogusly named for the non-boolean adjustment to the number of days in February, so it shouldn't have been changed to give the latter as its primary result and the former as an alias. Brucehome | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030601231715.W11782>
