diff --git a/common/include/console.h b/common/include/console.h index edd04071c..9813d78ef 100644 --- a/common/include/console.h +++ b/common/include/console.h @@ -8,6 +8,7 @@ #pragma once +#include #include #include #include @@ -36,8 +37,8 @@ constexpr std::integral_constant CON_LINE_LENGTH{}; struct console_buffer { - char line[CON_LINE_LENGTH]; int priority; + std::array line; }; /* Define to 1 to capture the __FILE__, __LINE__ of callers to diff --git a/common/main/d_srcloc.h b/common/main/d_srcloc.h index d0c49965c..40eb9506f 100644 --- a/common/main/d_srcloc.h +++ b/common/main/d_srcloc.h @@ -29,7 +29,7 @@ public: template using scratch_buffer = std::false_type; template - static std::span insert_location_leader(char (&buffer)[N]) + static std::span insert_location_leader(std::array &buffer) { return buffer; } @@ -63,9 +63,9 @@ public: * place further text. */ template - std::span insert_location_leader(char (&buffer)[N]) const + std::span insert_location_leader(std::array &buffer) const { - const auto written = std::snprintf(buffer, sizeof(buffer), "%s:%u: ", file, line); + const auto written = std::snprintf(buffer.data(), buffer.size(), "%s:%u: ", file, line); return std::span(buffer).subspan(written); } /* Return a span describing the written area that the caller can read diff --git a/similar/main/console.cpp b/similar/main/console.cpp index fb03e43a8..27a959c29 100644 --- a/similar/main/console.cpp +++ b/similar/main/console.cpp @@ -85,7 +85,7 @@ static void con_add_buffer_line(const con_priority priority, const char *const b console_buffer &c = con_buffer.back(); c.priority=priority; - size_t copy = std::min(len, CON_LINE_LENGTH - 1); + size_t copy = std::min(len, std::size(c.line) - 1); c.line[copy] = 0; memcpy(&c.line,buffer, copy); } @@ -95,15 +95,15 @@ static void con_add_buffer_line(const con_priority priority, const char *const b void (con_printf)(const con_priority_wrapper priority, const char *const fmt, ...) { va_list arglist; - char buffer[CON_LINE_LENGTH]; if (priority <= CGameArg.DbgVerbose) { va_start (arglist, fmt); + std::array buffer; auto &&leader = priority.insert_location_leader(buffer); const std::size_t len = std::max(vsnprintf(leader.data(), leader.size(), fmt, arglist), 0); va_end (arglist); - con_force_puts(priority, buffer, len); + con_force_puts(priority, buffer.data(), len); } } @@ -318,9 +318,9 @@ static void con_draw(grs_canvas &canvas) { auto &b = con_buffer[CON_LINES_MAX - 1 - i]; gr_set_fontcolor(canvas, get_console_color_by_priority(b.priority), -1); - const auto &&[w, h] = gr_get_string_size(game_font, b.line); + const auto &&[w, h] = gr_get_string_size(game_font, b.line.data()); y -= h + fspacy1; - gr_string(canvas, game_font, fspacx1, y, b.line, w, h); + gr_string(canvas, game_font, fspacx1, y, b.line.data(), w, h); i++; if (y<=0 || CON_LINES_MAX-1-i <= 0 || i < 0)