+sub ft_rename ($$$) {
+ my ($ft, $dst, $open_mode) = @_;
+ my $fn = $ft->filename;
+ my @st = stat($dst);
+ my $mode = @st ? ($st[2] & 07777) : ($open_mode & ~umask);
+ chmod($mode, $ft) or croak "E: chmod $fn: $!";
+ rename($fn, $dst) or croak "E: rename($fn => $ft): $!";
+ $ft->unlink_on_destroy(0);
+}
+