Commit: cec83e92e6160adf1e39e0173c77743cb1ff1be7
Author: Philipp Oeser
Date:   Mon Nov 19 15:24:32 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBcec83e92e6160adf1e39e0173c77743cb1ff1be7

Fix T57884: Triangle count is incorrect when above around 2 billion

Maniphest Tasks: T57884

Differential Revision: https://developer.blender.org/D3962

===================================================================

M       source/blender/blenlib/BLI_string.h
M       source/blender/blenlib/intern/string.c
M       source/blender/editors/space_info/info_stats.c

===================================================================

diff --git a/source/blender/blenlib/BLI_string.h 
b/source/blender/blenlib/BLI_string.h
index eef4e0647aa..2fb8f045841 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -33,6 +33,7 @@
  */
 
 #include <stdarg.h>
+#include <inttypes.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -71,6 +72,7 @@ char *BLI_sprintfN(const char *__restrict format, ...) 
ATTR_WARN_UNUSED_RESULT A
 size_t BLI_strescape(char *__restrict dst, const char *__restrict src, const 
size_t maxncpy) ATTR_NONNULL();
 
 size_t BLI_str_format_int_grouped(char dst[16], int num) ATTR_NONNULL();
+size_t BLI_str_format_uint64_grouped(char dst[16], uint64_t num) 
ATTR_NONNULL();
 void   BLI_str_format_byte_unit(char dst[15], long long int size, const bool 
base_10) ATTR_NONNULL();
 
 int BLI_strcaseeq(const char *a, const char *b) ATTR_WARN_UNUSED_RESULT 
ATTR_NONNULL();
diff --git a/source/blender/blenlib/intern/string.c 
b/source/blender/blenlib/intern/string.c
index 938728aa4bb..3deab9b2ae9 100644
--- a/source/blender/blenlib/intern/string.c
+++ b/source/blender/blenlib/intern/string.c
@@ -35,6 +35,7 @@
 #include <stdlib.h>
 #include <stdarg.h>
 #include <ctype.h>
+#include <inttypes.h>
 
 #include "MEM_guardedalloc.h"
 
@@ -975,24 +976,13 @@ size_t BLI_str_partition_ex(
        return end ? (size_t)(end - str) : strlen(str);
 }
 
-/**
- * Format ints with decimal grouping.
- * 1000 -> 1,000
- *
- * \param dst  The resulting string
- * \param num  Number to format
- * \return The length of \a dst
- */
-size_t BLI_str_format_int_grouped(char dst[16], int num)
+size_t BLI_str_format_int_grouped_ex(char src[16], char dst[16], int num_len)
 {
-       char src[16];
        char *p_src = src;
        char *p_dst = dst;
 
        const char separator = ',';
-       int num_len, commas;
-
-       num_len = sprintf(src, "%d", num);
+       int commas;
 
        if (*p_src == '-') {
                *p_dst++ = *p_src++;
@@ -1010,6 +1000,38 @@ size_t BLI_str_format_int_grouped(char dst[16], int num)
        return (size_t)(p_dst - dst);
 }
 
+/**
+ * Format ints with decimal grouping.
+ * 1000 -> 1,000
+ *
+ * \param dst  The resulting string
+ * \param num  Number to format
+ * \return The length of \a dst
+ */
+size_t BLI_str_format_int_grouped(char dst[16], int num)
+{
+       char src[16];
+       int num_len = sprintf(src, "%d", num);
+
+       return BLI_str_format_int_grouped_ex(src, dst, num_len);
+}
+
+/**
+ * Format uint64_t with decimal grouping.
+ * 1000 -> 1,000
+ *
+ * \param dst  The resulting string
+ * \param num  Number to format
+ * \return The length of \a dst
+ */
+size_t BLI_str_format_uint64_grouped(char dst[16], uint64_t num)
+{
+       char src[16];
+       int num_len = sprintf(src, "%"PRIu64"",num);
+
+       return BLI_str_format_int_grouped_ex(src, dst, num_len);
+}
+
 /**
  * Format a size in bytes using binary units.
  * 1000 -> 1 KB
diff --git a/source/blender/editors/space_info/info_stats.c 
b/source/blender/editors/space_info/info_stats.c
index 1848a22a619..c842ac07eef 100644
--- a/source/blender/editors/space_info/info_stats.c
+++ b/source/blender/editors/space_info/info_stats.c
@@ -70,14 +70,14 @@
 #define MAX_INFO_NUM_LEN 16
 
 typedef struct SceneStats {
-       int totvert, totvertsel;
-       int totedge, totedgesel;
-       int totface, totfacesel;
-       int totbone, totbonesel;
-       int totobj,  totobjsel;
-       int totlamp, totlampsel;
-       int tottri;
-       int totgplayer, totgpframe, totgpstroke, totgppoint;
+       uint64_t totvert, totvertsel;
+       uint64_t totedge, totedgesel;
+       uint64_t totface, totfacesel;
+       uint64_t totbone, totbonesel;
+       uint64_t totobj,  totobjsel;
+       uint64_t totlamp, totlampsel;
+       uint64_t tottri;
+       uint64_t totgplayer, totgpframe, totgpstroke, totgppoint;
 
        char infostr[MAX_INFO_LEN];
 } SceneStats;
@@ -450,7 +450,7 @@ static void stats_string(ViewLayer *view_layer)
 
        /* Generate formatted numbers */
 #define SCENE_STATS_FMT_INT(_id) \
-       BLI_str_format_int_grouped(stats_fmt._id, stats->_id)
+       BLI_str_format_uint64_grouped(stats_fmt._id, stats->_id)
 
        SCENE_STATS_FMT_INT(totvert);
        SCENE_STATS_FMT_INT(totvertsel);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to