From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 1018 invoked from network); 28 Feb 2021 17:06:31 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 28 Feb 2021 17:06:31 -0000 Received: (qmail 12044 invoked by uid 550); 28 Feb 2021 17:06:28 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 12026 invoked from network); 28 Feb 2021 17:06:27 -0000 Date: Sun, 28 Feb 2021 12:06:15 -0500 From: Rich Felker To: Mattias =?utf-8?Q?Andr=C3=A9e?= Cc: musl@lists.openwall.com Message-ID: <20210228170614.GF32655@brightrain.aerifal.cx> References: <20210228150912.1532943-1-maandree@kth.se> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20210228150912.1532943-1-maandree@kth.se> User-Agent: Mutt/1.5.21 (2010-09-15) Subject: Re: [musl] [PATCH] Remove unnecessary if in __secs_to_tm On Sun, Feb 28, 2021 at 04:09:12PM +0100, Mattias Andrée wrote: > Since years divisible by 100 but not by 400 are not leap years, > q_cycles can at most be 24 (DAYS_PER_100Y / DAYS_PER_4Y == 24). > --- > src/time/__secs_to_tm.c | 3 +-- > 1 file changed, 1 insertion(+), 2 deletions(-) > > diff --git a/src/time/__secs_to_tm.c b/src/time/__secs_to_tm.c > index 093d9021..2d0c0b2c 100644 > --- a/src/time/__secs_to_tm.c > +++ b/src/time/__secs_to_tm.c > @@ -44,8 +44,7 @@ int __secs_to_tm(long long t, struct tm *tm) > remdays -= c_cycles * DAYS_PER_100Y; > > q_cycles = remdays / DAYS_PER_4Y; > - if (q_cycles == 25) q_cycles--; > - remdays -= q_cycles * DAYS_PER_4Y; > + remdays %= DAYS_PER_4Y; > > remyears = remdays / 365; > if (remyears == 4) remyears--; I think you're right about the condition being impossible -- it looks like the error in thinking was that, while 400Y and 4Y are strictly larger than 4*100Y and 4*1Y respectively, 100Y is smaller than 25*4Y. However, changing the -= to %= is not desirable. The point of the -= has nothing to do with the edge case that can't happen; it's to avoid a modulo operation. Since the divisor is a constant though maybe the compiler can generate the same code for both, anyway..? Rich