summaryrefslogtreecommitdiffstats
path: root/base/format_macros.h
diff options
context:
space:
mode:
authoragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-29 17:58:25 +0000
committeragl@chromium.org <agl@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-29 17:58:25 +0000
commitdce5df54b85ca90d4bd2d2a04c9f78d3a149072c (patch)
treedaf26e83779b6492f9c83e3f2f4d8874990e25fe /base/format_macros.h
parent8e064c0d4889fc93fdc28dec7745002aadb668dc (diff)
downloadchromium_src-dce5df54b85ca90d4bd2d2a04c9f78d3a149072c.zip
chromium_src-dce5df54b85ca90d4bd2d2a04c9f78d3a149072c.tar.gz
chromium_src-dce5df54b85ca90d4bd2d2a04c9f78d3a149072c.tar.bz2
Use C99 standard format macros for 64-bit values.
Currently we have several uses of %I64d in format strings to indicate a 64-bit value. This does not work on Mac or Linux, where 'I' indicates the use of locale specific digits. Instead, we introduce base/format_macros.h which mimic the C99 standard macros for 64-bit values in a cross-platform manner. Dean pointed out that V8 is handling this themselves rather than use inttypes.h. Maybe we'll end up going down the same path but, for the moment, we'll try and do it the 'correct' way and see how it works out. http://codereview.chromium.org/147154 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19500 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/format_macros.h')
-rw-r--r--base/format_macros.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/base/format_macros.h b/base/format_macros.h
new file mode 100644
index 0000000..4b713ef
--- /dev/null
+++ b/base/format_macros.h
@@ -0,0 +1,50 @@
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef BASE_FORMAT_MACROS_H_
+#define BASE_FORMAT_MACROS_H_
+
+// This file defines the C99 format macros for 64-bit values. If you wish to
+// print a 64-bit value in a portable way do:
+// int64_t value;
+// printf("xyz:%" PRId64, value);
+//
+// For wide strings, prepend "Wide" to the macro:
+// int64_t value;
+// StringPrintf(L"xyz: %" WidePRId64, value);
+
+#include "build/build_config.h"
+
+#if defined(OS_POSIX)
+
+#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>
+
+// GCC will concatenate wide and narrow strings correctly, so nothing needs to
+// be done here.
+#define WidePRId64 PRId64
+#define WidePRIu64 PRIu64
+#define WidePRIx64 PRIx64
+
+#else // OS_WIN
+
+#define PRId64 "I64d"
+#define PRIu64 "I64u"
+#define PRIx64 "I64x"
+
+#define WidePRId64 L"I64d"
+#define WidePRIu64 L"I64u"
+#define WidePRIx64 L"I64x"
+
+#endif
+
+#endif // !BASE_FORMAT_MACROS_H_