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