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