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