Blame src/cc-compat.h

Packit ae9e2a
/*
Packit ae9e2a
 * Copyright (C) the libgit2 contributors. All rights reserved.
Packit ae9e2a
 *
Packit ae9e2a
 * This file is part of libgit2, distributed under the GNU GPL v2 with
Packit ae9e2a
 * a Linking Exception. For full terms see the included COPYING file.
Packit ae9e2a
 */
Packit ae9e2a
#ifndef INCLUDE_compat_h__
Packit ae9e2a
#define INCLUDE_compat_h__
Packit ae9e2a
Packit ae9e2a
#include <stdarg.h>
Packit ae9e2a
Packit ae9e2a
/*
Packit ae9e2a
 * See if our compiler is known to support flexible array members.
Packit ae9e2a
 */
Packit ae9e2a
#ifndef GIT_FLEX_ARRAY
Packit ae9e2a
#	if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
Packit ae9e2a
#		define GIT_FLEX_ARRAY /* empty */
Packit ae9e2a
#	elif defined(__GNUC__)
Packit ae9e2a
#		if (__GNUC__ >= 3)
Packit ae9e2a
#			define GIT_FLEX_ARRAY /* empty */
Packit ae9e2a
#		else
Packit ae9e2a
#			define GIT_FLEX_ARRAY 0 /* older GNU extension */
Packit ae9e2a
#		endif
Packit ae9e2a
#	endif
Packit ae9e2a
Packit ae9e2a
/* Default to safer but a bit wasteful traditional style */
Packit ae9e2a
#	ifndef GIT_FLEX_ARRAY
Packit ae9e2a
#		define GIT_FLEX_ARRAY 1
Packit ae9e2a
#	endif
Packit ae9e2a
#endif
Packit ae9e2a
Packit ae9e2a
#ifdef __GNUC__
Packit ae9e2a
#	define GIT_TYPEOF(x) (__typeof__(x))
Packit ae9e2a
#else
Packit ae9e2a
#	define GIT_TYPEOF(x)
Packit ae9e2a
#endif
Packit ae9e2a
Packit ae9e2a
#if defined(__GNUC__)
Packit ae9e2a
#	define GIT_ALIGN(x,size) x __attribute__ ((aligned(size)))
Packit ae9e2a
#elif defined(_MSC_VER)
Packit ae9e2a
#	define GIT_ALIGN(x,size) __declspec(align(size)) x
Packit ae9e2a
#else
Packit ae9e2a
#	define GIT_ALIGN(x,size) x
Packit ae9e2a
#endif
Packit ae9e2a
Packit ae9e2a
#define GIT_UNUSED(x) ((void)(x))
Packit ae9e2a
Packit ae9e2a
/* Define the printf format specifer to use for size_t output */
Packit ae9e2a
#if defined(_MSC_VER) || defined(__MINGW32__)
Packit ae9e2a
#	define PRIuZ "Iu"
Packit ae9e2a
#	define PRIxZ "Ix"
Packit ae9e2a
#	define PRIdZ "Id"
Packit ae9e2a
#else
Packit ae9e2a
#	define PRIuZ "zu"
Packit ae9e2a
#	define PRIxZ "zx"
Packit ae9e2a
#	define PRIdZ "zd"
Packit ae9e2a
#endif
Packit ae9e2a
Packit ae9e2a
/* Micosoft Visual C/C++ */
Packit ae9e2a
#if defined(_MSC_VER)
Packit ae9e2a
/* disable "deprecated function" warnings */
Packit ae9e2a
#	pragma warning ( disable : 4996 )
Packit ae9e2a
/* disable "conditional expression is constant" level 4 warnings */
Packit ae9e2a
#	pragma warning ( disable : 4127 )
Packit ae9e2a
#endif
Packit ae9e2a
Packit ae9e2a
#if defined (_MSC_VER)
Packit ae9e2a
	typedef unsigned char bool;
Packit ae9e2a
#	ifndef true
Packit ae9e2a
#		define true 1
Packit ae9e2a
#	endif
Packit ae9e2a
#	ifndef false
Packit ae9e2a
#		define false 0
Packit ae9e2a
#	endif
Packit ae9e2a
#else
Packit ae9e2a
#	include <stdbool.h>
Packit ae9e2a
#endif
Packit ae9e2a
Packit ae9e2a
#ifndef va_copy
Packit ae9e2a
#	ifdef __va_copy
Packit ae9e2a
#		define va_copy(dst, src) __va_copy(dst, src)
Packit ae9e2a
#	else
Packit ae9e2a
#		define va_copy(dst, src) ((dst) = (src))
Packit ae9e2a
#	endif
Packit ae9e2a
#endif
Packit ae9e2a
Packit ae9e2a
#endif /* INCLUDE_compat_h__ */