diff options
| author | millert <> | 2006-01-10 02:23:02 +0000 |
|---|---|---|
| committer | millert <> | 2006-01-10 02:23:02 +0000 |
| commit | 1fdb8b1f0e4af24cd5666eb62466dd2c91fe0353 (patch) | |
| tree | def3d28d782f33a64d960f427012acba3151ab9f /src/lib/libc/stdlib/gcvt.c | |
| parent | f04f970dc1c3a580d4e8264cea6e3ec0159cba66 (diff) | |
| download | openbsd-1fdb8b1f0e4af24cd5666eb62466dd2c91fe0353.tar.gz openbsd-1fdb8b1f0e4af24cd5666eb62466dd2c91fe0353.tar.bz2 openbsd-1fdb8b1f0e4af24cd5666eb62466dd2c91fe0353.zip | |
Use localeconv() to get the locale-specific radix char like printf does.
Diffstat (limited to 'src/lib/libc/stdlib/gcvt.c')
| -rw-r--r-- | src/lib/libc/stdlib/gcvt.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/lib/libc/stdlib/gcvt.c b/src/lib/libc/stdlib/gcvt.c index 87bd843307..9ba932e123 100644 --- a/src/lib/libc/stdlib/gcvt.c +++ b/src/lib/libc/stdlib/gcvt.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: gcvt.c,v 1.7 2006/01/10 02:08:28 millert Exp $ */ | 1 | /* $OpenBSD: gcvt.c,v 1.8 2006/01/10 02:23:02 millert Exp $ */ |
| 2 | 2 | ||
| 3 | /* | 3 | /* |
| 4 | * Copyright (c) 2002, 2003 Todd C. Miller <Todd.Miller@courtesan.com> | 4 | * Copyright (c) 2002, 2003 Todd C. Miller <Todd.Miller@courtesan.com> |
| @@ -20,6 +20,7 @@ | |||
| 20 | * Materiel Command, USAF, under agreement number F39502-99-1-0512. | 20 | * Materiel Command, USAF, under agreement number F39502-99-1-0512. |
| 21 | */ | 21 | */ |
| 22 | 22 | ||
| 23 | #include <locale.h> | ||
| 23 | #include <stdio.h> | 24 | #include <stdio.h> |
| 24 | #include <stdlib.h> | 25 | #include <stdlib.h> |
| 25 | #include <string.h> | 26 | #include <string.h> |
| @@ -31,7 +32,9 @@ gcvt(double value, int ndigit, char *buf) | |||
| 31 | { | 32 | { |
| 32 | char *digits, *dst, *src; | 33 | char *digits, *dst, *src; |
| 33 | int i, decpt, sign; | 34 | int i, decpt, sign; |
| 35 | struct lconv *lconv; | ||
| 34 | 36 | ||
| 37 | lconv = localeconv(); | ||
| 35 | if (ndigit == 0) { | 38 | if (ndigit == 0) { |
| 36 | buf[0] = '\0'; | 39 | buf[0] = '\0'; |
| 37 | return (buf); | 40 | return (buf); |
| @@ -57,7 +60,7 @@ gcvt(double value, int ndigit, char *buf) | |||
| 57 | sign = 0; | 60 | sign = 0; |
| 58 | src = digits; | 61 | src = digits; |
| 59 | *dst++ = *src++; | 62 | *dst++ = *src++; |
| 60 | *dst++ = '.'; /* XXX - locale-specific */ | 63 | *dst++ = *lconv->decimal_point; |
| 61 | while (*src != '\0') | 64 | while (*src != '\0') |
| 62 | *dst++ = *src++; | 65 | *dst++ = *src++; |
| 63 | *dst++ = 'e'; | 66 | *dst++ = 'e'; |
| @@ -90,7 +93,7 @@ gcvt(double value, int ndigit, char *buf) | |||
| 90 | if (*src != '\0') { | 93 | if (*src != '\0') { |
| 91 | if (src == digits) | 94 | if (src == digits) |
| 92 | *dst++ = '0'; /* zero before decimal point */ | 95 | *dst++ = '0'; /* zero before decimal point */ |
| 93 | *dst++ = '.'; /* XXX - locale-specific */ | 96 | *dst++ = *lconv->decimal_point; |
| 94 | for (i = decpt; digits[i] != '\0'; i++) { | 97 | for (i = decpt; digits[i] != '\0'; i++) { |
| 95 | *dst++ = digits[i]; | 98 | *dst++ = digits[i]; |
| 96 | } | 99 | } |
