From: matz@... (Yukihiro Matsumoto) Date: 2003-12-25T17:34:59+09:00 Subject: [ruby-dev:22417] Re: Tk.callback_break causes seg-fault or hang-up まつもと ゆきひろです In message "[ruby-dev:22415] Re: Tk.callback_break causes seg-fault or hang-up" on 03/12/25, Yukihiro Matsumoto 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 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 + + * 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;