Release for 3.2.0. Changes since 3.2.0beta1:
[BackupPC.git] / lib / BackupPC / FileZIO.pm
index a5359a0..ca3d1a9 100644 (file)
@@ -11,7 +11,7 @@
 #   Craig Barratt  <cbarratt@users.sourceforge.net>
 #
 # COPYRIGHT
-#   Copyright (C) 2001-2003  Craig Barratt
+#   Copyright (C) 2001-2009  Craig Barratt
 #
 #   This program is free software; you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.1, released 13 Mar 2005.
+# Version 3.2.0, released 31 Jul 2010.
 #
 # 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