msvcrt: Make _ecvt and _fcvt work by using ecvt_r and fcvt_r
Stephen Moehle
smoehle at comcast.net
Sun Oct 15 23:05:37 CDT 2006
Here is my alternative patch for making _ecvt and _fcvt work. This one
just uses ecvt_r and fcvt_r from glibc and is much simpler. This is my
preferred patch.
From: Stephen Moehle <smoehle at comcast.net>
Changelog
msvcrt: Make _ecvt and _fcvt work by using ecvt_r and fcvt_r from glibc.
---
dlls/msvcrt/math.c | 17 +++++++----------
1 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/dlls/msvcrt/math.c b/dlls/msvcrt/math.c
index f06166b..d0d3f29 100644
--- a/dlls/msvcrt/math.c
+++ b/dlls/msvcrt/math.c
@@ -20,6 +20,11 @@
#include "config.h"
#include <stdio.h>
+#ifdef __USE_MISC
+#undef __USE_MISC
+#endif
+#define __USE_MISC
+#include <stdlib.h>
#define __USE_ISOC9X 1
#define __USE_ISOC99 1
#include <math.h>
@@ -855,15 +860,11 @@ double CDECL _nextafter(double num, doub
char * CDECL _ecvt( double number, int ndigits, int *decpt, int *sign )
{
thread_data_t *data = msvcrt_get_thread_data();
- char *dec;
if (!data->efcvt_buffer)
data->efcvt_buffer = MSVCRT_malloc( 80 ); /* ought to be enough */
- snprintf(data->efcvt_buffer, 80, "%.*e", ndigits /* FIXME wrong */,
number);
- *sign = (number < 0);
- dec = strchr(data->efcvt_buffer, '.');
- *decpt = (dec) ? dec - data->efcvt_buffer : -1;
+ ecvt_r(number, ndigits, decpt, sign, data->efcvt_buffer, 80);
return data->efcvt_buffer;
}
@@ -873,15 +874,11 @@ char * CDECL _ecvt( double number, int n
char * CDECL _fcvt( double number, int ndigits, int *decpt, int *sign )
{
thread_data_t *data = msvcrt_get_thread_data();
- char *dec;
if (!data->efcvt_buffer)
data->efcvt_buffer = MSVCRT_malloc( 80 ); /* ought to be enough */
- snprintf(data->efcvt_buffer, 80, "%.*e", ndigits, number);
- *sign = (number < 0);
- dec = strchr(data->efcvt_buffer, '.');
- *decpt = (dec) ? dec - data->efcvt_buffer : -1;
+ fcvt_r(number, ndigits, decpt, sign, data->efcvt_buffer, 80);
return data->efcvt_buffer;
}
--
1.4.2.3
More information about the wine-patches
mailing list