# print "This module " . $db->{my_complex}->[1]->{perl} . "!\n";
#
# Copyright:
-# (c) 2002-2005 Joseph Huckaby. All Rights Reserved.
+# (c) 2002-2006 Joseph Huckaby. All Rights Reserved.
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
##
_precalc_sizes();
}
+sub _is_writable {
+ my $fh = shift;
+ (O_WRONLY | O_RDWR) & fcntl( $fh, F_GETFL, my $slush = 0);
+}
+
+sub _is_readable {
+ my $fh = shift;
+ (O_RDONLY | O_RDWR) & fcntl( $fh, F_GETFL, my $slush = 0);
+}
+
##
# tie() methods (hashes and arrays)
##
if (!defined($self->_fh) && !$self->_open()) {
return;
}
- ##
+
+ unless ( _is_writable( $self->_fh ) ) {
+ $self->_throw_error( 'Cannot write to a readonly filehandle' );
+ }
##
# Request exclusive lock for writing
# DBM::Deep Test
##
use strict;
-use Test::More tests => 4;
+use Test::More tests => 7;
+use Test::Exception;
use DBM::Deep;
my $offset = tell(FILE);
close(FILE);
-open(FILE, "t/28_DATA.t");
+open(FILE, '<', "t/28_DATA.t");
ok(($db = DBM::Deep->new(fh => *FILE, file_offset => $offset)), "open db in filehandle with offset");
ok($db->{hash}->{foo}->[1] eq 'b', "and get at stuff in the database");
+ok( !$db->{foo}, "foo doesn't exist yet" );
+throws_ok {
+ $db->{foo} = 1;
+} qr/Cannot write to a readonly filehandle/, "Can't write to a read-only filehandle";
+ok( !$db->{foo}, "foo doesn't exist yet" );