diff --git a/contrib/seg/seg.c b/contrib/seg/seg.c index 5d224b951d83a920efc7fbaa6a48cc608c6ba699..cb0ce4f5cabcacb6b83fb82a451aacfda37cb34c 100644 --- a/contrib/seg/seg.c +++ b/contrib/seg/seg.c @@ -35,12 +35,14 @@ extern int seg_yydebug; */ PG_FUNCTION_INFO_V1(seg_in); PG_FUNCTION_INFO_V1(seg_out); +PG_FUNCTION_INFO_V1(seg_size); PG_FUNCTION_INFO_V1(seg_lower); PG_FUNCTION_INFO_V1(seg_upper); PG_FUNCTION_INFO_V1(seg_center); Datum seg_in(PG_FUNCTION_ARGS); Datum seg_out(PG_FUNCTION_ARGS); +Datum seg_size(PG_FUNCTION_ARGS); Datum seg_lower(PG_FUNCTION_ARGS); Datum seg_upper(PG_FUNCTION_ARGS); Datum seg_center(PG_FUNCTION_ARGS); @@ -81,7 +83,6 @@ bool seg_over_right(SEG * a, SEG * b); SEG *seg_union(SEG * a, SEG * b); SEG *seg_inter(SEG * a, SEG * b); void rt_seg_size(SEG * a, float *sz); -float *seg_size(SEG * a); /* ** Various operators @@ -717,16 +718,12 @@ rt_seg_size(SEG * a, float *size) return; } -float * -seg_size(SEG * a) +Datum +seg_size(PG_FUNCTION_ARGS) { - float *result; - - result = (float *) palloc(sizeof(float)); - - *result = (float) Abs(a->upper - a->lower); + SEG *seg = (SEG *) PG_GETARG_POINTER(0); - return (result); + PG_RETURN_FLOAT4((float) Abs(seg->upper - seg->lower)); }