Daniel Lehman : msvcp: Sync num_put<> put_double.

Alexandre Julliard julliard at winehq.org
Fri Oct 19 13:33:53 CDT 2012


Module: wine
Branch: master
Commit: 9fb5f9e96535e3f51bea34b402f1bdbb6f938081
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9fb5f9e96535e3f51bea34b402f1bdbb6f938081

Author: Daniel Lehman <dlehman at esri.com>
Date:   Thu Oct 18 14:27:01 2012 -0700

msvcp: Sync num_put<> put_double.

---

 dlls/msvcp100/locale.c |   17 +++++++++++++----
 dlls/msvcp60/locale.c  |   17 +++++++++++++----
 dlls/msvcp71/locale.c  |   17 +++++++++++++----
 3 files changed, 39 insertions(+), 12 deletions(-)

diff --git a/dlls/msvcp100/locale.c b/dlls/msvcp100/locale.c
index 5c2d05c..2ae74e0 100644
--- a/dlls/msvcp100/locale.c
+++ b/dlls/msvcp100/locale.c
@@ -6071,6 +6071,11 @@ ostreambuf_iterator_char* __thiscall num_put_char_put_ulong(const num_put *this,
     return call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v);
 }
 
+static inline streamsize get_precision(const ios_base *base)
+{
+    return base->prec <= 0 && !(base->fmtfl & FMTFLAG_fixed) ? 6 : base->prec;
+}
+
 /* ?do_put@?$num_put at DV?$ostreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@AAVios_base at 2@DN at Z */
 /* ?do_put@?$num_put at DV?$ostreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@AEAVios_base at 2@DN at Z */
 /* ?do_put@?$num_put at DV?$ostreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@AAVios_base at 2@DO at Z */
@@ -6088,11 +6093,13 @@ ostreambuf_iterator_char* __thiscall num_put_char_do_put_double(const num_put *t
     char *tmp;
     char fmt[8]; /* strlen("%+#.*lg")+1 */
     int size;
+    streamsize prec;
 
     TRACE("(%p %p %p %d %lf)\n", this, ret, base, fill, v);
 
     num_put_char__Ffmt(this, fmt, '\0', base->fmtfl);
-    size = _scprintf(fmt, base->prec, v);
+    prec = get_precision(base);
+    size = _scprintf(fmt, prec, v);
 
     /* TODO: don't use dynamic allocation */
     tmp = MSVCRT_operator_new(size*2);
@@ -6100,7 +6107,7 @@ ostreambuf_iterator_char* __thiscall num_put_char_do_put_double(const num_put *t
         ERR("Out of memory\n");
         throw_exception(EXCEPTION_BAD_ALLOC, NULL);
     }
-    num_put_char_fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, base->prec, v));
+    num_put_char_fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, prec, v));
     MSVCRT_operator_delete(tmp);
     return ret;
 }
@@ -6907,11 +6914,13 @@ ostreambuf_iterator_wchar* __thiscall num_put_short_do_put_double(const num_put
     char *tmp;
     char fmt[8]; /* strlen("%+#.*lg")+1 */
     int size;
+    streamsize prec;
 
     TRACE("(%p %p %p %d %lf)\n", this, ret, base, fill, v);
 
     num_put_wchar__Ffmt(this, fmt, '\0', base->fmtfl);
-    size = _scprintf(fmt, base->prec, v);
+    prec = get_precision(base);
+    size = _scprintf(fmt, prec, v);
 
     /* TODO: don't use dynamic allocation */
     tmp = MSVCRT_operator_new(size*2);
@@ -6919,7 +6928,7 @@ ostreambuf_iterator_wchar* __thiscall num_put_short_do_put_double(const num_put
         ERR("Out of memory\n");
         throw_exception(EXCEPTION_BAD_ALLOC, NULL);
     }
-    num_put__fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, base->prec, v),
+    num_put__fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, prec, v),
             numpunct_short_use_facet(base->loc));
     MSVCRT_operator_delete(tmp);
     return ret;
diff --git a/dlls/msvcp60/locale.c b/dlls/msvcp60/locale.c
index 2fc9bd0..72b994b 100644
--- a/dlls/msvcp60/locale.c
+++ b/dlls/msvcp60/locale.c
@@ -6136,6 +6136,11 @@ ostreambuf_iterator_char* __thiscall num_put_char_put_ulong(const num_put *this,
     return call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v);
 }
 
+static inline streamsize get_precision(const ios_base *base)
+{
+    return base->prec <= 0 && !(base->fmtfl & FMTFLAG_fixed) ? 6 : base->prec;
+}
+
 /* ?do_put@?$num_put at DV?$ostreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@AAVios_base at 2@DN at Z */
 /* ?do_put@?$num_put at DV?$ostreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@AEAVios_base at 2@DN at Z */
 /* ?do_put@?$num_put at DV?$ostreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@AAVios_base at 2@DO at Z */
@@ -6153,11 +6158,13 @@ ostreambuf_iterator_char* __thiscall num_put_char_do_put_double(const num_put *t
     char *tmp;
     char fmt[8]; /* strlen("%+#.*lg")+1 */
     int size;
+    streamsize prec;
 
     TRACE("(%p %p %p %d %lf)\n", this, ret, base, fill, v);
 
     num_put_char__Ffmt(this, fmt, '\0', base->fmtfl);
-    size = _scprintf(fmt, base->prec, v);
+    prec = get_precision(base);
+    size = _scprintf(fmt, prec, v);
 
     /* TODO: don't use dynamic allocation */
     tmp = MSVCRT_operator_new(size*2);
@@ -6165,7 +6172,7 @@ ostreambuf_iterator_char* __thiscall num_put_char_do_put_double(const num_put *t
         ERR("Out of memory\n");
         throw_exception(EXCEPTION_BAD_ALLOC, NULL);
     }
-    num_put_char_fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, base->prec, v));
+    num_put_char_fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, prec, v));
     MSVCRT_operator_delete(tmp);
     return ret;
 }
@@ -6928,11 +6935,13 @@ ostreambuf_iterator_wchar* __thiscall num_put_short_do_put_double(const num_put
     char *tmp;
     char fmt[8]; /* strlen("%+#.*lg")+1 */
     int size;
+    streamsize prec;
 
     TRACE("(%p %p %p %d %lf)\n", this, ret, base, fill, v);
 
     num_put_wchar__Ffmt(this, fmt, '\0', base->fmtfl);
-    size = _scprintf(fmt, base->prec, v);
+    prec = get_precision(base);
+    size = _scprintf(fmt, prec, v);
 
     /* TODO: don't use dynamic allocation */
     tmp = MSVCRT_operator_new(size*2);
@@ -6940,7 +6949,7 @@ ostreambuf_iterator_wchar* __thiscall num_put_short_do_put_double(const num_put
         ERR("Out of memory\n");
         throw_exception(EXCEPTION_BAD_ALLOC, NULL);
     }
-    num_put__fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, base->prec, v),
+    num_put__fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, prec, v),
             numpunct_short_use_facet(base->loc));
     MSVCRT_operator_delete(tmp);
     return ret;
diff --git a/dlls/msvcp71/locale.c b/dlls/msvcp71/locale.c
index 658cdb8..01abd55 100644
--- a/dlls/msvcp71/locale.c
+++ b/dlls/msvcp71/locale.c
@@ -6465,6 +6465,11 @@ ostreambuf_iterator_char* __thiscall num_put_char_put_ulong(const num_put *this,
     return call_num_put_char_do_put_ulong(this, ret, dest, base, fill, v);
 }
 
+static inline streamsize get_precision(const ios_base *base)
+{
+    return base->prec <= 0 && !(base->fmtfl & FMTFLAG_fixed) ? 6 : base->prec;
+}
+
 /* ?do_put@?$num_put at DV?$ostreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@AAVios_base at 2@DN at Z */
 /* ?do_put@?$num_put at DV?$ostreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@MEBA?AV?$ostreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@AEAVios_base at 2@DN at Z */
 /* ?do_put@?$num_put at DV?$ostreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@MBE?AV?$ostreambuf_iterator at DU?$char_traits at D@std@@@2 at V32@AAVios_base at 2@DO at Z */
@@ -6482,11 +6487,13 @@ ostreambuf_iterator_char* __thiscall num_put_char_do_put_double(const num_put *t
     char *tmp;
     char fmt[8]; /* strlen("%+#.*lg")+1 */
     int size;
+    streamsize prec;
 
     TRACE("(%p %p %p %d %lf)\n", this, ret, base, fill, v);
 
     num_put_char__Ffmt(this, fmt, '\0', base->fmtfl);
-    size = _scprintf(fmt, base->prec, v);
+    prec = get_precision(base);
+    size = _scprintf(fmt, prec, v);
 
     /* TODO: don't use dynamic allocation */
     tmp = MSVCRT_operator_new(size*2);
@@ -6494,7 +6501,7 @@ ostreambuf_iterator_char* __thiscall num_put_char_do_put_double(const num_put *t
         ERR("Out of memory\n");
         throw_exception(EXCEPTION_BAD_ALLOC, NULL);
     }
-    num_put_char_fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, base->prec, v));
+    num_put_char_fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, prec, v));
     MSVCRT_operator_delete(tmp);
     return ret;
 }
@@ -7301,11 +7308,13 @@ ostreambuf_iterator_wchar* __thiscall num_put_short_do_put_double(const num_put
     char *tmp;
     char fmt[8]; /* strlen("%+#.*lg")+1 */
     int size;
+    streamsize prec;
 
     TRACE("(%p %p %p %d %lf)\n", this, ret, base, fill, v);
 
     num_put_wchar__Ffmt(this, fmt, '\0', base->fmtfl);
-    size = _scprintf(fmt, base->prec, v);
+    prec = get_precision(base);
+    size = _scprintf(fmt, prec, v);
 
     /* TODO: don't use dynamic allocation */
     tmp = MSVCRT_operator_new(size*2);
@@ -7313,7 +7322,7 @@ ostreambuf_iterator_wchar* __thiscall num_put_short_do_put_double(const num_put
         ERR("Out of memory\n");
         throw_exception(EXCEPTION_BAD_ALLOC, NULL);
     }
-    num_put__fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, base->prec, v),
+    num_put__fput(this, ret, dest, base, fill, tmp, sprintf(tmp, fmt, prec, v),
             numpunct_short_use_facet(base->loc));
     MSVCRT_operator_delete(tmp);
     return ret;




More information about the wine-cvs mailing list