[Bf-blender-cvs] [a684165cad4] experimental-build: Fix T57884: Triangle count is incorrect when above around 2 billion
Philipp Oeser
noreply at git.blender.org
Wed Nov 21 15:41:45 CET 2018
Commit: a684165cad4cc3afaf89a2118e44a70555cadfae
Author: Philipp Oeser
Date: Mon Nov 19 15:24:32 2018 +0100
Branches: experimental-build
https://developer.blender.org/rBa684165cad4cc3afaf89a2118e44a70555cadfae
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);
More information about the Bf-blender-cvs
mailing list