diff options
Diffstat (limited to 'lib/status_handler_impl.h')
-rw-r--r-- | lib/status_handler_impl.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/status_handler_impl.h b/lib/status_handler_impl.h new file mode 100644 index 00000000..7141d75c --- /dev/null +++ b/lib/status_handler_impl.h @@ -0,0 +1,34 @@ +// ************************************************************************** +// * 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) ZenJu (zhnmju123 AT gmx DOT de) - All Rights Reserved * +// ************************************************************************** + +#ifndef STATUSHANDLER_IMPL_H_INCLUDED +#define STATUSHANDLER_IMPL_H_INCLUDED + +#include <zen/file_error.h> +#include "status_handler.h" + +template <typename Function> inline +bool tryReportingError(Function cmd, ProcessCallback& handler) //return "true" on success, "false" if error was ignored +{ + for (;;) + try + { + cmd(); //throw FileError + return true; + } + catch (zen::FileError& error) + { + switch (handler.reportError(error.toString())) //may throw! + { + case ProcessCallback::IGNORE_ERROR: + return false; + case ProcessCallback::RETRY: + break; //continue with loop + } + } +} + +#endif //STATUSHANDLER_IMPL_H_INCLUDED |