1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef BASE_FORMAT_MACROS_H_
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define BASE_FORMAT_MACROS_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// This file defines the format macros for some integer types.
10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// To print a 64-bit value in a portable way:
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//   int64_t value;
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//   printf("xyz:%" PRId64, value);
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The "d" in the macro corresponds to %d; you can also use PRIu64 etc.
15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//
16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// For wide strings, prepend "Wide" to the macro:
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//   int64_t value;
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//   StringPrintf(L"xyz: %" WidePRId64, value);
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// To print a size_t value in a portable way:
21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//   size_t size;
22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//   printf("xyz: %" PRIuS, size);
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// The "u" in the macro corresponds to %u, and S is for "size".
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "build/build_config.h"
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if defined(OS_POSIX)
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if (defined(_INTTYPES_H) || defined(_INTTYPES_H_)) && !defined(PRId64)
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#error "inttypes.h has already been included before this header file, but "
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#error "without __STDC_FORMAT_MACROS defined."
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(__STDC_FORMAT_MACROS)
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define __STDC_FORMAT_MACROS
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif
37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <inttypes.h>
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// GCC will concatenate wide and narrow strings correctly, so nothing needs to
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// be done here.
42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRId64 PRId64
43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRIu64 PRIu64
44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRIx64 PRIx64
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if !defined(PRIuS)
47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define PRIuS "zu"
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#else  // OS_WIN
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(PRId64)
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define PRId64 "I64d"
54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif
55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(PRIu64)
57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define PRIu64 "I64u"
58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif
59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !defined(PRIx64)
61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define PRIx64 "I64x"
62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif
63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRId64 L"I64d"
65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRIu64 L"I64u"
66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define WidePRIx64 L"I64x"
67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if !defined(PRIuS)
69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define PRIuS "Iu"
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif
73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif  // BASE_FORMAT_MACROS_H_
75