Updates in preparation for 3.0.0beta2:
[BackupPC.git] / lib / BackupPC / FileZIO.pm
index 95237a5..c520725 100644 (file)
@@ -29,7 +29,7 @@
 #
 #========================================================================
 #
-# Version 2.1.0_CVS, released 8 Feb 2004.
+# Version 3.0.0beta2, released 11 Nov 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,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