// error_handling.hpp --------------------------------------------------------------------// // Copyright 2002-2009, 2014 Beman Dawes // Copyright 2019 Andrey Semashev // Distributed under the Boost Software License, Version 1.0. // See http://www.boost.org/LICENSE_1_0.txt // See library home page at http://www.boost.org/libs/filesystem //--------------------------------------------------------------------------------------// #ifndef BOOST_FILESYSTEM3_SRC_ERROR_HANDLING_HPP_ #define BOOST_FILESYSTEM3_SRC_ERROR_HANDLING_HPP_ #include #include #include #include #if defined(BOOST_WINDOWS_API) #include #include #include #endif namespace boost { namespace filesystem { #if defined(BOOST_POSIX_API) typedef int err_t; // POSIX uses a 0 return to indicate success #define BOOST_ERRNO errno #define BOOST_ERROR_FILE_NOT_FOUND ENOENT #define BOOST_ERROR_ALREADY_EXISTS EEXIST #define BOOST_ERROR_NOT_SUPPORTED ENOSYS #else typedef boost::winapi::DWORD_ err_t; // Windows uses a non-0 return to indicate success #define BOOST_ERRNO boost::winapi::GetLastError() #define BOOST_ERROR_FILE_NOT_FOUND boost::winapi::ERROR_FILE_NOT_FOUND_ #define BOOST_ERROR_ALREADY_EXISTS boost::winapi::ERROR_ALREADY_EXISTS_ #define BOOST_ERROR_NOT_SUPPORTED boost::winapi::ERROR_NOT_SUPPORTED_ #endif // error handling helpers ----------------------------------------------------------// // Implemented in exception.cpp void emit_error(err_t error_num, system::error_code* ec, const char* message); void emit_error(err_t error_num, const path& p, system::error_code* ec, const char* message); void emit_error(err_t error_num, const path& p1, const path& p2, system::error_code* ec, const char* message); inline bool error(err_t error_num, system::error_code* ec, const char* message) { if (BOOST_LIKELY(!error_num)) { if (ec) ec->clear(); return false; } else { // error filesystem::emit_error(error_num, ec, message); return true; } } inline bool error(err_t error_num, const path& p, system::error_code* ec, const char* message) { if (BOOST_LIKELY(!error_num)) { if (ec) ec->clear(); return false; } else { // error filesystem::emit_error(error_num, p, ec, message); return true; } } inline bool error(err_t error_num, const path& p1, const path& p2, system::error_code* ec, const char* message) { if (BOOST_LIKELY(!error_num)) { if (ec) ec->clear(); return false; } else { // error filesystem::emit_error(error_num, p1, p2, ec, message); return true; } } } // namespace filesystem } // namespace boost #endif // BOOST_FILESYSTEM3_SRC_ERROR_HANDLING_HPP_