[前][次][番号順一覧][スレッド一覧]

ruby-changes:7813

From: akr <ko1@a...>
Date: Sun, 14 Sep 2008 04:24:20 +0900 (JST)
Subject: [ruby-changes:7813] Ruby:r19334 (trunk): * include/ruby/oniguruma.h (OnigEncodingTypeST): add end argument for

akr	2008-09-14 04:23:52 +0900 (Sun, 14 Sep 2008)

  New Revision: 19334

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19334

  Log:
    * include/ruby/oniguruma.h (OnigEncodingTypeST): add end argument for
      left_adjust_char_head.
      (ONIGENC_LEFT_ADJUST_CHAR_HEAD): add end argument.
      (onigenc_get_left_adjust_char_head): ditto.
    
    * include/ruby/encoding.h (rb_enc_left_char_head): add end argument.
    
    * regenc.h (onigenc_single_byte_left_adjust_char_head): ditto.
    
    * regenc.c (onigenc_get_right_adjust_char_head): follow the interface
      change.
      (onigenc_get_right_adjust_char_head_with_prev): ditto.
      (onigenc_get_prev_char_head): ditto.
      (onigenc_step_back): ditto.
      (onigenc_get_left_adjust_char_head): ditto.
      (onigenc_single_byte_code_to_mbc): ditto.
    
    * re.c: ditto.
    
    * string.c: ditto.
    
    * io.c: ditto.
    
    * regexec.c: ditto.
    
    * enc/euc_jp.c: ditto.
    
    * enc/cp949.c: ditto.
    
    * enc/shift_jis.c: ditto.
    
    * enc/gbk.c: ditto.
    
    * enc/big5.c: ditto.
    
    * enc/euc_tw.c: ditto.
    
    * enc/euc_kr.c: ditto.
    
    * enc/emacs_mule.c: ditto.
    
    * enc/gb18030.c: ditto.
    
    * enc/utf_8.c: ditto.
    
    * enc/utf_16le.c: ditto.
    
    * enc/utf_16be.c: ditto.
    
    * enc/utf_32le.c: ditto.
    
    * enc/utf_32be.c: ditto.

  Modified files:
    trunk/ChangeLog
    trunk/enc/big5.c
    trunk/enc/cp949.c
    trunk/enc/emacs_mule.c
    trunk/enc/euc_jp.c
    trunk/enc/euc_kr.c
    trunk/enc/euc_tw.c
    trunk/enc/gb18030.c
    trunk/enc/gbk.c
    trunk/enc/shift_jis.c
    trunk/enc/utf_16be.c
    trunk/enc/utf_16le.c
    trunk/enc/utf_32be.c
    trunk/enc/utf_32le.c
    trunk/enc/utf_8.c
    trunk/include/ruby/encoding.h
    trunk/include/ruby/oniguruma.h
    trunk/io.c
    trunk/re.c
    trunk/regenc.c
    trunk/regenc.h
    trunk/regexec.c
    trunk/string.c

Index: include/ruby/encoding.h
===================================================================
--- include/ruby/encoding.h	(revision 19333)
+++ include/ruby/encoding.h	(revision 19334)
@@ -132,7 +132,7 @@
 /* start, ptr, end, encoding -> prev_char */
 #define rb_enc_prev_char(s,p,e,enc) (char *)onigenc_get_prev_char_head(enc,(UChar*)(s),(UChar*)(p),(UChar*)(e))
 /* start, ptr, end, encoding -> next_char */
-#define rb_enc_left_char_head(s,p,enc) (char *)onigenc_get_left_adjust_char_head(enc,(UChar*)(s),(UChar*)(p))
+#define rb_enc_left_char_head(s,p,e,enc) (char *)onigenc_get_left_adjust_char_head(enc,(UChar*)(s),(UChar*)(p),(UChar*)(e))
 #define rb_enc_right_char_head(s,p,e,enc) (char *)onigenc_get_right_adjust_char_head(enc,(UChar*)(s),(UChar*)(p),(UChar*)(e))
 
 /* ptr, ptr, encoding -> newline_or_not */
