ruby-changes:5541
From: akr <ko1@a...>
Date: Mon, 9 Jun 2008 17:51:01 +0900 (JST)
Subject: [ruby-changes:5541] Ruby:r17044 (trunk): * io.c (fptr_finalize): close IO object if fd is already closed.
akr 2008-06-09 17:48:41 +0900 (Mon, 09 Jun 2008)
New Revision: 17044
Modified files:
trunk/ChangeLog
trunk/io.c
Log:
* io.c (fptr_finalize): close IO object if fd is already closed.
(rb_p): call rb_io_write just once.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17044&r2=17043&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/io.c?r1=17044&r2=17043&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 17043)
+++ ChangeLog (revision 17044)
@@ -1,3 +1,8 @@
+Mon Jun 9 17:47:09 2008 Tanaka Akira <akr@f...>
+
+ * io.c (fptr_finalize): close IO object if fd is already closed.
+ (rb_p): call rb_io_write just once.
+
Mon Jun 9 15:37:38 2008 Yukihiro Matsumoto <matz@r...>
* ruby.c (require_libraries): req_list may be NULL. [ruby-dev:35008]
Index: io.c
===================================================================
--- io.c (revision 17043)
+++ io.c (revision 17044)
@@ -2673,6 +2673,7 @@
static void
fptr_finalize(rb_io_t *fptr, int noraise)
{
+ int ebadf = 0;
if (fptr->wbuf_len) {
io_fflush(fptr);
}
@@ -2690,13 +2691,22 @@
}
else if (0 <= fptr->fd) {
if (close(fptr->fd) < 0 && !noraise) {
- /* fptr->fd is still not closed */
- rb_sys_fail(fptr->path);
+ if (errno != EBADF) {
+ /* fptr->fd is still not closed */
+ rb_sys_fail(fptr->path);
+ }
+ else {
+ /* fptr->fd is already closed. */
+ ebadf = 1;
+ }
}
}
fptr->fd = -1;
fptr->stdio_file = 0;
fptr->mode &= ~(FMODE_READABLE|FMODE_WRITABLE);
+ if (ebadf) {
+ rb_sys_fail(fptr->path);
+ }
}
static void
@@ -4750,8 +4760,9 @@
void
rb_p(VALUE obj) /* for debug print within C code */
{
- rb_io_write(rb_stdout, rb_obj_as_string(rb_inspect(obj)));
- rb_io_write(rb_stdout, rb_default_rs);
+ VALUE str = rb_obj_as_string(rb_inspect(obj));
+ rb_str_buf_append(str, rb_default_rs);
+ rb_io_write(rb_stdout, str);
}
/*
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/