Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Jul 2023 03:34:07 +0000 (UTC)
From:      Pedro Giffuni <pfg@freebsd.org>
To:        Warner Losh <imp@bsdimp.com>
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:  <1037448433.54513.1688441647903@mail.yahoo.com>
In-Reply-To: <CANCZdfqMvf1QuS=fNQjRPe3YUbp1zPQW4aorh=VTRHk%2Bf_e8qg@mail.gmail.com>
References:  <202307040308.36438MTA093771@gitrepo.freebsd.org> <CANCZdfqMvf1QuS=fNQjRPe3YUbp1zPQW4aorh=VTRHk%2Bf_e8qg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
------=_Part_54512_580997230.1688441647901
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

 Hmm ...
Dragonfly has no armv7 or i386, so they didn't get it too wrong.I guess=C2=
=A0the int64_t would be a quick fix or another option, which I was considei=
rng, was to look at unsigning it but taking care of the edge cases ... I wa=
s too lazy for that.
Please go ahead and do the quick fix ;)
Pedro.
    On Monday, July 3, 2023 at 10:12:13 PM GMT-5, Warner Losh <imp@bsdimp.c=
om> wrote: =20
=20
 This is a nope on armv7 and i386. So it has no effect there. DF got it wro=
ng. 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=3D4456846a1a0d8cb6d0e6bae89f11=
34fa0a1af5cf

commit 4456846a1a0d8cb6d0e6bae89f1134fa0a1af5cf
Author:=C2=A0 =C2=A0 =C2=A0Pedro F. Giffuni <pfg@FreeBSD.org>
AuthorDate: 2023-07-03 02:32:10 +0000
Commit:=C2=A0 =C2=A0 =C2=A0Pedro F. Giffuni <pfg@FreeBSD.org>
CommitDate: 2023-07-04 03:08:01 +0000

=C2=A0 =C2=A0 bin/date: Upgrade calculations

=C2=A0 =C2=A0 Use long instead of int for numerous calculations, fixing a n=
umber of
=C2=A0 =C2=A0 date calculation overflow issues.

=C2=A0 =C2=A0 Obtained from:=C2=A0 DragonflyBSD
=C2=A0 =C2=A0 Git log:=C2=A0 =C2=A0 =C2=A0 =C2=A0 4238ce6f0c6df33ce677ae298=
b245c62cd60fb43 (only partial)
---
=C2=A0bin/date/vary.c | 20 ++++++++++----------
=C2=A01 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$");
=C2=A0#include "vary.h"

=C2=A0struct trans {
-=C2=A0 int val;
+=C2=A0 long val;
=C2=A0 =C2=A0const char *str;
=C2=A0};

@@ -52,7 +52,7 @@ static struct trans trans_wday[] =3D {
=C2=A0};

=C2=A0static char digits[] =3D "0123456789";
-static int adjhour(struct tm *, char, int, int);
+static int adjhour(struct tm *, char, long, int);

=C2=A0static int
=C2=A0domktime(struct tm *t, char type)
@@ -125,7 +125,7 @@ daysinmonth(const struct tm *t)


=C2=A0static int
-adjyear(struct tm *t, char type, int val, int mk)
+adjyear(struct tm *t, char type, long val, int mk)
=C2=A0{
=C2=A0 =C2=A0switch (type) {
=C2=A0 =C2=A0 =C2=A0case '+':
@@ -146,7 +146,7 @@ adjyear(struct tm *t, char type, int val, int mk)
=C2=A0}

=C2=A0static 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)
=C2=A0{
=C2=A0 =C2=A0int lmdays;

@@ -206,7 +206,7 @@ adjmon(struct tm *t, char type, int val, int istext, in=
t mk)
=C2=A0}

=C2=A0static int
-adjday(struct tm *t, char type, int val, int mk)
+adjday(struct tm *t, char type, long val, int mk)
=C2=A0{
=C2=A0 =C2=A0int lmdays;

@@ -250,7 +250,7 @@ adjday(struct tm *t, char type, int val, int mk)
=C2=A0}

=C2=A0static 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)
=C2=A0{
=C2=A0 =C2=A0if (val < 0)
=C2=A0 =C2=A0 =C2=A0return 0;
@@ -286,7 +286,7 @@ adjwday(struct tm *t, char type, int val, int istext, i=
nt mk)
=C2=A0}

=C2=A0static int
-adjhour(struct tm *t, char type, int val, int mk)
+adjhour(struct tm *t, char type, long val, int mk)
=C2=A0{
=C2=A0 =C2=A0if (val < 0)
=C2=A0 =C2=A0 =C2=A0return 0;
@@ -331,7 +331,7 @@ adjhour(struct tm *t, char type, int val, int mk)
=C2=A0}

=C2=A0static int
-adjmin(struct tm *t, char type, int val, int mk)
+adjmin(struct tm *t, char type, long val, int mk)
=C2=A0{
=C2=A0 =C2=A0if (val < 0)
=C2=A0 =C2=A0 =C2=A0return 0;
@@ -372,7 +372,7 @@ adjmin(struct tm *t, char type, int val, int mk)
=C2=A0}

