diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | intern.h | 2 | ||||
-rw-r--r-- | re.c | 2 | ||||
-rw-r--r-- | string.c | 6 |
4 files changed, 13 insertions, 3 deletions
@@ -1,3 +1,9 @@ +Fri Feb 07 15:35:21 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net> + + * intern.h, re.c (rb_memsearch): returns long. + + * string.c (rb_str_index): should return offset position. + Fri Feb 07 15:30:15 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net> * eval.c (proc_invoke): should propagate self to super @@ -330,7 +330,7 @@ VALUE rb_length_by_each _((VALUE)); /* re.c */ int rb_memcmp _((char*,char*,long)); int rb_memcicmp _((char*,char*,long)); -int rb_memsearch _((char*,long,char*,long)); +long rb_memsearch _((char*,long,char*,long)); VALUE rb_reg_nth_defined _((int, VALUE)); VALUE rb_reg_nth_match _((int, VALUE)); VALUE rb_reg_last_match _((VALUE)); @@ -96,7 +96,7 @@ rb_memcmp(p1, p2, len) return rb_memcicmp(p1, p2, len); } -int +long rb_memsearch(x0, m, y0, n) char *x0, *y0; long m, n; @@ -839,14 +839,18 @@ rb_str_index(str, sub, offset) VALUE str, sub; long offset; { + long pos; + if (offset < 0) { offset += RSTRING(str)->len; if (offset < 0) return -1; } if (RSTRING(str)->len - offset < RSTRING(sub)->len) return -1; if (RSTRING(sub)->len == 0) return offset; - return rb_memsearch(RSTRING(sub)->ptr, RSTRING(sub)->len, + pos = rb_memsearch(RSTRING(sub)->ptr, RSTRING(sub)->len, RSTRING(str)->ptr+offset, RSTRING(str)->len-offset); + if (pos < 0) return pos; + return pos + offset; } static VALUE |