LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/sosi - ogrsosidriver.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 23 30 76.7 %
Date: 2026-02-12 23:49:34 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  SOSI Translator
       4             :  * Purpose:  Implements OGRSOSIDriver.
       5             :  * Author:   Thomas Hirsch, <thomas.hirsch statkart no>
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2010, Thomas Hirsch
       9             :  * Copyright (c) 2010, Even Rouault <even dot rouault at spatialys.com>
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : // Must be included before FYBA headers that mess with min() / max()
      15             : #include <mutex>
      16             : 
      17             : #include "ogr_sosi.h"
      18             : #include "ogrsosidrivercore.h"
      19             : 
      20             : static int bFYBAInit = FALSE;
      21             : static std::mutex oMutex;
      22             : 
      23             : /************************************************************************/
      24             : /*                            OGRSOSIInit()                             */
      25             : /************************************************************************/
      26             : 
      27           3 : static void OGRSOSIInit()
      28             : {
      29           6 :     std::lock_guard<std::mutex> oLock(oMutex);
      30           3 :     if (!bFYBAInit)
      31             :     {
      32           1 :         LC_Init(); /* Init FYBA */
      33           1 :         SOSIInitTypes();
      34           1 :         bFYBAInit = TRUE;
      35             :     }
      36           3 : }
      37             : 
      38             : /************************************************************************/
      39             : /*                        OGRSOSIDriverUnload()                         */
      40             : /************************************************************************/
      41             : 
      42           5 : static void OGRSOSIDriverUnload(CPL_UNUSED GDALDriver *poDriver)
      43             : {
      44             : 
      45           5 :     if (bFYBAInit)
      46             :     {
      47           0 :         LC_Close(); /* Close FYBA */
      48           0 :         SOSICleanupTypes();
      49           0 :         bFYBAInit = FALSE;
      50             :     }
      51           5 : }
      52             : 
      53             : /************************************************************************/
      54             : /*                                Open()                                */
      55             : /************************************************************************/
      56             : 
      57           3 : static GDALDataset *OGRSOSIDriverOpen(GDALOpenInfo *poOpenInfo)
      58             : {
      59           3 :     if (OGRSOSIDriverIdentify(poOpenInfo) == FALSE)
      60           0 :         return nullptr;
      61             : 
      62           3 :     OGRSOSIInit();
      63             : 
      64           3 :     OGRSOSIDataSource *poDS = new OGRSOSIDataSource();
      65           3 :     if (!poDS->Open(poOpenInfo->pszFilename, 0))
      66             :     {
      67           0 :         delete poDS;
      68           0 :         return nullptr;
      69             :     }
      70             : 
      71           3 :     return poDS;
      72             : }
      73             : 
      74             : #ifdef WRITE_SUPPORT
      75             : /************************************************************************/
      76             : /*                               Create()                               */
      77             : /************************************************************************/
      78             : 
      79             : static GDALDataset *OGRSOSIDriverCreate(const char *pszName,
      80             :                                         CPL_UNUSED int nBands,
      81             :                                         CPL_UNUSED int nXSize,
      82             :                                         CPL_UNUSED int nYSize,
      83             :                                         CPL_UNUSED GDALDataType eDT,
      84             :                                         CPL_UNUSED CSLConstList papszOptions)
      85             : {
      86             :     OGRSOSIInit();
      87             :     OGRSOSIDataSource *poDS = new OGRSOSIDataSource();
      88             :     if (!poDS->Create(pszName))
      89             :     {
      90             :         delete poDS;
      91             :         return NULL;
      92             :     }
      93             :     return poDS;
      94             : }
      95             : #endif
      96             : 
      97             : /************************************************************************/
      98             : /*                          RegisterOGRSOSI()                           */
      99             : /************************************************************************/
     100             : 
     101          10 : void RegisterOGRSOSI()
     102             : {
     103          10 :     if (GDALGetDriverByName(DRIVER_NAME) != nullptr)
     104           0 :         return;
     105             : 
     106          10 :     GDALDriver *poDriver = new GDALDriver();
     107          10 :     OGRSOSIDriverSetCommonMetadata(poDriver);
     108          10 :     poDriver->pfnOpen = OGRSOSIDriverOpen;
     109             : #ifdef WRITE_SUPPORT
     110             :     poDriver->pfnCreate = OGRSOSIDriverCreate;
     111             : #endif
     112          10 :     poDriver->pfnUnloadDriver = OGRSOSIDriverUnload;
     113             : 
     114          10 :     GetGDALDriverManager()->RegisterDriver(poDriver);
     115             : }

Generated by: LCOV version 1.14