まつもと ゆきひろです

In message "[ruby-dev:22415] Re: Tk.callback_break causes seg-fault or hang-up"
    on 03/12/25, Yukihiro Matsumoto <matz / ruby-lang.org> writes:

|In message "[ruby-dev:22413] Re: Tk.callback_break causes seg-fault or hang-up"
|    on 03/12/25, nobu.nakada / nifty.ne.jp <nobu.nakada / nifty.ne.jp> writes:
|
||rb_str_update()はstringioで使ってるので、残しといて欲しいです。
|
|同じ問題が起きますよ(rb_str_update()はrb_str_modify()を呼ん
|でない)。名前を変えるか。

こんなパッチでどうでしょう?

--- ChangeLog	24 Dec 2003 19:38:15 -0000	1.2673
+++ ChangeLog	25 Dec 2003 08:26:58 -0000
@@ -0,0 +1,4 @@
+Thu Dec 25 15:30:17 2003  Yukihiro Matsumoto  <matz / ruby-lang.org>
+
+	* string.c (rb_str_update): call rb_str_modify().
+
diff -p -u -1 -r1.182 string.c
--- string.c	30 Nov 2003 00:35:28 -0000	1.182
+++ string.c	25 Dec 2003 08:24:39 -0000
@@ -1277,4 +1581,4 @@ rb_str_aref_m(argc, argv, str)
 
-void
-rb_str_update(str, beg, len, val)
+static void
+rb_str_splice(str, beg, len, val)
     VALUE str;
@@ -1322,2 +1626,12 @@ rb_str_update(str, beg, len, val)
 
+void
+rb_str_update(str, beg, len, val)
+    VALUE str;
+    long beg, len;
+    VALUE val;
+{
+    rb_str_modify(str);
+    return rb_str_splice(str, beg, len, val);
+}
+
 static void
@@ -1353,3 +1667,3 @@ rb_str_subpat_set(str, re, nth, val)
     rb_str_modify(str);
-    rb_str_update(str, start, len, val);
+    rb_str_splice(str, start, len, val);
 }
@@ -1384,3 +1698,3 @@ rb_str_aset(str, indx, val)
 	else {
-	    rb_str_update(str, idx, 1, val);
+	    rb_str_splice(str, idx, 1, val);
 	}
@@ -1397,3 +1711,3 @@ rb_str_aset(str, indx, val)
 	}
-	rb_str_update(str, beg, RSTRING(indx)->len, val);
+	rb_str_splice(str, beg, RSTRING(indx)->len, val);
 	return val;
@@ -1405,3 +1719,3 @@ rb_str_aset(str, indx, val)
 	    if (rb_range_beg_len(indx, &beg, &len, RSTRING(str)->len, 2)) {
-		rb_str_update(str, beg, len, val);
+		rb_str_splice(str, beg, len, val);
 		return val;
@@ -1426,3 +1765,3 @@ rb_str_aset_m(argc, argv, str)
 	else {
-	    rb_str_update(str, NUM2LONG(argv[0]), NUM2LONG(argv[1]), argv[2]);
+	    rb_str_splice(str, NUM2LONG(argv[0]), NUM2LONG(argv[1]), argv[2]);
 	}
@@ -1449,3 +1805,3 @@ rb_str_insert(str, idx, str2)
     }
-    rb_str_update(str, pos, 0, str2);
+    rb_str_splice(str, pos, 0, str2);
     return str;