diff -r 4362b3ac6567 -r ffde94c51cd4 bin/imager.save --- a/bin/imager.save Fri Aug 19 16:39:09 2011 +0200 +++ b/bin/imager.save Mon Aug 22 14:30:27 2011 +0200 @@ -49,8 +49,8 @@ -noperldoc => system("perldoc -V >/dev/null 2>&1") ); }, - "c|comment=s" => \$o{comment}, - "z|compress:i" => sub { $o{compress} = $_[1] ? $_[1] : Z_BEST_SPEED }, + "c|comment=s" => \$o{comment}, + "z|compress:i" => sub { $o{compress} = $_[1] ? $_[1] : Z_BEST_SPEED }, "p|pass=s" => \$o{pass}, "b|blocksize=s" => sub { given ($_[1]) { @@ -79,7 +79,11 @@ exit; } - do 1 while wait != -1; + my $rc = 0; + while (wait != -1) { + $rc = ($? >> 8) if ($? >> 8) > $rc; + } + exit $rc; } @@ -91,10 +95,10 @@ my ($size, $name); if ($src =~ /(?.+?):(?.+)/) { - $src = $+{dev}; - $name = $+{name}; + $src = $+{dev}; + $name = $+{name}; } - else { $name = $src }; + else { $name = $src } foreach ($idx, $data, $info) { s/{DIR}/$dst/g; @@ -144,12 +148,17 @@ }; $SIG{ALRM}->(); - for (my $blknr = 0; sysread($in => my $buffer, $o{blocksize}) > 0; ++$blknr) { - + for ( + my $blknr = 0 ; + sysread($in => my $buffer, $o{blocksize}) > 0 ; + ++$blknr + ) + { + my ($file, $ext, $cs); $file = $cs = md5_hex($buffer); $file =~ s/(?(?...).*)/$+{prefix}\/$+{fn}/g; - $ext .= $o{pass} ? ".x" : ""; + $ext .= $o{pass} ? ".x" : ""; # the extension we do not put into the index push @{ $index{BLOCKS} }, sprintf "%12d %s %s" => $blknr, @@ -167,22 +176,29 @@ } binmode($out); - if ($o{compress}) { - my $zbuffer; - gzip( - \$buffer => \$zbuffer, - -Minimal => 1, - -Level => Z_BEST_SPEED, - -Strategy => Z_FILTERED - ) or die $GzipError; - if (length($zbuffer)/length($buffer) < 0.9) { - $buffer = $zbuffer; - $ext = ".gz$ext"; - } - } + + my $bufref = \$buffer; + if ($o{compress}) { + my $zbuffer; + gzip( + \$buffer => \$zbuffer, + -Minimal => 1, + -Level => Z_BEST_SPEED, + -Strategy => Z_FILTERED + ) or die $GzipError; + if (length($zbuffer) / length($buffer) < 0.9) { + $bufref = \$zbuffer; + $ext = ".gz$ext"; + } + } - syswrite $out => $buffer; - close($out); + #for(my $todo = length $$bufref; + # $todo -= syswrite $out => $$bufref, $todo, -$todo; 1) + #{ + #} + syswrite $out => $$bufref; + + close($out) or die $!; rename($out => "$data/$file$ext"); $index{BLOCKS}[$blknr] .= " *"; $stats{written}++;