# 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
#
#========================================================================
#
-# Version 3.1.0beta0, released 3 Sep 2007.
+# Version 3.2.0, released 31 Jul 2010.
#
# See http://backuppc.sourceforge.net.
#
}
(my $magic, $data) = unpack("N a*", $data);
if ( $magic != $a->{type} ) {
- $a->{_errStr} = sprintf("Wrong magic number in $file"
+ $a->{_errStr} = sprintf("Wrong magic number in %s"
. " (got 0x%x, expected 0x%x)",
- $magic, $a->{type});
+ $file, $magic, $a->{type});
$fd->close;
return;
}
$fd->read(\$newData, 65536);
$data .= $newData;
}
- (
- @{$a->{files}{$fileName}}{@FldsUnixW},
- @{$a->{files}{$fileName}}{@FldsUnixN},
- $data
- ) = unpack("w$nFldsW N$nFldsN a*", $data);
+ eval {
+ (
+ @{$a->{files}{$fileName}}{@FldsUnixW},
+ @{$a->{files}{$fileName}}{@FldsUnixN},
+ $data
+ ) = unpack("w$nFldsW N$nFldsN a*", $data);
+ };
+ if ( $@ ) {
+ $a->{_errStr} = "unpack: Can't read attributes for $fileName from $file ($@)";
+ $fd->close;
+ return;
+ }
if ( $a->{files}{$fileName}{$FldsUnixN[-1]} eq "" ) {
$a->{_errStr} = "Can't read attributes for $fileName"
. " from $file";
my($data) = $a->writeData;
$file = $a->fileName($dir, $file);
- mkpath($dir, 0, 0777) if ( !-d $dir );
+ if ( !-d $dir ) {
+ eval { mkpath($dir, 0, 0777) };
+ if ( $@ ) {
+ $a->{_errStr} = "Can't create directory $dir";
+ return;
+ }
+ }
my $fd = BackupPC::FileZIO->open($file, 1, $a->{compress});
if ( !$fd ) {
$a->{_errStr} = "Can't open/write to $file";