From 133f79583ff979e41d463b380b3e9e33946cd4d4 Mon Sep 17 00:00:00 2001 From: Jim Meyering Date: Tue, 8 Jul 2003 21:08:17 +0000 Subject: Add END handler to close STDOUT and check for errors. --- man/help2man | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'man') 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. -- cgit v1.2.3-54-g00ecf