From 79620980ea3880f6512a35b9d688a60a02ff8b98 Mon Sep 17 00:00:00 2001 From: Dominick Allen Date: Sat, 5 Oct 2024 08:33:39 -0500 Subject: Formatting changes. Refactoring out detail::CopyMove from Result. --- source/fud_assert.cpp | 45 ++++++++++++++++++++++++++++++++++++--------- source/libfud.cpp | 4 ++-- 2 files changed, 38 insertions(+), 11 deletions(-) (limited to 'source') diff --git a/source/fud_assert.cpp b/source/fud_assert.cpp index f3358df..9c2ec77 100644 --- a/source/fud_assert.cpp +++ b/source/fud_assert.cpp @@ -1,26 +1,53 @@ #include "fud_assert.hpp" #include "fud_array.hpp" +#include "fud_string_view.hpp" +#include #include -#include #include +#include namespace fud { void assertFail(const char* assertion, const char* file, unsigned int line, const char* function) noexcept(false) { - constexpr size_t ASSERT_MSG_SIZE = 1024; + constexpr size_t MAX_FILE_CHARS = 256; + constexpr size_t MAX_FUNCTION_CHARS = 256; + constexpr size_t BITS_PER_OCTAL = 3; + constexpr auto MAX_LINE_CHARS = BITS_PER_OCTAL * sizeof(decltype(line)) + 3; + constexpr size_t MAX_ASSERT_CHARS = 512 - MAX_LINE_CHARS; + constexpr size_t ASSERT_MSG_SIZE = MAX_FILE_CHARS + MAX_LINE_CHARS + MAX_FUNCTION_CHARS + MAX_ASSERT_CHARS; + + auto lengthResult = cStringLength(file); + size_t filenameLength = 0; + auto badLength = lengthResult < 1 || lengthResult > SSIZE_MAX; + if (!badLength) { + filenameLength = static_cast(lengthResult); + } + const char* filename = nullptr; + if (badLength) { + constexpr const char invalidFile[] = "INVALID FILE"; + static_assert(sizeof(invalidFile) < MAX_FILE_CHARS); + filenameLength = sizeof(invalidFile); + filename = invalidFile; + } else if (filenameLength > MAX_LINE_CHARS) { + filename = file + filenameLength - MAX_LINE_CHARS; + filenameLength = MAX_FILE_CHARS; + } + Array buffer{}; + // clang-format off static_cast(std::format_to_n( - buffer.data(), - buffer.size() - 1U, - "{}:{}: {}:Assertion `{}` failed", - file, + buffer.data(), buffer.size() - 1U, + "{:.{}s}:{}: {:.{}s}: Assertion `{:.{}s}` failed", + filename, filenameLength, line, - function, - assertion)); + function, MAX_FUNCTION_CHARS, + assertion, MAX_ASSERT_CHARS)); + // clang-format on + throw std::runtime_error(buffer.data()); } -} +} // namespace fud diff --git a/source/libfud.cpp b/source/libfud.cpp index 252eae0..8c962ba 100644 --- a/source/libfud.cpp +++ b/source/libfud.cpp @@ -18,7 +18,7 @@ #include "libfud.hpp" #include "fud_assert.hpp" -#include "git_version.hpp" +#include "fud_version.hpp" #include @@ -27,10 +27,10 @@ namespace fud { FUD fud() { FUD fudInfo{}; + static_assert(sizeof(GitHash) >= sizeof(fudInfo.revision)); fudInfo.major = FudVersionMajor; fudInfo.minor = FudVersionMinor; fudInfo.patch = FudVersionPatch; - static_assert(sizeof(GitHash) >= sizeof(fudInfo.revision)); auto copyResult = copyMem(fudInfo.revision.data(), fudInfo.revision.size(), GitHash, fudInfo.revision.size() - 1); fudAssert(copyResult == FudStatus::Success); fudInfo.revision[fudInfo.revision.size() - 1] = '\0'; -- cgit v1.2.3