From 8f99c827d6f19f43c9a7f63b1d7b4139027e7f5d Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Mon, 9 Jan 2012 16:20:13 +0000 Subject: [PATCH] Return typed empties from lwcollection_extract git-svn-id: http://svn.osgeo.org/postgis/trunk@8717 b70326c6-7e19-0410-871a-916f4a2858ee --- liblwgeom/cunit/cu_libgeom.c | 27 ++++++++++++++++++++++++--- liblwgeom/lwcollection.c | 3 ++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/liblwgeom/cunit/cu_libgeom.c b/liblwgeom/cunit/cu_libgeom.c index 27f134713..50bd27e16 100644 --- a/liblwgeom/cunit/cu_libgeom.c +++ b/liblwgeom/cunit/cu_libgeom.c @@ -359,15 +359,36 @@ static void test_lwcollection_extract(void) LWCOLLECTION *col; geom = lwgeom_from_wkt("GEOMETRYCOLLECTION(POINT(0 0))", LW_PARSER_CHECK_NONE); + col = lwcollection_extract((LWCOLLECTION*)geom, 1); CU_ASSERT_EQUAL(col->type, MULTIPOINTTYPE); + lwcollection_free(col); + + col = lwcollection_extract((LWCOLLECTION*)geom, 2); + CU_ASSERT_EQUAL(col->type, MULTILINETYPE); + lwcollection_free(col); - /* How to properly release 'col' ? - * See http://http://trac.osgeo.org/postgis/ticket/1102 - */ + col = lwcollection_extract((LWCOLLECTION*)geom, 3); + CU_ASSERT_EQUAL(col->type, MULTIPOLYGONTYPE); lwcollection_free(col); + lwgeom_free(geom); + geom = lwgeom_from_wkt("GEOMETRYCOLLECTION EMPTY", LW_PARSER_CHECK_NONE); + + col = lwcollection_extract((LWCOLLECTION*)geom, 1); + CU_ASSERT_EQUAL(col->type, MULTIPOINTTYPE); + lwcollection_free(col); + + col = lwcollection_extract((LWCOLLECTION*)geom, 2); + CU_ASSERT_EQUAL(col->type, MULTILINETYPE); + lwcollection_free(col); + + col = lwcollection_extract((LWCOLLECTION*)geom, 3); + CU_ASSERT_EQUAL(col->type, MULTIPOLYGONTYPE); + lwcollection_free(col); + + lwgeom_free(geom); } static void test_lwgeom_free(void) diff --git a/liblwgeom/lwcollection.c b/liblwgeom/lwcollection.c index 494dd350f..f451f5aae 100644 --- a/liblwgeom/lwcollection.c +++ b/liblwgeom/lwcollection.c @@ -406,7 +406,8 @@ LWCOLLECTION* lwcollection_extract(LWCOLLECTION *col, int type) } else { - outcol = lwcollection_construct_empty(COLLECTIONTYPE, col->srid, FLAGS_GET_Z(col->flags), FLAGS_GET_M(col->flags)); + lwfree(geomlist); + outcol = lwcollection_construct_empty(outtype, col->srid, FLAGS_GET_Z(col->flags), FLAGS_GET_M(col->flags)); } return outcol; -- 2.40.0