summaryrefslogtreecommitdiff
path: root/shared/file_traverser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'shared/file_traverser.cpp')
-rw-r--r--shared/file_traverser.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/shared/file_traverser.cpp b/shared/file_traverser.cpp
index f2b531e9..66242fa2 100644
--- a/shared/file_traverser.cpp
+++ b/shared/file_traverser.cpp
@@ -1,7 +1,7 @@
// **************************************************************************
// * This file is part of the FreeFileSync project. It is distributed under *
// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *
-// * Copyright (C) 2008-2010 ZenJu (zhnmju123 AT gmx.de) *
+// * Copyright (C) 2008-2011 ZenJu (zhnmju123 AT gmx.de) *
// **************************************************************************
//
#include "file_traverser.h"
@@ -170,7 +170,13 @@ private:
{
details.targetPath = getSymlinkRawTargetString(fullName); //throw (FileError)
}
- catch (FileError&) {}
+ catch (FileError& e)
+ {
+ (void)e;
+#ifndef NDEBUG //show broken symlink / access errors in debug build!
+ sink.onError(e.msg());
+#endif
+ }
details.lastWriteTimeRaw = getWin32TimeInformation(fileMetaData.ftLastWriteTime);
details.dirLink = (fileMetaData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; //directory symlinks have this flag on Windows
@@ -225,13 +231,12 @@ private:
&fileMetaData)); // pointer to structure for data on found file
const DWORD lastError = ::GetLastError();
- if (lastError == ERROR_NO_MORE_FILES)
- return; //everything okay
-
- //else: we have a problem... report it:
- const wxString errorMessage = wxString(_("Error traversing directory:")) + wxT("\n\"") + zToWx(directory) + wxT("\"") ;
- sink.onError(errorMessage + wxT("\n\n") + ffs3::getLastErrorFormatted(lastError));
- return;
+ if (lastError != ERROR_NO_MORE_FILES) //this is fine
+ {
+ //else we have a problem... report it:
+ const wxString errorMessage = wxString(_("Error traversing directory:")) + wxT("\n\"") + zToWx(directory) + wxT("\"") ;
+ sink.onError(errorMessage + wxT("\n\n") + ffs3::getLastErrorFormatted(lastError));
+ }
#elif defined FFS_LINUX
DIR* dirObj = ::opendir(directory.c_str()); //directory must NOT end with path separator, except "/"
@@ -301,7 +306,12 @@ private:
{
details.targetPath = getSymlinkRawTargetString(fullName); //throw (FileError)
}
- catch (FileError&) {}
+ catch (FileError& e)
+ {
+#ifndef NDEBUG //show broken symlink / access errors in debug build!
+ sink.onError(e.msg());
+#endif
+ }
details.lastWriteTimeRaw = fileInfo.st_mtime; //UTC time(ANSI C format); unit: 1 second
details.dirLink = ::stat(fullName.c_str(), &fileInfo) == 0 && S_ISDIR(fileInfo.st_mode); //S_ISDIR and S_ISLNK are mutually exclusive on Linux => need to follow link
bgstack15