From c1cd3c9830ce2c68dcf65342688e11a220723619 Mon Sep 17 00:00:00 2001 From: Sam James Date: Wed, 30 Aug 2023 02:32:13 +0100 Subject: [PATCH] Don't re-define strlcpy/strlcat with >=glibc-2.38 `>=glibc-2.38` implements strlcpy, strlcat, etc so check for those functions with Meson and don't provide conflicting prototypes. Technically, it doesn't need _GNU_SOURCE, but it's easier because it's not clear right now what glibc wants to guard it with. Note that these are in POSIX next anyway. Fixes: https://github.com/OpenRC/openrc/issues/643 Signed-off-by: Sam James --- meson.build | 4 ++++ src/libeinfo/libeinfo.c | 5 +---- src/shared/helpers.h | 4 +--- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/meson.build b/meson.build index 3e94ce5d..73cb9778 100644 --- a/meson.build +++ b/meson.build @@ -203,6 +203,10 @@ if cc.has_function('close_range', prefix: '#define _GNU_SOURCE\n#include ') + add_project_arguments('-DHAVE_STRLCPY', language: 'c') +endif + incdir = include_directories('src/shared') einfo_incdir = include_directories('src/libeinfo') rc_incdir = include_directories('src/librc') diff --git a/src/libeinfo/libeinfo.c b/src/libeinfo/libeinfo.c index fb8b6e3d..840233bd 100644 --- a/src/libeinfo/libeinfo.c +++ b/src/libeinfo/libeinfo.c @@ -146,9 +146,7 @@ static const char *const color_terms[] = { }; #endif -/* strlcat and strlcpy are nice, shame glibc does not define them */ -#ifdef __GLIBC__ -# if !defined (__UCLIBC__) && !defined (__dietlibc__) +#ifndef HAVE_STRLCPY static size_t strlcat(char *dst, const char *src, size_t size) { @@ -176,7 +174,6 @@ strlcat(char *dst, const char *src, size_t size) return dst_n + (s - src); } -# endif #endif static bool diff --git a/src/shared/helpers.h b/src/shared/helpers.h index 9cf263be..dee41b75 100644 --- a/src/shared/helpers.h +++ b/src/shared/helpers.h @@ -37,10 +37,8 @@ #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) -#ifdef __GLIBC__ -# if !defined (__UCLIBC__) && !defined (__dietlibc__) +#ifndef HAVE_STRLCPY # define strlcpy(dst, src, size) snprintf(dst, size, "%s", src) -# endif #endif #ifndef timespecsub