feat(message): avoid spam on failed os_msg

also de-dupe the code
This commit is contained in:
Justin M. Keyes 2023-01-02 15:43:07 +01:00
parent f43de742e8
commit e8ab218716
2 changed files with 21 additions and 18 deletions

View File

@ -3003,31 +3003,36 @@ static int do_more_prompt(int typed_char)
} }
#if defined(MSWIN) #if defined(MSWIN)
void os_errmsg(char *str) /// Headless (no UI) error message handler.
static void do_msg(char *str, bool errmsg)
{ {
static bool did_err = false;
assert(str != NULL); assert(str != NULL);
wchar_t *utf16str; wchar_t *utf16str;
int r = utf8_to_utf16(str, -1, &utf16str); int r = utf8_to_utf16(str, -1, &utf16str);
if (r != 0) { if (r != 0 && !did_err) {
did_err = true;
fprintf(stderr, "utf8_to_utf16 failed: %d", r); fprintf(stderr, "utf8_to_utf16 failed: %d", r);
} else { ELOG("utf8_to_utf16 failed: %d", r);
fwprintf(stderr, L"%ls", utf16str); } else if (r == 0) {
if (errmsg) {
fwprintf(stderr, L"%ls", utf16str);
} else {
wprintf(L"%ls", utf16str);
}
xfree(utf16str); xfree(utf16str);
} }
} }
/// Give a message. To be used when the UI is not initialized yet. void os_errmsg(char *str)
{
do_msg(str, true);
}
/// Headless (no UI) message handler.
void os_msg(char *str) void os_msg(char *str)
{ {
assert(str != NULL); do_msg(str, false);
wchar_t *utf16str;
int r = utf8_to_utf16(str, -1, &utf16str);
if (r != 0) {
fprintf(stderr, "utf8_to_utf16 failed: %d", r);
} else {
wprintf(L"%ls", utf16str);
xfree(utf16str);
}
} }
#endif // MSWIN #endif // MSWIN

View File

@ -245,12 +245,10 @@ enum { FOLD_TEXT_LEN = 51, }; //!< buffer size for get_foldtext()
/// plus six following composing characters of three bytes each. /// plus six following composing characters of three bytes each.
#define MB_MAXBYTES 21 #define MB_MAXBYTES 21
// This has to go after the include of proto.h, as proto/gui.pro declares
// functions of these names. The declarations would break if the defines had
// been seen at that stage. But it must be before globals.h, where error_ga
// is declared.
#ifndef MSWIN #ifndef MSWIN
/// Headless (no UI) error message handler.
# define os_errmsg(str) fprintf(stderr, "%s", (str)) # define os_errmsg(str) fprintf(stderr, "%s", (str))
/// Headless (no UI) message handler.
# define os_msg(str) printf("%s", (str)) # define os_msg(str) printf("%s", (str))
#endif #endif