Coverage Report

Created: 2026-06-30 08:33

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/ogr/ogrsf_frmts/avc/ogravce00driver.cpp
Line
Count
Source
1
/******************************************************************************
2
 *
3
 * Project:  OGR
4
 * Purpose:  OGRAVCE00Driver implementation (Arc/Info E00ary 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
/*                              Identify()                              */
17
/************************************************************************/
18
19
static int OGRAVCE00DriverIdentify(GDALOpenInfo *poOpenInfo)
20
150k
{
21
150k
    if (!poOpenInfo->IsExtensionEqualToCI("E00"))
22
94.7k
        return FALSE;
23
24
56.1k
    if (poOpenInfo->nHeaderBytes == 0)
25
9
        return FALSE;
26
27
56.1k
    if (!(STARTS_WITH_CI((const char *)poOpenInfo->pabyHeader, "EXP  0") ||
28
56.1k
          STARTS_WITH_CI((const char *)poOpenInfo->pabyHeader, "EXP  1")))
29
83
        return FALSE;
30
31
56.0k
    if (strstr((const char *)poOpenInfo->pabyHeader, "GRD  2") != nullptr ||
32
56.0k
        strstr((const char *)poOpenInfo->pabyHeader, "GRD  3") != nullptr)
33
3
        return FALSE;
34
35
56.0k
    return TRUE;
36
56.0k
}
37
38
/************************************************************************/
39
/*                                Open()                                */
40
/************************************************************************/
41
42
static GDALDataset *OGRAVCE00DriverOpen(GDALOpenInfo *poOpenInfo)
43
44
28.0k
{
45
28.0k
    if (!OGRAVCE00DriverIdentify(poOpenInfo))
46
0
        return nullptr;
47
28.0k
    if (poOpenInfo->eAccess == GA_Update)
48
0
        return nullptr;
49
50
28.0k
    OGRAVCE00DataSource *poDSE00 = new OGRAVCE00DataSource();
51
52
28.0k
    if (poDSE00->Open(poOpenInfo->pszFilename, TRUE) &&
53
25.8k
        poDSE00->GetLayerCount() > 0)
54
25.8k
    {
55
25.8k
        return poDSE00;
56
25.8k
    }
57
2.17k
    delete poDSE00;
58
59
2.17k
    return nullptr;
60
28.0k
}
61
62
/************************************************************************/
63
/*                           RegisterOGRAVC()                           */
64
/************************************************************************/
65
66
void RegisterOGRAVCE00()
67
68
24
{
69
24
    if (GDALGetDriverByName("AVCE00") != nullptr)
70
0
        return;
71
72
24
    GDALDriver *poDriver = new GDALDriver();
73
74
24
    poDriver->SetDescription("AVCE00");
75
24
    poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES");
76
24
    poDriver->SetMetadataItem(GDAL_DMD_LONGNAME,
77
24
                              "Arc/Info E00 (ASCII) Coverage");
78
24
    poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "e00");
79
24
    poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/avce00.html");
80
24
    poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES");
81
24
    poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE");
82
83
24
    poDriver->pfnIdentify = OGRAVCE00DriverIdentify;
84
24
    poDriver->pfnOpen = OGRAVCE00DriverOpen;
85
86
24
    GetGDALDriverManager()->RegisterDriver(poDriver);
87
24
}