r32501 - /trunk/libogg-vorbis-header-pureperl-perl/debian/patches/tracklength.patch
gregoa at users.alioth.debian.org
gregoa at users.alioth.debian.org
Wed Apr 1 21:47:19 UTC 2009
Author: gregoa
Date: Wed Apr 1 21:47:15 2009
New Revision: 32501
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=32501
Log:
patch improved by dam, thanks\!
Modified:
trunk/libogg-vorbis-header-pureperl-perl/debian/patches/tracklength.patch
Modified: trunk/libogg-vorbis-header-pureperl-perl/debian/patches/tracklength.patch
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libogg-vorbis-header-pureperl-perl/debian/patches/tracklength.patch?rev=32501&op=diff
==============================================================================
--- trunk/libogg-vorbis-header-pureperl-perl/debian/patches/tracklength.patch (original)
+++ trunk/libogg-vorbis-header-pureperl-perl/debian/patches/tracklength.patch Wed Apr 1 21:47:15 2009
@@ -1,4 +1,4 @@
-Author: gregor herrmann <gregoa at debian.org>
+Authors: gregor herrmann <gregoa at debian.org>, Damyan Ivanov <dmn at debian.org>
Description:
- if the file is shorter than blocksize_0, the seek/read returns an empty $buf later
- check for blocksize_0 is we are interested in blocksize_0
@@ -7,7 +7,7 @@
--- a/PurePerl.pm
+++ b/PurePerl.pm
-@@ -421,30 +421,38 @@
+@@ -421,30 +421,44 @@ sub _calculateTrackLength {
if (($data->{'filesize'} - $data->{'INFO'}{'offset'}) > ($data->{'INFO'}{'blocksize_0'} * 2)) {
$len = $data->{'INFO'}{'blocksize_0'} * 2;
@@ -29,30 +29,35 @@
+ my $buf = '';
my $foundHeader = 0;
-+ my $c = 1;
++ my $block = $len;
- for (my $i = 0; $i < $len; $i++) {
--
-- last if length($buf) < 4;
--
-- if (substr($buf, $i, 4) eq OGGHEADERFLAG) {
-- substr($buf, 0, ($i+4), '');
-- $foundHeader = 1;
-- last;
+ SEEK:
+ while ($foundHeader == 0 && read($fh, $buf, $len)) {
-+ for (my $i = 0; $i < $len; $i++) {
-+
-+ last if length($buf) < 4;
-+
++ # search the last read $block bytes for Ogg header flag
++ # the search is conducted backwards so that the last flag
++ # is found first
++ for (my $i = $block; $i >= 0; $i--) {
+ if (substr($buf, $i, 4) eq OGGHEADERFLAG) {
+ substr($buf, 0, ($i+4), '');
+ $foundHeader = 1;
+ last SEEK;
+ }
- }
-+ $c++;
-+ seek($fh, -$len*$c, 2);
++ }
+
+- last if length($buf) < 4;
++ # already read the whole file?
++ last if $len == $data->{'filesize'};
+
+- if (substr($buf, $i, 4) eq OGGHEADERFLAG) {
+- substr($buf, 0, ($i+4), '');
+- $foundHeader = 1;
+- last;
+- }
++ $len += $block;
++ $len = $data->{'filesize'} if $len > $data->{'filesize'};
++
++ seek($fh, -$len, 2);
}
unless ($foundHeader) {
More information about the Pkg-perl-cvs-commits
mailing list