1
0
mirror of https://github.com/VDR4Arch/vdr.git synced 2023-10-10 13:36:52 +02:00

Reverted to 'find' instead of 'ftw()' to collect recordings (ftw() was much slower)

This commit is contained in:
Klaus Schmidinger 2002-01-27 15:14:45 +01:00
parent 873286b7a3
commit fe5809c4e3
3 changed files with 22 additions and 37 deletions

View File

@ -176,8 +176,5 @@ Lauri Pesonen <lauri.pesonen@firsthop.com>
for avoiding linking in 'libncurses' if compiling without DEBUG_OSD=1 and
REMOTE=KBD
Emil Naepflein <Emil.Naepflein@philosys.de>
for his hint about the 'ftw()' library function
Sergei Haller <Sergei.Haller@math.uni-giessen.de>
for fixing the LastActivity timestamp after a shutdown prompt

View File

@ -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

View File

@ -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 <errno.h>
#include <fcntl.h>
#include <ftw.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
@ -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;
}