Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: GDAL Utilities 4 : * Purpose: Command line application to list info about a multidimensional 5 : *raster Author: Even Rouault,<even.rouault at spatialys.com> 6 : * 7 : * **************************************************************************** 8 : * Copyright (c) 2019, Even Rouault <even.rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "gdal_version.h" 14 : #include "gdal.h" 15 : #include "cpl_string.h" 16 : #include "cpl_multiproc.h" 17 : #include "commonutils.h" 18 : #include "gdal_utils_priv.h" 19 : 20 : /** 21 : * @brief Makes sure the GDAL library is properly cleaned up before exiting. 22 : * @param nCode exit code 23 : * @todo Move to API 24 : */ 25 1 : static void GDALExit(const int nCode) 26 : { 27 1 : GDALDestroy(); 28 1 : exit(nCode); 29 : } 30 : 31 : /************************************************************************/ 32 : /* Usage() */ 33 : /************************************************************************/ 34 : 35 0 : static void Usage() 36 : 37 : { 38 0 : fprintf(stderr, "%s\n", GDALMultiDimInfoAppGetParserUsage().c_str()); 39 0 : GDALExit(1); 40 0 : } 41 : 42 : /************************************************************************/ 43 : /* main() */ 44 : /************************************************************************/ 45 : 46 4 : MAIN_START(argc, argv) 47 : 48 : { 49 4 : EarlySetConfigOptions(argc, argv); 50 : 51 4 : GDALAllRegister(); 52 : 53 4 : argc = GDALGeneralCmdLineProcessor(argc, &argv, 0); 54 4 : if (argc < 1) 55 0 : GDALExit(-argc); 56 : 57 4 : argv = CSLAddString(argv, "-stdout"); 58 : 59 6 : GDALMultiDimInfoOptionsForBinary sOptionsForBinary; 60 : 61 : std::unique_ptr<GDALMultiDimInfoOptions, 62 : decltype(&GDALMultiDimInfoOptionsFree)> 63 : psOptions{GDALMultiDimInfoOptionsNew(argv + 1, &sOptionsForBinary), 64 4 : GDALMultiDimInfoOptionsFree}; 65 : 66 3 : CSLDestroy(argv); 67 : 68 3 : if (!psOptions) 69 0 : Usage(); 70 : 71 : GDALDatasetH hDataset = 72 3 : GDALOpenEx(sOptionsForBinary.osFilename.c_str(), 73 : GDAL_OF_MULTIDIM_RASTER | GDAL_OF_VERBOSE_ERROR, 74 3 : sOptionsForBinary.aosAllowInputDrivers.List(), 75 3 : sOptionsForBinary.aosOpenOptions.List(), nullptr); 76 3 : if (!hDataset) 77 : { 78 1 : fprintf(stderr, "gdalmdiminfo failed - unable to open '%s'.\n", 79 : sOptionsForBinary.osFilename.c_str()); 80 1 : GDALExit(1); 81 : } 82 : 83 2 : char *pszGDALInfoOutput = GDALMultiDimInfo(hDataset, psOptions.get()); 84 : 85 2 : if (pszGDALInfoOutput) 86 0 : printf("%s", pszGDALInfoOutput); 87 : 88 2 : CPLFree(pszGDALInfoOutput); 89 : 90 2 : GDALClose(hDataset); 91 : 92 2 : GDALDestroy(); 93 : 94 2 : return 0; 95 : } 96 : 97 0 : MAIN_END