aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--io.c18
2 files changed, 16 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 05c86bdd88..98a94407b1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Feb 6 02:10:30 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * io.c (fptr_finalize): ignore EBADF when f and f2 use same
+ descriptor.
+
Tue Feb 5 16:17:20 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
* io.c (fptr_finalize): should raise error when fclose fails.
diff --git a/io.c b/io.c
index f078bcca21..88f6815727 100644
--- a/io.c
+++ b/io.c
@@ -1075,17 +1075,21 @@ static void
fptr_finalize(fptr, fin)
OpenFile *fptr;
{
- int n1 = 0, n2 = 0, e = 0;
+ int n1 = 0, n2 = 0, e = 0, f1, f2 = -1;
- if (fptr->f) {
- n1 = fclose(fptr->f);
- if (n1 < 0) e = errno;
- }
if (fptr->f2) {
+ f2 = fileno(fptr->f2);
n2 = fclose(fptr->f2);
+ if (n2 < 0) e = errno;
+ }
+ if (fptr->f && fptr->f != fptr->f2) {
+ f1 = fileno(fptr->f);
+ n1 = fclose(fptr->f);
+ if (n1 < 0 && (e = errno) == EBADF && f1 == f2)
+ n1 = 0;
}
if (!fin && (n1 < 0 || n2 < 0)) {
- if (n2 == 0) errno = e;
+ if (n1 == 0) errno = e;
rb_sys_fail(fptr->path);
}
}
@@ -1644,7 +1648,7 @@ pipe_finalize(fptr)
#endif
rb_last_status = INT2FIX(status);
#else
- fptr_finalize(fptr);
+ fptr_finalize(fptr, Qtrue);
#endif
pipe_del_fptr(fptr);
}