From ea5d0136dcccf05b81f8f09171b7a42ed707beac Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 24 Sep 2022 17:47:53 +0000 Subject: [PATCH] Pass std::span to msgbox_warning --- common/arch/cocoa/messagebox.mm | 4 ++-- common/arch/win32/messagebox.cpp | 4 ++-- common/include/dxxerror.h | 3 ++- common/include/messagebox.h | 4 +++- common/misc/error.cpp | 22 +++++++++++----------- similar/editor/med.cpp | 7 +++---- 6 files changed, 23 insertions(+), 21 deletions(-) diff --git a/common/arch/cocoa/messagebox.mm b/common/arch/cocoa/messagebox.mm index b85c4a851..3a6f9d2da 100644 --- a/common/arch/cocoa/messagebox.mm +++ b/common/arch/cocoa/messagebox.mm @@ -33,9 +33,9 @@ void display_cocoa_alert(const char *message, int error) [pool drain]; } -void msgbox_warning(const char *message) +void msgbox_warning(const std::span message) { - display_cocoa_alert(message, 0); + display_cocoa_alert(message.data(), 0); } void msgbox_error(const char *message) diff --git a/common/arch/win32/messagebox.cpp b/common/arch/win32/messagebox.cpp index 16004cb01..465eb8fc4 100644 --- a/common/arch/win32/messagebox.cpp +++ b/common/arch/win32/messagebox.cpp @@ -46,9 +46,9 @@ static void display_win32_alert(const char *message, int error) gr_toggle_fullscreen(); } -void msgbox_warning(const char *message) +void msgbox_warning(const std::span message) { - display_win32_alert(message, 0); + display_win32_alert(message.data(), 0); } void msgbox_error(const char *message) diff --git a/common/include/dxxerror.h b/common/include/dxxerror.h index d545de955..dc4de3ad4 100644 --- a/common/include/dxxerror.h +++ b/common/include/dxxerror.h @@ -28,6 +28,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #include #include #include +#include #include "dsx-ns.h" #include "fmtcheck.h" @@ -37,7 +38,7 @@ void Warning_puts(const char *str) __attribute_nonnull(); void Warning(const char *fmt,...) __attribute_format_printf(1, 2); //print out warning message to user #define Warning(F,...) dxx_call_printf_checked(Warning,Warning_puts,(),(F),##__VA_ARGS__) #if DXX_USE_EDITOR -void set_warn_func(void (*f)(const char *s));//specifies the function to call with warning messages +void set_warn_func(void (*f)(std::span s)); //specifies the function to call with warning messages #if !(defined(WIN32) || defined(__APPLE__) || defined(__MACH__)) void clear_warn_func();//say this function no longer valid #endif diff --git a/common/include/messagebox.h b/common/include/messagebox.h index 962e314cd..147f8e333 100644 --- a/common/include/messagebox.h +++ b/common/include/messagebox.h @@ -14,11 +14,13 @@ #pragma once +#include + namespace dcx { #if defined(WIN32) || defined(__APPLE__) || defined(__MACH__) // Display a warning in a messagebox -extern void msgbox_warning(const char *message); +void msgbox_warning(std::span message); // Display an error in a messagebox extern void msgbox_error(const char *message); diff --git a/common/misc/error.cpp b/common/misc/error.cpp index 683ed4bf4..7cdb58e31 100644 --- a/common/misc/error.cpp +++ b/common/misc/error.cpp @@ -37,14 +37,14 @@ namespace dcx { #define MAX_MSG_LEN 2048 #if !DXX_USE_EDITOR || (!(defined(WIN32) || defined(__APPLE__) || defined(__MACH__))) -static void warn_printf(const char *s) +static void warn_printf(const std::span s) { - con_puts(CON_URGENT,s); + con_puts(CON_URGENT, s.data()); } #endif #if DXX_USE_EDITOR -static void (*warn_func)(const char *s) = +static void (*warn_func)(std::span s) = #if defined(WIN32) || defined(__APPLE__) || defined(__MACH__) msgbox_warning #else @@ -53,7 +53,7 @@ static void (*warn_func)(const char *s) = ; //provides a function to call with warning messages -void set_warn_func(void (*f)(const char *s)) +void set_warn_func(void (*f)(std::span s)) { warn_func = f; } @@ -136,9 +136,9 @@ void Warning_puts(const char *str) if (warn == NULL) return; #endif - char warn_message[MAX_MSG_LEN]; - snprintf(warn_message, sizeof(warn_message), "Warning: %s", str); - (*warn)(warn_message); + std::array warn_message; + const auto written = snprintf(std::data(warn_message), std::size(warn_message), "Warning: %s", str); + (*warn)(std::span(warn_message.data(), written)); } //print out warning message to user @@ -152,14 +152,14 @@ void (Warning)(const char *fmt,...) return; #endif - char warn_message[MAX_MSG_LEN]; - strcpy(warn_message,"Warning: "); + std::array warn_message; + strcpy(warn_message.data(), "Warning: "); va_start(arglist,fmt); - vsnprintf(warn_message+9,sizeof(warn_message)-9,fmt,arglist); + const auto written = vsnprintf(std::next(warn_message.begin(), 9), std::size(warn_message) - 9, fmt, arglist); va_end(arglist); - (*warn)(warn_message); + (*warn)(std::span(warn_message.data(), written + 9)); } } diff --git a/similar/editor/med.cpp b/similar/editor/med.cpp index 3c76370f4..ead9e59fa 100644 --- a/similar/editor/med.cpp +++ b/similar/editor/med.cpp @@ -102,7 +102,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. #define COMPRESS_INTERVAL 5 // seconds -static void med_show_warning(const char *s); +static void med_show_warning(std::span s); //char *undo_status[128]; @@ -823,14 +823,13 @@ void close_editor_screen() } -static void med_show_warning(const char *s) +static void med_show_warning(std::span s) { grs_canvas &save_canv = *grd_curcanv; //gr_pal_fade_in(grd_curscreen->pal); //in case palette is blacked - ui_messagebox(-2,-2,1,s,"OK"); - + ui_messagebox(-2, -2, 1, s.data(), "OK"); gr_set_current_canvas(save_canv); }