diff options
author | Klaus Schmidinger <Klaus (dot) Schmidinger (at) tvdr (dot) de> | 2012-02-19 14:54:00 +0100 |
---|---|---|
committer | Dieter Hametner <dh (plus) vdr (at) gekrumbel (dot) de> | 2012-02-19 16:36:45 +0100 |
commit | c2d9577b3dd7557b7a9c702d5c1fd3b1bbe0e5e7 (patch) | |
tree | a59a457cc3975f5835e7b307dccc5fd0f0e1b1be /tools.c | |
parent | 59f0138a7d03fed4fc33e1083928bf5b28e0e4ff (diff) | |
download | vdr-patches-c2d9577b3dd7557b7a9c702d5c1fd3b1bbe0e5e7.tar.gz vdr-patches-c2d9577b3dd7557b7a9c702d5c1fd3b1bbe0e5e7.tar.bz2 |
Version 1.7.24
Original announce message:
VDR developer version 1.7.24 is now available at
ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.24.tar.bz2
A 'diff' against the previous version is available at
ftp://ftp.tvdr.de/vdr/Developer/vdr-1.7.23-1.7.24.diff
MD5 checksums:
a034c5e399417dfc583483f650d003ee vdr-1.7.24.tar.bz2
aa1a2b202da92e65945ff39470b26618 vdr-1.7.23-1.7.24.diff
WARNING:
========
This is a developer version. Even though I use it in my productive
environment. I strongly recommend that you only use it under controlled
conditions and for testing and debugging.
From the HISTORY file:
- Updated the Italian OSD texts (thanks to Diego Pierotto).
- Fixed a high load in case a transponder can't be received.
- Improved the way DVB_API_VERSION is checked.
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
- Fixed asserting there is a live programme if the primary device is bonded with
a device that starts a recording on a different band.
- Fixed the return type of cMyDeviceHook::DeviceProvidesTransponder() in PLUGINS.html.
- Fixed a crash in a plugin using cDeviceHook when VDR ends (reported by Oliver Endriss).
- Some improvements to the Makefiles (thanks to Christian Ruppert).
- Fixed cRecording::LengthInSeconds(), which wrongfully rounded the result to full
minutes (thanks to Christoph Haubrich).
- Symbolic links are no longer resolved in cRecordings::ScanVideoDir() (thanks to
Sundararaj Reel).
- The epg.data file is now read in a separate thread to make the startup process
faster in case the file is very large (suggested by Helmut Auer).
- Fixed selecting the primary device for receiving the live viewing channel in
case it is bonded with an other device and has no receiver attached to it.
- Fixed a possible crash when canceling VDR while displaying subtitles, and the
primary device is no longer available.
- Improved handling subtitles of BBC channels.
- No longer using tabs as delimiter in the EPG bugfix log (they were garbled in the
log file).
- Added a missing '.' after the month in VPS strings.
- Added some missing 'const' to cDevice (thanks to Joachim Wilke).
- Fixed handling the PrimaryLimit when requesting a device for live viewing
(reported by Uwe Scheffler).
- Removed superfluous calls to SetVideoFormat() from device constructors. This
function is called in cDevice::SetPrimaryDevice(), anyway.
- An ongoing editing process is now canceled if either the original or the edited
version of the recording is deleted from the Recordings menu.
- The SVDRP command DELR now won't delete a recording that is currently being edited.
- Removed code stub for obsolete SVDRP command MOVT.
- The DVB device adapters/frontends are now probed by scanning the /dev/dvb directory
instead of looping through adapter/frontend numbers. This allows for "holes" in the
device numbering.
- cReadDir::Next() now skips directory entries "." and "..".
- Fixed a possible deadlock in time shift mode.
- Fixed switching into time shift mode when pausing live video (thanks to Reinhard
Nissl for helping to debug this one).
Diffstat (limited to 'tools.c')
-rw-r--r-- | tools.c | 116 |
1 files changed, 62 insertions, 54 deletions
@@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 2.20 2012/01/11 11:21:43 kls Exp $ + * $Id: tools.c 2.22 2012/02/18 15:30:35 kls Exp $ */ #include "tools.h" @@ -384,37 +384,35 @@ bool RemoveFileOrDir(const char *FileName, bool FollowSymlinks) if (d.Ok()) { struct dirent *e; while ((e = d.Next()) != NULL) { - if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..")) { - cString buffer = AddDirectory(FileName, e->d_name); - if (FollowSymlinks) { - struct stat st2; - if (lstat(buffer, &st2) == 0) { - if (S_ISLNK(st2.st_mode)) { - int size = st2.st_size + 1; - char *l = MALLOC(char, size); - int n = readlink(buffer, l, size - 1); - if (n < 0) { - if (errno != EINVAL) - LOG_ERROR_STR(*buffer); - } - else { - l[n] = 0; - dsyslog("removing %s", l); - if (remove(l) < 0) - LOG_ERROR_STR(l); - } - free(l); + cString buffer = AddDirectory(FileName, e->d_name); + if (FollowSymlinks) { + struct stat st2; + if (lstat(buffer, &st2) == 0) { + if (S_ISLNK(st2.st_mode)) { + int size = st2.st_size + 1; + char *l = MALLOC(char, size); + int n = readlink(buffer, l, size - 1); + if (n < 0) { + if (errno != EINVAL) + LOG_ERROR_STR(*buffer); } + else { + l[n] = 0; + dsyslog("removing %s", l); + if (remove(l) < 0) + LOG_ERROR_STR(l); + } + free(l); } - else if (errno != ENOENT) { - LOG_ERROR_STR(FileName); - return false; - } } - dsyslog("removing %s", *buffer); - if (remove(buffer) < 0) - LOG_ERROR_STR(*buffer); + else if (errno != ENOENT) { + LOG_ERROR_STR(FileName); + return false; + } } + dsyslog("removing %s", *buffer); + if (remove(buffer) < 0) + LOG_ERROR_STR(*buffer); } } else { @@ -442,7 +440,7 @@ bool RemoveEmptyDirectories(const char *DirName, bool RemoveThis) bool empty = true; struct dirent *e; while ((e = d.Next()) != NULL) { - if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..") && strcmp(e->d_name, "lost+found")) { + if (strcmp(e->d_name, "lost+found")) { cString buffer = AddDirectory(DirName, e->d_name); struct stat st; if (stat(buffer, &st) == 0) { @@ -480,24 +478,22 @@ int DirSizeMB(const char *DirName) int size = 0; struct dirent *e; while (size >= 0 && (e = d.Next()) != NULL) { - if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..")) { - cString buffer = AddDirectory(DirName, e->d_name); - struct stat st; - if (stat(buffer, &st) == 0) { - if (S_ISDIR(st.st_mode)) { - int n = DirSizeMB(buffer); - if (n >= 0) - size += n; - else - size = -1; - } + cString buffer = AddDirectory(DirName, e->d_name); + struct stat st; + if (stat(buffer, &st) == 0) { + if (S_ISDIR(st.st_mode)) { + int n = DirSizeMB(buffer); + if (n >= 0) + size += n; else - size += st.st_size / MEGABYTE(1); - } - else { - LOG_ERROR_STR(*buffer); - size = -1; + size = -1; } + else + size += st.st_size / MEGABYTE(1); + } + else { + LOG_ERROR_STR(*buffer); + size = -1; } } return size; @@ -567,6 +563,14 @@ time_t LastModifiedTime(const char *FileName) return 0; } +off_t FileSize(const char *FileName) +{ + struct stat fs; + if (stat(FileName, &fs) == 0) + return fs.st_size; + return -1; +} + // --- cTimeMs --------------------------------------------------------------- cTimeMs::cTimeMs(int Ms) @@ -1320,7 +1324,13 @@ cReadDir::~cReadDir() struct dirent *cReadDir::Next(void) { - return directory && readdir_r(directory, &u.d, &result) == 0 ? result : NULL; + if (directory) { + while (readdir_r(directory, &u.d, &result) == 0 && result) { + if (strcmp(result->d_name, ".") && strcmp(result->d_name, "..")) + return result; + } + } + return NULL; } // --- cStringList ----------------------------------------------------------- @@ -1362,16 +1372,14 @@ bool cFileNameList::Load(const char *Directory, bool DirsOnly) struct dirent *e; if (d.Ok()) { while ((e = d.Next()) != NULL) { - if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..")) { - if (DirsOnly) { - struct stat ds; - if (stat(AddDirectory(Directory, e->d_name), &ds) == 0) { - if (!S_ISDIR(ds.st_mode)) - continue; - } + if (DirsOnly) { + struct stat ds; + if (stat(AddDirectory(Directory, e->d_name), &ds) == 0) { + if (!S_ISDIR(ds.st_mode)) + continue; } - Append(strdup(e->d_name)); } + Append(strdup(e->d_name)); } Sort(); return true; |