From: Sandro Santilli Date: Fri, 31 Dec 2004 09:04:17 +0000 (+0000) Subject: Varlena handling cleanups X-Git-Tag: pgis_1_0_0RC1~102 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=38c55a2802bfe75f2b242d55a336b2073c291d92;p=postgis Varlena handling cleanups git-svn-id: http://svn.osgeo.org/postgis/trunk@1202 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/lwgeom/lwgeom_geos.c b/lwgeom/lwgeom_geos.c index 4222474d5..14275afdb 100644 --- a/lwgeom/lwgeom_geos.c +++ b/lwgeom/lwgeom_geos.c @@ -1689,7 +1689,7 @@ Datum relate_full(PG_FUNCTION_ARGS) Geometry *g1,*g2; char *relate_str; int len; - char *result; + text *result; #ifdef PROFILE profstart(PROF_QRUN); @@ -1756,12 +1756,13 @@ Datum relate_full(PG_FUNCTION_ARGS) PG_RETURN_NULL(); //never get here } - len = strlen(relate_str) + 4; + len = strlen(relate_str) + VARHDRSZ; result= palloc(len); - *((int *) result) = len; + VARATT_SIZEP(result) = len; + //*((int *) result) = len; - memcpy(result +4, relate_str, len-4); + memcpy(VARDATA(result), relate_str, len-VARHDRSZ); free(relate_str); @@ -2213,7 +2214,7 @@ GEOS2POSTGIS(Geometry *geom, char want3d) lwnotice("GEOS2POSTGIS: lwgeom_serialize_size returned %d", size); #endif - size += 4; // postgresql size header + size += VARHDRSZ; // postgresql size header result = palloc(size); result->size = size; @@ -2224,7 +2225,7 @@ GEOS2POSTGIS(Geometry *geom, char want3d) lwgeom_serialize_buf(lwgeom, SERIALIZED_FORM(result), &retsize); - if ( retsize != size-4 ) + if ( retsize != size-VARHDRSZ ) { lwerror("GEOS2POSTGIS: lwgeom_serialize_buf returned %d, lwgeom_serialize_size returned %d", retsize, size); } diff --git a/lwgeom/lwgeom_inout.c b/lwgeom/lwgeom_inout.c index e5f98f1e2..760e62a1f 100644 --- a/lwgeom/lwgeom_inout.c +++ b/lwgeom/lwgeom_inout.c @@ -169,14 +169,14 @@ Datum LWGEOMFromWKB(PG_FUNCTION_ARGS) size_header = sprintf(sridText,"SRID=%i;",SRID); //SRID text size + wkb size (+1 = NULL term) - size_result = size_header + 2*(wkb_input->size-4) + 1; + size_result = size_header + 2*(wkb_input->size-VARHDRSZ) + 1; wkb_srid_hexized = palloc(size_result); wkb_srid_hexized[0] = 0; // empty strcpy(wkb_srid_hexized, sridText); loc = wkb_srid_hexized + size_header; // points to null in "SRID=#;" - for (t=0; t< (wkb_input->size -4); t++) + for (t=0; t< (wkb_input->size -VARHDRSZ); t++) { deparse_hex( ((unsigned char *) wkb_input)[4 + t], &loc[t*2]); } @@ -229,7 +229,7 @@ Datum WKBFromLWGEOM(PG_FUNCTION_ARGS) type = PG_GETARG_TEXT_P(1); if (VARSIZE(type) < 7) { - elog(ERROR,"asbinary(geometry, ) - type should be 'XDR' or 'NDR'. type length is %i",VARSIZE(type) -4); + elog(ERROR,"asbinary(geometry, ) - type should be 'XDR' or 'NDR'. type length is %i",VARSIZE(type) -VARHDRSZ); PG_RETURN_NULL(); } @@ -262,15 +262,15 @@ Datum WKBFromLWGEOM(PG_FUNCTION_ARGS) //elog(NOTICE, "in WKBFromLWGEOM with WKB (with no 'SRID=#;' = '%s'", hexized_wkb); len_hexized_wkb = strlen(hexized_wkb); - size_result = len_hexized_wkb/2 + 4; + size_result = len_hexized_wkb/2 + VARHDRSZ; result = palloc(size_result); - memcpy(result, &size_result,4); // size header + memcpy(result, &size_result,VARHDRSZ); // size header // have a hexized string, want to make it binary for (t=0; t< (len_hexized_wkb/2); t++) { - ((unsigned char *) result +4)[t] = parse_hex( hexized_wkb + (t*2) ); + ((unsigned char *) result +VARHDRSZ)[t] = parse_hex( hexized_wkb + (t*2) ); } pfree(hexized_wkb_srid); @@ -315,7 +315,7 @@ Datum LWGEOM_addBBOX(PG_FUNCTION_ARGS) result = palloc(size);// 16 for bbox2d - memcpy(result,&size,4); // size + result->size = size; result->type = lwgeom_makeType_full( TYPE_HASZ(old_type), TYPE_HASM(old_type), @@ -380,7 +380,7 @@ Datum LWGEOM_dropBBOX(PG_FUNCTION_ARGS) result = palloc(size);// 16 for bbox2d - memcpy(result,&size,4); // size + result->size = size; result->type = lwgeom_makeType_full( TYPE_HASZ(old_type), TYPE_HASM(old_type),