[#22815] File.fnmatch が "*?" のパターンを正しく処理しない? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
山本です。
山本です。
山本です。補足します。
なかだです。
山本です。
山本です。
まつもと ゆきひろです
[#22816] YAML.load(time) on OpenBSD3.4 — "Kawaji, Shinya" <kawaji@...>
かわじ、です
In article <20040207005319=tuYR!@hoppeta.com>,
かわじ、です。
[#22832] Dir.glob("**/") のバグ — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
[#22859] Re: io/nonblock — nobu.nakada@...
なかだです。
[#22862] File.fnmatch と Dir.glob — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
まつもと ゆきひろです
山本です。
山本です。誤記がありました。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
まつもと ゆきひろです
わたなべです。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
なかだです。
山本です。
なかだです。
山本です。
なかだです。
山本です。
[#22870] path for RUBY — GOTOU Yuuzou <gotoyuzo@...>
mkmf.rbでMakefileを作ると、$(RUBY)にディレクトリ名が含まれな
[#22877] Process.spawn & IO.popen w/o shell — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
In message <200402141156.i1EBuYFH018029@sharui.nakada.niregi.kanuma.tochigi.jp>
なかだです。
In message <200402160353.i1G3rGNK007935@sharui.nakada.niregi.kanuma.tochigi.jp>
なかだです。
[#22890] rb_glob(i) & constness — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
In article <20040215161805.6541D650.ocean@m2.ccsnet.ne.jp>,
[#22906] bcc32 の makefile — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
なかだです。
山本です。
山本です。
[#22911] core dump with /#{Thread.pass}/o — Tanaka Akira <akr@...17n.org>
ついに捕まえたのですが、次のようにすると core を吐きます。
[#22928] [BUG] make distclean が失敗する — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
山本です。
山本です。
山本です。
こんにちは、なかむら(う)です。
山本です。
こんにちは、なかむら(う)です。
山本です。
なかだです。
山本です。
山本です。
こんにちは、なかむら(う)です。
山本です。
山本です。
山本です。
こんにちは、なかむら(う)です。
山本です。
こんにちは、なかむら(う)です。
山本です。
山本です。
こんにちは、なかむら(う)です。
山本です。
山本です。
こんにちは、なかむら(う)です。
山本です。
山本です。
こんにちは、なかむら(う)です。
[#22956] Dir#glob proposal — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
山本です。
山本です。
[#23032] Re: [Oniguruma] Version 2.2.0 — kkosako@...
> -----Original Message-----
斉藤です。
まつもと ゆきひろです
[#23035] Re: [ruby-talk:93584] date/format.rb fix — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
[#23038] Re: [ruby-cvs] ruby: * eval.c (localjump_destination): lambda should not interfere — nobu.nakada@...
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
[#23039] rss/dublincore.rb: dc:date format — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
[ruby-dev:22859] Re: io/nonblock
なかだです。
At Sat, 7 Feb 2004 00:15:03 +0900,
Ara.T.Howard wrote in [ruby-talk:91705]:
> > > why not have it in the core io methods?
> >
> > Well, IIRC, because it is not portable enough, for io/wait at least. Hmmm,
> > but EWOULDBLOCK is supported by core..., might it be OK for io/nonblock
> > alone?
>
> i don't really know - i was just saying that is it such a useful method it
> would be nice if it were possible for it to be in the core.
IO#nonblockというメソッドを、なぜかio/waitに入れてしまったんで
すが、考えてみるとio/waitとは関係なさそうです。そもそも、すでに
O_NONBLOCKはEAGAINと一緒にio.cで対応済みなので、必要なのはイン
ターフェースだけではないかと思うのですが。
IO#nonblock?
IO#nonblock = nb
IO#nonblocking([nb = true]) {}
IO#nonblock {}
IO#nonblock
あたりでどうかと。
Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.258
diff -u -2 -p -d -r1.258 io.c
--- io.c 26 Jan 2004 13:54:29 -0000 1.258
+++ io.c 12 Feb 2004 03:38:49 -0000
@@ -4496,4 +4496,139 @@ rb_io_fcntl(argc, argv, io)
}
+#ifndef O_NONBLOCK
+# ifdef O_NDELAY
+# define O_NONBLOCK O_NDELAY
+# endif
+#endif
+
+/*
+ * call-seq:
+ * ios.nonblock? => true or false
+ *
+ * Returns true if _ios_ is in non-blocking mode.
+ *
+ * f = File.new("/dev/tty", IO::RDONLY|IO::NONBLOCK)
+ * f.nonblock? #=> true
+ */
+
+static VALUE
+rb_io_nonblock_p(io)
+ VALUE io;
+{
+#if defined(HAVE_FCNTL) && defined(F_GETFL) && defined(O_NONBLOCK)
+ OpenFile *fptr;
+ int flag;
+
+ GetOpenFile(io, fptr);
+ if ((flag = fcntl(fileno(fptr->f), F_GETFL)) == -1) {
+ rb_sys_fail(0);
+ }
+ if (flag & O_NONBLOCK) return Qtrue;
+#endif
+ return Qfalse;
+}
+
+/*
+ * call-seq:
+ * ios.nonblock = nb
+ *
+ * Sets non-blocking mode of _ios_ to _nb_.
+ */
+
+static VALUE
+rb_io_set_nonblock(io, nb)
+ VALUE io, nb;
+{
+#if defined(HAVE_FCNTL) && defined(F_GETFL) && defined(O_NONBLOCK)
+ OpenFile *fptr;
+ int fd, flag, newflag;
+ VALUE ret;
+
+ GetOpenFile(io, fptr);
+ fd = fileno(fptr->f);
+ if ((flag = fcntl(fd, F_GETFL)) == -1) {
+ rb_sys_fail(0);
+ }
+ if (RTEST(nb)) {
+ newflag = flag | O_NONBLOCK;
+ ret = Qfalse;
+ }
+ else {
+ newflag = flag & ~O_NONBLOCK;
+ ret = Qtrue;
+ }
+ if (flag != newflag) {
+ if (fcntl(fd, F_SETFL, newflag))
+ rb_sys_fail(0);
+ return ret;
+ }
+#else
+ rb_notimplement();
+#endif
+ return Qnil;
+}
+
+static VALUE
+io_restore_flag(args)
+ int *args;
+{
+ return rb_io_set_nonblock(args[0], args[1]);
+}
+
+/*
+ * call-seq:
+ * ios.nonblocking([nb = true]) { block } => obj
+ *
+ * Yields the given block setting non-blocking mode of _ios_ to _nb_.
+ * The mode will be restored when the block terminates.
+ */
+
+static VALUE
+rb_io_nonblocking(argc, argv, io)
+ int argc;
+ VALUE *argv;
+ VALUE io;
+{
+#if defined(HAVE_FCNTL) && defined(F_GETFL) && defined(O_NONBLOCK)
+ VALUE nb, args[2];
+
+ if (rb_scan_args(argc, argv, "01", &nb) == 0) nb = Qtrue;
+ nb = rb_io_set_nonblock(io, nb);
+ if (NIL_P(nb)) return rb_yield(Qundef);
+ args[0] = io;
+ args[1] = nb;
+ return rb_ensure(rb_yield, Qundef, io_restore_flag, (VALUE)args);
+#else
+ rb_notimplement();
+ return Qnil; /* not reached */
+#endif
+}
+
+/*
+ * call-seq:
+ * ios.nonblock => true or false
+ * ios.nonblock([nb = true]) { block } => obj
+ *
+ * If a block is given, same as IO#nonblocking, otherwise same as
+ * IO#nonblock?.
+ */
+
+static VALUE
+rb_io_nonblock(argc, argv, io)
+ int argc;
+ VALUE *argv;
+ VALUE io;
+{
+ if (rb_block_given_p()) {
+ return rb_io_nonblocking(argc, argv, io);
+ }
+ else {
+ if (argc > 0)
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);
+ return rb_io_nonblock_p(io);
+ }
+}
+
+
/*
* call-seq:
@@ -5322,4 +5457,8 @@ Init_IO()
rb_define_method(rb_cIO, "pid", rb_io_pid, 0);
rb_define_method(rb_cIO, "inspect", rb_io_inspect, 0);
+ rb_define_method(rb_cIO, "nonblock?", rb_io_nonblock_p, 0);
+ rb_define_method(rb_cIO, "nonblock=", rb_io_set_nonblock, 1);
+ rb_define_method(rb_cIO, "nonblocking", rb_io_nonblocking, -1);
+ rb_define_method(rb_cIO, "nonblock", rb_io_nonblock, -1);
rb_stdin = prep_stdio(stdin, FMODE_READABLE, rb_cIO);
@@ -5403,10 +5542,6 @@ Init_IO()
rb_file_const("CREAT", INT2FIX(O_CREAT));
rb_file_const("EXCL", INT2FIX(O_EXCL));
-#if defined(O_NDELAY) || defined(O_NONBLOCK)
-# ifdef O_NONBLOCK
+#ifdef O_NONBLOCK
rb_file_const("NONBLOCK", INT2FIX(O_NONBLOCK));
-# else
- rb_file_const("NONBLOCK", INT2FIX(O_NDELAY));
-# endif
#endif
rb_file_const("TRUNC", INT2FIX(O_TRUNC));
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