diff --git a/src/easylogging++.cc b/src/easylogging++.cc index 4a8d92731..e2c6438fd 100644 --- a/src/easylogging++.cc +++ b/src/easylogging++.cc @@ -745,6 +745,13 @@ base::type::fstream_t* File::newFileStream(const std::string& filename) { #endif // defined(ELPP_UNICODE) if (fs->is_open()) { fs->flush(); +#if defined(ELPP_STRICT_PERMISSIONS) + if (filename != "/dev/null" && filename != "nul") { + fs::permissions(filename, + fs::perms::owner_read | fs::perms::owner_write | fs::perms::group_read, + fs::perm_options::replace); + } +#endif } else { base::utils::safeDelete(fs); ELPP_INTERNAL_ERROR("Bad file [" << filename << "]", true); diff --git a/src/easylogging++.h b/src/easylogging++.h index 6e81edfbc..d95ecc627 100644 --- a/src/easylogging++.h +++ b/src/easylogging++.h @@ -461,6 +461,38 @@ ELPP_INTERNAL_DEBUGGING_OUT_INFO << ELPP_INTERNAL_DEBUGGING_MSG(internalInfoStre // For logging wxWidgets based classes & templates # include #endif // defined(ELPP_WXWIDGETS_LOGGING) +#if defined(ELPP_STRICT_PERMISSIONS) +// Need to check for Boost first because Mojave *has* std::filesystem, +// but won't let you use it. +#ifdef __APPLE__ +#include +#endif + +#if defined(__APPLE__) && __MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_15 +#if __has_include() +#include +namespace fs = boost::filesystem; +#else +#include +namespace fs = std::filesystem; +#endif +#else +// For non-Apple systems, prefer std::filesystem +// Otherwise, older versions of boost cause failures. +#if __has_include() +#include +namespace fs = std::filesystem; +#elif __has_include() +#include +namespace fs = std::experimental; +#elif __has_include() +#include +namespace fs = boost::filesystem +#else +#pragma message "No filesystem library found." +#endif +#endif +#endif #if defined(ELPP_UTC_DATETIME) # define elpptime_r gmtime_r # define elpptime_s gmtime_s