Index: vector/v.external/main.c
===================================================================
--- vector/v.external/main.c	(revision 54026)
+++ vector/v.external/main.c	(working copy)
@@ -37,7 +37,8 @@
     OGRSFDriverH Ogr_driver;
     OGRLayerH Ogr_layer;
     OGRFeatureDefnH Ogr_featuredefn;
-    int nlayers;
+    OGRwkbGeometryType Ogr_geom_type;
+    int nlayers, is3D;
     int layer;
     char *layer_name;
 
@@ -105,6 +106,7 @@
     for (i = 0; i < nlayers; i++) {
 	Ogr_layer = OGR_DS_GetLayer(Ogr_ds, i);
 	Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
+	Ogr_geom_type = OGR_FD_GetGeomType(Ogr_featuredefn);
 	layer_name = (char *)OGR_FD_GetName(Ogr_featuredefn);
 
 	if (!layer_opt->answer) {
@@ -121,7 +123,7 @@
 
     if (!layer_opt->answer) {
 	fprintf(stdout, "\n");
-	exit(0);
+	exit(EXIT_SUCCESS);
     }
 
     if (layer == -1) {
@@ -130,9 +132,22 @@
 
     G_debug(2, "layer '%s' was found", layer_opt->answer);
 
+    if (layer){
+	switch(Ogr_geom_type) {
+	    case wkbPoint25D: case wkbLineString25D: case wkbPolygon25D:
+	    case wkbMultiPoint25D: case wkbMultiLineString25D: case wkbMultiPolygon25D:
+	    case wkbGeometryCollection25D:
+	    is3D = WITH_Z;
+	    break;
+	default:
+	    is3D = WITHOUT_Z;
+	    break;
+	}
+    }
+
     OGR_DS_Destroy(Ogr_ds);
 
-    Vect_open_new(&Map, out_opt->answer, 0);
+    Vect_open_new(&Map, out_opt->answer, is3D);
     Vect_hist_command(&Map);
     Vect_close(&Map);
 
