Coverage Report

Created: 2025-11-15 08:43

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
120k
{
24
120k
    if (poOpenInfo->eAccess == GA_Update ||
25
119k
        (!poOpenInfo->bStatOK &&
26
30.7k
         strchr(poOpenInfo->pszFilename, ',') == nullptr))
27
19.8k
        return nullptr;
28
29
100k
    if (poOpenInfo->pabyHeader != nullptr)
30
85.9k
    {
31
85.9k
        if (strstr((const char *)poOpenInfo->pabyHeader, "SCNT") == nullptr)
32
77.4k
        {
33
77.4k
            return nullptr;
34
77.4k
        }
35
85.9k
    }
36
14.1k
    else if (poOpenInfo->bIsDirectory)
37
2.91k
        return nullptr;
38
39
19.8k
    OGRILI1DataSource *poDS = new OGRILI1DataSource();
40
41
19.8k
    if (!poDS->Open(poOpenInfo->pszFilename, poOpenInfo->papszOpenOptions,
42
19.8k
                    TRUE) ||
43
8.12k
        poDS->GetLayerCount() == 0)
44
15.0k
    {
45
15.0k
        delete poDS;
46
15.0k
        return nullptr;
47
15.0k
    }
48
49
4.81k
    return poDS;
50
19.8k
}
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
}