|
8 | 8 | *
|
9 | 9 | *
|
10 | 10 | * 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 $ |
12 | 12 | *
|
13 | 13 | *-------------------------------------------------------------------------
|
14 | 14 | */
|
@@ -328,6 +328,32 @@ float4in(PG_FUNCTION_ARGS)
|
328 | 328 | }
|
329 | 329 | #endif /* HAVE_BUGGY_SOLARIS_STRTOD */
|
330 | 330 |
|
| 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 | + |
331 | 357 | /* skip trailing whitespace */
|
332 | 358 | while (*endptr != '\0' && isspace((unsigned char) *endptr))
|
333 | 359 | endptr++;
|
@@ -495,6 +521,32 @@ float8in(PG_FUNCTION_ARGS)
|
495 | 521 | }
|
496 | 522 | #endif /* HAVE_BUGGY_SOLARIS_STRTOD */
|
497 | 523 |
|
| 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 | + |
498 | 550 | /* skip trailing whitespace */
|
499 | 551 | while (*endptr != '\0' && isspace((unsigned char) *endptr))
|
500 | 552 | endptr++;
|
|
0 commit comments