Changeset: 6d2e40264fa3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6d2e40264fa3
Modified Files:
        geom/monetdb5/sfcgal.c
Branch: sfcgal
Log Message:

Proper way to handle errors


diffs (235 lines):

diff --git a/geom/monetdb5/sfcgal.c b/geom/monetdb5/sfcgal.c
--- a/geom/monetdb5/sfcgal.c
+++ b/geom/monetdb5/sfcgal.c
@@ -668,34 +668,47 @@ geom_sfcgal_version(char **ret)
 }
 
 /* SFCGDAL functionality */
+
 str
 geom_sfcgal_extrude(wkb **res, wkb **geom, double *ex, double *ey, double *ez)
 {
        sfcgal_geometry_t *outGeom, *inGeom;
-       GEOSGeom inGeos = wkb2geos(*geom), outGeos;
+       GEOSGeom inGeos = NULL, outGeos = NULL;
+    str ret, msg;
     int srid;
 
-    if (wkbGetSRID(&srid, geom) != MAL_SUCCEED) {
-               *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Tesselate", "GEOSTesselate 
failed");
+       if (wkb_isnil(*geom)) {
+        *res = geos2wkb(GEOSGeom_createEmptyPolygon());
+           return MAL_SUCCEED;
     }
 
-       if (geom_to_sfcgal(&inGeom, inGeos) != MAL_SUCCEED) {
+    if ( !(inGeos = wkb2geos(*geom)) ) {
+        *res = NULL;
+               return createException(MAL, "geom.Extrude", "wkb2geos failed");
+    }
+    if ((ret = wkbGetSRID(&srid, geom)) != MAL_SUCCEED) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Extrude", "GEOSExtrude 
failed");
+        msg = createException(MAL, "geom.Extrude", "wkbGetSRID failed: %s", 
ret);
+        GDKfree(ret);
+               return msg;
+    }
+
+       if (( ret = geom_to_sfcgal(&inGeom, inGeos)) != MAL_SUCCEED) {
+               *res = NULL;
+        msg = createException(MAL, "geom.Extrude", "geom_to_sfcgal failed:%s", 
ret);
+        GDKfree(ret);
+               return msg;
        }
        if (!(outGeom = sfcgal_geometry_extrude (inGeom, *ex, *ey, *ez))) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Extrude", "GEOSExtrude 
failed");
+               return createException(MAL, "geom.Extrude", 
"sfcgal_geometry_extrude failed");
        }
 
-    if ( sfcgal_to_geom(&outGeos, outGeom, 0, srid, 0) != MAL_SUCCEED) {
+    if ( ( ret = sfcgal_to_geom(&outGeos, outGeom, 0, srid, 0)) != 
MAL_SUCCEED) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Extrude", "GEOSExtrude 
failed");
+               msg = createException(MAL, "geom.Extrude", "GEOSExtrude 
failed:%s", ret);
+        GDKfree(ret);
+        return msg;
     }
 
        *res = geos2wkb(outGeos);
@@ -706,30 +719,42 @@ str
 geom_sfcgal_straightSkeleton(wkb **res, wkb **geom)
 {
        sfcgal_geometry_t *outGeom, *inGeom;
-       GEOSGeom inGeos = wkb2geos(*geom), outGeos;
+       GEOSGeom inGeos = NULL, outGeos = NULL;
+    str ret, msg;
     int srid;
 
-    if (wkbGetSRID(&srid, geom) != MAL_SUCCEED) {
-               *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Tesselate", "GEOSTesselate 
failed");
+       if (wkb_isnil(*geom)) {
+        *res = geos2wkb(GEOSGeom_createEmptyPolygon());
+           return MAL_SUCCEED;
     }
 
-       if (geom_to_sfcgal(&inGeom, inGeos) != MAL_SUCCEED) {
+    if ( !(inGeos = wkb2geos(*geom)) ) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.StraightSkeleton", 
"GEOSStraightSkeleton failed");
+               return createException(MAL, "geom.StraightSkeleton", "wkb2geos 
failed");
+    }
+    if ((ret = wkbGetSRID(&srid, geom)) != MAL_SUCCEED) {
+               *res = NULL;
+               msg = createException(MAL, "geom.Tesselate", "wkbGetSRID 
failed:%s", ret);
+        GDKfree(ret);
+        return msg;
+    }
+
+       if ( (ret = geom_to_sfcgal(&inGeom, inGeos)) != MAL_SUCCEED) {
+               *res = NULL;
+               msg = createException(MAL, "geom.StraightSkeleton", 
"geom_to_sfcgal failed:%s", ret);
+        GDKfree(ret);
+        return msg;
        }
        if (!(outGeom = sfcgal_geometry_straight_skeleton(inGeom))) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.StraightSkeleton", 
"GEOSStraightSkeleton failed");
+               return createException(MAL, "geom.StraightSkeleton", 
"sfcgal_geometry_straight_skeleton failed");
        }
 
-    if ( sfcgal_to_geom(&outGeos, outGeom, 0, srid, 0) != MAL_SUCCEED) {
+    if ( (ret = sfcgal_to_geom(&outGeos, outGeom, 0, srid, 0)) != MAL_SUCCEED) 
{
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Extrude", "GEOSExtrude 
failed");
+               msg = createException(MAL, "geom.Extrude", "sfcgal_to_geom 
failed:%s", ret);
+        GDKfree(ret);
+        return msg;
     }
 
        *res = geos2wkb(outGeos);
@@ -740,30 +765,42 @@ str
 geom_sfcgal_tesselate(wkb **res, wkb **geom)
 {
        sfcgal_geometry_t *outGeom, *inGeom;
-       GEOSGeom inGeos = wkb2geos(*geom), outGeos;
+       GEOSGeom inGeos = NULL, outGeos = NULL;
+    str ret, msg;
     int srid;
 
-    if (wkbGetSRID(&srid, geom) != MAL_SUCCEED) {
-               *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Tesselate", "GEOSTesselate 
failed");
+       if (wkb_isnil(*geom)) {
+        *res = geos2wkb(GEOSGeom_createEmptyPolygon());
+           return MAL_SUCCEED;
     }
 
-       if (geom_to_sfcgal(&inGeom, inGeos) != MAL_SUCCEED) {
+    if ( !(inGeos = wkb2geos(*geom)) ) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Tesselate", "GEOSTesselate 
failed");
+               return createException(MAL, "geom.Tesselate", "wkb2geos 
failed");
+    }
+    if ( (ret = wkbGetSRID(&srid, geom)) != MAL_SUCCEED) {
+               *res = NULL;
+               msg = createException(MAL, "geom.Tesselate", "wkbGetSRID 
failed:%s", ret);
+        GDKfree(ret);
+        return msg;
+    }
+
+       if ( (ret = geom_to_sfcgal(&inGeom, inGeos)) != MAL_SUCCEED) {
+               *res = NULL;
+               msg = createException(MAL, "geom.Tesselate", "geom_to_sfcgal 
failed:%s", ret);
+        GDKfree(ret);
+        return msg;
        }
        if (!(outGeom = sfcgal_geometry_tesselate(inGeom))) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Tesselate", "GEOSTesselate 
failed");
+               return createException(MAL, "geom.Tesselate", 
"sfcgal_geometry_tesselate failed");
        }
 
-    if ( sfcgal_to_geom(&outGeos, outGeom, 0, srid, 0) != MAL_SUCCEED) {
+    if (  (ret = sfcgal_to_geom(&outGeos, outGeom, 0, srid, 0)) != 
MAL_SUCCEED) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Tesselate", "GEOSTesselate 
failed");
+               msg = createException(MAL, "geom.Tesselate", "sfcgal_to_geom 
failed:%s", ret);
+        GDKfree(ret);
+        return msg;
     }
 
        *res = geos2wkb(outGeos);
@@ -774,33 +811,44 @@ str
 geom_sfcgal_triangulate2DZ(wkb **res, wkb **geom, int *flag)
 {
        sfcgal_geometry_t *outGeom, *inGeom;
-       GEOSGeom inGeos = wkb2geos(*geom), outGeos;
+       GEOSGeom inGeos = NULL, outGeos = NULL;
+    str ret, msg;
     int srid;
 
-    if (wkbGetSRID(&srid, geom) != MAL_SUCCEED) {
-               *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Triangulate2DZ", 
"GEOSTriangulate2DZ failed");
+       if (wkb_isnil(*geom)) {
+        *res = geos2wkb(GEOSGeom_createEmptyPolygon());
+           return MAL_SUCCEED;
     }
 
-       if (geom_to_sfcgal(&inGeom, inGeos) != MAL_SUCCEED) {
+    if ( !(inGeos = wkb2geos(*geom)) ) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Triangulate2DZ", 
"GEOSTriangulate2DZ failed");
+               return createException(MAL, "geom.Triangulate2DZ", "wkb2geos 
failed");
+    }
+    if ( (ret = wkbGetSRID(&srid, geom)) != MAL_SUCCEED) {
+               *res = NULL;
+               msg = createException(MAL, "geom.Triangulate2DZ", "wkbGetSRID 
failed:%s", ret);
+        GDKfree(ret);
+        return msg;
+    }
+
+       if ( (ret = geom_to_sfcgal(&inGeom, inGeos)) != MAL_SUCCEED) {
+               *res = NULL;
+               msg = createException(MAL, "geom.Triangulate2DZ", 
"geom_to_sfcgal failed:%s", ret);
+        GDKfree(ret);
+        return msg;
        }
 
-    //TODO
        if (!(outGeom = sfcgal_geometry_triangulate_2dz(inGeom))) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Tesselate", "GEOSTesselate 
failed");
+               return createException(MAL, "geom.Tesselate", 
"sfcgal_geometry_triangulate_2dz failed");
        }
 
 
-    if ( sfcgal_to_geom(&outGeos, outGeom, 0, srid, *flag) != MAL_SUCCEED) {
+    if (  (ret = sfcgal_to_geom(&outGeos, outGeom, 0, srid, *flag)) != 
MAL_SUCCEED) {
                *res = NULL;
-        //TODO: free ret
-               return createException(MAL, "geom.Triangulate2DZ", 
"GEOSTriangulate2DZ failed");
+               msg = createException(MAL, "geom.Triangulate2DZ", 
"sfcgal_to_geom failed:%s", ret);
+        GDKfree(ret);
+        return msg;
     }
 
        *res = geos2wkb(outGeos);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to