]> git.proxmox.com Git - libgit2.git/blob - src/cc-compat.h
0f05cd2d92886f2c6158dc75c0825536e4e6d219
[libgit2.git] / src / cc-compat.h
1 /*
2 * Copyright (C) the libgit2 contributors. All rights reserved.
3 *
4 * This file is part of libgit2, distributed under the GNU GPL v2 with
5 * a Linking Exception. For full terms see the included COPYING file.
6 */
7 #ifndef INCLUDE_cc_compat_h__
8 #define INCLUDE_cc_compat_h__
9
10 #include <stdarg.h>
11
12 /*
13 * See if our compiler is known to support flexible array members.
14 */
15 #ifndef GIT_FLEX_ARRAY
16 # if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
17 # define GIT_FLEX_ARRAY /* empty */
18 # elif defined(__GNUC__)
19 # if (__GNUC__ >= 3)
20 # define GIT_FLEX_ARRAY /* empty */
21 # else
22 # define GIT_FLEX_ARRAY 0 /* older GNU extension */
23 # endif
24 # endif
25
26 /* Default to safer but a bit wasteful traditional style */
27 # ifndef GIT_FLEX_ARRAY
28 # define GIT_FLEX_ARRAY 1
29 # endif
30 #endif
31
32 #ifdef __GNUC__
33 # define GIT_TYPEOF(x) (__typeof__(x))
34 #else
35 # define GIT_TYPEOF(x)
36 #endif
37
38 #if defined(__GNUC__)
39 # define GIT_ALIGN(x,size) x __attribute__ ((aligned(size)))
40 #elif defined(_MSC_VER)
41 # define GIT_ALIGN(x,size) __declspec(align(size)) x
42 #else
43 # define GIT_ALIGN(x,size) x
44 #endif
45
46 #define GIT_UNUSED(x) ((void)(x))
47
48 /* Define the printf format specifer to use for size_t output */
49 #if defined(_MSC_VER) || defined(__MINGW32__)
50 # define PRIuZ "Iu"
51 # define PRIxZ "Ix"
52 # define PRIdZ "Id"
53 #else
54 # define PRIuZ "zu"
55 # define PRIxZ "zx"
56 # define PRIdZ "zd"
57 #endif
58
59 /* Micosoft Visual C/C++ */
60 #if defined(_MSC_VER)
61 /* disable "deprecated function" warnings */
62 # pragma warning ( disable : 4996 )
63 /* disable "conditional expression is constant" level 4 warnings */
64 # pragma warning ( disable : 4127 )
65 #endif
66
67 #if defined (_MSC_VER)
68 typedef unsigned char bool;
69 # ifndef true
70 # define true 1
71 # endif
72 # ifndef false
73 # define false 0
74 # endif
75 #else
76 # include <stdbool.h>
77 #endif
78
79 #ifndef va_copy
80 # ifdef __va_copy
81 # define va_copy(dst, src) __va_copy(dst, src)
82 # else
83 # define va_copy(dst, src) ((dst) = (src))
84 # endif
85 #endif
86
87 #endif