[#25010] test_flush fails. — "URABE Shyouhei aka.mput" <root@...>
mput です。以下のように test_flush が失敗します。
[#25031] Method#to_proc とブロックの引渡し — Masahiro Sakai (酒井政裕) <sakai@...>
酒井といいます。
[#25035] 拡張ライブラリへの共有ライブラリのPATHの埋め込み — Takahiro Kambe <taca@...>
こんにちは。
なかだです。
In message <200412060607.iB667giF007533@sharui.nakada.niregi.kanuma.tochigi.jp>
なかだです。
In message <200412070015.iB70FAiF012770@sharui.nakada.niregi.kanuma.tochigi.jp>
2004-12-07 (火) の 12:27 +0900 に Takahiro Kambe さんは書きました:
こんにちは、なかむら(う)です。
In message <1102395885.21598.19.camel@rice.p.arika.org>
なかだです。
In message <200412071613.iB7GD2r4007918@sharui.nakada.niregi.kanuma.tochigi.jp>
[#25041] temporal locking already locked string on simultaneous write — Tanaka Akira <akr@...17n.org>
同じ文字列をほぼ同時に IO に書き込むと、temporal locking already
まつもと ゆきひろです
In article <1102133507.339625.10453.nullmailer@x31.priv.netlab.jp>,
In article <1102176395.383559.21204.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
Tietew です。
[#25054] rexml — Takahiro Kambe <taca@...>
こんばんは。
なかだです。
In message <200412051451.iB5EpYiF009060@sharui.nakada.niregi.kanuma.tochigi.jp>
まつもと ゆきひろです
In message <1102290330.040938.1210.nullmailer@x31.priv.netlab.jp>
[#25096] double free problem — "Akinori MUSHA" <knu@...>
ご無沙汰しております。
Hi,
In article <1102401703.030252.2480.nullmailer@x31.priv.netlab.jp>,
まつもと ゆきひろです
Yukihiro Matsumoto wrote:
Yukihiro Matsumoto wrote:
In article <41BEF768.7030008@ttsky.net>,
Tanaka Akira wrote:
[#25101] non-stdio buffering — Tanaka Akira <akr@...17n.org>
えぇと、今回 1.9 でなにが起きたのかを私が把握している範囲でまとめてお
こんにちは、なかむら(う)です。
In article <20041208.033521.635728872.gotoyuzo@sawara.does.notwork.org>,
[#25103] ruby_xrealloc dumps core — Tietew <tietew-ml-ruby-dev@...>
Tietew です。
[#25134] Set/test_eq failed on Tru64UNIX — Minero Aoki <aamine@...>
青木です。
なかだです。
まつもと ゆきひろです
[#25152] 1.8 reopen problem with duplex popen — Tanaka Akira <akr@...17n.org>
次のように、1.8 で双方向 popen な IO を reopen するとエラーになること
なかだです。
In article <200412110142.iBB1gDIh004622@sharui.nakada.niregi.kanuma.tochigi.jp>,
なかだです。
わたなべです。
In article <41-Tue21Dec2004123451+0900-eban@os.rim.or.jp>,
[#25158] core dump on NetBSD 2.0 — Tanaka Akira <akr@...17n.org>
NetBSD 2.0 で次のようにすると core を吐きます。
In article <87hdmsivva.fsf@serein.a02.aist.go.jp>,
In article <87ekhwiv7g.fsf@serein.a02.aist.go.jp>,
なかだです。
In article <200412130040.iBD0e8Qh003275@sharui.nakada.niregi.kanuma.tochigi.jp>,
まつもと ゆきひろです
In article <1102906796.625997.23964.nullmailer@x31.priv.netlab.jp>,
前田です。
In article <41BD40DC.6030706@ruby-lang.org>,
まつもと ゆきひろです
[#25160] ripper in snapshot.tar.gz — Tanaka Akira <akr@...17n.org>
ふと、とある autoconf も bison も入っていない環境で Ruby をコンパイル
[#25193] 1.8.2 release schedule — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
[#25226] Zlib::Deflate.deflate dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
[#25236] BSD/OS rlim_t — OHARA Shigeki <os@...>
大原です。
[#25252] core dump if local_append_gen invokes GC — Tanaka Akira <akr@...17n.org>
先程 1.9 を make test-all したところ、
[#25270] BSD/OS LDSHARED — OHARA Shigeki <os@...>
大原です。
[#25283] 1.8.2 preview4 — Yukihiro Matsumoto <matz@...>
Hello,
[#25292] tkutil is installed on no tcl/tk environment — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、Tcl/Tk が入っていない環境でも、tkutil は
[#25299] Re: リリース準備 — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
高橋征義です。
山本です。
小西 弘将です。
山本です。
山本です。
山本です。
永井@知能.九工大です.
[#25302] test_readline.rb blocks on BSD again — GOTOU Yuuzou <gotoyuzo@...>
In message <20041223175402.3116FC6718@lithium.ruby-lang.org>,
In message <20041224.131211.846943951.gotoyuzo@sawara.does.notwork.org>,
まつもと ゆきひろです
わたなべです。
In message <20041225140050.378109.eban@os.rim.or.jp>,
なかだです。
In article <200412251620.iBPGK1xA009288@sharui.nakada.niregi.kanuma.tochigi.jp>,
なかだです。
In article <200412260300.iBQ3038u005055@sharui.nakada.niregi.kanuma.tochigi.jp>,
[#25336] webrick/httpauth.rb must require 'base64' — sheepman <sheepman@...>
こんにちは、sheepman です。
[#25341] String#center dumps core — Tanaka Akira <akr@...17n.org>
次のようにすると core を吐きます。
なかだです。
[#25342] 1.9.0でbcc版がコンパイルできない — 小西 弘将 <konishih@...6.so-net.ne.jp>
小西 弘将です。
山本です。
[#25365] method(:p).to_proc.call([]) — Masahiro Sakai (酒井政裕) <sakai@...>
酒井です。
[#25370] FileUtils.copy_stream on nonblocking IO — Tanaka Akira <akr@...17n.org>
FileUtils.copy_stream を nonblocking な IO に対して使うと、次のように
[ruby-dev:25225] STDIN.reopen(STDOUT).reopen(STDOUT)
なかだです。
http://diary.does.notwork.org/gotoyuzo/?date=20041122#p02
| NetBSDでは、STDIN限定で上のようなコードが失敗するようだ。
|
| * 1回目のreopenでSTDINがFMODE_WRITABLEに変わる。
| * 2回目のreopenでFMODE_WRITABLEなのでfflush(stdin)が呼ばれる。
| * しかし、FILE*が以前のモードを憶えたままなのでfflushでエラー。
という件ですが、STDINなどは特別扱いにして、modeの変更を禁止して
しまってはどうでしょうか。
* io.c (io_reopen, rb_io_reopen): prohibit to change access mode for
special IO ports.
Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.351
diff -U2 -p -d -r1.351 io.c
--- io.c 9 Dec 2004 03:34:47 -0000 1.351
+++ io.c 16 Dec 2004 06:24:03 -0000
@@ -1917,4 +1917,8 @@ rb_io_isatty(io)
}
+#define FMODE_PREP (1<<16)
+#define IS_PREP_STDIO(f) ((f)->mode & FMODE_PREP)
+#define PREP_STDIO_NAME(f) ((f)->path)
+
static void
fptr_finalize(fptr, noraise)
@@ -1925,7 +1929,5 @@ fptr_finalize(fptr, noraise)
io_fflush(fptr);
}
- if (fptr->stdio_file == stdin ||
- fptr->stdio_file == stdout ||
- fptr->stdio_file == stderr ||
+ if (IS_PREP_STDIO(fptr) ||
fptr->fd <= 2) {
return;
@@ -3272,4 +3274,14 @@ io_reopen(io, nfile)
if (fptr == orig) return io;
+#if !defined __CYGWIN__
+ if (IS_PREP_STDIO(fptr)) {
+ if ((fptr->mode & FMODE_READWRITE) != (orig->mode & FMODE_READWRITE)) {
+ rb_raise(rb_eArgError,
+ "%s cannot change access mode from \"%s\" to \"%s\"",
+ PREP_STDIO_NAME(fptr), rb_io_flags_mode(fptr->mode),
+ rb_io_flags_mode(orig->mode));
+ }
+ }
+#endif
if (orig->mode & FMODE_READABLE) {
pos = io_tell(orig);
@@ -3295,7 +3307,5 @@ io_reopen(io, nfile)
if (fd != fd2) {
#if !defined __CYGWIN__
- if (fptr->stdio_file == stdin ||
- fptr->stdio_file == stdout ||
- fptr->stdio_file == stderr) {
+ if (IS_PREP_STDIO(fptr)) {
/* need to keep stdio objects */
if (dup2(fd2, fd) < 0)
@@ -3378,5 +3388,13 @@ rb_io_reopen(argc, argv, file)
if (!NIL_P(nmode)) {
- fptr->mode = rb_io_mode_flags(StringValuePtr(nmode));
+ int flags = rb_io_mode_flags(StringValuePtr(nmode));
+ if (IS_PREP_STDIO(fptr) &&
+ (fptr->mode & FMODE_READWRITE) != (flags & FMODE_READWRITE)) {
+ rb_raise(rb_eArgError,
+ "%s cannot change access mode from \"%s\" to \"%s\"",
+ PREP_STDIO_NAME(fptr), rb_io_flags_mode(fptr->mode),
+ rb_io_flags_mode(flags));
+ }
+ fptr->mode = flags;
}
@@ -3858,8 +3876,9 @@ deferr_setter(val, id, variable)
static VALUE
-prep_stdio(f, mode, klass)
+prep_stdio(f, mode, klass, path)
FILE *f;
int mode;
VALUE klass;
+ const char *path;
{
OpenFile *fp;
@@ -3875,5 +3894,5 @@ prep_stdio(f, mode, klass)
#endif
fp->stdio_file = f;
- fp->mode = mode;
+ fp->mode = mode | FMODE_PREP;
if (fp->mode & FMODE_WRITABLE) {
if (fp->fd == 2) { /* stderr must be unbuffered */
@@ -3884,20 +3903,9 @@ prep_stdio(f, mode, klass)
}
}
+ fp->path = strdup(path);
return io;
}
-static void
-prep_path(io, path)
- VALUE io;
- char *path;
-{
- OpenFile *fptr;
-
- GetOpenFile(io, fptr);
- if (fptr->path) rb_bug("illegal prep_path() call");
- fptr->path = strdup(path);
-}
-
FILE *rb_io_stdio_file(OpenFile *fptr)
{
@@ -4214,10 +4222,8 @@ next_argv()
}
#endif
- rb_stdout = prep_stdio(fw, FMODE_WRITABLE, rb_cFile);
- prep_path(rb_stdout, fn);
+ rb_stdout = prep_stdio(fw, FMODE_WRITABLE, rb_cFile, fn);
if (stdout_binmode) rb_io_binmode(rb_stdout);
}
- current_file = prep_stdio(fr, FMODE_READABLE, rb_cFile);
- prep_path(current_file, fn);
+ current_file = prep_stdio(fr, FMODE_READABLE, rb_cFile, fn);
}
if (binmode) rb_io_binmode(current_file);
@@ -5553,9 +5559,9 @@ Init_IO()
rb_define_method(rb_cIO, "inspect", rb_io_inspect, 0);
- rb_stdin = prep_stdio(stdin, FMODE_READABLE, rb_cIO);
+ rb_stdin = prep_stdio(stdin, FMODE_READABLE, rb_cIO, "<STDIN>");
rb_define_variable("$stdin", &rb_stdin);
- rb_stdout = prep_stdio(stdout, FMODE_WRITABLE, rb_cIO);
+ rb_stdout = prep_stdio(stdout, FMODE_WRITABLE, rb_cIO, "<STDOUT>");
rb_define_hooked_variable("$stdout", &rb_stdout, 0, stdout_setter);
- rb_stderr = prep_stdio(stderr, FMODE_WRITABLE, rb_cIO);
+ rb_stderr = prep_stdio(stderr, FMODE_WRITABLE, rb_cIO, "<STDERR>");
rb_define_hooked_variable("$stderr", &rb_stderr, 0, stdout_setter);
rb_define_hooked_variable("$>", &rb_stdout, 0, stdout_setter);
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