[#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:23018] Re: IO::for_io and TCPServer#bind
なかだです。
At Wed, 10 Dec 2003 17:38:00 +0900,
Nobuyoshi-Nakada wrote in [ruby-dev:22216]:
> > その後考えるにこっちの方が良いだろうという気になりました。
> > for_fdをobsolteにしてこっちを推奨するのが良いと思います。た
> > だ、IO.for_ioってのは名前があんまりなので別名を希望します。
>
> IO.for_fdって事実上IO.newの別名なんですよね。IO.newでIOを渡され
> たらfor_io相当ではどうでしょうか。
すっかり忘れてましたが、こんな感じです。
* gc.c (obj_free), io.c (rb_io_fptr_finalize), rubyio.h (OpenFile):
sharing OpenFile.
* io.c (rb_io_initialize): accept IO instance. [ruby-dev:22195]
Index: gc.c
===================================================================
RCS file: /cvs/ruby/src/ruby/gc.c,v
retrieving revision 1.170
diff -u -2 -p -d -r1.170 gc.c
--- gc.c 22 Jan 2004 08:31:32 -0000 1.170
+++ gc.c 25 Feb 2004 10:59:49 -0000
@@ -1179,5 +1179,4 @@ obj_free(obj)
if (RANY(obj)->as.file.fptr) {
rb_io_fptr_finalize(RANY(obj)->as.file.fptr);
- RUBY_CRITICAL(free(RANY(obj)->as.file.fptr));
}
break;
Index: io.c
===================================================================
RCS file: /cvs/ruby/src/ruby/io.c,v
retrieving revision 1.260
diff -u -2 -p -d -r1.260 io.c
--- io.c 20 Feb 2004 03:57:36 -0000 1.260
+++ io.c 25 Feb 2004 11:08:23 -0000
@@ -1781,4 +1781,5 @@ rb_io_fptr_finalize(fptr)
{
if (!fptr) return;
+ if (fptr->refcnt <= 0 || --fptr->refcnt) return;
if (fptr->path) {
free(fptr->path);
@@ -1788,4 +1789,5 @@ rb_io_fptr_finalize(fptr)
rb_io_fptr_cleanup(fptr, Qtrue);
+ free(fptr);
}
@@ -3060,4 +3062,11 @@ rb_io_get_io(io)
}
+static VALUE
+rb_io_check_io(io)
+ VALUE io;
+{
+ return rb_check_convert_type(io, T_FILE, "IO", "to_io");
+}
+
static char*
rb_io_mode_string(fptr)
@@ -3752,7 +3761,10 @@ prep_path(io, path)
*
* Returns a new <code>IO</code> object (a stream) for the given
- * integer file descriptor and mode string. See also
- * <code>IO#fileno</code> and <code>IO::for_fd</code>.
- *
+ * <code>IO</code> object or integer file descriptor and mode
+ * string. See also <code>IO#fileno</code> and
+ * <code>IO::for_fd</code>.
+ *
+ * puts IO.new($stdout).fileno # => 1
+ *
* a = IO.new(2,"w") # '2' is standard error
* $stderr.puts "Hello"
@@ -3771,12 +3783,22 @@ rb_io_initialize(argc, argv, io)
VALUE io;
{
- VALUE fnum, mode;
- OpenFile *fp;
- int fd, flags;
+ VALUE fnum, mode, orig;
+ OpenFile *fp, *ofp;
+ int fd, flags, fmode;
char mbuf[4];
rb_secure(4);
rb_scan_args(argc, argv, "11", &fnum, &mode);
- fd = NUM2INT(fnum);
+ orig = rb_io_check_io(fnum);
+ if (NIL_P(orig)) {
+ fd = NUM2INT(fnum);
+ }
+ else {
+ GetOpenFile(orig, ofp);
+ if (ofp->refcnt == LONG_MAX) {
+ VALUE s = rb_inspect(orig);
+ rb_raise(rb_eIOError, "too many shared IO for %s", StringValuePtr(s));
+ }
+ }
if (argc == 2) {
if (FIXNUM_P(mode)) {
@@ -3787,6 +3809,7 @@ rb_io_initialize(argc, argv, io)
flags = rb_io_mode_modenum(RSTRING(mode)->ptr);
}
+ fmode = rb_io_modenum_flags(flags);
}
- else {
+ else if (!ofp) {
#if defined(HAVE_FCNTL) && defined(F_GETFL)
flags = fcntl(fd, F_GETFL);
@@ -3794,8 +3817,30 @@ rb_io_initialize(argc, argv, io)
flags = O_RDONLY;
#endif
+ fmode = rb_io_modenum_flags(flags);
+ }
+ if (!ofp) {
+ MakeOpenFile(io, fp);
+ fp->mode = fmode;
+ fp->f = rb_fdopen(fd, rb_io_modenum_mode(flags, mbuf));
+ }
+ else {
+ if (argc == 2) {
+ if ((ofp->mode ^ fmode) & (FMODE_READWRITE|FMODE_BINMODE)) {
+ if (FIXNUM_P(mode)) {
+ rb_raise(rb_eArgError, "incompatible mode 0%o", flags);
+ }
+ else {
+ rb_raise(rb_eArgError, "incompatible mode %s", RSTRING(mode)->ptr);
+ }
+ }
+ }
+ if (RFILE(io)->fptr) {
+ rb_io_close(io);
+ free(RFILE(io)->fptr);
+ RFILE(io)->fptr = 0;
+ }
+ ofp->refcnt++;
+ RFILE(io)->fptr = ofp;
}
- MakeOpenFile(io, fp);
- fp->mode = rb_io_modenum_flags(flags);
- fp->f = rb_fdopen(fd, rb_io_modenum_mode(flags, mbuf));
return io;
Index: rubyio.h
===================================================================
RCS file: /cvs/ruby/src/ruby/rubyio.h,v
retrieving revision 1.23
diff -u -2 -p -d -r1.23 rubyio.h
--- rubyio.h 14 Apr 2003 09:04:43 -0000 1.23
+++ rubyio.h 10 Dec 2003 07:45:40 -0000
@@ -25,4 +25,5 @@ typedef struct OpenFile {
char *path; /* pathname for file */
void (*finalize) _((struct OpenFile*,int)); /* finalize proc */
+ long refcnt;
} OpenFile;
@@ -51,4 +52,5 @@ typedef struct OpenFile {
fp->path = NULL;\
fp->finalize = 0;\
+ fp->refcnt = 1;\
} while (0)
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