1#################################################################################################################################### 2# Posix File Read 3#################################################################################################################################### 4package pgBackRestTest::Common::StoragePosixRead; 5use parent 'pgBackRestTest::Common::Io::Handle'; 6 7use strict; 8use warnings FATAL => qw(all); 9use Carp qw(confess); 10use English '-no_match_vars'; 11 12use Fcntl qw(O_RDONLY); 13 14use pgBackRestDoc::Common::Exception; 15use pgBackRestDoc::Common::Log; 16 17#################################################################################################################################### 18# CONSTRUCTOR 19#################################################################################################################################### 20sub new 21{ 22 my $class = shift; 23 24 # Assign function parameters, defaults, and log debug info 25 my 26 ( 27 $strOperation, 28 $oDriver, 29 $strName, 30 $bIgnoreMissing, 31 ) = 32 logDebugParam 33 ( 34 __PACKAGE__ . '->new', \@_, 35 {name => 'oDriver', trace => true}, 36 {name => 'strName', trace => true}, 37 {name => 'bIgnoreMissing', optional => true, default => false, trace => true}, 38 ); 39 40 # Open the file 41 my $fhFile; 42 43 if (!sysopen($fhFile, $strName, O_RDONLY)) 44 { 45 if (!($OS_ERROR{ENOENT} && $bIgnoreMissing)) 46 { 47 logErrorResult($OS_ERROR{ENOENT} ? ERROR_FILE_MISSING : ERROR_FILE_OPEN, "unable to open '${strName}'", $OS_ERROR); 48 } 49 50 undef($fhFile); 51 } 52 53 # Create IO object if open succeeded 54 my $self; 55 56 if (defined($fhFile)) 57 { 58 # Set file mode to binary 59 binmode($fhFile); 60 61 # Create the class hash 62 $self = $class->SUPER::new("'${strName}'", $fhFile); 63 bless $self, $class; 64 65 # Set variables 66 $self->{oDriver} = $oDriver; 67 $self->{strName} = $strName; 68 $self->{fhFile} = $fhFile; 69 } 70 71 # Return from function and log return values if any 72 return logDebugReturn 73 ( 74 $strOperation, 75 {name => 'self', value => $self, trace => true} 76 ); 77} 78 79#################################################################################################################################### 80# close - close the file 81#################################################################################################################################### 82sub close 83{ 84 my $self = shift; 85 86 if (defined($self->handle())) 87 { 88 # Close the file 89 close($self->handle()); 90 undef($self->{fhFile}); 91 92 # Close parent 93 $self->SUPER::close(); 94 } 95 96 return true; 97} 98 99#################################################################################################################################### 100# Getters 101#################################################################################################################################### 102sub handle {shift->{fhFile}} 103sub name {shift->{strName}} 104 1051; 106