From b6f0139d63ccf7893e915f5ff07b91ef72120e3d Mon Sep 17 00:00:00 2001 From: Juliusz Sosinowicz Date: Fri, 9 Jan 2026 13:43:16 +0100 Subject: [PATCH 1/4] zephyr: Fix more C++ linkage --- wolfssl/wolfcrypt/settings.h | 8 ++++++++ wolfssl/wolfcrypt/wc_port.h | 18 ++++++++++++++++-- wolfssl/wolfio.h | 8 ++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index bf3029791cf..3b2ebf72ecd 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -2594,6 +2594,10 @@ extern void uITRON4_free(void *p) ; #endif /*(WOLFSSL_APACHE_MYNEWT)*/ #ifdef WOLFSSL_ZEPHYR + #ifdef __cplusplus + } /* extern "C" */ + #endif + #include #if KERNEL_VERSION_NUMBER >= 0x30100 #include @@ -2606,6 +2610,10 @@ extern void uITRON4_free(void *p) ; #endif #include + #ifdef __cplusplus + extern "C" { + #endif + #define WOLFSSL_DH_CONST #define NO_WRITEV #define NO_STDLIB_ISASCII diff --git a/wolfssl/wolfcrypt/wc_port.h b/wolfssl/wolfcrypt/wc_port.h index 875511d72e6..384edab030f 100644 --- a/wolfssl/wolfcrypt/wc_port.h +++ b/wolfssl/wolfcrypt/wc_port.h @@ -283,8 +283,6 @@ #elif defined(WOLFSSL_APACHE_MYNEWT) /* do nothing */ #elif defined(WOLFSSL_ZEPHYR) - /* Zephyr SDK can use a cpp compiler which will cause - * problems with extern "C" linkage if not handled */ #ifdef __cplusplus } /* extern "C" */ #endif @@ -994,8 +992,16 @@ WOLFSSL_ABI WOLFSSL_API int wolfCrypt_Cleanup(void); #define XFGETS(b,s,f) -2 /* Not ported yet */ #elif defined(WOLFSSL_ZEPHYR) + #ifdef __cplusplus + } /* extern "C" */ + #endif + #include + #ifdef __cplusplus + extern "C" { + #endif + #define XFILE struct fs_file_t* /* These are our wrappers for opening and closing files to @@ -1481,6 +1487,10 @@ WOLFSSL_ABI WOLFSSL_API int wolfCrypt_Cleanup(void); #define USE_WOLF_TIME_T #elif defined(WOLFSSL_ZEPHYR) + #ifdef __cplusplus + } /* extern "C" */ + #endif + #include #ifndef _POSIX_C_SOURCE #if KERNEL_VERSION_NUMBER >= 0x30100 @@ -1500,6 +1510,10 @@ WOLFSSL_ABI WOLFSSL_API int wolfCrypt_Cleanup(void); #endif #endif + #ifdef __cplusplus + extern "C" { + #endif + time_t z_time(time_t *timer); #define XTIME(tl) z_time((tl)) diff --git a/wolfssl/wolfio.h b/wolfssl/wolfio.h index 2ddd830ef30..2afe9525bd7 100644 --- a/wolfssl/wolfio.h +++ b/wolfssl/wolfio.h @@ -176,6 +176,10 @@ #include #include #elif defined(WOLFSSL_ZEPHYR) + #ifdef __cplusplus + } /* extern "C" */ + #endif + #include #if KERNEL_VERSION_NUMBER >= 0x30100 #include @@ -188,6 +192,10 @@ #include #endif #endif + + #ifdef __cplusplus + extern "C" { + #endif #elif defined(MICROCHIP_PIC32) #include #elif defined(HAVE_NETX) From e86ceb2ad915b929052d923756972baf5efd520f Mon Sep 17 00:00:00 2001 From: Juliusz Sosinowicz Date: Fri, 9 Jan 2026 13:43:49 +0100 Subject: [PATCH 2/4] zephyr: define missing posix network funcs --- wolfssl/wolfio.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/wolfssl/wolfio.h b/wolfssl/wolfio.h index 2afe9525bd7..662c7783b99 100644 --- a/wolfssl/wolfio.h +++ b/wolfssl/wolfio.h @@ -541,7 +541,11 @@ typedef struct hostent HOSTENT; #endif /* HAVE_SOCKADDR */ - #if defined(HAVE_GETADDRINFO) + #if defined(WOLFSSL_ZEPHYR) + typedef struct zsock_addrinfo ADDRINFO; + #define getaddrinfo zsock_getaddrinfo + #define freeaddrinfo zsock_freeaddrinfo + #elif defined(HAVE_GETADDRINFO) typedef struct addrinfo ADDRINFO; #endif #endif /* WOLFSSL_NO_SOCK */ @@ -1002,6 +1006,8 @@ WOLFSSL_API void wolfSSL_SetIOWriteFlags(WOLFSSL* ssl, int flags); #endif #elif defined(FREESCALE_MQX) #define XINET_PTON(a,b,c,d) inet_pton((a),(b),(c),(d)) + #elif defined(WOLFSSL_ZEPHYR) + #define XINET_PTON(a,b,c) zsock_inet_pton((a),(b),(c)) #else #define XINET_PTON(a,b,c) inet_pton((a),(b),(c)) #endif From 77e1fb662b1a704f6e52f42d1c021da478388452 Mon Sep 17 00:00:00 2001 From: Juliusz Sosinowicz Date: Fri, 9 Jan 2026 13:44:08 +0100 Subject: [PATCH 3/4] Remove circular dependency between ssl.h and wolfio.h --- wolfssl/ssl.h | 8 -------- wolfssl/wolfio.h | 4 ++++ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index a1c7bedf457..83385d876ff 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -270,8 +270,6 @@ typedef struct WOLFSSL_BY_DIR WOLFSSL_BY_DIR; /* redeclare guard */ #define WOLFSSL_TYPES_DEFINED -#include - /* The WOLFSSL_RSA type is required in all build configurations. */ #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) #include @@ -2158,12 +2156,6 @@ WOLFSSL_API int wolfSSL_BIO_set_mem_buf(WOLFSSL_BIO* bio, WOLFSSL_BUF_MEM* bufMe #endif WOLFSSL_API int wolfSSL_BIO_get_len(WOLFSSL_BIO *bio); -#ifdef WOLFSSL_HAVE_BIO_ADDR -WOLFSSL_API WOLFSSL_BIO_ADDR *wolfSSL_BIO_ADDR_new(void); -WOLFSSL_API void wolfSSL_BIO_ADDR_free(WOLFSSL_BIO_ADDR *addr); -WOLFSSL_API void wolfSSL_BIO_ADDR_clear(WOLFSSL_BIO_ADDR *addr); -#endif /* WOLFSSL_HAVE_BIO_ADDR */ - #endif /* !NO_BIO */ WOLFSSL_API void wolfSSL_RAND_screen(void); diff --git a/wolfssl/wolfio.h b/wolfssl/wolfio.h index 662c7783b99..8430fdf444d 100644 --- a/wolfssl/wolfio.h +++ b/wolfssl/wolfio.h @@ -585,6 +585,10 @@ union WOLFSSL_BIO_ADDR { typedef union WOLFSSL_BIO_ADDR WOLFSSL_BIO_ADDR; +WOLFSSL_API WOLFSSL_BIO_ADDR *wolfSSL_BIO_ADDR_new(void); +WOLFSSL_API void wolfSSL_BIO_ADDR_free(WOLFSSL_BIO_ADDR *addr); +WOLFSSL_API void wolfSSL_BIO_ADDR_clear(WOLFSSL_BIO_ADDR *addr); + #if defined(WOLFSSL_DTLS) && defined(OPENSSL_EXTRA) WOLFSSL_API int wolfIO_SendTo(SOCKET_T sd, WOLFSSL_BIO_ADDR *addr, char *buf, int sz, int wrFlags); WOLFSSL_API int wolfIO_RecvFrom(SOCKET_T sd, WOLFSSL_BIO_ADDR *addr, char *buf, int sz, int rdFlags); From f9aec60e0dcbf3f776d8f87af2bb1560c65f08ed Mon Sep 17 00:00:00 2001 From: Juliusz Sosinowicz Date: Mon, 19 Jan 2026 22:02:26 +0100 Subject: [PATCH 4/4] Restore previous includes but add more externs --- wolfssl/openssl/conf.h | 14 +++++++++++--- wolfssl/ssl.h | 10 ++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/wolfssl/openssl/conf.h b/wolfssl/openssl/conf.h index d059c597529..1007b64a14d 100644 --- a/wolfssl/openssl/conf.h +++ b/wolfssl/openssl/conf.h @@ -24,22 +24,30 @@ #ifndef WOLFSSL_conf_H_ #define WOLFSSL_conf_H_ +#include +#include + #ifdef __cplusplus extern "C" { #endif -#include -#include - typedef struct WOLFSSL_CONF_VALUE { char *section; char *name; char *value; } WOLFSSL_CONF_VALUE; +#ifdef __cplusplus +} /* extern "C" */ +#endif + /* ssl.h requires WOLFSSL_CONF_VALUE */ #include +#ifdef __cplusplus + extern "C" { +#endif + typedef struct WOLFSSL_CONF { void *meth_data; WOLF_LHASH_OF(WOLFSSL_CONF_VALUE) *data; diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index 83385d876ff..ba8f56ca023 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -270,11 +270,21 @@ typedef struct WOLFSSL_BY_DIR WOLFSSL_BY_DIR; /* redeclare guard */ #define WOLFSSL_TYPES_DEFINED +#ifdef __cplusplus + } /* extern "C" */ +#endif + +#include + /* The WOLFSSL_RSA type is required in all build configurations. */ #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) #include #endif +#ifdef __cplusplus + extern "C" { +#endif + #ifndef WC_RNG_TYPE_DEFINED /* guard on redeclaration */ typedef struct WC_RNG WC_RNG; #define WC_RNG_TYPE_DEFINED