|
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++; |
|