summaryrefslogtreecommitdiff
path: root/src/include/openssl/base.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/openssl/base.h')
-rw-r--r--src/include/openssl/base.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/include/openssl/base.h b/src/include/openssl/base.h
index 7fe232f3..cb1affac 100644
--- a/src/include/openssl/base.h
+++ b/src/include/openssl/base.h
@@ -291,6 +291,24 @@ extern "C" {
#endif
#endif // OPENSSL_ASM_INCOMPATIBLE
+#if defined(__cplusplus)
+// enums can be predeclared, but only in C++ and only if given an explicit type.
+// C doesn't support setting an explicit type for enums thus a #define is used
+// to do this only for C++. However, the ABI type between C and C++ need to have
+// equal sizes, which is confirmed in a unittest.
+#define BORINGSSL_ENUM_INT : int
+enum ssl_early_data_reason_t BORINGSSL_ENUM_INT;
+enum ssl_encryption_level_t BORINGSSL_ENUM_INT;
+enum ssl_private_key_result_t BORINGSSL_ENUM_INT;
+enum ssl_renegotiate_mode_t BORINGSSL_ENUM_INT;
+enum ssl_select_cert_result_t BORINGSSL_ENUM_INT;
+enum ssl_select_cert_result_t BORINGSSL_ENUM_INT;
+enum ssl_ticket_aead_result_t BORINGSSL_ENUM_INT;
+enum ssl_verify_result_t BORINGSSL_ENUM_INT;
+#else
+#define BORINGSSL_ENUM_INT
+#endif
+
// CRYPTO_THREADID is a dummy value.
typedef int CRYPTO_THREADID;