Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commiteeaef25

Browse files
committed
Fix some portability issues with new float input code (didn't work on
HPUX 11 ...)
1 parent47fe051 commiteeaef25

File tree

1 file changed

+19
-19
lines changed

1 file changed

+19
-19
lines changed

‎src/backend/utils/adt/float.c

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.102 2004/04/0122:51:31 tgl Exp $
11+
* $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.103 2004/04/0123:52:18 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -282,19 +282,14 @@ float4in(PG_FUNCTION_ARGS)
282282
errno=0;
283283
val=strtod(num,&endptr);
284284

285-
if (errno==ERANGE)
286-
ereport(ERROR,
287-
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
288-
errmsg("\"%s\" is out of range for type real",
289-
orig_num)));
290-
291285
/* did we not see anything that looks like a double? */
292-
if (num==endptr)
286+
if (endptr==num||errno!=0)
293287
{
294288
/*
295289
* C99 requires that strtod() accept NaN and [-]Infinity, but
296-
* not all platforms support that yet. Therefore, we check for
297-
* these inputs ourselves.
290+
* not all platforms support that yet (and some accept them but
291+
* set ERANGE anyway...) Therefore, we check for these inputs
292+
* ourselves.
298293
*/
299294
if (strncasecmp(num,"NaN",3)==0)
300295
{
@@ -311,6 +306,11 @@ float4in(PG_FUNCTION_ARGS)
311306
val=-get_float4_infinity();
312307
endptr=num+9;
313308
}
309+
elseif (errno==ERANGE)
310+
ereport(ERROR,
311+
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
312+
errmsg("\"%s\" is out of range for type real",
313+
orig_num)));
314314
else
315315
ereport(ERROR,
316316
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),
@@ -447,19 +447,14 @@ float8in(PG_FUNCTION_ARGS)
447447
errno=0;
448448
val=strtod(num,&endptr);
449449

450-
if (errno==ERANGE)
451-
ereport(ERROR,
452-
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
453-
errmsg("\"%s\" is out of range for type double precision",
454-
orig_num)));
455-
456450
/* did we not see anything that looks like a double? */
457-
if (num==endptr)
451+
if (endptr==num||errno!=0)
458452
{
459453
/*
460454
* C99 requires that strtod() accept NaN and [-]Infinity, but
461-
* not all platforms support that yet. Therefore, we check for
462-
* these inputs ourselves.
455+
* not all platforms support that yet (and some accept them but
456+
* set ERANGE anyway...) Therefore, we check for these inputs
457+
* ourselves.
463458
*/
464459
if (strncasecmp(num,"NaN",3)==0)
465460
{
@@ -476,6 +471,11 @@ float8in(PG_FUNCTION_ARGS)
476471
val=-get_float8_infinity();
477472
endptr=num+9;
478473
}
474+
elseif (errno==ERANGE)
475+
ereport(ERROR,
476+
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
477+
errmsg("\"%s\" is out of range for type double precision",
478+
orig_num)));
479479
else
480480
ereport(ERROR,
481481
(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp