diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 8fd4ebda..073e9271 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -176,8 +176,5 @@ Lauri Pesonen for avoiding linking in 'libncurses' if compiling without DEBUG_OSD=1 and REMOTE=KBD -Emil Naepflein - for his hint about the 'ftw()' library function - Sergei Haller for fixing the LastActivity timestamp after a shutdown prompt diff --git a/HISTORY b/HISTORY index 196e5fd1..5728c169 100644 --- a/HISTORY +++ b/HISTORY @@ -900,9 +900,6 @@ Video Disk Recorder Revision History subdirectories for the recordings. This can be controlled through the "RecordingDirs" parameter in the "Setup" menu. See "MANUAL/Replaying a Recording" for details. -- Now using a call to the 'ftw()' library function instead of an external 'find' - command to collect the recordings (thanks to Emil Naepflein for his hint about - this function). - Improved speed of setting the Help button texts. - Fixed handling file names that contain single quotes (') or dollar signs ($) in the call to the shutdown command (option '-s') and the recording command diff --git a/recording.c b/recording.c index 89c1ad92..acdf264c 100644 --- a/recording.c +++ b/recording.c @@ -4,13 +4,12 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.c 1.47 2002/01/27 14:10:25 kls Exp $ + * $Id: recording.c 1.48 2002/01/27 15:14:45 kls Exp $ */ #include "recording.h" #include #include -#include #include #include #include @@ -33,6 +32,8 @@ #define SUMMARYFILESUFFIX "/summary.vdr" #define MARKSFILESUFFIX "/marks.vdr" +#define FINDCMD "find %s -follow -type d -name '%s' 2> /dev/null" + #define MINDISKSPACE 1024 // MB #define DELETEDLIFETIME 1 // hours after which a deleted recording will be actually removed @@ -484,39 +485,29 @@ bool cRecording::Remove(void) // --- cRecordings ----------------------------------------------------------- -cRecordings *FilterRecordings = NULL; -const char *FilterSuffix = NULL; - -static int Filter(const char *Name, const struct stat *Stat, int Status) -{ - if (FilterRecordings && FilterSuffix) { - if (Status == FTW_D) { - if (endswith(Name, FilterSuffix)) { - cRecording *r = new cRecording(Name); - FilterRecordings->Add(r); - } - } - return 0; - } - return 1; -} - bool cRecordings::Load(bool Deleted) { - if (FilterRecordings) - return false; // because of the static Filter() function only _one_ call at a time is allowed! Clear(); - bool result = true; - FilterRecordings = this; - FilterSuffix = Deleted ? DELEXT : RECEXT; - if (ftw(VideoDirectory, Filter, 10) < 0) { - LOG_ERROR; - result = errno != ESTALE; // apparently stale NFS file handles are not really a problem? + bool result = false; + char *cmd = NULL; + asprintf(&cmd, FINDCMD, VideoDirectory, Deleted ? "*" DELEXT : "*" RECEXT); + FILE *p = popen(cmd, "r"); + if (p) { + char *s; + while ((s = readline(p)) != NULL) { + cRecording *r = new cRecording(s); + if (r->Name()) + Add(r); + else + delete r; + } + pclose(p); + Sort(); + result = Count() > 0; } - Sort(); - result = result && Count() > 0; - FilterRecordings = NULL; - FilterSuffix = NULL; + else + Interface->Error("Error while opening pipe!"); + delete cmd; return result; }