160 lines
4.8 KiB
Diff
160 lines
4.8 KiB
Diff
From fb44386acc2497ac250364bc08cebc26ded816cf Mon Sep 17 00:00:00 2001
|
|
From: Carlo Landmeter <clandmeter@gmail.com>
|
|
Date: Tue, 16 May 2023 19:57:39 +0200
|
|
Subject: [PATCH] Fix musl build
|
|
|
|
Downloaded from
|
|
https://git.alpinelinux.org/aports/tree/community/vdr/musl-compat.patch
|
|
|
|
Initial commit:
|
|
https://git.alpinelinux.org/aports/commit/?id=140248605cee4a0160f80b47ce77a823be2f740a
|
|
|
|
Upstream: https://www.linuxtv.org/pipermail/vdr/2023-May/029744.html
|
|
|
|
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
|
|
---
|
|
i18n.h | 2 +-
|
|
osd.c | 2 +-
|
|
thread.c | 4 +++-
|
|
tools.c | 4 ++--
|
|
tools.h | 14 ++++++++++++--
|
|
vdr.c | 6 ++++++
|
|
6 files changed, 25 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/i18n.h b/i18n.h
|
|
index 03deb6f2..85ce4077 100644
|
|
--- a/i18n.h
|
|
+++ b/i18n.h
|
|
@@ -46,7 +46,7 @@ const cStringList *I18nLanguages(void);
|
|
///< have an actual locale installed. The rest are just dummy entries
|
|
///< to allow having three letter language codes for other languages
|
|
///< that have no actual locale on this system.
|
|
-const char *I18nTranslate(const char *s, const char *Plugin = NULL) __attribute_format_arg__(1);
|
|
+const char *I18nTranslate(const char *s, const char *Plugin = NULL) __attribute__((__format_arg__ (1)));
|
|
///< Translates the given string (with optional Plugin context) into
|
|
///< the current language. If no translation is available, the original
|
|
///< string will be returned.
|
|
diff --git a/osd.c b/osd.c
|
|
index 47bda686..0d360c81 100644
|
|
--- a/osd.c
|
|
+++ b/osd.c
|
|
@@ -12,7 +12,7 @@
|
|
#include <stdlib.h>
|
|
#include <sys/ioctl.h>
|
|
#include <sys/stat.h>
|
|
-#include <sys/unistd.h>
|
|
+#include <unistd.h>
|
|
#include "device.h"
|
|
#include "tools.h"
|
|
|
|
diff --git a/thread.c b/thread.c
|
|
index 93eb8c0d..6e854541 100644
|
|
--- a/thread.c
|
|
+++ b/thread.c
|
|
@@ -160,7 +160,9 @@ cRwLock::cRwLock(bool PreferWriter)
|
|
writeLockThreadId = 0;
|
|
pthread_rwlockattr_t attr;
|
|
pthread_rwlockattr_init(&attr);
|
|
+#if defined(__GLIBC__)
|
|
pthread_rwlockattr_setkind_np(&attr, PreferWriter ? PTHREAD_RWLOCK_PREFER_WRITER_NP : PTHREAD_RWLOCK_PREFER_READER_NP);
|
|
+#endif
|
|
pthread_rwlock_init(&rwlock, &attr);
|
|
}
|
|
|
|
@@ -210,7 +212,7 @@ cMutex::cMutex(void)
|
|
locked = 0;
|
|
pthread_mutexattr_t attr;
|
|
pthread_mutexattr_init(&attr);
|
|
- pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK_NP);
|
|
+ pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK);
|
|
pthread_mutex_init(&mutex, &attr);
|
|
}
|
|
|
|
diff --git a/tools.c b/tools.c
|
|
index d04033b1..8b161eec 100644
|
|
--- a/tools.c
|
|
+++ b/tools.c
|
|
@@ -672,7 +672,7 @@ char *ReadLink(const char *FileName)
|
|
{
|
|
if (!FileName)
|
|
return NULL;
|
|
- char *TargetName = canonicalize_file_name(FileName);
|
|
+ char *TargetName = realpath(FileName, NULL);
|
|
if (!TargetName) {
|
|
if (errno == ENOENT) // file doesn't exist
|
|
TargetName = strdup(FileName);
|
|
@@ -1562,7 +1562,7 @@ cReadDir::~cReadDir()
|
|
struct dirent *cReadDir::Next(void)
|
|
{
|
|
if (directory) {
|
|
-#if !__GLIBC_PREREQ(2, 24) // readdir_r() is deprecated as of GLIBC 2.24
|
|
+#if __GLIBC__
|
|
while (readdir_r(directory, &u.d, &result) == 0 && result) {
|
|
#else
|
|
while ((result = readdir(directory)) != NULL) {
|
|
diff --git a/tools.h b/tools.h
|
|
index ff6169ee..60eda179 100644
|
|
--- a/tools.h
|
|
+++ b/tools.h
|
|
@@ -28,6 +28,16 @@
|
|
#include <sys/types.h>
|
|
#include "thread.h"
|
|
|
|
+#ifndef ACCESSPERMS
|
|
+# define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) /* 0777 */
|
|
+#endif
|
|
+#ifndef ALLPERMS
|
|
+# define ALLPERMS (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)/* 07777 */
|
|
+#endif
|
|
+#ifndef DEFFILEMODE
|
|
+# define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666*/
|
|
+#endif
|
|
+
|
|
typedef unsigned char uchar;
|
|
|
|
extern int SysLogLevel;
|
|
@@ -444,7 +454,7 @@ class cReadDir {
|
|
private:
|
|
DIR *directory;
|
|
struct dirent *result;
|
|
-#if !__GLIBC_PREREQ(2, 24) // readdir_r() is deprecated as of GLIBC 2.24
|
|
+#if __GLIBC__
|
|
union { // according to "The GNU C Library Reference Manual"
|
|
struct dirent d;
|
|
char b[offsetof(struct dirent, d_name) + NAME_MAX + 1];
|
|
@@ -818,7 +828,7 @@ public:
|
|
data[i] = T(0);
|
|
size = 0;
|
|
}
|
|
- void Sort(__compar_fn_t Compare)
|
|
+ void Sort(int (*Compare)(const void *, const void *))
|
|
{
|
|
qsort(data, size, sizeof(T), Compare);
|
|
}
|
|
diff --git a/vdr.c b/vdr.c
|
|
index 1bdc51ab..0f426e61 100644
|
|
--- a/vdr.c
|
|
+++ b/vdr.c
|
|
@@ -661,12 +661,18 @@ int main(int argc, char *argv[])
|
|
}
|
|
}
|
|
else if (Terminal) {
|
|
+#ifdef __GLIBC__
|
|
// Claim new controlling terminal
|
|
stdin = freopen(Terminal, "r", stdin);
|
|
stdout = freopen(Terminal, "w", stdout);
|
|
stderr = freopen(Terminal, "w", stderr);
|
|
HasStdin = true;
|
|
tcgetattr(STDIN_FILENO, &savedTm);
|
|
+#else
|
|
+ // stdin, stdout, stderr are declared FILE const* by musl C library
|
|
+ fprintf(stderr, "Option '-t' is only supported if VDR has been built against glibc.\n");
|
|
+ return 2;
|
|
+#endif
|
|
}
|
|
|
|
// Set user id in case we were started as root:
|
|
--
|
|
2.39.2
|
|
|