1#!/usr/bin/perl -w 2use strict; 3use vars qw($Is_W32 $Is_OS2 $Is_Cygwin $Is_NetWare $Needs_Write); 4use Config; # Remember, this is running using an existing perl 5 6# Common functions needed by the regen scripts 7 8$Is_W32 = $^O eq 'MSWin32'; 9$Is_OS2 = $^O eq 'os2'; 10$Is_Cygwin = $^O eq 'cygwin'; 11$Is_NetWare = $Config{osname} eq 'NetWare'; 12if ($Is_NetWare) { 13 $Is_W32 = 0; 14} 15 16$Needs_Write = $Is_OS2 || $Is_W32 || $Is_Cygwin || $Is_NetWare; 17 18sub safer_unlink { 19 my @names = @_; 20 my $cnt = 0; 21 22 my $name; 23 foreach $name (@names) { 24 next unless -e $name; 25 chmod 0777, $name if $Needs_Write; 26 ( CORE::unlink($name) and ++$cnt 27 or warn "Couldn't unlink $name: $!\n" ); 28 } 29 return $cnt; 30} 31 32sub safer_rename_silent { 33 my ($from, $to) = @_; 34 35 # Some dosish systems can't rename over an existing file: 36 safer_unlink $to; 37 chmod 0600, $from if $Needs_Write; 38 rename $from, $to; 39} 40 41sub safer_rename { 42 my ($from, $to) = @_; 43 safer_rename_silent($from, $to) or die "renaming $from to $to: $!"; 44} 451; 46