summaryrefslogtreecommitdiff
path: root/ext/date
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2022-10-30 01:09:38 +0900
committergit <svn-admin@ruby-lang.org>2022-12-18 02:58:48 +0000
commit70c905963e71667c1c8b131f290f1d5436d104e0 (patch)
tree477a64a1d45a3f96e83c3bbd94d393c0895763f0 /ext/date
parent6efeaabef05253cfce64f2d7c94be57cd7d4acd5 (diff)
[ruby/date] Remove `merid_names` table
https://github.com/ruby/date/commit/7fe2bd5f94
Diffstat (limited to 'ext/date')
-rw-r--r--ext/date/date_strptime.c26
1 files changed, 11 insertions, 15 deletions
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':