blob: 2e66057aeeaf7c61693ac999c73669fec05ec153 [file] [log] [blame]
license.botbf09a502008-08-24 00:55:551// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commitd7cae122008-07-26 21:49:384
[email protected]703f427e2008-08-13 01:17:185#ifndef BASE_PORT_H_
6#define BASE_PORT_H_
[email protected]32b76ef2010-07-26 23:08:247#pragma once
initial.commitd7cae122008-07-26 21:49:388
[email protected]703f427e2008-08-13 01:17:189#include <stdarg.h>
[email protected]4867b182008-08-04 21:16:5010#include "build/build_config.h"
11
12#ifdef COMPILER_MSVC
initial.commitd7cae122008-07-26 21:49:3813#define GG_LONGLONG(x) x##I64
14#define GG_ULONGLONG(x) x##UI64
15#else
16#define GG_LONGLONG(x) x##LL
17#define GG_ULONGLONG(x) x##ULL
18#endif
19
20// Per C99 7.8.14, define __STDC_CONSTANT_MACROS before including <stdint.h>
21// to get the INTn_C and UINTn_C macros for integer constants. It's difficult
22// to guarantee any specific ordering of header includes, so it's difficult to
23// guarantee that the INTn_C macros can be defined by including <stdint.h> at
24// any specific point. Provide GG_INTn_C macros instead.
25
26#define GG_INT8_C(x) (x)
27#define GG_INT16_C(x) (x)
28#define GG_INT32_C(x) (x)
29#define GG_INT64_C(x) GG_LONGLONG(x)
30
31#define GG_UINT8_C(x) (x ## U)
32#define GG_UINT16_C(x) (x ## U)
33#define GG_UINT32_C(x) (x ## U)
34#define GG_UINT64_C(x) GG_ULONGLONG(x)
35
[email protected]703f427e2008-08-13 01:17:1836// It's possible for functions that use a va_list, such as StringPrintf, to
37// invalidate the data in it upon use. The fix is to make a copy of the
38// structure before using it and use that copy instead. va_copy is provided
39// for this purpose. MSVC does not provide va_copy, so define an
40// implementation here. It is not guaranteed that assignment is a copy, so the
41// StringUtil.VariableArgsFunc unit test tests this capability.
[email protected]703f427e2008-08-13 01:17:1842#if defined(COMPILER_GCC)
[email protected]16e97f72009-07-27 21:12:0543#define GG_VA_COPY(a, b) (va_copy(a, b))
[email protected]703f427e2008-08-13 01:17:1844#elif defined(COMPILER_MSVC)
[email protected]16e97f72009-07-27 21:12:0545#define GG_VA_COPY(a, b) (a = b)
[email protected]703f427e2008-08-13 01:17:1846#endif
[email protected]703f427e2008-08-13 01:17:1847
[email protected]b8c87bb2008-08-27 20:54:0048// Define an OS-neutral wrapper for shared library entry points
49#if defined(OS_WIN)
50#define API_CALL __stdcall
[email protected]4a34ce02009-08-31 22:25:0051#else
[email protected]13c11692008-10-27 22:19:4152#define API_CALL
[email protected]b8c87bb2008-08-27 20:54:0053#endif
54
[email protected]703f427e2008-08-13 01:17:1855#endif // BASE_PORT_H_