[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24196] Re: IO#truncate

From: nobu@...
Date: 2004-08-28 16:30:10 UTC
List: ruby-dev #24196
なかだです。

At Sun, 29 Aug 2004 00:06:37 +0900,
Tanaka Akira wrote in [ruby-dev:24191]:
> 
> IO#truncate を使った場合、次のように、消したはずと感じられる truncate
> 以前に puts したデータがファイルに書き込まれたままになるのですが、これ
> は意図された挙動でしょうか?

truncateする前にflushするようにすればいいんでしょうか。


Index: file.c
===================================================================
RCS file: /cvs/ruby/src/ruby/file.c,v
retrieving revision 1.184
diff -U2 -p -d -r1.184 file.c
--- file.c	17 Jul 2004 02:18:53 -0000	1.184
+++ file.c	28 Aug 2004 16:26:34 -0000
@@ -2966,4 +2966,5 @@ rb_file_truncate(obj, len)
 {
     OpenFile *fptr;
+    FILE *f;
 
     rb_secure(2);
@@ -2972,10 +2973,12 @@ rb_file_truncate(obj, len)
 	rb_raise(rb_eIOError, "not opened for writing");
     }
+    f = GetWriteFile(fptr);
+    fflush(f);
 #ifdef HAVE_TRUNCATE
-    if (ftruncate(fileno(fptr->f), NUM2OFFT(len)) < 0)
+    if (ftruncate(fileno(f), NUM2OFFT(len)) < 0)
 	rb_sys_fail(fptr->path);
 #else
 # ifdef HAVE_CHSIZE
-    if (chsize(fileno(fptr->f), NUM2OFFT(len)) < 0)
+    if (chsize(fileno(f), NUM2OFFT(len)) < 0)
 	rb_sys_fail(fptr->path);
 # else


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread