summaryrefslogtreecommitdiff
path: root/re.c
diff options
context:
space:
mode:
authorknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-22 05:23:12 +0000
committerknu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-11-22 05:23:12 +0000
commit61e21e82adadc1795de115a9ebe0019245de007d (patch)
tree8eb45886db85b7730b2ac64a2d7f4c79e0814ab9 /re.c
parent9cbaeed6eda4c26a488878aeb0d47b976cc02472 (diff)
Apply performance improvement to short byte array search.
* re.c (rb_memsearch_ss): Apply performance improvement to short byte array search for platforms without memmem(3). [Feature #6311] [ruby-dev:45530] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37793 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 're.c')
-rw-r--r--re.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/re.c b/re.c
index 97803d4..8fa1abc 100644
--- a/re.c
+++ b/re.c
@@ -126,6 +126,9 @@ rb_memsearch_ss(const unsigned char *xs, long m, const unsigned char *ys, long n
if (m > SIZEOF_VALUE)
rb_bug("!!too long pattern string!!");
+ if (!(y = memchr(y, *x, n - m + 1)))
+ return -1;
+
/* Prepare hash value */
for (hx = *x++, hy = *y++; x < xe; ++x, ++y) {
hx <<= CHAR_BIT;