@@ -33,11 +33,17 @@ extern int seg_yydebug;
3333/*
3434** Input/Output routines
3535*/
36- SEG * seg_in (char * str );
37- char * seg_out (SEG * seg );
38- float4 seg_lower (SEG * seg );
39- float4 seg_upper (SEG * seg );
40- float4 seg_center (SEG * seg );
36+ PG_FUNCTION_INFO_V1 (seg_in );
37+ PG_FUNCTION_INFO_V1 (seg_out );
38+ PG_FUNCTION_INFO_V1 (seg_lower );
39+ PG_FUNCTION_INFO_V1 (seg_upper );
40+ PG_FUNCTION_INFO_V1 (seg_center );
41+
42+ Datum seg_in (PG_FUNCTION_ARGS );
43+ Datum seg_out (PG_FUNCTION_ARGS );
44+ Datum seg_lower (PG_FUNCTION_ARGS );
45+ Datum seg_upper (PG_FUNCTION_ARGS );
46+ Datum seg_center (PG_FUNCTION_ARGS );
4147
4248/*
4349** GiST support methods
@@ -98,9 +104,10 @@ intsignificant_digits(char *s);
98104 * Input/Output functions
99105 *****************************************************************************/
100106
101- SEG *
102- seg_in (char * str )
107+ Datum
108+ seg_in (PG_FUNCTION_ARGS )
103109{
110+ char * str = PG_GETARG_CSTRING (0 );
104111SEG * result = palloc (sizeof (SEG ));
105112
106113seg_scanner_init (str );
@@ -110,18 +117,16 @@ seg_in(char *str)
110117
111118seg_scanner_finish ();
112119
113- return (result );
120+ PG_RETURN_POINTER (result );
114121}
115122
116- char *
117- seg_out (SEG * seg )
123+ Datum
124+ seg_out (PG_FUNCTION_ARGS )
118125{
126+ SEG * seg = (SEG * )PG_GETARG_POINTER (0 );
119127char * result ;
120128char * p ;
121129
122- if (seg == NULL )
123- return (NULL );
124-
125130p = result = (char * )palloc (40 );
126131
127132if (seg -> l_ext == '>' || seg -> l_ext == '<' || seg -> l_ext == '~' )
@@ -153,25 +158,31 @@ seg_out(SEG * seg)
153158}
154159}
155160
156- return (result );
161+ PG_RETURN_CSTRING (result );
157162}
158163
159- float4
160- seg_center (SEG * seg )
164+ Datum
165+ seg_center (PG_FUNCTION_ARGS )
161166{
162- return ((float )seg -> lower + (float )seg -> upper ) /2.0 ;
167+ SEG * seg = (SEG * )PG_GETARG_POINTER (0 );
168+
169+ PG_RETURN_FLOAT4 (((float )seg -> lower + (float )seg -> upper ) /2.0 );
163170}
164171
165- float4
166- seg_lower (SEG * seg )
172+ Datum
173+ seg_lower (PG_FUNCTION_ARGS )
167174{
168- return seg -> lower ;
175+ SEG * seg = (SEG * )PG_GETARG_POINTER (0 );
176+
177+ PG_RETURN_FLOAT4 (seg -> lower );
169178}
170179
171- float4
172- seg_upper (SEG * seg )
180+ Datum
181+ seg_upper (PG_FUNCTION_ARGS )
173182{
174- return seg -> upper ;
183+ SEG * seg = (SEG * )PG_GETARG_POINTER (0 );
184+
185+ PG_RETURN_FLOAT4 (seg -> upper );
175186}
176187
177188