Skip to content

Commit

Permalink
gdalbuildvrt: use GDALArgumentParser
Browse files Browse the repository at this point in the history
which makes sure that -sd value is an integer (fixes #9672)
  • Loading branch information
rouault committed Apr 17, 2024
1 parent 065c826 commit 7dcead8
Show file tree
Hide file tree
Showing 4 changed files with 344 additions and 283 deletions.
2 changes: 2 additions & 0 deletions apps/gdal_utils_priv.h
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,8 @@ std::string CPL_DLL GDALInfoAppGetParserUsage();

std::string CPL_DLL GDALGridGetParserUsage();

std::string CPL_DLL GDALBuildVRTGetParserUsage();

#endif /* #ifndef DOXYGEN_SKIP */

#endif /* GDAL_UTILS_PRIV_H_INCLUDED */
94 changes: 7 additions & 87 deletions apps/gdalbuildvrt_bin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,72 +37,13 @@
/* Usage() */
/************************************************************************/

static void Usage(bool bIsError,
const char *pszErrorMsg = nullptr) CPL_NO_RETURN;
static void Usage() CPL_NO_RETURN;

static void Usage(bool bIsError, const char *pszErrorMsg)
static void Usage()

{
fprintf(
bIsError ? stderr : stdout, "%s",
"Usage: gdalbuildvrt [--help] [--help-general]\n"
" [-tileindex <field_name>]\n"
" [-resolution {highest|lowest|average|user}]\n"
" [-te <xmin> <ymin> <xmax> <ymax>] [-tr <xres> "
"<yres>] [-tap]\n"
" [-separate] [-b <band>]... [-sd <subdataset>]\n"
" [-allow_projection_difference] [-q]\n"
" [-addalpha] [-hidenodata]\n"
" [-srcnodata \"<value>[ <value>]...\"] [-vrtnodata "
"\"<value>[ <value>]...\"\n"
" [-ignore_srcmaskband]\n"
" [-nodata_max_mask_threshold <threshold>]\n"
" [-a_srs <srs_def>]\n"
" [-r "
"{nearest|bilinear|cubic|cubicspline|lanczos|average|mode}]\n"
" [-oo <NAME>=<VALUE>]...\n"
" [-input_file_list <filename>] [-overwrite]\n"
" [-strict | -non_strict]\n"
" <output_filename.vrt> <input_raster> "
"[<input_raster>]...\n"
"\n"
"e.g.\n"
" % gdalbuildvrt doq_index.vrt doq/*.tif\n"
" % gdalbuildvrt -input_file_list my_list.txt doq_index.vrt\n"
"\n"
"NOTES:\n"
" o With -separate, each files goes into a separate band in the VRT "
"band.\n"
" Otherwise, the files are considered as tiles of a larger mosaic.\n"
" o -b option selects a band to add into vrt. Multiple bands can be "
"listed.\n"
" By default all bands are queried.\n"
" o The default tile index field is 'location' unless otherwise "
"specified by\n"
" -tileindex.\n"
" o In case the resolution of all input files is not the same, the "
"-resolution\n"
" flag enable the user to control the way the output resolution is "
"computed.\n"
" Average is the default.\n"
" o Input files may be any valid GDAL dataset or a GDAL raster tile "
"index.\n"
" o For a GDAL raster tile index, all entries will be added to the "
"VRT.\n"
" o If one GDAL dataset is made of several subdatasets and has 0 "
"raster bands,\n"
" its datasets will be added to the VRT rather than the dataset "
"itself.\n"
" Single subdataset could be selected by its number using the -sd "
"option.\n"
" o By default, only datasets of same projection and band "
"characteristics\n"
" may be added to the VRT.\n");

if (pszErrorMsg != nullptr)
fprintf(stderr, "\nFAILURE: %s\n", pszErrorMsg);

exit(bIsError ? 1 : 0);
fprintf(stderr, "%s\n", GDALBuildVRTGetParserUsage().c_str());
exit(1);
}

/************************************************************************/
Expand All @@ -123,22 +64,6 @@ MAIN_START(argc, argv)
if (argc < 1)
exit(-argc);

for (int i = 0; argv != nullptr && argv[i] != nullptr; i++)
{
if (EQUAL(argv[i], "--utility_version"))
{
printf("%s was compiled against GDAL %s and is running against "
"GDAL %s\n",
argv[0], GDAL_RELEASE_NAME, GDALVersionInfo("RELEASE_NAME"));
CSLDestroy(argv);
return 0;
}
else if (EQUAL(argv[i], "--help"))
{
Usage(false, nullptr);
}
}

GDALBuildVRTOptionsForBinary sOptionsForBinary;
/* coverity[tainted_data] */
GDALBuildVRTOptions *psOptions =
Expand All @@ -147,12 +72,7 @@ MAIN_START(argc, argv)

if (psOptions == nullptr)
{
Usage(true, nullptr);
}

if (sOptionsForBinary.osDstFilename.c_str() == nullptr)
{
Usage(true, "No target filename specified.");
Usage();
}

if (!(sOptionsForBinary.bQuiet))
Expand Down Expand Up @@ -188,7 +108,7 @@ MAIN_START(argc, argv)
sOptionsForBinary.osDstFilename.c_str(),
GDALGetDriverShortName(hDriver),
sOptionsForBinary.osDstFilename.c_str());
Usage(true);
Usage();
}
}
}
Expand All @@ -199,7 +119,7 @@ MAIN_START(argc, argv)
sOptionsForBinary.aosSrcFiles.size(), nullptr,
sOptionsForBinary.aosSrcFiles.List(), psOptions, &bUsageError);
if (bUsageError)
Usage(true);
Usage();
int nRetCode = (hOutDS) ? 0 : 1;

GDALBuildVRTOptionsFree(psOptions);
Expand Down
Loading

0 comments on commit 7dcead8

Please sign in to comment.