diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-07-19 16:48:01 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-07-19 16:48:01 -0700 |
commit | 4cdda28289211a182df51aaf2c7305d37989c3fc (patch) | |
tree | 8f191289a8dc4e87c7cf93ac08b5472e8de0e655 /src | |
parent | a148e63c4cc952b9f4fbc24bdffffba132c9ef09 (diff) |
rewrite strstr to do c-style comparisons, to avoid js regexp search artifacts
Diffstat (limited to 'src')
-rw-r--r-- | src/library.js | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/library.js b/src/library.js index a3628179..0f37e097 100644 --- a/src/library.js +++ b/src/library.js @@ -4286,10 +4286,20 @@ LibraryManager.library = { }, strstr: function(ptr1, ptr2) { - var str1 = Pointer_stringify(ptr1); - var str2 = Pointer_stringify(ptr2); - var ret = str1.search(str2); - return ret >= 0 ? ptr1 + ret : 0; + var check = 0, start; + do { + var curr1 = {{{ makeGetValue('ptr1++', 0, 'i8') }}}; + if (!check) check = start = ptr2; + var curr2 = {{{ makeGetValue('check++', 0, 'i8') }}}; + if (curr2 == 0) return start; + if (curr2 != curr1) { + // rewind to one character after start, to find ez in eeez + var diff = check - start - 1; + ptr1 -= diff; + check = 0; + } + } while (curr1); + return 0; }, strchr: function(ptr, chr) { |