Coverage Report

Created: 2025-12-03 08:24

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
6.86k
    : CADFileIO(pszFilePath), m_oFileStream(nullptr)
19
6.86k
{
20
6.86k
}
21
22
VSILFileIO::~VSILFileIO()
23
6.86k
{
24
6.86k
    if (m_oFileStream)
25
41
        VSILFileIO::Close();
26
6.86k
}
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
6.86k
{
41
    // NOTE: now support only read mode
42
6.86k
    if (mode & OpenMode::out)
43
0
        return false;
44
45
6.86k
    std::string sOpenMode = "r";
46
6.86k
    if (mode & OpenMode::binary)
47
6.86k
        sOpenMode = "rb";
48
49
6.86k
    m_oFileStream = VSIFOpenL(m_soFilePath.c_str(), sOpenMode.c_str());
50
51
6.86k
    if (m_oFileStream != nullptr)
52
6.86k
        m_bIsOpened = true;
53
54
6.86k
    return m_bIsOpened;
55
6.86k
}
56
57
bool VSILFileIO::Close()
58
6.86k
{
59
6.86k
    bool bRet = VSIFCloseL(m_oFileStream) == 0 ? true : false;
60
6.86k
    m_oFileStream = nullptr;
61
6.86k
    return bRet;
62
6.86k
}
63
64
int VSILFileIO::Seek(long offset, CADFileIO::SeekOrigin origin)
65
891k
{
66
891k
    int nWhence = 0;
67
891k
    switch (origin)
68
891k
    {
69
6.82k
        case SeekOrigin::CUR:
70
6.82k
            nWhence = SEEK_CUR;
71
6.82k
            break;
72
0
        case SeekOrigin::END:
73
0
            nWhence = SEEK_END;
74
0
            break;
75
884k
        case SeekOrigin::BEG:
76
884k
            nWhence = SEEK_SET;
77
884k
            break;
78
891k
    }
79
80
891k
    return VSIFSeekL(m_oFileStream, offset, nWhence) == 0 ? 0 : 1;
81
891k
}
82
83
long int VSILFileIO::Tell()
84
0
{
85
0
    return static_cast<long>(VSIFTellL(m_oFileStream));
86
0
}
87
88
size_t VSILFileIO::Read(void *ptr, size_t size)
89
4.26M
{
90
4.26M
    return VSIFReadL(static_cast<char *>(ptr), 1, size, m_oFileStream);
91
4.26M
}
92
93
size_t VSILFileIO::Write(void * /*ptr*/, size_t /*size*/)
94
0
{
95
    // unsupported
96
0
    return 0;
97
0
}
98
99
void VSILFileIO::Rewind()
100
20.5k
{
101
20.5k
    VSIRewindL(m_oFileStream);
102
20.5k
}