diff options
Diffstat (limited to 'ext')
-rw-r--r-- | ext/Storable/Storable.pm | 15 |
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 |