Change 33539 by [EMAIL PROTECTED] on 2008/03/17 00:17:26

        Drag autodoc.pl and overload.pl into the age of safer_open().
        Thanks to the wisdom of london.pm, stuff the filename into the SCALAR
        slot of the typeglob created in safer_open(), so that ...
        Add safer_close(), that will die (with the filename) if the close
        fails.

Affected files ...

... //depot/perl/autodoc.pl#20 edit
... //depot/perl/embed.pl#369 edit
... //depot/perl/keywords.pl#36 edit
... //depot/perl/opcode.pl#180 edit
... //depot/perl/overload.pl#8 edit
... //depot/perl/reentr.pl#58 edit
... //depot/perl/regcomp.pl#24 edit
... //depot/perl/regen_lib.pl#4 edit
... //depot/perl/warnings.pl#65 edit

Differences ...

==== //depot/perl/autodoc.pl#20 (text) ====
Index: perl/autodoc.pl
--- perl/autodoc.pl#19~29738~   2007-01-09 13:34:50.000000000 -0800
+++ perl/autodoc.pl     2008-03-16 17:17:26.000000000 -0700
@@ -33,7 +33,7 @@
     }
     else {
        safer_unlink $filename;
-       open F, ">$filename" or die "Can't open $filename: $!";
+       $F = safer_open($filename);
        binmode F;
        $F = \*F;
     }
@@ -183,9 +183,7 @@
 }
 
 safer_unlink "pod/perlapi.pod";
-open (DOC, ">pod/perlapi.pod") or
-       die "Can't create pod/perlapi.pod: $!\n";
-binmode DOC;
+my $doc = safer_open("pod/perlapi.pod");
 
 walk_table {   # load documented functions into appropriate hash
     if (@_ > 1) {
@@ -211,7 +209,7 @@
        }
     }
     return "";
-} \*DOC;
+} $doc;
 
 for (sort keys %docfuncs) {
     # Have you used a full for apidoc or just a func name?
@@ -219,9 +217,9 @@
     warn "Unable to place $_!\n";
 }
 
-readonly_header(\*DOC);
+readonly_header($doc);
 
-print DOC <<'_EOB_';
+print $doc <<'_EOB_';
 =head1 NAME
 
 perlapi - autogenerated documentation for the perl public API
@@ -248,15 +246,15 @@
 # case insensitive sort, with fallback for determinacy
 for $key (sort { uc($a) cmp uc($b) || $a cmp $b } keys %apidocs) {
     my $section = $apidocs{$key}; 
-    print DOC "\n=head1 $key\n\n=over 8\n\n";
+    print $doc "\n=head1 $key\n\n=over 8\n\n";
     # Again, fallback for determinacy
     for my $key (sort { uc($a) cmp uc($b) || $a cmp $b } keys %$section) {
-        docout(\*DOC, $key, $section->{$key});
+        docout($doc, $key, $section->{$key});
     }
-    print DOC "\n=back\n";
+    print $doc "\n=back\n";
 }
 
-print DOC <<'_EOE_';
+print $doc <<'_EOE_';
 
 =head1 AUTHORS
 
@@ -278,16 +276,14 @@
 
 _EOE_
 
-readonly_footer(\*DOC);
+readonly_footer($doc);
 
-close(DOC) or die "Error closing pod/perlapi.pod: $!";
+safer_close($doc);
 
 safer_unlink "pod/perlintern.pod";
-open(GUTS, ">pod/perlintern.pod") or
-               die "Unable to create pod/perlintern.pod: $!\n";
-binmode GUTS;
-readonly_header(\*GUTS);
-print GUTS <<'END';
+my $guts = safer_open("pod/perlintern.pod");
+readonly_header($guts);
+print $guts <<'END';
 =head1 NAME
 
 perlintern - autogenerated documentation of purely B<internal>
@@ -305,14 +301,14 @@
 
 for $key (sort { uc($a) cmp uc($b); } keys %gutsdocs) {
     my $section = $gutsdocs{$key}; 
-    print GUTS "\n=head1 $key\n\n=over 8\n\n";
+    print $guts "\n=head1 $key\n\n=over 8\n\n";
     for my $key (sort { uc($a) cmp uc($b); } keys %$section) {
-        docout(\*GUTS, $key, $section->{$key});
+        docout($guts, $key, $section->{$key});
     }
-    print GUTS "\n=back\n";
+    print $guts "\n=back\n";
 }
 
