@@ -654,7 +654,20 @@ int QgsGrassProvider::openLayer( QString gisdbase, QString location, QString map
654654 layer.nUsers = 1 ;
655655
656656 // Open map
657- layer.mapId = openMap ( gisdbase, location, mapset, mapName );
657+ QgsGrass::init ();
658+ QgsGrass::resetError ();
659+ if ( setjmp ( QgsGrass::fatalErrorEnv () ) == 0 )
660+ {
661+ layer.mapId = openMap ( gisdbase, location, mapset, mapName );
662+ }
663+ QgsGrass::clearErrorEnv ();
664+
665+ if ( QgsGrass::getError () == QgsGrass::FATAL )
666+ {
667+ QgsDebugMsg ( QString ( " Cannot open vector map: %1" ).arg ( QgsGrass::getErrorMessage () ) );
668+ return -1 ;
669+ }
670+
658671 if ( layer.mapId < 0 )
659672 {
660673 QgsDebugMsg ( " Cannot open vector map" );
@@ -671,7 +684,7 @@ int QgsGrassProvider::openLayer( QString gisdbase, QString location, QString map
671684 // Add new layer to layers
672685 mLayers .push_back ( layer );
673686
674- QgsDebugMsg ( QString ( " New layer successfully opened%1" ).arg ( layer.nAttributes ) );
687+ QgsDebugMsg ( QString ( " New layer successfully opened: %1" ).arg ( layer.nAttributes ) );
675688
676689 return mLayers .size () - 1 ;
677690}
@@ -946,7 +959,7 @@ void QgsGrassProvider::closeLayer( int layerId )
946959 delete[] mLayers [layerId].minmax ;
947960
948961 // Field info
949- free ( mLayers [layerId].fieldInfo );
962+ G_free ( mLayers [layerId].fieldInfo );
950963
951964 closeMap ( mLayers [layerId].mapId );
952965 }
0 commit comments