X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FFileZIO.pm;h=ccf3dc0fa7e8255709b876275bcd8e21946c1d86;hp=95237a5ae6fe3a40a6898e405bf8e5dabcca0e29;hb=4cdaa6b8a9f5161ee2da4371d68cbbad41248ea0;hpb=2c14784ad71874ec850d189060fe63d6eb9eba95 diff --git a/lib/BackupPC/FileZIO.pm b/lib/BackupPC/FileZIO.pm index 95237a5..ccf3dc0 100644 --- a/lib/BackupPC/FileZIO.pm +++ b/lib/BackupPC/FileZIO.pm @@ -29,7 +29,7 @@ # #======================================================================== # -# Version 2.1.0_CVS, released 8 Feb 2004. +# Version 3.0.0beta0, released 11 Jul 2006. # # See http://backuppc.sourceforge.net. # @@ -43,6 +43,7 @@ use vars qw( $CompZlibOK ); use Carp; use File::Path; use File::Copy; +use Encode; # # For compressed files we have a to careful about running out of memory @@ -126,6 +127,16 @@ sub compOk return $CompZlibOK; } +# +# Request utf8 strings with readLine interface +# +sub utf8 +{ + my($self, $mode) = @_; + + $self->{utf8} = $mode; +} + sub myDeflateInit { my $self = shift; @@ -177,7 +188,7 @@ sub read # the compressed file. Also seek the file so # it is positioned at the 0xb3. # - seek($self->{fh}, -length($self->{dataIn}), 1); + sysseek($self->{fh}, -length($self->{dataIn}), 1); $self->{eof} = 1; $self->{dataIn} = ""; ##print("Got 0xb3 block: considering eof\n"); @@ -220,11 +231,13 @@ sub readLine my($self) = @_; my $str; - while ( defined($self->{readLineBuf}) && !@{$self->{readLineBuf}} ) { + $self->{readLineBuf} = [] if ( !defined($self->{readLineBuf}) ); + while ( !@{$self->{readLineBuf}} ) { $self->read(\$str, $CompMaxRead); if ( $str eq "" ) { $str = $self->{readLineFrag}; $self->{readLineFrag} = ""; + $str = decode_utf8($str) if ( $self->{utf8} ); return $str; } @{$self->{readLineBuf}} = split(/\n/, $self->{readLineFrag} . $str); @@ -234,7 +247,9 @@ sub readLine $self->{readLineFrag} = ""; } } - return shift(@{$self->{readLineBuf}}) . "\n"; + $str = shift(@{$self->{readLineBuf}}) . "\n"; + $str = decode_utf8($str) if ( $self->{utf8} ); + return $str; } sub rewind