Obtained from: https://github.com/OSGeo/gdal-grass/commit/1f6a624e38a58cac80d754ae96131b5ee641bfda https://github.com/OSGeo/gdal-grass/commit/da141597b6d6cb9c230749ba07885c4f06e232cd --- ogrgrass.h.orig 2022-11-06 10:42:02 UTC +++ ogrgrass.h @@ -127,8 +127,8 @@ class OGRGRASSDataSource final: public OGRDataSource OGRGRASSDataSource(); virtual ~OGRGRASSDataSource(); - int Open( const char *, int bUpdate, int bTestOpen, - int bSingleNewFile = FALSE ); + bool Open( const char *, bool bUpdate, bool bTestOpen, + bool bSingleNewFile = false ); const char *GetName() override { return pszName; } int GetLayerCount() override { return nLayers; } @@ -147,23 +147,9 @@ class OGRGRASSDataSource final: public OGRDataSource struct Map_info map; int nLayers; - int bOpened; + bool bOpened; static bool SplitPath ( char *, char **, char **, char **, char ** ); -}; - -/************************************************************************/ -/* OGRGRASSDriver */ -/************************************************************************/ -class OGRGRASSDriver final: public OGRSFDriver -{ - public: - virtual ~OGRGRASSDriver(); - - const char *GetName() override; - OGRDataSource *Open( const char *, int ) override; - - int TestCapability( const char * ) override; }; #endif /* ndef OGRGRASS_H_INCLUDED */ --- ogrgrassdatasource.cpp.orig 2022-11-06 10:42:02 UTC +++ ogrgrassdatasource.cpp @@ -87,8 +87,8 @@ OGRGRASSDataSource::~OGRGRASSDataSource() typedef int (*GrassErrorHandler)(const char *, int); -int OGRGRASSDataSource::Open( const char * pszNewName, int /*bUpdate*/, - int bTestOpen, int /*bSingleNewFileIn*/ ) +bool OGRGRASSDataSource::Open( const char * pszNewName, bool /*bUpdate*/, + bool bTestOpen, bool /*bSingleNewFileIn*/ ) { VSIStatBuf stat; @@ -99,14 +99,14 @@ int OGRGRASSDataSource::Open( const char * pszNewName, /* -------------------------------------------------------------------- */ /* Do the given path contains 'vector' and 'head'? */ /* -------------------------------------------------------------------- */ - if ( strstr(pszName,"vector") == NULL || strstr(pszName,"head") == NULL ) + if ( strstr(pszName,"vector") == nullptr || strstr(pszName,"head") == nullptr ) { if( !bTestOpen ) { CPLError( CE_Failure, CPLE_AppDefined, "%s is not GRASS vector, access failed.\n", pszName ); } - return FALSE; + return false; } /* -------------------------------------------------------------------- */ @@ -120,7 +120,7 @@ int OGRGRASSDataSource::Open( const char * pszNewName, "%s is not GRASS vector, access failed.\n", pszName ); } - return FALSE; + return false; } /* -------------------------------------------------------------------- */ @@ -135,7 +135,7 @@ int OGRGRASSDataSource::Open( const char * pszNewName, "%s is not GRASS datasource name, access failed.\n", pszName ); } - return FALSE; + return false; } CPLDebug ( "GRASS", "Gisdbase: %s", pszGisdbase ); @@ -149,7 +149,7 @@ int OGRGRASSDataSource::Open( const char * pszNewName, // GISBASE is path to the directory where GRASS is installed, // it is necessary because there are database drivers. if ( !getenv( "GISBASE" ) ) { - static char* gisbaseEnv = NULL; + static char* gisbaseEnv = nullptr; const char *gisbase = GRASS_GISBASE; CPLError( CE_Warning, CPLE_AppDefined, "GRASS warning: GISBASE " "environment variable was not set, using:\n%s", gisbase ); @@ -191,7 +191,7 @@ int OGRGRASSDataSource::Open( const char * pszNewName, if ( level < 2 ) { CPLError( CE_Failure, CPLE_AppDefined, "Cannot open GRASS vector %s on level 2.\n", pszName ); - return FALSE; + return false; } CPLDebug ( "GRASS", "Num lines = %d", Vect_get_num_lines(&map) ); @@ -212,9 +212,9 @@ int OGRGRASSDataSource::Open( const char * pszNewName, papoLayers[nLayers++] = poLayer; } - bOpened = TRUE; + bOpened = true; - return TRUE; + return true; } /************************************************************************/ --- ogrgrassdriver.cpp.orig 2022-11-06 10:42:02 UTC +++ ogrgrassdriver.cpp @@ -37,32 +37,18 @@ extern "C" { CPL_CVSID("$Id$") /************************************************************************/ -/* ~OGRGRASSDriver() */ -/************************************************************************/ -OGRGRASSDriver::~OGRGRASSDriver() -{ -} - -/************************************************************************/ -/* GetName() */ -/************************************************************************/ -const char *OGRGRASSDriver::GetName() -{ - return "OGR_GRASS"; -} - -/************************************************************************/ /* Open() */ /************************************************************************/ -OGRDataSource *OGRGRASSDriver::Open( const char * pszFilename, - int bUpdate ) +static auto GRASSDatasetOpen(GDALOpenInfo *poOpenInfo) -> GDALDataset* { - OGRGRASSDataSource *poDS = new OGRGRASSDataSource(); + auto *poDS = new OGRGRASSDataSource(); - if( !poDS->Open( pszFilename, bUpdate, TRUE ) ) + bool bUpdate = poOpenInfo->eAccess == GA_Update; + + if( !poDS->Open( poOpenInfo->pszFilename, bUpdate, true )) { delete poDS; - return NULL; + return nullptr; } else { @@ -71,14 +57,6 @@ OGRDataSource *OGRGRASSDriver::Open( const char * pszF } /************************************************************************/ -/* TestCapability() */ -/************************************************************************/ -int OGRGRASSDriver::TestCapability( const char * /*pszCap*/ ) -{ - return FALSE; -} - -/************************************************************************/ /* RegisterOGRGRASS() */ /************************************************************************/ void RegisterOGRGRASS() @@ -86,15 +64,17 @@ void RegisterOGRGRASS() if (! GDAL_CHECK_VERSION("OGR/GRASS driver")) return; - if( GDALGetDriverByName( "OGR_GRASS" ) != NULL ) + if( GDALGetDriverByName( "OGR_GRASS" ) != nullptr ) return; - OGRGRASSDriver *poDriver = new OGRGRASSDriver(); + auto *poDriver = new GDALDriver(); - poDriver->SetDescription( "GRASS" ); + poDriver->SetDescription( "OGR_GRASS" ); poDriver->SetMetadataItem( GDAL_DCAP_VECTOR, "YES" ); poDriver->SetMetadataItem( GDAL_DMD_LONGNAME, "GRASS Vectors (5.7+)" ); poDriver->SetMetadataItem( GDAL_DMD_HELPTOPIC, "drivers/vector/grass.html" ); - OGRSFDriverRegistrar::GetRegistrar()->RegisterDriver( poDriver ); + poDriver->pfnOpen = GRASSDatasetOpen; + + GetGDALDriverManager()->RegisterDriver(poDriver); }