summaryrefslogtreecommitdiff
path: root/core/include/fxcrt/fx_system.h
diff options
context:
space:
mode:
authorBruce Dawson <brucedawson@google.com>2014-11-18 09:55:38 -0800
committerBruce Dawson <brucedawson@google.com>2014-11-18 09:55:38 -0800
commitf4aceedd4da965e62df5340a8f06c36d5fc3bbc1 (patch)
tree6340f0254148444f316bb2cc8267d45f48abe3aa /core/include/fxcrt/fx_system.h
parentcf19caadfa3e7e01d3412d83540e8492b52b31d7 (diff)
downloadpdfium-f4aceedd4da965e62df5340a8f06c36d5fc3bbc1.tar.xz
Fixing format strings to remove 'z' size specifier.
As of the 2013 version VC++ still doesn't support the 'z' size specifier. This makes portable printing of size_t types frustrating. The simplest general solution is to use %u and cast to unsigned. If there was any possibility of the numbers getting larger than 32-bit then we would need better alternatives, but there is not. This was found through code inspection, through /analyze, and through pdfium_test print this non-helpful message: Loaded, parsed and rendered zu pages. Skipped zu bad pages. I can confirm that the fix works on Windows and it should work identically on mac. This is a follow-on to change 02e6ca4c4f. R=tsepez@chromium.org Review URL: https://codereview.chromium.org/738433003
Diffstat (limited to 'core/include/fxcrt/fx_system.h')
-rw-r--r--core/include/fxcrt/fx_system.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/core/include/fxcrt/fx_system.h b/core/include/fxcrt/fx_system.h
index 36050f35dc..355bd74327 100644
--- a/core/include/fxcrt/fx_system.h
+++ b/core/include/fxcrt/fx_system.h
@@ -293,4 +293,35 @@ typedef base::CheckedNumeric<size_t> FX_SAFE_SIZE_T;
#define FX_OVERRIDE
#endif
#endif
+
+// To print a size_t value in a portable way:
+// size_t size;
+// printf("xyz: %" PRIuS, size);
+// The "u" in the macro corresponds to %u, and S is for "size".
+
+#if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
+
+#if (defined(_INTTYPES_H) || defined(_INTTYPES_H_)) && !defined(PRId64)
+#error "inttypes.h has already been included before this header file, but "
+#error "without __STDC_FORMAT_MACROS defined."
+#endif
+
+#if !defined(__STDC_FORMAT_MACROS)
+#define __STDC_FORMAT_MACROS
+#endif
+
+#include <inttypes.h>
+
+#if !defined(PRIuS)
+#define PRIuS "zu"
+#endif
+
+#else // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
+
+#if !defined(PRIuS)
+#define PRIuS "Iu"
+#endif
+
+#endif
+
#endif