Index: include/ruby/oniguruma.h
===================================================================
--- include/ruby/oniguruma.h	(revision 19333)
+++ include/ruby/oniguruma.h	(revision 19334)
@@ -164,7 +164,7 @@
   int    (*property_name_to_ctype)(struct OnigEncodingTypeST* enc, OnigUChar* p, OnigUChar* end);
   int    (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, struct OnigEncodingTypeST* enc);
   int    (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], struct OnigEncodingTypeST* enc);
-  OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, struct OnigEncodingTypeST* enc);
+  OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc);
   int    (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc);
   int ruby_encoding_index;
 } OnigEncodingType;
@@ -219,8 +219,8 @@
   (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc)
 #define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \
         (enc)->is_allowed_reverse_match(s,end,enc)
-#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \
-        (enc)->left_adjust_char_head(start, s, enc)
+#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) \
+        (enc)->left_adjust_char_head(start, s, end, enc)
 #define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) \
         (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc)
 #define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) \
@@ -307,7 +307,7 @@
 ONIG_EXTERN
 OnigUChar* onigenc_get_prev_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end));
 ONIG_EXTERN
-OnigUChar* onigenc_get_left_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s));
+OnigUChar* onigenc_get_left_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end));
 ONIG_EXTERN
 OnigUChar* onigenc_get_right_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end));
 ONIG_EXTERN
Index: regenc.c
===================================================================
--- regenc.c	(revision 19333)
+++ regenc.c	(revision 19334)
@@ -64,7 +64,7 @@
 extern UChar*
 onigenc_get_right_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s, const UChar* end)
 {
-  UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
+  UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s, end);
   if (p < s) {
       p += enclen(enc, p, end);
   }
@@ -75,7 +75,7 @@
 onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc,
 				   const UChar* start, const UChar* s, const UChar* end, const UChar** prev)
 {
-  UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
+  UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s, end);
 
   if (p < s) {
     if (prev) *prev = (const UChar* )p;
@@ -93,7 +93,7 @@
   if (s <= start)
     return (UChar* )NULL;
 
-  return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);
+  return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1, end);
 }
 
 extern UChar*
@@ -103,7 +103,7 @@
     if (s <= start)
       return (UChar* )NULL;
 
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);
+    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1, end);
   }
   return (UChar* )s;
 }
@@ -369,9 +369,9 @@
 }
 
 extern UChar*
-onigenc_get_left_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
+onigenc_get_left_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s, const UChar* end)
 {
-  return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
+  return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s, end);
 }
 
 const OnigPairCaseFoldCodes OnigAsciiLowerMap[] = {
@@ -637,6 +637,7 @@
 
 extern UChar*
 onigenc_single_byte_left_adjust_char_head(const UChar* start ARG_UNUSED, const UChar* s,
+                                          const UChar* end,
 					  OnigEncoding enc ARG_UNUSED)
 {
   return (UChar* )s;
Index: re.c
===================================================================
--- re.c	(revision 19333)
+++ re.c	(revision 19334)
@@ -1267,7 +1267,7 @@
 	      p = onigenc_get_right_adjust_char_head(enc, string, string + pos, string + RSTRING_LEN(str));
 	 }
 	 else {
-	      p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, string, string + pos);
+	      p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, string, string + pos, string + RSTRING_LEN(str));
 	 }
 	 return p - string;
     }
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19333)
+++ ChangeLog	(revision 19334)
@@ -1,3 +1,58 @@
+Sun Sep 14 04:15:16 2008  Tanaka Akira  <akr@f...>
+
+	* include/ruby/oniguruma.h (OnigEncodingTypeST): add end argument for
+	  left_adjust_char_head.
+	  (ONIGENC_LEFT_ADJUST_CHAR_HEAD): add end argument.
+	  (onigenc_get_left_adjust_char_head): ditto.
+
+	* include/ruby/encoding.h (rb_enc_left_char_head): add end argument.
+
+	* regenc.h (onigenc_single_byte_left_adjust_char_head): ditto.
+
+	* regenc.c (onigenc_get_right_adjust_char_head): follow the interface
+	  change.
+	  (onigenc_get_right_adjust_char_head_with_prev): ditto.
+	  (onigenc_get_prev_char_head): ditto.
+	  (onigenc_step_back): ditto.
+	  (onigenc_get_left_adjust_char_head): ditto.
+	  (onigenc_single_byte_code_to_mbc): ditto.
+
+	* re.c: ditto.
+
+	* string.c: ditto.
+
+	* io.c: ditto.
+
+	* regexec.c: ditto.
+
+	* enc/euc_jp.c: ditto.
+
+	* enc/cp949.c: ditto.
+
+	* enc/shift_jis.c: ditto.
+
+	* enc/gbk.c: ditto.
+
+	* enc/big5.c: ditto.
+
+	* enc/euc_tw.c: ditto.
+
+	* enc/euc_kr.c: ditto.
+
+	* enc/emacs_mule.c: ditto.
+
+	* enc/gb18030.c: ditto.
+
+	* enc/utf_8.c: ditto.
+
+	* enc/utf_16le.c: ditto.
+
+	* enc/utf_16be.c: ditto.
+
+	* enc/utf_32le.c: ditto.
+
+	* enc/utf_32be.c: ditto.
+
 Sun Sep 14 03:43:27 2008  Tanaka Akira  <akr@f...>
 
 	* include/ruby/oniguruma.h (ONIGENC_STEP_BACK): add end argument.
