Skip site navigation (1)Skip section navigation (2)
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 &lt;<a href=
=3D"mailto:pfg@freebsd.org">pfg@freebsd.org</a>&gt; 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&#39;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&#39;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&#39;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:&#39;Helvetica Neue&#39;,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 &lt;<a href=3D"mailto:imp@bsdimp.com" target=3D"_blank" rel=3D"noreferre=
r">imp@bsdimp.com</a>&gt; 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 &lt;<a shape=3D"re=
ct" href=3D"mailto:pfg@freebsd.org" rel=3D"nofollow noreferrer" target=3D"_=
blank">pfg@freebsd.org</a>&gt; 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 &lt;pfg@FreeBSD.org&gt;<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 &lt;pfg@FreeBSD.org&gt;<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(&quot;$FreeBSD$&quot;);<br clear=3D"none">
=C2=A0#include &quot;vary.h&quot;<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 &quot;0123456789&quot;;<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 &#39;+&#39;:<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 &lt; 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 &lt; 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 &lt; 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 &lt; 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-&gt;next) {<br clear=3D"none">
=C2=A0 =C2=A0 =C2=A0type =3D *v-&gt;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>