[#32171] autoload_delete — Hidetoshi NAGAI <nagai@...>
永井@知能.九工大です.
[#32185] Date#+に大きな数字を与えるとおかしな日付に — "madoka yamamoto" <yamamotomadoka@...>
こんにちは、山本と申します。
> Dateオブジェクトに+で大きな数字を与えるとおかしくなるようです。
山本です。
> アルゴリズムの意味がわからないで書いた、表層的なパッチなので
Hi,
> 1.9ではRationalとComplexを組み込みに、という話はありましたが、
原です。
ささだです.
[#32192] test-all results - ruby 1.9.0 (2007-11-09 patchlevel 0) [i686-linux] — SASADA Koichi <ko1@...>
ささだです.
[#32198] [提案] Array#tail — "Yusuke ENDOH" <mame@...>
遠藤と申します。
まつもと ゆきひろです
西山と申します
遠藤です。
[#32204] yydebug — Nobuyoshi Nakada <nobu@...>
なかだです。
[#32205] Use two pipes for duplex IO.popen — Tanaka Akira <akr@...>
改心して duplex な IO.popen で socketpair を使うのはやめよう
なかだです。
In article <20071111120021.7f0592e5.nobu@ruby-lang.org>,
[#32206] Integer#ord for 1.8 — Tanaka Akira <akr@...>
1.9 と 1.8 の両方で ?a.ord で 97 が得られるように、1.8 に
[#32219] trunkでビルド失敗 — KIMURA Koichi <kimura.koichi@...>
木村です。
[#32247] round missing (mswin32) — KIMURA Koichi <kimura.koichi@...>
木村です。
[#32263] toplevel irb method — SASADA Koichi <ko1@...>
ささだです.
まつもと ゆきひろです
[#32266] version string — SASADA Koichi <ko1@...>
ささだです.
[#32268] RFLOAT_VALUE(val), DOUBLE2NUM(dbl) — SASADA Koichi <ko1@...>
ささだです.
SASADA Koichi wrote:
[#32306] nanosecond Time and stat — Tanaka Akira <akr@...>
最近、nanosecond 単位な timestamp があるようです。
In article <874pflntd5.fsf@fsij.org>,
まつもと ゆきひろです
In article <E1Iu2GD-0004Wh-1I@x31>,
[#32308] core dump with undef/alias using dynamic symbols — Tadashi Saito <shiba@...2.accsnet.ne.jp>
斎藤と申します。
遠藤と申します。
ささだです.
遠藤です。
ささだです.
[#32329] enumerator with single array and multiple arguments. — Tanaka Akira <akr@...>
enumerator を通すとひとつの配列と複数の引数が区別できません。
[#32330] defined?($&) — Tanaka Akira <akr@...>
ふと気がついたんですが、defined?($&) が "expression" になり
まつもと ゆきひろです
まつもと ゆきひろです
ささだです.
[#32333] test/ruby/test_eval.rb — SASADA Koichi <ko1@...>
ささだです.
まつもと ゆきひろです
ささだです.
まつもと ゆきひろです
[#32348] DRb test leaves ut_eval.rb process — Tanaka Akira <akr@...>
DRb のテストをすると、(テストがいろいろと失敗する他に) プロ
[#32352] 1.9.1のリリース時期について — KIMURA Koichi <hogemuta@...>
木村です。
まつもと ゆきひろです
木村です。
まつもと ゆきひろです
[#32403] Next 1.8.6 patch release? (was Re: 1.9.1のリリース時期について) — Takahiro Kambe <taca@...>
こんばんは。
卜部です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
成瀬です。
卜部です。
遠藤と申します。
遠藤です。
ささだです.
まつもと ゆきひろです
[#32404] SEGV on child process by fork on GC.stress. — Tanaka Akira <akr@...>
GC.stress = true 下で fork すると子プロセスが SEGV します。
まつもと ゆきひろです
In article <E1Iy7HA-0006zn-37@x31>,
まつもと ゆきひろです
ささだです.
[#32409] Re: [ruby-cvs:21293] Ruby:r14056 (trunk): * signal.c (trap_signm): SIGVTALRM no longer used for green — SASADA Koichi <ko1@...>
ささだです.
さとうふみやす @ OSS テクノロジです。
ささだです.
まつもと ゆきひろです
[ruby-dev:32323] IO#close_on_exec? and IO#close_on_exec=
IO#close_on_exec? と IO#close_on_exec= を導入して、これらで
は 2つの fd を扱うのはどうでしょうか。
fd が 2つあると、単純な fcntl では両方を close on exec にで
きなくて困る、ということを昔 [ruby-list:26156] で報告して、
その結果としてfcntl は両方の fd に実行されるということになり
ましたが、これはなんとも乱暴です。たとえば、
[ruby-list:26208] で F_DUPFD はまずいと書きましたが、F_DUPFD
を 2回実行してひとつの結果を無視するというのはなんとも奇妙な
挙動です。
というわけで、close on exec に特化してメソッドを用意するのが
いいと思います。他の fcntl については、もし必要になったら非
常用のインスタンス変数でどうにかして、充分に用法が把握できた
らメソッドにすることを考えるということで。
Index: io.c
===================================================================
--- io.c (revision 13977)
+++ io.c (working copy)
@@ -2295,6 +2295,99 @@ rb_io_isatty(VALUE io)
return Qtrue;
}
+/*
+ * call-seq:
+ * ios.close_on_exec? => true or false
+ *
+ * Returns <code>true</code> if <em>ios</em> will be closed on exec.
+ *
+ * f = open("/dev/null")
+ * f.close_on_exec? #=> false
+ * f.close_on_exec = true
+ * f.close_on_exec? #=> true
+ * f.close_on_exec = false
+ * f.close_on_exec? #=> false
+ */
+
+static VALUE
+rb_io_close_on_exec_p(VALUE io)
+{
+#if defined(HAVE_FCNTL) && defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
+ rb_io_t *fptr;
+ VALUE write_io;
+ int fd, ret;
+
+ write_io = GetWriteIO(io);
+ if (io != write_io) {
+ GetOpenFile(write_io, fptr);
+ if (fptr && 0 <= (fd = fptr->fd)) {
+ if ((ret = fcntl(fd, F_GETFD)) == -1) rb_sys_fail(fptr->path);
+ if (!(ret & FD_CLOEXEC)) return Qfalse;
+ }
+ }
+
+ GetOpenFile(io, fptr);
+ if (fptr && 0 <= (fd = fptr->fd)) {
+ if ((ret = fcntl(fd, F_GETFD)) == -1) rb_sys_fail(fptr->path);
+ if (!(ret & FD_CLOEXEC)) return Qfalse;
+ }
+ return Qtrue;
+#else
+ rb_notimplement();
+ return Qnil; /* not reached */
+#endif
+}
+
+/*
+ * call-seq:
+ * ios.close_on_exec = bool => true or false
+ *
+ * Sets a close-on-exec flag.
+ *
+ * f = open("/dev/null")
+ * f.close_on_exec = true
+ * system("cat", "/proc/self/fd/#{f.fileno}")
+ * #=> cat: /proc/self/fd/3: No such file or directory
+ */
+
+static VALUE
+rb_io_set_close_on_exec(VALUE io, VALUE arg)
+{
+#if defined(HAVE_FCNTL) && defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
+ int flag = RTEST(arg) ? FD_CLOEXEC : 0;
+ rb_io_t *fptr;
+ VALUE write_io;
+ int fd, ret;
+
+ write_io = GetWriteIO(io);
+ if (io != write_io) {
+ GetOpenFile(write_io, fptr);
+ if (fptr && 0 <= (fd = fptr->fd)) {
+ if ((ret = fcntl(fptr->fd, F_GETFD)) == -1) rb_sys_fail(fptr->path);
+ if ((ret & FD_CLOEXEC) != flag) {
+ ret = (ret & ~FD_CLOEXEC) | flag;
+ ret = fcntl(fd, F_SETFD, ret);
+ if (ret == -1) rb_sys_fail(fptr->path);
+ }
+ }
+
+ }
+
+ GetOpenFile(io, fptr);
+ if (fptr && 0 <= (fd = fptr->fd)) {
+ if ((ret = fcntl(fd, F_GETFD)) == -1) rb_sys_fail(fptr->path);
+ if ((ret & FD_CLOEXEC) != flag) {
+ ret = (ret & ~FD_CLOEXEC) | flag;
+ ret = fcntl(fd, F_SETFD, ret);
+ if (ret == -1) rb_sys_fail(fptr->path);
+ }
+ }
+#else
+ rb_notimplement();
+#endif
+ return Qnil;
+}
+
#define FMODE_PREP (1<<16)
#define IS_PREP_STDIO(f) ((f)->mode & FMODE_PREP)
#define PREP_STDIO_NAME(f) ((f)->path)
@@ -6021,6 +6114,9 @@ Init_IO(void)
rb_define_method(rb_cIO, "eof", rb_io_eof, 0);
rb_define_method(rb_cIO, "eof?", rb_io_eof, 0);
+ rb_define_method(rb_cIO, "close_on_exec?", rb_io_close_on_exec_p, 0);
+ rb_define_method(rb_cIO, "close_on_exec=", rb_io_set_close_on_exec, 1);
+
rb_define_method(rb_cIO, "close", rb_io_close_m, 0);
rb_define_method(rb_cIO, "closed?", rb_io_closed, 0);
rb_define_method(rb_cIO, "close_read", rb_io_close_read, 0);
--
[田中 哲][たなか あきら][Tanaka Akira]