Index: regenc.h
===================================================================
--- regenc.h	(revision 19333)
+++ regenc.h	(revision 19334)
@@ -125,7 +125,7 @@
 ONIG_EXTERN OnigCodePoint onigenc_single_byte_mbc_to_code P_((const UChar* p, const UChar* end, OnigEncoding enc));
 ONIG_EXTERN int onigenc_single_byte_code_to_mbclen P_((OnigCodePoint code, OnigEncoding enc));
 ONIG_EXTERN int onigenc_single_byte_code_to_mbc P_((OnigCodePoint code, UChar *buf, OnigEncoding enc));
-ONIG_EXTERN UChar* onigenc_single_byte_left_adjust_char_head P_((const UChar* start, const UChar* s, OnigEncoding enc));
+ONIG_EXTERN UChar* onigenc_single_byte_left_adjust_char_head P_((const UChar* start, const UChar* s, const OnigUChar* end, OnigEncoding enc));
 ONIG_EXTERN int onigenc_always_true_is_allowed_reverse_match P_((const UChar* s, const UChar* end, OnigEncoding enc));
 ONIG_EXTERN int onigenc_always_false_is_allowed_reverse_match P_((const UChar* s, const UChar* end, OnigEncoding enc));
 ONIG_EXTERN int onigenc_ascii_is_code_ctype P_((OnigCodePoint code, unsigned int ctype, OnigEncoding enc));
Index: enc/gbk.c
===================================================================
--- enc/gbk.c	(revision 19333)
+++ enc/gbk.c	(revision 19334)
@@ -165,7 +165,7 @@
 }
 
 static UChar*
-gbk_left_adjust_char_head(const UChar* start, const UChar* s, OnigEncoding enc)
+gbk_left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc)
 {
   const UChar *p;
   int len;
@@ -181,7 +181,7 @@
       }
     } 
   }
-  len = enclen(enc, p, s);
+  len = enclen(enc, p, end);
   if (p + len > s) return (UChar* )p;
   p += len;
   return (UChar* )(p + ((s - p) & ~1));
Index: enc/euc_jp.c
===================================================================
--- enc/euc_jp.c	(revision 19333)
+++ enc/euc_jp.c	(revision 19334)
@@ -222,7 +222,7 @@
 }
 
 static UChar*
