Coverage Report

Created: 2026-02-14 09:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/ogr/ogrsf_frmts/cad/vsilfileio.cpp
Line
Count
Source
1
/*******************************************************************************
2
 *  Project: libopencad
3
 *  Purpose: OpenSource CAD formats support library
4
 *  Author: Alexandr Borzykh, mush3d at gmail.com
5
 *  Author: Dmitry Baryshnikov, bishop.dev@gmail.com
6
 *  Language: C++
7
 *******************************************************************************
8
 *  The MIT License (MIT)
9
 *
10
 *  Copyright (c) 2016 Alexandr Borzykh
11
 *  Copyright (c) 2016 NextGIS, <info@nextgis.com>
12
 *
13
 * SPDX-License-Identifier: MIT
14
 *******************************************************************************/
15
#include "vsilfileio.h"
16
17
VSILFileIO::VSILFileIO(const char *pszFilePath)
18
7.59k
    : CADFileIO(pszFilePath), m_oFileStream(nullptr)
19
7.59k
{
20
7.59k
}
21
22
VSILFileIO::~VSILFileIO()
23
7.59k
{
24
7.59k
    if (m_oFileStream)
25
45
        VSILFileIO::Close();
26
7.59k
}
27
28
const char *VSILFileIO::ReadLine()
29
0
{
30
    // TODO: getline
31
0
    return nullptr;
32
0
}
33
34
bool VSILFileIO::Eof() const
35
0
{
36
0
    return VSIFEofL(m_oFileStream) || VSIFErrorL(m_oFileStream);
37
0
}
38
39
bool VSILFileIO::Open(int mode)
40
7.59k
{
41
    // NOTE: now support only read mode
42
7.59k
    if (mode & OpenMode::out)
43
0
        return false;
44
45
7.59k
    std::string sOpenMode = "r";
46
7.59k
    if (mode & OpenMode::binary)
47
7.59k
        sOpenMode = "rb";
48
49
7.59k
    m_oFileStream = VSIFOpenL(m_soFilePath.c_str(), sOpenMode.c_str());
50
51
7.59k
    if (m_oFileStream != nullptr)
52
7.59k
        m_bIsOpened = true;
53
54
7.59k
    return m_bIsOpened;
55
7.59k
}
56
57
bool VSILFileIO::Close()
58
7.59k
{
59
7.59k
    bool bRet = VSIFCloseL(m_oFileStream) == 0 ? true : false;
60
7.59k
    m_oFileStream = nullptr;
61
7.59k
    return bRet;
62
7.59k
}
63
64
int VSILFileIO::Seek(long offset, CADFileIO::SeekOrigin origin)
65
1.10M
{
66
1.10M
    int nWhence = 0;
67
1.10M
    switch (origin)
68
1.10M
    {
69
7.54k
        case SeekOrigin::CUR:
70
7.54k
            nWhence = SEEK_CUR;
71
7.54k
            break;
72
0
        case SeekOrigin::END:
73
0
            nWhence = SEEK_END;
74
0
            break;
75
1.10M
        case SeekOrigin::BEG:
76
1.10M
            nWhence = SEEK_SET;
77
1.10M
            break;
78
1.10M
    }
79
80
1.10M
    return VSIFSeekL(m_oFileStream, static_cast<vsi_l_offset>(offset),
81
1.10M
                     nWhence) == 0
82
1.10M
               ? 0
83
1.10M
               : 1;
84
1.10M
}
85
86
long int VSILFileIO::Tell()
87
0
{
88
0
    return static_cast<long>(VSIFTellL(m_oFileStream));
89
0
}
90
91
size_t VSILFileIO::Read(void *ptr, size_t size)
92
4.37M
{
93
4.37M
    return VSIFReadL(static_cast<char *>(ptr), 1, size, m_oFileStream);
94
4.37M
}
95
96
size_t VSILFileIO::Write(void * /*ptr*/, size_t /*size*/)
97
0
{
98
    // unsupported
99
0
    return 0;
100
0
}
101
102
void VSILFileIO::Rewind()
103
22.7k
{
104
22.7k
    VSIRewindL(m_oFileStream);
105
22.7k
}