LCOV - code coverage report
Current view: top level - frmts/grib - gribdrivercore.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 26 26 100.0 %
Date: 2025-10-27 00:14:23 Functions: 2 2 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  GRIB Driver
       4             :  * Purpose:  GDALDataset driver for GRIB translator for read support
       5             :  * Author:   Bas Retsios, retsios@itc.nl
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2007, ITC
       9             :  * Copyright (c) 2008-2017, Even Rouault <even dot rouault at spatialys dot com>
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : #include "gdal_frmts.h"
      15             : #include "gdalplugindriverproxy.h"
      16             : 
      17             : #include "gribdrivercore.h"
      18             : 
      19             : /************************************************************************/
      20             : /*                     GRIBDriverIdentify()                             */
      21             : /************************************************************************/
      22             : 
      23       62211 : int GRIBDriverIdentify(GDALOpenInfo *poOpenInfo)
      24             : 
      25             : {
      26       62211 :     if (poOpenInfo->nHeaderBytes < 8)
      27       56880 :         return FALSE;
      28             : 
      29        5331 :     const char *pasHeader = reinterpret_cast<char *>(poOpenInfo->pabyHeader);
      30             :     // Does a part of what ReadSECT0(), but in a thread-safe way.
      31     5173640 :     for (int i = 0; i < poOpenInfo->nHeaderBytes - 3; i++)
      32             :     {
      33     5168810 :         if (STARTS_WITH_CI(pasHeader + i, "GRIB")
      34             : #ifdef ENABLE_TDLP
      35             :             || STARTS_WITH_CI(pasHeader + i, "TDLP")
      36             : #endif
      37             :         )
      38         500 :             return TRUE;
      39             :     }
      40             : 
      41        4831 :     return FALSE;
      42             : }
      43             : 
      44             : /************************************************************************/
      45             : /*                     GRIBDriverSetCommonMetadata()                    */
      46             : /************************************************************************/
      47             : 
      48        1755 : void GRIBDriverSetCommonMetadata(GDALDriver *poDriver)
      49             : {
      50        1755 :     poDriver->SetDescription(DRIVER_NAME);
      51        1755 :     poDriver->SetMetadataItem(GDAL_DCAP_RASTER, "YES");
      52        1755 :     poDriver->SetMetadataItem(GDAL_DCAP_MULTIDIM_RASTER, "YES");
      53        1755 :     poDriver->SetMetadataItem(GDAL_DMD_LONGNAME,
      54        1755 :                               "GRIdded Binary (.grb, .grb2)");
      55        1755 :     poDriver->SetMetadataItem(GDAL_DMD_OPENOPTIONLIST,
      56             :                               "<OpenOptionList>"
      57             :                               "    <Option name='USE_IDX' type='boolean' "
      58             :                               "description='Load metadata from "
      59             :                               "wgrib2 index file if available' default='YES'/>"
      60        1755 :                               "</OpenOptionList>");
      61        1755 :     poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/raster/grib.html");
      62        1755 :     poDriver->SetMetadataItem(GDAL_DMD_EXTENSIONS, "grb grb2 grib2");
      63        1755 :     poDriver->SetMetadataItem(GDAL_DCAP_VIRTUALIO, "YES");
      64        1755 :     poDriver->SetMetadataItem(GDAL_DCAP_CREATE_SUBDATASETS, "YES");
      65             : 
      66        1755 :     poDriver->SetMetadataItem(GDAL_DMD_CREATIONDATATYPES,
      67             :                               "Byte UInt16 Int16 UInt32 Int32 Float32 "
      68        1755 :                               "Float64");
      69             : 
      70        1755 :     poDriver->pfnIdentify = GRIBDriverIdentify;
      71        1755 :     poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES");
      72        1755 :     poDriver->SetMetadataItem(GDAL_DCAP_CREATECOPY, "YES");
      73        1755 : }
      74             : 
      75             : /************************************************************************/
      76             : /*                    DeclareDeferredGRIBPlugin()                       */
      77             : /************************************************************************/
      78             : 
      79             : #ifdef PLUGIN_FILENAME
      80             : void DeclareDeferredGRIBPlugin()
      81             : {
      82             :     if (GDALGetDriverByName(DRIVER_NAME) != nullptr)
      83             :     {
      84             :         return;
      85             :     }
      86             :     auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME);
      87             : #ifdef PLUGIN_INSTALLATION_MESSAGE
      88             :     poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE,
      89             :                               PLUGIN_INSTALLATION_MESSAGE);
      90             : #endif
      91             :     GRIBDriverSetCommonMetadata(poDriver);
      92             :     GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver);
      93             : }
      94             : #endif

Generated by: LCOV version 1.14