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

Emil Velikov emil.l.velikov at gmail.com
Tue Mar 24 08:56:17 PDT 2015


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
-- 
2.3.1



More information about the waffle mailing list