diff --git a/CONTRIBUTORS b/CONTRIBUTORS index d6f2eff3..04487a63 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -3037,6 +3037,8 @@ Frank Neumann for reporting a problem with the default return value of cEpgHandler::BeginSegmentTransfer() in derived classes that don't implement this function for reporting uninitialized variable SdWatchdog in vdr.c + for suggesting to use readdir() instead of readdir_r(), if GLIBC version 2.24 or + newer is used Gerald Dachs for reporting a problem with checking for minimum line length of 21 characters in diff --git a/HISTORY b/HISTORY index 1ffaa77b..06139383 100644 --- a/HISTORY +++ b/HISTORY @@ -9152,3 +9152,5 @@ Video Disk Recorder Revision History The old version of cSkinDisplayMenu::SetItemEvent() (without the TimerActive parameter) is still there for backwards compatibility. It may be removed in a future version, so plugin authors should switch to the new one. +- Now using readdir() instead of readdir_r(), if GLIBC version 2.24 or newer is used + (suggested by Frank Neumann). diff --git a/tools.c b/tools.c index 042e56c7..ac2f9eb2 100644 --- a/tools.c +++ b/tools.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 4.7 2017/06/23 09:39:45 kls Exp $ + * $Id: tools.c 4.8 2017/06/25 11:45:39 kls Exp $ */ #include "tools.h" @@ -1528,7 +1528,11 @@ cReadDir::~cReadDir() struct dirent *cReadDir::Next(void) { if (directory) { +#if !__GLIBC_PREREQ(2, 24) // readdir_r() is deprecated as of GLIBC 2.24 while (readdir_r(directory, &u.d, &result) == 0 && result) { +#else + while ((result = readdir(directory)) != NULL) { +#endif if (strcmp(result->d_name, ".") && strcmp(result->d_name, "..")) return result; } diff --git a/tools.h b/tools.h index 5894a184..aaba602f 100644 --- a/tools.h +++ b/tools.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.h 4.12 2017/06/11 10:00:49 kls Exp $ + * $Id: tools.h 4.13 2017/06/25 11:45:38 kls Exp $ */ #ifndef __TOOLS_H @@ -400,10 +400,12 @@ class cReadDir { private: DIR *directory; struct dirent *result; +#if !__GLIBC_PREREQ(2, 24) // readdir_r() is deprecated as of GLIBC 2.24 union { // according to "The GNU C Library Reference Manual" struct dirent d; char b[offsetof(struct dirent, d_name) + NAME_MAX + 1]; } u; +#endif public: cReadDir(const char *Directory); ~cReadDir();