All of lore.kernel.org
 help / color / mirror / Atom feed
From: Danh Doan <congdanhqx@gmail.com>
To: Junio C Hamano <gitster@pobox.com>
Cc: git@vger.kernel.org
Subject: Re: [PATCH v4 2/4] date.c: validate and set time in a helper function
Date: Fri, 24 Apr 2020 18:43:02 +0700	[thread overview]
Message-ID: <20200424114302.GG1949@danh.dev> (raw)
In-Reply-To: <xmqqzhb2ez1q.fsf@gitster.c.googlers.com>

On 2020-04-23 13:18:25-0700, Junio C Hamano <gitster@pobox.com> wrote:
> Đoàn Trần Công Danh  <congdanhqx@gmail.com> writes:
> 
> > In a later patch, we will reuse this logic, move it to a helper, now.
> >
> > While we're at it, explicit states that we intentionally ignore
> 
> "explicitly state", perhaps.
> 
> > old-and-defective 2nd leap second.
> >
> > Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
> > ---
> >  date.c | 22 +++++++++++++++++-----
> >  1 file changed, 17 insertions(+), 5 deletions(-)
> >
> > diff --git a/date.c b/date.c
> > index b67c5abe24..f5d5a91208 100644
> > --- a/date.c
> > +++ b/date.c
> > @@ -539,6 +539,22 @@ static int set_date(int year, int month, int day, struct tm *now_tm, time_t now,
> >  	return -1;
> >  }
> >  
> > +static int set_time(long hour, long minute, long second, struct tm *tm)
> > +{
> > +	/* C90 and old POSIX accepts 2 leap seconds, it's a defect,
> > +	 * ignore second number 61
> > +	 */
> 
> 	/*
> 	 * Style: our multi-line comments ought to be
> 	 * formatted like this.  Slash-asterisk that opens,
> 	 * and asterisk-slash that closes, are both on their
> 	 * own lines.
> 	 */
> 
> But I am not sure we want to even have a new comment here.  After
> all we are extracting/reinventing exactly the same logic as the
> original.  Why we allow "60" might be worth commenting, but if a
> minute that has 62 seconds is a mere historical curiosity, then is
> it worth explaining why "61", which we never even wrote in the code,
> is missing from here?

I think single line like:

	/* We accept 61st second for the single? leap second */

Or something along the time, is good enough. Not sure if we want the
word "single" there, though.

I think majority of people don't even know about leap second.
Probability that know about 62nd second is rarer, I think.

> > +	if (0 <= hour && hour <= 24 &&
> > +	    0 <= minute && minute < 60 &&
> > +	    0 <= second && second <= 60) {
> > +		tm->tm_hour = hour;
> > +		tm->tm_min = minute;
> > +		tm->tm_sec = second;
> > +		return 0;
> > +	}
> > +	return -1;
> > +}
> 
> I am a bit surprised to see that you chose to unify with the "check
> and set" interface of is_date (now set_date).  I was expecting to
> see that we'd have "check-only" helper functions.
> 
> This is not a complaint, at least not yet until we see the result of
> using it in new code; it may very well be possible that the "check
> and set" interface would make the new caller(s) clearer.
> 
> >  static int match_multi_number(timestamp_t num, char c, const char *date,
> >  			      char *end, struct tm *tm, time_t now)
> >  {
> > @@ -556,12 +572,8 @@ static int match_multi_number(timestamp_t num, char c, const char *date,
> >  	case ':':
> >  		if (num3 < 0)
> >  			num3 = 0;
> > -		if (num < 25 && num2 >= 0 && num2 < 60 && num3 >= 0 && num3 <= 60) {
> > -			tm->tm_hour = num;
> > -			tm->tm_min = num2;
> > -			tm->tm_sec = num3;
> > +		if (set_time(num, num2, num3, tm) == 0)
> >  			break;
> > -		}
> >  		return 0;
> 
> This caller does become easier to follow, I would say.  Nicely done.

Yes, when I looked around date.c

I saw that the only usecase for validate time is for setting it.
And the incoming patch also has that usage.

I chose to unify those code path to not buy me too much trouble.

I'll take that "Nicely done" means this unification is OK for this
series.

-- 
Danh

  reply	other threads:[~2020-04-24 11:43 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-14  0:03 Mishandling of fractional seconds in ISO 8601 format brian m. carlson
2020-04-14  9:31 ` [PATCH 0/2] More ISO-8601 support Đoàn Trần Công Danh
2020-04-14  9:31   ` [PATCH 1/2] date.c: allow fractional second part of ISO-8601 Đoàn Trần Công Danh
2020-04-14 20:16     ` Jeff King
2020-04-15  2:15       ` Danh Doan
2020-04-14 20:17     ` Jeff King
2020-04-14 23:49       ` brian m. carlson
2020-04-15  2:17         ` Danh Doan
2020-04-14  9:31   ` [PATCH 2/2] date.c: allow compact version of ISO-8601 datetime Đoàn Trần Công Danh
2020-04-14 20:24     ` Jeff King
2020-04-15  2:12       ` Danh Doan
2020-04-15 15:03       ` Junio C Hamano
2020-04-15 15:41         ` Jeff King
2020-04-15 15:58           ` Junio C Hamano
2020-04-16 11:16           ` Danh Doan
2020-04-14 23:45   ` [PATCH 0/2] More ISO-8601 support brian m. carlson
2020-04-15  3:31   ` [PATCH v2 " Đoàn Trần Công Danh
2020-04-15  3:31     ` [PATCH v2 1/2] date.c: skip fractional second part of ISO-8601 Đoàn Trần Công Danh
2020-04-15 10:17       ` Torsten Bögershausen
2020-04-16 10:04         ` Danh Doan
2020-04-15  3:31     ` [PATCH v2 2/2] date.c: allow compact version of ISO-8601 datetime Đoàn Trần Công Danh
2020-04-22 13:15   ` [PATCH v3 0/2] More ISO-8601 support Đoàn Trần Công Danh
2020-04-22 13:15     ` [PATCH v3 1/2] date.c: skip fractional second part of ISO-8601 Đoàn Trần Công Danh
2020-04-22 17:05       ` Junio C Hamano
2020-04-23  1:18         ` Danh Doan
2020-04-23 19:28           ` Junio C Hamano
2020-04-23 20:41             ` Philip Oakley
2020-04-24  0:07               ` Danh Doan
2020-04-24  0:46                 ` Junio C Hamano
2020-04-24 17:32                   ` Philip Oakley
2020-04-24 17:30                 ` Philip Oakley
2020-04-22 13:15     ` [PATCH v3 2/2] date.c: allow compact version of ISO-8601 datetime Đoàn Trần Công Danh
2020-04-22 17:17       ` Junio C Hamano
2020-04-23  1:20         ` Danh Doan
2020-04-23 13:52   ` [PATCH v4 0/4] More ISO-8601 support Đoàn Trần Công Danh
2020-04-23 13:52     ` [PATCH v4 1/4] date.c: s/is_date/set_date/ Đoàn Trần Công Danh
2020-04-23 20:08       ` Junio C Hamano
2020-04-23 13:52     ` [PATCH v4 2/4] date.c: validate and set time in a helper function Đoàn Trần Công Danh
2020-04-23 20:18       ` Junio C Hamano
2020-04-24 11:43         ` Danh Doan [this message]
2020-04-24 20:29           ` Junio C Hamano
2020-04-23 13:52     ` [PATCH v4 3/4] date.c: skip fractional second part of ISO-8601 Đoàn Trần Công Danh
2020-04-23 20:29       ` Junio C Hamano
2020-04-23 13:52     ` [PATCH v4 4/4] date.c: allow compact version of ISO-8601 datetime Đoàn Trần Công Danh
2020-04-24 15:07   ` [PATCH v5 0/4] More ISO-8601 support Đoàn Trần Công Danh
2020-04-24 15:07     ` [PATCH v5 1/4] date.c: s/is_date/set_date/ Đoàn Trần Công Danh
2020-04-24 15:07     ` [PATCH v5 2/4] date.c: validate and set time in a helper function Đoàn Trần Công Danh
2020-04-24 15:07     ` [PATCH v5 3/4] date.c: skip fractional second part of ISO-8601 Đoàn Trần Công Danh
2020-04-24 15:07     ` [PATCH v5 4/4] date.c: allow compact version of ISO-8601 datetime Đoàn Trần Công Danh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200424114302.GG1949@danh.dev \
    --to=congdanhqx@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.