Coverage Report

Created: 2025-12-31 08:30

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/ogr/ogrsf_frmts/gmt/ogrgmtdriver.cpp
Line
Count
Source
1
/******************************************************************************
2
 *
3
 * Project:  OpenGIS Simple Features Reference Implementation
4
 * Purpose:  Implements OGRGmtDriver class.
5
 * Author:   Frank Warmerdam, warmerdam@pobox.com
6
 *
7
 ******************************************************************************
8
 * Copyright (c) 2007, Frank Warmerdam <warmerdam@pobox.com>
9
 *
10
 * SPDX-License-Identifier: MIT
11
 ****************************************************************************/
12
13
#include "ogr_gmt.h"
14
#include "cpl_conv.h"
15
#include "cpl_string.h"
16
17
/************************************************************************/
18
/*                    OGRGMTDriverIdentify()                            */
19
/************************************************************************/
20
21
static int OGRGMTDriverIdentify(GDALOpenInfo *poOpenInfo)
22
23
107k
{
24
107k
    const char *pszHeader =
25
107k
        reinterpret_cast<const char *>(poOpenInfo->pabyHeader);
26
107k
    if (poOpenInfo->nHeaderBytes && strstr(pszHeader, "@VGMT") != nullptr)
27
18.5k
        return true;
28
29
89.0k
    if (poOpenInfo->IsExtensionEqualToCI("GMT"))
30
98
        return true;
31
32
88.9k
    return false;
33
89.0k
}
34
35
/************************************************************************/
36
/*                           OGRGMTDriverOpen()                         */
37
/************************************************************************/
38
39
static GDALDataset *OGRGMTDriverOpen(GDALOpenInfo *poOpenInfo)
40
41
9.31k
{
42
9.31k
    if (!OGRGMTDriverIdentify(poOpenInfo))
43
0
        return nullptr;
44
45
9.31k
    OGRGmtDataSource *poDS = new OGRGmtDataSource();
46
47
9.31k
    if (!poDS->Open(poOpenInfo->pszFilename, nullptr, nullptr,
48
9.31k
                    poOpenInfo->eAccess == GA_Update))
49
32
    {
50
32
        delete poDS;
51
32
        return nullptr;
52
32
    }
53
54
9.28k
    return poDS;
55
9.31k
}
56
57
/************************************************************************/
58
/*                         OGRGMTDriverCreate()                         */
59
/************************************************************************/
60
61
static GDALDataset *OGRGMTDriverCreate(const char *, CPL_UNUSED int nBands,
62
                                       CPL_UNUSED int nXSize,
63
                                       CPL_UNUSED int nYSize,
64
                                       CPL_UNUSED GDALDataType eDT, char **)
65
32
{
66
32
    return new OGRGmtDataSource();
67
32
}
68
69
/************************************************************************/
70
/*                           RegisterOGRGMT()                           */
71
/************************************************************************/
72
73
void RegisterOGRGMT()
74
75
22
{
76
22
    if (GDALGetDriverByName("OGR_GMT") != nullptr)
77
0
        return;
78
79
22
    GDALDriver *poDriver = new GDALDriver();
80
22
    poDriver->SetDescription("OGR_GMT");
81
22
    poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES");
82
22
    poDriver->SetMetadataItem(GDAL_DCAP_CREATE_LAYER, "YES");
83
22
    poDriver->SetMetadataItem(GDAL_DCAP_CREATE_FIELD, "YES");
84
22
    poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "GMT ASCII Vectors (.gmt)");
85
22
    poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "gmt");
86
22
    poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/gmt.html");
87
22
    poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES");
88
22
    poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES");
89
22
    poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE");
90
91
22
    poDriver->pfnOpen = OGRGMTDriverOpen;
92
22
    poDriver->pfnIdentify = OGRGMTDriverIdentify;
93
22
    poDriver->pfnCreate = OGRGMTDriverCreate;
94
95
22
    GetGDALDriverManager()->RegisterDriver(poDriver);
96
22
}