-print GUTS <<'END';
+print $guts <<'END';
 
 =head1 AUTHORS
 
@@ -325,6 +321,6 @@
 perlguts(1), perlapi(1)
 
 END
-readonly_footer(\*GUTS);
+readonly_footer($guts);
 
-close GUTS or die "Error closing pod/perlintern.pod: $!";
+safer_close($guts);

==== //depot/perl/embed.pl#369 (xtext) ====
Index: perl/embed.pl
--- perl/embed.pl#368~33538~    2008-03-15 11:37:34.000000000 -0700
+++ perl/embed.pl       2008-03-16 17:17:26.000000000 -0700
@@ -108,7 +108,7 @@
     }
     print $F $trailer if $trailer;
     unless (ref $filename) {
-       close $F or die "Error closing $filename: $!";
+       safer_close($F);
        rename_if_different("$filename-new", $filename);
     }
 }
@@ -637,7 +637,7 @@
 /* ex: set ro: */
 END
 
-close($em) or die "Error closing EM: $!";
+safer_close($em);
 rename_if_different('embed.h-new', 'embed.h');
 
 $em = safer_open('embedvar.h-new');
@@ -732,7 +732,7 @@
 /* ex: set ro: */
 END
 
-close($em) or die "Error closing EM: $!";
+safer_close($em);
 rename_if_different('embedvar.h-new', 'embedvar.h');
 
 my $capi = safer_open('perlapi.c-new');
@@ -859,7 +859,7 @@
 
 /* ex: set ro: */
 EOT
-close $capih or die "Error closing CAPIH: $!";
+safer_close($capih);
 rename_if_different('perlapi.h-new', 'perlapi.h');
 
 print $capi do_not_edit ("perlapi.c"), <<'EOT';
@@ -941,7 +941,7 @@
 /* ex: set ro: */
 EOT
 
-close($capi) or die "Error closing CAPI: $!";
+safer_close($capi);
 rename_if_different('perlapi.c-new', 'perlapi.c');
 
 # functions that take va_list* for implementing vararg functions

==== //depot/perl/keywords.pl#36 (xtext) ====
Index: perl/keywords.pl
--- perl/keywords.pl#35~33538~  2008-03-15 11:37:34.000000000 -0700
+++ perl/keywords.pl    2008-03-16 17:17:26.000000000 -0700
@@ -36,7 +36,7 @@
 
 print $kw "\n/* ex: set ro: */\n";
 
-close $kw or die "Error closing keywords.h-new: $!";
+safer_close($kw);
 
 rename_if_different("keywords.h-new", "keywords.h");
 

==== //depot/perl/opcode.pl#180 (xtext) ====
Index: perl/opcode.pl
--- perl/opcode.pl#179~33538~   2008-03-15 11:37:34.000000000 -0700
+++ perl/opcode.pl      2008-03-16 17:17:26.000000000 -0700
@@ -438,8 +438,8 @@
 print $oc "/* ex: set ro: */\n";
 print $on "/* ex: set ro: */\n";
 
-close $oc or die "Error closing $opcode_new: $!\n";
-close $on or die "Error closing $opname_new: $!\n";
+safer_close($oc);
+safer_close($on);
 
 rename_if_different $opcode_new, 'opcode.h';
 rename_if_different $opname_new, 'opnames.h';
@@ -487,8 +487,8 @@
 print $pp "\n/* ex: set ro: */\n";
 print $ppsym "\n# ex: set ro:\n";
 
-close $pp or die "Error closing pp_proto.h-new: $!\n";
-close $ppsym or die "Error closing pp.sym-new: $!\n";
+safer_close($pp);
+safer_close($ppsym);
 
 rename_if_different $pp_proto_new, 'pp_proto.h';
 rename_if_different $pp_sym_new, 'pp.sym';

==== //depot/perl/overload.pl#8 (text) ====
Index: perl/overload.pl
--- perl/overload.pl#7~32681~   2007-12-20 13:52:06.000000000 -0800
+++ perl/overload.pl    2008-03-16 17:17:26.000000000 -0700
@@ -22,10 +22,8 @@
 }
 
 safer_unlink ('overload.h', 'overload.c');
