summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Zakharevich <ilya@math.ohio-state.edu>1996-12-27 22:47:24 -0500
committerChip Salzenberg <chip@atlantic.net>1997-01-01 08:59:00 +1200
commite6434134bc7810d4f3ff9ff4fa5a9ead178c3097 (patch)
treefc057dabe7a406305631ed29af86ca2c146e46bf
parentaa1bdcb8033d23da72755eda19a512411642de03 (diff)
downloadperl-e6434134bc7810d4f3ff9ff4fa5a9ead178c3097.tar.gz
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>
-rw-r--r--lib/File/Copy.pm18
-rwxr-xr-xt/lib/filecopy.t36
2 files changed, 31 insertions, 23 deletions
diff --git a/lib/File/Copy.pm b/lib/File/Copy.pm
index 70c5eb81e6..b1baa207b3 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 != \&copy
- && $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<name> 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<Note that passing in
files as handles instead of names may lead to loss of information
on some operating systems; it is recommended that you use file
-names whenever possible.>
+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<binmode> 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 0a5f4c180c..b718215a1e 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 = <R>; close(R);
+open(R, "copy-$$") or die "open copy-$$: $!"; $foo = <R>; 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 = <R>; close(R);
+close(F) or die "close: $!";
+open(R, "copy-$$") or die; $foo = <R>; 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 = <R>; 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 = <R>; 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 = <R>; 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 = <R>; 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 = <R>; close(R);
+open(R, "lib/file-$$") or die "open lib/file-$$: $!"; $foo = <R>; 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: $!";