[goffice] Fix engineering format. [#785669]



commit c7c0383897dfd672ba12e08d7997023e0cee7aa9
Author: Jean Brefort <jean brefort normalesup org>
Date:   Thu Aug 3 19:29:09 2017 +0200

    Fix engineering format. [#785669]

 ChangeLog                 |    5 +++++
 NEWS                      |    3 +++
 goffice/utils/go-format.c |    8 +++++---
 3 files changed, 13 insertions(+), 3 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 680862e..dff7c42 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2017-08-03  Jean Brefort  <jean brefort normalesup org>
+
+       * goffice/utils/go-format.c (printf_engineering): fix engineering format.
+       [#785669]
+
 2017-07-06  Morten Welinder <terra gnome org>
 
        * configure.ac: Post-release bump.
diff --git a/NEWS b/NEWS
index ff0f33b..4d0caaf 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,8 @@
 goffice 0.10.36:
 
+Jean:
+       * Fix engineering format. [#785669]
+
 --------------------------------------------------------------------------
 goffice 0.10.35:
 
diff --git a/goffice/utils/go-format.c b/goffice/utils/go-format.c
index 0954c2b..6719671 100644
--- a/goffice/utils/go-format.c
+++ b/goffice/utils/go-format.c
@@ -2891,6 +2891,7 @@ SUFFIX(printf_engineering) (GString *dst, DOUBLE val, int n, int wd)
 
        exponent = atoi (epos + 1);
        g_string_truncate (dst, epos - dst->str);
+       dot = (char *)strstr (dst->str, decimal->str);
        if (exponent != exponent_guess) {
                /*
                 * We rounded from 9.99Exx to
@@ -2900,11 +2901,13 @@ SUFFIX(printf_engineering) (GString *dst, DOUBLE val, int n, int wd)
                nde = (nde + 1) % wd;
                if (nde == 0)
                        g_string_truncate (dst, dst->len - (wd - 1));
-               else
+               else if (dot) /* only add a 0 when a decimal separator is present,
+                                          * see #785669 */
                        g_string_append_c (dst, '0');
        }
 
-       dot = (char *)strstr (dst->str, decimal->str);
+       /* we need to adjust exponent before any modification to nde, see #785669 */
+       exponent -= nde;
        if (dot) {
                memmove (dot, dot + decimal->len, nde);
                memcpy (dot + nde, decimal->str, decimal->len);
@@ -2914,7 +2917,6 @@ SUFFIX(printf_engineering) (GString *dst, DOUBLE val, int n, int wd)
                        nde--;
                }
        }
-       exponent -= nde;
 
        g_string_append_printf (dst, "E%+d", exponent);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]