Added setup_fh that handles inodes separate from open()
[dbsrgits/DBM-Deep.git] / lib / DBM / Deep / Array.pm
index c6e9bf7..0087ccc 100644 (file)
@@ -13,7 +13,7 @@ use base 'DBM::Deep';
 use Scalar::Util ();
 
 sub _get_self {
-    eval { tied( @{$_[0]} ) } || $_[0]
+    eval { local $SIG{'__DIE__'}; tied( @{$_[0]} ) } || $_[0]
 }
 
 sub TIEARRAY {
@@ -43,7 +43,7 @@ sub FETCH {
             }
         }
 
-        $key = pack($DBM::Deep::LONG_PACK, $key);
+        $key = pack($DBM::Deep::Engine::LONG_PACK, $key);
     }
 
     my $rv = $self->SUPER::FETCH( $key );
@@ -73,7 +73,7 @@ sub STORE {
             }
         }
 
-        $key = pack($DBM::Deep::LONG_PACK, $key);
+        $key = pack($DBM::Deep::Engine::LONG_PACK, $key);
     }
 
     my $rv = $self->SUPER::STORE( $key, $value );
@@ -105,7 +105,7 @@ sub EXISTS {
             }
         }
 
-        $key = pack($DBM::Deep::LONG_PACK, $key);
+        $key = pack($DBM::Deep::Engine::LONG_PACK, $key);
     }
 
     my $rv = $self->SUPER::EXISTS( $key );
@@ -133,7 +133,7 @@ sub DELETE {
             }
         }
 
-        $key = pack($DBM::Deep::LONG_PACK, $key);
+        $key = pack($DBM::Deep::Engine::LONG_PACK, $key);
     }
 
     my $rv = $self->SUPER::DELETE( $key );
@@ -155,17 +155,17 @@ sub FETCHSIZE {
 
     $self->lock( $self->LOCK_SH );
 
-       my $SAVE_FILTER = $self->root->{filter_fetch_value};
-       $self->root->{filter_fetch_value} = undef;
+       my $SAVE_FILTER = $self->_root->{filter_fetch_value};
+       $self->_root->{filter_fetch_value} = undef;
        
        my $packed_size = $self->FETCH('length');
        
-       $self->root->{filter_fetch_value} = $SAVE_FILTER;
+       $self->_root->{filter_fetch_value} = $SAVE_FILTER;
        
     $self->unlock;
 
        if ($packed_size) {
-        return int(unpack($DBM::Deep::LONG_PACK, $packed_size));
+        return int(unpack($DBM::Deep::Engine::LONG_PACK, $packed_size));
     }
 
        return 0;
@@ -180,12 +180,12 @@ sub STORESIZE {
        
     $self->lock( $self->LOCK_EX );
 
-       my $SAVE_FILTER = $self->root->{filter_store_value};
-       $self->root->{filter_store_value} = undef;
+       my $SAVE_FILTER = $self->_root->{filter_store_value};
+       $self->_root->{filter_store_value} = undef;
        
-       my $result = $self->STORE('length', pack($DBM::Deep::LONG_PACK, $new_length));
+       my $result = $self->STORE('length', pack($DBM::Deep::Engine::LONG_PACK, $new_length));
        
-       $self->root->{filter_store_value} = $SAVE_FILTER;
+       $self->_root->{filter_store_value} = $SAVE_FILTER;
        
     $self->unlock;
 
@@ -310,7 +310,8 @@ sub SPLICE {
        ##
        # Calculate offset and length of splice
        ##
-       my $offset = shift || 0;
+       my $offset = shift;
+    $offset = 0 unless defined $offset;
        if ($offset < 0) { $offset += $length; }
        
        my $splice_length;