X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fp5-File-KDBX;a=blobdiff_plain;f=lib%2FFile%2FKDBX%2FDumper.pm;h=6d02063bdacce13c7f8369a72403ad7cf1400ca4;hp=553b1f19600c0585b5baca9277db06bd80afbf49;hb=50f1a929d9224b9072b5fae39162a5d943323c5d;hpb=52cf8dbcf4ded14b1582e905cf034749385624b3 diff --git a/lib/File/KDBX/Dumper.pm b/lib/File/KDBX/Dumper.pm index 553b1f1..6d02063 100644 --- a/lib/File/KDBX/Dumper.pm +++ b/lib/File/KDBX/Dumper.pm @@ -169,36 +169,29 @@ sub dump_file { my $key = delete $args{key}; $args{kdbx} //= $self->kdbx; - # require File::Temp; - # # my ($fh, $filepath_temp) = eval { File::Temp::tempfile("${filepath}-XXXXXX", CLEANUP => 1) }; - # my $fh = eval { File::Temp->new(TEMPLATE => "${filepath}-XXXXXX", CLEANUP => 1) }; - # my $filepath_temp = $fh->filename; - # if (!$fh or my $err = $@) { - # $err //= 'Unknown error'; - # throw sprintf('Open file failed (%s): %s', $filepath_temp, $err), - # error => $err, - # filepath => $filepath_temp; - # } - open(my $fh, '>:raw', $filepath) or die "open failed ($filepath): $!"; - binmode($fh); - # $fh->autoflush(1); + require File::Temp; + my ($fh, $filepath_temp) = eval { File::Temp::tempfile("${filepath}-XXXXXX", CLEANUP => 1) }; + if (!$fh or my $err = $@) { + $err //= 'Unknown error'; + throw sprintf('Open file failed (%s): %s', $filepath_temp, $err), + error => $err, + filepath => $filepath_temp; + } + $fh->autoflush(1); $self = $self->new if !ref $self; $self->init(%args, fh => $fh, filepath => $filepath); - # binmode($fh); $self->_dump($fh, $key); + close($fh); - # binmode($fh, ':raw'); - # close($fh); - - # my ($file_mode, $file_uid, $file_gid) = (stat($filepath))[2, 4, 5]; + my ($file_mode, $file_uid, $file_gid) = (stat($filepath))[2, 4, 5]; - # my $mode = $args{mode} // $file_mode // do { my $m = umask; defined $m ? oct(666) &~ $m : undef }; - # my $uid = $args{uid} // $file_uid // -1; - # my $gid = $args{gid} // $file_gid // -1; - # chmod($mode, $filepath_temp) if defined $mode; - # chown($uid, $gid, $filepath_temp); - # rename($filepath_temp, $filepath) or throw "Failed to write file ($filepath): $!", filepath => $filepath; + my $mode = $args{mode} // $file_mode // do { my $m = umask; defined $m ? oct(666) &~ $m : undef }; + my $uid = $args{uid} // $file_uid // -1; + my $gid = $args{gid} // $file_gid // -1; + chmod($mode, $filepath_temp) if defined $mode; + chown($uid, $gid, $filepath_temp); + rename($filepath_temp, $filepath) or throw "Failed to write file ($filepath): $!", filepath => $filepath; return $self; }