print STDERR "\bL";
link($from, $tmp_to) or die "link: $from -> $tmp_to: $!";
print STDERR "\bR";
- unless (rename($tmp_to, $to)) {
- my $saved_bang = $!;
- print STDERR "\bU";
- unlink($tmp_to) or warn "unlink: $tmp_to: $!"; # Try, possibly in vain, to clean up
- die "rename: $tmp_to -> $from: $saved_bang";
- }
+ my $saved_bang;
+ $saved_bang = $! unless rename($tmp_to, $to);
+
+ # If $to exists and is a hardlink to $tmp_to (or $from),
+ # rename returns success but $tmp_to still exists.
+ print STDERR "\bU";
+ unlink($tmp_to) or warn "unlink: $tmp_to: $!" if -e $tmp_to;
+
+ die "rename: $tmp_to -> $from: $saved_bang" if $saved_bang;
print STDERR "\b";
}
return "$parent/$suffix";
}
-sub name_quad {
+sub name_ino {
my ($int64) = @_;
my $packed = pack('Q>', $int64);
$packed =~ s/^\0+//os;
return $base64_packed;
}
-sub name_ino {
- my ($ino) = @_;
- return name_quad($ino) . 'I';
-}
-
# ext3 cannot handle more than 32000 links to a file. Leave some headroom.
# Arguably this should be configurable, but the losses are miniscule and
# the coding for option support is not.
$digest =~ y:/:_:;
# Check link to digest
- my $digest_link = prepare_parents($link_dir, "${digest}D");
+ my $digest_link = prepare_parents($link_dir, $digest);
print STDERR 'D';
my $digest_st = lstat($digest_link);
if ($digest_st) {