=C2=A0static int
-adjsec(struct tm *t, char type, int val, int mk)
+adjsec(struct tm *t, char type, long val, int mk)
=C2=A0{
=C2=A0 =C2=A0if (val < 0)
=C2=A0 =C2=A0 =C2=A0return 0;
@@ -419,7 +419,7 @@ vary_apply(const struct vary *v, struct tm *t)
=C2=A0 =C2=A0char which;
=C2=A0 =C2=A0char *arg;
=C2=A0 =C2=A0size_t len;
-=C2=A0 int val;
+=C2=A0 long val;

=C2=A0 =C2=A0for (; v; v =3D v->next) {
=C2=A0 =C2=A0 =C2=A0type =3D *v->arg;

 =20
------=_Part_54512_580997230.1688441647901
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<html><head></head><body><div class="ydp9448d369yahoo-style-wrap" style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:16px;"><div></div>
        <div dir="ltr" data-setdir="false">Hmm ...</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Dragonfly has no armv7 or i386, so they didn't get it too wrong.</div><div dir="ltr" data-setdir="false">I guess&nbsp;<span><span style="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 consideirng, 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="ltr" data-setdir="false">Please go ahead and do the quick fix ;)</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Pedro.</div><div dir="ltr" data-setdir="false"><br></div>
        
        </div><div id="ydp4b6aa0ddyahoo_quoted_9134776597" class="ydp4b6aa0ddyahoo_quoted">
            <div style="font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-size:13px;color:#26282a;">
                
                <div>
                    On Monday, July 3, 2023 at 10:12:13 PM GMT-5, Warner Losh &lt;imp@bsdimp.com&gt; wrote:
                </div>
                <div><br></div>
                <div><br></div>
                <div><div id="ydp4b6aa0ddyiv0439244616"><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="none"></div><div>Warner</div></div><br clear="none"><div id="ydp4b6aa0ddyiv0439244616yqt39150" class="ydp4b6aa0ddyiv0439244616yqt9769528136"><div class="ydp4b6aa0ddyiv0439244616gmail_quote"><div dir="ltr" class="ydp4b6aa0ddyiv0439244616gmail_attr">On Mon, Jul 3, 2023, 9:08 PM Pedro F. Giffuni &lt;<a shape="rect" href="mailto:pfg@freebsd.org" rel="nofollow" target="_blank">pfg@freebsd.org</a>&gt; wrote:<br clear="none"></div><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;" class="ydp4b6aa0ddyiv0439244616gmail_quote">The branch main has been updated by pfg:<br clear="none">
<br clear="none">
URL: <a shape="rect" href="https://cgit.FreeBSD.org/src/commit/?id=4456846a1a0d8cb6d0e6bae89f1134fa0a1af5cf" rel="nofollow" target="_blank">https://cgit.FreeBSD.org/src/commit/?id=4456846a1a0d8cb6d0e6bae89f1134fa0a1af5cf</a><br clear="none">
<br clear="none">
commit 4456846a1a0d8cb6d0e6bae89f1134fa0a1af5cf<br clear="none">
Author:&nbsp; &nbsp; &nbsp;Pedro F. Giffuni &lt;pfg@FreeBSD.org&gt;<br clear="none">
AuthorDate: 2023-07-03 02:32:10 +0000<br clear="none">
Commit:&nbsp; &nbsp; &nbsp;Pedro F. Giffuni &lt;pfg@FreeBSD.org&gt;<br clear="none">
CommitDate: 2023-07-04 03:08:01 +0000<br clear="none">
<br clear="none">
&nbsp; &nbsp; bin/date: Upgrade calculations<br clear="none">
<br clear="none">
&nbsp; &nbsp; Use long instead of int for numerous calculations, fixing a number of<br clear="none">
&nbsp; &nbsp; date calculation overflow issues.<br clear="none">
<br clear="none">
&nbsp; &nbsp; Obtained from:&nbsp; DragonflyBSD<br clear="none">
&nbsp; &nbsp; Git log:&nbsp; &nbsp; &nbsp; &nbsp; 4238ce6f0c6df33ce677ae298b245c62cd60fb43 (only partial)<br clear="none">
---<br clear="none">
&nbsp;bin/date/vary.c | 20 ++++++++++----------<br clear="none">
&nbsp;1 file changed, 10 insertions(+), 10 deletions(-)<br clear="none">
<br clear="none">
diff --git a/bin/date/vary.c b/bin/date/vary.c<br clear="none">
index 5f0123110ee3..6f3c59950ecf 100644<br clear="none">
--- a/bin/date/vary.c<br clear="none">
+++ b/bin/date/vary.c<br clear="none">
@@ -34,7 +34,7 @@ __FBSDID("$FreeBSD$");<br clear="none">
&nbsp;#include "vary.h"<br clear="none">
<br clear="none">
&nbsp;struct trans {<br clear="none">
-&nbsp; int val;<br clear="none">
+&nbsp; long val;<br clear="none">
&nbsp; &nbsp;const char *str;<br clear="none">
&nbsp;};<br clear="none">
<br clear="none">
@@ -52,7 +52,7 @@ static struct trans trans_wday[] = {<br clear="none">
&nbsp;};<br clear="none">
<br clear="none">
&nbsp;static char digits[] = "0123456789";<br clear="none">
-static int adjhour(struct tm *, char, int, int);<br clear="none">
+static int adjhour(struct tm *, char, long, int);<br clear="none">
<br clear="none">
&nbsp;static int<br clear="none">
&nbsp;domktime(struct tm *t, char type)<br clear="none">
@@ -125,7 +125,7 @@ daysinmonth(const struct tm *t)<br clear="none">
<br clear="none">
<br clear="none">
&nbsp;static int<br clear="none">
-adjyear(struct tm *t, char type, int val, int mk)<br clear="none">
+adjyear(struct tm *t, char type, long val, int mk)<br clear="none">
&nbsp;{<br clear="none">
&nbsp; &nbsp;switch (type) {<br clear="none">
&nbsp; &nbsp; &nbsp;case '+':<br clear="none">
@@ -146,7 +146,7 @@ adjyear(struct tm *t, char type, int val, int mk)<br clear="none">
&nbsp;}<br clear="none">
<br clear="none">
&nbsp;static int<br clear="none">
-adjmon(struct tm *t, char type, int val, int istext, int mk)<br clear="none">
+adjmon(struct tm *t, char type, long val, int istext, int mk)<br clear="none">
&nbsp;{<br clear="none">
&nbsp; &nbsp;int lmdays;<br clear="none">
<br clear="none">
@@ -206,7 +206,7 @@ adjmon(struct tm *t, char type, int val, int istext, int mk)<br clear="none">
&nbsp;}<br clear="none">
<br clear="none">
&nbsp;static int<br clear="none">
-adjday(struct tm *t, char type, int val, int mk)<br clear="none">
+adjday(struct tm *t, char type, long val, int mk)<br clear="none">
&nbsp;{<br clear="none">
&nbsp; &nbsp;int lmdays;<br clear="none">
<br clear="none">
@@ -250,7 +250,7 @@ adjday(struct tm *t, char type, int val, int mk)<br clear="none">
&nbsp;}<br clear="none">
<br clear="none">
&nbsp;static int<br clear="none">
-adjwday(struct tm *t, char type, int val, int istext, int mk)<br clear="none">
+adjwday(struct tm *t, char type, long val, int istext, int mk)<br clear="none">
&nbsp;{<br clear="none">
&nbsp; &nbsp;if (val &lt; 0)<br clear="none">
&nbsp; &nbsp; &nbsp;return 0;<br clear="none">
@@ -286,7 +286,7 @@ adjwday(struct tm *t, char type, int val, int istext, int mk)<br clear="none">
&nbsp;}<br clear="none">
<br clear="none">
&nbsp;static int<br clear="none">
-adjhour(struct tm *t, char type, int val, int mk)<br clear="none">
+adjhour(struct tm *t, char type, long val, int mk)<br clear="none">
&nbsp;{<br clear="none">
&nbsp; &nbsp;if (val &lt; 0)<br clear="none">
&nbsp; &nbsp; &nbsp;return 0;<br clear="none">
@@ -331,7 +331,7 @@ adjhour(struct tm *t, char type, int val, int mk)<br clear="none">
&nbsp;}<br clear="none">
<br clear="none">
&nbsp;static int<br clear="none">
-adjmin(struct tm *t, char type, int val, int mk)<br clear="none">
+adjmin(struct tm *t, char type, long val, int mk)<br clear="none">
&nbsp;{<br clear="none">
&nbsp; &nbsp;if (val &lt; 0)<br clear="none">
&nbsp; &nbsp; &nbsp;return 0;<br clear="none">
@@ -372,7 +372,7 @@ adjmin(struct tm *t, char type, int val, int mk)<br clear="none">
&nbsp;}<br clear="none">
<br clear="none">
&nbsp;static int<br clear="none">
-adjsec(struct tm *t, char type, int val, int mk)<br clear="none">
+adjsec(struct tm *t, char type, long val, int mk)<br clear="none">
&nbsp;{<br clear="none">
&nbsp; &nbsp;if (val &lt; 0)<br clear="none">
&nbsp; &nbsp; &nbsp;return 0;<br clear="none">
@@ -419,7 +419,7 @@ vary_apply(const struct vary *v, struct tm *t)<br clear="none">
&nbsp; &nbsp;char which;<br clear="none">
&nbsp; &nbsp;char *arg;<br clear="none">
&nbsp; &nbsp;size_t len;<br clear="none">
-&nbsp; int val;<br clear="none">
+&nbsp; long val;<br clear="none">
<br clear="none">
&nbsp; &nbsp;for (; v; v = v-&gt;next) {<br clear="none">
&nbsp; &nbsp; &nbsp;type = *v-&gt;arg;<br clear="none">
</blockquote></div></div>
</div></div></div>
            </div>
        </div></body></html>
------=_Part_54512_580997230.1688441647901--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1037448433.54513.1688441647903>