浏览代码

v.to.3d: call G_fatal_error() immediately

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@56204 15284696-431f-4ddb-bdfa-cd5b030d7da7
Martin Landa 12 年之前
父节点
当前提交
b18aff3329
共有 4 个文件被更改,包括 28 次插入52 次删除
  1. 4 4
      vector/v.to.3d/local_proto.h
  2. 2 8
      vector/v.to.3d/main.c
  3. 11 20
      vector/v.to.3d/trans2.c
  4. 11 20
      vector/v.to.3d/trans3.c

+ 4 - 4
vector/v.to.3d/local_proto.h

@@ -14,9 +14,9 @@ struct opts {
 void parse_args(struct opts *);
 
 /* trans2.c */
-int trans2d(struct Map_info *, struct Map_info *, int,
-	    double, const char *, const char *);
+void trans2d(struct Map_info *, struct Map_info *, int,
+             double, const char *, const char *);
 
 /* trans3.c */
-int trans3d(struct Map_info *, struct Map_info *, int,
-	    const char *, const char *);
+void trans3d(struct Map_info *, struct Map_info *, int,
+             const char *, const char *);

+ 2 - 8
vector/v.to.3d/main.c

@@ -29,7 +29,6 @@ int main(int argc, char **argv)
     struct Map_info In, Out;
     struct bound_box box;
     int type;
-    int ret;
     
     G_gisinit(argv[0]);
 
@@ -100,10 +99,9 @@ int main(int argc, char **argv)
 	}
     }
 
-    ret = 0;
     if (opt.reverse->answer) {
 	/* 3d -> 2d */
-	ret = trans3d(&In, &Out, type, opt.field->answer, opt.column->answer);
+        trans3d(&In, &Out, type, opt.field->answer, opt.column->answer);
     }
     else {
 	/* 2d -> 3d */
@@ -112,11 +110,7 @@ int main(int argc, char **argv)
 	if (opt.height->answer) {
 	    height = atof(opt.height->answer);
 	}
-	ret = trans2d(&In, &Out, type, height, opt.field->answer, opt.column->answer);
-    }
-
-    if (ret < 0) {
-	G_fatal_error(_("%s failed"), G_program_name());
+	trans2d(&In, &Out, type, height, opt.field->answer, opt.column->answer);
     }
 
     if (!opt.reverse->answer && !opt.table->answer) {

+ 11 - 20
vector/v.to.3d/trans2.c

@@ -14,11 +14,8 @@
    \param height fixed height (used only if column is NULL)
    \param field layer number
    \param column attribute column used for height
-
-   \return number of writen features
-   \return -1 on error
  */
-int trans2d(struct Map_info *In, struct Map_info *Out, int type,
+void trans2d(struct Map_info *In, struct Map_info *Out, int type,
 	    double height, const char *field_name, const char *column)
 {
     int i, ltype, line, field;
@@ -49,28 +46,25 @@ int trans2d(struct Map_info *In, struct Map_info *Out, int type,
 
 	Fi = Vect_get_field(In, field);
 	if (!Fi) {
-	    G_warning(_("Database connection not defined for layer <%s>"),
-		      field_name);
-	    return -1;
+	    G_fatal_error(_("Database connection not defined for layer <%s>"),
+                          field_name);
 	}
 
 	driver = db_start_driver_open_database(Fi->driver, Fi->database);
 	if (!driver) {
-	    G_warning(_("Unable to open database <%s> by driver <%s>"),
-		      Fi->database, Fi->driver);
-	    return -1;
+	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
+                          Fi->database, Fi->driver);
 	}
-
+        db_set_error_handler_driver(driver);
+        
 	/* column type must numeric */
 	ctype = db_column_Ctype(driver, Fi->table, column);
 	if (ctype == -1) {
-	    G_warning(_("Column <%s> not found in table <%s>"),
-		      column, Fi->table);
-	    return -1;
+	    G_fatal_error(_("Column <%s> not found in table <%s>"),
+                          column, Fi->table);
 	}
 	if (ctype != DB_C_TYPE_INT && ctype != DB_C_TYPE_DOUBLE) {
-	    G_warning(_("Column must be numeric"));
-	    return -1;
+	    G_fatal_error(_("Column must be numeric"));
 	}
 
         G_message(_("Fetching height from <%s> column..."), column);
@@ -87,8 +81,7 @@ int trans2d(struct Map_info *In, struct Map_info *Out, int type,
     while (1) {
 	ltype = Vect_read_next_line(In, Points, Cats);
 	if (ltype == -1) {
-	    G_warning(_("Unable to read vector map"));
-	    return -1;
+	    G_fatal_error(_("Unable to read vector map"));
 	}
 	if (ltype == -2) {	/* EOF */
 	    break;
@@ -136,6 +129,4 @@ int trans2d(struct Map_info *In, struct Map_info *Out, int type,
     
     Vect_destroy_line_struct(Points);
     Vect_destroy_cats_struct(Cats);
-
-    return line - 1;
 }

+ 11 - 20
vector/v.to.3d/trans3.c

@@ -16,11 +16,8 @@ static int srch(const void *, const void *);
    \param type feature type to be transformed
    \param field layer number
    \param zcolumn attribute column where to store height
-
-   \return number of writen features
-   \return -1 on error
  */
-int trans3d(struct Map_info *In, struct Map_info *Out, int type,
+void trans3d(struct Map_info *In, struct Map_info *Out, int type,
 	    const char *field_name, const char *zcolumn)
 {
     int ltype, line;
@@ -51,28 +48,25 @@ int trans3d(struct Map_info *In, struct Map_info *Out, int type,
 
 	Fi = Vect_get_field(Out, field);
 	if (!Fi) {
-	    G_warning(_("Database connection not defined for layer <%s>"),
-		      field_name);
-	    return -1;
+	    G_fatal_error(_("Database connection not defined for layer <%s>"),
+                          field_name);
 	}
 
 	driver = db_start_driver_open_database(Fi->driver, Fi->database);
 	if (!driver) {
-	    G_warning(_("Unable to open database <%s> by driver <%s>"),
-		      Fi->database, Fi->driver);
-	    return -1;
+	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
+                          Fi->database, Fi->driver);
 	}
-
+        db_set_error_handler_driver(driver);
+        
 	/* column type must numeric */
 	ctype = db_column_Ctype(driver, Fi->table, zcolumn);
 	if (ctype == -1) {
-	    G_warning(_("Column <%s> not found in table <%s>"),
-		      zcolumn, Fi->table);
-	    return -1;
+	    G_fatal_error(_("Column <%s> not found in table <%s>"),
+                          zcolumn, Fi->table);
 	}
 	if (ctype != DB_C_TYPE_INT && ctype != DB_C_TYPE_DOUBLE) {
-	    G_warning(_("Column must be numeric"));
-	    return -1;
+	    G_fatal_error(_("Column must be numeric"));
 	}
 
 	db_begin_transaction(driver);
@@ -88,8 +82,7 @@ int trans3d(struct Map_info *In, struct Map_info *Out, int type,
     while (1) {
 	ltype = Vect_read_next_line(In, Points, Cats);
 	if (ltype == -1) {
-	    G_warning(_("Unable to read vector map"));
-	    return -1;
+	    G_fatal_error(_("Unable to read vector map"));
 	}
 	if (ltype == -2) {	/* EOF */
 	    break;
@@ -155,8 +148,6 @@ int trans3d(struct Map_info *In, struct Map_info *Out, int type,
 
     Vect_destroy_line_struct(Points);
     Vect_destroy_cats_struct(Cats);
-
-    return line - 1;
 }
 
 int srch(const void *pa, const void *pb)