diff options
author | Chip Salzenberg <chip@atlantic.net> | 1997-02-11 07:29:00 +1200 |
---|---|---|
committer | Chip Salzenberg <chip@atlantic.net> | 1997-02-11 07:29:00 +1200 |
commit | 387d8d95fa82cdff6ade378cc9e1e344c53f8918 (patch) | |
tree | 80529d660bcd8a710fc19bc8703ac6d9548179ef /lib/File/Compare.pm | |
parent | 778183f34c6f9006721e20db0af0805a4bcb0227 (diff) | |
download | perl-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.pm | 12 |
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); } |