-left_adjust_char_head(const UChar* start, const UChar* s, OnigEncoding enc)
+left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc)
 {
   /* In this encoding
      mb-trail bytes doesn't mix with single bytes.
@@ -234,7 +234,7 @@
   p = s;
 
   while (!eucjp_islead(*p) && p > start) p--;
-  len = enclen(enc, p, s);
+  len = enclen(enc, p, end);
   if (p + len > s) return (UChar* )p;
   p += len;
   return (UChar* )(p + ((s - p) & ~1));
Index: enc/cp949.c
===================================================================
--- enc/cp949.c	(revision 19333)
+++ enc/cp949.c	(revision 19334)
@@ -165,7 +165,7 @@
 }
 
 static UChar*
-cp949_left_adjust_char_head(const UChar* start, const UChar* s, OnigEncoding enc)
+cp949_left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc)
 {
   const UChar *p;
   int len;
@@ -181,7 +181,7 @@
       }
     } 
   }
-  len = enclen(enc, p, s);
+  len = enclen(enc, p, end);
   if (p + len > s) return (UChar* )p;
   p += len;
   return (UChar* )(p + ((s - p) & ~1));
Index: enc/shift_jis.c
===================================================================
--- enc/shift_jis.c	(revision 19333)
+++ enc/shift_jis.c	(revision 19334)
@@ -229,7 +229,7 @@
 #endif
 
 static UChar*
-left_adjust_char_head(const UChar* start, const UChar* s, OnigEncoding enc)
+left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc)
 {
   const UChar *p;
   int len;
@@ -245,7 +245,7 @@
       }
     } 
   }
-  len = enclen(enc, p, s);
+  len = enclen(enc, p, end);
   if (p + len > s) return (UChar* )p;
   p += len;
   return (UChar* )(p + ((s - p) & ~1));
Index: enc/utf_8.c
===================================================================
--- enc/utf_8.c	(revision 19333)
+++ enc/utf_8.c	(revision 19334)
@@ -405,7 +405,7 @@
 
 
 static UChar*
-left_adjust_char_head(const UChar* start, const UChar* s, OnigEncoding enc ARG_UNUSED)
+left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc ARG_UNUSED)
 {
   const UChar *p;
 
Index: enc/big5.c
===================================================================
--- enc/big5.c	(revision 19333)
+++ enc/big5.c	(revision 19334)
@@ -165,7 +165,7 @@
 #define BIG5_ISMB_TRAIL(byte)  BIG5_CAN_BE_TRAIL_TABLE[(byte)]
 
 static UChar*
-big5_left_adjust_char_head(const UChar* start, const UChar* s, OnigEncoding enc)
+big5_left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc)
 {
   const UChar *p;
   int len;
@@ -181,7 +181,7 @@
       }
     } 
   }
-  len = enclen(enc, p, s);
+  len = enclen(enc, p, end);
   if (p + len > s) return (UChar* )p;
   p += len;
   return (UChar* )(p + ((s - p) & ~1));
Index: enc/euc_tw.c
===================================================================
--- enc/euc_tw.c	(revision 19333)
+++ enc/euc_tw.c	(revision 19334)
@@ -187,7 +187,7 @@
 #define euctw_islead(c)    ((UChar )((c) - 0xa1) > 0xfe - 0xa1)
 
 static UChar*
-euctw_left_adjust_char_head(const UChar* start, const UChar* s, OnigEncoding enc)
+euctw_left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc)
 {
   /* Assumed in this encoding,
      mb-trail bytes don't mix with single bytes.
@@ -199,7 +199,7 @@
   p = s;
 
   while (!euctw_islead(*p) && p > start) p--;
-  len = enclen(enc, p, s);
+  len = enclen(enc, p, end);
   if (p + len > s) return (UChar* )p;
   p += len;
   return (UChar* )(p + ((s - p) & ~1));
Index: enc/euc_kr.c
===================================================================
--- enc/euc_kr.c	(revision 19333)
+++ enc/euc_kr.c	(revision 19334)
@@ -145,7 +145,7 @@
 #define euckr_islead(c)    ((c) < 0xa1 || (c) == 0xff)
 
 static UChar*
-euckr_left_adjust_char_head(const UChar* start, const UChar* s, OnigEncoding enc)
+euckr_left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc)
 {
   /* Assumed in this encoding,
      mb-trail bytes don't mix with single bytes.
@@ -157,7 +157,7 @@
   p = s;
 
   while (!euckr_islead(*p) && p > start) p--;
-  len = enclen(enc, p, s);
+  len = enclen(enc, p, end);
   if (p + len > s) return (UChar* )p;
   p += len;
   return (UChar* )(p + ((s - p) & ~1));
Index: enc/utf_32be.c
===================================================================
--- enc/utf_32be.c	(revision 19333)
+++ enc/utf_32be.c	(revision 19334)
@@ -152,7 +152,7 @@
 #endif
 
 static UChar*
-utf32be_left_adjust_char_head(const UChar* start, const UChar* s,
+utf32be_left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end,
 			      OnigEncoding enc ARG_UNUSED)
 {
   int rem;
Index: enc/emacs_mule.c
===================================================================
--- enc/emacs_mule.c	(revision 19333)
+++ enc/emacs_mule.c	(revision 19334)
@@ -293,7 +293,7 @@
 }
 
 static UChar*
-left_adjust_char_head(const UChar* start, const UChar* s, OnigEncoding enc)
+left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc)
 {
   const UChar *p;
 
Index: enc/utf_16be.c
===================================================================
--- enc/utf_16be.c	(revision 19333)
+++ enc/utf_16be.c	(revision 19334)
@@ -212,7 +212,7 @@
 #endif
 
 static UChar*
-utf16be_left_adjust_char_head(const UChar* start, const UChar* s,
+utf16be_left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end,
 			      OnigEncoding enc ARG_UNUSED)
 {
   if (s <= start) return (UChar* )s;
Index: enc/utf_32le.c
===================================================================
--- enc/utf_32le.c	(revision 19333)
+++ enc/utf_32le.c	(revision 19334)
@@ -152,7 +152,7 @@
 #endif
 
 static UChar*
-utf32le_left_adjust_char_head(const UChar* start, const UChar* s,
+utf32le_left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end,
 			      OnigEncoding enc ARG_UNUSED)
 {
   int rem;
Index: enc/gb18030.c
===================================================================
--- enc/gb18030.c	(revision 19333)
+++ enc/gb18030.c	(revision 19334)
@@ -245,7 +245,7 @@
 };
 
 static UChar*
-gb18030_left_adjust_char_head(const UChar* start, const UChar* s, OnigEncoding enc)
+gb18030_left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc)
 {
   const UChar *p;
   enum state state = S_START;
Index: enc/utf_16le.c
===================================================================
--- enc/utf_16le.c	(revision 19333)
+++ enc/utf_16le.c	(revision 19334)
@@ -204,7 +204,7 @@
 #endif
 
 static UChar*
-utf16le_left_adjust_char_head(const UChar* start, const UChar* s,
+utf16le_left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end,
 			      OnigEncoding enc ARG_UNUSED)
 {
   if (s <= start) return (UChar* )s;
Index: string.c
===================================================================
--- string.c	(revision 19333)
+++ string.c	(revision 19334)
@@ -5179,7 +5179,7 @@
 
 	    p = memchr(p, '\n', pend - p);
 	    if (!p) break;
-	    p0 = rb_enc_left_char_head(s, p, enc);
+	    p0 = rb_enc_left_char_head(s, p, pend, enc);
 	    if (!rb_enc_is_newline(p0, pend, enc)) {
 		p++;
 		continue;
@@ -5424,13 +5424,13 @@
 	    rb_str_modify(str);
 	    enc = rb_enc_get(str);
 	    if (rb_enc_mbminlen(enc) > 1) {
-		pp = rb_enc_left_char_head(p, e-rb_enc_mbminlen(enc), enc);
+		pp = rb_enc_left_char_head(p, e-rb_enc_mbminlen(enc), e, enc);
 		if (rb_enc_is_newline(pp, e, enc)) {
 		    e = pp;
 		}
 		pp = e - rb_enc_mbminlen(enc);
 		if (pp >= p) {
-		    pp = rb_enc_left_char_head(p, pp, enc);
+		    pp = rb_enc_left_char_head(p, pp, e, enc);
 		    if (rb_enc_ascget(pp, e, 0, enc) == '\r') {
 			e = pp;
 		    }
@@ -5493,7 +5493,7 @@
     if (p[len-1] == newline &&
 	(rslen <= 1 ||
 	 memcmp(RSTRING_PTR(rs), pp, rslen) == 0)) {
-	if (rb_enc_left_char_head(p, pp, enc) != pp)
+	if (rb_enc_left_char_head(p, pp, e, enc) != pp)
 	    return Qnil;
 	rb_str_modify(str);
 	STR_SET_LEN(str, RSTRING_LEN(str) - rslen);
@@ -6284,7 +6284,7 @@
 rb_str_end_with(int argc, VALUE *argv, VALUE str)
 {
     int i;
-    char *p, *s;
+    char *p, *s, *e;
     rb_encoding *enc;
 
     for (i=0; i<argc; i++) {
@@ -6293,8 +6293,9 @@
 	enc = rb_enc_check(str, tmp);
 	if (RSTRING_LEN(str) < RSTRING_LEN(tmp)) continue;
 	p = RSTRING_PTR(str);
-	s = p + RSTRING_LEN(str) - RSTRING_LEN(tmp);
-	if (rb_enc_left_char_head(p, s, enc) != s)
+        e = p + RSTRING_LEN(str);
+	s = e - RSTRING_LEN(tmp);
+	if (rb_enc_left_char_head(p, s, e, enc) != s)
 	    continue;
 	if (memcmp(s, RSTRING_PTR(tmp), RSTRING_LEN(tmp)) == 0)
 	    return Qtrue;
Index: io.c
===================================================================
--- io.c	(revision 19333)
+++ io.c	(revision 19334)
@@ -2177,13 +2177,14 @@
         else
             enc = io_input_encoding(fptr);
 	while ((c = appendline(fptr, newline, &str, &limit)) != EOF) {
-            const char *s, *p, *pp;
+            const char *s, *p, *pp, *e;
 
 	    if (c == newline) {
 		if (RSTRING_LEN(str) < rslen) continue;
 		s = RSTRING_PTR(str);
-		p = s + RSTRING_LEN(str) - rslen;
-		pp = rb_enc_left_char_head(s, p, enc);
+                e = s + RSTRING_LEN(str);
+		p = e - rslen;
+		pp = rb_enc_left_char_head(s, p, e, enc);
 		if (pp != p) continue;
 		if (!rspara) rscheck(rsptr, rslen, rs);
 		if (memcmp(p, rsptr, rslen) == 0) break;
@@ -2191,7 +2192,7 @@
 	    if (limit == 0) {
 		s = RSTRING_PTR(str);
 		p = s + RSTRING_LEN(str);
-		pp = rb_enc_left_char_head(s, p-1, enc);
+		pp = rb_enc_left_char_head(s, p-1, p, enc);
                 if (extra_limit &&
                     MBCLEN_NEEDMORE_P(rb_enc_precise_mbclen(pp, p, enc))) {
                     /* relax the limit while incomplete character.
Index: regexec.c
===================================================================
--- regexec.c	(revision 19333)
+++ regexec.c	(revision 19334)
@@ -2843,7 +2843,7 @@
   if (s > text_start)
     s = (UChar* )text_start;
   else
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s);
+    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s, text_end);
 
   while (s >= text) {
     if (*s == *target) {
@@ -2876,7 +2876,7 @@
   if (s > text_start)
     s = (UChar* )text_start;
   else
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s);
+    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s, text_end);
 
   while (s >= text) {
     if (str_lower_case_match(enc, case_fold_flag,
@@ -3018,7 +3018,7 @@
   if (text_start < s)
     s = text_start;
   else
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s);
+    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s, text_end);
 
   while (s >= text) {
     p = s;
@@ -3030,7 +3030,7 @@
       return (UChar* )s;
 
     s -= reg->int_map_backward[*s];
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s);
+    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s, text_end);
   }
 
   return (UChar* )NULL;
@@ -3523,7 +3523,7 @@
 	}
 	if ((OnigDistance )(max_semi_end - start) < reg->anchor_dmin) {
 	  start = max_semi_end - reg->anchor_dmin;
-	  start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, start);
+	  start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, start, end);
 	}
 	if (range > start) goto mismatch_no_msa;
       }
@@ -3670,7 +3670,7 @@
       UChar *low, *high, *adjrange, *sch_start;
 
       if (range < end)
-	adjrange = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, range);
+	adjrange = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, range, end);
       else
 	adjrange = (UChar* )end;
 
@@ -3706,7 +3706,7 @@
 	    if (sch_start > end) sch_start = (UChar* )end;
 	    else
 	      sch_start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc,
-						    start, sch_start);
+						    start, sch_start, end);
 	  }
 	}
 	if (backward_search_range(reg, str, end, sch_start, range, adjrange,

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]