From: Ilya Zakharevich Date: Sat, 28 Dec 1996 03:47:24 +0000 (-0500) Subject: File::Copy under OS/2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=e6434134bc7810d4f3ff9ff4fa5a9ead178c3097;p=p5sagit%2Fp5-mst-13.2.git File::Copy under OS/2 Chip Salzenberg writes: > > Patch now, tarchive later: > > file: $CPAN/authors/id/CHIPS/perl5.003_17.pat.gz Almost clean under OS/2: the only problem is with File::Copy: the test for syscopy was inverted, and test contained some Un*xisms. Note that the POD contains some line noise, I marked it with ?????. Enjoy, p5p-msgid: <199612280347.WAA00293@monk.mps.ohio-state.edu> --- diff --git a/lib/File/Copy.pm b/lib/File/Copy.pm index 70c5eb8..b1baa20 100644 --- a/lib/File/Copy.pm +++ b/lib/File/Copy.pm @@ -18,7 +18,7 @@ use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION $Too_Big # package has not yet been updated to work with Perl 5.004, and so it # would be a Bad Thing for the CPAN module to grab it and replace this # module. Therefore, we set this module's version higher than 2.0. -$VERSION = '2.01'; +$VERSION = '2.02'; require Exporter; @ISA = qw(Exporter); @@ -60,8 +60,8 @@ sub copy { } if (defined &syscopy && \&syscopy != \© - && $from_a_handle - && ($to_a_handle || $^O eq 'os2')) + && !$to_a_handle + && !($from_a_handle && $^O eq 'os2')) # OS/2 cannot handle handles { return syscopy($from, $to); } @@ -146,6 +146,10 @@ sub move { ($tosz1,$tomt1) = (stat($to))[7,9]; $fromsz = -s $from; + if ($^O eq 'os2' and defined $tosz1 and defined $fromsz) { + # will not rename with overwrite + unlink $to; + } return 1 if rename $from, $to; ($sts,$ossts) = ($! + 0, $^E + 0); @@ -209,14 +213,14 @@ argument may be a string, a FileHandle reference or a FileHandle glob. Obviously, if the first argument is a filehandle of some sort, it will be read from, and if it is a file I it will be opened for reading. Likewise, the second argument will be -written to (and created if need be). If the second argument is -a file name and specifies an existing directory, and the first -argument does not specify +written to (and created if need be). B +names whenever possible.> Files are opened in binary mode where +applicable. To get a consistent behavour when copying from a +filehandle to a file, use C on the filehandle. An optional third parameter can be used to specify the buffer size used for copying. This is the number of bytes from the diff --git a/t/lib/filecopy.t b/t/lib/filecopy.t index 0a5f4c1..b718215 100755 --- a/t/lib/filecopy.t +++ b/t/lib/filecopy.t @@ -29,56 +29,60 @@ print "not " unless $foo eq "ok 3\n"; print "ok 2\n"; copy "copy-$$", \*STDOUT; -unlink "copy-$$"; +unlink "copy-$$" or die "unlink: $!"; open(F,"file-$$"); copy(*F, "copy-$$"); -open(R, "copy-$$") or die; $foo = ; close(R); +open(R, "copy-$$") or die "open copy-$$: $!"; $foo = ; close(R); print "not " unless $foo eq "ok 3\n"; print "ok 4\n"; -unlink "copy-$$"; +unlink "copy-$$" or die "unlink: $!"; open(F,"file-$$"); copy(\*F, "copy-$$"); -open(R, "copy-$$") or die; $foo = ; close(R); +close(F) or die "close: $!"; +open(R, "copy-$$") or die; $foo = ; close(R) or die "close: $!"; print "not " unless $foo eq "ok 3\n"; print "ok 5\n"; -unlink "copy-$$"; +unlink "copy-$$" or die "unlink: $!"; require IO::File; $fh = IO::File->new(">copy-$$") or die "Cannot open copy-$$:$!"; +binmode $fh or die; copy("file-$$",$fh); -$fh->close; +$fh->close or die "close: $!"; open(R, "copy-$$") or die; $foo = ; close(R); -print "not " unless $foo eq "ok 3\n"; +print "# foo=`$foo'\nnot " unless $foo eq "ok 3\n"; print "ok 6\n"; -unlink "copy-$$"; +unlink "copy-$$" or die "unlink: $!"; require FileHandle; my $fh = FileHandle->new(">copy-$$") or die "Cannot open copy-$$:$!"; +binmode $fh or die; copy("file-$$",$fh); $fh->close; open(R, "copy-$$") or die; $foo = ; close(R); print "not " unless $foo eq "ok 3\n"; print "ok 7\n"; -unlink "file-$$"; +unlink "file-$$" or die "unlink: $!"; -print "not " if move("file-$$", "copy-$$") or not -e "copy-$$"; +print "# moved missing file.\nnot " if move("file-$$", "copy-$$"); +print "# target disappeared.\nnot " if not -e "copy-$$"; print "ok 8\n"; -move "copy-$$", "file-$$"; -print "not " unless -e "file-$$" and not -e "copy-$$"; +move "copy-$$", "file-$$" or print "# move did not succeed.\n"; +print "# not moved: $!\nnot " unless -e "file-$$" and not -e "copy-$$"; open(R, "file-$$") or die; $foo = ; close(R); -print "not " unless $foo eq "ok 3\n"; +print "# foo=`$foo'\nnot " unless $foo eq "ok 3\n"; print "ok 9\n"; copy "file-$$", "lib"; open(R, "lib/file-$$") or die; $foo = ; close(R); print "not " unless $foo eq "ok 3\n"; print "ok 10\n"; -unlink "lib/file-$$"; +unlink "lib/file-$$" or die "unlink: $!"; move "file-$$", "lib"; -open(R, "lib/file-$$") or die; $foo = ; close(R); +open(R, "lib/file-$$") or die "open lib/file-$$: $!"; $foo = ; close(R); print "not " unless $foo eq "ok 3\n" and not -e "file-$$";; print "ok 11\n"; -unlink "lib/file-$$"; +unlink "lib/file-$$" or die "unlink: $!";