]> granicus.if.org Git - postgis/commitdiff
Varlena handling cleanups
authorSandro Santilli <strk@keybit.net>
Fri, 31 Dec 2004 09:04:17 +0000 (09:04 +0000)
committerSandro Santilli <strk@keybit.net>
Fri, 31 Dec 2004 09:04:17 +0000 (09:04 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@1202 b70326c6-7e19-0410-871a-916f4a2858ee

lwgeom/lwgeom_geos.c
lwgeom/lwgeom_inout.c

index 4222474d570c049ea1f73fc545d28f836884ba21..14275afdb6b3cd47f285ca2c8df53705bc5c0e8d 100644 (file)
@@ -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);
        }
index e5f98f1e21fcd4d4f4cb1f660ccb57cfdd962f64..760e62a1f1a7f6d542a950bc6b69137fe3384f77 100644 (file)
@@ -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>) - type should be 'XDR' or 'NDR'.  type length is %i",VARSIZE(type) -4);
+                       elog(ERROR,"asbinary(geometry, <type>) - 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),