--- vdr-2.4.6.orig/config.h 2021-02-16 11:20:23.614000000 +0100 +++ vdr-2.4.6.orig/config.h 2021-02-16 11:40:25.313000000 +0100 @@ -19,6 +19,7 @@ #include "i18n.h" #include "font.h" #include "tools.h" +#include // VDR's own version number: --- vdr-2.4.6.orig/i18n.h 2021-02-16 11:20:23.625000000 +0100 +++ vdr-2.4.6.orig/i18n.h 2021-02-16 11:26:25.920000000 +0100 @@ -46,7 +46,7 @@ ///< 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. --- vdr-2.4.6.orig/osd.c 2021-02-16 11:20:23.627000000 +0100 +++ vdr-2.4.6.orig/osd.c 2021-02-16 11:27:10.554000000 +0100 @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include "device.h" #include "tools.h" --- vdr-2.4.6.orig/thread.c 2021-02-16 11:20:23.602000000 +0100 +++ vdr-2.4.6.orig/thread.c 2021-02-16 11:29:49.318000000 +0100 @@ -160,7 +160,9 @@ 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 @@ 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); } --- vdr-2.4.6.orig/tools.c 2021-02-16 11:20:23.617000000 +0100 +++ vdr-2.4.6.orig/tools.c 2021-02-16 11:40:52.178000000 +0100 @@ -27,6 +27,7 @@ #include #include "i18n.h" #include "thread.h" +#include int SysLogLevel = 3; @@ -654,7 +655,7 @@ { 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); @@ -1544,7 +1545,7 @@ 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) { --- vdr-2.4.6.orig/tools.h 2021-02-16 11:20:23.617000000 +0100 +++ vdr-2.4.6.orig/tools.h 2021-02-16 11:36:53.403000000 +0100 @@ -28,6 +28,16 @@ #include #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; @@ -412,7 +422,7 @@ 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]; @@ -777,7 +787,7 @@ 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); } --- vdr-2.4.6.orig/vdr.c 2021-02-16 11:20:23.617000000 +0100 +++ vdr-2.4.6.orig/vdr.c 2021-02-16 11:38:27.790000000 +0100 @@ -689,12 +689,18 @@ } } 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 } isyslog("VDR version %s started", VDRVERSION);