|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
From fc5f3468dcbee38eb202cfd552a5b8dbff990c7b Mon Sep 17 00:00:00 2001
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
From: Tony Cook <tony@develop-help.com>
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
Date: Tue, 12 May 2020 10:59:08 +1000
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
Subject: [PATCH 2/2] IO::Handle: clear the error on both input and output
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
streams
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
MIME-Version: 1.0
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
Content-Type: text/plain; charset=UTF-8
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
Content-Transfer-Encoding: 8bit
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
Similarly to GH #6799 clearerr() only cleared the error status
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
of the input stream, so clear both.
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
---
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
dist/IO/IO.xs | 14 +++++++++++---
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
dist/IO/t/io_xs.t | 8 +++++---
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
2 files changed, 16 insertions(+), 6 deletions(-)
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
diff --git a/dist/IO/IO.xs b/dist/IO/IO.xs
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
index 99d523d2c1..9158106416 100644
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
--- a/dist/IO/IO.xs
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+++ b/dist/IO/IO.xs
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
@@ -410,13 +410,21 @@ ferror(handle)
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
int
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
clearerr(handle)
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
- InputStream handle
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ SV * handle
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ PREINIT:
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ IO *io = sv_2io(handle);
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ InputStream in = IoIFP(io);
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ OutputStream out = IoOFP(io);
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
CODE:
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
if (handle) {
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
#ifdef PerlIO
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
- PerlIO_clearerr(handle);
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ PerlIO_clearerr(in);
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ if (in != out)
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ PerlIO_clearerr(out);
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
#else
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
- clearerr(handle);
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ clearerr(in);
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ if (in != out)
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ clearerr(out);
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
#endif
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
RETVAL = 0;
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
diff --git a/dist/IO/t/io_xs.t b/dist/IO/t/io_xs.t
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
index f890e92558..a8833b0651 100644
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
--- a/dist/IO/t/io_xs.t
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+++ b/dist/IO/t/io_xs.t
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
@@ -11,7 +11,7 @@ BEGIN {
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
-use Test::More tests => 7;
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+use Test::More tests => 8;
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
use IO::File;
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
use IO::Seekable;
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
@@ -58,12 +58,14 @@ SKIP: {
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
# This isn't really a Linux/BSD specific test, but /dev/full is (I
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
# hope) reasonably well defined on these. Patches welcome if your platform
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
# also supports it (or something like it)
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
- skip "no /dev/full or not a /dev/full platform", 2
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ skip "no /dev/full or not a /dev/full platform", 3
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
unless $^O =~ /^(linux|netbsd|freebsd)$/ && -c "/dev/full";
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
open my $fh, ">", "/dev/full"
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
- or skip "Could not open /dev/full: $!", 2;
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ or skip "Could not open /dev/full: $!", 3;
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
$fh->print("a" x 1024);
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
ok(!$fh->flush, "should fail to flush");
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
ok($fh->error, "stream should be in error");
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ $fh->clearerr;
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
+ ok(!$fh->error, "check clearerr removed the error");
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
close $fh; # silently ignore the error
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
}
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
--
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
2.25.4
|
|
![](https://seccdn.libravatar.org/avatar/7b64540d61cb742c2384f9efbbdfaf5f91a89e5c58c0b1861e414ba49b507d8b?s=16&d=retro) |
158f261 |
|