X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=lib%2FBackupPC%2FLib.pm;h=5946f1b33b4e05562f006bd921a519739f0a095a;hp=b77c778dcd9afa52a5441ef5de79ab37f7bd2068;hb=a909b19848bd3225b786fc2a7311eceb674c671f;hpb=1ce7d1541ea1279aaa0a75c16986a3fd40b608ec diff --git a/lib/BackupPC/Lib.pm b/lib/BackupPC/Lib.pm index b77c778..5946f1b 100644 --- a/lib/BackupPC/Lib.pm +++ b/lib/BackupPC/Lib.pm @@ -29,7 +29,7 @@ # #======================================================================== # -# Version 1.5.0, released 2 Aug 2002. +# Version 1.6.0_CVS, released 10 Dec 2002. # # See http://backuppc.sourceforge.net. # @@ -39,7 +39,7 @@ package BackupPC::Lib; use strict; -use vars qw(%Conf); +use vars qw(%Conf %Lang); use Fcntl qw/:flock/; use Carp; use DirHandle (); @@ -52,23 +52,27 @@ use Digest::MD5; sub new { my $class = shift; - my($topDir) = @_; + my($topDir, $installDir) = @_; + my $self = bless { - TopDir => $topDir || '__TOPDIR__', - BinDir => '__INSTALLDIR__/bin', - Version => '1.5.0', + TopDir => $topDir || '/data/BackupPC', + BinDir => $installDir || '/usr/local/BackupPC', + LibDir => $installDir || '/usr/local/BackupPC', + Version => '1.6.0_CVS', BackupFields => [qw( num type startTime endTime nFiles size nFilesExist sizeExist nFilesNew sizeNew xferErrs xferBadFile xferBadShare tarErrs compress sizeExistComp sizeNewComp - noFill fillFromNum mangle + noFill fillFromNum mangle xferMethod level )], RestoreFields => [qw( num startTime endTime result errorMsg nFiles size tarCreateErrs xferErrs )], }, $class; + $self->{BinDir} .= "/bin"; + $self->{LibDir} .= "/lib"; # # Clean up %ENV and setup other variables. # @@ -106,6 +110,12 @@ sub Conf return %{$self->{Conf}}; } +sub Lang +{ + my($self) = @_; + return $self->{Lang}; +} + sub adminJob { return " admin "; @@ -248,6 +258,15 @@ sub ConfigRead } %{$self->{Conf}} = ( %{$self->{Conf} || {}}, %Conf ); } + return if ( !defined($self->{Conf}{Language}) ); + my $langFile = "$self->{LibDir}/BackupPC/Lang/$self->{Conf}{Language}.pm"; + if ( !defined($ret = do $langFile) && ($! || $@) ) { + $mesg = "Couldn't open language file $langFile: $!" if ( $! ); + $mesg = "Couldn't execute language file $langFile: $@" if ( $@ ); + $mesg =~ s/[\n\r]+//; + return $mesg; + } + $self->{Lang} = \%Lang; return; } @@ -276,17 +295,19 @@ sub HostInfoRead if ( !open(HOST_INFO, "$self->{TopDir}/conf/hosts") ) { print(STDERR $self->timeStamp, "Can't open $self->{TopDir}/conf/hosts\n"); - return; + return {}; } while ( ) { s/[\n\r]+//; s/#.*//; + s/\s+$//; next if ( /^\s*$/ || !/^([\w\.-]+\s+.*)/ ); @fld = split(/\s+/, $1); if ( @hdr ) { if ( defined($host) ) { next if ( lc($fld[0]) ne $host ); @{$hosts{lc($fld[0])}}{@hdr} = @fld; + close(HOST_INFO); return \%hosts; } else { @{$hosts{lc($fld[0])}}{@hdr} = @fld; @@ -373,6 +394,7 @@ sub RmTreeDefer my($d) = $1; my($f) = $2; my($cwd) = Cwd::fastcwd(); + $cwd = $1 if ( $cwd =~ /(.*)/ ); $self->RmTreeQuiet($d, $f); chdir($cwd) if ( $cwd ); } @@ -387,6 +409,7 @@ sub RmTreeTrashEmpty my(@files); my($cwd) = Cwd::fastcwd(); + $cwd = $1 if ( $cwd =~ /(.*)/ ); return if ( !-d $trashDir ); my $d = DirHandle->new($trashDir) or carp "Can't read $trashDir: $!"; @@ -712,6 +735,7 @@ sub fileNameEltMangle { my($self, $name) = @_; + return "" if ( $name eq "" ); $name =~ s{([%/\n\r])}{sprintf("%%%02x", ord($1))}eg; return "f$name"; }