sub save {
my ($self) = @_;
return 1 if $self->{changes} == 0;
my $tmpfile = $self->{dbfile} . ".TMP";
my $xml = $xs->XMLout({book => $self->{records}});
my $out = new IO::File $tmpfile, O_WRONLY|O_CREAT|O_TRUNC
or croak "Unable to create $tmpfile: $!";
print $out $xml or croak "Write error on $tmpfile: $!";
$out->flush or croak "Write error on $tmpfile: $!";
$out->fsync or croak "Fsync failed on $tmpfile: $!";
$out->close or croak "Close failed on $tmpfile: $!";
rename($tmpfile, $self->{dbfile}) or
croak "Rename operation failed for $tmpfile: $!";
$self->{changes} = 0;
return 1;
}
|