aboutsummaryrefslogtreecommitdiffstats
path: root/util.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-07-20 19:54:59 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-07-21 19:32:18 +0900
commit04b5e85bfda5ba281f2129d148c952eabc5e49a3 (patch)
tree9289617b80cae05cd97b7a7df2b30825e033ad2e /util.c
parentb2749e0026768f6a7968fc627ba50446632b8288 (diff)
downloadruby-04b5e85bfda5ba281f2129d148c952eabc5e49a3.tar.gz
Look up ruby_digit36_to_number_table
Instead of scanning ruby_hexdigits.
Diffstat (limited to 'util.c')
-rw-r--r--util.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/util.c b/util.c
index 21f5965aa4..f4cea03795 100644
--- a/util.c
+++ b/util.c
@@ -57,19 +57,16 @@ ruby_scan_hex(const char *start, size_t len, size_t *retlen)
{
register const char *s = start;
register unsigned long retval = 0;
- const char *tmp;
+ signed char d;
size_t i = 0;
for (i = 0; i < len; i++) {
- if (! s[0]) {
- break;
- }
- tmp = strchr(hexdigit, *s);
- if (! tmp) {
+ d = ruby_digit36_to_number_table[(unsigned char)*s];
+ if (d < 0 || 15 < d) {
break;
}
retval <<= 4;
- retval |= (tmp - hexdigit) & 15;
+ retval |= d;
s++;
}
*retlen = (int)(s - start); /* less than len */