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
|
* 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 */
|
#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 */
|
/* skip trailing whitespace */
|
||||||
while (*endptr != '\0' && isspace((unsigned char) *endptr))
|
while (*endptr != '\0' && isspace((unsigned char) *endptr))
|
||||||
endptr++;
|
endptr++;
|
||||||
|
@ -495,6 +521,32 @@ float8in(PG_FUNCTION_ARGS)
|
||||||
}
|
}
|
||||||
#endif /* HAVE_BUGGY_SOLARIS_STRTOD */
|
#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 */
|
/* skip trailing whitespace */
|
||||||
while (*endptr != '\0' && isspace((unsigned char) *endptr))
|
while (*endptr != '\0' && isspace((unsigned char) *endptr))
|
||||||
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…
Reference in a new issue