General: Make ignoring a discarded return value an error
Allows our CI to catch more potential bugs. This also removes the [[nodiscard]] attribute of IOFile's Open member function. There are cases where a file may want to be opened, but have the status of it checked at a later time.
This commit is contained in:
parent
7dcf4c0018
commit
26547d3e3b
3 changed files with 17 additions and 6 deletions
|
@ -32,7 +32,6 @@ if (MSVC)
|
||||||
# /Zc:inline - Let codegen omit inline functions in object files
|
# /Zc:inline - Let codegen omit inline functions in object files
|
||||||
# /Zc:throwingNew - Let codegen assume `operator new` (without std::nothrow) will never return null
|
# /Zc:throwingNew - Let codegen assume `operator new` (without std::nothrow) will never return null
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
/W3
|
|
||||||
/MP
|
/MP
|
||||||
/Zi
|
/Zi
|
||||||
/Zo
|
/Zo
|
||||||
|
@ -43,6 +42,10 @@ if (MSVC)
|
||||||
/Zc:externConstexpr
|
/Zc:externConstexpr
|
||||||
/Zc:inline
|
/Zc:inline
|
||||||
/Zc:throwingNew
|
/Zc:throwingNew
|
||||||
|
|
||||||
|
# Warnings
|
||||||
|
/W3
|
||||||
|
/we4834 # Discarding return value of function with 'nodiscard' attribute
|
||||||
)
|
)
|
||||||
|
|
||||||
# /GS- - No stack buffer overflow checks
|
# /GS- - No stack buffer overflow checks
|
||||||
|
@ -56,6 +59,7 @@ else()
|
||||||
-Werror=implicit-fallthrough
|
-Werror=implicit-fallthrough
|
||||||
-Werror=missing-declarations
|
-Werror=missing-declarations
|
||||||
-Werror=reorder
|
-Werror=reorder
|
||||||
|
-Werror=unused-result
|
||||||
-Wextra
|
-Wextra
|
||||||
-Wmissing-declarations
|
-Wmissing-declarations
|
||||||
-Wno-attributes
|
-Wno-attributes
|
||||||
|
|
|
@ -232,7 +232,7 @@ public:
|
||||||
|
|
||||||
void Swap(IOFile& other) noexcept;
|
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();
|
bool Close();
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
|
@ -16,16 +16,23 @@
|
||||||
// Call directly after the command or use the error num.
|
// Call directly after the command or use the error num.
|
||||||
// This function might change the error code.
|
// This function might change the error code.
|
||||||
std::string GetLastErrorMsg() {
|
std::string GetLastErrorMsg() {
|
||||||
static const std::size_t buff_size = 255;
|
static constexpr std::size_t buff_size = 255;
|
||||||
char err_str[buff_size];
|
char err_str[buff_size];
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(),
|
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(),
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err_str, buff_size, nullptr);
|
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
|
#else
|
||||||
// Thread safe (XSI-compliant)
|
// 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
|
#endif
|
||||||
|
|
||||||
return std::string(err_str, buff_size);
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue