@@ -293,7 +293,7 @@ bool QgsGrassProvider::nextFeature( QgsFeature& feature )
293
293
int cat, type, id;
294
294
unsigned char *wkb;
295
295
int wkbsize;
296
-
296
+
297
297
QgsDebugMsgLevel ( " entered." , 3 );
298
298
299
299
if ( isEdited () || isFrozen () || !mValid )
@@ -318,7 +318,7 @@ bool QgsGrassProvider::nextFeature( QgsFeature& feature )
318
318
QgsDebugMsg ( QString ( " cat = %1 type = %2 id = %3" ).arg ( cat ).arg ( type ).arg ( id ) );
319
319
#endif
320
320
321
- feature.setFeatureId (id );
321
+ feature.setFeatureId ( id );
322
322
323
323
// TODO int may be 64 bits (memcpy)
324
324
if ( type & ( GV_POINTS | GV_LINES ) ) /* points or lines */
@@ -651,7 +651,20 @@ int QgsGrassProvider::openLayer( QString gisdbase, QString location, QString map
651
651
layer.nUsers = 1 ;
652
652
653
653
// 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
+
655
668
if ( layer.mapId < 0 )
656
669
{
657
670
QgsDebugMsg ( " Cannot open vector map" );
@@ -668,7 +681,7 @@ int QgsGrassProvider::openLayer( QString gisdbase, QString location, QString map
668
681
// Add new layer to layers
669
682
mLayers .push_back ( layer );
670
683
671
- QgsDebugMsg ( QString ( " New layer successfully opened%1" ).arg ( layer.nAttributes ) );
684
+ QgsDebugMsg ( QString ( " New layer successfully opened: %1" ).arg ( layer.nAttributes ) );
672
685
673
686
return mLayers .size () - 1 ;
674
687
}
@@ -943,7 +956,7 @@ void QgsGrassProvider::closeLayer( int layerId )
943
956
delete[] mLayers [layerId].minmax ;
944
957
945
958
// Field info
946
- free ( mLayers [layerId].fieldInfo );
959
+ G_free ( mLayers [layerId].fieldInfo );
947
960
948
961
closeMap ( mLayers [layerId].mapId );
949
962
}
@@ -1149,11 +1162,11 @@ void QgsGrassProvider::closeMap( int mapId )
1149
1162
1150
1163
if ( mMaps [mapId].valid )
1151
1164
{
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 )
1154
1167
G__setenv (( char * )" MAPSET" , mMaps [mapId].mapset .toAscii ().data () );
1155
1168
Vect_close ( mMaps [mapId].map );
1156
- if ( mapsetunset )
1169
+ if ( mapsetunset )
1157
1170
G__setenv (( char * )" MAPSET" , " " );
1158
1171
}
1159
1172
mMaps [mapId].valid = false ;
0 commit comments