Date: Mon, 3 Jul 2023 22:00:34 -0600 From: Warner Losh <imp@bsdimp.com> To: Pedro Giffuni <pfg@freebsd.org> Cc: src-committers <src-committers@freebsd.org>, "<dev-commits-src-all@freebsd.org>" <dev-commits-src-all@freebsd.org>, "<dev-commits-src-main@freebsd.org>" <dev-commits-src-main@freebsd.org> Subject: Re: git: 4456846a1a0d - main - bin/date: Upgrade calculations Message-ID: <CANCZdfrSnS5Xq020jwsY-pgmTCJEn5Ka3Zr5vqt6OK%2Buawc4tA@mail.gmail.com> In-Reply-To: <1037448433.54513.1688441647903@mail.yahoo.com> References: <202307040308.36438MTA093771@gitrepo.freebsd.org> <CANCZdfqMvf1QuS=fNQjRPe3YUbp1zPQW4aorh=VTRHk%2Bf_e8qg@mail.gmail.com> <1037448433.54513.1688441647903@mail.yahoo.com>
next in thread | previous in thread | raw e-mail | index | archive | help
--000000000000e86aeb05ffa1535c Content-Type: text/plain; charset="UTF-8" On Mon, Jul 3, 2023, 9:34 PM Pedro Giffuni <pfg@freebsd.org> wrote: > Hmm ... > > Dragonfly has no armv7 or i386, so they didn't get it too wrong. > I guess the int64_t would be a quick fix or another option, which I was > consideirng, was to look at unsigning it but taking care of the edge cases > ... I was too lazy for that. > > Please go ahead and do the quick fix ;) > What makes you say it's a quick fix? If the calculations need 64 bits, int64_t is the proper data type. How is that analysis wrong? Also, it's tradition that you should fix it... Warner > Pedro. > > On Monday, July 3, 2023 at 10:12:13 PM GMT-5, Warner Losh <imp@bsdimp.com> > wrote: > > > This is a nope on armv7 and i386. So it has no effect there. DF got it > wrong. These should likely be int64_t to avoid the overflow. No? > > Warner > > On Mon, Jul 3, 2023, 9:08 PM Pedro F. Giffuni <pfg@freebsd.org> wrote: > > The branch main has been updated by pfg: > > URL: > https://cgit.FreeBSD.org/src/commit/?id=4456846a1a0d8cb6d0e6bae89f1134fa0a1af5cf > > commit 4456846a1a0d8cb6d0e6bae89f1134fa0a1af5cf > Author: Pedro F. Giffuni <pfg@FreeBSD.org> > AuthorDate: 2023-07-03 02:32:10 +0000 > Commit: Pedro F. Giffuni <pfg@FreeBSD.org> > CommitDate: 2023-07-04 03:08:01 +0000 > > bin/date: Upgrade calculations > > Use long instead of int for numerous calculations, fixing a number of > date calculation overflow issues. > > Obtained from: DragonflyBSD > Git log: 4238ce6f0c6df33ce677ae298b245c62cd60fb43 (only partial) > --- > bin/date/vary.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/bin/date/vary.c b/bin/date/vary.c > index 5f0123110ee3..6f3c59950ecf 100644 > --- a/bin/date/vary.c > +++ b/bin/date/vary.c > @@ -34,7 +34,7 @@ __FBSDID("$FreeBSD$"); > #include "vary.h" > > struct trans { > - int val; > + long val; > const char *str; > }; > > @@ -52,7 +52,7 @@ static struct trans trans_wday[] = { > }; > > static char digits[] = "0123456789"; > -static int adjhour(struct tm *, char, int, int); > +static int adjhour(struct tm *, char, long, int); > > static int > domktime(struct tm *t, char type) > @@ -125,7 +125,7 @@ daysinmonth(const struct tm *t) > > > static int > -adjyear(struct tm *t, char type, int val, int mk) > +adjyear(struct tm *t, char type, long val, int mk) > { > switch (type) { > case '+': > @@ -146,7 +146,7 @@ adjyear(struct tm *t, char type, int val, int mk) > } > > static int > -adjmon(struct tm *t, char type, int val, int istext, int mk) > +adjmon(struct tm *t, char type, long val, int istext, int mk) > { > int lmdays; > > @@ -206,7 +206,7 @@ adjmon(struct tm *t, char type, int val, int istext, > int mk) > } > > static int > -adjday(struct tm *t, char type, int val, int mk) > +adjday(struct tm *t, char type, long val, int mk) > { > int lmdays; > > @@ -250,7 +250,7 @@ adjday(struct tm *t, char type, int val, int mk) > } > > static int > -adjwday(struct tm *t, char type, int val, int istext, int mk) > +adjwday(struct tm *t, char type, long val, int istext, int mk) > { > if (val < 0) > return 0; > @@ -286,7 +286,7 @@ adjwday(struct tm *t, char type, int val, int istext, > int mk) > } > > static int > -adjhour(struct tm *t, char type, int val, int mk) > +adjhour(struct tm *t, char type, long val, int mk) > { > if (val < 0) > return 0; > @@ -331,7 +331,7 @@ adjhour(struct tm *t, char type, int val, int mk) > } > > static int > -adjmin(struct tm *t, char type, int val, int mk) > +adjmin(struct tm *t, char type, long val, int mk) > { > if (val < 0) > return 0; > @@ -372,7 +372,7 @@ adjmin(struct tm *t, char type, int val, int mk) > } > > static int > -adjsec(struct tm *t, char type, int val, int mk) > +adjsec(struct tm *t, char type, long val, int mk) > { > if (val < 0) > return 0; > @@ -419,7 +419,7 @@ vary_apply(const struct vary *v, struct tm *t) > char which; > char *arg; > size_t len; > - int val; > + long val; > > for (; v; v = v->next) { > type = *v->arg; > > --000000000000e86aeb05ffa1535c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto"><div><br><br><div class=3D"gmail_quote"><div dir=3D"ltr" = class=3D"gmail_attr">On Mon, Jul 3, 2023, 9:34 PM Pedro Giffuni <<a href= =3D"mailto:pfg@freebsd.org">pfg@freebsd.org</a>> wrote:<br></div><blockq= uote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc = solid;padding-left:1ex"><div><div style=3D"font-family:Helvetica Neue,Helve= tica,Arial,sans-serif;font-size:16px"><div></div> <div dir=3D"ltr">Hmm ...</div><div dir=3D"ltr"><br></div><div dir= =3D"ltr">Dragonfly has no armv7 or i386, so they didn't get it too wron= g.</div><div dir=3D"ltr">I guess=C2=A0<span><span style=3D"color:rgb(0,0,0)= ;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:16px">the = int64_t would be a quick fix or</span></span> another option, which I was c= onsideirng, was to look at unsigning it but taking care of the edge cases .= .. I was too lazy for that.</div><div><br></div><div dir=3D"ltr">Please go = ahead and do the quick fix ;)</div></div></div></blockquote></div></div><di= v dir=3D"auto"><br></div><div dir=3D"auto">What makes you say it's a qu= ick fix? If the calculations need 64 bits, int64_t is the proper data type.= How is that analysis wrong?</div><div dir=3D"auto"><br></div><div dir=3D"a= uto">Also, it's tradition that you should fix it...</div><div dir=3D"au= to"><br></div><div dir=3D"auto">Warner</div><div dir=3D"auto"><br></div><di= v dir=3D"auto"><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote"= style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><d= iv><div style=3D"font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font= -size:16px"><div dir=3D"ltr"><br></div><div dir=3D"ltr">Pedro.</div><div di= r=3D"ltr"><br></div> =20 </div><div id=3D"m_-7242076856953348044ydp4b6aa0ddyahoo_quoted_9134= 776597"> <div style=3D"font-family:'Helvetica Neue',Helvetica,Ar= ial,sans-serif;font-size:13px;color:#26282a"> =20 <div> On Monday, July 3, 2023 at 10:12:13 PM GMT-5, Warner Lo= sh <<a href=3D"mailto:imp@bsdimp.com" target=3D"_blank" rel=3D"noreferre= r">imp@bsdimp.com</a>> wrote: </div> <div><br></div> <div><br></div> <div><div id=3D"m_-7242076856953348044ydp4b6aa0ddyiv0439244= 616"><div><div>This is a nope on armv7 and i386. So it has no effect there.= DF got it wrong. These should likely be int64_t to avoid the overflow. No?= <div><br clear=3D"none"></div><div>Warner</div></div><br clear=3D"none"><di= v id=3D"m_-7242076856953348044ydp4b6aa0ddyiv0439244616yqt39150"><div><div d= ir=3D"ltr">On Mon, Jul 3, 2023, 9:08 PM Pedro F. Giffuni <<a shape=3D"re= ct" href=3D"mailto:pfg@freebsd.org" rel=3D"nofollow noreferrer" target=3D"_= blank">pfg@freebsd.org</a>> wrote:<br clear=3D"none"></div><blockquote s= tyle=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The = branch main has been updated by pfg:<br clear=3D"none"> <br clear=3D"none"> URL: <a shape=3D"rect" href=3D"https://cgit.FreeBSD.org/src/commit/?id=3D44= 56846a1a0d8cb6d0e6bae89f1134fa0a1af5cf" rel=3D"nofollow noreferrer" target= =3D"_blank">https://cgit.FreeBSD.org/src/commit/?id=3D4456846a1a0d8cb6d0e6b= ae89f1134fa0a1af5cf</a><br clear=3D"none"> <br clear=3D"none"> commit 4456846a1a0d8cb6d0e6bae89f1134fa0a1af5cf<br clear=3D"none"> Author:=C2=A0 =C2=A0 =C2=A0Pedro F. Giffuni <pfg@FreeBSD.org><br clea= r=3D"none"> AuthorDate: 2023-07-03 02:32:10 +0000<br clear=3D"none"> Commit:=C2=A0 =C2=A0 =C2=A0Pedro F. Giffuni <pfg@FreeBSD.org><br clea= r=3D"none"> CommitDate: 2023-07-04 03:08:01 +0000<br clear=3D"none"> <br clear=3D"none"> =C2=A0 =C2=A0 bin/date: Upgrade calculations<br clear=3D"none"> <br clear=3D"none"> =C2=A0 =C2=A0 Use long instead of int for numerous calculations, fixing a n= umber of<br clear=3D"none"> =C2=A0 =C2=A0 date calculation overflow issues.<br clear=3D"none"> <br clear=3D"none"> =C2=A0 =C2=A0 Obtained from:=C2=A0 DragonflyBSD<br clear=3D"none"> =C2=A0 =C2=A0 Git log:=C2=A0 =C2=A0 =C2=A0 =C2=A0 4238ce6f0c6df33ce677ae298= b245c62cd60fb43 (only partial)<br clear=3D"none"> ---<br clear=3D"none"> =C2=A0bin/date/vary.c | 20 ++++++++++----------<br clear=3D"none"> =C2=A01 file changed, 10 insertions(+), 10 deletions(-)<br clear=3D"none"> <br clear=3D"none"> diff --git a/bin/date/vary.c b/bin/date/vary.c<br clear=3D"none"> index 5f0123110ee3..6f3c59950ecf 100644<br clear=3D"none"> --- a/bin/date/vary.c<br clear=3D"none"> +++ b/bin/date/vary.c<br clear=3D"none"> @@ -34,7 +34,7 @@ __FBSDID("$FreeBSD$");<br clear=3D"none"> =C2=A0#include "vary.h"<br clear=3D"none"> <br clear=3D"none"> =C2=A0struct trans {<br clear=3D"none"> -=C2=A0 int val;<br clear=3D"none"> +=C2=A0 long val;<br clear=3D"none"> =C2=A0 =C2=A0const char *str;<br clear=3D"none"> =C2=A0};<br clear=3D"none"> <br clear=3D"none"> @@ -52,7 +52,7 @@ static struct trans trans_wday[] =3D {<br clear=3D"none"> =C2=A0};<br clear=3D"none"> <br clear=3D"none"> =C2=A0static char digits[] =3D "0123456789";<br clear=3D"none"> -static int adjhour(struct tm *, char, int, int);<br clear=3D"none"> +static int adjhour(struct tm *, char, long, int);<br clear=3D"none"> <br clear=3D"none"> =C2=A0static int<br clear=3D"none"> =C2=A0domktime(struct tm *t, char type)<br clear=3D"none"> @@ -125,7 +125,7 @@ daysinmonth(const struct tm *t)<br clear=3D"none"> <br clear=3D"none"> <br clear=3D"none"> =C2=A0static int<br clear=3D"none"> -adjyear(struct tm *t, char type, int val, int mk)<br clear=3D"none"> +adjyear(struct tm *t, char type, long val, int mk)<br clear=3D"none"> =C2=A0{<br clear=3D"none"> =C2=A0 =C2=A0switch (type) {<br clear=3D"none"> =C2=A0 =C2=A0 =C2=A0case '+':<br clear=3D"none"> @@ -146,7 +146,7 @@ adjyear(struct tm *t, char type, int val, int mk)<br cl= ear=3D"none"> =C2=A0}<br clear=3D"none"> <br clear=3D"none"> =C2=A0static int<br clear=3D"none"> -adjmon(struct tm *t, char type, int val, int istext, int mk)<br clear=3D"n= one"> +adjmon(struct tm *t, char type, long val, int istext, int mk)<br clear=3D"= none"> =C2=A0{<br clear=3D"none"> =C2=A0 =C2=A0int lmdays;<br clear=3D"none"> <br clear=3D"none"> @@ -206,7 +206,7 @@ adjmon(struct tm *t, char type, int val, int istext, in= t mk)<br clear=3D"none"> =C2=A0}<br clear=3D"none"> <br clear=3D"none"> =C2=A0static int<br clear=3D"none"> -adjday(struct tm *t, char type, int val, int mk)<br clear=3D"none"> +adjday(struct tm *t, char type, long val, int mk)<br clear=3D"none"> =C2=A0{<br clear=3D"none"> =C2=A0 =C2=A0int lmdays;<br clear=3D"none"> <br clear=3D"none"> @@ -250,7 +250,7 @@ adjday(struct tm *t, char type, int val, int mk)<br cle= ar=3D"none"> =C2=A0}<br clear=3D"none"> <br clear=3D"none"> =C2=A0static int<br clear=3D"none"> -adjwday(struct tm *t, char type, int val, int istext, int mk)<br clear=3D"= none"> +adjwday(struct tm *t, char type, long val, int istext, int mk)<br clear=3D= "none"> =C2=A0{<br clear=3D"none"> =C2=A0 =C2=A0if (val < 0)<br clear=3D"none"> =C2=A0 =C2=A0 =C2=A0return 0;<br clear=3D"none"> @@ -286,7 +286,7 @@ adjwday(struct tm *t, char type, int val, int istext, i= nt mk)<br clear=3D"none"> =C2=A0}<br clear=3D"none"> <br clear=3D"none"> =C2=A0static int<br clear=3D"none"> -adjhour(struct tm *t, char type, int val, int mk)<br clear=3D"none"> +adjhour(struct tm *t, char type, long val, int mk)<br clear=3D"none"> =C2=A0{<br clear=3D"none"> =C2=A0 =C2=A0if (val < 0)<br clear=3D"none"> =C2=A0 =C2=A0 =C2=A0return 0;<br clear=3D"none"> @@ -331,7 +331,7 @@ adjhour(struct tm *t, char type, int val, int mk)<br cl= ear=3D"none"> =C2=A0}<br clear=3D"none"> <br clear=3D"none"> =C2=A0static int<br clear=3D"none"> -adjmin(struct tm *t, char type, int val, int mk)<br clear=3D"none"> +adjmin(struct tm *t, char type, long val, int mk)<br clear=3D"none"> =C2=A0{<br clear=3D"none"> =C2=A0 =C2=A0if (val < 0)<br clear=3D"none"> =C2=A0 =C2=A0 =C2=A0return 0;<br clear=3D"none"> @@ -372,7 +372,7 @@ adjmin(struct tm *t, char type, int val, int mk)<br cle= ar=3D"none"> =C2=A0}<br clear=3D"none"> <br clear=3D"none"> =C2=A0static int<br clear=3D"none"> -adjsec(struct tm *t, char type, int val, int mk)<br clear=3D"none"> +adjsec(struct tm *t, char type, long val, int mk)<br clear=3D"none"> =C2=A0{<br clear=3D"none"> =C2=A0 =C2=A0if (val < 0)<br clear=3D"none"> =C2=A0 =C2=A0 =C2=A0return 0;<br clear=3D"none"> @@ -419,7 +419,7 @@ vary_apply(const struct vary *v, struct tm *t)<br clear= =3D"none"> =C2=A0 =C2=A0char which;<br clear=3D"none"> =C2=A0 =C2=A0char *arg;<br clear=3D"none"> =C2=A0 =C2=A0size_t len;<br clear=3D"none"> -=C2=A0 int val;<br clear=3D"none"> +=C2=A0 long val;<br clear=3D"none"> <br clear=3D"none"> =C2=A0 =C2=A0for (; v; v =3D v->next) {<br clear=3D"none"> =C2=A0 =C2=A0 =C2=A0type =3D *v->arg;<br clear=3D"none"> </blockquote></div></div> </div></div></div> </div> </div></div></blockquote></div></div></div> --000000000000e86aeb05ffa1535c--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfrSnS5Xq020jwsY-pgmTCJEn5Ka3Zr5vqt6OK%2Buawc4tA>