Path: blob/master/thirdparty/linuxbsd_headers/dbus/dbus-macros.h
9898 views
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */1/* dbus-macros.h generic macros2*3* Copyright (C) 2002 Red Hat Inc.4*5* Licensed under the Academic Free License version 2.16*7* This program is free software; you can redistribute it and/or modify8* it under the terms of the GNU General Public License as published by9* the Free Software Foundation; either version 2 of the License, or10* (at your option) any later version.11*12* This program is distributed in the hope that it will be useful,13* but WITHOUT ANY WARRANTY; without even the implied warranty of14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the15* GNU General Public License for more details.16*17* You should have received a copy of the GNU General Public License18* along with this program; if not, write to the Free Software19* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA20*21*/22#if !defined (DBUS_INSIDE_DBUS_H) && !defined (DBUS_COMPILATION)23#error "Only <dbus/dbus.h> can be included directly, this file may disappear or change contents."24#endif2526#ifndef DBUS_MACROS_H27#define DBUS_MACROS_H2829#ifdef __cplusplus30# define DBUS_BEGIN_DECLS extern "C" {31# define DBUS_END_DECLS }32#else33# define DBUS_BEGIN_DECLS34# define DBUS_END_DECLS35#endif3637#ifndef TRUE38# define TRUE 139#endif40#ifndef FALSE41# define FALSE 042#endif4344#ifndef NULL45# ifdef __cplusplus46# define NULL (0L)47# else /* !__cplusplus */48# define NULL ((void*) 0)49# endif /* !__cplusplus */50#endif5152#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)53# define DBUS_DEPRECATED __attribute__ ((__deprecated__))54#elif defined(_MSC_VER) && (_MSC_VER >= 1300)55# define DBUS_DEPRECATED __declspec(deprecated)56#else57# define DBUS_DEPRECATED58#endif5960#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)61# define _DBUS_GNUC_EXTENSION __extension__62#else63# define _DBUS_GNUC_EXTENSION64#endif6566#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4)) || \67defined(__clang__)68#define _DBUS_GNUC_PRINTF( format_idx, arg_idx ) \69__attribute__((__format__ (__printf__, format_idx, arg_idx)))70#define _DBUS_GNUC_NORETURN \71__attribute__((__noreturn__))72#define _DBUS_GNUC_UNUSED \73__attribute__((__unused__))74#else /* !__GNUC__ */75#define _DBUS_GNUC_PRINTF( format_idx, arg_idx )76#define _DBUS_GNUC_NORETURN77#define _DBUS_GNUC_UNUSED78#endif /* !__GNUC__ */7980#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)81#define DBUS_MALLOC __attribute__((__malloc__))82#else83#define DBUS_MALLOC84#endif8586#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)87#define DBUS_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))88#define DBUS_ALLOC_SIZE2(x,y) __attribute__((__alloc_size__(x,y)))89#else90#define DBUS_ALLOC_SIZE(x)91#define DBUS_ALLOC_SIZE2(x,y)92#endif9394#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)95#define _DBUS_GNUC_WARN_UNUSED_RESULT __attribute__((warn_unused_result))96#else97#define _DBUS_GNUC_WARN_UNUSED_RESULT98#endif99100/** @def _DBUS_GNUC_PRINTF101* used to tell gcc about printf format strings102*/103/** @def _DBUS_GNUC_NORETURN104* used to tell gcc about functions that never return, such as _dbus_abort()105*/106/** @def _DBUS_GNUC_WARN_UNUSED_RESULT107* used to tell gcc about functions whose result must be used108*/109110/* Normally docs are in .c files, but there isn't a .c file for this. */111/**112* @defgroup DBusMacros Utility macros113* @ingroup DBus114* @brief #TRUE, #FALSE, #NULL, and so on115*116* Utility macros.117*118* @{119*/120121/**122* @def DBUS_BEGIN_DECLS123*124* Macro used prior to declaring functions in the D-Bus header125* files. Expands to "extern "C"" when using a C++ compiler,126* and expands to nothing when using a C compiler.127*128* Please don't use this in your own code, consider it129* D-Bus internal.130*/131/**132* @def DBUS_END_DECLS133*134* Macro used after declaring functions in the D-Bus header135* files. Expands to "}" when using a C++ compiler,136* and expands to nothing when using a C compiler.137*138* Please don't use this in your own code, consider it139* D-Bus internal.140*/141/**142* @def TRUE143*144* Expands to "1"145*/146/**147* @def FALSE148*149* Expands to "0"150*/151/**152* @def NULL153*154* A null pointer, defined appropriately for C or C++.155*/156/**157* @def DBUS_DEPRECATED158*159* Tells the compiler to warn about a function or type if it's used.160* Code marked in this way should also be enclosed in161* @code162* #ifndef DBUS_DISABLE_DEPRECATED163* deprecated stuff here164* #endif165* @endcode166*167* Please don't use this in your own code, consider it168* D-Bus internal.169*/170/**171* @def _DBUS_GNUC_EXTENSION172*173* Tells gcc not to warn about extensions to the C standard in the174* following expression, even if compiling with -pedantic. Do not use175* this macro in your own code; please consider it to be internal to libdbus.176*/177178/*179* @def DBUS_EXPORT180*181* Declare the following symbol as public. This is currently a noop on182* platforms other than Windows.183*/184185#if defined(DBUS_EXPORT)186/* value forced by compiler command line, don't redefine */187#elif defined(_WIN32)188# if defined(DBUS_STATIC_BUILD)189# define DBUS_EXPORT190# elif defined(dbus_1_EXPORTS)191# define DBUS_EXPORT __declspec(dllexport)192# else193# define DBUS_EXPORT __declspec(dllimport)194# endif195#elif defined(__GNUC__) && __GNUC__ >= 4196# define DBUS_EXPORT __attribute__ ((__visibility__ ("default")))197#else198#define DBUS_EXPORT199#endif200201#if defined(DBUS_PRIVATE_EXPORT)202/* value forced by compiler command line, don't redefine */203#elif defined(_WIN32)204# if defined(DBUS_STATIC_BUILD)205# define DBUS_PRIVATE_EXPORT /* no decoration */206# elif defined(dbus_1_EXPORTS)207# define DBUS_PRIVATE_EXPORT __declspec(dllexport)208# else209# define DBUS_PRIVATE_EXPORT __declspec(dllimport)210# endif211#elif defined(__GNUC__) && __GNUC__ >= 4212# define DBUS_PRIVATE_EXPORT __attribute__ ((__visibility__ ("default")))213#else214# define DBUS_PRIVATE_EXPORT /* no decoration */215#endif216217/* Implementation for dbus_clear_message() etc. This is not API,218* do not use it directly.219*220* We're using a specific type (T ** and T *) instead of void ** and221* void * partly for type-safety, partly to be strict-aliasing-compliant,222* and partly to keep C++ compilers happy. This code is inlined into223* users of libdbus, so we can't rely on it having dbus' own compiler224* settings. */225#define _dbus_clear_pointer_impl(T, pointer_to_pointer, destroy) \226do { \227T **_pp = (pointer_to_pointer); \228T *_value = *_pp; \229\230*_pp = NULL; \231\232if (_value != NULL) \233destroy (_value); \234} while (0)235/* Not (destroy) (_value) in case destroy() is a function-like macro */236237/** @} */238239#endif /* DBUS_MACROS_H */240241242