From 70c905963e71667c1c8b131f290f1d5436d104e0 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Sun, 30 Oct 2022 01:09:38 +0900 Subject: [ruby/date] Remove `merid_names` table https://github.com/ruby/date/commit/7fe2bd5f94 --- ext/date/date_strptime.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'ext') diff --git a/ext/date/date_strptime.c b/ext/date/date_strptime.c index fa1ed4c7e7..53b48d5105 100644 --- a/ext/date/date_strptime.c +++ b/ext/date/date_strptime.c @@ -18,11 +18,6 @@ static const char *month_names[] = { "October", "November", "December", }; -static const char *merid_names[] = { - "am", "pm", - "a.m.", "p.m." -}; - static const char *extz_pats[] = { ":z", "::z", @@ -402,18 +397,19 @@ date__strptime_internal(const char *str, size_t slen, case 'P': case 'p': + if (slen - si < 2) fail(); { - int i; - - for (i = 0; i < 4; i++) { - size_t l = strlen(merid_names[i]); - if (strncasecmp(merid_names[i], &str[si], l) == 0) { - si += l; - set_hash("_merid", INT2FIX((i % 2) == 0 ? 0 : 12)); - goto matched; - } + char c = str[si]; + const int hour = (c == 'P' || c == 'p') ? 12 : 0; + if (!hour && !(c == 'A' || c == 'a')) fail(); + if ((c = str[si+1]) == '.') { + if (slen - si < 4 || str[si+3] != '.') fail(); + c = str[si += 2]; } - fail(); + if (!(c == 'M' || c == 'm')) fail(); + si += 2; + set_hash("_merid", INT2FIX(hour)); + goto matched; } case 'Q': -- cgit v1.2.3