From 6e69f07a5f8faa800ecf92d6c1b4b1dd4ddeb0fa Mon Sep 17 00:00:00 2001 From: David Griffith Date: Thu, 27 Apr 2023 20:19:22 -0700 Subject: [PATCH] Fixed segfault when xfrotz encounters a fatal error. When the Z-machine segfaults, don't segfault the emulator. --- src/x11/x_init.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/x11/x_init.c b/src/x11/x_init.c index 74f5bdf..a75559a 100644 --- a/src/x11/x_init.c +++ b/src/x11/x_init.c @@ -49,10 +49,10 @@ char *x_name; static void print_c_string(const char *s) { - zchar c; + int i; - while ((c = *s++) != 0) - os_display_char(c); + for (i = 0; i <= strlen(s); i++) + os_display_char(translate_to_zscii(s[i])); } /* print_c_string */ @@ -65,13 +65,21 @@ static void print_c_string(const char *s) void os_fatal(const char *s, ...) { va_list m; + char errorstring[81]; - fprintf(stderr, "\nFatal Error: "); + os_beep(BEEP_HIGH); + fprintf(stderr, "\nFatal error: "); va_start(m, s); vfprintf(stderr, s, m); - print_c_string(s); + vsnprintf(errorstring, sizeof(char) * 80, s, m); va_end(m); - fprintf(stderr, "\n"); + fprintf(stderr, "\n\n"); + + os_set_text_style(BOLDFACE_STYLE); + print_c_string("Fatal error: "); + os_set_text_style(NORMAL_STYLE); + print_c_string(errorstring); + new_line(); if (f_setup.ignore_errors) { os_display_string((zchar *) "Continuing anyway..."); @@ -79,8 +87,7 @@ void os_fatal(const char *s, ...) new_line(); } - - + os_reset_screen(); os_quit(EXIT_FAILURE); } /* os_fatal */ -- 2.34.1