LCOV - code coverage report
Current view: top level - apps - commonutils.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 44 45 97.8 %
Date: 2024-11-21 22:18:42 Functions: 6 6 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  GDAL Utilities
       4             :  * Purpose:  Common utility routines
       5             :  * Author:   Even Rouault, <even dot rouault at spatialys.com>
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2011-2012, Even Rouault <even dot rouault at spatialys.com>
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #include "commonutils.h"
      14             : 
      15             : #include <cstdio>
      16             : #include <cstring>
      17             : 
      18             : #include <string>
      19             : 
      20             : #include "cpl_conv.h"
      21             : #include "cpl_string.h"
      22             : #include "gdal.h"
      23             : 
      24             : /* -------------------------------------------------------------------- */
      25             : /*                         GetOutputDriversFor()                        */
      26             : /* -------------------------------------------------------------------- */
      27             : 
      28         338 : std::vector<std::string> GetOutputDriversFor(const char *pszDestFilename,
      29             :                                              int nFlagRasterVector)
      30             : {
      31         676 :     return CPLStringList(GDALGetOutputDriversForDatasetName(
      32             :         pszDestFilename, nFlagRasterVector, /* bSingleMatch = */ false,
      33         676 :         /* bEmitWarning = */ false));
      34             : }
      35             : 
      36             : /* -------------------------------------------------------------------- */
      37             : /*                      GetOutputDriverForRaster()                      */
      38             : /* -------------------------------------------------------------------- */
      39             : 
      40        1851 : CPLString GetOutputDriverForRaster(const char *pszDestFilename)
      41             : {
      42             :     const CPLStringList aosList(GDALGetOutputDriversForDatasetName(
      43             :         pszDestFilename, GDAL_OF_RASTER, /* bSingleMatch = */ true,
      44        3702 :         /* bEmitWarning = */ true));
      45        1851 :     if (!aosList.empty())
      46             :     {
      47        1851 :         CPLDebug("GDAL", "Using %s driver", aosList[0]);
      48        1851 :         return aosList[0];
      49             :     }
      50           0 :     return CPLString();
      51             : }
      52             : 
      53             : /* -------------------------------------------------------------------- */
      54             : /*                        EarlySetConfigOptions()                       */
      55             : /* -------------------------------------------------------------------- */
      56             : 
      57         954 : void EarlySetConfigOptions(int argc, char **argv)
      58             : {
      59             :     // Must process some config options before GDALAllRegister() or
      60             :     // OGRRegisterAll(), but we can't call GDALGeneralCmdLineProcessor() or
      61             :     // OGRGeneralCmdLineProcessor(), because it needs the drivers to be
      62             :     // registered for the --format or --formats options.
      63        6137 :     for (int i = 1; i < argc; i++)
      64             :     {
      65        5183 :         if (EQUAL(argv[i], "--config") && i + 2 < argc)
      66             :         {
      67          31 :             CPLSetConfigOption(argv[i + 1], argv[i + 2]);
      68             : 
      69          31 :             i += 2;
      70             :         }
      71        5152 :         else if (EQUAL(argv[i], "--debug") && i + 1 < argc)
      72             :         {
      73           7 :             CPLSetConfigOption("CPL_DEBUG", argv[i + 1]);
      74           7 :             i += 1;
      75             :         }
      76             :     }
      77         954 : }
      78             : 
      79             : /************************************************************************/
      80             : /*                          GDALRemoveBOM()                             */
      81             : /************************************************************************/
      82             : 
      83             : /* Remove potential UTF-8 BOM from data (must be NUL terminated) */
      84           6 : void GDALRemoveBOM(GByte *pabyData)
      85             : {
      86           6 :     if (pabyData[0] == 0xEF && pabyData[1] == 0xBB && pabyData[2] == 0xBF)
      87             :     {
      88           1 :         memmove(pabyData, pabyData + 3,
      89           1 :                 strlen(reinterpret_cast<char *>(pabyData) + 3) + 1);
      90             :     }
      91           6 : }
      92             : 
      93             : /************************************************************************/
      94             : /*                      GDALRemoveSQLComments()                         */
      95             : /************************************************************************/
      96             : 
      97           5 : std::string GDALRemoveSQLComments(const std::string &osInput)
      98             : {
      99             :     const CPLStringList aosLines(
     100          10 :         CSLTokenizeStringComplex(osInput.c_str(), "\r\n", FALSE, FALSE));
     101           5 :     std::string osSQL;
     102          20 :     for (const char *pszLine : aosLines)
     103             :     {
     104          15 :         char chQuote = 0;
     105          15 :         int i = 0;
     106         173 :         for (; pszLine[i] != '\0'; ++i)
     107             :         {
     108         166 :             if (chQuote)
     109             :             {
     110          12 :                 if (pszLine[i] == chQuote)
     111             :                 {
     112           4 :                     if (pszLine[i + 1] == chQuote)
     113             :                     {
     114           2 :                         i++;
     115             :                     }
     116             :                     else
     117             :                     {
     118           2 :                         chQuote = 0;
     119             :                     }
     120             :                 }
     121             :             }
     122         154 :             else if (pszLine[i] == '\'' || pszLine[i] == '"')
     123             :             {
     124           2 :                 chQuote = pszLine[i];
     125             :             }
     126         152 :             else if (pszLine[i] == '-' && pszLine[i + 1] == '-')
     127             :             {
     128           8 :                 break;
     129             :             }
     130             :         }
     131          15 :         if (i > 0)
     132             :         {
     133           9 :             osSQL.append(pszLine, i);
     134             :         }
     135          15 :         osSQL += ' ';
     136             :     }
     137          10 :     return osSQL;
     138             : }
     139             : 
     140             : /************************************************************************/
     141             : /*                            ArgIsNumeric()                            */
     142             : /************************************************************************/
     143             : 
     144         205 : int ArgIsNumeric(const char *pszArg)
     145             : 
     146             : {
     147         205 :     return CPLGetValueType(pszArg) != CPL_VALUE_STRING;
     148             : }

Generated by: LCOV version 1.14