X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FFileZIO.pm;h=294579a1574ff9b5f7837f15929acd3f38a4a83b;hp=0b2387334dbc2b7a150be3058604deeaf83fd24b;hb=c2b072c9ad558447fb73fedf0cad170214b7d80e;hpb=5b3e6091d542c2e7445d5dd511cdf6e20aec8b8d diff --git a/lib/BackupPC/FileZIO.pm b/lib/BackupPC/FileZIO.pm index 0b23873..294579a 100644 --- a/lib/BackupPC/FileZIO.pm +++ b/lib/BackupPC/FileZIO.pm @@ -29,7 +29,7 @@ # #======================================================================== # -# Version 3.0.0alpha, released 23 Jan 2006. +# Version 3.0.0, released 28 Jan 2007. # # 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; @@ -162,13 +173,13 @@ sub read my $chr = substr($self->{dataIn}, 0, 1); $self->{inflateStart} = 0; - if ( $chr eq chr(0xd6) ) { + if ( $chr eq chr(0xd6) || $chr eq chr(0xd7) ) { # - # Flag 0xd6 means this is a compressed file with + # Flag 0xd6 or 0xd7 means this is a compressed file with # appended md4 block checksums for rsync. Change # the first byte back to 0x78 and proceed. # - ##print("Got 0xd6 block: normal\n"); + ##print("Got 0xd6/0xd7 block: normal\n"); substr($self->{dataIn}, 0, 1) = chr(0x78); } elsif ( $chr eq chr(0xb3) ) { # @@ -226,6 +237,7 @@ sub readLine if ( $str eq "" ) { $str = $self->{readLineFrag}; $self->{readLineFrag} = ""; + $str = decode_utf8($str) if ( $self->{utf8} ); return $str; } @{$self->{readLineBuf}} = split(/\n/, $self->{readLineFrag} . $str); @@ -235,7 +247,13 @@ sub readLine $self->{readLineFrag} = ""; } } - return shift(@{$self->{readLineBuf}}) . "\n"; + $str = shift(@{$self->{readLineBuf}}) . "\n"; + if ( $self->{utf8} ) { + my $strUtf8 = decode_utf8($str, 0); + $strUtf8 = $str if ( length($strUtf8) == 0 ); + return $strUtf8; + } + return $str; } sub rewind