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/ili/ogrili1driver.cpp
Line
Count
Source
1
/******************************************************************************
2
 *
3
 * Project:  Interlis 1 Translator
4
 * Purpose:  Implements OGRILI1Layer class.
5
 * Author:   Pirmin Kalberer, Sourcepole AG
6
 *
7
 ******************************************************************************
8
 * Copyright (c) 2004, Pirmin Kalberer, Sourcepole AG
9
 *
10
 * SPDX-License-Identifier: MIT
11
 ****************************************************************************/
12
13
#include "cpl_conv.h"
14
#include "ogr_ili1.h"
15
#include "ogrsf_frmts.h"
16
17
/************************************************************************/
18
/*                                Open()                                */
19
/************************************************************************/
20
21
static GDALDataset *OGRILI1DriverOpen(GDALOpenInfo *poOpenInfo)
22
23
100k
{
24
100k
    if (poOpenInfo->eAccess == GA_Update ||
25
99.9k
        (!poOpenInfo->bStatOK &&
26
26.1k
         strchr(poOpenInfo->pszFilename, ',') == nullptr))
27
16.9k
        return nullptr;
28
29
83.0k
    if (poOpenInfo->pabyHeader != nullptr)
30
70.9k
    {
31
70.9k
        if (strstr((const char *)poOpenInfo->pabyHeader, "SCNT") == nullptr)
32
63.7k
        {
33
63.7k
            return nullptr;
34
63.7k
        }
35
70.9k
    }
36
12.1k
    else if (poOpenInfo->bIsDirectory)
37
2.55k
        return nullptr;
38
39
16.7k
    OGRILI1DataSource *poDS = new OGRILI1DataSource();
40
41
16.7k
    if (!poDS->Open(poOpenInfo->pszFilename, poOpenInfo->papszOpenOptions,
42
16.7k
                    TRUE) ||
43
6.78k
        poDS->GetLayerCount() == 0)
44
12.6k
    {
45
12.6k
        delete poDS;
46
12.6k
        return nullptr;
47
12.6k
    }
48
49
4.09k
    return poDS;
50
16.7k
}
51
52
/************************************************************************/
53
/*                           RegisterOGRILI1()                           */
54
/************************************************************************/
55
56
void RegisterOGRILI1()
57
22
{
58
22
    if (GDALGetDriverByName("Interlis 1") != nullptr)
59
0
        return;
60
61
22
    GDALDriver *poDriver = new GDALDriver();
62
63
22
    poDriver->SetDescription("Interlis 1");
64
22
    poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES");
65
22
    poDriver->SetMetadataItem(GDAL_DCAP_CURVE_GEOMETRIES, "YES");
66
22
    poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES");
67
22
    poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "Interlis 1");
68
22
    poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/ili.html");
69
22
    poDriver->SetMetadataItem(GDAL_DMD_EXTENSIONS, "itf ili");
70
22
    poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE");
71
22
    poDriver->SetMetadataItem(
72
22
        GDAL_DMD_OPENOPTIONLIST,
73
22
        "<OpenOptionList>"
74
22
        "  <Option name='MODEL' type='string' description='Filename of the "
75
22
        "model in IlisMeta format (.imd)'/>"
76
22
        "</OpenOptionList>");
77
22
    poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES");
78
79
22
    poDriver->pfnOpen = OGRILI1DriverOpen;
80
81
22
    GetGDALDriverManager()->RegisterDriver(poDriver);
82
22
}