Coverage Report

Created: 2025-06-09 08:44

/src/gdal/ogr/ogrsf_frmts/ili/ogrili1driver.cpp
Line
Count
Source (jump to first uncovered line)
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
109k
{
24
109k
    if (poOpenInfo->eAccess == GA_Update ||
25
109k
        (!poOpenInfo->bStatOK &&
26
109k
         strchr(poOpenInfo->pszFilename, ',') == nullptr))
27
22.6k
        return nullptr;
28
29
87.2k
    if (poOpenInfo->pabyHeader != nullptr)
30
75.8k
    {
31
75.8k
        if (strstr((const char *)poOpenInfo->pabyHeader, "SCNT") == nullptr)
32
67.8k
        {
33
67.8k
            return nullptr;
34
67.8k
        }
35
75.8k
    }
36
11.4k
    else if (poOpenInfo->bIsDirectory)
37
2.50k
        return nullptr;
38
39
16.8k
    OGRILI1DataSource *poDS = new OGRILI1DataSource();
40
41
16.8k
    if (!poDS->Open(poOpenInfo->pszFilename, poOpenInfo->papszOpenOptions,
42
16.8k
                    TRUE) ||
43
16.8k
        poDS->GetLayerCount() == 0)
44
11.9k
    {
45
11.9k
        delete poDS;
46
11.9k
        return nullptr;
47
11.9k
    }
48
49
4.87k
    return poDS;
50
16.8k
}
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
}