From 8c1694d3d94f53bb09d92ffb35ee8530dc91e2c3 Mon Sep 17 00:00:00 2001 From: Slendi Date: Sat, 9 Aug 2025 08:34:14 +0300 Subject: [PATCH] Fix build on FreeBSD Signed-off-by: Slendi --- build.sh | 2 +- programs/dcfg_dump.c | 3 +-- src/dcfg.c | 8 +++++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/build.sh b/build.sh index d1c0c51..5bba400 100755 --- a/build.sh +++ b/build.sh @@ -4,7 +4,7 @@ set -e BUILD_DIR="BUILD" INSTALL_DIR=$PWD/install -CFLAGS="-Wall -Wextra -pedantic -Werror -Wno-newline-eof -Wno-language-extension-token" +CFLAGS="-Wall -Wextra -pedantic -Werror -Wno-newline-eof -Wno-language-extension-token -Wno-unused-command-line-argument" BUILD_SHARED=1 PTHREAD_SUPPORT=1 POSIX_SUPPORT=1 diff --git a/programs/dcfg_dump.c b/programs/dcfg_dump.c index ae4c060..4a875a5 100644 --- a/programs/dcfg_dump.c +++ b/programs/dcfg_dump.c @@ -1,6 +1,5 @@ #include -#include #include #include #include @@ -105,7 +104,7 @@ void walk_value(dcfg_Value *value, bool evaluate, int indent, bool first) size_t n = 0; dcfg_Value_get_object_keys(value, 0, &n, NULL); dcfg_StringView *keys - = n ? (dcfg_StringView *)alloca(n * sizeof(*keys)) : NULL; + = n ? (dcfg_StringView *)calloc(1, n * sizeof(*keys)) : NULL; dcfg_Value_get_object_keys(value, n, &n, keys); printf("{\n"); diff --git a/src/dcfg.c b/src/dcfg.c index 8c4755f..a157cf9 100644 --- a/src/dcfg.c +++ b/src/dcfg.c @@ -399,6 +399,12 @@ dcfg_Version dcfg_get_version(void) | ((uint64_t)VERSION_PATCH & 0xFFFFFFFFULL); } +#if __FreeBSD__ +#define MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE +#else +#define MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP +#endif + dcfg_Instance *dcfg_make_instance(dcfg_InstanceCreateInfo const *create_info) { assert(create_info); @@ -410,7 +416,7 @@ dcfg_Instance *dcfg_make_instance(dcfg_InstanceCreateInfo const *create_info) pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); + pthread_mutexattr_settype(&attr, MUTEX_RECURSIVE); pthread_mutex_init(&instance->mtx, &attr); instance->alloc = create_info->alloc;