From 8225d3758f31f63f420bef783db60b2a7dd1b31d Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 7 Feb 2015 16:08:13 +0100 Subject: [PATCH] Modified EntriesOnSameFileSystem(), so that it returns 'true' if either of the given; changed handling the 'error' variable in cDirCopier --- CONTRIBUTORS | 1 + HISTORY | 5 +++++ recording.c | 6 +++--- tools.c | 4 ++-- tools.h | 5 ++++- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 671f0432..0deeb22a 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2420,6 +2420,7 @@ Christoph Haubrich for reporting a bug in setting an empty recording name or folder to a blank in the "Edit recording" menu for suggesting to add a confirmation before renaming a recording to its folder name + for reporting a problem with data loss in case renaming a recording fails Pekka Mauno for fixing cSchedule::GetFollowingEvent() in case there is currently no present diff --git a/HISTORY b/HISTORY index 6dea3ad0..6b4ea1c2 100644 --- a/HISTORY +++ b/HISTORY @@ -8515,3 +8515,8 @@ Video Disk Recorder Revision History menu (reported by Christoph Haubrich). - Added a confirmation before renaming a recording to its folder name (suggested by Christoph Haubrich). +- Modified EntriesOnSameFileSystem(), so that it returns 'true' if either of the given + files doesn't exist (to avoid any actions that might be triggered if files are on + different file system), and changed handling the 'error' variable in cDirCopier, so + that it is initialized to 'true' and will only be set to 'false' if the entire + copy process has been successful (problem reported by Christoph Haubrich). diff --git a/recording.c b/recording.c index 271f6475..337d4a88 100644 --- a/recording.c +++ b/recording.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.c 3.26 2015/02/06 15:13:59 kls Exp $ + * $Id: recording.c 3.27 2015/02/07 16:07:22 kls Exp $ */ #include "recording.h" @@ -1676,7 +1676,7 @@ cDirCopier::cDirCopier(const char *DirNameSrc, const char *DirNameDst) { dirNameSrc = DirNameSrc; dirNameDst = DirNameDst; - error = false; + error = true; // prepare for the worst! suspensionLogged = false; } @@ -1790,6 +1790,7 @@ void cDirCopier::Action(void) else { // We're done: dsyslog("done copying directory '%s' to '%s'", *dirNameSrc, *dirNameDst); + error = false; return; } } @@ -1802,7 +1803,6 @@ void cDirCopier::Action(void) } else esyslog("ERROR: can't access '%s'", *dirNameDst); - error = true; } void cDirCopier::Stop(void) diff --git a/tools.c b/tools.c index 332fce42..5418f5e2 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 3.3 2014/03/22 14:22:55 kls Exp $ + * $Id: tools.c 3.4 2015/02/07 16:07:22 kls Exp $ */ #include "tools.h" @@ -404,7 +404,7 @@ bool EntriesOnSameFileSystem(const char *File1, const char *File2) } else LOG_ERROR_STR(File1); - return false; + return true; // we only return false if both files actually exist and are in different file systems! } int FreeDiskSpaceMB(const char *Directory, int *UsedMB) diff --git a/tools.h b/tools.h index 920a1d11..0987234b 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 3.6 2015/01/14 09:09:06 kls Exp $ + * $Id: tools.h 3.7 2015/02/07 16:07:22 kls Exp $ */ #ifndef __TOOLS_H @@ -234,6 +234,9 @@ cString dtoa(double d, const char *Format = "%f"); cString itoa(int n); cString AddDirectory(const char *DirName, const char *FileName); bool EntriesOnSameFileSystem(const char *File1, const char *File2); + ///< Checks whether the given files are on the same file system. If either of the + ///< files doesn't exist, this function returns *true* to avoid any actions that might be + ///< triggered if files are on different file system. int FreeDiskSpaceMB(const char *Directory, int *UsedMB = NULL); bool DirectoryOk(const char *DirName, bool LogErrors = false); bool MakeDirs(const char *FileName, bool IsDirectory = false);