Skip to content

Commit 8ed9dbf

Browse files
committed
Use our constructor support for gnutls
1 parent 7c2be66 commit 8ed9dbf

File tree

3 files changed

+95
-1
lines changed

3 files changed

+95
-1
lines changed

build/f_gnutls_build.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@ set -e
33
. "${WLB_SCRIPT_FOLDER:-$(dirname "$(readlink -f "$BASH_SOURCE")")}/helpers.sh"
44

55
BLD_CONFIG_BUILD_NAME="gnutls"
6-
BLD_CONFIG_GNU_LIBS_ADDL=( "dirent" "getopt-gnu" "opendir" "closedir" "readdir" )
6+
BLD_CONFIG_GNU_LIBS_ADDL=( "dirent" "getopt-gnu" "opendir" "closedir" "readdir" "atexit" )
77
BLD_CONFIG_CONFIG_CMD_ADDL=( "--with-included-unistring" )
88
BLD_CONFIG_VCPKG_DEPS=( "gmp" "nettle" "brotli" "zstd" )
99
BLD_CONFIG_PKG_CONFIG_MANUAL_ADD=( "gmp" )
1010
BLD_CONFIG_BUILD_ADDL_CFLAGS=( "-I../gl/" "-std:c++14" )
1111
BLD_CONFIG_BUILD_ADDL_CFLAGS_STATIC=("-DASN1_STATIC")
1212
BLD_CONFIG_OUR_LIB_DEPS=("libtasn1" "p11-kit" "zlib")
1313
BLD_CONFIG_OUR_LIB_BINS_PATH=("libtasn1")
14+
BLD_CONFIG_OUR_OS_FIXES_DEFINES=()
1415
BLD_CONFIG_BUILD_MSVC_IGNORE_WARNINGS=( "4068" "4061" "4820" "5045" "4668" "4996" )
16+
BLD_CONFIG_OUR_OS_FIXES_COMPILE=1
17+
1518

1619
# BLD_CONFIG_BUILD_FOLDER_NAME="myapp2"; #if you want it compiling in a diff folder
1720
# BLD_CONFIG_BUILD_DEBUG=1

osfixes.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
#pragma once
22
//shared polyfill library
3+
#ifdef __cplusplus
4+
extern "C" {
5+
#endif
6+
37
#ifdef _WIN32
48
/*
59
#define WLB_OS_BASIC_TERM
@@ -337,4 +341,8 @@ int kill(pid_t pid, int sig);
337341
#ifdef WLB_ALIGNED_ALLOC
338342
void *wlb_aligned_alloc(size_t size, size_t alignment);
339343
void wlb_aligned_free(void* ptr);
344+
#endif
345+
346+
#ifdef __cplusplus
347+
}
340348
#endif

patches/repo_gnutls.patch

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,89 @@ index 891c5dfd1..9b7b59ab5 100644
128128
{
129129
_gnutls_assert_log("ASSERT: %s[%s]:%d\n", file, func, line);
130130
return val;
131+
diff --git a/lib/global.c b/lib/global.c
132+
index 42d90ee9d..d9290ca69 100644
133+
--- a/lib/global.c
134+
+++ b/lib/global.c
135+
@@ -49,11 +49,12 @@
136+
#ifdef __sun
137+
#pragma fini(lib_deinit)
138+
#pragma init(lib_init)
139+
-#define _CONSTRUCTOR
140+
-#define _DESTRUCTOR
141+
+#define CONSTRUCTOR(f) \
142+
+ static void f(void)
143+
#else
144+
-#define _CONSTRUCTOR __attribute__((constructor))
145+
-#define _DESTRUCTOR __attribute__((destructor))
146+
+// this will work for windows or non windows systems
147+
+#define WLB_CONSTRUCTOR_SUPPORT
148+
+#include "../osfixes.h"
149+
#endif
150+
151+
#ifndef _WIN32
152+
@@ -501,7 +502,12 @@ const char *gnutls_check_version(const char *req_version)
153+
return NULL;
154+
}
155+
156+
-static void _CONSTRUCTOR lib_init(void)
157+
+
158+
+
159+
+
160+
+
161+
+
162+
+static void lib_deinit(void)
163+
{
164+
int ret;
165+
const char *e;
166+
@@ -525,29 +531,21 @@ static void _CONSTRUCTOR lib_init(void)
167+
return;
168+
}
169+
170+
- ret = _gnutls_global_init(1);
171+
- if (ret < 0) {
172+
- fprintf(stderr, "Error in GnuTLS initialization: %s\n",
173+
- gnutls_strerror(ret));
174+
- _gnutls_switch_lib_state(LIB_STATE_ERROR);
175+
- }
176+
+ _gnutls_global_deinit(1);
177+
}
178+
-
179+
-static void _DESTRUCTOR lib_deinit(void)
180+
+CONSTRUCTOR(lib_init)
181+
{
182+
int ret;
183+
const char *e;
184+
-
185+
if (_gnutls_global_init_skip() != 0)
186+
return;
187+
-
188+
+ atexit(lib_deinit);
189+
e = secure_getenv("GNUTLS_NO_IMPLICIT_INIT");
190+
if (e != NULL) {
191+
ret = atoi(e);
192+
if (ret == 1)
193+
return;
194+
}
195+
-
196+
e = secure_getenv("GNUTLS_NO_EXPLICIT_INIT");
197+
if (e != NULL) {
198+
_gnutls_debug_log(
199+
@@ -556,8 +554,12 @@ static void _DESTRUCTOR lib_deinit(void)
200+
if (ret == 1)
201+
return;
202+
}
203+
-
204+
- _gnutls_global_deinit(1);
205+
+ ret = _gnutls_global_init(1);
206+
+ if (ret < 0) {
207+
+ fprintf(stderr, "Error in GnuTLS initialization: %s\n",
208+
+ gnutls_strerror(ret));
209+
+ _gnutls_switch_lib_state(LIB_STATE_ERROR);
210+
+ }
211+
}
212+
213+
static const struct gnutls_library_config_st _gnutls_library_config[] = {
131214
diff --git a/lib/x509/verify-high2.c b/lib/x509/verify-high2.c
132215
index dc975baeb..208b89d47 100644
133216
--- a/lib/x509/verify-high2.c

0 commit comments

Comments
 (0)