summaryrefslogtreecommitdiff
path: root/man
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2003-07-08 21:08:17 +0000
committerJim Meyering <jim@meyering.net>2003-07-08 21:08:17 +0000
commit133f79583ff979e41d463b380b3e9e33946cd4d4 (patch)
tree9c08cf0c8b647d8d082c8ab85f0459843a046a57 /man
parentc540aafa3f55b3f4e58c1ae98256fec1b53f0d62 (diff)
downloadcoreutils-133f79583ff979e41d463b380b3e9e33946cd4d4.tar.xz
Add END handler to close STDOUT and check for errors.
Diffstat (limited to 'man')
-rwxr-xr-xman/help2man27
1 files changed, 26 insertions, 1 deletions
diff --git a/man/help2man b/man/help2man
index 55490a03c..a589f8ec3 100755
--- a/man/help2man
+++ b/man/help2man
@@ -86,6 +86,31 @@ my %opt_def = (
'v|version-option=s' => \$version_option,
);
+END
+{
+ # Nobody ever checks the status of print()s. That's okay, because
+ # if any do fail, we're guaranteed to get an indicator when we close()
+ # the filehandle.
+ #
+ # Close stdout now, and if there were no errors, return happy status.
+ # If stdout has already been closed by the script, though, do nothing.
+ defined fileno STDOUT
+ or return;
+ close STDOUT
+ and return;
+
+ # Errors closing stdout. Indicate that, and hope stderr is OK.
+ warn "$this_program: closing standard output: $!\n";
+
+ # Don't be so arrogant as to assume that we're the first END handler
+ # defined, and thus the last one invoked. There may be others yet
+ # to come. $? will be passed on to them, and to the final _exit().
+ #
+ # If it isn't already an error, make it one (and if it _is_ an error,
+ # preserve the value: it might be important).
+ $? ||= 1;
+}
+
# Parse options.
Getopt::Long::config('bundling');
GetOptions (%opt_def,
@@ -527,7 +552,7 @@ for (@pre, (grep ! /^($filter)$/o, @include), @post)
{
my $quote = /\W/ ? '"' : '';
print ".SH $quote$_$quote\n";
-
+
for ($include{$_})
{
# Replace leading dot, apostrophe and backslash tokens.