Browse Source
Merge pull request #4868 from lioncash/discard-error
General: Make ignoring a discarded return value an error
pull/15/merge
bunnei
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with
21 additions and
6 deletions
-
src/CMakeLists.txt
-
src/common/file_util.h
-
src/common/misc.cpp
|
|
|
@ -32,7 +32,6 @@ if (MSVC) |
|
|
|
# /Zc:inline - Let codegen omit inline functions in object files |
|
|
|
# /Zc:throwingNew - Let codegen assume `operator new` (without std::nothrow) will never return null |
|
|
|
add_compile_options( |
|
|
|
/W3 |
|
|
|
/MP |
|
|
|
/Zi |
|
|
|
/Zo |
|
|
|
@ -43,6 +42,14 @@ if (MSVC) |
|
|
|
/Zc:externConstexpr |
|
|
|
/Zc:inline |
|
|
|
/Zc:throwingNew |
|
|
|
|
|
|
|
# Warnings |
|
|
|
/W3 |
|
|
|
/we4547 # 'operator' : operator before comma has no effect; expected operator with side-effect |
|
|
|
/we4548 # Expression before comma has no effect; expected expression with side-effect |
|
|
|
/we4549 # 'operator1': operator before comma has no effect; did you intend 'operator2'? |
|
|
|
/we4555 # Expression has no effect; expected expression with side-effect |
|
|
|
/we4834 # Discarding return value of function with 'nodiscard' attribute |
|
|
|
) |
|
|
|
|
|
|
|
# /GS- - No stack buffer overflow checks |
|
|
|
@ -56,6 +63,7 @@ else() |
|
|
|
-Werror=implicit-fallthrough |
|
|
|
-Werror=missing-declarations |
|
|
|
-Werror=reorder |
|
|
|
-Werror=unused-result |
|
|
|
-Wextra |
|
|
|
-Wmissing-declarations |
|
|
|
-Wno-attributes |
|
|
|
|
|
|
|
@ -232,7 +232,7 @@ public: |
|
|
|
|
|
|
|
void Swap(IOFile& other) noexcept; |
|
|
|
|
|
|
|
[[nodiscard]] bool Open(const std::string& filename, const char openmode[], int flags = 0); |
|
|
|
bool Open(const std::string& filename, const char openmode[], int flags = 0); |
|
|
|
bool Close(); |
|
|
|
|
|
|
|
template <typename T> |
|
|
|
|
|
|
|
@ -16,16 +16,23 @@ |
|
|
|
// Call directly after the command or use the error num.
|
|
|
|
// This function might change the error code.
|
|
|
|
std::string GetLastErrorMsg() { |
|
|
|
static const std::size_t buff_size = 255; |
|
|
|
static constexpr std::size_t buff_size = 255; |
|
|
|
char err_str[buff_size]; |
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(), |
|
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err_str, buff_size, nullptr); |
|
|
|
return std::string(err_str, buff_size); |
|
|
|
#elif defined(__GLIBC__) && (_GNU_SOURCE || (_POSIX_C_SOURCE < 200112L && _XOPEN_SOURCE < 600))
|
|
|
|
// Thread safe (GNU-specific)
|
|
|
|
const char* str = strerror_r(errno, err_str, buff_size); |
|
|
|
return std::string(str); |
|
|
|
#else
|
|
|
|
// Thread safe (XSI-compliant)
|
|
|
|
strerror_r(errno, err_str, buff_size); |
|
|
|
const int success = strerror_r(errno, err_str, buff_size); |
|
|
|
if (success != 0) { |
|
|
|
return {}; |
|
|
|
} |
|
|
|
return std::string(err_str); |
|
|
|
#endif
|
|
|
|
|
|
|
|
return std::string(err_str, buff_size); |
|
|
|
} |