@@ -293,7 +293,7 @@ bool QgsGrassProvider::nextFeature( QgsFeature& feature )
293293 int cat, type, id;
294294 unsigned char *wkb;
295295 int wkbsize;
296-
296+
297297 QgsDebugMsgLevel ( " entered." , 3 );
298298
299299 if ( isEdited () || isFrozen () || !mValid )
@@ -318,7 +318,7 @@ bool QgsGrassProvider::nextFeature( QgsFeature& feature )
318318 QgsDebugMsg ( QString ( " cat = %1 type = %2 id = %3" ).arg ( cat ).arg ( type ).arg ( id ) );
319319#endif
320320
321- feature.setFeatureId (id );
321+ feature.setFeatureId ( id );
322322
323323 // TODO int may be 64 bits (memcpy)
324324 if ( type & ( GV_POINTS | GV_LINES ) ) /* points or lines */
@@ -651,7 +651,20 @@ int QgsGrassProvider::openLayer( QString gisdbase, QString location, QString map
651651 layer.nUsers = 1 ;
652652
653653 // Open map
654- layer.mapId = openMap ( gisdbase, location, mapset, mapName );
654+ QgsGrass::init ();
655+ QgsGrass::resetError ();
656+ if ( setjmp ( QgsGrass::fatalErrorEnv () ) == 0 )
657+ {
658+ layer.mapId = openMap ( gisdbase, location, mapset, mapName );
659+ }
660+ QgsGrass::clearErrorEnv ();
661+
662+ if ( QgsGrass::getError () == QgsGrass::FATAL )
663+ {
664+ QgsDebugMsg ( QString ( " Cannot open vector map: %1" ).arg ( QgsGrass::getErrorMessage () ) );
665+ return -1 ;
666+ }
667+
655668 if ( layer.mapId < 0 )
656669 {
657670 QgsDebugMsg ( " Cannot open vector map" );
@@ -668,7 +681,7 @@ int QgsGrassProvider::openLayer( QString gisdbase, QString location, QString map
668681 // Add new layer to layers
669682 mLayers .push_back ( layer );
670683
671- QgsDebugMsg ( QString ( " New layer successfully opened%1" ).arg ( layer.nAttributes ) );
684+ QgsDebugMsg ( QString ( " New layer successfully opened: %1" ).arg ( layer.nAttributes ) );
672685
673686 return mLayers .size () - 1 ;
674687}
@@ -943,7 +956,7 @@ void QgsGrassProvider::closeLayer( int layerId )
943956 delete[] mLayers [layerId].minmax ;
944957
945958 // Field info
946- free ( mLayers [layerId].fieldInfo );
959+ G_free ( mLayers [layerId].fieldInfo );
947960
948961 closeMap ( mLayers [layerId].mapId );
949962 }
@@ -1149,11 +1162,11 @@ void QgsGrassProvider::closeMap( int mapId )
11491162
11501163 if ( mMaps [mapId].valid )
11511164 {
1152- bool mapsetunset = G__getenv ( " MAPSET" )== NULL || *G__getenv ( " MAPSET" )== 0 ;
1153- if ( mapsetunset )
1165+ bool mapsetunset = G__getenv ( " MAPSET" ) == NULL || *G__getenv ( " MAPSET" ) == 0 ;
1166+ if ( mapsetunset )
11541167 G__setenv (( char * )" MAPSET" , mMaps [mapId].mapset .toAscii ().data () );
11551168 Vect_close ( mMaps [mapId].map );
1156- if ( mapsetunset )
1169+ if ( mapsetunset )
11571170 G__setenv (( char * )" MAPSET" , " " );
11581171 }
11591172 mMaps [mapId].valid = false ;
0 commit comments