-die "overload.h: $!" unless open(C, ">overload.c");
-binmode C;
-die "overload.h: $!" unless open(H, ">overload.h");
-binmode H;
+my $c = safer_open("overload.c");
+my $h = safer_open("overload.h");
 
 sub print_header {
   my $file = shift;
@@ -46,10 +44,10 @@
 EOF
 }
 
-select C;
+select $c;
 print_header('overload.c');
 
-select H;
+select $h;
 print_header('overload.h');
 print <<'EOF';
 
@@ -67,7 +65,7 @@
 
 EOF
 
-print C <<'EOF';
+print $c <<'EOF';
 
 #define AMG_id2name(id) (PL_AMG_names[id]+1)
 #define AMG_id2namelen(id) (PL_AMG_namelens[id]-1)
@@ -77,10 +75,10 @@
 
 my $last = pop @names;
 
-print C "    $_,\n" foreach map { length $_ } @names;
+print $c "    $_,\n" foreach map { length $_ } @names;
 
 my $lastlen = length $last;
-print C <<"EOT";
+print $c <<"EOT";
     $lastlen
 };
 
@@ -92,15 +90,15 @@
      overload.pm.  */
 EOT
 
-print C "    \"$_\",\n" foreach map { s/(["\\"])/\\$1/g; $_ } @names;
+print $c "    \"$_\",\n" foreach map { s/(["\\"])/\\$1/g; $_ } @names;
 
-print C <<"EOT";
+print $c <<"EOT";
     "$last"
 };
 EOT
 
-close H or die $!;
-close C or die $!;
+safer_close($h);
+safer_close($c);
 
 __DATA__
 # Fallback should be the first

==== //depot/perl/reentr.pl#58 (text) ====
Index: perl/reentr.pl
--- perl/reentr.pl#57~33538~    2008-03-15 11:37:34.000000000 -0700
+++ perl/reentr.pl      2008-03-16 17:17:26.000000000 -0700
@@ -787,7 +787,7 @@
 /* ex: set ro: */
 EOF
 
-close($h);
+safer_close($h);
 rename_if_different('reentr.h-new', 'reentr.h');
 
 # Prepare to write the reentr.c.
@@ -1089,7 +1089,7 @@
 /* ex: set ro: */
 EOF
 
-close($c);
+safer_close($c);
 rename_if_different('reentr.c-new', 'reentr.c');
 
 __DATA__

==== //depot/perl/regcomp.pl#24 (text) ====
Index: perl/regcomp.pl
--- perl/regcomp.pl#23~33538~   2008-03-15 11:37:34.000000000 -0700
+++ perl/regcomp.pl     2008-03-16 17:17:26.000000000 -0700
@@ -223,6 +223,6 @@
 
 /* ex: set ro: */
 EOP
-close $out or die "close $tmp_h: $!";
+safer_close($out);
 
 rename_if_different $tmp_h, 'regnodes.h';

==== //depot/perl/regen_lib.pl#4 (text) ====
Index: perl/regen_lib.pl
--- perl/regen_lib.pl#3~33538~  2008-03-15 11:37:34.000000000 -0700
+++ perl/regen_lib.pl   2008-03-16 17:17:26.000000000 -0700
@@ -57,8 +57,14 @@
     my $name = shift;
     my $fh = gensym;
     open $fh, ">$name" or die "Can't create $name: $!";
+    *{$fh}->{SCALAR} = $name;
     binmode $fh;
     $fh;
 }
 
+sub safer_close {
+    my $fh = shift;
+    close $fh or die 'Error closing ' . *{$fh}->{SCALAR} . ": $!";
+}
+
 1;

==== //depot/perl/warnings.pl#65 (text) ====
Index: perl/warnings.pl
--- perl/warnings.pl#64~33538~  2008-03-15 11:37:34.000000000 -0700
+++ perl/warnings.pl    2008-03-16 17:17:26.000000000 -0700
@@ -362,7 +362,7 @@
 /* ex: set ro: */
 EOM
 
-close $warn;
+safer_close $warn;
 rename_if_different("warnings.h-new", "warnings.h");
 
 while (<DATA>) {
@@ -424,7 +424,7 @@
 }
 
 print $pm "# ex: set ro:\n";
-close $pm;
+safer_close $pm;
 rename_if_different("lib/warnings.pm-new", "lib/warnings.pm");
 
 __END__
End of Patch.

Reply via email to