summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Schmidinger <vdr@tvdr.de>2017-06-25 11:54:32 +0200
committerKlaus Schmidinger <vdr@tvdr.de>2017-06-25 11:54:32 +0200
commit027ae738a87db113984d7c079db16b855e0cee3d (patch)
tree9ace36614729ac6bcb1c99fe04c3bffee9fb6673
parentce5e23f2097f6491f87e0fb5e72c0781975667c9 (diff)
downloadvdr-027ae738a87db113984d7c079db16b855e0cee3d.tar.gz
vdr-027ae738a87db113984d7c079db16b855e0cee3d.tar.bz2
Now using readdir() instead of readdir_r(), if GLIBC version 2.24 or newer is used
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY2
-rw-r--r--tools.c6
-rw-r--r--tools.h4
4 files changed, 12 insertions, 2 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index d6f2eff3..04487a63 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -3037,6 +3037,8 @@ Frank Neumann <fnu@yavdr.org>
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 <vdr@dachsweb.de>
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();