diff options
Diffstat (limited to 'src/lib/libc/stdlib')
| -rw-r--r-- | src/lib/libc/stdlib/ecvt.c | 14 | ||||
| -rw-r--r-- | src/lib/libc/stdlib/gcvt.c | 12 |
2 files changed, 15 insertions, 11 deletions
diff --git a/src/lib/libc/stdlib/ecvt.c b/src/lib/libc/stdlib/ecvt.c index 9289b3bf8a..eb0e428996 100644 --- a/src/lib/libc/stdlib/ecvt.c +++ b/src/lib/libc/stdlib/ecvt.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* $OpenBSD: ecvt.c,v 1.4 2005/08/08 08:05:36 espie Exp $ */ | 1 | /* $OpenBSD: ecvt.c,v 1.5 2006/01/10 16:18:37 millert Exp $ */ |
| 2 | 2 | ||
| 3 | /* | 3 | /* |
| 4 | * Copyright (c) 2002 Todd C. Miller <Todd.Miller@courtesan.com> | 4 | * Copyright (c) 2002, 2006 Todd C. Miller <Todd.Miller@courtesan.com> |
| 5 | * | 5 | * |
| 6 | * Permission to use, copy, modify, and distribute this software for any | 6 | * Permission to use, copy, modify, and distribute this software for any |
| 7 | * purpose with or without fee is hereby granted, provided that the above | 7 | * purpose with or without fee is hereby granted, provided that the above |
| @@ -62,11 +62,11 @@ __cvt(double value, int ndigit, int *decpt, int *sign, int fmode, int pad) | |||
| 62 | } else { | 62 | } else { |
| 63 | p = __dtoa(value, fmode + 2, ndigit, decpt, sign, &rve); | 63 | p = __dtoa(value, fmode + 2, ndigit, decpt, sign, &rve); |
| 64 | if (*decpt == 9999) { | 64 | if (*decpt == 9999) { |
| 65 | /* Nan or Infinity */ | 65 | /* Infinity or Nan, convert to inf or nan like printf */ |
| 66 | *decpt = 0; | 66 | *decpt = 0; |
| 67 | return(p); | 67 | return(*p == 'I' ? "inf" : "nan"); |
| 68 | } | 68 | } |
| 69 | /* make a local copy and adjust rve to be in terms of s */ | 69 | /* Make a local copy and adjust rve to be in terms of s */ |
| 70 | if (pad && fmode) | 70 | if (pad && fmode) |
| 71 | siz += *decpt; | 71 | siz += *decpt; |
| 72 | if ((s = (char *)malloc(siz)) == NULL) | 72 | if ((s = (char *)malloc(siz)) == NULL) |
| @@ -75,8 +75,8 @@ __cvt(double value, int ndigit, int *decpt, int *sign, int fmode, int pad) | |||
| 75 | rve = s + (rve - p); | 75 | rve = s + (rve - p); |
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | /* Add trailing zeros (unless we got NaN or Inf) */ | 78 | /* Add trailing zeros */ |
| 79 | if (pad && *decpt != 9999) { | 79 | if (pad) { |
| 80 | siz -= rve - s; | 80 | siz -= rve - s; |
| 81 | while (--siz) | 81 | while (--siz) |
| 82 | *rve++ = '0'; | 82 | *rve++ = '0'; |
diff --git a/src/lib/libc/stdlib/gcvt.c b/src/lib/libc/stdlib/gcvt.c index 9ba932e123..bc6295c03d 100644 --- a/src/lib/libc/stdlib/gcvt.c +++ b/src/lib/libc/stdlib/gcvt.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* $OpenBSD: gcvt.c,v 1.8 2006/01/10 02:23:02 millert Exp $ */ | 1 | /* $OpenBSD: gcvt.c,v 1.9 2006/01/10 16:18:37 millert Exp $ */ |
| 2 | 2 | ||
| 3 | /* | 3 | /* |
| 4 | * Copyright (c) 2002, 2003 Todd C. Miller <Todd.Miller@courtesan.com> | 4 | * Copyright (c) 2002, 2003, 2006 Todd C. Miller <Todd.Miller@courtesan.com> |
| 5 | * | 5 | * |
| 6 | * Permission to use, copy, modify, and distribute this software for any | 6 | * Permission to use, copy, modify, and distribute this software for any |
| 7 | * purpose with or without fee is hereby granted, provided that the above | 7 | * purpose with or without fee is hereby granted, provided that the above |
| @@ -42,8 +42,12 @@ gcvt(double value, int ndigit, char *buf) | |||
| 42 | 42 | ||
| 43 | digits = __dtoa(value, 2, ndigit, &decpt, &sign, NULL); | 43 | digits = __dtoa(value, 2, ndigit, &decpt, &sign, NULL); |
| 44 | if (decpt == 9999) { | 44 | if (decpt == 9999) { |
| 45 | /* Infinity or NaN, assume buffer is at least ndigit long. */ | 45 | /* |
| 46 | snprintf(buf, ndigit + 1, "%s%s", sign ? "-" : "", digits); | 46 | * Infinity or NaN, convert to inf or nan with sign. |
| 47 | * We assume the buffer is at least ndigit long. | ||
| 48 | */ | ||
| 49 | snprintf(buf, ndigit + 1, "%s%s", sign ? "-" : "", | ||
| 50 | *digits == 'I' ? "inf" : "nan"); | ||
| 47 | return (buf); | 51 | return (buf); |
| 48 | } | 52 | } |
| 49 | 53 | ||
