|
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 | +#ifdefHAVE_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 | +elseif (pg_strncasecmp(num,"-Infinity",9)==0) |
| 345 | +{ |
| 346 | +val=-get_float4_infinity(); |
| 347 | +endptr=num+9; |
| 348 | +} |
| 349 | +elseif (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((unsignedchar)*endptr))
|
333 | 359 | endptr++;
|
@@ -495,6 +521,32 @@ float8in(PG_FUNCTION_ARGS)
|
495 | 521 | }
|
496 | 522 | #endif/* HAVE_BUGGY_SOLARIS_STRTOD */
|
497 | 523 |
|
| 524 | +#ifdefHAVE_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 | +elseif (pg_strncasecmp(num,"-Infinity",9)==0) |
| 538 | +{ |
| 539 | +val=-get_float8_infinity(); |
| 540 | +endptr=num+9; |
| 541 | +} |
| 542 | +elseif (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((unsignedchar)*endptr))
|
500 | 552 | endptr++;
|
|