From: Tom Lane Date: Sun, 24 Oct 2004 21:47:07 +0000 (+0000) Subject: Replace ad-hoc atof() code with call to float4in, per Andrew Dunstan. X-Git-Tag: REL8_0_0BETA4~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a1f585139b3d7a1317dd5b416c6a1b51747176a0;p=thirdparty%2Fpostgresql.git Replace ad-hoc atof() code with call to float4in, per Andrew Dunstan. --- diff --git a/contrib/seg/expected/seg.out b/contrib/seg/expected/seg.out index cfa8171e681..49f4f7dee5d 100644 --- a/contrib/seg/expected/seg.out +++ b/contrib/seg/expected/seg.out @@ -418,8 +418,7 @@ SELECT '1 e7'::seg AS seg; ERROR: bad seg representation DETAIL: syntax error at or near "e" SELECT '1e700'::seg AS seg; -ERROR: syntax error -DETAIL: numeric value 1e700 unrepresentable +ERROR: "1e700" is out of range for type real -- -- testing the operators -- diff --git a/contrib/seg/segparse.y b/contrib/seg/segparse.y index d0c2f188bc4..8a3b0b0160c 100644 --- a/contrib/seg/segparse.y +++ b/contrib/seg/segparse.y @@ -5,6 +5,8 @@ #include +#include "fmgr.h" +#include "utils/builtins.h" #include "segdata.h" #undef yylex /* failure to redefine yylex will result in calling the */ @@ -129,22 +131,13 @@ deviation: %% -float seg_atof ( char *value ) { - float result; - char *buf = (char *) palloc(256); +float +seg_atof(char *value) +{ + Datum datum; - errno = 0; - sscanf(value, "%f", &result); - - if ( errno ) { - snprintf(buf, 256, "numeric value %s unrepresentable", value); - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("syntax error"), - errdetail("%s", buf))); - } - - return result; + datum = DirectFunctionCall1(float4in, CStringGetDatum(value)); + return DatumGetFloat4(datum); }