Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b2c04d5

Browse files
committed
Work around buggy strtod on (some versions of?) IRIX. Combination of
proposed patches from John Jorgensen and Steve Singer.
1 parent 9e6c358 commit b2c04d5

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed

src/backend/utils/adt/float.c

Lines changed: 53 additions & 1 deletion
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.129 2006/10/04 00:29:58 momjian Exp $
11+
* $PostgreSQL: pgsql/src/backend/utils/adt/float.c,v 1.130 2006/10/05 01:40:45 tgl Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -328,6 +328,32 @@ float4in(PG_FUNCTION_ARGS)
328328
}
329329
#endif /* HAVE_BUGGY_SOLARIS_STRTOD */
330330

331+
#ifdef HAVE_BUGGY_IRIX_STRTOD
332+
/*
333+
* In some IRIX versions, strtod() recognizes only "inf", so if the
334+
* input is "infinity" we have to skip over "inity". Also, it may
335+
* return positive infinity for "-inf".
336+
*/
337+
if (isinf(val))
338+
{
339+
if (pg_strncasecmp(num, "Infinity", 8) == 0)
340+
{
341+
val = get_float4_infinity();
342+
endptr = num + 8;
343+
}
344+
else if (pg_strncasecmp(num, "-Infinity", 9) == 0)
345+
{
346+
val = -get_float4_infinity();
347+
endptr = num + 9;
348+
}
349+
else if (pg_strncasecmp(num, "-inf", 4) == 0)
350+
{
351+
val = -get_float4_infinity();
352+
endptr = num + 4;
353+
}
354+
}
355+
#endif /* HAVE_BUGGY_IRIX_STRTOD */
356+
331357
/* skip trailing whitespace */
332358
while (*endptr != '\0' && isspace((unsigned char) *endptr))
333359
endptr++;
@@ -495,6 +521,32 @@ float8in(PG_FUNCTION_ARGS)
495521
}
496522
#endif /* HAVE_BUGGY_SOLARIS_STRTOD */
497523

524+
#ifdef HAVE_BUGGY_IRIX_STRTOD
525+
/*
526+
* In some IRIX versions, strtod() recognizes only "inf", so if the
527+
* input is "infinity" we have to skip over "inity". Also, it may
528+
* return positive infinity for "-inf".
529+
*/
530+
if (isinf(val))
531+
{
532+
if (pg_strncasecmp(num, "Infinity", 8) == 0)
533+
{
534+
val = get_float8_infinity();
535+
endptr = num + 8;
536+
}
537+
else if (pg_strncasecmp(num, "-Infinity", 9) == 0)
538+
{
539+
val = -get_float8_infinity();
540+
endptr = num + 9;
541+
}
542+
else if (pg_strncasecmp(num, "-inf", 4) == 0)
543+
{
544+
val = -get_float8_infinity();
545+
endptr = num + 4;
546+
}
547+
}
548+
#endif /* HAVE_BUGGY_IRIX_STRTOD */
549+
498550
/* skip trailing whitespace */
499551
while (*endptr != '\0' && isspace((unsigned char) *endptr))
500552
endptr++;

src/include/port/irix.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,7 @@
1-
/* $PostgreSQL: pgsql/src/include/port/irix.h,v 1.3 2006/03/11 04:38:38 momjian Exp $ */
1+
/* $PostgreSQL: pgsql/src/include/port/irix.h,v 1.4 2006/10/05 01:40:45 tgl Exp $ */
2+
3+
/*
4+
* IRIX 6.5.26f and 6.5.22f (at least) have a strtod() that accepts
5+
* "infinity", but leaves endptr pointing to "inity".
6+
*/
7+
#define HAVE_BUGGY_IRIX_STRTOD

0 commit comments

Comments
 (0)