LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/ntf - ogrntfdriver.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 33 36 91.7 %
Date: 2024-11-25 13:07:18 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  UK NTF Reader
       4             :  * Purpose:  Implements OGRNTFDriver
       5             :  * Author:   Frank Warmerdam, warmerdam@pobox.com
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 1999, Frank Warmerdam
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #include "ntf.h"
      14             : #include "cpl_conv.h"
      15             : 
      16             : /************************************************************************/
      17             : /* ==================================================================== */
      18             : /*                            OGRNTFDriver                              */
      19             : /* ==================================================================== */
      20             : /************************************************************************/
      21             : 
      22             : /************************************************************************/
      23             : /*                                Open()                                */
      24             : /************************************************************************/
      25             : 
      26       28379 : static GDALDataset *OGRNTFDriverOpen(GDALOpenInfo *poOpenInfo)
      27             : 
      28             : {
      29       28379 :     if (!poOpenInfo->bStatOK)
      30       22518 :         return nullptr;
      31             : 
      32        5861 :     if (poOpenInfo->nHeaderBytes != 0)
      33             :     {
      34        5153 :         if (poOpenInfo->nHeaderBytes < 80)
      35         303 :             return nullptr;
      36        4850 :         const char *pszHeader = (const char *)poOpenInfo->pabyHeader;
      37        4850 :         if (!STARTS_WITH_CI(pszHeader, "01"))
      38        4839 :             return nullptr;
      39             : 
      40          11 :         int j = 0;  // Used after for.
      41         891 :         for (; j < 80; j++)
      42             :         {
      43         880 :             if (pszHeader[j] == 10 || pszHeader[j] == 13)
      44             :                 break;
      45             :         }
      46             : 
      47          11 :         if (j == 80 || pszHeader[j - 1] != '%')
      48          11 :             return nullptr;
      49             :     }
      50             : 
      51         708 :     OGRNTFDataSource *poDS = new OGRNTFDataSource;
      52         708 :     if (!poDS->Open(poOpenInfo->pszFilename, TRUE))
      53             :     {
      54         708 :         delete poDS;
      55         708 :         poDS = nullptr;
      56             :     }
      57             : 
      58         708 :     if (poDS != nullptr && poOpenInfo->eAccess == GA_Update)
      59             :     {
      60           0 :         CPLError(CE_Failure, CPLE_OpenFailed,
      61             :                  "NTF Driver doesn't support update.");
      62           0 :         delete poDS;
      63           0 :         poDS = nullptr;
      64             :     }
      65             : 
      66         708 :     return poDS;
      67             : }
      68             : 
      69             : /************************************************************************/
      70             : /*                           RegisterOGRNTF()                           */
      71             : /************************************************************************/
      72             : 
      73        1595 : void RegisterOGRNTF()
      74             : 
      75             : {
      76        1595 :     if (GDALGetDriverByName("UK .NTF") != nullptr)
      77         302 :         return;
      78             : 
      79        1293 :     GDALDriver *poDriver = new GDALDriver();
      80             : 
      81        1293 :     poDriver->SetDescription("UK .NTF");
      82        1293 :     poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES");
      83        1293 :     poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "UK .NTF");
      84        1293 :     poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/ntf.html");
      85        1293 :     poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES");
      86        1293 :     poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES");
      87        1293 :     poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, "OGRSQL SQLITE");
      88             : 
      89        1293 :     poDriver->pfnOpen = OGRNTFDriverOpen;
      90             : 
      91        1293 :     GetGDALDriverManager()->RegisterDriver(poDriver);
      92             : }

Generated by: LCOV version 1.14