Coverage Report

Created: 2026-02-14 09:00

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
123k
{
24
123k
    const char *pszHeader =
25
123k
        reinterpret_cast<const char *>(poOpenInfo->pabyHeader);
26
123k
    if (poOpenInfo->nHeaderBytes && strstr(pszHeader, "@VGMT") != nullptr)
27
21.6k
        return true;
28
29
101k
    if (poOpenInfo->IsExtensionEqualToCI("GMT"))
30
250
        return true;
31
32
101k
    return false;
33
101k
}
34
35
/************************************************************************/
36
/*                          OGRGMTDriverOpen()                          */
37
/************************************************************************/
38
39
static GDALDataset *OGRGMTDriverOpen(GDALOpenInfo *poOpenInfo)
40
41
10.9k
{
42
10.9k
    if (!OGRGMTDriverIdentify(poOpenInfo))
43
0
        return nullptr;
44
45
10.9k
    OGRGmtDataSource *poDS = new OGRGmtDataSource();
46
47
10.9k
    if (!poDS->Open(poOpenInfo->pszFilename, nullptr, nullptr,
48
10.9k
                    poOpenInfo->eAccess == GA_Update))
49
82
    {
50
82
        delete poDS;
51
82
        return nullptr;
52
82
    }
53
54
10.8k
    return poDS;
55
10.9k
}
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,
65
                                       CSLConstList)
66
82
{
67
82
    return new OGRGmtDataSource();
68
82
}
69
70
/************************************************************************/
71
/*                           RegisterOGRGMT()                           */
72
/************************************************************************/
73
74
void RegisterOGRGMT()
75
76
22
{
77
22
    if (GDALGetDriverByName("OGR_GMT") != nullptr)
78
0
        return;
79
80
22
    GDALDriver *poDriver = new GDALDriver();
81
22
    poDriver->SetDescription("OGR_GMT");
82
22
    poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES");
83
22
    poDriver->SetMetadataItem(GDAL_DCAP_CREATE_LAYER, "YES");
84
22
    poDriver->SetMetadataItem(GDAL_DCAP_CREATE_FIELD, "YES");
85
22
    poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "GMT ASCII Vectors (.gmt)");
86
22
    poDriver->SetMetadataItem(GDAL_DMD_EXTENSION, "gmt");
87
22
    poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/gmt.html");
88
22
    poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES");
89
22
    poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES");
90
22
    poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE");
91
92
22
    poDriver->pfnOpen = OGRGMTDriverOpen;
93
22
    poDriver->pfnIdentify = OGRGMTDriverIdentify;
94
22
    poDriver->pfnCreate = OGRGMTDriverCreate;
95
96
22
    GetGDALDriverManager()->RegisterDriver(poDriver);
97
22
}