[waffle] [PATCH 01/10] api/core: annotate structs/functions for C linkage

Tapani tapani.palli at intel.com
Thu Apr 9 01:41:25 PDT 2015


Reviewed-by: Tapani Pälli <tapani.palli at intel.com>

On 03/24/2015 05:56 PM, Emil Velikov wrote:
> Annotate as extern "C" when included in C++ files to prevent issues due
> to conflicting linkage - C vs C++. With follow up commits we'll remove
> the "extern "C" { #include "header.h" } pattern which we currently use.
>
> Conditionally including system headers (either directly or not) in such
> a construct in a bad idea as they might include C++ symbols.
>
> Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
> ---
>   src/waffle/api/api_object.h          | 8 ++++++++
>   src/waffle/core/wcore_config.h       | 8 ++++++++
>   src/waffle/core/wcore_config_attrs.h | 8 ++++++++
>   src/waffle/core/wcore_display.h      | 8 ++++++++
>   src/waffle/core/wcore_error.h        | 8 ++++++++
>   src/waffle/core/wcore_util.h         | 8 ++++++++
>   6 files changed, 48 insertions(+)
>
> diff --git a/src/waffle/api/api_object.h b/src/waffle/api/api_object.h
> index d417d0a..ef11c5b 100644
> --- a/src/waffle/api/api_object.h
> +++ b/src/waffle/api/api_object.h
> @@ -27,6 +27,10 @@
>   
>   #include "waffle.h"
>   
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>   // This header is so sad and lonely... but there is no other appropriate place
>   // to define this struct.
>   
> @@ -36,3 +40,7 @@ struct api_object {
>       /// For consistency, a `waffle_display` belongs to itself.
>       size_t display_id;
>   };
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/src/waffle/core/wcore_config.h b/src/waffle/core/wcore_config.h
> index 27534af..2fc02d5 100644
> --- a/src/waffle/core/wcore_config.h
> +++ b/src/waffle/core/wcore_config.h
> @@ -36,6 +36,10 @@
>   #include "wcore_config_attrs.h"
>   #include "wcore_util.h"
>   
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>   struct wcore_config;
>   union waffle_native_config;
>   
> @@ -77,3 +81,7 @@ wcore_config_teardown(struct wcore_config *self)
>       assert(self);
>       return true;
>   }
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/src/waffle/core/wcore_config_attrs.h b/src/waffle/core/wcore_config_attrs.h
> index 0eaa4a1..cca5e8b 100644
> --- a/src/waffle/core/wcore_config_attrs.h
> +++ b/src/waffle/core/wcore_config_attrs.h
> @@ -28,6 +28,10 @@
>   #include <stdbool.h>
>   #include <stdint.h>
>   
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>   /// @brief Encodes the attribute list received by waffle_config_choose().
>   struct wcore_config_attrs {
>       int32_t context_api;
> @@ -84,3 +88,7 @@ bool
>   wcore_config_attrs_version_le(
>         const struct wcore_config_attrs *attrs,
>         int merged_version);
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/src/waffle/core/wcore_display.h b/src/waffle/core/wcore_display.h
> index de6ca5e..53f7d08 100644
> --- a/src/waffle/core/wcore_display.h
> +++ b/src/waffle/core/wcore_display.h
> @@ -32,6 +32,10 @@
>   
>   #include "wcore_util.h"
>   
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>   struct wcore_display;
>   struct wcore_platform;
>   union waffle_native_display;
> @@ -63,3 +67,7 @@ wcore_display_teardown(struct wcore_display *self)
>       assert(self);
>       return true;
>   }
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/src/waffle/core/wcore_error.h b/src/waffle/core/wcore_error.h
> index 0a9767c..cee5bd1 100644
> --- a/src/waffle/core/wcore_error.h
> +++ b/src/waffle/core/wcore_error.h
> @@ -29,6 +29,10 @@
>   
>   #include "waffle.h"
>   
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>   /// @brief Thread-local info for the wcore_error module.
>   struct wcore_error_tinfo;
>   
> @@ -92,3 +96,7 @@ _wcore_error_internal(const char *file, int line, const char *format, ...);
>   
>   void _wcore_error_enable(void);
>   void _wcore_error_disable(void);
> +
> +#ifdef __cplusplus
> +}
> +#endif
> diff --git a/src/waffle/core/wcore_util.h b/src/waffle/core/wcore_util.h
> index 183134f..b823b21 100644
> --- a/src/waffle/core/wcore_util.h
> +++ b/src/waffle/core/wcore_util.h
> @@ -28,6 +28,10 @@
>   #include <stddef.h>
>   #include "c99_compat.h"
>   
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
>   #define container_of(ptr, type, member) ({                              \
>           const __typeof__(((type *)0)->member ) *__mptr = (ptr);         \
>           (type*)((void*)__mptr - offsetof(type, member));                \
> @@ -107,3 +111,7 @@ wcore_calloc(size_t size);
>   
>   const char*
>   wcore_enum_to_string(int32_t e);
> +
> +#ifdef __cplusplus
> +}
> +#endif



More information about the waffle mailing list