diff --git a/gdal/gcore/gdal.h b/gdal/gcore/gdal.h index 7833b49..2318f58 100644 --- a/gdal/gcore/gdal.h +++ b/gdal/gcore/gdal.h @@ -550,6 +550,11 @@ void CPL_DLL CPL_STDCALL GDALARUnlockBuffer(GDALAsyncReaderH hARIO); /* -------------------------------------------------------------------- */ int CPL_DLL CPL_STDCALL GDALGeneralCmdLineProcessor( int nArgc, char ***ppapszArgv, int nOptions ); +#ifndef GDAL_GET_CMD_LINE_DEFINED +#define GDAL_GET_CMD_LINE_DEFINED +void CPL_DLL CPL_STDCALL GDALSetCmdLine( int argc, char ** argv ); +char CPL_DLL * CPL_STDCALL GDALGetCmdLine( ); +#endif void CPL_DLL CPL_STDCALL GDALSwapWords( void *pData, int nWordSize, int nWordCount, int nWordSkip ); void CPL_DLL CPL_STDCALL diff --git a/gdal/gcore/gdal_misc.cpp b/gdal/gcore/gdal_misc.cpp index 473537a..66c121b 100644 --- a/gdal/gcore/gdal_misc.cpp +++ b/gdal/gcore/gdal_misc.cpp @@ -38,6 +38,8 @@ CPL_CVSID("$Id$"); #include "ogr_spatialref.h" +static char szGDALCommandLine[1024]; + /************************************************************************/ /* __pure_virtual() */ /* */ @@ -2343,6 +2345,9 @@ GDALGeneralCmdLineProcessor( int nArgc, char ***ppapszArgv, int nOptions ) (void) nOptions; + /* save the complete argv to szGDALCommandLine */ + GDALSetCmdLine( nArgc, *ppapszArgv ) ; + /* -------------------------------------------------------------------- */ /* Preserve the program name. */ /* -------------------------------------------------------------------- */ @@ -2674,6 +2679,46 @@ GDALGeneralCmdLineProcessor( int nArgc, char ***ppapszArgv, int nOptions ) return CSLCount( *ppapszArgv ); } +void GDALSetCmdLine1( int argc, char ** argv, char *dargv ) +{ + /* code taken from cdo commandline.c */ + int iarg; + char *pargv; + size_t len, offset = 0; + + for ( iarg = 0; iarg < argc; iarg++ ) + { + if ( iarg == 0 ) + { + pargv = strrchr(argv[iarg], '/'); + if ( pargv == 0 ) pargv = argv[0]; + else pargv++; + } + else + pargv = argv[iarg]; + + len = strlen(pargv); + if ( offset+len+1 > 1024 ) break; + memcpy(dargv+offset, pargv, len); + offset += len; + dargv[offset] = ' '; + offset++; + } + + dargv[offset-1] = '\0'; + +}; + +void GDALSetCmdLine(int argc, char ** argv ) +{ + GDALSetCmdLine1( argc, argv, szGDALCommandLine ); +} + +char * GDALGetCmdLine( ) +{ + return szGDALCommandLine; +} + /************************************************************************/ /* _FetchDblFromMD() */ @@ -3077,5 +3122,6 @@ int GDALCheckBandCount( int nBands, int bIsZeroAllowed ) return TRUE; } + CPL_C_END