Coverage Report

Created: 2026-05-16 08:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/ogr/ogrsf_frmts/avc/ogravcbindriver.cpp
Line
Count
Source
1
/******************************************************************************
2
 *
3
 * Project:  OGR
4
 * Purpose:  OGRAVCBinDriver implementation (Arc/Info Binary Coverages)
5
 * Author:   Frank Warmerdam, warmerdam@pobox.com
6
 *
7
 ******************************************************************************
8
 * Copyright (c) 2002, Frank Warmerdam <warmerdam@pobox.com>
9
 *
10
 * SPDX-License-Identifier: MIT
11
 ****************************************************************************/
12
13
#include "ogr_avc.h"
14
15
/************************************************************************/
16
/*                                Open()                                */
17
/************************************************************************/
18
19
static GDALDataset *OGRAVCBinDriverOpen(GDALOpenInfo *poOpenInfo)
20
21
94.7k
{
22
94.7k
    if (poOpenInfo->eAccess == GA_Update)
23
48
        return nullptr;
24
94.7k
    if (!poOpenInfo->bStatOK)
25
32.8k
        return nullptr;
26
61.8k
    if (poOpenInfo->fpL != nullptr)
27
42.5k
    {
28
42.5k
        char **papszSiblingFiles = poOpenInfo->GetSiblingFiles();
29
42.5k
        if (papszSiblingFiles != nullptr)
30
39.2k
        {
31
39.2k
            bool bFoundCandidateFile = false;
32
319k
            for (int i = 0; papszSiblingFiles[i] != nullptr; i++)
33
279k
            {
34
279k
                if (EQUAL(CPLGetExtensionSafe(papszSiblingFiles[i]).c_str(),
35
279k
                          "ADF"))
36
210
                {
37
210
                    bFoundCandidateFile = true;
38
210
                    break;
39
210
                }
40
279k
            }
41
39.2k
            if (!bFoundCandidateFile)
42
39.0k
                return nullptr;
43
39.2k
        }
44
42.5k
    }
45
46
22.8k
    OGRAVCBinDataSource *poDS = new OGRAVCBinDataSource();
47
48
22.8k
    if (poDS->Open(poOpenInfo->pszFilename, TRUE) && poDS->GetLayerCount() > 0)
49
3.75k
    {
50
3.75k
        return poDS;
51
3.75k
    }
52
19.0k
    delete poDS;
53
54
19.0k
    return nullptr;
55
22.8k
}
56
57
/************************************************************************/
58
/*                           RegisterOGRAVC()                           */
59
/************************************************************************/
60
61
void RegisterOGRAVCBin()
62
63
24
{
64
24
    if (GDALGetDriverByName("AVCBin") != nullptr)
65
0
        return;
66
67
24
    GDALDriver *poDriver = new GDALDriver();
68
69
24
    poDriver->SetDescription("AVCBin");
70
24
    poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES");
71
24
    poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "Arc/Info Binary Coverage");
72
24
    poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/avcbin.html");
73
24
    poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES");
74
24
    poDriver->SetMetadataItem(GDAL_DCAP_MULTIPLE_VECTOR_LAYERS, "YES");
75
24
    poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE");
76
77
24
    poDriver->pfnOpen = OGRAVCBinDriverOpen;
78
79
24
    GetGDALDriverManager()->RegisterDriver(poDriver);
80
24
}