mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-03-13 19:57:53 +08:00
Work around buggy strtod on (some versions of?) IRIX. Combination of
proposed patches from John Jorgensen and Steve Singer.
This commit is contained in:
parent
9e6c3582dd
commit
b2c04d5e6b
@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.129 2006/10/04 00:29:58 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.130 2006/10/05 01:40:45 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -328,6 +328,32 @@ float4in(PG_FUNCTION_ARGS)
|
||||
}
|
||||
#endif /* HAVE_BUGGY_SOLARIS_STRTOD */
|
||||
|
||||
#ifdef HAVE_BUGGY_IRIX_STRTOD
|
||||
/*
|
||||
* In some IRIX versions, strtod() recognizes only "inf", so if the
|
||||
* input is "infinity" we have to skip over "inity". Also, it may
|
||||
* return positive infinity for "-inf".
|
||||
*/
|
||||
if (isinf(val))
|
||||
{
|
||||
if (pg_strncasecmp(num, "Infinity", 8) == 0)
|
||||
{
|
||||
val = get_float4_infinity();
|
||||
endptr = num + 8;
|
||||
}
|
||||
else if (pg_strncasecmp(num, "-Infinity", 9) == 0)
|
||||
{
|
||||
val = -get_float4_infinity();
|
||||
endptr = num + 9;
|
||||
}
|
||||
else if (pg_strncasecmp(num, "-inf", 4) == 0)
|
||||
{
|
||||
val = -get_float4_infinity();
|
||||
endptr = num + 4;
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_BUGGY_IRIX_STRTOD */
|
||||
|
||||
/* skip trailing whitespace */
|
||||
while (*endptr != '\0' && isspace((unsigned char) *endptr))
|
||||
endptr++;
|
||||
@ -495,6 +521,32 @@ float8in(PG_FUNCTION_ARGS)
|
||||
}
|
||||
#endif /* HAVE_BUGGY_SOLARIS_STRTOD */
|
||||
|
||||
#ifdef HAVE_BUGGY_IRIX_STRTOD
|
||||
/*
|
||||
* In some IRIX versions, strtod() recognizes only "inf", so if the
|
||||
* input is "infinity" we have to skip over "inity". Also, it may
|
||||
* return positive infinity for "-inf".
|
||||
*/
|
||||
if (isinf(val))
|
||||
{
|
||||
if (pg_strncasecmp(num, "Infinity", 8) == 0)
|
||||
{
|
||||
val = get_float8_infinity();
|
||||
endptr = num + 8;
|
||||
}
|
||||
else if (pg_strncasecmp(num, "-Infinity", 9) == 0)
|
||||
{
|
||||
val = -get_float8_infinity();
|
||||
endptr = num + 9;
|
||||
}
|
||||
else if (pg_strncasecmp(num, "-inf", 4) == 0)
|
||||
{
|
||||
val = -get_float8_infinity();
|
||||
endptr = num + 4;
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_BUGGY_IRIX_STRTOD */
|
||||
|
||||
/* skip trailing whitespace */
|
||||
while (*endptr != '\0' && isspace((unsigned char) *endptr))
|
||||
endptr++;
|
||||
|
@ -1 +1,7 @@
|
||||
/* $PostgreSQL: pgsql/src/include/port/irix.h,v 1.3 2006/03/11 04:38:38 momjian Exp $ */
|
||||
/* $PostgreSQL: pgsql/src/include/port/irix.h,v 1.4 2006/10/05 01:40:45 tgl Exp $ */
|
||||
|
||||
/*
|
||||
* IRIX 6.5.26f and 6.5.22f (at least) have a strtod() that accepts
|
||||
* "infinity", but leaves endptr pointing to "inity".
|
||||
*/
|
||||
#define HAVE_BUGGY_IRIX_STRTOD
|
||||
|
Loading…
x
Reference in New Issue
Block a user