summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
Diffstat (limited to 'ext')
-rw-r--r--ext/Storable/Storable.pm15
1 files changed, 11 insertions, 4 deletions
diff --git a/ext/Storable/Storable.pm b/ext/Storable/Storable.pm
index 7b46317ac1..d2a631c0ee 100644
--- a/ext/Storable/Storable.pm
+++ b/ext/Storable/Storable.pm
@@ -135,7 +135,10 @@ sub _store {
open(FILE, ">$file") || logcroak "can't create $file: $!";
binmode FILE; # Archaic systems...
if ($use_locking) {
- if ($^O eq 'dos') {
+ require Config; import Config;
+ if (!$Config{'d_flock'} &&
+ !$Config{'d_fcntl_can_lock'} &&
+ !$Config{'d_lockf'}) {
logcarp "Storable::lock_store: fcntl/flock emulation broken on $^O";
return undef;
}
@@ -255,11 +258,15 @@ sub _retrieve {
my $self;
my $da = $@; # Could be from exception handler
if ($use_locking) {
- if ($^O eq 'dos') {
- logcarp "Storable::lock_store: fcntl/flock emulation broken on $^O";
+ require Config; import Config;
+ if (!$Config{'d_flock'} &&
+ !$Config{'d_fcntl_can_lock'} &&
+ !$Config{'d_lockf'}) {
+ logcarp "Storable::lock_retrieve: fcntl/flock emulation broken on $^O";
return undef;
}
- flock(FILE, LOCK_SH) || logcroak "can't get shared lock on $file: $!";
+ flock(FILE, LOCK_SH) ||
+ logcroak "can't get shared lock on $file: $!";
# Unlocking will happen when FILE is closed
}
eval { $self = pretrieve(*FILE) }; # Call C routine