summaryrefslogtreecommitdiff
path: root/lib/File/Compare.pm
diff options
context:
space:
mode:
authorChip Salzenberg <chip@atlantic.net>1997-02-11 07:29:00 +1200
committerChip Salzenberg <chip@atlantic.net>1997-02-11 07:29:00 +1200
commit387d8d95fa82cdff6ade378cc9e1e344c53f8918 (patch)
tree80529d660bcd8a710fc19bc8703ac6d9548179ef /lib/File/Compare.pm
parent778183f34c6f9006721e20db0af0805a4bcb0227 (diff)
downloadperl-387d8d95fa82cdff6ade378cc9e1e344c53f8918.tar.gz
Faster File::Compare
(this is the same change as commit 4d335c471cacb999603dc9b7dc6d3712051dbb6c, but as applied)
Diffstat (limited to 'lib/File/Compare.pm')
-rw-r--r--lib/File/Compare.pm12
1 files changed, 9 insertions, 3 deletions
diff --git a/lib/File/Compare.pm b/lib/File/Compare.pm
index e76c10fb5f..a76eb1ff59 100644
--- a/lib/File/Compare.pm
+++ b/lib/File/Compare.pm
@@ -7,7 +7,7 @@ require Exporter;
use Carp;
use UNIVERSAL qw(isa);
-$VERSION = '1.1';
+$VERSION = '1.1001';
@ISA = qw(Exporter);
@EXPORT = qw(compare);
@EXPORT_OK = qw(cmp);
@@ -27,7 +27,7 @@ sub compare {
my $to = shift;
my $closefrom=0;
my $closeto=0;
- my ($size, $status, $fr, $tr, $fbuf, $tbuf);
+ my ($size, $fromsize, $status, $fr, $tr, $fbuf, $tbuf);
local(*FROM, *TO);
local($\) = '';
@@ -42,6 +42,7 @@ sub compare {
open(FROM,"<$from") or goto fail_open1;
binmode FROM;
$closefrom = 1;
+ $fromsize = -s FROM;
}
if (ref($to) && (isa($to,'GLOB') || isa($to,'IO::Handle'))) {
@@ -54,11 +55,16 @@ sub compare {
$closeto = 1;
}
+ if ($closefrom && $closeto) {
+ # If both are opened files we know they differ if their size differ
+ goto fail_inner if $fromsize != -s TO;
+ }
+
if (@_) {
$size = shift(@_) + 0;
croak("Bad buffer size for compare: $size\n") unless ($size > 0);
} else {
- $size = -s FROM;
+ $size = $fromsize;
$size = 1024 if ($size < 512);
$size = $Too_Big if ($size > $Too_Big);
}