98 lines
2.7 KiB
Diff
98 lines
2.7 KiB
Diff
|
From 1f879e4b930fef71f030e5b6e5fae359f27d1aec Mon Sep 17 00:00:00 2001
|
||
|
From: Bernd Kuhls <bernd.kuhls@t-online.de>
|
||
|
Date: Sat, 23 Jun 2018 20:47:26 +0200
|
||
|
Subject: [PATCH] configure: check for strlcat & strlcpy
|
||
|
|
||
|
Building tvheadend with uclibc and musl fails:
|
||
|
|
||
|
src/tvh_string.h:50:22: error: static declaration of 'strlcpy' follows non-static declaration
|
||
|
static inline size_t strlcpy(char *dst, const char *src, size_t size)
|
||
|
|
||
|
src/tvh_string.h:61:22: error: static declaration of 'strlcat' follows non-static declaration
|
||
|
static inline size_t strlcat(char *dst, const char *src, size_t count)
|
||
|
|
||
|
because they provide strlcat & strlcpy:
|
||
|
https://sourceware.org/glibc/wiki/strlcpy
|
||
|
|
||
|
This patch adds configure checks and makes the implementation in
|
||
|
tvh_string.h optional, the configure log looks like this:
|
||
|
|
||
|
glibc
|
||
|
checking for cc strlcat ... fail
|
||
|
checking for cc strlcpy ... fail
|
||
|
|
||
|
musl
|
||
|
checking for cc strlcat ... ok
|
||
|
checking for cc strlcpy ... ok
|
||
|
|
||
|
uclibc
|
||
|
checking for cc strlcat ... ok
|
||
|
checking for cc strlcpy ... ok
|
||
|
|
||
|
Patch sent upstream: https://github.com/tvheadend/tvheadend/pull/1133
|
||
|
|
||
|
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
|
||
|
---
|
||
|
configure | 14 ++++++++++++++
|
||
|
src/tvh_string.h | 4 ++++
|
||
|
2 files changed, 18 insertions(+)
|
||
|
|
||
|
diff --git a/configure b/configure
|
||
|
index 0857a1958..b183d02b3 100755
|
||
|
--- a/configure
|
||
|
+++ b/configure
|
||
|
@@ -159,6 +159,20 @@ else
|
||
|
COMPILER=gcc
|
||
|
fi
|
||
|
|
||
|
+check_cc_snippet strlcat '#include <string.h>
|
||
|
+int test(int argc, char **argv) {
|
||
|
+ char dst[10];
|
||
|
+ strlcat("test", dst, sizeof(dst));
|
||
|
+ return 0;
|
||
|
+}'
|
||
|
+
|
||
|
+check_cc_snippet strlcpy '#include <string.h>
|
||
|
+int test(int argc, char **argv) {
|
||
|
+ char dst[10];
|
||
|
+ strlcpy("test", dst, sizeof(dst));
|
||
|
+ return 0;
|
||
|
+}'
|
||
|
+
|
||
|
check_cc_snippet getloadavg '#include <stdlib.h>
|
||
|
void test() { getloadavg(NULL,0); }'
|
||
|
|
||
|
diff --git a/src/tvh_string.h b/src/tvh_string.h
|
||
|
index 87d8c3320..13ef2f308 100644
|
||
|
--- a/src/tvh_string.h
|
||
|
+++ b/src/tvh_string.h
|
||
|
@@ -47,6 +47,7 @@ static inline const char *tvh_strbegins(const char *s1, const char *s2)
|
||
|
return s1;
|
||
|
}
|
||
|
|
||
|
+#ifndef ENABLE_STRLCPY
|
||
|
static inline size_t strlcpy(char *dst, const char *src, size_t size)
|
||
|
{
|
||
|
size_t ret = strlen(src);
|
||
|
@@ -57,7 +58,9 @@ static inline size_t strlcpy(char *dst, const char *src, size_t size)
|
||
|
}
|
||
|
return ret;
|
||
|
}
|
||
|
+#endif
|
||
|
|
||
|
+#ifndef ENABLE_STRLCAT
|
||
|
static inline size_t strlcat(char *dst, const char *src, size_t count)
|
||
|
{
|
||
|
size_t dlen = strlen(dst);
|
||
|
@@ -72,6 +75,7 @@ static inline size_t strlcat(char *dst, const char *src, size_t count)
|
||
|
dst[len] = '\0';
|
||
|
return res;
|
||
|
}
|
||
|
+#endif
|
||
|
|
||
|
#define tvh_strlcatf(buf, size, ptr, fmt...) \
|
||
|
do { int __r = snprintf((buf) + ptr, (size) - ptr, fmt); \
|
||
|
--
|
||
|
2.17.1
|
||
|
|