Coverage Report

Created: 2026-09-26 08:22

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
141k
{
24
141k
    if (poOpenInfo->eAccess == GA_Update ||
25
141k
        (!poOpenInfo->bStatOK &&
26
37.8k
         strchr(poOpenInfo->pszFilename, ',') == nullptr))
27
24.5k
        return nullptr;
28
29
116k
    if (poOpenInfo->pabyHeader != nullptr)
30
98.5k
    {
31
98.5k
        if (strstr((const char *)poOpenInfo->pabyHeader, "SCNT") == nullptr)
32
88.7k
        {
33
88.7k
            return nullptr;
34
88.7k
        }
35
98.5k
    }
36
18.1k
    else if (poOpenInfo->bIsDirectory)
37
4.47k
        return nullptr;
38
39
23.4k
    OGRILI1DataSource *poDS = new OGRILI1DataSource();
40
41
23.4k
    if (!poDS->Open(poOpenInfo->pszFilename, poOpenInfo->papszOpenOptions,
42
23.4k
                    TRUE) ||
43
9.35k
        poDS->GetLayerCount() == 0)
44
17.4k
    {
45
17.4k
        delete poDS;
46
17.4k
        return nullptr;
47
17.4k
    }
48
49
6.05k
    return poDS;
50
23.4k
}
51
52
/************************************************************************/
53
/*                          RegisterOGRILI1()                           */
54
/************************************************************************/
55
56
void RegisterOGRILI1()
57
24
{
58
24
    if (GDALGetDriverByName("Interlis 1") != nullptr)
59
0
        return;
60
61
24
    GDALDriver *poDriver = new GDALDriver();
62
63
24
    poDriver->SetDescription("Interlis 1");
64
24
    poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES");
65
24
    poDriver->SetMetadataItem(GDAL_DCAP_CURVE_GEOMETRIES, "YES");
66
24
    poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES");
67
24
    poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "Interlis 1");
68
24
    poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/ili.html");
69
24
    poDriver->SetMetadataItem(GDAL_DMD_EXTENSIONS, "itf ili");
70
24
    poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE");
71
24
    poDriver->SetMetadataItem(
72
24
        GDAL_DMD_OPENOPTIONLIST,
73
24
        "<OpenOptionList>"
74
24
        "  <Option name='MODEL' type='string' description='Filename of the "
75
24
        "model in IlisMeta format (.imd)'/>"
76
24
        "</OpenOptionList>");
77
24
    poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES");
78
79
24
    poDriver->pfnOpen = OGRILI1DriverOpen;
80
81
24
    GetGDALDriverManager()->RegisterDriver(poDriver);
82
24
}