# NOTE: Derived from ../../lib/Storable.pm.
# Changes made here will be lost when autosplit is run again.
# See AutoSplit.pm.
package Storable;
#line 239 "../../lib/Storable.pm (autosplit into ../../lib/auto/Storable/_store.al)"
# Internal store to file routine
sub _store {
my $xsptr = shift;
my $self = shift;
my ($file, $use_locking) = @_;
logcroak "not a reference" unless ref($self);
logcroak "wrong argument number" unless @_ == 2; # No @foo in arglist
local *FILE;
if ($use_locking) {
open(FILE, ">>$file") || logcroak "can't write into $file: $!";
unless (&CAN_FLOCK) {
logcarp "Storable::lock_store: fcntl/flock emulation broken on $^O";
return undef;
}
flock(FILE, LOCK_EX) ||
logcroak "can't get exclusive lock on $file: $!";
truncate FILE, 0;
# Unlocking will happen when FILE is closed
} else {
open(FILE, ">$file") || logcroak "can't create $file: $!";
}
binmode FILE; # Archaic systems...
my $da = $@; # Don't mess if called from exception handler
my $ret;
# Call C routine nstore or pstore, depending on network order
eval { $ret = &$xsptr(*FILE, $self) };
close(FILE) or $ret = undef;
unlink($file) or warn "Can't unlink $file: $!\n" if $@ || !defined $ret;
logcroak $@ if $@ =~ s/\.?\n$/,/;
$@ = $da;
return $ret ? $ret : undef;
}
# end of Storable::_store
1;
Copyright 2K16 - 2K18 Indonesian Hacker Rulez